From 4261efc41b4058654105a0dfcfbfea5471cf14a0 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Wed, 23 Sep 2026 13:09:57 +0100 Subject: [PATCH] feat(webui): add limit bars, forecasts, events, exports and URL state The Usage tab shows a bar for each configured limit. It turns amber at 80% and red at 100%. The tab also shows rejected requests per day, a projected month-end cost with budget headroom, and CSV export for users and groups. Names link to Charts with the matching scope. The Charts tab ranks models over the full 24h, 30d or 12mo window. A provider filter is applied on the server, and the ranking can be exported as CSV. A new Events tab lists recent failures, filtered by kind and user. The selected tab, filters and scope live in the URL hash. Polling stops while the page is hidden. Views show which replica answered, and a banner lists configuration warnings. CSV cells that start with a formula character are neutralised. Links sit outside the accordion buttons, so both controls keep their accessible names. admin_assets_gen.go is regenerated. Claude-Session: https://claude.ai/code/session_01V5jYJNxpDFdJkyyExpADrv --- admin_assets_gen.go | 16 +- webui/src/App.vue | 60 ++-- webui/src/assets/main.css | 25 ++ webui/src/components/ChartsView.vue | 86 +++++- webui/src/components/ConfigWarningsBanner.vue | 64 ++++ webui/src/components/CostForecastCard.vue | 75 +++++ webui/src/components/CsvExportButton.vue | 87 ++++++ webui/src/components/DataTable.vue | 27 +- webui/src/components/EventsView.vue | 137 +++++++++ webui/src/components/ProvidersView.vue | 97 +++++- webui/src/components/ScopeLink.vue | 69 +++++ webui/src/components/SearchInput.vue | 2 +- webui/src/components/UsageBar.vue | 73 +++++ webui/src/components/UsageTable.vue | 11 +- webui/src/components/UsageView.vue | 230 ++++++++++++-- .../ui/accordion/AccordionTrigger.vue | 18 +- webui/src/components/ui/alert/index.ts | 9 + webui/src/composables/useHashState.ts | 147 +++++++++ webui/src/composables/useNow.spec.ts | 105 +++++++ webui/src/composables/useNow.ts | 73 +++++ webui/src/composables/useSearchQuery.spec.ts | 44 +++ webui/src/composables/useSearchQuery.ts | 15 +- webui/src/composables/useTabHash.ts | 95 ++---- webui/src/lib/csv.spec.ts | 86 ++++++ webui/src/lib/csv.ts | 61 ++++ webui/src/lib/download.ts | 58 ++++ webui/src/lib/events-columns.ts | 101 ++++++ webui/src/lib/events-filter.spec.ts | 116 +++++++ webui/src/lib/events-filter.ts | 82 +++++ webui/src/lib/forecast.spec.ts | 107 +++++++ webui/src/lib/forecast.ts | 106 +++++++ webui/src/lib/hash-state.spec.ts | 153 ++++++++++ webui/src/lib/hash-state.ts | 135 ++++++++ webui/src/lib/model-filter.spec.ts | 38 +++ webui/src/lib/model-filter.ts | 15 + webui/src/lib/polling.spec.ts | 224 ++++++++++++++ webui/src/lib/polling.ts | 121 ++++++++ webui/src/lib/usage-bars.spec.ts | 122 ++++++++ webui/src/lib/usage-bars.ts | 131 ++++++++ webui/src/lib/usage-columns.spec.ts | 208 ++++++++++++- webui/src/lib/usage-columns.ts | 143 ++++++++- webui/src/lib/usage-csv.spec.ts | 120 ++++++++ webui/src/lib/usage-csv.ts | 145 +++++++++ webui/src/lib/usage-search.spec.ts | 1 + webui/src/stores/dashboard.spec.ts | 58 ++++ webui/src/stores/dashboard.ts | 26 +- webui/src/stores/events.spec.ts | 197 ++++++++++++ webui/src/stores/events.ts | 100 ++++++ webui/src/stores/history.spec.ts | 287 +++++++++++++++++- webui/src/stores/history.ts | 239 ++++++++++++--- webui/src/stores/nav.spec.ts | 86 ++++++ webui/src/stores/nav.ts | 78 +++++ webui/src/types/api.ts | 106 +++++++ 53 files changed, 4777 insertions(+), 238 deletions(-) create mode 100644 webui/src/components/ConfigWarningsBanner.vue create mode 100644 webui/src/components/CostForecastCard.vue create mode 100644 webui/src/components/CsvExportButton.vue create mode 100644 webui/src/components/EventsView.vue create mode 100644 webui/src/components/ScopeLink.vue create mode 100644 webui/src/components/UsageBar.vue create mode 100644 webui/src/composables/useHashState.ts create mode 100644 webui/src/composables/useNow.spec.ts create mode 100644 webui/src/composables/useNow.ts create mode 100644 webui/src/lib/csv.spec.ts create mode 100644 webui/src/lib/csv.ts create mode 100644 webui/src/lib/download.ts create mode 100644 webui/src/lib/events-columns.ts create mode 100644 webui/src/lib/events-filter.spec.ts create mode 100644 webui/src/lib/events-filter.ts create mode 100644 webui/src/lib/forecast.spec.ts create mode 100644 webui/src/lib/forecast.ts create mode 100644 webui/src/lib/hash-state.spec.ts create mode 100644 webui/src/lib/hash-state.ts create mode 100644 webui/src/lib/model-filter.spec.ts create mode 100644 webui/src/lib/model-filter.ts create mode 100644 webui/src/lib/polling.spec.ts create mode 100644 webui/src/lib/polling.ts create mode 100644 webui/src/lib/usage-bars.spec.ts create mode 100644 webui/src/lib/usage-bars.ts create mode 100644 webui/src/lib/usage-csv.spec.ts create mode 100644 webui/src/lib/usage-csv.ts create mode 100644 webui/src/stores/events.spec.ts create mode 100644 webui/src/stores/events.ts create mode 100644 webui/src/stores/nav.spec.ts create mode 100644 webui/src/stores/nav.ts diff --git a/admin_assets_gen.go b/admin_assets_gen.go index a7c24a0..42a8e76 100644 --- a/admin_assets_gen.go +++ b/admin_assets_gen.go @@ -1,6 +1,6 @@ // Code generated by webui/generate.mjs; DO NOT EDIT. // -// Source: webui/dist/ (vite build output), digest 046a73d9b3b3e724. +// Source: webui/dist/ (vite build output), digest 510347dc189942b2. // Regenerate via `make admin-ui` after any webui/ source change. // // Every asset body below is base64-encoded and decoded once at package-var @@ -34,28 +34,28 @@ func decodeAdminAsset(encoded string) []byte { // adminIndexHTML is GET /admin's response body (admin.go's serveAdminPage) — // the built Vue app's HTML shell. var adminIndexHTML = decodeAdminAsset( - "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPCEtLSBJbmxpbmUgZGF0YTogVVJJLCBub3QgYSBmaWxlIHVuZGVyIHB1YmxpYy86IGFkbWluLmdvJ3MgYXNzZXQgbWFwIG9ubHkKICAgICAgICAgZXZlciBob2xkcyBjb250ZW50LWhhc2hlZCBmaWxlcyB1bmRlciAvYWRtaW4vYXNzZXRzLyosIGFuZCB0aGUgYWRtaW4KICAgICAgICAgQ1NQJ3MgaW1nLXNyYyBhbGxvd3MgJ3NlbGYnIHBsdXMgZGF0YTogZm9yIGV4YWN0bHkgdGhpcyByZWFzb24g4oCUIG5vCiAgICAgICAgIGV4dHJhIHVuaGFzaGVkLWFzc2V0IHJvdXRlIGlzIG5lZWRlZCBmb3Igb25lIHNtYWxsIGljb24uIC0tPgogICAgPGxpbmsKICAgICAgcmVsPSJpY29uIgogICAgICB0eXBlPSJpbWFnZS9zdmcreG1sIgogICAgICBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyUzRSUzQ3JlY3Qgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyByeD0nNScgZmlsbD0nJTIzMDA3MmIyJy8lM0UlM0NwYXRoIGQ9J002IDE2LjUgMTAgOGwzIDYgMi0zLjUgMyA2JyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLXdpZHRoPScyJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiCiAgICAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+TExNIEdhdGV3YXkgLSBBZG1pbjwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LUJsLTJ1Uk9OLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9pbmRleC1ycl92RHg2Uy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgaWQ9ImFwcCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==", + "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPCEtLSBJbmxpbmUgZGF0YTogVVJJLCBub3QgYSBmaWxlIHVuZGVyIHB1YmxpYy86IGFkbWluLmdvJ3MgYXNzZXQgbWFwIG9ubHkKICAgICAgICAgZXZlciBob2xkcyBjb250ZW50LWhhc2hlZCBmaWxlcyB1bmRlciAvYWRtaW4vYXNzZXRzLyosIGFuZCB0aGUgYWRtaW4KICAgICAgICAgQ1NQJ3MgaW1nLXNyYyBhbGxvd3MgJ3NlbGYnIHBsdXMgZGF0YTogZm9yIGV4YWN0bHkgdGhpcyByZWFzb24g4oCUIG5vCiAgICAgICAgIGV4dHJhIHVuaGFzaGVkLWFzc2V0IHJvdXRlIGlzIG5lZWRlZCBmb3Igb25lIHNtYWxsIGljb24uIC0tPgogICAgPGxpbmsKICAgICAgcmVsPSJpY29uIgogICAgICB0eXBlPSJpbWFnZS9zdmcreG1sIgogICAgICBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyUzRSUzQ3JlY3Qgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyByeD0nNScgZmlsbD0nJTIzMDA3MmIyJy8lM0UlM0NwYXRoIGQ9J002IDE2LjUgMTAgOGwzIDYgMi0zLjUgMyA2JyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLXdpZHRoPScyJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiCiAgICAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+TExNIEdhdGV3YXkgLSBBZG1pbjwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LUFXTW96QVgxLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9pbmRleC1CU3NlZmk0aC5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgaWQ9ImFwcCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==", ) // adminAssets maps each hashed filename under /admin/assets/ (admin.go's // serveAdminAsset) to its content. var adminAssets = map[string]adminAsset{ - "ChartsView-CT7HOxPg.js": { + "ChartsView-BVLfOZnS.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0eyQgYXMgZSxBIGFzIHQsQXQgYXMgbixCIGFzIHIsQnQgYXMgaSxDIGFzIGEsQ3QgYXMgbyxEIGFzIHMsRHQgYXMgYyxFIGFzIGwsRXQgYXMgdSxGIGFzIGQsRnQgYXMgZixHIGFzIHAsSCBhcyBtLEh0IGFzIGgsSSBhcyBnLEl0IGFzIF8sSiBhcyB2LEsgYXMgeSxMIGFzIGIsTHQgYXMgeCxNIGFzIFMsTXQgYXMgQyxOIGFzIHcsTnQgYXMgVCxPIGFzIEUsT3QgYXMgRCxQIGFzIE8sUHQgYXMgayxRIGFzIGVlLFIgYXMgdGUsUnQgYXMgQSxTIGFzIG5lLFN0IGFzIGosVCBhcyByZSxUdCBhcyBNLFUgYXMgaWUsViBhcyBhZSxWdCBhcyBvZSxXIGFzIHNlLFggYXMgY2UsWSBhcyBsZSxaIGFzIHVlLF8gYXMgZGUsX3QgYXMgTixhIGFzIGZlLGF0IGFzIFAsYiBhcyBwZSxidCBhcyBtZSxjIGFzIGhlLGN0IGFzIEYsZCBhcyBnZSxkdCBhcyBfZSxldCBhcyB2ZSxmIGFzIHllLGZ0IGFzIEksZyBhcyBiZSxndCBhcyB4ZSxoIGFzIFNlLGh0IGFzIENlLGkgYXMgd2UsaXQgYXMgVGUsaiBhcyBFZSxqdCBhcyBEZSxrIGFzIE9lLGt0IGFzIGtlLGwgYXMgQWUsbHQgYXMgamUsbSBhcyBNZSxtdCBhcyBOZSxuIGFzIFBlLG50IGFzIEZlLG8gYXMgSWUsb3QgYXMgTGUscCBhcyBSZSxwdCBhcyB6ZSxxIGFzIEJlLHIgYXMgVmUscnQgYXMgTCxzIGFzIEhlLHN0IGFzIFIsdCBhcyBVZSx0dCBhcyB6LHUgYXMgV2UsdXQgYXMgR2UsdiBhcyBLZSx2dCBhcyBxZSx3IGFzIEplLHd0IGFzIFllLHggYXMgQix5IGFzIFhlLHl0IGFzIFYseiBhcyBaZSx6dCBhcyBRZX1mcm9tIi4vaW5kZXgtQmwtMnVST04uanMiO2Z1bmN0aW9uICRlKGUsdD0tMS8wLG49MS8wKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heCh0LGUpKX1mdW5jdGlvbiBldChlLHQsbil7bGV0IHI9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxpPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTt0JiZyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LHtvbmNlOiEwfSksci5kaXNwYXRjaEV2ZW50KGkpfXZhciBIPURlKHtsYXllcnNSb290Om5ldyBTZXQsbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6bmV3IFNldCxvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzOnZvaWQgMCxicmFuY2hlczpuZXcgU2V0fSk7ZnVuY3Rpb24gdHQoZSl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHQhPT1udWxsJiZ0IT09T2JqZWN0LnByb3RvdHlwZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09bnVsbHx8U3ltYm9sLml0ZXJhdG9yIGluIGU/ITE6U3ltYm9sLnRvU3RyaW5nVGFnIGluIGU/T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgTW9kdWxlXWA6ITB9ZnVuY3Rpb24gbnQoZSx0LG49YC5gLHIpe2lmKCF0dCh0KSlyZXR1cm4gbnQoZSx7fSxuLHIpO2xldCBpPXsuLi50fTtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXMoZSkpe2lmKHQ9PT1gX19wcm90b19fYHx8dD09PWBjb25zdHJ1Y3RvcmApY29udGludWU7bGV0IGE9ZVt0XTthIT1udWxsJiYociYmcihpLHQsYSxuKXx8KGlbdF09QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShpW3RdKT9bLi4uYSwuLi5pW3RdXTp0dChhKSYmdHQoaVt0XSk/bnQoYSxpW3RdLChuP2Ake259LmA6YGApK3QudG9TdHJpbmcoKSxyKTphKSl9cmV0dXJuIGl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuKC4uLnQpPT50LnJlZHVjZSgodCxuKT0+bnQodCxuLGBgLGUpLHt9KX12YXIgaXQ9cnQoKSxhdD1nKCgpPT57bGV0IGU9QyhuZXcgTWFwKSx0PUMoKSxuPXooKCk9Pntmb3IobGV0IHQgb2YgZS52YWx1ZS52YWx1ZXMoKSlpZih0KXJldHVybiEwO3JldHVybiExfSkscj1FKHtzY3JvbGxCb2R5OkMoITApfSksaT1udWxsLGE9KCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1gYCxkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpblJpZ2h0PWBgLEgubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT09PTAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YGApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShgLS1zY3JvbGxiYXItd2lkdGhgKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PXQudmFsdWU/P2BgLHRlJiZpPy4oKSx0LnZhbHVlPXZvaWQgMH07cmV0dXJuIGoobiwoZSxvKT0+e2lmKCFiKXJldHVybjtpZighZSl7byYmYSgpO3JldHVybn10LnZhbHVlPT09dm9pZCAwJiYodC52YWx1ZT1kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93KTtsZXQgcz13aW5kb3cuaW5uZXJXaWR0aC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsYz17cGFkZGluZzpzLG1hcmdpbjowfSxsPXIuc2Nyb2xsQm9keT8udmFsdWU/dHlwZW9mIHIuc2Nyb2xsQm9keS52YWx1ZT09YG9iamVjdGA/aXQoe3BhZGRpbmc6ci5zY3JvbGxCb2R5LnZhbHVlLnBhZGRpbmc9PT0hMD9zOnIuc2Nyb2xsQm9keS52YWx1ZS5wYWRkaW5nLG1hcmdpbjpyLnNjcm9sbEJvZHkudmFsdWUubWFyZ2luPT09ITA/czpyLnNjcm9sbEJvZHkudmFsdWUubWFyZ2lufSxjKTpjOntwYWRkaW5nOjAsbWFyZ2luOjB9O3M+MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PXR5cGVvZiBsLnBhZGRpbmc9PWBudW1iZXJgP2Ake2wucGFkZGluZ31weGA6U3RyaW5nKGwucGFkZGluZyksZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5SaWdodD10eXBlb2YgbC5tYXJnaW49PWBudW1iZXJgP2Ake2wubWFyZ2lufXB4YDpTdHJpbmcobC5tYXJnaW4pLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1zY3JvbGxiYXItd2lkdGhgLGAke3N9cHhgKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PWBoaWRkZW5gKSx0ZSYmKGk9RWUoZG9jdW1lbnQsYHRvdWNobW92ZWAsZT0+Y3QoZSkse3Bhc3NpdmU6ITF9KSksemUoKCk9PntuLnZhbHVlJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPWBub25lYCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PWBoaWRkZW5gKX0pfSx7aW1tZWRpYXRlOiEwLGZsdXNoOmBzeW5jYH0pLGV9KTtmdW5jdGlvbiBvdChlKXtsZXQgdD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw3KSxuPWF0KCk7bi52YWx1ZS5zZXQodCxlPz8hMSk7bGV0IHI9eih7Z2V0OigpPT5uLnZhbHVlLmdldCh0KT8/ITEsc2V0OmU9Pm4udmFsdWUuc2V0KHQsZSl9KTtyZXR1cm4gYWUoKCk9PntuLnZhbHVlLmRlbGV0ZSh0KX0pLHJ9ZnVuY3Rpb24gc3QoZSl7bGV0IHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7aWYodC5vdmVyZmxvd1g9PT1gc2Nyb2xsYHx8dC5vdmVyZmxvd1k9PT1gc2Nyb2xsYHx8dC5vdmVyZmxvd1g9PT1gYXV0b2AmJmUuY2xpZW50V2lkdGg8ZS5zY3JvbGxXaWR0aHx8dC5vdmVyZmxvd1k9PT1gYXV0b2AmJmUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0KXJldHVybiEwO3tsZXQgdD1lLnBhcmVudE5vZGU7cmV0dXJuISh0IGluc3RhbmNlb2YgRWxlbWVudCl8fHQudGFnTmFtZT09PWBCT0RZYD8hMTpzdCh0KX19ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9ZXx8d2luZG93LmV2ZW50LG49dC50YXJnZXQ7cmV0dXJuIG4gaW5zdGFuY2VvZiBFbGVtZW50JiZzdChuKT8hMTp0LnRvdWNoZXMubGVuZ3RoPjF8fCh0LnByZXZlbnREZWZhdWx0JiZ0LmNhbmNlbGFibGUmJnQucHJldmVudERlZmF1bHQoKSwhMSl9dmFyIGx0PTA7ZnVuY3Rpb24gdXQoKXtvKGU9PntpZighYilyZXR1cm47bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcmVrYS1mb2N1cy1ndWFyZF1gKTtkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChgYWZ0ZXJiZWdpbmAsdFswXT8/ZHQoKSksZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoYGJlZm9yZWVuZGAsdFsxXT8/ZHQoKSksbHQrKyxlKCgpPT57bHQ9PT0xJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWZvY3VzLWd1YXJkXWApLmZvckVhY2goZT0+ZS5yZW1vdmUoKSksbHQtLX0pfSl9ZnVuY3Rpb24gZHQoKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzcGFuYCk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKGBkYXRhLXJla2EtZm9jdXMtZ3VhcmRgLGBgKSxlLnRhYkluZGV4PTAsZS5zdHlsZS5vdXRsaW5lPWBub25lYCxlLnN0eWxlLm9wYWNpdHk9YDBgLGUuc3R5bGUucG9zaXRpb249YGZpeGVkYCxlLnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGV9ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIHooKCk9PiF4KGUpfHwhIXQoZSk/LmNsb3Nlc3QoYGZvcm1gKSl9dmFyIHB0PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+YHVgP251bGw6KEFycmF5LmlzQXJyYXkoZSk/ZVswXTplKS5vd25lckRvY3VtZW50LmJvZHl9LG10PW5ldyBXZWFrTWFwLGh0PW5ldyBXZWFrTWFwLGd0PXt9LF90PTAsdnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihlLmhvc3R8fHZ0KGUucGFyZW50Tm9kZSkpfSx5dD1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtpZihlLmNvbnRhaW5zKHQpKXJldHVybiB0O3ZhciBuPXZ0KHQpO3JldHVybiBuJiZlLmNvbnRhaW5zKG4pP246KGNvbnNvbGUuZXJyb3IoYGFyaWEtaGlkZGVuYCx0LGBpbiBub3QgY29udGFpbmVkIGluc2lkZWAsZSxgLiBEb2luZyBub3RoaW5nYCksbnVsbCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSl9LGJ0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXl0KHQsQXJyYXkuaXNBcnJheShlKT9lOltlXSk7Z3Rbbl18fChndFtuXT1uZXcgV2Vha01hcCk7dmFyIGE9Z3Rbbl0sbz1bXSxzPW5ldyBTZXQsYz1uZXcgU2V0KGkpLGw9ZnVuY3Rpb24oZSl7IWV8fHMuaGFzKGUpfHwocy5hZGQoZSksbChlLnBhcmVudE5vZGUpKX07aS5mb3JFYWNoKGwpO3ZhciB1PWZ1bmN0aW9uKGUpeyFlfHxjLmhhcyhlKXx8QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUpe2lmKHMuaGFzKGUpKXUoZSk7ZWxzZSB0cnl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUociksaT10IT09bnVsbCYmdCE9PWBmYWxzZWAsYz0obXQuZ2V0KGUpfHwwKSsxLGw9KGEuZ2V0KGUpfHwwKSsxO210LnNldChlLGMpLGEuc2V0KGUsbCksby5wdXNoKGUpLGM9PT0xJiZpJiZodC5zZXQoZSwhMCksbD09PTEmJmUuc2V0QXR0cmlidXRlKG4sYHRydWVgKSxpfHxlLnNldEF0dHJpYnV0ZShyLGB0cnVlYCl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcihgYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uIGAsZSx0KX19KX07cmV0dXJuIHUodCkscy5jbGVhcigpLF90KyssZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bXQuZ2V0KGUpLTEsaT1hLmdldChlKS0xO210LnNldChlLHQpLGEuc2V0KGUsaSksdHx8KGh0LmhhcyhlKXx8ZS5yZW1vdmVBdHRyaWJ1dGUociksaHQuZGVsZXRlKGUpKSxpfHxlLnJlbW92ZUF0dHJpYnV0ZShuKX0pLF90LS0sX3R8fChtdD1uZXcgV2Vha01hcCxtdD1uZXcgV2Vha01hcCxodD1uZXcgV2Vha01hcCxndD17fSl9fSx4dD1mdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49YGRhdGEtYXJpYS1oaWRkZW5gKTt2YXIgcj1BcnJheS5mcm9tKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGk9dHx8cHQoZSk7cmV0dXJuIGk/KHIucHVzaC5hcHBseShyLEFycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpYS1saXZlXSwgc2NyaXB0YCkpKSxidChyLGksbixgYXJpYS1oaWRkZW5gKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIFN0KGUpe2xldCBuO2ooKCk9PnQoZSksZT0+e2xldCB0PSExO3RyeXt0PSEhZT8uY2xvc2VzdChgW3BvcG92ZXJdOm5vdCg6cG9wb3Zlci1vcGVuKWApfWNhdGNoe31lJiYhdD9uPXh0KGUpOm4mJm4oKX0pLHhlKCgpPT57biYmbigpfSl9ZnVuY3Rpb24gQ3QoZSl7bGV0IG49QygpLHI9eigoKT0+bi52YWx1ZT8ud2lkdGg/PzApLGk9eigoKT0+bi52YWx1ZT8uaGVpZ2h0Pz8wKSxhO3JldHVybiBDZSgoKT0+e2xldCByPXQoZSk7cj8obi52YWx1ZT17d2lkdGg6ci5vZmZzZXRXaWR0aCxoZWlnaHQ6ci5vZmZzZXRIZWlnaHR9LGE9bmV3IFJlc2l6ZU9ic2VydmVyKGU9PntpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKXJldHVybjtsZXQgdD1lWzBdLGksYTtpZihgYm9yZGVyQm94U2l6ZWBpbiB0KXtsZXQgZT10LmJvcmRlckJveFNpemUsbj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpPW4uaW5saW5lU2l6ZSxhPW4uYmxvY2tTaXplfWVsc2UgaT1yLm9mZnNldFdpZHRoLGE9ci5vZmZzZXRIZWlnaHQ7bi52YWx1ZT17d2lkdGg6aSxoZWlnaHQ6YX19KSxhLm9ic2VydmUocix7Ym94OmBib3JkZXItYm94YH0pKTpuLnZhbHVlPXZvaWQgMH0pLHhlKCgpPT57YT8uZGlzY29ubmVjdCgpLGE9dm9pZCAwfSkse3dpZHRoOnIsaGVpZ2h0Oml9fWZ1bmN0aW9uIHd0KGUpe2xldCB0PXIoYGAsMWUzKTtyZXR1cm57c2VhcmNoOnQsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOihuLHIpPT57aWYodC52YWx1ZSs9bixlKWUobik7ZWxzZXtsZXQgZT1pZSgpLG49ci5tYXAoZT0+KHsuLi5lLHRleHRWYWx1ZTplLnZhbHVlPy50ZXh0VmFsdWU/P2UucmVmLnRleHRDb250ZW50Py50cmltKCk/P2BgfSkpLGk9bi5maW5kKHQ9PnQucmVmPT09ZSksYT1FdChuLm1hcChlPT5lLnRleHRWYWx1ZSksdC52YWx1ZSxpPy50ZXh0VmFsdWUpLG89bi5maW5kKGU9PmUudGV4dFZhbHVlPT09YSk7cmV0dXJuIG8mJm8ucmVmLmZvY3VzKCksbz8ucmVmfX0scmVzZXRUeXBlYWhlYWQ6KCk9Pnt0LnZhbHVlPWBgfX19ZnVuY3Rpb24gVHQoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX1mdW5jdGlvbiBFdChlLHQsbil7bGV0IHI9dC5sZW5ndGg+MSYmQXJyYXkuZnJvbSh0KS5ldmVyeShlPT5lPT09dFswXSk/dFswXTp0LGk9bj9lLmluZGV4T2Yobik6LTEsYT1UdChlLE1hdGgubWF4KGksMCkpO3IubGVuZ3RoPT09MSYmKGE9YS5maWx0ZXIoZT0+ZSE9PW4pKTtsZXQgbz1hLmZpbmQoZT0+ZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoci50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIG89PT1uP3ZvaWQgMDpvfXZhciBEdD1gZGlzbWlzc2FibGVMYXllci5wb2ludGVyRG93bk91dHNpZGVgLE90PWBkaXNtaXNzYWJsZUxheWVyLmZvY3VzT3V0c2lkZWA7ZnVuY3Rpb24ga3QoZSx0KXtpZighKHQgaW5zdGFuY2VvZiBFbGVtZW50KSlyZXR1cm4hMTtsZXQgbj10LmNsb3Nlc3QoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApLHI9ZS5kYXRhc2V0LmRpc21pc3NhYmxlTGF5ZXI9PT1gYD9lOmUucXVlcnlTZWxlY3RvcihgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCksaT1BcnJheS5mcm9tKGUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSk7cmV0dXJuISEobiYmKHI9PT1ufHxpLmluZGV4T2Yocik8aS5pbmRleE9mKG4pKSl9ZnVuY3Rpb24gQXQoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUMoITEpLGE9QygoKT0+e30pO3JldHVybiBvKG89PntpZighYnx8IXgobikpcmV0dXJuO2xldCBzPWFzeW5jIG49PntsZXQgbz1uLnRhcmdldDtpZighKCF0Py52YWx1ZXx8IW8pKXtpZihrdCh0LnZhbHVlLG8pKXtpLnZhbHVlPSExO3JldHVybn1pZihuLnRhcmdldCYmIWkudmFsdWUpe2xldCB0PXtvcmlnaW5hbEV2ZW50Om59O2Z1bmN0aW9uIGkoKXtldChEdCxlLHQpfW4ucG9pbnRlclR5cGU9PT1gdG91Y2hgPyhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKSxhLnZhbHVlPWksci5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSx7b25jZTohMH0pKTppKCl9ZWxzZSByLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKTtpLnZhbHVlPSExfX0sYz13aW5kb3cuc2V0VGltZW91dCgoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcmRvd25gLHMpfSwwKTtvKCgpPT57d2luZG93LmNsZWFyVGltZW91dChjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJkb3duYCxzKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKX0pfSkse29uUG9pbnRlckRvd25DYXB0dXJlOigpPT57eChuKSYmKGkudmFsdWU9ITApfX19ZnVuY3Rpb24ganQoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUMoITEpO3JldHVybiBvKGE9PntpZighYnx8IXgobikpcmV0dXJuO2xldCBvPWFzeW5jIG49PntpZighdD8udmFsdWUpcmV0dXJuO2F3YWl0IHplKCksYXdhaXQgemUoKTtsZXQgcj1uLnRhcmdldDshdC52YWx1ZXx8IXJ8fGt0KHQudmFsdWUscil8fG4udGFyZ2V0JiYhaS52YWx1ZSYmZXQoT3QsZSx7b3JpZ2luYWxFdmVudDpufSl9O3IuYWRkRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbyksYSgoKT0+ci5yZW1vdmVFdmVudExpc3RlbmVyKGBmb2N1c2luYCxvKSl9KSx7b25Gb2N1c0NhcHR1cmU6KCk9Pnt4KG4pJiYoaS52YWx1ZT0hMCl9LG9uQmx1ckNhcHR1cmU6KCk9Pnt4KG4pJiYoaS52YWx1ZT0hMSl9fX12YXIgTXQ9Rih7X19uYW1lOmBEaXNtaXNzYWJsZUxheWVyYCxwcm9wczp7ZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxwcmVzZW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH19LGVtaXRzOltgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWAsYGZvY3VzT3V0c2lkZWAsYGludGVyYWN0T3V0c2lkZWAsYGRpc21pc3NgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7Zm9yd2FyZFJlZjppLGN1cnJlbnRFbGVtZW50OmF9PWwoKSxzPXooKCk9PmEudmFsdWU/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXMuZG9jdW1lbnQpLGM9eigoKT0+SC5sYXllcnNSb290KSx1PXooKCk9PmEudmFsdWU/QXJyYXkuZnJvbShjLnZhbHVlKS5pbmRleE9mKGEudmFsdWUpOi0xKSxkPXooKCk9PkgubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wKSxmPXooKCk9PntsZXQgZT1BcnJheS5mcm9tKGMudmFsdWUpLFt0XT1bLi4uSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZF0uc2xpY2UoLTEpLG49ZS5pbmRleE9mKHQpO3JldHVybiB1LnZhbHVlPj1ufSkscD1BdChhc3luYyBlPT57bGV0IHQ9Wy4uLkguYnJhbmNoZXNdLnNvbWUodD0+dD8uY29udGFpbnMoZS50YXJnZXQpKTshbi5wcmVzZW50fHwhZi52YWx1ZXx8dHx8KHIoYHBvaW50ZXJEb3duT3V0c2lkZWAsZSkscihgaW50ZXJhY3RPdXRzaWRlYCxlKSxhd2FpdCB6ZSgpLGUuZGVmYXVsdFByZXZlbnRlZHx8cihgZGlzbWlzc2ApKX0sYSksaD1qdChlPT57bGV0IHQ9Wy4uLkguYnJhbmNoZXNdLnNvbWUodD0+dD8uY29udGFpbnMoZS50YXJnZXQpKTshbi5wcmVzZW50fHx0fHwocihgZm9jdXNPdXRzaWRlYCxlKSxyKGBpbnRlcmFjdE91dHNpZGVgLGUpLGUuZGVmYXVsdFByZXZlbnRlZHx8cihgZGlzbWlzc2ApKX0sYSk7cmV0dXJuIE9lKGBFc2NhcGVgLGU9PntuLnByZXNlbnQmJnUudmFsdWU9PT1jLnZhbHVlLnNpemUtMSYmKHIoYGVzY2FwZUtleURvd25gLGUpLGUuZGVmYXVsdFByZXZlbnRlZHx8cihgZGlzbWlzc2ApKX0pLGooW2EsKCk9Pm4uZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzLCgpPT5uLnByZXNlbnRdLChbZSx0LG5dLHIsaSk9PnshZXx8IW58fHQmJihILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoSC5vcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzPXMudmFsdWUuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzLHMudmFsdWUuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPWBub25lYCksSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5hZGQoZSksaSgoKT0+e0gubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGUpLEgubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT09PTAmJiFtKEgub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cykmJihzLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1ILm9yaWdpbmFsQm9keVBvaW50ZXJFdmVudHMpfSkpfSx7aW1tZWRpYXRlOiEwfSksaihbYSwoKT0+bi5wcmVzZW50XSwoW2UsdF0sbixyKT0+eyFlfHwhdHx8KGMudmFsdWUuYWRkKGUpLHIoKCk9PntjLnZhbHVlLmRlbGV0ZShlKX0pKX0se2ltbWVkaWF0ZTohMH0pLG8oZT0+e2UoKCk9PnthLnZhbHVlJiYoYy52YWx1ZS5kZWxldGUoYS52YWx1ZSksSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoYS52YWx1ZSkpfSl9KSwoZSx0KT0+KE4oKSxMKEEoQikse3JlZjpBKGkpLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImRhdGEtZGlzbWlzc2FibGUtbGF5ZXIiOmBgLHN0eWxlOm9lKHtwb2ludGVyRXZlbnRzOmQudmFsdWU/Zi52YWx1ZT9gYXV0b2A6YG5vbmVgOnZvaWQgMH0pLG9uRm9jdXNDYXB0dXJlOkEoaCkub25Gb2N1c0NhcHR1cmUsb25CbHVyQ2FwdHVyZTpBKGgpLm9uQmx1ckNhcHR1cmUsb25Qb2ludGVyZG93bkNhcHR1cmU6QShwKS5vblBvaW50ZXJEb3duQ2FwdHVyZX0se2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgLGBzdHlsZWAsYG9uRm9jdXNDYXB0dXJlYCxgb25CbHVyQ2FwdHVyZWAsYG9uUG9pbnRlcmRvd25DYXB0dXJlYF0pKX19KSxOdD1kKCgpPT5DKFtdKSk7ZnVuY3Rpb24gUHQoKXtsZXQgZT1OdCgpO3JldHVybnthZGQodCl7bGV0IG49ZS52YWx1ZVswXTt0IT09biYmbj8ucGF1c2UoKSxlLnZhbHVlPUZ0KGUudmFsdWUsdCksZS52YWx1ZS51bnNoaWZ0KHQpfSxyZW1vdmUodCl7ZS52YWx1ZT1GdChlLnZhbHVlLHQpLGUudmFsdWVbMF0/LnJlc3VtZSgpfX19ZnVuY3Rpb24gRnQoZSx0KXtsZXQgbj1bLi4uZV0scj1uLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufXZhciBJdD1gZm9jdXNTY29wZS5hdXRvRm9jdXNPbk1vdW50YCxMdD1gZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnRgLFJ0PXtidWJibGVzOiExLGNhbmNlbGFibGU6ITB9O2Z1bmN0aW9uIHp0KGUse3NlbGVjdDp0PSExfT17fSl7bGV0IG49aWUoKTtmb3IobGV0IHIgb2YgZSlpZihHdChyLHtzZWxlY3Q6dH0pLGllKCkhPT1uKXJldHVybiEwfWZ1bmN0aW9uIEJ0KGUpe2xldCB0PVZ0KGUpO3JldHVybltIdCh0LGUpLEh0KHQucmV2ZXJzZSgpLGUpXX1mdW5jdGlvbiBWdChlKXtsZXQgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTplPT57bGV0IHQ9ZS50YWdOYW1lPT09YElOUFVUYCYmZS50eXBlPT09YGhpZGRlbmA7cmV0dXJuIGUuZGlzYWJsZWR8fGUuaGlkZGVufHx0P05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ZS50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspdC5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiB0fWZ1bmN0aW9uIEh0KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYoIVV0KG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIFV0KGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PWBoaWRkZW5gKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PWBub25lYClyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBXdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmBzZWxlY3RgaW4gZX1mdW5jdGlvbiBHdChlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2xldCBuPWllKCk7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUhPT1uJiZXdChlKSYmdCYmZS5zZWxlY3QoKX19dmFyIEt0PUYoe19fbmFtZTpgRm9jdXNTY29wZWAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSx0cmFwcGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgbW91bnRBdXRvRm9jdXNgLGB1bm1vdW50QXV0b0ZvY3VzYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2N1cnJlbnRSZWY6aSxjdXJyZW50RWxlbWVudDphfT1sKCkscz1DKG51bGwpLGM9UHQoKSx1PURlKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSk7byhlPT57aWYoIWIpcmV0dXJuO2xldCB0PWEudmFsdWU7aWYoIW4udHJhcHBlZClyZXR1cm47ZnVuY3Rpb24gcihlKXtpZih1LnBhdXNlZHx8IXQpcmV0dXJuO2xldCBuPWUudGFyZ2V0O3QuY29udGFpbnMobik/cy52YWx1ZT1uOkd0KHMudmFsdWUse3NlbGVjdDohMH0pfWZ1bmN0aW9uIGkoZSl7aWYodS5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQ7biE9PW51bGwmJih0LmNvbnRhaW5zKG4pfHxHdChzLnZhbHVlLHtzZWxlY3Q6ITB9KSl9ZnVuY3Rpb24gbyhlKXtsZXQgbj1zLnZhbHVlO24hPT1udWxsJiZlLnNvbWUoZT0+ZS5yZW1vdmVkTm9kZXMubGVuZ3RoPjApJiYodC5jb250YWlucyhuKXx8R3QodCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKTtsZXQgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihvKTt0JiZjLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNvdXRgLGkpLGMuZGlzY29ubmVjdCgpfSl9KTtmdW5jdGlvbiBkKGUsdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KEl0LFJ0KSxpPWU9PnIoYG1vdW50QXV0b0ZvY3VzYCxlKTtlLmFkZEV2ZW50TGlzdGVuZXIoSXQsaSksZS5kaXNwYXRjaEV2ZW50KG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihJdCxpKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fCh6dChWdChlKSx7c2VsZWN0OiEwfSksaWUoKT09PXQmJkd0KGUpKX1vKGFzeW5jIGU9PntsZXQgdD1hLnZhbHVlO2lmKGF3YWl0IHplKCksIXQpcmV0dXJuO24ucHJlc2VudCE9PSExJiZjLmFkZCh1KTtsZXQgaT1pZSgpOyF0LmNvbnRhaW5zKGkpJiZuLnByZXNlbnQhPT0hMSYmZCh0LGkpLGUoKCk9PntsZXQgZT1uZXcgQ3VzdG9tRXZlbnQoTHQsUnQpLG49ZT0+e3IoYHVubW91bnRBdXRvRm9jdXNgLGUpfTt0LmFkZEV2ZW50TGlzdGVuZXIoTHQsbiksdC5kaXNwYXRjaEV2ZW50KGUpLHQuc2V0QXR0cmlidXRlKGBkYXRhLWZvY3VzLXNjb3BlLXVubW91bnRpbmdgLGBgKSxzZXRUaW1lb3V0KCgpPT57ZS5kZWZhdWx0UHJldmVudGVkfHxHdChpPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoTHQsbiksYy5yZW1vdmUodSksdC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtZm9jdXMtc2NvcGUtdW5tb3VudGluZ2ApfSwwKX0pfSksaigoKT0+bi5wcmVzZW50LGFzeW5jKGUsdCk9PntpZighYilyZXR1cm47aWYoZT09PSExJiZ0PT09ITApe2MucmVtb3ZlKHUpO3JldHVybn1pZihlIT09ITB8fHQhPT0hMSlyZXR1cm47Yy5hZGQodSksYXdhaXQgemUoKTtsZXQgbj1hLnZhbHVlO2lmKCFuKXJldHVybjtsZXQgcj1pZSgpO24uY29udGFpbnMocil8fGQobixyKX0pO2Z1bmN0aW9uIGYoZSl7aWYoIW4ubG9vcCYmIW4udHJhcHBlZHx8dS5wYXVzZWQpcmV0dXJuO2xldCB0PWUua2V5PT09YFRhYmAmJiFlLmFsdEtleSYmIWUuY3RybEtleSYmIWUubWV0YUtleSxyPWllKCk7aWYodCYmcil7bGV0IHQ9ZS5jdXJyZW50VGFyZ2V0LFtpLGFdPUJ0KHQpO2kmJmE/IWUuc2hpZnRLZXkmJnI9PT1hPyhlLnByZXZlbnREZWZhdWx0KCksbi5sb29wJiZHdChpLHtzZWxlY3Q6ITB9KSk6ZS5zaGlmdEtleSYmcj09PWkmJihlLnByZXZlbnREZWZhdWx0KCksbi5sb29wJiZHdChhLHtzZWxlY3Q6ITB9KSk6cj09PXQmJmUucHJldmVudERlZmF1bHQoKX19cmV0dXJuKGUsdCk9PihOKCksTChBKEIpLHtyZWZfa2V5OmBjdXJyZW50UmVmYCxyZWY6aSx0YWJpbmRleDpgLTFgLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25LZXlkb3duOmZ9LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYF0pKX19KSxxdD1bYEVudGVyYCxgIGBdLEp0PVtgQXJyb3dEb3duYCxgUGFnZVVwYCxgSG9tZWBdLFl0PVtgQXJyb3dVcGAsYFBhZ2VEb3duYCxgRW5kYF07Wy4uLkp0LC4uLll0XSxbLi4ucXRdLFsuLi5xdF07ZnVuY3Rpb24gWHQoZSl7bGV0IHQ9aWUoKTtmb3IobGV0IG4gb2YgZSlpZihuPT09dHx8KG4uZm9jdXMoKSxpZSgpIT09dCkpcmV0dXJufXZhciBadD1GKHtfX25hbWU6YFRlbGVwb3J0YCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUUoe30pLHI9eigoKT0+dC50bz8/bi50ZWxlcG9ydFRvPy52YWx1ZT8/YGJvZHlgKSxpPVMoKTtyZXR1cm4oZSx0KT0+QShpKXx8ZS5mb3JjZU1vdW50PyhOKCksTCh2ZSx7a2V5OjAsdG86ci52YWx1ZSxkaXNhYmxlZDplLmRpc2FibGVkLGRlZmVyOmUuZGVmZXJ9LFtWKGUuJHNsb3RzLGBkZWZhdWx0YCldLDgsW2B0b2AsYGRpc2FibGVkYCxgZGVmZXJgXSkpOlRlKGB2LWlmYCwhMCl9fSksUXQ9Rih7X19uYW1lOmBWaXN1YWxseUhpZGRlbmAscHJvcHM6e2ZlYXR1cmU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGZvY3VzYWJsZWB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe3JldHVybihlLHQpPT4oTigpLEwoQShCKSx7YXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCwiYXJpYS1oaWRkZW4iOmUuZmVhdHVyZT09PWBmb2N1c2FibGVgfHxlLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gdHJ1ZWA6dm9pZCAwLCJkYXRhLWhpZGRlbiI6ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YGA6dm9pZCAwLHRhYmluZGV4OmUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2AtMWA6dm9pZCAwLHN0eWxlOntwb3NpdGlvbjpgYWJzb2x1dGVgLGJvcmRlcjowLHdpZHRoOmAxcHhgLGhlaWdodDpgMXB4YCxwYWRkaW5nOjAsbWFyZ2luOmAtMXB4YCxvdmVyZmxvdzpgaGlkZGVuYCxjbGlwOmByZWN0KDAsIDAsIDAsIDApYCxjbGlwUGF0aDpgaW5zZXQoNTAlKWAsd2hpdGVTcGFjZTpgbm93cmFwYCx3b3JkV3JhcDpgbm9ybWFsYCx0b3A6YC0xcHhgLGxlZnQ6YC0xcHhgfX0se2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWhpZGRlbmAsYGRhdGEtaGlkZGVuYCxgdGFiaW5kZXhgXSkpfX0pLFskdCxlbl09c2UoYFBvcHBlclJvb3RgKSx0bj1GKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBQb3BwZXJSb290YCxzZXR1cChlKXtsZXQgdD1DKCk7cmV0dXJuIGVuKHthbmNob3I6dCxvbkFuY2hvckNoYW5nZTplPT50LnZhbHVlPWV9KSwoZSx0KT0+VihlLiRzbG90cyxgZGVmYXVsdGApfX0pLG5uPUYoe19fbmFtZTpgUG9wcGVyQW5jaG9yYCxwcm9wczp7cmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bixjdXJyZW50RWxlbWVudDpyfT1sKCksaT0kdCgpO3JldHVybiBZZSgoKT0+e2kub25BbmNob3JDaGFuZ2UodC5yZWZlcmVuY2U/P3IudmFsdWUpfSksKGUsdCk9PihOKCksTChBKEIpLHtyZWY6QShuKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkfSx7ZGVmYXVsdDpNKCgpPT5bVihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGBdKSl9fSk7ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGUhPT1udWxsfWZ1bmN0aW9uIGFuKGUpe3JldHVybntuYW1lOmB0cmFuc2Zvcm1PcmlnaW5gLG9wdGlvbnM6ZSxmbih0KXtsZXR7cGxhY2VtZW50Om4scmVjdHM6cixtaWRkbGV3YXJlRGF0YTppfT10LGE9aS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MCxvPWE/MDplLmFycm93V2lkdGgscz1hPzA6ZS5hcnJvd0hlaWdodCxbYyxsXT1vbihuKSx1PXtzdGFydDplLmRpcj09PWBydGxgP2AxMDAlYDpgMCVgLGNlbnRlcjpgNTAlYCxlbmQ6ZS5kaXI9PT1gcnRsYD9gMCVgOmAxMDAlYH1bbF0sZD17c3RhcnQ6YDAlYCxjZW50ZXI6YDUwJWAsZW5kOmAxMDAlYH1bbF0sZj0oaS5hcnJvdz8ueD8/MCkrby8yLHA9KGkuYXJyb3c/Lnk/PzApK3MvMixtPWBgLGg9YGA7cmV0dXJuIGM9PT1gYm90dG9tYD8obT1hP3U6YCR7Zn1weGAsaD1gJHstc31weGApOmM9PT1gdG9wYD8obT1hP3U6YCR7Zn1weGAsaD1gJHtyLmZsb2F0aW5nLmhlaWdodCtzfXB4YCk6Yz09PWByaWdodGA/KG09YCR7LXN9cHhgLGg9YT9kOmAke3B9cHhgKTpjPT09YGxlZnRgJiYobT1gJHtyLmZsb2F0aW5nLndpZHRoK3N9cHhgLGg9YT9kOmAke3B9cHhgKSx7ZGF0YTp7eDptLHk6aH19fX19ZnVuY3Rpb24gb24oZSl7bGV0W3Qsbj1gY2VudGVyYF09ZS5zcGxpdChgLWApO3JldHVyblt0LG5dfXZhciBzbj1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdLGNuPU1hdGgubWluLGxuPU1hdGgubWF4LHVuPU1hdGgucm91bmQsZG49TWF0aC5mbG9vcixmbj1lPT4oe3g6ZSx5OmV9KSxwbj17bGVmdDpgcmlnaHRgLHJpZ2h0OmBsZWZ0YCxib3R0b206YHRvcGAsdG9wOmBib3R0b21gfTtmdW5jdGlvbiBtbihlLHQsbil7cmV0dXJuIGxuKGUsY24odCxuKSl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0KTplfWZ1bmN0aW9uIGduKGUpe3JldHVybiBlLnNwbGl0KGAtYClbMF19ZnVuY3Rpb24gX24oZSl7cmV0dXJuIGUuc3BsaXQoYC1gKVsxXX1mdW5jdGlvbiB2bihlKXtyZXR1cm4gZT09PWB4YD9geWA6YHhgfWZ1bmN0aW9uIHluKGUpe3JldHVybiBlPT09YHlgP2BoZWlnaHRgOmB3aWR0aGB9ZnVuY3Rpb24gYm4oZSl7bGV0IHQ9ZVswXTtyZXR1cm4gdD09PWB0YHx8dD09PWBiYD9geWA6YHhgfWZ1bmN0aW9uIHhuKGUpe3JldHVybiB2bihibihlKSl9ZnVuY3Rpb24gU24oZSx0LG4pe249PT12b2lkIDAmJihuPSExKTtsZXQgcj1fbihlKSxpPXhuKGUpLGE9eW4oaSksbz1pPT09YHhgP3I9PT0obj9gZW5kYDpgc3RhcnRgKT9gcmlnaHRgOmBsZWZ0YDpyPT09YHN0YXJ0YD9gYm90dG9tYDpgdG9wYDtyZXR1cm4gdC5yZWZlcmVuY2VbYV0+dC5mbG9hdGluZ1thXSYmKG89am4obykpLFtvLGpuKG8pXX1mdW5jdGlvbiBDbihlKXtsZXQgdD1qbihlKTtyZXR1cm5bd24oZSksdCx3bih0KV19ZnVuY3Rpb24gd24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoYHN0YXJ0YCk/ZS5yZXBsYWNlKGBzdGFydGAsYGVuZGApOmUucmVwbGFjZShgZW5kYCxgc3RhcnRgKX12YXIgVG49W2BsZWZ0YCxgcmlnaHRgXSxFbj1bYHJpZ2h0YCxgbGVmdGBdLERuPVtgdG9wYCxgYm90dG9tYF0sT249W2Bib3R0b21gLGB0b3BgXTtmdW5jdGlvbiBrbihlLHQsbil7c3dpdGNoKGUpe2Nhc2VgdG9wYDpjYXNlYGJvdHRvbWA6cmV0dXJuIG4/dD9FbjpUbjp0P1RuOkVuO2Nhc2VgbGVmdGA6Y2FzZWByaWdodGA6cmV0dXJuIHQ/RG46T247ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gQW4oZSx0LG4scil7bGV0IGk9X24oZSksYT1rbihnbihlKSxuPT09YHN0YXJ0YCxyKTtyZXR1cm4gaSYmKGE9YS5tYXAoZT0+ZStgLWAraSksdCYmKGE9YS5jb25jYXQoYS5tYXAod24pKSkpLGF9ZnVuY3Rpb24gam4oZSl7bGV0IHQ9Z24oZSk7cmV0dXJuIHBuW3RdK2Uuc2xpY2UodC5sZW5ndGgpfWZ1bmN0aW9uIE1uKGUpe3JldHVybnt0b3A6ZS50b3A/PzAscmlnaHQ6ZS5yaWdodD8/MCxib3R0b206ZS5ib3R0b20/PzAsbGVmdDplLmxlZnQ/PzB9fWZ1bmN0aW9uIE5uKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmA/e3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfTpNbihlKX1mdW5jdGlvbiBQbihlKXtsZXR7eDp0LHk6bix3aWR0aDpyLGhlaWdodDppfT1lO3JldHVybnt3aWR0aDpyLGhlaWdodDppLHRvcDpuLGxlZnQ6dCxyaWdodDp0K3IsYm90dG9tOm4raSx4OnQseTpufX1mdW5jdGlvbiBGbihlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOml9PWUsYT1ibih0KSxvPXhuKHQpLHM9eW4obyksYz1nbih0KSxsPWE9PT1geWAsdT1yLngrci53aWR0aC8yLWkud2lkdGgvMixkPXIueStyLmhlaWdodC8yLWkuaGVpZ2h0LzIsZj1yW3NdLzItaVtzXS8yLHA7c3dpdGNoKGMpe2Nhc2VgdG9wYDpwPXt4OnUseTpyLnktaS5oZWlnaHR9O2JyZWFrO2Nhc2VgYm90dG9tYDpwPXt4OnUseTpyLnkrci5oZWlnaHR9O2JyZWFrO2Nhc2VgcmlnaHRgOnA9e3g6ci54K3Iud2lkdGgseTpkfTticmVhaztjYXNlYGxlZnRgOnA9e3g6ci54LWkud2lkdGgseTpkfTticmVhaztkZWZhdWx0OnA9e3g6ci54LHk6ci55fX1sZXQgbT1fbih0KTtyZXR1cm4gbSYmKHBbb10rPWYqKG09PT1gZW5kYD8xOi0xKSoobiYmbD8tMToxKSkscH1hc3luYyBmdW5jdGlvbiBJbihlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTtsZXR7eDpuLHk6cixwbGF0Zm9ybTppLHJlY3RzOmEsZWxlbWVudHM6byxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPWBjbGlwcGluZ0FuY2VzdG9yc2Ascm9vdEJvdW5kYXJ5Omw9YHZpZXdwb3J0YCxlbGVtZW50Q29udGV4dDp1PWBmbG9hdGluZ2AsYWx0Qm91bmRhcnk6ZD0hMSxwYWRkaW5nOmY9MH09aG4odCxlKSxwPU5uKGYpLG09b1tkP3U9PT1gZmxvYXRpbmdgP2ByZWZlcmVuY2VgOmBmbG9hdGluZ2A6dV0saD1Qbihhd2FpdCBpLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDphd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQobSkpPz8hMD9tOm0uY29udGV4dEVsZW1lbnR8fGF3YWl0KGkuZ2V0RG9jdW1lbnRFbGVtZW50PT1udWxsP3ZvaWQgMDppLmdldERvY3VtZW50RWxlbWVudChvLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6bCxzdHJhdGVneTpzfSkpLGc9dT09PWBmbG9hdGluZ2A/e3g6bix5OnIsd2lkdGg6YS5mbG9hdGluZy53aWR0aCxoZWlnaHQ6YS5mbG9hdGluZy5oZWlnaHR9OmEucmVmZXJlbmNlLF89YXdhaXQoaS5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOmkuZ2V0T2Zmc2V0UGFyZW50KG8uZmxvYXRpbmcpKSx2PWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChfKSkmJmF3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoXykpfHx7eDoxLHk6MX0seT1QbihpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0P2F3YWl0IGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe2VsZW1lbnRzOm8scmVjdDpnLG9mZnNldFBhcmVudDpfLHN0cmF0ZWd5OnN9KTpnKTtyZXR1cm57dG9wOihoLnRvcC15LnRvcCtwLnRvcCkvdi55LGJvdHRvbTooeS5ib3R0b20taC5ib3R0b20rcC5ib3R0b20pL3YueSxsZWZ0OihoLmxlZnQteS5sZWZ0K3AubGVmdCkvdi54LHJpZ2h0Oih5LnJpZ2h0LWgucmlnaHQrcC5yaWdodCkvdi54fX12YXIgTG49NTAsUm49YXN5bmMoZSx0LG4pPT57bGV0e3BsYWNlbWVudDpyPWBib3R0b21gLHN0cmF0ZWd5Omk9YGFic29sdXRlYCxtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06b309bixzPW8uZGV0ZWN0T3ZlcmZsb3c/bzp7Li4ubyxkZXRlY3RPdmVyZmxvdzpJbn0sYz1hd2FpdChvLmlzUlRMPT1udWxsP3ZvaWQgMDpvLmlzUlRMKHQpKSxsPWF3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KSx7eDp1LHk6ZH09Rm4obCxyLGMpLGY9cixwPTAsbT17fTtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGg9YVtuXTtpZighaCljb250aW51ZTtsZXR7bmFtZTpnLGZuOl99PWgse3g6dix5LGRhdGE6YixyZXNldDp4fT1hd2FpdCBfKHt4OnUseTpkLGluaXRpYWxQbGFjZW1lbnQ6cixwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm0scmVjdHM6bCxwbGF0Zm9ybTpzLGVsZW1lbnRzOntyZWZlcmVuY2U6ZSxmbG9hdGluZzp0fX0pO3U9dj8/dSxkPXk/P2QsbVtnXT17Li4ubVtnXSwuLi5ifSx4JiZwPExuJiYocCsrLHR5cGVvZiB4PT1gb2JqZWN0YCYmKHgucGxhY2VtZW50JiYoZj14LnBsYWNlbWVudCkseC5yZWN0cyYmKGw9eC5yZWN0cz09PSEwP2F3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KTp4LnJlY3RzKSx7eDp1LHk6ZH09Rm4obCxmLGMpKSxuPS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm19fSx6bj1lPT4oe25hbWU6YGFycm93YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxwbGF0Zm9ybTpvLGVsZW1lbnRzOnMsbWlkZGxld2FyZURhdGE6Y309dCx7ZWxlbWVudDpsLHBhZGRpbmc6dT0wfT1obihlLHQpfHx7fTtpZihsPT1udWxsKXJldHVybnt9O2xldCBkPU5uKHUpLGY9e3g6bix5OnJ9LHA9eG4oaSksbT15bihwKSxoPWF3YWl0IG8uZ2V0RGltZW5zaW9ucyhsKSxnPXA9PT1geWAsXz1nP2B0b3BgOmBsZWZ0YCx2PWc/YGJvdHRvbWA6YHJpZ2h0YCx5PWc/YGNsaWVudEhlaWdodGA6YGNsaWVudFdpZHRoYCxiPWEucmVmZXJlbmNlW21dK2EucmVmZXJlbmNlW3BdLWZbcF0tYS5mbG9hdGluZ1ttXSx4PWZbcF0tYS5yZWZlcmVuY2VbcF0sUz1hd2FpdChvLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6by5nZXRPZmZzZXRQYXJlbnQobCkpLEM9Uz9TW3ldOjA7KCFDfHwhYXdhaXQoby5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOm8uaXNFbGVtZW50KFMpKSkmJihDPXMuZmxvYXRpbmdbeV18fGEuZmxvYXRpbmdbbV0pO2xldCB3PWIvMi14LzIsVD1DLzItaFttXS8yLTEsRT1jbihkW19dLFQpLEQ9Y24oZFt2XSxUKSxPPUMtaFttXS1ELGs9Qy8yLWhbbV0vMit3LGVlPW1uKEUsayxPKSx0ZT0hYy5hcnJvdyYmX24oaSkhPW51bGwmJmshPT1lZSYmYS5yZWZlcmVuY2VbbV0vMi0oazxFP0U6RCktaFttXS8yPDAsQT10ZT9rPEU/ay1FOmstTzowO3JldHVybntbcF06ZltwXStBLGRhdGE6e1twXTplZSxjZW50ZXJPZmZzZXQ6ay1lZS1BLC4uLnRlJiZ7YWxpZ25tZW50T2Zmc2V0OkF9fSxyZXNldDp0ZX19fSksQm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgZmxpcGAsb3B0aW9uczplLGFzeW5jIGZuKHQpe3ZhciBuO2xldHtwbGFjZW1lbnQ6cixtaWRkbGV3YXJlRGF0YTppLHJlY3RzOmEsaW5pdGlhbFBsYWNlbWVudDpvLHBsYXRmb3JtOnMsZWxlbWVudHM6Y309dCx7bWFpbkF4aXM6bD0hMCxjcm9zc0F4aXM6dT0hMCxmYWxsYmFja1BsYWNlbWVudHM6ZCxmYWxsYmFja1N0cmF0ZWd5OmY9YGJlc3RGaXRgLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246cD1gbm9uZWAsZmxpcEFsaWdubWVudDptPSEwLC4uLmh9PWhuKGUsdCk7aWYoKG49aS5hcnJvdykhPW51bGwmJm4uYWxpZ25tZW50T2Zmc2V0KXJldHVybnt9O2xldCBnPWduKHIpLF89Ym4obyksdj1nbihvKT09PW8seT1hd2FpdChzLmlzUlRMPT1udWxsP3ZvaWQgMDpzLmlzUlRMKGMuZmxvYXRpbmcpKSxiPWR8fCh2fHwhbT9bam4obyldOkNuKG8pKSx4PXAhPT1gbm9uZWA7IWQmJngmJmIucHVzaCguLi5BbihvLG0scCx5KSk7bGV0IFM9W28sLi4uYl0sQz1hd2FpdCBzLmRldGVjdE92ZXJmbG93KHQsaCksdz1bXSxUPWkuZmxpcD8ub3ZlcmZsb3dzfHxbXTtpZihsJiZ3LnB1c2goQ1tnXSksdSl7bGV0IGU9U24ocixhLHkpO3cucHVzaChDW2VbMF1dLENbZVsxXV0pfWlmKFQ9Wy4uLlQse3BsYWNlbWVudDpyLG92ZXJmbG93czp3fV0sIXcuZXZlcnkoZT0+ZTw9MCkpe2xldCBlPShpLmZsaXA/LmluZGV4fHwwKSsxLHQ9U1tlXTtpZih0JiYodSE9PWBhbGlnbm1lbnRgfHxfPT09Ym4odCl8fFQuZXZlcnkoZT0+Ym4oZS5wbGFjZW1lbnQpIT09X3x8ZS5vdmVyZmxvd3NbMF0+MCkpKXJldHVybntkYXRhOntpbmRleDplLG92ZXJmbG93czpUfSxyZXNldDp7cGxhY2VtZW50OnR9fTtsZXQgbj1ULmZpbHRlcihlPT5lLm92ZXJmbG93c1swXTw9MCkuc29ydCgoZSx0KT0+ZS5vdmVyZmxvd3NbMV0tdC5vdmVyZmxvd3NbMV0pWzBdPy5wbGFjZW1lbnQ7aWYoIW4pc3dpdGNoKGYpe2Nhc2VgYmVzdEZpdGA6e2xldCBlPVQuZmlsdGVyKGU9PntpZih4KXtsZXQgdD1ibihlLnBsYWNlbWVudCk7cmV0dXJuIHQ9PT1ffHx0PT09YHlgfXJldHVybiEwfSkubWFwKGU9PltlLnBsYWNlbWVudCxlLm92ZXJmbG93cy5maWx0ZXIoZT0+ZT4wKS5yZWR1Y2UoKGUsdCk9PmUrdCwwKV0pLnNvcnQoKGUsdCk9PmVbMV0tdFsxXSlbMF0/LlswXTtlJiYobj1lKTticmVha31jYXNlYGluaXRpYWxQbGFjZW1lbnRgOm49b31pZihyIT09bilyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpufX19cmV0dXJue319fX07ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm57dG9wOmUudG9wLXQuaGVpZ2h0LHJpZ2h0OmUucmlnaHQtdC53aWR0aCxib3R0b206ZS5ib3R0b20tdC5oZWlnaHQsbGVmdDplLmxlZnQtdC53aWR0aH19ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHNuLnNvbWUodD0+ZVt0XT49MCl9dmFyIFVuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YGhpZGVgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7cmVjdHM6bixwbGF0Zm9ybTpyfT10LHtzdHJhdGVneTppPWByZWZlcmVuY2VIaWRkZW5gLC4uLmF9PWhuKGUsdCk7c3dpdGNoKGkpe2Nhc2VgcmVmZXJlbmNlSGlkZGVuYDp7bGV0IGU9Vm4oYXdhaXQgci5kZXRlY3RPdmVyZmxvdyh0LHsuLi5hLGVsZW1lbnRDb250ZXh0OmByZWZlcmVuY2VgfSksbi5yZWZlcmVuY2UpO3JldHVybntkYXRhOntyZWZlcmVuY2VIaWRkZW5PZmZzZXRzOmUscmVmZXJlbmNlSGlkZGVuOkhuKGUpfX19Y2FzZWBlc2NhcGVkYDp7bGV0IGU9Vm4oYXdhaXQgci5kZXRlY3RPdmVyZmxvdyh0LHsuLi5hLGFsdEJvdW5kYXJ5OiEwfSksbi5mbG9hdGluZyk7cmV0dXJue2RhdGE6e2VzY2FwZWRPZmZzZXRzOmUsZXNjYXBlZDpIbihlKX19fWRlZmF1bHQ6cmV0dXJue319fX19LFduPW5ldyBTZXQoW2BsZWZ0YCxgdG9wYF0pO2FzeW5jIGZ1bmN0aW9uIEduKGUsdCl7bGV0e3BsYWNlbWVudDpuLHBsYXRmb3JtOnIsZWxlbWVudHM6aX09ZSxhPWF3YWl0KHIuaXNSVEw9PW51bGw/dm9pZCAwOnIuaXNSVEwoaS5mbG9hdGluZykpLG89Z24obikscz1fbihuKSxjPWJuKG4pPT09YHlgLGw9V24uaGFzKG8pPy0xOjEsdT1hJiZjPy0xOjEsZD1obih0LGUpLHttYWluQXhpczpmLGNyb3NzQXhpczpwLGFsaWdubWVudEF4aXM6bX09dHlwZW9mIGQ9PWBudW1iZXJgP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmQubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmQuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6ZC5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gcyYmdHlwZW9mIG09PWBudW1iZXJgJiYocD1zPT09YGVuZGA/bSotMTptKSxjP3t4OnAqdSx5OmYqbH06e3g6ZipsLHk6cCp1fX12YXIgS249ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLHtuYW1lOmBvZmZzZXRgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbjtsZXR7eDpyLHk6aSxwbGFjZW1lbnQ6YSxtaWRkbGV3YXJlRGF0YTpvfT10LHM9YXdhaXQgR24odCxlKTtyZXR1cm4gYT09PW8ub2Zmc2V0Py5wbGFjZW1lbnQmJihuPW8uYXJyb3cpIT1udWxsJiZuLmFsaWdubWVudE9mZnNldD97fTp7eDpyK3MueCx5Omkrcy55LGRhdGE6ey4uLnMscGxhY2VtZW50OmF9fX19fSxxbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBzaGlmdGAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHt4Om4seTpyLHBsYWNlbWVudDppLHBsYXRmb3JtOmF9PXQse21haW5BeGlzOm89ITAsY3Jvc3NBeGlzOnM9ITEsbGltaXRlcjpjPXtmbjplPT57bGV0e3g6dCx5Om59PWU7cmV0dXJue3g6dCx5Om59fX0sLi4ubH09aG4oZSx0KSx1PXt4Om4seTpyfSxkPWF3YWl0IGEuZGV0ZWN0T3ZlcmZsb3codCxsKSxmPWJuKGkpLHA9dm4oZiksbT11W3BdLGg9dVtmXSxnPShlLHQpPT5tbih0K2RbZT09PWB5YD9gdG9wYDpgbGVmdGBdLHQsdC1kW2U9PT1geWA/YGJvdHRvbWA6YHJpZ2h0YF0pO28mJihtPWcocCxtKSkscyYmKGg9ZyhmLGgpKTtsZXQgXz1jLmZuKHsuLi50LFtwXTptLFtmXTpofSk7cmV0dXJuey4uLl8sZGF0YTp7eDpfLngtbix5Ol8ueS1yLGVuYWJsZWQ6e1twXTpvLFtmXTpzfX19fX19LEpuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse29wdGlvbnM6ZSxmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxyZWN0czphLG1pZGRsZXdhcmVEYXRhOm99PXQse29mZnNldDpzPTAsbWFpbkF4aXM6Yz0hMCxjcm9zc0F4aXM6bD0hMH09aG4oZSx0KSx1PXt4Om4seTpyfSxkPWJuKGkpLGY9dm4oZCkscD11W2ZdLG09dVtkXSxoPWhuKHMsdCksZz10eXBlb2YgaD09YG51bWJlcmA/e21haW5BeGlzOmgsY3Jvc3NBeGlzOjB9OnttYWluQXhpczpoLm1haW5BeGlzPz8wLGNyb3NzQXhpczpoLmNyb3NzQXhpcz8/MH07aWYoYyl7bGV0IGU9Zj09PWB5YD9gaGVpZ2h0YDpgd2lkdGhgLHQ9YS5yZWZlcmVuY2VbZl0tYS5mbG9hdGluZ1tlXStnLm1haW5BeGlzLG49YS5yZWZlcmVuY2VbZl0rYS5yZWZlcmVuY2VbZV0tZy5tYWluQXhpcztwPHQ/cD10OnA+biYmKHA9bil9aWYobCl7bGV0IGU9Zj09PWB5YD9gd2lkdGhgOmBoZWlnaHRgLHQ9V24uaGFzKGduKGkpKSxuPWEucmVmZXJlbmNlW2RdLWEuZmxvYXRpbmdbZV0rKHQmJm8ub2Zmc2V0Py5bZF18fDApKyh0PzA6Zy5jcm9zc0F4aXMpLHI9YS5yZWZlcmVuY2VbZF0rYS5yZWZlcmVuY2VbZV0rKHQ/MDpvLm9mZnNldD8uW2RdfHwwKS0odD9nLmNyb3NzQXhpczowKTttPG4/bT1uOm0+ciYmKG09cil9cmV0dXJue1tmXTpwLFtkXTptfX19fSxZbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBzaXplYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3BsYWNlbWVudDpuLHJlY3RzOnIscGxhdGZvcm06aSxlbGVtZW50czphfT10LHthcHBseTpvPSgpPT57fSwuLi5zfT1obihlLHQpLGM9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyh0LHMpLGw9Z24obiksdT1fbihuKSxkPWJuKG4pPT09YHlgLHt3aWR0aDpmLGhlaWdodDpwfT1yLmZsb2F0aW5nLG0saDtsPT09YHRvcGB8fGw9PT1gYm90dG9tYD8obT1sLGg9dT09PShhd2FpdChpLmlzUlRMPT1udWxsP3ZvaWQgMDppLmlzUlRMKGEuZmxvYXRpbmcpKT9gc3RhcnRgOmBlbmRgKT9gbGVmdGA6YHJpZ2h0YCk6KGg9bCxtPXU9PT1gZW5kYD9gdG9wYDpgYm90dG9tYCk7bGV0IGc9cC1jLnRvcC1jLmJvdHRvbSxfPWYtYy5sZWZ0LWMucmlnaHQsdj1jbihwLWNbbV0sZykseT1jbihmLWNbaF0sXyksYj10Lm1pZGRsZXdhcmVEYXRhLnNoaWZ0LHg9IWIsUz12LEM9eTtiIT1udWxsJiZiLmVuYWJsZWQueCYmKEM9XyksYiE9bnVsbCYmYi5lbmFibGVkLnkmJihTPWcpLHgmJiF1JiYoZD9DPWYtMipsbihjLmxlZnQsYy5yaWdodCk6Uz1wLTIqbG4oYy50b3AsYy5ib3R0b20pKSxhd2FpdCBvKHsuLi50LGF2YWlsYWJsZVdpZHRoOkMsYXZhaWxhYmxlSGVpZ2h0OlN9KTtsZXQgdz1hd2FpdCBpLmdldERpbWVuc2lvbnMoYS5mbG9hdGluZyk7cmV0dXJuIGYhPT13LndpZHRofHxwIT09dy5oZWlnaHQ/e3Jlc2V0OntyZWN0czohMH19Ont9fX19O2Z1bmN0aW9uIFhuKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8YHVgfWZ1bmN0aW9uIFpuKGUpe3JldHVybiBlcihlKT8oZS5ub2RlTmFtZXx8YGApLnRvTG93ZXJDYXNlKCk6YCNkb2N1bWVudGB9ZnVuY3Rpb24gUW4oZSl7dmFyIHQ7cmV0dXJuKGU9PW51bGx8fCh0PWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9ZnVuY3Rpb24gJG4oZSl7cmV0dXJuKChlcihlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk/LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBlcihlKXtyZXR1cm4gWG4oKT9lIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIFFuKGUpLk5vZGU6ITF9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIFhuKCk/ZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBRbihlKS5FbGVtZW50OiExfWZ1bmN0aW9uIG5yKGUpe3JldHVybiBYbigpP2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFFuKGUpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIHJyKGUpe3JldHVybiFYbigpfHx0eXBlb2YgU2hhZG93Um9vdD5gdWA/ITE6ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGUgaW5zdGFuY2VvZiBRbihlKS5TaGFkb3dSb290fWZ1bmN0aW9uIGlyKGUpe2xldHtvdmVyZmxvdzp0LG92ZXJmbG93WDpuLG92ZXJmbG93WTpyLGRpc3BsYXk6aX09aHIoZSk7cmV0dXJuL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3QodCtyK24pJiZpIT09YGlubGluZWAmJmkhPT1gY29udGVudHNgfWZ1bmN0aW9uIGFyKGUpe3JldHVybi9eKHRhYmxlfHRkfHRoKSQvLnRlc3QoWm4oZSkpfWZ1bmN0aW9uIG9yKGUpe3RyeXtpZihlLm1hdGNoZXMoYDpwb3BvdmVyLW9wZW5gKSlyZXR1cm4hMH1jYXRjaHt9dHJ5e3JldHVybiBlLm1hdGNoZXMoYDptb2RhbGApfWNhdGNoe3JldHVybiExfX12YXIgc3I9L3RyYW5zZm9ybXx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHBlcnNwZWN0aXZlfGZpbHRlci8sY3I9L3BhaW50fGxheW91dHxzdHJpY3R8Y29udGVudC8sbHI9ZT0+ISFlJiZlIT09YG5vbmVgLHVyO2Z1bmN0aW9uIGRyKGUpe2xldCB0PXRyKGUpP2hyKGUpOmU7cmV0dXJuIGxyKHQudHJhbnNmb3JtKXx8bHIodC50cmFuc2xhdGUpfHxscih0LnNjYWxlKXx8bHIodC5yb3RhdGUpfHxscih0LnBlcnNwZWN0aXZlKXx8IXByKCkmJihscih0LmJhY2tkcm9wRmlsdGVyKXx8bHIodC5maWx0ZXIpKXx8c3IudGVzdCh0LndpbGxDaGFuZ2V8fGBgKXx8Y3IudGVzdCh0LmNvbnRhaW58fGBgKX1mdW5jdGlvbiBmcihlKXtsZXQgdD1fcihlKTtmb3IoO25yKHQpJiYhbXIodCk7KXtpZihkcih0KSlyZXR1cm4gdDtpZihvcih0KSlyZXR1cm4gbnVsbDt0PV9yKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHByKCl7cmV0dXJuIHVyPz89dHlwZW9mIENTUzxgdWAmJkNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKGAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcmAsYG5vbmVgKSx1cn1mdW5jdGlvbiBtcihlKXtyZXR1cm4vXihodG1sfGJvZHl8I2RvY3VtZW50KSQvLnRlc3QoWm4oZSkpfWZ1bmN0aW9uIGhyKGUpe3JldHVybiBRbihlKS5nZXRDb21wdXRlZFN0eWxlKGUpfWZ1bmN0aW9uIGdyKGUpe3JldHVybiB0cihlKT97c2Nyb2xsTGVmdDplLnNjcm9sbExlZnQsc2Nyb2xsVG9wOmUuc2Nyb2xsVG9wfTp7c2Nyb2xsTGVmdDplLnNjcm9sbFgsc2Nyb2xsVG9wOmUuc2Nyb2xsWX19ZnVuY3Rpb24gX3IoZSl7aWYoWm4oZSk9PT1gaHRtbGApcmV0dXJuIGU7bGV0IHQ9ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8cnIoZSkmJmUuaG9zdHx8JG4oZSk7cmV0dXJuIHJyKHQpP3QuaG9zdDp0fWZ1bmN0aW9uIHZyKGUpe2xldCB0PV9yKGUpO3JldHVybiBtcih0KT8oZS5vd25lckRvY3VtZW50fHxlKS5ib2R5Om5yKHQpJiZpcih0KT90OnZyKHQpfWZ1bmN0aW9uIHlyKGUsdCxuKXt0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49ITApO2xldCByPXZyKGUpLGk9cj09PWUub3duZXJEb2N1bWVudD8uYm9keSxhPVFuKHIpO2lmKGkpe2xldCBlPWJyKGEpO3JldHVybiB0LmNvbmNhdChhLGEudmlzdWFsVmlld3BvcnR8fFtdLGlyKHIpP3I6W10sZSYmbj95cihlKTpbXSl9cmV0dXJuIHQuY29uY2F0KHIseXIocixbXSxuKSl9ZnVuY3Rpb24gYnIoZSl7cmV0dXJuIGUucGFyZW50JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wYXJlbnQpP2UuZnJhbWVFbGVtZW50Om51bGx9ZnVuY3Rpb24geHIoZSl7bGV0IHQ9aHIoZSksbj1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLHI9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDAsaT1ucihlKSxhPWk/ZS5vZmZzZXRXaWR0aDpuLG89aT9lLm9mZnNldEhlaWdodDpyLHM9dW4obikhPT1hfHx1bihyKSE9PW87cmV0dXJuIHMmJihuPWEscj1vKSx7d2lkdGg6bixoZWlnaHQ6ciwkOnN9fWZ1bmN0aW9uIFNyKGUpe3JldHVybiB0cihlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gQ3IoZSl7bGV0IHQ9U3IoZSk7aWYoIW5yKHQpKXJldHVybiBmbigxKTtsZXQgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDppLCQ6YX09eHIodCksbz0oYT91bihuLndpZHRoKTpuLndpZHRoKS9yLHM9KGE/dW4obi5oZWlnaHQpOm4uaGVpZ2h0KS9pO3JldHVybighb3x8IU51bWJlci5pc0Zpbml0ZShvKSkmJihvPTEpLCghc3x8IU51bWJlci5pc0Zpbml0ZShzKSkmJihzPTEpLHt4Om8seTpzfX12YXIgd3I9Zm4oMCk7ZnVuY3Rpb24gVHIoZSl7bGV0IHQ9UW4oZSk7cmV0dXJuIXByKCl8fCF0LnZpc3VhbFZpZXdwb3J0P3dyOnt4OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfX1mdW5jdGlvbiBFcihlLHQsbil7cmV0dXJuIHQ9PT12b2lkIDAmJih0PSExKSwhIW4mJnQmJm49PT1RbihlKX1mdW5jdGlvbiBEcihlLHQsbixyKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1TcihlKSxvPWZuKDEpO3QmJihyP3RyKHIpJiYobz1DcihyKSk6bz1DcihlKSk7bGV0IHM9RXIoYSxuLHIpP1RyKGEpOmZuKDApLGM9KGkubGVmdCtzLngpL28ueCxsPShpLnRvcCtzLnkpL28ueSx1PWkud2lkdGgvby54LGQ9aS5oZWlnaHQvby55O2lmKGEmJnIpe2xldCBlPVFuKGEpLHQ9dHIocik/UW4ocik6cixuPWUsaT1icihuKTtmb3IoO2kmJnQhPT1uOyl7bGV0IGU9Q3IoaSksdD1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9aHIoaSksYT10LmxlZnQrKGkuY2xpZW50TGVmdCtwYXJzZUZsb2F0KHIucGFkZGluZ0xlZnQpKSplLngsbz10LnRvcCsoaS5jbGllbnRUb3ArcGFyc2VGbG9hdChyLnBhZGRpbmdUb3ApKSplLnk7Yyo9ZS54LGwqPWUueSx1Kj1lLngsZCo9ZS55LGMrPWEsbCs9byxuPVFuKGkpLGk9YnIobil9fXJldHVybiBQbih7d2lkdGg6dSxoZWlnaHQ6ZCx4OmMseTpsfSl9ZnVuY3Rpb24gT3IoZSx0KXtsZXQgbj1ncihlKS5zY3JvbGxMZWZ0O3JldHVybiB0P3QubGVmdCtuOkRyKCRuKGUpKS5sZWZ0K259ZnVuY3Rpb24ga3IoZSx0KXtsZXQgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4Om4ubGVmdCt0LnNjcm9sbExlZnQtT3IoZSxuKSx5Om4udG9wK3Quc2Nyb2xsVG9wfX1mdW5jdGlvbiBBcihlKXtsZXR7ZWxlbWVudHM6dCxyZWN0Om4sb2Zmc2V0UGFyZW50OnIsc3RyYXRlZ3k6aX09ZSxhPWk9PT1gZml4ZWRgLG89JG4ocikscz10P29yKHQuZmxvYXRpbmcpOiExO2lmKHI9PT1vfHxzJiZhKXJldHVybiBuO2xldCBjPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGw9Zm4oMSksdT1mbigwKSxkPW5yKHIpO2lmKChkfHwhYSkmJigoWm4ocikhPT1gYm9keWB8fGlyKG8pKSYmKGM9Z3IocikpLGQpKXtsZXQgZT1EcihyKTtsPUNyKHIpLHUueD1lLngrci5jbGllbnRMZWZ0LHUueT1lLnkrci5jbGllbnRUb3B9bGV0IGY9byYmIWQmJiFhP2tyKG8sYyk6Zm4oMCk7cmV0dXJue3dpZHRoOm4ud2lkdGgqbC54LGhlaWdodDpuLmhlaWdodCpsLnkseDpuLngqbC54LWMuc2Nyb2xsTGVmdCpsLngrdS54K2YueCx5Om4ueSpsLnktYy5zY3JvbGxUb3AqbC55K3UueStmLnl9fWZ1bmN0aW9uIGpyKGUpe3JldHVybiBlLmdldENsaWVudFJlY3RzP0FycmF5LmZyb20oZS5nZXRDbGllbnRSZWN0cygpKTpbXX1mdW5jdGlvbiBNcihlKXtsZXQgdD1ncihlKSxuPWUub3duZXJEb2N1bWVudC5ib2R5LHI9bG4oZS5zY3JvbGxXaWR0aCxlLmNsaWVudFdpZHRoLG4uc2Nyb2xsV2lkdGgsbi5jbGllbnRXaWR0aCksaT1sbihlLnNjcm9sbEhlaWdodCxlLmNsaWVudEhlaWdodCxuLnNjcm9sbEhlaWdodCxuLmNsaWVudEhlaWdodCksYT0tdC5zY3JvbGxMZWZ0K09yKGUpLG89LXQuc2Nyb2xsVG9wO3JldHVybiBocihuKS5kaXJlY3Rpb249PT1gcnRsYCYmKGErPWxuKGUuY2xpZW50V2lkdGgsbi5jbGllbnRXaWR0aCktcikse3dpZHRoOnIsaGVpZ2h0OmkseDphLHk6b319dmFyIE5yPTI1O2Z1bmN0aW9uIFByKGUsdCxuKXtuPT09dm9pZCAwJiYobj1gdmlld3BvcnRgKTtsZXQgcj1uPT09YGxheW91dFZpZXdwb3J0YCxpPVFuKGUpLGE9JG4oZSksbz1pLnZpc3VhbFZpZXdwb3J0LHM9YS5jbGllbnRXaWR0aCxjPWEuY2xpZW50SGVpZ2h0LGw9MCx1PTA7aWYobyl7bGV0IGU9IXByKCl8fHQ9PT1gZml4ZWRgO3I/ZXx8KGw9LW8ub2Zmc2V0TGVmdCx1PS1vLm9mZnNldFRvcCk6KHM9by53aWR0aCxjPW8uaGVpZ2h0LGUmJihsPW8ub2Zmc2V0TGVmdCx1PW8ub2Zmc2V0VG9wKSl9aWYoT3IoYSk8PTApe2xldCBlPWEub3duZXJEb2N1bWVudCx0PWUuYm9keSxuPWdldENvbXB1dGVkU3R5bGUodCkscj1lLmNvbXBhdE1vZGU9PT1gQ1NTMUNvbXBhdGAmJnBhcnNlRmxvYXQobi5tYXJnaW5MZWZ0KStwYXJzZUZsb2F0KG4ubWFyZ2luUmlnaHQpfHwwLGk9TWF0aC5hYnMoYS5jbGllbnRXaWR0aC10LmNsaWVudFdpZHRoLXIpLG89Z2V0Q29tcHV0ZWRTdHlsZShhKS5zY3JvbGxiYXJHdXR0ZXI9PT1gc3RhYmxlIGJvdGgtZWRnZXNgP2kvMjppO288PU5yJiYocy09byl9cmV0dXJue3dpZHRoOnMsaGVpZ2h0OmMseDpsLHk6dX19ZnVuY3Rpb24gRnIoZSx0KXtsZXQgbj1EcihlLCEwLHQ9PT1gZml4ZWRgKSxyPW4udG9wK2UuY2xpZW50VG9wLGk9bi5sZWZ0K2UuY2xpZW50TGVmdCxhPUNyKGUpO3JldHVybnt3aWR0aDplLmNsaWVudFdpZHRoKmEueCxoZWlnaHQ6ZS5jbGllbnRIZWlnaHQqYS55LHg6aSphLngseTpyKmEueX19ZnVuY3Rpb24gSXIoZSx0LG4pe2xldCByO2lmKHQ9PT1gdmlld3BvcnRgfHx0PT09YGxheW91dFZpZXdwb3J0YClyPVByKGUsbix0KTtlbHNlIGlmKHQ9PT1gZG9jdW1lbnRgKXI9TXIoJG4oZSkpO2Vsc2UgaWYodHIodCkpcj1Gcih0LG4pO2Vsc2V7bGV0IG49VHIoZSk7cj17eDp0Lngtbi54LHk6dC55LW4ueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIFBuKHIpfWZ1bmN0aW9uIExyKGUsdCl7bGV0IG49dC5nZXQoZSk7aWYobilyZXR1cm4gbjtsZXQgcj15cihlLFtdLCExKS5maWx0ZXIoZT0+dHIoZSkmJlpuKGUpIT09YGJvZHlgKSxpPW51bGwsYT1ocihlKS5wb3NpdGlvbj09PWBmaXhlZGAsbz1hP19yKGUpOmU7Zm9yKDt0cihvKSYmIW1yKG8pOyl7bGV0IGU9aHIobyksdD1kcihvKSxuPWk/aS5wb3NpdGlvbjphP2BmaXhlZGA6YGA7IXQmJihuPT09YGZpeGVkYHx8bj09PWBhYnNvbHV0ZWAmJmUucG9zaXRpb249PT1gc3RhdGljYCk/cj1yLmZpbHRlcihlPT5lIT09byk6aT1lLG89X3Iobyl9cmV0dXJuIHQuc2V0KGUscikscn1mdW5jdGlvbiBScihlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6aX09ZSxhPVsuLi5uPT09YGNsaXBwaW5nQW5jZXN0b3JzYD9vcih0KT9bXTpMcih0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxvPUlyKHQsYVswXSxpKSxzPW8udG9wLGM9by5yaWdodCxsPW8uYm90dG9tLHU9by5sZWZ0O2ZvcihsZXQgZT0xO2U8YS5sZW5ndGg7ZSsrKXtsZXQgbj1Jcih0LGFbZV0saSk7cz1sbihuLnRvcCxzKSxjPWNuKG4ucmlnaHQsYyksbD1jbihuLmJvdHRvbSxsKSx1PWxuKG4ubGVmdCx1KX1yZXR1cm57d2lkdGg6Yy11LGhlaWdodDpsLXMseDp1LHk6c319ZnVuY3Rpb24genIoZSl7bGV0e3dpZHRoOnQsaGVpZ2h0Om59PXhyKGUpO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBCcihlLHQsbil7bGV0IHI9bnIodCksaT0kbih0KSxhPW49PT1gZml4ZWRgLG89RHIoZSwhMCxhLHQpLHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYz1mbigwKTtpZigocnx8IWEpJiYoKFpuKHQpIT09YGJvZHlgfHxpcihpKSkmJihzPWdyKHQpKSxyKSl7bGV0IGU9RHIodCwhMCxhLHQpO2MueD1lLngrdC5jbGllbnRMZWZ0LGMueT1lLnkrdC5jbGllbnRUb3B9IXImJmkmJihjLng9T3IoaSkpO2xldCBsPWkmJiFyJiYhYT9rcihpLHMpOmZuKDApO3JldHVybnt4Om8ubGVmdCtzLnNjcm9sbExlZnQtYy54LWwueCx5Om8udG9wK3Muc2Nyb2xsVG9wLWMueS1sLnksd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9fWZ1bmN0aW9uIFZyKGUpe3JldHVybiBocihlKS5wb3NpdGlvbj09PWBzdGF0aWNgfWZ1bmN0aW9uIEhyKGUsdCl7aWYoIW5yKGUpfHxocihlKS5wb3NpdGlvbj09PWBmaXhlZGApcmV0dXJuIG51bGw7aWYodClyZXR1cm4gdChlKTtsZXQgbj1lLm9mZnNldFBhcmVudDtyZXR1cm4gJG4oZSk9PT1uJiYobj1uLm93bmVyRG9jdW1lbnQuYm9keSksbn1mdW5jdGlvbiBVcihlLHQpe2xldCBuPVFuKGUpO2lmKG9yKGUpKXJldHVybiBuO2lmKCFucihlKSl7bGV0IHQ9X3IoZSk7Zm9yKDt0JiYhbXIodCk7KXtpZih0cih0KSYmIVZyKHQpKXJldHVybiB0O3Q9X3IodCl9cmV0dXJuIG59bGV0IHI9SHIoZSx0KTtmb3IoO3ImJmFyKHIpJiZWcihyKTspcj1IcihyLHQpO3JldHVybiByJiZtcihyKSYmVnIocikmJiFkcihyKT9uOnJ8fGZyKGUpfHxufXZhciBXcj1hc3luYyBmdW5jdGlvbihlKXtsZXQgdD10aGlzLmdldE9mZnNldFBhcmVudHx8VXIsbj10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCBuKGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6QnIoZS5yZWZlcmVuY2UsYXdhaXQgdChlLmZsb2F0aW5nKSxlLnN0cmF0ZWd5KSxmbG9hdGluZzp7eDowLHk6MCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19fTtmdW5jdGlvbiBHcihlKXtyZXR1cm4gaHIoZSkuZGlyZWN0aW9uPT09YHJ0bGB9dmFyIEtyPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpBcixnZXREb2N1bWVudEVsZW1lbnQ6JG4sZ2V0Q2xpcHBpbmdSZWN0OlJyLGdldE9mZnNldFBhcmVudDpVcixnZXRFbGVtZW50UmVjdHM6V3IsZ2V0Q2xpZW50UmVjdHM6anIsZ2V0RGltZW5zaW9uczp6cixnZXRTY2FsZTpDcixpc0VsZW1lbnQ6dHIsaXNSVEw6R3J9O2Z1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIGUueD09PXQueCYmZS55PT09dC55JiZlLndpZHRoPT09dC53aWR0aCYmZS5oZWlnaHQ9PT10LmhlaWdodH1mdW5jdGlvbiBKcihlLHQsbil7bGV0IHI9bnVsbCxpLGE9JG4oZSk7ZnVuY3Rpb24gbygpe3ZhciBlO2NsZWFyVGltZW91dChpKSwoZT1yKT09bnVsbHx8ZS5kaXNjb25uZWN0KCkscj1udWxsfWZ1bmN0aW9uIHMobixjKXtuPT09dm9pZCAwJiYobj0hMSksYz09PXZvaWQgMCYmKGM9MSksbygpO2xldCBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6dSx0b3A6ZCx3aWR0aDpmLGhlaWdodDpwfT1sO2lmKG58fHQoKSwhZnx8IXApcmV0dXJuO2xldCBtPWRuKGQpLGg9ZG4oYS5jbGllbnRXaWR0aC0odStmKSksZz1kbihhLmNsaWVudEhlaWdodC0oZCtwKSksXz1kbih1KSx2PXtyb290TWFyZ2luOi1tK2BweCBgKy1oK2BweCBgKy1nK2BweCBgKy1fK2BweGAsdGhyZXNob2xkOmxuKDAsY24oMSxjKSl8fDF9LHk9ITA7ZnVuY3Rpb24gYih0KXtsZXQgbj10WzBdLmludGVyc2VjdGlvblJhdGlvO2lmKCFxcihsLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKXJldHVybiBzKCk7aWYobiE9PWMpe2lmKCF5KXJldHVybiBzKCk7bj9zKCExLG4pOmk9c2V0VGltZW91dCgoKT0+e3MoITEsMWUtNyl9LDFlMyl9eT0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4udixyb290OmEub3duZXJEb2N1bWVudH0pfWNhdGNoe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsdil9ci5vYnNlcnZlKGUpfWxldCBjPVFuKGUpLGw9KCk9PnMobik7cmV0dXJuIGMuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxsKSxzKCEwKSwoKT0+e2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxsKSxvKCl9fWZ1bmN0aW9uIFlyKGUsdCxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7YW5jZXN0b3JTY3JvbGw6aT0hMCxhbmNlc3RvclJlc2l6ZTphPSEwLGVsZW1lbnRSZXNpemU6bz10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PWBmdW5jdGlvbmAsbGF5b3V0U2hpZnQ6cz10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PWBmdW5jdGlvbmAsYW5pbWF0aW9uRnJhbWU6Yz0hMX09cixsPVNyKGUpLHU9aXx8YT9bLi4ubD95cihsKTpbXSwuLi50P3lyKHQpOltdXTpbXTt1LmZvckVhY2goZT0+e2kmJmUuYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxuKSxhJiZlLmFkZEV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbil9KTtsZXQgZD1sJiZzP0pyKGwsbixhKTpudWxsLGY9LTEscD1udWxsO28mJihwPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0W3JdPWU7ciYmci50YXJnZXQ9PT1sJiZwJiZ0JiYocC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTsoZT1wKT09bnVsbHx8ZS5vYnNlcnZlKHQpfSkpLG4oKX0pLGwmJiFjJiZwLm9ic2VydmUobCksdCYmcC5vYnNlcnZlKHQpKTtsZXQgbSxoPWM/RHIoZSk6bnVsbDtjJiZnKCk7ZnVuY3Rpb24gZygpe2xldCB0PURyKGUpO2gmJiFxcihoLHQpJiZuKCksaD10LG09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGcpfXJldHVybiBuKCksKCk9Pnt2YXIgZTt1LmZvckVhY2goZT0+e2kmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxuKSxhJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbil9KSxkPy4oKSwoZT1wKT09bnVsbHx8ZS5kaXNjb25uZWN0KCkscD1udWxsLGMmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKG0pfX12YXIgWHI9S24sWnI9cW4sUXI9Qm4sJHI9WW4sZWk9VW4sdGk9em4sbmk9Sm4scmk9KGUsdCxuKT0+e2xldCByPW5ldyBNYXAsaT1uPz97fSxhPXsuLi5LciwuLi5pLnBsYXRmb3JtLF9jOnJ9O3JldHVybiBSbihlLHQsey4uLmkscGxhdGZvcm06YX0pfTtmdW5jdGlvbiBpaShlKXtyZXR1cm4gdHlwZW9mIGU9PWBvYmplY3RgJiYhIWUmJmAkZWxgaW4gZX1mdW5jdGlvbiBhaShlKXtpZihpaShlKSl7bGV0IHQ9ZS4kZWw7cmV0dXJuIGVyKHQpJiZabih0KT09PWAjY29tbWVudGA/bnVsbDp0fXJldHVybiBlfWZ1bmN0aW9uIG9pKGUpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lKCk6QShlKX1mdW5jdGlvbiBzaShlKXtyZXR1cm57bmFtZTpgYXJyb3dgLG9wdGlvbnM6ZSxmbih0KXtsZXQgbj1haShvaShlLmVsZW1lbnQpKTtyZXR1cm4gbj09bnVsbD97fTp0aSh7ZWxlbWVudDpuLHBhZGRpbmc6ZS5wYWRkaW5nfSkuZm4odCl9fX1mdW5jdGlvbiBjaShlKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz5gdWA/MTooZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRldmljZVBpeGVsUmF0aW98fDF9ZnVuY3Rpb24gbGkoZSx0KXtsZXQgbj1jaShlKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259ZnVuY3Rpb24gdWkoZSx0LHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXQgaT1yLndoaWxlRWxlbWVudHNNb3VudGVkLGE9eigoKT0+b2koci5vcGVuKT8/ITApLG89eigoKT0+b2koci5taWRkbGV3YXJlKSkscz16KCgpPT5vaShyLnBsYWNlbWVudCk/P2Bib3R0b21gKSxsPXooKCk9Pm9pKHIuc3RyYXRlZ3kpPz9gYWJzb2x1dGVgKSx1PXooKCk9Pm9pKHIudHJhbnNmb3JtKT8/ITApLGQ9eigoKT0+YWkoZS52YWx1ZSkpLGY9eigoKT0+YWkodC52YWx1ZSkpLHA9QygwKSxtPUMoMCksaD1DKGwudmFsdWUpLGc9QyhzLnZhbHVlKSxfPWsoe30pLHY9QyghMSkseT16KCgpPT57bGV0IGU9e3Bvc2l0aW9uOmgudmFsdWUsbGVmdDpgMGAsdG9wOmAwYH07aWYoIWYudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bGkoZi52YWx1ZSxwLnZhbHVlKSxuPWxpKGYudmFsdWUsbS52YWx1ZSk7cmV0dXJuIHUudmFsdWU/ey4uLmUsdHJhbnNmb3JtOmB0cmFuc2xhdGUoYCt0K2BweCwgYCtuK2BweClgLC4uLmNpKGYudmFsdWUpPj0xLjUmJnt3aWxsQ2hhbmdlOmB0cmFuc2Zvcm1gfX06e3Bvc2l0aW9uOmgudmFsdWUsbGVmdDp0K2BweGAsdG9wOm4rYHB4YH19KSxiO2Z1bmN0aW9uIHgoKXtpZihkLnZhbHVlPT1udWxsfHxmLnZhbHVlPT1udWxsKXJldHVybjtsZXQgZT1hLnZhbHVlO3JpKGQudmFsdWUsZi52YWx1ZSx7bWlkZGxld2FyZTpvLnZhbHVlLHBsYWNlbWVudDpzLnZhbHVlLHN0cmF0ZWd5OmwudmFsdWV9KS50aGVuKHQ9PntwLnZhbHVlPXQueCxtLnZhbHVlPXQueSxoLnZhbHVlPXQuc3RyYXRlZ3ksZy52YWx1ZT10LnBsYWNlbWVudCxfLnZhbHVlPXQubWlkZGxld2FyZURhdGEsdi52YWx1ZT1lIT09ITF9KX1mdW5jdGlvbiBTKCl7dHlwZW9mIGI9PWBmdW5jdGlvbmAmJihiKCksYj12b2lkIDApfWZ1bmN0aW9uIHcoKXtpZihTKCksaT09PXZvaWQgMCl7eCgpO3JldHVybn1pZihkLnZhbHVlIT1udWxsJiZmLnZhbHVlIT1udWxsKXtiPWkoZC52YWx1ZSxmLnZhbHVlLHgpO3JldHVybn19ZnVuY3Rpb24gRSgpe2EudmFsdWV8fCh2LnZhbHVlPSExKX1yZXR1cm4gaihbbyxzLGwsYV0seCx7Zmx1c2g6YHN5bmNgfSksaihbZCxmXSx3LHtmbHVzaDpgc3luY2B9KSxqKGEsRSx7Zmx1c2g6YHN5bmNgfSksYygpJiZuKFMpLHt4OlQocCkseTpUKG0pLHN0cmF0ZWd5OlQoaCkscGxhY2VtZW50OlQoZyksbWlkZGxld2FyZURhdGE6VChfKSxpc1Bvc2l0aW9uZWQ6VCh2KSxmbG9hdGluZ1N0eWxlczp5LHVwZGF0ZTp4fX12YXIgZGk9W2BkaXJgXSxmaT17c2lkZTpgYm90dG9tYCxzaWRlT2Zmc2V0OjAsc2lkZUZsaXA6ITAsYWxpZ246YGNlbnRlcmAsYWxpZ25PZmZzZXQ6MCxhbGlnbkZsaXA6ITAsYXJyb3dQYWRkaW5nOjAsaGlkZVNoaWZ0ZWRBcnJvdzohMCxhdm9pZENvbGxpc2lvbnM6ITAsY29sbGlzaW9uQm91bmRhcnk6KCk9PltdLGNvbGxpc2lvblBhZGRpbmc6MCxzdGlja3k6YHBhcnRpYWxgLGhpZGVXaGVuRGV0YWNoZWQ6ITEscG9zaXRpb25TdHJhdGVneTpgZml4ZWRgLHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6YG9wdGltaXplZGAscHJpb3JpdGl6ZVBvc2l0aW9uOiExfSxbcGksbWldPXNlKGBQb3BwZXJDb250ZW50YCksaGk9Rih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyQ29udGVudGAscHJvcHM6X2Uoe21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFsaWduT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxjb2xsaXNpb25Cb3VuZGFyeTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxjb2xsaXNpb25QYWRkaW5nOnt0eXBlOltOdW1iZXIsT2JqZWN0XSxyZXF1aXJlZDohMX0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSx7Li4uZml9KSxlbWl0czpbYHBsYWNlZGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9JHQoKSx7Zm9yd2FyZFJlZjphLGN1cnJlbnRFbGVtZW50OmN9PWwoKSxkPXMoeigoKT0+bi5kaXIpKSxmPUMoKSxwPUMoKSx7d2lkdGg6bSxoZWlnaHQ6aH09Q3QocCksZz16KCgpPT5uLnNpZGUrKG4uYWxpZ249PT1gY2VudGVyYD9gYDpgLSR7bi5hbGlnbn1gKSksXz16KCgpPT50eXBlb2Ygbi5jb2xsaXNpb25QYWRkaW5nPT1gbnVtYmVyYD9uLmNvbGxpc2lvblBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLm4uY29sbGlzaW9uUGFkZGluZ30pLHY9eigoKT0+QXJyYXkuaXNBcnJheShuLmNvbGxpc2lvbkJvdW5kYXJ5KT9uLmNvbGxpc2lvbkJvdW5kYXJ5OltuLmNvbGxpc2lvbkJvdW5kYXJ5XSkseT16KCgpPT4oe3BhZGRpbmc6Xy52YWx1ZSxib3VuZGFyeTp2LnZhbHVlLmZpbHRlcihybiksYWx0Qm91bmRhcnk6di52YWx1ZS5sZW5ndGg+MH0pKSxiPXooKCk9Pih7bWFpbkF4aXM6bi5zaWRlRmxpcCxjcm9zc0F4aXM6bi5hbGlnbkZsaXB9KSkseD16KCgpPT5bWHIoe21haW5BeGlzOm4uc2lkZU9mZnNldCtoLnZhbHVlLGFsaWdubWVudEF4aXM6bi5hbGlnbk9mZnNldH0pLG4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmUXIoey4uLnkudmFsdWUsLi4uYi52YWx1ZX0pLG4uYXZvaWRDb2xsaXNpb25zJiZacih7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiEhbi5wcmlvcml0aXplUG9zaXRpb24sbGltaXRlcjpuLnN0aWNreT09PWBwYXJ0aWFsYD9uaSgpOnZvaWQgMCwuLi55LnZhbHVlfSksIW4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmUXIoey4uLnkudmFsdWUsLi4uYi52YWx1ZX0pLCRyKHsuLi55LnZhbHVlLGFwcGx5Oih7ZWxlbWVudHM6ZSxyZWN0czp0LGF2YWlsYWJsZVdpZHRoOm4sYXZhaWxhYmxlSGVpZ2h0OnJ9KT0+e2xldHt3aWR0aDppLGhlaWdodDphfT10LnJlZmVyZW5jZSxvPWUuZmxvYXRpbmcuc3R5bGU7by5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hdmFpbGFibGUtd2lkdGhgLGAke259cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHRgLGAke3J9cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWFuY2hvci13aWR0aGAsYCR7aX1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLWhlaWdodGAsYCR7YX1weGApfX0pLHAudmFsdWUmJnNpKHtlbGVtZW50OnAudmFsdWUscGFkZGluZzpuLmFycm93UGFkZGluZ30pLGFuKHthcnJvd1dpZHRoOm0udmFsdWUsYXJyb3dIZWlnaHQ6aC52YWx1ZSxkaXI6ZC52YWx1ZX0pLG4uaGlkZVdoZW5EZXRhY2hlZCYmZWkoe3N0cmF0ZWd5OmByZWZlcmVuY2VIaWRkZW5gLC4uLnkudmFsdWV9KV0pLHtmbG9hdGluZ1N0eWxlczpTLHBsYWNlbWVudDp3LGlzUG9zaXRpb25lZDpULG1pZGRsZXdhcmVEYXRhOkUsdXBkYXRlOkR9PXVpKHooKCk9Pm4ucmVmZXJlbmNlPz9pLmFuY2hvci52YWx1ZSksZix7c3RyYXRlZ3k6bi5wb3NpdGlvblN0cmF0ZWd5LHBsYWNlbWVudDpnLHdoaWxlRWxlbWVudHNNb3VudGVkOiguLi5lKT0+WXIoLi4uZSx7bGF5b3V0U2hpZnQ6IW4uZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQsYW5pbWF0aW9uRnJhbWU6bi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5PT09YGFsd2F5c2B9KSxtaWRkbGV3YXJlOnh9KSxPPXooKCk9Pm9uKHcudmFsdWUpWzBdKSxrPXooKCk9Pm9uKHcudmFsdWUpWzFdKTtZZSgoKT0+e1QudmFsdWUmJnIoYHBsYWNlZGApfSk7bGV0IGVlPXooKCk9PntsZXQgZT1FLnZhbHVlLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wO3JldHVybiBuLmhpZGVTaGlmdGVkQXJyb3cmJmV9KSx0ZT1DKGBgKTtyZXR1cm4gbygoKT0+e2MudmFsdWUmJih0ZS52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjLnZhbHVlKS56SW5kZXgpfSksbWkoe3BsYWNlZFNpZGU6TyxvbkFycm93Q2hhbmdlOmU9PnAudmFsdWU9ZSxhcnJvd1g6eigoKT0+RS52YWx1ZS5hcnJvdz8ueD8/MCksYXJyb3dZOnooKCk9PkUudmFsdWUuYXJyb3c/Lnk/PzApLHNob3VsZEhpZGVBcnJvdzplZX0pLChlLHQpPT4oTigpLFAoYGRpdmAse3JlZl9rZXk6YGZsb2F0aW5nUmVmYCxyZWY6ZiwiZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXIiOmBgLGRpcjpBKGQpLHN0eWxlOm9lKHsuLi5BKFMpLHRyYW5zZm9ybTpBKFQpP0EoUykudHJhbnNmb3JtOmB0cmFuc2xhdGUoMCwgLTIwMCUpYCxtaW5XaWR0aDpgbWF4LWNvbnRlbnRgLHpJbmRleDp0ZS52YWx1ZSwiLS1yZWthLXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luIjpbQShFKS50cmFuc2Zvcm1PcmlnaW4/LngsQShFKS50cmFuc2Zvcm1PcmlnaW4/LnldLmpvaW4oYCBgKSwuLi5BKEUpLmhpZGU/LnJlZmVyZW5jZUhpZGRlbiYme3Zpc2liaWxpdHk6YGhpZGRlbmAscG9pbnRlckV2ZW50czpgbm9uZWB9fSl9LFtuLm1lbW9EZXBlbmRlbmNpZXM/dShbbi5hc0NoaWxkLG4uYXMsTy52YWx1ZSxrLnZhbHVlLEEoVCksLi4uT2JqZWN0LnZhbHVlcyhlLiRhdHRycyksLi4ubi5tZW1vRGVwZW5kZW5jaWVzXSwoKT0+KE4oKSxMKEEoQiksSSh7a2V5OjAscmVmOkEoYSl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczpuLmFzLCJkYXRhLXNpZGUiOk8udmFsdWUsImRhdGEtYWxpZ24iOmsudmFsdWUsc3R5bGU6e2FuaW1hdGlvbjpBKFQpP3ZvaWQgMDpgbm9uZWB9fSkse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2Bhcy1jaGlsZGAsYGFzYCxgZGF0YS1zaWRlYCxgZGF0YS1hbGlnbmAsYHN0eWxlYF0pKSx0LDApOihOKCksTChBKEIpLEkoe2tleToxLHJlZjpBKGEpfSxlLiRhdHRycyx7ImFzLWNoaWxkIjpuLmFzQ2hpbGQsYXM6bi5hcywiZGF0YS1zaWRlIjpPLnZhbHVlLCJkYXRhLWFsaWduIjprLnZhbHVlLGRpcjpBKGQpLHN0eWxlOnthbmltYXRpb246QShUKT92b2lkIDA6YG5vbmVgfX0pLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgYXMtY2hpbGRgLGBhc2AsYGRhdGEtc2lkZWAsYGRhdGEtYWxpZ25gLGBkaXJgLGBzdHlsZWBdKSldLDEyLGRpKSl9fSk7ZnVuY3Rpb24gZ2koZSl7bGV0IHQ9RSh7bm9uY2U6QygpfSk7cmV0dXJuIHooKCk9PmU/LnZhbHVlfHx0Lm5vbmNlPy52YWx1ZSl9dmFyIF9pPVtgIGAsYEVudGVyYCxgQXJyb3dVcGAsYEFycm93RG93bmBdLHZpPVtgIGAsYEVudGVyYF07ZnVuY3Rpb24geWkoZSx0LG4pe3JldHVybiBlPT09dm9pZCAwPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKGU9PmJpKGUsdCxuKSk6YmkoZSx0LG4pfWZ1bmN0aW9uIGJpKGUsdCxuKXtyZXR1cm4gZT09PXZvaWQgMHx8dD09PXZvaWQgMD8hMTp0eXBlb2YgZT09YHN0cmluZ2A/ZT09PXQ6dHlwZW9mIG49PWBmdW5jdGlvbmA/bihlLHQpOnR5cGVvZiBuPT1gc3RyaW5nYD9lPy5bbl09PT10Py5bbl06cChlLHQpfWZ1bmN0aW9uIHhpKGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB8fEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MH12YXIgU2k9W2B2YWx1ZWBdLFtDaSx3aV09c2UoYFNlbGVjdFJvb3RgKSxUaT1GKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RSb290YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxudWxsYWJsZVZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXSxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cCh0LHtlbWl0Om59KXtsZXQgcj10LGk9bix7cmVxdWlyZWQ6YSxkaXNhYmxlZDpvLG11bHRpcGxlOmMsZGlyOmx9PV8ociksdT1PKHIsYG1vZGVsVmFsdWVgLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRWYWx1ZT8/KGMudmFsdWU/W106dm9pZCAwKSxwYXNzaXZlOnIubW9kZWxWYWx1ZT09PXZvaWQgMCxkZWVwOiEwfSksZD1PKHIsYG9wZW5gLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRPcGVuLHBhc3NpdmU6ci5vcGVuPT09dm9pZCAwfSksZj1DKCkscD1DKCksaD1DKHt4OjAseTowfSksZz16KCgpPT5jLnZhbHVlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpP3UudmFsdWU/Lmxlbmd0aD09PTA6bSh1LnZhbHVlKSk7cGUoe2lzUHJvdmlkZXI6ITB9KTtsZXQgdj1zKGwpLHk9ZnQoZiksYj1DKG5ldyBTZXQpLHg9eigoKT0+QXJyYXkuZnJvbShiLnZhbHVlKS5tYXAoZT0+ZS52YWx1ZSkuam9pbihgO2ApKTtmdW5jdGlvbiBTKGUpe2lmKGMudmFsdWUpe2xldCB0PUFycmF5LmlzQXJyYXkodS52YWx1ZSk/Wy4uLnUudmFsdWVdOltdLG49dC5maW5kSW5kZXgodD0+YmkodCxlLHIuYnkpKTtuPT09LTE/dC5wdXNoKGUpOnQuc3BsaWNlKG4sMSksdS52YWx1ZT1bLi4udF19ZWxzZSB1LnZhbHVlPWV9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gQXJyYXkuZnJvbShiLnZhbHVlKS5maW5kKHQ9PnlpKGUsdC52YWx1ZSxyLmJ5KSl9cmV0dXJuIHdpKHt0cmlnZ2VyRWxlbWVudDpmLG9uVHJpZ2dlckNoYW5nZTplPT57Zi52YWx1ZT1lfSx2YWx1ZUVsZW1lbnQ6cCxvblZhbHVlRWxlbWVudENoYW5nZTplPT57cC52YWx1ZT1lfSxjb250ZW50SWQ6YGAsbW9kZWxWYWx1ZTp1LG9uVmFsdWVDaGFuZ2U6UyxieTpyLmJ5LG9wZW46ZCxtdWx0aXBsZTpjLHJlcXVpcmVkOmEsb25PcGVuQ2hhbmdlOmU9PntkLnZhbHVlPWV9LGRpcjp2LHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjpoLGRpc2FibGVkOm8saXNFbXB0eU1vZGVsVmFsdWU6ZyxvcHRpb25zU2V0OmIsb25PcHRpb25BZGQ6ZT0+e2xldCB0PXcoZS52YWx1ZSk7dCYmYi52YWx1ZS5kZWxldGUodCksYi52YWx1ZS5hZGQoZSl9LG9uT3B0aW9uUmVtb3ZlOmU9PntsZXQgdD13KGUudmFsdWUpO3QmJmIudmFsdWUuZGVsZXRlKHQpfX0pLCh0LG4pPT4oTigpLEwoQSh0biksbnVsbCx7ZGVmYXVsdDpNKCgpPT5bVih0LiRzbG90cyxgZGVmYXVsdGAse21vZGVsVmFsdWU6QSh1KSxvcGVuOkEoZCl9KSxBKHkpJiZ0Lm5hbWU/KE4oKSxMKEVpLHtrZXk6eC52YWx1ZSwiYXJpYS1oaWRkZW4iOmB0cnVlYCx0YWJpbmRleDpgLTFgLG11bHRpcGxlOkEoYykscmVxdWlyZWQ6QShhKSxuYW1lOnQubmFtZSxhdXRvY29tcGxldGU6dC5hdXRvY29tcGxldGUsZGlzYWJsZWQ6QShvKSx2YWx1ZTpBKHUpfSx7ZGVmYXVsdDpNKCgpPT5bQShtKShBKHUpKT8oTigpLFAoYG9wdGlvbmAse2tleTowLHZhbHVlOnQubnVsbGFibGVWYWx1ZX0sbnVsbCw4LFNpKSk6VGUoYHYtaWZgLCEwKSwoTighMCksUChlLG51bGwscWUoQXJyYXkuZnJvbShiLnZhbHVlKSxlPT4oTigpLFAoYG9wdGlvbmAsSSh7a2V5OmUudmFsdWU/P2BgfSx7cmVmX2ZvcjohMH0sZSksbnVsbCwxNikpKSwxMjgpKV0pLF86MX0sOCxbYG11bHRpcGxlYCxgcmVxdWlyZWRgLGBuYW1lYCxgYXV0b2NvbXBsZXRlYCxgZGlzYWJsZWRgLGB2YWx1ZWBdKSk6VGUoYHYtaWZgLCEwKV0pLF86M30pKX19KSxFaT1GKHtfX25hbWU6YEJ1YmJsZVNlbGVjdGAscHJvcHM6e2F1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxmb3JtOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHNpemU6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSx2YWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUMoKSxyPUNpKCk7aigoKT0+dC52YWx1ZSwoZSx0KT0+e2xldCByPXdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsYHZhbHVlYCkuc2V0O2lmKGUhPT10JiZpJiZuLnZhbHVlKXtsZXQgdD1uZXcgRXZlbnQoYGNoYW5nZWAse2J1YmJsZXM6ITB9KTtpLmNhbGwobi52YWx1ZSxlKSxuLnZhbHVlLmRpc3BhdGNoRXZlbnQodCl9fSk7ZnVuY3Rpb24gaShlKXtyLm9uVmFsdWVDaGFuZ2UoZS50YXJnZXQudmFsdWUpfXJldHVybihlLHIpPT4oTigpLEwoQShRdCkseyJhcy1jaGlsZCI6YGB9LHtkZWZhdWx0Ok0oKCk9PltGZShgc2VsZWN0YCxJKHtyZWZfa2V5OmBzZWxlY3RFbGVtZW50YCxyZWY6bn0sdCx7b25JbnB1dDppfSksW1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMTYpXSksXzozfSkpfX0pLERpPUYoe19fbmFtZTpgU2VsZWN0UG9wcGVyUG9zaXRpb25gLHByb3BzOnttZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHN0YXJ0YH0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExLGRlZmF1bHQ6MTB9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9cmUoZSk7cmV0dXJuKGUsbik9PihOKCksTChBKGhpKSxJKEEodCkse3N0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbiI6YHZhcigtLXJla2EtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pYCwiLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS13aWR0aCI6YHZhcigtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS13aWR0aClgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYW5jaG9yLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3ItaGVpZ2h0KWB9fSkse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxPaT17b25WaWV3cG9ydENoYW5nZTooKT0+e30saXRlbVRleHRSZWZDYWxsYmFjazooKT0+e30saXRlbVJlZkNhbGxiYWNrOigpPT57fX0sW2tpLEFpXT1zZShgU2VsZWN0Q29udGVudGApLGppPUYoe19fbmFtZTpgU2VsZWN0Q29udGVudEltcGxgLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaXRlbS1hbGlnbmVkYH0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxtZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHN0YXJ0YH0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH19LGVtaXRzOltgY2xvc2VBdXRvRm9jdXNgLGBlc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYF0sc2V0dXAoZSx7ZW1pdDpufSl7bGV0IHI9ZSxpPW4sYT1DaSgpO3V0KCksb3Qoci5ib2R5TG9jayk7bGV0e0NvbGxlY3Rpb25TbG90OnMsZ2V0SXRlbXM6Y309cGUoKSxsPUMoKTtTdChsKTtsZXR7c2VhcmNoOnUsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOmR9PXd0KCksZj1DKCkscD1DKCksbT1DKCksaD1DKCExKSxnPUMoITEpLF89QyghMSk7ZnVuY3Rpb24gdigpe3AudmFsdWUmJmwudmFsdWUmJlh0KFtwLnZhbHVlLGwudmFsdWVdKX1qKGgsKCk9Pnt2KCl9KTtsZXR7b25PcGVuQ2hhbmdlOnksdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmJ9PWE7byhlPT57aWYoIWwudmFsdWUpcmV0dXJuO2xldCB0PXt4OjAseTowfSxuPWU9Pnt0PXt4Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWCktKGIudmFsdWU/Lng/PzApKSx5Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWSktKGIudmFsdWU/Lnk/PzApKX19LHI9ZT0+e2UucG9pbnRlclR5cGUhPT1gdG91Y2hgJiYodC54PD0xMCYmdC55PD0xMD9lLnByZXZlbnREZWZhdWx0KCk6bC52YWx1ZT8uY29udGFpbnMoZS50YXJnZXQpfHx5KCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksYi52YWx1ZT1udWxsKX07Yi52YWx1ZSE9PW51bGwmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcnVwYCxyLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksZSgoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJtb3ZlYCxuKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVydXBgLHIse2NhcHR1cmU6ITB9KX0pfSk7ZnVuY3Rpb24geChlKXtsZXQgdD1lLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXk7aWYoZS5rZXk9PT1gVGFiYCYmZS5wcmV2ZW50RGVmYXVsdCgpLCF0JiZlLmtleS5sZW5ndGg9PT0xJiZkKGUua2V5LGMoKSksW2BBcnJvd1VwYCxgQXJyb3dEb3duYCxgSG9tZWAsYEVuZGBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IHQ9Wy4uLmMoKS5tYXAoZT0+ZS5yZWYpXTtpZihbYEFycm93VXBgLGBFbmRgXS5pbmNsdWRlcyhlLmtleSkmJih0PXQuc2xpY2UoKS5yZXZlcnNlKCkpLFtgQXJyb3dVcGAsYEFycm93RG93bmBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IG49ZS50YXJnZXQscj10LmluZGV4T2Yobik7dD10LnNsaWNlKHIrMSl9c2V0VGltZW91dCgoKT0+WHQodCkpLGUucHJldmVudERlZmF1bHQoKX19bGV0IFM9eigoKT0+ci5wb3NpdGlvbj09PWBwb3BwZXJgP3I6e30pLHc9cmUoUy52YWx1ZSk7cmV0dXJuIEFpKHtjb250ZW50Omwsdmlld3BvcnQ6ZixvblZpZXdwb3J0Q2hhbmdlOmU9PntmLnZhbHVlPWV9LGl0ZW1SZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IWcudmFsdWUmJiFuLGk9eWkoYS5tb2RlbFZhbHVlLnZhbHVlLHQsYS5ieSk7aWYoYS5tdWx0aXBsZS52YWx1ZSl7aWYoXy52YWx1ZSlyZXR1cm47KGl8fHIpJiYocC52YWx1ZT1lLGkmJihfLnZhbHVlPSEwKSl9ZWxzZShpfHxyKSYmKHAudmFsdWU9ZSk7ciYmKGcudmFsdWU9ITApfSxzZWxlY3RlZEl0ZW06cCxzZWxlY3RlZEl0ZW1UZXh0Om0sb25JdGVtTGVhdmU6KCk9PntsLnZhbHVlPy5mb2N1cygpfSxpdGVtVGV4dFJlZkNhbGxiYWNrOihlLHQsbik9PntsZXQgcj0hZy52YWx1ZSYmIW47KHlpKGEubW9kZWxWYWx1ZS52YWx1ZSx0LGEuYnkpfHxyKSYmKG0udmFsdWU9ZSl9LGZvY3VzU2VsZWN0ZWRJdGVtOnYscG9zaXRpb246ci5wb3NpdGlvbixpc1Bvc2l0aW9uZWQ6aCxzZWFyY2hSZWY6dX0pLChlLG4pPT4oTigpLEwoQShzKSxudWxsLHtkZWZhdWx0Ok0oKCk9PltSKEEoS3QpLHsiYXMtY2hpbGQiOmBgLG9uTW91bnRBdXRvRm9jdXM6bls2XXx8PWVlKCgpPT57fSxbYHByZXZlbnRgXSksb25Vbm1vdW50QXV0b0ZvY3VzOm5bN118fD1lPT57aShgY2xvc2VBdXRvRm9jdXNgLGUpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihBKGEpLnRyaWdnZXJFbGVtZW50LnZhbHVlPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUucHJldmVudERlZmF1bHQoKSl9fSx7ZGVmYXVsdDpNKCgpPT5bUihBKE10KSx7ImFzLWNoaWxkIjpgYCwiZGlzYWJsZS1vdXRzaWRlLXBvaW50ZXItZXZlbnRzIjplLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cyxvbkZvY3VzT3V0c2lkZTpuWzJdfHw9ZWUoKCk9Pnt9LFtgcHJldmVudGBdKSxvbkRpc21pc3M6blszXXx8PWU9PkEoYSkub25PcGVuQ2hhbmdlKCExKSxvbkVzY2FwZUtleURvd246bls0XXx8PWU9PmkoYGVzY2FwZUtleURvd25gLGUpLG9uUG9pbnRlckRvd25PdXRzaWRlOm5bNV18fD1lPT5pKGBwb2ludGVyRG93bk91dHNpZGVgLGUpfSx7ZGVmYXVsdDpNKCgpPT5bKE4oKSxMKG1lKGUucG9zaXRpb249PT1gcG9wcGVyYD9EaTpQaSksSSh7Li4uZS4kYXR0cnMsLi4uQSh3KX0se2lkOkEoYSkuY29udGVudElkLHJlZjplPT57aWYoIWUpcmV0dXJuO2xldCBuPUEodCkoZSk7bj8uaGFzQXR0cmlidXRlKGBkYXRhLXJla2EtcG9wcGVyLWNvbnRlbnQtd3JhcHBlcmApP2wudmFsdWU9bi5maXJzdEVsZW1lbnRDaGlsZDpsLnZhbHVlPW59LHJvbGU6YGxpc3Rib3hgLCJkYXRhLXN0YXRlIjpBKGEpLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLGRpcjpBKGEpLmRpci52YWx1ZSxzdHlsZTp7ZGlzcGxheTpgZmxleGAsZmxleERpcmVjdGlvbjpgY29sdW1uYCxvdXRsaW5lOmBub25lYH0sb25Db250ZXh0bWVudTpuWzBdfHw9ZWUoKCk9Pnt9LFtgcHJldmVudGBdKSxvblBsYWNlZDpuWzFdfHw9ZT0+aC52YWx1ZT0hMCxvbktleWRvd246eH0pLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgLGBkYXRhLXN0YXRlYCxgZGlyYCxgb25LZXlkb3duYF0pKV0pLF86M30sOCxbYGRpc2FibGUtb3V0c2lkZS1wb2ludGVyLWV2ZW50c2BdKV0pLF86M30pXSksXzozfSkpfX0pLFtNaSxOaV09c2UoYFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25gKSxQaT1GKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BwbGFjZWRgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7Z2V0SXRlbXM6aX09cGUoKSxhPUNpKCksbz1raSgpLHM9QyghMSksYz1DKCEwKSx1PUMoKSx7Zm9yd2FyZFJlZjpkLGN1cnJlbnRFbGVtZW50OmZ9PWwoKSx7dmlld3BvcnQ6cCxzZWxlY3RlZEl0ZW06bSxzZWxlY3RlZEl0ZW1UZXh0OmgsZm9jdXNTZWxlY3RlZEl0ZW06Z309bztmdW5jdGlvbiBfKCl7aWYoYS50cmlnZ2VyRWxlbWVudC52YWx1ZSYmYS52YWx1ZUVsZW1lbnQudmFsdWUmJnUudmFsdWUmJmYudmFsdWUmJnA/LnZhbHVlJiZtPy52YWx1ZSYmaD8udmFsdWUpe2xldCBlPWEudHJpZ2dlckVsZW1lbnQudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdD1mLnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49YS52YWx1ZUVsZW1lbnQudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1oLnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGEuZGlyLnZhbHVlIT09YHJ0bGApe2xldCByPW8ubGVmdC10LmxlZnQsaT1uLmxlZnQtcixhPWUubGVmdC1pLHM9ZS53aWR0aCthLGM9TWF0aC5tYXgocyx0LndpZHRoKSxsPXdpbmRvdy5pbm5lcldpZHRoLTEwLGQ9JGUoaSwxMCxNYXRoLm1heCgxMCxsLWMpKTt1LnZhbHVlLnN0eWxlLm1pbldpZHRoPWAke3N9cHhgLHUudmFsdWUuc3R5bGUubGVmdD1gJHtkfXB4YH1lbHNle2xldCByPXQucmlnaHQtby5yaWdodCxpPXdpbmRvdy5pbm5lcldpZHRoLW4ucmlnaHQtcixhPXdpbmRvdy5pbm5lcldpZHRoLWUucmlnaHQtaSxzPWUud2lkdGgrYSxjPU1hdGgubWF4KHMsdC53aWR0aCksbD13aW5kb3cuaW5uZXJXaWR0aC0xMCxkPSRlKGksMTAsTWF0aC5tYXgoMTAsbC1jKSk7dS52YWx1ZS5zdHlsZS5taW5XaWR0aD1gJHtzfXB4YCx1LnZhbHVlLnN0eWxlLnJpZ2h0PWAke2R9cHhgfWxldCBjPWkoKS5tYXAoZT0+ZS5yZWYpLGw9d2luZG93LmlubmVySGVpZ2h0LTIwLGQ9cC52YWx1ZS5zY3JvbGxIZWlnaHQsZz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnZhbHVlKSxfPU51bWJlci5wYXJzZUludChnLmJvcmRlclRvcFdpZHRoLDEwKSx2PU51bWJlci5wYXJzZUludChnLnBhZGRpbmdUb3AsMTApLHk9TnVtYmVyLnBhcnNlSW50KGcuYm9yZGVyQm90dG9tV2lkdGgsMTApLGI9TnVtYmVyLnBhcnNlSW50KGcucGFkZGluZ0JvdHRvbSwxMCkseD1fK3YrZCtiK3ksUz1NYXRoLm1pbihtLnZhbHVlLm9mZnNldEhlaWdodCo1LHgpLEM9d2luZG93LmdldENvbXB1dGVkU3R5bGUocC52YWx1ZSksdz1OdW1iZXIucGFyc2VJbnQoQy5wYWRkaW5nVG9wLDEwKSxUPU51bWJlci5wYXJzZUludChDLnBhZGRpbmdCb3R0b20sMTApLEU9ZS50b3ArZS5oZWlnaHQvMi0xMCxEPWwtRSxPPW0udmFsdWUub2Zmc2V0SGVpZ2h0LzIsaz1tLnZhbHVlLm9mZnNldFRvcCtPLGVlPV8rditrLHRlPXgtZWU7aWYoZWU8PUUpe2xldCBlPW0udmFsdWU9PT1jLmF0KC0xKTt1LnZhbHVlLnN0eWxlLmJvdHRvbT1gMHB4YDtsZXQgdD1mLnZhbHVlLmNsaWVudEhlaWdodC1wLnZhbHVlLm9mZnNldFRvcC1wLnZhbHVlLm9mZnNldEhlaWdodCxuPWVlK01hdGgubWF4KEQsTysoZT9UOjApK3QreSk7dS52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7bn1weGB9ZWxzZXtsZXQgZT1tLnZhbHVlPT09Y1swXTt1LnZhbHVlLnN0eWxlLnRvcD1gMHB4YDtsZXQgdD1NYXRoLm1heChFLF8rcC52YWx1ZS5vZmZzZXRUb3ArKGU/dzowKStPKSt0ZTt1LnZhbHVlLnN0eWxlLmhlaWdodD1gJHt0fXB4YCxwLnZhbHVlLnNjcm9sbFRvcD1lZS1FK3AudmFsdWUub2Zmc2V0VG9wfXUudmFsdWUuc3R5bGUubWFyZ2luPWAxMHB4IDBgLHUudmFsdWUuc3R5bGUubWluSGVpZ2h0PWAke1N9cHhgLHUudmFsdWUuc3R5bGUubWF4SGVpZ2h0PWAke2x9cHhgLHIoYHBsYWNlZGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cy52YWx1ZT0hMCl9fWxldCB2PUMoYGApO0NlKGFzeW5jKCk9Pnthd2FpdCB6ZSgpLF8oKSxmLnZhbHVlJiYodi52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnZhbHVlKS56SW5kZXgpfSk7ZnVuY3Rpb24geShlKXtlJiZjLnZhbHVlPT09ITAmJihfKCksZz8uKCksYy52YWx1ZT0hMSl9cmV0dXJuIHcoYS50cmlnZ2VyRWxlbWVudCwoKT0+e18oKX0pLE5pKHtjb250ZW50V3JhcHBlcjp1LHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOnMsb25TY3JvbGxCdXR0b25DaGFuZ2U6eX0pLChlLHQpPT4oTigpLFAoYGRpdmAse3JlZl9rZXk6YGNvbnRlbnRXcmFwcGVyRWxlbWVudGAscmVmOnUsc3R5bGU6b2Uoe2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAscG9zaXRpb246YGZpeGVkYCx6SW5kZXg6di52YWx1ZX0pfSxbUihBKEIpLEkoe3JlZjpBKGQpLHN0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLG1heEhlaWdodDpgMTAwJWB9fSx7Li4uZS4kYXR0cnMsLi4ubn0pLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0sNCkpfX0pLEZpPUYoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFByb3ZpZGVyYCxwcm9wczp7Y29udGV4dDp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxzZXR1cChlKXtyZXR1cm4gd2koZS5jb250ZXh0KSxBaShPaSksKGUsdCk9PlYoZS4kc2xvdHMsYGRlZmF1bHRgKX19KSxJaT17a2V5OjF9LExpPUYoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj1KZShuLHQpLGE9Q2koKSxvPUMoKTtDZSgoKT0+e28udmFsdWU9bmV3IERvY3VtZW50RnJhZ21lbnR9KTtsZXQgcz1DKCksYz16KCgpPT5uLmZvcmNlTW91bnR8fGEub3Blbi52YWx1ZSksbD1DKGMudmFsdWUpLHU7ZnVuY3Rpb24gZCgpe3UmJj0oY2xlYXJUaW1lb3V0KHUpLHZvaWQgMCl9cmV0dXJuIGooYywoZSx0LG4pPT57ZCgpLHU9c2V0VGltZW91dCgoKT0+e2wudmFsdWU9Yy52YWx1ZSx1PXZvaWQgMH0pLG4oZCl9KSx4ZShkKSwoZSx0KT0+Yy52YWx1ZXx8bC52YWx1ZXx8cy52YWx1ZT8ucHJlc2VudD8oTigpLEwoQShuZSkse2tleTowLHJlZl9rZXk6YHByZXNlbmNlUmVmYCxyZWY6cyxwcmVzZW50OmMudmFsdWV9LHtkZWZhdWx0Ok0oKCk9PltSKGppLGkoamUoey4uLkEociksLi4uZS4kYXR0cnN9KSkse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpXSksXzozfSw4LFtgcHJlc2VudGBdKSk6by52YWx1ZT8oTigpLFAoYGRpdmAsSWksWyhOKCksTCh2ZSx7dG86by52YWx1ZX0sW1IoRmkse2NvbnRleHQ6QShhKX0se2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGNvbnRleHRgXSldLDgsW2B0b2BdKSldKSk6VGUoYHYtaWZgLCEwKX19KSxSaT1GKHtfX25hbWU6YFNlbGVjdEljb25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KE4oKSxMKEEoQikseyJhcmlhLWhpZGRlbiI6YHRydWVgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGR9LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W3RbMF18fD1MZShg4pa8YCldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pLFt6aSxCaV09c2UoYFNlbGVjdEl0ZW1gKSxWaT1GKHtfX25hbWU6YFNlbGVjdEl0ZW1gLHByb3BzOnt2YWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSx0ZXh0VmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHNlbGVjdGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtkaXNhYmxlZDppfT1fKG4pLG89Q2koKSxzPWtpKCkse2ZvcndhcmRSZWY6YyxjdXJyZW50RWxlbWVudDp1fT1sKCkse0NvbGxlY3Rpb25JdGVtOmR9PXBlKCksZj16KCgpPT55aShvLm1vZGVsVmFsdWU/LnZhbHVlLG4udmFsdWUsby5ieSkpLHA9QyghMSksbT1DKG4udGV4dFZhbHVlPz9gYCksaD1hKHZvaWQgMCxgcmVrYS1zZWxlY3QtaXRlbS10ZXh0YCk7YXN5bmMgZnVuY3Rpb24gZyhlKXtlLmRlZmF1bHRQcmV2ZW50ZWR8fGV0KGBzZWxlY3Quc2VsZWN0YCx2LHtvcmlnaW5hbEV2ZW50OmUsdmFsdWU6bi52YWx1ZX0pfWFzeW5jIGZ1bmN0aW9uIHYoZSl7YXdhaXQgemUoKSxyKGBzZWxlY3RgLGUpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihpLnZhbHVlfHwoby5vblZhbHVlQ2hhbmdlKG4udmFsdWUpLG8ubXVsdGlwbGUudmFsdWV8fG8ub25PcGVuQ2hhbmdlKCExKSkpfWFzeW5jIGZ1bmN0aW9uIHkoZSl7YXdhaXQgemUoKSwhZS5kZWZhdWx0UHJldmVudGVkJiYoaS52YWx1ZT9zLm9uSXRlbUxlYXZlPy4oKTplLmN1cnJlbnRUYXJnZXQ/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfWFzeW5jIGZ1bmN0aW9uIGIoZSl7YXdhaXQgemUoKSwhZS5kZWZhdWx0UHJldmVudGVkJiZlLmN1cnJlbnRUYXJnZXQ9PT1pZSgpJiZzLm9uSXRlbUxlYXZlPy4oKX1hc3luYyBmdW5jdGlvbiB4KGUpe2F3YWl0IHplKCksIWUuZGVmYXVsdFByZXZlbnRlZCYmKHMuc2VhcmNoUmVmPy52YWx1ZT09PWBgfHxlLmtleSE9PWAgYCkmJih2aS5pbmNsdWRlcyhlLmtleSkmJmcoZSksZS5rZXk9PT1gIGAmJmUucHJldmVudERlZmF1bHQoKSl9aWYobi52YWx1ZT09PWBgKXRocm93IEVycm9yKGBBIDxTZWxlY3RJdGVtIC8+IG11c3QgaGF2ZSBhIHZhbHVlIHByb3AgdGhhdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFNlbGVjdCB2YWx1ZSBjYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGFuZCBzaG93IHRoZSBwbGFjZWhvbGRlci5gKTtyZXR1cm4gQ2UoKCk9Pnt1LnZhbHVlJiZzLml0ZW1SZWZDYWxsYmFjayh1LnZhbHVlLG4udmFsdWUsbi5kaXNhYmxlZCl9KSxCaSh7dmFsdWU6bi52YWx1ZSxkaXNhYmxlZDppLHRleHRJZDpoLGlzU2VsZWN0ZWQ6Zixvbkl0ZW1UZXh0Q2hhbmdlOmU9PnttLnZhbHVlPSgobS52YWx1ZXx8ZT8udGV4dENvbnRlbnQpPz9gYCkudHJpbSgpfX0pLChlLHQpPT4oTigpLEwoQShkKSx7dmFsdWU6e3RleHRWYWx1ZTptLnZhbHVlfX0se2RlZmF1bHQ6TSgoKT0+W1IoQShCKSx7cmVmOkEoYykscm9sZTpgb3B0aW9uYCwiYXJpYS1sYWJlbGxlZGJ5IjpBKGgpLCJkYXRhLWhpZ2hsaWdodGVkIjpwLnZhbHVlP2BgOnZvaWQgMCwiYXJpYS1zZWxlY3RlZCI6Zi52YWx1ZSwiZGF0YS1zdGF0ZSI6Zi52YWx1ZT9gY2hlY2tlZGA6YHVuY2hlY2tlZGAsImFyaWEtZGlzYWJsZWQiOkEoaSl8fHZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6QShpKT9gYDp2b2lkIDAsdGFiaW5kZXg6QShpKT92b2lkIDA6LTEsYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCxvbkZvY3VzOnRbMF18fD1lPT5wLnZhbHVlPSEwLG9uQmx1cjp0WzFdfHw9ZT0+cC52YWx1ZT0hMSxvblBvaW50ZXJ1cDpnLG9uUG9pbnRlcmRvd246dFsyXXx8PWU9PntlLmN1cnJlbnRUYXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sb25Ub3VjaGVuZDp0WzNdfHw9ZWUoKCk9Pnt9LFtgcHJldmVudGAsYHN0b3BgXSksb25Qb2ludGVybW92ZTp5LG9uUG9pbnRlcmxlYXZlOmIsb25LZXlkb3duOnh9LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLWhpZ2hsaWdodGVkYCxgYXJpYS1zZWxlY3RlZGAsYGRhdGEtc3RhdGVgLGBhcmlhLWRpc2FibGVkYCxgZGF0YS1kaXNhYmxlZGAsYHRhYmluZGV4YCxgYXNgLGBhcy1jaGlsZGBdKV0pLF86M30sOCxbYHZhbHVlYF0pKX19KSxIaT1GKHtfX25hbWU6YFNlbGVjdEl0ZW1JbmRpY2F0b3JgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49emkoKTtyZXR1cm4oZSxyKT0+QShuKS5pc1NlbGVjdGVkLnZhbHVlPyhOKCksTChBKEIpLEkoe2tleTowLCJhcmlhLWhpZGRlbiI6YHRydWVgfSx0KSx7ZGVmYXVsdDpNKCgpPT5bVihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpOlRlKGB2LWlmYCwhMCl9fSksVWk9Rih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0SXRlbVRleHRgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49Q2koKSxyPWtpKCksaT16aSgpLHtmb3J3YXJkUmVmOmEsY3VycmVudEVsZW1lbnQ6b309bCgpLHM9eigoKT0+KHt2YWx1ZTppLnZhbHVlLGRpc2FibGVkOmkuZGlzYWJsZWQudmFsdWUsdGV4dENvbnRlbnQ6by52YWx1ZT8udGV4dENvbnRlbnQ/P2kudmFsdWU/LnRvU3RyaW5nKCk/P2BgfSkpO3JldHVybiBDZSgoKT0+e28udmFsdWUmJihpLm9uSXRlbVRleHRDaGFuZ2Uoby52YWx1ZSksci5pdGVtVGV4dFJlZkNhbGxiYWNrKG8udmFsdWUsaS52YWx1ZSxpLmRpc2FibGVkLnZhbHVlKSxuLm9uT3B0aW9uQWRkKHMudmFsdWUpKX0pLHhlKCgpPT57bi5vbk9wdGlvblJlbW92ZShzLnZhbHVlKX0pLChlLG4pPT4oTigpLEwoQShCKSxJKHtpZDpBKGkpLnRleHRJZCxyZWY6QShhKX0sey4uLnQsLi4uZS4kYXR0cnN9KSx7ZGVmYXVsdDpNKCgpPT5bVihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGlkYF0pKX19KSxXaT1GKHtfX25hbWU6YFNlbGVjdFBvcnRhbGAscHJvcHM6e3RvOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmVyOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihOKCksTChBKFp0KSxpKGplKHQpKSx7ZGVmYXVsdDpNKCgpPT5bVihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLEdpPUYoe19fbmFtZTpgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbGAsZW1pdHM6W2BhdXRvU2Nyb2xsYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49dCx7Z2V0SXRlbXM6cn09cGUoKSxpPWtpKCksYT1DKG51bGwpO2Z1bmN0aW9uIHMoKXthLnZhbHVlIT09bnVsbCYmKHdpbmRvdy5jbGVhckludGVydmFsKGEudmFsdWUpLGEudmFsdWU9bnVsbCl9bygoKT0+e3IoKS5tYXAoZT0+ZS5yZWYpLmZpbmQoZT0+ZT09PWllKCkpPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6YG5lYXJlc3RgfSl9KTtmdW5jdGlvbiBjKCl7YS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1mdW5jdGlvbiBsKCl7aS5vbkl0ZW1MZWF2ZT8uKCksYS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1yZXR1cm4gTmUoKCk9PnMoKSksKGUsdCk9PihOKCksTChBKEIpLEkoeyJhcmlhLWhpZGRlbiI6YHRydWVgLHN0eWxlOntmbGV4U2hyaW5rOjB9fSxlLiRwYXJlbnQ/LiRwcm9wcyx7b25Qb2ludGVyZG93bjpjLG9uUG9pbnRlcm1vdmU6bCxvblBvaW50ZXJsZWF2ZTp0WzBdfHw9KCk9PntzKCl9fSkse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxLaT1GKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1raSgpLG49dC5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP01pKCk6dm9pZCAwLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09bCgpLGE9QyghMSk7cmV0dXJuIG8oZT0+e2lmKHQudmlld3BvcnQ/LnZhbHVlJiZ0LmlzUG9zaXRpb25lZD8udmFsdWUpe2xldCBuPXQudmlld3BvcnQudmFsdWU7ZnVuY3Rpb24gcigpe2xldCBlPW4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0O2EudmFsdWU9TWF0aC5jZWlsKG4uc2Nyb2xsVG9wKTxlfXIoKSxuLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsciksZSgoKT0+bi5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpKX19KSxqKGksKCk9PntpLnZhbHVlJiZuPy5vblNjcm9sbEJ1dHRvbkNoYW5nZShpLnZhbHVlKX0pLChlLG4pPT5hLnZhbHVlPyhOKCksTChHaSx7a2V5OjAscmVmOkEociksb25BdXRvU2Nyb2xsOm5bMF18fD0oKT0+e2xldHt2aWV3cG9ydDplLHNlbGVjdGVkSXRlbTpufT1BKHQpO2U/LnZhbHVlJiZuPy52YWx1ZSYmKGUudmFsdWUuc2Nyb2xsVG9wPWUudmFsdWUuc2Nyb2xsVG9wK24udmFsdWUub2Zmc2V0SGVpZ2h0KX19LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDUxMikpOlRlKGB2LWlmYCwhMCl9fSkscWk9Rih7X19uYW1lOmBTZWxlY3RTY3JvbGxVcEJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWtpKCksbj10LnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGA/TWkoKTp2b2lkIDAse2ZvcndhcmRSZWY6cixjdXJyZW50RWxlbWVudDppfT1sKCksYT1DKCExKTtyZXR1cm4gbyhlPT57aWYodC52aWV3cG9ydD8udmFsdWUmJnQuaXNQb3NpdGlvbmVkPy52YWx1ZSl7bGV0IG49dC52aWV3cG9ydC52YWx1ZTtmdW5jdGlvbiByKCl7YS52YWx1ZT1uLnNjcm9sbFRvcD4wfXIoKSxuLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsciksZSgoKT0+bi5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpKX19KSxqKGksKCk9PntpLnZhbHVlJiZuPy5vblNjcm9sbEJ1dHRvbkNoYW5nZShpLnZhbHVlKX0pLChlLG4pPT5hLnZhbHVlPyhOKCksTChHaSx7a2V5OjAscmVmOkEociksb25BdXRvU2Nyb2xsOm5bMF18fD0oKT0+e2xldHt2aWV3cG9ydDplLHNlbGVjdGVkSXRlbTpufT1BKHQpO2U/LnZhbHVlJiZuPy52YWx1ZSYmKGUudmFsdWUuc2Nyb2xsVG9wPWUudmFsdWUuc2Nyb2xsVG9wLW4udmFsdWUub2Zmc2V0SGVpZ2h0KX19LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDUxMikpOlRlKGB2LWlmYCwhMCl9fSksSmk9Rih7X19uYW1lOmBTZWxlY3RUcmlnZ2VyYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUNpKCkse2ZvcndhcmRSZWY6cixjdXJyZW50RWxlbWVudDppfT1sKCksbz16KCgpPT5uLmRpc2FibGVkPy52YWx1ZXx8dC5kaXNhYmxlZCk7bi5jb250ZW50SWR8fD1hKHZvaWQgMCxgcmVrYS1zZWxlY3QtY29udGVudGApLENlKCgpPT57bi5vblRyaWdnZXJDaGFuZ2UoaS52YWx1ZSl9KTtsZXR7Z2V0SXRlbXM6c309cGUoKSx7c2VhcmNoOmMsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOnUscmVzZXRUeXBlYWhlYWQ6ZH09d3QoKTtmdW5jdGlvbiBmKCl7by52YWx1ZXx8KG4ub25PcGVuQ2hhbmdlKCEwKSxkKCkpfWZ1bmN0aW9uIHAoZSl7ZigpLG4udHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLnZhbHVlPXt4Ok1hdGgucm91bmQoZS5wYWdlWCkseTpNYXRoLnJvdW5kKGUucGFnZVkpfX1mdW5jdGlvbiBtKGUpe3JldHVybiBlLmJ1dHRvbj09PTAmJmUuY3RybEtleT09PSExfWxldCBoPSExO2Z1bmN0aW9uIGcoZSl7aWYoZS5wb2ludGVyVHlwZT09PWB0b3VjaGApcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtsZXQgdD1lLnRhcmdldDt0Lmhhc1BvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSYmdC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpLG0oZSkmJihwKGUpLGg9ITApfWZ1bmN0aW9uIF8oZSl7bShlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIHYoZSl7aHx8ZS5jdXJyZW50VGFyZ2V0Py5mb2N1cygpLGg9ITF9cmV0dXJuKGUsdCk9PihOKCksTChBKG5uKSx7ImFzLWNoaWxkIjpgYCxyZWZlcmVuY2U6ZS5yZWZlcmVuY2V9LHtkZWZhdWx0Ok0oKCk9PltSKEEoQikse3JlZjpBKHIpLHJvbGU6YGNvbWJvYm94YCx0eXBlOmUuYXM9PT1gYnV0dG9uYD9gYnV0dG9uYDp2b2lkIDAsImFyaWEtY29udHJvbHMiOkEobikuY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpBKG4pLm9wZW4udmFsdWV8fCExLCJhcmlhLXJlcXVpcmVkIjpBKG4pLnJlcXVpcmVkPy52YWx1ZSwiYXJpYS1hdXRvY29tcGxldGUiOmBub25lYCxkaXNhYmxlZDpvLnZhbHVlLGRpcjpBKG4pPy5kaXIudmFsdWUsImRhdGEtc3RhdGUiOkEobik/Lm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpvLnZhbHVlP2BgOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6QSh4aSkoQShuKS5tb2RlbFZhbHVlPy52YWx1ZSk/YGA6dm9pZCAwLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25DbGljazp2LG9uUG9pbnRlcmRvd246Zyxvbk1vdXNlZG93bjpfLG9uUG9pbnRlcnVwOnRbMF18fD1lZShlPT57ZS5wb2ludGVyVHlwZT09PWB0b3VjaGAmJnAoZSl9LFtgcHJldmVudGBdKSxvbktleWRvd246dFsxXXx8PWU9PntsZXQgdD1BKGMpIT09YGA7IShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiZlLmtleS5sZW5ndGg9PT0xJiZ0JiZlLmtleT09PWAgYHx8KEEodSkoZS5rZXksQShzKSgpKSxBKF9pKS5pbmNsdWRlcyhlLmtleSkmJihmKCksZS5wcmV2ZW50RGVmYXVsdCgpKSl9fSx7ZGVmYXVsdDpNKCgpPT5bVihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgYXJpYS1yZXF1aXJlZGAsYGRpc2FibGVkYCxgZGlyYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLXBsYWNlaG9sZGVyYCxgYXMtY2hpbGRgLGBhc2BdKV0pLF86M30sOCxbYHJlZmVyZW5jZWBdKSl9fSksWWk9Rih7X19uYW1lOmBTZWxlY3RWYWx1ZWAscHJvcHM6e3BsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09bCgpLGk9Q2koKTtDZSgoKT0+e2kudmFsdWVFbGVtZW50PXJ9KTtsZXQgYT16KCgpPT57bGV0IGU9W10sdD1BcnJheS5mcm9tKGkub3B0aW9uc1NldC52YWx1ZSksbj1lPT50LmZpbmQodD0+eWkoZSx0LnZhbHVlLGkuYnkpKTtyZXR1cm4gZT1BcnJheS5pc0FycmF5KGkubW9kZWxWYWx1ZS52YWx1ZSk/aS5tb2RlbFZhbHVlLnZhbHVlLm1hcChlPT5uKGUpPy50ZXh0Q29udGVudD8/YGApOltuKGkubW9kZWxWYWx1ZS52YWx1ZSk/LnRleHRDb250ZW50Pz9gYF0sZS5maWx0ZXIoQm9vbGVhbil9KSxvPXooKCk9PmEudmFsdWUubGVuZ3RoP2EudmFsdWUuam9pbihgLCBgKTp0LnBsYWNlaG9sZGVyKTtyZXR1cm4oZSxyKT0+KE4oKSxMKEEoQikse3JlZjpBKG4pLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsc3R5bGU6e3BvaW50ZXJFdmVudHM6YG5vbmVgfSwiZGF0YS1wbGFjZWhvbGRlciI6YS52YWx1ZS5sZW5ndGg/dm9pZCAwOnQucGxhY2Vob2xkZXJ9LHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCx7c2VsZWN0ZWRMYWJlbDphLnZhbHVlLG1vZGVsVmFsdWU6QShpKS5tb2RlbFZhbHVlLnZhbHVlfSwoKT0+W0xlKGgoby52YWx1ZSksMSldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLXBsYWNlaG9sZGVyYF0pKX19KSxYaT1GKHtfX25hbWU6YFNlbGVjdFZpZXdwb3J0YCxwcm9wczp7bm9uY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cCh0KXtsZXQgbj10LHtub25jZTpyfT1fKG4pLGk9Z2kociksYT1raSgpLG89YS5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP01pKCk6dm9pZCAwLHtmb3J3YXJkUmVmOnMsY3VycmVudEVsZW1lbnQ6Y309bCgpO0NlKCgpPT57YT8ub25WaWV3cG9ydENoYW5nZShjLnZhbHVlKX0pO2xldCB1PUMoMCk7ZnVuY3Rpb24gZChlKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQse3Nob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOm4sY29udGVudFdyYXBwZXI6cn09bz8/e307aWYobj8udmFsdWUmJnI/LnZhbHVlKXtsZXQgZT1NYXRoLmFicyh1LnZhbHVlLXQuc2Nyb2xsVG9wKTtpZihlPjApe2xldCBuPXdpbmRvdy5pbm5lckhlaWdodC0yMCxpPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUubWluSGVpZ2h0KSxhPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUuaGVpZ2h0KSxvPU1hdGgubWF4KGksYSk7aWYobzxuKXtsZXQgaT1vK2UsYT1NYXRoLm1pbihuLGkpLHM9aS1hO3IudmFsdWUuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLHIudmFsdWUuc3R5bGUuYm90dG9tPT09YDBweGAmJih0LnNjcm9sbFRvcD1zPjA/czowLHIudmFsdWUuc3R5bGUuanVzdGlmeUNvbnRlbnQ9YGZsZXgtZW5kYCl9fX11LnZhbHVlPXQuc2Nyb2xsVG9wfXJldHVybih0LHIpPT4oTigpLFAoZSxudWxsLFtSKEEoQiksSSh7cmVmOkEocyksImRhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnQiOmBgLHJvbGU6YHByZXNlbnRhdGlvbmB9LHsuLi50LiRhdHRycywuLi5ufSx7c3R5bGU6e3Bvc2l0aW9uOmByZWxhdGl2ZWAsZmxleDoxLG92ZXJmbG93OmBoaWRkZW4gYXV0b2B9LG9uU2Nyb2xsOmR9KSx7ZGVmYXVsdDpNKCgpPT5bVih0LiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNiksUihBKEIpLHthczpgc3R5bGVgLG5vbmNlOkEoaSl9LHtkZWZhdWx0Ok0oKCk9PnJbMF18fD1bTGUoYCAvKiBIaWRlIHNjcm9sbGJhcnMgY3Jvc3MtYnJvd3NlciBhbmQgZW5hYmxlIG1vbWVudHVtIHNjcm9sbCBmb3IgdG91Y2ggZGV2aWNlcyAqLyBbZGF0YS1yZWthLXNlbGVjdC12aWV3cG9ydF0geyBzY3JvbGxiYXItd2lkdGg6bm9uZTsgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7IH0gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdOjotd2Via2l0LXNjcm9sbGJhciB7IGRpc3BsYXk6IG5vbmU7IH0gYCldKSxfOjEsX186WzBdfSw4LFtgbm9uY2VgXSldLDY0KSl9fSksWmk9Rih7X19uYW1lOmBTZWxlY3RgLHByb3BzOntvcGVuOnt0eXBlOkJvb2xlYW59LGRlZmF1bHRPcGVuOnt0eXBlOkJvb2xlYW59LGRlZmF1bHRWYWx1ZTp7fSxtb2RlbFZhbHVlOnt9LG51bGxhYmxlVmFsdWU6e30sYnk6e3R5cGU6W1N0cmluZyxGdW5jdGlvbl19LGRpcjp7fSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxhdXRvY29tcGxldGU6e30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sbmFtZTp7fSxyZXF1aXJlZDp7dHlwZTpCb29sZWFufX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWAsYHVwZGF0ZTpvcGVuYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49SmUoZSx0KTtyZXR1cm4oZSx0KT0+KE4oKSxMKEEoVGkpLEkoeyJkYXRhLXNsb3QiOmBzZWxlY3RgfSxBKG4pKSx7ZGVmYXVsdDpNKHQ9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCxpKGplKHQpKSldKSxfOjN9LDE2KSl9fSksUWk9Rih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0Q29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb246e2RlZmF1bHQ6YGl0ZW0tYWxpZ25lZGB9LGJvZHlMb2NrOnt0eXBlOkJvb2xlYW59LG1lbW9EZXBlbmRlbmNpZXM6e30sc2lkZTp7fSxzaWRlT2Zmc2V0Ont9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW59LGFsaWduOntkZWZhdWx0OmBjZW50ZXJgfSxhbGlnbk9mZnNldDp7fSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbn0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW59LGNvbGxpc2lvbkJvdW5kYXJ5Ont9LGNvbGxpc2lvblBhZGRpbmc6e30sYXJyb3dQYWRkaW5nOnt9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbn0sc3RpY2t5Ont9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25TdHJhdGVneTp7fSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW59LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFufSxyZWZlcmVuY2U6e30sZGlyOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW59LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9WmUobixgY2xhc3NgKSxhPUplKGkscik7cmV0dXJuKHQscik9PihOKCksTChBKFdpKSxudWxsLHtkZWZhdWx0Ok0oKCk9PltSKEEoTGkpLEkoeyJkYXRhLXNsb3QiOmBzZWxlY3QtY29udGVudGAsImRhdGEtYWxpZ24tdHJpZ2dlciI6ZS5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgfSx7Li4udC4kYXR0cnMsLi4uQShhKX0se2NsYXNzOkEoeSkoYGJnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1vcGVuOmFuaW1hdGUtaW4gZGF0YS1jbG9zZWQ6YW5pbWF0ZS1vdXQgZGF0YS1jbG9zZWQ6ZmFkZS1vdXQtMCBkYXRhLW9wZW46ZmFkZS1pbi0wIGRhdGEtY2xvc2VkOnpvb20tb3V0LTk1IGRhdGEtb3Blbjp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJpbmctZm9yZWdyb3VuZC8xMCBtaW4tdy0zNiByb3VuZGVkLWxnIHNoYWRvdy1tZCByaW5nLTEgZHVyYXRpb24tMTAwIGRhdGEtW3NpZGU9aW5saW5lLXN0YXJ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1pbmxpbmUtZW5kXTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBjbi1tZW51LXRyYW5zbHVjZW50IHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBvcmlnaW4tKC0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8gZGF0YS1bYWxpZ24tdHJpZ2dlcj10cnVlXTphbmltYXRlLW5vbmVgLGUucG9zaXRpb249PT1gcG9wcGVyYCYmYGRhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTFgLG4uY2xhc3MpfSkse2RlZmF1bHQ6TSgoKT0+W1IoQShuYSkpLFIoQShYaSkseyJkYXRhLXBvc2l0aW9uIjplLnBvc2l0aW9uLGNsYXNzOlFlKEEoeSkoYGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06aC0oLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCkgZGF0YS1bcG9zaXRpb249cG9wcGVyXTp3LWZ1bGwgZGF0YS1bcG9zaXRpb249cG9wcGVyXTptaW4tdy0oLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoKWApKX0se2RlZmF1bHQ6TSgoKT0+W1YodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGRhdGEtcG9zaXRpb25gLGBjbGFzc2BdKSxSKEEodGEpKV0pLF86M30sMTYsW2BkYXRhLWFsaWduLXRyaWdnZXJgLGBjbGFzc2BdKV0pLF86M30pKX19KSwkaT17Y2xhc3M6YHBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJgfSxlYT1GKHtfX25hbWU6YFNlbGVjdEl0ZW1gLHByb3BzOnt2YWx1ZTp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSx0ZXh0VmFsdWU6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVplKHQsYGNsYXNzYCkscj1yZShuKTtyZXR1cm4oZSxuKT0+KE4oKSxMKEEoVmkpLEkoeyJkYXRhLXNsb3QiOmBzZWxlY3QtaXRlbWB9LEEocikse2NsYXNzOkEoeSkoYGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIG5vdC1kYXRhLVt2YXJpYW50PWRlc3RydWN0aXZlXTpmb2N1czoqKjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGdhcC0xLjUgcm91bmRlZC1tZCBweS0xIHByLTggcGwtMS41IHRleHQtc20gWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMiByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6TSgoKT0+W0ZlKGBzcGFuYCwkaSxbUihBKEhpKSxudWxsLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBpbmRpY2F0b3ItaWNvbmAse30sKCk9PltSKEEodWUpLHtpY29uOkEoQmUpLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIHNpemUtMy41YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSldKSxSKEEoVWkpLG51bGwse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSx0YT1GKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49WmUodCxgY2xhc3NgKSxyPXJlKG4pO3JldHVybihlLG4pPT4oTigpLEwoQShLaSksSSh7ImRhdGEtc2xvdCI6YHNlbGVjdC1zY3JvbGwtZG93bi1idXR0b25gfSxBKHIpLHtjbGFzczpBKHkpKGBiZy1wb3BvdmVyIHotMTAgZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00YCx0LmNsYXNzKX0pLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W1IoQSh1ZSkse2ljb246QSh2KSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxuYT1GKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVplKHQsYGNsYXNzYCkscj1yZShuKTtyZXR1cm4oZSxuKT0+KE4oKSxMKEEocWkpLEkoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvbmB9LEEocikse2NsYXNzOkEoeSkoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6TSgoKT0+W1YoZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bUihBKHVlKSx7aWNvbjpBKGxlKSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxyYT1GKHtfX25hbWU6YFNlbGVjdFRyaWdnZXJgLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxyZWZlcmVuY2U6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxzaXplOntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1aZSh0LGBjbGFzc2AsYHNpemVgKSxyPXJlKG4pO3JldHVybihuLGkpPT4oTigpLEwoQShKaSksSSh7ImRhdGEtc2xvdCI6YHNlbGVjdC10cmlnZ2VyYCwiZGF0YS1zaXplIjplLnNpemV9LEEocikse2NsYXNzOkEoeSkoYGJvcmRlci1pbnB1dCBkYXRhLXBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGdhcC0xLjUgcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHktMiBwci0yIHBsLTIuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTggZGF0YS1bc2l6ZT1zbV06aC03IGRhdGEtW3NpemU9c21dOnJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHdoaXRlc3BhY2Utbm93cmFwIG91dGxpbmUtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6TSgoKT0+W1Yobi4kc2xvdHMsYGRlZmF1bHRgKSxSKEEoUmkpLHsiYXMtY2hpbGQiOmBgfSx7ZGVmYXVsdDpNKCgpPT5bUihBKHVlKSx7aWNvbjpBKHYpLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2l6ZS00IHBvaW50ZXItZXZlbnRzLW5vbmVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxfOjN9LDE2LFtgZGF0YS1zaXplYCxgY2xhc3NgXSkpfX0pLGlhPUYoe19fbmFtZTpgU2VsZWN0VmFsdWVgLHByb3BzOntwbGFjZWhvbGRlcjp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTigpLEwoQShZaSksSSh7ImRhdGEtc2xvdCI6YHNlbGVjdC12YWx1ZWB9LHQpLHtkZWZhdWx0Ok0oKCk9PltWKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KSl9fSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGUrLjV8MH12YXIgb2E9KGUsdCxuKT0+TWF0aC5tYXgoTWF0aC5taW4oZSxuKSx0KTtmdW5jdGlvbiBzYShlKXtyZXR1cm4gb2EoYWEoZSoyLjU1KSwwLDI1NSl9ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIG9hKGFhKGUqMjU1KSwwLDI1NSl9ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIG9hKGFhKGUvMi41NSkvMTAwLDAsMSl9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIG9hKGFhKGUqMTAwKSwwLDEwMCl9dmFyIGRhPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksQToxMCxCOjExLEM6MTIsRDoxMyxFOjE0LEY6MTUsYToxMCxiOjExLGM6MTIsZDoxMyxlOjE0LGY6MTV9LGZhPVsuLi5gMDEyMzQ1Njc4OUFCQ0RFRmBdLHBhPWU9PmZhW2UmMTVdLG1hPWU9PmZhWyhlJjI0MCk+PjRdK2ZhW2UmMTVdLGhhPWU9PihlJjI0MCk+PjQ9PShlJjE1KSxnYT1lPT5oYShlLnIpJiZoYShlLmcpJiZoYShlLmIpJiZoYShlLmEpO2Z1bmN0aW9uIF9hKGUpe3ZhciB0PWUubGVuZ3RoLG47cmV0dXJuIGVbMF09PT1gI2AmJih0PT09NHx8dD09PTU/bj17cjoyNTUmZGFbZVsxXV0qMTcsZzoyNTUmZGFbZVsyXV0qMTcsYjoyNTUmZGFbZVszXV0qMTcsYTp0PT09NT9kYVtlWzRdXSoxNzoyNTV9Oih0PT09N3x8dD09PTkpJiYobj17cjpkYVtlWzFdXTw8NHxkYVtlWzJdXSxnOmRhW2VbM11dPDw0fGRhW2VbNF1dLGI6ZGFbZVs1XV08PDR8ZGFbZVs2XV0sYTp0PT09OT9kYVtlWzddXTw8NHxkYVtlWzhdXToyNTV9KSksbn12YXIgdmE9KGUsdCk9PmU8MjU1P3QoZSk6YGA7ZnVuY3Rpb24geWEoZSl7dmFyIHQ9Z2EoZSk/cGE6bWE7cmV0dXJuIGU/YCNgK3QoZS5yKSt0KGUuZykrdChlLmIpK3ZhKGUuYSx0KTp2b2lkIDB9dmFyIGJhPS9eKGhzbGE/fGh3Ynxoc3YpXChccyooWy0rLmVcZF0rKSg/OmRlZyk/W1xzLF0rKFstKy5lXGRdKyklW1xzLF0rKFstKy5lXGRdKyklKD86W1xzLF0rKFstKy5lXGRdKykoJSk/KT9ccypcKSQvO2Z1bmN0aW9uIHhhKGUsdCxuKXtsZXQgcj10Kk1hdGgubWluKG4sMS1uKSxpPSh0LGk9KHQrZS8zMCklMTIpPT5uLXIqTWF0aC5tYXgoTWF0aC5taW4oaS0zLDktaSwxKSwtMSk7cmV0dXJuW2koMCksaSg4KSxpKDQpXX1mdW5jdGlvbiBTYShlLHQsbil7bGV0IHI9KHIsaT0ocitlLzYwKSU2KT0+bi1uKnQqTWF0aC5tYXgoTWF0aC5taW4oaSw0LWksMSksMCk7cmV0dXJuW3IoNSkscigzKSxyKDEpXX1mdW5jdGlvbiBDYShlLHQsbil7bGV0IHI9eGEoZSwxLC41KSxpO2Zvcih0K24+MSYmKGk9MS8odCtuKSx0Kj1pLG4qPWkpLGk9MDtpPDM7aSsrKXJbaV0qPTEtdC1uLHJbaV0rPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gd2EoZSx0LG4scixpKXtyZXR1cm4gZT09PWk/KHQtbikvcisodDxuPzY6MCk6dD09PWk/KG4tZSkvcisyOihlLXQpL3IrNH1mdW5jdGlvbiBUYShlKXtsZXQgdD1lLnIvMjU1LG49ZS5nLzI1NSxyPWUuYi8yNTUsaT1NYXRoLm1heCh0LG4sciksYT1NYXRoLm1pbih0LG4sciksbz0oaSthKS8yLHMsYyxsO3JldHVybiBpIT09YSYmKGw9aS1hLGM9bz4uNT9sLygyLWktYSk6bC8oaSthKSxzPXdhKHQsbixyLGwsaSkscz1zKjYwKy41KSxbc3wwLGN8fDAsb119ZnVuY3Rpb24gRWEoZSx0LG4scil7cmV0dXJuKEFycmF5LmlzQXJyYXkodCk/ZSh0WzBdLHRbMV0sdFsyXSk6ZSh0LG4scikpLm1hcChjYSl9ZnVuY3Rpb24gRGEoZSx0LG4pe3JldHVybiBFYSh4YSxlLHQsbil9ZnVuY3Rpb24gT2EoZSx0LG4pe3JldHVybiBFYShDYSxlLHQsbil9ZnVuY3Rpb24ga2EoZSx0LG4pe3JldHVybiBFYShTYSxlLHQsbil9ZnVuY3Rpb24gQWEoZSl7cmV0dXJuKGUlMzYwKzM2MCklMzYwfWZ1bmN0aW9uIGphKGUpe2xldCB0PWJhLmV4ZWMoZSksbj0yNTUscjtpZighdClyZXR1cm47dFs1XSE9PXImJihuPXRbNl0/c2EoK3RbNV0pOmNhKCt0WzVdKSk7bGV0IGk9QWEoK3RbMl0pLGE9dFszXS8xMDAsbz10WzRdLzEwMDtyZXR1cm4gcj10WzFdPT09YGh3YmA/T2EoaSxhLG8pOnRbMV09PT1gaHN2YD9rYShpLGEsbyk6RGEoaSxhLG8pLHtyOnJbMF0sZzpyWzFdLGI6clsyXSxhOm59fWZ1bmN0aW9uIE1hKGUsdCl7dmFyIG49VGEoZSk7blswXT1BYShuWzBdK3QpLG49RGEobiksZS5yPW5bMF0sZS5nPW5bMV0sZS5iPW5bMl19ZnVuY3Rpb24gTmEoZSl7aWYoIWUpcmV0dXJuO2xldCB0PVRhKGUpLG49dFswXSxyPXVhKHRbMV0pLGk9dWEodFsyXSk7cmV0dXJuIGUuYTwyNTU/YGhzbGEoJHtufSwgJHtyfSUsICR7aX0lLCAke2xhKGUuYSl9KWA6YGhzbCgke259LCAke3J9JSwgJHtpfSUpYH12YXIgUGE9e3g6YGRhcmtgLFo6YGxpZ2h0YCxZOmByZWAsWDpgYmx1YCxXOmBncmAsVjpgbWVkaXVtYCxVOmBzbGF0ZWAsQTpgZWVgLFQ6YG9sYCxTOmBvcmAsQjpgcmFgLEM6YGxhdGVnYCxEOmBpZ2h0c2AsUjpgaW5gLFE6YHR1cnF1b2lzYCxFOmBoaWAsUDpgcm9gLE86YGFsYCxOOmBsZWAsTTpgZGVgLEw6YHllbGxvYCxGOmBlbmAsSzpgY2hgLEc6YGFya3NgLEg6YGVhYCxJOmBpZ2h0Z2AsSjpgd2hgfSxGYT17T2ljZVhlOmBmMGY4ZmZgLGFudGlxdWV3RXRlOmBmYWViZDdgLGFxdWE6YGZmZmZgLGFxdWFtYXJSZTpgN2ZmZmQ0YCxhenVZOmBmMGZmZmZgLGJlaWdlOmBmNWY1ZGNgLGJpc3F1ZTpgZmZlNGM0YCxibGFjazpgMGAsYmxhbktlZE9tb25kOmBmZmViY2RgLFhlOmBmZmAsWGV2aVRldDpgOGEyYmUyYCxiUHduOmBhNTJhMmFgLGJ1cmx5d29vZDpgZGViODg3YCxjYU10WGU6YDVmOWVhMGAsS2FydFl1c2U6YDdmZmYwMGAsS29jVGF0ZTpgZDI2OTFlYCxjU086YGZmN2Y1MGAsY1NuZmxvd2VyWGU6YDY0OTVlZGAsY1Nuc2lsazpgZmZmOGRjYCxjcmltc29uOmBkYzE0M2NgLGN5YW46YGZmZmZgLHhYZTpgOGJgLHhjeWFuOmA4YjhiYCx4Z1RNblBkOmBiODg2MGJgLHhXYXk6YGE5YTlhOWAseGdZRjpgNjQwMGAseGdZeTpgYTlhOWE5YCx4a2hha2k6YGJkYjc2YmAseG1hZ0Z0YTpgOGIwMDhiYCx4VGl2ZWdZRjpgNTU2YjJmYCx4U2FuZ2U6YGZmOGMwMGAseFNjRWQ6YDk5MzJjY2AseFlkOmA4YjAwMDBgLHhzT21vbjpgZTk5NjdhYCx4c0hnWUY6YDhmYmM4ZmAseFVYZTpgNDgzZDhiYCx4VVdheTpgMmY0ZjRmYCx4VWdZeTpgMmY0ZjRmYCx4UWU6YGNlZDFgLHh2aVRldDpgOTQwMGQzYCxkQXBwUms6YGZmMTQ5M2AsZEFwc2t5WGU6YGJmZmZgLGRpbVdheTpgNjk2OTY5YCxkaW1nWXk6YDY5Njk2OWAsZG9kZ2VyWGU6YDFlOTBmZmAsZmlZYnJpY2s6YGIyMjIyMmAsZmxTT3dFdGU6YGZmZmFmMGAsZm9Zc3RXQW46YDIyOGIyMmAsZnVLc2lhOmBmZjAwZmZgLGdhUnNiU286YGRjZGNkY2AsZ2hvc3R3RXRlOmBmOGY4ZmZgLGdUZDpgZmZkNzAwYCxnVE1uUGQ6YGRhYTUyMGAsV2F5OmA4MDgwODBgLGdZRjpgODAwMGAsZ1lGTHc6YGFkZmYyZmAsZ1l5OmA4MDgwODBgLGhvbmV5TXc6YGYwZmZmMGAsaG90cFJrOmBmZjY5YjRgLFJkaWFuWWQ6YGNkNWM1Y2AsUmRpZ286YDRiMDA4MmAsaXZTeTpgZmZmZmYwYCxraGFraTpgZjBlNjhjYCxsYXZGTXI6YGU2ZTZmYWAsbGF2Rk1yWHNoOmBmZmYwZjVgLGxhd25nWUY6YDdjZmMwMGAsTm1vbmNFZmZvbjpgZmZmYWNkYCxaWGU6YGFkZDhlNmAsWmNTTzpgZjA4MDgwYCxaY3lhbjpgZTBmZmZmYCxaZ1RNblBkTHc6YGZhZmFkMmAsWldheTpgZDNkM2QzYCxaZ1lGOmA5MGVlOTBgLFpnWXk6YGQzZDNkM2AsWnBSazpgZmZiNmMxYCxac09tb246YGZmYTA3YWAsWnNIZ1lGOmAyMGIyYWFgLFpza3lYZTpgODdjZWZhYCxaVVdheTpgNzc4ODk5YCxaVWdZeTpgNzc4ODk5YCxac3RBbFhlOmBiMGM0ZGVgLFpMdzpgZmZmZmUwYCxsaW1lOmBmZjAwYCxsaW1lZ1lGOmAzMmNkMzJgLGxSRjpgZmFmMGU2YCxtYWdGdGE6YGZmMDBmZmAsbWFQb246YDgwMDAwMGAsVmFxdWFtYXJSZTpgNjZjZGFhYCxWWGU6YGNkYCxWU2NFZDpgYmE1NWQzYCxWcHVycE46YDkzNzBkYmAsVnNIZ1lGOmAzY2IzNzFgLFZVWGU6YDdiNjhlZWAsVnNwclJnZ1lGOmBmYTlhYCxWUWU6YDQ4ZDFjY2AsVnZpVGV0WWQ6YGM3MTU4NWAsbWlkbmlnaHRYZTpgMTkxOTcwYCxtUnRjWWFtOmBmNWZmZmFgLG1pc3R5UHNlOmBmZmU0ZTFgLG1vY2Nhc1I6YGZmZTRiNWAsbmF2YWpvd0V0ZTpgZmZkZWFkYCxuYXZ5OmA4MGAsVGRsYWNlOmBmZGY1ZTZgLFRpdmU6YDgwODAwMGAsVGl2ZWRCYjpgNmI4ZTIzYCxTYW5nZTpgZmZhNTAwYCxTYW5nZVlkOmBmZjQ1MDBgLFNjRWQ6YGRhNzBkNmAscE9lZ1RNblBkOmBlZWU4YWFgLHBPZWdZRjpgOThmYjk4YCxwT2VRZTpgYWZlZWVlYCxwT2V2aVRldFlkOmBkYjcwOTNgLHBhcGF5YXdFcDpgZmZlZmQ1YCxwSEtwdWZmOmBmZmRhYjlgLHBlcnU6YGNkODUzZmAscFJrOmBmZmMwY2JgLHBsdW06YGRkYTBkZGAscG93TXJYZTpgYjBlMGU2YCxwdXJwTjpgODAwMDgwYCxZYmVjY2FwdXJwTjpgNjYzMzk5YCxZZDpgZmYwMDAwYCxQc3licm93bjpgYmM4ZjhmYCxQeU9YZTpgNDE2OWUxYCxzYWRkTmJQd246YDhiNDUxM2Asc09tb246YGZhODA3MmAsc2FuZHliUHduOmBmNGE0NjBgLHNIZ1lGOmAyZThiNTdgLHNIc2hlbGw6YGZmZjVlZWAsc2lGbmE6YGEwNTIyZGAsc2lsdmVyOmBjMGMwYzBgLHNreVhlOmA4N2NlZWJgLFVYZTpgNmE1YWNkYCxVV2F5OmA3MDgwOTBgLFVnWXk6YDcwODA5MGAsc25vdzpgZmZmYWZhYCxzcHJSZ2dZRjpgZmY3ZmAsc3RBbFhlOmA0NjgyYjRgLHRhbjpgZDJiNDhjYCx0ZU86YDgwODBgLHRFc3ROOmBkOGJmZDhgLHRvbWF0bzpgZmY2MzQ3YCxRZTpgNDBlMGQwYCx2aVRldDpgZWU4MmVlYCxKSHQ6YGY1ZGViM2Asd0V0ZTpgZmZmZmZmYCx3RXRlc21va2U6YGY1ZjVmNWAsTHc6YGZmZmYwMGAsTHdnWUY6YDlhY2QzMmB9O2Z1bmN0aW9uIElhKCl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhGYSksbj1PYmplY3Qua2V5cyhQYSkscixpLGEsbyxzO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihvPXM9dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspYT1uW2ldLHM9cy5yZXBsYWNlKGEsUGFbYV0pO2E9cGFyc2VJbnQoRmFbb10sMTYpLGVbc109W2E+PjE2JjI1NSxhPj44JjI1NSxhJjI1NV19cmV0dXJuIGV9dmFyIExhO2Z1bmN0aW9uIFJhKGUpe0xhfHwoTGE9SWEoKSxMYS50cmFuc3BhcmVudD1bMCwwLDAsMF0pO2xldCB0PUxhW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQmJntyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnQubGVuZ3RoPT09ND90WzNdOjI1NX19dmFyIHphPS9ecmdiYT9cKFxzKihbLSsuXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/KD86W1xzLC9dKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiBCYShlKXtsZXQgdD16YS5leGVjKGUpLG49MjU1LHIsaSxhO2lmKHQpe2lmKHRbN10hPT1yKXtsZXQgZT0rdFs3XTtuPXRbOF0/c2EoZSk6b2EoZSoyNTUsMCwyNTUpfXJldHVybiByPSt0WzFdLGk9K3RbM10sYT0rdFs1XSxyPTI1NSYodFsyXT9zYShyKTpvYShyLDAsMjU1KSksaT0yNTUmKHRbNF0/c2EoaSk6b2EoaSwwLDI1NSkpLGE9MjU1Jih0WzZdP3NhKGEpOm9hKGEsMCwyNTUpKSx7cixnOmksYjphLGE6bn19fWZ1bmN0aW9uIFZhKGUpe3JldHVybiBlJiYoZS5hPDI1NT9gcmdiYSgke2Uucn0sICR7ZS5nfSwgJHtlLmJ9LCAke2xhKGUuYSl9KWA6YHJnYigke2Uucn0sICR7ZS5nfSwgJHtlLmJ9KWApfXZhciBIYT1lPT5lPD0uMDAzMTMwOD9lKjEyLjkyOmUqKigxLzIuNCkqMS4wNTUtLjA1NSxVYT1lPT5lPD0uMDQwNDU/ZS8xMi45MjooKGUrLjA1NSkvMS4wNTUpKioyLjQ7ZnVuY3Rpb24gV2EoZSx0LG4pe2xldCByPVVhKGxhKGUucikpLGk9VWEobGEoZS5nKSksYT1VYShsYShlLmIpKTtyZXR1cm57cjpjYShIYShyK24qKFVhKGxhKHQucikpLXIpKSksZzpjYShIYShpK24qKFVhKGxhKHQuZykpLWkpKSksYjpjYShIYShhK24qKFVhKGxhKHQuYikpLWEpKSksYTplLmErbioodC5hLWUuYSl9fWZ1bmN0aW9uIEdhKGUsdCxuKXtpZihlKXtsZXQgcj1UYShlKTtyW3RdPU1hdGgubWF4KDAsTWF0aC5taW4oclt0XStyW3RdKm4sdD09PTA/MzYwOjEpKSxyPURhKHIpLGUucj1yWzBdLGUuZz1yWzFdLGUuYj1yWzJdfX1mdW5jdGlvbiBLYShlLHQpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKHR8fHt9LGUpfWZ1bmN0aW9uIHFhKGUpe3ZhciB0PXtyOjAsZzowLGI6MCxhOjI1NX07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg+PTMmJih0PXtyOmVbMF0sZzplWzFdLGI6ZVsyXSxhOjI1NX0sZS5sZW5ndGg+MyYmKHQuYT1jYShlWzNdKSkpOih0PUthKGUse3I6MCxnOjAsYjowLGE6MX0pLHQuYT1jYSh0LmEpKSx0fWZ1bmN0aW9uIEphKGUpe3JldHVybiBlLmNoYXJBdCgwKT09PWByYD9CYShlKTpqYShlKX12YXIgWWE9Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDtsZXQgbj10eXBlb2YgdCxyO249PT1gb2JqZWN0YD9yPXFhKHQpOm49PT1gc3RyaW5nYCYmKHI9X2EodCl8fFJhKHQpfHxKYSh0KSksdGhpcy5fcmdiPXIsdGhpcy5fdmFsaWQ9ISFyfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLl92YWxpZH1nZXQgcmdiKCl7dmFyIGU9S2EodGhpcy5fcmdiKTtyZXR1cm4gZSYmKGUuYT1sYShlLmEpKSxlfXNldCByZ2IoZSl7dGhpcy5fcmdiPXFhKGUpfXJnYlN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9WYSh0aGlzLl9yZ2IpOnZvaWQgMH1oZXhTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/eWEodGhpcy5fcmdiKTp2b2lkIDB9aHNsU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP05hKHRoaXMuX3JnYik6dm9pZCAwfW1peChlLHQpe2lmKGUpe2xldCBuPXRoaXMucmdiLHI9ZS5yZ2IsaSxhPXQ9PT1pPy41OnQsbz0yKmEtMSxzPW4uYS1yLmEsYz0oKG8qcz09PS0xP286KG8rcykvKDErbypzKSkrMSkvMjtpPTEtYyxuLnI9MjU1JmMqbi5yK2kqci5yKy41LG4uZz0yNTUmYypuLmcraSpyLmcrLjUsbi5iPTI1NSZjKm4uYitpKnIuYisuNSxuLmE9YSpuLmErKDEtYSkqci5hLHRoaXMucmdiPW59cmV0dXJuIHRoaXN9aW50ZXJwb2xhdGUoZSx0KXtyZXR1cm4gZSYmKHRoaXMuX3JnYj1XYSh0aGlzLl9yZ2IsZS5fcmdiLHQpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyBlKHRoaXMucmdiKX1hbHBoYShlKXtyZXR1cm4gdGhpcy5fcmdiLmE9Y2EoZSksdGhpc31jbGVhcmVyKGUpe2xldCB0PXRoaXMuX3JnYjtyZXR1cm4gdC5hKj0xLWUsdGhpc31ncmV5c2NhbGUoKXtsZXQgZT10aGlzLl9yZ2I7cmV0dXJuIGUucj1lLmc9ZS5iPWFhKGUuciouMytlLmcqLjU5K2UuYiouMTEpLHRoaXN9b3BhcXVlcihlKXtsZXQgdD10aGlzLl9yZ2I7cmV0dXJuIHQuYSo9MStlLHRoaXN9bmVnYXRlKCl7bGV0IGU9dGhpcy5fcmdiO3JldHVybiBlLnI9MjU1LWUucixlLmc9MjU1LWUuZyxlLmI9MjU1LWUuYix0aGlzfWxpZ2h0ZW4oZSl7cmV0dXJuIEdhKHRoaXMuX3JnYiwyLGUpLHRoaXN9ZGFya2VuKGUpe3JldHVybiBHYSh0aGlzLl9yZ2IsMiwtZSksdGhpc31zYXR1cmF0ZShlKXtyZXR1cm4gR2EodGhpcy5fcmdiLDEsZSksdGhpc31kZXNhdHVyYXRlKGUpe3JldHVybiBHYSh0aGlzLl9yZ2IsMSwtZSksdGhpc31yb3RhdGUoZSl7cmV0dXJuIE1hKHRoaXMuX3JnYixlKSx0aGlzfX07ZnVuY3Rpb24gWGEoKXt9dmFyIFphPSgoKT0+e2xldCBlPTA7cmV0dXJuKCk9PmUrK30pKCk7ZnVuY3Rpb24gVShlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBXKGUpe2lmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7bGV0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO3JldHVybiB0LnNsaWNlKDAsNyk9PT1gW29iamVjdGAmJnQuc2xpY2UoLTYpPT09YEFycmF5XWB9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZSE9PW51bGwmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gfWZ1bmN0aW9uIEsoZSl7cmV0dXJuKHR5cGVvZiBlPT1gbnVtYmVyYHx8ZSBpbnN0YW5jZW9mIE51bWJlcikmJmlzRmluaXRlKCtlKX1mdW5jdGlvbiBRYShlLHQpe3JldHVybiBLKGUpP2U6dH1mdW5jdGlvbiBxKGUsdCl7cmV0dXJuIGU9PT12b2lkIDA/dDplfXZhciAkYT0oZSx0KT0+dHlwZW9mIGU9PWBzdHJpbmdgJiZlLmVuZHNXaXRoKGAlYCk/cGFyc2VGbG9hdChlKS8xMDAqdDorZTtmdW5jdGlvbiBKKGUsdCxuKXtpZihlJiZ0eXBlb2YgZS5jYWxsPT1gZnVuY3Rpb25gKXJldHVybiBlLmFwcGx5KG4sdCl9ZnVuY3Rpb24gWShlLHQsbixyKXtsZXQgaSxhLG87aWYoVyhlKSl7aWYoYT1lLmxlbmd0aCxyKWZvcihpPWEtMTtpPj0wO2ktLSl0LmNhbGwobixlW2ldLGkpO2Vsc2UgZm9yKGk9MDtpPGE7aSsrKXQuY2FsbChuLGVbaV0saSl9ZWxzZSBpZihHKGUpKWZvcihvPU9iamVjdC5rZXlzKGUpLGE9by5sZW5ndGgsaT0wO2k8YTtpKyspdC5jYWxsKG4sZVtvW2ldXSxvW2ldKX1mdW5jdGlvbiBlbyhlLHQpe2xldCBuLHIsaSxhO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilpZihpPWVbbl0sYT10W25dLGkuZGF0YXNldEluZGV4IT09YS5kYXRhc2V0SW5kZXh8fGkuaW5kZXghPT1hLmluZGV4KXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRvKGUpe2lmKFcoZSkpcmV0dXJuIGUubWFwKHRvKTtpZihHKGUpKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49T2JqZWN0LmtleXMoZSkscj1uLmxlbmd0aCxpPTA7Zm9yKDtpPHI7KytpKXRbbltpXV09dG8oZVtuW2ldXSk7cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gbm8oZSl7cmV0dXJuW2BfX3Byb3RvX19gLGBwcm90b3R5cGVgLGBjb25zdHJ1Y3RvcmBdLmluZGV4T2YoZSk9PT0tMX1mdW5jdGlvbiBybyhlLHQsbixyKXtpZighbm8oZSkpcmV0dXJuO2xldCBpPXRbZV0sYT1uW2VdO0coaSkmJkcoYSk/aW8oaSxhLHIpOnRbZV09dG8oYSl9ZnVuY3Rpb24gaW8oZSx0LG4pe2xldCByPVcodCk/dDpbdF0saT1yLmxlbmd0aDtpZighRyhlKSlyZXR1cm4gZTtufHw9e307bGV0IGE9bi5tZXJnZXJ8fHJvLG87Zm9yKGxldCB0PTA7dDxpOysrdCl7aWYobz1yW3RdLCFHKG8pKWNvbnRpbnVlO2xldCBpPU9iamVjdC5rZXlzKG8pO2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dDxyOysrdClhKGlbdF0sZSxvLG4pfXJldHVybiBlfWZ1bmN0aW9uIGFvKGUsdCl7cmV0dXJuIGlvKGUsdCx7bWVyZ2VyOm9vfSl9ZnVuY3Rpb24gb28oZSx0LG4pe2lmKCFubyhlKSlyZXR1cm47bGV0IHI9dFtlXSxpPW5bZV07RyhyKSYmRyhpKT9hbyhyLGkpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfHwodFtlXT10byhpKSl9dmFyIHNvPXsiIjplPT5lLHg6ZT0+ZS54LHk6ZT0+ZS55fTtmdW5jdGlvbiBjbyhlKXtsZXQgdD1lLnNwbGl0KGAuYCksbj1bXSxyPWBgO2ZvcihsZXQgZSBvZiB0KXIrPWUsci5lbmRzV2l0aChgXFxgKT9yPXIuc2xpY2UoMCwtMSkrYC5gOihuLnB1c2gocikscj1gYCk7cmV0dXJuIG59ZnVuY3Rpb24gbG8oZSl7bGV0IHQ9Y28oZSk7cmV0dXJuIGU9Pntmb3IobGV0IG4gb2YgdCl7aWYobj09PWBgKWJyZWFrO2UmJj1lW25dfXJldHVybiBlfX1mdW5jdGlvbiB1byhlLHQpe3JldHVybihzb1t0XXx8KHNvW3RdPWxvKHQpKSkoZSl9ZnVuY3Rpb24gZm8oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX12YXIgcG89ZT0+ZSE9PXZvaWQgMCxtbz1lPT50eXBlb2YgZT09YGZ1bmN0aW9uYCxobz0oZSx0KT0+e2lmKGUuc2l6ZSE9PXQuc2l6ZSlyZXR1cm4hMTtmb3IobGV0IG4gb2YgZSlpZighdC5oYXMobikpcmV0dXJuITE7cmV0dXJuITB9O2Z1bmN0aW9uIGdvKGUpe3JldHVybiBlLnR5cGU9PT1gbW91c2V1cGB8fGUudHlwZT09PWBjbGlja2B8fGUudHlwZT09PWBjb250ZXh0bWVudWB9dmFyIFg9TWF0aC5QSSxfbz0yKlg7X28rWDt2YXIgdm89MS8wLHlvPVgvMTgwLGJvPVgvMix4bz1YLzQsU289WCoyLzMsQ289TWF0aC5sb2cxMCx3bz1NYXRoLnNpZ247ZnVuY3Rpb24gVG8oZSx0LG4pe3JldHVybiBNYXRoLmFicyhlLXQpPG59ZnVuY3Rpb24gRW8oZSl7bGV0IHQ9TWF0aC5yb3VuZChlKTtlPVRvKGUsdCxlLzFlMyk/dDplO2xldCBuPTEwKipNYXRoLmZsb29yKENvKGUpKSxyPWUvbjtyZXR1cm4ocjw9MT8xOnI8PTI/MjpyPD01PzU6MTApKm59ZnVuY3Rpb24gRG8oZSl7bGV0IHQ9W10sbj1NYXRoLnNxcnQoZSkscjtmb3Iocj0xO3I8bjtyKyspZSVyPT09MCYmKHQucHVzaChyKSx0LnB1c2goZS9yKSk7cmV0dXJuIG49PT0obnwwKSYmdC5wdXNoKG4pLHQuc29ydCgoZSx0KT0+ZS10KS5wb3AoKSx0fWZ1bmN0aW9uIE9vKGUpe3JldHVybiB0eXBlb2YgZT09YHN5bWJvbGB8fHR5cGVvZiBlPT1gb2JqZWN0YCYmISFlJiYhKFN5bWJvbC50b1ByaW1pdGl2ZSBpbiBlfHxgdG9TdHJpbmdgaW4gZXx8YHZhbHVlT2ZgaW4gZSl9ZnVuY3Rpb24ga28oZSl7cmV0dXJuIU9vKGUpJiYhaXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfWZ1bmN0aW9uIEFvKGUsdCl7bGV0IG49TWF0aC5yb3VuZChlKTtyZXR1cm4gbi10PD1lJiZuK3Q+PWV9ZnVuY3Rpb24gam8oZSx0LG4pe2xldCByLGksYTtmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylhPWVbcl1bbl0saXNOYU4oYSl8fCh0Lm1pbj1NYXRoLm1pbih0Lm1pbixhKSx0Lm1heD1NYXRoLm1heCh0Lm1heCxhKSl9ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIFgvMTgwKmV9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIDE4MC9YKmV9ZnVuY3Rpb24gUG8oZSl7aWYoIUsoZSkpcmV0dXJuO2xldCB0PTEsbj0wO2Zvcig7TWF0aC5yb3VuZChlKnQpL3QhPT1lOyl0Kj0xMCxuKys7cmV0dXJuIG59ZnVuY3Rpb24gRm8oZSx0KXtsZXQgbj10LngtZS54LHI9dC55LWUueSxpPU1hdGguc3FydChuKm4rcipyKSxhPU1hdGguYXRhbjIocixuKTtyZXR1cm4gYTwtLjUqWCYmKGErPV9vKSx7YW5nbGU6YSxkaXN0YW5jZTppfX1mdW5jdGlvbiBJbyhlLHQpe3JldHVybiBNYXRoLnNxcnQoKHQueC1lLngpKioyKyh0LnktZS55KSoqMil9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuKGUlX28rX28pJV9vfWZ1bmN0aW9uIFJvKGUsdCxuLHIpe2xldCBpPUxvKGUpLGE9TG8odCksbz1MbyhuKSxzPUxvKGEtaSksYz1MbyhvLWkpLGw9TG8oaS1hKSx1PUxvKGktbyk7cmV0dXJuIGk9PT1hfHxpPT09b3x8ciYmYT09PW98fHM+YyYmbDx1fWZ1bmN0aW9uIHpvKGUsdCxuKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihuLGUpKX1mdW5jdGlvbiBCbyhlKXtyZXR1cm4gem8oZSwtMzI3NjgsMzI3NjcpfWZ1bmN0aW9uIFZvKGUsdCxuLHI9MWUtNil7cmV0dXJuIGU+PU1hdGgubWluKHQsbiktciYmZTw9TWF0aC5tYXgodCxuKStyfWZ1bmN0aW9uIEhvKGUsdCxuKXtufHw9KG49PmVbbl08dCk7bGV0IHI9ZS5sZW5ndGgtMSxpPTAsYTtmb3IoO3ItaT4xOylhPWkrcj4+MSxuKGEpP2k9YTpyPWE7cmV0dXJue2xvOmksaGk6cn19dmFyIFVvPShlLHQsbixyKT0+SG8oZSxuLHI/cj0+e2xldCBpPWVbcl1bdF07cmV0dXJuIGk8bnx8aT09PW4mJmVbcisxXVt0XT09PW59OnI9PmVbcl1bdF08biksV289KGUsdCxuKT0+SG8oZSxuLHI9PmVbcl1bdF0+PW4pO2Z1bmN0aW9uIEdvKGUsdCxuKXtsZXQgcj0wLGk9ZS5sZW5ndGg7Zm9yKDtyPGkmJmVbcl08dDspcisrO2Zvcig7aT5yJiZlW2ktMV0+bjspaS0tO3JldHVybiByPjB8fGk8ZS5sZW5ndGg/ZS5zbGljZShyLGkpOmV9dmFyIEtvPVtgcHVzaGAsYHBvcGAsYHNoaWZ0YCxgc3BsaWNlYCxgdW5zaGlmdGBdO2Z1bmN0aW9uIHFvKGUsdCl7aWYoZS5fY2hhcnRqcyl7ZS5fY2hhcnRqcy5saXN0ZW5lcnMucHVzaCh0KTtyZXR1cm59T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jaGFydGpzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6e2xpc3RlbmVyczpbdF19fSksS28uZm9yRWFjaCh0PT57bGV0IG49YF9vbkRhdGFgK2ZvKHQpLHI9ZVt0XTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZSguLi50KXtsZXQgaT1yLmFwcGx5KHRoaXMsdCk7cmV0dXJuIGUuX2NoYXJ0anMubGlzdGVuZXJzLmZvckVhY2goZT0+e3R5cGVvZiBlW25dPT1gZnVuY3Rpb25gJiZlW25dKC4uLnQpfSksaX19KX0pfWZ1bmN0aW9uIEpvKGUsdCl7bGV0IG49ZS5fY2hhcnRqcztpZighbilyZXR1cm47bGV0IHI9bi5saXN0ZW5lcnMsaT1yLmluZGV4T2YodCk7aSE9PS0xJiZyLnNwbGljZShpLDEpLCEoci5sZW5ndGg+MCkmJihLby5mb3JFYWNoKHQ9PntkZWxldGUgZVt0XX0pLGRlbGV0ZSBlLl9jaGFydGpzKX1mdW5jdGlvbiBZbyhlKXtsZXQgdD1uZXcgU2V0KGUpO3JldHVybiB0LnNpemU9PT1lLmxlbmd0aD9lOkFycmF5LmZyb20odCl9dmFyIFhvPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+YHVgP2Z1bmN0aW9uKGUpe3JldHVybiBlKCl9OndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV9KCk7ZnVuY3Rpb24gWm8oZSx0KXtsZXQgbj1bXSxyPSExO3JldHVybiBmdW5jdGlvbiguLi5pKXtuPWkscnx8KHI9ITAsWG8uY2FsbCh3aW5kb3csKCk9PntyPSExLGUuYXBwbHkodCxuKX0pKX19ZnVuY3Rpb24gUW8oZSx0KXtsZXQgbjtyZXR1cm4gZnVuY3Rpb24oLi4ucil7cmV0dXJuIHQ/KGNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoZSx0LHIpKTplLmFwcGx5KHRoaXMsciksdH19dmFyICRvPWU9PmU9PT1gc3RhcnRgP2BsZWZ0YDplPT09YGVuZGA/YHJpZ2h0YDpgY2VudGVyYCxlcz0oZSx0LG4pPT5lPT09YHN0YXJ0YD90OmU9PT1gZW5kYD9uOih0K24pLzIsdHM9KGUsdCxuLHIpPT5lPT09KHI/YGxlZnRgOmByaWdodGApP246ZT09PWBjZW50ZXJgPyh0K24pLzI6dCxucz1lPT5lPT09MHx8ZT09PTEscnM9KGUsdCxuKT0+LSgyKiooMTAqLS1lKSpNYXRoLnNpbigoZS10KSpfby9uKSksaXM9KGUsdCxuKT0+MioqKC0xMCplKSpNYXRoLnNpbigoZS10KSpfby9uKSsxLGFzPXtsaW5lYXI6ZT0+ZSxlYXNlSW5RdWFkOmU9PmUqZSxlYXNlT3V0UXVhZDplPT4tZSooZS0yKSxlYXNlSW5PdXRRdWFkOmU9PihlLz0uNSk8MT8uNSplKmU6LS41KigtLWUqKGUtMiktMSksZWFzZUluQ3ViaWM6ZT0+ZSplKmUsZWFzZU91dEN1YmljOmU9Pi0tZSplKmUrMSxlYXNlSW5PdXRDdWJpYzplPT4oZS89LjUpPDE/LjUqZSplKmU6LjUqKChlLT0yKSplKmUrMiksZWFzZUluUXVhcnQ6ZT0+ZSplKmUqZSxlYXNlT3V0UXVhcnQ6ZT0+LSgtLWUqZSplKmUtMSksZWFzZUluT3V0UXVhcnQ6ZT0+KGUvPS41KTwxPy41KmUqZSplKmU6LS41KigoZS09MikqZSplKmUtMiksZWFzZUluUXVpbnQ6ZT0+ZSplKmUqZSplLGVhc2VPdXRRdWludDplPT4tLWUqZSplKmUqZSsxLGVhc2VJbk91dFF1aW50OmU9PihlLz0uNSk8MT8uNSplKmUqZSplKmU6LjUqKChlLT0yKSplKmUqZSplKzIpLGVhc2VJblNpbmU6ZT0+LU1hdGguY29zKGUqYm8pKzEsZWFzZU91dFNpbmU6ZT0+TWF0aC5zaW4oZSpibyksZWFzZUluT3V0U2luZTplPT4tLjUqKE1hdGguY29zKFgqZSktMSksZWFzZUluRXhwbzplPT5lPT09MD8wOjIqKigxMCooZS0xKSksZWFzZU91dEV4cG86ZT0+ZT09PTE/MTotKDIqKigtMTAqZSkpKzEsZWFzZUluT3V0RXhwbzplPT5ucyhlKT9lOmU8LjU/LjUqMioqKDEwKihlKjItMSkpOi41KigtKDIqKigtMTAqKGUqMi0xKSkpKzIpLGVhc2VJbkNpcmM6ZT0+ZT49MT9lOi0oTWF0aC5zcXJ0KDEtZSplKS0xKSxlYXNlT3V0Q2lyYzplPT5NYXRoLnNxcnQoMS0gLS1lKmUpLGVhc2VJbk91dENpcmM6ZT0+KGUvPS41KTwxPy0uNSooTWF0aC5zcXJ0KDEtZSplKS0xKTouNSooTWF0aC5zcXJ0KDEtKGUtPTIpKmUpKzEpLGVhc2VJbkVsYXN0aWM6ZT0+bnMoZSk/ZTpycyhlLC4wNzUsLjMpLGVhc2VPdXRFbGFzdGljOmU9Pm5zKGUpP2U6aXMoZSwuMDc1LC4zKSxlYXNlSW5PdXRFbGFzdGljKGUpe2xldCB0PS4xMTI1LG49LjQ1O3JldHVybiBucyhlKT9lOmU8LjU/LjUqcnMoZSoyLHQsbik6LjUrLjUqaXMoZSoyLTEsdCxuKX0sZWFzZUluQmFjayhlKXtyZXR1cm4gZSplKigyLjcwMTU4KmUtMS43MDE1OCl9LGVhc2VPdXRCYWNrKGUpe3JldHVybi0tZSplKigyLjcwMTU4KmUrMS43MDE1OCkrMX0sZWFzZUluT3V0QmFjayhlKXtsZXQgdD0xLjcwMTU4O3JldHVybihlLz0uNSk8MT8uNSooZSplKigoKHQqPTEuNTI1KSsxKSplLXQpKTouNSooKGUtPTIpKmUqKCgodCo9MS41MjUpKzEpKmUrdCkrMil9LGVhc2VJbkJvdW5jZTplPT4xLWFzLmVhc2VPdXRCb3VuY2UoMS1lKSxlYXNlT3V0Qm91bmNlKGUpe2xldCB0PTcuNTYyNSxuPTIuNzU7cmV0dXJuIGU8MS9uP3QqZSplOmU8Mi9uP3QqKGUtPTEuNS9uKSplKy43NTplPDIuNS9uP3QqKGUtPTIuMjUvbikqZSsuOTM3NTp0KihlLT0yLjYyNS9uKSplKy45ODQzNzV9LGVhc2VJbk91dEJvdW5jZTplPT5lPC41P2FzLmVhc2VJbkJvdW5jZShlKjIpKi41OmFzLmVhc2VPdXRCb3VuY2UoZSoyLTEpKi41Ky41fTtmdW5jdGlvbiBvcyhlKXtpZihlJiZ0eXBlb2YgZT09YG9iamVjdGApe2xldCB0PWUudG9TdHJpbmcoKTtyZXR1cm4gdD09PWBbb2JqZWN0IENhbnZhc1BhdHRlcm5dYHx8dD09PWBbb2JqZWN0IENhbnZhc0dyYWRpZW50XWB9cmV0dXJuITF9ZnVuY3Rpb24gc3MoZSl7cmV0dXJuIG9zKGUpP2U6bmV3IFlhKGUpfWZ1bmN0aW9uIGNzKGUpe3JldHVybiBvcyhlKT9lOm5ldyBZYShlKS5zYXR1cmF0ZSguNSkuZGFya2VuKC4xKS5oZXhTdHJpbmcoKX12YXIgbHM9W2B4YCxgeWAsYGJvcmRlcldpZHRoYCxgcmFkaXVzYCxgdGVuc2lvbmBdLHVzPVtgY29sb3JgLGBib3JkZXJDb2xvcmAsYGJhY2tncm91bmRDb2xvcmBdO2Z1bmN0aW9uIGRzKGUpe2Uuc2V0KGBhbmltYXRpb25gLHtkZWxheTp2b2lkIDAsZHVyYXRpb246MWUzLGVhc2luZzpgZWFzZU91dFF1YXJ0YCxmbjp2b2lkIDAsZnJvbTp2b2lkIDAsbG9vcDp2b2lkIDAsdG86dm9pZCAwLHR5cGU6dm9pZCAwfSksZS5kZXNjcmliZShgYW5pbWF0aW9uYCx7X2ZhbGxiYWNrOiExLF9pbmRleGFibGU6ITEsX3NjcmlwdGFibGU6ZT0+ZSE9PWBvblByb2dyZXNzYCYmZSE9PWBvbkNvbXBsZXRlYCYmZSE9PWBmbmB9KSxlLnNldChgYW5pbWF0aW9uc2Ase2NvbG9yczp7dHlwZTpgY29sb3JgLHByb3BlcnRpZXM6dXN9LG51bWJlcnM6e3R5cGU6YG51bWJlcmAscHJvcGVydGllczpsc319KSxlLmRlc2NyaWJlKGBhbmltYXRpb25zYCx7X2ZhbGxiYWNrOmBhbmltYXRpb25gfSksZS5zZXQoYHRyYW5zaXRpb25zYCx7YWN0aXZlOnthbmltYXRpb246e2R1cmF0aW9uOjQwMH19LHJlc2l6ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjowfX0sc2hvdzp7YW5pbWF0aW9uczp7Y29sb3JzOntmcm9tOmB0cmFuc3BhcmVudGB9LHZpc2libGU6e3R5cGU6YGJvb2xlYW5gLGR1cmF0aW9uOjB9fX0saGlkZTp7YW5pbWF0aW9uczp7Y29sb3JzOnt0bzpgdHJhbnNwYXJlbnRgfSx2aXNpYmxlOnt0eXBlOmBib29sZWFuYCxlYXNpbmc6YGxpbmVhcmAsZm46ZT0+ZXwwfX19fSl9ZnVuY3Rpb24gZnMoZSl7ZS5zZXQoYGxheW91dGAse2F1dG9QYWRkaW5nOiEwLHBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfX0pfXZhciBwcz1uZXcgTWFwO2Z1bmN0aW9uIG1zKGUsdCl7dHx8PXt9O2xldCBuPWUrSlNPTi5zdHJpbmdpZnkodCkscj1wcy5nZXQobik7cmV0dXJuIHJ8fChyPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHQpLHBzLnNldChuLHIpKSxyfWZ1bmN0aW9uIGhzKGUsdCxuKXtyZXR1cm4gbXModCxuKS5mb3JtYXQoZSl9dmFyIGdzPXt2YWx1ZXMoZSl7cmV0dXJuIFcoZSk/ZTpgYCtlfSxudW1lcmljKGUsdCxuKXtpZihlPT09MClyZXR1cm5gMGA7bGV0IHI9dGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSxpLGE9ZTtpZihuLmxlbmd0aD4xKXtsZXQgdD1NYXRoLm1heChNYXRoLmFicyhuWzBdLnZhbHVlKSxNYXRoLmFicyhuW24ubGVuZ3RoLTFdLnZhbHVlKSk7KHQ8MWUtNHx8dD4weDM4ZDdlYTRjNjgwMDApJiYoaT1gc2NpZW50aWZpY2ApLGE9X3MoZSxuKX1sZXQgbz1DbyhNYXRoLmFicyhhKSkscz1pc05hTihvKT8xOk1hdGgubWF4KE1hdGgubWluKC0xKk1hdGguZmxvb3IobyksMjApLDApLGM9e25vdGF0aW9uOmksbWluaW11bUZyYWN0aW9uRGlnaXRzOnMsbWF4aW11bUZyYWN0aW9uRGlnaXRzOnN9O3JldHVybiBPYmplY3QuYXNzaWduKGMsdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCksaHMoZSxyLGMpfSxsb2dhcml0aG1pYyhlLHQsbil7aWYoZT09PTApcmV0dXJuYDBgO2xldCByPW5bdF0uc2lnbmlmaWNhbmR8fGUvMTAqKk1hdGguZmxvb3IoQ28oZSkpO3JldHVyblsxLDIsMyw1LDEwLDE1XS5pbmNsdWRlcyhyKXx8dD4uOCpuLmxlbmd0aD9ncy5udW1lcmljLmNhbGwodGhpcyxlLHQsbik6YGB9fTtmdW5jdGlvbiBfcyhlLHQpe2xldCBuPXQubGVuZ3RoPjM/dFsyXS52YWx1ZS10WzFdLnZhbHVlOnRbMV0udmFsdWUtdFswXS52YWx1ZTtyZXR1cm4gTWF0aC5hYnMobik+PTEmJmUhPT1NYXRoLmZsb29yKGUpJiYobj1lLU1hdGguZmxvb3IoZSkpLG59dmFyIHZzPXtmb3JtYXR0ZXJzOmdzfTtmdW5jdGlvbiB5cyhlKXtlLnNldChgc2NhbGVgLHtkaXNwbGF5OiEwLG9mZnNldDohMSxyZXZlcnNlOiExLGJlZ2luQXRaZXJvOiExLGJvdW5kczpgdGlja3NgLGNsaXA6ITAsZ3JhY2U6MCxncmlkOntkaXNwbGF5OiEwLGxpbmVXaWR0aDoxLGRyYXdPbkNoYXJ0QXJlYTohMCxkcmF3VGlja3M6ITAsdGlja0xlbmd0aDo4LHRpY2tXaWR0aDooZSx0KT0+dC5saW5lV2lkdGgsdGlja0NvbG9yOihlLHQpPT50LmNvbG9yLG9mZnNldDohMX0sYm9yZGVyOntkaXNwbGF5OiEwLGRhc2g6W10sZGFzaE9mZnNldDowLHdpZHRoOjF9LHRpdGxlOntkaXNwbGF5OiExLHRleHQ6YGAscGFkZGluZzp7dG9wOjQsYm90dG9tOjR9fSx0aWNrczp7bWluUm90YXRpb246MCxtYXhSb3RhdGlvbjo1MCxtaXJyb3I6ITEsdGV4dFN0cm9rZVdpZHRoOjAsdGV4dFN0cm9rZUNvbG9yOmBgLHBhZGRpbmc6MyxkaXNwbGF5OiEwLGF1dG9Ta2lwOiEwLGF1dG9Ta2lwUGFkZGluZzozLGxhYmVsT2Zmc2V0OjAsY2FsbGJhY2s6dnMuZm9ybWF0dGVycy52YWx1ZXMsbWlub3I6e30sbWFqb3I6e30sYWxpZ246YGNlbnRlcmAsY3Jvc3NBbGlnbjpgbmVhcmAsc2hvd0xhYmVsQmFja2Ryb3A6ITEsYmFja2Ryb3BDb2xvcjpgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KWAsYmFja2Ryb3BQYWRkaW5nOjJ9fSksZS5yb3V0ZShgc2NhbGUudGlja3NgLGBjb2xvcmAsYGAsYGNvbG9yYCksZS5yb3V0ZShgc2NhbGUuZ3JpZGAsYGNvbG9yYCxgYCxgYm9yZGVyQ29sb3JgKSxlLnJvdXRlKGBzY2FsZS5ib3JkZXJgLGBjb2xvcmAsYGAsYGJvcmRlckNvbG9yYCksZS5yb3V0ZShgc2NhbGUudGl0bGVgLGBjb2xvcmAsYGAsYGNvbG9yYCksZS5kZXNjcmliZShgc2NhbGVgLHtfZmFsbGJhY2s6ITEsX3NjcmlwdGFibGU6ZT0+IWUuc3RhcnRzV2l0aChgYmVmb3JlYCkmJiFlLnN0YXJ0c1dpdGgoYGFmdGVyYCkmJmUhPT1gY2FsbGJhY2tgJiZlIT09YHBhcnNlcmAsX2luZGV4YWJsZTplPT5lIT09YGJvcmRlckRhc2hgJiZlIT09YHRpY2tCb3JkZXJEYXNoYCYmZSE9PWBkYXNoYH0pLGUuZGVzY3JpYmUoYHNjYWxlc2Ase19mYWxsYmFjazpgc2NhbGVgfSksZS5kZXNjcmliZShgc2NhbGUudGlja3NgLHtfc2NyaXB0YWJsZTplPT5lIT09YGJhY2tkcm9wUGFkZGluZ2AmJmUhPT1gY2FsbGJhY2tgLF9pbmRleGFibGU6ZT0+ZSE9PWBiYWNrZHJvcFBhZGRpbmdgfSl9dmFyIGJzPU9iamVjdC5jcmVhdGUobnVsbCkseHM9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBTcyhlLHQpe2lmKCF0KXJldHVybiBlO2xldCBuPXQuc3BsaXQoYC5gKTtmb3IobGV0IHQ9MCxyPW4ubGVuZ3RoO3Q8cjsrK3Qpe2xldCByPW5bdF07ZT1lW3JdfHwoZVtyXT1PYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBDcyhlLHQsbil7cmV0dXJuIHR5cGVvZiB0PT1gc3RyaW5nYD9pbyhTcyhlLHQpLG4pOmlvKFNzKGUsYGApLHQpfXZhciBaPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYW5pbWF0aW9uPXZvaWQgMCx0aGlzLmJhY2tncm91bmRDb2xvcj1gcmdiYSgwLDAsMCwwLjEpYCx0aGlzLmJvcmRlckNvbG9yPWByZ2JhKDAsMCwwLDAuMSlgLHRoaXMuY29sb3I9YCM2NjZgLHRoaXMuZGF0YXNldHM9e30sdGhpcy5kZXZpY2VQaXhlbFJhdGlvPWU9PmUuY2hhcnQucGxhdGZvcm0uZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLHRoaXMuZWxlbWVudHM9e30sdGhpcy5ldmVudHM9W2Btb3VzZW1vdmVgLGBtb3VzZW91dGAsYGNsaWNrYCxgdG91Y2hzdGFydGAsYHRvdWNobW92ZWBdLHRoaXMuZm9udD17ZmFtaWx5OmAnSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZmAsc2l6ZToxMixzdHlsZTpgbm9ybWFsYCxsaW5lSGVpZ2h0OjEuMix3ZWlnaHQ6bnVsbH0sdGhpcy5ob3Zlcj17fSx0aGlzLmhvdmVyQmFja2dyb3VuZENvbG9yPShlLHQpPT5jcyh0LmJhY2tncm91bmRDb2xvciksdGhpcy5ob3ZlckJvcmRlckNvbG9yPShlLHQpPT5jcyh0LmJvcmRlckNvbG9yKSx0aGlzLmhvdmVyQ29sb3I9KGUsdCk9PmNzKHQuY29sb3IpLHRoaXMuaW5kZXhBeGlzPWB4YCx0aGlzLmludGVyYWN0aW9uPXttb2RlOmBuZWFyZXN0YCxpbnRlcnNlY3Q6ITAsaW5jbHVkZUludmlzaWJsZTohMX0sdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvPSEwLHRoaXMub25Ib3Zlcj1udWxsLHRoaXMub25DbGljaz1udWxsLHRoaXMucGFyc2luZz0hMCx0aGlzLnBsdWdpbnM9e30sdGhpcy5yZXNwb25zaXZlPSEwLHRoaXMuc2NhbGU9dm9pZCAwLHRoaXMuc2NhbGVzPXt9LHRoaXMuc2hvd0xpbmU9ITAsdGhpcy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcD0hMCx0aGlzLmRlc2NyaWJlKGUpLHRoaXMuYXBwbHkodCl9c2V0KGUsdCl7cmV0dXJuIENzKHRoaXMsZSx0KX1nZXQoZSl7cmV0dXJuIFNzKHRoaXMsZSl9ZGVzY3JpYmUoZSx0KXtyZXR1cm4gQ3MoeHMsZSx0KX1vdmVycmlkZShlLHQpe3JldHVybiBDcyhicyxlLHQpfXJvdXRlKGUsdCxuLHIpe2xldCBpPVNzKHRoaXMsZSksYT1Tcyh0aGlzLG4pLG89YF9gK3Q7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSx7W29dOnt2YWx1ZTppW3RdLHdyaXRhYmxlOiEwfSxbdF06e2VudW1lcmFibGU6ITAsZ2V0KCl7bGV0IGU9dGhpc1tvXSx0PWFbcl07cmV0dXJuIEcoZSk/T2JqZWN0LmFzc2lnbih7fSx0LGUpOnEoZSx0KX0sc2V0KGUpe3RoaXNbb109ZX19fSl9YXBwbHkoZSl7ZS5mb3JFYWNoKGU9PmUodGhpcykpfX0oe19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksX2luZGV4YWJsZTplPT5lIT09YGV2ZW50c2AsaG92ZXI6e19mYWxsYmFjazpgaW50ZXJhY3Rpb25gfSxpbnRlcmFjdGlvbjp7X3NjcmlwdGFibGU6ITEsX2luZGV4YWJsZTohMX19LFtkcyxmcyx5c10pO2Z1bmN0aW9uIHdzKGUpe3JldHVybiFlfHxVKGUuc2l6ZSl8fFUoZS5mYW1pbHkpP251bGw6KGUuc3R5bGU/ZS5zdHlsZStgIGA6YGApKyhlLndlaWdodD9lLndlaWdodCtgIGA6YGApK2Uuc2l6ZStgcHggYCtlLmZhbWlseX1mdW5jdGlvbiBUcyhlLHQsbixyLGkpe2xldCBhPXRbaV07cmV0dXJuIGF8fChhPXRbaV09ZS5tZWFzdXJlVGV4dChpKS53aWR0aCxuLnB1c2goaSkpLGE+ciYmKHI9YSkscn1mdW5jdGlvbiBFcyhlLHQsbixyKXtyfHw9e307bGV0IGk9ci5kYXRhPXIuZGF0YXx8e30sYT1yLmdhcmJhZ2VDb2xsZWN0PXIuZ2FyYmFnZUNvbGxlY3R8fFtdO3IuZm9udCE9PXQmJihpPXIuZGF0YT17fSxhPXIuZ2FyYmFnZUNvbGxlY3Q9W10sci5mb250PXQpLGUuc2F2ZSgpLGUuZm9udD10O2xldCBvPTAscz1uLmxlbmd0aCxjLGwsdSxkLGY7Zm9yKGM9MDtjPHM7YysrKWlmKGQ9bltjXSxkIT1udWxsJiYhVyhkKSlvPVRzKGUsaSxhLG8sZCk7ZWxzZSBpZihXKGQpKWZvcihsPTAsdT1kLmxlbmd0aDtsPHU7bCsrKWY9ZFtsXSxmIT1udWxsJiYhVyhmKSYmKG89VHMoZSxpLGEsbyxmKSk7ZS5yZXN0b3JlKCk7bGV0IHA9YS5sZW5ndGgvMjtpZihwPm4ubGVuZ3RoKXtmb3IoYz0wO2M8cDtjKyspZGVsZXRlIGlbYVtjXV07YS5zcGxpY2UoMCxwKX1yZXR1cm4gb31mdW5jdGlvbiBEcyhlLHQsbil7bGV0IHI9ZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyxpPW49PT0wPzA6TWF0aC5tYXgobi8yLC41KTtyZXR1cm4gTWF0aC5yb3VuZCgodC1pKSpyKS9yK2l9ZnVuY3Rpb24gT3MoZSx0KXshdCYmIWV8fCh0fHw9ZS5nZXRDb250ZXh0KGAyZGApLHQuc2F2ZSgpLHQucmVzZXRUcmFuc2Zvcm0oKSx0LmNsZWFyUmVjdCgwLDAsZS53aWR0aCxlLmhlaWdodCksdC5yZXN0b3JlKCkpfWZ1bmN0aW9uIGtzKGUsdCxuLHIpe0FzKGUsdCxuLHIsbnVsbCl9ZnVuY3Rpb24gQXMoZSx0LG4scixpKXtsZXQgYSxvLHMsYyxsLHUsZCxmLHA9dC5wb2ludFN0eWxlLG09dC5yb3RhdGlvbixoPXQucmFkaXVzLGc9KG18fDApKnlvO2lmKHAmJnR5cGVvZiBwPT1gb2JqZWN0YCYmKGE9cC50b1N0cmluZygpLGE9PT1gW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XWB8fGE9PT1gW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF1gKSl7ZS5zYXZlKCksZS50cmFuc2xhdGUobixyKSxlLnJvdGF0ZShnKSxlLmRyYXdJbWFnZShwLC1wLndpZHRoLzIsLXAuaGVpZ2h0LzIscC53aWR0aCxwLmhlaWdodCksZS5yZXN0b3JlKCk7cmV0dXJufWlmKCEoaXNOYU4oaCl8fGg8PTApKXtzd2l0Y2goZS5iZWdpblBhdGgoKSxwKXtkZWZhdWx0Omk/ZS5lbGxpcHNlKG4scixpLzIsaCwwLDAsX28pOmUuYXJjKG4scixoLDAsX28pLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWB0cmlhbmdsZWA6dT1pP2kvMjpoLGUubW92ZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGcrPVNvLGUubGluZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGcrPVNvLGUubGluZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWByZWN0Um91bmRlZGA6bD1oKi41MTYsYz1oLWwsbz1NYXRoLmNvcyhnK3hvKSpjLGQ9TWF0aC5jb3MoZyt4bykqKGk/aS8yLWw6Yykscz1NYXRoLnNpbihnK3hvKSpjLGY9TWF0aC5zaW4oZyt4bykqKGk/aS8yLWw6YyksZS5hcmMobi1kLHItcyxsLGctWCxnLWJvKSxlLmFyYyhuK2Ysci1vLGwsZy1ibyxnKSxlLmFyYyhuK2QscitzLGwsZyxnK2JvKSxlLmFyYyhuLWYscitvLGwsZytibyxnK1gpLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWByZWN0YDppZighbSl7Yz1NYXRoLlNRUlQxXzIqaCx1PWk/aS8yOmMsZS5yZWN0KG4tdSxyLWMsMip1LDIqYyk7YnJlYWt9Zys9eG87Y2FzZWByZWN0Um90YDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZixyLW8pLGUubGluZVRvKG4rZCxyK3MpLGUubGluZVRvKG4tZixyK28pLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWBjcm9zc1JvdGA6Zys9eG87Y2FzZWBjcm9zc2A6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2QscitzKSxlLm1vdmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuLWYscitvKTticmVhaztjYXNlYHN0YXJgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyksZys9eG8sZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2QscitzKSxlLm1vdmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuLWYscitvKTticmVhaztjYXNlYGxpbmVgOm89aT9pLzI6TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZS5tb3ZlVG8obi1vLHItcyksZS5saW5lVG8obitvLHIrcyk7YnJlYWs7Y2FzZWBkYXNoYDplLm1vdmVUbyhuLHIpLGUubGluZVRvKG4rTWF0aC5jb3MoZykqKGk/aS8yOmgpLHIrTWF0aC5zaW4oZykqaCk7YnJlYWs7Y2FzZSExOmUuY2xvc2VQYXRoKCl9ZS5maWxsKCksdC5ib3JkZXJXaWR0aD4wJiZlLnN0cm9rZSgpfX1mdW5jdGlvbiBqcyhlLHQsbil7cmV0dXJuIG58fD0uNSwhdHx8ZSYmZS54PnQubGVmdC1uJiZlLng8dC5yaWdodCtuJiZlLnk+dC50b3AtbiYmZS55PHQuYm90dG9tK259ZnVuY3Rpb24gTXMoZSx0KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpLGUucmVjdCh0LmxlZnQsdC50b3AsdC5yaWdodC10LmxlZnQsdC5ib3R0b20tdC50b3ApLGUuY2xpcCgpfWZ1bmN0aW9uIE5zKGUpe2UucmVzdG9yZSgpfWZ1bmN0aW9uIFBzKGUsdCl7dC50cmFuc2xhdGlvbiYmZS50cmFuc2xhdGUodC50cmFuc2xhdGlvblswXSx0LnRyYW5zbGF0aW9uWzFdKSxVKHQucm90YXRpb24pfHxlLnJvdGF0ZSh0LnJvdGF0aW9uKSx0LmNvbG9yJiYoZS5maWxsU3R5bGU9dC5jb2xvciksdC50ZXh0QWxpZ24mJihlLnRleHRBbGlnbj10LnRleHRBbGlnbiksdC50ZXh0QmFzZWxpbmUmJihlLnRleHRCYXNlbGluZT10LnRleHRCYXNlbGluZSl9ZnVuY3Rpb24gRnMoZSx0LG4scixpKXtpZihpLnN0cmlrZXRocm91Z2h8fGkudW5kZXJsaW5lKXtsZXQgYT1lLm1lYXN1cmVUZXh0KHIpLG89dC1hLmFjdHVhbEJvdW5kaW5nQm94TGVmdCxzPXQrYS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0LGM9bi1hLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50LGw9bithLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCx1PWkuc3RyaWtldGhyb3VnaD8oYytsKS8yOmw7ZS5zdHJva2VTdHlsZT1lLmZpbGxTdHlsZSxlLmJlZ2luUGF0aCgpLGUubGluZVdpZHRoPWkuZGVjb3JhdGlvbldpZHRofHwyLGUubW92ZVRvKG8sdSksZS5saW5lVG8ocyx1KSxlLnN0cm9rZSgpfX1mdW5jdGlvbiBJcyhlLHQpe2xldCBuPWUuZmlsbFN0eWxlO2UuZmlsbFN0eWxlPXQuY29sb3IsZS5maWxsUmVjdCh0LmxlZnQsdC50b3AsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9bn1mdW5jdGlvbiBMcyhlLHQsbixyLGksYT17fSl7bGV0IG89Vyh0KT90Olt0XSxzPWEuc3Ryb2tlV2lkdGg+MCYmYS5zdHJva2VDb2xvciE9PWBgLGMsbDtmb3IoZS5zYXZlKCksZS5mb250PWkuc3RyaW5nLFBzKGUsYSksYz0wO2M8by5sZW5ndGg7KytjKWw9b1tjXSxhLmJhY2tkcm9wJiZJcyhlLGEuYmFja2Ryb3ApLHMmJihhLnN0cm9rZUNvbG9yJiYoZS5zdHJva2VTdHlsZT1hLnN0cm9rZUNvbG9yKSxVKGEuc3Ryb2tlV2lkdGgpfHwoZS5saW5lV2lkdGg9YS5zdHJva2VXaWR0aCksZS5zdHJva2VUZXh0KGwsbixyLGEubWF4V2lkdGgpKSxlLmZpbGxUZXh0KGwsbixyLGEubWF4V2lkdGgpLEZzKGUsbixyLGwsYSkscis9TnVtYmVyKGkubGluZUhlaWdodCk7ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gUnMoZSx0KXtsZXR7eDpuLHk6cix3OmksaDphLHJhZGl1czpvfT10O2UuYXJjKG4rby50b3BMZWZ0LHIrby50b3BMZWZ0LG8udG9wTGVmdCwxLjUqWCxYLCEwKSxlLmxpbmVUbyhuLHIrYS1vLmJvdHRvbUxlZnQpLGUuYXJjKG4rby5ib3R0b21MZWZ0LHIrYS1vLmJvdHRvbUxlZnQsby5ib3R0b21MZWZ0LFgsYm8sITApLGUubGluZVRvKG4raS1vLmJvdHRvbVJpZ2h0LHIrYSksZS5hcmMobitpLW8uYm90dG9tUmlnaHQscithLW8uYm90dG9tUmlnaHQsby5ib3R0b21SaWdodCxibywwLCEwKSxlLmxpbmVUbyhuK2kscitvLnRvcFJpZ2h0KSxlLmFyYyhuK2ktby50b3BSaWdodCxyK28udG9wUmlnaHQsby50b3BSaWdodCwwLC1ibywhMCksZS5saW5lVG8obitvLnRvcExlZnQscil9dmFyIHpzPS9eKG5vcm1hbHwoXGQrKD86XC5cZCspPykocHh8ZW18JSk/KSQvLEJzPS9eKG5vcm1hbHxpdGFsaWN8aW5pdGlhbHxpbmhlcml0fHVuc2V0fChvYmxpcXVlKCAtP1swLTldP1swLTldZGVnKT8pKSQvO2Z1bmN0aW9uIFZzKGUsdCl7bGV0IG49KGBgK2UpLm1hdGNoKHpzKTtpZighbnx8blsxXT09PWBub3JtYWxgKXJldHVybiB0KjEuMjtzd2l0Y2goZT0rblsyXSxuWzNdKXtjYXNlYHB4YDpyZXR1cm4gZTtjYXNlYCVgOmUvPTEwMH1yZXR1cm4gdCplfXZhciBIcz1lPT4rZXx8MDtmdW5jdGlvbiBVcyhlLHQpe2xldCBuPXt9LHI9Ryh0KSxpPXI/T2JqZWN0LmtleXModCk6dCxhPUcoZSk/cj9uPT5xKGVbbl0sZVt0W25dXSk6dD0+ZVt0XTooKT0+ZTtmb3IobGV0IGUgb2YgaSluW2VdPUhzKGEoZSkpO3JldHVybiBufWZ1bmN0aW9uIFdzKGUpe3JldHVybiBVcyhlLHt0b3A6YHlgLHJpZ2h0OmB4YCxib3R0b206YHlgLGxlZnQ6YHhgfSl9ZnVuY3Rpb24gR3MoZSl7cmV0dXJuIFVzKGUsW2B0b3BMZWZ0YCxgdG9wUmlnaHRgLGBib3R0b21MZWZ0YCxgYm90dG9tUmlnaHRgXSl9ZnVuY3Rpb24gUShlKXtsZXQgdD1XcyhlKTtyZXR1cm4gdC53aWR0aD10LmxlZnQrdC5yaWdodCx0LmhlaWdodD10LnRvcCt0LmJvdHRvbSx0fWZ1bmN0aW9uICQoZSx0KXtlfHw9e30sdHx8PVouZm9udDtsZXQgbj1xKGUuc2l6ZSx0LnNpemUpO3R5cGVvZiBuPT1gc3RyaW5nYCYmKG49cGFyc2VJbnQobiwxMCkpO2xldCByPXEoZS5zdHlsZSx0LnN0eWxlKTtyJiYhKGBgK3IpLm1hdGNoKEJzKSYmKGNvbnNvbGUud2FybihgSW52YWxpZCBmb250IHN0eWxlIHNwZWNpZmllZDogImArcitgImApLHI9dm9pZCAwKTtsZXQgaT17ZmFtaWx5OnEoZS5mYW1pbHksdC5mYW1pbHkpLGxpbmVIZWlnaHQ6VnMocShlLmxpbmVIZWlnaHQsdC5saW5lSGVpZ2h0KSxuKSxzaXplOm4sc3R5bGU6cix3ZWlnaHQ6cShlLndlaWdodCx0LndlaWdodCksc3RyaW5nOmBgfTtyZXR1cm4gaS5zdHJpbmc9d3MoaSksaX1mdW5jdGlvbiBLcyhlLHQsbixyKXtsZXQgaT0hMCxhLG8scztmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSlpZihzPWVbYV0scyE9PXZvaWQgMCYmKHQhPT12b2lkIDAmJnR5cGVvZiBzPT1gZnVuY3Rpb25gJiYocz1zKHQpLGk9ITEpLG4hPT12b2lkIDAmJlcocykmJihzPXNbbiVzLmxlbmd0aF0saT0hMSkscyE9PXZvaWQgMCkpcmV0dXJuIHImJiFpJiYoci5jYWNoZWFibGU9ITEpLHN9ZnVuY3Rpb24gcXMoZSx0LG4pe2xldHttaW46cixtYXg6aX09ZSxhPSRhKHQsKGktcikvMiksbz0oZSx0KT0+biYmZT09PTA/MDplK3Q7cmV0dXJue21pbjpvKHIsLU1hdGguYWJzKGEpKSxtYXg6byhpLGEpfX1mdW5jdGlvbiBKcyhlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZSksdCl9ZnVuY3Rpb24gWXMoZSx0PVtgYF0sbixyLGk9KCk9PmVbMF0pe2xldCBhPW58fGU7cmV0dXJuIHI9PT12b2lkIDAmJihyPWRjKGBfZmFsbGJhY2tgLGUpKSxuZXcgUHJveHkoe1tTeW1ib2wudG9TdHJpbmdUYWddOmBPYmplY3RgLF9jYWNoZWFibGU6ITAsX3Njb3BlczplLF9yb290U2NvcGVzOmEsX2ZhbGxiYWNrOnIsX2dldFRhcmdldDppLG92ZXJyaWRlOm49PllzKFtuLC4uLmVdLHQsYSxyKX0se2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSB0Ll9rZXlzLGRlbGV0ZSBlWzBdW25dLCEwfSxnZXQobixyKXtyZXR1cm4gZWMobixyLCgpPT51YyhyLHQsZSxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpe3JldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLl9zY29wZXNbMF0sdCl9LGdldFByb3RvdHlwZU9mKCl7cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZVswXSl9LGhhcyhlLHQpe3JldHVybiBmYyhlKS5pbmNsdWRlcyh0KX0sb3duS2V5cyhlKXtyZXR1cm4gZmMoZSl9LHNldChlLHQsbil7bGV0IHI9ZS5fc3RvcmFnZXx8PWkoKTtyZXR1cm4gZVt0XT1yW3RdPW4sZGVsZXRlIGUuX2tleXMsITB9fSl9ZnVuY3Rpb24gWHMoZSx0LG4scil7bGV0IGk9e19jYWNoZWFibGU6ITEsX3Byb3h5OmUsX2NvbnRleHQ6dCxfc3ViUHJveHk6bixfc3RhY2s6bmV3IFNldCxfZGVzY3JpcHRvcnM6WnMoZSxyKSxzZXRDb250ZXh0OnQ9PlhzKGUsdCxuLHIpLG92ZXJyaWRlOmk9PlhzKGUub3ZlcnJpZGUoaSksdCxuLHIpfTtyZXR1cm4gbmV3IFByb3h5KGkse2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSBlW25dLCEwfSxnZXQoZSx0LG4pe3JldHVybiBlYyhlLHQsKCk9PnRjKGUsdCxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe3JldHVybiB0Ll9kZXNjcmlwdG9ycy5hbGxLZXlzP1JlZmxlY3QuaGFzKGUsbik/e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTp2b2lkIDA6UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKX0sZ2V0UHJvdG90eXBlT2YoKXtyZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKX0saGFzKHQsbil7cmV0dXJuIFJlZmxlY3QuaGFzKGUsbil9LG93bktleXMoKXtyZXR1cm4gUmVmbGVjdC5vd25LZXlzKGUpfSxzZXQodCxuLHIpe3JldHVybiBlW25dPXIsZGVsZXRlIHRbbl0sITB9fSl9ZnVuY3Rpb24gWnMoZSx0PXtzY3JpcHRhYmxlOiEwLGluZGV4YWJsZTohMH0pe2xldHtfc2NyaXB0YWJsZTpuPXQuc2NyaXB0YWJsZSxfaW5kZXhhYmxlOnI9dC5pbmRleGFibGUsX2FsbEtleXM6aT10LmFsbEtleXN9PWU7cmV0dXJue2FsbEtleXM6aSxzY3JpcHRhYmxlOm4saW5kZXhhYmxlOnIsaXNTY3JpcHRhYmxlOm1vKG4pP246KCk9Pm4saXNJbmRleGFibGU6bW8ocik/cjooKT0+cn19dmFyIFFzPShlLHQpPT5lP2UrZm8odCk6dCwkcz0oZSx0KT0+Ryh0KSYmZSE9PWBhZGFwdGVyc2AmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsfHx0LmNvbnN0cnVjdG9yPT09T2JqZWN0KTtmdW5jdGlvbiBlYyhlLHQsbil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fHQ9PT1gY29uc3RydWN0b3JgKXJldHVybiBlW3RdO2xldCByPW4oKTtyZXR1cm4gZVt0XT1yLHJ9ZnVuY3Rpb24gdGMoZSx0LG4pe2xldHtfcHJveHk6cixfY29udGV4dDppLF9zdWJQcm94eTphLF9kZXNjcmlwdG9yczpvfT1lLHM9clt0XTtyZXR1cm4gbW8ocykmJm8uaXNTY3JpcHRhYmxlKHQpJiYocz1uYyh0LHMsZSxuKSksVyhzKSYmcy5sZW5ndGgmJihzPXJjKHQscyxlLG8uaXNJbmRleGFibGUpKSwkcyh0LHMpJiYocz1YcyhzLGksYSYmYVt0XSxvKSksc31mdW5jdGlvbiBuYyhlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfc3RhY2s6c309bjtpZihzLmhhcyhlKSl0aHJvdyBFcnJvcihgUmVjdXJzaW9uIGRldGVjdGVkOiBgK0FycmF5LmZyb20ocykuam9pbihgLT5gKStgLT5gK2UpO3MuYWRkKGUpO2xldCBjPXQoYSxvfHxyKTtyZXR1cm4gcy5kZWxldGUoZSksJHMoZSxjKSYmKGM9c2MoaS5fc2NvcGVzLGksZSxjKSksY31mdW5jdGlvbiByYyhlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfZGVzY3JpcHRvcnM6c309bjtpZihhLmluZGV4IT09dm9pZCAwJiZyKGUpKXJldHVybiB0W2EuaW5kZXgldC5sZW5ndGhdO2lmKEcodFswXSkpe2xldCBuPXQscj1pLl9zY29wZXMuZmlsdGVyKGU9PmUhPT1uKTt0PVtdO2ZvcihsZXQgYyBvZiBuKXtsZXQgbj1zYyhyLGksZSxjKTt0LnB1c2goWHMobixhLG8mJm9bZV0scykpfX1yZXR1cm4gdH1mdW5jdGlvbiBpYyhlLHQsbil7cmV0dXJuIG1vKGUpP2UodCxuKTplfXZhciBhYz0oZSx0KT0+ZT09PSEwP3Q6dHlwZW9mIGU9PWBzdHJpbmdgP3VvKHQsZSk6dm9pZCAwO2Z1bmN0aW9uIG9jKGUsdCxuLHIsaSl7Zm9yKGxldCBhIG9mIHQpe2xldCB0PWFjKG4sYSk7aWYodCl7ZS5hZGQodCk7bGV0IGE9aWModC5fZmFsbGJhY2ssbixpKTtpZihhIT09dm9pZCAwJiZhIT09biYmYSE9PXIpcmV0dXJuIGF9ZWxzZSBpZih0PT09ITEmJnIhPT12b2lkIDAmJm4hPT1yKXJldHVybiBudWxsfXJldHVybiExfWZ1bmN0aW9uIHNjKGUsdCxuLHIpe2xldCBpPXQuX3Jvb3RTY29wZXMsYT1pYyh0Ll9mYWxsYmFjayxuLHIpLG89Wy4uLmUsLi4uaV0scz1uZXcgU2V0O3MuYWRkKHIpO2xldCBjPWNjKHMsbyxuLGF8fG4scik7cmV0dXJuIGM9PT1udWxsfHxhIT09dm9pZCAwJiZhIT09biYmKGM9Y2MocyxvLGEsYyxyKSxjPT09bnVsbCk/ITE6WXMoQXJyYXkuZnJvbShzKSxbYGBdLGksYSwoKT0+bGModCxuLHIpKX1mdW5jdGlvbiBjYyhlLHQsbixyLGkpe2Zvcig7bjspbj1vYyhlLHQsbixyLGkpO3JldHVybiBufWZ1bmN0aW9uIGxjKGUsdCxuKXtsZXQgcj1lLl9nZXRUYXJnZXQoKTt0IGluIHJ8fChyW3RdPXt9KTtsZXQgaT1yW3RdO3JldHVybiBXKGkpJiZHKG4pP246aXx8e319ZnVuY3Rpb24gdWMoZSx0LG4scil7bGV0IGk7Zm9yKGxldCBhIG9mIHQpaWYoaT1kYyhRcyhhLGUpLG4pLGkhPT12b2lkIDApcmV0dXJuICRzKGUsaSk/c2MobixyLGUsaSk6aX1mdW5jdGlvbiBkYyhlLHQpe2ZvcihsZXQgbiBvZiB0KXtpZighbiljb250aW51ZTtsZXQgdD1uW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHR9fWZ1bmN0aW9uIGZjKGUpe2xldCB0PWUuX2tleXM7cmV0dXJuIHR8fD1lLl9rZXlzPXBjKGUuX3Njb3BlcyksdH1mdW5jdGlvbiBwYyhlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKS5maWx0ZXIoZT0+IWUuc3RhcnRzV2l0aChgX2ApKSl0LmFkZChlKTtyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBtYygpe3JldHVybiB0eXBlb2Ygd2luZG93PGB1YCYmdHlwZW9mIGRvY3VtZW50PGB1YH1mdW5jdGlvbiBoYyhlKXtsZXQgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQudG9TdHJpbmcoKT09PWBbb2JqZWN0IFNoYWRvd1Jvb3RdYCYmKHQ9dC5ob3N0KSx0fWZ1bmN0aW9uIGdjKGUsdCxuKXtsZXQgcjtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgPyhyPXBhcnNlSW50KGUsMTApLGUuaW5kZXhPZihgJWApIT09LTEmJihyPXIvMTAwKnQucGFyZW50Tm9kZVtuXSkpOnI9ZSxyfXZhciBfYz1lPT5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpO2Z1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIF9jKGUpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIHljPVtgdG9wYCxgcmlnaHRgLGBib3R0b21gLGBsZWZ0YF07ZnVuY3Rpb24gYmMoZSx0LG4pe2xldCByPXt9O249bj9gLWArbjpgYDtmb3IobGV0IGk9MDtpPDQ7aSsrKXtsZXQgYT15Y1tpXTtyW2FdPXBhcnNlRmxvYXQoZVt0K2AtYCthK25dKXx8MH1yZXR1cm4gci53aWR0aD1yLmxlZnQrci5yaWdodCxyLmhlaWdodD1yLnRvcCtyLmJvdHRvbSxyfXZhciB4Yz0oZSx0LG4pPT4oZT4wfHx0PjApJiYoIW58fCFuLnNoYWRvd1Jvb3QpO2Z1bmN0aW9uIFNjKGUsdCl7bGV0IG49ZS50b3VjaGVzLHI9biYmbi5sZW5ndGg/blswXTplLHtvZmZzZXRYOmksb2Zmc2V0WTphfT1yLG89ITEscyxjO2lmKHhjKGksYSxlLnRhcmdldCkpcz1pLGM9YTtlbHNle2xldCBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cz1yLmNsaWVudFgtZS5sZWZ0LGM9ci5jbGllbnRZLWUudG9wLG89ITB9cmV0dXJue3g6cyx5OmMsYm94Om99fWZ1bmN0aW9uIENjKGUsdCl7aWYoYG5hdGl2ZWBpbiBlKXJldHVybiBlO2xldHtjYW52YXM6bixjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbzpyfT10LGk9X2MobiksYT1pLmJveFNpemluZz09PWBib3JkZXItYm94YCxvPWJjKGksYHBhZGRpbmdgKSxzPWJjKGksYGJvcmRlcmAsYHdpZHRoYCkse3g6Yyx5OmwsYm94OnV9PVNjKGUsbiksZD1vLmxlZnQrKHUmJnMubGVmdCksZj1vLnRvcCsodSYmcy50b3ApLHt3aWR0aDpwLGhlaWdodDptfT10O3JldHVybiBhJiYocC09by53aWR0aCtzLndpZHRoLG0tPW8uaGVpZ2h0K3MuaGVpZ2h0KSx7eDpNYXRoLnJvdW5kKChjLWQpL3Aqbi53aWR0aC9yKSx5Ok1hdGgucm91bmQoKGwtZikvbSpuLmhlaWdodC9yKX19ZnVuY3Rpb24gd2MoZSx0LG4pe2xldCByLGk7aWYodD09PXZvaWQgMHx8bj09PXZvaWQgMCl7bGV0IGE9ZSYmaGMoZSk7aWYoIWEpdD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQ7ZWxzZXtsZXQgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89X2MoYSkscz1iYyhvLGBib3JkZXJgLGB3aWR0aGApLGM9YmMobyxgcGFkZGluZ2ApO3Q9ZS53aWR0aC1jLndpZHRoLXMud2lkdGgsbj1lLmhlaWdodC1jLmhlaWdodC1zLmhlaWdodCxyPWdjKG8ubWF4V2lkdGgsYSxgY2xpZW50V2lkdGhgKSxpPWdjKG8ubWF4SGVpZ2h0LGEsYGNsaWVudEhlaWdodGApfX1yZXR1cm57d2lkdGg6dCxoZWlnaHQ6bixtYXhXaWR0aDpyfHx2byxtYXhIZWlnaHQ6aXx8dm99fXZhciBUYz1lPT5NYXRoLnJvdW5kKGUqMTApLzEwO2Z1bmN0aW9uIEVjKGUsdCxuLHIpe2xldCBpPV9jKGUpLGE9YmMoaSxgbWFyZ2luYCksbz1nYyhpLm1heFdpZHRoLGUsYGNsaWVudFdpZHRoYCl8fHZvLHM9Z2MoaS5tYXhIZWlnaHQsZSxgY2xpZW50SGVpZ2h0YCl8fHZvLGM9d2MoZSx0LG4pLHt3aWR0aDpsLGhlaWdodDp1fT1jO2lmKGkuYm94U2l6aW5nPT09YGNvbnRlbnQtYm94YCl7bGV0IGU9YmMoaSxgYm9yZGVyYCxgd2lkdGhgKSx0PWJjKGksYHBhZGRpbmdgKTtsLT10LndpZHRoK2Uud2lkdGgsdS09dC5oZWlnaHQrZS5oZWlnaHR9cmV0dXJuIGw9TWF0aC5tYXgoMCxsLWEud2lkdGgpLHU9TWF0aC5tYXgoMCxyP2wvcjp1LWEuaGVpZ2h0KSxsPVRjKE1hdGgubWluKGwsbyxjLm1heFdpZHRoKSksdT1UYyhNYXRoLm1pbih1LHMsYy5tYXhIZWlnaHQpKSxsJiYhdSYmKHU9VGMobC8yKSksKHQhPT12b2lkIDB8fG4hPT12b2lkIDApJiZyJiZjLmhlaWdodCYmdT5jLmhlaWdodCYmKHU9Yy5oZWlnaHQsbD1UYyhNYXRoLmZsb29yKHUqcikpKSx7d2lkdGg6bCxoZWlnaHQ6dX19ZnVuY3Rpb24gRGMoZSx0LG4pe2xldCByPXR8fDEsaT1UYyhlLmhlaWdodCpyKSxhPVRjKGUud2lkdGgqcik7ZS5oZWlnaHQ9VGMoZS5oZWlnaHQpLGUud2lkdGg9VGMoZS53aWR0aCk7bGV0IG89ZS5jYW52YXM7cmV0dXJuIG8uc3R5bGUmJihufHwhby5zdHlsZS5oZWlnaHQmJiFvLnN0eWxlLndpZHRoKSYmKG8uc3R5bGUuaGVpZ2h0PWAke2UuaGVpZ2h0fXB4YCxvLnN0eWxlLndpZHRoPWAke2Uud2lkdGh9cHhgKSxlLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIT09cnx8by5oZWlnaHQhPT1pfHxvLndpZHRoIT09YT8oZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbz1yLG8uaGVpZ2h0PWksby53aWR0aD1hLGUuY3R4LnNldFRyYW5zZm9ybShyLDAsMCxyLDAsMCksITApOiExfXZhciBPYz1mdW5jdGlvbigpe2xldCBlPSExO3RyeXtsZXQgdD17Z2V0IHBhc3NpdmUoKXtyZXR1cm4gZT0hMCwhMX19O21jKCkmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgdGVzdGAsbnVsbCx0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdGVzdGAsbnVsbCx0KSl9Y2F0Y2h7fXJldHVybiBlfSgpO2Z1bmN0aW9uIGtjKGUsdCl7bGV0IG49dmMoZSx0KSxyPW4mJm4ubWF0Y2goL14oXGQrKShcLlxkKyk/cHgkLyk7cmV0dXJuIHI/K3JbMV06dm9pZCAwfXZhciBBYz1mdW5jdGlvbihlLHQpe3JldHVybnt4KG4pe3JldHVybiBlK2UrdC1ufSxzZXRXaWR0aChlKXt0PWV9LHRleHRBbGlnbihlKXtyZXR1cm4gZT09PWBjZW50ZXJgP2U6ZT09PWByaWdodGA/YGxlZnRgOmByaWdodGB9LHhQbHVzKGUsdCl7cmV0dXJuIGUtdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlLXR9fX0samM9ZnVuY3Rpb24oKXtyZXR1cm57eChlKXtyZXR1cm4gZX0sc2V0V2lkdGgoZSl7fSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGV9LHhQbHVzKGUsdCl7cmV0dXJuIGUrdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlfX19O2Z1bmN0aW9uIE1jKGUsdCxuKXtyZXR1cm4gZT9BYyh0LG4pOmpjKCl9ZnVuY3Rpb24gTmMoZSx0KXtsZXQgbixyOyh0PT09YGx0cmB8fHQ9PT1gcnRsYCkmJihuPWUuY2FudmFzLnN0eWxlLHI9W24uZ2V0UHJvcGVydHlWYWx1ZShgZGlyZWN0aW9uYCksbi5nZXRQcm9wZXJ0eVByaW9yaXR5KGBkaXJlY3Rpb25gKV0sbi5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0LGBpbXBvcnRhbnRgKSxlLnByZXZUZXh0RGlyZWN0aW9uPXIpfWZ1bmN0aW9uIFBjKGUsdCl7dCE9PXZvaWQgMCYmKGRlbGV0ZSBlLnByZXZUZXh0RGlyZWN0aW9uLGUuY2FudmFzLnN0eWxlLnNldFByb3BlcnR5KGBkaXJlY3Rpb25gLHRbMF0sdFsxXSkpfWZ1bmN0aW9uIEZjKGUsdCxuKXtyZXR1cm4gZS5vcHRpb25zLmNsaXA/ZVtuXTp0W25dfWZ1bmN0aW9uIEljKGUsdCl7bGV0e3hTY2FsZTpuLHlTY2FsZTpyfT1lO3JldHVybiBuJiZyP3tsZWZ0OkZjKG4sdCxgbGVmdGApLHJpZ2h0OkZjKG4sdCxgcmlnaHRgKSx0b3A6RmMocix0LGB0b3BgKSxib3R0b206RmMocix0LGBib3R0b21gKX06dH1mdW5jdGlvbiBMYyhlLHQpe2xldCBuPXQuX2NsaXA7aWYobi5kaXNhYmxlZClyZXR1cm4hMTtsZXQgcj1JYyh0LGUuY2hhcnRBcmVhKTtyZXR1cm57bGVmdDpuLmxlZnQ9PT0hMT8wOnIubGVmdC0obi5sZWZ0PT09ITA/MDpuLmxlZnQpLHJpZ2h0Om4ucmlnaHQ9PT0hMT9lLndpZHRoOnIucmlnaHQrKG4ucmlnaHQ9PT0hMD8wOm4ucmlnaHQpLHRvcDpuLnRvcD09PSExPzA6ci50b3AtKG4udG9wPT09ITA/MDpuLnRvcCksYm90dG9tOm4uYm90dG9tPT09ITE/ZS5oZWlnaHQ6ci5ib3R0b20rKG4uYm90dG9tPT09ITA/MDpuLmJvdHRvbSl9fXZhciBSYz1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fY2hhcnRzPW5ldyBNYXAsdGhpcy5fcnVubmluZz0hMSx0aGlzLl9sYXN0RGF0ZT12b2lkIDB9X25vdGlmeShlLHQsbixyKXtsZXQgaT10Lmxpc3RlbmVyc1tyXSxhPXQuZHVyYXRpb247aS5mb3JFYWNoKHI9PnIoe2NoYXJ0OmUsaW5pdGlhbDp0LmluaXRpYWwsbnVtU3RlcHM6YSxjdXJyZW50U3RlcDpNYXRoLm1pbihuLXQuc3RhcnQsYSl9KSl9X3JlZnJlc2goKXt0aGlzLl9yZXF1ZXN0fHw9KHRoaXMuX3J1bm5pbmc9ITAsWG8uY2FsbCh3aW5kb3csKCk9Pnt0aGlzLl91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fcnVubmluZyYmdGhpcy5fcmVmcmVzaCgpfSkpfV91cGRhdGUoZT1EYXRlLm5vdygpKXtsZXQgdD0wO3RoaXMuX2NoYXJ0cy5mb3JFYWNoKChuLHIpPT57aWYoIW4ucnVubmluZ3x8IW4uaXRlbXMubGVuZ3RoKXJldHVybjtsZXQgaT1uLml0ZW1zLGE9aS5sZW5ndGgtMSxvPSExLHM7Zm9yKDthPj0wOy0tYSlzPWlbYV0scy5fYWN0aXZlPyhzLl90b3RhbD5uLmR1cmF0aW9uJiYobi5kdXJhdGlvbj1zLl90b3RhbCkscy50aWNrKGUpLG89ITApOihpW2FdPWlbaS5sZW5ndGgtMV0saS5wb3AoKSk7byYmKHIuZHJhdygpLHRoaXMuX25vdGlmeShyLG4sZSxgcHJvZ3Jlc3NgKSksaS5sZW5ndGh8fChuLnJ1bm5pbmc9ITEsdGhpcy5fbm90aWZ5KHIsbixlLGBjb21wbGV0ZWApLG4uaW5pdGlhbD0hMSksdCs9aS5sZW5ndGh9KSx0aGlzLl9sYXN0RGF0ZT1lLHQ9PT0wJiYodGhpcy5fcnVubmluZz0hMSl9X2dldEFuaW1zKGUpe2xldCB0PXRoaXMuX2NoYXJ0cyxuPXQuZ2V0KGUpO3JldHVybiBufHwobj17cnVubmluZzohMSxpbml0aWFsOiEwLGl0ZW1zOltdLGxpc3RlbmVyczp7Y29tcGxldGU6W10scHJvZ3Jlc3M6W119fSx0LnNldChlLG4pKSxufWxpc3RlbihlLHQsbil7dGhpcy5fZ2V0QW5pbXMoZSkubGlzdGVuZXJzW3RdLnB1c2gobil9YWRkKGUsdCl7IXR8fCF0Lmxlbmd0aHx8dGhpcy5fZ2V0QW5pbXMoZSkuaXRlbXMucHVzaCguLi50KX1oYXMoZSl7cmV0dXJuIHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLmxlbmd0aD4wfXN0YXJ0KGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7dCYmKHQucnVubmluZz0hMCx0LnN0YXJ0PURhdGUubm93KCksdC5kdXJhdGlvbj10Lml0ZW1zLnJlZHVjZSgoZSx0KT0+TWF0aC5tYXgoZSx0Ll9kdXJhdGlvbiksMCksdGhpcy5fcmVmcmVzaCgpKX1ydW5uaW5nKGUpe2lmKCF0aGlzLl9ydW5uaW5nKXJldHVybiExO2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7cmV0dXJuISghdHx8IXQucnVubmluZ3x8IXQuaXRlbXMubGVuZ3RoKX1zdG9wKGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7aWYoIXR8fCF0Lml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IG49dC5pdGVtcyxyPW4ubGVuZ3RoLTE7Zm9yKDtyPj0wOy0tciluW3JdLmNhbmNlbCgpO3QuaXRlbXM9W10sdGhpcy5fbm90aWZ5KGUsdCxEYXRlLm5vdygpLGBjb21wbGV0ZWApfXJlbW92ZShlKXtyZXR1cm4gdGhpcy5fY2hhcnRzLmRlbGV0ZShlKX19LHpjPWB0cmFuc3BhcmVudGAsQmM9e2Jvb2xlYW4oZSx0LG4pe3JldHVybiBuPi41P3Q6ZX0sY29sb3IoZSx0LG4pe2xldCByPXNzKGV8fHpjKSxpPXIudmFsaWQmJnNzKHR8fHpjKTtyZXR1cm4gaSYmaS52YWxpZD9pLm1peChyLG4pLmhleFN0cmluZygpOnR9LG51bWJlcihlLHQsbil7cmV0dXJuIGUrKHQtZSkqbn19LFZjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe2xldCBpPXRbbl07cj1LcyhbZS50byxyLGksZS5mcm9tXSk7bGV0IGE9S3MoW2UuZnJvbSxpLHJdKTt0aGlzLl9hY3RpdmU9ITAsdGhpcy5fZm49ZS5mbnx8QmNbZS50eXBlfHx0eXBlb2YgYV0sdGhpcy5fZWFzaW5nPWFzW2UuZWFzaW5nXXx8YXMubGluZWFyLHRoaXMuX3N0YXJ0PU1hdGguZmxvb3IoRGF0ZS5ub3coKSsoZS5kZWxheXx8MCkpLHRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsPU1hdGguZmxvb3IoZS5kdXJhdGlvbiksdGhpcy5fbG9vcD0hIWUubG9vcCx0aGlzLl90YXJnZXQ9dCx0aGlzLl9wcm9wPW4sdGhpcy5fZnJvbT1hLHRoaXMuX3RvPXIsdGhpcy5fcHJvbWlzZXM9dm9pZCAwfWFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9dXBkYXRlKGUsdCxuKXtpZih0aGlzLl9hY3RpdmUpe3RoaXMuX25vdGlmeSghMSk7bGV0IHI9dGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdLGk9bi10aGlzLl9zdGFydCxhPXRoaXMuX2R1cmF0aW9uLWk7dGhpcy5fc3RhcnQ9bix0aGlzLl9kdXJhdGlvbj1NYXRoLmZsb29yKE1hdGgubWF4KGEsZS5kdXJhdGlvbikpLHRoaXMuX3RvdGFsKz1pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdG89S3MoW2UudG8sdCxyLGUuZnJvbV0pLHRoaXMuX2Zyb209S3MoW2UuZnJvbSxyLHRdKX19Y2FuY2VsKCl7dGhpcy5fYWN0aXZlJiYodGhpcy50aWNrKERhdGUubm93KCkpLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9ub3RpZnkoITEpKX10aWNrKGUpe2xldCB0PWUtdGhpcy5fc3RhcnQsbj10aGlzLl9kdXJhdGlvbixyPXRoaXMuX3Byb3AsaT10aGlzLl9mcm9tLGE9dGhpcy5fbG9vcCxvPXRoaXMuX3RvLHM7aWYodGhpcy5fYWN0aXZlPWkhPT1vJiYoYXx8dDxuKSwhdGhpcy5fYWN0aXZlKXt0aGlzLl90YXJnZXRbcl09byx0aGlzLl9ub3RpZnkoITApO3JldHVybn1pZih0PDApe3RoaXMuX3RhcmdldFtyXT1pO3JldHVybn1zPXQvbiUyLHM9YSYmcz4xPzItczpzLHM9dGhpcy5fZWFzaW5nKE1hdGgubWluKDEsTWF0aC5tYXgoMCxzKSkpLHRoaXMuX3RhcmdldFtyXT10aGlzLl9mbihpLG8scyl9d2FpdCgpe2xldCBlPXRoaXMuX3Byb21pc2VzfHw9W107cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57ZS5wdXNoKHtyZXM6dCxyZWo6bn0pfSl9X25vdGlmeShlKXtsZXQgdD1lP2ByZXNgOmByZWpgLG49dGhpcy5fcHJvbWlzZXN8fFtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV1bdF0oKX19LEhjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY2hhcnQ9ZSx0aGlzLl9wcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5jb25maWd1cmUodCl9Y29uZmlndXJlKGUpe2lmKCFHKGUpKXJldHVybjtsZXQgdD1PYmplY3Qua2V5cyhaLmFuaW1hdGlvbiksbj10aGlzLl9wcm9wZXJ0aWVzO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2gocj0+e2xldCBpPWVbcl07aWYoIUcoaSkpcmV0dXJuO2xldCBhPXt9O2ZvcihsZXQgZSBvZiB0KWFbZV09aVtlXTsoVyhpLnByb3BlcnRpZXMpJiZpLnByb3BlcnRpZXN8fFtyXSkuZm9yRWFjaChlPT57KGU9PT1yfHwhbi5oYXMoZSkpJiZuLnNldChlLGEpfSl9KX1fYW5pbWF0ZU9wdGlvbnMoZSx0KXtsZXQgbj10Lm9wdGlvbnMscj1XYyhlLG4pO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMocixuKTtyZXR1cm4gbi4kc2hhcmVkJiZVYyhlLm9wdGlvbnMuJGFuaW1hdGlvbnMsbikudGhlbigoKT0+e2Uub3B0aW9ucz1ufSwoKT0+e30pLGl9X2NyZWF0ZUFuaW1hdGlvbnMoZSx0KXtsZXQgbj10aGlzLl9wcm9wZXJ0aWVzLHI9W10saT1lLiRhbmltYXRpb25zfHw9e30sYT1PYmplY3Qua2V5cyh0KSxvPURhdGUubm93KCkscztmb3Iocz1hLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgYz1hW3NdO2lmKGMuY2hhckF0KDApPT09YCRgKWNvbnRpbnVlO2lmKGM9PT1gb3B0aW9uc2Ape3IucHVzaCguLi50aGlzLl9hbmltYXRlT3B0aW9ucyhlLHQpKTtjb250aW51ZX1sZXQgbD10W2NdLHU9aVtjXSxkPW4uZ2V0KGMpO2lmKHUpe2lmKGQmJnUuYWN0aXZlKCkpe3UudXBkYXRlKGQsbCxvKTtjb250aW51ZX11LmNhbmNlbCgpfWlmKCFkfHwhZC5kdXJhdGlvbil7ZVtjXT1sO2NvbnRpbnVlfWlbY109dT1uZXcgVmMoZCxlLGMsbCksci5wdXNoKHUpfXJldHVybiByfXVwZGF0ZShlLHQpe2lmKHRoaXMuX3Byb3BlcnRpZXMuc2l6ZT09PTApe09iamVjdC5hc3NpZ24oZSx0KTtyZXR1cm59bGV0IG49dGhpcy5fY3JlYXRlQW5pbWF0aW9ucyhlLHQpO2lmKG4ubGVuZ3RoKXJldHVybiBSYy5hZGQodGhpcy5fY2hhcnQsbiksITB9fTtmdW5jdGlvbiBVYyhlLHQpe2xldCBuPVtdLHI9T2JqZWN0LmtleXModCk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kyspe2xldCBpPWVbclt0XV07aSYmaS5hY3RpdmUoKSYmbi5wdXNoKGkud2FpdCgpKX1yZXR1cm4gUHJvbWlzZS5hbGwobil9ZnVuY3Rpb24gV2MoZSx0KXtpZighdClyZXR1cm47bGV0IG49ZS5vcHRpb25zO2lmKCFuKXtlLm9wdGlvbnM9dDtyZXR1cm59cmV0dXJuIG4uJHNoYXJlZCYmKGUub3B0aW9ucz1uPU9iamVjdC5hc3NpZ24oe30sbix7JHNoYXJlZDohMSwkYW5pbWF0aW9uczp7fX0pKSxufWZ1bmN0aW9uIEdjKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zfHx7fSxyPW4ucmV2ZXJzZSxpPW4ubWluPT09dm9pZCAwP3Q6MCxhPW4ubWF4PT09dm9pZCAwP3Q6MDtyZXR1cm57c3RhcnQ6cj9hOmksZW5kOnI/aTphfX1mdW5jdGlvbiBLYyhlLHQsbil7aWYobj09PSExKXJldHVybiExO2xldCByPUdjKGUsbiksaT1HYyh0LG4pO3JldHVybnt0b3A6aS5lbmQscmlnaHQ6ci5lbmQsYm90dG9tOmkuc3RhcnQsbGVmdDpyLnN0YXJ0fX1mdW5jdGlvbiBxYyhlKXtsZXQgdCxuLHIsaTtyZXR1cm4gRyhlKT8odD1lLnRvcCxuPWUucmlnaHQscj1lLmJvdHRvbSxpPWUubGVmdCk6dD1uPXI9aT1lLHt0b3A6dCxyaWdodDpuLGJvdHRvbTpyLGxlZnQ6aSxkaXNhYmxlZDplPT09ITF9fWZ1bmN0aW9uIEpjKGUsdCl7bGV0IG49W10scj1lLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXModCksaSxhO2ZvcihpPTAsYT1yLmxlbmd0aDtpPGE7KytpKW4ucHVzaChyW2ldLmluZGV4KTtyZXR1cm4gbn1mdW5jdGlvbiBZYyhlLHQsbixyPXt9KXtsZXQgaT1lLmtleXMsYT1yLm1vZGU9PT1gc2luZ2xlYCxvLHMsYyxsO2lmKHQ9PT1udWxsKXJldHVybjtsZXQgdT0hMTtmb3Iobz0wLHM9aS5sZW5ndGg7bzxzOysrbyl7aWYoYz0raVtvXSxjPT09bil7aWYodT0hMCxyLmFsbCljb250aW51ZTticmVha31sPWUudmFsdWVzW2NdLEsobCkmJihhfHx0PT09MHx8d28odCk9PT13byhsKSkmJih0Kz1sKX1yZXR1cm4hdSYmIXIuYWxsPzA6dH1mdW5jdGlvbiBYYyhlLHQpe2xldHtpU2NhbGU6bix2U2NhbGU6cn09dCxpPW4uYXhpcz09PWB4YD9geGA6YHlgLGE9ci5heGlzPT09YHhgP2B4YDpgeWAsbz1PYmplY3Qua2V5cyhlKSxzPUFycmF5KG8ubGVuZ3RoKSxjLGwsdTtmb3IoYz0wLGw9by5sZW5ndGg7YzxsOysrYyl1PW9bY10sc1tjXT17W2ldOnUsW2FdOmVbdV19O3JldHVybiBzfWZ1bmN0aW9uIFpjKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zLnN0YWNrZWQ7cmV0dXJuIG58fG49PT12b2lkIDAmJnQuc3RhY2shPT12b2lkIDB9ZnVuY3Rpb24gUWMoZSx0LG4pe3JldHVybmAke2UuaWR9LiR7dC5pZH0uJHtuLnN0YWNrfHxuLnR5cGV9YH1mdW5jdGlvbiAkYyhlKXtsZXR7bWluOnQsbWF4Om4sbWluRGVmaW5lZDpyLG1heERlZmluZWQ6aX09ZS5nZXRVc2VyQm91bmRzKCk7cmV0dXJue21pbjpyP3Q6LTEvMCxtYXg6aT9uOjEvMH19ZnVuY3Rpb24gZWwoZSx0LG4pe2xldCByPWVbdF18fChlW3RdPXt9KTtyZXR1cm4gcltuXXx8KHJbbl09e30pfWZ1bmN0aW9uIHRsKGUsdCxuLHIpe2ZvcihsZXQgaSBvZiB0LmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHIpLnJldmVyc2UoKSl7bGV0IHQ9ZVtpLmluZGV4XTtpZihuJiZ0PjB8fCFuJiZ0PDApcmV0dXJuIGkuaW5kZXh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbmwoZSx0KXtsZXR7Y2hhcnQ6bixfY2FjaGVkTWV0YTpyfT1lLGk9bi5fc3RhY2tzfHw9e30se2lTY2FsZTphLHZTY2FsZTpvLGluZGV4OnN9PXIsYz1hLmF4aXMsbD1vLmF4aXMsdT1RYyhhLG8sciksZD10Lmxlbmd0aCxmO2ZvcihsZXQgZT0wO2U8ZDsrK2Upe2xldCBuPXRbZV0se1tjXTphLFtsXTpkfT1uLHA9bi5fc3RhY2tzfHw9e307Zj1wW2xdPWVsKGksdSxhKSxmW3NdPWQsZi5fdG9wPXRsKGYsbywhMCxyLnR5cGUpLGYuX2JvdHRvbT10bChmLG8sITEsci50eXBlKTtsZXQgbT1mLl92aXN1YWxWYWx1ZXN8fChmLl92aXN1YWxWYWx1ZXM9e30pO21bc109ZH19ZnVuY3Rpb24gcmwoZSx0KXtsZXQgbj1lLnNjYWxlcztyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9Pm5bZV0uYXhpcz09PXQpLnNoaWZ0KCl9ZnVuY3Rpb24gaWwoZSx0KXtyZXR1cm4gSnMoZSx7YWN0aXZlOiExLGRhdGFzZXQ6dm9pZCAwLGRhdGFzZXRJbmRleDp0LGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YXNldGB9KX1mdW5jdGlvbiBhbChlLHQsbil7cmV0dXJuIEpzKGUse2FjdGl2ZTohMSxkYXRhSW5kZXg6dCxwYXJzZWQ6dm9pZCAwLHJhdzp2b2lkIDAsZWxlbWVudDpuLGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YWB9KX1mdW5jdGlvbiBvbChlLHQpe2xldCBuPWUuY29udHJvbGxlci5pbmRleCxyPWUudlNjYWxlJiZlLnZTY2FsZS5heGlzO2lmKHIpe3R8fD1lLl9wYXJzZWQ7Zm9yKGxldCBlIG9mIHQpe2xldCB0PWUuX3N0YWNrcztpZighdHx8dFtyXT09PXZvaWQgMHx8dFtyXVtuXT09PXZvaWQgMClyZXR1cm47ZGVsZXRlIHRbcl1bbl0sdFtyXS5fdmlzdWFsVmFsdWVzIT09dm9pZCAwJiZ0W3JdLl92aXN1YWxWYWx1ZXNbbl0hPT12b2lkIDAmJmRlbGV0ZSB0W3JdLl92aXN1YWxWYWx1ZXNbbl19fX12YXIgc2w9ZT0+ZT09PWByZXNldGB8fGU9PT1gbm9uZWAsY2w9KGUsdCk9PnQ/ZTpPYmplY3QuYXNzaWduKHt9LGUpLGxsPShlLHQsbik9PmUmJiF0LmhpZGRlbiYmdC5fc3RhY2tlZCYme2tleXM6SmMobiwhMCksdmFsdWVzOm51bGx9LHVsPWNsYXNze3N0YXRpYyBkZWZhdWx0cz17fTtzdGF0aWMgZGF0YXNldEVsZW1lbnRUeXBlPW51bGw7c3RhdGljIGRhdGFFbGVtZW50VHlwZT1udWxsO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jaGFydD1lLHRoaXMuX2N0eD1lLmN0eCx0aGlzLmluZGV4PXQsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e30sdGhpcy5fY2FjaGVkTWV0YT10aGlzLmdldE1ldGEoKSx0aGlzLl90eXBlPXRoaXMuX2NhY2hlZE1ldGEudHlwZSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuX3BhcnNpbmc9ITEsdGhpcy5fZGF0YT12b2lkIDAsdGhpcy5fb2JqZWN0RGF0YT12b2lkIDAsdGhpcy5fc2hhcmVkT3B0aW9ucz12b2lkIDAsdGhpcy5fZHJhd1N0YXJ0PXZvaWQgMCx0aGlzLl9kcmF3Q291bnQ9dm9pZCAwLHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZz0hMSx0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbj0hMSx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFzZXRFbGVtZW50VHlwZSx0aGlzLmRhdGFFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZSx0aGlzLmluaXRpYWxpemUoKX1pbml0aWFsaXplKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLmNvbmZpZ3VyZSgpLHRoaXMubGlua1NjYWxlcygpLGUuX3N0YWNrZWQ9WmMoZS52U2NhbGUsZSksdGhpcy5hZGRFbGVtZW50cygpLHRoaXMub3B0aW9ucy5maWxsJiYhdGhpcy5jaGFydC5pc1BsdWdpbkVuYWJsZWQoYGZpbGxlcmApJiZjb25zb2xlLndhcm4oYFRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc2ApfXVwZGF0ZUluZGV4KGUpe3RoaXMuaW5kZXghPT1lJiZvbCh0aGlzLl9jYWNoZWRNZXRhKSx0aGlzLmluZGV4PWV9bGlua1NjYWxlcygpe2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0oZSx0LG4scik9PmU9PT1geGA/dDplPT09YHJgP3I6bixpPXQueEF4aXNJRD1xKG4ueEF4aXNJRCxybChlLGB4YCkpLGE9dC55QXhpc0lEPXEobi55QXhpc0lELHJsKGUsYHlgKSksbz10LnJBeGlzSUQ9cShuLnJBeGlzSUQscmwoZSxgcmApKSxzPXQuaW5kZXhBeGlzLGM9dC5pQXhpc0lEPXIocyxpLGEsbyksbD10LnZBeGlzSUQ9cihzLGEsaSxvKTt0LnhTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoaSksdC55U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGEpLHQuclNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChvKSx0LmlTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoYyksdC52U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGwpfWdldERhdGFzZXQoKXtyZXR1cm4gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW3RoaXMuaW5kZXhdfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YSh0aGlzLmluZGV4KX1nZXRTY2FsZUZvcklkKGUpe3JldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tlXX1fZ2V0T3RoZXJTY2FsZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3JldHVybiBlPT09dC5pU2NhbGU/dC52U2NhbGU6dC5pU2NhbGV9cmVzZXQoKXt0aGlzLl91cGRhdGUoYHJlc2V0YCl9X2Rlc3Ryb3koKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGEmJkpvKHRoaXMuX2RhdGEsdGhpcyksZS5fc3RhY2tlZCYmb2woZSl9X2RhdGFDaGVjaygpe2xldCBlPXRoaXMuZ2V0RGF0YXNldCgpLHQ9ZS5kYXRhfHw9W10sbj10aGlzLl9kYXRhO2lmKEcodCkpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YT1YYyh0LGUpfWVsc2UgaWYobiE9PXQpe2lmKG4pe0pvKG4sdGhpcyk7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTtvbChlKSxlLl9wYXJzZWQ9W119dCYmT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmcW8odCx0aGlzKSx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLl9kYXRhPXR9fWFkZEVsZW1lbnRzKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhQ2hlY2soKSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSYmKGUuZGF0YXNldD1uZXcgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpfWJ1aWxkT3JVcGRhdGVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0hMTt0aGlzLl9kYXRhQ2hlY2soKTtsZXQgaT10Ll9zdGFja2VkO3QuX3N0YWNrZWQ9WmModC52U2NhbGUsdCksdC5zdGFjayE9PW4uc3RhY2smJihyPSEwLG9sKHQpLHQuc3RhY2s9bi5zdGFjayksdGhpcy5fcmVzeW5jRWxlbWVudHMoZSksKHJ8fGkhPT10Ll9zdGFja2VkKSYmKG5sKHRoaXMsdC5fcGFyc2VkKSx0Ll9zdGFja2VkPVpjKHQudlNjYWxlLHQpKX1jb25maWd1cmUoKXtsZXQgZT10aGlzLmNoYXJ0LmNvbmZpZyx0PWUuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKSxuPWUuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLHQsITApO3RoaXMub3B0aW9ucz1lLmNyZWF0ZVJlc29sdmVyKG4sdGhpcy5nZXRDb250ZXh0KCkpLHRoaXMuX3BhcnNpbmc9dGhpcy5vcHRpb25zLnBhcnNpbmcsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e319cGFyc2UoZSx0KXtsZXR7X2NhY2hlZE1ldGE6bixfZGF0YTpyfT10aGlzLHtpU2NhbGU6aSxfc3RhY2tlZDphfT1uLG89aS5heGlzLHM9ZT09PTAmJnQ9PT1yLmxlbmd0aHx8bi5fc29ydGVkLGM9ZT4wJiZuLl9wYXJzZWRbZS0xXSxsLHUsZDtpZih0aGlzLl9wYXJzaW5nPT09ITEpbi5fcGFyc2VkPXIsbi5fc29ydGVkPSEwLGQ9cjtlbHNle2Q9VyhyW2VdKT90aGlzLnBhcnNlQXJyYXlEYXRhKG4scixlLHQpOkcocltlXSk/dGhpcy5wYXJzZU9iamVjdERhdGEobixyLGUsdCk6dGhpcy5wYXJzZVByaW1pdGl2ZURhdGEobixyLGUsdCk7bGV0IGk9KCk9PnVbb109PT1udWxsfHxjJiZ1W29dPGNbb107Zm9yKGw9MDtsPHQ7KytsKW4uX3BhcnNlZFtsK2VdPXU9ZFtsXSxzJiYoaSgpJiYocz0hMSksYz11KTtuLl9zb3J0ZWQ9c31hJiZubCh0aGlzLGQpfXBhcnNlUHJpbWl0aXZlRGF0YShlLHQsbixyKXtsZXR7aVNjYWxlOmksdlNjYWxlOmF9PWUsbz1pLmF4aXMscz1hLmF4aXMsYz1pLmdldExhYmVscygpLGw9aT09PWEsdT1BcnJheShyKSxkLGYscDtmb3IoZD0wLGY9cjtkPGY7KytkKXA9ZCtuLHVbZF09e1tvXTpsfHxpLnBhcnNlKGNbcF0scCksW3NdOmEucGFyc2UodFtwXSxwKX07cmV0dXJuIHV9cGFyc2VBcnJheURhdGEoZSx0LG4scil7bGV0e3hTY2FsZTppLHlTY2FsZTphfT1lLG89QXJyYXkocikscyxjLGwsdTtmb3Iocz0wLGM9cjtzPGM7KytzKWw9cytuLHU9dFtsXSxvW3NdPXt4OmkucGFyc2UodVswXSxsKSx5OmEucGFyc2UodVsxXSxsKX07cmV0dXJuIG99cGFyc2VPYmplY3REYXRhKGUsdCxuLHIpe2xldHt4U2NhbGU6aSx5U2NhbGU6YX09ZSx7eEF4aXNLZXk6bz1geGAseUF4aXNLZXk6cz1geWB9PXRoaXMuX3BhcnNpbmcsYz1BcnJheShyKSxsLHUsZCxmO2ZvcihsPTAsdT1yO2w8dTsrK2wpZD1sK24sZj10W2RdLGNbbF09e3g6aS5wYXJzZSh1byhmLG8pLGQpLHk6YS5wYXJzZSh1byhmLHMpLGQpfTtyZXR1cm4gY31nZXRQYXJzZWQoZSl7cmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtlXX1nZXREYXRhRWxlbWVudChlKXtyZXR1cm4gdGhpcy5fY2FjaGVkTWV0YS5kYXRhW2VdfWFwcGx5U3RhY2soZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWRNZXRhLGE9dFtlLmF4aXNdO3JldHVybiBZYyh7a2V5czpKYyhyLCEwKSx2YWx1ZXM6dC5fc3RhY2tzW2UuYXhpc10uX3Zpc3VhbFZhbHVlc30sYSxpLmluZGV4LHttb2RlOm59KX11cGRhdGVSYW5nZUZyb21QYXJzZWQoZSx0LG4scil7bGV0IGk9blt0LmF4aXNdLGE9aT09PW51bGw/TmFOOmksbz1yJiZuLl9zdGFja3NbdC5heGlzXTtyJiZvJiYoci52YWx1ZXM9byxhPVljKHIsaSx0aGlzLl9jYWNoZWRNZXRhLmluZGV4KSksZS5taW49TWF0aC5taW4oZS5taW4sYSksZS5tYXg9TWF0aC5tYXgoZS5tYXgsYSl9Z2V0TWluTWF4KGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uX3BhcnNlZCxpPW4uX3NvcnRlZCYmZT09PW4uaVNjYWxlLGE9ci5sZW5ndGgsbz10aGlzLl9nZXRPdGhlclNjYWxlKGUpLHM9bGwodCxuLHRoaXMuY2hhcnQpLGM9e21pbjoxLzAsbWF4Oi0xLzB9LHttaW46bCxtYXg6dX09JGMobyksZCxmO2Z1bmN0aW9uIHAoKXtmPXJbZF07bGV0IHQ9ZltvLmF4aXNdO3JldHVybiFLKGZbZS5heGlzXSl8fGw+dHx8dTx0fWZvcihkPTA7ZDxhJiYhKCFwKCkmJih0aGlzLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChjLGUsZixzKSxpKSk7KytkKTtpZihpKXtmb3IoZD1hLTE7ZD49MDstLWQpaWYoIXAoKSl7dGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQoYyxlLGYscyk7YnJlYWt9fXJldHVybiBjfWdldEFsbFBhcnNlZFZhbHVlcyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLl9wYXJzZWQsbj1bXSxyLGksYTtmb3Iocj0wLGk9dC5sZW5ndGg7cjxpOysrcilhPXRbcl1bZS5heGlzXSxLKGEpJiZuLnB1c2goYSk7cmV0dXJuIG59Z2V0TWF4T3ZlcmZsb3coKXtyZXR1cm4hMX1nZXRMYWJlbEFuZFZhbHVlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEsbj10LmlTY2FsZSxyPXQudlNjYWxlLGk9dGhpcy5nZXRQYXJzZWQoZSk7cmV0dXJue2xhYmVsOm4/YGArbi5nZXRMYWJlbEZvclZhbHVlKGlbbi5heGlzXSk6YGAsdmFsdWU6cj9gYCtyLmdldExhYmVsRm9yVmFsdWUoaVtyLmF4aXNdKTpgYH19X3VwZGF0ZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3RoaXMudXBkYXRlKGV8fGBkZWZhdWx0YCksdC5fY2xpcD1xYyhxKHRoaXMub3B0aW9ucy5jbGlwLEtjKHQueFNjYWxlLHQueVNjYWxlLHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKX11cGRhdGUoZSl7fWRyYXcoKXtsZXQgZT10aGlzLl9jdHgsdD10aGlzLmNoYXJ0LG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uZGF0YXx8W10saT10LmNoYXJ0QXJlYSxhPVtdLG89dGhpcy5fZHJhd1N0YXJ0fHwwLHM9dGhpcy5fZHJhd0NvdW50fHxyLmxlbmd0aC1vLGM9dGhpcy5vcHRpb25zLmRyYXdBY3RpdmVFbGVtZW50c09uVG9wLGw7Zm9yKG4uZGF0YXNldCYmbi5kYXRhc2V0LmRyYXcoZSxpLG8scyksbD1vO2w8bytzOysrbCl7bGV0IHQ9cltsXTt0LmhpZGRlbnx8KHQuYWN0aXZlJiZjP2EucHVzaCh0KTp0LmRyYXcoZSxpKSl9Zm9yKGw9MDtsPGEubGVuZ3RoOysrbClhW2xdLmRyYXcoZSxpKX1nZXRTdHlsZShlLHQpe2xldCBuPXQ/YGFjdGl2ZWA6YGRlZmF1bHRgO3JldHVybiBlPT09dm9pZCAwJiZ0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ/dGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG4pOnRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlfHwwLG4pfWdldENvbnRleHQoZSx0LG4pe2xldCByPXRoaXMuZ2V0RGF0YXNldCgpLGk7aWYoZT49MCYmZTx0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLmRhdGFbZV07aT10LiRjb250ZXh0fHw9YWwodGhpcy5nZXRDb250ZXh0KCksZSx0KSxpLnBhcnNlZD10aGlzLmdldFBhcnNlZChlKSxpLnJhdz1yLmRhdGFbZV0saS5pbmRleD1pLmRhdGFJbmRleD1lfWVsc2UgaT10aGlzLiRjb250ZXh0fHw9aWwodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcy5pbmRleCksaS5kYXRhc2V0PXIsaS5pbmRleD1pLmRhdGFzZXRJbmRleD10aGlzLmluZGV4O3JldHVybiBpLmFjdGl2ZT0hIXQsaS5tb2RlPW4saX1yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsZSl9cmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlLHQpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsdCxlKX1fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKGUsdD1gZGVmYXVsdGAsbil7bGV0IHI9dD09PWBhY3RpdmVgLGk9dGhpcy5fY2FjaGVkRGF0YU9wdHMsYT1lK2AtYCt0LG89aVthXSxzPXRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyYmcG8obik7aWYobylyZXR1cm4gY2wobyxzKTtsZXQgYz10aGlzLmNoYXJ0LmNvbmZpZyxsPWMuZGF0YXNldEVsZW1lbnRTY29wZUtleXModGhpcy5fdHlwZSxlKSx1PXI/W2Ake2V9SG92ZXJgLGBob3ZlcmAsZSxgYF06W2UsYGBdLGQ9Yy5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksbCksZj1PYmplY3Qua2V5cyhaLmVsZW1lbnRzW2VdKSxwPWMucmVzb2x2ZU5hbWVkT3B0aW9ucyhkLGYsKCk9PnRoaXMuZ2V0Q29udGV4dChuLHIsdCksdSk7cmV0dXJuIHAuJHNoYXJlZCYmKHAuJHNoYXJlZD1zLGlbYV09T2JqZWN0LmZyZWV6ZShjbChwLHMpKSkscH1fcmVzb2x2ZUFuaW1hdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWREYXRhT3B0cyxhPWBhbmltYXRpb24tJHt0fWAsbz1pW2FdO2lmKG8pcmV0dXJuIG87bGV0IHM7aWYoci5vcHRpb25zLmFuaW1hdGlvbiE9PSExKXtsZXQgcj10aGlzLmNoYXJ0LmNvbmZpZyxpPXIuZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyh0aGlzLl90eXBlLHQpLGE9ci5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksaSk7cz1yLmNyZWF0ZVJlc29sdmVyKGEsdGhpcy5nZXRDb250ZXh0KGUsbix0KSl9bGV0IGM9bmV3IEhjKHIscyYmcy5hbmltYXRpb25zKTtyZXR1cm4gcyYmcy5fY2FjaGVhYmxlJiYoaVthXT1PYmplY3QuZnJlZXplKGMpKSxjfWdldFNoYXJlZE9wdGlvbnMoZSl7aWYoZS4kc2hhcmVkKXJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zfHw9T2JqZWN0LmFzc2lnbih7fSxlKX1pbmNsdWRlT3B0aW9ucyhlLHQpe3JldHVybiF0fHxzbChlKXx8dGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkfV9nZXRTaGFyZWRPcHRpb25zKGUsdCl7bGV0IG49dGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGUsdCkscj10aGlzLl9zaGFyZWRPcHRpb25zLGk9dGhpcy5nZXRTaGFyZWRPcHRpb25zKG4pLGE9dGhpcy5pbmNsdWRlT3B0aW9ucyh0LGkpfHxpIT09cjtyZXR1cm4gdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKGksdCxuKSx7c2hhcmVkT3B0aW9uczppLGluY2x1ZGVPcHRpb25zOmF9fXVwZGF0ZUVsZW1lbnQoZSx0LG4scil7c2wocik/T2JqZWN0LmFzc2lnbihlLG4pOnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQscikudXBkYXRlKGUsbil9dXBkYXRlU2hhcmVkT3B0aW9ucyhlLHQsbil7ZSYmIXNsKHQpJiZ0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAsdCkudXBkYXRlKGUsbil9X3NldFN0eWxlKGUsdCxuLHIpe2UuYWN0aXZlPXI7bGV0IGk9dGhpcy5nZXRTdHlsZSh0LHIpO3RoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQsbixyKS51cGRhdGUoZSx7b3B0aW9uczohciYmdGhpcy5nZXRTaGFyZWRPcHRpb25zKGkpfHxpfSl9cmVtb3ZlSG92ZXJTdHlsZShlLHQsbil7dGhpcy5fc2V0U3R5bGUoZSxuLGBhY3RpdmVgLCExKX1zZXRIb3ZlclN0eWxlKGUsdCxuKXt0aGlzLl9zZXRTdHlsZShlLG4sYGFjdGl2ZWAsITApfV9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldDtlJiZ0aGlzLl9zZXRTdHlsZShlLHZvaWQgMCxgYWN0aXZlYCwhMSl9X3NldERhdGFzZXRIb3ZlclN0eWxlKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O2UmJnRoaXMuX3NldFN0eWxlKGUsdm9pZCAwLGBhY3RpdmVgLCEwKX1fcmVzeW5jRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fZGF0YSxuPXRoaXMuX2NhY2hlZE1ldGEuZGF0YTtmb3IobGV0W2UsdCxuXW9mIHRoaXMuX3N5bmNMaXN0KXRoaXNbZV0odCxuKTt0aGlzLl9zeW5jTGlzdD1bXTtsZXQgcj1uLmxlbmd0aCxpPXQubGVuZ3RoLGE9TWF0aC5taW4oaSxyKTthJiZ0aGlzLnBhcnNlKDAsYSksaT5yP3RoaXMuX2luc2VydEVsZW1lbnRzKHIsaS1yLGUpOmk8ciYmdGhpcy5fcmVtb3ZlRWxlbWVudHMoaSxyLWkpfV9pbnNlcnRFbGVtZW50cyhlLHQsbj0hMCl7bGV0IHI9dGhpcy5fY2FjaGVkTWV0YSxpPXIuZGF0YSxhPWUrdCxvLHM9ZT0+e2ZvcihlLmxlbmd0aCs9dCxvPWUubGVuZ3RoLTE7bz49YTtvLS0pZVtvXT1lW28tdF19O2ZvcihzKGkpLG89ZTtvPGE7KytvKWlbb109bmV3IHRoaXMuZGF0YUVsZW1lbnRUeXBlO3RoaXMuX3BhcnNpbmcmJnMoci5fcGFyc2VkKSx0aGlzLnBhcnNlKGUsdCksbiYmdGhpcy51cGRhdGVFbGVtZW50cyhpLGUsdCxgcmVzZXRgKX11cGRhdGVFbGVtZW50cyhlLHQsbixyKXt9X3JlbW92ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YTtpZih0aGlzLl9wYXJzaW5nKXtsZXQgcj1uLl9wYXJzZWQuc3BsaWNlKGUsdCk7bi5fc3RhY2tlZCYmb2wobixyKX1uLmRhdGEuc3BsaWNlKGUsdCl9X3N5bmMoZSl7aWYodGhpcy5fcGFyc2luZyl0aGlzLl9zeW5jTGlzdC5wdXNoKGUpO2Vsc2V7bGV0W3QsbixyXT1lO3RoaXNbdF0obixyKX10aGlzLmNoYXJ0Ll9kYXRhQ2hhbmdlcy5wdXNoKFt0aGlzLmluZGV4LC4uLmVdKX1fb25EYXRhUHVzaCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg7dGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsdGhpcy5nZXREYXRhc2V0KCkuZGF0YS5sZW5ndGgtZSxlXSl9X29uRGF0YVBvcCgpe3RoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgtMSwxXSl9X29uRGF0YVNoaWZ0KCl7dGhpcy5fc3luYyhbYF9yZW1vdmVFbGVtZW50c2AsMCwxXSl9X29uRGF0YVNwbGljZShlLHQpe3QmJnRoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLGUsdF0pO2xldCBuPWFyZ3VtZW50cy5sZW5ndGgtMjtuJiZ0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCxlLG5dKX1fb25EYXRhVW5zaGlmdCgpe3RoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLDAsYXJndW1lbnRzLmxlbmd0aF0pfX07ZnVuY3Rpb24gZGwoZSx0KXtpZighZS5fY2FjaGUuJGJhcil7bGV0IG49ZS5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyh0KSxyPVtdO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dDxpO3QrKylyPXIuY29uY2F0KG5bdF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXMoZSkpO2UuX2NhY2hlLiRiYXI9WW8oci5zb3J0KChlLHQpPT5lLXQpKX1yZXR1cm4gZS5fY2FjaGUuJGJhcn1mdW5jdGlvbiBmbChlKXtsZXQgdD1lLmlTY2FsZSxuPWRsKHQsZS50eXBlKSxyPXQuX2xlbmd0aCxpLGEsbyxzLGM9KCk9PntvIT09MzI3NjcmJm8hPT0tMzI3NjgmJihwbyhzKSYmKHI9TWF0aC5taW4ocixNYXRoLmFicyhvLXMpfHxyKSkscz1vKX07Zm9yKGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbz10LmdldFBpeGVsRm9yVmFsdWUobltpXSksYygpO2ZvcihzPXZvaWQgMCxpPTAsYT10LnRpY2tzLmxlbmd0aDtpPGE7KytpKW89dC5nZXRQaXhlbEZvclRpY2soaSksYygpO3JldHVybiByfWZ1bmN0aW9uIHBsKGUsdCxuLHIpe2xldCBpPW4uYmFyVGhpY2tuZXNzLGEsbztyZXR1cm4gVShpKT8oYT10Lm1pbipuLmNhdGVnb3J5UGVyY2VudGFnZSxvPW4uYmFyUGVyY2VudGFnZSk6KGE9aSpyLG89MSkse2NodW5rOmEvcixyYXRpbzpvLHN0YXJ0OnQucGl4ZWxzW2VdLWEvMn19ZnVuY3Rpb24gbWwoZSx0LG4scil7bGV0IGk9dC5waXhlbHMsYT1pW2VdLG89ZT4wP2lbZS0xXTpudWxsLHM9ZTxpLmxlbmd0aC0xP2lbZSsxXTpudWxsLGM9bi5jYXRlZ29yeVBlcmNlbnRhZ2U7bz09PW51bGwmJihvPWEtKHM9PT1udWxsP3QuZW5kLXQuc3RhcnQ6cy1hKSkscz09PW51bGwmJihzPWErYS1vKTtsZXQgbD1hLShhLU1hdGgubWluKG8scykpLzIqYztyZXR1cm57Y2h1bms6TWF0aC5hYnMocy1vKS8yKmMvcixyYXRpbzpuLmJhclBlcmNlbnRhZ2Usc3RhcnQ6bH19ZnVuY3Rpb24gaGwoZSx0LG4scil7bGV0IGk9bi5wYXJzZShlWzBdLHIpLGE9bi5wYXJzZShlWzFdLHIpLG89TWF0aC5taW4oaSxhKSxzPU1hdGgubWF4KGksYSksYz1vLGw9cztNYXRoLmFicyhvKT5NYXRoLmFicyhzKSYmKGM9cyxsPW8pLHRbbi5heGlzXT1sLHQuX2N1c3RvbT17YmFyU3RhcnQ6YyxiYXJFbmQ6bCxzdGFydDppLGVuZDphLG1pbjpvLG1heDpzfX1mdW5jdGlvbiBnbChlLHQsbixyKXtyZXR1cm4gVyhlKT9obChlLHQsbixyKTp0W24uYXhpc109bi5wYXJzZShlLHIpLHR9ZnVuY3Rpb24gX2woZSx0LG4scil7bGV0IGk9ZS5pU2NhbGUsYT1lLnZTY2FsZSxvPWkuZ2V0TGFiZWxzKCkscz1pPT09YSxjPVtdLGwsdSxkLGY7Zm9yKGw9bix1PW4rcjtsPHU7KytsKWY9dFtsXSxkPXt9LGRbaS5heGlzXT1zfHxpLnBhcnNlKG9bbF0sbCksYy5wdXNoKGdsKGYsZCxhLGwpKTtyZXR1cm4gY31mdW5jdGlvbiB2bChlKXtyZXR1cm4gZSYmZS5iYXJTdGFydCE9PXZvaWQgMCYmZS5iYXJFbmQhPT12b2lkIDB9ZnVuY3Rpb24geWwoZSx0LG4pe3JldHVybiBlPT09MD8odC5pc0hvcml6b250YWwoKT8xOi0xKSoodC5taW4+PW4/MTotMSk6d28oZSl9ZnVuY3Rpb24gYmwoZSl7bGV0IHQsbixyLGksYTtyZXR1cm4gZS5ob3Jpem9udGFsPyh0PWUuYmFzZT5lLngsbj1gbGVmdGAscj1gcmlnaHRgKToodD1lLmJhc2U8ZS55LG49YGJvdHRvbWAscj1gdG9wYCksdD8oaT1gZW5kYCxhPWBzdGFydGApOihpPWBzdGFydGAsYT1gZW5kYCkse3N0YXJ0Om4sZW5kOnIscmV2ZXJzZTp0LHRvcDppLGJvdHRvbTphfX1mdW5jdGlvbiB4bChlLHQsbixyKXtsZXQgaT10LmJvcmRlclNraXBwZWQsYT17fTtpZighaSl7ZS5ib3JkZXJTa2lwcGVkPWE7cmV0dXJufWlmKGk9PT0hMCl7ZS5ib3JkZXJTa2lwcGVkPXt0b3A6ITAscmlnaHQ6ITAsYm90dG9tOiEwLGxlZnQ6ITB9O3JldHVybn1sZXR7c3RhcnQ6byxlbmQ6cyxyZXZlcnNlOmMsdG9wOmwsYm90dG9tOnV9PWJsKGUpO2k9PT1gbWlkZGxlYCYmbiYmKGUuZW5hYmxlQm9yZGVyUmFkaXVzPSEwLChuLl90b3B8fDApPT09cj9pPWw6KG4uX2JvdHRvbXx8MCk9PT1yP2k9dTooYVtTbCh1LG8scyxjKV09ITAsaT1sKSksYVtTbChpLG8scyxjKV09ITAsZS5ib3JkZXJTa2lwcGVkPWF9ZnVuY3Rpb24gU2woZSx0LG4scil7cmV0dXJuIHI/KGU9Q2woZSx0LG4pLGU9d2woZSxuLHQpKTplPXdsKGUsdCxuKSxlfWZ1bmN0aW9uIENsKGUsdCxuKXtyZXR1cm4gZT09PXQ/bjplPT09bj90OmV9ZnVuY3Rpb24gd2woZSx0LG4pe3JldHVybiBlPT09YHN0YXJ0YD90OmU9PT1gZW5kYD9uOmV9ZnVuY3Rpb24gVGwoZSx7aW5mbGF0ZUFtb3VudDp0fSxuKXtlLmluZmxhdGVBbW91bnQ9dD09PWBhdXRvYD9uPT09MT8uMzM6MDp0fXZhciBFbD1jbGFzcyBleHRlbmRzIHVse3N0YXRpYyBpZD1gYmFyYDtzdGF0aWMgZGVmYXVsdHM9e2RhdGFzZXRFbGVtZW50VHlwZTohMSxkYXRhRWxlbWVudFR5cGU6YGJhcmAsY2F0ZWdvcnlQZXJjZW50YWdlOi44LGJhclBlcmNlbnRhZ2U6LjksZ3JvdXBlZDohMCxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYGJhc2VgLGB3aWR0aGAsYGhlaWdodGBdfX19O3N0YXRpYyBvdmVycmlkZXM9e3NjYWxlczp7X2luZGV4Xzp7dHlwZTpgY2F0ZWdvcnlgLG9mZnNldDohMCxncmlkOntvZmZzZXQ6ITB9fSxfdmFsdWVfOnt0eXBlOmBsaW5lYXJgLGJlZ2luQXRaZXJvOiEwfX19O3BhcnNlUHJpbWl0aXZlRGF0YShlLHQsbixyKXtyZXR1cm4gX2woZSx0LG4scil9cGFyc2VBcnJheURhdGEoZSx0LG4scil7cmV0dXJuIF9sKGUsdCxuLHIpfXBhcnNlT2JqZWN0RGF0YShlLHQsbixyKXtsZXR7aVNjYWxlOmksdlNjYWxlOmF9PWUse3hBeGlzS2V5Om89YHhgLHlBeGlzS2V5OnM9YHlgfT10aGlzLl9wYXJzaW5nLGM9aS5heGlzPT09YHhgP286cyxsPWEuYXhpcz09PWB4YD9vOnMsdT1bXSxkLGYscCxtO2ZvcihkPW4sZj1uK3I7ZDxmOysrZCltPXRbZF0scD17fSxwW2kuYXhpc109aS5wYXJzZSh1byhtLGMpLGQpLHUucHVzaChnbCh1byhtLGwpLHAsYSxkKSk7cmV0dXJuIHV9dXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGUsdCxuLHIpe3N1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChlLHQsbixyKTtsZXQgaT1uLl9jdXN0b207aSYmdD09PXRoaXMuX2NhY2hlZE1ldGEudlNjYWxlJiYoZS5taW49TWF0aC5taW4oZS5taW4saS5taW4pLGUubWF4PU1hdGgubWF4KGUubWF4LGkubWF4KSl9Z2V0TWF4T3ZlcmZsb3coKXtyZXR1cm4gMH1nZXRMYWJlbEFuZFZhbHVlKGUpe2xldHtpU2NhbGU6dCx2U2NhbGU6bn09dGhpcy5fY2FjaGVkTWV0YSxyPXRoaXMuZ2V0UGFyc2VkKGUpLGk9ci5fY3VzdG9tLGE9dmwoaSk/YFtgK2kuc3RhcnQrYCwgYCtpLmVuZCtgXWA6YGArbi5nZXRMYWJlbEZvclZhbHVlKHJbbi5heGlzXSk7cmV0dXJue2xhYmVsOmBgK3QuZ2V0TGFiZWxGb3JWYWx1ZShyW3QuYXhpc10pLHZhbHVlOmF9fWluaXRpYWxpemUoKXt0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmc9ITAsc3VwZXIuaW5pdGlhbGl6ZSgpO2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7ZS5zdGFjaz10aGlzLmdldERhdGFzZXQoKS5zdGFja311cGRhdGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLnVwZGF0ZUVsZW1lbnRzKHQuZGF0YSwwLHQuZGF0YS5sZW5ndGgsZSl9dXBkYXRlRWxlbWVudHMoZSx0LG4scil7bGV0IGk9cj09PWByZXNldGAse2luZGV4OmEsX2NhY2hlZE1ldGE6e3ZTY2FsZTpvfX09dGhpcyxzPW8uZ2V0QmFzZVBpeGVsKCksYz1vLmlzSG9yaXpvbnRhbCgpLGw9dGhpcy5fZ2V0UnVsZXIoKSx7c2hhcmVkT3B0aW9uczp1LGluY2x1ZGVPcHRpb25zOmR9PXRoaXMuX2dldFNoYXJlZE9wdGlvbnModCxyKTtmb3IobGV0IGY9dDtmPHQrbjtmKyspe2xldCB0PXRoaXMuZ2V0UGFyc2VkKGYpLG49aXx8VSh0W28uYXhpc10pP3tiYXNlOnMsaGVhZDpzfTp0aGlzLl9jYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyhmKSxwPXRoaXMuX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGYsbCksbT0odC5fc3RhY2tzfHx7fSlbby5heGlzXSxoPXtob3Jpem9udGFsOmMsYmFzZTpuLmJhc2UsZW5hYmxlQm9yZGVyUmFkaXVzOiFtfHx2bCh0Ll9jdXN0b20pfHxhPT09bS5fdG9wfHxhPT09bS5fYm90dG9tLHg6Yz9uLmhlYWQ6cC5jZW50ZXIseTpjP3AuY2VudGVyOm4uaGVhZCxoZWlnaHQ6Yz9wLnNpemU6TWF0aC5hYnMobi5zaXplKSx3aWR0aDpjP01hdGguYWJzKG4uc2l6ZSk6cC5zaXplfTtkJiYoaC5vcHRpb25zPXV8fHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhmLGVbZl0uYWN0aXZlP2BhY3RpdmVgOnIpKTtsZXQgZz1oLm9wdGlvbnN8fGVbZl0ub3B0aW9uczt4bChoLGcsbSxhKSxUbChoLGcsbC5yYXRpbyksdGhpcy51cGRhdGVFbGVtZW50KGVbZl0sZixoLHIpfX1fZ2V0U3RhY2tzKGUsdCl7bGV0e2lTY2FsZTpufT10aGlzLl9jYWNoZWRNZXRhLHI9bi5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyh0aGlzLl90eXBlKS5maWx0ZXIoZT0+ZS5jb250cm9sbGVyLm9wdGlvbnMuZ3JvdXBlZCksaT1uLm9wdGlvbnMuc3RhY2tlZCxhPVtdLG89dGhpcy5fY2FjaGVkTWV0YS5jb250cm9sbGVyLmdldFBhcnNlZCh0KSxzPW8mJm9bbi5heGlzXSxjPWU9PntsZXQgdD1lLl9wYXJzZWQuZmluZChlPT5lW24uYXhpc109PT1zKSxyPXQmJnRbZS52U2NhbGUuYXhpc107aWYoVShyKXx8aXNOYU4ocikpcmV0dXJuITB9O2ZvcihsZXQgbiBvZiByKWlmKCEodCE9PXZvaWQgMCYmYyhuKSkmJigoaT09PSExfHxhLmluZGV4T2Yobi5zdGFjayk9PT0tMXx8aT09PXZvaWQgMCYmbi5zdGFjaz09PXZvaWQgMCkmJmEucHVzaChuLnN0YWNrKSxuLmluZGV4PT09ZSkpYnJlYWs7cmV0dXJuIGEubGVuZ3RofHxhLnB1c2godm9pZCAwKSxhfV9nZXRTdGFja0NvdW50KGUpe3JldHVybiB0aGlzLl9nZXRTdGFja3Modm9pZCAwLGUpLmxlbmd0aH1fZ2V0QXhpc0NvdW50KCl7cmV0dXJuIHRoaXMuX2dldEF4aXMoKS5sZW5ndGh9Z2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzKCl7bGV0IGU9dGhpcy5jaGFydC5zY2FsZXMsdD10aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzO3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIobj0+ZVtuXS5heGlzPT09dCkuc2hpZnQoKX1fZ2V0QXhpcygpe2xldCBlPXt9LHQ9dGhpcy5nZXRGaXJzdFNjYWxlSWRGb3JJbmRleEF4aXMoKTtmb3IobGV0IG4gb2YgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKWVbcSh0aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzPT09YHhgP24ueEF4aXNJRDpuLnlBeGlzSUQsdCldPSEwO3JldHVybiBPYmplY3Qua2V5cyhlKX1fZ2V0U3RhY2tJbmRleChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0U3RhY2tzKGUsbiksaT10PT09dm9pZCAwPy0xOnIuaW5kZXhPZih0KTtyZXR1cm4gaT09PS0xP3IubGVuZ3RoLTE6aX1fZ2V0UnVsZXIoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD10aGlzLl9jYWNoZWRNZXRhLG49dC5pU2NhbGUscj1bXSxpLGE7Zm9yKGk9MCxhPXQuZGF0YS5sZW5ndGg7aTxhOysraSlyLnB1c2gobi5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGkpW24uYXhpc10saSkpO2xldCBvPWUuYmFyVGhpY2tuZXNzO3JldHVybnttaW46b3x8ZmwodCkscGl4ZWxzOnIsc3RhcnQ6bi5fc3RhcnRQaXhlbCxlbmQ6bi5fZW5kUGl4ZWwsc3RhY2tDb3VudDp0aGlzLl9nZXRTdGFja0NvdW50KCksc2NhbGU6bixncm91cGVkOmUuZ3JvdXBlZCxyYXRpbzpvPzE6ZS5jYXRlZ29yeVBlcmNlbnRhZ2UqZS5iYXJQZXJjZW50YWdlfX1fY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoZSl7bGV0e19jYWNoZWRNZXRhOnt2U2NhbGU6dCxfc3RhY2tlZDpuLGluZGV4OnJ9LG9wdGlvbnM6e2Jhc2U6aSxtaW5CYXJMZW5ndGg6YX19PXRoaXMsbz1pfHwwLHM9dGhpcy5nZXRQYXJzZWQoZSksYz1zLl9jdXN0b20sbD12bChjKSx1PXNbdC5heGlzXSxkPTAsZj1uP3RoaXMuYXBwbHlTdGFjayh0LHMsbik6dSxwLG07ZiE9PXUmJihkPWYtdSxmPXUpLGwmJih1PWMuYmFyU3RhcnQsZj1jLmJhckVuZC1jLmJhclN0YXJ0LHUhPT0wJiZ3byh1KSE9PXdvKGMuYmFyRW5kKSYmKGQ9MCksZCs9dSk7bGV0IGg9IVUoaSkmJiFsP2k6ZCxnPXQuZ2V0UGl4ZWxGb3JWYWx1ZShoKTtpZihwPXRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoZSk/dC5nZXRQaXhlbEZvclZhbHVlKGQrZik6ZyxtPXAtZyxNYXRoLmFicyhtKTxhKXttPXlsKG0sdCxvKSphLHU9PT1vJiYoZy09bS8yKTtsZXQgZT10LmdldFBpeGVsRm9yRGVjaW1hbCgwKSxpPXQuZ2V0UGl4ZWxGb3JEZWNpbWFsKDEpO2c9TWF0aC5tYXgoTWF0aC5taW4oZyxNYXRoLm1heChlLGkpKSxNYXRoLm1pbihlLGkpKSxwPWcrbSxuJiYhbCYmKHMuX3N0YWNrc1t0LmF4aXNdLl92aXN1YWxWYWx1ZXNbcl09dC5nZXRWYWx1ZUZvclBpeGVsKHApLXQuZ2V0VmFsdWVGb3JQaXhlbChnKSl9aWYoZz09PXQuZ2V0UGl4ZWxGb3JWYWx1ZShvKSl7bGV0IGU9d28obSkqdC5nZXRMaW5lV2lkdGhGb3JWYWx1ZShvKS8yO2crPWUsbS09ZX1yZXR1cm57c2l6ZTptLGJhc2U6ZyxoZWFkOnAsY2VudGVyOnArbS8yfX1fY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMoZSx0KXtsZXQgbj10LnNjYWxlLHI9dGhpcy5vcHRpb25zLGk9ci5za2lwTnVsbCxhPXEoci5tYXhCYXJUaGlja25lc3MsMS8wKSxvLHMsYz10aGlzLl9nZXRBeGlzQ291bnQoKTtpZih0Lmdyb3VwZWQpe2xldCBuPWk/dGhpcy5fZ2V0U3RhY2tDb3VudChlKTp0LnN0YWNrQ291bnQsbD1yLmJhclRoaWNrbmVzcz09PWBmbGV4YD9tbChlLHQscixuKmMpOnBsKGUsdCxyLG4qYyksdT10aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzPT09YHhgP3RoaXMuZ2V0RGF0YXNldCgpLnhBeGlzSUQ6dGhpcy5nZXREYXRhc2V0KCkueUF4aXNJRCxkPXRoaXMuX2dldEF4aXMoKS5pbmRleE9mKHEodSx0aGlzLmdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpKSksZj10aGlzLl9nZXRTdGFja0luZGV4KHRoaXMuaW5kZXgsdGhpcy5fY2FjaGVkTWV0YS5zdGFjayxpP2U6dm9pZCAwKStkO289bC5zdGFydCtsLmNodW5rKmYrbC5jaHVuay8yLHM9TWF0aC5taW4oYSxsLmNodW5rKmwucmF0aW8pfWVsc2Ugbz1uLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRQYXJzZWQoZSlbbi5heGlzXSxlKSxzPU1hdGgubWluKGEsdC5taW4qdC5yYXRpbyk7cmV0dXJue2Jhc2U6by1zLzIsaGVhZDpvK3MvMixjZW50ZXI6byxzaXplOnN9fWRyYXcoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLHQ9ZS52U2NhbGUsbj1lLmRhdGEscj1uLmxlbmd0aCxpPTA7Zm9yKDtpPHI7KytpKXRoaXMuZ2V0UGFyc2VkKGkpW3QuYXhpc10hPT1udWxsJiYhbltpXS5oaWRkZW4mJm5baV0uZHJhdyh0aGlzLl9jdHgpfX07ZnVuY3Rpb24gRGwoKXt0aHJvdyBFcnJvcihgVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkOiBDaGVjayB0aGF0IGEgY29tcGxldGUgZGF0ZSBhZGFwdGVyIGlzIHByb3ZpZGVkLmApfXZhciBPbD17X2RhdGU6Y2xhc3MgZXtzdGF0aWMgb3ZlcnJpZGUodCl7T2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSx0KX1vcHRpb25zO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHx7fX1pbml0KCl7fWZvcm1hdHMoKXtyZXR1cm4gRGwoKX1wYXJzZSgpe3JldHVybiBEbCgpfWZvcm1hdCgpe3JldHVybiBEbCgpfWFkZCgpe3JldHVybiBEbCgpfWRpZmYoKXtyZXR1cm4gRGwoKX1zdGFydE9mKCl7cmV0dXJuIERsKCl9ZW5kT2YoKXtyZXR1cm4gRGwoKX19fTtmdW5jdGlvbiBrbChlLHQsbixyKXtsZXR7Y29udHJvbGxlcjppLGRhdGE6YSxfc29ydGVkOm99PWUscz1pLl9jYWNoZWRNZXRhLmlTY2FsZSxjPWUuZGF0YXNldCYmZS5kYXRhc2V0Lm9wdGlvbnM/ZS5kYXRhc2V0Lm9wdGlvbnMuc3BhbkdhcHM6bnVsbDtpZihzJiZ0PT09cy5heGlzJiZ0IT09YHJgJiZvJiZhLmxlbmd0aCl7bGV0IG89cy5fcmV2ZXJzZVBpeGVscz9XbzpVbztpZighcil7bGV0IHI9byhhLHQsbik7aWYoYyl7bGV0e3ZTY2FsZTp0fT1pLl9jYWNoZWRNZXRhLHtfcGFyc2VkOm59PWUsYT1uLnNsaWNlKDAsci5sbysxKS5yZXZlcnNlKCkuZmluZEluZGV4KGU9PiFVKGVbdC5heGlzXSkpO3IubG8tPU1hdGgubWF4KDAsYSk7bGV0IG89bi5zbGljZShyLmhpKS5maW5kSW5kZXgoZT0+IVUoZVt0LmF4aXNdKSk7ci5oaSs9TWF0aC5tYXgoMCxvKX1yZXR1cm4gcn1pZihpLl9zaGFyZWRPcHRpb25zKXtsZXQgZT1hWzBdLHI9dHlwZW9mIGUuZ2V0UmFuZ2U9PWBmdW5jdGlvbmAmJmUuZ2V0UmFuZ2UodCk7aWYocil7bGV0IGU9byhhLHQsbi1yKSxpPW8oYSx0LG4rcik7cmV0dXJue2xvOmUubG8saGk6aS5oaX19fX1yZXR1cm57bG86MCxoaTphLmxlbmd0aC0xfX1mdW5jdGlvbiBBbChlLHQsbixyLGkpe2xldCBhPWUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLG89blt0XTtmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjsrK2Upe2xldHtpbmRleDpuLGRhdGE6c309YVtlXSx7bG86YyxoaTpsfT1rbChhW2VdLHQsbyxpKTtmb3IobGV0IGU9YztlPD1sOysrZSl7bGV0IHQ9c1tlXTt0LnNraXB8fHIodCxuLGUpfX19ZnVuY3Rpb24gamwoZSl7bGV0IHQ9ZS5pbmRleE9mKGB4YCkhPT0tMSxuPWUuaW5kZXhPZihgeWApIT09LTE7cmV0dXJuIGZ1bmN0aW9uKGUscil7bGV0IGk9dD9NYXRoLmFicyhlLngtci54KTowLGE9bj9NYXRoLmFicyhlLnktci55KTowO3JldHVybiBNYXRoLnNxcnQoaSoqMithKioyKX19ZnVuY3Rpb24gTWwoZSx0LG4scixpKXtsZXQgYT1bXTtyZXR1cm4haSYmIWUuaXNQb2ludEluQXJlYSh0KXx8QWwoZSxuLHQsZnVuY3Rpb24obixvLHMpeyFpJiYhanMobixlLmNoYXJ0QXJlYSwwKXx8bi5pblJhbmdlKHQueCx0LnkscikmJmEucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpvLGluZGV4OnN9KX0sITApLGF9ZnVuY3Rpb24gTmwoZSx0LG4scil7bGV0IGk9W107ZnVuY3Rpb24gYShlLG4sYSl7bGV0e3N0YXJ0QW5nbGU6byxlbmRBbmdsZTpzfT1lLmdldFByb3BzKFtgc3RhcnRBbmdsZWAsYGVuZEFuZ2xlYF0scikse2FuZ2xlOmN9PUZvKGUse3g6dC54LHk6dC55fSk7Um8oYyxvLHMpJiZpLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6bixpbmRleDphfSl9cmV0dXJuIEFsKGUsbix0LGEpLGl9ZnVuY3Rpb24gUGwoZSx0LG4scixpLGEpe2xldCBvPVtdLHM9amwobiksYz0xLzA7ZnVuY3Rpb24gbChuLGwsdSl7bGV0IGQ9bi5pblJhbmdlKHQueCx0LnksaSk7aWYociYmIWQpcmV0dXJuO2xldCBmPW4uZ2V0Q2VudGVyUG9pbnQoaSk7aWYoIShhfHxlLmlzUG9pbnRJbkFyZWEoZikpJiYhZClyZXR1cm47bGV0IHA9cyh0LGYpO3A8Yz8obz1be2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6bCxpbmRleDp1fV0sYz1wKTpwPT09YyYmby5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX0pfXJldHVybiBBbChlLG4sdCxsKSxvfWZ1bmN0aW9uIEZsKGUsdCxuLHIsaSxhKXtyZXR1cm4hYSYmIWUuaXNQb2ludEluQXJlYSh0KT9bXTpuPT09YHJgJiYhcj9ObChlLHQsbixpKTpQbChlLHQsbixyLGksYSl9ZnVuY3Rpb24gSWwoZSx0LG4scixpKXtsZXQgYT1bXSxvPW49PT1geGA/YGluWFJhbmdlYDpgaW5ZUmFuZ2VgLHM9ITE7cmV0dXJuIEFsKGUsbix0LChlLHIsYyk9PntlW29dJiZlW29dKHRbbl0saSkmJihhLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6cixpbmRleDpjfSksc3x8PWUuaW5SYW5nZSh0LngsdC55LGkpKX0pLHImJiFzP1tdOmF9dmFyIExsPXtldmFsdWF0ZUludGVyYWN0aW9uSXRlbXM6QWwsbW9kZXM6e2luZGV4KGUsdCxuLHIpe2xldCBpPUNjKHQsZSksYT1uLmF4aXN8fGB4YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9NbChlLGksYSxyLG8pOkZsKGUsaSxhLCExLHIsbyksYz1bXTtyZXR1cm4gcy5sZW5ndGg/KGUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goZT0+e2xldCB0PXNbMF0uaW5kZXgsbj1lLmRhdGFbdF07biYmIW4uc2tpcCYmYy5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmUuaW5kZXgsaW5kZXg6dH0pfSksYyk6W119LGRhdGFzZXQoZSx0LG4scil7bGV0IGk9Q2ModCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9NbChlLGksYSxyLG8pOkZsKGUsaSxhLCExLHIsbyk7aWYocy5sZW5ndGg+MCl7bGV0IHQ9c1swXS5kYXRhc2V0SW5kZXgsbj1lLmdldERhdGFzZXRNZXRhKHQpLmRhdGE7cz1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzLnB1c2goe2VsZW1lbnQ6bltlXSxkYXRhc2V0SW5kZXg6dCxpbmRleDplfSl9cmV0dXJuIHN9LHBvaW50KGUsdCxuLHIpe3JldHVybiBNbChlLENjKHQsZSksbi5heGlzfHxgeHlgLHIsbi5pbmNsdWRlSW52aXNpYmxlfHwhMSl9LG5lYXJlc3QoZSx0LG4scil7bGV0IGk9Q2ModCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITE7cmV0dXJuIEZsKGUsaSxhLG4uaW50ZXJzZWN0LHIsbyl9LHgoZSx0LG4scil7cmV0dXJuIElsKGUsQ2ModCxlKSxgeGAsbi5pbnRlcnNlY3Qscil9LHkoZSx0LG4scil7cmV0dXJuIElsKGUsQ2ModCxlKSxgeWAsbi5pbnRlcnNlY3Qscil9fX0sUmw9W2BsZWZ0YCxgdG9wYCxgcmlnaHRgLGBib3R0b21gXTtmdW5jdGlvbiB6bChlLHQpe3JldHVybiBlLmZpbHRlcihlPT5lLnBvcz09PXQpfWZ1bmN0aW9uIEJsKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGU9PlJsLmluZGV4T2YoZS5wb3MpPT09LTEmJmUuYm94LmF4aXM9PT10KX1mdW5jdGlvbiBWbChlLHQpe3JldHVybiBlLnNvcnQoKGUsbik9PntsZXQgcj10P246ZSxpPXQ/ZTpuO3JldHVybiByLndlaWdodD09PWkud2VpZ2h0P3IuaW5kZXgtaS5pbmRleDpyLndlaWdodC1pLndlaWdodH0pfWZ1bmN0aW9uIEhsKGUpe2xldCB0PVtdLG4scixpLGEsbyxzO2ZvcihuPTAscj0oZXx8W10pLmxlbmd0aDtuPHI7KytuKWk9ZVtuXSx7cG9zaXRpb246YSxvcHRpb25zOntzdGFjazpvLHN0YWNrV2VpZ2h0OnM9MX19PWksdC5wdXNoKHtpbmRleDpuLGJveDppLHBvczphLGhvcml6b250YWw6aS5pc0hvcml6b250YWwoKSx3ZWlnaHQ6aS53ZWlnaHQsc3RhY2s6byYmYStvLHN0YWNrV2VpZ2h0OnN9KTtyZXR1cm4gdH1mdW5jdGlvbiBVbChlKXtsZXQgdD17fTtmb3IobGV0IG4gb2YgZSl7bGV0e3N0YWNrOmUscG9zOnIsc3RhY2tXZWlnaHQ6aX09bjtpZighZXx8IVJsLmluY2x1ZGVzKHIpKWNvbnRpbnVlO2xldCBhPXRbZV18fCh0W2VdPXtjb3VudDowLHBsYWNlZDowLHdlaWdodDowLHNpemU6MH0pO2EuY291bnQrKyxhLndlaWdodCs9aX1yZXR1cm4gdH1mdW5jdGlvbiBXbChlLHQpe2xldCBuPVVsKGUpLHt2Qm94TWF4V2lkdGg6cixoQm94TWF4SGVpZ2h0Oml9PXQsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2Epe3M9ZVthXTtsZXR7ZnVsbFNpemU6b309cy5ib3gsYz1uW3Muc3RhY2tdLGw9YyYmcy5zdGFja1dlaWdodC9jLndlaWdodDtzLmhvcml6b250YWw/KHMud2lkdGg9bD9sKnI6byYmdC5hdmFpbGFibGVXaWR0aCxzLmhlaWdodD1pKToocy53aWR0aD1yLHMuaGVpZ2h0PWw/bCppOm8mJnQuYXZhaWxhYmxlSGVpZ2h0KX1yZXR1cm4gbn1mdW5jdGlvbiBHbChlKXtsZXQgdD1IbChlKSxuPVZsKHQuZmlsdGVyKGU9PmUuYm94LmZ1bGxTaXplKSwhMCkscj1WbCh6bCh0LGBsZWZ0YCksITApLGk9VmwoemwodCxgcmlnaHRgKSksYT1WbCh6bCh0LGB0b3BgKSwhMCksbz1WbCh6bCh0LGBib3R0b21gKSkscz1CbCh0LGB4YCksYz1CbCh0LGB5YCk7cmV0dXJue2Z1bGxTaXplOm4sbGVmdEFuZFRvcDpyLmNvbmNhdChhKSxyaWdodEFuZEJvdHRvbTppLmNvbmNhdChjKS5jb25jYXQobykuY29uY2F0KHMpLGNoYXJ0QXJlYTp6bCh0LGBjaGFydEFyZWFgKSx2ZXJ0aWNhbDpyLmNvbmNhdChpKS5jb25jYXQoYyksaG9yaXpvbnRhbDphLmNvbmNhdChvKS5jb25jYXQocyl9fWZ1bmN0aW9uIEtsKGUsdCxuLHIpe3JldHVybiBNYXRoLm1heChlW25dLHRbbl0pK01hdGgubWF4KGVbcl0sdFtyXSl9ZnVuY3Rpb24gcWwoZSx0KXtlLnRvcD1NYXRoLm1heChlLnRvcCx0LnRvcCksZS5sZWZ0PU1hdGgubWF4KGUubGVmdCx0LmxlZnQpLGUuYm90dG9tPU1hdGgubWF4KGUuYm90dG9tLHQuYm90dG9tKSxlLnJpZ2h0PU1hdGgubWF4KGUucmlnaHQsdC5yaWdodCl9ZnVuY3Rpb24gSmwoZSx0LG4scil7bGV0e3BvczppLGJveDphfT1uLG89ZS5tYXhQYWRkaW5nO2lmKCFHKGkpKXtuLnNpemUmJihlW2ldLT1uLnNpemUpO2xldCB0PXJbbi5zdGFja118fHtzaXplOjAsY291bnQ6MX07dC5zaXplPU1hdGgubWF4KHQuc2l6ZSxuLmhvcml6b250YWw/YS5oZWlnaHQ6YS53aWR0aCksbi5zaXplPXQuc2l6ZS90LmNvdW50LGVbaV0rPW4uc2l6ZX1hLmdldFBhZGRpbmcmJnFsKG8sYS5nZXRQYWRkaW5nKCkpO2xldCBzPU1hdGgubWF4KDAsdC5vdXRlcldpZHRoLUtsKG8sZSxgbGVmdGAsYHJpZ2h0YCkpLGM9TWF0aC5tYXgoMCx0Lm91dGVySGVpZ2h0LUtsKG8sZSxgdG9wYCxgYm90dG9tYCkpLGw9cyE9PWUudyx1PWMhPT1lLmg7cmV0dXJuIGUudz1zLGUuaD1jLG4uaG9yaXpvbnRhbD97c2FtZTpsLG90aGVyOnV9OntzYW1lOnUsb3RoZXI6bH19ZnVuY3Rpb24gWWwoZSl7bGV0IHQ9ZS5tYXhQYWRkaW5nO2Z1bmN0aW9uIG4obil7bGV0IHI9TWF0aC5tYXgodFtuXS1lW25dLDApO3JldHVybiBlW25dKz1yLHJ9ZS55Kz1uKGB0b3BgKSxlLngrPW4oYGxlZnRgKSxuKGByaWdodGApLG4oYGJvdHRvbWApfWZ1bmN0aW9uIFhsKGUsdCl7bGV0IG49dC5tYXhQYWRkaW5nO2Z1bmN0aW9uIHIoZSl7bGV0IHI9e2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfTtyZXR1cm4gZS5mb3JFYWNoKGU9PntyW2VdPU1hdGgubWF4KHRbZV0sbltlXSl9KSxyfXJldHVybiByKGU/W2BsZWZ0YCxgcmlnaHRgXTpbYHRvcGAsYGJvdHRvbWBdKX1mdW5jdGlvbiBabChlLHQsbixyKXtsZXQgaT1bXSxhLG8scyxjLGwsdTtmb3IoYT0wLG89ZS5sZW5ndGgsbD0wO2E8bzsrK2Epe3M9ZVthXSxjPXMuYm94LGMudXBkYXRlKHMud2lkdGh8fHQudyxzLmhlaWdodHx8dC5oLFhsKHMuaG9yaXpvbnRhbCx0KSk7bGV0e3NhbWU6byxvdGhlcjpkfT1KbCh0LG4scyxyKTtsfD1vJiZpLmxlbmd0aCx1fHw9ZCxjLmZ1bGxTaXplfHxpLnB1c2gocyl9cmV0dXJuIGwmJlpsKGksdCxuLHIpfHx1fWZ1bmN0aW9uIFFsKGUsdCxuLHIsaSl7ZS50b3A9bixlLmxlZnQ9dCxlLnJpZ2h0PXQrcixlLmJvdHRvbT1uK2ksZS53aWR0aD1yLGUuaGVpZ2h0PWl9ZnVuY3Rpb24gJGwoZSx0LG4scil7bGV0IGk9bi5wYWRkaW5nLHt4OmEseTpvfT10O2ZvcihsZXQgcyBvZiBlKXtsZXQgZT1zLmJveCxjPXJbcy5zdGFja118fHtjb3VudDoxLHBsYWNlZDowLHdlaWdodDoxfSxsPXMuc3RhY2tXZWlnaHQvYy53ZWlnaHR8fDE7aWYocy5ob3Jpem9udGFsKXtsZXQgcj10LncqbCxhPWMuc2l6ZXx8ZS5oZWlnaHQ7cG8oYy5zdGFydCkmJihvPWMuc3RhcnQpLGUuZnVsbFNpemU/UWwoZSxpLmxlZnQsbyxuLm91dGVyV2lkdGgtaS5yaWdodC1pLmxlZnQsYSk6UWwoZSx0LmxlZnQrYy5wbGFjZWQsbyxyLGEpLGMuc3RhcnQ9byxjLnBsYWNlZCs9cixvPWUuYm90dG9tfWVsc2V7bGV0IHI9dC5oKmwsbz1jLnNpemV8fGUud2lkdGg7cG8oYy5zdGFydCkmJihhPWMuc3RhcnQpLGUuZnVsbFNpemU/UWwoZSxhLGkudG9wLG8sbi5vdXRlckhlaWdodC1pLmJvdHRvbS1pLnRvcCk6UWwoZSxhLHQudG9wK2MucGxhY2VkLG8sciksYy5zdGFydD1hLGMucGxhY2VkKz1yLGE9ZS5yaWdodH19dC54PWEsdC55PW99dmFyIGV1PXthZGRCb3goZSx0KXtlLmJveGVzfHw9W10sdC5mdWxsU2l6ZT10LmZ1bGxTaXplfHwhMSx0LnBvc2l0aW9uPXQucG9zaXRpb258fGB0b3BgLHQud2VpZ2h0PXQud2VpZ2h0fHwwLHQuX2xheWVycz10Ll9sYXllcnN8fGZ1bmN0aW9uKCl7cmV0dXJuW3t6OjAsZHJhdyhlKXt0LmRyYXcoZSl9fV19LGUuYm94ZXMucHVzaCh0KX0scmVtb3ZlQm94KGUsdCl7bGV0IG49ZS5ib3hlcz9lLmJveGVzLmluZGV4T2YodCk6LTE7biE9PS0xJiZlLmJveGVzLnNwbGljZShuLDEpfSxjb25maWd1cmUoZSx0LG4pe3QuZnVsbFNpemU9bi5mdWxsU2l6ZSx0LnBvc2l0aW9uPW4ucG9zaXRpb24sdC53ZWlnaHQ9bi53ZWlnaHR9LHVwZGF0ZShlLHQsbixyKXtpZighZSlyZXR1cm47bGV0IGk9UShlLm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpLGE9TWF0aC5tYXgodC1pLndpZHRoLDApLG89TWF0aC5tYXgobi1pLmhlaWdodCwwKSxzPUdsKGUuYm94ZXMpLGM9cy52ZXJ0aWNhbCxsPXMuaG9yaXpvbnRhbDtZKGUuYm94ZXMsZT0+e3R5cGVvZiBlLmJlZm9yZUxheW91dD09YGZ1bmN0aW9uYCYmZS5iZWZvcmVMYXlvdXQoKX0pO2xldCB1PWMucmVkdWNlKChlLHQpPT50LmJveC5vcHRpb25zJiZ0LmJveC5vcHRpb25zLmRpc3BsYXk9PT0hMT9lOmUrMSwwKXx8MSxkPU9iamVjdC5mcmVlemUoe291dGVyV2lkdGg6dCxvdXRlckhlaWdodDpuLHBhZGRpbmc6aSxhdmFpbGFibGVXaWR0aDphLGF2YWlsYWJsZUhlaWdodDpvLHZCb3hNYXhXaWR0aDphLzIvdSxoQm94TWF4SGVpZ2h0Om8vMn0pLGY9T2JqZWN0LmFzc2lnbih7fSxpKTtxbChmLFEocikpO2xldCBwPU9iamVjdC5hc3NpZ24oe21heFBhZGRpbmc6Zix3OmEsaDpvLHg6aS5sZWZ0LHk6aS50b3B9LGkpLG09V2woYy5jb25jYXQobCksZCk7Wmwocy5mdWxsU2l6ZSxwLGQsbSksWmwoYyxwLGQsbSksWmwobCxwLGQsbSkmJlpsKGMscCxkLG0pLFlsKHApLCRsKHMubGVmdEFuZFRvcCxwLGQsbSkscC54Kz1wLncscC55Kz1wLmgsJGwocy5yaWdodEFuZEJvdHRvbSxwLGQsbSksZS5jaGFydEFyZWE9e2xlZnQ6cC5sZWZ0LHRvcDpwLnRvcCxyaWdodDpwLmxlZnQrcC53LGJvdHRvbTpwLnRvcCtwLmgsaGVpZ2h0OnAuaCx3aWR0aDpwLnd9LFkocy5jaGFydEFyZWEsdD0+e2xldCBuPXQuYm94O09iamVjdC5hc3NpZ24obixlLmNoYXJ0QXJlYSksbi51cGRhdGUocC53LHAuaCx7bGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjB9KX0pfX0sdHU9Y2xhc3N7YWNxdWlyZUNvbnRleHQoZSx0KXt9cmVsZWFzZUNvbnRleHQoZSl7cmV0dXJuITF9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7fXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LG4pe31nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIDF9Z2V0TWF4aW11bVNpemUoZSx0LG4scil7cmV0dXJuIHQ9TWF0aC5tYXgoMCx0fHxlLndpZHRoKSxufHw9ZS5oZWlnaHQse3dpZHRoOnQsaGVpZ2h0Ok1hdGgubWF4KDAscj9NYXRoLmZsb29yKHQvcik6bil9fWlzQXR0YWNoZWQoZSl7cmV0dXJuITB9dXBkYXRlQ29uZmlnKGUpe319LG51PWNsYXNzIGV4dGVuZHMgdHV7YWNxdWlyZUNvbnRleHQoZSl7cmV0dXJuIGUmJmUuZ2V0Q29udGV4dCYmZS5nZXRDb250ZXh0KGAyZGApfHxudWxsfXVwZGF0ZUNvbmZpZyhlKXtlLm9wdGlvbnMuYW5pbWF0aW9uPSExfX0scnU9YCRjaGFydGpzYCxpdT17dG91Y2hzdGFydDpgbW91c2Vkb3duYCx0b3VjaG1vdmU6YG1vdXNlbW92ZWAsdG91Y2hlbmQ6YG1vdXNldXBgLHBvaW50ZXJlbnRlcjpgbW91c2VlbnRlcmAscG9pbnRlcmRvd246YG1vdXNlZG93bmAscG9pbnRlcm1vdmU6YG1vdXNlbW92ZWAscG9pbnRlcnVwOmBtb3VzZXVwYCxwb2ludGVybGVhdmU6YG1vdXNlb3V0YCxwb2ludGVyb3V0OmBtb3VzZW91dGB9LGF1PWU9PmU9PT1udWxsfHxlPT09YGA7ZnVuY3Rpb24gb3UoZSx0KXtsZXQgbj1lLnN0eWxlLHI9ZS5nZXRBdHRyaWJ1dGUoYGhlaWdodGApLGk9ZS5nZXRBdHRyaWJ1dGUoYHdpZHRoYCk7aWYoZVtydV09e2luaXRpYWw6e2hlaWdodDpyLHdpZHRoOmksc3R5bGU6e2Rpc3BsYXk6bi5kaXNwbGF5LGhlaWdodDpuLmhlaWdodCx3aWR0aDpuLndpZHRofX19LG4uZGlzcGxheT1uLmRpc3BsYXl8fGBibG9ja2Asbi5ib3hTaXppbmc9bi5ib3hTaXppbmd8fGBib3JkZXItYm94YCxhdShpKSl7bGV0IHQ9a2MoZSxgd2lkdGhgKTt0IT09dm9pZCAwJiYoZS53aWR0aD10KX1pZihhdShyKSl7aWYoZS5zdHlsZS5oZWlnaHQ9PT1gYCllLmhlaWdodD1lLndpZHRoLyh0fHwyKTtlbHNle2xldCB0PWtjKGUsYGhlaWdodGApO3QhPT12b2lkIDAmJihlLmhlaWdodD10KX19cmV0dXJuIGV9dmFyIHN1PU9jP3twYXNzaXZlOiEwfTohMTtmdW5jdGlvbiBjdShlLHQsbil7ZSYmZS5hZGRFdmVudExpc3RlbmVyKHQsbixzdSl9ZnVuY3Rpb24gbHUoZSx0LG4pe2UmJmUuY2FudmFzJiZlLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixzdSl9ZnVuY3Rpb24gdXUoZSx0KXtsZXQgbj1pdVtlLnR5cGVdfHxlLnR5cGUse3g6cix5Oml9PUNjKGUsdCk7cmV0dXJue3R5cGU6bixjaGFydDp0LG5hdGl2ZTplLHg6cj09PXZvaWQgMD9udWxsOnIseTppPT09dm9pZCAwP251bGw6aX19ZnVuY3Rpb24gZHUoZSx0KXtmb3IobGV0IG4gb2YgZSlpZihuPT09dHx8bi5jb250YWlucyh0KSlyZXR1cm4hMH1mdW5jdGlvbiBmdShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PWR1KG4uYWRkZWROb2RlcyxyKSx0JiY9IWR1KG4ucmVtb3ZlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX1mdW5jdGlvbiBwdShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PWR1KG4ucmVtb3ZlZE5vZGVzLHIpLHQmJj0hZHUobi5hZGRlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX12YXIgbXU9bmV3IE1hcCxodT0wO2Z1bmN0aW9uIGd1KCl7bGV0IGU9d2luZG93LmRldmljZVBpeGVsUmF0aW87ZSE9PWh1JiYoaHU9ZSxtdS5mb3JFYWNoKCh0LG4pPT57bi5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PWUmJnQoKX0pKX1mdW5jdGlvbiBfdShlLHQpe211LnNpemV8fHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLGd1KSxtdS5zZXQoZSx0KX1mdW5jdGlvbiB2dShlKXttdS5kZWxldGUoZSksbXUuc2l6ZXx8d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsZ3UpfWZ1bmN0aW9uIHl1KGUsdCxuKXtsZXQgcj1lLmNhbnZhcyxpPXImJmhjKHIpO2lmKCFpKXJldHVybjtsZXQgYT1abygoZSx0KT0+e2xldCByPWkuY2xpZW50V2lkdGg7bihlLHQpLHI8aS5jbGllbnRXaWR0aCYmbigpfSx3aW5kb3cpLG89bmV3IFJlc2l6ZU9ic2VydmVyKGU9PntsZXQgdD1lWzBdLG49dC5jb250ZW50UmVjdC53aWR0aCxyPXQuY29udGVudFJlY3QuaGVpZ2h0OyhuIT09MHx8ciE9PTApJiZhKG4scil9KTtyZXR1cm4gby5vYnNlcnZlKGkpLF91KGUsYSksb31mdW5jdGlvbiBidShlLHQsbil7biYmbi5kaXNjb25uZWN0KCksdD09PWByZXNpemVgJiZ2dShlKX1mdW5jdGlvbiB4dShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1abyh0PT57ZS5jdHghPT1udWxsJiZuKHV1KHQsZSkpfSxlKTtyZXR1cm4gY3Uocix0LGkpLGl9dmFyIFN1PWNsYXNzIGV4dGVuZHMgdHV7YWNxdWlyZUNvbnRleHQoZSx0KXtsZXQgbj1lJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKTtyZXR1cm4gbiYmbi5jYW52YXM9PT1lPyhvdShlLHQpLG4pOm51bGx9cmVsZWFzZUNvbnRleHQoZSl7bGV0IHQ9ZS5jYW52YXM7aWYoIXRbcnVdKXJldHVybiExO2xldCBuPXRbcnVdLmluaXRpYWw7W2BoZWlnaHRgLGB3aWR0aGBdLmZvckVhY2goZT0+e2xldCByPW5bZV07VShyKT90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0ZShlLHIpfSk7bGV0IHI9bi5zdHlsZXx8e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZT0+e3Quc3R5bGVbZV09cltlXX0pLHQud2lkdGg9dC53aWR0aCxkZWxldGUgdFtydV0sITB9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCk7bGV0IHI9ZS4kcHJveGllc3x8PXt9O3JbdF09KHthdHRhY2g6ZnUsZGV0YWNoOnB1LHJlc2l6ZTp5dX1bdF18fHh1KShlLHQsbil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpe2xldCBuPWUuJHByb3hpZXN8fD17fSxyPW5bdF07ciYmKCh7YXR0YWNoOmJ1LGRldGFjaDpidSxyZXNpemU6YnV9W3RdfHxsdSkoZSx0LHIpLG5bdF09dm9pZCAwKX1nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiBFYyhlLHQsbixyKX1pc0F0dGFjaGVkKGUpe2xldCB0PWUmJmhjKGUpO3JldHVybiEhKHQmJnQuaXNDb25uZWN0ZWQpfX07ZnVuY3Rpb24gQ3UoZSl7cmV0dXJuIW1jKCl8fHR5cGVvZiBPZmZzY3JlZW5DYW52YXM8YHVgJiZlIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzP251OlN1fXZhciB3dT1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9e307c3RhdGljIGRlZmF1bHRSb3V0ZXM9dm9pZCAwO3g7eTthY3RpdmU9ITE7b3B0aW9uczskYW5pbWF0aW9uczt0b29sdGlwUG9zaXRpb24oZSl7bGV0e3g6dCx5Om59PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWBdLGUpO3JldHVybnt4OnQseTpufX1oYXNWYWx1ZSgpe3JldHVybiBrbyh0aGlzLngpJiZrbyh0aGlzLnkpfWdldFByb3BzKGUsdCl7bGV0IG49dGhpcy4kYW5pbWF0aW9ucztpZighdHx8IW4pcmV0dXJuIHRoaXM7bGV0IHI9e307cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1uW2VdJiZuW2VdLmFjdGl2ZSgpP25bZV0uX3RvOnRoaXNbZV19KSxyfX07ZnVuY3Rpb24gVHUoZSx0KXtsZXQgbj1lLm9wdGlvbnMudGlja3Mscj1FdShlKSxpPU1hdGgubWluKG4ubWF4VGlja3NMaW1pdHx8cixyKSxhPW4ubWFqb3IuZW5hYmxlZD9PdSh0KTpbXSxvPWEubGVuZ3RoLHM9YVswXSxjPWFbby0xXSxsPVtdO2lmKG8+aSlyZXR1cm4ga3UodCxsLGEsby9pKSxsO2xldCB1PUR1KGEsdCxpKTtpZihvPjApe2xldCBlLG4scj1vPjE/TWF0aC5yb3VuZCgoYy1zKS8oby0xKSk6bnVsbDtmb3IoQXUodCxsLHUsVShyKT8wOnMtcixzKSxlPTAsbj1vLTE7ZTxuO2UrKylBdSh0LGwsdSxhW2VdLGFbZSsxXSk7cmV0dXJuIEF1KHQsbCx1LGMsVShyKT90Lmxlbmd0aDpjK3IpLGx9cmV0dXJuIEF1KHQsbCx1KSxsfWZ1bmN0aW9uIEV1KGUpe2xldCB0PWUub3B0aW9ucy5vZmZzZXQsbj1lLl90aWNrU2l6ZSgpLHI9ZS5fbGVuZ3RoL24rICshdCxpPWUuX21heExlbmd0aC9uO3JldHVybiBNYXRoLmZsb29yKE1hdGgubWluKHIsaSkpfWZ1bmN0aW9uIER1KGUsdCxuKXtsZXQgcj1qdShlKSxpPXQubGVuZ3RoL247aWYoIXIpcmV0dXJuIE1hdGgubWF4KGksMSk7bGV0IGE9RG8ocik7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aC0xO2U8dDtlKyspe2xldCB0PWFbZV07aWYodD5pKXJldHVybiB0fXJldHVybiBNYXRoLm1heChpLDEpfWZ1bmN0aW9uIE91KGUpe2xldCB0PVtdLG4scjtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dLm1ham9yJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24ga3UoZSx0LG4scil7bGV0IGk9MCxhPW5bMF0sbztmb3Iocj1NYXRoLmNlaWwociksbz0wO288ZS5sZW5ndGg7bysrKW89PT1hJiYodC5wdXNoKGVbb10pLGkrKyxhPW5baSpyXSl9ZnVuY3Rpb24gQXUoZSx0LG4scixpKXtsZXQgYT1xKHIsMCksbz1NYXRoLm1pbihxKGksZS5sZW5ndGgpLGUubGVuZ3RoKSxzPTAsYyxsLHU7Zm9yKG49TWF0aC5jZWlsKG4pLGkmJihjPWktcixuPWMvTWF0aC5mbG9vcihjL24pKSx1PWE7dTwwOylzKyssdT1NYXRoLnJvdW5kKGErcypuKTtmb3IobD1NYXRoLm1heChhLDApO2w8bztsKyspbD09PXUmJih0LnB1c2goZVtsXSkscysrLHU9TWF0aC5yb3VuZChhK3MqbikpfWZ1bmN0aW9uIGp1KGUpe2xldCB0PWUubGVuZ3RoLG4scjtpZih0PDIpcmV0dXJuITE7Zm9yKHI9ZVswXSxuPTE7bjx0OysrbilpZihlW25dLWVbbi0xXSE9PXIpcmV0dXJuITE7cmV0dXJuIHJ9dmFyIE11PWU9PmU9PT1gbGVmdGA/YHJpZ2h0YDplPT09YHJpZ2h0YD9gbGVmdGA6ZSxOdT0oZSx0LG4pPT50PT09YHRvcGB8fHQ9PT1gbGVmdGA/ZVt0XStuOmVbdF0tbixQdT0oZSx0KT0+TWF0aC5taW4odHx8ZSxlKTtmdW5jdGlvbiBGdShlLHQpe2xldCBuPVtdLHI9ZS5sZW5ndGgvdCxpPWUubGVuZ3RoLGE9MDtmb3IoO2E8aTthKz1yKW4ucHVzaChlW01hdGguZmxvb3IoYSldKTtyZXR1cm4gbn1mdW5jdGlvbiBJdShlLHQsbil7bGV0IHI9ZS50aWNrcy5sZW5ndGgsaT1NYXRoLm1pbih0LHItMSksYT1lLl9zdGFydFBpeGVsLG89ZS5fZW5kUGl4ZWwscz0xZS02LGM9ZS5nZXRQaXhlbEZvclRpY2soaSksbDtpZighKG4mJihsPXI9PT0xP01hdGgubWF4KGMtYSxvLWMpOnQ9PT0wPyhlLmdldFBpeGVsRm9yVGljaygxKS1jKS8yOihjLWUuZ2V0UGl4ZWxGb3JUaWNrKGktMSkpLzIsYys9aTx0P2w6LWwsYzxhLXN8fGM+bytzKSkpcmV0dXJuIGN9ZnVuY3Rpb24gTHUoZSx0KXtZKGUsZT0+e2xldCBuPWUuZ2Mscj1uLmxlbmd0aC8yLGk7aWYocj50KXtmb3IoaT0wO2k8cjsrK2kpZGVsZXRlIGUuZGF0YVtuW2ldXTtuLnNwbGljZSgwLHIpfX0pfWZ1bmN0aW9uIFJ1KGUpe3JldHVybiBlLmRyYXdUaWNrcz9lLnRpY2tMZW5ndGg6MH1mdW5jdGlvbiB6dShlLHQpe2lmKCFlLmRpc3BsYXkpcmV0dXJuIDA7bGV0IG49JChlLmZvbnQsdCkscj1RKGUucGFkZGluZyk7cmV0dXJuKFcoZS50ZXh0KT9lLnRleHQubGVuZ3RoOjEpKm4ubGluZUhlaWdodCtyLmhlaWdodH1mdW5jdGlvbiBCdShlLHQpe3JldHVybiBKcyhlLHtzY2FsZTp0LHR5cGU6YHNjYWxlYH0pfWZ1bmN0aW9uIFZ1KGUsdCxuKXtyZXR1cm4gSnMoZSx7dGljazpuLGluZGV4OnQsdHlwZTpgdGlja2B9KX1mdW5jdGlvbiBIdShlLHQsbil7bGV0IHI9JG8oZSk7cmV0dXJuKG4mJnQhPT1gcmlnaHRgfHwhbiYmdD09PWByaWdodGApJiYocj1NdShyKSkscn1mdW5jdGlvbiBVdShlLHQsbixyKXtsZXR7dG9wOmksbGVmdDphLGJvdHRvbTpvLHJpZ2h0OnMsY2hhcnQ6Y309ZSx7Y2hhcnRBcmVhOmwsc2NhbGVzOnV9PWMsZD0wLGYscCxtLGg9by1pLGc9cy1hO2lmKGUuaXNIb3Jpem9udGFsKCkpe2lmKHA9ZXMocixhLHMpLEcobikpe2xldCBlPU9iamVjdC5rZXlzKG4pWzBdLHI9bltlXTttPXVbZV0uZ2V0UGl4ZWxGb3JWYWx1ZShyKStoLXR9ZWxzZSBtPW49PT1gY2VudGVyYD8obC5ib3R0b20rbC50b3ApLzIraC10Ok51KGUsbix0KTtmPXMtYX1lbHNle2lmKEcobikpe2xldCBlPU9iamVjdC5rZXlzKG4pWzBdLHI9bltlXTtwPXVbZV0uZ2V0UGl4ZWxGb3JWYWx1ZShyKS1nK3R9ZWxzZSBwPW49PT1gY2VudGVyYD8obC5sZWZ0K2wucmlnaHQpLzItZyt0Ok51KGUsbix0KTttPWVzKHIsbyxpKSxkPW49PT1gbGVmdGA/LWJvOmJvfXJldHVybnt0aXRsZVg6cCx0aXRsZVk6bSxtYXhXaWR0aDpmLHJvdGF0aW9uOmR9fXZhciBXdT1jbGFzcyBlIGV4dGVuZHMgd3V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmlkPWUuaWQsdGhpcy50eXBlPWUudHlwZSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuY3R4PWUuY3R4LHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLnRvcD12b2lkIDAsdGhpcy5ib3R0b209dm9pZCAwLHRoaXMubGVmdD12b2lkIDAsdGhpcy5yaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuX21hcmdpbnM9e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSx0aGlzLm1heFdpZHRoPXZvaWQgMCx0aGlzLm1heEhlaWdodD12b2lkIDAsdGhpcy5wYWRkaW5nVG9wPXZvaWQgMCx0aGlzLnBhZGRpbmdCb3R0b209dm9pZCAwLHRoaXMucGFkZGluZ0xlZnQ9dm9pZCAwLHRoaXMucGFkZGluZ1JpZ2h0PXZvaWQgMCx0aGlzLmF4aXM9dm9pZCAwLHRoaXMubGFiZWxSb3RhdGlvbj12b2lkIDAsdGhpcy5taW49dm9pZCAwLHRoaXMubWF4PXZvaWQgMCx0aGlzLl9yYW5nZT12b2lkIDAsdGhpcy50aWNrcz1bXSx0aGlzLl9ncmlkTGluZUl0ZW1zPW51bGwsdGhpcy5fbGFiZWxJdGVtcz1udWxsLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9tYXhMZW5ndGg9MCx0aGlzLl9sb25nZXN0VGV4dENhY2hlPXt9LHRoaXMuX3N0YXJ0UGl4ZWw9dm9pZCAwLHRoaXMuX2VuZFBpeGVsPXZvaWQgMCx0aGlzLl9yZXZlcnNlUGl4ZWxzPSExLHRoaXMuX3VzZXJNYXg9dm9pZCAwLHRoaXMuX3VzZXJNaW49dm9pZCAwLHRoaXMuX3N1Z2dlc3RlZE1heD12b2lkIDAsdGhpcy5fc3VnZ2VzdGVkTWluPXZvaWQgMCx0aGlzLl90aWNrc0xlbmd0aD0wLHRoaXMuX2JvcmRlclZhbHVlPTAsdGhpcy5fY2FjaGU9e30sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZD0hMSx0aGlzLiRjb250ZXh0PXZvaWQgMH1pbml0KGUpe3RoaXMub3B0aW9ucz1lLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHRoaXMuYXhpcz1lLmF4aXMsdGhpcy5fdXNlck1pbj10aGlzLnBhcnNlKGUubWluKSx0aGlzLl91c2VyTWF4PXRoaXMucGFyc2UoZS5tYXgpLHRoaXMuX3N1Z2dlc3RlZE1pbj10aGlzLnBhcnNlKGUuc3VnZ2VzdGVkTWluKSx0aGlzLl9zdWdnZXN0ZWRNYXg9dGhpcy5wYXJzZShlLnN1Z2dlc3RlZE1heCl9cGFyc2UoZSx0KXtyZXR1cm4gZX1nZXRVc2VyQm91bmRzKCl7bGV0e191c2VyTWluOmUsX3VzZXJNYXg6dCxfc3VnZ2VzdGVkTWluOm4sX3N1Z2dlc3RlZE1heDpyfT10aGlzO3JldHVybiBlPVFhKGUsMS8wKSx0PVFhKHQsLTEvMCksbj1RYShuLDEvMCkscj1RYShyLC0xLzApLHttaW46UWEoZSxuKSxtYXg6UWEodCxyKSxtaW5EZWZpbmVkOksoZSksbWF4RGVmaW5lZDpLKHQpfX1nZXRNaW5NYXgoZSl7bGV0e21pbjp0LG1heDpuLG1pbkRlZmluZWQ6cixtYXhEZWZpbmVkOml9PXRoaXMuZ2V0VXNlckJvdW5kcygpLGE7aWYociYmaSlyZXR1cm57bWluOnQsbWF4Om59O2xldCBvPXRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtmb3IobGV0IHM9MCxjPW8ubGVuZ3RoO3M8YzsrK3MpYT1vW3NdLmNvbnRyb2xsZXIuZ2V0TWluTWF4KHRoaXMsZSkscnx8KHQ9TWF0aC5taW4odCxhLm1pbikpLGl8fChuPU1hdGgubWF4KG4sYS5tYXgpKTtyZXR1cm4gdD1pJiZ0Pm4/bjp0LG49ciYmdD5uP3Q6bix7bWluOlFhKHQsUWEobix0KSksbWF4OlFhKG4sUWEodCxuKSl9fWdldFBhZGRpbmcoKXtyZXR1cm57bGVmdDp0aGlzLnBhZGRpbmdMZWZ0fHwwLHRvcDp0aGlzLnBhZGRpbmdUb3B8fDAscmlnaHQ6dGhpcy5wYWRkaW5nUmlnaHR8fDAsYm90dG9tOnRoaXMucGFkZGluZ0JvdHRvbXx8MH19Z2V0VGlja3MoKXtyZXR1cm4gdGhpcy50aWNrc31nZXRMYWJlbHMoKXtsZXQgZT10aGlzLmNoYXJ0LmRhdGE7cmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbHN8fCh0aGlzLmlzSG9yaXpvbnRhbCgpP2UueExhYmVsczplLnlMYWJlbHMpfHxlLmxhYmVsc3x8W119Z2V0TGFiZWxJdGVtcyhlPXRoaXMuY2hhcnQuY2hhcnRBcmVhKXtyZXR1cm4gdGhpcy5fbGFiZWxJdGVtc3x8PXRoaXMuX2NvbXB1dGVMYWJlbEl0ZW1zKGUpfWJlZm9yZUxheW91dCgpe3RoaXMuX2NhY2hlPXt9LHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQ9ITF9YmVmb3JlVXBkYXRlKCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlVXBkYXRlLFt0aGlzXSl9dXBkYXRlKGUsdCxuKXtsZXR7YmVnaW5BdFplcm86cixncmFjZTppLHRpY2tzOmF9PXRoaXMub3B0aW9ucyxvPWEuc2FtcGxlU2l6ZTt0aGlzLmJlZm9yZVVwZGF0ZSgpLHRoaXMubWF4V2lkdGg9ZSx0aGlzLm1heEhlaWdodD10LHRoaXMuX21hcmdpbnM9bj1PYmplY3QuYXNzaWduKHtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sbiksdGhpcy50aWNrcz1udWxsLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLl9ncmlkTGluZUl0ZW1zPW51bGwsdGhpcy5fbGFiZWxJdGVtcz1udWxsLHRoaXMuYmVmb3JlU2V0RGltZW5zaW9ucygpLHRoaXMuc2V0RGltZW5zaW9ucygpLHRoaXMuYWZ0ZXJTZXREaW1lbnNpb25zKCksdGhpcy5fbWF4TGVuZ3RoPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aCtuLmxlZnQrbi5yaWdodDp0aGlzLmhlaWdodCtuLnRvcCtuLmJvdHRvbSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkfHw9KHRoaXMuYmVmb3JlRGF0YUxpbWl0cygpLHRoaXMuZGV0ZXJtaW5lRGF0YUxpbWl0cygpLHRoaXMuYWZ0ZXJEYXRhTGltaXRzKCksdGhpcy5fcmFuZ2U9cXModGhpcyxpLHIpLCEwKSx0aGlzLmJlZm9yZUJ1aWxkVGlja3MoKSx0aGlzLnRpY2tzPXRoaXMuYnVpbGRUaWNrcygpfHxbXSx0aGlzLmFmdGVyQnVpbGRUaWNrcygpO2xldCBzPW88dGhpcy50aWNrcy5sZW5ndGg7dGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHMocz9GdSh0aGlzLnRpY2tzLG8pOnRoaXMudGlja3MpLHRoaXMuY29uZmlndXJlKCksdGhpcy5iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksdGhpcy5jYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksdGhpcy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSxhLmRpc3BsYXkmJihhLmF1dG9Ta2lwfHxhLnNvdXJjZT09PWBhdXRvYCkmJih0aGlzLnRpY2tzPVR1KHRoaXMsdGhpcy50aWNrcyksdGhpcy5fbGFiZWxTaXplcz1udWxsLHRoaXMuYWZ0ZXJBdXRvU2tpcCgpKSxzJiZ0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyh0aGlzLnRpY2tzKSx0aGlzLmJlZm9yZUZpdCgpLHRoaXMuZml0KCksdGhpcy5hZnRlckZpdCgpLHRoaXMuYWZ0ZXJVcGRhdGUoKX1jb25maWd1cmUoKXtsZXQgZT10aGlzLm9wdGlvbnMucmV2ZXJzZSx0LG47dGhpcy5pc0hvcml6b250YWwoKT8odD10aGlzLmxlZnQsbj10aGlzLnJpZ2h0KToodD10aGlzLnRvcCxuPXRoaXMuYm90dG9tLGU9IWUpLHRoaXMuX3N0YXJ0UGl4ZWw9dCx0aGlzLl9lbmRQaXhlbD1uLHRoaXMuX3JldmVyc2VQaXhlbHM9ZSx0aGlzLl9sZW5ndGg9bi10LHRoaXMuX2FsaWduVG9QaXhlbHM9dGhpcy5vcHRpb25zLmFsaWduVG9QaXhlbHN9YWZ0ZXJVcGRhdGUoKXtKKHRoaXMub3B0aW9ucy5hZnRlclVwZGF0ZSxbdGhpc10pfWJlZm9yZVNldERpbWVuc2lvbnMoKXtKKHRoaXMub3B0aW9ucy5iZWZvcmVTZXREaW1lbnNpb25zLFt0aGlzXSl9c2V0RGltZW5zaW9ucygpe3RoaXMuaXNIb3Jpem9udGFsKCk/KHRoaXMud2lkdGg9dGhpcy5tYXhXaWR0aCx0aGlzLmxlZnQ9MCx0aGlzLnJpZ2h0PXRoaXMud2lkdGgpOih0aGlzLmhlaWdodD10aGlzLm1heEhlaWdodCx0aGlzLnRvcD0wLHRoaXMuYm90dG9tPXRoaXMuaGVpZ2h0KSx0aGlzLnBhZGRpbmdMZWZ0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nUmlnaHQ9MCx0aGlzLnBhZGRpbmdCb3R0b209MH1hZnRlclNldERpbWVuc2lvbnMoKXtKKHRoaXMub3B0aW9ucy5hZnRlclNldERpbWVuc2lvbnMsW3RoaXNdKX1fY2FsbEhvb2tzKGUpe3RoaXMuY2hhcnQubm90aWZ5UGx1Z2lucyhlLHRoaXMuZ2V0Q29udGV4dCgpKSxKKHRoaXMub3B0aW9uc1tlXSxbdGhpc10pfWJlZm9yZURhdGFMaW1pdHMoKXt0aGlzLl9jYWxsSG9va3MoYGJlZm9yZURhdGFMaW1pdHNgKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7fWFmdGVyRGF0YUxpbWl0cygpe3RoaXMuX2NhbGxIb29rcyhgYWZ0ZXJEYXRhTGltaXRzYCl9YmVmb3JlQnVpbGRUaWNrcygpe3RoaXMuX2NhbGxIb29rcyhgYmVmb3JlQnVpbGRUaWNrc2ApfWJ1aWxkVGlja3MoKXtyZXR1cm5bXX1hZnRlckJ1aWxkVGlja3MoKXt0aGlzLl9jYWxsSG9va3MoYGFmdGVyQnVpbGRUaWNrc2ApfWJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpe0oodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbixbdGhpc10pfWdlbmVyYXRlVGlja0xhYmVscyhlKXtsZXQgdD10aGlzLm9wdGlvbnMudGlja3MsbixyLGk7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaT1lW25dLGkubGFiZWw9Sih0LmNhbGxiYWNrLFtpLnZhbHVlLG4sZV0sdGhpcyl9YWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKXtKKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbixbdGhpc10pfWJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKXtKKHRoaXMub3B0aW9ucy5iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uLFt0aGlzXSl9Y2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpe2xldCBlPXRoaXMub3B0aW9ucyx0PWUudGlja3Msbj1QdSh0aGlzLnRpY2tzLmxlbmd0aCxlLnRpY2tzLm1heFRpY2tzTGltaXQpLHI9dC5taW5Sb3RhdGlvbnx8MCxpPXQubWF4Um90YXRpb24sYT1yLG8scyxjO2lmKCF0aGlzLl9pc1Zpc2libGUoKXx8IXQuZGlzcGxheXx8cj49aXx8bjw9MXx8IXRoaXMuaXNIb3Jpem9udGFsKCkpe3RoaXMubGFiZWxSb3RhdGlvbj1yO3JldHVybn1sZXQgbD10aGlzLl9nZXRMYWJlbFNpemVzKCksdT1sLndpZGVzdC53aWR0aCxkPWwuaGlnaGVzdC5oZWlnaHQsZj16byh0aGlzLmNoYXJ0LndpZHRoLXUsMCx0aGlzLm1heFdpZHRoKTtvPWUub2Zmc2V0P3RoaXMubWF4V2lkdGgvbjpmLyhuLTEpLHUrNj5vJiYobz1mLyhuLShlLm9mZnNldD8uNToxKSkscz10aGlzLm1heEhlaWdodC1SdShlLmdyaWQpLXQucGFkZGluZy16dShlLnRpdGxlLHRoaXMuY2hhcnQub3B0aW9ucy5mb250KSxjPU1hdGguc3FydCh1KnUrZCpkKSxhPU5vKE1hdGgubWluKE1hdGguYXNpbih6bygobC5oaWdoZXN0LmhlaWdodCs2KS9vLC0xLDEpKSxNYXRoLmFzaW4oem8ocy9jLC0xLDEpKS1NYXRoLmFzaW4oem8oZC9jLC0xLDEpKSkpLGE9TWF0aC5tYXgocixNYXRoLm1pbihpLGEpKSksdGhpcy5sYWJlbFJvdGF0aW9uPWF9YWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uLFt0aGlzXSl9YWZ0ZXJBdXRvU2tpcCgpe31iZWZvcmVGaXQoKXtKKHRoaXMub3B0aW9ucy5iZWZvcmVGaXQsW3RoaXNdKX1maXQoKXtsZXQgZT17d2lkdGg6MCxoZWlnaHQ6MH0se2NoYXJ0OnQsb3B0aW9uczp7dGlja3M6bix0aXRsZTpyLGdyaWQ6aX19PXRoaXMsYT10aGlzLl9pc1Zpc2libGUoKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk7aWYoYSl7bGV0IGE9enUocix0Lm9wdGlvbnMuZm9udCk7aWYobz8oZS53aWR0aD10aGlzLm1heFdpZHRoLGUuaGVpZ2h0PVJ1KGkpK2EpOihlLmhlaWdodD10aGlzLm1heEhlaWdodCxlLndpZHRoPVJ1KGkpK2EpLG4uZGlzcGxheSYmdGhpcy50aWNrcy5sZW5ndGgpe2xldHtmaXJzdDp0LGxhc3Q6cix3aWRlc3Q6aSxoaWdoZXN0OmF9PXRoaXMuX2dldExhYmVsU2l6ZXMoKSxzPW4ucGFkZGluZyoyLGM9TW8odGhpcy5sYWJlbFJvdGF0aW9uKSxsPU1hdGguY29zKGMpLHU9TWF0aC5zaW4oYyk7aWYobyl7bGV0IHQ9bi5taXJyb3I/MDp1Kmkud2lkdGgrbCphLmhlaWdodDtlLmhlaWdodD1NYXRoLm1pbih0aGlzLm1heEhlaWdodCxlLmhlaWdodCt0K3MpfWVsc2V7bGV0IHQ9bi5taXJyb3I/MDpsKmkud2lkdGgrdSphLmhlaWdodDtlLndpZHRoPU1hdGgubWluKHRoaXMubWF4V2lkdGgsZS53aWR0aCt0K3MpfXRoaXMuX2NhbGN1bGF0ZVBhZGRpbmcodCxyLHUsbCl9fXRoaXMuX2hhbmRsZU1hcmdpbnMoKSxvPyh0aGlzLndpZHRoPXRoaXMuX2xlbmd0aD10LndpZHRoLXRoaXMuX21hcmdpbnMubGVmdC10aGlzLl9tYXJnaW5zLnJpZ2h0LHRoaXMuaGVpZ2h0PWUuaGVpZ2h0KToodGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuX2xlbmd0aD10LmhlaWdodC10aGlzLl9tYXJnaW5zLnRvcC10aGlzLl9tYXJnaW5zLmJvdHRvbSl9X2NhbGN1bGF0ZVBhZGRpbmcoZSx0LG4scil7bGV0e3RpY2tzOnthbGlnbjppLHBhZGRpbmc6YX0scG9zaXRpb246b309dGhpcy5vcHRpb25zLHM9dGhpcy5sYWJlbFJvdGF0aW9uIT09MCxjPW8hPT1gdG9wYCYmdGhpcy5heGlzPT09YHhgO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2xldCBvPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApLXRoaXMubGVmdCxsPXRoaXMucmlnaHQtdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGgtMSksdT0wLGQ9MDtzP2M/KHU9ciplLndpZHRoLGQ9bip0LmhlaWdodCk6KHU9biplLmhlaWdodCxkPXIqdC53aWR0aCk6aT09PWBzdGFydGA/ZD10LndpZHRoOmk9PT1gZW5kYD91PWUud2lkdGg6aSE9PWBpbm5lcmAmJih1PWUud2lkdGgvMixkPXQud2lkdGgvMiksdGhpcy5wYWRkaW5nTGVmdD1NYXRoLm1heCgodS1vK2EpKnRoaXMud2lkdGgvKHRoaXMud2lkdGgtbyksMCksdGhpcy5wYWRkaW5nUmlnaHQ9TWF0aC5tYXgoKGQtbCthKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLWwpLDApfWVsc2V7bGV0IG49dC5oZWlnaHQvMixyPWUuaGVpZ2h0LzI7aT09PWBzdGFydGA/KG49MCxyPWUuaGVpZ2h0KTppPT09YGVuZGAmJihuPXQuaGVpZ2h0LHI9MCksdGhpcy5wYWRkaW5nVG9wPW4rYSx0aGlzLnBhZGRpbmdCb3R0b209cithfX1faGFuZGxlTWFyZ2lucygpe3RoaXMuX21hcmdpbnMmJih0aGlzLl9tYXJnaW5zLmxlZnQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nTGVmdCx0aGlzLl9tYXJnaW5zLmxlZnQpLHRoaXMuX21hcmdpbnMudG9wPU1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCx0aGlzLl9tYXJnaW5zLnRvcCksdGhpcy5fbWFyZ2lucy5yaWdodD1NYXRoLm1heCh0aGlzLnBhZGRpbmdSaWdodCx0aGlzLl9tYXJnaW5zLnJpZ2h0KSx0aGlzLl9tYXJnaW5zLmJvdHRvbT1NYXRoLm1heCh0aGlzLnBhZGRpbmdCb3R0b20sdGhpcy5fbWFyZ2lucy5ib3R0b20pKX1hZnRlckZpdCgpe0oodGhpcy5vcHRpb25zLmFmdGVyRml0LFt0aGlzXSl9aXNIb3Jpem9udGFsKCl7bGV0e2F4aXM6ZSxwb3NpdGlvbjp0fT10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9PT1gdG9wYHx8dD09PWBib3R0b21gfHxlPT09YHhgfWlzRnVsbFNpemUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplfV9jb252ZXJ0VGlja3NUb0xhYmVscyhlKXt0aGlzLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpLHRoaXMuZ2VuZXJhdGVUaWNrTGFiZWxzKGUpO2xldCB0LG47Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspVShlW3RdLmxhYmVsKSYmKGUuc3BsaWNlKHQsMSksbi0tLHQtLSk7dGhpcy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpfV9nZXRMYWJlbFNpemVzKCl7bGV0IGU9dGhpcy5fbGFiZWxTaXplcztpZighZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemUsbj10aGlzLnRpY2tzO3Q8bi5sZW5ndGgmJihuPUZ1KG4sdCkpLHRoaXMuX2xhYmVsU2l6ZXM9ZT10aGlzLl9jb21wdXRlTGFiZWxTaXplcyhuLG4ubGVuZ3RoLHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KX1yZXR1cm4gZX1fY29tcHV0ZUxhYmVsU2l6ZXMoZSx0LG4pe2xldHtjdHg6cixfbG9uZ2VzdFRleHRDYWNoZTppfT10aGlzLGE9W10sbz1bXSxzPU1hdGguZmxvb3IodC9QdSh0LG4pKSxjPTAsbD0wLHUsZCxmLHAsbSxoLGcsXyx2LHksYjtmb3IodT0wO3U8dDt1Kz1zKXtpZihwPWVbdV0ubGFiZWwsbT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKHUpLHIuZm9udD1oPW0uc3RyaW5nLGc9aVtoXT1pW2hdfHx7ZGF0YTp7fSxnYzpbXX0sXz1tLmxpbmVIZWlnaHQsdj15PTAsIVUocCkmJiFXKHApKXY9VHMocixnLmRhdGEsZy5nYyx2LHApLHk9XztlbHNlIGlmKFcocCkpZm9yKGQ9MCxmPXAubGVuZ3RoO2Q8ZjsrK2QpYj1wW2RdLCFVKGIpJiYhVyhiKSYmKHY9VHMocixnLmRhdGEsZy5nYyx2LGIpLHkrPV8pO2EucHVzaCh2KSxvLnB1c2goeSksYz1NYXRoLm1heCh2LGMpLGw9TWF0aC5tYXgoeSxsKX1MdShpLHQpO2xldCB4PWEuaW5kZXhPZihjKSxTPW8uaW5kZXhPZihsKSxDPWU9Pih7d2lkdGg6YVtlXXx8MCxoZWlnaHQ6b1tlXXx8MH0pO3JldHVybntmaXJzdDpDKDApLGxhc3Q6Qyh0LTEpLHdpZGVzdDpDKHgpLGhpZ2hlc3Q6QyhTKSx3aWR0aHM6YSxoZWlnaHRzOm99fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGV9Z2V0UGl4ZWxGb3JWYWx1ZShlLHQpe3JldHVybiBOYU59Z2V0VmFsdWVGb3JQaXhlbChlKXt9Z2V0UGl4ZWxGb3JUaWNrKGUpe2xldCB0PXRoaXMudGlja3M7cmV0dXJuIGU8MHx8ZT50Lmxlbmd0aC0xP251bGw6dGhpcy5nZXRQaXhlbEZvclZhbHVlKHRbZV0udmFsdWUpfWdldFBpeGVsRm9yRGVjaW1hbChlKXt0aGlzLl9yZXZlcnNlUGl4ZWxzJiYoZT0xLWUpO2xldCB0PXRoaXMuX3N0YXJ0UGl4ZWwrZSp0aGlzLl9sZW5ndGg7cmV0dXJuIEJvKHRoaXMuX2FsaWduVG9QaXhlbHM/RHModGhpcy5jaGFydCx0LDApOnQpfWdldERlY2ltYWxGb3JQaXhlbChlKXtsZXQgdD0oZS10aGlzLl9zdGFydFBpeGVsKS90aGlzLl9sZW5ndGg7cmV0dXJuIHRoaXMuX3JldmVyc2VQaXhlbHM/MS10OnR9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRCYXNlVmFsdWUoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXM7cmV0dXJuIGU8MCYmdDwwP3Q6ZT4wJiZ0PjA/ZTowfWdldENvbnRleHQoZSl7bGV0IHQ9dGhpcy50aWNrc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gbi4kY29udGV4dHx8PVZ1KHRoaXMuZ2V0Q29udGV4dCgpLGUsbil9cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1CdSh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzKX1fdGlja1NpemUoKXtsZXQgZT10aGlzLm9wdGlvbnMudGlja3MsdD1Nbyh0aGlzLmxhYmVsUm90YXRpb24pLG49TWF0aC5hYnMoTWF0aC5jb3ModCkpLHI9TWF0aC5hYnMoTWF0aC5zaW4odCkpLGk9dGhpcy5fZ2V0TGFiZWxTaXplcygpLGE9ZS5hdXRvU2tpcFBhZGRpbmd8fDAsbz1pP2kud2lkZXN0LndpZHRoK2E6MCxzPWk/aS5oaWdoZXN0LmhlaWdodCthOjA7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/cypuPm8qcj9vL246cy9yOnMqcjxvKm4/cy9uOm8vcn1faXNWaXNpYmxlKCl7bGV0IGU9dGhpcy5vcHRpb25zLmRpc3BsYXk7cmV0dXJuIGU9PT1gYXV0b2A/dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpLmxlbmd0aD4wOiEhZX1fY29tcHV0ZUdyaWRMaW5lSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5jaGFydCxyPXRoaXMub3B0aW9ucyx7Z3JpZDppLHBvc2l0aW9uOmEsYm9yZGVyOm99PXIscz1pLm9mZnNldCxjPXRoaXMuaXNIb3Jpem9udGFsKCksbD10aGlzLnRpY2tzLmxlbmd0aCsgKyEhcyx1PVJ1KGkpLGQ9W10sZj1vLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHA9Zi5kaXNwbGF5P2Yud2lkdGg6MCxtPXAvMixoPWZ1bmN0aW9uKGUpe3JldHVybiBEcyhuLGUscCl9LGcsXyx2LHksYix4LFMsQyx3LFQsRSxEO2lmKGE9PT1gdG9wYClnPWgodGhpcy5ib3R0b20pLHg9dGhpcy5ib3R0b20tdSxDPWctbSxUPWgoZS50b3ApK20sRD1lLmJvdHRvbTtlbHNlIGlmKGE9PT1gYm90dG9tYClnPWgodGhpcy50b3ApLFQ9ZS50b3AsRD1oKGUuYm90dG9tKS1tLHg9ZyttLEM9dGhpcy50b3ArdTtlbHNlIGlmKGE9PT1gbGVmdGApZz1oKHRoaXMucmlnaHQpLGI9dGhpcy5yaWdodC11LFM9Zy1tLHc9aChlLmxlZnQpK20sRT1lLnJpZ2h0O2Vsc2UgaWYoYT09PWByaWdodGApZz1oKHRoaXMubGVmdCksdz1lLmxlZnQsRT1oKGUucmlnaHQpLW0sYj1nK20sUz10aGlzLmxlZnQrdTtlbHNlIGlmKHQ9PT1geGApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUudG9wK2UuYm90dG9tKS8yKy41KTtlbHNlIGlmKEcoYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9VD1lLnRvcCxEPWUuYm90dG9tLHg9ZyttLEM9eCt1fWVsc2UgaWYodD09PWB5YCl7aWYoYT09PWBjZW50ZXJgKWc9aCgoZS5sZWZ0K2UucmlnaHQpLzIpO2Vsc2UgaWYoRyhhKSl7bGV0IGU9T2JqZWN0LmtleXMoYSlbMF0sdD1hW2VdO2c9aCh0aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpKX1iPWctbSxTPWItdSx3PWUubGVmdCxFPWUucmlnaHR9bGV0IE89cShyLnRpY2tzLm1heFRpY2tzTGltaXQsbCksaz1NYXRoLm1heCgxLE1hdGguY2VpbChsL08pKTtmb3IoXz0wO188bDtfKz1rKXtsZXQgZT10aGlzLmdldENvbnRleHQoXyksdD1pLnNldENvbnRleHQoZSkscj1vLnNldENvbnRleHQoZSksYT10LmxpbmVXaWR0aCxsPXQuY29sb3IsdT1yLmRhc2h8fFtdLGY9ci5kYXNoT2Zmc2V0LHA9dC50aWNrV2lkdGgsbT10LnRpY2tDb2xvcixoPXQudGlja0JvcmRlckRhc2h8fFtdLGc9dC50aWNrQm9yZGVyRGFzaE9mZnNldDt2PUl1KHRoaXMsXyxzKSx2IT09dm9pZCAwJiYoeT1EcyhuLHYsYSksYz9iPVM9dz1FPXk6eD1DPVQ9RD15LGQucHVzaCh7dHgxOmIsdHkxOngsdHgyOlMsdHkyOkMseDE6dyx5MTpULHgyOkUseTI6RCx3aWR0aDphLGNvbG9yOmwsYm9yZGVyRGFzaDp1LGJvcmRlckRhc2hPZmZzZXQ6Zix0aWNrV2lkdGg6cCx0aWNrQ29sb3I6bSx0aWNrQm9yZGVyRGFzaDpoLHRpY2tCb3JkZXJEYXNoT2Zmc2V0Omd9KSl9cmV0dXJuIHRoaXMuX3RpY2tzTGVuZ3RoPWwsdGhpcy5fYm9yZGVyVmFsdWU9ZyxkfV9jb21wdXRlTGFiZWxJdGVtcyhlKXtsZXQgdD10aGlzLmF4aXMsbj10aGlzLm9wdGlvbnMse3Bvc2l0aW9uOnIsdGlja3M6aX09bixhPXRoaXMuaXNIb3Jpem9udGFsKCksbz10aGlzLnRpY2tzLHthbGlnbjpzLGNyb3NzQWxpZ246YyxwYWRkaW5nOmwsbWlycm9yOnV9PWksZD1SdShuLmdyaWQpLGY9ZCtsLHA9dT8tbDpmLG09LU1vKHRoaXMubGFiZWxSb3RhdGlvbiksaD1bXSxnLF8sdix5LGIseCxTLEMsdyxULEUsRCxPPWBtaWRkbGVgO2lmKHI9PT1gdG9wYCl4PXRoaXMuYm90dG9tLXAsUz10aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7ZWxzZSBpZihyPT09YGJvdHRvbWApeD10aGlzLnRvcCtwLFM9dGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO2Vsc2UgaWYocj09PWBsZWZ0YCl7bGV0IGU9dGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChkKTtTPWUudGV4dEFsaWduLGI9ZS54fWVsc2UgaWYocj09PWByaWdodGApe2xldCBlPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCk7Uz1lLnRleHRBbGlnbixiPWUueH1lbHNlIGlmKHQ9PT1geGApe2lmKHI9PT1gY2VudGVyYCl4PShlLnRvcCtlLmJvdHRvbSkvMitmO2Vsc2UgaWYoRyhyKSl7bGV0IGU9T2JqZWN0LmtleXMocilbMF0sdD1yW2VdO3g9dGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KStmfVM9dGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpfWVsc2UgaWYodD09PWB5YCl7aWYocj09PWBjZW50ZXJgKWI9KGUubGVmdCtlLnJpZ2h0KS8yLWY7ZWxzZSBpZihHKHIpKXtsZXQgZT1PYmplY3Qua2V5cyhyKVswXSx0PXJbZV07Yj10aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpfVM9dGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChkKS50ZXh0QWxpZ259dD09PWB5YCYmKHM9PT1gc3RhcnRgP089YHRvcGA6cz09PWBlbmRgJiYoTz1gYm90dG9tYCkpO2xldCBrPXRoaXMuX2dldExhYmVsU2l6ZXMoKTtmb3IoZz0wLF89by5sZW5ndGg7ZzxfOysrZyl7dj1vW2ddLHk9di5sYWJlbDtsZXQgZT1pLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGcpKTtDPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKGcpK2kubGFiZWxPZmZzZXQsdz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGcpLFQ9dy5saW5lSGVpZ2h0LEU9Vyh5KT95Lmxlbmd0aDoxO2xldCB0PUUvMixuPWUuY29sb3Iscz1lLnRleHRTdHJva2VDb2xvcixsPWUudGV4dFN0cm9rZVdpZHRoLGQ9UzthPyhiPUMsUz09PWBpbm5lcmAmJihkPWc9PT1fLTE/dGhpcy5vcHRpb25zLnJldmVyc2U/YGxlZnRgOmByaWdodGA6Zz09PTA/dGhpcy5vcHRpb25zLnJldmVyc2U/YHJpZ2h0YDpgbGVmdGA6YGNlbnRlcmApLEQ9cj09PWB0b3BgP2M9PT1gbmVhcmB8fG0hPT0wPy1FKlQrVC8yOmM9PT1gY2VudGVyYD8tay5oaWdoZXN0LmhlaWdodC8yLXQqVCtUOi1rLmhpZ2hlc3QuaGVpZ2h0K1QvMjpjPT09YG5lYXJgfHxtIT09MD9ULzI6Yz09PWBjZW50ZXJgP2suaGlnaGVzdC5oZWlnaHQvMi10KlQ6ay5oaWdoZXN0LmhlaWdodC1FKlQsdSYmKEQqPS0xKSxtIT09MCYmIWUuc2hvd0xhYmVsQmFja2Ryb3AmJihiKz1ULzIqTWF0aC5zaW4obSkpKTooeD1DLEQ9KDEtRSkqVC8yKTtsZXQgZjtpZihlLnNob3dMYWJlbEJhY2tkcm9wKXtsZXQgdD1RKGUuYmFja2Ryb3BQYWRkaW5nKSxuPWsuaGVpZ2h0c1tnXSxyPWsud2lkdGhzW2ddLGk9RC10LnRvcCxhPTAtdC5sZWZ0O3N3aXRjaChPKXtjYXNlYG1pZGRsZWA6aS09bi8yO2JyZWFrO2Nhc2VgYm90dG9tYDppLT1ufXN3aXRjaChTKXtjYXNlYGNlbnRlcmA6YS09ci8yO2JyZWFrO2Nhc2VgcmlnaHRgOmEtPXI7YnJlYWs7Y2FzZWBpbm5lcmA6Zz09PV8tMT9hLT1yOmc+MCYmKGEtPXIvMil9Zj17bGVmdDphLHRvcDppLHdpZHRoOnIrdC53aWR0aCxoZWlnaHQ6bit0LmhlaWdodCxjb2xvcjplLmJhY2tkcm9wQ29sb3J9fWgucHVzaCh7bGFiZWw6eSxmb250OncsdGV4dE9mZnNldDpELG9wdGlvbnM6e3JvdGF0aW9uOm0sY29sb3I6bixzdHJva2VDb2xvcjpzLHN0cm9rZVdpZHRoOmwsdGV4dEFsaWduOmQsdGV4dEJhc2VsaW5lOk8sdHJhbnNsYXRpb246W2IseF0sYmFja2Ryb3A6Zn19KX1yZXR1cm4gaH1fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpe2xldHtwb3NpdGlvbjplLHRpY2tzOnR9PXRoaXMub3B0aW9ucztpZigtTW8odGhpcy5sYWJlbFJvdGF0aW9uKSlyZXR1cm4gZT09PWB0b3BgP2BsZWZ0YDpgcmlnaHRgO2xldCBuPWBjZW50ZXJgO3JldHVybiB0LmFsaWduPT09YHN0YXJ0YD9uPWBsZWZ0YDp0LmFsaWduPT09YGVuZGA/bj1gcmlnaHRgOnQuYWxpZ249PT1gaW5uZXJgJiYobj1gaW5uZXJgKSxufV9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGUpe2xldHtwb3NpdGlvbjp0LHRpY2tzOntjcm9zc0FsaWduOm4sbWlycm9yOnIscGFkZGluZzppfX09dGhpcy5vcHRpb25zLGE9dGhpcy5fZ2V0TGFiZWxTaXplcygpLG89ZStpLHM9YS53aWRlc3Qud2lkdGgsYyxsO3JldHVybiB0PT09YGxlZnRgP3I/KGw9dGhpcy5yaWdodCtpLG49PT1gbmVhcmA/Yz1gbGVmdGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwrPXMvMik6KGM9YHJpZ2h0YCxsKz1zKSk6KGw9dGhpcy5yaWdodC1vLG49PT1gbmVhcmA/Yz1gcmlnaHRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsLT1zLzIpOihjPWBsZWZ0YCxsPXRoaXMubGVmdCkpOnQ9PT1gcmlnaHRgP3I/KGw9dGhpcy5sZWZ0K2ksbj09PWBuZWFyYD9jPWByaWdodGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwtPXMvMik6KGM9YGxlZnRgLGwtPXMpKToobD10aGlzLmxlZnQrbyxuPT09YG5lYXJgP2M9YGxlZnRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsKz1zLzIpOihjPWByaWdodGAsbD10aGlzLnJpZ2h0KSk6Yz1gcmlnaHRgLHt0ZXh0QWxpZ246Yyx4Omx9fV9jb21wdXRlTGFiZWxBcmVhKCl7aWYodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcilyZXR1cm47bGV0IGU9dGhpcy5jaGFydCx0PXRoaXMub3B0aW9ucy5wb3NpdGlvbjtpZih0PT09YGxlZnRgfHx0PT09YHJpZ2h0YClyZXR1cm57dG9wOjAsbGVmdDp0aGlzLmxlZnQsYm90dG9tOmUuaGVpZ2h0LHJpZ2h0OnRoaXMucmlnaHR9O2lmKHQ9PT1gdG9wYHx8dD09PWBib3R0b21gKXJldHVybnt0b3A6dGhpcy50b3AsbGVmdDowLGJvdHRvbTp0aGlzLmJvdHRvbSxyaWdodDplLndpZHRofX1kcmF3QmFja2dyb3VuZCgpe2xldHtjdHg6ZSxvcHRpb25zOntiYWNrZ3JvdW5kQ29sb3I6dH0sbGVmdDpuLHRvcDpyLHdpZHRoOmksaGVpZ2h0OmF9PXRoaXM7dCYmKGUuc2F2ZSgpLGUuZmlsbFN0eWxlPXQsZS5maWxsUmVjdChuLHIsaSxhKSxlLnJlc3RvcmUoKSl9Z2V0TGluZVdpZHRoRm9yVmFsdWUoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLmdyaWQ7aWYoIXRoaXMuX2lzVmlzaWJsZSgpfHwhdC5kaXNwbGF5KXJldHVybiAwO2xldCBuPXRoaXMudGlja3MuZmluZEluZGV4KHQ9PnQudmFsdWU9PT1lKTtyZXR1cm4gbj49MD90LnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KG4pKS5saW5lV2lkdGg6MH1kcmF3R3JpZChlKXtsZXQgdD10aGlzLm9wdGlvbnMuZ3JpZCxuPXRoaXMuY3R4LHI9dGhpcy5fZ3JpZExpbmVJdGVtc3x8PXRoaXMuX2NvbXB1dGVHcmlkTGluZUl0ZW1zKGUpLGksYSxvPShlLHQscik9Pnshci53aWR0aHx8IXIuY29sb3J8fChuLnNhdmUoKSxuLmxpbmVXaWR0aD1yLndpZHRoLG4uc3Ryb2tlU3R5bGU9ci5jb2xvcixuLnNldExpbmVEYXNoKHIuYm9yZGVyRGFzaHx8W10pLG4ubGluZURhc2hPZmZzZXQ9ci5ib3JkZXJEYXNoT2Zmc2V0LG4uYmVnaW5QYXRoKCksbi5tb3ZlVG8oZS54LGUueSksbi5saW5lVG8odC54LHQueSksbi5zdHJva2UoKSxuLnJlc3RvcmUoKSl9O2lmKHQuZGlzcGxheSlmb3IoaT0wLGE9ci5sZW5ndGg7aTxhOysraSl7bGV0IGU9cltpXTt0LmRyYXdPbkNoYXJ0QXJlYSYmbyh7eDplLngxLHk6ZS55MX0se3g6ZS54Mix5OmUueTJ9LGUpLHQuZHJhd1RpY2tzJiZvKHt4OmUudHgxLHk6ZS50eTF9LHt4OmUudHgyLHk6ZS50eTJ9LHtjb2xvcjplLnRpY2tDb2xvcix3aWR0aDplLnRpY2tXaWR0aCxib3JkZXJEYXNoOmUudGlja0JvcmRlckRhc2gsYm9yZGVyRGFzaE9mZnNldDplLnRpY2tCb3JkZXJEYXNoT2Zmc2V0fSl9fWRyYXdCb3JkZXIoKXtsZXR7Y2hhcnQ6ZSxjdHg6dCxvcHRpb25zOntib3JkZXI6bixncmlkOnJ9fT10aGlzLGk9bi5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxhPW4uZGlzcGxheT9pLndpZHRoOjA7aWYoIWEpcmV0dXJuO2xldCBvPXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoMCkpLmxpbmVXaWR0aCxzPXRoaXMuX2JvcmRlclZhbHVlLGMsbCx1LGQ7dGhpcy5pc0hvcml6b250YWwoKT8oYz1EcyhlLHRoaXMubGVmdCxhKS1hLzIsbD1EcyhlLHRoaXMucmlnaHQsbykrby8yLHU9ZD1zKToodT1EcyhlLHRoaXMudG9wLGEpLWEvMixkPURzKGUsdGhpcy5ib3R0b20sbykrby8yLGM9bD1zKSx0LnNhdmUoKSx0LmxpbmVXaWR0aD1pLndpZHRoLHQuc3Ryb2tlU3R5bGU9aS5jb2xvcix0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGMsdSksdC5saW5lVG8obCxkKSx0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWRyYXdMYWJlbHMoZSl7aWYoIXRoaXMub3B0aW9ucy50aWNrcy5kaXNwbGF5KXJldHVybjtsZXQgdD10aGlzLmN0eCxuPXRoaXMuX2NvbXB1dGVMYWJlbEFyZWEoKTtuJiZNcyh0LG4pO2xldCByPXRoaXMuZ2V0TGFiZWxJdGVtcyhlKTtmb3IobGV0IGUgb2Ygcil7bGV0IG49ZS5vcHRpb25zLHI9ZS5mb250LGk9ZS5sYWJlbCxhPWUudGV4dE9mZnNldDtMcyh0LGksMCxhLHIsbil9biYmTnModCl9ZHJhd1RpdGxlKCl7bGV0e2N0eDplLG9wdGlvbnM6e3Bvc2l0aW9uOnQsdGl0bGU6bixyZXZlcnNlOnJ9fT10aGlzO2lmKCFuLmRpc3BsYXkpcmV0dXJuO2xldCBpPSQobi5mb250KSxhPVEobi5wYWRkaW5nKSxvPW4uYWxpZ24scz1pLmxpbmVIZWlnaHQvMjt0PT09YGJvdHRvbWB8fHQ9PT1gY2VudGVyYHx8Ryh0KT8ocys9YS5ib3R0b20sVyhuLnRleHQpJiYocys9aS5saW5lSGVpZ2h0KihuLnRleHQubGVuZ3RoLTEpKSk6cys9YS50b3A7bGV0e3RpdGxlWDpjLHRpdGxlWTpsLG1heFdpZHRoOnUscm90YXRpb246ZH09VXUodGhpcyxzLHQsbyk7THMoZSxuLnRleHQsMCwwLGkse2NvbG9yOm4uY29sb3IsbWF4V2lkdGg6dSxyb3RhdGlvbjpkLHRleHRBbGlnbjpIdShvLHQsciksdGV4dEJhc2VsaW5lOmBtaWRkbGVgLHRyYW5zbGF0aW9uOltjLGxdfSl9ZHJhdyhlKXt0aGlzLl9pc1Zpc2libGUoKSYmKHRoaXMuZHJhd0JhY2tncm91bmQoKSx0aGlzLmRyYXdHcmlkKGUpLHRoaXMuZHJhd0JvcmRlcigpLHRoaXMuZHJhd1RpdGxlKCksdGhpcy5kcmF3TGFiZWxzKGUpKX1fbGF5ZXJzKCl7bGV0IHQ9dGhpcy5vcHRpb25zLG49dC50aWNrcyYmdC50aWNrcy56fHwwLHI9cSh0LmdyaWQmJnQuZ3JpZC56LC0xKSxpPXEodC5ib3JkZXImJnQuYm9yZGVyLnosMCk7cmV0dXJuIXRoaXMuX2lzVmlzaWJsZSgpfHx0aGlzLmRyYXchPT1lLnByb3RvdHlwZS5kcmF3P1t7ejpuLGRyYXc6ZT0+e3RoaXMuZHJhdyhlKX19XTpbe3o6cixkcmF3OmU9Pnt0aGlzLmRyYXdCYWNrZ3JvdW5kKCksdGhpcy5kcmF3R3JpZChlKSx0aGlzLmRyYXdUaXRsZSgpfX0se3o6aSxkcmF3OigpPT57dGhpcy5kcmF3Qm9yZGVyKCl9fSx7ejpuLGRyYXc6ZT0+e3RoaXMuZHJhd0xhYmVscyhlKX19XX1nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyhlKXtsZXQgdD10aGlzLmNoYXJ0LmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxuPXRoaXMuYXhpcytgQXhpc0lEYCxyPVtdLGksYTtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhOysraSl7bGV0IGE9dFtpXTthW25dPT09dGhpcy5pZCYmKCFlfHxhLnR5cGU9PT1lKSYmci5wdXNoKGEpfXJldHVybiByfV9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGUpe3JldHVybiAkKHRoaXMub3B0aW9ucy50aWNrcy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChlKSkuZm9udCl9X21heERpZ2l0cygpe2xldCBlPXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoMCkubGluZUhlaWdodDtyZXR1cm4odGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoOnRoaXMuaGVpZ2h0KS9lfX0sR3U9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudHlwZT1lLHRoaXMuc2NvcGU9dCx0aGlzLm92ZXJyaWRlPW4sdGhpcy5pdGVtcz1PYmplY3QuY3JlYXRlKG51bGwpfWlzRm9yVHlwZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLmNhbGwodGhpcy50eXBlLnByb3RvdHlwZSxlLnByb3RvdHlwZSl9cmVnaXN0ZXIoZSl7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLG47SnUodCkmJihuPXRoaXMucmVnaXN0ZXIodCkpO2xldCByPXRoaXMuaXRlbXMsaT1lLmlkLGE9dGhpcy5zY29wZStgLmAraTtpZighaSl0aHJvdyBFcnJvcihgY2xhc3MgZG9lcyBub3QgaGF2ZSBpZDogYCtlKTtyZXR1cm4gaSBpbiByP2E6KHJbaV09ZSxLdShlLGEsbiksdGhpcy5vdmVycmlkZSYmWi5vdmVycmlkZShlLmlkLGUub3ZlcnJpZGVzKSxhKX1nZXQoZSl7cmV0dXJuIHRoaXMuaXRlbXNbZV19dW5yZWdpc3RlcihlKXtsZXQgdD10aGlzLml0ZW1zLG49ZS5pZCxyPXRoaXMuc2NvcGU7biBpbiB0JiZkZWxldGUgdFtuXSxyJiZuIGluIFpbcl0mJihkZWxldGUgWltyXVtuXSx0aGlzLm92ZXJyaWRlJiZkZWxldGUgYnNbbl0pfX07ZnVuY3Rpb24gS3UoZSx0LG4pe2xldCByPWlvKE9iamVjdC5jcmVhdGUobnVsbCksW24/Wi5nZXQobik6e30sWi5nZXQodCksZS5kZWZhdWx0c10pO1ouc2V0KHQsciksZS5kZWZhdWx0Um91dGVzJiZxdSh0LGUuZGVmYXVsdFJvdXRlcyksZS5kZXNjcmlwdG9ycyYmWi5kZXNjcmliZSh0LGUuZGVzY3JpcHRvcnMpfWZ1bmN0aW9uIHF1KGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57bGV0IHI9bi5zcGxpdChgLmApLGk9ci5wb3AoKSxhPVtlXS5jb25jYXQocikuam9pbihgLmApLG89dFtuXS5zcGxpdChgLmApLHM9by5wb3AoKSxjPW8uam9pbihgLmApO1oucm91dGUoYSxpLGMscyl9KX1mdW5jdGlvbiBKdShlKXtyZXR1cm5gaWRgaW4gZSYmYGRlZmF1bHRzYGluIGV9dmFyIFl1PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udHJvbGxlcnM9bmV3IEd1KHVsLGBkYXRhc2V0c2AsITApLHRoaXMuZWxlbWVudHM9bmV3IEd1KHd1LGBlbGVtZW50c2ApLHRoaXMucGx1Z2lucz1uZXcgR3UoT2JqZWN0LGBwbHVnaW5zYCksdGhpcy5zY2FsZXM9bmV3IEd1KFd1LGBzY2FsZXNgKSx0aGlzLl90eXBlZFJlZ2lzdHJpZXM9W3RoaXMuY29udHJvbGxlcnMsdGhpcy5zY2FsZXMsdGhpcy5lbGVtZW50c119YWRkKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlKX1yZW1vdmUoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSl9YWRkQ29udHJvbGxlcnMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5jb250cm9sbGVycyl9YWRkRWxlbWVudHMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5lbGVtZW50cyl9YWRkUGx1Z2lucyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLnBsdWdpbnMpfWFkZFNjYWxlcyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLnNjYWxlcyl9Z2V0Q29udHJvbGxlcihlKXtyZXR1cm4gdGhpcy5fZ2V0KGUsdGhpcy5jb250cm9sbGVycyxgY29udHJvbGxlcmApfWdldEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuZWxlbWVudHMsYGVsZW1lbnRgKX1nZXRQbHVnaW4oZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMucGx1Z2lucyxgcGx1Z2luYCl9Z2V0U2NhbGUoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuc2NhbGVzLGBzY2FsZWApfXJlbW92ZUNvbnRyb2xsZXJzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5jb250cm9sbGVycyl9cmVtb3ZlRWxlbWVudHMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLmVsZW1lbnRzKX1yZW1vdmVQbHVnaW5zKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5wbHVnaW5zKX1yZW1vdmVTY2FsZXMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLnNjYWxlcyl9X2VhY2goZSx0LG4pe1suLi50XS5mb3JFYWNoKHQ9PntsZXQgcj1ufHx0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUodCk7bnx8ci5pc0ZvclR5cGUodCl8fHI9PT10aGlzLnBsdWdpbnMmJnQuaWQ/dGhpcy5fZXhlYyhlLHIsdCk6WSh0LHQ9PntsZXQgcj1ufHx0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUodCk7dGhpcy5fZXhlYyhlLHIsdCl9KX0pfV9leGVjKGUsdCxuKXtsZXQgcj1mbyhlKTtKKG5bYGJlZm9yZWArcl0sW10sbiksdFtlXShuKSxKKG5bYGFmdGVyYCtyXSxbXSxuKX1fZ2V0UmVnaXN0cnlGb3JUeXBlKGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5fdHlwZWRSZWdpc3RyaWVzLmxlbmd0aDt0Kyspe2xldCBuPXRoaXMuX3R5cGVkUmVnaXN0cmllc1t0XTtpZihuLmlzRm9yVHlwZShlKSlyZXR1cm4gbn1yZXR1cm4gdGhpcy5wbHVnaW5zfV9nZXQoZSx0LG4pe2xldCByPXQuZ2V0KGUpO2lmKHI9PT12b2lkIDApdGhyb3cgRXJyb3IoYCJgK2UrYCIgaXMgbm90IGEgcmVnaXN0ZXJlZCBgK24rYC5gKTtyZXR1cm4gcn19LFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faW5pdD12b2lkIDB9bm90aWZ5KGUsdCxuLHIpe2lmKHQ9PT1gYmVmb3JlSW5pdGAmJih0aGlzLl9pbml0PXRoaXMuX2NyZWF0ZURlc2NyaXB0b3JzKGUsITApLHRoaXMuX25vdGlmeSh0aGlzLl9pbml0LGUsYGluc3RhbGxgKSksdGhpcy5faW5pdD09PXZvaWQgMClyZXR1cm47bGV0IGk9cj90aGlzLl9kZXNjcmlwdG9ycyhlKS5maWx0ZXIocik6dGhpcy5fZGVzY3JpcHRvcnMoZSksYT10aGlzLl9ub3RpZnkoaSxlLHQsbik7cmV0dXJuIHQ9PT1gYWZ0ZXJEZXN0cm95YCYmKHRoaXMuX25vdGlmeShpLGUsYHN0b3BgKSx0aGlzLl9ub3RpZnkodGhpcy5faW5pdCxlLGB1bmluc3RhbGxgKSx0aGlzLl9pbml0PXZvaWQgMCksYX1fbm90aWZ5KGUsdCxuLHIpe3J8fD17fTtmb3IobGV0IGkgb2YgZSl7bGV0IGU9aS5wbHVnaW4sYT1lW25dO2lmKEooYSxbdCxyLGkub3B0aW9uc10sZSk9PT0hMSYmci5jYW5jZWxhYmxlKXJldHVybiExfXJldHVybiEwfWludmFsaWRhdGUoKXtVKHRoaXMuX2NhY2hlKXx8KHRoaXMuX29sZENhY2hlPXRoaXMuX2NhY2hlLHRoaXMuX2NhY2hlPXZvaWQgMCl9X2Rlc2NyaXB0b3JzKGUpe2lmKHRoaXMuX2NhY2hlKXJldHVybiB0aGlzLl9jYWNoZTtsZXQgdD10aGlzLl9jYWNoZT10aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhlKTtyZXR1cm4gdGhpcy5fbm90aWZ5U3RhdGVDaGFuZ2VzKGUpLHR9X2NyZWF0ZURlc2NyaXB0b3JzKGUsdCl7bGV0IG49ZSYmZS5jb25maWcscj1xKG4ub3B0aW9ucyYmbi5vcHRpb25zLnBsdWdpbnMse30pLGk9WnUobik7cmV0dXJuIHI9PT0hMSYmIXQ/W106JHUoZSxpLHIsdCl9X25vdGlmeVN0YXRlQ2hhbmdlcyhlKXtsZXQgdD10aGlzLl9vbGRDYWNoZXx8W10sbj10aGlzLl9jYWNoZSxyPShlLHQpPT5lLmZpbHRlcihlPT4hdC5zb21lKHQ9PmUucGx1Z2luLmlkPT09dC5wbHVnaW4uaWQpKTt0aGlzLl9ub3RpZnkocih0LG4pLGUsYHN0b3BgKSx0aGlzLl9ub3RpZnkocihuLHQpLGUsYHN0YXJ0YCl9fTtmdW5jdGlvbiBadShlKXtsZXQgdD17fSxuPVtdLHI9T2JqZWN0LmtleXMoWXUucGx1Z2lucy5pdGVtcyk7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspbi5wdXNoKFl1LmdldFBsdWdpbihyW2VdKSk7bGV0IGk9ZS5wbHVnaW5zfHxbXTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl7bGV0IHI9aVtlXTtuLmluZGV4T2Yocik9PT0tMSYmKG4ucHVzaChyKSx0W3IuaWRdPSEwKX1yZXR1cm57cGx1Z2luczpuLGxvY2FsSWRzOnR9fWZ1bmN0aW9uIFF1KGUsdCl7cmV0dXJuIXQmJmU9PT0hMT9udWxsOmU9PT0hMD97fTplfWZ1bmN0aW9uICR1KGUse3BsdWdpbnM6dCxsb2NhbElkczpufSxyLGkpe2xldCBhPVtdLG89ZS5nZXRDb250ZXh0KCk7Zm9yKGxldCBzIG9mIHQpe2xldCB0PXMuaWQsYz1RdShyW3RdLGkpO2MhPT1udWxsJiZhLnB1c2goe3BsdWdpbjpzLG9wdGlvbnM6ZWQoZS5jb25maWcse3BsdWdpbjpzLGxvY2FsOm5bdF19LGMsbyl9KX1yZXR1cm4gYX1mdW5jdGlvbiBlZChlLHtwbHVnaW46dCxsb2NhbDpufSxyLGkpe2xldCBhPWUucGx1Z2luU2NvcGVLZXlzKHQpLG89ZS5nZXRPcHRpb25TY29wZXMocixhKTtyZXR1cm4gbiYmdC5kZWZhdWx0cyYmby5wdXNoKHQuZGVmYXVsdHMpLGUuY3JlYXRlUmVzb2x2ZXIobyxpLFtgYF0se3NjcmlwdGFibGU6ITEsaW5kZXhhYmxlOiExLGFsbEtleXM6ITB9KX1mdW5jdGlvbiB0ZChlLHQpe2xldCBuPVouZGF0YXNldHNbZV18fHt9O3JldHVybigodC5kYXRhc2V0c3x8e30pW2VdfHx7fSkuaW5kZXhBeGlzfHx0LmluZGV4QXhpc3x8bi5pbmRleEF4aXN8fGB4YH1mdW5jdGlvbiBuZChlLHQpe2xldCBuPWU7cmV0dXJuIGU9PT1gX2luZGV4X2A/bj10OmU9PT1gX3ZhbHVlX2AmJihuPXQ9PT1geGA/YHlgOmB4YCksbn1mdW5jdGlvbiByZChlLHQpe3JldHVybiBlPT09dD9gX2luZGV4X2A6YF92YWx1ZV9gfWZ1bmN0aW9uIGlkKGUpe2lmKGU9PT1geGB8fGU9PT1geWB8fGU9PT1gcmApcmV0dXJuIGV9ZnVuY3Rpb24gYWQoZSl7aWYoZT09PWB0b3BgfHxlPT09YGJvdHRvbWApcmV0dXJuYHhgO2lmKGU9PT1gbGVmdGB8fGU9PT1gcmlnaHRgKXJldHVybmB5YH1mdW5jdGlvbiBvZChlLC4uLnQpe2lmKGlkKGUpKXJldHVybiBlO2ZvcihsZXQgbiBvZiB0KXtsZXQgdD1uLmF4aXN8fGFkKG4ucG9zaXRpb24pfHxlLmxlbmd0aD4xJiZpZChlWzBdLnRvTG93ZXJDYXNlKCkpO2lmKHQpcmV0dXJuIHR9dGhyb3cgRXJyb3IoYENhbm5vdCBkZXRlcm1pbmUgdHlwZSBvZiAnJHtlfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApfWZ1bmN0aW9uIHNkKGUsdCxuKXtpZihuW3QrYEF4aXNJRGBdPT09ZSlyZXR1cm57YXhpczp0fX1mdW5jdGlvbiBjZChlLHQpe2lmKHQuZGF0YSYmdC5kYXRhLmRhdGFzZXRzKXtsZXQgbj10LmRhdGEuZGF0YXNldHMuZmlsdGVyKHQ9PnQueEF4aXNJRD09PWV8fHQueUF4aXNJRD09PWUpO2lmKG4ubGVuZ3RoKXJldHVybiBzZChlLGB4YCxuWzBdKXx8c2QoZSxgeWAsblswXSl9cmV0dXJue319ZnVuY3Rpb24gbGQoZSx0KXtsZXQgbj1ic1tlLnR5cGVdfHx7c2NhbGVzOnt9fSxyPXQuc2NhbGVzfHx7fSxpPXRkKGUudHlwZSx0KSxhPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2godD0+e2xldCBvPXJbdF07aWYoIUcobykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc2NhbGUgY29uZmlndXJhdGlvbiBmb3Igc2NhbGU6ICR7dH1gKTtpZihvLl9wcm94eSlyZXR1cm4gY29uc29sZS53YXJuKGBJZ25vcmluZyByZXNvbHZlciBwYXNzZWQgYXMgb3B0aW9ucyBmb3Igc2NhbGU6ICR7dH1gKTtsZXQgcz1vZCh0LG8sY2QodCxlKSxaLnNjYWxlc1tvLnR5cGVdKSxjPXJkKHMsaSksbD1uLnNjYWxlc3x8e307YVt0XT1hbyhPYmplY3QuY3JlYXRlKG51bGwpLFt7YXhpczpzfSxvLGxbc10sbFtjXV0pfSksZS5kYXRhLmRhdGFzZXRzLmZvckVhY2gobj0+e2xldCBpPW4udHlwZXx8ZS50eXBlLG89bi5pbmRleEF4aXN8fHRkKGksdCkscz0oYnNbaV18fHt9KS5zY2FsZXN8fHt9O09iamVjdC5rZXlzKHMpLmZvckVhY2goZT0+e2xldCB0PW5kKGUsbyksaT1uW3QrYEF4aXNJRGBdfHx0O2FbaV09YVtpXXx8T2JqZWN0LmNyZWF0ZShudWxsKSxhbyhhW2ldLFt7YXhpczp0fSxyW2ldLHNbZV1dKX0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChlPT57bGV0IHQ9YVtlXTthbyh0LFtaLnNjYWxlc1t0LnR5cGVdLFouc2NhbGVdKX0pLGF9ZnVuY3Rpb24gdWQoZSl7bGV0IHQ9ZS5vcHRpb25zfHw9e307dC5wbHVnaW5zPXEodC5wbHVnaW5zLHt9KSx0LnNjYWxlcz1sZChlLHQpfWZ1bmN0aW9uIGRkKGUpe3JldHVybiBlfHw9e30sZS5kYXRhc2V0cz1lLmRhdGFzZXRzfHxbXSxlLmxhYmVscz1lLmxhYmVsc3x8W10sZX1mdW5jdGlvbiBmZChlKXtyZXR1cm4gZXx8PXt9LGUuZGF0YT1kZChlLmRhdGEpLHVkKGUpLGV9dmFyIHBkPW5ldyBNYXAsbWQ9bmV3IFNldDtmdW5jdGlvbiBoZChlLHQpe2xldCBuPXBkLmdldChlKTtyZXR1cm4gbnx8KG49dCgpLHBkLnNldChlLG4pLG1kLmFkZChuKSksbn12YXIgZ2Q9KGUsdCxuKT0+e2xldCByPXVvKHQsbik7ciE9PXZvaWQgMCYmZS5hZGQocil9LF9kPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NvbmZpZz1mZChlKSx0aGlzLl9zY29wZUNhY2hlPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJDYWNoZT1uZXcgTWFwfWdldCBwbGF0Zm9ybSgpe3JldHVybiB0aGlzLl9jb25maWcucGxhdGZvcm19Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5fY29uZmlnLnR5cGV9c2V0IHR5cGUoZSl7dGhpcy5fY29uZmlnLnR5cGU9ZX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9jb25maWcuZGF0YX1zZXQgZGF0YShlKXt0aGlzLl9jb25maWcuZGF0YT1kZChlKX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9jb25maWcub3B0aW9uc31zZXQgb3B0aW9ucyhlKXt0aGlzLl9jb25maWcub3B0aW9ucz1lfWdldCBwbHVnaW5zKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5wbHVnaW5zfXVwZGF0ZSgpe2xldCBlPXRoaXMuX2NvbmZpZzt0aGlzLmNsZWFyQ2FjaGUoKSx1ZChlKX1jbGVhckNhY2hlKCl7dGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpLHRoaXMuX3Jlc29sdmVyQ2FjaGUuY2xlYXIoKX1kYXRhc2V0U2NvcGVLZXlzKGUpe3JldHVybiBoZChlLCgpPT5bW2BkYXRhc2V0cy4ke2V9YCxgYF1dKX1kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKGUsdCl7cmV0dXJuIGhkKGAke2V9LnRyYW5zaXRpb24uJHt0fWAsKCk9PltbYGRhdGFzZXRzLiR7ZX0udHJhbnNpdGlvbnMuJHt0fWAsYHRyYW5zaXRpb25zLiR7dH1gXSxbYGRhdGFzZXRzLiR7ZX1gLGBgXV0pfWRhdGFzZXRFbGVtZW50U2NvcGVLZXlzKGUsdCl7cmV0dXJuIGhkKGAke2V9LSR7dH1gLCgpPT5bW2BkYXRhc2V0cy4ke2V9LmVsZW1lbnRzLiR7dH1gLGBkYXRhc2V0cy4ke2V9YCxgZWxlbWVudHMuJHt0fWAsYGBdXSl9cGx1Z2luU2NvcGVLZXlzKGUpe2xldCB0PWUuaWQsbj10aGlzLnR5cGU7cmV0dXJuIGhkKGAke259LXBsdWdpbi0ke3R9YCwoKT0+W1tgcGx1Z2lucy4ke3R9YCwuLi5lLmFkZGl0aW9uYWxPcHRpb25TY29wZXN8fFtdXV0pfV9jYWNoZWRTY29wZXMoZSx0KXtsZXQgbj10aGlzLl9zY29wZUNhY2hlLHI9bi5nZXQoZSk7cmV0dXJuKCFyfHx0KSYmKHI9bmV3IE1hcCxuLnNldChlLHIpKSxyfWdldE9wdGlvblNjb3BlcyhlLHQsbil7bGV0e29wdGlvbnM6cix0eXBlOml9PXRoaXMsYT10aGlzLl9jYWNoZWRTY29wZXMoZSxuKSxvPWEuZ2V0KHQpO2lmKG8pcmV0dXJuIG87bGV0IHM9bmV3IFNldDt0LmZvckVhY2godD0+e2UmJihzLmFkZChlKSx0LmZvckVhY2godD0+Z2QocyxlLHQpKSksdC5mb3JFYWNoKGU9PmdkKHMscixlKSksdC5mb3JFYWNoKGU9PmdkKHMsYnNbaV18fHt9LGUpKSx0LmZvckVhY2goZT0+Z2QocyxaLGUpKSx0LmZvckVhY2goZT0+Z2Qocyx4cyxlKSl9KTtsZXQgYz1BcnJheS5mcm9tKHMpO3JldHVybiBjLmxlbmd0aD09PTAmJmMucHVzaChPYmplY3QuY3JlYXRlKG51bGwpKSxtZC5oYXModCkmJmEuc2V0KHQsYyksY31jaGFydE9wdGlvblNjb3Blcygpe2xldHtvcHRpb25zOmUsdHlwZTp0fT10aGlzO3JldHVybltlLGJzW3RdfHx7fSxaLmRhdGFzZXRzW3RdfHx7fSx7dHlwZTp0fSxaLHhzXX1yZXNvbHZlTmFtZWRPcHRpb25zKGUsdCxuLHI9W2BgXSl7bGV0IGk9eyRzaGFyZWQ6ITB9LHtyZXNvbHZlcjphLHN1YlByZWZpeGVzOm99PXZkKHRoaXMuX3Jlc29sdmVyQ2FjaGUsZSxyKSxzPWE7aWYoYmQoYSx0KSl7aS4kc2hhcmVkPSExLG49bW8obik/bigpOm47bGV0IHQ9dGhpcy5jcmVhdGVSZXNvbHZlcihlLG4sbyk7cz1YcyhhLG4sdCl9Zm9yKGxldCBlIG9mIHQpaVtlXT1zW2VdO3JldHVybiBpfWNyZWF0ZVJlc29sdmVyKGUsdCxuPVtgYF0scil7bGV0e3Jlc29sdmVyOml9PXZkKHRoaXMuX3Jlc29sdmVyQ2FjaGUsZSxuKTtyZXR1cm4gRyh0KT9YcyhpLHQsdm9pZCAwLHIpOml9fTtmdW5jdGlvbiB2ZChlLHQsbil7bGV0IHI9ZS5nZXQodCk7cnx8KHI9bmV3IE1hcCxlLnNldCh0LHIpKTtsZXQgaT1uLmpvaW4oKSxhPXIuZ2V0KGkpO3JldHVybiBhfHwoYT17cmVzb2x2ZXI6WXModCxuKSxzdWJQcmVmaXhlczpuLmZpbHRlcihlPT4hZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGBob3ZlcmApKX0sci5zZXQoaSxhKSksYX12YXIgeWQ9ZT0+RyhlKSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuc29tZSh0PT5tbyhlW3RdKSk7ZnVuY3Rpb24gYmQoZSx0KXtsZXR7aXNTY3JpcHRhYmxlOm4saXNJbmRleGFibGU6cn09WnMoZSk7Zm9yKGxldCBpIG9mIHQpe2xldCB0PW4oaSksYT1yKGkpLG89KGF8fHQpJiZlW2ldO2lmKHQmJihtbyhvKXx8eWQobykpfHxhJiZXKG8pKXJldHVybiEwfXJldHVybiExfXZhciB4ZD1gNC41LjFgLFNkPVtgdG9wYCxgYm90dG9tYCxgbGVmdGAsYHJpZ2h0YCxgY2hhcnRBcmVhYF07ZnVuY3Rpb24gQ2QoZSx0KXtyZXR1cm4gZT09PWB0b3BgfHxlPT09YGJvdHRvbWB8fFNkLmluZGV4T2YoZSk9PT0tMSYmdD09PWB4YH1mdW5jdGlvbiB3ZChlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBuW2VdPT09cltlXT9uW3RdLXJbdF06bltlXS1yW2VdfX1mdW5jdGlvbiBUZChlKXtsZXQgdD1lLmNoYXJ0LG49dC5vcHRpb25zLmFuaW1hdGlvbjt0Lm5vdGlmeVBsdWdpbnMoYGFmdGVyUmVuZGVyYCksSihuJiZuLm9uQ29tcGxldGUsW2VdLHQpfWZ1bmN0aW9uIEVkKGUpe2xldCB0PWUuY2hhcnQsbj10Lm9wdGlvbnMuYW5pbWF0aW9uO0oobiYmbi5vblByb2dyZXNzLFtlXSx0KX1mdW5jdGlvbiBEZChlKXtyZXR1cm4gbWMoKSYmdHlwZW9mIGU9PWBzdHJpbmdgP2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk6ZSYmZS5sZW5ndGgmJihlPWVbMF0pLGUmJmUuY2FudmFzJiYoZT1lLmNhbnZhcyksZX12YXIgT2Q9e30sa2Q9ZT0+e2xldCB0PURkKGUpO3JldHVybiBPYmplY3QudmFsdWVzKE9kKS5maWx0ZXIoZT0+ZS5jYW52YXM9PT10KS5wb3AoKX07ZnVuY3Rpb24gQWQoZSx0LG4pe2xldCByPU9iamVjdC5rZXlzKGUpO2ZvcihsZXQgaSBvZiByKXtsZXQgcj0raTtpZihyPj10KXtsZXQgYT1lW2ldO2RlbGV0ZSBlW2ldLChuPjB8fHI+dCkmJihlW3Irbl09YSl9fX1mdW5jdGlvbiBqZChlLHQsbixyKXtyZXR1cm4hbnx8ZS50eXBlPT09YG1vdXNlb3V0YD9udWxsOnI/dDplfXZhciBNZD1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9WjtzdGF0aWMgaW5zdGFuY2VzPU9kO3N0YXRpYyBvdmVycmlkZXM9YnM7c3RhdGljIHJlZ2lzdHJ5PVl1O3N0YXRpYyB2ZXJzaW9uPXhkO3N0YXRpYyBnZXRDaGFydD1rZDtzdGF0aWMgcmVnaXN0ZXIoLi4uZSl7WXUuYWRkKC4uLmUpLE5kKCl9c3RhdGljIHVucmVnaXN0ZXIoLi4uZSl7WXUucmVtb3ZlKC4uLmUpLE5kKCl9Y29uc3RydWN0b3IoZSx0KXtsZXQgbj10aGlzLmNvbmZpZz1uZXcgX2QodCkscj1EZChlKSxpPWtkKHIpO2lmKGkpdGhyb3cgRXJyb3IoYENhbnZhcyBpcyBhbHJlYWR5IGluIHVzZS4gQ2hhcnQgd2l0aCBJRCAnYCtpLmlkK2AnIG11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgY2FudmFzIHdpdGggSUQgJ2AraS5jYW52YXMuaWQrYCcgY2FuIGJlIHJldXNlZC5gKTtsZXQgYT1uLmNyZWF0ZVJlc29sdmVyKG4uY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSk7dGhpcy5wbGF0Zm9ybT1uZXcobi5wbGF0Zm9ybXx8KEN1KHIpKSksdGhpcy5wbGF0Zm9ybS51cGRhdGVDb25maWcobik7bGV0IG89dGhpcy5wbGF0Zm9ybS5hY3F1aXJlQ29udGV4dChyLGEuYXNwZWN0UmF0aW8pLHM9byYmby5jYW52YXMsYz1zJiZzLmhlaWdodCxsPXMmJnMud2lkdGg7aWYodGhpcy5pZD1aYSgpLHRoaXMuY3R4PW8sdGhpcy5jYW52YXM9cyx0aGlzLndpZHRoPWwsdGhpcy5oZWlnaHQ9Yyx0aGlzLl9vcHRpb25zPWEsdGhpcy5fYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyx0aGlzLl9sYXllcnM9W10sdGhpcy5fbWV0YXNldHM9W10sdGhpcy5fc3RhY2tzPXZvaWQgMCx0aGlzLmJveGVzPVtdLHRoaXMuY3VycmVudERldmljZVBpeGVsUmF0aW89dm9pZCAwLHRoaXMuY2hhcnRBcmVhPXZvaWQgMCx0aGlzLl9hY3RpdmU9W10sdGhpcy5fbGFzdEV2ZW50PXZvaWQgMCx0aGlzLl9saXN0ZW5lcnM9e30sdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycz12b2lkIDAsdGhpcy5fc29ydGVkTWV0YXNldHM9W10sdGhpcy5zY2FsZXM9e30sdGhpcy5fcGx1Z2lucz1uZXcgWHUsdGhpcy4kcHJveGllcz17fSx0aGlzLl9oaWRkZW5JbmRpY2VzPXt9LHRoaXMuYXR0YWNoZWQ9ITEsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXZvaWQgMCx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLl9kb1Jlc2l6ZT1RbyhlPT50aGlzLnVwZGF0ZShlKSxhLnJlc2l6ZURlbGF5fHwwKSx0aGlzLl9kYXRhQ2hhbmdlcz1bXSxPZFt0aGlzLmlkXT10aGlzLCFvfHwhcyl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjaGFydDogY2FuJ3QgYWNxdWlyZSBjb250ZXh0IGZyb20gdGhlIGdpdmVuIGl0ZW1gKTtyZXR1cm59UmMubGlzdGVuKHRoaXMsYGNvbXBsZXRlYCxUZCksUmMubGlzdGVuKHRoaXMsYHByb2dyZXNzYCxFZCksdGhpcy5faW5pdGlhbGl6ZSgpLHRoaXMuYXR0YWNoZWQmJnRoaXMudXBkYXRlKCl9Z2V0IGFzcGVjdFJhdGlvKCl7bGV0e29wdGlvbnM6e2FzcGVjdFJhdGlvOmUsbWFpbnRhaW5Bc3BlY3RSYXRpbzp0fSx3aWR0aDpuLGhlaWdodDpyLF9hc3BlY3RSYXRpbzppfT10aGlzO3JldHVybiBVKGUpP3QmJmk/aTpyP24vcjpudWxsOmV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5jb25maWcuZGF0YX1zZXQgZGF0YShlKXt0aGlzLmNvbmZpZy5kYXRhPWV9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fb3B0aW9uc31zZXQgb3B0aW9ucyhlKXt0aGlzLmNvbmZpZy5vcHRpb25zPWV9Z2V0IHJlZ2lzdHJ5KCl7cmV0dXJuIFl1fV9pbml0aWFsaXplKCl7cmV0dXJuIHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlSW5pdGApLHRoaXMub3B0aW9ucy5yZXNwb25zaXZlP3RoaXMucmVzaXplKCk6RGModGhpcyx0aGlzLm9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckluaXRgKSx0aGlzfWNsZWFyKCl7cmV0dXJuIE9zKHRoaXMuY2FudmFzLHRoaXMuY3R4KSx0aGlzfXN0b3AoKXtyZXR1cm4gUmMuc3RvcCh0aGlzKSx0aGlzfXJlc2l6ZShlLHQpe1JjLnJ1bm5pbmcodGhpcyk/dGhpcy5fcmVzaXplQmVmb3JlRHJhdz17d2lkdGg6ZSxoZWlnaHQ6dH06dGhpcy5fcmVzaXplKGUsdCl9X3Jlc2l6ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY2FudmFzLGk9bi5tYWludGFpbkFzcGVjdFJhdGlvJiZ0aGlzLmFzcGVjdFJhdGlvLGE9dGhpcy5wbGF0Zm9ybS5nZXRNYXhpbXVtU2l6ZShyLGUsdCxpKSxvPW4uZGV2aWNlUGl4ZWxSYXRpb3x8dGhpcy5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCkscz10aGlzLndpZHRoP2ByZXNpemVgOmBhdHRhY2hgO3RoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLl9hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLERjKHRoaXMsbywhMCkmJih0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2l6ZWAse3NpemU6YX0pLEoobi5vblJlc2l6ZSxbdGhpcyxhXSx0aGlzKSx0aGlzLmF0dGFjaGVkJiZ0aGlzLl9kb1Jlc2l6ZShzKSYmdGhpcy5yZW5kZXIoKSl9ZW5zdXJlU2NhbGVzSGF2ZUlEcygpe1kodGhpcy5vcHRpb25zLnNjYWxlc3x8e30sKGUsdCk9PntlLmlkPXR9KX1idWlsZE9yVXBkYXRlU2NhbGVzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS5zY2FsZXMsbj10aGlzLnNjYWxlcyxyPU9iamVjdC5rZXlzKG4pLnJlZHVjZSgoZSx0KT0+KGVbdF09ITEsZSkse30pLGk9W107dCYmKGk9aS5jb25jYXQoT2JqZWN0LmtleXModCkubWFwKGU9PntsZXQgbj10W2VdLHI9b2QoZSxuKSxpPXI9PT1gcmAsYT1yPT09YHhgO3JldHVybntvcHRpb25zOm4sZHBvc2l0aW9uOmk/YGNoYXJ0QXJlYWA6YT9gYm90dG9tYDpgbGVmdGAsZHR5cGU6aT9gcmFkaWFsTGluZWFyYDphP2BjYXRlZ29yeWA6YGxpbmVhcmB9fSkpKSxZKGksdD0+e2xldCBpPXQub3B0aW9ucyxhPWkuaWQsbz1vZChhLGkpLHM9cShpLnR5cGUsdC5kdHlwZSk7KGkucG9zaXRpb249PT12b2lkIDB8fENkKGkucG9zaXRpb24sbykhPT1DZCh0LmRwb3NpdGlvbikpJiYoaS5wb3NpdGlvbj10LmRwb3NpdGlvbiksclthXT0hMDtsZXQgYz1udWxsO2EgaW4gbiYmblthXS50eXBlPT09cz9jPW5bYV06KGM9bmV3KFl1LmdldFNjYWxlKHMpKSh7aWQ6YSx0eXBlOnMsY3R4OnRoaXMuY3R4LGNoYXJ0OnRoaXN9KSxuW2MuaWRdPWMpLGMuaW5pdChpLGUpfSksWShyLChlLHQpPT57ZXx8ZGVsZXRlIG5bdF19KSxZKG4sZT0+e2V1LmNvbmZpZ3VyZSh0aGlzLGUsZS5vcHRpb25zKSxldS5hZGRCb3godGhpcyxlKX0pfV91cGRhdGVNZXRhc2V0cygpe2xldCBlPXRoaXMuX21ldGFzZXRzLHQ9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aCxuPWUubGVuZ3RoO2lmKGUuc29ydCgoZSx0KT0+ZS5pbmRleC10LmluZGV4KSxuPnQpe2ZvcihsZXQgZT10O2U8bjsrK2UpdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGUpO2Uuc3BsaWNlKHQsbi10KX10aGlzLl9zb3J0ZWRNZXRhc2V0cz1lLnNsaWNlKDApLnNvcnQod2QoYG9yZGVyYCxgaW5kZXhgKSl9X3JlbW92ZVVucmVmZXJlbmNlZE1ldGFzZXRzKCl7bGV0e19tZXRhc2V0czplLGRhdGE6e2RhdGFzZXRzOnR9fT10aGlzO2UubGVuZ3RoPnQubGVuZ3RoJiZkZWxldGUgdGhpcy5fc3RhY2tzLGUuZm9yRWFjaCgoZSxuKT0+e3QuZmlsdGVyKHQ9PnQ9PT1lLl9kYXRhc2V0KS5sZW5ndGg9PT0wJiZ0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEobil9KX1idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKXtsZXQgZT1bXSx0PXRoaXMuZGF0YS5kYXRhc2V0cyxuLHI7Zm9yKHRoaXMuX3JlbW92ZVVucmVmZXJlbmNlZE1ldGFzZXRzKCksbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7bGV0IHI9dFtuXSxpPXRoaXMuZ2V0RGF0YXNldE1ldGEobiksYT1yLnR5cGV8fHRoaXMuY29uZmlnLnR5cGU7aWYoaS50eXBlJiZpLnR5cGUhPT1hJiYodGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKG4pLGk9dGhpcy5nZXREYXRhc2V0TWV0YShuKSksaS50eXBlPWEsaS5pbmRleEF4aXM9ci5pbmRleEF4aXN8fHRkKGEsdGhpcy5vcHRpb25zKSxpLm9yZGVyPXIub3JkZXJ8fDAsaS5pbmRleD1uLGkubGFiZWw9YGArci5sYWJlbCxpLnZpc2libGU9dGhpcy5pc0RhdGFzZXRWaXNpYmxlKG4pLGkuY29udHJvbGxlcilpLmNvbnRyb2xsZXIudXBkYXRlSW5kZXgobiksaS5jb250cm9sbGVyLmxpbmtTY2FsZXMoKTtlbHNle2xldCB0PVl1LmdldENvbnRyb2xsZXIoYSkse2RhdGFzZXRFbGVtZW50VHlwZTpyLGRhdGFFbGVtZW50VHlwZTpvfT1aLmRhdGFzZXRzW2FdO09iamVjdC5hc3NpZ24odCx7ZGF0YUVsZW1lbnRUeXBlOll1LmdldEVsZW1lbnQobyksZGF0YXNldEVsZW1lbnRUeXBlOnImJll1LmdldEVsZW1lbnQocil9KSxpLmNvbnRyb2xsZXI9bmV3IHQodGhpcyxuKSxlLnB1c2goaS5jb250cm9sbGVyKX19cmV0dXJuIHRoaXMuX3VwZGF0ZU1ldGFzZXRzKCksZX1fcmVzZXRFbGVtZW50cygpe1kodGhpcy5kYXRhLmRhdGFzZXRzLChlLHQpPT57dGhpcy5nZXREYXRhc2V0TWV0YSh0KS5jb250cm9sbGVyLnJlc2V0KCl9LHRoaXMpfXJlc2V0KCl7dGhpcy5fcmVzZXRFbGVtZW50cygpLHRoaXMubm90aWZ5UGx1Z2lucyhgcmVzZXRgKX11cGRhdGUoZSl7bGV0IHQ9dGhpcy5jb25maWc7dC51cGRhdGUoKTtsZXQgbj10aGlzLl9vcHRpb25zPXQuY3JlYXRlUmVzb2x2ZXIodC5jaGFydE9wdGlvblNjb3BlcygpLHRoaXMuZ2V0Q29udGV4dCgpKSxyPXRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD0hbi5hbmltYXRpb247aWYodGhpcy5fdXBkYXRlU2NhbGVzKCksdGhpcy5fY2hlY2tFdmVudEJpbmRpbmdzKCksdGhpcy5fdXBkYXRlSGlkZGVuSW5kaWNlcygpLHRoaXMuX3BsdWdpbnMuaW52YWxpZGF0ZSgpLHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlVXBkYXRlYCx7bW9kZTplLGNhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgaT10aGlzLmJ1aWxkT3JVcGRhdGVDb250cm9sbGVycygpO3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRWxlbWVudHNVcGRhdGVgKTtsZXQgYT0wO2ZvcihsZXQgZT0wLHQ9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtlPHQ7ZSsrKXtsZXR7Y29udHJvbGxlcjp0fT10aGlzLmdldERhdGFzZXRNZXRhKGUpLG49IXImJmkuaW5kZXhPZih0KT09PS0xO3QuYnVpbGRPclVwZGF0ZUVsZW1lbnRzKG4pLGE9TWF0aC5tYXgoK3QuZ2V0TWF4T3ZlcmZsb3coKSxhKX1hPXRoaXMuX21pblBhZGRpbmc9bi5sYXlvdXQuYXV0b1BhZGRpbmc/YTowLHRoaXMuX3VwZGF0ZUxheW91dChhKSxyfHxZKGksZT0+e2UucmVzZXQoKX0pLHRoaXMuX3VwZGF0ZURhdGFzZXRzKGUpLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJVcGRhdGVgLHttb2RlOmV9KSx0aGlzLl9sYXllcnMuc29ydCh3ZChgemAsYF9pZHhgKSk7bGV0e19hY3RpdmU6byxfbGFzdEV2ZW50OnN9PXRoaXM7cz90aGlzLl9ldmVudEhhbmRsZXIocywhMCk6by5sZW5ndGgmJnRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG8sbywhMCksdGhpcy5yZW5kZXIoKX1fdXBkYXRlU2NhbGVzKCl7WSh0aGlzLnNjYWxlcyxlPT57ZXUucmVtb3ZlQm94KHRoaXMsZSl9KSx0aGlzLmVuc3VyZVNjYWxlc0hhdmVJRHMoKSx0aGlzLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKX1fY2hlY2tFdmVudEJpbmRpbmdzKCl7bGV0IGU9dGhpcy5vcHRpb25zOyghaG8obmV3IFNldChPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpKSxuZXcgU2V0KGUuZXZlbnRzKSl8fCEhdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyE9PWUucmVzcG9uc2l2ZSkmJih0aGlzLnVuYmluZEV2ZW50cygpLHRoaXMuYmluZEV2ZW50cygpKX1fdXBkYXRlSGlkZGVuSW5kaWNlcygpe2xldHtfaGlkZGVuSW5kaWNlczplfT10aGlzLHQ9dGhpcy5fZ2V0VW5pZm9ybURhdGFDaGFuZ2VzKCl8fFtdO2ZvcihsZXR7bWV0aG9kOm4sc3RhcnQ6cixjb3VudDppfW9mIHQpQWQoZSxyLG49PT1gX3JlbW92ZUVsZW1lbnRzYD8taTppKX1fZ2V0VW5pZm9ybURhdGFDaGFuZ2VzKCl7bGV0IGU9dGhpcy5fZGF0YUNoYW5nZXM7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm47dGhpcy5fZGF0YUNoYW5nZXM9W107bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aCxuPXQ9Pm5ldyBTZXQoZS5maWx0ZXIoZT0+ZVswXT09PXQpLm1hcCgoZSx0KT0+dCtgLGArZS5zcGxpY2UoMSkuam9pbihgLGApKSkscj1uKDApO2ZvcihsZXQgZT0xO2U8dDtlKyspaWYoIWhvKHIsbihlKSkpcmV0dXJuO3JldHVybiBBcnJheS5mcm9tKHIpLm1hcChlPT5lLnNwbGl0KGAsYCkpLm1hcChlPT4oe21ldGhvZDplWzFdLHN0YXJ0OitlWzJdLGNvdW50OitlWzNdfSkpfV91cGRhdGVMYXlvdXQoZSl7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVMYXlvdXRgLHtjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47ZXUudXBkYXRlKHRoaXMsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlKTtsZXQgdD10aGlzLmNoYXJ0QXJlYSxuPXQud2lkdGg8PTB8fHQuaGVpZ2h0PD0wO3RoaXMuX2xheWVycz1bXSxZKHRoaXMuYm94ZXMsZT0+e24mJmUucG9zaXRpb249PT1gY2hhcnRBcmVhYHx8KGUuY29uZmlndXJlJiZlLmNvbmZpZ3VyZSgpLHRoaXMuX2xheWVycy5wdXNoKC4uLmUuX2xheWVycygpKSl9LHRoaXMpLHRoaXMuX2xheWVycy5mb3JFYWNoKChlLHQpPT57ZS5faWR4PXR9KSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyTGF5b3V0YCl9X3VwZGF0ZURhdGFzZXRzKGUpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGF0YXNldHNVcGRhdGVgLHttb2RlOmUsY2FuY2VsYWJsZTohMH0pIT09ITEpe2ZvcihsZXQgZT0wLHQ9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtlPHQ7KytlKXRoaXMuZ2V0RGF0YXNldE1ldGEoZSkuY29udHJvbGxlci5jb25maWd1cmUoKTtmb3IobGV0IHQ9MCxuPXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7dDxuOysrdCl0aGlzLl91cGRhdGVEYXRhc2V0KHQsbW8oZSk/ZSh7ZGF0YXNldEluZGV4OnR9KTplKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldHNVcGRhdGVgLHttb2RlOmV9KX19X3VwZGF0ZURhdGFzZXQoZSx0KXtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpLHI9e21ldGE6bixpbmRleDplLG1vZGU6dCxjYW5jZWxhYmxlOiEwfTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRVcGRhdGVgLHIpIT09ITEmJihuLmNvbnRyb2xsZXIuX3VwZGF0ZSh0KSxyLmNhbmNlbGFibGU9ITEsdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRVcGRhdGVgLHIpKX1yZW5kZXIoKXt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVJlbmRlcmAse2NhbmNlbGFibGU6ITB9KSE9PSExJiYoUmMuaGFzKHRoaXMpP3RoaXMuYXR0YWNoZWQmJiFSYy5ydW5uaW5nKHRoaXMpJiZSYy5zdGFydCh0aGlzKToodGhpcy5kcmF3KCksVGQoe2NoYXJ0OnRoaXN9KSkpfWRyYXcoKXtsZXQgZTtpZih0aGlzLl9yZXNpemVCZWZvcmVEcmF3KXtsZXR7d2lkdGg6ZSxoZWlnaHQ6dH09dGhpcy5fcmVzaXplQmVmb3JlRHJhdzt0aGlzLl9yZXNpemVCZWZvcmVEcmF3PW51bGwsdGhpcy5fcmVzaXplKGUsdCl9aWYodGhpcy5jbGVhcigpLHRoaXMud2lkdGg8PTB8fHRoaXMuaGVpZ2h0PD0wfHx0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURyYXdgLHtjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IHQ9dGhpcy5fbGF5ZXJzO2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS56PD0wOysrZSl0W2VdLmRyYXcodGhpcy5jaGFydEFyZWEpO2Zvcih0aGlzLl9kcmF3RGF0YXNldHMoKTtlPHQubGVuZ3RoOysrZSl0W2VdLmRyYXcodGhpcy5jaGFydEFyZWEpO3RoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEcmF3YCl9X2dldFNvcnRlZERhdGFzZXRNZXRhcyhlKXtsZXQgdD10aGlzLl9zb3J0ZWRNZXRhc2V0cyxuPVtdLHIsaTtmb3Iocj0wLGk9dC5sZW5ndGg7cjxpOysrcil7bGV0IGk9dFtyXTsoIWV8fGkudmlzaWJsZSkmJm4ucHVzaChpKX1yZXR1cm4gbn1nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCl7cmV0dXJuIHRoaXMuX2dldFNvcnRlZERhdGFzZXRNZXRhcyghMCl9X2RyYXdEYXRhc2V0cygpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGF0YXNldHNEcmF3YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCBlPXRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMuX2RyYXdEYXRhc2V0KGVbdF0pO3RoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0c0RyYXdgKX1fZHJhd0RhdGFzZXQoZSl7bGV0IHQ9dGhpcy5jdHgsbj17bWV0YTplLGluZGV4OmUuaW5kZXgsY2FuY2VsYWJsZTohMH0scj1MYyh0aGlzLGUpO3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGF0YXNldERyYXdgLG4pIT09ITEmJihyJiZNcyh0LHIpLGUuY29udHJvbGxlci5kcmF3KCksciYmTnModCksbi5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0RHJhd2AsbikpfWlzUG9pbnRJbkFyZWEoZSl7cmV0dXJuIGpzKGUsdGhpcy5jaGFydEFyZWEsdGhpcy5fbWluUGFkZGluZyl9Z2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLHQsbixyKXtsZXQgaT1MbC5tb2Rlc1t0XTtyZXR1cm4gdHlwZW9mIGk9PWBmdW5jdGlvbmA/aSh0aGlzLGUsbixyKTpbXX1nZXREYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLmRhdGEuZGF0YXNldHNbZV0sbj10aGlzLl9tZXRhc2V0cyxyPW4uZmlsdGVyKGU9PmUmJmUuX2RhdGFzZXQ9PT10KS5wb3AoKTtyZXR1cm4gcnx8KHI9e3R5cGU6bnVsbCxkYXRhOltdLGRhdGFzZXQ6bnVsbCxjb250cm9sbGVyOm51bGwsaGlkZGVuOm51bGwseEF4aXNJRDpudWxsLHlBeGlzSUQ6bnVsbCxvcmRlcjp0JiZ0Lm9yZGVyfHwwLGluZGV4OmUsX2RhdGFzZXQ6dCxfcGFyc2VkOltdLF9zb3J0ZWQ6ITF9LG4ucHVzaChyKSkscn1nZXRDb250ZXh0KCl7cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1KcyhudWxsLHtjaGFydDp0aGlzLHR5cGU6YGNoYXJ0YH0pfWdldFZpc2libGVEYXRhc2V0Q291bnQoKXtyZXR1cm4gdGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkubGVuZ3RofWlzRGF0YXNldFZpc2libGUoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdO2lmKCF0KXJldHVybiExO2xldCBuPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSk7cmV0dXJuIHR5cGVvZiBuLmhpZGRlbj09YGJvb2xlYW5gPyFuLmhpZGRlbjohdC5oaWRkZW59c2V0RGF0YXNldFZpc2liaWxpdHkoZSx0KXtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO24uaGlkZGVuPSF0fXRvZ2dsZURhdGFWaXNpYmlsaXR5KGUpe3RoaXMuX2hpZGRlbkluZGljZXNbZV09IXRoaXMuX2hpZGRlbkluZGljZXNbZV19Z2V0RGF0YVZpc2liaWxpdHkoZSl7cmV0dXJuIXRoaXMuX2hpZGRlbkluZGljZXNbZV19X3VwZGF0ZVZpc2liaWxpdHkoZSx0LG4pe2xldCByPW4/YHNob3dgOmBoaWRlYCxpPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSksYT1pLmNvbnRyb2xsZXIuX3Jlc29sdmVBbmltYXRpb25zKHZvaWQgMCxyKTtwbyh0KT8oaS5kYXRhW3RdLmhpZGRlbj0hbix0aGlzLnVwZGF0ZSgpKToodGhpcy5zZXREYXRhc2V0VmlzaWJpbGl0eShlLG4pLGEudXBkYXRlKGkse3Zpc2libGU6bn0pLHRoaXMudXBkYXRlKHQ9PnQuZGF0YXNldEluZGV4PT09ZT9yOnZvaWQgMCkpfWhpZGUoZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMSl9c2hvdyhlLHQpe3RoaXMuX3VwZGF0ZVZpc2liaWxpdHkoZSx0LCEwKX1fZGVzdHJveURhdGFzZXRNZXRhKGUpe2xldCB0PXRoaXMuX21ldGFzZXRzW2VdO3QmJnQuY29udHJvbGxlciYmdC5jb250cm9sbGVyLl9kZXN0cm95KCksZGVsZXRlIHRoaXMuX21ldGFzZXRzW2VdfV9zdG9wKCl7bGV0IGUsdDtmb3IodGhpcy5zdG9wKCksUmMucmVtb3ZlKHRoaXMpLGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEoZSl9ZGVzdHJveSgpe3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGVzdHJveWApO2xldHtjYW52YXM6ZSxjdHg6dH09dGhpczt0aGlzLl9zdG9wKCksdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpLGUmJih0aGlzLnVuYmluZEV2ZW50cygpLE9zKGUsdCksdGhpcy5wbGF0Zm9ybS5yZWxlYXNlQ29udGV4dCh0KSx0aGlzLmNhbnZhcz1udWxsLHRoaXMuY3R4PW51bGwpLGRlbGV0ZSBPZFt0aGlzLmlkXSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGVzdHJveWApfXRvQmFzZTY0SW1hZ2UoLi4uZSl7cmV0dXJuIHRoaXMuY2FudmFzLnRvRGF0YVVSTCguLi5lKX1iaW5kRXZlbnRzKCl7dGhpcy5iaW5kVXNlckV2ZW50cygpLHRoaXMub3B0aW9ucy5yZXNwb25zaXZlP3RoaXMuYmluZFJlc3BvbnNpdmVFdmVudHMoKTp0aGlzLmF0dGFjaGVkPSEwfWJpbmRVc2VyRXZlbnRzKCl7bGV0IGU9dGhpcy5fbGlzdGVuZXJzLHQ9dGhpcy5wbGF0Zm9ybSxuPShuLHIpPT57dC5hZGRFdmVudExpc3RlbmVyKHRoaXMsbixyKSxlW25dPXJ9LHI9KGUsdCxuKT0+e2Uub2Zmc2V0WD10LGUub2Zmc2V0WT1uLHRoaXMuX2V2ZW50SGFuZGxlcihlKX07WSh0aGlzLm9wdGlvbnMuZXZlbnRzLGU9Pm4oZSxyKSl9YmluZFJlc3BvbnNpdmVFdmVudHMoKXt0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzfHw9e307bGV0IGU9dGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyx0PXRoaXMucGxhdGZvcm0sbj0obixyKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZVtuXT1yfSxyPShuLHIpPT57ZVtuXSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZGVsZXRlIGVbbl0pfSxpPShlLHQpPT57dGhpcy5jYW52YXMmJnRoaXMucmVzaXplKGUsdCl9LGEsbz0oKT0+e3IoYGF0dGFjaGAsbyksdGhpcy5hdHRhY2hlZD0hMCx0aGlzLnJlc2l6ZSgpLG4oYHJlc2l6ZWAsaSksbihgZGV0YWNoYCxhKX07YT0oKT0+e3RoaXMuYXR0YWNoZWQ9ITEscihgcmVzaXplYCxpKSx0aGlzLl9zdG9wKCksdGhpcy5fcmVzaXplKDAsMCksbihgYXR0YWNoYCxvKX0sdC5pc0F0dGFjaGVkKHRoaXMuY2FudmFzKT9vKCk6YSgpfXVuYmluZEV2ZW50cygpe1kodGhpcy5fbGlzdGVuZXJzLChlLHQpPT57dGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsdCxlKX0pLHRoaXMuX2xpc3RlbmVycz17fSxZKHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsKGUsdCk9Pnt0aGlzLnBsYXRmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyx0LGUpfSksdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycz12b2lkIDB9dXBkYXRlSG92ZXJTdHlsZShlLHQsbil7bGV0IHI9bj9gc2V0YDpgcmVtb3ZlYCxpLGEsbyxzO2Zvcih0PT09YGRhdGFzZXRgJiYoaT10aGlzLmdldERhdGFzZXRNZXRhKGVbMF0uZGF0YXNldEluZGV4KSxpLmNvbnRyb2xsZXJbYF9gK3IrYERhdGFzZXRIb3ZlclN0eWxlYF0oKSksbz0wLHM9ZS5sZW5ndGg7bzxzOysrbyl7YT1lW29dO2xldCB0PWEmJnRoaXMuZ2V0RGF0YXNldE1ldGEoYS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXI7dCYmdFtyK2BIb3ZlclN0eWxlYF0oYS5lbGVtZW50LGEuZGF0YXNldEluZGV4LGEuaW5kZXgpfX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUpe2xldCB0PXRoaXMuX2FjdGl2ZXx8W10sbj1lLm1hcCgoe2RhdGFzZXRJbmRleDplLGluZGV4OnR9KT0+e2xldCBuPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSk7aWYoIW4pdGhyb3cgRXJyb3IoYE5vIGRhdGFzZXQgZm91bmQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KTtlbyhuLHQpfHwodGhpcy5fYWN0aXZlPW4sdGhpcy5fbGFzdEV2ZW50PW51bGwsdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMobix0KSl9bm90aWZ5UGx1Z2lucyhlLHQsbil7cmV0dXJuIHRoaXMuX3BsdWdpbnMubm90aWZ5KHRoaXMsZSx0LG4pfWlzUGx1Z2luRW5hYmxlZChlKXtyZXR1cm4gdGhpcy5fcGx1Z2lucy5fY2FjaGUuZmlsdGVyKHQ9PnQucGx1Z2luLmlkPT09ZSkubGVuZ3RoPT09MX1fdXBkYXRlSG92ZXJTdHlsZXMoZSx0LG4pe2xldCByPXRoaXMub3B0aW9ucy5ob3ZlcixpPShlLHQpPT5lLmZpbHRlcihlPT4hdC5zb21lKHQ9PmUuZGF0YXNldEluZGV4PT09dC5kYXRhc2V0SW5kZXgmJmUuaW5kZXg9PT10LmluZGV4KSksYT1pKHQsZSksbz1uP2U6aShlLHQpO2EubGVuZ3RoJiZ0aGlzLnVwZGF0ZUhvdmVyU3R5bGUoYSxyLm1vZGUsITEpLG8ubGVuZ3RoJiZyLm1vZGUmJnRoaXMudXBkYXRlSG92ZXJTdHlsZShvLHIubW9kZSwhMCl9X2V2ZW50SGFuZGxlcihlLHQpe2xldCBuPXtldmVudDplLHJlcGxheTp0LGNhbmNlbGFibGU6ITAsaW5DaGFydEFyZWE6dGhpcy5pc1BvaW50SW5BcmVhKGUpfSxyPXQ9Pih0Lm9wdGlvbnMuZXZlbnRzfHx0aGlzLm9wdGlvbnMuZXZlbnRzKS5pbmNsdWRlcyhlLm5hdGl2ZS50eXBlKTtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUV2ZW50YCxuLHIpPT09ITEpcmV0dXJuO2xldCBpPXRoaXMuX2hhbmRsZUV2ZW50KGUsdCxuLmluQ2hhcnRBcmVhKTtyZXR1cm4gbi5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJFdmVudGAsbixyKSwoaXx8bi5jaGFuZ2VkKSYmdGhpcy5yZW5kZXIoKSx0aGlzfV9oYW5kbGVFdmVudChlLHQsbil7bGV0e19hY3RpdmU6cj1bXSxvcHRpb25zOml9PXRoaXMsYT10LG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudHMoZSxyLG4sYSkscz1nbyhlKSxjPWpkKGUsdGhpcy5fbGFzdEV2ZW50LG4scyk7biYmKHRoaXMuX2xhc3RFdmVudD1udWxsLEooaS5vbkhvdmVyLFtlLG8sdGhpc10sdGhpcykscyYmSihpLm9uQ2xpY2ssW2Usbyx0aGlzXSx0aGlzKSk7bGV0IGw9IWVvKG8scik7cmV0dXJuKGx8fHQpJiYodGhpcy5fYWN0aXZlPW8sdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMobyxyLHQpKSx0aGlzLl9sYXN0RXZlbnQ9YyxsfV9nZXRBY3RpdmVFbGVtZW50cyhlLHQsbixyKXtpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFuKXJldHVybiB0O2xldCBpPXRoaXMub3B0aW9ucy5ob3ZlcjtyZXR1cm4gdGhpcy5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGkscil9fTtmdW5jdGlvbiBOZCgpe3JldHVybiBZKE1kLmluc3RhbmNlcyxlPT5lLl9wbHVnaW5zLmludmFsaWRhdGUoKSl9ZnVuY3Rpb24gUGQoZSx0KXtsZXR7eDpuLHk6cixiYXNlOmksd2lkdGg6YSxoZWlnaHQ6b309ZS5nZXRQcm9wcyhbYHhgLGB5YCxgYmFzZWAsYHdpZHRoYCxgaGVpZ2h0YF0sdCkscyxjLGwsdSxkO3JldHVybiBlLmhvcml6b250YWw/KGQ9by8yLHM9TWF0aC5taW4obixpKSxjPU1hdGgubWF4KG4saSksbD1yLWQsdT1yK2QpOihkPWEvMixzPW4tZCxjPW4rZCxsPU1hdGgubWluKHIsaSksdT1NYXRoLm1heChyLGkpKSx7bGVmdDpzLHRvcDpsLHJpZ2h0OmMsYm90dG9tOnV9fWZ1bmN0aW9uIEZkKGUsdCxuLHIpe3JldHVybiBlPzA6em8odCxuLHIpfWZ1bmN0aW9uIElkKGUsdCxuKXtsZXQgcj1lLm9wdGlvbnMuYm9yZGVyV2lkdGgsaT1lLmJvcmRlclNraXBwZWQsYT1XcyhyKTtyZXR1cm57dDpGZChpLnRvcCxhLnRvcCwwLG4pLHI6RmQoaS5yaWdodCxhLnJpZ2h0LDAsdCksYjpGZChpLmJvdHRvbSxhLmJvdHRvbSwwLG4pLGw6RmQoaS5sZWZ0LGEubGVmdCwwLHQpfX1mdW5jdGlvbiBMZChlLHQsbil7bGV0e2VuYWJsZUJvcmRlclJhZGl1czpyfT1lLmdldFByb3BzKFtgZW5hYmxlQm9yZGVyUmFkaXVzYF0pLGk9ZS5vcHRpb25zLmJvcmRlclJhZGl1cyxhPUdzKGkpLG89TWF0aC5taW4odCxuKSxzPWUuYm9yZGVyU2tpcHBlZCxjPXJ8fEcoaSk7cmV0dXJue3RvcExlZnQ6RmQoIWN8fHMudG9wfHxzLmxlZnQsYS50b3BMZWZ0LDAsbyksdG9wUmlnaHQ6RmQoIWN8fHMudG9wfHxzLnJpZ2h0LGEudG9wUmlnaHQsMCxvKSxib3R0b21MZWZ0OkZkKCFjfHxzLmJvdHRvbXx8cy5sZWZ0LGEuYm90dG9tTGVmdCwwLG8pLGJvdHRvbVJpZ2h0OkZkKCFjfHxzLmJvdHRvbXx8cy5yaWdodCxhLmJvdHRvbVJpZ2h0LDAsbyl9fWZ1bmN0aW9uIFJkKGUpe2xldCB0PVBkKGUpLG49dC5yaWdodC10LmxlZnQscj10LmJvdHRvbS10LnRvcCxpPUlkKGUsbi8yLHIvMiksYT1MZChlLG4vMixyLzIpO3JldHVybntvdXRlcjp7eDp0LmxlZnQseTp0LnRvcCx3Om4saDpyLHJhZGl1czphfSxpbm5lcjp7eDp0LmxlZnQraS5sLHk6dC50b3AraS50LHc6bi1pLmwtaS5yLGg6ci1pLnQtaS5iLHJhZGl1czp7dG9wTGVmdDpNYXRoLm1heCgwLGEudG9wTGVmdC1NYXRoLm1heChpLnQsaS5sKSksdG9wUmlnaHQ6TWF0aC5tYXgoMCxhLnRvcFJpZ2h0LU1hdGgubWF4KGkudCxpLnIpKSxib3R0b21MZWZ0Ok1hdGgubWF4KDAsYS5ib3R0b21MZWZ0LU1hdGgubWF4KGkuYixpLmwpKSxib3R0b21SaWdodDpNYXRoLm1heCgwLGEuYm90dG9tUmlnaHQtTWF0aC5tYXgoaS5iLGkucikpfX19fWZ1bmN0aW9uIHpkKGUsdCxuLHIpe2xldCBpPXQ9PT1udWxsLGE9bj09PW51bGwsbz1lJiYhKGkmJmEpJiZQZChlLHIpO3JldHVybiBvJiYoaXx8Vm8odCxvLmxlZnQsby5yaWdodCkpJiYoYXx8Vm8obixvLnRvcCxvLmJvdHRvbSkpfWZ1bmN0aW9uIEJkKGUpe3JldHVybiBlLnRvcExlZnR8fGUudG9wUmlnaHR8fGUuYm90dG9tTGVmdHx8ZS5ib3R0b21SaWdodH1mdW5jdGlvbiBWZChlLHQpe2UucmVjdCh0LngsdC55LHQudyx0LmgpfWZ1bmN0aW9uIEhkKGUsdCxuPXt9KXtsZXQgcj1lLng9PT1uLng/MDotdCxpPWUueT09PW4ueT8wOi10LGE9KGUueCtlLnc9PT1uLngrbi53PzA6dCktcixvPShlLnkrZS5oPT09bi55K24uaD8wOnQpLWk7cmV0dXJue3g6ZS54K3IseTplLnkraSx3OmUudythLGg6ZS5oK28scmFkaXVzOmUucmFkaXVzfX12YXIgVWQ9Y2xhc3MgZXh0ZW5kcyB3dXtzdGF0aWMgaWQ9YGJhcmA7c3RhdGljIGRlZmF1bHRzPXtib3JkZXJTa2lwcGVkOmBzdGFydGAsYm9yZGVyV2lkdGg6MCxib3JkZXJSYWRpdXM6MCxpbmZsYXRlQW1vdW50OmBhdXRvYCxwb2ludFN0eWxlOnZvaWQgMH07c3RhdGljIGRlZmF1bHRSb3V0ZXM9e2JhY2tncm91bmRDb2xvcjpgYmFja2dyb3VuZENvbG9yYCxib3JkZXJDb2xvcjpgYm9yZGVyQ29sb3JgfTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5ob3Jpem9udGFsPXZvaWQgMCx0aGlzLmJhc2U9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmluZmxhdGVBbW91bnQ9dm9pZCAwLGUmJk9iamVjdC5hc3NpZ24odGhpcyxlKX1kcmF3KGUpe2xldHtpbmZsYXRlQW1vdW50OnQsb3B0aW9uczp7Ym9yZGVyQ29sb3I6bixiYWNrZ3JvdW5kQ29sb3I6cn19PXRoaXMse2lubmVyOmksb3V0ZXI6YX09UmQodGhpcyksbz1CZChhLnJhZGl1cyk/UnM6VmQ7ZS5zYXZlKCksKGEudyE9PWkud3x8YS5oIT09aS5oKSYmKGUuYmVnaW5QYXRoKCksbyhlLEhkKGEsdCxpKSksZS5jbGlwKCksbyhlLEhkKGksLXQsYSkpLGUuZmlsbFN0eWxlPW4sZS5maWxsKGBldmVub2RkYCkpLGUuYmVnaW5QYXRoKCksbyhlLEhkKGksdCkpLGUuZmlsbFN0eWxlPXIsZS5maWxsKCksZS5yZXN0b3JlKCl9aW5SYW5nZShlLHQsbil7cmV0dXJuIHpkKHRoaXMsZSx0LG4pfWluWFJhbmdlKGUsdCl7cmV0dXJuIHpkKHRoaXMsZSxudWxsLHQpfWluWVJhbmdlKGUsdCl7cmV0dXJuIHpkKHRoaXMsbnVsbCxlLHQpfWdldENlbnRlclBvaW50KGUpe2xldHt4OnQseTpuLGJhc2U6cixob3Jpem9udGFsOml9PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWAsYGJhc2VgLGBob3Jpem9udGFsYF0sZSk7cmV0dXJue3g6aT8odCtyKS8yOnQseTppP246KG4rcikvMn19Z2V0UmFuZ2UoZSl7cmV0dXJuIGU9PT1geGA/dGhpcy53aWR0aC8yOnRoaXMuaGVpZ2h0LzJ9fSxXZD0oZSx0KT0+e2xldHtib3hIZWlnaHQ6bj10LGJveFdpZHRoOnI9dH09ZTtyZXR1cm4gZS51c2VQb2ludFN0eWxlJiYobj1NYXRoLm1pbihuLHQpLHI9ZS5wb2ludFN0eWxlV2lkdGh8fE1hdGgubWluKHIsdCkpLHtib3hXaWR0aDpyLGJveEhlaWdodDpuLGl0ZW1IZWlnaHQ6TWF0aC5tYXgodCxuKX19LEdkPShlLHQpPT5lIT09bnVsbCYmdCE9PW51bGwmJmUuZGF0YXNldEluZGV4PT09dC5kYXRhc2V0SW5kZXgmJmUuaW5kZXg9PT10LmluZGV4LEtkPWNsYXNzIGV4dGVuZHMgd3V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9hZGRlZD0hMSx0aGlzLmxlZ2VuZEhpdEJveGVzPVtdLHRoaXMuX2hvdmVyZWRJdGVtPW51bGwsdGhpcy5kb3VnaG51dE1vZGU9ITEsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5jdHg9ZS5jdHgsdGhpcy5sZWdlbmRJdGVtcz12b2lkIDAsdGhpcy5jb2x1bW5TaXplcz12b2lkIDAsdGhpcy5saW5lV2lkdGhzPXZvaWQgMCx0aGlzLm1heEhlaWdodD12b2lkIDAsdGhpcy5tYXhXaWR0aD12b2lkIDAsdGhpcy50b3A9dm9pZCAwLHRoaXMuYm90dG9tPXZvaWQgMCx0aGlzLmxlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLl9tYXJnaW5zPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLndlaWdodD12b2lkIDAsdGhpcy5mdWxsU2l6ZT12b2lkIDB9dXBkYXRlKGUsdCxuKXt0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW4sdGhpcy5zZXREaW1lbnNpb25zKCksdGhpcy5idWlsZExhYmVscygpLHRoaXMuZml0KCl9c2V0RGltZW5zaW9ucygpe3RoaXMuaXNIb3Jpem9udGFsKCk/KHRoaXMud2lkdGg9dGhpcy5tYXhXaWR0aCx0aGlzLmxlZnQ9dGhpcy5fbWFyZ2lucy5sZWZ0LHRoaXMucmlnaHQ9dGhpcy53aWR0aCk6KHRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LHRoaXMudG9wPXRoaXMuX21hcmdpbnMudG9wLHRoaXMuYm90dG9tPXRoaXMuaGVpZ2h0KX1idWlsZExhYmVscygpe2xldCBlPXRoaXMub3B0aW9ucy5sYWJlbHN8fHt9LHQ9SihlLmdlbmVyYXRlTGFiZWxzLFt0aGlzLmNoYXJ0XSx0aGlzKXx8W107ZS5maWx0ZXImJih0PXQuZmlsdGVyKHQ9PmUuZmlsdGVyKHQsdGhpcy5jaGFydC5kYXRhKSkpLGUuc29ydCYmKHQ9dC5zb3J0KCh0LG4pPT5lLnNvcnQodCxuLHRoaXMuY2hhcnQuZGF0YSkpKSx0aGlzLm9wdGlvbnMucmV2ZXJzZSYmdC5yZXZlcnNlKCksdGhpcy5sZWdlbmRJdGVtcz10fWZpdCgpe2xldHtvcHRpb25zOmUsY3R4OnR9PXRoaXM7aWYoIWUuZGlzcGxheSl7dGhpcy53aWR0aD10aGlzLmhlaWdodD0wO3JldHVybn1sZXQgbj1lLmxhYmVscyxyPSQobi5mb250KSxpPXIuc2l6ZSxhPXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpLHtib3hXaWR0aDpvLGl0ZW1IZWlnaHQ6c309V2QobixpKSxjLGw7dC5mb250PXIuc3RyaW5nLHRoaXMuaXNIb3Jpem9udGFsKCk/KGM9dGhpcy5tYXhXaWR0aCxsPXRoaXMuX2ZpdFJvd3MoYSxpLG8scykrMTApOihsPXRoaXMubWF4SGVpZ2h0LGM9dGhpcy5fZml0Q29scyhhLHIsbyxzKSsxMCksdGhpcy53aWR0aD1NYXRoLm1pbihjLGUubWF4V2lkdGh8fHRoaXMubWF4V2lkdGgpLHRoaXMuaGVpZ2h0PU1hdGgubWluKGwsZS5tYXhIZWlnaHR8fHRoaXMubWF4SGVpZ2h0KX1fZml0Um93cyhlLHQsbixyKXtsZXR7Y3R4OmksbWF4V2lkdGg6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMubGluZVdpZHRocz1bMF0sbD1yK28sdT1lO2kudGV4dEFsaWduPWBsZWZ0YCxpLnRleHRCYXNlbGluZT1gbWlkZGxlYDtsZXQgZD0tMSxmPS1sO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUscCk9PntsZXQgbT1uK3QvMitpLm1lYXN1cmVUZXh0KGUudGV4dCkud2lkdGg7KHA9PT0wfHxjW2MubGVuZ3RoLTFdK20rMipvPmEpJiYodSs9bCxjW2MubGVuZ3RoLShwPjA/MDoxKV09MCxmKz1sLGQrKyksc1twXT17bGVmdDowLHRvcDpmLHJvdzpkLHdpZHRoOm0saGVpZ2h0OnJ9LGNbYy5sZW5ndGgtMV0rPW0rb30pLHV9X2ZpdENvbHMoZSx0LG4scil7bGV0e2N0eDppLG1heEhlaWdodDphLG9wdGlvbnM6e2xhYmVsczp7cGFkZGluZzpvfX19PXRoaXMscz10aGlzLmxlZ2VuZEhpdEJveGVzPVtdLGM9dGhpcy5jb2x1bW5TaXplcz1bXSxsPWEtZSx1PW8sZD0wLGY9MCxwPTAsbT0wO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUsYSk9PntsZXR7aXRlbVdpZHRoOmgsaXRlbUhlaWdodDpnfT1xZChuLHQsaSxlLHIpO2E+MCYmZitnKzIqbz5sJiYodSs9ZCtvLGMucHVzaCh7d2lkdGg6ZCxoZWlnaHQ6Zn0pLHArPWQrbyxtKyssZD1mPTApLHNbYV09e2xlZnQ6cCx0b3A6Zixjb2w6bSx3aWR0aDpoLGhlaWdodDpnfSxkPU1hdGgubWF4KGQsaCksZis9ZytvfSksdSs9ZCxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSx1fWFkanVzdEhpdEJveGVzKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNwbGF5KXJldHVybjtsZXQgZT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7bGVnZW5kSGl0Qm94ZXM6dCxvcHRpb25zOnthbGlnbjpuLGxhYmVsczp7cGFkZGluZzpyfSxydGw6aX19PXRoaXMsYT1NYyhpLHRoaXMubGVmdCx0aGlzLndpZHRoKTtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgaT0wLG89ZXMobix0aGlzLmxlZnQrcix0aGlzLnJpZ2h0LXRoaXMubGluZVdpZHRoc1tpXSk7Zm9yKGxldCBzIG9mIHQpaSE9PXMucm93JiYoaT1zLnJvdyxvPWVzKG4sdGhpcy5sZWZ0K3IsdGhpcy5yaWdodC10aGlzLmxpbmVXaWR0aHNbaV0pKSxzLnRvcCs9dGhpcy50b3ArZStyLHMubGVmdD1hLmxlZnRGb3JMdHIoYS54KG8pLHMud2lkdGgpLG8rPXMud2lkdGgrcn1lbHNle2xldCBpPTAsbz1lcyhuLHRoaXMudG9wK2Urcix0aGlzLmJvdHRvbS10aGlzLmNvbHVtblNpemVzW2ldLmhlaWdodCk7Zm9yKGxldCBzIG9mIHQpcy5jb2whPT1pJiYoaT1zLmNvbCxvPWVzKG4sdGhpcy50b3ArZStyLHRoaXMuYm90dG9tLXRoaXMuY29sdW1uU2l6ZXNbaV0uaGVpZ2h0KSkscy50b3A9byxzLmxlZnQrPXRoaXMubGVmdCtyLHMubGVmdD1hLmxlZnRGb3JMdHIoYS54KHMubGVmdCkscy53aWR0aCksbys9cy5oZWlnaHQrcn19aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbj09PWB0b3BgfHx0aGlzLm9wdGlvbnMucG9zaXRpb249PT1gYm90dG9tYH1kcmF3KCl7aWYodGhpcy5vcHRpb25zLmRpc3BsYXkpe2xldCBlPXRoaXMuY3R4O01zKGUsdGhpcyksdGhpcy5fZHJhdygpLE5zKGUpfX1fZHJhdygpe2xldHtvcHRpb25zOmUsY29sdW1uU2l6ZXM6dCxsaW5lV2lkdGhzOm4sY3R4OnJ9PXRoaXMse2FsaWduOmksbGFiZWxzOmF9PWUsbz1aLmNvbG9yLHM9TWMoZS5ydGwsdGhpcy5sZWZ0LHRoaXMud2lkdGgpLGM9JChhLmZvbnQpLHtwYWRkaW5nOmx9PWEsdT1jLnNpemUsZD11LzIsZjt0aGlzLmRyYXdUaXRsZSgpLHIudGV4dEFsaWduPXMudGV4dEFsaWduKGBsZWZ0YCksci50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsci5saW5lV2lkdGg9LjUsci5mb250PWMuc3RyaW5nO2xldHtib3hXaWR0aDpwLGJveEhlaWdodDptLGl0ZW1IZWlnaHQ6aH09V2QoYSx1KSxnPWZ1bmN0aW9uKGUsdCxuKXtpZihpc05hTihwKXx8cDw9MHx8aXNOYU4obSl8fG08MClyZXR1cm47ci5zYXZlKCk7bGV0IGk9cShuLmxpbmVXaWR0aCwxKTtpZihyLmZpbGxTdHlsZT1xKG4uZmlsbFN0eWxlLG8pLHIubGluZUNhcD1xKG4ubGluZUNhcCxgYnV0dGApLHIubGluZURhc2hPZmZzZXQ9cShuLmxpbmVEYXNoT2Zmc2V0LDApLHIubGluZUpvaW49cShuLmxpbmVKb2luLGBtaXRlcmApLHIubGluZVdpZHRoPWksci5zdHJva2VTdHlsZT1xKG4uc3Ryb2tlU3R5bGUsbyksci5zZXRMaW5lRGFzaChxKG4ubGluZURhc2gsW10pKSxhLnVzZVBvaW50U3R5bGUpe2xldCBvPXtyYWRpdXM6bSpNYXRoLlNRUlQyLzIscG9pbnRTdHlsZTpuLnBvaW50U3R5bGUscm90YXRpb246bi5yb3RhdGlvbixib3JkZXJXaWR0aDppfSxjPXMueFBsdXMoZSxwLzIpLGw9dCtkO0FzKHIsbyxjLGwsYS5wb2ludFN0eWxlV2lkdGgmJnApfWVsc2V7bGV0IGE9dCtNYXRoLm1heCgodS1tKS8yLDApLG89cy5sZWZ0Rm9yTHRyKGUscCksYz1HcyhuLmJvcmRlclJhZGl1cyk7ci5iZWdpblBhdGgoKSxPYmplY3QudmFsdWVzKGMpLnNvbWUoZT0+ZSE9PTApP1JzKHIse3g6byx5OmEsdzpwLGg6bSxyYWRpdXM6Y30pOnIucmVjdChvLGEscCxtKSxyLmZpbGwoKSxpIT09MCYmci5zdHJva2UoKX1yLnJlc3RvcmUoKX0sXz1mdW5jdGlvbihlLHQsbil7THMocixuLnRleHQsZSx0K2gvMixjLHtzdHJpa2V0aHJvdWdoOm4uaGlkZGVuLHRleHRBbGlnbjpzLnRleHRBbGlnbihuLnRleHRBbGlnbil9KX0sdj10aGlzLmlzSG9yaXpvbnRhbCgpLHk9dGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCk7Zj12P3t4OmVzKGksdGhpcy5sZWZ0K2wsdGhpcy5yaWdodC1uWzBdKSx5OnRoaXMudG9wK2wreSxsaW5lOjB9Ont4OnRoaXMubGVmdCtsLHk6ZXMoaSx0aGlzLnRvcCt5K2wsdGhpcy5ib3R0b20tdFswXS5oZWlnaHQpLGxpbmU6MH0sTmModGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKTtsZXQgYj1oK2w7dGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChvLHUpPT57ci5zdHJva2VTdHlsZT1vLmZvbnRDb2xvcixyLmZpbGxTdHlsZT1vLmZvbnRDb2xvcjtsZXQgbT1yLm1lYXN1cmVUZXh0KG8udGV4dCkud2lkdGgsaD1zLnRleHRBbGlnbihvLnRleHRBbGlnbnx8PWEudGV4dEFsaWduKSx4PXArZCttLFM9Zi54LEM9Zi55O3Muc2V0V2lkdGgodGhpcy53aWR0aCksdj91PjAmJlMreCtsPnRoaXMucmlnaHQmJihDPWYueSs9YixmLmxpbmUrKyxTPWYueD1lcyhpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtbltmLmxpbmVdKSk6dT4wJiZDK2I+dGhpcy5ib3R0b20mJihTPWYueD1TK3RbZi5saW5lXS53aWR0aCtsLGYubGluZSsrLEM9Zi55PWVzKGksdGhpcy50b3AreStsLHRoaXMuYm90dG9tLXRbZi5saW5lXS5oZWlnaHQpKTtsZXQgdz1zLngoUyk7aWYoZyh3LEMsbyksUz10cyhoLFMrcCtkLHY/Uyt4OnRoaXMucmlnaHQsZS5ydGwpLF8ocy54KFMpLEMsbyksdilmLngrPXgrbDtlbHNlIGlmKHR5cGVvZiBvLnRleHQhPWBzdHJpbmdgKXtsZXQgZT1jLmxpbmVIZWlnaHQ7Zi55Kz1YZChvLGUpK2x9ZWxzZSBmLnkrPWJ9KSxQYyh0aGlzLmN0eCxlLnRleHREaXJlY3Rpb24pfWRyYXdUaXRsZSgpe2xldCBlPXRoaXMub3B0aW9ucyx0PWUudGl0bGUsbj0kKHQuZm9udCkscj1RKHQucGFkZGluZyk7aWYoIXQuZGlzcGxheSlyZXR1cm47bGV0IGk9TWMoZS5ydGwsdGhpcy5sZWZ0LHRoaXMud2lkdGgpLGE9dGhpcy5jdHgsbz10LnBvc2l0aW9uLHM9bi5zaXplLzIsYz1yLnRvcCtzLGwsdT10aGlzLmxlZnQsZD10aGlzLndpZHRoO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpZD1NYXRoLm1heCguLi50aGlzLmxpbmVXaWR0aHMpLGw9dGhpcy50b3ArYyx1PWVzKGUuYWxpZ24sdSx0aGlzLnJpZ2h0LWQpO2Vsc2V7bGV0IHQ9dGhpcy5jb2x1bW5TaXplcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5oZWlnaHQpLDApO2w9YytlcyhlLmFsaWduLHRoaXMudG9wLHRoaXMuYm90dG9tLXQtZS5sYWJlbHMucGFkZGluZy10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSl9bGV0IGY9ZXMobyx1LHUrZCk7YS50ZXh0QWxpZ249aS50ZXh0QWxpZ24oJG8obykpLGEudGV4dEJhc2VsaW5lPWBtaWRkbGVgLGEuc3Ryb2tlU3R5bGU9dC5jb2xvcixhLmZpbGxTdHlsZT10LmNvbG9yLGEuZm9udD1uLnN0cmluZyxMcyhhLHQudGV4dCxmLGwsbil9X2NvbXB1dGVUaXRsZUhlaWdodCgpe2xldCBlPXRoaXMub3B0aW9ucy50aXRsZSx0PSQoZS5mb250KSxuPVEoZS5wYWRkaW5nKTtyZXR1cm4gZS5kaXNwbGF5P3QubGluZUhlaWdodCtuLmhlaWdodDowfV9nZXRMZWdlbmRJdGVtQXQoZSx0KXtsZXQgbixyLGk7aWYoVm8oZSx0aGlzLmxlZnQsdGhpcy5yaWdodCkmJlZvKHQsdGhpcy50b3AsdGhpcy5ib3R0b20pKXtmb3IoaT10aGlzLmxlZ2VuZEhpdEJveGVzLG49MDtuPGkubGVuZ3RoOysrbilpZihyPWlbbl0sVm8oZSxyLmxlZnQsci5sZWZ0K3Iud2lkdGgpJiZWbyh0LHIudG9wLHIudG9wK3IuaGVpZ2h0KSlyZXR1cm4gdGhpcy5sZWdlbmRJdGVtc1tuXX1yZXR1cm4gbnVsbH1oYW5kbGVFdmVudChlKXtsZXQgdD10aGlzLm9wdGlvbnM7aWYoIVpkKGUudHlwZSx0KSlyZXR1cm47bGV0IG49dGhpcy5fZ2V0TGVnZW5kSXRlbUF0KGUueCxlLnkpO2lmKGUudHlwZT09PWBtb3VzZW1vdmVgfHxlLnR5cGU9PT1gbW91c2VvdXRgKXtsZXQgcj10aGlzLl9ob3ZlcmVkSXRlbSxpPUdkKHIsbik7ciYmIWkmJkoodC5vbkxlYXZlLFtlLHIsdGhpc10sdGhpcyksdGhpcy5faG92ZXJlZEl0ZW09bixuJiYhaSYmSih0Lm9uSG92ZXIsW2Usbix0aGlzXSx0aGlzKX1lbHNlIG4mJkoodC5vbkNsaWNrLFtlLG4sdGhpc10sdGhpcyl9fTtmdW5jdGlvbiBxZChlLHQsbixyLGkpe3JldHVybntpdGVtV2lkdGg6SmQocixlLHQsbiksaXRlbUhlaWdodDpZZChpLHIsdC5saW5lSGVpZ2h0KX19ZnVuY3Rpb24gSmQoZSx0LG4scil7bGV0IGk9ZS50ZXh0O3JldHVybiBpJiZ0eXBlb2YgaSE9YHN0cmluZ2AmJihpPWkucmVkdWNlKChlLHQpPT5lLmxlbmd0aD50Lmxlbmd0aD9lOnQpKSx0K24uc2l6ZS8yK3IubWVhc3VyZVRleHQoaSkud2lkdGh9ZnVuY3Rpb24gWWQoZSx0LG4pe2xldCByPWU7cmV0dXJuIHR5cGVvZiB0LnRleHQhPWBzdHJpbmdgJiYocj1YZCh0LG4pKSxyfWZ1bmN0aW9uIFhkKGUsdCl7cmV0dXJuIHQqKGUudGV4dD9lLnRleHQubGVuZ3RoOjApfWZ1bmN0aW9uIFpkKGUsdCl7cmV0dXJuISEoKGU9PT1gbW91c2Vtb3ZlYHx8ZT09PWBtb3VzZW91dGApJiYodC5vbkhvdmVyfHx0Lm9uTGVhdmUpfHx0Lm9uQ2xpY2smJihlPT09YGNsaWNrYHx8ZT09PWBtb3VzZXVwYCkpfXZhciBRZD17aWQ6YGxlZ2VuZGAsX2VsZW1lbnQ6S2Qsc3RhcnQoZSx0LG4pe2xldCByPWUubGVnZW5kPW5ldyBLZCh7Y3R4OmUuY3R4LG9wdGlvbnM6bixjaGFydDplfSk7ZXUuY29uZmlndXJlKGUscixuKSxldS5hZGRCb3goZSxyKX0sc3RvcChlKXtldS5yZW1vdmVCb3goZSxlLmxlZ2VuZCksZGVsZXRlIGUubGVnZW5kfSxiZWZvcmVVcGRhdGUoZSx0LG4pe2xldCByPWUubGVnZW5kO2V1LmNvbmZpZ3VyZShlLHIsbiksci5vcHRpb25zPW59LGFmdGVyVXBkYXRlKGUpe2xldCB0PWUubGVnZW5kO3QuYnVpbGRMYWJlbHMoKSx0LmFkanVzdEhpdEJveGVzKCl9LGFmdGVyRXZlbnQoZSx0KXt0LnJlcGxheXx8ZS5sZWdlbmQuaGFuZGxlRXZlbnQodC5ldmVudCl9LGRlZmF1bHRzOntkaXNwbGF5OiEwLHBvc2l0aW9uOmB0b3BgLGFsaWduOmBjZW50ZXJgLGZ1bGxTaXplOiEwLHJldmVyc2U6ITEsd2VpZ2h0OjFlMyxvbkNsaWNrKGUsdCxuKXtsZXQgcj10LmRhdGFzZXRJbmRleCxpPW4uY2hhcnQ7aS5pc0RhdGFzZXRWaXNpYmxlKHIpPyhpLmhpZGUociksdC5oaWRkZW49ITApOihpLnNob3cociksdC5oaWRkZW49ITEpfSxvbkhvdmVyOm51bGwsb25MZWF2ZTpudWxsLGxhYmVsczp7Y29sb3I6ZT0+ZS5jaGFydC5vcHRpb25zLmNvbG9yLGJveFdpZHRoOjQwLHBhZGRpbmc6MTAsZ2VuZXJhdGVMYWJlbHMoZSl7bGV0IHQ9ZS5kYXRhLmRhdGFzZXRzLHtsYWJlbHM6e3VzZVBvaW50U3R5bGU6bixwb2ludFN0eWxlOnIsdGV4dEFsaWduOmksY29sb3I6YSx1c2VCb3JkZXJSYWRpdXM6byxib3JkZXJSYWRpdXM6c319PWUubGVnZW5kLm9wdGlvbnM7cmV0dXJuIGUuX2dldFNvcnRlZERhdGFzZXRNZXRhcygpLm1hcChlPT57bGV0IGM9ZS5jb250cm9sbGVyLmdldFN0eWxlKG4/MDp2b2lkIDApLGw9UShjLmJvcmRlcldpZHRoKTtyZXR1cm57dGV4dDp0W2UuaW5kZXhdLmxhYmVsLGZpbGxTdHlsZTpjLmJhY2tncm91bmRDb2xvcixmb250Q29sb3I6YSxoaWRkZW46IWUudmlzaWJsZSxsaW5lQ2FwOmMuYm9yZGVyQ2FwU3R5bGUsbGluZURhc2g6Yy5ib3JkZXJEYXNoLGxpbmVEYXNoT2Zmc2V0OmMuYm9yZGVyRGFzaE9mZnNldCxsaW5lSm9pbjpjLmJvcmRlckpvaW5TdHlsZSxsaW5lV2lkdGg6KGwud2lkdGgrbC5oZWlnaHQpLzQsc3Ryb2tlU3R5bGU6Yy5ib3JkZXJDb2xvcixwb2ludFN0eWxlOnJ8fGMucG9pbnRTdHlsZSxyb3RhdGlvbjpjLnJvdGF0aW9uLHRleHRBbGlnbjppfHxjLnRleHRBbGlnbixib3JkZXJSYWRpdXM6byYmKHN8fGMuYm9yZGVyUmFkaXVzKSxkYXRhc2V0SW5kZXg6ZS5pbmRleH19LHRoaXMpfX0sdGl0bGU6e2NvbG9yOmU9PmUuY2hhcnQub3B0aW9ucy5jb2xvcixkaXNwbGF5OiExLHBvc2l0aW9uOmBjZW50ZXJgLHRleHQ6YGB9fSxkZXNjcmlwdG9yczp7X3NjcmlwdGFibGU6ZT0+IWUuc3RhcnRzV2l0aChgb25gKSxsYWJlbHM6e19zY3JpcHRhYmxlOmU9PiFbYGdlbmVyYXRlTGFiZWxzYCxgZmlsdGVyYCxgc29ydGBdLmluY2x1ZGVzKGUpfX19LCRkPXthdmVyYWdlKGUpe2lmKCFlLmxlbmd0aClyZXR1cm4hMTtsZXQgdCxuLHI9bmV3IFNldCxpPTAsYT0wO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXtsZXQgbj1lW3RdLmVsZW1lbnQ7aWYobiYmbi5oYXNWYWx1ZSgpKXtsZXQgZT1uLnRvb2x0aXBQb3NpdGlvbigpO3IuYWRkKGUueCksaSs9ZS55LCsrYX19cmV0dXJuIGE9PT0wfHxyLnNpemU9PT0wPyExOnt4OlsuLi5yXS5yZWR1Y2UoKGUsdCk9PmUrdCkvci5zaXplLHk6aS9hfX0sbmVhcmVzdChlLHQpe2lmKCFlLmxlbmd0aClyZXR1cm4hMTtsZXQgbj10Lngscj10LnksaT0xLzAsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2Epe2xldCBuPWVbYV0uZWxlbWVudDtpZihuJiZuLmhhc1ZhbHVlKCkpe2xldCBlPUlvKHQsbi5nZXRDZW50ZXJQb2ludCgpKTtlPGkmJihpPWUscz1uKX19aWYocyl7bGV0IGU9cy50b29sdGlwUG9zaXRpb24oKTtuPWUueCxyPWUueX1yZXR1cm57eDpuLHk6cn19fTtmdW5jdGlvbiBlZihlLHQpe3JldHVybiB0JiYoVyh0KT9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLHQpOmUucHVzaCh0KSksZX1mdW5jdGlvbiB0ZihlKXtyZXR1cm4odHlwZW9mIGU9PWBzdHJpbmdgfHxlIGluc3RhbmNlb2YgU3RyaW5nKSYmZS5pbmRleE9mKGAKYCk+LTE/ZS5zcGxpdChgCmApOmV9ZnVuY3Rpb24gbmYoZSx0KXtsZXR7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpyLGluZGV4Oml9PXQsYT1lLmdldERhdGFzZXRNZXRhKHIpLmNvbnRyb2xsZXIse2xhYmVsOm8sdmFsdWU6c309YS5nZXRMYWJlbEFuZFZhbHVlKGkpO3JldHVybntjaGFydDplLGxhYmVsOm8scGFyc2VkOmEuZ2V0UGFyc2VkKGkpLHJhdzplLmRhdGEuZGF0YXNldHNbcl0uZGF0YVtpXSxmb3JtYXR0ZWRWYWx1ZTpzLGRhdGFzZXQ6YS5nZXREYXRhc2V0KCksZGF0YUluZGV4OmksZGF0YXNldEluZGV4OnIsZWxlbWVudDpufX1mdW5jdGlvbiByZihlLHQpe2xldCBuPWUuY2hhcnQuY3R4LHtib2R5OnIsZm9vdGVyOmksdGl0bGU6YX09ZSx7Ym94V2lkdGg6byxib3hIZWlnaHQ6c309dCxjPSQodC5ib2R5Rm9udCksbD0kKHQudGl0bGVGb250KSx1PSQodC5mb290ZXJGb250KSxkPWEubGVuZ3RoLGY9aS5sZW5ndGgscD1yLmxlbmd0aCxtPVEodC5wYWRkaW5nKSxoPW0uaGVpZ2h0LGc9MCxfPXIucmVkdWNlKChlLHQpPT5lK3QuYmVmb3JlLmxlbmd0aCt0LmxpbmVzLmxlbmd0aCt0LmFmdGVyLmxlbmd0aCwwKTtpZihfKz1lLmJlZm9yZUJvZHkubGVuZ3RoK2UuYWZ0ZXJCb2R5Lmxlbmd0aCxkJiYoaCs9ZCpsLmxpbmVIZWlnaHQrKGQtMSkqdC50aXRsZVNwYWNpbmcrdC50aXRsZU1hcmdpbkJvdHRvbSksXyl7bGV0IGU9dC5kaXNwbGF5Q29sb3JzP01hdGgubWF4KHMsYy5saW5lSGVpZ2h0KTpjLmxpbmVIZWlnaHQ7aCs9cCplKyhfLXApKmMubGluZUhlaWdodCsoXy0xKSp0LmJvZHlTcGFjaW5nfWYmJihoKz10LmZvb3Rlck1hcmdpblRvcCtmKnUubGluZUhlaWdodCsoZi0xKSp0LmZvb3RlclNwYWNpbmcpO2xldCB2PTAseT1mdW5jdGlvbihlKXtnPU1hdGgubWF4KGcsbi5tZWFzdXJlVGV4dChlKS53aWR0aCt2KX07cmV0dXJuIG4uc2F2ZSgpLG4uZm9udD1sLnN0cmluZyxZKGUudGl0bGUseSksbi5mb250PWMuc3RyaW5nLFkoZS5iZWZvcmVCb2R5LmNvbmNhdChlLmFmdGVyQm9keSkseSksdj10LmRpc3BsYXlDb2xvcnM/bysyK3QuYm94UGFkZGluZzowLFkocixlPT57WShlLmJlZm9yZSx5KSxZKGUubGluZXMseSksWShlLmFmdGVyLHkpfSksdj0wLG4uZm9udD11LnN0cmluZyxZKGUuZm9vdGVyLHkpLG4ucmVzdG9yZSgpLGcrPW0ud2lkdGgse3dpZHRoOmcsaGVpZ2h0Omh9fWZ1bmN0aW9uIGFmKGUsdCl7bGV0e3k6bixoZWlnaHQ6cn09dDtyZXR1cm4gbjxyLzI/YHRvcGA6bj5lLmhlaWdodC1yLzI/YGJvdHRvbWA6YGNlbnRlcmB9ZnVuY3Rpb24gb2YoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1yLG89bi5jYXJldFNpemUrbi5jYXJldFBhZGRpbmc7aWYoZT09PWBsZWZ0YCYmaSthK28+dC53aWR0aHx8ZT09PWByaWdodGAmJmktYS1vPDApcmV0dXJuITB9ZnVuY3Rpb24gc2YoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1uLHt3aWR0aDpvLGNoYXJ0QXJlYTp7bGVmdDpzLHJpZ2h0OmN9fT1lLGw9YGNlbnRlcmA7cmV0dXJuIHI9PT1gY2VudGVyYD9sPWk8PShzK2MpLzI/YGxlZnRgOmByaWdodGA6aTw9YS8yP2w9YGxlZnRgOmk+PW8tYS8yJiYobD1gcmlnaHRgKSxvZihsLGUsdCxuKSYmKGw9YGNlbnRlcmApLGx9ZnVuY3Rpb24gY2YoZSx0LG4pe2xldCByPW4ueUFsaWdufHx0LnlBbGlnbnx8YWYoZSxuKTtyZXR1cm57eEFsaWduOm4ueEFsaWdufHx0LnhBbGlnbnx8c2YoZSx0LG4scikseUFsaWduOnJ9fWZ1bmN0aW9uIGxmKGUsdCl7bGV0e3g6bix3aWR0aDpyfT1lO3JldHVybiB0PT09YHJpZ2h0YD9uLT1yOnQ9PT1gY2VudGVyYCYmKG4tPXIvMiksbn1mdW5jdGlvbiB1ZihlLHQsbil7bGV0e3k6cixoZWlnaHQ6aX09ZTtyZXR1cm4gdD09PWB0b3BgP3IrPW46ci09dD09PWBib3R0b21gP2krbjppLzIscn1mdW5jdGlvbiBkZihlLHQsbixyKXtsZXR7Y2FyZXRTaXplOmksY2FyZXRQYWRkaW5nOmEsY29ybmVyUmFkaXVzOm99PWUse3hBbGlnbjpzLHlBbGlnbjpjfT1uLGw9aSthLHt0b3BMZWZ0OnUsdG9wUmlnaHQ6ZCxib3R0b21MZWZ0OmYsYm90dG9tUmlnaHQ6cH09R3MobyksbT1sZih0LHMpLGg9dWYodCxjLGwpO3JldHVybiBjPT09YGNlbnRlcmA/cz09PWBsZWZ0YD9tKz1sOnM9PT1gcmlnaHRgJiYobS09bCk6cz09PWBsZWZ0YD9tLT1NYXRoLm1heCh1LGYpK2k6cz09PWByaWdodGAmJihtKz1NYXRoLm1heChkLHApK2kpLHt4OnpvKG0sMCxyLndpZHRoLXQud2lkdGgpLHk6em8oaCwwLHIuaGVpZ2h0LXQuaGVpZ2h0KX19ZnVuY3Rpb24gZmYoZSx0LG4pe2xldCByPVEobi5wYWRkaW5nKTtyZXR1cm4gdD09PWBjZW50ZXJgP2UueCtlLndpZHRoLzI6dD09PWByaWdodGA/ZS54K2Uud2lkdGgtci5yaWdodDplLngrci5sZWZ0fWZ1bmN0aW9uIHBmKGUpe3JldHVybiBlZihbXSx0ZihlKSl9ZnVuY3Rpb24gbWYoZSx0LG4pe3JldHVybiBKcyhlLHt0b29sdGlwOnQsdG9vbHRpcEl0ZW1zOm4sdHlwZTpgdG9vbHRpcGB9KX1mdW5jdGlvbiBoZihlLHQpe2xldCBuPXQmJnQuZGF0YXNldCYmdC5kYXRhc2V0LnRvb2x0aXAmJnQuZGF0YXNldC50b29sdGlwLmNhbGxiYWNrcztyZXR1cm4gbj9lLm92ZXJyaWRlKG4pOmV9dmFyIGdmPXtiZWZvcmVUaXRsZTpYYSx0aXRsZShlKXtpZihlLmxlbmd0aD4wKXtsZXQgdD1lWzBdLG49dC5jaGFydC5kYXRhLmxhYmVscyxyPW4/bi5sZW5ndGg6MDtpZih0aGlzJiZ0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5tb2RlPT09YGRhdGFzZXRgKXJldHVybiB0LmRhdGFzZXQubGFiZWx8fGBgO2lmKHQubGFiZWwpcmV0dXJuIHQubGFiZWw7aWYocj4wJiZ0LmRhdGFJbmRleDxyKXJldHVybiBuW3QuZGF0YUluZGV4XX1yZXR1cm5gYH0sYWZ0ZXJUaXRsZTpYYSxiZWZvcmVCb2R5OlhhLGJlZm9yZUxhYmVsOlhhLGxhYmVsKGUpe2lmKHRoaXMmJnRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm1vZGU9PT1gZGF0YXNldGApcmV0dXJuIGUubGFiZWwrYDogYCtlLmZvcm1hdHRlZFZhbHVlfHxlLmZvcm1hdHRlZFZhbHVlO2xldCB0PWUuZGF0YXNldC5sYWJlbHx8YGA7dCYmKHQrPWA6IGApO2xldCBuPWUuZm9ybWF0dGVkVmFsdWU7cmV0dXJuIFUobil8fCh0Kz1uKSx0fSxsYWJlbENvbG9yKGUpe2xldCB0PWUuY2hhcnQuZ2V0RGF0YXNldE1ldGEoZS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIuZ2V0U3R5bGUoZS5kYXRhSW5kZXgpO3JldHVybntib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGJhY2tncm91bmRDb2xvcjp0LmJhY2tncm91bmRDb2xvcixib3JkZXJXaWR0aDp0LmJvcmRlcldpZHRoLGJvcmRlckRhc2g6dC5ib3JkZXJEYXNoLGJvcmRlckRhc2hPZmZzZXQ6dC5ib3JkZXJEYXNoT2Zmc2V0LGJvcmRlclJhZGl1czowfX0sbGFiZWxUZXh0Q29sb3IoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJvZHlDb2xvcn0sbGFiZWxQb2ludFN0eWxlKGUpe2xldCB0PWUuY2hhcnQuZ2V0RGF0YXNldE1ldGEoZS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIuZ2V0U3R5bGUoZS5kYXRhSW5kZXgpO3JldHVybntwb2ludFN0eWxlOnQucG9pbnRTdHlsZSxyb3RhdGlvbjp0LnJvdGF0aW9ufX0sYWZ0ZXJMYWJlbDpYYSxhZnRlckJvZHk6WGEsYmVmb3JlRm9vdGVyOlhhLGZvb3RlcjpYYSxhZnRlckZvb3RlcjpYYX07ZnVuY3Rpb24gX2YoZSx0LG4scil7bGV0IGk9ZVt0XS5jYWxsKG4scik7cmV0dXJuIGk9PT12b2lkIDA/Z2ZbdF0uY2FsbChuLHIpOml9dmFyIHZmPWNsYXNzIGV4dGVuZHMgd3V7c3RhdGljIHBvc2l0aW9uZXJzPSRkO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5vcGFjaXR5PTAsdGhpcy5fYWN0aXZlPVtdLHRoaXMuX2V2ZW50UG9zaXRpb249dm9pZCAwLHRoaXMuX3NpemU9dm9pZCAwLHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuX3Rvb2x0aXBJdGVtcz1bXSx0aGlzLiRhbmltYXRpb25zPXZvaWQgMCx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLmNoYXJ0PWUuY2hhcnQsdGhpcy5vcHRpb25zPWUub3B0aW9ucyx0aGlzLmRhdGFQb2ludHM9dm9pZCAwLHRoaXMudGl0bGU9dm9pZCAwLHRoaXMuYmVmb3JlQm9keT12b2lkIDAsdGhpcy5ib2R5PXZvaWQgMCx0aGlzLmFmdGVyQm9keT12b2lkIDAsdGhpcy5mb290ZXI9dm9pZCAwLHRoaXMueEFsaWduPXZvaWQgMCx0aGlzLnlBbGlnbj12b2lkIDAsdGhpcy54PXZvaWQgMCx0aGlzLnk9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmNhcmV0WD12b2lkIDAsdGhpcy5jYXJldFk9dm9pZCAwLHRoaXMubGFiZWxDb2xvcnM9dm9pZCAwLHRoaXMubGFiZWxQb2ludFN0eWxlcz12b2lkIDAsdGhpcy5sYWJlbFRleHRDb2xvcnM9dm9pZCAwfWluaXRpYWxpemUoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5fY2FjaGVkQW5pbWF0aW9ucz12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDB9X3Jlc29sdmVBbmltYXRpb25zKCl7bGV0IGU9dGhpcy5fY2FjaGVkQW5pbWF0aW9ucztpZihlKXJldHVybiBlO2xldCB0PXRoaXMuY2hhcnQsbj10aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSkscj1uLmVuYWJsZWQmJnQub3B0aW9ucy5hbmltYXRpb24mJm4uYW5pbWF0aW9ucyxpPW5ldyBIYyh0aGlzLmNoYXJ0LHIpO3JldHVybiByLl9jYWNoZWFibGUmJih0aGlzLl9jYWNoZWRBbmltYXRpb25zPU9iamVjdC5mcmVlemUoaSkpLGl9Z2V0Q29udGV4dCgpe3JldHVybiB0aGlzLiRjb250ZXh0fHw9bWYodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcyx0aGlzLl90b29sdGlwSXRlbXMpfWdldFRpdGxlKGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9X2YobixgYmVmb3JlVGl0bGVgLHRoaXMsZSksaT1fZihuLGB0aXRsZWAsdGhpcyxlKSxhPV9mKG4sYGFmdGVyVGl0bGVgLHRoaXMsZSksbz1bXTtyZXR1cm4gbz1lZihvLHRmKHIpKSxvPWVmKG8sdGYoaSkpLG89ZWYobyx0ZihhKSksb31nZXRCZWZvcmVCb2R5KGUsdCl7cmV0dXJuIHBmKF9mKHQuY2FsbGJhY2tzLGBiZWZvcmVCb2R5YCx0aGlzLGUpKX1nZXRCb2R5KGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9W107cmV0dXJuIFkoZSxlPT57bGV0IHQ9e2JlZm9yZTpbXSxsaW5lczpbXSxhZnRlcjpbXX0saT1oZihuLGUpO2VmKHQuYmVmb3JlLHRmKF9mKGksYGJlZm9yZUxhYmVsYCx0aGlzLGUpKSksZWYodC5saW5lcyxfZihpLGBsYWJlbGAsdGhpcyxlKSksZWYodC5hZnRlcix0ZihfZihpLGBhZnRlckxhYmVsYCx0aGlzLGUpKSksci5wdXNoKHQpfSkscn1nZXRBZnRlckJvZHkoZSx0KXtyZXR1cm4gcGYoX2YodC5jYWxsYmFja3MsYGFmdGVyQm9keWAsdGhpcyxlKSl9Z2V0Rm9vdGVyKGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9X2YobixgYmVmb3JlRm9vdGVyYCx0aGlzLGUpLGk9X2YobixgZm9vdGVyYCx0aGlzLGUpLGE9X2YobixgYWZ0ZXJGb290ZXJgLHRoaXMsZSksbz1bXTtyZXR1cm4gbz1lZihvLHRmKHIpKSxvPWVmKG8sdGYoaSkpLG89ZWYobyx0ZihhKSksb31fY3JlYXRlSXRlbXMoZSl7bGV0IHQ9dGhpcy5fYWN0aXZlLG49dGhpcy5jaGFydC5kYXRhLHI9W10saT1bXSxhPVtdLG89W10scyxjO2ZvcihzPTAsYz10Lmxlbmd0aDtzPGM7KytzKW8ucHVzaChuZih0aGlzLmNoYXJ0LHRbc10pKTtyZXR1cm4gZS5maWx0ZXImJihvPW8uZmlsdGVyKCh0LHIsaSk9PmUuZmlsdGVyKHQscixpLG4pKSksZS5pdGVtU29ydCYmKG89by5zb3J0KCh0LHIpPT5lLml0ZW1Tb3J0KHQscixuKSkpLFkobyx0PT57bGV0IG49aGYoZS5jYWxsYmFja3MsdCk7ci5wdXNoKF9mKG4sYGxhYmVsQ29sb3JgLHRoaXMsdCkpLGkucHVzaChfZihuLGBsYWJlbFBvaW50U3R5bGVgLHRoaXMsdCkpLGEucHVzaChfZihuLGBsYWJlbFRleHRDb2xvcmAsdGhpcyx0KSl9KSx0aGlzLmxhYmVsQ29sb3JzPXIsdGhpcy5sYWJlbFBvaW50U3R5bGVzPWksdGhpcy5sYWJlbFRleHRDb2xvcnM9YSx0aGlzLmRhdGFQb2ludHM9byxvfXVwZGF0ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPXRoaXMuX2FjdGl2ZSxpLGE9W107aWYoIXIubGVuZ3RoKXRoaXMub3BhY2l0eSE9PTAmJihpPXtvcGFjaXR5OjB9KTtlbHNle2xldCBlPSRkW24ucG9zaXRpb25dLmNhbGwodGhpcyxyLHRoaXMuX2V2ZW50UG9zaXRpb24pO2E9dGhpcy5fY3JlYXRlSXRlbXMobiksdGhpcy50aXRsZT10aGlzLmdldFRpdGxlKGEsbiksdGhpcy5iZWZvcmVCb2R5PXRoaXMuZ2V0QmVmb3JlQm9keShhLG4pLHRoaXMuYm9keT10aGlzLmdldEJvZHkoYSxuKSx0aGlzLmFmdGVyQm9keT10aGlzLmdldEFmdGVyQm9keShhLG4pLHRoaXMuZm9vdGVyPXRoaXMuZ2V0Rm9vdGVyKGEsbik7bGV0IHQ9dGhpcy5fc2l6ZT1yZih0aGlzLG4pLG89T2JqZWN0LmFzc2lnbih7fSxlLHQpLHM9Y2YodGhpcy5jaGFydCxuLG8pLGM9ZGYobixvLHMsdGhpcy5jaGFydCk7dGhpcy54QWxpZ249cy54QWxpZ24sdGhpcy55QWxpZ249cy55QWxpZ24saT17b3BhY2l0eToxLHg6Yy54LHk6Yy55LHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LGNhcmV0WDplLngsY2FyZXRZOmUueX19dGhpcy5fdG9vbHRpcEl0ZW1zPWEsdGhpcy4kY29udGV4dD12b2lkIDAsaSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcyxpKSxlJiZuLmV4dGVybmFsJiZuLmV4dGVybmFsLmNhbGwodGhpcyx7Y2hhcnQ6dGhpcy5jaGFydCx0b29sdGlwOnRoaXMscmVwbGF5OnR9KX1kcmF3Q2FyZXQoZSx0LG4scil7bGV0IGk9dGhpcy5nZXRDYXJldFBvc2l0aW9uKGUsbixyKTt0LmxpbmVUbyhpLngxLGkueTEpLHQubGluZVRvKGkueDIsaS55MiksdC5saW5lVG8oaS54MyxpLnkzKX1nZXRDYXJldFBvc2l0aW9uKGUsdCxuKXtsZXR7eEFsaWduOnIseUFsaWduOml9PXRoaXMse2NhcmV0U2l6ZTphLGNvcm5lclJhZGl1czpvfT1uLHt0b3BMZWZ0OnMsdG9wUmlnaHQ6Yyxib3R0b21MZWZ0OmwsYm90dG9tUmlnaHQ6dX09R3Mobykse3g6ZCx5OmZ9PWUse3dpZHRoOnAsaGVpZ2h0Om19PXQsaCxnLF8sdix5LGI7cmV0dXJuIGk9PT1gY2VudGVyYD8oeT1mK20vMixyPT09YGxlZnRgPyhoPWQsZz1oLWEsdj15K2EsYj15LWEpOihoPWQrcCxnPWgrYSx2PXktYSxiPXkrYSksXz1oKTooZz1yPT09YGxlZnRgP2QrTWF0aC5tYXgocyxsKSthOnI9PT1gcmlnaHRgP2QrcC1NYXRoLm1heChjLHUpLWE6dGhpcy5jYXJldFgsaT09PWB0b3BgPyh2PWYseT12LWEsaD1nLWEsXz1nK2EpOih2PWYrbSx5PXYrYSxoPWcrYSxfPWctYSksYj12KSx7eDE6aCx4MjpnLHgzOl8seTE6dix5Mjp5LHkzOmJ9fWRyYXdUaXRsZShlLHQsbil7bGV0IHI9dGhpcy50aXRsZSxpPXIubGVuZ3RoLGEsbyxzO2lmKGkpe2xldCBjPU1jKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKTtmb3IoZS54PWZmKHRoaXMsbi50aXRsZUFsaWduLG4pLHQudGV4dEFsaWduPWMudGV4dEFsaWduKG4udGl0bGVBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT0kKG4udGl0bGVGb250KSxvPW4udGl0bGVTcGFjaW5nLHQuZmlsbFN0eWxlPW4udGl0bGVDb2xvcix0LmZvbnQ9YS5zdHJpbmcscz0wO3M8aTsrK3MpdC5maWxsVGV4dChyW3NdLGMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbyxzKzE9PT1pJiYoZS55Kz1uLnRpdGxlTWFyZ2luQm90dG9tLW8pfX1fZHJhd0NvbG9yQm94KGUsdCxuLHIsaSl7bGV0IGE9dGhpcy5sYWJlbENvbG9yc1tuXSxvPXRoaXMubGFiZWxQb2ludFN0eWxlc1tuXSx7Ym94SGVpZ2h0OnMsYm94V2lkdGg6Y309aSxsPSQoaS5ib2R5Rm9udCksdT1mZih0aGlzLGBsZWZ0YCxpKSxkPXIueCh1KSxmPXM8bC5saW5lSGVpZ2h0PyhsLmxpbmVIZWlnaHQtcykvMjowLHA9dC55K2Y7aWYoaS51c2VQb2ludFN0eWxlKXtsZXQgdD17cmFkaXVzOk1hdGgubWluKGMscykvMixwb2ludFN0eWxlOm8ucG9pbnRTdHlsZSxyb3RhdGlvbjpvLnJvdGF0aW9uLGJvcmRlcldpZHRoOjF9LG49ci5sZWZ0Rm9yTHRyKGQsYykrYy8yLGw9cCtzLzI7ZS5zdHJva2VTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxrcyhlLHQsbixsKSxlLnN0cm9rZVN0eWxlPWEuYm9yZGVyQ29sb3IsZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3Isa3MoZSx0LG4sbCl9ZWxzZXtlLmxpbmVXaWR0aD1HKGEuYm9yZGVyV2lkdGgpP01hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoYS5ib3JkZXJXaWR0aCkpOmEuYm9yZGVyV2lkdGh8fDEsZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuc2V0TGluZURhc2goYS5ib3JkZXJEYXNofHxbXSksZS5saW5lRGFzaE9mZnNldD1hLmJvcmRlckRhc2hPZmZzZXR8fDA7bGV0IHQ9ci5sZWZ0Rm9yTHRyKGQsYyksbj1yLmxlZnRGb3JMdHIoci54UGx1cyhkLDEpLGMtMiksbz1HcyhhLmJvcmRlclJhZGl1cyk7T2JqZWN0LnZhbHVlcyhvKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxScyhlLHt4OnQseTpwLHc6YyxoOnMscmFkaXVzOm99KSxlLmZpbGwoKSxlLnN0cm9rZSgpLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLGUuYmVnaW5QYXRoKCksUnMoZSx7eDpuLHk6cCsxLHc6Yy0yLGg6cy0yLHJhZGl1czpvfSksZS5maWxsKCkpOihlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxSZWN0KHQscCxjLHMpLGUuc3Ryb2tlUmVjdCh0LHAsYyxzKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmZpbGxSZWN0KG4scCsxLGMtMixzLTIpKX1lLmZpbGxTdHlsZT10aGlzLmxhYmVsVGV4dENvbG9yc1tuXX1kcmF3Qm9keShlLHQsbil7bGV0e2JvZHk6cn09dGhpcyx7Ym9keVNwYWNpbmc6aSxib2R5QWxpZ246YSxkaXNwbGF5Q29sb3JzOm8sYm94SGVpZ2h0OnMsYm94V2lkdGg6Yyxib3hQYWRkaW5nOmx9PW4sdT0kKG4uYm9keUZvbnQpLGQ9dS5saW5lSGVpZ2h0LGY9MCxwPU1jKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKSxtPWZ1bmN0aW9uKG4pe3QuZmlsbFRleHQobixwLngoZS54K2YpLGUueStkLzIpLGUueSs9ZCtpfSxoPXAudGV4dEFsaWduKGEpLGcsXyx2LHksYix4LFM7Zm9yKHQudGV4dEFsaWduPWEsdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdC5mb250PXUuc3RyaW5nLGUueD1mZih0aGlzLGgsbiksdC5maWxsU3R5bGU9bi5ib2R5Q29sb3IsWSh0aGlzLmJlZm9yZUJvZHksbSksZj1vJiZoIT09YHJpZ2h0YD9hPT09YGNlbnRlcmA/Yy8yK2w6YysyK2w6MCx5PTAseD1yLmxlbmd0aDt5PHg7Kyt5KXtmb3IoZz1yW3ldLF89dGhpcy5sYWJlbFRleHRDb2xvcnNbeV0sdC5maWxsU3R5bGU9XyxZKGcuYmVmb3JlLG0pLHY9Zy5saW5lcyxvJiZ2Lmxlbmd0aCYmKHRoaXMuX2RyYXdDb2xvckJveCh0LGUseSxwLG4pLGQ9TWF0aC5tYXgodS5saW5lSGVpZ2h0LHMpKSxiPTAsUz12Lmxlbmd0aDtiPFM7KytiKW0odltiXSksZD11LmxpbmVIZWlnaHQ7WShnLmFmdGVyLG0pfWY9MCxkPXUubGluZUhlaWdodCxZKHRoaXMuYWZ0ZXJCb2R5LG0pLGUueS09aX1kcmF3Rm9vdGVyKGUsdCxuKXtsZXQgcj10aGlzLmZvb3RlcixpPXIubGVuZ3RoLGEsbztpZihpKXtsZXQgcz1NYyhuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1mZih0aGlzLG4uZm9vdGVyQWxpZ24sbiksZS55Kz1uLmZvb3Rlck1hcmdpblRvcCx0LnRleHRBbGlnbj1zLnRleHRBbGlnbihuLmZvb3RlckFsaWduKSx0LnRleHRCYXNlbGluZT1gbWlkZGxlYCxhPSQobi5mb290ZXJGb250KSx0LmZpbGxTdHlsZT1uLmZvb3RlckNvbG9yLHQuZm9udD1hLnN0cmluZyxvPTA7bzxpOysrbyl0LmZpbGxUZXh0KHJbb10scy54KGUueCksZS55K2EubGluZUhlaWdodC8yKSxlLnkrPWEubGluZUhlaWdodCtuLmZvb3RlclNwYWNpbmd9fWRyYXdCYWNrZ3JvdW5kKGUsdCxuLHIpe2xldHt4QWxpZ246aSx5QWxpZ246YX09dGhpcyx7eDpvLHk6c309ZSx7d2lkdGg6YyxoZWlnaHQ6bH09bix7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PUdzKHIuY29ybmVyUmFkaXVzKTt0LmZpbGxTdHlsZT1yLmJhY2tncm91bmRDb2xvcix0LnN0cm9rZVN0eWxlPXIuYm9yZGVyQ29sb3IsdC5saW5lV2lkdGg9ci5ib3JkZXJXaWR0aCx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG8rdSxzKSxhPT09YHRvcGAmJnRoaXMuZHJhd0NhcmV0KGUsdCxuLHIpLHQubGluZVRvKG8rYy1kLHMpLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscyxvK2MscytkKSxhPT09YGNlbnRlcmAmJmk9PT1gcmlnaHRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MscytsLXApLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscytsLG8rYy1wLHMrbCksYT09PWBib3R0b21gJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2YscytsKSx0LnF1YWRyYXRpY0N1cnZlVG8obyxzK2wsbyxzK2wtZiksYT09PWBjZW50ZXJgJiZpPT09YGxlZnRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvLHMrdSksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scyxvK3UscyksdC5jbG9zZVBhdGgoKSx0LmZpbGwoKSxyLmJvcmRlcldpZHRoPjAmJnQuc3Ryb2tlKCl9X3VwZGF0ZUFuaW1hdGlvblRhcmdldChlKXtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy4kYW5pbWF0aW9ucyxyPW4mJm4ueCxpPW4mJm4ueTtpZihyfHxpKXtsZXQgbj0kZFtlLnBvc2l0aW9uXS5jYWxsKHRoaXMsdGhpcy5fYWN0aXZlLHRoaXMuX2V2ZW50UG9zaXRpb24pO2lmKCFuKXJldHVybjtsZXQgYT10aGlzLl9zaXplPXJmKHRoaXMsZSksbz1PYmplY3QuYXNzaWduKHt9LG4sdGhpcy5fc2l6ZSkscz1jZih0LGUsbyksYz1kZihlLG8scyx0KTsoci5fdG8hPT1jLnh8fGkuX3RvIT09Yy55KSYmKHRoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLHRoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLmNhcmV0WD1uLngsdGhpcy5jYXJldFk9bi55LHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsYykpfX1fd2lsbFJlbmRlcigpe3JldHVybiEhdGhpcy5vcGFjaXR5fWRyYXcoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLG49dGhpcy5vcGFjaXR5O2lmKCFuKXJldHVybjt0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQodCk7bGV0IHI9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxpPXt4OnRoaXMueCx5OnRoaXMueX07bj1NYXRoLmFicyhuKTwuMDAxPzA6bjtsZXQgYT1RKHQucGFkZGluZyksbz10aGlzLnRpdGxlLmxlbmd0aHx8dGhpcy5iZWZvcmVCb2R5Lmxlbmd0aHx8dGhpcy5ib2R5Lmxlbmd0aHx8dGhpcy5hZnRlckJvZHkubGVuZ3RofHx0aGlzLmZvb3Rlci5sZW5ndGg7dC5lbmFibGVkJiZvJiYoZS5zYXZlKCksZS5nbG9iYWxBbHBoYT1uLHRoaXMuZHJhd0JhY2tncm91bmQoaSxlLHIsdCksTmMoZSx0LnRleHREaXJlY3Rpb24pLGkueSs9YS50b3AsdGhpcy5kcmF3VGl0bGUoaSxlLHQpLHRoaXMuZHJhd0JvZHkoaSxlLHQpLHRoaXMuZHJhd0Zvb3RlcihpLGUsdCksUGMoZSx0LnRleHREaXJlY3Rpb24pLGUucmVzdG9yZSgpKX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fYWN0aXZlLHI9ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KSxpPSFlbyhuLHIpLGE9dGhpcy5fcG9zaXRpb25DaGFuZ2VkKHIsdCk7KGl8fGEpJiYodGhpcy5fYWN0aXZlPXIsdGhpcy5fZXZlbnRQb3NpdGlvbj10LHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMCx0aGlzLnVwZGF0ZSghMCkpfWhhbmRsZUV2ZW50KGUsdCxuPSEwKXtpZih0JiZ0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHMpcmV0dXJuITE7dGhpcy5faWdub3JlUmVwbGF5RXZlbnRzPSExO2xldCByPXRoaXMub3B0aW9ucyxpPXRoaXMuX2FjdGl2ZXx8W10sYT10aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLGksdCxuKSxvPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChhLGUpLHM9dHx8IWVvKGEsaSl8fG87cmV0dXJuIHMmJih0aGlzLl9hY3RpdmU9YSwoci5lbmFibGVkfHxyLmV4dGVybmFsKSYmKHRoaXMuX2V2ZW50UG9zaXRpb249e3g6ZS54LHk6ZS55fSx0aGlzLnVwZGF0ZSghMCx0KSkpLHN9X2dldEFjdGl2ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9ucztpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFyKXJldHVybiB0LmZpbHRlcihlPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZS5kYXRhc2V0SW5kZXhdJiZ0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFBhcnNlZChlLmluZGV4KSE9PXZvaWQgMCk7bGV0IGE9dGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGksbik7cmV0dXJuIGkucmV2ZXJzZSYmYS5yZXZlcnNlKCksYX1fcG9zaXRpb25DaGFuZ2VkKGUsdCl7bGV0e2NhcmV0WDpuLGNhcmV0WTpyLG9wdGlvbnM6aX09dGhpcyxhPSRkW2kucG9zaXRpb25dLmNhbGwodGhpcyxlLHQpO3JldHVybiBhIT09ITEmJihuIT09YS54fHxyIT09YS55KX19LHlmPXtpZDpgdG9vbHRpcGAsX2VsZW1lbnQ6dmYscG9zaXRpb25lcnM6JGQsYWZ0ZXJJbml0KGUsdCxuKXtuJiYoZS50b29sdGlwPW5ldyB2Zih7Y2hhcnQ6ZSxvcHRpb25zOm59KSl9LGJlZm9yZVVwZGF0ZShlLHQsbil7ZS50b29sdGlwJiZlLnRvb2x0aXAuaW5pdGlhbGl6ZShuKX0scmVzZXQoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LGFmdGVyRHJhdyhlKXtsZXQgdD1lLnRvb2x0aXA7aWYodCYmdC5fd2lsbFJlbmRlcigpKXtsZXQgbj17dG9vbHRpcDp0fTtpZihlLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVRvb2x0aXBEcmF3YCx7Li4ubixjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47dC5kcmF3KGUuY3R4KSxlLm5vdGlmeVBsdWdpbnMoYGFmdGVyVG9vbHRpcERyYXdgLG4pfX0sYWZ0ZXJFdmVudChlLHQpe2lmKGUudG9vbHRpcCl7bGV0IG49dC5yZXBsYXk7ZS50b29sdGlwLmhhbmRsZUV2ZW50KHQuZXZlbnQsbix0LmluQ2hhcnRBcmVhKSYmKHQuY2hhbmdlZD0hMCl9fSxkZWZhdWx0czp7ZW5hYmxlZDohMCxleHRlcm5hbDpudWxsLHBvc2l0aW9uOmBhdmVyYWdlYCxiYWNrZ3JvdW5kQ29sb3I6YHJnYmEoMCwwLDAsMC44KWAsdGl0bGVDb2xvcjpgI2ZmZmAsdGl0bGVGb250Ont3ZWlnaHQ6YGJvbGRgfSx0aXRsZVNwYWNpbmc6Mix0aXRsZU1hcmdpbkJvdHRvbTo2LHRpdGxlQWxpZ246YGxlZnRgLGJvZHlDb2xvcjpgI2ZmZmAsYm9keVNwYWNpbmc6Mixib2R5Rm9udDp7fSxib2R5QWxpZ246YGxlZnRgLGZvb3RlckNvbG9yOmAjZmZmYCxmb290ZXJTcGFjaW5nOjIsZm9vdGVyTWFyZ2luVG9wOjYsZm9vdGVyRm9udDp7d2VpZ2h0OmBib2xkYH0sZm9vdGVyQWxpZ246YGxlZnRgLHBhZGRpbmc6NixjYXJldFBhZGRpbmc6MixjYXJldFNpemU6NSxjb3JuZXJSYWRpdXM6Nixib3hIZWlnaHQ6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxib3hXaWR0aDooZSx0KT0+dC5ib2R5Rm9udC5zaXplLG11bHRpS2V5QmFja2dyb3VuZDpgI2ZmZmAsZGlzcGxheUNvbG9yczohMCxib3hQYWRkaW5nOjAsYm9yZGVyQ29sb3I6YHJnYmEoMCwwLDAsMClgLGJvcmRlcldpZHRoOjAsYW5pbWF0aW9uOntkdXJhdGlvbjo0MDAsZWFzaW5nOmBlYXNlT3V0UXVhcnRgfSxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYHdpZHRoYCxgaGVpZ2h0YCxgY2FyZXRYYCxgY2FyZXRZYF19LG9wYWNpdHk6e2Vhc2luZzpgbGluZWFyYCxkdXJhdGlvbjoyMDB9fSxjYWxsYmFja3M6Z2Z9LGRlZmF1bHRSb3V0ZXM6e2JvZHlGb250OmBmb250YCxmb290ZXJGb250OmBmb250YCx0aXRsZUZvbnQ6YGZvbnRgfSxkZXNjcmlwdG9yczp7X3NjcmlwdGFibGU6ZT0+ZSE9PWBmaWx0ZXJgJiZlIT09YGl0ZW1Tb3J0YCYmZSE9PWBleHRlcm5hbGAsX2luZGV4YWJsZTohMSxjYWxsYmFja3M6e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9LGFuaW1hdGlvbjp7X2ZhbGxiYWNrOiExfSxhbmltYXRpb25zOntfZmFsbGJhY2s6YGFuaW1hdGlvbmB9fSxhZGRpdGlvbmFsT3B0aW9uU2NvcGVzOltgaW50ZXJhY3Rpb25gXX0sYmY9KGUsdCxuLHIpPT4odHlwZW9mIHQ9PWBzdHJpbmdgPyhuPWUucHVzaCh0KS0xLHIudW5zaGlmdCh7aW5kZXg6bixsYWJlbDp0fSkpOmlzTmFOKHQpJiYobj1udWxsKSxuKTtmdW5jdGlvbiB4ZihlLHQsbixyKXtsZXQgaT1lLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9iZihlLHQsbixyKTppPT09ZS5sYXN0SW5kZXhPZih0KT9pOm59dmFyIFNmPShlLHQpPT5lPT09bnVsbD9udWxsOnpvKE1hdGgucm91bmQoZSksMCx0KTtmdW5jdGlvbiBDZihlKXtsZXQgdD10aGlzLmdldExhYmVscygpO3JldHVybiBlPj0wJiZlPHQubGVuZ3RoP3RbZV06ZX12YXIgd2Y9Y2xhc3MgZXh0ZW5kcyBXdXtzdGF0aWMgaWQ9YGNhdGVnb3J5YDtzdGF0aWMgZGVmYXVsdHM9e3RpY2tzOntjYWxsYmFjazpDZn19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuX3N0YXJ0VmFsdWU9dm9pZCAwLHRoaXMuX3ZhbHVlUmFuZ2U9MCx0aGlzLl9hZGRlZExhYmVscz1bXX1pbml0KGUpe2xldCB0PXRoaXMuX2FkZGVkTGFiZWxzO2lmKHQubGVuZ3RoKXtsZXQgZT10aGlzLmdldExhYmVscygpO2ZvcihsZXR7aW5kZXg6bixsYWJlbDpyfW9mIHQpZVtuXT09PXImJmUuc3BsaWNlKG4sMSk7dGhpcy5fYWRkZWRMYWJlbHM9W119c3VwZXIuaW5pdChlKX1wYXJzZShlLHQpe2lmKFUoZSkpcmV0dXJuIG51bGw7bGV0IG49dGhpcy5nZXRMYWJlbHMoKTtyZXR1cm4gdD1pc0Zpbml0ZSh0KSYmblt0XT09PWU/dDp4ZihuLGUscSh0LGUpLHRoaXMuX2FkZGVkTGFiZWxzKSxTZih0LG4ubGVuZ3RoLTEpfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluRGVmaW5lZDplLG1heERlZmluZWQ6dH09dGhpcy5nZXRVc2VyQm91bmRzKCkse21pbjpuLG1heDpyfT10aGlzLmdldE1pbk1heCghMCk7dGhpcy5vcHRpb25zLmJvdW5kcz09PWB0aWNrc2AmJihlfHwobj0wKSx0fHwocj10aGlzLmdldExhYmVscygpLmxlbmd0aC0xKSksdGhpcy5taW49bix0aGlzLm1heD1yfWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm1pbix0PXRoaXMubWF4LG49dGhpcy5vcHRpb25zLm9mZnNldCxyPVtdLGk9dGhpcy5nZXRMYWJlbHMoKTtpPWU9PT0wJiZ0PT09aS5sZW5ndGgtMT9pOmkuc2xpY2UoZSx0KzEpLHRoaXMuX3ZhbHVlUmFuZ2U9TWF0aC5tYXgoaS5sZW5ndGgtKyFuLDEpLHRoaXMuX3N0YXJ0VmFsdWU9dGhpcy5taW4tKG4/LjU6MCk7Zm9yKGxldCBuPWU7bjw9dDtuKyspci5wdXNoKHt2YWx1ZTpufSk7cmV0dXJuIHJ9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gQ2YuY2FsbCh0aGlzLGUpfWNvbmZpZ3VyZSgpe3N1cGVyLmNvbmZpZ3VyZSgpLHRoaXMuaXNIb3Jpem9udGFsKCl8fCh0aGlzLl9yZXZlcnNlUGl4ZWxzPSF0aGlzLl9yZXZlcnNlUGl4ZWxzKX1nZXRQaXhlbEZvclZhbHVlKGUpe3JldHVybiB0eXBlb2YgZSE9YG51bWJlcmAmJihlPXRoaXMucGFyc2UoZSkpLGU9PT1udWxsP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgoZS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRQaXhlbEZvclRpY2soZSl7bGV0IHQ9dGhpcy50aWNrcztyZXR1cm4gZTwwfHxlPnQubGVuZ3RoLTE/bnVsbDp0aGlzLmdldFBpeGVsRm9yVmFsdWUodFtlXS52YWx1ZSl9Z2V0VmFsdWVGb3JQaXhlbChlKXtyZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9zdGFydFZhbHVlK3RoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpKnRoaXMuX3ZhbHVlUmFuZ2UpfWdldEJhc2VQaXhlbCgpe3JldHVybiB0aGlzLmJvdHRvbX19O2Z1bmN0aW9uIFRmKGUsdCl7bGV0IG49W10se2JvdW5kczpyLHN0ZXA6aSxtaW46YSxtYXg6byxwcmVjaXNpb246cyxjb3VudDpjLG1heFRpY2tzOmwsbWF4RGlnaXRzOnUsaW5jbHVkZUJvdW5kczpkfT1lLGY9aXx8MSxwPWwtMSx7bWluOm0sbWF4Omh9PXQsZz0hVShhKSxfPSFVKG8pLHY9IVUoYykseT0oaC1tKS8odSsxKSxiPUVvKChoLW0pL3AvZikqZix4LFMsQyx3O2lmKGI8MWUtMTQmJiFnJiYhXylyZXR1cm5be3ZhbHVlOm19LHt2YWx1ZTpofV07dz1NYXRoLmNlaWwoaC9iKS1NYXRoLmZsb29yKG0vYiksdz5wJiYoYj1Fbyh3KmIvcC9mKSpmKSxVKHMpfHwoeD0xMCoqcyxiPU1hdGguY2VpbChiKngpL3gpLHI9PT1gdGlja3NgPyhTPU1hdGguZmxvb3IobS9iKSpiLEM9TWF0aC5jZWlsKGgvYikqYik6KFM9bSxDPWgpLGcmJl8mJmkmJkFvKChvLWEpL2ksYi8xZTMpPyh3PU1hdGgucm91bmQoTWF0aC5taW4oKG8tYSkvYixsKSksYj0oby1hKS93LFM9YSxDPW8pOnY/KFM9Zz9hOlMsQz1fP286Qyx3PWMtMSxiPShDLVMpL3cpOih3PShDLVMpL2Isdz1Ubyh3LE1hdGgucm91bmQodyksYi8xZTMpP01hdGgucm91bmQodyk6TWF0aC5jZWlsKHcpKTtsZXQgVD1NYXRoLm1heChQbyhiKSxQbyhTKSk7eD0xMCoqKFUocyk/VDpzKSxTPU1hdGgucm91bmQoUyp4KS94LEM9TWF0aC5yb3VuZChDKngpL3g7bGV0IEU9MDtmb3IoZyYmKGQmJlMhPT1hPyhuLnB1c2goe3ZhbHVlOmF9KSxTPGEmJkUrKyxUbyhNYXRoLnJvdW5kKChTK0UqYikqeCkveCxhLEVmKGEseSxlKSkmJkUrKyk6UzxhJiZFKyspO0U8dzsrK0Upe2xldCBlPU1hdGgucm91bmQoKFMrRSpiKSp4KS94O2lmKF8mJmU+bylicmVhaztuLnB1c2goe3ZhbHVlOmV9KX1yZXR1cm4gXyYmZCYmQyE9PW8/bi5sZW5ndGgmJlRvKG5bbi5sZW5ndGgtMV0udmFsdWUsbyxFZihvLHksZSkpP25bbi5sZW5ndGgtMV0udmFsdWU9bzpuLnB1c2goe3ZhbHVlOm99KTooIV98fEM9PT1vKSYmbi5wdXNoKHt2YWx1ZTpDfSksbn1mdW5jdGlvbiBFZihlLHQse2hvcml6b250YWw6bixtaW5Sb3RhdGlvbjpyfSl7bGV0IGk9TW8ociksYT0obj9NYXRoLnNpbihpKTpNYXRoLmNvcyhpKSl8fC4wMDEsbz0uNzUqdCooYGArZSkubGVuZ3RoO3JldHVybiBNYXRoLm1pbih0L2Esbyl9dmFyIERmPWNsYXNzIGV4dGVuZHMgV3V7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMuX3N0YXJ0VmFsdWU9dm9pZCAwLHRoaXMuX2VuZFZhbHVlPXZvaWQgMCx0aGlzLl92YWx1ZVJhbmdlPTB9cGFyc2UoZSx0KXtyZXR1cm4gVShlKXx8KHR5cGVvZiBlPT1gbnVtYmVyYHx8ZSBpbnN0YW5jZW9mIE51bWJlcikmJiFpc0Zpbml0ZSgrZSk/bnVsbDorZX1oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl7bGV0e2JlZ2luQXRaZXJvOmV9PXRoaXMub3B0aW9ucyx7bWluRGVmaW5lZDp0LG1heERlZmluZWQ6bn09dGhpcy5nZXRVc2VyQm91bmRzKCkse21pbjpyLG1heDppfT10aGlzLGE9ZT0+cj10P3I6ZSxvPWU9Pmk9bj9pOmU7aWYoZSl7bGV0IGU9d28ociksdD13byhpKTtlPDAmJnQ8MD9vKDApOmU+MCYmdD4wJiZhKDApfWlmKHI9PT1pKXtsZXQgdD1pPT09MD8xOk1hdGguYWJzKGkqLjA1KTtvKGkrdCksZXx8YShyLXQpfXRoaXMubWluPXIsdGhpcy5tYXg9aX1nZXRUaWNrTGltaXQoKXtsZXR7bWF4VGlja3NMaW1pdDplLHN0ZXBTaXplOnR9PXRoaXMub3B0aW9ucy50aWNrcyxuO3JldHVybiB0PyhuPU1hdGguY2VpbCh0aGlzLm1heC90KS1NYXRoLmZsb29yKHRoaXMubWluL3QpKzEsbj4xZTMmJihjb25zb2xlLndhcm4oYHNjYWxlcy4ke3RoaXMuaWR9LnRpY2tzLnN0ZXBTaXplOiAke3R9IHdvdWxkIHJlc3VsdCBnZW5lcmF0aW5nIHVwIHRvICR7bn0gdGlja3MuIExpbWl0aW5nIHRvIDEwMDAuYCksbj0xZTMpKToobj10aGlzLmNvbXB1dGVUaWNrTGltaXQoKSxlfHw9MTEpLGUmJihuPU1hdGgubWluKGUsbikpLG59Y29tcHV0ZVRpY2tMaW1pdCgpe3JldHVybiAxLzB9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PWUudGlja3Msbj10aGlzLmdldFRpY2tMaW1pdCgpO249TWF0aC5tYXgoMixuKTtsZXQgcj1UZih7bWF4VGlja3M6bixib3VuZHM6ZS5ib3VuZHMsbWluOmUubWluLG1heDplLm1heCxwcmVjaXNpb246dC5wcmVjaXNpb24sc3RlcDp0LnN0ZXBTaXplLGNvdW50OnQuY291bnQsbWF4RGlnaXRzOnRoaXMuX21heERpZ2l0cygpLGhvcml6b250YWw6dGhpcy5pc0hvcml6b250YWwoKSxtaW5Sb3RhdGlvbjp0Lm1pblJvdGF0aW9ufHwwLGluY2x1ZGVCb3VuZHM6dC5pbmNsdWRlQm91bmRzIT09ITF9LHRoaXMuX3JhbmdlfHx0aGlzKTtyZXR1cm4gZS5ib3VuZHM9PT1gdGlja3NgJiZqbyhyLHRoaXMsYHZhbHVlYCksZS5yZXZlcnNlPyhyLnJldmVyc2UoKSx0aGlzLnN0YXJ0PXRoaXMubWF4LHRoaXMuZW5kPXRoaXMubWluKToodGhpcy5zdGFydD10aGlzLm1pbix0aGlzLmVuZD10aGlzLm1heCkscn1jb25maWd1cmUoKXtsZXQgZT10aGlzLnRpY2tzLHQ9dGhpcy5taW4sbj10aGlzLm1heDtpZihzdXBlci5jb25maWd1cmUoKSx0aGlzLm9wdGlvbnMub2Zmc2V0JiZlLmxlbmd0aCl7bGV0IHI9KG4tdCkvTWF0aC5tYXgoZS5sZW5ndGgtMSwxKS8yO3QtPXIsbis9cn10aGlzLl9zdGFydFZhbHVlPXQsdGhpcy5fZW5kVmFsdWU9bix0aGlzLl92YWx1ZVJhbmdlPW4tdH1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBocyhlLHRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCl9fSxPZj1jbGFzcyBleHRlbmRzIERme3N0YXRpYyBpZD1gbGluZWFyYDtzdGF0aWMgZGVmYXVsdHM9e3RpY2tzOntjYWxsYmFjazp2cy5mb3JtYXR0ZXJzLm51bWVyaWN9fTtkZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMCk7dGhpcy5taW49SyhlKT9lOjAsdGhpcy5tYXg9Syh0KT90OjEsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9Y29tcHV0ZVRpY2tMaW1pdCgpe2xldCBlPXRoaXMuaXNIb3Jpem9udGFsKCksdD1lP3RoaXMud2lkdGg6dGhpcy5oZWlnaHQsbj1Nbyh0aGlzLm9wdGlvbnMudGlja3MubWluUm90YXRpb24pLHI9KGU/TWF0aC5zaW4obik6TWF0aC5jb3MobikpfHwuMDAxLGk9dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKTtyZXR1cm4gTWF0aC5jZWlsKHQvTWF0aC5taW4oNDAsaS5saW5lSGVpZ2h0L3IpKX1nZXRQaXhlbEZvclZhbHVlKGUpe3JldHVybiBlPT09bnVsbD9OYU46dGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKGUtdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0VmFsdWVGb3JQaXhlbChlKXtyZXR1cm4gdGhpcy5fc3RhcnRWYWx1ZSt0aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKSp0aGlzLl92YWx1ZVJhbmdlfX0sa2Y9ZT0+TWF0aC5mbG9vcihDbyhlKSksQWY9KGUsdCk9PjEwKiooa2YoZSkrdCk7ZnVuY3Rpb24gamYoZSl7cmV0dXJuIGUvMTAqKmtmKGUpPT0xfWZ1bmN0aW9uIE1mKGUsdCxuKXtsZXQgcj0xMCoqbixpPU1hdGguZmxvb3IoZS9yKTtyZXR1cm4gTWF0aC5jZWlsKHQvciktaX1mdW5jdGlvbiBOZihlLHQpe2xldCBuPWtmKHQtZSk7Zm9yKDtNZihlLHQsbik+MTA7KW4rKztmb3IoO01mKGUsdCxuKTwxMDspbi0tO3JldHVybiBNYXRoLm1pbihuLGtmKGUpKX1mdW5jdGlvbiBQZihlLHttaW46dCxtYXg6bn0pe3Q9UWEoZS5taW4sdCk7bGV0IHI9W10saT1rZih0KSxhPU5mKHQsbiksbz1hPDA/MTAqKk1hdGguYWJzKGEpOjEscz0xMCoqYSxjPWk+YT8xMCoqaTowLGw9TWF0aC5yb3VuZCgodC1jKSpvKS9vLHU9TWF0aC5mbG9vcigodC1jKS9zLzEwKSpzKjEwLGQ9TWF0aC5mbG9vcigobC11KS8xMCoqYSksZj1RYShlLm1pbixNYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbyk7Zm9yKDtmPG47KXIucHVzaCh7dmFsdWU6ZixtYWpvcjpqZihmKSxzaWduaWZpY2FuZDpkfSksZD49MTA/ZD1kPDE1PzE1OjIwOmQrKyxkPj0yMCYmKGErKyxkPTIsbz1hPj0wPzE6byksZj1NYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbztsZXQgcD1RYShlLm1heCxmKTtyZXR1cm4gci5wdXNoKHt2YWx1ZTpwLG1ham9yOmpmKHApLHNpZ25pZmljYW5kOmR9KSxyfShjbGFzcyBleHRlbmRzIFd1e3N0YXRpYyBpZD1gbG9nYXJpdGhtaWNgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOnZzLmZvcm1hdHRlcnMubG9nYXJpdGhtaWMsbWFqb3I6e2VuYWJsZWQ6ITB9fX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMuX3N0YXJ0VmFsdWU9dm9pZCAwLHRoaXMuX3ZhbHVlUmFuZ2U9MH1wYXJzZShlLHQpe2xldCBuPURmLnByb3RvdHlwZS5wYXJzZS5hcHBseSh0aGlzLFtlLHRdKTtpZihuPT09MCl7dGhpcy5femVybz0hMDtyZXR1cm59cmV0dXJuIEsobikmJm4+MD9uOm51bGx9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW46ZSxtYXg6dH09dGhpcy5nZXRNaW5NYXgoITApO3RoaXMubWluPUsoZSk/TWF0aC5tYXgoMCxlKTpudWxsLHRoaXMubWF4PUsodCk/TWF0aC5tYXgoMCx0KTpudWxsLHRoaXMub3B0aW9ucy5iZWdpbkF0WmVybyYmKHRoaXMuX3plcm89ITApLHRoaXMuX3plcm8mJnRoaXMubWluIT09dGhpcy5fc3VnZ2VzdGVkTWluJiYhSyh0aGlzLl91c2VyTWluKSYmKHRoaXMubWluPWU9PT1BZih0aGlzLm1pbiwwKT9BZih0aGlzLm1pbiwtMSk6QWYodGhpcy5taW4sMCkpLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKXtsZXR7bWluRGVmaW5lZDplLG1heERlZmluZWQ6dH09dGhpcy5nZXRVc2VyQm91bmRzKCksbj10aGlzLm1pbixyPXRoaXMubWF4LGk9dD0+bj1lP246dCxhPWU9PnI9dD9yOmU7bj09PXImJihuPD0wPyhpKDEpLGEoMTApKTooaShBZihuLC0xKSksYShBZihyLDEpKSkpLG48PTAmJmkoQWYociwtMSkpLHI8PTAmJmEoQWYobiwxKSksdGhpcy5taW49bix0aGlzLm1heD1yfWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1QZih7bWluOnRoaXMuX3VzZXJNaW4sbWF4OnRoaXMuX3VzZXJNYXh9LHRoaXMpO3JldHVybiBlLmJvdW5kcz09PWB0aWNrc2AmJmpvKHQsdGhpcyxgdmFsdWVgKSxlLnJldmVyc2U/KHQucmV2ZXJzZSgpLHRoaXMuc3RhcnQ9dGhpcy5tYXgsdGhpcy5lbmQ9dGhpcy5taW4pOih0aGlzLnN0YXJ0PXRoaXMubWluLHRoaXMuZW5kPXRoaXMubWF4KSx0fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT12b2lkIDA/YDBgOmhzKGUsdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSx0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KX1jb25maWd1cmUoKXtsZXQgZT10aGlzLm1pbjtzdXBlci5jb25maWd1cmUoKSx0aGlzLl9zdGFydFZhbHVlPUNvKGUpLHRoaXMuX3ZhbHVlUmFuZ2U9Q28odGhpcy5tYXgpLUNvKGUpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuKGU9PT12b2lkIDB8fGU9PT0wKSYmKGU9dGhpcy5taW4pLGU9PT1udWxsfHxpc05hTihlKT9OYU46dGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoZT09PXRoaXMubWluPzA6KENvKGUpLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSk7cmV0dXJuIDEwKioodGhpcy5fc3RhcnRWYWx1ZSt0KnRoaXMuX3ZhbHVlUmFuZ2UpfX0pO2Z1bmN0aW9uIEZmKGUpe2xldCB0PWUudGlja3M7aWYodC5kaXNwbGF5JiZlLmRpc3BsYXkpe2xldCBlPVEodC5iYWNrZHJvcFBhZGRpbmcpO3JldHVybiBxKHQuZm9udCYmdC5mb250LnNpemUsWi5mb250LnNpemUpK2UuaGVpZ2h0fXJldHVybiAwfWZ1bmN0aW9uIElmKGUsdCxuKXtyZXR1cm4gbj1XKG4pP246W25dLHt3OkVzKGUsdC5zdHJpbmcsbiksaDpuLmxlbmd0aCp0LmxpbmVIZWlnaHR9fWZ1bmN0aW9uIExmKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT1yfHxlPT09aT97c3RhcnQ6dC1uLzIsZW5kOnQrbi8yfTplPHJ8fGU+aT97c3RhcnQ6dC1uLGVuZDp0fTp7c3RhcnQ6dCxlbmQ6dCtufX1mdW5jdGlvbiBSZihlKXtsZXQgdD17bDplLmxlZnQrZS5fcGFkZGluZy5sZWZ0LHI6ZS5yaWdodC1lLl9wYWRkaW5nLnJpZ2h0LHQ6ZS50b3ArZS5fcGFkZGluZy50b3AsYjplLmJvdHRvbS1lLl9wYWRkaW5nLmJvdHRvbX0sbj1PYmplY3QuYXNzaWduKHt9LHQpLHI9W10saT1bXSxhPWUuX3BvaW50TGFiZWxzLmxlbmd0aCxvPWUub3B0aW9ucy5wb2ludExhYmVscyxzPW8uY2VudGVyUG9pbnRMYWJlbHM/WC9hOjA7Zm9yKGxldCBjPTA7YzxhO2MrKyl7bGV0IGE9by5zZXRDb250ZXh0KGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoYykpO2lbY109YS5wYWRkaW5nO2xldCBsPWUuZ2V0UG9pbnRQb3NpdGlvbihjLGUuZHJhd2luZ0FyZWEraVtjXSxzKSx1PSQoYS5mb250KSxkPUlmKGUuY3R4LHUsZS5fcG9pbnRMYWJlbHNbY10pO3JbY109ZDtsZXQgZj1MbyhlLmdldEluZGV4QW5nbGUoYykrcykscD1NYXRoLnJvdW5kKE5vKGYpKTt6ZihuLHQsZixMZihwLGwueCxkLncsMCwxODApLExmKHAsbC55LGQuaCw5MCwyNzApKX1lLnNldENlbnRlclBvaW50KHQubC1uLmwsbi5yLXQucix0LnQtbi50LG4uYi10LmIpLGUuX3BvaW50TGFiZWxJdGVtcz1IZihlLHIsaSl9ZnVuY3Rpb24gemYoZSx0LG4scixpKXtsZXQgYT1NYXRoLmFicyhNYXRoLnNpbihuKSksbz1NYXRoLmFicyhNYXRoLmNvcyhuKSkscz0wLGM9MDtyLnN0YXJ0PHQubD8ocz0odC5sLXIuc3RhcnQpL2EsZS5sPU1hdGgubWluKGUubCx0LmwtcykpOnIuZW5kPnQuciYmKHM9KHIuZW5kLXQucikvYSxlLnI9TWF0aC5tYXgoZS5yLHQucitzKSksaS5zdGFydDx0LnQ/KGM9KHQudC1pLnN0YXJ0KS9vLGUudD1NYXRoLm1pbihlLnQsdC50LWMpKTppLmVuZD50LmImJihjPShpLmVuZC10LmIpL28sZS5iPU1hdGgubWF4KGUuYix0LmIrYykpfWZ1bmN0aW9uIEJmKGUsdCxuKXtsZXQgcj1lLmRyYXdpbmdBcmVhLHtleHRyYTppLGFkZGl0aW9uYWxBbmdsZTphLHBhZGRpbmc6byxzaXplOnN9PW4sYz1lLmdldFBvaW50UG9zaXRpb24odCxyK2krbyxhKSxsPU1hdGgucm91bmQoTm8oTG8oYy5hbmdsZStibykpKSx1PUdmKGMueSxzLmgsbCksZD1VZihsKSxmPVdmKGMueCxzLncsZCk7cmV0dXJue3Zpc2libGU6ITAseDpjLngseTp1LHRleHRBbGlnbjpkLGxlZnQ6Zix0b3A6dSxyaWdodDpmK3Mudyxib3R0b206dStzLmh9fWZ1bmN0aW9uIFZmKGUsdCl7aWYoIXQpcmV0dXJuITA7bGV0e2xlZnQ6bix0b3A6cixyaWdodDppLGJvdHRvbTphfT1lO3JldHVybiEoanMoe3g6bix5OnJ9LHQpfHxqcyh7eDpuLHk6YX0sdCl8fGpzKHt4OmkseTpyfSx0KXx8anMoe3g6aSx5OmF9LHQpKX1mdW5jdGlvbiBIZihlLHQsbil7bGV0IHI9W10saT1lLl9wb2ludExhYmVscy5sZW5ndGgsYT1lLm9wdGlvbnMse2NlbnRlclBvaW50TGFiZWxzOm8sZGlzcGxheTpzfT1hLnBvaW50TGFiZWxzLGM9e2V4dHJhOkZmKGEpLzIsYWRkaXRpb25hbEFuZ2xlOm8/WC9pOjB9LGw7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Yy5wYWRkaW5nPW5bYV0sYy5zaXplPXRbYV07bGV0IGk9QmYoZSxhLGMpO3IucHVzaChpKSxzPT09YGF1dG9gJiYoaS52aXNpYmxlPVZmKGksbCksaS52aXNpYmxlJiYobD1pKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gVWYoZSl7cmV0dXJuIGU9PT0wfHxlPT09MTgwP2BjZW50ZXJgOmU8MTgwP2BsZWZ0YDpgcmlnaHRgfWZ1bmN0aW9uIFdmKGUsdCxuKXtyZXR1cm4gbj09PWByaWdodGA/ZS09dDpuPT09YGNlbnRlcmAmJihlLT10LzIpLGV9ZnVuY3Rpb24gR2YoZSx0LG4pe3JldHVybiBuPT09OTB8fG49PT0yNzA/ZS09dC8yOihuPjI3MHx8bjw5MCkmJihlLT10KSxlfWZ1bmN0aW9uIEtmKGUsdCxuKXtsZXR7bGVmdDpyLHRvcDppLHJpZ2h0OmEsYm90dG9tOm99PW4se2JhY2tkcm9wQ29sb3I6c309dDtpZighVShzKSl7bGV0IG49R3ModC5ib3JkZXJSYWRpdXMpLGM9USh0LmJhY2tkcm9wUGFkZGluZyk7ZS5maWxsU3R5bGU9cztsZXQgbD1yLWMubGVmdCx1PWktYy50b3AsZD1hLXIrYy53aWR0aCxmPW8taStjLmhlaWdodDtPYmplY3QudmFsdWVzKG4pLnNvbWUoZT0+ZSE9PTApPyhlLmJlZ2luUGF0aCgpLFJzKGUse3g6bCx5OnUsdzpkLGg6ZixyYWRpdXM6bn0pLGUuZmlsbCgpKTplLmZpbGxSZWN0KGwsdSxkLGYpfX1mdW5jdGlvbiBxZihlLHQpe2xldHtjdHg6bixvcHRpb25zOntwb2ludExhYmVsczpyfX09ZTtmb3IobGV0IGk9dC0xO2k+PTA7aS0tKXtsZXQgdD1lLl9wb2ludExhYmVsSXRlbXNbaV07aWYoIXQudmlzaWJsZSljb250aW51ZTtsZXQgYT1yLnNldENvbnRleHQoZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7S2YobixhLHQpO2xldCBvPSQoYS5mb250KSx7eDpzLHk6Yyx0ZXh0QWxpZ246bH09dDtMcyhuLGUuX3BvaW50TGFiZWxzW2ldLHMsYytvLmxpbmVIZWlnaHQvMixvLHtjb2xvcjphLmNvbG9yLHRleHRBbGlnbjpsLHRleHRCYXNlbGluZTpgbWlkZGxlYH0pfX1mdW5jdGlvbiBKZihlLHQsbixyKXtsZXR7Y3R4Oml9PWU7aWYobilpLmFyYyhlLnhDZW50ZXIsZS55Q2VudGVyLHQsMCxfbyk7ZWxzZXtsZXQgbj1lLmdldFBvaW50UG9zaXRpb24oMCx0KTtpLm1vdmVUbyhuLngsbi55KTtmb3IobGV0IGE9MTthPHI7YSsrKW49ZS5nZXRQb2ludFBvc2l0aW9uKGEsdCksaS5saW5lVG8obi54LG4ueSl9fWZ1bmN0aW9uIFlmKGUsdCxuLHIsaSl7bGV0IGE9ZS5jdHgsbz10LmNpcmN1bGFyLHtjb2xvcjpzLGxpbmVXaWR0aDpjfT10OyFvJiYhcnx8IXN8fCFjfHxuPDB8fChhLnNhdmUoKSxhLnN0cm9rZVN0eWxlPXMsYS5saW5lV2lkdGg9YyxhLnNldExpbmVEYXNoKGkuZGFzaHx8W10pLGEubGluZURhc2hPZmZzZXQ9aS5kYXNoT2Zmc2V0LGEuYmVnaW5QYXRoKCksSmYoZSxuLG8sciksYS5jbG9zZVBhdGgoKSxhLnN0cm9rZSgpLGEucmVzdG9yZSgpKX1mdW5jdGlvbiBYZihlLHQsbil7cmV0dXJuIEpzKGUse2xhYmVsOm4saW5kZXg6dCx0eXBlOmBwb2ludExhYmVsYH0pfShjbGFzcyBleHRlbmRzIERme3N0YXRpYyBpZD1gcmFkaWFsTGluZWFyYDtzdGF0aWMgZGVmYXVsdHM9e2Rpc3BsYXk6ITAsYW5pbWF0ZTohMCxwb3NpdGlvbjpgY2hhcnRBcmVhYCxhbmdsZUxpbmVzOntkaXNwbGF5OiEwLGxpbmVXaWR0aDoxLGJvcmRlckRhc2g6W10sYm9yZGVyRGFzaE9mZnNldDowfSxncmlkOntjaXJjdWxhcjohMX0sc3RhcnRBbmdsZTowLHRpY2tzOntzaG93TGFiZWxCYWNrZHJvcDohMCxjYWxsYmFjazp2cy5mb3JtYXR0ZXJzLm51bWVyaWN9LHBvaW50TGFiZWxzOntiYWNrZHJvcENvbG9yOnZvaWQgMCxiYWNrZHJvcFBhZGRpbmc6MixkaXNwbGF5OiEwLGZvbnQ6e3NpemU6MTB9LGNhbGxiYWNrKGUpe3JldHVybiBlfSxwYWRkaW5nOjUsY2VudGVyUG9pbnRMYWJlbHM6ITF9fTtzdGF0aWMgZGVmYXVsdFJvdXRlcz17ImFuZ2xlTGluZXMuY29sb3IiOmBib3JkZXJDb2xvcmAsInBvaW50TGFiZWxzLmNvbG9yIjpgY29sb3JgLCJ0aWNrcy5jb2xvciI6YGNvbG9yYH07c3RhdGljIGRlc2NyaXB0b3JzPXthbmdsZUxpbmVzOntfZmFsbGJhY2s6YGdyaWRgfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy54Q2VudGVyPXZvaWQgMCx0aGlzLnlDZW50ZXI9dm9pZCAwLHRoaXMuZHJhd2luZ0FyZWE9dm9pZCAwLHRoaXMuX3BvaW50TGFiZWxzPVtdLHRoaXMuX3BvaW50TGFiZWxJdGVtcz1bXX1zZXREaW1lbnNpb25zKCl7bGV0IGU9dGhpcy5fcGFkZGluZz1RKEZmKHRoaXMub3B0aW9ucykvMiksdD10aGlzLndpZHRoPXRoaXMubWF4V2lkdGgtZS53aWR0aCxuPXRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LWUuaGVpZ2h0O3RoaXMueENlbnRlcj1NYXRoLmZsb29yKHRoaXMubGVmdCt0LzIrZS5sZWZ0KSx0aGlzLnlDZW50ZXI9TWF0aC5mbG9vcih0aGlzLnRvcCtuLzIrZS50b3ApLHRoaXMuZHJhd2luZ0FyZWE9TWF0aC5mbG9vcihNYXRoLm1pbih0LG4pLzIpfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCExKTt0aGlzLm1pbj1LKGUpJiYhaXNOYU4oZSk/ZTowLHRoaXMubWF4PUsodCkmJiFpc05hTih0KT90OjAsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9Y29tcHV0ZVRpY2tMaW1pdCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYS9GZih0aGlzLm9wdGlvbnMpKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7RGYucHJvdG90eXBlLmdlbmVyYXRlVGlja0xhYmVscy5jYWxsKHRoaXMsZSksdGhpcy5fcG9pbnRMYWJlbHM9dGhpcy5nZXRMYWJlbHMoKS5tYXAoKGUsdCk9PntsZXQgbj1KKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjayxbZSx0XSx0aGlzKTtyZXR1cm4gbnx8bj09PTA/bjpgYH0pLmZpbHRlcigoZSx0KT0+dGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eSh0KSl9Zml0KCl7bGV0IGU9dGhpcy5vcHRpb25zO2UuZGlzcGxheSYmZS5wb2ludExhYmVscy5kaXNwbGF5P1JmKHRoaXMpOnRoaXMuc2V0Q2VudGVyUG9pbnQoMCwwLDAsMCl9c2V0Q2VudGVyUG9pbnQoZSx0LG4scil7dGhpcy54Q2VudGVyKz1NYXRoLmZsb29yKChlLXQpLzIpLHRoaXMueUNlbnRlcis9TWF0aC5mbG9vcigobi1yKS8yKSx0aGlzLmRyYXdpbmdBcmVhLT1NYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhLzIsTWF0aC5tYXgoZSx0LG4scikpfWdldEluZGV4QW5nbGUoZSl7bGV0IHQ9X28vKHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aHx8MSksbj10aGlzLm9wdGlvbnMuc3RhcnRBbmdsZXx8MDtyZXR1cm4gTG8oZSp0K01vKG4pKX1nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShlKXtpZihVKGUpKXJldHVybiBOYU47bGV0IHQ9dGhpcy5kcmF3aW5nQXJlYS8odGhpcy5tYXgtdGhpcy5taW4pO3JldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZT8odGhpcy5tYXgtZSkqdDooZS10aGlzLm1pbikqdH1nZXRWYWx1ZUZvckRpc3RhbmNlRnJvbUNlbnRlcihlKXtpZihVKGUpKXJldHVybiBOYU47bGV0IHQ9ZS8odGhpcy5kcmF3aW5nQXJlYS8odGhpcy5tYXgtdGhpcy5taW4pKTtyZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2U/dGhpcy5tYXgtdDp0aGlzLm1pbit0fWdldFBvaW50TGFiZWxDb250ZXh0KGUpe2xldCB0PXRoaXMuX3BvaW50TGFiZWxzfHxbXTtpZihlPj0wJiZlPHQubGVuZ3RoKXtsZXQgbj10W2VdO3JldHVybiBYZih0aGlzLmdldENvbnRleHQoKSxlLG4pfX1nZXRQb2ludFBvc2l0aW9uKGUsdCxuPTApe2xldCByPXRoaXMuZ2V0SW5kZXhBbmdsZShlKS1ibytuO3JldHVybnt4Ok1hdGguY29zKHIpKnQrdGhpcy54Q2VudGVyLHk6TWF0aC5zaW4ocikqdCt0aGlzLnlDZW50ZXIsYW5nbGU6cn19Z2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGUsdCl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihlLHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodCkpfWdldEJhc2VQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoZXx8MCx0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRQb2ludExhYmVsUG9zaXRpb24oZSl7bGV0e2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfT10aGlzLl9wb2ludExhYmVsSXRlbXNbZV07cmV0dXJue2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfX1kcmF3QmFja2dyb3VuZCgpe2xldHtiYWNrZ3JvdW5kQ29sb3I6ZSxncmlkOntjaXJjdWxhcjp0fX09dGhpcy5vcHRpb25zO2lmKGUpe2xldCBuPXRoaXMuY3R4O24uc2F2ZSgpLG4uYmVnaW5QYXRoKCksSmYodGhpcyx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMuX2VuZFZhbHVlKSx0LHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCksbi5jbG9zZVBhdGgoKSxuLmZpbGxTdHlsZT1lLG4uZmlsbCgpLG4ucmVzdG9yZSgpfX1kcmF3R3JpZCgpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLHthbmdsZUxpbmVzOm4sZ3JpZDpyLGJvcmRlcjppfT10LGE9dGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoLG8scyxjO2lmKHQucG9pbnRMYWJlbHMuZGlzcGxheSYmcWYodGhpcyxhKSxyLmRpc3BsYXkmJnRoaXMudGlja3MuZm9yRWFjaCgoZSx0KT0+e2lmKHQhPT0wfHx0PT09MCYmdGhpcy5taW48MCl7cz10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUudmFsdWUpO2xldCBuPXRoaXMuZ2V0Q29udGV4dCh0KSxvPXIuc2V0Q29udGV4dChuKSxjPWkuc2V0Q29udGV4dChuKTtZZih0aGlzLG8scyxhLGMpfX0pLG4uZGlzcGxheSl7Zm9yKGUuc2F2ZSgpLG89YS0xO28+PTA7by0tKXtsZXQgcj1uLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChvKSkse2NvbG9yOmksbGluZVdpZHRoOmF9PXI7IWF8fCFpfHwoZS5saW5lV2lkdGg9YSxlLnN0cm9rZVN0eWxlPWksZS5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2gpLGUubGluZURhc2hPZmZzZXQ9ci5ib3JkZXJEYXNoT2Zmc2V0LHM9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0LnJldmVyc2U/dGhpcy5taW46dGhpcy5tYXgpLGM9dGhpcy5nZXRQb2ludFBvc2l0aW9uKG8scyksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0aGlzLnhDZW50ZXIsdGhpcy55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpKX1lLnJlc3RvcmUoKX19ZHJhd0JvcmRlcigpe31kcmF3TGFiZWxzKCl7bGV0IGU9dGhpcy5jdHgsdD10aGlzLm9wdGlvbnMsbj10LnRpY2tzO2lmKCFuLmRpc3BsYXkpcmV0dXJuO2xldCByPXRoaXMuZ2V0SW5kZXhBbmdsZSgwKSxpLGE7ZS5zYXZlKCksZS50cmFuc2xhdGUodGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5yb3RhdGUociksZS50ZXh0QWxpZ249YGNlbnRlcmAsZS50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdGhpcy50aWNrcy5mb3JFYWNoKChyLG8pPT57aWYobz09PTAmJnRoaXMubWluPj0wJiYhdC5yZXZlcnNlKXJldHVybjtsZXQgcz1uLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KG8pKSxjPSQocy5mb250KTtpZihpPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGhpcy50aWNrc1tvXS52YWx1ZSkscy5zaG93TGFiZWxCYWNrZHJvcCl7ZS5mb250PWMuc3RyaW5nLGE9ZS5tZWFzdXJlVGV4dChyLmxhYmVsKS53aWR0aCxlLmZpbGxTdHlsZT1zLmJhY2tkcm9wQ29sb3I7bGV0IHQ9UShzLmJhY2tkcm9wUGFkZGluZyk7ZS5maWxsUmVjdCgtYS8yLXQubGVmdCwtaS1jLnNpemUvMi10LnRvcCxhK3Qud2lkdGgsYy5zaXplK3QuaGVpZ2h0KX1McyhlLHIubGFiZWwsMCwtaSxjLHtjb2xvcjpzLmNvbG9yLHN0cm9rZUNvbG9yOnMudGV4dFN0cm9rZUNvbG9yLHN0cm9rZVdpZHRoOnMudGV4dFN0cm9rZVdpZHRofSl9KSxlLnJlc3RvcmUoKX1kcmF3VGl0bGUoKXt9fSk7dmFyIFpmPXttaWxsaXNlY29uZDp7Y29tbW9uOiEwLHNpemU6MSxzdGVwczoxZTN9LHNlY29uZDp7Y29tbW9uOiEwLHNpemU6MWUzLHN0ZXBzOjYwfSxtaW51dGU6e2NvbW1vbjohMCxzaXplOjZlNCxzdGVwczo2MH0saG91cjp7Y29tbW9uOiEwLHNpemU6MzZlNSxzdGVwczoyNH0sZGF5Ontjb21tb246ITAsc2l6ZTo4NjRlNSxzdGVwczozMH0sd2Vlazp7Y29tbW9uOiExLHNpemU6NjA0OGU1LHN0ZXBzOjR9LG1vbnRoOntjb21tb246ITAsc2l6ZToyNjI4ZTYsc3RlcHM6MTJ9LHF1YXJ0ZXI6e2NvbW1vbjohMSxzaXplOjc4ODRlNixzdGVwczo0fSx5ZWFyOntjb21tb246ITAsc2l6ZTozMTU0ZTd9fSxRZj1PYmplY3Qua2V5cyhaZik7ZnVuY3Rpb24gJGYoZSx0KXtyZXR1cm4gZS10fWZ1bmN0aW9uIGVwKGUsdCl7aWYoVSh0KSlyZXR1cm4gbnVsbDtsZXQgbj1lLl9hZGFwdGVyLHtwYXJzZXI6cixyb3VuZDppLGlzb1dlZWtkYXk6YX09ZS5fcGFyc2VPcHRzLG89dDtyZXR1cm4gdHlwZW9mIHI9PWBmdW5jdGlvbmAmJihvPXIobykpLEsobyl8fChvPXR5cGVvZiByPT1gc3RyaW5nYD9uLnBhcnNlKG8scik6bi5wYXJzZShvKSksbz09PW51bGw/bnVsbDooaSYmKG89aT09PWB3ZWVrYCYmKGtvKGEpfHxhPT09ITApP24uc3RhcnRPZihvLGBpc29XZWVrYCxhKTpuLnN0YXJ0T2YobyxpKSksK28pfWZ1bmN0aW9uIHRwKGUsdCxuLHIpe2xldCBpPVFmLmxlbmd0aDtmb3IobGV0IGE9UWYuaW5kZXhPZihlKTthPGktMTsrK2Epe2xldCBlPVpmW1FmW2FdXSxpPWUuc3RlcHM/ZS5zdGVwczoyKio1My0xO2lmKGUuY29tbW9uJiZNYXRoLmNlaWwoKG4tdCkvKGkqZS5zaXplKSk8PXIpcmV0dXJuIFFmW2FdfXJldHVybiBRZltpLTFdfWZ1bmN0aW9uIG5wKGUsdCxuLHIsaSl7Zm9yKGxldCBhPVFmLmxlbmd0aC0xO2E+PVFmLmluZGV4T2Yobik7YS0tKXtsZXQgbj1RZlthXTtpZihaZltuXS5jb21tb24mJmUuX2FkYXB0ZXIuZGlmZihpLHIsbik+PXQtMSlyZXR1cm4gbn1yZXR1cm4gUWZbbj9RZi5pbmRleE9mKG4pOjBdfWZ1bmN0aW9uIHJwKGUpe2ZvcihsZXQgdD1RZi5pbmRleE9mKGUpKzEsbj1RZi5sZW5ndGg7dDxuOysrdClpZihaZltRZlt0XV0uY29tbW9uKXJldHVybiBRZlt0XX1mdW5jdGlvbiBpcChlLHQsbil7aWYoIW4pZVt0XT0hMDtlbHNlIGlmKG4ubGVuZ3RoKXtsZXR7bG86cixoaTppfT1IbyhuLHQpLGE9bltyXT49dD9uW3JdOm5baV07ZVthXT0hMH19ZnVuY3Rpb24gYXAoZSx0LG4scil7bGV0IGk9ZS5fYWRhcHRlcixhPStpLnN0YXJ0T2YodFswXS52YWx1ZSxyKSxvPXRbdC5sZW5ndGgtMV0udmFsdWUscyxjO2ZvcihzPWE7czw9bztzPStpLmFkZChzLDEscikpYz1uW3NdLGM+PTAmJih0W2NdLm1ham9yPSEwKTtyZXR1cm4gdH1mdW5jdGlvbiBvcChlLHQsbil7bGV0IHI9W10saT17fSxhPXQubGVuZ3RoLG8scztmb3Iobz0wO288YTsrK28pcz10W29dLGlbc109byxyLnB1c2goe3ZhbHVlOnMsbWFqb3I6ITF9KTtyZXR1cm4gYT09PTB8fCFuP3I6YXAoZSxyLGksbil9dmFyIHNwPWNsYXNzIGV4dGVuZHMgV3V7c3RhdGljIGlkPWB0aW1lYDtzdGF0aWMgZGVmYXVsdHM9e2JvdW5kczpgZGF0YWAsYWRhcHRlcnM6e30sdGltZTp7cGFyc2VyOiExLHVuaXQ6ITEscm91bmQ6ITEsaXNvV2Vla2RheTohMSxtaW5Vbml0OmBtaWxsaXNlY29uZGAsZGlzcGxheUZvcm1hdHM6e319LHRpY2tzOntzb3VyY2U6YGF1dG9gLGNhbGxiYWNrOiExLG1ham9yOntlbmFibGVkOiExfX19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119LHRoaXMuX3VuaXQ9YGRheWAsdGhpcy5fbWFqb3JVbml0PXZvaWQgMCx0aGlzLl9vZmZzZXRzPXt9LHRoaXMuX25vcm1hbGl6ZWQ9ITEsdGhpcy5fcGFyc2VPcHRzPXZvaWQgMH1pbml0KGUsdD17fSl7bGV0IG49ZS50aW1lfHw9e30scj10aGlzLl9hZGFwdGVyPW5ldyBPbC5fZGF0ZShlLmFkYXB0ZXJzLmRhdGUpO3IuaW5pdCh0KSxhbyhuLmRpc3BsYXlGb3JtYXRzLHIuZm9ybWF0cygpKSx0aGlzLl9wYXJzZU9wdHM9e3BhcnNlcjpuLnBhcnNlcixyb3VuZDpuLnJvdW5kLGlzb1dlZWtkYXk6bi5pc29XZWVrZGF5fSxzdXBlci5pbml0KGUpLHRoaXMuX25vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkfXBhcnNlKGUsdCl7cmV0dXJuIGU9PT12b2lkIDA/bnVsbDplcCh0aGlzLGUpfWJlZm9yZUxheW91dCgpe3N1cGVyLmJlZm9yZUxheW91dCgpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119fWRldGVybWluZURhdGFMaW1pdHMoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD10aGlzLl9hZGFwdGVyLG49ZS50aW1lLnVuaXR8fGBkYXlgLHttaW46cixtYXg6aSxtaW5EZWZpbmVkOmEsbWF4RGVmaW5lZDpvfT10aGlzLmdldFVzZXJCb3VuZHMoKTtmdW5jdGlvbiBzKGUpeyFhJiYhaXNOYU4oZS5taW4pJiYocj1NYXRoLm1pbihyLGUubWluKSksIW8mJiFpc05hTihlLm1heCkmJihpPU1hdGgubWF4KGksZS5tYXgpKX0oIWF8fCFvKSYmKHModGhpcy5fZ2V0TGFiZWxCb3VuZHMoKSksKGUuYm91bmRzIT09YHRpY2tzYHx8ZS50aWNrcy5zb3VyY2UhPT1gbGFiZWxzYCkmJnModGhpcy5nZXRNaW5NYXgoITEpKSkscj1LKHIpJiYhaXNOYU4ocik/cjordC5zdGFydE9mKERhdGUubm93KCksbiksaT1LKGkpJiYhaXNOYU4oaSk/aTordC5lbmRPZihEYXRlLm5vdygpLG4pKzEsdGhpcy5taW49TWF0aC5taW4ocixpLTEpLHRoaXMubWF4PU1hdGgubWF4KHIrMSxpKX1fZ2V0TGFiZWxCb3VuZHMoKXtsZXQgZT10aGlzLmdldExhYmVsVGltZXN0YW1wcygpLHQ9MS8wLG49LTEvMDtyZXR1cm4gZS5sZW5ndGgmJih0PWVbMF0sbj1lW2UubGVuZ3RoLTFdKSx7bWluOnQsbWF4Om59fWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpbWUsbj1lLnRpY2tzLHI9bi5zb3VyY2U9PT1gbGFiZWxzYD90aGlzLmdldExhYmVsVGltZXN0YW1wcygpOnRoaXMuX2dlbmVyYXRlKCk7ZS5ib3VuZHM9PT1gdGlja3NgJiZyLmxlbmd0aCYmKHRoaXMubWluPXRoaXMuX3VzZXJNaW58fHJbMF0sdGhpcy5tYXg9dGhpcy5fdXNlck1heHx8cltyLmxlbmd0aC0xXSk7bGV0IGk9dGhpcy5taW4sYT10aGlzLm1heCxvPUdvKHIsaSxhKTtyZXR1cm4gdGhpcy5fdW5pdD10LnVuaXR8fChuLmF1dG9Ta2lwP3RwKHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCx0aGlzLl9nZXRMYWJlbENhcGFjaXR5KGkpKTpucCh0aGlzLG8ubGVuZ3RoLHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCkpLHRoaXMuX21ham9yVW5pdD0hbi5tYWpvci5lbmFibGVkfHx0aGlzLl91bml0PT09YHllYXJgP3ZvaWQgMDpycCh0aGlzLl91bml0KSx0aGlzLmluaXRPZmZzZXRzKHIpLGUucmV2ZXJzZSYmby5yZXZlcnNlKCksb3AodGhpcyxvLHRoaXMuX21ham9yVW5pdCl9YWZ0ZXJBdXRvU2tpcCgpe3RoaXMub3B0aW9ucy5vZmZzZXRBZnRlckF1dG9za2lwJiZ0aGlzLmluaXRPZmZzZXRzKHRoaXMudGlja3MubWFwKGU9PitlLnZhbHVlKSl9aW5pdE9mZnNldHMoZT1bXSl7bGV0IHQ9MCxuPTAscixpO3RoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoJiYocj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzBdKSx0PWUubGVuZ3RoPT09MT8xLXI6KHRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbMV0pLXIpLzIsaT10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTFdKSxuPWUubGVuZ3RoPT09MT9pOihpLXRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbZS5sZW5ndGgtMl0pKS8yKTtsZXQgYT1lLmxlbmd0aDwzPy41Oi4yNTt0PXpvKHQsMCxhKSxuPXpvKG4sMCxhKSx0aGlzLl9vZmZzZXRzPXtzdGFydDp0LGVuZDpuLGZhY3RvcjoxLyh0KzErbil9fV9nZW5lcmF0ZSgpe2xldCBlPXRoaXMuX2FkYXB0ZXIsdD10aGlzLm1pbixuPXRoaXMubWF4LHI9dGhpcy5vcHRpb25zLGk9ci50aW1lLGE9aS51bml0fHx0cChpLm1pblVuaXQsdCxuLHRoaXMuX2dldExhYmVsQ2FwYWNpdHkodCkpLG89cShyLnRpY2tzLnN0ZXBTaXplLDEpLHM9YT09PWB3ZWVrYCYmaS5pc29XZWVrZGF5LGM9a28ocyl8fHM9PT0hMCxsPXt9LHU9dCxkLGY7aWYoYyYmKHU9K2Uuc3RhcnRPZih1LGBpc29XZWVrYCxzKSksdT0rZS5zdGFydE9mKHUsYz9gZGF5YDphKSxlLmRpZmYobix0LGEpPjFlNSpvKXRocm93IEVycm9yKHQrYCBhbmQgYCtuK2AgYXJlIHRvbyBmYXIgYXBhcnQgd2l0aCBzdGVwU2l6ZSBvZiBgK28rYCBgK2EpO2xldCBwPXIudGlja3Muc291cmNlPT09YGRhdGFgJiZ0aGlzLmdldERhdGFUaW1lc3RhbXBzKCk7Zm9yKGQ9dSxmPTA7ZDxuO2Q9K2UuYWRkKGQsbyxhKSxmKyspaXAobCxkLHApO3JldHVybihkPT09bnx8ci5ib3VuZHM9PT1gdGlja3NgfHxmPT09MSkmJmlwKGwsZCxwKSxPYmplY3Qua2V5cyhsKS5zb3J0KCRmKS5tYXAoZT0+K2UpfWdldExhYmVsRm9yVmFsdWUoZSl7bGV0IHQ9dGhpcy5fYWRhcHRlcixuPXRoaXMub3B0aW9ucy50aW1lO3JldHVybiBuLnRvb2x0aXBGb3JtYXQ/dC5mb3JtYXQoZSxuLnRvb2x0aXBGb3JtYXQpOnQuZm9ybWF0KGUsbi5kaXNwbGF5Rm9ybWF0cy5kYXRldGltZSl9Zm9ybWF0KGUsdCl7bGV0IG49dGhpcy5vcHRpb25zLnRpbWUuZGlzcGxheUZvcm1hdHMscj10aGlzLl91bml0LGk9dHx8bltyXTtyZXR1cm4gdGhpcy5fYWRhcHRlci5mb3JtYXQoZSxpKX1fdGlja0Zvcm1hdEZ1bmN0aW9uKGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9ucyxhPWkudGlja3MuY2FsbGJhY2s7aWYoYSlyZXR1cm4gSihhLFtlLHQsbl0sdGhpcyk7bGV0IG89aS50aW1lLmRpc3BsYXlGb3JtYXRzLHM9dGhpcy5fdW5pdCxjPXRoaXMuX21ham9yVW5pdCxsPXMmJm9bc10sdT1jJiZvW2NdLGQ9blt0XSxmPWMmJnUmJmQmJmQubWFqb3I7cmV0dXJuIHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGUscnx8KGY/dTpsKSl9Z2VuZXJhdGVUaWNrTGFiZWxzKGUpe2xldCB0LG4scjtmb3IodD0wLG49ZS5sZW5ndGg7dDxuOysrdClyPWVbdF0sci5sYWJlbD10aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24oci52YWx1ZSx0LGUpfWdldERlY2ltYWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PW51bGw/TmFOOihlLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfWdldFBpeGVsRm9yVmFsdWUoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGUpO3JldHVybiB0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgodC5zdGFydCtuKSp0LmZhY3Rvcil9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkvdC5mYWN0b3ItdC5lbmQ7cmV0dXJuIHRoaXMubWluK24qKHRoaXMubWF4LXRoaXMubWluKX1fZ2V0TGFiZWxTaXplKGUpe2xldCB0PXRoaXMub3B0aW9ucy50aWNrcyxuPXRoaXMuY3R4Lm1lYXN1cmVUZXh0KGUpLndpZHRoLHI9TW8odGhpcy5pc0hvcml6b250YWwoKT90Lm1heFJvdGF0aW9uOnQubWluUm90YXRpb24pLGk9TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxvPXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoMCkuc2l6ZTtyZXR1cm57dzpuKmkrbyphLGg6biphK28qaX19X2dldExhYmVsQ2FwYWNpdHkoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpbWUsbj10LmRpc3BsYXlGb3JtYXRzLHI9blt0LnVuaXRdfHxuLm1pbGxpc2Vjb25kLGk9dGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKGUsMCxvcCh0aGlzLFtlXSx0aGlzLl9tYWpvclVuaXQpLHIpLGE9dGhpcy5fZ2V0TGFiZWxTaXplKGkpLG89TWF0aC5mbG9vcih0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgvYS53OnRoaXMuaGVpZ2h0L2EuaCktMTtyZXR1cm4gbz4wP286MX1nZXREYXRhVGltZXN0YW1wcygpe2xldCBlPXRoaXMuX2NhY2hlLmRhdGF8fFtdLHQsbjtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgcj10aGlzLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCk7aWYodGhpcy5fbm9ybWFsaXplZCYmci5sZW5ndGgpcmV0dXJuIHRoaXMuX2NhY2hlLmRhdGE9clswXS5jb250cm9sbGVyLmdldEFsbFBhcnNlZFZhbHVlcyh0aGlzKTtmb3IodD0wLG49ci5sZW5ndGg7dDxuOysrdCllPWUuY29uY2F0KHJbdF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcykpO3JldHVybiB0aGlzLl9jYWNoZS5kYXRhPXRoaXMubm9ybWFsaXplKGUpfWdldExhYmVsVGltZXN0YW1wcygpe2xldCBlPXRoaXMuX2NhY2hlLmxhYmVsc3x8W10sdCxuO2lmKGUubGVuZ3RoKXJldHVybiBlO2xldCByPXRoaXMuZ2V0TGFiZWxzKCk7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpZS5wdXNoKGVwKHRoaXMsclt0XSkpO3JldHVybiB0aGlzLl9jYWNoZS5sYWJlbHM9dGhpcy5fbm9ybWFsaXplZD9lOnRoaXMubm9ybWFsaXplKGUpfW5vcm1hbGl6ZShlKXtyZXR1cm4gWW8oZS5zb3J0KCRmKSl9fTtmdW5jdGlvbiBjcChlLHQsbil7bGV0IHI9MCxpPWUubGVuZ3RoLTEsYSxvLHMsYztuPyh0Pj1lW3JdLnBvcyYmdDw9ZVtpXS5wb3MmJih7bG86cixoaTppfT1VbyhlLGBwb3NgLHQpKSx7cG9zOmEsdGltZTpzfT1lW3JdLHtwb3M6byx0aW1lOmN9PWVbaV0pOih0Pj1lW3JdLnRpbWUmJnQ8PWVbaV0udGltZSYmKHtsbzpyLGhpOml9PVVvKGUsYHRpbWVgLHQpKSx7dGltZTphLHBvczpzfT1lW3JdLHt0aW1lOm8scG9zOmN9PWVbaV0pO2xldCBsPW8tYTtyZXR1cm4gbD9zKyhjLXMpKih0LWEpL2w6c30oY2xhc3MgZXh0ZW5kcyBzcHtzdGF0aWMgaWQ9YHRpbWVzZXJpZXNgO3N0YXRpYyBkZWZhdWx0cz1zcC5kZWZhdWx0cztjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl90YWJsZT1bXSx0aGlzLl9taW5Qb3M9dm9pZCAwLHRoaXMuX3RhYmxlUmFuZ2U9dm9pZCAwfWluaXRPZmZzZXRzKCl7bGV0IGU9dGhpcy5fZ2V0VGltZXN0YW1wc0ZvclRhYmxlKCksdD10aGlzLl90YWJsZT10aGlzLmJ1aWxkTG9va3VwVGFibGUoZSk7dGhpcy5fbWluUG9zPWNwKHQsdGhpcy5taW4pLHRoaXMuX3RhYmxlUmFuZ2U9Y3AodCx0aGlzLm1heCktdGhpcy5fbWluUG9zLHN1cGVyLmluaXRPZmZzZXRzKGUpfWJ1aWxkTG9va3VwVGFibGUoZSl7bGV0e21pbjp0LG1heDpufT10aGlzLHI9W10saT1bXSxhLG8scyxjLGw7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpYz1lW2FdLGM+PXQmJmM8PW4mJnIucHVzaChjKTtpZihyLmxlbmd0aDwyKXJldHVyblt7dGltZTp0LHBvczowfSx7dGltZTpuLHBvczoxfV07Zm9yKGE9MCxvPXIubGVuZ3RoO2E8bzsrK2EpbD1yW2ErMV0scz1yW2EtMV0sYz1yW2FdLE1hdGgucm91bmQoKGwrcykvMikhPT1jJiZpLnB1c2goe3RpbWU6Yyxwb3M6YS8oby0xKX0pO3JldHVybiBpfV9nZW5lcmF0ZSgpe2xldCBlPXRoaXMubWluLHQ9dGhpcy5tYXgsbj1zdXBlci5nZXREYXRhVGltZXN0YW1wcygpO3JldHVybighbi5pbmNsdWRlcyhlKXx8IW4ubGVuZ3RoKSYmbi5zcGxpY2UoMCwwLGUpLCghbi5pbmNsdWRlcyh0KXx8bi5sZW5ndGg9PT0xKSYmbi5wdXNoKHQpLG4uc29ydCgoZSx0KT0+ZS10KX1fZ2V0VGltZXN0YW1wc0ZvclRhYmxlKCl7bGV0IGU9dGhpcy5fY2FjaGUuYWxsfHxbXTtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgdD10aGlzLmdldERhdGFUaW1lc3RhbXBzKCksbj10aGlzLmdldExhYmVsVGltZXN0YW1wcygpO3JldHVybiBlPXQubGVuZ3RoJiZuLmxlbmd0aD90aGlzLm5vcm1hbGl6ZSh0LmNvbmNhdChuKSk6dC5sZW5ndGg/dDpuLGU9dGhpcy5fY2FjaGUuYWxsPWUsZX1nZXREZWNpbWFsRm9yVmFsdWUoZSl7cmV0dXJuKGNwKHRoaXMuX3RhYmxlLGUpLXRoaXMuX21pblBvcykvdGhpcy5fdGFibGVSYW5nZX1nZXRWYWx1ZUZvclBpeGVsKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKS90LmZhY3Rvci10LmVuZDtyZXR1cm4gY3AodGhpcy5fdGFibGUsbip0aGlzLl90YWJsZVJhbmdlK3RoaXMuX21pblBvcywhMCl9fSk7dmFyIGxwPXtkYXRhOnt0eXBlOk9iamVjdCxyZXF1aXJlZDohMH0sb3B0aW9uczp7dHlwZTpPYmplY3QsZGVmYXVsdDooKT0+KHt9KX0scGx1Z2luczp7dHlwZTpBcnJheSxkZWZhdWx0OigpPT5bXX0sZGF0YXNldElkS2V5Ont0eXBlOlN0cmluZyxkZWZhdWx0OmBsYWJlbGB9LHVwZGF0ZU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dm9pZCAwfX0sdXA9e2FyaWFMYWJlbDp7dHlwZTpTdHJpbmd9LGFyaWFEZXNjcmliZWRieTp7dHlwZTpTdHJpbmd9fSxkcD17dHlwZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGRlc3Ryb3lEZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSwuLi5scCwuLi51cH0sZnA9KGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0KTtmdW5jdGlvbiBwcChlKXtyZXR1cm4gRChlKT9mKGUpOmV9ZnVuY3Rpb24gbXAoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmU7cmV0dXJuIEQodCk/bmV3IFByb3h5KGUse30pOmV9ZnVuY3Rpb24gaHAoZSx0KXtsZXQgbj1lLm9wdGlvbnM7biYmdCYmT2JqZWN0LmFzc2lnbihuLHQpfWZ1bmN0aW9uIGdwKGUsdCl7ZS5sYWJlbHM9dH1mdW5jdGlvbiBfcChlLHQsbil7bGV0IHI9W107ZS5kYXRhc2V0cz10Lm1hcCh0PT57bGV0IGk9ZS5kYXRhc2V0cy5maW5kKGU9PmVbbl09PT10W25dKTtyZXR1cm4haXx8IXQuZGF0YXx8ci5pbmNsdWRlcyhpKT97Li4udH06KHIucHVzaChpKSxPYmplY3QuYXNzaWduKGksdCksaSl9KX1mdW5jdGlvbiB2cChlLHQpe2xldCBuPXtsYWJlbHM6W10sZGF0YXNldHM6W119O3JldHVybiBncChuLGUubGFiZWxzKSxfcChuLGUuZGF0YXNldHMsdCksbn12YXIgeXA9Rih7cHJvcHM6ZHAsc2V0dXAoZSx0KXtsZXR7ZXhwb3NlOm4sc2xvdHM6cn09dCxpPUMobnVsbCksYT1rKG51bGwpO24oe2NoYXJ0OmF9KTtsZXQgbz0oKT0+e2lmKCFpLnZhbHVlKXJldHVybjtsZXR7dHlwZTp0LGRhdGE6bixvcHRpb25zOnIscGx1Z2luczpvLGRhdGFzZXRJZEtleTpzfT1lLGM9bXAodnAobixzKSxuKTthLnZhbHVlPW5ldyBNZChpLnZhbHVlLHt0eXBlOnQsZGF0YTpjLG9wdGlvbnM6ey4uLnJ9LHBsdWdpbnM6b30pfSxzPSgpPT57bGV0IHQ9ZihhLnZhbHVlKTt0JiYoZS5kZXN0cm95RGVsYXk+MD9zZXRUaW1lb3V0KCgpPT57dC5kZXN0cm95KCksYS52YWx1ZT1udWxsfSxlLmRlc3Ryb3lEZWxheSk6KHQuZGVzdHJveSgpLGEudmFsdWU9bnVsbCkpfSxjPXQ9Pnt0LnVwZGF0ZShlLnVwZGF0ZU1vZGUpfTtyZXR1cm4gQ2UobykseGUocyksaihbKCk9PmUub3B0aW9ucywoKT0+ZS5kYXRhXSwodCxuKT0+e2xldFtyLGldPXQsW28sc109bixsPWYoYS52YWx1ZSk7aWYoIWwpcmV0dXJuO2xldCB1PSExO2lmKHIpe2xldCBlPXBwKHIpLHQ9cHAobyk7ZSYmZSE9PXQmJihocChsLGUpLHU9ITApfWlmKGkpe2xldCB0PXBwKGkubGFiZWxzKSxuPXBwKHMubGFiZWxzKSxyPXBwKGkuZGF0YXNldHMpLGE9cHAocy5kYXRhc2V0cyk7dCE9PW4mJihncChsLmNvbmZpZy5kYXRhLHQpLHU9ITApLHImJnIhPT1hJiYoX3AobC5jb25maWcuZGF0YSxyLGUuZGF0YXNldElkS2V5KSx1PSEwKX11JiZ6ZSgoKT0+e2MobCl9KX0se2RlZXA6ITB9KSwoKT0+R2UoYGNhbnZhc2Ase3JvbGU6YGltZ2AsImFyaWEtbGFiZWwiOmUuYXJpYUxhYmVsLCJhcmlhLWRlc2NyaWJlZGJ5IjplLmFyaWFEZXNjcmliZWRieSxyZWY6aX0sW0dlKGBwYCx7fSxbci5kZWZhdWx0P3IuZGVmYXVsdCgpOmBgXSldKX19KTtmdW5jdGlvbiBicChlLHQpe3JldHVybiBNZC5yZWdpc3Rlcih0KSxGKHtwcm9wczpscCxzZXR1cCh0LG4pe2xldHtleHBvc2U6cn09bixpPWsobnVsbCksYT1rKG51bGwpO2ooKCk9PmEudmFsdWU/LmNoYXJ0Pz9udWxsLGU9PntpLnZhbHVlPWV9LHtmbHVzaDpgc3luY2B9KSxyKHtjaGFydDppfSk7bGV0IG89ZT0+e2EudmFsdWU9ZX07cmV0dXJuKCk9PkdlKHlwLGZwKHtyZWY6b30se3R5cGU6ZSwuLi50fSkpfX0pfXZhciB4cD1icChgYmFyYCxFbCk7TWQucmVnaXN0ZXIoRWwsVWQsd2YsT2YsUWQseWYpO2Z1bmN0aW9uIFNwKCl7bGV0IGU9QyhgYCksdD1DKGBgKSxuPUMoYGApO2Z1bmN0aW9uIHIoKXtsZXQgcj1nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZS52YWx1ZT1yLmdldFByb3BlcnR5VmFsdWUoYC0tZm9yZWdyb3VuZGApLnRyaW0oKSx0LnZhbHVlPXIuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdXRlZC1mb3JlZ3JvdW5kYCkudHJpbSgpLG4udmFsdWU9ci5nZXRQcm9wZXJ0eVZhbHVlKGAtLWJvcmRlcmApLnRyaW0oKX1sZXQgaTtyZXR1cm4gQ2UoKCk9PntyKCksaT13aW5kb3cubWF0Y2hNZWRpYShgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKWApLGkuYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCxyKX0pLE5lKCgpPT57aT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCxyKX0pLHtmb3JlZ3JvdW5kOmUsbXV0ZWRGb3JlZ3JvdW5kOnQsYm9yZGVyOm59fXZhciBDcD17Y29zdDpgQ29zdGAscmVxOmBSZXF1ZXN0c2AsdG9raW46YFRva2VucyBpbmAsdG9rb3V0OmBUb2tlbnMgb3V0YH0sd3A9MjAsVHA9MTAwLEVwPTNlNCxEcD17aG91cjoyNCxkYXk6MzAsbW9udGg6MTJ9LE9wPXtob3VyOmAyNGhgLGRheTpgMzBkYCxtb250aDpgMTJtb2B9LGtwPXtob3VyOmBUaGlzIGhvdXIgKFVUQylgLGRheTpgVG9kYXkgKFVUQylgLG1vbnRoOmBUaGlzIG1vbnRoIChVVEMpYH07ZnVuY3Rpb24gQXAoZSl7c3dpdGNoKGUpe2Nhc2VgcmVxdWVzdHNgOnJldHVybltgcmVxYF07Y2FzZWB0b2tlbnNgOnJldHVybltgdG9raW5gLGB0b2tvdXRgXTtjYXNlYGNvc3RgOnJldHVybltgY29zdGBdO2Nhc2VgbW9kZWxzYDpyZXR1cm5bXX19dmFyIGpwPWNlKGBoaXN0b3J5YCx7c3RhdGU6KCk9Pih7c2NvcGU6YHRvdGFsYCx3aW5kb3c6YGhvdXJgLHRhYjpgcmVxdWVzdHNgLG1vZGVsTWV0cmljOmBjb3N0YCxzZXJpZXNCeU1ldHJpYzp7fSxtb2RlbFJhbmtpbmc6W10sbW9kZWxPcHRpb25zOltdLGxvYWRpbmc6ITEsbG9hZGVkOiExLGVycm9yOmBgLHRpbWVyOnZvaWQgMCxzZXJpZXNSZXFJZDowLG9wdGlvbnNSZXFJZDowfSksYWN0aW9uczp7c2V0U2NvcGUoZSl7ZSE9PXRoaXMuc2NvcGUmJih0aGlzLnNjb3BlPWUsdGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpKX0sc2V0V2luZG93KGUpe2UhPT10aGlzLndpbmRvdyYmKHRoaXMud2luZG93PWUsdGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLm1vZGVsUmFua2luZz1bXSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpKX0sc2V0VGFiKGUpe2UhPT10aGlzLnRhYiYmKHRoaXMudGFiPWUsdGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLm1vZGVsUmFua2luZz1bXSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpKX0sc2V0TW9kZWxNZXRyaWMoZSl7ZSE9PXRoaXMubW9kZWxNZXRyaWMmJih0aGlzLm1vZGVsTWV0cmljPWUsdGhpcy5tb2RlbFJhbmtpbmc9W10sdGhpcy5lcnJvcj1gYCx0aGlzLmxvYWRlZD0hMSx0aGlzLnJlZnJlc2goKSl9LGFzeW5jIHJlZnJlc2goKXthd2FpdCBQcm9taXNlLmFsbChbdGhpcy50YWI9PT1gbW9kZWxzYD90aGlzLmZldGNoTW9kZWxSYW5raW5nKCk6dGhpcy5mZXRjaFNlcmllcygpLHRoaXMuZmV0Y2hNb2RlbE9wdGlvbnMoKV0pfSxhc3luYyBmZXRjaFNlcmllcygpe2lmKCFTZSgpLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Kyt0aGlzLnNlcmllc1JlcUlkO3RoaXMubG9hZGluZz0hMDt0cnl7bGV0IHQ9RHBbdGhpcy53aW5kb3ddLG49QXAodGhpcy50YWIpLHI9YXdhaXQgUHJvbWlzZS5hbGwobi5tYXAoZT0+TWUoYC9hZG1pbi9hcGkvdXNhZ2UvaGlzdG9yeT9zY29wZT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNjb3BlKX0mbWV0cmljPSR7ZX0md2luZG93PSR7dGhpcy53aW5kb3d9JnNwYW49JHt0fWApKSk7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWQpcmV0dXJuO2xldCBpPXt9O24uZm9yRWFjaCgoZSx0KT0+e2lbZV09clt0XS5wb2ludHN9KSx0aGlzLnNlcmllc0J5TWV0cmljPWksdGhpcy5sb2FkZWQ9ITAsdGhpcy5lcnJvcj1gYH1jYXRjaCh0KXtpZihlIT09dGhpcy5zZXJpZXNSZXFJZHx8dCBpbnN0YW5jZW9mIFJlJiYodC5zdGF0dXM9PT00MDF8fHQuc3RhdHVzPT09NDAzKSlyZXR1cm47dGhpcy5lcnJvcj10IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOlN0cmluZyh0KX1maW5hbGx5e2U9PT10aGlzLnNlcmllc1JlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19LGFzeW5jIGZldGNoTW9kZWxSYW5raW5nKCl7aWYoIVNlKCkuaXNBdXRoZW50aWNhdGVkKXJldHVybjtsZXQgZT0rK3RoaXMuc2VyaWVzUmVxSWQ7dGhpcy5sb2FkaW5nPSEwO3RyeXtsZXQgdD1hd2FpdCBNZShgL2FkbWluL2FwaS91c2FnZS9tb2RlbHM/bWV0cmljPSR7dGhpcy5tb2RlbE1ldHJpY30md2luZG93PSR7dGhpcy53aW5kb3d9JmxpbWl0PSR7d3B9YCk7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWQpcmV0dXJuO3RoaXMubW9kZWxSYW5raW5nPXQubW9kZWxzLHRoaXMubG9hZGVkPSEwLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWR8fHQgaW5zdGFuY2VvZiBSZSYmKHQuc3RhdHVzPT09NDAxfHx0LnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9ZmluYWxseXtlPT09dGhpcy5zZXJpZXNSZXFJZCYmKHRoaXMubG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaE1vZGVsT3B0aW9ucygpe2lmKCFTZSgpLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Kyt0aGlzLm9wdGlvbnNSZXFJZDt0cnl7bGV0IHQ9YXdhaXQgTWUoYC9hZG1pbi9hcGkvdXNhZ2UvbW9kZWxzP21ldHJpYz1yZXEmd2luZG93PSR7dGhpcy53aW5kb3d9JmxpbWl0PSR7VHB9YCk7aWYoZSE9PXRoaXMub3B0aW9uc1JlcUlkKXJldHVybjt0aGlzLm1vZGVsT3B0aW9ucz10Lm1vZGVsc31jYXRjaHt9fSxzdGFydEF1dG9SZWZyZXNoKCl7dGhpcy50aW1lcj09PXZvaWQgMCYmKHRoaXMudGltZXI9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLmxvYWRpbmd8fHRoaXMucmVmcmVzaCgpfSxFcCkpfSxzdG9wQXV0b1JlZnJlc2goKXt0aGlzLnRpbWVyIT09dm9pZCAwJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXZvaWQgMCl9fX0pLE1wPXtrZXk6MCxjbGFzczpgcHktOCB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LE5wPUYoe19fbmFtZTpgTW9kZWxVc2FnZUNoYXJ0YCxwcm9wczp7bWV0cmljOnt9LG1vZGVsczp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSx7Zm9yZWdyb3VuZDpuLG11dGVkRm9yZWdyb3VuZDpyLGJvcmRlcjppfT1TcCgpLGE9e3JlcTpgLS1jaGFydC1yZXF1ZXN0c2AsdG9raW46YC0tY2hhcnQtdG9rZW5zLWluYCx0b2tvdXQ6YC0tY2hhcnQtdG9rZW5zLW91dGAsY29zdDpgLS1jaGFydC1jb3N0YH07ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPT09YGNvc3RgP3QvMWU2OnR9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoZSkudHJpbSgpfWxldCBjPXooKCk9PihuLnZhbHVlLHtsYWJlbHM6dC5tb2RlbHMubWFwKGU9PmUuaWQpLGRhdGFzZXRzOlt7bGFiZWw6Q3BbdC5tZXRyaWNdLGJhY2tncm91bmRDb2xvcjpzKGFbdC5tZXRyaWNdKSxkYXRhOnQubW9kZWxzLm1hcChlPT5vKHQubWV0cmljLGUudmFsdWUpKX1dfSkpLGw9eigoKT0+YCR7TWF0aC5tYXgoMTgwLHQubW9kZWxzLmxlbmd0aCoyOCs2MCl9cHhgKSx1PXooKCk9Pih7aW5kZXhBeGlzOmB5YCxyZXNwb25zaXZlOiEwLG1haW50YWluQXNwZWN0UmF0aW86ITEsYW5pbWF0aW9uOiExLHNjYWxlczp7eDp7YmVnaW5BdFplcm86ITAsZ3JpZDp7Y29sb3I6aS52YWx1ZX0sdGlja3M6e2NvbG9yOnIudmFsdWUsY2FsbGJhY2s6ZT0+dC5tZXRyaWM9PT1gY29zdGA/V2UoTnVtYmVyKGUpKjFlNik6QWUoTnVtYmVyKGUpKX19LHk6e2dyaWQ6e2Rpc3BsYXk6ITF9LHRpY2tzOntjb2xvcjpyLnZhbHVlLGF1dG9Ta2lwOiExfX19LHBsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTohMX0sdG9vbHRpcDp7Y2FsbGJhY2tzOntsYWJlbDplPT57bGV0IG49ZS5wYXJzZWQueD8/MDtyZXR1cm4gdC5tZXRyaWM9PT1gY29zdGA/YCR7Q3BbdC5tZXRyaWNdfTogJCR7bi50b0ZpeGVkKDQpfWA6YCR7Q3BbdC5tZXRyaWNdfTogJHtBZShuKX0gKCR7Z2Uobil9KWB9fX19fSkpO3JldHVybih0LG4pPT5lLm1vZGVscy5sZW5ndGg9PT0wPyhOKCksUChgcGAsTXAsYCBObyBtb2RlbCByZWNvcmRlZCBhbnkgdXNhZ2UgaW4gdGhpcyB3aW5kb3cuIGApKTooTigpLFAoYGRpdmAse2tleToxLGNsYXNzOmB3LWZ1bGxgLHN0eWxlOm9lKHtoZWlnaHQ6bC52YWx1ZX0pfSxbUihBKHhwKSx7ZGF0YTpjLnZhbHVlLG9wdGlvbnM6dS52YWx1ZX0sbnVsbCw4LFtgZGF0YWAsYG9wdGlvbnNgXSldLDQpKX19KSxQcD17Y2xhc3M6YGgtNzIgdy1mdWxsYH0sRnA9Rih7X19uYW1lOmBVc2FnZUNoYXJ0YCxwcm9wczp7dGFiOnt9LHdpbmRvdzp7fSxzZXJpZXNCeU1ldHJpYzp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSx7Zm9yZWdyb3VuZDpuLG11dGVkRm9yZWdyb3VuZDpyLGJvcmRlcjppfT1TcCgpLGE9e3JlcXVlc3RzOlt7bWV0cmljOmByZXFgLGxhYmVsOmBSZXF1ZXN0c2AsY29sb3I6YC0tY2hhcnQtcmVxdWVzdHNgfV0sdG9rZW5zOlt7bWV0cmljOmB0b2tpbmAsbGFiZWw6YFRva2VucyBpbmAsY29sb3I6YC0tY2hhcnQtdG9rZW5zLWluYH0se21ldHJpYzpgdG9rb3V0YCxsYWJlbDpgVG9rZW5zIG91dGAsY29sb3I6YC0tY2hhcnQtdG9rZW5zLW91dGB9XSxjb3N0Olt7bWV0cmljOmBjb3N0YCxsYWJlbDpgQ29zdCAoVVNEKWAsY29sb3I6YC0tY2hhcnQtY29zdGB9XX07ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPT09YGNvc3RgP3QvMWU2OnR9bGV0IHM9eigoKT0+e2xldCBlPWFbdC50YWJdLG49bmV3IFNldDtmb3IobGV0IHIgb2YgZSlmb3IobGV0IGUgb2YgdC5zZXJpZXNCeU1ldHJpY1tyLm1ldHJpY10/P1tdKW4uYWRkKGUuYnVja2V0KTtyZXR1cm4gQXJyYXkuZnJvbShuKS5zb3J0KCl9KSxjPXooKCk9PnMudmFsdWUubWFwKGU9PmhlKGUsdC53aW5kb3cpKSk7ZnVuY3Rpb24gbChlKXtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoZSkudHJpbSgpfWxldCB1PXooKCk9PntuLnZhbHVlO2xldCBlPXMudmFsdWU7cmV0dXJue2xhYmVsczpjLnZhbHVlLGRhdGFzZXRzOmFbdC50YWJdLm1hcChuPT57bGV0IHI9bmV3IE1hcCgodC5zZXJpZXNCeU1ldHJpY1tuLm1ldHJpY10/P1tdKS5tYXAoZT0+W2UuYnVja2V0LGUudmFsdWVdKSk7cmV0dXJue2xhYmVsOm4ubGFiZWwsYmFja2dyb3VuZENvbG9yOmwobi5jb2xvciksZGF0YTplLm1hcChlPT5vKG4ubWV0cmljLHIuZ2V0KGUpPz8wKSl9fSl9fSksZD16KCgpPT5hW3QudGFiXS5sZW5ndGg+MSksZj16KCgpPT4oe3Jlc3BvbnNpdmU6ITAsbWFpbnRhaW5Bc3BlY3RSYXRpbzohMSxhbmltYXRpb246ITEsc2NhbGVzOnt4OntzdGFja2VkOmQudmFsdWUsZ3JpZDp7Y29sb3I6aS52YWx1ZSxkaXNwbGF5OiExfSx0aWNrczp7Y29sb3I6ci52YWx1ZX19LHk6e3N0YWNrZWQ6ZC52YWx1ZSxiZWdpbkF0WmVybzohMCxncmlkOntjb2xvcjppLnZhbHVlfSx0aWNrczp7Y29sb3I6ci52YWx1ZSxjYWxsYmFjazplPT50LnRhYj09PWBjb3N0YD9XZShOdW1iZXIoZSkqMWU2KTpBZShOdW1iZXIoZSkpfX19LHBsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTpkLnZhbHVlLGxhYmVsczp7Y29sb3I6bi52YWx1ZX19LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6ZT0+e2xldCBuPWUucGFyc2VkLnk/PzA7cmV0dXJuIHQudGFiPT09YGNvc3RgP2Ake2UuZGF0YXNldC5sYWJlbH06ICQke24udG9GaXhlZCg0KX1gOmAke2UuZGF0YXNldC5sYWJlbH06ICR7QWUobil9ICgke2dlKG4pfSlgfX19fX0pKTtyZXR1cm4oZSx0KT0+KE4oKSxQKGBkaXZgLFBwLFtSKEEoeHApLHtkYXRhOnUudmFsdWUsb3B0aW9uczpmLnZhbHVlfSxudWxsLDgsW2BkYXRhYCxgb3B0aW9uc2BdKV0pKX19KSxJcD17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtM2B9LExwPXtrZXk6MCxjbGFzczpgdGV4dC1zbSB0ZXh0LWRlc3RydWN0aXZlYH0sUnA9e2tleToxLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHpwPXtjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxCcD1GKHtfX25hbWU6YENoYXJ0c1ZpZXdgLHNldHVwKHQpe2xldCBuPXllKCkscj1qcCgpLHtxdWVyeTppLG5vcm1hbGl6ZWQ6YSxoYXNRdWVyeTpvfT1JZSgpLHM9eigoKT0+e2xldCBlPW4udXNhZ2U/LnVzZXJzPz9bXSx0PW4udXNhZ2U/Lmdyb3Vwcz8/W10saT1lLmZpbHRlcihlPT4hby52YWx1ZXx8UGUoZSxhLnZhbHVlKXx8YHVzZXI6JHtlLmlkfWA9PT1yLnNjb3BlKS5tYXAoZT0+KHt2YWx1ZTpgdXNlcjoke2UuaWR9YCxsYWJlbDplLmlkfSkpLHM9dC5maWx0ZXIodD0+IW8udmFsdWV8fFVlKHQsZSxhLnZhbHVlKXx8YGdyb3VwOiR7dC5pZH1gPT09ci5zY29wZSkubWFwKGU9Pih7dmFsdWU6YGdyb3VwOiR7ZS5pZH1gLGxhYmVsOmUuaWR9KSksYz0oci5tb2RlbE9wdGlvbnM/P1tdKS5maWx0ZXIoZT0+IW8udmFsdWV8fGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhhLnZhbHVlKXx8YG1vZGVsOiR7ZS5pZH1gPT09ci5zY29wZSkubWFwKGU9Pih7dmFsdWU6YG1vZGVsOiR7ZS5pZH1gLGxhYmVsOmUuaWR9KSk7cmV0dXJuIHIuc2NvcGUuc3RhcnRzV2l0aChgbW9kZWw6YCkmJiFjLnNvbWUoZT0+ZS52YWx1ZT09PXIuc2NvcGUpJiZjLnB1c2goe3ZhbHVlOnIuc2NvcGUsbGFiZWw6ci5zY29wZS5zbGljZSg2KX0pLFt7dmFsdWU6YHRvdGFsYCxsYWJlbDpgVG90YWwgKGFsbCB0cmFmZmljKWB9LC4uLnMsLi4uaSwuLi5jXX0pLGM9W2Bob3VyYCxgZGF5YCxgbW9udGhgXSxsPVtgY29zdGAsYHJlcWAsYHRva2luYCxgdG9rb3V0YF07ZnVuY3Rpb24gdShlKXtyZXR1cm4gci50YWI9PT1gbW9kZWxzYD9rcFtlXTpPcFtlXX1sZXQgZD16KCgpPT5yLnRhYj09PWBtb2RlbHNgP2ByZXF1ZXN0c2A6ci50YWIpO2Z1bmN0aW9uIGYoZSl7ci5zZXRUYWIoZSl9ZnVuY3Rpb24gcChlKXt0eXBlb2YgZT09YHN0cmluZ2AmJnIuc2V0U2NvcGUoZSl9ZnVuY3Rpb24gbShlKXt0eXBlb2YgZT09YHN0cmluZ2AmJnIuc2V0TW9kZWxNZXRyaWMoZSl9cmV0dXJuIENlKCgpPT57ci5yZWZyZXNoKCksci5zdGFydEF1dG9SZWZyZXNoKCl9KSx4ZSgoKT0+e3Iuc3RvcEF1dG9SZWZyZXNoKCl9KSxqKHMsZT0+e2Uuc29tZShlPT5lLnZhbHVlPT09ci5zY29wZSl8fHIuc2V0U2NvcGUoYHRvdGFsYCl9KSwodCxuKT0+KE4oKSxMKEEoWGUpLG51bGwse2RlZmF1bHQ6TSgoKT0+W1IoQShkZSkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlciBzbTpqdXN0aWZ5LWJldHdlZW5gfSx7ZGVmYXVsdDpNKCgpPT5bUihBKGJlKSxudWxsLHtkZWZhdWx0Ok0oKCk9PlsuLi5uWzJdfHw9W0xlKGBVc2FnZSBjaGFydHNgLC0xKV1dKSxfOjF9KSxGZShgZGl2YCxJcCxbQShyKS50YWI9PT1gbW9kZWxzYD9UZShgYCwhMCk6KE4oKSxMKEhlLHtrZXk6MCxtb2RlbFZhbHVlOkEoaSksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm5bMF18fD1lPT5rZShpKT9pLnZhbHVlPWU6bnVsbCxwbGFjZWhvbGRlcjpgRmlsdGVyIHVzZXJzLCBncm91cHMgb3IgbW9kZWxzYCxjbGFzczpgdy01NmB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSkpLEEocikudGFiPT09YG1vZGVsc2A/KE4oKSxMKEEoWmkpLHtrZXk6MSwibW9kZWwtdmFsdWUiOkEocikubW9kZWxNZXRyaWMsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm19LHtkZWZhdWx0Ok0oKCk9PltSKEEocmEpLHtjbGFzczpgdy00MGAsImFyaWEtbGFiZWwiOmBSYW5rIG1vZGVscyBieWB9LHtkZWZhdWx0Ok0oKCk9PltSKEEoaWEpLHtwbGFjZWhvbGRlcjpgUmFuayBieWB9KV0pLF86MX0pLFIoQShRaSksbnVsbCx7ZGVmYXVsdDpNKCgpPT5bKE4oKSxQKGUsbnVsbCxxZShsLGU9PlIoQShlYSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0Ok0oKCk9PltMZShoKEEoQ3ApW2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSw2NCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSk6KE4oKSxMKEEoWmkpLHtrZXk6MiwibW9kZWwtdmFsdWUiOkEocikuc2NvcGUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnB9LHtkZWZhdWx0Ok0oKCk9PltSKEEocmEpLHtjbGFzczpgdy01NmB9LHtkZWZhdWx0Ok0oKCk9PltSKEEoaWEpLHtwbGFjZWhvbGRlcjpgU2NvcGVgfSldKSxfOjF9KSxSKEEoUWkpLG51bGwse2RlZmF1bHQ6TSgoKT0+WyhOKCEwKSxQKGUsbnVsbCxxZShzLnZhbHVlLGU9PihOKCksTChBKGVhKSx7a2V5OmUudmFsdWUsdmFsdWU6ZS52YWx1ZX0se2RlZmF1bHQ6TSgoKT0+W0xlKGgoZS5sYWJlbCksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSksUihBKGZlKSx7Im1vZGVsLXZhbHVlIjpBKHIpLndpbmRvdywib25VcGRhdGU6bW9kZWxWYWx1ZSI6blsxXXx8PWU9PkEocikuc2V0V2luZG93KGUpfSx7ZGVmYXVsdDpNKCgpPT5bUihBKHdlKSxudWxsLHtkZWZhdWx0Ok0oKCk9PlsoTigpLFAoZSxudWxsLHFlKGMsZT0+UihBKFZlKSx7a2V5OmUsdmFsdWU6ZX0se2RlZmF1bHQ6TSgoKT0+W0xlKGgodShlKSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSksNjQpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKV0pLF86MX0pLFIoQShLZSkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0se2RlZmF1bHQ6TSgoKT0+W1IoQShmZSkseyJtb2RlbC12YWx1ZSI6QShyKS50YWIsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmZ9LHtkZWZhdWx0Ok0oKCk9PltSKEEod2UpLG51bGwse2RlZmF1bHQ6TSgoKT0+W1IoQShWZSkse3ZhbHVlOmByZXF1ZXN0c2B9LHtkZWZhdWx0Ok0oKCk9PlsuLi5uWzNdfHw9W0xlKGBSZXF1ZXN0c2AsLTEpXV0pLF86MX0pLFIoQShWZSkse3ZhbHVlOmB0b2tlbnNgfSx7ZGVmYXVsdDpNKCgpPT5bLi4ubls0XXx8PVtMZShgVG9rZW5zYCwtMSldXSksXzoxfSksUihBKFZlKSx7dmFsdWU6YGNvc3RgfSx7ZGVmYXVsdDpNKCgpPT5bLi4ubls1XXx8PVtMZShgQ29zdGAsLTEpXV0pLF86MX0pLFIoQShWZSkse3ZhbHVlOmBtb2RlbHNgfSx7ZGVmYXVsdDpNKCgpPT5bLi4ubls2XXx8PVtMZShgTW9kZWxzYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pLEEocikuZXJyb3I/KE4oKSxQKGBwYCxMcCxoKEEocikuZXJyb3IpLDEpKTpBKHIpLmxvYWRpbmcmJiFBKHIpLmxvYWRlZD8oTigpLFAoYHBgLFJwLGBMb2FkaW5n4oCmYCkpOlRlKGBgLCEwKSxBKHIpLnRhYj09PWBtb2RlbHNgPyhOKCksUChlLHtrZXk6Mn0sW0ZlKGBwYCx6cCxgIE1vZGVscyB3aXRoIHVzYWdlIGluIHRoZSBzZWxlY3RlZCB3aW5kb3csIHJhbmtlZCBieSBgK2goQShDcClbQShyKS5tb2RlbE1ldHJpY10udG9Mb3dlckNhc2UoKSkrYC4gRWFjaCByb3cgaXMgdGhlIHByb3ZpZGVyIHRoYXQgc2VydmVkIHRoZSB0cmFmZmljLCBzbyBhIG1vZGVsIHJlYWNoZWQgdGhyb3VnaCBtb3JlIHRoYW4gb25lIHByb3ZpZGVyIGFwcGVhcnMgb25jZSBwZXIgcHJvdmlkZXIuIGAsMSksUihOcCx7bWV0cmljOkEocikubW9kZWxNZXRyaWMsbW9kZWxzOkEocikubW9kZWxSYW5raW5nfSxudWxsLDgsW2BtZXRyaWNgLGBtb2RlbHNgXSldLDY0KSk6KE4oKSxMKEZwLHtrZXk6Myx0YWI6ZC52YWx1ZSx3aW5kb3c6QShyKS53aW5kb3csInNlcmllcy1ieS1tZXRyaWMiOkEocikuc2VyaWVzQnlNZXRyaWN9LG51bGwsOCxbYHRhYmAsYHdpbmRvd2AsYHNlcmllcy1ieS1tZXRyaWNgXSkpXSksXzoxfSldKSxfOjF9KSl9fSk7ZXhwb3J0e0JwIGFzIGRlZmF1bHR9Ow==", + "aW1wb3J0eyQgYXMgZSxBIGFzIHQsQiBhcyBuLEMgYXMgcixEIGFzIGksRSBhcyBhLEYgYXMgbyxHIGFzIHMsSCBhcyBjLEkgYXMgbCxKIGFzIHUsSyBhcyBkLEwgYXMgZixNIGFzIHAsTiBhcyBtLE8gYXMgaCxQIGFzIGcsUSBhcyBfLFIgYXMgdixTIGFzIHksVCBhcyBiLFUgYXMgeCxWIGFzIFMsVyBhcyBDLFggYXMgdyxZIGFzIFQsWiBhcyBFLF8gYXMgRCxhIGFzIE8sYiBhcyBlZSxjIGFzIHRlLGQgYXMgbmUsZXQgYXMgcmUsZiBhcyBpZSxnIGFzIGFlLGggYXMgb2UsaSBhcyBzZSxqIGFzIGssayBhcyBjZSxsIGFzIGxlLG0gYXMgdWUsbiBhcyBkZSxudCBhcyBmZSxvIGFzIHBlLHAgYXMgbWUsciBhcyBoZSxydCBhcyBnZSxzIGFzIF9lLHQgYXMgdmUsdHQgYXMgQSx1IGFzIHllLHYgYXMgYmUsdyBhcyB4ZSx4IGFzIFNlLHkgYXMgQ2UseiBhcyB3ZX1mcm9tIi4vaW5kZXgtQVdNb3pBWDEuanMiO2Z1bmN0aW9uIFRlKGUpe3JldHVybiBlKy41fDB9dmFyIEVlPShlLHQsbik9Pk1hdGgubWF4KE1hdGgubWluKGUsbiksdCk7ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIEVlKFRlKGUqMi41NSksMCwyNTUpfWZ1bmN0aW9uIE9lKGUpe3JldHVybiBFZShUZShlKjI1NSksMCwyNTUpfWZ1bmN0aW9uIGtlKGUpe3JldHVybiBFZShUZShlLzIuNTUpLzEwMCwwLDEpfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBFZShUZShlKjEwMCksMCwxMDApfXZhciBqPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksQToxMCxCOjExLEM6MTIsRDoxMyxFOjE0LEY6MTUsYToxMCxiOjExLGM6MTIsZDoxMyxlOjE0LGY6MTV9LGplPVsuLi5gMDEyMzQ1Njc4OUFCQ0RFRmBdLE1lPWU9PmplW2UmMTVdLE5lPWU9PmplWyhlJjI0MCk+PjRdK2plW2UmMTVdLFBlPWU9PihlJjI0MCk+PjQ9PShlJjE1KSxGZT1lPT5QZShlLnIpJiZQZShlLmcpJiZQZShlLmIpJiZQZShlLmEpO2Z1bmN0aW9uIEllKGUpe3ZhciB0PWUubGVuZ3RoLG47cmV0dXJuIGVbMF09PT1gI2AmJih0PT09NHx8dD09PTU/bj17cjoyNTUmaltlWzFdXSoxNyxnOjI1NSZqW2VbMl1dKjE3LGI6MjU1JmpbZVszXV0qMTcsYTp0PT09NT9qW2VbNF1dKjE3OjI1NX06KHQ9PT03fHx0PT09OSkmJihuPXtyOmpbZVsxXV08PDR8altlWzJdXSxnOmpbZVszXV08PDR8altlWzRdXSxiOmpbZVs1XV08PDR8altlWzZdXSxhOnQ9PT05P2pbZVs3XV08PDR8altlWzhdXToyNTV9KSksbn12YXIgTGU9KGUsdCk9PmU8MjU1P3QoZSk6YGA7ZnVuY3Rpb24gUmUoZSl7dmFyIHQ9RmUoZSk/TWU6TmU7cmV0dXJuIGU/YCNgK3QoZS5yKSt0KGUuZykrdChlLmIpK0xlKGUuYSx0KTp2b2lkIDB9dmFyIHplPS9eKGhzbGE/fGh3Ynxoc3YpXChccyooWy0rLmVcZF0rKSg/OmRlZyk/W1xzLF0rKFstKy5lXGRdKyklW1xzLF0rKFstKy5lXGRdKyklKD86W1xzLF0rKFstKy5lXGRdKykoJSk/KT9ccypcKSQvO2Z1bmN0aW9uIEJlKGUsdCxuKXtsZXQgcj10Kk1hdGgubWluKG4sMS1uKSxpPSh0LGk9KHQrZS8zMCklMTIpPT5uLXIqTWF0aC5tYXgoTWF0aC5taW4oaS0zLDktaSwxKSwtMSk7cmV0dXJuW2koMCksaSg4KSxpKDQpXX1mdW5jdGlvbiBWZShlLHQsbil7bGV0IHI9KHIsaT0ocitlLzYwKSU2KT0+bi1uKnQqTWF0aC5tYXgoTWF0aC5taW4oaSw0LWksMSksMCk7cmV0dXJuW3IoNSkscigzKSxyKDEpXX1mdW5jdGlvbiBIZShlLHQsbil7bGV0IHI9QmUoZSwxLC41KSxpO2Zvcih0K24+MSYmKGk9MS8odCtuKSx0Kj1pLG4qPWkpLGk9MDtpPDM7aSsrKXJbaV0qPTEtdC1uLHJbaV0rPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gVWUoZSx0LG4scixpKXtyZXR1cm4gZT09PWk/KHQtbikvcisodDxuPzY6MCk6dD09PWk/KG4tZSkvcisyOihlLXQpL3IrNH1mdW5jdGlvbiBXZShlKXtsZXQgdD1lLnIvMjU1LG49ZS5nLzI1NSxyPWUuYi8yNTUsaT1NYXRoLm1heCh0LG4sciksYT1NYXRoLm1pbih0LG4sciksbz0oaSthKS8yLHMsYyxsO3JldHVybiBpIT09YSYmKGw9aS1hLGM9bz4uNT9sLygyLWktYSk6bC8oaSthKSxzPVVlKHQsbixyLGwsaSkscz1zKjYwKy41KSxbc3wwLGN8fDAsb119ZnVuY3Rpb24gR2UoZSx0LG4scil7cmV0dXJuKEFycmF5LmlzQXJyYXkodCk/ZSh0WzBdLHRbMV0sdFsyXSk6ZSh0LG4scikpLm1hcChPZSl9ZnVuY3Rpb24gS2UoZSx0LG4pe3JldHVybiBHZShCZSxlLHQsbil9ZnVuY3Rpb24gcWUoZSx0LG4pe3JldHVybiBHZShIZSxlLHQsbil9ZnVuY3Rpb24gSmUoZSx0LG4pe3JldHVybiBHZShWZSxlLHQsbil9ZnVuY3Rpb24gWWUoZSl7cmV0dXJuKGUlMzYwKzM2MCklMzYwfWZ1bmN0aW9uIFhlKGUpe2xldCB0PXplLmV4ZWMoZSksbj0yNTUscjtpZighdClyZXR1cm47dFs1XSE9PXImJihuPXRbNl0/RGUoK3RbNV0pOk9lKCt0WzVdKSk7bGV0IGk9WWUoK3RbMl0pLGE9dFszXS8xMDAsbz10WzRdLzEwMDtyZXR1cm4gcj10WzFdPT09YGh3YmA/cWUoaSxhLG8pOnRbMV09PT1gaHN2YD9KZShpLGEsbyk6S2UoaSxhLG8pLHtyOnJbMF0sZzpyWzFdLGI6clsyXSxhOm59fWZ1bmN0aW9uIFplKGUsdCl7dmFyIG49V2UoZSk7blswXT1ZZShuWzBdK3QpLG49S2UobiksZS5yPW5bMF0sZS5nPW5bMV0sZS5iPW5bMl19ZnVuY3Rpb24gUWUoZSl7aWYoIWUpcmV0dXJuO2xldCB0PVdlKGUpLG49dFswXSxyPUFlKHRbMV0pLGk9QWUodFsyXSk7cmV0dXJuIGUuYTwyNTU/YGhzbGEoJHtufSwgJHtyfSUsICR7aX0lLCAke2tlKGUuYSl9KWA6YGhzbCgke259LCAke3J9JSwgJHtpfSUpYH12YXIgJGU9e3g6YGRhcmtgLFo6YGxpZ2h0YCxZOmByZWAsWDpgYmx1YCxXOmBncmAsVjpgbWVkaXVtYCxVOmBzbGF0ZWAsQTpgZWVgLFQ6YG9sYCxTOmBvcmAsQjpgcmFgLEM6YGxhdGVnYCxEOmBpZ2h0c2AsUjpgaW5gLFE6YHR1cnF1b2lzYCxFOmBoaWAsUDpgcm9gLE86YGFsYCxOOmBsZWAsTTpgZGVgLEw6YHllbGxvYCxGOmBlbmAsSzpgY2hgLEc6YGFya3NgLEg6YGVhYCxJOmBpZ2h0Z2AsSjpgd2hgfSxldD17T2ljZVhlOmBmMGY4ZmZgLGFudGlxdWV3RXRlOmBmYWViZDdgLGFxdWE6YGZmZmZgLGFxdWFtYXJSZTpgN2ZmZmQ0YCxhenVZOmBmMGZmZmZgLGJlaWdlOmBmNWY1ZGNgLGJpc3F1ZTpgZmZlNGM0YCxibGFjazpgMGAsYmxhbktlZE9tb25kOmBmZmViY2RgLFhlOmBmZmAsWGV2aVRldDpgOGEyYmUyYCxiUHduOmBhNTJhMmFgLGJ1cmx5d29vZDpgZGViODg3YCxjYU10WGU6YDVmOWVhMGAsS2FydFl1c2U6YDdmZmYwMGAsS29jVGF0ZTpgZDI2OTFlYCxjU086YGZmN2Y1MGAsY1NuZmxvd2VyWGU6YDY0OTVlZGAsY1Nuc2lsazpgZmZmOGRjYCxjcmltc29uOmBkYzE0M2NgLGN5YW46YGZmZmZgLHhYZTpgOGJgLHhjeWFuOmA4YjhiYCx4Z1RNblBkOmBiODg2MGJgLHhXYXk6YGE5YTlhOWAseGdZRjpgNjQwMGAseGdZeTpgYTlhOWE5YCx4a2hha2k6YGJkYjc2YmAseG1hZ0Z0YTpgOGIwMDhiYCx4VGl2ZWdZRjpgNTU2YjJmYCx4U2FuZ2U6YGZmOGMwMGAseFNjRWQ6YDk5MzJjY2AseFlkOmA4YjAwMDBgLHhzT21vbjpgZTk5NjdhYCx4c0hnWUY6YDhmYmM4ZmAseFVYZTpgNDgzZDhiYCx4VVdheTpgMmY0ZjRmYCx4VWdZeTpgMmY0ZjRmYCx4UWU6YGNlZDFgLHh2aVRldDpgOTQwMGQzYCxkQXBwUms6YGZmMTQ5M2AsZEFwc2t5WGU6YGJmZmZgLGRpbVdheTpgNjk2OTY5YCxkaW1nWXk6YDY5Njk2OWAsZG9kZ2VyWGU6YDFlOTBmZmAsZmlZYnJpY2s6YGIyMjIyMmAsZmxTT3dFdGU6YGZmZmFmMGAsZm9Zc3RXQW46YDIyOGIyMmAsZnVLc2lhOmBmZjAwZmZgLGdhUnNiU286YGRjZGNkY2AsZ2hvc3R3RXRlOmBmOGY4ZmZgLGdUZDpgZmZkNzAwYCxnVE1uUGQ6YGRhYTUyMGAsV2F5OmA4MDgwODBgLGdZRjpgODAwMGAsZ1lGTHc6YGFkZmYyZmAsZ1l5OmA4MDgwODBgLGhvbmV5TXc6YGYwZmZmMGAsaG90cFJrOmBmZjY5YjRgLFJkaWFuWWQ6YGNkNWM1Y2AsUmRpZ286YDRiMDA4MmAsaXZTeTpgZmZmZmYwYCxraGFraTpgZjBlNjhjYCxsYXZGTXI6YGU2ZTZmYWAsbGF2Rk1yWHNoOmBmZmYwZjVgLGxhd25nWUY6YDdjZmMwMGAsTm1vbmNFZmZvbjpgZmZmYWNkYCxaWGU6YGFkZDhlNmAsWmNTTzpgZjA4MDgwYCxaY3lhbjpgZTBmZmZmYCxaZ1RNblBkTHc6YGZhZmFkMmAsWldheTpgZDNkM2QzYCxaZ1lGOmA5MGVlOTBgLFpnWXk6YGQzZDNkM2AsWnBSazpgZmZiNmMxYCxac09tb246YGZmYTA3YWAsWnNIZ1lGOmAyMGIyYWFgLFpza3lYZTpgODdjZWZhYCxaVVdheTpgNzc4ODk5YCxaVWdZeTpgNzc4ODk5YCxac3RBbFhlOmBiMGM0ZGVgLFpMdzpgZmZmZmUwYCxsaW1lOmBmZjAwYCxsaW1lZ1lGOmAzMmNkMzJgLGxSRjpgZmFmMGU2YCxtYWdGdGE6YGZmMDBmZmAsbWFQb246YDgwMDAwMGAsVmFxdWFtYXJSZTpgNjZjZGFhYCxWWGU6YGNkYCxWU2NFZDpgYmE1NWQzYCxWcHVycE46YDkzNzBkYmAsVnNIZ1lGOmAzY2IzNzFgLFZVWGU6YDdiNjhlZWAsVnNwclJnZ1lGOmBmYTlhYCxWUWU6YDQ4ZDFjY2AsVnZpVGV0WWQ6YGM3MTU4NWAsbWlkbmlnaHRYZTpgMTkxOTcwYCxtUnRjWWFtOmBmNWZmZmFgLG1pc3R5UHNlOmBmZmU0ZTFgLG1vY2Nhc1I6YGZmZTRiNWAsbmF2YWpvd0V0ZTpgZmZkZWFkYCxuYXZ5OmA4MGAsVGRsYWNlOmBmZGY1ZTZgLFRpdmU6YDgwODAwMGAsVGl2ZWRCYjpgNmI4ZTIzYCxTYW5nZTpgZmZhNTAwYCxTYW5nZVlkOmBmZjQ1MDBgLFNjRWQ6YGRhNzBkNmAscE9lZ1RNblBkOmBlZWU4YWFgLHBPZWdZRjpgOThmYjk4YCxwT2VRZTpgYWZlZWVlYCxwT2V2aVRldFlkOmBkYjcwOTNgLHBhcGF5YXdFcDpgZmZlZmQ1YCxwSEtwdWZmOmBmZmRhYjlgLHBlcnU6YGNkODUzZmAscFJrOmBmZmMwY2JgLHBsdW06YGRkYTBkZGAscG93TXJYZTpgYjBlMGU2YCxwdXJwTjpgODAwMDgwYCxZYmVjY2FwdXJwTjpgNjYzMzk5YCxZZDpgZmYwMDAwYCxQc3licm93bjpgYmM4ZjhmYCxQeU9YZTpgNDE2OWUxYCxzYWRkTmJQd246YDhiNDUxM2Asc09tb246YGZhODA3MmAsc2FuZHliUHduOmBmNGE0NjBgLHNIZ1lGOmAyZThiNTdgLHNIc2hlbGw6YGZmZjVlZWAsc2lGbmE6YGEwNTIyZGAsc2lsdmVyOmBjMGMwYzBgLHNreVhlOmA4N2NlZWJgLFVYZTpgNmE1YWNkYCxVV2F5OmA3MDgwOTBgLFVnWXk6YDcwODA5MGAsc25vdzpgZmZmYWZhYCxzcHJSZ2dZRjpgZmY3ZmAsc3RBbFhlOmA0NjgyYjRgLHRhbjpgZDJiNDhjYCx0ZU86YDgwODBgLHRFc3ROOmBkOGJmZDhgLHRvbWF0bzpgZmY2MzQ3YCxRZTpgNDBlMGQwYCx2aVRldDpgZWU4MmVlYCxKSHQ6YGY1ZGViM2Asd0V0ZTpgZmZmZmZmYCx3RXRlc21va2U6YGY1ZjVmNWAsTHc6YGZmZmYwMGAsTHdnWUY6YDlhY2QzMmB9O2Z1bmN0aW9uIHR0KCl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhldCksbj1PYmplY3Qua2V5cygkZSkscixpLGEsbyxzO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihvPXM9dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspYT1uW2ldLHM9cy5yZXBsYWNlKGEsJGVbYV0pO2E9cGFyc2VJbnQoZXRbb10sMTYpLGVbc109W2E+PjE2JjI1NSxhPj44JjI1NSxhJjI1NV19cmV0dXJuIGV9dmFyIG50O2Z1bmN0aW9uIHJ0KGUpe250fHwobnQ9dHQoKSxudC50cmFuc3BhcmVudD1bMCwwLDAsMF0pO2xldCB0PW50W2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQmJntyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnQubGVuZ3RoPT09ND90WzNdOjI1NX19dmFyIGl0PS9ecmdiYT9cKFxzKihbLSsuXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/KD86W1xzLC9dKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiBhdChlKXtsZXQgdD1pdC5leGVjKGUpLG49MjU1LHIsaSxhO2lmKHQpe2lmKHRbN10hPT1yKXtsZXQgZT0rdFs3XTtuPXRbOF0/RGUoZSk6RWUoZSoyNTUsMCwyNTUpfXJldHVybiByPSt0WzFdLGk9K3RbM10sYT0rdFs1XSxyPTI1NSYodFsyXT9EZShyKTpFZShyLDAsMjU1KSksaT0yNTUmKHRbNF0/RGUoaSk6RWUoaSwwLDI1NSkpLGE9MjU1Jih0WzZdP0RlKGEpOkVlKGEsMCwyNTUpKSx7cixnOmksYjphLGE6bn19fWZ1bmN0aW9uIG90KGUpe3JldHVybiBlJiYoZS5hPDI1NT9gcmdiYSgke2Uucn0sICR7ZS5nfSwgJHtlLmJ9LCAke2tlKGUuYSl9KWA6YHJnYigke2Uucn0sICR7ZS5nfSwgJHtlLmJ9KWApfXZhciBzdD1lPT5lPD0uMDAzMTMwOD9lKjEyLjkyOmUqKigxLzIuNCkqMS4wNTUtLjA1NSxjdD1lPT5lPD0uMDQwNDU/ZS8xMi45MjooKGUrLjA1NSkvMS4wNTUpKioyLjQ7ZnVuY3Rpb24gbHQoZSx0LG4pe2xldCByPWN0KGtlKGUucikpLGk9Y3Qoa2UoZS5nKSksYT1jdChrZShlLmIpKTtyZXR1cm57cjpPZShzdChyK24qKGN0KGtlKHQucikpLXIpKSksZzpPZShzdChpK24qKGN0KGtlKHQuZykpLWkpKSksYjpPZShzdChhK24qKGN0KGtlKHQuYikpLWEpKSksYTplLmErbioodC5hLWUuYSl9fWZ1bmN0aW9uIHV0KGUsdCxuKXtpZihlKXtsZXQgcj1XZShlKTtyW3RdPU1hdGgubWF4KDAsTWF0aC5taW4oclt0XStyW3RdKm4sdD09PTA/MzYwOjEpKSxyPUtlKHIpLGUucj1yWzBdLGUuZz1yWzFdLGUuYj1yWzJdfX1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKHR8fHt9LGUpfWZ1bmN0aW9uIGZ0KGUpe3ZhciB0PXtyOjAsZzowLGI6MCxhOjI1NX07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg+PTMmJih0PXtyOmVbMF0sZzplWzFdLGI6ZVsyXSxhOjI1NX0sZS5sZW5ndGg+MyYmKHQuYT1PZShlWzNdKSkpOih0PWR0KGUse3I6MCxnOjAsYjowLGE6MX0pLHQuYT1PZSh0LmEpKSx0fWZ1bmN0aW9uIHB0KGUpe3JldHVybiBlLmNoYXJBdCgwKT09PWByYD9hdChlKTpYZShlKX12YXIgbXQ9Y2xhc3MgZXtjb25zdHJ1Y3Rvcih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDtsZXQgbj10eXBlb2YgdCxyO249PT1gb2JqZWN0YD9yPWZ0KHQpOm49PT1gc3RyaW5nYCYmKHI9SWUodCl8fHJ0KHQpfHxwdCh0KSksdGhpcy5fcmdiPXIsdGhpcy5fdmFsaWQ9ISFyfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLl92YWxpZH1nZXQgcmdiKCl7dmFyIGU9ZHQodGhpcy5fcmdiKTtyZXR1cm4gZSYmKGUuYT1rZShlLmEpKSxlfXNldCByZ2IoZSl7dGhpcy5fcmdiPWZ0KGUpfXJnYlN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9vdCh0aGlzLl9yZ2IpOnZvaWQgMH1oZXhTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/UmUodGhpcy5fcmdiKTp2b2lkIDB9aHNsU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP1FlKHRoaXMuX3JnYik6dm9pZCAwfW1peChlLHQpe2lmKGUpe2xldCBuPXRoaXMucmdiLHI9ZS5yZ2IsaSxhPXQ9PT1pPy41OnQsbz0yKmEtMSxzPW4uYS1yLmEsYz0oKG8qcz09PS0xP286KG8rcykvKDErbypzKSkrMSkvMjtpPTEtYyxuLnI9MjU1JmMqbi5yK2kqci5yKy41LG4uZz0yNTUmYypuLmcraSpyLmcrLjUsbi5iPTI1NSZjKm4uYitpKnIuYisuNSxuLmE9YSpuLmErKDEtYSkqci5hLHRoaXMucmdiPW59cmV0dXJuIHRoaXN9aW50ZXJwb2xhdGUoZSx0KXtyZXR1cm4gZSYmKHRoaXMuX3JnYj1sdCh0aGlzLl9yZ2IsZS5fcmdiLHQpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyBlKHRoaXMucmdiKX1hbHBoYShlKXtyZXR1cm4gdGhpcy5fcmdiLmE9T2UoZSksdGhpc31jbGVhcmVyKGUpe2xldCB0PXRoaXMuX3JnYjtyZXR1cm4gdC5hKj0xLWUsdGhpc31ncmV5c2NhbGUoKXtsZXQgZT10aGlzLl9yZ2I7cmV0dXJuIGUucj1lLmc9ZS5iPVRlKGUuciouMytlLmcqLjU5K2UuYiouMTEpLHRoaXN9b3BhcXVlcihlKXtsZXQgdD10aGlzLl9yZ2I7cmV0dXJuIHQuYSo9MStlLHRoaXN9bmVnYXRlKCl7bGV0IGU9dGhpcy5fcmdiO3JldHVybiBlLnI9MjU1LWUucixlLmc9MjU1LWUuZyxlLmI9MjU1LWUuYix0aGlzfWxpZ2h0ZW4oZSl7cmV0dXJuIHV0KHRoaXMuX3JnYiwyLGUpLHRoaXN9ZGFya2VuKGUpe3JldHVybiB1dCh0aGlzLl9yZ2IsMiwtZSksdGhpc31zYXR1cmF0ZShlKXtyZXR1cm4gdXQodGhpcy5fcmdiLDEsZSksdGhpc31kZXNhdHVyYXRlKGUpe3JldHVybiB1dCh0aGlzLl9yZ2IsMSwtZSksdGhpc31yb3RhdGUoZSl7cmV0dXJuIFplKHRoaXMuX3JnYixlKSx0aGlzfX07ZnVuY3Rpb24gTSgpe312YXIgaHQ9KCgpPT57bGV0IGU9MDtyZXR1cm4oKT0+ZSsrfSkoKTtmdW5jdGlvbiBOKGUpe3JldHVybiBlPT1udWxsfWZ1bmN0aW9uIFAoZSl7aWYoQXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtsZXQgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7cmV0dXJuIHQuc2xpY2UoMCw3KT09PWBbb2JqZWN0YCYmdC5zbGljZSgtNik9PT1gQXJyYXldYH1mdW5jdGlvbiBGKGUpe3JldHVybiBlIT09bnVsbCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWB9ZnVuY3Rpb24gSShlKXtyZXR1cm4odHlwZW9mIGU9PWBudW1iZXJgfHxlIGluc3RhbmNlb2YgTnVtYmVyKSYmaXNGaW5pdGUoK2UpfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gSShlKT9lOnR9ZnVuY3Rpb24gUihlLHQpe3JldHVybiBlPT09dm9pZCAwP3Q6ZX12YXIgZ3Q9KGUsdCk9PnR5cGVvZiBlPT1gc3RyaW5nYCYmZS5lbmRzV2l0aChgJWApP3BhcnNlRmxvYXQoZSkvMTAwKnQ6K2U7ZnVuY3Rpb24geihlLHQsbil7aWYoZSYmdHlwZW9mIGUuY2FsbD09YGZ1bmN0aW9uYClyZXR1cm4gZS5hcHBseShuLHQpfWZ1bmN0aW9uIEIoZSx0LG4scil7bGV0IGksYSxvO2lmKFAoZSkpe2lmKGE9ZS5sZW5ndGgscilmb3IoaT1hLTE7aT49MDtpLS0pdC5jYWxsKG4sZVtpXSxpKTtlbHNlIGZvcihpPTA7aTxhO2krKyl0LmNhbGwobixlW2ldLGkpfWVsc2UgaWYoRihlKSlmb3Iobz1PYmplY3Qua2V5cyhlKSxhPW8ubGVuZ3RoLGk9MDtpPGE7aSsrKXQuY2FsbChuLGVbb1tpXV0sb1tpXSl9ZnVuY3Rpb24gX3QoZSx0KXtsZXQgbixyLGksYTtpZighZXx8IXR8fGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24paWYoaT1lW25dLGE9dFtuXSxpLmRhdGFzZXRJbmRleCE9PWEuZGF0YXNldEluZGV4fHxpLmluZGV4IT09YS5pbmRleClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2dChlKXtpZihQKGUpKXJldHVybiBlLm1hcCh2dCk7aWYoRihlKSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPU9iamVjdC5rZXlzKGUpLHI9bi5sZW5ndGgsaT0wO2Zvcig7aTxyOysraSl0W25baV1dPXZ0KGVbbltpXV0pO3JldHVybiB0fXJldHVybiBlfWZ1bmN0aW9uIHl0KGUpe3JldHVybltgX19wcm90b19fYCxgcHJvdG90eXBlYCxgY29uc3RydWN0b3JgXS5pbmRleE9mKGUpPT09LTF9ZnVuY3Rpb24gYnQoZSx0LG4scil7aWYoIXl0KGUpKXJldHVybjtsZXQgaT10W2VdLGE9bltlXTtGKGkpJiZGKGEpP3h0KGksYSxyKTp0W2VdPXZ0KGEpfWZ1bmN0aW9uIHh0KGUsdCxuKXtsZXQgcj1QKHQpP3Q6W3RdLGk9ci5sZW5ndGg7aWYoIUYoZSkpcmV0dXJuIGU7bnx8PXt9O2xldCBhPW4ubWVyZ2VyfHxidCxvO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2lmKG89clt0XSwhRihvKSljb250aW51ZTtsZXQgaT1PYmplY3Qua2V5cyhvKTtmb3IobGV0IHQ9MCxyPWkubGVuZ3RoO3Q8cjsrK3QpYShpW3RdLGUsbyxuKX1yZXR1cm4gZX1mdW5jdGlvbiBTdChlLHQpe3JldHVybiB4dChlLHQse21lcmdlcjpDdH0pfWZ1bmN0aW9uIEN0KGUsdCxuKXtpZigheXQoZSkpcmV0dXJuO2xldCByPXRbZV0saT1uW2VdO0YocikmJkYoaSk/U3QocixpKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKXx8KHRbZV09dnQoaSkpfXZhciB3dD17IiI6ZT0+ZSx4OmU9PmUueCx5OmU9PmUueX07ZnVuY3Rpb24gVHQoZSl7bGV0IHQ9ZS5zcGxpdChgLmApLG49W10scj1gYDtmb3IobGV0IGUgb2YgdClyKz1lLHIuZW5kc1dpdGgoYFxcYCk/cj1yLnNsaWNlKDAsLTEpK2AuYDoobi5wdXNoKHIpLHI9YGApO3JldHVybiBufWZ1bmN0aW9uIEV0KGUpe2xldCB0PVR0KGUpO3JldHVybiBlPT57Zm9yKGxldCBuIG9mIHQpe2lmKG49PT1gYClicmVhaztlJiY9ZVtuXX1yZXR1cm4gZX19ZnVuY3Rpb24gRHQoZSx0KXtyZXR1cm4od3RbdF18fCh3dFt0XT1FdCh0KSkpKGUpfWZ1bmN0aW9uIE90KGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9dmFyIGt0PWU9PmUhPT12b2lkIDAsQXQ9ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAsanQ9KGUsdCk9PntpZihlLnNpemUhPT10LnNpemUpcmV0dXJuITE7Zm9yKGxldCBuIG9mIGUpaWYoIXQuaGFzKG4pKXJldHVybiExO3JldHVybiEwfTtmdW5jdGlvbiBNdChlKXtyZXR1cm4gZS50eXBlPT09YG1vdXNldXBgfHxlLnR5cGU9PT1gY2xpY2tgfHxlLnR5cGU9PT1gY29udGV4dG1lbnVgfXZhciBWPU1hdGguUEksSD0yKlY7SCtWO3ZhciBOdD0xLzAsUHQ9Vi8xODAsVT1WLzIsRnQ9Vi80LEl0PVYqMi8zLEx0PU1hdGgubG9nMTAsUnQ9TWF0aC5zaWduO2Z1bmN0aW9uIHp0KGUsdCxuKXtyZXR1cm4gTWF0aC5hYnMoZS10KTxufWZ1bmN0aW9uIEJ0KGUpe2xldCB0PU1hdGgucm91bmQoZSk7ZT16dChlLHQsZS8xZTMpP3Q6ZTtsZXQgbj0xMCoqTWF0aC5mbG9vcihMdChlKSkscj1lL247cmV0dXJuKHI8PTE/MTpyPD0yPzI6cjw9NT81OjEwKSpufWZ1bmN0aW9uIFZ0KGUpe2xldCB0PVtdLG49TWF0aC5zcXJ0KGUpLHI7Zm9yKHI9MTtyPG47cisrKWUlcj09PTAmJih0LnB1c2gociksdC5wdXNoKGUvcikpO3JldHVybiBuPT09KG58MCkmJnQucHVzaChuKSx0LnNvcnQoKGUsdCk9PmUtdCkucG9wKCksdH1mdW5jdGlvbiBIdChlKXtyZXR1cm4gdHlwZW9mIGU9PWBzeW1ib2xgfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIShTeW1ib2wudG9QcmltaXRpdmUgaW4gZXx8YHRvU3RyaW5nYGluIGV8fGB2YWx1ZU9mYGluIGUpfWZ1bmN0aW9uIFV0KGUpe3JldHVybiFIdChlKSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBXdChlLHQpe2xldCBuPU1hdGgucm91bmQoZSk7cmV0dXJuIG4tdDw9ZSYmbit0Pj1lfWZ1bmN0aW9uIEd0KGUsdCxuKXtsZXQgcixpLGE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYT1lW3JdW25dLGlzTmFOKGEpfHwodC5taW49TWF0aC5taW4odC5taW4sYSksdC5tYXg9TWF0aC5tYXgodC5tYXgsYSkpfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBWLzE4MCplfWZ1bmN0aW9uIHF0KGUpe3JldHVybiAxODAvViplfWZ1bmN0aW9uIEp0KGUpe2lmKCFJKGUpKXJldHVybjtsZXQgdD0xLG49MDtmb3IoO01hdGgucm91bmQoZSp0KS90IT09ZTspdCo9MTAsbisrO3JldHVybiBufWZ1bmN0aW9uIFl0KGUsdCl7bGV0IG49dC54LWUueCxyPXQueS1lLnksaT1NYXRoLnNxcnQobipuK3IqciksYT1NYXRoLmF0YW4yKHIsbik7cmV0dXJuIGE8LS41KlYmJihhKz1IKSx7YW5nbGU6YSxkaXN0YW5jZTppfX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBNYXRoLnNxcnQoKHQueC1lLngpKioyKyh0LnktZS55KSoqMil9ZnVuY3Rpb24gVyhlKXtyZXR1cm4oZSVIK0gpJUh9ZnVuY3Rpb24gWnQoZSx0LG4scil7bGV0IGk9VyhlKSxhPVcodCksbz1XKG4pLHM9VyhhLWkpLGM9VyhvLWkpLGw9VyhpLWEpLHU9VyhpLW8pO3JldHVybiBpPT09YXx8aT09PW98fHImJmE9PT1vfHxzPmMmJmw8dX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihuLGUpKX1mdW5jdGlvbiBRdChlKXtyZXR1cm4gRyhlLC0zMjc2OCwzMjc2Nyl9ZnVuY3Rpb24gJHQoZSx0LG4scj0xZS02KXtyZXR1cm4gZT49TWF0aC5taW4odCxuKS1yJiZlPD1NYXRoLm1heCh0LG4pK3J9ZnVuY3Rpb24gZW4oZSx0LG4pe258fD0obj0+ZVtuXTx0KTtsZXQgcj1lLmxlbmd0aC0xLGk9MCxhO2Zvcig7ci1pPjE7KWE9aStyPj4xLG4oYSk/aT1hOnI9YTtyZXR1cm57bG86aSxoaTpyfX12YXIgdG49KGUsdCxuLHIpPT5lbihlLG4scj9yPT57bGV0IGk9ZVtyXVt0XTtyZXR1cm4gaTxufHxpPT09biYmZVtyKzFdW3RdPT09bn06cj0+ZVtyXVt0XTxuKSxubj0oZSx0LG4pPT5lbihlLG4scj0+ZVtyXVt0XT49bik7ZnVuY3Rpb24gcm4oZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aDtmb3IoO3I8aSYmZVtyXTx0OylyKys7Zm9yKDtpPnImJmVbaS0xXT5uOylpLS07cmV0dXJuIHI+MHx8aTxlLmxlbmd0aD9lLnNsaWNlKHIsaSk6ZX12YXIgYW49W2BwdXNoYCxgcG9wYCxgc2hpZnRgLGBzcGxpY2VgLGB1bnNoaWZ0YF07ZnVuY3Rpb24gb24oZSx0KXtpZihlLl9jaGFydGpzKXtlLl9jaGFydGpzLmxpc3RlbmVycy5wdXNoKHQpO3JldHVybn1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2NoYXJ0anMiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTp7bGlzdGVuZXJzOlt0XX19KSxhbi5mb3JFYWNoKHQ9PntsZXQgbj1gX29uRGF0YWArT3QodCkscj1lW3RdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlKC4uLnQpe2xldCBpPXIuYXBwbHkodGhpcyx0KTtyZXR1cm4gZS5fY2hhcnRqcy5saXN0ZW5lcnMuZm9yRWFjaChlPT57dHlwZW9mIGVbbl09PWBmdW5jdGlvbmAmJmVbbl0oLi4udCl9KSxpfX0pfSl9ZnVuY3Rpb24gc24oZSx0KXtsZXQgbj1lLl9jaGFydGpzO2lmKCFuKXJldHVybjtsZXQgcj1uLmxpc3RlbmVycyxpPXIuaW5kZXhPZih0KTtpIT09LTEmJnIuc3BsaWNlKGksMSksIShyLmxlbmd0aD4wKSYmKGFuLmZvckVhY2godD0+e2RlbGV0ZSBlW3RdfSksZGVsZXRlIGUuX2NoYXJ0anMpfWZ1bmN0aW9uIGNuKGUpe2xldCB0PW5ldyBTZXQoZSk7cmV0dXJuIHQuc2l6ZT09PWUubGVuZ3RoP2U6QXJyYXkuZnJvbSh0KX12YXIgbG49ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz5gdWA/ZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX06d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZX0oKTtmdW5jdGlvbiB1bihlLHQpe2xldCBuPVtdLHI9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe249aSxyfHwocj0hMCxsbi5jYWxsKHdpbmRvdywoKT0+e3I9ITEsZS5hcHBseSh0LG4pfSkpfX1mdW5jdGlvbiBkbihlLHQpe2xldCBuO3JldHVybiBmdW5jdGlvbiguLi5yKXtyZXR1cm4gdD8oY2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChlLHQscikpOmUuYXBwbHkodGhpcyxyKSx0fX12YXIgZm49ZT0+ZT09PWBzdGFydGA/YGxlZnRgOmU9PT1gZW5kYD9gcmlnaHRgOmBjZW50ZXJgLEs9KGUsdCxuKT0+ZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjoodCtuKS8yLHBuPShlLHQsbixyKT0+ZT09PShyP2BsZWZ0YDpgcmlnaHRgKT9uOmU9PT1gY2VudGVyYD8odCtuKS8yOnQsbW49ZT0+ZT09PTB8fGU9PT0xLGhuPShlLHQsbik9Pi0oMioqKDEwKi0tZSkqTWF0aC5zaW4oKGUtdCkqSC9uKSksZ249KGUsdCxuKT0+MioqKC0xMCplKSpNYXRoLnNpbigoZS10KSpIL24pKzEsX249e2xpbmVhcjplPT5lLGVhc2VJblF1YWQ6ZT0+ZSplLGVhc2VPdXRRdWFkOmU9Pi1lKihlLTIpLGVhc2VJbk91dFF1YWQ6ZT0+KGUvPS41KTwxPy41KmUqZTotLjUqKC0tZSooZS0yKS0xKSxlYXNlSW5DdWJpYzplPT5lKmUqZSxlYXNlT3V0Q3ViaWM6ZT0+LS1lKmUqZSsxLGVhc2VJbk91dEN1YmljOmU9PihlLz0uNSk8MT8uNSplKmUqZTouNSooKGUtPTIpKmUqZSsyKSxlYXNlSW5RdWFydDplPT5lKmUqZSplLGVhc2VPdXRRdWFydDplPT4tKC0tZSplKmUqZS0xKSxlYXNlSW5PdXRRdWFydDplPT4oZS89LjUpPDE/LjUqZSplKmUqZTotLjUqKChlLT0yKSplKmUqZS0yKSxlYXNlSW5RdWludDplPT5lKmUqZSplKmUsZWFzZU91dFF1aW50OmU9Pi0tZSplKmUqZSplKzEsZWFzZUluT3V0UXVpbnQ6ZT0+KGUvPS41KTwxPy41KmUqZSplKmUqZTouNSooKGUtPTIpKmUqZSplKmUrMiksZWFzZUluU2luZTplPT4tTWF0aC5jb3MoZSpVKSsxLGVhc2VPdXRTaW5lOmU9Pk1hdGguc2luKGUqVSksZWFzZUluT3V0U2luZTplPT4tLjUqKE1hdGguY29zKFYqZSktMSksZWFzZUluRXhwbzplPT5lPT09MD8wOjIqKigxMCooZS0xKSksZWFzZU91dEV4cG86ZT0+ZT09PTE/MTotKDIqKigtMTAqZSkpKzEsZWFzZUluT3V0RXhwbzplPT5tbihlKT9lOmU8LjU/LjUqMioqKDEwKihlKjItMSkpOi41KigtKDIqKigtMTAqKGUqMi0xKSkpKzIpLGVhc2VJbkNpcmM6ZT0+ZT49MT9lOi0oTWF0aC5zcXJ0KDEtZSplKS0xKSxlYXNlT3V0Q2lyYzplPT5NYXRoLnNxcnQoMS0gLS1lKmUpLGVhc2VJbk91dENpcmM6ZT0+KGUvPS41KTwxPy0uNSooTWF0aC5zcXJ0KDEtZSplKS0xKTouNSooTWF0aC5zcXJ0KDEtKGUtPTIpKmUpKzEpLGVhc2VJbkVsYXN0aWM6ZT0+bW4oZSk/ZTpobihlLC4wNzUsLjMpLGVhc2VPdXRFbGFzdGljOmU9Pm1uKGUpP2U6Z24oZSwuMDc1LC4zKSxlYXNlSW5PdXRFbGFzdGljKGUpe2xldCB0PS4xMTI1LG49LjQ1O3JldHVybiBtbihlKT9lOmU8LjU/LjUqaG4oZSoyLHQsbik6LjUrLjUqZ24oZSoyLTEsdCxuKX0sZWFzZUluQmFjayhlKXtyZXR1cm4gZSplKigyLjcwMTU4KmUtMS43MDE1OCl9LGVhc2VPdXRCYWNrKGUpe3JldHVybi0tZSplKigyLjcwMTU4KmUrMS43MDE1OCkrMX0sZWFzZUluT3V0QmFjayhlKXtsZXQgdD0xLjcwMTU4O3JldHVybihlLz0uNSk8MT8uNSooZSplKigoKHQqPTEuNTI1KSsxKSplLXQpKTouNSooKGUtPTIpKmUqKCgodCo9MS41MjUpKzEpKmUrdCkrMil9LGVhc2VJbkJvdW5jZTplPT4xLV9uLmVhc2VPdXRCb3VuY2UoMS1lKSxlYXNlT3V0Qm91bmNlKGUpe2xldCB0PTcuNTYyNSxuPTIuNzU7cmV0dXJuIGU8MS9uP3QqZSplOmU8Mi9uP3QqKGUtPTEuNS9uKSplKy43NTplPDIuNS9uP3QqKGUtPTIuMjUvbikqZSsuOTM3NTp0KihlLT0yLjYyNS9uKSplKy45ODQzNzV9LGVhc2VJbk91dEJvdW5jZTplPT5lPC41P19uLmVhc2VJbkJvdW5jZShlKjIpKi41Ol9uLmVhc2VPdXRCb3VuY2UoZSoyLTEpKi41Ky41fTtmdW5jdGlvbiB2bihlKXtpZihlJiZ0eXBlb2YgZT09YG9iamVjdGApe2xldCB0PWUudG9TdHJpbmcoKTtyZXR1cm4gdD09PWBbb2JqZWN0IENhbnZhc1BhdHRlcm5dYHx8dD09PWBbb2JqZWN0IENhbnZhc0dyYWRpZW50XWB9cmV0dXJuITF9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIHZuKGUpP2U6bmV3IG10KGUpfWZ1bmN0aW9uIGJuKGUpe3JldHVybiB2bihlKT9lOm5ldyBtdChlKS5zYXR1cmF0ZSguNSkuZGFya2VuKC4xKS5oZXhTdHJpbmcoKX12YXIgeG49W2B4YCxgeWAsYGJvcmRlcldpZHRoYCxgcmFkaXVzYCxgdGVuc2lvbmBdLFNuPVtgY29sb3JgLGBib3JkZXJDb2xvcmAsYGJhY2tncm91bmRDb2xvcmBdO2Z1bmN0aW9uIENuKGUpe2Uuc2V0KGBhbmltYXRpb25gLHtkZWxheTp2b2lkIDAsZHVyYXRpb246MWUzLGVhc2luZzpgZWFzZU91dFF1YXJ0YCxmbjp2b2lkIDAsZnJvbTp2b2lkIDAsbG9vcDp2b2lkIDAsdG86dm9pZCAwLHR5cGU6dm9pZCAwfSksZS5kZXNjcmliZShgYW5pbWF0aW9uYCx7X2ZhbGxiYWNrOiExLF9pbmRleGFibGU6ITEsX3NjcmlwdGFibGU6ZT0+ZSE9PWBvblByb2dyZXNzYCYmZSE9PWBvbkNvbXBsZXRlYCYmZSE9PWBmbmB9KSxlLnNldChgYW5pbWF0aW9uc2Ase2NvbG9yczp7dHlwZTpgY29sb3JgLHByb3BlcnRpZXM6U259LG51bWJlcnM6e3R5cGU6YG51bWJlcmAscHJvcGVydGllczp4bn19KSxlLmRlc2NyaWJlKGBhbmltYXRpb25zYCx7X2ZhbGxiYWNrOmBhbmltYXRpb25gfSksZS5zZXQoYHRyYW5zaXRpb25zYCx7YWN0aXZlOnthbmltYXRpb246e2R1cmF0aW9uOjQwMH19LHJlc2l6ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjowfX0sc2hvdzp7YW5pbWF0aW9uczp7Y29sb3JzOntmcm9tOmB0cmFuc3BhcmVudGB9LHZpc2libGU6e3R5cGU6YGJvb2xlYW5gLGR1cmF0aW9uOjB9fX0saGlkZTp7YW5pbWF0aW9uczp7Y29sb3JzOnt0bzpgdHJhbnNwYXJlbnRgfSx2aXNpYmxlOnt0eXBlOmBib29sZWFuYCxlYXNpbmc6YGxpbmVhcmAsZm46ZT0+ZXwwfX19fSl9ZnVuY3Rpb24gd24oZSl7ZS5zZXQoYGxheW91dGAse2F1dG9QYWRkaW5nOiEwLHBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfX0pfXZhciBUbj1uZXcgTWFwO2Z1bmN0aW9uIEVuKGUsdCl7dHx8PXt9O2xldCBuPWUrSlNPTi5zdHJpbmdpZnkodCkscj1Ubi5nZXQobik7cmV0dXJuIHJ8fChyPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHQpLFRuLnNldChuLHIpKSxyfWZ1bmN0aW9uIERuKGUsdCxuKXtyZXR1cm4gRW4odCxuKS5mb3JtYXQoZSl9dmFyIE9uPXt2YWx1ZXMoZSl7cmV0dXJuIFAoZSk/ZTpgYCtlfSxudW1lcmljKGUsdCxuKXtpZihlPT09MClyZXR1cm5gMGA7bGV0IHI9dGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSxpLGE9ZTtpZihuLmxlbmd0aD4xKXtsZXQgdD1NYXRoLm1heChNYXRoLmFicyhuWzBdLnZhbHVlKSxNYXRoLmFicyhuW24ubGVuZ3RoLTFdLnZhbHVlKSk7KHQ8MWUtNHx8dD4weDM4ZDdlYTRjNjgwMDApJiYoaT1gc2NpZW50aWZpY2ApLGE9a24oZSxuKX1sZXQgbz1MdChNYXRoLmFicyhhKSkscz1pc05hTihvKT8xOk1hdGgubWF4KE1hdGgubWluKC0xKk1hdGguZmxvb3IobyksMjApLDApLGM9e25vdGF0aW9uOmksbWluaW11bUZyYWN0aW9uRGlnaXRzOnMsbWF4aW11bUZyYWN0aW9uRGlnaXRzOnN9O3JldHVybiBPYmplY3QuYXNzaWduKGMsdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCksRG4oZSxyLGMpfSxsb2dhcml0aG1pYyhlLHQsbil7aWYoZT09PTApcmV0dXJuYDBgO2xldCByPW5bdF0uc2lnbmlmaWNhbmR8fGUvMTAqKk1hdGguZmxvb3IoTHQoZSkpO3JldHVyblsxLDIsMyw1LDEwLDE1XS5pbmNsdWRlcyhyKXx8dD4uOCpuLmxlbmd0aD9Pbi5udW1lcmljLmNhbGwodGhpcyxlLHQsbik6YGB9fTtmdW5jdGlvbiBrbihlLHQpe2xldCBuPXQubGVuZ3RoPjM/dFsyXS52YWx1ZS10WzFdLnZhbHVlOnRbMV0udmFsdWUtdFswXS52YWx1ZTtyZXR1cm4gTWF0aC5hYnMobik+PTEmJmUhPT1NYXRoLmZsb29yKGUpJiYobj1lLU1hdGguZmxvb3IoZSkpLG59dmFyIEFuPXtmb3JtYXR0ZXJzOk9ufTtmdW5jdGlvbiBqbihlKXtlLnNldChgc2NhbGVgLHtkaXNwbGF5OiEwLG9mZnNldDohMSxyZXZlcnNlOiExLGJlZ2luQXRaZXJvOiExLGJvdW5kczpgdGlja3NgLGNsaXA6ITAsZ3JhY2U6MCxncmlkOntkaXNwbGF5OiEwLGxpbmVXaWR0aDoxLGRyYXdPbkNoYXJ0QXJlYTohMCxkcmF3VGlja3M6ITAsdGlja0xlbmd0aDo4LHRpY2tXaWR0aDooZSx0KT0+dC5saW5lV2lkdGgsdGlja0NvbG9yOihlLHQpPT50LmNvbG9yLG9mZnNldDohMX0sYm9yZGVyOntkaXNwbGF5OiEwLGRhc2g6W10sZGFzaE9mZnNldDowLHdpZHRoOjF9LHRpdGxlOntkaXNwbGF5OiExLHRleHQ6YGAscGFkZGluZzp7dG9wOjQsYm90dG9tOjR9fSx0aWNrczp7bWluUm90YXRpb246MCxtYXhSb3RhdGlvbjo1MCxtaXJyb3I6ITEsdGV4dFN0cm9rZVdpZHRoOjAsdGV4dFN0cm9rZUNvbG9yOmBgLHBhZGRpbmc6MyxkaXNwbGF5OiEwLGF1dG9Ta2lwOiEwLGF1dG9Ta2lwUGFkZGluZzozLGxhYmVsT2Zmc2V0OjAsY2FsbGJhY2s6QW4uZm9ybWF0dGVycy52YWx1ZXMsbWlub3I6e30sbWFqb3I6e30sYWxpZ246YGNlbnRlcmAsY3Jvc3NBbGlnbjpgbmVhcmAsc2hvd0xhYmVsQmFja2Ryb3A6ITEsYmFja2Ryb3BDb2xvcjpgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KWAsYmFja2Ryb3BQYWRkaW5nOjJ9fSksZS5yb3V0ZShgc2NhbGUudGlja3NgLGBjb2xvcmAsYGAsYGNvbG9yYCksZS5yb3V0ZShgc2NhbGUuZ3JpZGAsYGNvbG9yYCxgYCxgYm9yZGVyQ29sb3JgKSxlLnJvdXRlKGBzY2FsZS5ib3JkZXJgLGBjb2xvcmAsYGAsYGJvcmRlckNvbG9yYCksZS5yb3V0ZShgc2NhbGUudGl0bGVgLGBjb2xvcmAsYGAsYGNvbG9yYCksZS5kZXNjcmliZShgc2NhbGVgLHtfZmFsbGJhY2s6ITEsX3NjcmlwdGFibGU6ZT0+IWUuc3RhcnRzV2l0aChgYmVmb3JlYCkmJiFlLnN0YXJ0c1dpdGgoYGFmdGVyYCkmJmUhPT1gY2FsbGJhY2tgJiZlIT09YHBhcnNlcmAsX2luZGV4YWJsZTplPT5lIT09YGJvcmRlckRhc2hgJiZlIT09YHRpY2tCb3JkZXJEYXNoYCYmZSE9PWBkYXNoYH0pLGUuZGVzY3JpYmUoYHNjYWxlc2Ase19mYWxsYmFjazpgc2NhbGVgfSksZS5kZXNjcmliZShgc2NhbGUudGlja3NgLHtfc2NyaXB0YWJsZTplPT5lIT09YGJhY2tkcm9wUGFkZGluZ2AmJmUhPT1gY2FsbGJhY2tgLF9pbmRleGFibGU6ZT0+ZSE9PWBiYWNrZHJvcFBhZGRpbmdgfSl9dmFyIE1uPU9iamVjdC5jcmVhdGUobnVsbCksTm49T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBQbihlLHQpe2lmKCF0KXJldHVybiBlO2xldCBuPXQuc3BsaXQoYC5gKTtmb3IobGV0IHQ9MCxyPW4ubGVuZ3RoO3Q8cjsrK3Qpe2xldCByPW5bdF07ZT1lW3JdfHwoZVtyXT1PYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBGbihlLHQsbil7cmV0dXJuIHR5cGVvZiB0PT1gc3RyaW5nYD94dChQbihlLHQpLG4pOnh0KFBuKGUsYGApLHQpfXZhciBxPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYW5pbWF0aW9uPXZvaWQgMCx0aGlzLmJhY2tncm91bmRDb2xvcj1gcmdiYSgwLDAsMCwwLjEpYCx0aGlzLmJvcmRlckNvbG9yPWByZ2JhKDAsMCwwLDAuMSlgLHRoaXMuY29sb3I9YCM2NjZgLHRoaXMuZGF0YXNldHM9e30sdGhpcy5kZXZpY2VQaXhlbFJhdGlvPWU9PmUuY2hhcnQucGxhdGZvcm0uZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLHRoaXMuZWxlbWVudHM9e30sdGhpcy5ldmVudHM9W2Btb3VzZW1vdmVgLGBtb3VzZW91dGAsYGNsaWNrYCxgdG91Y2hzdGFydGAsYHRvdWNobW92ZWBdLHRoaXMuZm9udD17ZmFtaWx5OmAnSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZmAsc2l6ZToxMixzdHlsZTpgbm9ybWFsYCxsaW5lSGVpZ2h0OjEuMix3ZWlnaHQ6bnVsbH0sdGhpcy5ob3Zlcj17fSx0aGlzLmhvdmVyQmFja2dyb3VuZENvbG9yPShlLHQpPT5ibih0LmJhY2tncm91bmRDb2xvciksdGhpcy5ob3ZlckJvcmRlckNvbG9yPShlLHQpPT5ibih0LmJvcmRlckNvbG9yKSx0aGlzLmhvdmVyQ29sb3I9KGUsdCk9PmJuKHQuY29sb3IpLHRoaXMuaW5kZXhBeGlzPWB4YCx0aGlzLmludGVyYWN0aW9uPXttb2RlOmBuZWFyZXN0YCxpbnRlcnNlY3Q6ITAsaW5jbHVkZUludmlzaWJsZTohMX0sdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvPSEwLHRoaXMub25Ib3Zlcj1udWxsLHRoaXMub25DbGljaz1udWxsLHRoaXMucGFyc2luZz0hMCx0aGlzLnBsdWdpbnM9e30sdGhpcy5yZXNwb25zaXZlPSEwLHRoaXMuc2NhbGU9dm9pZCAwLHRoaXMuc2NhbGVzPXt9LHRoaXMuc2hvd0xpbmU9ITAsdGhpcy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcD0hMCx0aGlzLmRlc2NyaWJlKGUpLHRoaXMuYXBwbHkodCl9c2V0KGUsdCl7cmV0dXJuIEZuKHRoaXMsZSx0KX1nZXQoZSl7cmV0dXJuIFBuKHRoaXMsZSl9ZGVzY3JpYmUoZSx0KXtyZXR1cm4gRm4oTm4sZSx0KX1vdmVycmlkZShlLHQpe3JldHVybiBGbihNbixlLHQpfXJvdXRlKGUsdCxuLHIpe2xldCBpPVBuKHRoaXMsZSksYT1Qbih0aGlzLG4pLG89YF9gK3Q7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSx7W29dOnt2YWx1ZTppW3RdLHdyaXRhYmxlOiEwfSxbdF06e2VudW1lcmFibGU6ITAsZ2V0KCl7bGV0IGU9dGhpc1tvXSx0PWFbcl07cmV0dXJuIEYoZSk/T2JqZWN0LmFzc2lnbih7fSx0LGUpOlIoZSx0KX0sc2V0KGUpe3RoaXNbb109ZX19fSl9YXBwbHkoZSl7ZS5mb3JFYWNoKGU9PmUodGhpcykpfX0oe19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksX2luZGV4YWJsZTplPT5lIT09YGV2ZW50c2AsaG92ZXI6e19mYWxsYmFjazpgaW50ZXJhY3Rpb25gfSxpbnRlcmFjdGlvbjp7X3NjcmlwdGFibGU6ITEsX2luZGV4YWJsZTohMX19LFtDbix3bixqbl0pO2Z1bmN0aW9uIEluKGUpe3JldHVybiFlfHxOKGUuc2l6ZSl8fE4oZS5mYW1pbHkpP251bGw6KGUuc3R5bGU/ZS5zdHlsZStgIGA6YGApKyhlLndlaWdodD9lLndlaWdodCtgIGA6YGApK2Uuc2l6ZStgcHggYCtlLmZhbWlseX1mdW5jdGlvbiBMbihlLHQsbixyLGkpe2xldCBhPXRbaV07cmV0dXJuIGF8fChhPXRbaV09ZS5tZWFzdXJlVGV4dChpKS53aWR0aCxuLnB1c2goaSkpLGE+ciYmKHI9YSkscn1mdW5jdGlvbiBSbihlLHQsbixyKXtyfHw9e307bGV0IGk9ci5kYXRhPXIuZGF0YXx8e30sYT1yLmdhcmJhZ2VDb2xsZWN0PXIuZ2FyYmFnZUNvbGxlY3R8fFtdO3IuZm9udCE9PXQmJihpPXIuZGF0YT17fSxhPXIuZ2FyYmFnZUNvbGxlY3Q9W10sci5mb250PXQpLGUuc2F2ZSgpLGUuZm9udD10O2xldCBvPTAscz1uLmxlbmd0aCxjLGwsdSxkLGY7Zm9yKGM9MDtjPHM7YysrKWlmKGQ9bltjXSxkIT1udWxsJiYhUChkKSlvPUxuKGUsaSxhLG8sZCk7ZWxzZSBpZihQKGQpKWZvcihsPTAsdT1kLmxlbmd0aDtsPHU7bCsrKWY9ZFtsXSxmIT1udWxsJiYhUChmKSYmKG89TG4oZSxpLGEsbyxmKSk7ZS5yZXN0b3JlKCk7bGV0IHA9YS5sZW5ndGgvMjtpZihwPm4ubGVuZ3RoKXtmb3IoYz0wO2M8cDtjKyspZGVsZXRlIGlbYVtjXV07YS5zcGxpY2UoMCxwKX1yZXR1cm4gb31mdW5jdGlvbiB6bihlLHQsbil7bGV0IHI9ZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyxpPW49PT0wPzA6TWF0aC5tYXgobi8yLC41KTtyZXR1cm4gTWF0aC5yb3VuZCgodC1pKSpyKS9yK2l9ZnVuY3Rpb24gQm4oZSx0KXshdCYmIWV8fCh0fHw9ZS5nZXRDb250ZXh0KGAyZGApLHQuc2F2ZSgpLHQucmVzZXRUcmFuc2Zvcm0oKSx0LmNsZWFyUmVjdCgwLDAsZS53aWR0aCxlLmhlaWdodCksdC5yZXN0b3JlKCkpfWZ1bmN0aW9uIFZuKGUsdCxuLHIpe0huKGUsdCxuLHIsbnVsbCl9ZnVuY3Rpb24gSG4oZSx0LG4scixpKXtsZXQgYSxvLHMsYyxsLHUsZCxmLHA9dC5wb2ludFN0eWxlLG09dC5yb3RhdGlvbixoPXQucmFkaXVzLGc9KG18fDApKlB0O2lmKHAmJnR5cGVvZiBwPT1gb2JqZWN0YCYmKGE9cC50b1N0cmluZygpLGE9PT1gW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XWB8fGE9PT1gW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF1gKSl7ZS5zYXZlKCksZS50cmFuc2xhdGUobixyKSxlLnJvdGF0ZShnKSxlLmRyYXdJbWFnZShwLC1wLndpZHRoLzIsLXAuaGVpZ2h0LzIscC53aWR0aCxwLmhlaWdodCksZS5yZXN0b3JlKCk7cmV0dXJufWlmKCEoaXNOYU4oaCl8fGg8PTApKXtzd2l0Y2goZS5iZWdpblBhdGgoKSxwKXtkZWZhdWx0Omk/ZS5lbGxpcHNlKG4scixpLzIsaCwwLDAsSCk6ZS5hcmMobixyLGgsMCxIKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgdHJpYW5nbGVgOnU9aT9pLzI6aCxlLm1vdmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz1JdCxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz1JdCxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdFJvdW5kZWRgOmw9aCouNTE2LGM9aC1sLG89TWF0aC5jb3MoZytGdCkqYyxkPU1hdGguY29zKGcrRnQpKihpP2kvMi1sOmMpLHM9TWF0aC5zaW4oZytGdCkqYyxmPU1hdGguc2luKGcrRnQpKihpP2kvMi1sOmMpLGUuYXJjKG4tZCxyLXMsbCxnLVYsZy1VKSxlLmFyYyhuK2Ysci1vLGwsZy1VLGcpLGUuYXJjKG4rZCxyK3MsbCxnLGcrVSksZS5hcmMobi1mLHIrbyxsLGcrVSxnK1YpLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWByZWN0YDppZighbSl7Yz1NYXRoLlNRUlQxXzIqaCx1PWk/aS8yOmMsZS5yZWN0KG4tdSxyLWMsMip1LDIqYyk7YnJlYWt9Zys9RnQ7Y2FzZWByZWN0Um90YDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZixyLW8pLGUubGluZVRvKG4rZCxyK3MpLGUubGluZVRvKG4tZixyK28pLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWBjcm9zc1JvdGA6Zys9RnQ7Y2FzZWBjcm9zc2A6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2QscitzKSxlLm1vdmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuLWYscitvKTticmVhaztjYXNlYHN0YXJgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyksZys9RnQsZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2QscitzKSxlLm1vdmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuLWYscitvKTticmVhaztjYXNlYGxpbmVgOm89aT9pLzI6TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZS5tb3ZlVG8obi1vLHItcyksZS5saW5lVG8obitvLHIrcyk7YnJlYWs7Y2FzZWBkYXNoYDplLm1vdmVUbyhuLHIpLGUubGluZVRvKG4rTWF0aC5jb3MoZykqKGk/aS8yOmgpLHIrTWF0aC5zaW4oZykqaCk7YnJlYWs7Y2FzZSExOmUuY2xvc2VQYXRoKCl9ZS5maWxsKCksdC5ib3JkZXJXaWR0aD4wJiZlLnN0cm9rZSgpfX1mdW5jdGlvbiBVbihlLHQsbil7cmV0dXJuIG58fD0uNSwhdHx8ZSYmZS54PnQubGVmdC1uJiZlLng8dC5yaWdodCtuJiZlLnk+dC50b3AtbiYmZS55PHQuYm90dG9tK259ZnVuY3Rpb24gV24oZSx0KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpLGUucmVjdCh0LmxlZnQsdC50b3AsdC5yaWdodC10LmxlZnQsdC5ib3R0b20tdC50b3ApLGUuY2xpcCgpfWZ1bmN0aW9uIEduKGUpe2UucmVzdG9yZSgpfWZ1bmN0aW9uIEtuKGUsdCl7dC50cmFuc2xhdGlvbiYmZS50cmFuc2xhdGUodC50cmFuc2xhdGlvblswXSx0LnRyYW5zbGF0aW9uWzFdKSxOKHQucm90YXRpb24pfHxlLnJvdGF0ZSh0LnJvdGF0aW9uKSx0LmNvbG9yJiYoZS5maWxsU3R5bGU9dC5jb2xvciksdC50ZXh0QWxpZ24mJihlLnRleHRBbGlnbj10LnRleHRBbGlnbiksdC50ZXh0QmFzZWxpbmUmJihlLnRleHRCYXNlbGluZT10LnRleHRCYXNlbGluZSl9ZnVuY3Rpb24gcW4oZSx0LG4scixpKXtpZihpLnN0cmlrZXRocm91Z2h8fGkudW5kZXJsaW5lKXtsZXQgYT1lLm1lYXN1cmVUZXh0KHIpLG89dC1hLmFjdHVhbEJvdW5kaW5nQm94TGVmdCxzPXQrYS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0LGM9bi1hLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50LGw9bithLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCx1PWkuc3RyaWtldGhyb3VnaD8oYytsKS8yOmw7ZS5zdHJva2VTdHlsZT1lLmZpbGxTdHlsZSxlLmJlZ2luUGF0aCgpLGUubGluZVdpZHRoPWkuZGVjb3JhdGlvbldpZHRofHwyLGUubW92ZVRvKG8sdSksZS5saW5lVG8ocyx1KSxlLnN0cm9rZSgpfX1mdW5jdGlvbiBKbihlLHQpe2xldCBuPWUuZmlsbFN0eWxlO2UuZmlsbFN0eWxlPXQuY29sb3IsZS5maWxsUmVjdCh0LmxlZnQsdC50b3AsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9bn1mdW5jdGlvbiBZbihlLHQsbixyLGksYT17fSl7bGV0IG89UCh0KT90Olt0XSxzPWEuc3Ryb2tlV2lkdGg+MCYmYS5zdHJva2VDb2xvciE9PWBgLGMsbDtmb3IoZS5zYXZlKCksZS5mb250PWkuc3RyaW5nLEtuKGUsYSksYz0wO2M8by5sZW5ndGg7KytjKWw9b1tjXSxhLmJhY2tkcm9wJiZKbihlLGEuYmFja2Ryb3ApLHMmJihhLnN0cm9rZUNvbG9yJiYoZS5zdHJva2VTdHlsZT1hLnN0cm9rZUNvbG9yKSxOKGEuc3Ryb2tlV2lkdGgpfHwoZS5saW5lV2lkdGg9YS5zdHJva2VXaWR0aCksZS5zdHJva2VUZXh0KGwsbixyLGEubWF4V2lkdGgpKSxlLmZpbGxUZXh0KGwsbixyLGEubWF4V2lkdGgpLHFuKGUsbixyLGwsYSkscis9TnVtYmVyKGkubGluZUhlaWdodCk7ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gWG4oZSx0KXtsZXR7eDpuLHk6cix3OmksaDphLHJhZGl1czpvfT10O2UuYXJjKG4rby50b3BMZWZ0LHIrby50b3BMZWZ0LG8udG9wTGVmdCwxLjUqVixWLCEwKSxlLmxpbmVUbyhuLHIrYS1vLmJvdHRvbUxlZnQpLGUuYXJjKG4rby5ib3R0b21MZWZ0LHIrYS1vLmJvdHRvbUxlZnQsby5ib3R0b21MZWZ0LFYsVSwhMCksZS5saW5lVG8obitpLW8uYm90dG9tUmlnaHQscithKSxlLmFyYyhuK2ktby5ib3R0b21SaWdodCxyK2Etby5ib3R0b21SaWdodCxvLmJvdHRvbVJpZ2h0LFUsMCwhMCksZS5saW5lVG8obitpLHIrby50b3BSaWdodCksZS5hcmMobitpLW8udG9wUmlnaHQscitvLnRvcFJpZ2h0LG8udG9wUmlnaHQsMCwtVSwhMCksZS5saW5lVG8obitvLnRvcExlZnQscil9dmFyIFpuPS9eKG5vcm1hbHwoXGQrKD86XC5cZCspPykocHh8ZW18JSk/KSQvLFFuPS9eKG5vcm1hbHxpdGFsaWN8aW5pdGlhbHxpbmhlcml0fHVuc2V0fChvYmxpcXVlKCAtP1swLTldP1swLTldZGVnKT8pKSQvO2Z1bmN0aW9uICRuKGUsdCl7bGV0IG49KGBgK2UpLm1hdGNoKFpuKTtpZighbnx8blsxXT09PWBub3JtYWxgKXJldHVybiB0KjEuMjtzd2l0Y2goZT0rblsyXSxuWzNdKXtjYXNlYHB4YDpyZXR1cm4gZTtjYXNlYCVgOmUvPTEwMH1yZXR1cm4gdCplfXZhciBlcj1lPT4rZXx8MDtmdW5jdGlvbiB0cihlLHQpe2xldCBuPXt9LHI9Rih0KSxpPXI/T2JqZWN0LmtleXModCk6dCxhPUYoZSk/cj9uPT5SKGVbbl0sZVt0W25dXSk6dD0+ZVt0XTooKT0+ZTtmb3IobGV0IGUgb2YgaSluW2VdPWVyKGEoZSkpO3JldHVybiBufWZ1bmN0aW9uIG5yKGUpe3JldHVybiB0cihlLHt0b3A6YHlgLHJpZ2h0OmB4YCxib3R0b206YHlgLGxlZnQ6YHhgfSl9ZnVuY3Rpb24gcnIoZSl7cmV0dXJuIHRyKGUsW2B0b3BMZWZ0YCxgdG9wUmlnaHRgLGBib3R0b21MZWZ0YCxgYm90dG9tUmlnaHRgXSl9ZnVuY3Rpb24gSihlKXtsZXQgdD1ucihlKTtyZXR1cm4gdC53aWR0aD10LmxlZnQrdC5yaWdodCx0LmhlaWdodD10LnRvcCt0LmJvdHRvbSx0fWZ1bmN0aW9uIFkoZSx0KXtlfHw9e30sdHx8PXEuZm9udDtsZXQgbj1SKGUuc2l6ZSx0LnNpemUpO3R5cGVvZiBuPT1gc3RyaW5nYCYmKG49cGFyc2VJbnQobiwxMCkpO2xldCByPVIoZS5zdHlsZSx0LnN0eWxlKTtyJiYhKGBgK3IpLm1hdGNoKFFuKSYmKGNvbnNvbGUud2FybihgSW52YWxpZCBmb250IHN0eWxlIHNwZWNpZmllZDogImArcitgImApLHI9dm9pZCAwKTtsZXQgaT17ZmFtaWx5OlIoZS5mYW1pbHksdC5mYW1pbHkpLGxpbmVIZWlnaHQ6JG4oUihlLmxpbmVIZWlnaHQsdC5saW5lSGVpZ2h0KSxuKSxzaXplOm4sc3R5bGU6cix3ZWlnaHQ6UihlLndlaWdodCx0LndlaWdodCksc3RyaW5nOmBgfTtyZXR1cm4gaS5zdHJpbmc9SW4oaSksaX1mdW5jdGlvbiBpcihlLHQsbixyKXtsZXQgaT0hMCxhLG8scztmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSlpZihzPWVbYV0scyE9PXZvaWQgMCYmKHQhPT12b2lkIDAmJnR5cGVvZiBzPT1gZnVuY3Rpb25gJiYocz1zKHQpLGk9ITEpLG4hPT12b2lkIDAmJlAocykmJihzPXNbbiVzLmxlbmd0aF0saT0hMSkscyE9PXZvaWQgMCkpcmV0dXJuIHImJiFpJiYoci5jYWNoZWFibGU9ITEpLHN9ZnVuY3Rpb24gYXIoZSx0LG4pe2xldHttaW46cixtYXg6aX09ZSxhPWd0KHQsKGktcikvMiksbz0oZSx0KT0+biYmZT09PTA/MDplK3Q7cmV0dXJue21pbjpvKHIsLU1hdGguYWJzKGEpKSxtYXg6byhpLGEpfX1mdW5jdGlvbiBvcihlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZSksdCl9ZnVuY3Rpb24gc3IoZSx0PVtgYF0sbixyLGk9KCk9PmVbMF0pe2xldCBhPW58fGU7cmV0dXJuIHI9PT12b2lkIDAmJihyPUNyKGBfZmFsbGJhY2tgLGUpKSxuZXcgUHJveHkoe1tTeW1ib2wudG9TdHJpbmdUYWddOmBPYmplY3RgLF9jYWNoZWFibGU6ITAsX3Njb3BlczplLF9yb290U2NvcGVzOmEsX2ZhbGxiYWNrOnIsX2dldFRhcmdldDppLG92ZXJyaWRlOm49PnNyKFtuLC4uLmVdLHQsYSxyKX0se2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSB0Ll9rZXlzLGRlbGV0ZSBlWzBdW25dLCEwfSxnZXQobixyKXtyZXR1cm4gZnIobixyLCgpPT5TcihyLHQsZSxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpe3JldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLl9zY29wZXNbMF0sdCl9LGdldFByb3RvdHlwZU9mKCl7cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZVswXSl9LGhhcyhlLHQpe3JldHVybiB3cihlKS5pbmNsdWRlcyh0KX0sb3duS2V5cyhlKXtyZXR1cm4gd3IoZSl9LHNldChlLHQsbil7bGV0IHI9ZS5fc3RvcmFnZXx8PWkoKTtyZXR1cm4gZVt0XT1yW3RdPW4sZGVsZXRlIGUuX2tleXMsITB9fSl9ZnVuY3Rpb24gY3IoZSx0LG4scil7bGV0IGk9e19jYWNoZWFibGU6ITEsX3Byb3h5OmUsX2NvbnRleHQ6dCxfc3ViUHJveHk6bixfc3RhY2s6bmV3IFNldCxfZGVzY3JpcHRvcnM6bHIoZSxyKSxzZXRDb250ZXh0OnQ9PmNyKGUsdCxuLHIpLG92ZXJyaWRlOmk9PmNyKGUub3ZlcnJpZGUoaSksdCxuLHIpfTtyZXR1cm4gbmV3IFByb3h5KGkse2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSBlW25dLCEwfSxnZXQoZSx0LG4pe3JldHVybiBmcihlLHQsKCk9PnByKGUsdCxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe3JldHVybiB0Ll9kZXNjcmlwdG9ycy5hbGxLZXlzP1JlZmxlY3QuaGFzKGUsbik/e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTp2b2lkIDA6UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKX0sZ2V0UHJvdG90eXBlT2YoKXtyZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKX0saGFzKHQsbil7cmV0dXJuIFJlZmxlY3QuaGFzKGUsbil9LG93bktleXMoKXtyZXR1cm4gUmVmbGVjdC5vd25LZXlzKGUpfSxzZXQodCxuLHIpe3JldHVybiBlW25dPXIsZGVsZXRlIHRbbl0sITB9fSl9ZnVuY3Rpb24gbHIoZSx0PXtzY3JpcHRhYmxlOiEwLGluZGV4YWJsZTohMH0pe2xldHtfc2NyaXB0YWJsZTpuPXQuc2NyaXB0YWJsZSxfaW5kZXhhYmxlOnI9dC5pbmRleGFibGUsX2FsbEtleXM6aT10LmFsbEtleXN9PWU7cmV0dXJue2FsbEtleXM6aSxzY3JpcHRhYmxlOm4saW5kZXhhYmxlOnIsaXNTY3JpcHRhYmxlOkF0KG4pP246KCk9Pm4saXNJbmRleGFibGU6QXQocik/cjooKT0+cn19dmFyIHVyPShlLHQpPT5lP2UrT3QodCk6dCxkcj0oZSx0KT0+Rih0KSYmZSE9PWBhZGFwdGVyc2AmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsfHx0LmNvbnN0cnVjdG9yPT09T2JqZWN0KTtmdW5jdGlvbiBmcihlLHQsbil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fHQ9PT1gY29uc3RydWN0b3JgKXJldHVybiBlW3RdO2xldCByPW4oKTtyZXR1cm4gZVt0XT1yLHJ9ZnVuY3Rpb24gcHIoZSx0LG4pe2xldHtfcHJveHk6cixfY29udGV4dDppLF9zdWJQcm94eTphLF9kZXNjcmlwdG9yczpvfT1lLHM9clt0XTtyZXR1cm4gQXQocykmJm8uaXNTY3JpcHRhYmxlKHQpJiYocz1tcih0LHMsZSxuKSksUChzKSYmcy5sZW5ndGgmJihzPWhyKHQscyxlLG8uaXNJbmRleGFibGUpKSxkcih0LHMpJiYocz1jcihzLGksYSYmYVt0XSxvKSksc31mdW5jdGlvbiBtcihlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfc3RhY2s6c309bjtpZihzLmhhcyhlKSl0aHJvdyBFcnJvcihgUmVjdXJzaW9uIGRldGVjdGVkOiBgK0FycmF5LmZyb20ocykuam9pbihgLT5gKStgLT5gK2UpO3MuYWRkKGUpO2xldCBjPXQoYSxvfHxyKTtyZXR1cm4gcy5kZWxldGUoZSksZHIoZSxjKSYmKGM9eXIoaS5fc2NvcGVzLGksZSxjKSksY31mdW5jdGlvbiBocihlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfZGVzY3JpcHRvcnM6c309bjtpZihhLmluZGV4IT09dm9pZCAwJiZyKGUpKXJldHVybiB0W2EuaW5kZXgldC5sZW5ndGhdO2lmKEYodFswXSkpe2xldCBuPXQscj1pLl9zY29wZXMuZmlsdGVyKGU9PmUhPT1uKTt0PVtdO2ZvcihsZXQgYyBvZiBuKXtsZXQgbj15cihyLGksZSxjKTt0LnB1c2goY3IobixhLG8mJm9bZV0scykpfX1yZXR1cm4gdH1mdW5jdGlvbiBncihlLHQsbil7cmV0dXJuIEF0KGUpP2UodCxuKTplfXZhciBfcj0oZSx0KT0+ZT09PSEwP3Q6dHlwZW9mIGU9PWBzdHJpbmdgP0R0KHQsZSk6dm9pZCAwO2Z1bmN0aW9uIHZyKGUsdCxuLHIsaSl7Zm9yKGxldCBhIG9mIHQpe2xldCB0PV9yKG4sYSk7aWYodCl7ZS5hZGQodCk7bGV0IGE9Z3IodC5fZmFsbGJhY2ssbixpKTtpZihhIT09dm9pZCAwJiZhIT09biYmYSE9PXIpcmV0dXJuIGF9ZWxzZSBpZih0PT09ITEmJnIhPT12b2lkIDAmJm4hPT1yKXJldHVybiBudWxsfXJldHVybiExfWZ1bmN0aW9uIHlyKGUsdCxuLHIpe2xldCBpPXQuX3Jvb3RTY29wZXMsYT1ncih0Ll9mYWxsYmFjayxuLHIpLG89Wy4uLmUsLi4uaV0scz1uZXcgU2V0O3MuYWRkKHIpO2xldCBjPWJyKHMsbyxuLGF8fG4scik7cmV0dXJuIGM9PT1udWxsfHxhIT09dm9pZCAwJiZhIT09biYmKGM9YnIocyxvLGEsYyxyKSxjPT09bnVsbCk/ITE6c3IoQXJyYXkuZnJvbShzKSxbYGBdLGksYSwoKT0+eHIodCxuLHIpKX1mdW5jdGlvbiBicihlLHQsbixyLGkpe2Zvcig7bjspbj12cihlLHQsbixyLGkpO3JldHVybiBufWZ1bmN0aW9uIHhyKGUsdCxuKXtsZXQgcj1lLl9nZXRUYXJnZXQoKTt0IGluIHJ8fChyW3RdPXt9KTtsZXQgaT1yW3RdO3JldHVybiBQKGkpJiZGKG4pP246aXx8e319ZnVuY3Rpb24gU3IoZSx0LG4scil7bGV0IGk7Zm9yKGxldCBhIG9mIHQpaWYoaT1Dcih1cihhLGUpLG4pLGkhPT12b2lkIDApcmV0dXJuIGRyKGUsaSk/eXIobixyLGUsaSk6aX1mdW5jdGlvbiBDcihlLHQpe2ZvcihsZXQgbiBvZiB0KXtpZighbiljb250aW51ZTtsZXQgdD1uW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHR9fWZ1bmN0aW9uIHdyKGUpe2xldCB0PWUuX2tleXM7cmV0dXJuIHR8fD1lLl9rZXlzPVRyKGUuX3Njb3BlcyksdH1mdW5jdGlvbiBUcihlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKS5maWx0ZXIoZT0+IWUuc3RhcnRzV2l0aChgX2ApKSl0LmFkZChlKTtyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBFcigpe3JldHVybiB0eXBlb2Ygd2luZG93PGB1YCYmdHlwZW9mIGRvY3VtZW50PGB1YH1mdW5jdGlvbiBEcihlKXtsZXQgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQudG9TdHJpbmcoKT09PWBbb2JqZWN0IFNoYWRvd1Jvb3RdYCYmKHQ9dC5ob3N0KSx0fWZ1bmN0aW9uIE9yKGUsdCxuKXtsZXQgcjtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgPyhyPXBhcnNlSW50KGUsMTApLGUuaW5kZXhPZihgJWApIT09LTEmJihyPXIvMTAwKnQucGFyZW50Tm9kZVtuXSkpOnI9ZSxyfXZhciBrcj1lPT5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpO2Z1bmN0aW9uIEFyKGUsdCl7cmV0dXJuIGtyKGUpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIGpyPVtgdG9wYCxgcmlnaHRgLGBib3R0b21gLGBsZWZ0YF07ZnVuY3Rpb24gTXIoZSx0LG4pe2xldCByPXt9O249bj9gLWArbjpgYDtmb3IobGV0IGk9MDtpPDQ7aSsrKXtsZXQgYT1qcltpXTtyW2FdPXBhcnNlRmxvYXQoZVt0K2AtYCthK25dKXx8MH1yZXR1cm4gci53aWR0aD1yLmxlZnQrci5yaWdodCxyLmhlaWdodD1yLnRvcCtyLmJvdHRvbSxyfXZhciBOcj0oZSx0LG4pPT4oZT4wfHx0PjApJiYoIW58fCFuLnNoYWRvd1Jvb3QpO2Z1bmN0aW9uIFByKGUsdCl7bGV0IG49ZS50b3VjaGVzLHI9biYmbi5sZW5ndGg/blswXTplLHtvZmZzZXRYOmksb2Zmc2V0WTphfT1yLG89ITEscyxjO2lmKE5yKGksYSxlLnRhcmdldCkpcz1pLGM9YTtlbHNle2xldCBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cz1yLmNsaWVudFgtZS5sZWZ0LGM9ci5jbGllbnRZLWUudG9wLG89ITB9cmV0dXJue3g6cyx5OmMsYm94Om99fWZ1bmN0aW9uIEZyKGUsdCl7aWYoYG5hdGl2ZWBpbiBlKXJldHVybiBlO2xldHtjYW52YXM6bixjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbzpyfT10LGk9a3IobiksYT1pLmJveFNpemluZz09PWBib3JkZXItYm94YCxvPU1yKGksYHBhZGRpbmdgKSxzPU1yKGksYGJvcmRlcmAsYHdpZHRoYCkse3g6Yyx5OmwsYm94OnV9PVByKGUsbiksZD1vLmxlZnQrKHUmJnMubGVmdCksZj1vLnRvcCsodSYmcy50b3ApLHt3aWR0aDpwLGhlaWdodDptfT10O3JldHVybiBhJiYocC09by53aWR0aCtzLndpZHRoLG0tPW8uaGVpZ2h0K3MuaGVpZ2h0KSx7eDpNYXRoLnJvdW5kKChjLWQpL3Aqbi53aWR0aC9yKSx5Ok1hdGgucm91bmQoKGwtZikvbSpuLmhlaWdodC9yKX19ZnVuY3Rpb24gSXIoZSx0LG4pe2xldCByLGk7aWYodD09PXZvaWQgMHx8bj09PXZvaWQgMCl7bGV0IGE9ZSYmRHIoZSk7aWYoIWEpdD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQ7ZWxzZXtsZXQgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89a3IoYSkscz1NcihvLGBib3JkZXJgLGB3aWR0aGApLGM9TXIobyxgcGFkZGluZ2ApO3Q9ZS53aWR0aC1jLndpZHRoLXMud2lkdGgsbj1lLmhlaWdodC1jLmhlaWdodC1zLmhlaWdodCxyPU9yKG8ubWF4V2lkdGgsYSxgY2xpZW50V2lkdGhgKSxpPU9yKG8ubWF4SGVpZ2h0LGEsYGNsaWVudEhlaWdodGApfX1yZXR1cm57d2lkdGg6dCxoZWlnaHQ6bixtYXhXaWR0aDpyfHxOdCxtYXhIZWlnaHQ6aXx8TnR9fXZhciBMcj1lPT5NYXRoLnJvdW5kKGUqMTApLzEwO2Z1bmN0aW9uIFJyKGUsdCxuLHIpe2xldCBpPWtyKGUpLGE9TXIoaSxgbWFyZ2luYCksbz1PcihpLm1heFdpZHRoLGUsYGNsaWVudFdpZHRoYCl8fE50LHM9T3IoaS5tYXhIZWlnaHQsZSxgY2xpZW50SGVpZ2h0YCl8fE50LGM9SXIoZSx0LG4pLHt3aWR0aDpsLGhlaWdodDp1fT1jO2lmKGkuYm94U2l6aW5nPT09YGNvbnRlbnQtYm94YCl7bGV0IGU9TXIoaSxgYm9yZGVyYCxgd2lkdGhgKSx0PU1yKGksYHBhZGRpbmdgKTtsLT10LndpZHRoK2Uud2lkdGgsdS09dC5oZWlnaHQrZS5oZWlnaHR9cmV0dXJuIGw9TWF0aC5tYXgoMCxsLWEud2lkdGgpLHU9TWF0aC5tYXgoMCxyP2wvcjp1LWEuaGVpZ2h0KSxsPUxyKE1hdGgubWluKGwsbyxjLm1heFdpZHRoKSksdT1McihNYXRoLm1pbih1LHMsYy5tYXhIZWlnaHQpKSxsJiYhdSYmKHU9THIobC8yKSksKHQhPT12b2lkIDB8fG4hPT12b2lkIDApJiZyJiZjLmhlaWdodCYmdT5jLmhlaWdodCYmKHU9Yy5oZWlnaHQsbD1McihNYXRoLmZsb29yKHUqcikpKSx7d2lkdGg6bCxoZWlnaHQ6dX19ZnVuY3Rpb24genIoZSx0LG4pe2xldCByPXR8fDEsaT1McihlLmhlaWdodCpyKSxhPUxyKGUud2lkdGgqcik7ZS5oZWlnaHQ9THIoZS5oZWlnaHQpLGUud2lkdGg9THIoZS53aWR0aCk7bGV0IG89ZS5jYW52YXM7cmV0dXJuIG8uc3R5bGUmJihufHwhby5zdHlsZS5oZWlnaHQmJiFvLnN0eWxlLndpZHRoKSYmKG8uc3R5bGUuaGVpZ2h0PWAke2UuaGVpZ2h0fXB4YCxvLnN0eWxlLndpZHRoPWAke2Uud2lkdGh9cHhgKSxlLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIT09cnx8by5oZWlnaHQhPT1pfHxvLndpZHRoIT09YT8oZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbz1yLG8uaGVpZ2h0PWksby53aWR0aD1hLGUuY3R4LnNldFRyYW5zZm9ybShyLDAsMCxyLDAsMCksITApOiExfXZhciBCcj1mdW5jdGlvbigpe2xldCBlPSExO3RyeXtsZXQgdD17Z2V0IHBhc3NpdmUoKXtyZXR1cm4gZT0hMCwhMX19O0VyKCkmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgdGVzdGAsbnVsbCx0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdGVzdGAsbnVsbCx0KSl9Y2F0Y2h7fXJldHVybiBlfSgpO2Z1bmN0aW9uIFZyKGUsdCl7bGV0IG49QXIoZSx0KSxyPW4mJm4ubWF0Y2goL14oXGQrKShcLlxkKyk/cHgkLyk7cmV0dXJuIHI/K3JbMV06dm9pZCAwfXZhciBIcj1mdW5jdGlvbihlLHQpe3JldHVybnt4KG4pe3JldHVybiBlK2UrdC1ufSxzZXRXaWR0aChlKXt0PWV9LHRleHRBbGlnbihlKXtyZXR1cm4gZT09PWBjZW50ZXJgP2U6ZT09PWByaWdodGA/YGxlZnRgOmByaWdodGB9LHhQbHVzKGUsdCl7cmV0dXJuIGUtdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlLXR9fX0sVXI9ZnVuY3Rpb24oKXtyZXR1cm57eChlKXtyZXR1cm4gZX0sc2V0V2lkdGgoZSl7fSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGV9LHhQbHVzKGUsdCl7cmV0dXJuIGUrdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlfX19O2Z1bmN0aW9uIFdyKGUsdCxuKXtyZXR1cm4gZT9Icih0LG4pOlVyKCl9ZnVuY3Rpb24gR3IoZSx0KXtsZXQgbixyOyh0PT09YGx0cmB8fHQ9PT1gcnRsYCkmJihuPWUuY2FudmFzLnN0eWxlLHI9W24uZ2V0UHJvcGVydHlWYWx1ZShgZGlyZWN0aW9uYCksbi5nZXRQcm9wZXJ0eVByaW9yaXR5KGBkaXJlY3Rpb25gKV0sbi5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0LGBpbXBvcnRhbnRgKSxlLnByZXZUZXh0RGlyZWN0aW9uPXIpfWZ1bmN0aW9uIEtyKGUsdCl7dCE9PXZvaWQgMCYmKGRlbGV0ZSBlLnByZXZUZXh0RGlyZWN0aW9uLGUuY2FudmFzLnN0eWxlLnNldFByb3BlcnR5KGBkaXJlY3Rpb25gLHRbMF0sdFsxXSkpfWZ1bmN0aW9uIHFyKGUsdCxuKXtyZXR1cm4gZS5vcHRpb25zLmNsaXA/ZVtuXTp0W25dfWZ1bmN0aW9uIEpyKGUsdCl7bGV0e3hTY2FsZTpuLHlTY2FsZTpyfT1lO3JldHVybiBuJiZyP3tsZWZ0OnFyKG4sdCxgbGVmdGApLHJpZ2h0OnFyKG4sdCxgcmlnaHRgKSx0b3A6cXIocix0LGB0b3BgKSxib3R0b206cXIocix0LGBib3R0b21gKX06dH1mdW5jdGlvbiBZcihlLHQpe2xldCBuPXQuX2NsaXA7aWYobi5kaXNhYmxlZClyZXR1cm4hMTtsZXQgcj1Kcih0LGUuY2hhcnRBcmVhKTtyZXR1cm57bGVmdDpuLmxlZnQ9PT0hMT8wOnIubGVmdC0obi5sZWZ0PT09ITA/MDpuLmxlZnQpLHJpZ2h0Om4ucmlnaHQ9PT0hMT9lLndpZHRoOnIucmlnaHQrKG4ucmlnaHQ9PT0hMD8wOm4ucmlnaHQpLHRvcDpuLnRvcD09PSExPzA6ci50b3AtKG4udG9wPT09ITA/MDpuLnRvcCksYm90dG9tOm4uYm90dG9tPT09ITE/ZS5oZWlnaHQ6ci5ib3R0b20rKG4uYm90dG9tPT09ITA/MDpuLmJvdHRvbSl9fXZhciBYcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fY2hhcnRzPW5ldyBNYXAsdGhpcy5fcnVubmluZz0hMSx0aGlzLl9sYXN0RGF0ZT12b2lkIDB9X25vdGlmeShlLHQsbixyKXtsZXQgaT10Lmxpc3RlbmVyc1tyXSxhPXQuZHVyYXRpb247aS5mb3JFYWNoKHI9PnIoe2NoYXJ0OmUsaW5pdGlhbDp0LmluaXRpYWwsbnVtU3RlcHM6YSxjdXJyZW50U3RlcDpNYXRoLm1pbihuLXQuc3RhcnQsYSl9KSl9X3JlZnJlc2goKXt0aGlzLl9yZXF1ZXN0fHw9KHRoaXMuX3J1bm5pbmc9ITAsbG4uY2FsbCh3aW5kb3csKCk9Pnt0aGlzLl91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fcnVubmluZyYmdGhpcy5fcmVmcmVzaCgpfSkpfV91cGRhdGUoZT1EYXRlLm5vdygpKXtsZXQgdD0wO3RoaXMuX2NoYXJ0cy5mb3JFYWNoKChuLHIpPT57aWYoIW4ucnVubmluZ3x8IW4uaXRlbXMubGVuZ3RoKXJldHVybjtsZXQgaT1uLml0ZW1zLGE9aS5sZW5ndGgtMSxvPSExLHM7Zm9yKDthPj0wOy0tYSlzPWlbYV0scy5fYWN0aXZlPyhzLl90b3RhbD5uLmR1cmF0aW9uJiYobi5kdXJhdGlvbj1zLl90b3RhbCkscy50aWNrKGUpLG89ITApOihpW2FdPWlbaS5sZW5ndGgtMV0saS5wb3AoKSk7byYmKHIuZHJhdygpLHRoaXMuX25vdGlmeShyLG4sZSxgcHJvZ3Jlc3NgKSksaS5sZW5ndGh8fChuLnJ1bm5pbmc9ITEsdGhpcy5fbm90aWZ5KHIsbixlLGBjb21wbGV0ZWApLG4uaW5pdGlhbD0hMSksdCs9aS5sZW5ndGh9KSx0aGlzLl9sYXN0RGF0ZT1lLHQ9PT0wJiYodGhpcy5fcnVubmluZz0hMSl9X2dldEFuaW1zKGUpe2xldCB0PXRoaXMuX2NoYXJ0cyxuPXQuZ2V0KGUpO3JldHVybiBufHwobj17cnVubmluZzohMSxpbml0aWFsOiEwLGl0ZW1zOltdLGxpc3RlbmVyczp7Y29tcGxldGU6W10scHJvZ3Jlc3M6W119fSx0LnNldChlLG4pKSxufWxpc3RlbihlLHQsbil7dGhpcy5fZ2V0QW5pbXMoZSkubGlzdGVuZXJzW3RdLnB1c2gobil9YWRkKGUsdCl7IXR8fCF0Lmxlbmd0aHx8dGhpcy5fZ2V0QW5pbXMoZSkuaXRlbXMucHVzaCguLi50KX1oYXMoZSl7cmV0dXJuIHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLmxlbmd0aD4wfXN0YXJ0KGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7dCYmKHQucnVubmluZz0hMCx0LnN0YXJ0PURhdGUubm93KCksdC5kdXJhdGlvbj10Lml0ZW1zLnJlZHVjZSgoZSx0KT0+TWF0aC5tYXgoZSx0Ll9kdXJhdGlvbiksMCksdGhpcy5fcmVmcmVzaCgpKX1ydW5uaW5nKGUpe2lmKCF0aGlzLl9ydW5uaW5nKXJldHVybiExO2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7cmV0dXJuISghdHx8IXQucnVubmluZ3x8IXQuaXRlbXMubGVuZ3RoKX1zdG9wKGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7aWYoIXR8fCF0Lml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IG49dC5pdGVtcyxyPW4ubGVuZ3RoLTE7Zm9yKDtyPj0wOy0tciluW3JdLmNhbmNlbCgpO3QuaXRlbXM9W10sdGhpcy5fbm90aWZ5KGUsdCxEYXRlLm5vdygpLGBjb21wbGV0ZWApfXJlbW92ZShlKXtyZXR1cm4gdGhpcy5fY2hhcnRzLmRlbGV0ZShlKX19LFpyPWB0cmFuc3BhcmVudGAsUXI9e2Jvb2xlYW4oZSx0LG4pe3JldHVybiBuPi41P3Q6ZX0sY29sb3IoZSx0LG4pe2xldCByPXluKGV8fFpyKSxpPXIudmFsaWQmJnluKHR8fFpyKTtyZXR1cm4gaSYmaS52YWxpZD9pLm1peChyLG4pLmhleFN0cmluZygpOnR9LG51bWJlcihlLHQsbil7cmV0dXJuIGUrKHQtZSkqbn19LCRyPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe2xldCBpPXRbbl07cj1pcihbZS50byxyLGksZS5mcm9tXSk7bGV0IGE9aXIoW2UuZnJvbSxpLHJdKTt0aGlzLl9hY3RpdmU9ITAsdGhpcy5fZm49ZS5mbnx8UXJbZS50eXBlfHx0eXBlb2YgYV0sdGhpcy5fZWFzaW5nPV9uW2UuZWFzaW5nXXx8X24ubGluZWFyLHRoaXMuX3N0YXJ0PU1hdGguZmxvb3IoRGF0ZS5ub3coKSsoZS5kZWxheXx8MCkpLHRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsPU1hdGguZmxvb3IoZS5kdXJhdGlvbiksdGhpcy5fbG9vcD0hIWUubG9vcCx0aGlzLl90YXJnZXQ9dCx0aGlzLl9wcm9wPW4sdGhpcy5fZnJvbT1hLHRoaXMuX3RvPXIsdGhpcy5fcHJvbWlzZXM9dm9pZCAwfWFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9dXBkYXRlKGUsdCxuKXtpZih0aGlzLl9hY3RpdmUpe3RoaXMuX25vdGlmeSghMSk7bGV0IHI9dGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdLGk9bi10aGlzLl9zdGFydCxhPXRoaXMuX2R1cmF0aW9uLWk7dGhpcy5fc3RhcnQ9bix0aGlzLl9kdXJhdGlvbj1NYXRoLmZsb29yKE1hdGgubWF4KGEsZS5kdXJhdGlvbikpLHRoaXMuX3RvdGFsKz1pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdG89aXIoW2UudG8sdCxyLGUuZnJvbV0pLHRoaXMuX2Zyb209aXIoW2UuZnJvbSxyLHRdKX19Y2FuY2VsKCl7dGhpcy5fYWN0aXZlJiYodGhpcy50aWNrKERhdGUubm93KCkpLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9ub3RpZnkoITEpKX10aWNrKGUpe2xldCB0PWUtdGhpcy5fc3RhcnQsbj10aGlzLl9kdXJhdGlvbixyPXRoaXMuX3Byb3AsaT10aGlzLl9mcm9tLGE9dGhpcy5fbG9vcCxvPXRoaXMuX3RvLHM7aWYodGhpcy5fYWN0aXZlPWkhPT1vJiYoYXx8dDxuKSwhdGhpcy5fYWN0aXZlKXt0aGlzLl90YXJnZXRbcl09byx0aGlzLl9ub3RpZnkoITApO3JldHVybn1pZih0PDApe3RoaXMuX3RhcmdldFtyXT1pO3JldHVybn1zPXQvbiUyLHM9YSYmcz4xPzItczpzLHM9dGhpcy5fZWFzaW5nKE1hdGgubWluKDEsTWF0aC5tYXgoMCxzKSkpLHRoaXMuX3RhcmdldFtyXT10aGlzLl9mbihpLG8scyl9d2FpdCgpe2xldCBlPXRoaXMuX3Byb21pc2VzfHw9W107cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57ZS5wdXNoKHtyZXM6dCxyZWo6bn0pfSl9X25vdGlmeShlKXtsZXQgdD1lP2ByZXNgOmByZWpgLG49dGhpcy5fcHJvbWlzZXN8fFtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV1bdF0oKX19LGVpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY2hhcnQ9ZSx0aGlzLl9wcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5jb25maWd1cmUodCl9Y29uZmlndXJlKGUpe2lmKCFGKGUpKXJldHVybjtsZXQgdD1PYmplY3Qua2V5cyhxLmFuaW1hdGlvbiksbj10aGlzLl9wcm9wZXJ0aWVzO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2gocj0+e2xldCBpPWVbcl07aWYoIUYoaSkpcmV0dXJuO2xldCBhPXt9O2ZvcihsZXQgZSBvZiB0KWFbZV09aVtlXTsoUChpLnByb3BlcnRpZXMpJiZpLnByb3BlcnRpZXN8fFtyXSkuZm9yRWFjaChlPT57KGU9PT1yfHwhbi5oYXMoZSkpJiZuLnNldChlLGEpfSl9KX1fYW5pbWF0ZU9wdGlvbnMoZSx0KXtsZXQgbj10Lm9wdGlvbnMscj1uaShlLG4pO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMocixuKTtyZXR1cm4gbi4kc2hhcmVkJiZ0aShlLm9wdGlvbnMuJGFuaW1hdGlvbnMsbikudGhlbigoKT0+e2Uub3B0aW9ucz1ufSwoKT0+e30pLGl9X2NyZWF0ZUFuaW1hdGlvbnMoZSx0KXtsZXQgbj10aGlzLl9wcm9wZXJ0aWVzLHI9W10saT1lLiRhbmltYXRpb25zfHw9e30sYT1PYmplY3Qua2V5cyh0KSxvPURhdGUubm93KCkscztmb3Iocz1hLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgYz1hW3NdO2lmKGMuY2hhckF0KDApPT09YCRgKWNvbnRpbnVlO2lmKGM9PT1gb3B0aW9uc2Ape3IucHVzaCguLi50aGlzLl9hbmltYXRlT3B0aW9ucyhlLHQpKTtjb250aW51ZX1sZXQgbD10W2NdLHU9aVtjXSxkPW4uZ2V0KGMpO2lmKHUpe2lmKGQmJnUuYWN0aXZlKCkpe3UudXBkYXRlKGQsbCxvKTtjb250aW51ZX11LmNhbmNlbCgpfWlmKCFkfHwhZC5kdXJhdGlvbil7ZVtjXT1sO2NvbnRpbnVlfWlbY109dT1uZXcgJHIoZCxlLGMsbCksci5wdXNoKHUpfXJldHVybiByfXVwZGF0ZShlLHQpe2lmKHRoaXMuX3Byb3BlcnRpZXMuc2l6ZT09PTApe09iamVjdC5hc3NpZ24oZSx0KTtyZXR1cm59bGV0IG49dGhpcy5fY3JlYXRlQW5pbWF0aW9ucyhlLHQpO2lmKG4ubGVuZ3RoKXJldHVybiBYci5hZGQodGhpcy5fY2hhcnQsbiksITB9fTtmdW5jdGlvbiB0aShlLHQpe2xldCBuPVtdLHI9T2JqZWN0LmtleXModCk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kyspe2xldCBpPWVbclt0XV07aSYmaS5hY3RpdmUoKSYmbi5wdXNoKGkud2FpdCgpKX1yZXR1cm4gUHJvbWlzZS5hbGwobil9ZnVuY3Rpb24gbmkoZSx0KXtpZighdClyZXR1cm47bGV0IG49ZS5vcHRpb25zO2lmKCFuKXtlLm9wdGlvbnM9dDtyZXR1cm59cmV0dXJuIG4uJHNoYXJlZCYmKGUub3B0aW9ucz1uPU9iamVjdC5hc3NpZ24oe30sbix7JHNoYXJlZDohMSwkYW5pbWF0aW9uczp7fX0pKSxufWZ1bmN0aW9uIHJpKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zfHx7fSxyPW4ucmV2ZXJzZSxpPW4ubWluPT09dm9pZCAwP3Q6MCxhPW4ubWF4PT09dm9pZCAwP3Q6MDtyZXR1cm57c3RhcnQ6cj9hOmksZW5kOnI/aTphfX1mdW5jdGlvbiBpaShlLHQsbil7aWYobj09PSExKXJldHVybiExO2xldCByPXJpKGUsbiksaT1yaSh0LG4pO3JldHVybnt0b3A6aS5lbmQscmlnaHQ6ci5lbmQsYm90dG9tOmkuc3RhcnQsbGVmdDpyLnN0YXJ0fX1mdW5jdGlvbiBhaShlKXtsZXQgdCxuLHIsaTtyZXR1cm4gRihlKT8odD1lLnRvcCxuPWUucmlnaHQscj1lLmJvdHRvbSxpPWUubGVmdCk6dD1uPXI9aT1lLHt0b3A6dCxyaWdodDpuLGJvdHRvbTpyLGxlZnQ6aSxkaXNhYmxlZDplPT09ITF9fWZ1bmN0aW9uIG9pKGUsdCl7bGV0IG49W10scj1lLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXModCksaSxhO2ZvcihpPTAsYT1yLmxlbmd0aDtpPGE7KytpKW4ucHVzaChyW2ldLmluZGV4KTtyZXR1cm4gbn1mdW5jdGlvbiBzaShlLHQsbixyPXt9KXtsZXQgaT1lLmtleXMsYT1yLm1vZGU9PT1gc2luZ2xlYCxvLHMsYyxsO2lmKHQ9PT1udWxsKXJldHVybjtsZXQgdT0hMTtmb3Iobz0wLHM9aS5sZW5ndGg7bzxzOysrbyl7aWYoYz0raVtvXSxjPT09bil7aWYodT0hMCxyLmFsbCljb250aW51ZTticmVha31sPWUudmFsdWVzW2NdLEkobCkmJihhfHx0PT09MHx8UnQodCk9PT1SdChsKSkmJih0Kz1sKX1yZXR1cm4hdSYmIXIuYWxsPzA6dH1mdW5jdGlvbiBjaShlLHQpe2xldHtpU2NhbGU6bix2U2NhbGU6cn09dCxpPW4uYXhpcz09PWB4YD9geGA6YHlgLGE9ci5heGlzPT09YHhgP2B4YDpgeWAsbz1PYmplY3Qua2V5cyhlKSxzPUFycmF5KG8ubGVuZ3RoKSxjLGwsdTtmb3IoYz0wLGw9by5sZW5ndGg7YzxsOysrYyl1PW9bY10sc1tjXT17W2ldOnUsW2FdOmVbdV19O3JldHVybiBzfWZ1bmN0aW9uIGxpKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zLnN0YWNrZWQ7cmV0dXJuIG58fG49PT12b2lkIDAmJnQuc3RhY2shPT12b2lkIDB9ZnVuY3Rpb24gdWkoZSx0LG4pe3JldHVybmAke2UuaWR9LiR7dC5pZH0uJHtuLnN0YWNrfHxuLnR5cGV9YH1mdW5jdGlvbiBkaShlKXtsZXR7bWluOnQsbWF4Om4sbWluRGVmaW5lZDpyLG1heERlZmluZWQ6aX09ZS5nZXRVc2VyQm91bmRzKCk7cmV0dXJue21pbjpyP3Q6LTEvMCxtYXg6aT9uOjEvMH19ZnVuY3Rpb24gZmkoZSx0LG4pe2xldCByPWVbdF18fChlW3RdPXt9KTtyZXR1cm4gcltuXXx8KHJbbl09e30pfWZ1bmN0aW9uIHBpKGUsdCxuLHIpe2ZvcihsZXQgaSBvZiB0LmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHIpLnJldmVyc2UoKSl7bGV0IHQ9ZVtpLmluZGV4XTtpZihuJiZ0PjB8fCFuJiZ0PDApcmV0dXJuIGkuaW5kZXh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbWkoZSx0KXtsZXR7Y2hhcnQ6bixfY2FjaGVkTWV0YTpyfT1lLGk9bi5fc3RhY2tzfHw9e30se2lTY2FsZTphLHZTY2FsZTpvLGluZGV4OnN9PXIsYz1hLmF4aXMsbD1vLmF4aXMsdT11aShhLG8sciksZD10Lmxlbmd0aCxmO2ZvcihsZXQgZT0wO2U8ZDsrK2Upe2xldCBuPXRbZV0se1tjXTphLFtsXTpkfT1uLHA9bi5fc3RhY2tzfHw9e307Zj1wW2xdPWZpKGksdSxhKSxmW3NdPWQsZi5fdG9wPXBpKGYsbywhMCxyLnR5cGUpLGYuX2JvdHRvbT1waShmLG8sITEsci50eXBlKTtsZXQgbT1mLl92aXN1YWxWYWx1ZXN8fChmLl92aXN1YWxWYWx1ZXM9e30pO21bc109ZH19ZnVuY3Rpb24gaGkoZSx0KXtsZXQgbj1lLnNjYWxlcztyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9Pm5bZV0uYXhpcz09PXQpLnNoaWZ0KCl9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gb3IoZSx7YWN0aXZlOiExLGRhdGFzZXQ6dm9pZCAwLGRhdGFzZXRJbmRleDp0LGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YXNldGB9KX1mdW5jdGlvbiBfaShlLHQsbil7cmV0dXJuIG9yKGUse2FjdGl2ZTohMSxkYXRhSW5kZXg6dCxwYXJzZWQ6dm9pZCAwLHJhdzp2b2lkIDAsZWxlbWVudDpuLGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YWB9KX1mdW5jdGlvbiB2aShlLHQpe2xldCBuPWUuY29udHJvbGxlci5pbmRleCxyPWUudlNjYWxlJiZlLnZTY2FsZS5heGlzO2lmKHIpe3R8fD1lLl9wYXJzZWQ7Zm9yKGxldCBlIG9mIHQpe2xldCB0PWUuX3N0YWNrcztpZighdHx8dFtyXT09PXZvaWQgMHx8dFtyXVtuXT09PXZvaWQgMClyZXR1cm47ZGVsZXRlIHRbcl1bbl0sdFtyXS5fdmlzdWFsVmFsdWVzIT09dm9pZCAwJiZ0W3JdLl92aXN1YWxWYWx1ZXNbbl0hPT12b2lkIDAmJmRlbGV0ZSB0W3JdLl92aXN1YWxWYWx1ZXNbbl19fX12YXIgeWk9ZT0+ZT09PWByZXNldGB8fGU9PT1gbm9uZWAsYmk9KGUsdCk9PnQ/ZTpPYmplY3QuYXNzaWduKHt9LGUpLHhpPShlLHQsbik9PmUmJiF0LmhpZGRlbiYmdC5fc3RhY2tlZCYme2tleXM6b2kobiwhMCksdmFsdWVzOm51bGx9LFNpPWNsYXNze3N0YXRpYyBkZWZhdWx0cz17fTtzdGF0aWMgZGF0YXNldEVsZW1lbnRUeXBlPW51bGw7c3RhdGljIGRhdGFFbGVtZW50VHlwZT1udWxsO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jaGFydD1lLHRoaXMuX2N0eD1lLmN0eCx0aGlzLmluZGV4PXQsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e30sdGhpcy5fY2FjaGVkTWV0YT10aGlzLmdldE1ldGEoKSx0aGlzLl90eXBlPXRoaXMuX2NhY2hlZE1ldGEudHlwZSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuX3BhcnNpbmc9ITEsdGhpcy5fZGF0YT12b2lkIDAsdGhpcy5fb2JqZWN0RGF0YT12b2lkIDAsdGhpcy5fc2hhcmVkT3B0aW9ucz12b2lkIDAsdGhpcy5fZHJhd1N0YXJ0PXZvaWQgMCx0aGlzLl9kcmF3Q291bnQ9dm9pZCAwLHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZz0hMSx0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbj0hMSx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFzZXRFbGVtZW50VHlwZSx0aGlzLmRhdGFFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZSx0aGlzLmluaXRpYWxpemUoKX1pbml0aWFsaXplKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLmNvbmZpZ3VyZSgpLHRoaXMubGlua1NjYWxlcygpLGUuX3N0YWNrZWQ9bGkoZS52U2NhbGUsZSksdGhpcy5hZGRFbGVtZW50cygpLHRoaXMub3B0aW9ucy5maWxsJiYhdGhpcy5jaGFydC5pc1BsdWdpbkVuYWJsZWQoYGZpbGxlcmApJiZjb25zb2xlLndhcm4oYFRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc2ApfXVwZGF0ZUluZGV4KGUpe3RoaXMuaW5kZXghPT1lJiZ2aSh0aGlzLl9jYWNoZWRNZXRhKSx0aGlzLmluZGV4PWV9bGlua1NjYWxlcygpe2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0oZSx0LG4scik9PmU9PT1geGA/dDplPT09YHJgP3I6bixpPXQueEF4aXNJRD1SKG4ueEF4aXNJRCxoaShlLGB4YCkpLGE9dC55QXhpc0lEPVIobi55QXhpc0lELGhpKGUsYHlgKSksbz10LnJBeGlzSUQ9UihuLnJBeGlzSUQsaGkoZSxgcmApKSxzPXQuaW5kZXhBeGlzLGM9dC5pQXhpc0lEPXIocyxpLGEsbyksbD10LnZBeGlzSUQ9cihzLGEsaSxvKTt0LnhTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoaSksdC55U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGEpLHQuclNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChvKSx0LmlTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoYyksdC52U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGwpfWdldERhdGFzZXQoKXtyZXR1cm4gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW3RoaXMuaW5kZXhdfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YSh0aGlzLmluZGV4KX1nZXRTY2FsZUZvcklkKGUpe3JldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tlXX1fZ2V0T3RoZXJTY2FsZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3JldHVybiBlPT09dC5pU2NhbGU/dC52U2NhbGU6dC5pU2NhbGV9cmVzZXQoKXt0aGlzLl91cGRhdGUoYHJlc2V0YCl9X2Rlc3Ryb3koKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGEmJnNuKHRoaXMuX2RhdGEsdGhpcyksZS5fc3RhY2tlZCYmdmkoZSl9X2RhdGFDaGVjaygpe2xldCBlPXRoaXMuZ2V0RGF0YXNldCgpLHQ9ZS5kYXRhfHw9W10sbj10aGlzLl9kYXRhO2lmKEYodCkpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YT1jaSh0LGUpfWVsc2UgaWYobiE9PXQpe2lmKG4pe3NuKG4sdGhpcyk7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt2aShlKSxlLl9wYXJzZWQ9W119dCYmT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmb24odCx0aGlzKSx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLl9kYXRhPXR9fWFkZEVsZW1lbnRzKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhQ2hlY2soKSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSYmKGUuZGF0YXNldD1uZXcgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpfWJ1aWxkT3JVcGRhdGVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0hMTt0aGlzLl9kYXRhQ2hlY2soKTtsZXQgaT10Ll9zdGFja2VkO3QuX3N0YWNrZWQ9bGkodC52U2NhbGUsdCksdC5zdGFjayE9PW4uc3RhY2smJihyPSEwLHZpKHQpLHQuc3RhY2s9bi5zdGFjayksdGhpcy5fcmVzeW5jRWxlbWVudHMoZSksKHJ8fGkhPT10Ll9zdGFja2VkKSYmKG1pKHRoaXMsdC5fcGFyc2VkKSx0Ll9zdGFja2VkPWxpKHQudlNjYWxlLHQpKX1jb25maWd1cmUoKXtsZXQgZT10aGlzLmNoYXJ0LmNvbmZpZyx0PWUuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKSxuPWUuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLHQsITApO3RoaXMub3B0aW9ucz1lLmNyZWF0ZVJlc29sdmVyKG4sdGhpcy5nZXRDb250ZXh0KCkpLHRoaXMuX3BhcnNpbmc9dGhpcy5vcHRpb25zLnBhcnNpbmcsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e319cGFyc2UoZSx0KXtsZXR7X2NhY2hlZE1ldGE6bixfZGF0YTpyfT10aGlzLHtpU2NhbGU6aSxfc3RhY2tlZDphfT1uLG89aS5heGlzLHM9ZT09PTAmJnQ9PT1yLmxlbmd0aHx8bi5fc29ydGVkLGM9ZT4wJiZuLl9wYXJzZWRbZS0xXSxsLHUsZDtpZih0aGlzLl9wYXJzaW5nPT09ITEpbi5fcGFyc2VkPXIsbi5fc29ydGVkPSEwLGQ9cjtlbHNle2Q9UChyW2VdKT90aGlzLnBhcnNlQXJyYXlEYXRhKG4scixlLHQpOkYocltlXSk/dGhpcy5wYXJzZU9iamVjdERhdGEobixyLGUsdCk6dGhpcy5wYXJzZVByaW1pdGl2ZURhdGEobixyLGUsdCk7bGV0IGk9KCk9PnVbb109PT1udWxsfHxjJiZ1W29dPGNbb107Zm9yKGw9MDtsPHQ7KytsKW4uX3BhcnNlZFtsK2VdPXU9ZFtsXSxzJiYoaSgpJiYocz0hMSksYz11KTtuLl9zb3J0ZWQ9c31hJiZtaSh0aGlzLGQpfXBhcnNlUHJpbWl0aXZlRGF0YShlLHQsbixyKXtsZXR7aVNjYWxlOmksdlNjYWxlOmF9PWUsbz1pLmF4aXMscz1hLmF4aXMsYz1pLmdldExhYmVscygpLGw9aT09PWEsdT1BcnJheShyKSxkLGYscDtmb3IoZD0wLGY9cjtkPGY7KytkKXA9ZCtuLHVbZF09e1tvXTpsfHxpLnBhcnNlKGNbcF0scCksW3NdOmEucGFyc2UodFtwXSxwKX07cmV0dXJuIHV9cGFyc2VBcnJheURhdGEoZSx0LG4scil7bGV0e3hTY2FsZTppLHlTY2FsZTphfT1lLG89QXJyYXkocikscyxjLGwsdTtmb3Iocz0wLGM9cjtzPGM7KytzKWw9cytuLHU9dFtsXSxvW3NdPXt4OmkucGFyc2UodVswXSxsKSx5OmEucGFyc2UodVsxXSxsKX07cmV0dXJuIG99cGFyc2VPYmplY3REYXRhKGUsdCxuLHIpe2xldHt4U2NhbGU6aSx5U2NhbGU6YX09ZSx7eEF4aXNLZXk6bz1geGAseUF4aXNLZXk6cz1geWB9PXRoaXMuX3BhcnNpbmcsYz1BcnJheShyKSxsLHUsZCxmO2ZvcihsPTAsdT1yO2w8dTsrK2wpZD1sK24sZj10W2RdLGNbbF09e3g6aS5wYXJzZShEdChmLG8pLGQpLHk6YS5wYXJzZShEdChmLHMpLGQpfTtyZXR1cm4gY31nZXRQYXJzZWQoZSl7cmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtlXX1nZXREYXRhRWxlbWVudChlKXtyZXR1cm4gdGhpcy5fY2FjaGVkTWV0YS5kYXRhW2VdfWFwcGx5U3RhY2soZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWRNZXRhLGE9dFtlLmF4aXNdO3JldHVybiBzaSh7a2V5czpvaShyLCEwKSx2YWx1ZXM6dC5fc3RhY2tzW2UuYXhpc10uX3Zpc3VhbFZhbHVlc30sYSxpLmluZGV4LHttb2RlOm59KX11cGRhdGVSYW5nZUZyb21QYXJzZWQoZSx0LG4scil7bGV0IGk9blt0LmF4aXNdLGE9aT09PW51bGw/TmFOOmksbz1yJiZuLl9zdGFja3NbdC5heGlzXTtyJiZvJiYoci52YWx1ZXM9byxhPXNpKHIsaSx0aGlzLl9jYWNoZWRNZXRhLmluZGV4KSksZS5taW49TWF0aC5taW4oZS5taW4sYSksZS5tYXg9TWF0aC5tYXgoZS5tYXgsYSl9Z2V0TWluTWF4KGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uX3BhcnNlZCxpPW4uX3NvcnRlZCYmZT09PW4uaVNjYWxlLGE9ci5sZW5ndGgsbz10aGlzLl9nZXRPdGhlclNjYWxlKGUpLHM9eGkodCxuLHRoaXMuY2hhcnQpLGM9e21pbjoxLzAsbWF4Oi0xLzB9LHttaW46bCxtYXg6dX09ZGkobyksZCxmO2Z1bmN0aW9uIHAoKXtmPXJbZF07bGV0IHQ9ZltvLmF4aXNdO3JldHVybiFJKGZbZS5heGlzXSl8fGw+dHx8dTx0fWZvcihkPTA7ZDxhJiYhKCFwKCkmJih0aGlzLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChjLGUsZixzKSxpKSk7KytkKTtpZihpKXtmb3IoZD1hLTE7ZD49MDstLWQpaWYoIXAoKSl7dGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQoYyxlLGYscyk7YnJlYWt9fXJldHVybiBjfWdldEFsbFBhcnNlZFZhbHVlcyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLl9wYXJzZWQsbj1bXSxyLGksYTtmb3Iocj0wLGk9dC5sZW5ndGg7cjxpOysrcilhPXRbcl1bZS5heGlzXSxJKGEpJiZuLnB1c2goYSk7cmV0dXJuIG59Z2V0TWF4T3ZlcmZsb3coKXtyZXR1cm4hMX1nZXRMYWJlbEFuZFZhbHVlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEsbj10LmlTY2FsZSxyPXQudlNjYWxlLGk9dGhpcy5nZXRQYXJzZWQoZSk7cmV0dXJue2xhYmVsOm4/YGArbi5nZXRMYWJlbEZvclZhbHVlKGlbbi5heGlzXSk6YGAsdmFsdWU6cj9gYCtyLmdldExhYmVsRm9yVmFsdWUoaVtyLmF4aXNdKTpgYH19X3VwZGF0ZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3RoaXMudXBkYXRlKGV8fGBkZWZhdWx0YCksdC5fY2xpcD1haShSKHRoaXMub3B0aW9ucy5jbGlwLGlpKHQueFNjYWxlLHQueVNjYWxlLHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKX11cGRhdGUoZSl7fWRyYXcoKXtsZXQgZT10aGlzLl9jdHgsdD10aGlzLmNoYXJ0LG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uZGF0YXx8W10saT10LmNoYXJ0QXJlYSxhPVtdLG89dGhpcy5fZHJhd1N0YXJ0fHwwLHM9dGhpcy5fZHJhd0NvdW50fHxyLmxlbmd0aC1vLGM9dGhpcy5vcHRpb25zLmRyYXdBY3RpdmVFbGVtZW50c09uVG9wLGw7Zm9yKG4uZGF0YXNldCYmbi5kYXRhc2V0LmRyYXcoZSxpLG8scyksbD1vO2w8bytzOysrbCl7bGV0IHQ9cltsXTt0LmhpZGRlbnx8KHQuYWN0aXZlJiZjP2EucHVzaCh0KTp0LmRyYXcoZSxpKSl9Zm9yKGw9MDtsPGEubGVuZ3RoOysrbClhW2xdLmRyYXcoZSxpKX1nZXRTdHlsZShlLHQpe2xldCBuPXQ/YGFjdGl2ZWA6YGRlZmF1bHRgO3JldHVybiBlPT09dm9pZCAwJiZ0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ/dGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG4pOnRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlfHwwLG4pfWdldENvbnRleHQoZSx0LG4pe2xldCByPXRoaXMuZ2V0RGF0YXNldCgpLGk7aWYoZT49MCYmZTx0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLmRhdGFbZV07aT10LiRjb250ZXh0fHw9X2kodGhpcy5nZXRDb250ZXh0KCksZSx0KSxpLnBhcnNlZD10aGlzLmdldFBhcnNlZChlKSxpLnJhdz1yLmRhdGFbZV0saS5pbmRleD1pLmRhdGFJbmRleD1lfWVsc2UgaT10aGlzLiRjb250ZXh0fHw9Z2kodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcy5pbmRleCksaS5kYXRhc2V0PXIsaS5pbmRleD1pLmRhdGFzZXRJbmRleD10aGlzLmluZGV4O3JldHVybiBpLmFjdGl2ZT0hIXQsaS5tb2RlPW4saX1yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsZSl9cmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlLHQpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsdCxlKX1fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKGUsdD1gZGVmYXVsdGAsbil7bGV0IHI9dD09PWBhY3RpdmVgLGk9dGhpcy5fY2FjaGVkRGF0YU9wdHMsYT1lK2AtYCt0LG89aVthXSxzPXRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyYma3Qobik7aWYobylyZXR1cm4gYmkobyxzKTtsZXQgYz10aGlzLmNoYXJ0LmNvbmZpZyxsPWMuZGF0YXNldEVsZW1lbnRTY29wZUtleXModGhpcy5fdHlwZSxlKSx1PXI/W2Ake2V9SG92ZXJgLGBob3ZlcmAsZSxgYF06W2UsYGBdLGQ9Yy5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksbCksZj1PYmplY3Qua2V5cyhxLmVsZW1lbnRzW2VdKSxwPWMucmVzb2x2ZU5hbWVkT3B0aW9ucyhkLGYsKCk9PnRoaXMuZ2V0Q29udGV4dChuLHIsdCksdSk7cmV0dXJuIHAuJHNoYXJlZCYmKHAuJHNoYXJlZD1zLGlbYV09T2JqZWN0LmZyZWV6ZShiaShwLHMpKSkscH1fcmVzb2x2ZUFuaW1hdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWREYXRhT3B0cyxhPWBhbmltYXRpb24tJHt0fWAsbz1pW2FdO2lmKG8pcmV0dXJuIG87bGV0IHM7aWYoci5vcHRpb25zLmFuaW1hdGlvbiE9PSExKXtsZXQgcj10aGlzLmNoYXJ0LmNvbmZpZyxpPXIuZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyh0aGlzLl90eXBlLHQpLGE9ci5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksaSk7cz1yLmNyZWF0ZVJlc29sdmVyKGEsdGhpcy5nZXRDb250ZXh0KGUsbix0KSl9bGV0IGM9bmV3IGVpKHIscyYmcy5hbmltYXRpb25zKTtyZXR1cm4gcyYmcy5fY2FjaGVhYmxlJiYoaVthXT1PYmplY3QuZnJlZXplKGMpKSxjfWdldFNoYXJlZE9wdGlvbnMoZSl7aWYoZS4kc2hhcmVkKXJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zfHw9T2JqZWN0LmFzc2lnbih7fSxlKX1pbmNsdWRlT3B0aW9ucyhlLHQpe3JldHVybiF0fHx5aShlKXx8dGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkfV9nZXRTaGFyZWRPcHRpb25zKGUsdCl7bGV0IG49dGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGUsdCkscj10aGlzLl9zaGFyZWRPcHRpb25zLGk9dGhpcy5nZXRTaGFyZWRPcHRpb25zKG4pLGE9dGhpcy5pbmNsdWRlT3B0aW9ucyh0LGkpfHxpIT09cjtyZXR1cm4gdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKGksdCxuKSx7c2hhcmVkT3B0aW9uczppLGluY2x1ZGVPcHRpb25zOmF9fXVwZGF0ZUVsZW1lbnQoZSx0LG4scil7eWkocik/T2JqZWN0LmFzc2lnbihlLG4pOnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQscikudXBkYXRlKGUsbil9dXBkYXRlU2hhcmVkT3B0aW9ucyhlLHQsbil7ZSYmIXlpKHQpJiZ0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAsdCkudXBkYXRlKGUsbil9X3NldFN0eWxlKGUsdCxuLHIpe2UuYWN0aXZlPXI7bGV0IGk9dGhpcy5nZXRTdHlsZSh0LHIpO3RoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQsbixyKS51cGRhdGUoZSx7b3B0aW9uczohciYmdGhpcy5nZXRTaGFyZWRPcHRpb25zKGkpfHxpfSl9cmVtb3ZlSG92ZXJTdHlsZShlLHQsbil7dGhpcy5fc2V0U3R5bGUoZSxuLGBhY3RpdmVgLCExKX1zZXRIb3ZlclN0eWxlKGUsdCxuKXt0aGlzLl9zZXRTdHlsZShlLG4sYGFjdGl2ZWAsITApfV9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldDtlJiZ0aGlzLl9zZXRTdHlsZShlLHZvaWQgMCxgYWN0aXZlYCwhMSl9X3NldERhdGFzZXRIb3ZlclN0eWxlKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O2UmJnRoaXMuX3NldFN0eWxlKGUsdm9pZCAwLGBhY3RpdmVgLCEwKX1fcmVzeW5jRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fZGF0YSxuPXRoaXMuX2NhY2hlZE1ldGEuZGF0YTtmb3IobGV0W2UsdCxuXW9mIHRoaXMuX3N5bmNMaXN0KXRoaXNbZV0odCxuKTt0aGlzLl9zeW5jTGlzdD1bXTtsZXQgcj1uLmxlbmd0aCxpPXQubGVuZ3RoLGE9TWF0aC5taW4oaSxyKTthJiZ0aGlzLnBhcnNlKDAsYSksaT5yP3RoaXMuX2luc2VydEVsZW1lbnRzKHIsaS1yLGUpOmk8ciYmdGhpcy5fcmVtb3ZlRWxlbWVudHMoaSxyLWkpfV9pbnNlcnRFbGVtZW50cyhlLHQsbj0hMCl7bGV0IHI9dGhpcy5fY2FjaGVkTWV0YSxpPXIuZGF0YSxhPWUrdCxvLHM9ZT0+e2ZvcihlLmxlbmd0aCs9dCxvPWUubGVuZ3RoLTE7bz49YTtvLS0pZVtvXT1lW28tdF19O2ZvcihzKGkpLG89ZTtvPGE7KytvKWlbb109bmV3IHRoaXMuZGF0YUVsZW1lbnRUeXBlO3RoaXMuX3BhcnNpbmcmJnMoci5fcGFyc2VkKSx0aGlzLnBhcnNlKGUsdCksbiYmdGhpcy51cGRhdGVFbGVtZW50cyhpLGUsdCxgcmVzZXRgKX11cGRhdGVFbGVtZW50cyhlLHQsbixyKXt9X3JlbW92ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YTtpZih0aGlzLl9wYXJzaW5nKXtsZXQgcj1uLl9wYXJzZWQuc3BsaWNlKGUsdCk7bi5fc3RhY2tlZCYmdmkobixyKX1uLmRhdGEuc3BsaWNlKGUsdCl9X3N5bmMoZSl7aWYodGhpcy5fcGFyc2luZyl0aGlzLl9zeW5jTGlzdC5wdXNoKGUpO2Vsc2V7bGV0W3QsbixyXT1lO3RoaXNbdF0obixyKX10aGlzLmNoYXJ0Ll9kYXRhQ2hhbmdlcy5wdXNoKFt0aGlzLmluZGV4LC4uLmVdKX1fb25EYXRhUHVzaCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg7dGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsdGhpcy5nZXREYXRhc2V0KCkuZGF0YS5sZW5ndGgtZSxlXSl9X29uRGF0YVBvcCgpe3RoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgtMSwxXSl9X29uRGF0YVNoaWZ0KCl7dGhpcy5fc3luYyhbYF9yZW1vdmVFbGVtZW50c2AsMCwxXSl9X29uRGF0YVNwbGljZShlLHQpe3QmJnRoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLGUsdF0pO2xldCBuPWFyZ3VtZW50cy5sZW5ndGgtMjtuJiZ0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCxlLG5dKX1fb25EYXRhVW5zaGlmdCgpe3RoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLDAsYXJndW1lbnRzLmxlbmd0aF0pfX07ZnVuY3Rpb24gQ2koZSx0KXtpZighZS5fY2FjaGUuJGJhcil7bGV0IG49ZS5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyh0KSxyPVtdO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dDxpO3QrKylyPXIuY29uY2F0KG5bdF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXMoZSkpO2UuX2NhY2hlLiRiYXI9Y24oci5zb3J0KChlLHQpPT5lLXQpKX1yZXR1cm4gZS5fY2FjaGUuJGJhcn1mdW5jdGlvbiB3aShlKXtsZXQgdD1lLmlTY2FsZSxuPUNpKHQsZS50eXBlKSxyPXQuX2xlbmd0aCxpLGEsbyxzLGM9KCk9PntvIT09MzI3NjcmJm8hPT0tMzI3NjgmJihrdChzKSYmKHI9TWF0aC5taW4ocixNYXRoLmFicyhvLXMpfHxyKSkscz1vKX07Zm9yKGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbz10LmdldFBpeGVsRm9yVmFsdWUobltpXSksYygpO2ZvcihzPXZvaWQgMCxpPTAsYT10LnRpY2tzLmxlbmd0aDtpPGE7KytpKW89dC5nZXRQaXhlbEZvclRpY2soaSksYygpO3JldHVybiByfWZ1bmN0aW9uIFRpKGUsdCxuLHIpe2xldCBpPW4uYmFyVGhpY2tuZXNzLGEsbztyZXR1cm4gTihpKT8oYT10Lm1pbipuLmNhdGVnb3J5UGVyY2VudGFnZSxvPW4uYmFyUGVyY2VudGFnZSk6KGE9aSpyLG89MSkse2NodW5rOmEvcixyYXRpbzpvLHN0YXJ0OnQucGl4ZWxzW2VdLWEvMn19ZnVuY3Rpb24gRWkoZSx0LG4scil7bGV0IGk9dC5waXhlbHMsYT1pW2VdLG89ZT4wP2lbZS0xXTpudWxsLHM9ZTxpLmxlbmd0aC0xP2lbZSsxXTpudWxsLGM9bi5jYXRlZ29yeVBlcmNlbnRhZ2U7bz09PW51bGwmJihvPWEtKHM9PT1udWxsP3QuZW5kLXQuc3RhcnQ6cy1hKSkscz09PW51bGwmJihzPWErYS1vKTtsZXQgbD1hLShhLU1hdGgubWluKG8scykpLzIqYztyZXR1cm57Y2h1bms6TWF0aC5hYnMocy1vKS8yKmMvcixyYXRpbzpuLmJhclBlcmNlbnRhZ2Usc3RhcnQ6bH19ZnVuY3Rpb24gRGkoZSx0LG4scil7bGV0IGk9bi5wYXJzZShlWzBdLHIpLGE9bi5wYXJzZShlWzFdLHIpLG89TWF0aC5taW4oaSxhKSxzPU1hdGgubWF4KGksYSksYz1vLGw9cztNYXRoLmFicyhvKT5NYXRoLmFicyhzKSYmKGM9cyxsPW8pLHRbbi5heGlzXT1sLHQuX2N1c3RvbT17YmFyU3RhcnQ6YyxiYXJFbmQ6bCxzdGFydDppLGVuZDphLG1pbjpvLG1heDpzfX1mdW5jdGlvbiBPaShlLHQsbixyKXtyZXR1cm4gUChlKT9EaShlLHQsbixyKTp0W24uYXhpc109bi5wYXJzZShlLHIpLHR9ZnVuY3Rpb24ga2koZSx0LG4scil7bGV0IGk9ZS5pU2NhbGUsYT1lLnZTY2FsZSxvPWkuZ2V0TGFiZWxzKCkscz1pPT09YSxjPVtdLGwsdSxkLGY7Zm9yKGw9bix1PW4rcjtsPHU7KytsKWY9dFtsXSxkPXt9LGRbaS5heGlzXT1zfHxpLnBhcnNlKG9bbF0sbCksYy5wdXNoKE9pKGYsZCxhLGwpKTtyZXR1cm4gY31mdW5jdGlvbiBBaShlKXtyZXR1cm4gZSYmZS5iYXJTdGFydCE9PXZvaWQgMCYmZS5iYXJFbmQhPT12b2lkIDB9ZnVuY3Rpb24gamkoZSx0LG4pe3JldHVybiBlPT09MD8odC5pc0hvcml6b250YWwoKT8xOi0xKSoodC5taW4+PW4/MTotMSk6UnQoZSl9ZnVuY3Rpb24gTWkoZSl7bGV0IHQsbixyLGksYTtyZXR1cm4gZS5ob3Jpem9udGFsPyh0PWUuYmFzZT5lLngsbj1gbGVmdGAscj1gcmlnaHRgKToodD1lLmJhc2U8ZS55LG49YGJvdHRvbWAscj1gdG9wYCksdD8oaT1gZW5kYCxhPWBzdGFydGApOihpPWBzdGFydGAsYT1gZW5kYCkse3N0YXJ0Om4sZW5kOnIscmV2ZXJzZTp0LHRvcDppLGJvdHRvbTphfX1mdW5jdGlvbiBOaShlLHQsbixyKXtsZXQgaT10LmJvcmRlclNraXBwZWQsYT17fTtpZighaSl7ZS5ib3JkZXJTa2lwcGVkPWE7cmV0dXJufWlmKGk9PT0hMCl7ZS5ib3JkZXJTa2lwcGVkPXt0b3A6ITAscmlnaHQ6ITAsYm90dG9tOiEwLGxlZnQ6ITB9O3JldHVybn1sZXR7c3RhcnQ6byxlbmQ6cyxyZXZlcnNlOmMsdG9wOmwsYm90dG9tOnV9PU1pKGUpO2k9PT1gbWlkZGxlYCYmbiYmKGUuZW5hYmxlQm9yZGVyUmFkaXVzPSEwLChuLl90b3B8fDApPT09cj9pPWw6KG4uX2JvdHRvbXx8MCk9PT1yP2k9dTooYVtQaSh1LG8scyxjKV09ITAsaT1sKSksYVtQaShpLG8scyxjKV09ITAsZS5ib3JkZXJTa2lwcGVkPWF9ZnVuY3Rpb24gUGkoZSx0LG4scil7cmV0dXJuIHI/KGU9RmkoZSx0LG4pLGU9SWkoZSxuLHQpKTplPUlpKGUsdCxuKSxlfWZ1bmN0aW9uIEZpKGUsdCxuKXtyZXR1cm4gZT09PXQ/bjplPT09bj90OmV9ZnVuY3Rpb24gSWkoZSx0LG4pe3JldHVybiBlPT09YHN0YXJ0YD90OmU9PT1gZW5kYD9uOmV9ZnVuY3Rpb24gTGkoZSx7aW5mbGF0ZUFtb3VudDp0fSxuKXtlLmluZmxhdGVBbW91bnQ9dD09PWBhdXRvYD9uPT09MT8uMzM6MDp0fXZhciBSaT1jbGFzcyBleHRlbmRzIFNpe3N0YXRpYyBpZD1gYmFyYDtzdGF0aWMgZGVmYXVsdHM9e2RhdGFzZXRFbGVtZW50VHlwZTohMSxkYXRhRWxlbWVudFR5cGU6YGJhcmAsY2F0ZWdvcnlQZXJjZW50YWdlOi44LGJhclBlcmNlbnRhZ2U6LjksZ3JvdXBlZDohMCxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYGJhc2VgLGB3aWR0aGAsYGhlaWdodGBdfX19O3N0YXRpYyBvdmVycmlkZXM9e3NjYWxlczp7X2luZGV4Xzp7dHlwZTpgY2F0ZWdvcnlgLG9mZnNldDohMCxncmlkOntvZmZzZXQ6ITB9fSxfdmFsdWVfOnt0eXBlOmBsaW5lYXJgLGJlZ2luQXRaZXJvOiEwfX19O3BhcnNlUHJpbWl0aXZlRGF0YShlLHQsbixyKXtyZXR1cm4ga2koZSx0LG4scil9cGFyc2VBcnJheURhdGEoZSx0LG4scil7cmV0dXJuIGtpKGUsdCxuLHIpfXBhcnNlT2JqZWN0RGF0YShlLHQsbixyKXtsZXR7aVNjYWxlOmksdlNjYWxlOmF9PWUse3hBeGlzS2V5Om89YHhgLHlBeGlzS2V5OnM9YHlgfT10aGlzLl9wYXJzaW5nLGM9aS5heGlzPT09YHhgP286cyxsPWEuYXhpcz09PWB4YD9vOnMsdT1bXSxkLGYscCxtO2ZvcihkPW4sZj1uK3I7ZDxmOysrZCltPXRbZF0scD17fSxwW2kuYXhpc109aS5wYXJzZShEdChtLGMpLGQpLHUucHVzaChPaShEdChtLGwpLHAsYSxkKSk7cmV0dXJuIHV9dXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGUsdCxuLHIpe3N1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChlLHQsbixyKTtsZXQgaT1uLl9jdXN0b207aSYmdD09PXRoaXMuX2NhY2hlZE1ldGEudlNjYWxlJiYoZS5taW49TWF0aC5taW4oZS5taW4saS5taW4pLGUubWF4PU1hdGgubWF4KGUubWF4LGkubWF4KSl9Z2V0TWF4T3ZlcmZsb3coKXtyZXR1cm4gMH1nZXRMYWJlbEFuZFZhbHVlKGUpe2xldHtpU2NhbGU6dCx2U2NhbGU6bn09dGhpcy5fY2FjaGVkTWV0YSxyPXRoaXMuZ2V0UGFyc2VkKGUpLGk9ci5fY3VzdG9tLGE9QWkoaSk/YFtgK2kuc3RhcnQrYCwgYCtpLmVuZCtgXWA6YGArbi5nZXRMYWJlbEZvclZhbHVlKHJbbi5heGlzXSk7cmV0dXJue2xhYmVsOmBgK3QuZ2V0TGFiZWxGb3JWYWx1ZShyW3QuYXhpc10pLHZhbHVlOmF9fWluaXRpYWxpemUoKXt0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmc9ITAsc3VwZXIuaW5pdGlhbGl6ZSgpO2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7ZS5zdGFjaz10aGlzLmdldERhdGFzZXQoKS5zdGFja311cGRhdGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLnVwZGF0ZUVsZW1lbnRzKHQuZGF0YSwwLHQuZGF0YS5sZW5ndGgsZSl9dXBkYXRlRWxlbWVudHMoZSx0LG4scil7bGV0IGk9cj09PWByZXNldGAse2luZGV4OmEsX2NhY2hlZE1ldGE6e3ZTY2FsZTpvfX09dGhpcyxzPW8uZ2V0QmFzZVBpeGVsKCksYz1vLmlzSG9yaXpvbnRhbCgpLGw9dGhpcy5fZ2V0UnVsZXIoKSx7c2hhcmVkT3B0aW9uczp1LGluY2x1ZGVPcHRpb25zOmR9PXRoaXMuX2dldFNoYXJlZE9wdGlvbnModCxyKTtmb3IobGV0IGY9dDtmPHQrbjtmKyspe2xldCB0PXRoaXMuZ2V0UGFyc2VkKGYpLG49aXx8Tih0W28uYXhpc10pP3tiYXNlOnMsaGVhZDpzfTp0aGlzLl9jYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyhmKSxwPXRoaXMuX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGYsbCksbT0odC5fc3RhY2tzfHx7fSlbby5heGlzXSxoPXtob3Jpem9udGFsOmMsYmFzZTpuLmJhc2UsZW5hYmxlQm9yZGVyUmFkaXVzOiFtfHxBaSh0Ll9jdXN0b20pfHxhPT09bS5fdG9wfHxhPT09bS5fYm90dG9tLHg6Yz9uLmhlYWQ6cC5jZW50ZXIseTpjP3AuY2VudGVyOm4uaGVhZCxoZWlnaHQ6Yz9wLnNpemU6TWF0aC5hYnMobi5zaXplKSx3aWR0aDpjP01hdGguYWJzKG4uc2l6ZSk6cC5zaXplfTtkJiYoaC5vcHRpb25zPXV8fHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhmLGVbZl0uYWN0aXZlP2BhY3RpdmVgOnIpKTtsZXQgZz1oLm9wdGlvbnN8fGVbZl0ub3B0aW9ucztOaShoLGcsbSxhKSxMaShoLGcsbC5yYXRpbyksdGhpcy51cGRhdGVFbGVtZW50KGVbZl0sZixoLHIpfX1fZ2V0U3RhY2tzKGUsdCl7bGV0e2lTY2FsZTpufT10aGlzLl9jYWNoZWRNZXRhLHI9bi5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyh0aGlzLl90eXBlKS5maWx0ZXIoZT0+ZS5jb250cm9sbGVyLm9wdGlvbnMuZ3JvdXBlZCksaT1uLm9wdGlvbnMuc3RhY2tlZCxhPVtdLG89dGhpcy5fY2FjaGVkTWV0YS5jb250cm9sbGVyLmdldFBhcnNlZCh0KSxzPW8mJm9bbi5heGlzXSxjPWU9PntsZXQgdD1lLl9wYXJzZWQuZmluZChlPT5lW24uYXhpc109PT1zKSxyPXQmJnRbZS52U2NhbGUuYXhpc107aWYoTihyKXx8aXNOYU4ocikpcmV0dXJuITB9O2ZvcihsZXQgbiBvZiByKWlmKCEodCE9PXZvaWQgMCYmYyhuKSkmJigoaT09PSExfHxhLmluZGV4T2Yobi5zdGFjayk9PT0tMXx8aT09PXZvaWQgMCYmbi5zdGFjaz09PXZvaWQgMCkmJmEucHVzaChuLnN0YWNrKSxuLmluZGV4PT09ZSkpYnJlYWs7cmV0dXJuIGEubGVuZ3RofHxhLnB1c2godm9pZCAwKSxhfV9nZXRTdGFja0NvdW50KGUpe3JldHVybiB0aGlzLl9nZXRTdGFja3Modm9pZCAwLGUpLmxlbmd0aH1fZ2V0QXhpc0NvdW50KCl7cmV0dXJuIHRoaXMuX2dldEF4aXMoKS5sZW5ndGh9Z2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzKCl7bGV0IGU9dGhpcy5jaGFydC5zY2FsZXMsdD10aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzO3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIobj0+ZVtuXS5heGlzPT09dCkuc2hpZnQoKX1fZ2V0QXhpcygpe2xldCBlPXt9LHQ9dGhpcy5nZXRGaXJzdFNjYWxlSWRGb3JJbmRleEF4aXMoKTtmb3IobGV0IG4gb2YgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKWVbUih0aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzPT09YHhgP24ueEF4aXNJRDpuLnlBeGlzSUQsdCldPSEwO3JldHVybiBPYmplY3Qua2V5cyhlKX1fZ2V0U3RhY2tJbmRleChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0U3RhY2tzKGUsbiksaT10PT09dm9pZCAwPy0xOnIuaW5kZXhPZih0KTtyZXR1cm4gaT09PS0xP3IubGVuZ3RoLTE6aX1fZ2V0UnVsZXIoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD10aGlzLl9jYWNoZWRNZXRhLG49dC5pU2NhbGUscj1bXSxpLGE7Zm9yKGk9MCxhPXQuZGF0YS5sZW5ndGg7aTxhOysraSlyLnB1c2gobi5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGkpW24uYXhpc10saSkpO2xldCBvPWUuYmFyVGhpY2tuZXNzO3JldHVybnttaW46b3x8d2kodCkscGl4ZWxzOnIsc3RhcnQ6bi5fc3RhcnRQaXhlbCxlbmQ6bi5fZW5kUGl4ZWwsc3RhY2tDb3VudDp0aGlzLl9nZXRTdGFja0NvdW50KCksc2NhbGU6bixncm91cGVkOmUuZ3JvdXBlZCxyYXRpbzpvPzE6ZS5jYXRlZ29yeVBlcmNlbnRhZ2UqZS5iYXJQZXJjZW50YWdlfX1fY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoZSl7bGV0e19jYWNoZWRNZXRhOnt2U2NhbGU6dCxfc3RhY2tlZDpuLGluZGV4OnJ9LG9wdGlvbnM6e2Jhc2U6aSxtaW5CYXJMZW5ndGg6YX19PXRoaXMsbz1pfHwwLHM9dGhpcy5nZXRQYXJzZWQoZSksYz1zLl9jdXN0b20sbD1BaShjKSx1PXNbdC5heGlzXSxkPTAsZj1uP3RoaXMuYXBwbHlTdGFjayh0LHMsbik6dSxwLG07ZiE9PXUmJihkPWYtdSxmPXUpLGwmJih1PWMuYmFyU3RhcnQsZj1jLmJhckVuZC1jLmJhclN0YXJ0LHUhPT0wJiZSdCh1KSE9PVJ0KGMuYmFyRW5kKSYmKGQ9MCksZCs9dSk7bGV0IGg9IU4oaSkmJiFsP2k6ZCxnPXQuZ2V0UGl4ZWxGb3JWYWx1ZShoKTtpZihwPXRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoZSk/dC5nZXRQaXhlbEZvclZhbHVlKGQrZik6ZyxtPXAtZyxNYXRoLmFicyhtKTxhKXttPWppKG0sdCxvKSphLHU9PT1vJiYoZy09bS8yKTtsZXQgZT10LmdldFBpeGVsRm9yRGVjaW1hbCgwKSxpPXQuZ2V0UGl4ZWxGb3JEZWNpbWFsKDEpO2c9TWF0aC5tYXgoTWF0aC5taW4oZyxNYXRoLm1heChlLGkpKSxNYXRoLm1pbihlLGkpKSxwPWcrbSxuJiYhbCYmKHMuX3N0YWNrc1t0LmF4aXNdLl92aXN1YWxWYWx1ZXNbcl09dC5nZXRWYWx1ZUZvclBpeGVsKHApLXQuZ2V0VmFsdWVGb3JQaXhlbChnKSl9aWYoZz09PXQuZ2V0UGl4ZWxGb3JWYWx1ZShvKSl7bGV0IGU9UnQobSkqdC5nZXRMaW5lV2lkdGhGb3JWYWx1ZShvKS8yO2crPWUsbS09ZX1yZXR1cm57c2l6ZTptLGJhc2U6ZyxoZWFkOnAsY2VudGVyOnArbS8yfX1fY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMoZSx0KXtsZXQgbj10LnNjYWxlLHI9dGhpcy5vcHRpb25zLGk9ci5za2lwTnVsbCxhPVIoci5tYXhCYXJUaGlja25lc3MsMS8wKSxvLHMsYz10aGlzLl9nZXRBeGlzQ291bnQoKTtpZih0Lmdyb3VwZWQpe2xldCBuPWk/dGhpcy5fZ2V0U3RhY2tDb3VudChlKTp0LnN0YWNrQ291bnQsbD1yLmJhclRoaWNrbmVzcz09PWBmbGV4YD9FaShlLHQscixuKmMpOlRpKGUsdCxyLG4qYyksdT10aGlzLmNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzPT09YHhgP3RoaXMuZ2V0RGF0YXNldCgpLnhBeGlzSUQ6dGhpcy5nZXREYXRhc2V0KCkueUF4aXNJRCxkPXRoaXMuX2dldEF4aXMoKS5pbmRleE9mKFIodSx0aGlzLmdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpKSksZj10aGlzLl9nZXRTdGFja0luZGV4KHRoaXMuaW5kZXgsdGhpcy5fY2FjaGVkTWV0YS5zdGFjayxpP2U6dm9pZCAwKStkO289bC5zdGFydCtsLmNodW5rKmYrbC5jaHVuay8yLHM9TWF0aC5taW4oYSxsLmNodW5rKmwucmF0aW8pfWVsc2Ugbz1uLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRQYXJzZWQoZSlbbi5heGlzXSxlKSxzPU1hdGgubWluKGEsdC5taW4qdC5yYXRpbyk7cmV0dXJue2Jhc2U6by1zLzIsaGVhZDpvK3MvMixjZW50ZXI6byxzaXplOnN9fWRyYXcoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLHQ9ZS52U2NhbGUsbj1lLmRhdGEscj1uLmxlbmd0aCxpPTA7Zm9yKDtpPHI7KytpKXRoaXMuZ2V0UGFyc2VkKGkpW3QuYXhpc10hPT1udWxsJiYhbltpXS5oaWRkZW4mJm5baV0uZHJhdyh0aGlzLl9jdHgpfX07ZnVuY3Rpb24gemkoKXt0aHJvdyBFcnJvcihgVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkOiBDaGVjayB0aGF0IGEgY29tcGxldGUgZGF0ZSBhZGFwdGVyIGlzIHByb3ZpZGVkLmApfXZhciBCaT17X2RhdGU6Y2xhc3MgZXtzdGF0aWMgb3ZlcnJpZGUodCl7T2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSx0KX1vcHRpb25zO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHx7fX1pbml0KCl7fWZvcm1hdHMoKXtyZXR1cm4gemkoKX1wYXJzZSgpe3JldHVybiB6aSgpfWZvcm1hdCgpe3JldHVybiB6aSgpfWFkZCgpe3JldHVybiB6aSgpfWRpZmYoKXtyZXR1cm4gemkoKX1zdGFydE9mKCl7cmV0dXJuIHppKCl9ZW5kT2YoKXtyZXR1cm4gemkoKX19fTtmdW5jdGlvbiBWaShlLHQsbixyKXtsZXR7Y29udHJvbGxlcjppLGRhdGE6YSxfc29ydGVkOm99PWUscz1pLl9jYWNoZWRNZXRhLmlTY2FsZSxjPWUuZGF0YXNldCYmZS5kYXRhc2V0Lm9wdGlvbnM/ZS5kYXRhc2V0Lm9wdGlvbnMuc3BhbkdhcHM6bnVsbDtpZihzJiZ0PT09cy5heGlzJiZ0IT09YHJgJiZvJiZhLmxlbmd0aCl7bGV0IG89cy5fcmV2ZXJzZVBpeGVscz9ubjp0bjtpZighcil7bGV0IHI9byhhLHQsbik7aWYoYyl7bGV0e3ZTY2FsZTp0fT1pLl9jYWNoZWRNZXRhLHtfcGFyc2VkOm59PWUsYT1uLnNsaWNlKDAsci5sbysxKS5yZXZlcnNlKCkuZmluZEluZGV4KGU9PiFOKGVbdC5heGlzXSkpO3IubG8tPU1hdGgubWF4KDAsYSk7bGV0IG89bi5zbGljZShyLmhpKS5maW5kSW5kZXgoZT0+IU4oZVt0LmF4aXNdKSk7ci5oaSs9TWF0aC5tYXgoMCxvKX1yZXR1cm4gcn1pZihpLl9zaGFyZWRPcHRpb25zKXtsZXQgZT1hWzBdLHI9dHlwZW9mIGUuZ2V0UmFuZ2U9PWBmdW5jdGlvbmAmJmUuZ2V0UmFuZ2UodCk7aWYocil7bGV0IGU9byhhLHQsbi1yKSxpPW8oYSx0LG4rcik7cmV0dXJue2xvOmUubG8saGk6aS5oaX19fX1yZXR1cm57bG86MCxoaTphLmxlbmd0aC0xfX1mdW5jdGlvbiBIaShlLHQsbixyLGkpe2xldCBhPWUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLG89blt0XTtmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjsrK2Upe2xldHtpbmRleDpuLGRhdGE6c309YVtlXSx7bG86YyxoaTpsfT1WaShhW2VdLHQsbyxpKTtmb3IobGV0IGU9YztlPD1sOysrZSl7bGV0IHQ9c1tlXTt0LnNraXB8fHIodCxuLGUpfX19ZnVuY3Rpb24gVWkoZSl7bGV0IHQ9ZS5pbmRleE9mKGB4YCkhPT0tMSxuPWUuaW5kZXhPZihgeWApIT09LTE7cmV0dXJuIGZ1bmN0aW9uKGUscil7bGV0IGk9dD9NYXRoLmFicyhlLngtci54KTowLGE9bj9NYXRoLmFicyhlLnktci55KTowO3JldHVybiBNYXRoLnNxcnQoaSoqMithKioyKX19ZnVuY3Rpb24gV2koZSx0LG4scixpKXtsZXQgYT1bXTtyZXR1cm4haSYmIWUuaXNQb2ludEluQXJlYSh0KXx8SGkoZSxuLHQsZnVuY3Rpb24obixvLHMpeyFpJiYhVW4obixlLmNoYXJ0QXJlYSwwKXx8bi5pblJhbmdlKHQueCx0LnkscikmJmEucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpvLGluZGV4OnN9KX0sITApLGF9ZnVuY3Rpb24gR2koZSx0LG4scil7bGV0IGk9W107ZnVuY3Rpb24gYShlLG4sYSl7bGV0e3N0YXJ0QW5nbGU6byxlbmRBbmdsZTpzfT1lLmdldFByb3BzKFtgc3RhcnRBbmdsZWAsYGVuZEFuZ2xlYF0scikse2FuZ2xlOmN9PVl0KGUse3g6dC54LHk6dC55fSk7WnQoYyxvLHMpJiZpLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6bixpbmRleDphfSl9cmV0dXJuIEhpKGUsbix0LGEpLGl9ZnVuY3Rpb24gS2koZSx0LG4scixpLGEpe2xldCBvPVtdLHM9VWkobiksYz0xLzA7ZnVuY3Rpb24gbChuLGwsdSl7bGV0IGQ9bi5pblJhbmdlKHQueCx0LnksaSk7aWYociYmIWQpcmV0dXJuO2xldCBmPW4uZ2V0Q2VudGVyUG9pbnQoaSk7aWYoIShhfHxlLmlzUG9pbnRJbkFyZWEoZikpJiYhZClyZXR1cm47bGV0IHA9cyh0LGYpO3A8Yz8obz1be2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6bCxpbmRleDp1fV0sYz1wKTpwPT09YyYmby5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX0pfXJldHVybiBIaShlLG4sdCxsKSxvfWZ1bmN0aW9uIHFpKGUsdCxuLHIsaSxhKXtyZXR1cm4hYSYmIWUuaXNQb2ludEluQXJlYSh0KT9bXTpuPT09YHJgJiYhcj9HaShlLHQsbixpKTpLaShlLHQsbixyLGksYSl9ZnVuY3Rpb24gSmkoZSx0LG4scixpKXtsZXQgYT1bXSxvPW49PT1geGA/YGluWFJhbmdlYDpgaW5ZUmFuZ2VgLHM9ITE7cmV0dXJuIEhpKGUsbix0LChlLHIsYyk9PntlW29dJiZlW29dKHRbbl0saSkmJihhLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6cixpbmRleDpjfSksc3x8PWUuaW5SYW5nZSh0LngsdC55LGkpKX0pLHImJiFzP1tdOmF9dmFyIFlpPXtldmFsdWF0ZUludGVyYWN0aW9uSXRlbXM6SGksbW9kZXM6e2luZGV4KGUsdCxuLHIpe2xldCBpPUZyKHQsZSksYT1uLmF4aXN8fGB4YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9XaShlLGksYSxyLG8pOnFpKGUsaSxhLCExLHIsbyksYz1bXTtyZXR1cm4gcy5sZW5ndGg/KGUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goZT0+e2xldCB0PXNbMF0uaW5kZXgsbj1lLmRhdGFbdF07biYmIW4uc2tpcCYmYy5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmUuaW5kZXgsaW5kZXg6dH0pfSksYyk6W119LGRhdGFzZXQoZSx0LG4scil7bGV0IGk9RnIodCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9XaShlLGksYSxyLG8pOnFpKGUsaSxhLCExLHIsbyk7aWYocy5sZW5ndGg+MCl7bGV0IHQ9c1swXS5kYXRhc2V0SW5kZXgsbj1lLmdldERhdGFzZXRNZXRhKHQpLmRhdGE7cz1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzLnB1c2goe2VsZW1lbnQ6bltlXSxkYXRhc2V0SW5kZXg6dCxpbmRleDplfSl9cmV0dXJuIHN9LHBvaW50KGUsdCxuLHIpe3JldHVybiBXaShlLEZyKHQsZSksbi5heGlzfHxgeHlgLHIsbi5pbmNsdWRlSW52aXNpYmxlfHwhMSl9LG5lYXJlc3QoZSx0LG4scil7bGV0IGk9RnIodCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITE7cmV0dXJuIHFpKGUsaSxhLG4uaW50ZXJzZWN0LHIsbyl9LHgoZSx0LG4scil7cmV0dXJuIEppKGUsRnIodCxlKSxgeGAsbi5pbnRlcnNlY3Qscil9LHkoZSx0LG4scil7cmV0dXJuIEppKGUsRnIodCxlKSxgeWAsbi5pbnRlcnNlY3Qscil9fX0sWGk9W2BsZWZ0YCxgdG9wYCxgcmlnaHRgLGBib3R0b21gXTtmdW5jdGlvbiBaaShlLHQpe3JldHVybiBlLmZpbHRlcihlPT5lLnBvcz09PXQpfWZ1bmN0aW9uIFFpKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGU9PlhpLmluZGV4T2YoZS5wb3MpPT09LTEmJmUuYm94LmF4aXM9PT10KX1mdW5jdGlvbiAkaShlLHQpe3JldHVybiBlLnNvcnQoKGUsbik9PntsZXQgcj10P246ZSxpPXQ/ZTpuO3JldHVybiByLndlaWdodD09PWkud2VpZ2h0P3IuaW5kZXgtaS5pbmRleDpyLndlaWdodC1pLndlaWdodH0pfWZ1bmN0aW9uIGVhKGUpe2xldCB0PVtdLG4scixpLGEsbyxzO2ZvcihuPTAscj0oZXx8W10pLmxlbmd0aDtuPHI7KytuKWk9ZVtuXSx7cG9zaXRpb246YSxvcHRpb25zOntzdGFjazpvLHN0YWNrV2VpZ2h0OnM9MX19PWksdC5wdXNoKHtpbmRleDpuLGJveDppLHBvczphLGhvcml6b250YWw6aS5pc0hvcml6b250YWwoKSx3ZWlnaHQ6aS53ZWlnaHQsc3RhY2s6byYmYStvLHN0YWNrV2VpZ2h0OnN9KTtyZXR1cm4gdH1mdW5jdGlvbiB0YShlKXtsZXQgdD17fTtmb3IobGV0IG4gb2YgZSl7bGV0e3N0YWNrOmUscG9zOnIsc3RhY2tXZWlnaHQ6aX09bjtpZighZXx8IVhpLmluY2x1ZGVzKHIpKWNvbnRpbnVlO2xldCBhPXRbZV18fCh0W2VdPXtjb3VudDowLHBsYWNlZDowLHdlaWdodDowLHNpemU6MH0pO2EuY291bnQrKyxhLndlaWdodCs9aX1yZXR1cm4gdH1mdW5jdGlvbiBuYShlLHQpe2xldCBuPXRhKGUpLHt2Qm94TWF4V2lkdGg6cixoQm94TWF4SGVpZ2h0Oml9PXQsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2Epe3M9ZVthXTtsZXR7ZnVsbFNpemU6b309cy5ib3gsYz1uW3Muc3RhY2tdLGw9YyYmcy5zdGFja1dlaWdodC9jLndlaWdodDtzLmhvcml6b250YWw/KHMud2lkdGg9bD9sKnI6byYmdC5hdmFpbGFibGVXaWR0aCxzLmhlaWdodD1pKToocy53aWR0aD1yLHMuaGVpZ2h0PWw/bCppOm8mJnQuYXZhaWxhYmxlSGVpZ2h0KX1yZXR1cm4gbn1mdW5jdGlvbiByYShlKXtsZXQgdD1lYShlKSxuPSRpKHQuZmlsdGVyKGU9PmUuYm94LmZ1bGxTaXplKSwhMCkscj0kaShaaSh0LGBsZWZ0YCksITApLGk9JGkoWmkodCxgcmlnaHRgKSksYT0kaShaaSh0LGB0b3BgKSwhMCksbz0kaShaaSh0LGBib3R0b21gKSkscz1RaSh0LGB4YCksYz1RaSh0LGB5YCk7cmV0dXJue2Z1bGxTaXplOm4sbGVmdEFuZFRvcDpyLmNvbmNhdChhKSxyaWdodEFuZEJvdHRvbTppLmNvbmNhdChjKS5jb25jYXQobykuY29uY2F0KHMpLGNoYXJ0QXJlYTpaaSh0LGBjaGFydEFyZWFgKSx2ZXJ0aWNhbDpyLmNvbmNhdChpKS5jb25jYXQoYyksaG9yaXpvbnRhbDphLmNvbmNhdChvKS5jb25jYXQocyl9fWZ1bmN0aW9uIGlhKGUsdCxuLHIpe3JldHVybiBNYXRoLm1heChlW25dLHRbbl0pK01hdGgubWF4KGVbcl0sdFtyXSl9ZnVuY3Rpb24gYWEoZSx0KXtlLnRvcD1NYXRoLm1heChlLnRvcCx0LnRvcCksZS5sZWZ0PU1hdGgubWF4KGUubGVmdCx0LmxlZnQpLGUuYm90dG9tPU1hdGgubWF4KGUuYm90dG9tLHQuYm90dG9tKSxlLnJpZ2h0PU1hdGgubWF4KGUucmlnaHQsdC5yaWdodCl9ZnVuY3Rpb24gb2EoZSx0LG4scil7bGV0e3BvczppLGJveDphfT1uLG89ZS5tYXhQYWRkaW5nO2lmKCFGKGkpKXtuLnNpemUmJihlW2ldLT1uLnNpemUpO2xldCB0PXJbbi5zdGFja118fHtzaXplOjAsY291bnQ6MX07dC5zaXplPU1hdGgubWF4KHQuc2l6ZSxuLmhvcml6b250YWw/YS5oZWlnaHQ6YS53aWR0aCksbi5zaXplPXQuc2l6ZS90LmNvdW50LGVbaV0rPW4uc2l6ZX1hLmdldFBhZGRpbmcmJmFhKG8sYS5nZXRQYWRkaW5nKCkpO2xldCBzPU1hdGgubWF4KDAsdC5vdXRlcldpZHRoLWlhKG8sZSxgbGVmdGAsYHJpZ2h0YCkpLGM9TWF0aC5tYXgoMCx0Lm91dGVySGVpZ2h0LWlhKG8sZSxgdG9wYCxgYm90dG9tYCkpLGw9cyE9PWUudyx1PWMhPT1lLmg7cmV0dXJuIGUudz1zLGUuaD1jLG4uaG9yaXpvbnRhbD97c2FtZTpsLG90aGVyOnV9OntzYW1lOnUsb3RoZXI6bH19ZnVuY3Rpb24gc2EoZSl7bGV0IHQ9ZS5tYXhQYWRkaW5nO2Z1bmN0aW9uIG4obil7bGV0IHI9TWF0aC5tYXgodFtuXS1lW25dLDApO3JldHVybiBlW25dKz1yLHJ9ZS55Kz1uKGB0b3BgKSxlLngrPW4oYGxlZnRgKSxuKGByaWdodGApLG4oYGJvdHRvbWApfWZ1bmN0aW9uIGNhKGUsdCl7bGV0IG49dC5tYXhQYWRkaW5nO2Z1bmN0aW9uIHIoZSl7bGV0IHI9e2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfTtyZXR1cm4gZS5mb3JFYWNoKGU9PntyW2VdPU1hdGgubWF4KHRbZV0sbltlXSl9KSxyfXJldHVybiByKGU/W2BsZWZ0YCxgcmlnaHRgXTpbYHRvcGAsYGJvdHRvbWBdKX1mdW5jdGlvbiBsYShlLHQsbixyKXtsZXQgaT1bXSxhLG8scyxjLGwsdTtmb3IoYT0wLG89ZS5sZW5ndGgsbD0wO2E8bzsrK2Epe3M9ZVthXSxjPXMuYm94LGMudXBkYXRlKHMud2lkdGh8fHQudyxzLmhlaWdodHx8dC5oLGNhKHMuaG9yaXpvbnRhbCx0KSk7bGV0e3NhbWU6byxvdGhlcjpkfT1vYSh0LG4scyxyKTtsfD1vJiZpLmxlbmd0aCx1fHw9ZCxjLmZ1bGxTaXplfHxpLnB1c2gocyl9cmV0dXJuIGwmJmxhKGksdCxuLHIpfHx1fWZ1bmN0aW9uIHVhKGUsdCxuLHIsaSl7ZS50b3A9bixlLmxlZnQ9dCxlLnJpZ2h0PXQrcixlLmJvdHRvbT1uK2ksZS53aWR0aD1yLGUuaGVpZ2h0PWl9ZnVuY3Rpb24gZGEoZSx0LG4scil7bGV0IGk9bi5wYWRkaW5nLHt4OmEseTpvfT10O2ZvcihsZXQgcyBvZiBlKXtsZXQgZT1zLmJveCxjPXJbcy5zdGFja118fHtjb3VudDoxLHBsYWNlZDowLHdlaWdodDoxfSxsPXMuc3RhY2tXZWlnaHQvYy53ZWlnaHR8fDE7aWYocy5ob3Jpem9udGFsKXtsZXQgcj10LncqbCxhPWMuc2l6ZXx8ZS5oZWlnaHQ7a3QoYy5zdGFydCkmJihvPWMuc3RhcnQpLGUuZnVsbFNpemU/dWEoZSxpLmxlZnQsbyxuLm91dGVyV2lkdGgtaS5yaWdodC1pLmxlZnQsYSk6dWEoZSx0LmxlZnQrYy5wbGFjZWQsbyxyLGEpLGMuc3RhcnQ9byxjLnBsYWNlZCs9cixvPWUuYm90dG9tfWVsc2V7bGV0IHI9dC5oKmwsbz1jLnNpemV8fGUud2lkdGg7a3QoYy5zdGFydCkmJihhPWMuc3RhcnQpLGUuZnVsbFNpemU/dWEoZSxhLGkudG9wLG8sbi5vdXRlckhlaWdodC1pLmJvdHRvbS1pLnRvcCk6dWEoZSxhLHQudG9wK2MucGxhY2VkLG8sciksYy5zdGFydD1hLGMucGxhY2VkKz1yLGE9ZS5yaWdodH19dC54PWEsdC55PW99dmFyIGZhPXthZGRCb3goZSx0KXtlLmJveGVzfHw9W10sdC5mdWxsU2l6ZT10LmZ1bGxTaXplfHwhMSx0LnBvc2l0aW9uPXQucG9zaXRpb258fGB0b3BgLHQud2VpZ2h0PXQud2VpZ2h0fHwwLHQuX2xheWVycz10Ll9sYXllcnN8fGZ1bmN0aW9uKCl7cmV0dXJuW3t6OjAsZHJhdyhlKXt0LmRyYXcoZSl9fV19LGUuYm94ZXMucHVzaCh0KX0scmVtb3ZlQm94KGUsdCl7bGV0IG49ZS5ib3hlcz9lLmJveGVzLmluZGV4T2YodCk6LTE7biE9PS0xJiZlLmJveGVzLnNwbGljZShuLDEpfSxjb25maWd1cmUoZSx0LG4pe3QuZnVsbFNpemU9bi5mdWxsU2l6ZSx0LnBvc2l0aW9uPW4ucG9zaXRpb24sdC53ZWlnaHQ9bi53ZWlnaHR9LHVwZGF0ZShlLHQsbixyKXtpZighZSlyZXR1cm47bGV0IGk9SihlLm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpLGE9TWF0aC5tYXgodC1pLndpZHRoLDApLG89TWF0aC5tYXgobi1pLmhlaWdodCwwKSxzPXJhKGUuYm94ZXMpLGM9cy52ZXJ0aWNhbCxsPXMuaG9yaXpvbnRhbDtCKGUuYm94ZXMsZT0+e3R5cGVvZiBlLmJlZm9yZUxheW91dD09YGZ1bmN0aW9uYCYmZS5iZWZvcmVMYXlvdXQoKX0pO2xldCB1PWMucmVkdWNlKChlLHQpPT50LmJveC5vcHRpb25zJiZ0LmJveC5vcHRpb25zLmRpc3BsYXk9PT0hMT9lOmUrMSwwKXx8MSxkPU9iamVjdC5mcmVlemUoe291dGVyV2lkdGg6dCxvdXRlckhlaWdodDpuLHBhZGRpbmc6aSxhdmFpbGFibGVXaWR0aDphLGF2YWlsYWJsZUhlaWdodDpvLHZCb3hNYXhXaWR0aDphLzIvdSxoQm94TWF4SGVpZ2h0Om8vMn0pLGY9T2JqZWN0LmFzc2lnbih7fSxpKTthYShmLEoocikpO2xldCBwPU9iamVjdC5hc3NpZ24oe21heFBhZGRpbmc6Zix3OmEsaDpvLHg6aS5sZWZ0LHk6aS50b3B9LGkpLG09bmEoYy5jb25jYXQobCksZCk7bGEocy5mdWxsU2l6ZSxwLGQsbSksbGEoYyxwLGQsbSksbGEobCxwLGQsbSkmJmxhKGMscCxkLG0pLHNhKHApLGRhKHMubGVmdEFuZFRvcCxwLGQsbSkscC54Kz1wLncscC55Kz1wLmgsZGEocy5yaWdodEFuZEJvdHRvbSxwLGQsbSksZS5jaGFydEFyZWE9e2xlZnQ6cC5sZWZ0LHRvcDpwLnRvcCxyaWdodDpwLmxlZnQrcC53LGJvdHRvbTpwLnRvcCtwLmgsaGVpZ2h0OnAuaCx3aWR0aDpwLnd9LEIocy5jaGFydEFyZWEsdD0+e2xldCBuPXQuYm94O09iamVjdC5hc3NpZ24obixlLmNoYXJ0QXJlYSksbi51cGRhdGUocC53LHAuaCx7bGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjB9KX0pfX0scGE9Y2xhc3N7YWNxdWlyZUNvbnRleHQoZSx0KXt9cmVsZWFzZUNvbnRleHQoZSl7cmV0dXJuITF9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7fXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LG4pe31nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIDF9Z2V0TWF4aW11bVNpemUoZSx0LG4scil7cmV0dXJuIHQ9TWF0aC5tYXgoMCx0fHxlLndpZHRoKSxufHw9ZS5oZWlnaHQse3dpZHRoOnQsaGVpZ2h0Ok1hdGgubWF4KDAscj9NYXRoLmZsb29yKHQvcik6bil9fWlzQXR0YWNoZWQoZSl7cmV0dXJuITB9dXBkYXRlQ29uZmlnKGUpe319LG1hPWNsYXNzIGV4dGVuZHMgcGF7YWNxdWlyZUNvbnRleHQoZSl7cmV0dXJuIGUmJmUuZ2V0Q29udGV4dCYmZS5nZXRDb250ZXh0KGAyZGApfHxudWxsfXVwZGF0ZUNvbmZpZyhlKXtlLm9wdGlvbnMuYW5pbWF0aW9uPSExfX0saGE9YCRjaGFydGpzYCxnYT17dG91Y2hzdGFydDpgbW91c2Vkb3duYCx0b3VjaG1vdmU6YG1vdXNlbW92ZWAsdG91Y2hlbmQ6YG1vdXNldXBgLHBvaW50ZXJlbnRlcjpgbW91c2VlbnRlcmAscG9pbnRlcmRvd246YG1vdXNlZG93bmAscG9pbnRlcm1vdmU6YG1vdXNlbW92ZWAscG9pbnRlcnVwOmBtb3VzZXVwYCxwb2ludGVybGVhdmU6YG1vdXNlb3V0YCxwb2ludGVyb3V0OmBtb3VzZW91dGB9LF9hPWU9PmU9PT1udWxsfHxlPT09YGA7ZnVuY3Rpb24gdmEoZSx0KXtsZXQgbj1lLnN0eWxlLHI9ZS5nZXRBdHRyaWJ1dGUoYGhlaWdodGApLGk9ZS5nZXRBdHRyaWJ1dGUoYHdpZHRoYCk7aWYoZVtoYV09e2luaXRpYWw6e2hlaWdodDpyLHdpZHRoOmksc3R5bGU6e2Rpc3BsYXk6bi5kaXNwbGF5LGhlaWdodDpuLmhlaWdodCx3aWR0aDpuLndpZHRofX19LG4uZGlzcGxheT1uLmRpc3BsYXl8fGBibG9ja2Asbi5ib3hTaXppbmc9bi5ib3hTaXppbmd8fGBib3JkZXItYm94YCxfYShpKSl7bGV0IHQ9VnIoZSxgd2lkdGhgKTt0IT09dm9pZCAwJiYoZS53aWR0aD10KX1pZihfYShyKSl7aWYoZS5zdHlsZS5oZWlnaHQ9PT1gYCllLmhlaWdodD1lLndpZHRoLyh0fHwyKTtlbHNle2xldCB0PVZyKGUsYGhlaWdodGApO3QhPT12b2lkIDAmJihlLmhlaWdodD10KX19cmV0dXJuIGV9dmFyIHlhPUJyP3twYXNzaXZlOiEwfTohMTtmdW5jdGlvbiBiYShlLHQsbil7ZSYmZS5hZGRFdmVudExpc3RlbmVyKHQsbix5YSl9ZnVuY3Rpb24geGEoZSx0LG4pe2UmJmUuY2FudmFzJiZlLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsbix5YSl9ZnVuY3Rpb24gU2EoZSx0KXtsZXQgbj1nYVtlLnR5cGVdfHxlLnR5cGUse3g6cix5Oml9PUZyKGUsdCk7cmV0dXJue3R5cGU6bixjaGFydDp0LG5hdGl2ZTplLHg6cj09PXZvaWQgMD9udWxsOnIseTppPT09dm9pZCAwP251bGw6aX19ZnVuY3Rpb24gQ2EoZSx0KXtmb3IobGV0IG4gb2YgZSlpZihuPT09dHx8bi5jb250YWlucyh0KSlyZXR1cm4hMH1mdW5jdGlvbiB3YShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PUNhKG4uYWRkZWROb2RlcyxyKSx0JiY9IUNhKG4ucmVtb3ZlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX1mdW5jdGlvbiBUYShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PUNhKG4ucmVtb3ZlZE5vZGVzLHIpLHQmJj0hQ2Eobi5hZGRlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX12YXIgRWE9bmV3IE1hcCxEYT0wO2Z1bmN0aW9uIE9hKCl7bGV0IGU9d2luZG93LmRldmljZVBpeGVsUmF0aW87ZSE9PURhJiYoRGE9ZSxFYS5mb3JFYWNoKCh0LG4pPT57bi5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PWUmJnQoKX0pKX1mdW5jdGlvbiBrYShlLHQpe0VhLnNpemV8fHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLE9hKSxFYS5zZXQoZSx0KX1mdW5jdGlvbiBBYShlKXtFYS5kZWxldGUoZSksRWEuc2l6ZXx8d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsT2EpfWZ1bmN0aW9uIGphKGUsdCxuKXtsZXQgcj1lLmNhbnZhcyxpPXImJkRyKHIpO2lmKCFpKXJldHVybjtsZXQgYT11bigoZSx0KT0+e2xldCByPWkuY2xpZW50V2lkdGg7bihlLHQpLHI8aS5jbGllbnRXaWR0aCYmbigpfSx3aW5kb3cpLG89bmV3IFJlc2l6ZU9ic2VydmVyKGU9PntsZXQgdD1lWzBdLG49dC5jb250ZW50UmVjdC53aWR0aCxyPXQuY29udGVudFJlY3QuaGVpZ2h0OyhuIT09MHx8ciE9PTApJiZhKG4scil9KTtyZXR1cm4gby5vYnNlcnZlKGkpLGthKGUsYSksb31mdW5jdGlvbiBNYShlLHQsbil7biYmbi5kaXNjb25uZWN0KCksdD09PWByZXNpemVgJiZBYShlKX1mdW5jdGlvbiBOYShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT11bih0PT57ZS5jdHghPT1udWxsJiZuKFNhKHQsZSkpfSxlKTtyZXR1cm4gYmEocix0LGkpLGl9dmFyIFBhPWNsYXNzIGV4dGVuZHMgcGF7YWNxdWlyZUNvbnRleHQoZSx0KXtsZXQgbj1lJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKTtyZXR1cm4gbiYmbi5jYW52YXM9PT1lPyh2YShlLHQpLG4pOm51bGx9cmVsZWFzZUNvbnRleHQoZSl7bGV0IHQ9ZS5jYW52YXM7aWYoIXRbaGFdKXJldHVybiExO2xldCBuPXRbaGFdLmluaXRpYWw7W2BoZWlnaHRgLGB3aWR0aGBdLmZvckVhY2goZT0+e2xldCByPW5bZV07TihyKT90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0ZShlLHIpfSk7bGV0IHI9bi5zdHlsZXx8e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZT0+e3Quc3R5bGVbZV09cltlXX0pLHQud2lkdGg9dC53aWR0aCxkZWxldGUgdFtoYV0sITB9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCk7bGV0IHI9ZS4kcHJveGllc3x8PXt9O3JbdF09KHthdHRhY2g6d2EsZGV0YWNoOlRhLHJlc2l6ZTpqYX1bdF18fE5hKShlLHQsbil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpe2xldCBuPWUuJHByb3hpZXN8fD17fSxyPW5bdF07ciYmKCh7YXR0YWNoOk1hLGRldGFjaDpNYSxyZXNpemU6TWF9W3RdfHx4YSkoZSx0LHIpLG5bdF09dm9pZCAwKX1nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiBScihlLHQsbixyKX1pc0F0dGFjaGVkKGUpe2xldCB0PWUmJkRyKGUpO3JldHVybiEhKHQmJnQuaXNDb25uZWN0ZWQpfX07ZnVuY3Rpb24gRmEoZSl7cmV0dXJuIUVyKCl8fHR5cGVvZiBPZmZzY3JlZW5DYW52YXM8YHVgJiZlIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzP21hOlBhfXZhciBJYT1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9e307c3RhdGljIGRlZmF1bHRSb3V0ZXM9dm9pZCAwO3g7eTthY3RpdmU9ITE7b3B0aW9uczskYW5pbWF0aW9uczt0b29sdGlwUG9zaXRpb24oZSl7bGV0e3g6dCx5Om59PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWBdLGUpO3JldHVybnt4OnQseTpufX1oYXNWYWx1ZSgpe3JldHVybiBVdCh0aGlzLngpJiZVdCh0aGlzLnkpfWdldFByb3BzKGUsdCl7bGV0IG49dGhpcy4kYW5pbWF0aW9ucztpZighdHx8IW4pcmV0dXJuIHRoaXM7bGV0IHI9e307cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1uW2VdJiZuW2VdLmFjdGl2ZSgpP25bZV0uX3RvOnRoaXNbZV19KSxyfX07ZnVuY3Rpb24gTGEoZSx0KXtsZXQgbj1lLm9wdGlvbnMudGlja3Mscj1SYShlKSxpPU1hdGgubWluKG4ubWF4VGlja3NMaW1pdHx8cixyKSxhPW4ubWFqb3IuZW5hYmxlZD9CYSh0KTpbXSxvPWEubGVuZ3RoLHM9YVswXSxjPWFbby0xXSxsPVtdO2lmKG8+aSlyZXR1cm4gVmEodCxsLGEsby9pKSxsO2xldCB1PXphKGEsdCxpKTtpZihvPjApe2xldCBlLG4scj1vPjE/TWF0aC5yb3VuZCgoYy1zKS8oby0xKSk6bnVsbDtmb3IoSGEodCxsLHUsTihyKT8wOnMtcixzKSxlPTAsbj1vLTE7ZTxuO2UrKylIYSh0LGwsdSxhW2VdLGFbZSsxXSk7cmV0dXJuIEhhKHQsbCx1LGMsTihyKT90Lmxlbmd0aDpjK3IpLGx9cmV0dXJuIEhhKHQsbCx1KSxsfWZ1bmN0aW9uIFJhKGUpe2xldCB0PWUub3B0aW9ucy5vZmZzZXQsbj1lLl90aWNrU2l6ZSgpLHI9ZS5fbGVuZ3RoL24rICshdCxpPWUuX21heExlbmd0aC9uO3JldHVybiBNYXRoLmZsb29yKE1hdGgubWluKHIsaSkpfWZ1bmN0aW9uIHphKGUsdCxuKXtsZXQgcj1VYShlKSxpPXQubGVuZ3RoL247aWYoIXIpcmV0dXJuIE1hdGgubWF4KGksMSk7bGV0IGE9VnQocik7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aC0xO2U8dDtlKyspe2xldCB0PWFbZV07aWYodD5pKXJldHVybiB0fXJldHVybiBNYXRoLm1heChpLDEpfWZ1bmN0aW9uIEJhKGUpe2xldCB0PVtdLG4scjtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dLm1ham9yJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gVmEoZSx0LG4scil7bGV0IGk9MCxhPW5bMF0sbztmb3Iocj1NYXRoLmNlaWwociksbz0wO288ZS5sZW5ndGg7bysrKW89PT1hJiYodC5wdXNoKGVbb10pLGkrKyxhPW5baSpyXSl9ZnVuY3Rpb24gSGEoZSx0LG4scixpKXtsZXQgYT1SKHIsMCksbz1NYXRoLm1pbihSKGksZS5sZW5ndGgpLGUubGVuZ3RoKSxzPTAsYyxsLHU7Zm9yKG49TWF0aC5jZWlsKG4pLGkmJihjPWktcixuPWMvTWF0aC5mbG9vcihjL24pKSx1PWE7dTwwOylzKyssdT1NYXRoLnJvdW5kKGErcypuKTtmb3IobD1NYXRoLm1heChhLDApO2w8bztsKyspbD09PXUmJih0LnB1c2goZVtsXSkscysrLHU9TWF0aC5yb3VuZChhK3MqbikpfWZ1bmN0aW9uIFVhKGUpe2xldCB0PWUubGVuZ3RoLG4scjtpZih0PDIpcmV0dXJuITE7Zm9yKHI9ZVswXSxuPTE7bjx0OysrbilpZihlW25dLWVbbi0xXSE9PXIpcmV0dXJuITE7cmV0dXJuIHJ9dmFyIFdhPWU9PmU9PT1gbGVmdGA/YHJpZ2h0YDplPT09YHJpZ2h0YD9gbGVmdGA6ZSxHYT0oZSx0LG4pPT50PT09YHRvcGB8fHQ9PT1gbGVmdGA/ZVt0XStuOmVbdF0tbixLYT0oZSx0KT0+TWF0aC5taW4odHx8ZSxlKTtmdW5jdGlvbiBxYShlLHQpe2xldCBuPVtdLHI9ZS5sZW5ndGgvdCxpPWUubGVuZ3RoLGE9MDtmb3IoO2E8aTthKz1yKW4ucHVzaChlW01hdGguZmxvb3IoYSldKTtyZXR1cm4gbn1mdW5jdGlvbiBKYShlLHQsbil7bGV0IHI9ZS50aWNrcy5sZW5ndGgsaT1NYXRoLm1pbih0LHItMSksYT1lLl9zdGFydFBpeGVsLG89ZS5fZW5kUGl4ZWwscz0xZS02LGM9ZS5nZXRQaXhlbEZvclRpY2soaSksbDtpZighKG4mJihsPXI9PT0xP01hdGgubWF4KGMtYSxvLWMpOnQ9PT0wPyhlLmdldFBpeGVsRm9yVGljaygxKS1jKS8yOihjLWUuZ2V0UGl4ZWxGb3JUaWNrKGktMSkpLzIsYys9aTx0P2w6LWwsYzxhLXN8fGM+bytzKSkpcmV0dXJuIGN9ZnVuY3Rpb24gWWEoZSx0KXtCKGUsZT0+e2xldCBuPWUuZ2Mscj1uLmxlbmd0aC8yLGk7aWYocj50KXtmb3IoaT0wO2k8cjsrK2kpZGVsZXRlIGUuZGF0YVtuW2ldXTtuLnNwbGljZSgwLHIpfX0pfWZ1bmN0aW9uIFhhKGUpe3JldHVybiBlLmRyYXdUaWNrcz9lLnRpY2tMZW5ndGg6MH1mdW5jdGlvbiBaYShlLHQpe2lmKCFlLmRpc3BsYXkpcmV0dXJuIDA7bGV0IG49WShlLmZvbnQsdCkscj1KKGUucGFkZGluZyk7cmV0dXJuKFAoZS50ZXh0KT9lLnRleHQubGVuZ3RoOjEpKm4ubGluZUhlaWdodCtyLmhlaWdodH1mdW5jdGlvbiBRYShlLHQpe3JldHVybiBvcihlLHtzY2FsZTp0LHR5cGU6YHNjYWxlYH0pfWZ1bmN0aW9uICRhKGUsdCxuKXtyZXR1cm4gb3IoZSx7dGljazpuLGluZGV4OnQsdHlwZTpgdGlja2B9KX1mdW5jdGlvbiBlbyhlLHQsbil7bGV0IHI9Zm4oZSk7cmV0dXJuKG4mJnQhPT1gcmlnaHRgfHwhbiYmdD09PWByaWdodGApJiYocj1XYShyKSkscn1mdW5jdGlvbiB0byhlLHQsbixyKXtsZXR7dG9wOmksbGVmdDphLGJvdHRvbTpvLHJpZ2h0OnMsY2hhcnQ6Y309ZSx7Y2hhcnRBcmVhOmwsc2NhbGVzOnV9PWMsZD0wLGYscCxtLGg9by1pLGc9cy1hO2lmKGUuaXNIb3Jpem9udGFsKCkpe2lmKHA9SyhyLGEscyksRihuKSl7bGV0IGU9T2JqZWN0LmtleXMobilbMF0scj1uW2VdO209dVtlXS5nZXRQaXhlbEZvclZhbHVlKHIpK2gtdH1lbHNlIG09bj09PWBjZW50ZXJgPyhsLmJvdHRvbStsLnRvcCkvMitoLXQ6R2EoZSxuLHQpO2Y9cy1hfWVsc2V7aWYoRihuKSl7bGV0IGU9T2JqZWN0LmtleXMobilbMF0scj1uW2VdO3A9dVtlXS5nZXRQaXhlbEZvclZhbHVlKHIpLWcrdH1lbHNlIHA9bj09PWBjZW50ZXJgPyhsLmxlZnQrbC5yaWdodCkvMi1nK3Q6R2EoZSxuLHQpO209SyhyLG8saSksZD1uPT09YGxlZnRgPy1VOlV9cmV0dXJue3RpdGxlWDpwLHRpdGxlWTptLG1heFdpZHRoOmYscm90YXRpb246ZH19dmFyIG5vPWNsYXNzIGUgZXh0ZW5kcyBJYXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuaWQ9ZS5pZCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5jdHg9ZS5jdHgsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMudG9wPXZvaWQgMCx0aGlzLmJvdHRvbT12b2lkIDAsdGhpcy5sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5fbWFyZ2lucz17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LHRoaXMubWF4V2lkdGg9dm9pZCAwLHRoaXMubWF4SGVpZ2h0PXZvaWQgMCx0aGlzLnBhZGRpbmdUb3A9dm9pZCAwLHRoaXMucGFkZGluZ0JvdHRvbT12b2lkIDAsdGhpcy5wYWRkaW5nTGVmdD12b2lkIDAsdGhpcy5wYWRkaW5nUmlnaHQ9dm9pZCAwLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5sYWJlbFJvdGF0aW9uPXZvaWQgMCx0aGlzLm1pbj12b2lkIDAsdGhpcy5tYXg9dm9pZCAwLHRoaXMuX3JhbmdlPXZvaWQgMCx0aGlzLnRpY2tzPVtdLHRoaXMuX2dyaWRMaW5lSXRlbXM9bnVsbCx0aGlzLl9sYWJlbEl0ZW1zPW51bGwsdGhpcy5fbGFiZWxTaXplcz1udWxsLHRoaXMuX2xlbmd0aD0wLHRoaXMuX21heExlbmd0aD0wLHRoaXMuX2xvbmdlc3RUZXh0Q2FjaGU9e30sdGhpcy5fc3RhcnRQaXhlbD12b2lkIDAsdGhpcy5fZW5kUGl4ZWw9dm9pZCAwLHRoaXMuX3JldmVyc2VQaXhlbHM9ITEsdGhpcy5fdXNlck1heD12b2lkIDAsdGhpcy5fdXNlck1pbj12b2lkIDAsdGhpcy5fc3VnZ2VzdGVkTWF4PXZvaWQgMCx0aGlzLl9zdWdnZXN0ZWRNaW49dm9pZCAwLHRoaXMuX3RpY2tzTGVuZ3RoPTAsdGhpcy5fYm9yZGVyVmFsdWU9MCx0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExLHRoaXMuJGNvbnRleHQ9dm9pZCAwfWluaXQoZSl7dGhpcy5vcHRpb25zPWUuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSksdGhpcy5heGlzPWUuYXhpcyx0aGlzLl91c2VyTWluPXRoaXMucGFyc2UoZS5taW4pLHRoaXMuX3VzZXJNYXg9dGhpcy5wYXJzZShlLm1heCksdGhpcy5fc3VnZ2VzdGVkTWluPXRoaXMucGFyc2UoZS5zdWdnZXN0ZWRNaW4pLHRoaXMuX3N1Z2dlc3RlZE1heD10aGlzLnBhcnNlKGUuc3VnZ2VzdGVkTWF4KX1wYXJzZShlLHQpe3JldHVybiBlfWdldFVzZXJCb3VuZHMoKXtsZXR7X3VzZXJNaW46ZSxfdXNlck1heDp0LF9zdWdnZXN0ZWRNaW46bixfc3VnZ2VzdGVkTWF4OnJ9PXRoaXM7cmV0dXJuIGU9TChlLDEvMCksdD1MKHQsLTEvMCksbj1MKG4sMS8wKSxyPUwociwtMS8wKSx7bWluOkwoZSxuKSxtYXg6TCh0LHIpLG1pbkRlZmluZWQ6SShlKSxtYXhEZWZpbmVkOkkodCl9fWdldE1pbk1heChlKXtsZXR7bWluOnQsbWF4Om4sbWluRGVmaW5lZDpyLG1heERlZmluZWQ6aX09dGhpcy5nZXRVc2VyQm91bmRzKCksYTtpZihyJiZpKXJldHVybnttaW46dCxtYXg6bn07bGV0IG89dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2ZvcihsZXQgcz0wLGM9by5sZW5ndGg7czxjOysrcylhPW9bc10uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcyxlKSxyfHwodD1NYXRoLm1pbih0LGEubWluKSksaXx8KG49TWF0aC5tYXgobixhLm1heCkpO3JldHVybiB0PWkmJnQ+bj9uOnQsbj1yJiZ0Pm4/dDpuLHttaW46TCh0LEwobix0KSksbWF4OkwobixMKHQsbikpfX1nZXRQYWRkaW5nKCl7cmV0dXJue2xlZnQ6dGhpcy5wYWRkaW5nTGVmdHx8MCx0b3A6dGhpcy5wYWRkaW5nVG9wfHwwLHJpZ2h0OnRoaXMucGFkZGluZ1JpZ2h0fHwwLGJvdHRvbTp0aGlzLnBhZGRpbmdCb3R0b218fDB9fWdldFRpY2tzKCl7cmV0dXJuIHRoaXMudGlja3N9Z2V0TGFiZWxzKCl7bGV0IGU9dGhpcy5jaGFydC5kYXRhO3JldHVybiB0aGlzLm9wdGlvbnMubGFiZWxzfHwodGhpcy5pc0hvcml6b250YWwoKT9lLnhMYWJlbHM6ZS55TGFiZWxzKXx8ZS5sYWJlbHN8fFtdfWdldExhYmVsSXRlbXMoZT10aGlzLmNoYXJ0LmNoYXJ0QXJlYSl7cmV0dXJuIHRoaXMuX2xhYmVsSXRlbXN8fD10aGlzLl9jb21wdXRlTGFiZWxJdGVtcyhlKX1iZWZvcmVMYXlvdXQoKXt0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExfWJlZm9yZVVwZGF0ZSgpe3oodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSxbdGhpc10pfXVwZGF0ZShlLHQsbil7bGV0e2JlZ2luQXRaZXJvOnIsZ3JhY2U6aSx0aWNrczphfT10aGlzLm9wdGlvbnMsbz1hLnNhbXBsZVNpemU7dGhpcy5iZWZvcmVVcGRhdGUoKSx0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW49T2JqZWN0LmFzc2lnbih7bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LG4pLHRoaXMudGlja3M9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLmJlZm9yZVNldERpbWVuc2lvbnMoKSx0aGlzLnNldERpbWVuc2lvbnMoKSx0aGlzLmFmdGVyU2V0RGltZW5zaW9ucygpLHRoaXMuX21heExlbmd0aD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgrbi5sZWZ0K24ucmlnaHQ6dGhpcy5oZWlnaHQrbi50b3Arbi5ib3R0b20sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZHx8PSh0aGlzLmJlZm9yZURhdGFMaW1pdHMoKSx0aGlzLmRldGVybWluZURhdGFMaW1pdHMoKSx0aGlzLmFmdGVyRGF0YUxpbWl0cygpLHRoaXMuX3JhbmdlPWFyKHRoaXMsaSxyKSwhMCksdGhpcy5iZWZvcmVCdWlsZFRpY2tzKCksdGhpcy50aWNrcz10aGlzLmJ1aWxkVGlja3MoKXx8W10sdGhpcy5hZnRlckJ1aWxkVGlja3MoKTtsZXQgcz1vPHRoaXMudGlja3MubGVuZ3RoO3RoaXMuX2NvbnZlcnRUaWNrc1RvTGFiZWxzKHM/cWEodGhpcy50aWNrcyxvKTp0aGlzLnRpY2tzKSx0aGlzLmNvbmZpZ3VyZSgpLHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuY2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksYS5kaXNwbGF5JiYoYS5hdXRvU2tpcHx8YS5zb3VyY2U9PT1gYXV0b2ApJiYodGhpcy50aWNrcz1MYSh0aGlzLHRoaXMudGlja3MpLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLmFmdGVyQXV0b1NraXAoKSkscyYmdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHModGhpcy50aWNrcyksdGhpcy5iZWZvcmVGaXQoKSx0aGlzLmZpdCgpLHRoaXMuYWZ0ZXJGaXQoKSx0aGlzLmFmdGVyVXBkYXRlKCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5vcHRpb25zLnJldmVyc2UsdCxuO3RoaXMuaXNIb3Jpem9udGFsKCk/KHQ9dGhpcy5sZWZ0LG49dGhpcy5yaWdodCk6KHQ9dGhpcy50b3Asbj10aGlzLmJvdHRvbSxlPSFlKSx0aGlzLl9zdGFydFBpeGVsPXQsdGhpcy5fZW5kUGl4ZWw9bix0aGlzLl9yZXZlcnNlUGl4ZWxzPWUsdGhpcy5fbGVuZ3RoPW4tdCx0aGlzLl9hbGlnblRvUGl4ZWxzPXRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzfWFmdGVyVXBkYXRlKCl7eih0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsW3RoaXNdKX1iZWZvcmVTZXREaW1lbnNpb25zKCl7eih0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucyxbdGhpc10pfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PTAsdGhpcy5yaWdodD10aGlzLndpZHRoKToodGhpcy5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsdGhpcy50b3A9MCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCksdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1RvcD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTB9YWZ0ZXJTZXREaW1lbnNpb25zKCl7eih0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLFt0aGlzXSl9X2NhbGxIb29rcyhlKXt0aGlzLmNoYXJ0Lm5vdGlmeVBsdWdpbnMoZSx0aGlzLmdldENvbnRleHQoKSkseih0aGlzLm9wdGlvbnNbZV0sW3RoaXNdKX1iZWZvcmVEYXRhTGltaXRzKCl7dGhpcy5fY2FsbEhvb2tzKGBiZWZvcmVEYXRhTGltaXRzYCl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe31hZnRlckRhdGFMaW1pdHMoKXt0aGlzLl9jYWxsSG9va3MoYGFmdGVyRGF0YUxpbWl0c2ApfWJlZm9yZUJ1aWxkVGlja3MoKXt0aGlzLl9jYWxsSG9va3MoYGJlZm9yZUJ1aWxkVGlja3NgKX1idWlsZFRpY2tzKCl7cmV0dXJuW119YWZ0ZXJCdWlsZFRpY2tzKCl7dGhpcy5fY2FsbEhvb2tzKGBhZnRlckJ1aWxkVGlja3NgKX1iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKXt6KHRoaXMub3B0aW9ucy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLG4scixpO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWk9ZVtuXSxpLmxhYmVsPXoodC5jYWxsYmFjayxbaS52YWx1ZSxuLGVdLHRoaXMpfWFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCl7eih0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7eih0aGlzLm9wdGlvbnMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49S2EodGhpcy50aWNrcy5sZW5ndGgsZS50aWNrcy5tYXhUaWNrc0xpbWl0KSxyPXQubWluUm90YXRpb258fDAsaT10Lm1heFJvdGF0aW9uLGE9cixvLHMsYztpZighdGhpcy5faXNWaXNpYmxlKCl8fCF0LmRpc3BsYXl8fHI+PWl8fG48PTF8fCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt0aGlzLmxhYmVsUm90YXRpb249cjtyZXR1cm59bGV0IGw9dGhpcy5fZ2V0TGFiZWxTaXplcygpLHU9bC53aWRlc3Qud2lkdGgsZD1sLmhpZ2hlc3QuaGVpZ2h0LGY9Ryh0aGlzLmNoYXJ0LndpZHRoLXUsMCx0aGlzLm1heFdpZHRoKTtvPWUub2Zmc2V0P3RoaXMubWF4V2lkdGgvbjpmLyhuLTEpLHUrNj5vJiYobz1mLyhuLShlLm9mZnNldD8uNToxKSkscz10aGlzLm1heEhlaWdodC1YYShlLmdyaWQpLXQucGFkZGluZy1aYShlLnRpdGxlLHRoaXMuY2hhcnQub3B0aW9ucy5mb250KSxjPU1hdGguc3FydCh1KnUrZCpkKSxhPXF0KE1hdGgubWluKE1hdGguYXNpbihHKChsLmhpZ2hlc3QuaGVpZ2h0KzYpL28sLTEsMSkpLE1hdGguYXNpbihHKHMvYywtMSwxKSktTWF0aC5hc2luKEcoZC9jLC0xLDEpKSkpLGE9TWF0aC5tYXgocixNYXRoLm1pbihpLGEpKSksdGhpcy5sYWJlbFJvdGF0aW9uPWF9YWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7eih0aGlzLm9wdGlvbnMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uLFt0aGlzXSl9YWZ0ZXJBdXRvU2tpcCgpe31iZWZvcmVGaXQoKXt6KHRoaXMub3B0aW9ucy5iZWZvcmVGaXQsW3RoaXNdKX1maXQoKXtsZXQgZT17d2lkdGg6MCxoZWlnaHQ6MH0se2NoYXJ0OnQsb3B0aW9uczp7dGlja3M6bix0aXRsZTpyLGdyaWQ6aX19PXRoaXMsYT10aGlzLl9pc1Zpc2libGUoKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk7aWYoYSl7bGV0IGE9WmEocix0Lm9wdGlvbnMuZm9udCk7aWYobz8oZS53aWR0aD10aGlzLm1heFdpZHRoLGUuaGVpZ2h0PVhhKGkpK2EpOihlLmhlaWdodD10aGlzLm1heEhlaWdodCxlLndpZHRoPVhhKGkpK2EpLG4uZGlzcGxheSYmdGhpcy50aWNrcy5sZW5ndGgpe2xldHtmaXJzdDp0LGxhc3Q6cix3aWRlc3Q6aSxoaWdoZXN0OmF9PXRoaXMuX2dldExhYmVsU2l6ZXMoKSxzPW4ucGFkZGluZyoyLGM9S3QodGhpcy5sYWJlbFJvdGF0aW9uKSxsPU1hdGguY29zKGMpLHU9TWF0aC5zaW4oYyk7aWYobyl7bGV0IHQ9bi5taXJyb3I/MDp1Kmkud2lkdGgrbCphLmhlaWdodDtlLmhlaWdodD1NYXRoLm1pbih0aGlzLm1heEhlaWdodCxlLmhlaWdodCt0K3MpfWVsc2V7bGV0IHQ9bi5taXJyb3I/MDpsKmkud2lkdGgrdSphLmhlaWdodDtlLndpZHRoPU1hdGgubWluKHRoaXMubWF4V2lkdGgsZS53aWR0aCt0K3MpfXRoaXMuX2NhbGN1bGF0ZVBhZGRpbmcodCxyLHUsbCl9fXRoaXMuX2hhbmRsZU1hcmdpbnMoKSxvPyh0aGlzLndpZHRoPXRoaXMuX2xlbmd0aD10LndpZHRoLXRoaXMuX21hcmdpbnMubGVmdC10aGlzLl9tYXJnaW5zLnJpZ2h0LHRoaXMuaGVpZ2h0PWUuaGVpZ2h0KToodGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuX2xlbmd0aD10LmhlaWdodC10aGlzLl9tYXJnaW5zLnRvcC10aGlzLl9tYXJnaW5zLmJvdHRvbSl9X2NhbGN1bGF0ZVBhZGRpbmcoZSx0LG4scil7bGV0e3RpY2tzOnthbGlnbjppLHBhZGRpbmc6YX0scG9zaXRpb246b309dGhpcy5vcHRpb25zLHM9dGhpcy5sYWJlbFJvdGF0aW9uIT09MCxjPW8hPT1gdG9wYCYmdGhpcy5heGlzPT09YHhgO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2xldCBvPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApLXRoaXMubGVmdCxsPXRoaXMucmlnaHQtdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGgtMSksdT0wLGQ9MDtzP2M/KHU9ciplLndpZHRoLGQ9bip0LmhlaWdodCk6KHU9biplLmhlaWdodCxkPXIqdC53aWR0aCk6aT09PWBzdGFydGA/ZD10LndpZHRoOmk9PT1gZW5kYD91PWUud2lkdGg6aSE9PWBpbm5lcmAmJih1PWUud2lkdGgvMixkPXQud2lkdGgvMiksdGhpcy5wYWRkaW5nTGVmdD1NYXRoLm1heCgodS1vK2EpKnRoaXMud2lkdGgvKHRoaXMud2lkdGgtbyksMCksdGhpcy5wYWRkaW5nUmlnaHQ9TWF0aC5tYXgoKGQtbCthKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLWwpLDApfWVsc2V7bGV0IG49dC5oZWlnaHQvMixyPWUuaGVpZ2h0LzI7aT09PWBzdGFydGA/KG49MCxyPWUuaGVpZ2h0KTppPT09YGVuZGAmJihuPXQuaGVpZ2h0LHI9MCksdGhpcy5wYWRkaW5nVG9wPW4rYSx0aGlzLnBhZGRpbmdCb3R0b209cithfX1faGFuZGxlTWFyZ2lucygpe3RoaXMuX21hcmdpbnMmJih0aGlzLl9tYXJnaW5zLmxlZnQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nTGVmdCx0aGlzLl9tYXJnaW5zLmxlZnQpLHRoaXMuX21hcmdpbnMudG9wPU1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCx0aGlzLl9tYXJnaW5zLnRvcCksdGhpcy5fbWFyZ2lucy5yaWdodD1NYXRoLm1heCh0aGlzLnBhZGRpbmdSaWdodCx0aGlzLl9tYXJnaW5zLnJpZ2h0KSx0aGlzLl9tYXJnaW5zLmJvdHRvbT1NYXRoLm1heCh0aGlzLnBhZGRpbmdCb3R0b20sdGhpcy5fbWFyZ2lucy5ib3R0b20pKX1hZnRlckZpdCgpe3oodGhpcy5vcHRpb25zLmFmdGVyRml0LFt0aGlzXSl9aXNIb3Jpem9udGFsKCl7bGV0e2F4aXM6ZSxwb3NpdGlvbjp0fT10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9PT1gdG9wYHx8dD09PWBib3R0b21gfHxlPT09YHhgfWlzRnVsbFNpemUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplfV9jb252ZXJ0VGlja3NUb0xhYmVscyhlKXt0aGlzLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpLHRoaXMuZ2VuZXJhdGVUaWNrTGFiZWxzKGUpO2xldCB0LG47Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspTihlW3RdLmxhYmVsKSYmKGUuc3BsaWNlKHQsMSksbi0tLHQtLSk7dGhpcy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpfV9nZXRMYWJlbFNpemVzKCl7bGV0IGU9dGhpcy5fbGFiZWxTaXplcztpZighZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemUsbj10aGlzLnRpY2tzO3Q8bi5sZW5ndGgmJihuPXFhKG4sdCkpLHRoaXMuX2xhYmVsU2l6ZXM9ZT10aGlzLl9jb21wdXRlTGFiZWxTaXplcyhuLG4ubGVuZ3RoLHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KX1yZXR1cm4gZX1fY29tcHV0ZUxhYmVsU2l6ZXMoZSx0LG4pe2xldHtjdHg6cixfbG9uZ2VzdFRleHRDYWNoZTppfT10aGlzLGE9W10sbz1bXSxzPU1hdGguZmxvb3IodC9LYSh0LG4pKSxjPTAsbD0wLHUsZCxmLHAsbSxoLGcsXyx2LHksYjtmb3IodT0wO3U8dDt1Kz1zKXtpZihwPWVbdV0ubGFiZWwsbT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKHUpLHIuZm9udD1oPW0uc3RyaW5nLGc9aVtoXT1pW2hdfHx7ZGF0YTp7fSxnYzpbXX0sXz1tLmxpbmVIZWlnaHQsdj15PTAsIU4ocCkmJiFQKHApKXY9TG4ocixnLmRhdGEsZy5nYyx2LHApLHk9XztlbHNlIGlmKFAocCkpZm9yKGQ9MCxmPXAubGVuZ3RoO2Q8ZjsrK2QpYj1wW2RdLCFOKGIpJiYhUChiKSYmKHY9TG4ocixnLmRhdGEsZy5nYyx2LGIpLHkrPV8pO2EucHVzaCh2KSxvLnB1c2goeSksYz1NYXRoLm1heCh2LGMpLGw9TWF0aC5tYXgoeSxsKX1ZYShpLHQpO2xldCB4PWEuaW5kZXhPZihjKSxTPW8uaW5kZXhPZihsKSxDPWU9Pih7d2lkdGg6YVtlXXx8MCxoZWlnaHQ6b1tlXXx8MH0pO3JldHVybntmaXJzdDpDKDApLGxhc3Q6Qyh0LTEpLHdpZGVzdDpDKHgpLGhpZ2hlc3Q6QyhTKSx3aWR0aHM6YSxoZWlnaHRzOm99fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGV9Z2V0UGl4ZWxGb3JWYWx1ZShlLHQpe3JldHVybiBOYU59Z2V0VmFsdWVGb3JQaXhlbChlKXt9Z2V0UGl4ZWxGb3JUaWNrKGUpe2xldCB0PXRoaXMudGlja3M7cmV0dXJuIGU8MHx8ZT50Lmxlbmd0aC0xP251bGw6dGhpcy5nZXRQaXhlbEZvclZhbHVlKHRbZV0udmFsdWUpfWdldFBpeGVsRm9yRGVjaW1hbChlKXt0aGlzLl9yZXZlcnNlUGl4ZWxzJiYoZT0xLWUpO2xldCB0PXRoaXMuX3N0YXJ0UGl4ZWwrZSp0aGlzLl9sZW5ndGg7cmV0dXJuIFF0KHRoaXMuX2FsaWduVG9QaXhlbHM/em4odGhpcy5jaGFydCx0LDApOnQpfWdldERlY2ltYWxGb3JQaXhlbChlKXtsZXQgdD0oZS10aGlzLl9zdGFydFBpeGVsKS90aGlzLl9sZW5ndGg7cmV0dXJuIHRoaXMuX3JldmVyc2VQaXhlbHM/MS10OnR9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRCYXNlVmFsdWUoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXM7cmV0dXJuIGU8MCYmdDwwP3Q6ZT4wJiZ0PjA/ZTowfWdldENvbnRleHQoZSl7bGV0IHQ9dGhpcy50aWNrc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gbi4kY29udGV4dHx8PSRhKHRoaXMuZ2V0Q29udGV4dCgpLGUsbil9cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1RYSh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzKX1fdGlja1NpemUoKXtsZXQgZT10aGlzLm9wdGlvbnMudGlja3MsdD1LdCh0aGlzLmxhYmVsUm90YXRpb24pLG49TWF0aC5hYnMoTWF0aC5jb3ModCkpLHI9TWF0aC5hYnMoTWF0aC5zaW4odCkpLGk9dGhpcy5fZ2V0TGFiZWxTaXplcygpLGE9ZS5hdXRvU2tpcFBhZGRpbmd8fDAsbz1pP2kud2lkZXN0LndpZHRoK2E6MCxzPWk/aS5oaWdoZXN0LmhlaWdodCthOjA7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/cypuPm8qcj9vL246cy9yOnMqcjxvKm4/cy9uOm8vcn1faXNWaXNpYmxlKCl7bGV0IGU9dGhpcy5vcHRpb25zLmRpc3BsYXk7cmV0dXJuIGU9PT1gYXV0b2A/dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpLmxlbmd0aD4wOiEhZX1fY29tcHV0ZUdyaWRMaW5lSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5jaGFydCxyPXRoaXMub3B0aW9ucyx7Z3JpZDppLHBvc2l0aW9uOmEsYm9yZGVyOm99PXIscz1pLm9mZnNldCxjPXRoaXMuaXNIb3Jpem9udGFsKCksbD10aGlzLnRpY2tzLmxlbmd0aCsgKyEhcyx1PVhhKGkpLGQ9W10sZj1vLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHA9Zi5kaXNwbGF5P2Yud2lkdGg6MCxtPXAvMixoPWZ1bmN0aW9uKGUpe3JldHVybiB6bihuLGUscCl9LGcsXyx2LHksYix4LFMsQyx3LFQsRSxEO2lmKGE9PT1gdG9wYClnPWgodGhpcy5ib3R0b20pLHg9dGhpcy5ib3R0b20tdSxDPWctbSxUPWgoZS50b3ApK20sRD1lLmJvdHRvbTtlbHNlIGlmKGE9PT1gYm90dG9tYClnPWgodGhpcy50b3ApLFQ9ZS50b3AsRD1oKGUuYm90dG9tKS1tLHg9ZyttLEM9dGhpcy50b3ArdTtlbHNlIGlmKGE9PT1gbGVmdGApZz1oKHRoaXMucmlnaHQpLGI9dGhpcy5yaWdodC11LFM9Zy1tLHc9aChlLmxlZnQpK20sRT1lLnJpZ2h0O2Vsc2UgaWYoYT09PWByaWdodGApZz1oKHRoaXMubGVmdCksdz1lLmxlZnQsRT1oKGUucmlnaHQpLW0sYj1nK20sUz10aGlzLmxlZnQrdTtlbHNlIGlmKHQ9PT1geGApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUudG9wK2UuYm90dG9tKS8yKy41KTtlbHNlIGlmKEYoYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9VD1lLnRvcCxEPWUuYm90dG9tLHg9ZyttLEM9eCt1fWVsc2UgaWYodD09PWB5YCl7aWYoYT09PWBjZW50ZXJgKWc9aCgoZS5sZWZ0K2UucmlnaHQpLzIpO2Vsc2UgaWYoRihhKSl7bGV0IGU9T2JqZWN0LmtleXMoYSlbMF0sdD1hW2VdO2c9aCh0aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpKX1iPWctbSxTPWItdSx3PWUubGVmdCxFPWUucmlnaHR9bGV0IE89UihyLnRpY2tzLm1heFRpY2tzTGltaXQsbCksZWU9TWF0aC5tYXgoMSxNYXRoLmNlaWwobC9PKSk7Zm9yKF89MDtfPGw7Xys9ZWUpe2xldCBlPXRoaXMuZ2V0Q29udGV4dChfKSx0PWkuc2V0Q29udGV4dChlKSxyPW8uc2V0Q29udGV4dChlKSxhPXQubGluZVdpZHRoLGw9dC5jb2xvcix1PXIuZGFzaHx8W10sZj1yLmRhc2hPZmZzZXQscD10LnRpY2tXaWR0aCxtPXQudGlja0NvbG9yLGg9dC50aWNrQm9yZGVyRGFzaHx8W10sZz10LnRpY2tCb3JkZXJEYXNoT2Zmc2V0O3Y9SmEodGhpcyxfLHMpLHYhPT12b2lkIDAmJih5PXpuKG4sdixhKSxjP2I9Uz13PUU9eTp4PUM9VD1EPXksZC5wdXNoKHt0eDE6Yix0eTE6eCx0eDI6Uyx0eTI6Qyx4MTp3LHkxOlQseDI6RSx5MjpELHdpZHRoOmEsY29sb3I6bCxib3JkZXJEYXNoOnUsYm9yZGVyRGFzaE9mZnNldDpmLHRpY2tXaWR0aDpwLHRpY2tDb2xvcjptLHRpY2tCb3JkZXJEYXNoOmgsdGlja0JvcmRlckRhc2hPZmZzZXQ6Z30pKX1yZXR1cm4gdGhpcy5fdGlja3NMZW5ndGg9bCx0aGlzLl9ib3JkZXJWYWx1ZT1nLGR9X2NvbXB1dGVMYWJlbEl0ZW1zKGUpe2xldCB0PXRoaXMuYXhpcyxuPXRoaXMub3B0aW9ucyx7cG9zaXRpb246cix0aWNrczppfT1uLGE9dGhpcy5pc0hvcml6b250YWwoKSxvPXRoaXMudGlja3Mse2FsaWduOnMsY3Jvc3NBbGlnbjpjLHBhZGRpbmc6bCxtaXJyb3I6dX09aSxkPVhhKG4uZ3JpZCksZj1kK2wscD11Py1sOmYsbT0tS3QodGhpcy5sYWJlbFJvdGF0aW9uKSxoPVtdLGcsXyx2LHksYix4LFMsQyx3LFQsRSxELE89YG1pZGRsZWA7aWYocj09PWB0b3BgKXg9dGhpcy5ib3R0b20tcCxTPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtlbHNlIGlmKHI9PT1gYm90dG9tYCl4PXRoaXMudG9wK3AsUz10aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7ZWxzZSBpZihyPT09YGxlZnRgKXtsZXQgZT10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpO1M9ZS50ZXh0QWxpZ24sYj1lLnh9ZWxzZSBpZihyPT09YHJpZ2h0YCl7bGV0IGU9dGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChkKTtTPWUudGV4dEFsaWduLGI9ZS54fWVsc2UgaWYodD09PWB4YCl7aWYocj09PWBjZW50ZXJgKXg9KGUudG9wK2UuYm90dG9tKS8yK2Y7ZWxzZSBpZihGKHIpKXtsZXQgZT1PYmplY3Qua2V5cyhyKVswXSx0PXJbZV07eD10aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpK2Z9Uz10aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCl9ZWxzZSBpZih0PT09YHlgKXtpZihyPT09YGNlbnRlcmApYj0oZS5sZWZ0K2UucmlnaHQpLzItZjtlbHNlIGlmKEYocikpe2xldCBlPU9iamVjdC5rZXlzKHIpWzBdLHQ9cltlXTtiPXRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCl9Uz10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpLnRleHRBbGlnbn10PT09YHlgJiYocz09PWBzdGFydGA/Tz1gdG9wYDpzPT09YGVuZGAmJihPPWBib3R0b21gKSk7bGV0IGVlPXRoaXMuX2dldExhYmVsU2l6ZXMoKTtmb3IoZz0wLF89by5sZW5ndGg7ZzxfOysrZyl7dj1vW2ddLHk9di5sYWJlbDtsZXQgZT1pLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGcpKTtDPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKGcpK2kubGFiZWxPZmZzZXQsdz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGcpLFQ9dy5saW5lSGVpZ2h0LEU9UCh5KT95Lmxlbmd0aDoxO2xldCB0PUUvMixuPWUuY29sb3Iscz1lLnRleHRTdHJva2VDb2xvcixsPWUudGV4dFN0cm9rZVdpZHRoLGQ9UzthPyhiPUMsUz09PWBpbm5lcmAmJihkPWc9PT1fLTE/dGhpcy5vcHRpb25zLnJldmVyc2U/YGxlZnRgOmByaWdodGA6Zz09PTA/dGhpcy5vcHRpb25zLnJldmVyc2U/YHJpZ2h0YDpgbGVmdGA6YGNlbnRlcmApLEQ9cj09PWB0b3BgP2M9PT1gbmVhcmB8fG0hPT0wPy1FKlQrVC8yOmM9PT1gY2VudGVyYD8tZWUuaGlnaGVzdC5oZWlnaHQvMi10KlQrVDotZWUuaGlnaGVzdC5oZWlnaHQrVC8yOmM9PT1gbmVhcmB8fG0hPT0wP1QvMjpjPT09YGNlbnRlcmA/ZWUuaGlnaGVzdC5oZWlnaHQvMi10KlQ6ZWUuaGlnaGVzdC5oZWlnaHQtRSpULHUmJihEKj0tMSksbSE9PTAmJiFlLnNob3dMYWJlbEJhY2tkcm9wJiYoYis9VC8yKk1hdGguc2luKG0pKSk6KHg9QyxEPSgxLUUpKlQvMik7bGV0IGY7aWYoZS5zaG93TGFiZWxCYWNrZHJvcCl7bGV0IHQ9SihlLmJhY2tkcm9wUGFkZGluZyksbj1lZS5oZWlnaHRzW2ddLHI9ZWUud2lkdGhzW2ddLGk9RC10LnRvcCxhPTAtdC5sZWZ0O3N3aXRjaChPKXtjYXNlYG1pZGRsZWA6aS09bi8yO2JyZWFrO2Nhc2VgYm90dG9tYDppLT1ufXN3aXRjaChTKXtjYXNlYGNlbnRlcmA6YS09ci8yO2JyZWFrO2Nhc2VgcmlnaHRgOmEtPXI7YnJlYWs7Y2FzZWBpbm5lcmA6Zz09PV8tMT9hLT1yOmc+MCYmKGEtPXIvMil9Zj17bGVmdDphLHRvcDppLHdpZHRoOnIrdC53aWR0aCxoZWlnaHQ6bit0LmhlaWdodCxjb2xvcjplLmJhY2tkcm9wQ29sb3J9fWgucHVzaCh7bGFiZWw6eSxmb250OncsdGV4dE9mZnNldDpELG9wdGlvbnM6e3JvdGF0aW9uOm0sY29sb3I6bixzdHJva2VDb2xvcjpzLHN0cm9rZVdpZHRoOmwsdGV4dEFsaWduOmQsdGV4dEJhc2VsaW5lOk8sdHJhbnNsYXRpb246W2IseF0sYmFja2Ryb3A6Zn19KX1yZXR1cm4gaH1fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpe2xldHtwb3NpdGlvbjplLHRpY2tzOnR9PXRoaXMub3B0aW9ucztpZigtS3QodGhpcy5sYWJlbFJvdGF0aW9uKSlyZXR1cm4gZT09PWB0b3BgP2BsZWZ0YDpgcmlnaHRgO2xldCBuPWBjZW50ZXJgO3JldHVybiB0LmFsaWduPT09YHN0YXJ0YD9uPWBsZWZ0YDp0LmFsaWduPT09YGVuZGA/bj1gcmlnaHRgOnQuYWxpZ249PT1gaW5uZXJgJiYobj1gaW5uZXJgKSxufV9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGUpe2xldHtwb3NpdGlvbjp0LHRpY2tzOntjcm9zc0FsaWduOm4sbWlycm9yOnIscGFkZGluZzppfX09dGhpcy5vcHRpb25zLGE9dGhpcy5fZ2V0TGFiZWxTaXplcygpLG89ZStpLHM9YS53aWRlc3Qud2lkdGgsYyxsO3JldHVybiB0PT09YGxlZnRgP3I/KGw9dGhpcy5yaWdodCtpLG49PT1gbmVhcmA/Yz1gbGVmdGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwrPXMvMik6KGM9YHJpZ2h0YCxsKz1zKSk6KGw9dGhpcy5yaWdodC1vLG49PT1gbmVhcmA/Yz1gcmlnaHRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsLT1zLzIpOihjPWBsZWZ0YCxsPXRoaXMubGVmdCkpOnQ9PT1gcmlnaHRgP3I/KGw9dGhpcy5sZWZ0K2ksbj09PWBuZWFyYD9jPWByaWdodGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwtPXMvMik6KGM9YGxlZnRgLGwtPXMpKToobD10aGlzLmxlZnQrbyxuPT09YG5lYXJgP2M9YGxlZnRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsKz1zLzIpOihjPWByaWdodGAsbD10aGlzLnJpZ2h0KSk6Yz1gcmlnaHRgLHt0ZXh0QWxpZ246Yyx4Omx9fV9jb21wdXRlTGFiZWxBcmVhKCl7aWYodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcilyZXR1cm47bGV0IGU9dGhpcy5jaGFydCx0PXRoaXMub3B0aW9ucy5wb3NpdGlvbjtpZih0PT09YGxlZnRgfHx0PT09YHJpZ2h0YClyZXR1cm57dG9wOjAsbGVmdDp0aGlzLmxlZnQsYm90dG9tOmUuaGVpZ2h0LHJpZ2h0OnRoaXMucmlnaHR9O2lmKHQ9PT1gdG9wYHx8dD09PWBib3R0b21gKXJldHVybnt0b3A6dGhpcy50b3AsbGVmdDowLGJvdHRvbTp0aGlzLmJvdHRvbSxyaWdodDplLndpZHRofX1kcmF3QmFja2dyb3VuZCgpe2xldHtjdHg6ZSxvcHRpb25zOntiYWNrZ3JvdW5kQ29sb3I6dH0sbGVmdDpuLHRvcDpyLHdpZHRoOmksaGVpZ2h0OmF9PXRoaXM7dCYmKGUuc2F2ZSgpLGUuZmlsbFN0eWxlPXQsZS5maWxsUmVjdChuLHIsaSxhKSxlLnJlc3RvcmUoKSl9Z2V0TGluZVdpZHRoRm9yVmFsdWUoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLmdyaWQ7aWYoIXRoaXMuX2lzVmlzaWJsZSgpfHwhdC5kaXNwbGF5KXJldHVybiAwO2xldCBuPXRoaXMudGlja3MuZmluZEluZGV4KHQ9PnQudmFsdWU9PT1lKTtyZXR1cm4gbj49MD90LnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KG4pKS5saW5lV2lkdGg6MH1kcmF3R3JpZChlKXtsZXQgdD10aGlzLm9wdGlvbnMuZ3JpZCxuPXRoaXMuY3R4LHI9dGhpcy5fZ3JpZExpbmVJdGVtc3x8PXRoaXMuX2NvbXB1dGVHcmlkTGluZUl0ZW1zKGUpLGksYSxvPShlLHQscik9Pnshci53aWR0aHx8IXIuY29sb3J8fChuLnNhdmUoKSxuLmxpbmVXaWR0aD1yLndpZHRoLG4uc3Ryb2tlU3R5bGU9ci5jb2xvcixuLnNldExpbmVEYXNoKHIuYm9yZGVyRGFzaHx8W10pLG4ubGluZURhc2hPZmZzZXQ9ci5ib3JkZXJEYXNoT2Zmc2V0LG4uYmVnaW5QYXRoKCksbi5tb3ZlVG8oZS54LGUueSksbi5saW5lVG8odC54LHQueSksbi5zdHJva2UoKSxuLnJlc3RvcmUoKSl9O2lmKHQuZGlzcGxheSlmb3IoaT0wLGE9ci5sZW5ndGg7aTxhOysraSl7bGV0IGU9cltpXTt0LmRyYXdPbkNoYXJ0QXJlYSYmbyh7eDplLngxLHk6ZS55MX0se3g6ZS54Mix5OmUueTJ9LGUpLHQuZHJhd1RpY2tzJiZvKHt4OmUudHgxLHk6ZS50eTF9LHt4OmUudHgyLHk6ZS50eTJ9LHtjb2xvcjplLnRpY2tDb2xvcix3aWR0aDplLnRpY2tXaWR0aCxib3JkZXJEYXNoOmUudGlja0JvcmRlckRhc2gsYm9yZGVyRGFzaE9mZnNldDplLnRpY2tCb3JkZXJEYXNoT2Zmc2V0fSl9fWRyYXdCb3JkZXIoKXtsZXR7Y2hhcnQ6ZSxjdHg6dCxvcHRpb25zOntib3JkZXI6bixncmlkOnJ9fT10aGlzLGk9bi5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxhPW4uZGlzcGxheT9pLndpZHRoOjA7aWYoIWEpcmV0dXJuO2xldCBvPXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoMCkpLmxpbmVXaWR0aCxzPXRoaXMuX2JvcmRlclZhbHVlLGMsbCx1LGQ7dGhpcy5pc0hvcml6b250YWwoKT8oYz16bihlLHRoaXMubGVmdCxhKS1hLzIsbD16bihlLHRoaXMucmlnaHQsbykrby8yLHU9ZD1zKToodT16bihlLHRoaXMudG9wLGEpLWEvMixkPXpuKGUsdGhpcy5ib3R0b20sbykrby8yLGM9bD1zKSx0LnNhdmUoKSx0LmxpbmVXaWR0aD1pLndpZHRoLHQuc3Ryb2tlU3R5bGU9aS5jb2xvcix0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGMsdSksdC5saW5lVG8obCxkKSx0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWRyYXdMYWJlbHMoZSl7aWYoIXRoaXMub3B0aW9ucy50aWNrcy5kaXNwbGF5KXJldHVybjtsZXQgdD10aGlzLmN0eCxuPXRoaXMuX2NvbXB1dGVMYWJlbEFyZWEoKTtuJiZXbih0LG4pO2xldCByPXRoaXMuZ2V0TGFiZWxJdGVtcyhlKTtmb3IobGV0IGUgb2Ygcil7bGV0IG49ZS5vcHRpb25zLHI9ZS5mb250LGk9ZS5sYWJlbCxhPWUudGV4dE9mZnNldDtZbih0LGksMCxhLHIsbil9biYmR24odCl9ZHJhd1RpdGxlKCl7bGV0e2N0eDplLG9wdGlvbnM6e3Bvc2l0aW9uOnQsdGl0bGU6bixyZXZlcnNlOnJ9fT10aGlzO2lmKCFuLmRpc3BsYXkpcmV0dXJuO2xldCBpPVkobi5mb250KSxhPUoobi5wYWRkaW5nKSxvPW4uYWxpZ24scz1pLmxpbmVIZWlnaHQvMjt0PT09YGJvdHRvbWB8fHQ9PT1gY2VudGVyYHx8Rih0KT8ocys9YS5ib3R0b20sUChuLnRleHQpJiYocys9aS5saW5lSGVpZ2h0KihuLnRleHQubGVuZ3RoLTEpKSk6cys9YS50b3A7bGV0e3RpdGxlWDpjLHRpdGxlWTpsLG1heFdpZHRoOnUscm90YXRpb246ZH09dG8odGhpcyxzLHQsbyk7WW4oZSxuLnRleHQsMCwwLGkse2NvbG9yOm4uY29sb3IsbWF4V2lkdGg6dSxyb3RhdGlvbjpkLHRleHRBbGlnbjplbyhvLHQsciksdGV4dEJhc2VsaW5lOmBtaWRkbGVgLHRyYW5zbGF0aW9uOltjLGxdfSl9ZHJhdyhlKXt0aGlzLl9pc1Zpc2libGUoKSYmKHRoaXMuZHJhd0JhY2tncm91bmQoKSx0aGlzLmRyYXdHcmlkKGUpLHRoaXMuZHJhd0JvcmRlcigpLHRoaXMuZHJhd1RpdGxlKCksdGhpcy5kcmF3TGFiZWxzKGUpKX1fbGF5ZXJzKCl7bGV0IHQ9dGhpcy5vcHRpb25zLG49dC50aWNrcyYmdC50aWNrcy56fHwwLHI9Uih0LmdyaWQmJnQuZ3JpZC56LC0xKSxpPVIodC5ib3JkZXImJnQuYm9yZGVyLnosMCk7cmV0dXJuIXRoaXMuX2lzVmlzaWJsZSgpfHx0aGlzLmRyYXchPT1lLnByb3RvdHlwZS5kcmF3P1t7ejpuLGRyYXc6ZT0+e3RoaXMuZHJhdyhlKX19XTpbe3o6cixkcmF3OmU9Pnt0aGlzLmRyYXdCYWNrZ3JvdW5kKCksdGhpcy5kcmF3R3JpZChlKSx0aGlzLmRyYXdUaXRsZSgpfX0se3o6aSxkcmF3OigpPT57dGhpcy5kcmF3Qm9yZGVyKCl9fSx7ejpuLGRyYXc6ZT0+e3RoaXMuZHJhd0xhYmVscyhlKX19XX1nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyhlKXtsZXQgdD10aGlzLmNoYXJ0LmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxuPXRoaXMuYXhpcytgQXhpc0lEYCxyPVtdLGksYTtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhOysraSl7bGV0IGE9dFtpXTthW25dPT09dGhpcy5pZCYmKCFlfHxhLnR5cGU9PT1lKSYmci5wdXNoKGEpfXJldHVybiByfV9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGUpe3JldHVybiBZKHRoaXMub3B0aW9ucy50aWNrcy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChlKSkuZm9udCl9X21heERpZ2l0cygpe2xldCBlPXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoMCkubGluZUhlaWdodDtyZXR1cm4odGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoOnRoaXMuaGVpZ2h0KS9lfX0scm89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudHlwZT1lLHRoaXMuc2NvcGU9dCx0aGlzLm92ZXJyaWRlPW4sdGhpcy5pdGVtcz1PYmplY3QuY3JlYXRlKG51bGwpfWlzRm9yVHlwZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLmNhbGwodGhpcy50eXBlLnByb3RvdHlwZSxlLnByb3RvdHlwZSl9cmVnaXN0ZXIoZSl7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLG47b28odCkmJihuPXRoaXMucmVnaXN0ZXIodCkpO2xldCByPXRoaXMuaXRlbXMsaT1lLmlkLGE9dGhpcy5zY29wZStgLmAraTtpZighaSl0aHJvdyBFcnJvcihgY2xhc3MgZG9lcyBub3QgaGF2ZSBpZDogYCtlKTtyZXR1cm4gaSBpbiByP2E6KHJbaV09ZSxpbyhlLGEsbiksdGhpcy5vdmVycmlkZSYmcS5vdmVycmlkZShlLmlkLGUub3ZlcnJpZGVzKSxhKX1nZXQoZSl7cmV0dXJuIHRoaXMuaXRlbXNbZV19dW5yZWdpc3RlcihlKXtsZXQgdD10aGlzLml0ZW1zLG49ZS5pZCxyPXRoaXMuc2NvcGU7biBpbiB0JiZkZWxldGUgdFtuXSxyJiZuIGluIHFbcl0mJihkZWxldGUgcVtyXVtuXSx0aGlzLm92ZXJyaWRlJiZkZWxldGUgTW5bbl0pfX07ZnVuY3Rpb24gaW8oZSx0LG4pe2xldCByPXh0KE9iamVjdC5jcmVhdGUobnVsbCksW24/cS5nZXQobik6e30scS5nZXQodCksZS5kZWZhdWx0c10pO3Euc2V0KHQsciksZS5kZWZhdWx0Um91dGVzJiZhbyh0LGUuZGVmYXVsdFJvdXRlcyksZS5kZXNjcmlwdG9ycyYmcS5kZXNjcmliZSh0LGUuZGVzY3JpcHRvcnMpfWZ1bmN0aW9uIGFvKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57bGV0IHI9bi5zcGxpdChgLmApLGk9ci5wb3AoKSxhPVtlXS5jb25jYXQocikuam9pbihgLmApLG89dFtuXS5zcGxpdChgLmApLHM9by5wb3AoKSxjPW8uam9pbihgLmApO3Eucm91dGUoYSxpLGMscyl9KX1mdW5jdGlvbiBvbyhlKXtyZXR1cm5gaWRgaW4gZSYmYGRlZmF1bHRzYGluIGV9dmFyIFg9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb250cm9sbGVycz1uZXcgcm8oU2ksYGRhdGFzZXRzYCwhMCksdGhpcy5lbGVtZW50cz1uZXcgcm8oSWEsYGVsZW1lbnRzYCksdGhpcy5wbHVnaW5zPW5ldyBybyhPYmplY3QsYHBsdWdpbnNgKSx0aGlzLnNjYWxlcz1uZXcgcm8obm8sYHNjYWxlc2ApLHRoaXMuX3R5cGVkUmVnaXN0cmllcz1bdGhpcy5jb250cm9sbGVycyx0aGlzLnNjYWxlcyx0aGlzLmVsZW1lbnRzXX1hZGQoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUpfXJlbW92ZSguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlKX1hZGRDb250cm9sbGVycyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLmNvbnRyb2xsZXJzKX1hZGRFbGVtZW50cyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLmVsZW1lbnRzKX1hZGRQbHVnaW5zKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMucGx1Z2lucyl9YWRkU2NhbGVzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuc2NhbGVzKX1nZXRDb250cm9sbGVyKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLmNvbnRyb2xsZXJzLGBjb250cm9sbGVyYCl9Z2V0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5fZ2V0KGUsdGhpcy5lbGVtZW50cyxgZWxlbWVudGApfWdldFBsdWdpbihlKXtyZXR1cm4gdGhpcy5fZ2V0KGUsdGhpcy5wbHVnaW5zLGBwbHVnaW5gKX1nZXRTY2FsZShlKXtyZXR1cm4gdGhpcy5fZ2V0KGUsdGhpcy5zY2FsZXMsYHNjYWxlYCl9cmVtb3ZlQ29udHJvbGxlcnMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLmNvbnRyb2xsZXJzKX1yZW1vdmVFbGVtZW50cyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMuZWxlbWVudHMpfXJlbW92ZVBsdWdpbnMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLnBsdWdpbnMpfXJlbW92ZVNjYWxlcyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMuc2NhbGVzKX1fZWFjaChlLHQsbil7Wy4uLnRdLmZvckVhY2godD0+e2xldCByPW58fHRoaXMuX2dldFJlZ2lzdHJ5Rm9yVHlwZSh0KTtufHxyLmlzRm9yVHlwZSh0KXx8cj09PXRoaXMucGx1Z2lucyYmdC5pZD90aGlzLl9leGVjKGUscix0KTpCKHQsdD0+e2xldCByPW58fHRoaXMuX2dldFJlZ2lzdHJ5Rm9yVHlwZSh0KTt0aGlzLl9leGVjKGUscix0KX0pfSl9X2V4ZWMoZSx0LG4pe2xldCByPU90KGUpO3oobltgYmVmb3JlYCtyXSxbXSxuKSx0W2VdKG4pLHoobltgYWZ0ZXJgK3JdLFtdLG4pfV9nZXRSZWdpc3RyeUZvclR5cGUoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLl90eXBlZFJlZ2lzdHJpZXMubGVuZ3RoO3QrKyl7bGV0IG49dGhpcy5fdHlwZWRSZWdpc3RyaWVzW3RdO2lmKG4uaXNGb3JUeXBlKGUpKXJldHVybiBufXJldHVybiB0aGlzLnBsdWdpbnN9X2dldChlLHQsbil7bGV0IHI9dC5nZXQoZSk7aWYocj09PXZvaWQgMCl0aHJvdyBFcnJvcihgImArZStgIiBpcyBub3QgYSByZWdpc3RlcmVkIGArbitgLmApO3JldHVybiByfX0sc289Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pbml0PXZvaWQgMH1ub3RpZnkoZSx0LG4scil7aWYodD09PWBiZWZvcmVJbml0YCYmKHRoaXMuX2luaXQ9dGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoZSwhMCksdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsZSxgaW5zdGFsbGApKSx0aGlzLl9pbml0PT09dm9pZCAwKXJldHVybjtsZXQgaT1yP3RoaXMuX2Rlc2NyaXB0b3JzKGUpLmZpbHRlcihyKTp0aGlzLl9kZXNjcmlwdG9ycyhlKSxhPXRoaXMuX25vdGlmeShpLGUsdCxuKTtyZXR1cm4gdD09PWBhZnRlckRlc3Ryb3lgJiYodGhpcy5fbm90aWZ5KGksZSxgc3RvcGApLHRoaXMuX25vdGlmeSh0aGlzLl9pbml0LGUsYHVuaW5zdGFsbGApLHRoaXMuX2luaXQ9dm9pZCAwKSxhfV9ub3RpZnkoZSx0LG4scil7cnx8PXt9O2ZvcihsZXQgaSBvZiBlKXtsZXQgZT1pLnBsdWdpbixhPWVbbl07aWYoeihhLFt0LHIsaS5vcHRpb25zXSxlKT09PSExJiZyLmNhbmNlbGFibGUpcmV0dXJuITF9cmV0dXJuITB9aW52YWxpZGF0ZSgpe04odGhpcy5fY2FjaGUpfHwodGhpcy5fb2xkQ2FjaGU9dGhpcy5fY2FjaGUsdGhpcy5fY2FjaGU9dm9pZCAwKX1fZGVzY3JpcHRvcnMoZSl7aWYodGhpcy5fY2FjaGUpcmV0dXJuIHRoaXMuX2NhY2hlO2xldCB0PXRoaXMuX2NhY2hlPXRoaXMuX2NyZWF0ZURlc2NyaXB0b3JzKGUpO3JldHVybiB0aGlzLl9ub3RpZnlTdGF0ZUNoYW5nZXMoZSksdH1fY3JlYXRlRGVzY3JpcHRvcnMoZSx0KXtsZXQgbj1lJiZlLmNvbmZpZyxyPVIobi5vcHRpb25zJiZuLm9wdGlvbnMucGx1Z2lucyx7fSksaT1jbyhuKTtyZXR1cm4gcj09PSExJiYhdD9bXTp1byhlLGkscix0KX1fbm90aWZ5U3RhdGVDaGFuZ2VzKGUpe2xldCB0PXRoaXMuX29sZENhY2hlfHxbXSxuPXRoaXMuX2NhY2hlLHI9KGUsdCk9PmUuZmlsdGVyKGU9PiF0LnNvbWUodD0+ZS5wbHVnaW4uaWQ9PT10LnBsdWdpbi5pZCkpO3RoaXMuX25vdGlmeShyKHQsbiksZSxgc3RvcGApLHRoaXMuX25vdGlmeShyKG4sdCksZSxgc3RhcnRgKX19O2Z1bmN0aW9uIGNvKGUpe2xldCB0PXt9LG49W10scj1PYmplY3Qua2V5cyhYLnBsdWdpbnMuaXRlbXMpO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaChYLmdldFBsdWdpbihyW2VdKSk7bGV0IGk9ZS5wbHVnaW5zfHxbXTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl7bGV0IHI9aVtlXTtuLmluZGV4T2Yocik9PT0tMSYmKG4ucHVzaChyKSx0W3IuaWRdPSEwKX1yZXR1cm57cGx1Z2luczpuLGxvY2FsSWRzOnR9fWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIXQmJmU9PT0hMT9udWxsOmU9PT0hMD97fTplfWZ1bmN0aW9uIHVvKGUse3BsdWdpbnM6dCxsb2NhbElkczpufSxyLGkpe2xldCBhPVtdLG89ZS5nZXRDb250ZXh0KCk7Zm9yKGxldCBzIG9mIHQpe2xldCB0PXMuaWQsYz1sbyhyW3RdLGkpO2MhPT1udWxsJiZhLnB1c2goe3BsdWdpbjpzLG9wdGlvbnM6Zm8oZS5jb25maWcse3BsdWdpbjpzLGxvY2FsOm5bdF19LGMsbyl9KX1yZXR1cm4gYX1mdW5jdGlvbiBmbyhlLHtwbHVnaW46dCxsb2NhbDpufSxyLGkpe2xldCBhPWUucGx1Z2luU2NvcGVLZXlzKHQpLG89ZS5nZXRPcHRpb25TY29wZXMocixhKTtyZXR1cm4gbiYmdC5kZWZhdWx0cyYmby5wdXNoKHQuZGVmYXVsdHMpLGUuY3JlYXRlUmVzb2x2ZXIobyxpLFtgYF0se3NjcmlwdGFibGU6ITEsaW5kZXhhYmxlOiExLGFsbEtleXM6ITB9KX1mdW5jdGlvbiBwbyhlLHQpe2xldCBuPXEuZGF0YXNldHNbZV18fHt9O3JldHVybigodC5kYXRhc2V0c3x8e30pW2VdfHx7fSkuaW5kZXhBeGlzfHx0LmluZGV4QXhpc3x8bi5pbmRleEF4aXN8fGB4YH1mdW5jdGlvbiBtbyhlLHQpe2xldCBuPWU7cmV0dXJuIGU9PT1gX2luZGV4X2A/bj10OmU9PT1gX3ZhbHVlX2AmJihuPXQ9PT1geGA/YHlgOmB4YCksbn1mdW5jdGlvbiBobyhlLHQpe3JldHVybiBlPT09dD9gX2luZGV4X2A6YF92YWx1ZV9gfWZ1bmN0aW9uIGdvKGUpe2lmKGU9PT1geGB8fGU9PT1geWB8fGU9PT1gcmApcmV0dXJuIGV9ZnVuY3Rpb24gX28oZSl7aWYoZT09PWB0b3BgfHxlPT09YGJvdHRvbWApcmV0dXJuYHhgO2lmKGU9PT1gbGVmdGB8fGU9PT1gcmlnaHRgKXJldHVybmB5YH1mdW5jdGlvbiB2byhlLC4uLnQpe2lmKGdvKGUpKXJldHVybiBlO2ZvcihsZXQgbiBvZiB0KXtsZXQgdD1uLmF4aXN8fF9vKG4ucG9zaXRpb24pfHxlLmxlbmd0aD4xJiZnbyhlWzBdLnRvTG93ZXJDYXNlKCkpO2lmKHQpcmV0dXJuIHR9dGhyb3cgRXJyb3IoYENhbm5vdCBkZXRlcm1pbmUgdHlwZSBvZiAnJHtlfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApfWZ1bmN0aW9uIHlvKGUsdCxuKXtpZihuW3QrYEF4aXNJRGBdPT09ZSlyZXR1cm57YXhpczp0fX1mdW5jdGlvbiBibyhlLHQpe2lmKHQuZGF0YSYmdC5kYXRhLmRhdGFzZXRzKXtsZXQgbj10LmRhdGEuZGF0YXNldHMuZmlsdGVyKHQ9PnQueEF4aXNJRD09PWV8fHQueUF4aXNJRD09PWUpO2lmKG4ubGVuZ3RoKXJldHVybiB5byhlLGB4YCxuWzBdKXx8eW8oZSxgeWAsblswXSl9cmV0dXJue319ZnVuY3Rpb24geG8oZSx0KXtsZXQgbj1NbltlLnR5cGVdfHx7c2NhbGVzOnt9fSxyPXQuc2NhbGVzfHx7fSxpPXBvKGUudHlwZSx0KSxhPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2godD0+e2xldCBvPXJbdF07aWYoIUYobykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc2NhbGUgY29uZmlndXJhdGlvbiBmb3Igc2NhbGU6ICR7dH1gKTtpZihvLl9wcm94eSlyZXR1cm4gY29uc29sZS53YXJuKGBJZ25vcmluZyByZXNvbHZlciBwYXNzZWQgYXMgb3B0aW9ucyBmb3Igc2NhbGU6ICR7dH1gKTtsZXQgcz12byh0LG8sYm8odCxlKSxxLnNjYWxlc1tvLnR5cGVdKSxjPWhvKHMsaSksbD1uLnNjYWxlc3x8e307YVt0XT1TdChPYmplY3QuY3JlYXRlKG51bGwpLFt7YXhpczpzfSxvLGxbc10sbFtjXV0pfSksZS5kYXRhLmRhdGFzZXRzLmZvckVhY2gobj0+e2xldCBpPW4udHlwZXx8ZS50eXBlLG89bi5pbmRleEF4aXN8fHBvKGksdCkscz0oTW5baV18fHt9KS5zY2FsZXN8fHt9O09iamVjdC5rZXlzKHMpLmZvckVhY2goZT0+e2xldCB0PW1vKGUsbyksaT1uW3QrYEF4aXNJRGBdfHx0O2FbaV09YVtpXXx8T2JqZWN0LmNyZWF0ZShudWxsKSxTdChhW2ldLFt7YXhpczp0fSxyW2ldLHNbZV1dKX0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChlPT57bGV0IHQ9YVtlXTtTdCh0LFtxLnNjYWxlc1t0LnR5cGVdLHEuc2NhbGVdKX0pLGF9ZnVuY3Rpb24gU28oZSl7bGV0IHQ9ZS5vcHRpb25zfHw9e307dC5wbHVnaW5zPVIodC5wbHVnaW5zLHt9KSx0LnNjYWxlcz14byhlLHQpfWZ1bmN0aW9uIENvKGUpe3JldHVybiBlfHw9e30sZS5kYXRhc2V0cz1lLmRhdGFzZXRzfHxbXSxlLmxhYmVscz1lLmxhYmVsc3x8W10sZX1mdW5jdGlvbiB3byhlKXtyZXR1cm4gZXx8PXt9LGUuZGF0YT1DbyhlLmRhdGEpLFNvKGUpLGV9dmFyIFRvPW5ldyBNYXAsRW89bmV3IFNldDtmdW5jdGlvbiBEbyhlLHQpe2xldCBuPVRvLmdldChlKTtyZXR1cm4gbnx8KG49dCgpLFRvLnNldChlLG4pLEVvLmFkZChuKSksbn12YXIgT289KGUsdCxuKT0+e2xldCByPUR0KHQsbik7ciE9PXZvaWQgMCYmZS5hZGQocil9LGtvPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NvbmZpZz13byhlKSx0aGlzLl9zY29wZUNhY2hlPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJDYWNoZT1uZXcgTWFwfWdldCBwbGF0Zm9ybSgpe3JldHVybiB0aGlzLl9jb25maWcucGxhdGZvcm19Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5fY29uZmlnLnR5cGV9c2V0IHR5cGUoZSl7dGhpcy5fY29uZmlnLnR5cGU9ZX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9jb25maWcuZGF0YX1zZXQgZGF0YShlKXt0aGlzLl9jb25maWcuZGF0YT1DbyhlKX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9jb25maWcub3B0aW9uc31zZXQgb3B0aW9ucyhlKXt0aGlzLl9jb25maWcub3B0aW9ucz1lfWdldCBwbHVnaW5zKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5wbHVnaW5zfXVwZGF0ZSgpe2xldCBlPXRoaXMuX2NvbmZpZzt0aGlzLmNsZWFyQ2FjaGUoKSxTbyhlKX1jbGVhckNhY2hlKCl7dGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpLHRoaXMuX3Jlc29sdmVyQ2FjaGUuY2xlYXIoKX1kYXRhc2V0U2NvcGVLZXlzKGUpe3JldHVybiBEbyhlLCgpPT5bW2BkYXRhc2V0cy4ke2V9YCxgYF1dKX1kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKGUsdCl7cmV0dXJuIERvKGAke2V9LnRyYW5zaXRpb24uJHt0fWAsKCk9PltbYGRhdGFzZXRzLiR7ZX0udHJhbnNpdGlvbnMuJHt0fWAsYHRyYW5zaXRpb25zLiR7dH1gXSxbYGRhdGFzZXRzLiR7ZX1gLGBgXV0pfWRhdGFzZXRFbGVtZW50U2NvcGVLZXlzKGUsdCl7cmV0dXJuIERvKGAke2V9LSR7dH1gLCgpPT5bW2BkYXRhc2V0cy4ke2V9LmVsZW1lbnRzLiR7dH1gLGBkYXRhc2V0cy4ke2V9YCxgZWxlbWVudHMuJHt0fWAsYGBdXSl9cGx1Z2luU2NvcGVLZXlzKGUpe2xldCB0PWUuaWQsbj10aGlzLnR5cGU7cmV0dXJuIERvKGAke259LXBsdWdpbi0ke3R9YCwoKT0+W1tgcGx1Z2lucy4ke3R9YCwuLi5lLmFkZGl0aW9uYWxPcHRpb25TY29wZXN8fFtdXV0pfV9jYWNoZWRTY29wZXMoZSx0KXtsZXQgbj10aGlzLl9zY29wZUNhY2hlLHI9bi5nZXQoZSk7cmV0dXJuKCFyfHx0KSYmKHI9bmV3IE1hcCxuLnNldChlLHIpKSxyfWdldE9wdGlvblNjb3BlcyhlLHQsbil7bGV0e29wdGlvbnM6cix0eXBlOml9PXRoaXMsYT10aGlzLl9jYWNoZWRTY29wZXMoZSxuKSxvPWEuZ2V0KHQpO2lmKG8pcmV0dXJuIG87bGV0IHM9bmV3IFNldDt0LmZvckVhY2godD0+e2UmJihzLmFkZChlKSx0LmZvckVhY2godD0+T28ocyxlLHQpKSksdC5mb3JFYWNoKGU9Pk9vKHMscixlKSksdC5mb3JFYWNoKGU9Pk9vKHMsTW5baV18fHt9LGUpKSx0LmZvckVhY2goZT0+T28ocyxxLGUpKSx0LmZvckVhY2goZT0+T28ocyxObixlKSl9KTtsZXQgYz1BcnJheS5mcm9tKHMpO3JldHVybiBjLmxlbmd0aD09PTAmJmMucHVzaChPYmplY3QuY3JlYXRlKG51bGwpKSxFby5oYXModCkmJmEuc2V0KHQsYyksY31jaGFydE9wdGlvblNjb3Blcygpe2xldHtvcHRpb25zOmUsdHlwZTp0fT10aGlzO3JldHVybltlLE1uW3RdfHx7fSxxLmRhdGFzZXRzW3RdfHx7fSx7dHlwZTp0fSxxLE5uXX1yZXNvbHZlTmFtZWRPcHRpb25zKGUsdCxuLHI9W2BgXSl7bGV0IGk9eyRzaGFyZWQ6ITB9LHtyZXNvbHZlcjphLHN1YlByZWZpeGVzOm99PUFvKHRoaXMuX3Jlc29sdmVyQ2FjaGUsZSxyKSxzPWE7aWYoTW8oYSx0KSl7aS4kc2hhcmVkPSExLG49QXQobik/bigpOm47bGV0IHQ9dGhpcy5jcmVhdGVSZXNvbHZlcihlLG4sbyk7cz1jcihhLG4sdCl9Zm9yKGxldCBlIG9mIHQpaVtlXT1zW2VdO3JldHVybiBpfWNyZWF0ZVJlc29sdmVyKGUsdCxuPVtgYF0scil7bGV0e3Jlc29sdmVyOml9PUFvKHRoaXMuX3Jlc29sdmVyQ2FjaGUsZSxuKTtyZXR1cm4gRih0KT9jcihpLHQsdm9pZCAwLHIpOml9fTtmdW5jdGlvbiBBbyhlLHQsbil7bGV0IHI9ZS5nZXQodCk7cnx8KHI9bmV3IE1hcCxlLnNldCh0LHIpKTtsZXQgaT1uLmpvaW4oKSxhPXIuZ2V0KGkpO3JldHVybiBhfHwoYT17cmVzb2x2ZXI6c3IodCxuKSxzdWJQcmVmaXhlczpuLmZpbHRlcihlPT4hZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGBob3ZlcmApKX0sci5zZXQoaSxhKSksYX12YXIgam89ZT0+RihlKSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuc29tZSh0PT5BdChlW3RdKSk7ZnVuY3Rpb24gTW8oZSx0KXtsZXR7aXNTY3JpcHRhYmxlOm4saXNJbmRleGFibGU6cn09bHIoZSk7Zm9yKGxldCBpIG9mIHQpe2xldCB0PW4oaSksYT1yKGkpLG89KGF8fHQpJiZlW2ldO2lmKHQmJihBdChvKXx8am8obykpfHxhJiZQKG8pKXJldHVybiEwfXJldHVybiExfXZhciBObz1gNC41LjFgLFBvPVtgdG9wYCxgYm90dG9tYCxgbGVmdGAsYHJpZ2h0YCxgY2hhcnRBcmVhYF07ZnVuY3Rpb24gRm8oZSx0KXtyZXR1cm4gZT09PWB0b3BgfHxlPT09YGJvdHRvbWB8fFBvLmluZGV4T2YoZSk9PT0tMSYmdD09PWB4YH1mdW5jdGlvbiBJbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBuW2VdPT09cltlXT9uW3RdLXJbdF06bltlXS1yW2VdfX1mdW5jdGlvbiBMbyhlKXtsZXQgdD1lLmNoYXJ0LG49dC5vcHRpb25zLmFuaW1hdGlvbjt0Lm5vdGlmeVBsdWdpbnMoYGFmdGVyUmVuZGVyYCkseihuJiZuLm9uQ29tcGxldGUsW2VdLHQpfWZ1bmN0aW9uIFJvKGUpe2xldCB0PWUuY2hhcnQsbj10Lm9wdGlvbnMuYW5pbWF0aW9uO3oobiYmbi5vblByb2dyZXNzLFtlXSx0KX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gRXIoKSYmdHlwZW9mIGU9PWBzdHJpbmdgP2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk6ZSYmZS5sZW5ndGgmJihlPWVbMF0pLGUmJmUuY2FudmFzJiYoZT1lLmNhbnZhcyksZX12YXIgQm89e30sVm89ZT0+e2xldCB0PXpvKGUpO3JldHVybiBPYmplY3QudmFsdWVzKEJvKS5maWx0ZXIoZT0+ZS5jYW52YXM9PT10KS5wb3AoKX07ZnVuY3Rpb24gSG8oZSx0LG4pe2xldCByPU9iamVjdC5rZXlzKGUpO2ZvcihsZXQgaSBvZiByKXtsZXQgcj0raTtpZihyPj10KXtsZXQgYT1lW2ldO2RlbGV0ZSBlW2ldLChuPjB8fHI+dCkmJihlW3Irbl09YSl9fX1mdW5jdGlvbiBVbyhlLHQsbixyKXtyZXR1cm4hbnx8ZS50eXBlPT09YG1vdXNlb3V0YD9udWxsOnI/dDplfXZhciBXbz1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9cTtzdGF0aWMgaW5zdGFuY2VzPUJvO3N0YXRpYyBvdmVycmlkZXM9TW47c3RhdGljIHJlZ2lzdHJ5PVg7c3RhdGljIHZlcnNpb249Tm87c3RhdGljIGdldENoYXJ0PVZvO3N0YXRpYyByZWdpc3RlciguLi5lKXtYLmFkZCguLi5lKSxHbygpfXN0YXRpYyB1bnJlZ2lzdGVyKC4uLmUpe1gucmVtb3ZlKC4uLmUpLEdvKCl9Y29uc3RydWN0b3IoZSx0KXtsZXQgbj10aGlzLmNvbmZpZz1uZXcga28odCkscj16byhlKSxpPVZvKHIpO2lmKGkpdGhyb3cgRXJyb3IoYENhbnZhcyBpcyBhbHJlYWR5IGluIHVzZS4gQ2hhcnQgd2l0aCBJRCAnYCtpLmlkK2AnIG11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgY2FudmFzIHdpdGggSUQgJ2AraS5jYW52YXMuaWQrYCcgY2FuIGJlIHJldXNlZC5gKTtsZXQgYT1uLmNyZWF0ZVJlc29sdmVyKG4uY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSk7dGhpcy5wbGF0Zm9ybT1uZXcobi5wbGF0Zm9ybXx8KEZhKHIpKSksdGhpcy5wbGF0Zm9ybS51cGRhdGVDb25maWcobik7bGV0IG89dGhpcy5wbGF0Zm9ybS5hY3F1aXJlQ29udGV4dChyLGEuYXNwZWN0UmF0aW8pLHM9byYmby5jYW52YXMsYz1zJiZzLmhlaWdodCxsPXMmJnMud2lkdGg7aWYodGhpcy5pZD1odCgpLHRoaXMuY3R4PW8sdGhpcy5jYW52YXM9cyx0aGlzLndpZHRoPWwsdGhpcy5oZWlnaHQ9Yyx0aGlzLl9vcHRpb25zPWEsdGhpcy5fYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyx0aGlzLl9sYXllcnM9W10sdGhpcy5fbWV0YXNldHM9W10sdGhpcy5fc3RhY2tzPXZvaWQgMCx0aGlzLmJveGVzPVtdLHRoaXMuY3VycmVudERldmljZVBpeGVsUmF0aW89dm9pZCAwLHRoaXMuY2hhcnRBcmVhPXZvaWQgMCx0aGlzLl9hY3RpdmU9W10sdGhpcy5fbGFzdEV2ZW50PXZvaWQgMCx0aGlzLl9saXN0ZW5lcnM9e30sdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycz12b2lkIDAsdGhpcy5fc29ydGVkTWV0YXNldHM9W10sdGhpcy5zY2FsZXM9e30sdGhpcy5fcGx1Z2lucz1uZXcgc28sdGhpcy4kcHJveGllcz17fSx0aGlzLl9oaWRkZW5JbmRpY2VzPXt9LHRoaXMuYXR0YWNoZWQ9ITEsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXZvaWQgMCx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLl9kb1Jlc2l6ZT1kbihlPT50aGlzLnVwZGF0ZShlKSxhLnJlc2l6ZURlbGF5fHwwKSx0aGlzLl9kYXRhQ2hhbmdlcz1bXSxCb1t0aGlzLmlkXT10aGlzLCFvfHwhcyl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjaGFydDogY2FuJ3QgYWNxdWlyZSBjb250ZXh0IGZyb20gdGhlIGdpdmVuIGl0ZW1gKTtyZXR1cm59WHIubGlzdGVuKHRoaXMsYGNvbXBsZXRlYCxMbyksWHIubGlzdGVuKHRoaXMsYHByb2dyZXNzYCxSbyksdGhpcy5faW5pdGlhbGl6ZSgpLHRoaXMuYXR0YWNoZWQmJnRoaXMudXBkYXRlKCl9Z2V0IGFzcGVjdFJhdGlvKCl7bGV0e29wdGlvbnM6e2FzcGVjdFJhdGlvOmUsbWFpbnRhaW5Bc3BlY3RSYXRpbzp0fSx3aWR0aDpuLGhlaWdodDpyLF9hc3BlY3RSYXRpbzppfT10aGlzO3JldHVybiBOKGUpP3QmJmk/aTpyP24vcjpudWxsOmV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5jb25maWcuZGF0YX1zZXQgZGF0YShlKXt0aGlzLmNvbmZpZy5kYXRhPWV9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fb3B0aW9uc31zZXQgb3B0aW9ucyhlKXt0aGlzLmNvbmZpZy5vcHRpb25zPWV9Z2V0IHJlZ2lzdHJ5KCl7cmV0dXJuIFh9X2luaXRpYWxpemUoKXtyZXR1cm4gdGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVJbml0YCksdGhpcy5vcHRpb25zLnJlc3BvbnNpdmU/dGhpcy5yZXNpemUoKTp6cih0aGlzLHRoaXMub3B0aW9ucy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVySW5pdGApLHRoaXN9Y2xlYXIoKXtyZXR1cm4gQm4odGhpcy5jYW52YXMsdGhpcy5jdHgpLHRoaXN9c3RvcCgpe3JldHVybiBYci5zdG9wKHRoaXMpLHRoaXN9cmVzaXplKGUsdCl7WHIucnVubmluZyh0aGlzKT90aGlzLl9yZXNpemVCZWZvcmVEcmF3PXt3aWR0aDplLGhlaWdodDp0fTp0aGlzLl9yZXNpemUoZSx0KX1fcmVzaXplKGUsdCl7bGV0IG49dGhpcy5vcHRpb25zLHI9dGhpcy5jYW52YXMsaT1uLm1haW50YWluQXNwZWN0UmF0aW8mJnRoaXMuYXNwZWN0UmF0aW8sYT10aGlzLnBsYXRmb3JtLmdldE1heGltdW1TaXplKHIsZSx0LGkpLG89bi5kZXZpY2VQaXhlbFJhdGlvfHx0aGlzLnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKSxzPXRoaXMud2lkdGg/YHJlc2l6ZWA6YGF0dGFjaGA7dGhpcy53aWR0aD1hLndpZHRoLHRoaXMuaGVpZ2h0PWEuaGVpZ2h0LHRoaXMuX2FzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8senIodGhpcyxvLCEwKSYmKHRoaXMubm90aWZ5UGx1Z2lucyhgcmVzaXplYCx7c2l6ZTphfSkseihuLm9uUmVzaXplLFt0aGlzLGFdLHRoaXMpLHRoaXMuYXR0YWNoZWQmJnRoaXMuX2RvUmVzaXplKHMpJiZ0aGlzLnJlbmRlcigpKX1lbnN1cmVTY2FsZXNIYXZlSURzKCl7Qih0aGlzLm9wdGlvbnMuc2NhbGVzfHx7fSwoZSx0KT0+e2UuaWQ9dH0pfWJ1aWxkT3JVcGRhdGVTY2FsZXMoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnNjYWxlcyxuPXRoaXMuc2NhbGVzLHI9T2JqZWN0LmtleXMobikucmVkdWNlKChlLHQpPT4oZVt0XT0hMSxlKSx7fSksaT1bXTt0JiYoaT1pLmNvbmNhdChPYmplY3Qua2V5cyh0KS5tYXAoZT0+e2xldCBuPXRbZV0scj12byhlLG4pLGk9cj09PWByYCxhPXI9PT1geGA7cmV0dXJue29wdGlvbnM6bixkcG9zaXRpb246aT9gY2hhcnRBcmVhYDphP2Bib3R0b21gOmBsZWZ0YCxkdHlwZTppP2ByYWRpYWxMaW5lYXJgOmE/YGNhdGVnb3J5YDpgbGluZWFyYH19KSkpLEIoaSx0PT57bGV0IGk9dC5vcHRpb25zLGE9aS5pZCxvPXZvKGEsaSkscz1SKGkudHlwZSx0LmR0eXBlKTsoaS5wb3NpdGlvbj09PXZvaWQgMHx8Rm8oaS5wb3NpdGlvbixvKSE9PUZvKHQuZHBvc2l0aW9uKSkmJihpLnBvc2l0aW9uPXQuZHBvc2l0aW9uKSxyW2FdPSEwO2xldCBjPW51bGw7YSBpbiBuJiZuW2FdLnR5cGU9PT1zP2M9blthXTooYz1uZXcoWC5nZXRTY2FsZShzKSkoe2lkOmEsdHlwZTpzLGN0eDp0aGlzLmN0eCxjaGFydDp0aGlzfSksbltjLmlkXT1jKSxjLmluaXQoaSxlKX0pLEIociwoZSx0KT0+e2V8fGRlbGV0ZSBuW3RdfSksQihuLGU9PntmYS5jb25maWd1cmUodGhpcyxlLGUub3B0aW9ucyksZmEuYWRkQm94KHRoaXMsZSl9KX1fdXBkYXRlTWV0YXNldHMoKXtsZXQgZT10aGlzLl9tZXRhc2V0cyx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj1lLmxlbmd0aDtpZihlLnNvcnQoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCksbj50KXtmb3IobGV0IGU9dDtlPG47KytlKXRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShlKTtlLnNwbGljZSh0LG4tdCl9dGhpcy5fc29ydGVkTWV0YXNldHM9ZS5zbGljZSgwKS5zb3J0KElvKGBvcmRlcmAsYGluZGV4YCkpfV9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpe2xldHtfbWV0YXNldHM6ZSxkYXRhOntkYXRhc2V0czp0fX09dGhpcztlLmxlbmd0aD50Lmxlbmd0aCYmZGVsZXRlIHRoaXMuX3N0YWNrcyxlLmZvckVhY2goKGUsbik9Pnt0LmZpbHRlcih0PT50PT09ZS5fZGF0YXNldCkubGVuZ3RoPT09MCYmdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKG4pfSl9YnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCl7bGV0IGU9W10sdD10aGlzLmRhdGEuZGF0YXNldHMsbixyO2Zvcih0aGlzLl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpLG49MCxyPXQubGVuZ3RoO248cjtuKyspe2xldCByPXRbbl0saT10aGlzLmdldERhdGFzZXRNZXRhKG4pLGE9ci50eXBlfHx0aGlzLmNvbmZpZy50eXBlO2lmKGkudHlwZSYmaS50eXBlIT09YSYmKHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShuKSxpPXRoaXMuZ2V0RGF0YXNldE1ldGEobikpLGkudHlwZT1hLGkuaW5kZXhBeGlzPXIuaW5kZXhBeGlzfHxwbyhhLHRoaXMub3B0aW9ucyksaS5vcmRlcj1yLm9yZGVyfHwwLGkuaW5kZXg9bixpLmxhYmVsPWBgK3IubGFiZWwsaS52aXNpYmxlPXRoaXMuaXNEYXRhc2V0VmlzaWJsZShuKSxpLmNvbnRyb2xsZXIpaS5jb250cm9sbGVyLnVwZGF0ZUluZGV4KG4pLGkuY29udHJvbGxlci5saW5rU2NhbGVzKCk7ZWxzZXtsZXQgdD1YLmdldENvbnRyb2xsZXIoYSkse2RhdGFzZXRFbGVtZW50VHlwZTpyLGRhdGFFbGVtZW50VHlwZTpvfT1xLmRhdGFzZXRzW2FdO09iamVjdC5hc3NpZ24odCx7ZGF0YUVsZW1lbnRUeXBlOlguZ2V0RWxlbWVudChvKSxkYXRhc2V0RWxlbWVudFR5cGU6ciYmWC5nZXRFbGVtZW50KHIpfSksaS5jb250cm9sbGVyPW5ldyB0KHRoaXMsbiksZS5wdXNoKGkuY29udHJvbGxlcil9fXJldHVybiB0aGlzLl91cGRhdGVNZXRhc2V0cygpLGV9X3Jlc2V0RWxlbWVudHMoKXtCKHRoaXMuZGF0YS5kYXRhc2V0cywoZSx0KT0+e3RoaXMuZ2V0RGF0YXNldE1ldGEodCkuY29udHJvbGxlci5yZXNldCgpfSx0aGlzKX1yZXNldCgpe3RoaXMuX3Jlc2V0RWxlbWVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2V0YCl9dXBkYXRlKGUpe2xldCB0PXRoaXMuY29uZmlnO3QudXBkYXRlKCk7bGV0IG49dGhpcy5fb3B0aW9ucz10LmNyZWF0ZVJlc29sdmVyKHQuY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9IW4uYW5pbWF0aW9uO2lmKHRoaXMuX3VwZGF0ZVNjYWxlcygpLHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpLHRoaXMuX3VwZGF0ZUhpZGRlbkluZGljZXMoKSx0aGlzLl9wbHVnaW5zLmludmFsaWRhdGUoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVVwZGF0ZWAse21vZGU6ZSxjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IGk9dGhpcy5idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUVsZW1lbnRzVXBkYXRlYCk7bGV0IGE9MDtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0O2UrKyl7bGV0e2NvbnRyb2xsZXI6dH09dGhpcy5nZXREYXRhc2V0TWV0YShlKSxuPSFyJiZpLmluZGV4T2YodCk9PT0tMTt0LmJ1aWxkT3JVcGRhdGVFbGVtZW50cyhuKSxhPU1hdGgubWF4KCt0LmdldE1heE92ZXJmbG93KCksYSl9YT10aGlzLl9taW5QYWRkaW5nPW4ubGF5b3V0LmF1dG9QYWRkaW5nP2E6MCx0aGlzLl91cGRhdGVMYXlvdXQoYSkscnx8QihpLGU9PntlLnJlc2V0KCl9KSx0aGlzLl91cGRhdGVEYXRhc2V0cyhlKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyVXBkYXRlYCx7bW9kZTplfSksdGhpcy5fbGF5ZXJzLnNvcnQoSW8oYHpgLGBfaWR4YCkpO2xldHtfYWN0aXZlOm8sX2xhc3RFdmVudDpzfT10aGlzO3M/dGhpcy5fZXZlbnRIYW5kbGVyKHMsITApOm8ubGVuZ3RoJiZ0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhvLG8sITApLHRoaXMucmVuZGVyKCl9X3VwZGF0ZVNjYWxlcygpe0IodGhpcy5zY2FsZXMsZT0+e2ZhLnJlbW92ZUJveCh0aGlzLGUpfSksdGhpcy5lbnN1cmVTY2FsZXNIYXZlSURzKCksdGhpcy5idWlsZE9yVXBkYXRlU2NhbGVzKCl9X2NoZWNrRXZlbnRCaW5kaW5ncygpe2xldCBlPXRoaXMub3B0aW9uczsoIWp0KG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKSksbmV3IFNldChlLmV2ZW50cykpfHwhIXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMhPT1lLnJlc3BvbnNpdmUpJiYodGhpcy51bmJpbmRFdmVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSl9X3VwZGF0ZUhpZGRlbkluZGljZXMoKXtsZXR7X2hpZGRlbkluZGljZXM6ZX09dGhpcyx0PXRoaXMuX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpfHxbXTtmb3IobGV0e21ldGhvZDpuLHN0YXJ0OnIsY291bnQ6aX1vZiB0KUhvKGUscixuPT09YF9yZW1vdmVFbGVtZW50c2A/LWk6aSl9X2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpe2xldCBlPXRoaXMuX2RhdGFDaGFuZ2VzO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuO3RoaXMuX2RhdGFDaGFuZ2VzPVtdO2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj10PT5uZXcgU2V0KGUuZmlsdGVyKGU9PmVbMF09PT10KS5tYXAoKGUsdCk9PnQrYCxgK2Uuc3BsaWNlKDEpLmpvaW4oYCxgKSkpLHI9bigwKTtmb3IobGV0IGU9MTtlPHQ7ZSsrKWlmKCFqdChyLG4oZSkpKXJldHVybjtyZXR1cm4gQXJyYXkuZnJvbShyKS5tYXAoZT0+ZS5zcGxpdChgLGApKS5tYXAoZT0+KHttZXRob2Q6ZVsxXSxzdGFydDorZVsyXSxjb3VudDorZVszXX0pKX1fdXBkYXRlTGF5b3V0KGUpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlTGF5b3V0YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2ZhLnVwZGF0ZSh0aGlzLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZSk7bGV0IHQ9dGhpcy5jaGFydEFyZWEsbj10LndpZHRoPD0wfHx0LmhlaWdodDw9MDt0aGlzLl9sYXllcnM9W10sQih0aGlzLmJveGVzLGU9PntuJiZlLnBvc2l0aW9uPT09YGNoYXJ0QXJlYWB8fChlLmNvbmZpZ3VyZSYmZS5jb25maWd1cmUoKSx0aGlzLl9sYXllcnMucHVzaCguLi5lLl9sYXllcnMoKSkpfSx0aGlzKSx0aGlzLl9sYXllcnMuZm9yRWFjaCgoZSx0KT0+e2UuX2lkeD10fSksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckxheW91dGApfV91cGRhdGVEYXRhc2V0cyhlKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzVXBkYXRlYCx7bW9kZTplLGNhbmNlbGFibGU6ITB9KSE9PSExKXtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIuY29uZmlndXJlKCk7Zm9yKGxldCB0PTAsbj10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8bjsrK3QpdGhpcy5fdXBkYXRlRGF0YXNldCh0LEF0KGUpP2Uoe2RhdGFzZXRJbmRleDp0fSk6ZSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRzVXBkYXRlYCx7bW9kZTplfSl9fV91cGRhdGVEYXRhc2V0KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKSxyPXttZXRhOm4saW5kZXg6ZSxtb2RlOnQsY2FuY2VsYWJsZTohMH07dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0VXBkYXRlYCxyKSE9PSExJiYobi5jb250cm9sbGVyLl91cGRhdGUodCksci5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0VXBkYXRlYCxyKSl9cmVuZGVyKCl7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVSZW5kZXJgLHtjYW5jZWxhYmxlOiEwfSkhPT0hMSYmKFhyLmhhcyh0aGlzKT90aGlzLmF0dGFjaGVkJiYhWHIucnVubmluZyh0aGlzKSYmWHIuc3RhcnQodGhpcyk6KHRoaXMuZHJhdygpLExvKHtjaGFydDp0aGlzfSkpKX1kcmF3KCl7bGV0IGU7aWYodGhpcy5fcmVzaXplQmVmb3JlRHJhdyl7bGV0e3dpZHRoOmUsaGVpZ2h0OnR9PXRoaXMuX3Jlc2l6ZUJlZm9yZURyYXc7dGhpcy5fcmVzaXplQmVmb3JlRHJhdz1udWxsLHRoaXMuX3Jlc2l6ZShlLHQpfWlmKHRoaXMuY2xlYXIoKSx0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MHx8dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEcmF3YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCB0PXRoaXMuX2xheWVycztmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uejw9MDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTtmb3IodGhpcy5fZHJhd0RhdGFzZXRzKCk7ZTx0Lmxlbmd0aDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRHJhd2ApfV9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZSl7bGV0IHQ9dGhpcy5fc29ydGVkTWV0YXNldHMsbj1bXSxyLGk7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3Ipe2xldCBpPXRbcl07KCFlfHxpLnZpc2libGUpJiZuLnB1c2goaSl9cmV0dXJuIG59Z2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpe3JldHVybiB0aGlzLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoITApfV9kcmF3RGF0YXNldHMoKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzRHJhd2Ase2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgZT10aGlzLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLl9kcmF3RGF0YXNldChlW3RdKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldHNEcmF3YCl9X2RyYXdEYXRhc2V0KGUpe2xldCB0PXRoaXMuY3R4LG49e21ldGE6ZSxpbmRleDplLmluZGV4LGNhbmNlbGFibGU6ITB9LHI9WXIodGhpcyxlKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXREcmF3YCxuKSE9PSExJiYociYmV24odCxyKSxlLmNvbnRyb2xsZXIuZHJhdygpLHImJkduKHQpLG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldERyYXdgLG4pKX1pc1BvaW50SW5BcmVhKGUpe3JldHVybiBVbihlLHRoaXMuY2hhcnRBcmVhLHRoaXMuX21pblBhZGRpbmcpfWdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSx0LG4scil7bGV0IGk9WWkubW9kZXNbdF07cmV0dXJuIHR5cGVvZiBpPT1gZnVuY3Rpb25gP2kodGhpcyxlLG4scik6W119Z2V0RGF0YXNldE1ldGEoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdLG49dGhpcy5fbWV0YXNldHMscj1uLmZpbHRlcihlPT5lJiZlLl9kYXRhc2V0PT09dCkucG9wKCk7cmV0dXJuIHJ8fChyPXt0eXBlOm51bGwsZGF0YTpbXSxkYXRhc2V0Om51bGwsY29udHJvbGxlcjpudWxsLGhpZGRlbjpudWxsLHhBeGlzSUQ6bnVsbCx5QXhpc0lEOm51bGwsb3JkZXI6dCYmdC5vcmRlcnx8MCxpbmRleDplLF9kYXRhc2V0OnQsX3BhcnNlZDpbXSxfc29ydGVkOiExfSxuLnB1c2gocikpLHJ9Z2V0Q29udGV4dCgpe3JldHVybiB0aGlzLiRjb250ZXh0fHw9b3IobnVsbCx7Y2hhcnQ6dGhpcyx0eXBlOmBjaGFydGB9KX1nZXRWaXNpYmxlRGF0YXNldENvdW50KCl7cmV0dXJuIHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmxlbmd0aH1pc0RhdGFzZXRWaXNpYmxlKGUpe2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0c1tlXTtpZighdClyZXR1cm4hMTtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO3JldHVybiB0eXBlb2Ygbi5oaWRkZW49PWBib29sZWFuYD8hbi5oaWRkZW46IXQuaGlkZGVufXNldERhdGFzZXRWaXNpYmlsaXR5KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKTtuLmhpZGRlbj0hdH10b2dnbGVEYXRhVmlzaWJpbGl0eShlKXt0aGlzLl9oaWRkZW5JbmRpY2VzW2VdPSF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfWdldERhdGFWaXNpYmlsaXR5KGUpe3JldHVybiF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfV91cGRhdGVWaXNpYmlsaXR5KGUsdCxuKXtsZXQgcj1uP2BzaG93YDpgaGlkZWAsaT10aGlzLmdldERhdGFzZXRNZXRhKGUpLGE9aS5jb250cm9sbGVyLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAscik7a3QodCk/KGkuZGF0YVt0XS5oaWRkZW49IW4sdGhpcy51cGRhdGUoKSk6KHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZSxuKSxhLnVwZGF0ZShpLHt2aXNpYmxlOm59KSx0aGlzLnVwZGF0ZSh0PT50LmRhdGFzZXRJbmRleD09PWU/cjp2b2lkIDApKX1oaWRlKGUsdCl7dGhpcy5fdXBkYXRlVmlzaWJpbGl0eShlLHQsITEpfXNob3coZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMCl9X2Rlc3Ryb3lEYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLl9tZXRhc2V0c1tlXTt0JiZ0LmNvbnRyb2xsZXImJnQuY29udHJvbGxlci5fZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tlXX1fc3RvcCgpe2xldCBlLHQ7Zm9yKHRoaXMuc3RvcCgpLFhyLnJlbW92ZSh0aGlzKSxlPTAsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO2U8dDsrK2UpdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGUpfWRlc3Ryb3koKXt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURlc3Ryb3lgKTtsZXR7Y2FudmFzOmUsY3R4OnR9PXRoaXM7dGhpcy5fc3RvcCgpLHRoaXMuY29uZmlnLmNsZWFyQ2FjaGUoKSxlJiYodGhpcy51bmJpbmRFdmVudHMoKSxCbihlLHQpLHRoaXMucGxhdGZvcm0ucmVsZWFzZUNvbnRleHQodCksdGhpcy5jYW52YXM9bnVsbCx0aGlzLmN0eD1udWxsKSxkZWxldGUgQm9bdGhpcy5pZF0sdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRlc3Ryb3lgKX10b0Jhc2U2NEltYWdlKC4uLmUpe3JldHVybiB0aGlzLmNhbnZhcy50b0RhdGFVUkwoLi4uZSl9YmluZEV2ZW50cygpe3RoaXMuYmluZFVzZXJFdmVudHMoKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLmJpbmRSZXNwb25zaXZlRXZlbnRzKCk6dGhpcy5hdHRhY2hlZD0hMH1iaW5kVXNlckV2ZW50cygpe2xldCBlPXRoaXMuX2xpc3RlbmVycyx0PXRoaXMucGxhdGZvcm0sbj0obixyKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZVtuXT1yfSxyPShlLHQsbik9PntlLm9mZnNldFg9dCxlLm9mZnNldFk9bix0aGlzLl9ldmVudEhhbmRsZXIoZSl9O0IodGhpcy5vcHRpb25zLmV2ZW50cyxlPT5uKGUscikpfWJpbmRSZXNwb25zaXZlRXZlbnRzKCl7dGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVyc3x8PXt9O2xldCBlPXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsdD10aGlzLnBsYXRmb3JtLG49KG4scik9Pnt0LmFkZEV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGVbbl09cn0scj0obixyKT0+e2Vbbl0mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGRlbGV0ZSBlW25dKX0saT0oZSx0KT0+e3RoaXMuY2FudmFzJiZ0aGlzLnJlc2l6ZShlLHQpfSxhLG89KCk9PntyKGBhdHRhY2hgLG8pLHRoaXMuYXR0YWNoZWQ9ITAsdGhpcy5yZXNpemUoKSxuKGByZXNpemVgLGkpLG4oYGRldGFjaGAsYSl9O2E9KCk9Pnt0aGlzLmF0dGFjaGVkPSExLHIoYHJlc2l6ZWAsaSksdGhpcy5fc3RvcCgpLHRoaXMuX3Jlc2l6ZSgwLDApLG4oYGF0dGFjaGAsbyl9LHQuaXNBdHRhY2hlZCh0aGlzLmNhbnZhcyk/bygpOmEoKX11bmJpbmRFdmVudHMoKXtCKHRoaXMuX2xpc3RlbmVycywoZSx0KT0+e3RoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLHQsZSl9KSx0aGlzLl9saXN0ZW5lcnM9e30sQih0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzLChlLHQpPT57dGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsdCxlKX0pLHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwfXVwZGF0ZUhvdmVyU3R5bGUoZSx0LG4pe2xldCByPW4/YHNldGA6YHJlbW92ZWAsaSxhLG8scztmb3IodD09PWBkYXRhc2V0YCYmKGk9dGhpcy5nZXREYXRhc2V0TWV0YShlWzBdLmRhdGFzZXRJbmRleCksaS5jb250cm9sbGVyW2BfYCtyK2BEYXRhc2V0SG92ZXJTdHlsZWBdKCkpLG89MCxzPWUubGVuZ3RoO288czsrK28pe2E9ZVtvXTtsZXQgdD1hJiZ0aGlzLmdldERhdGFzZXRNZXRhKGEuZGF0YXNldEluZGV4KS5jb250cm9sbGVyO3QmJnRbcitgSG92ZXJTdHlsZWBdKGEuZWxlbWVudCxhLmRhdGFzZXRJbmRleCxhLmluZGV4KX19Z2V0QWN0aXZlRWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfHxbXX1zZXRBY3RpdmVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9hY3RpdmV8fFtdLG49ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBObyBkYXRhc2V0IGZvdW5kIGF0IGluZGV4IGArZSk7cmV0dXJue2RhdGFzZXRJbmRleDplLGVsZW1lbnQ6bi5kYXRhW3RdLGluZGV4OnR9fSk7X3Qobix0KXx8KHRoaXMuX2FjdGl2ZT1uLHRoaXMuX2xhc3RFdmVudD1udWxsLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG4sdCkpfW5vdGlmeVBsdWdpbnMoZSx0LG4pe3JldHVybiB0aGlzLl9wbHVnaW5zLm5vdGlmeSh0aGlzLGUsdCxuKX1pc1BsdWdpbkVuYWJsZWQoZSl7cmV0dXJuIHRoaXMuX3BsdWdpbnMuX2NhY2hlLmZpbHRlcih0PT50LnBsdWdpbi5pZD09PWUpLmxlbmd0aD09PTF9X3VwZGF0ZUhvdmVyU3R5bGVzKGUsdCxuKXtsZXQgcj10aGlzLm9wdGlvbnMuaG92ZXIsaT0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCkpLGE9aSh0LGUpLG89bj9lOmkoZSx0KTthLmxlbmd0aCYmdGhpcy51cGRhdGVIb3ZlclN0eWxlKGEsci5tb2RlLCExKSxvLmxlbmd0aCYmci5tb2RlJiZ0aGlzLnVwZGF0ZUhvdmVyU3R5bGUobyxyLm1vZGUsITApfV9ldmVudEhhbmRsZXIoZSx0KXtsZXQgbj17ZXZlbnQ6ZSxyZXBsYXk6dCxjYW5jZWxhYmxlOiEwLGluQ2hhcnRBcmVhOnRoaXMuaXNQb2ludEluQXJlYShlKX0scj10PT4odC5vcHRpb25zLmV2ZW50c3x8dGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVFdmVudGAsbixyKT09PSExKXJldHVybjtsZXQgaT10aGlzLl9oYW5kbGVFdmVudChlLHQsbi5pbkNoYXJ0QXJlYSk7cmV0dXJuIG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRXZlbnRgLG4sciksKGl8fG4uY2hhbmdlZCkmJnRoaXMucmVuZGVyKCksdGhpc31faGFuZGxlRXZlbnQoZSx0LG4pe2xldHtfYWN0aXZlOnI9W10sb3B0aW9uczppfT10aGlzLGE9dCxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUscixuLGEpLHM9TXQoZSksYz1VbyhlLHRoaXMuX2xhc3RFdmVudCxuLHMpO24mJih0aGlzLl9sYXN0RXZlbnQ9bnVsbCx6KGkub25Ib3ZlcixbZSxvLHRoaXNdLHRoaXMpLHMmJnooaS5vbkNsaWNrLFtlLG8sdGhpc10sdGhpcykpO2xldCBsPSFfdChvLHIpO3JldHVybihsfHx0KSYmKHRoaXMuX2FjdGl2ZT1vLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG8scix0KSksdGhpcy5fbGFzdEV2ZW50PWMsbH1fZ2V0QWN0aXZlRWxlbWVudHMoZSx0LG4scil7aWYoZS50eXBlPT09YG1vdXNlb3V0YClyZXR1cm5bXTtpZighbilyZXR1cm4gdDtsZXQgaT10aGlzLm9wdGlvbnMuaG92ZXI7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLGkubW9kZSxpLHIpfX07ZnVuY3Rpb24gR28oKXtyZXR1cm4gQihXby5pbnN0YW5jZXMsZT0+ZS5fcGx1Z2lucy5pbnZhbGlkYXRlKCkpfWZ1bmN0aW9uIEtvKGUsdCl7bGV0e3g6bix5OnIsYmFzZTppLHdpZHRoOmEsaGVpZ2h0Om99PWUuZ2V0UHJvcHMoW2B4YCxgeWAsYGJhc2VgLGB3aWR0aGAsYGhlaWdodGBdLHQpLHMsYyxsLHUsZDtyZXR1cm4gZS5ob3Jpem9udGFsPyhkPW8vMixzPU1hdGgubWluKG4saSksYz1NYXRoLm1heChuLGkpLGw9ci1kLHU9citkKTooZD1hLzIscz1uLWQsYz1uK2QsbD1NYXRoLm1pbihyLGkpLHU9TWF0aC5tYXgocixpKSkse2xlZnQ6cyx0b3A6bCxyaWdodDpjLGJvdHRvbTp1fX1mdW5jdGlvbiBxbyhlLHQsbixyKXtyZXR1cm4gZT8wOkcodCxuLHIpfWZ1bmN0aW9uIEpvKGUsdCxuKXtsZXQgcj1lLm9wdGlvbnMuYm9yZGVyV2lkdGgsaT1lLmJvcmRlclNraXBwZWQsYT1ucihyKTtyZXR1cm57dDpxbyhpLnRvcCxhLnRvcCwwLG4pLHI6cW8oaS5yaWdodCxhLnJpZ2h0LDAsdCksYjpxbyhpLmJvdHRvbSxhLmJvdHRvbSwwLG4pLGw6cW8oaS5sZWZ0LGEubGVmdCwwLHQpfX1mdW5jdGlvbiBZbyhlLHQsbil7bGV0e2VuYWJsZUJvcmRlclJhZGl1czpyfT1lLmdldFByb3BzKFtgZW5hYmxlQm9yZGVyUmFkaXVzYF0pLGk9ZS5vcHRpb25zLmJvcmRlclJhZGl1cyxhPXJyKGkpLG89TWF0aC5taW4odCxuKSxzPWUuYm9yZGVyU2tpcHBlZCxjPXJ8fEYoaSk7cmV0dXJue3RvcExlZnQ6cW8oIWN8fHMudG9wfHxzLmxlZnQsYS50b3BMZWZ0LDAsbyksdG9wUmlnaHQ6cW8oIWN8fHMudG9wfHxzLnJpZ2h0LGEudG9wUmlnaHQsMCxvKSxib3R0b21MZWZ0OnFvKCFjfHxzLmJvdHRvbXx8cy5sZWZ0LGEuYm90dG9tTGVmdCwwLG8pLGJvdHRvbVJpZ2h0OnFvKCFjfHxzLmJvdHRvbXx8cy5yaWdodCxhLmJvdHRvbVJpZ2h0LDAsbyl9fWZ1bmN0aW9uIFhvKGUpe2xldCB0PUtvKGUpLG49dC5yaWdodC10LmxlZnQscj10LmJvdHRvbS10LnRvcCxpPUpvKGUsbi8yLHIvMiksYT1ZbyhlLG4vMixyLzIpO3JldHVybntvdXRlcjp7eDp0LmxlZnQseTp0LnRvcCx3Om4saDpyLHJhZGl1czphfSxpbm5lcjp7eDp0LmxlZnQraS5sLHk6dC50b3AraS50LHc6bi1pLmwtaS5yLGg6ci1pLnQtaS5iLHJhZGl1czp7dG9wTGVmdDpNYXRoLm1heCgwLGEudG9wTGVmdC1NYXRoLm1heChpLnQsaS5sKSksdG9wUmlnaHQ6TWF0aC5tYXgoMCxhLnRvcFJpZ2h0LU1hdGgubWF4KGkudCxpLnIpKSxib3R0b21MZWZ0Ok1hdGgubWF4KDAsYS5ib3R0b21MZWZ0LU1hdGgubWF4KGkuYixpLmwpKSxib3R0b21SaWdodDpNYXRoLm1heCgwLGEuYm90dG9tUmlnaHQtTWF0aC5tYXgoaS5iLGkucikpfX19fWZ1bmN0aW9uIFpvKGUsdCxuLHIpe2xldCBpPXQ9PT1udWxsLGE9bj09PW51bGwsbz1lJiYhKGkmJmEpJiZLbyhlLHIpO3JldHVybiBvJiYoaXx8JHQodCxvLmxlZnQsby5yaWdodCkpJiYoYXx8JHQobixvLnRvcCxvLmJvdHRvbSkpfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBlLnRvcExlZnR8fGUudG9wUmlnaHR8fGUuYm90dG9tTGVmdHx8ZS5ib3R0b21SaWdodH1mdW5jdGlvbiAkbyhlLHQpe2UucmVjdCh0LngsdC55LHQudyx0LmgpfWZ1bmN0aW9uIGVzKGUsdCxuPXt9KXtsZXQgcj1lLng9PT1uLng/MDotdCxpPWUueT09PW4ueT8wOi10LGE9KGUueCtlLnc9PT1uLngrbi53PzA6dCktcixvPShlLnkrZS5oPT09bi55K24uaD8wOnQpLWk7cmV0dXJue3g6ZS54K3IseTplLnkraSx3OmUudythLGg6ZS5oK28scmFkaXVzOmUucmFkaXVzfX12YXIgdHM9Y2xhc3MgZXh0ZW5kcyBJYXtzdGF0aWMgaWQ9YGJhcmA7c3RhdGljIGRlZmF1bHRzPXtib3JkZXJTa2lwcGVkOmBzdGFydGAsYm9yZGVyV2lkdGg6MCxib3JkZXJSYWRpdXM6MCxpbmZsYXRlQW1vdW50OmBhdXRvYCxwb2ludFN0eWxlOnZvaWQgMH07c3RhdGljIGRlZmF1bHRSb3V0ZXM9e2JhY2tncm91bmRDb2xvcjpgYmFja2dyb3VuZENvbG9yYCxib3JkZXJDb2xvcjpgYm9yZGVyQ29sb3JgfTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5ob3Jpem9udGFsPXZvaWQgMCx0aGlzLmJhc2U9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmluZmxhdGVBbW91bnQ9dm9pZCAwLGUmJk9iamVjdC5hc3NpZ24odGhpcyxlKX1kcmF3KGUpe2xldHtpbmZsYXRlQW1vdW50OnQsb3B0aW9uczp7Ym9yZGVyQ29sb3I6bixiYWNrZ3JvdW5kQ29sb3I6cn19PXRoaXMse2lubmVyOmksb3V0ZXI6YX09WG8odGhpcyksbz1RbyhhLnJhZGl1cyk/WG46JG87ZS5zYXZlKCksKGEudyE9PWkud3x8YS5oIT09aS5oKSYmKGUuYmVnaW5QYXRoKCksbyhlLGVzKGEsdCxpKSksZS5jbGlwKCksbyhlLGVzKGksLXQsYSkpLGUuZmlsbFN0eWxlPW4sZS5maWxsKGBldmVub2RkYCkpLGUuYmVnaW5QYXRoKCksbyhlLGVzKGksdCkpLGUuZmlsbFN0eWxlPXIsZS5maWxsKCksZS5yZXN0b3JlKCl9aW5SYW5nZShlLHQsbil7cmV0dXJuIFpvKHRoaXMsZSx0LG4pfWluWFJhbmdlKGUsdCl7cmV0dXJuIFpvKHRoaXMsZSxudWxsLHQpfWluWVJhbmdlKGUsdCl7cmV0dXJuIFpvKHRoaXMsbnVsbCxlLHQpfWdldENlbnRlclBvaW50KGUpe2xldHt4OnQseTpuLGJhc2U6cixob3Jpem9udGFsOml9PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWAsYGJhc2VgLGBob3Jpem9udGFsYF0sZSk7cmV0dXJue3g6aT8odCtyKS8yOnQseTppP246KG4rcikvMn19Z2V0UmFuZ2UoZSl7cmV0dXJuIGU9PT1geGA/dGhpcy53aWR0aC8yOnRoaXMuaGVpZ2h0LzJ9fSxucz0oZSx0KT0+e2xldHtib3hIZWlnaHQ6bj10LGJveFdpZHRoOnI9dH09ZTtyZXR1cm4gZS51c2VQb2ludFN0eWxlJiYobj1NYXRoLm1pbihuLHQpLHI9ZS5wb2ludFN0eWxlV2lkdGh8fE1hdGgubWluKHIsdCkpLHtib3hXaWR0aDpyLGJveEhlaWdodDpuLGl0ZW1IZWlnaHQ6TWF0aC5tYXgodCxuKX19LHJzPShlLHQpPT5lIT09bnVsbCYmdCE9PW51bGwmJmUuZGF0YXNldEluZGV4PT09dC5kYXRhc2V0SW5kZXgmJmUuaW5kZXg9PT10LmluZGV4LGlzPWNsYXNzIGV4dGVuZHMgSWF7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9hZGRlZD0hMSx0aGlzLmxlZ2VuZEhpdEJveGVzPVtdLHRoaXMuX2hvdmVyZWRJdGVtPW51bGwsdGhpcy5kb3VnaG51dE1vZGU9ITEsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5jdHg9ZS5jdHgsdGhpcy5sZWdlbmRJdGVtcz12b2lkIDAsdGhpcy5jb2x1bW5TaXplcz12b2lkIDAsdGhpcy5saW5lV2lkdGhzPXZvaWQgMCx0aGlzLm1heEhlaWdodD12b2lkIDAsdGhpcy5tYXhXaWR0aD12b2lkIDAsdGhpcy50b3A9dm9pZCAwLHRoaXMuYm90dG9tPXZvaWQgMCx0aGlzLmxlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLl9tYXJnaW5zPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLndlaWdodD12b2lkIDAsdGhpcy5mdWxsU2l6ZT12b2lkIDB9dXBkYXRlKGUsdCxuKXt0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW4sdGhpcy5zZXREaW1lbnNpb25zKCksdGhpcy5idWlsZExhYmVscygpLHRoaXMuZml0KCl9c2V0RGltZW5zaW9ucygpe3RoaXMuaXNIb3Jpem9udGFsKCk/KHRoaXMud2lkdGg9dGhpcy5tYXhXaWR0aCx0aGlzLmxlZnQ9dGhpcy5fbWFyZ2lucy5sZWZ0LHRoaXMucmlnaHQ9dGhpcy53aWR0aCk6KHRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LHRoaXMudG9wPXRoaXMuX21hcmdpbnMudG9wLHRoaXMuYm90dG9tPXRoaXMuaGVpZ2h0KX1idWlsZExhYmVscygpe2xldCBlPXRoaXMub3B0aW9ucy5sYWJlbHN8fHt9LHQ9eihlLmdlbmVyYXRlTGFiZWxzLFt0aGlzLmNoYXJ0XSx0aGlzKXx8W107ZS5maWx0ZXImJih0PXQuZmlsdGVyKHQ9PmUuZmlsdGVyKHQsdGhpcy5jaGFydC5kYXRhKSkpLGUuc29ydCYmKHQ9dC5zb3J0KCh0LG4pPT5lLnNvcnQodCxuLHRoaXMuY2hhcnQuZGF0YSkpKSx0aGlzLm9wdGlvbnMucmV2ZXJzZSYmdC5yZXZlcnNlKCksdGhpcy5sZWdlbmRJdGVtcz10fWZpdCgpe2xldHtvcHRpb25zOmUsY3R4OnR9PXRoaXM7aWYoIWUuZGlzcGxheSl7dGhpcy53aWR0aD10aGlzLmhlaWdodD0wO3JldHVybn1sZXQgbj1lLmxhYmVscyxyPVkobi5mb250KSxpPXIuc2l6ZSxhPXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpLHtib3hXaWR0aDpvLGl0ZW1IZWlnaHQ6c309bnMobixpKSxjLGw7dC5mb250PXIuc3RyaW5nLHRoaXMuaXNIb3Jpem9udGFsKCk/KGM9dGhpcy5tYXhXaWR0aCxsPXRoaXMuX2ZpdFJvd3MoYSxpLG8scykrMTApOihsPXRoaXMubWF4SGVpZ2h0LGM9dGhpcy5fZml0Q29scyhhLHIsbyxzKSsxMCksdGhpcy53aWR0aD1NYXRoLm1pbihjLGUubWF4V2lkdGh8fHRoaXMubWF4V2lkdGgpLHRoaXMuaGVpZ2h0PU1hdGgubWluKGwsZS5tYXhIZWlnaHR8fHRoaXMubWF4SGVpZ2h0KX1fZml0Um93cyhlLHQsbixyKXtsZXR7Y3R4OmksbWF4V2lkdGg6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMubGluZVdpZHRocz1bMF0sbD1yK28sdT1lO2kudGV4dEFsaWduPWBsZWZ0YCxpLnRleHRCYXNlbGluZT1gbWlkZGxlYDtsZXQgZD0tMSxmPS1sO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUscCk9PntsZXQgbT1uK3QvMitpLm1lYXN1cmVUZXh0KGUudGV4dCkud2lkdGg7KHA9PT0wfHxjW2MubGVuZ3RoLTFdK20rMipvPmEpJiYodSs9bCxjW2MubGVuZ3RoLShwPjA/MDoxKV09MCxmKz1sLGQrKyksc1twXT17bGVmdDowLHRvcDpmLHJvdzpkLHdpZHRoOm0saGVpZ2h0OnJ9LGNbYy5sZW5ndGgtMV0rPW0rb30pLHV9X2ZpdENvbHMoZSx0LG4scil7bGV0e2N0eDppLG1heEhlaWdodDphLG9wdGlvbnM6e2xhYmVsczp7cGFkZGluZzpvfX19PXRoaXMscz10aGlzLmxlZ2VuZEhpdEJveGVzPVtdLGM9dGhpcy5jb2x1bW5TaXplcz1bXSxsPWEtZSx1PW8sZD0wLGY9MCxwPTAsbT0wO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUsYSk9PntsZXR7aXRlbVdpZHRoOmgsaXRlbUhlaWdodDpnfT1hcyhuLHQsaSxlLHIpO2E+MCYmZitnKzIqbz5sJiYodSs9ZCtvLGMucHVzaCh7d2lkdGg6ZCxoZWlnaHQ6Zn0pLHArPWQrbyxtKyssZD1mPTApLHNbYV09e2xlZnQ6cCx0b3A6Zixjb2w6bSx3aWR0aDpoLGhlaWdodDpnfSxkPU1hdGgubWF4KGQsaCksZis9ZytvfSksdSs9ZCxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSx1fWFkanVzdEhpdEJveGVzKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNwbGF5KXJldHVybjtsZXQgZT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7bGVnZW5kSGl0Qm94ZXM6dCxvcHRpb25zOnthbGlnbjpuLGxhYmVsczp7cGFkZGluZzpyfSxydGw6aX19PXRoaXMsYT1XcihpLHRoaXMubGVmdCx0aGlzLndpZHRoKTtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgaT0wLG89SyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKTtmb3IobGV0IHMgb2YgdClpIT09cy5yb3cmJihpPXMucm93LG89SyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKSkscy50b3ArPXRoaXMudG9wK2UrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChvKSxzLndpZHRoKSxvKz1zLndpZHRoK3J9ZWxzZXtsZXQgaT0wLG89SyhuLHRoaXMudG9wK2Urcix0aGlzLmJvdHRvbS10aGlzLmNvbHVtblNpemVzW2ldLmhlaWdodCk7Zm9yKGxldCBzIG9mIHQpcy5jb2whPT1pJiYoaT1zLmNvbCxvPUsobix0aGlzLnRvcCtlK3IsdGhpcy5ib3R0b20tdGhpcy5jb2x1bW5TaXplc1tpXS5oZWlnaHQpKSxzLnRvcD1vLHMubGVmdCs9dGhpcy5sZWZ0K3Iscy5sZWZ0PWEubGVmdEZvckx0cihhLngocy5sZWZ0KSxzLndpZHRoKSxvKz1zLmhlaWdodCtyfX1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uPT09YHRvcGB8fHRoaXMub3B0aW9ucy5wb3NpdGlvbj09PWBib3R0b21gfWRyYXcoKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxheSl7bGV0IGU9dGhpcy5jdHg7V24oZSx0aGlzKSx0aGlzLl9kcmF3KCksR24oZSl9fV9kcmF3KCl7bGV0e29wdGlvbnM6ZSxjb2x1bW5TaXplczp0LGxpbmVXaWR0aHM6bixjdHg6cn09dGhpcyx7YWxpZ246aSxsYWJlbHM6YX09ZSxvPXEuY29sb3Iscz1XcihlLnJ0bCx0aGlzLmxlZnQsdGhpcy53aWR0aCksYz1ZKGEuZm9udCkse3BhZGRpbmc6bH09YSx1PWMuc2l6ZSxkPXUvMixmO3RoaXMuZHJhd1RpdGxlKCksci50ZXh0QWxpZ249cy50ZXh0QWxpZ24oYGxlZnRgKSxyLnRleHRCYXNlbGluZT1gbWlkZGxlYCxyLmxpbmVXaWR0aD0uNSxyLmZvbnQ9Yy5zdHJpbmc7bGV0e2JveFdpZHRoOnAsYm94SGVpZ2h0Om0saXRlbUhlaWdodDpofT1ucyhhLHUpLGc9ZnVuY3Rpb24oZSx0LG4pe2lmKGlzTmFOKHApfHxwPD0wfHxpc05hTihtKXx8bTwwKXJldHVybjtyLnNhdmUoKTtsZXQgaT1SKG4ubGluZVdpZHRoLDEpO2lmKHIuZmlsbFN0eWxlPVIobi5maWxsU3R5bGUsbyksci5saW5lQ2FwPVIobi5saW5lQ2FwLGBidXR0YCksci5saW5lRGFzaE9mZnNldD1SKG4ubGluZURhc2hPZmZzZXQsMCksci5saW5lSm9pbj1SKG4ubGluZUpvaW4sYG1pdGVyYCksci5saW5lV2lkdGg9aSxyLnN0cm9rZVN0eWxlPVIobi5zdHJva2VTdHlsZSxvKSxyLnNldExpbmVEYXNoKFIobi5saW5lRGFzaCxbXSkpLGEudXNlUG9pbnRTdHlsZSl7bGV0IG89e3JhZGl1czptKk1hdGguU1FSVDIvMixwb2ludFN0eWxlOm4ucG9pbnRTdHlsZSxyb3RhdGlvbjpuLnJvdGF0aW9uLGJvcmRlcldpZHRoOml9LGM9cy54UGx1cyhlLHAvMiksbD10K2Q7SG4ocixvLGMsbCxhLnBvaW50U3R5bGVXaWR0aCYmcCl9ZWxzZXtsZXQgYT10K01hdGgubWF4KCh1LW0pLzIsMCksbz1zLmxlZnRGb3JMdHIoZSxwKSxjPXJyKG4uYm9yZGVyUmFkaXVzKTtyLmJlZ2luUGF0aCgpLE9iamVjdC52YWx1ZXMoYykuc29tZShlPT5lIT09MCk/WG4ocix7eDpvLHk6YSx3OnAsaDptLHJhZGl1czpjfSk6ci5yZWN0KG8sYSxwLG0pLHIuZmlsbCgpLGkhPT0wJiZyLnN0cm9rZSgpfXIucmVzdG9yZSgpfSxfPWZ1bmN0aW9uKGUsdCxuKXtZbihyLG4udGV4dCxlLHQraC8yLGMse3N0cmlrZXRocm91Z2g6bi5oaWRkZW4sdGV4dEFsaWduOnMudGV4dEFsaWduKG4udGV4dEFsaWduKX0pfSx2PXRoaXMuaXNIb3Jpem9udGFsKCkseT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKTtmPXY/e3g6SyhpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtblswXSkseTp0aGlzLnRvcCtsK3ksbGluZTowfTp7eDp0aGlzLmxlZnQrbCx5OksoaSx0aGlzLnRvcCt5K2wsdGhpcy5ib3R0b20tdFswXS5oZWlnaHQpLGxpbmU6MH0sR3IodGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKTtsZXQgYj1oK2w7dGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChvLHUpPT57ci5zdHJva2VTdHlsZT1vLmZvbnRDb2xvcixyLmZpbGxTdHlsZT1vLmZvbnRDb2xvcjtsZXQgbT1yLm1lYXN1cmVUZXh0KG8udGV4dCkud2lkdGgsaD1zLnRleHRBbGlnbihvLnRleHRBbGlnbnx8PWEudGV4dEFsaWduKSx4PXArZCttLFM9Zi54LEM9Zi55O3Muc2V0V2lkdGgodGhpcy53aWR0aCksdj91PjAmJlMreCtsPnRoaXMucmlnaHQmJihDPWYueSs9YixmLmxpbmUrKyxTPWYueD1LKGksdGhpcy5sZWZ0K2wsdGhpcy5yaWdodC1uW2YubGluZV0pKTp1PjAmJkMrYj50aGlzLmJvdHRvbSYmKFM9Zi54PVMrdFtmLmxpbmVdLndpZHRoK2wsZi5saW5lKyssQz1mLnk9SyhpLHRoaXMudG9wK3krbCx0aGlzLmJvdHRvbS10W2YubGluZV0uaGVpZ2h0KSk7bGV0IHc9cy54KFMpO2lmKGcodyxDLG8pLFM9cG4oaCxTK3ArZCx2P1MreDp0aGlzLnJpZ2h0LGUucnRsKSxfKHMueChTKSxDLG8pLHYpZi54Kz14K2w7ZWxzZSBpZih0eXBlb2Ygby50ZXh0IT1gc3RyaW5nYCl7bGV0IGU9Yy5saW5lSGVpZ2h0O2YueSs9Y3MobyxlKStsfWVsc2UgZi55Kz1ifSksS3IodGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKX1kcmF3VGl0bGUoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpdGxlLG49WSh0LmZvbnQpLHI9Sih0LnBhZGRpbmcpO2lmKCF0LmRpc3BsYXkpcmV0dXJuO2xldCBpPVdyKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxhPXRoaXMuY3R4LG89dC5wb3NpdGlvbixzPW4uc2l6ZS8yLGM9ci50b3ArcyxsLHU9dGhpcy5sZWZ0LGQ9dGhpcy53aWR0aDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKWQ9TWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKSxsPXRoaXMudG9wK2MsdT1LKGUuYWxpZ24sdSx0aGlzLnJpZ2h0LWQpO2Vsc2V7bGV0IHQ9dGhpcy5jb2x1bW5TaXplcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5oZWlnaHQpLDApO2w9YytLKGUuYWxpZ24sdGhpcy50b3AsdGhpcy5ib3R0b20tdC1lLmxhYmVscy5wYWRkaW5nLXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKX1sZXQgZj1LKG8sdSx1K2QpO2EudGV4dEFsaWduPWkudGV4dEFsaWduKGZuKG8pKSxhLnRleHRCYXNlbGluZT1gbWlkZGxlYCxhLnN0cm9rZVN0eWxlPXQuY29sb3IsYS5maWxsU3R5bGU9dC5jb2xvcixhLmZvbnQ9bi5zdHJpbmcsWW4oYSx0LnRleHQsZixsLG4pfV9jb21wdXRlVGl0bGVIZWlnaHQoKXtsZXQgZT10aGlzLm9wdGlvbnMudGl0bGUsdD1ZKGUuZm9udCksbj1KKGUucGFkZGluZyk7cmV0dXJuIGUuZGlzcGxheT90LmxpbmVIZWlnaHQrbi5oZWlnaHQ6MH1fZ2V0TGVnZW5kSXRlbUF0KGUsdCl7bGV0IG4scixpO2lmKCR0KGUsdGhpcy5sZWZ0LHRoaXMucmlnaHQpJiYkdCh0LHRoaXMudG9wLHRoaXMuYm90dG9tKSl7Zm9yKGk9dGhpcy5sZWdlbmRIaXRCb3hlcyxuPTA7bjxpLmxlbmd0aDsrK24paWYocj1pW25dLCR0KGUsci5sZWZ0LHIubGVmdCtyLndpZHRoKSYmJHQodCxyLnRvcCxyLnRvcCtyLmhlaWdodCkpcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbbl19cmV0dXJuIG51bGx9aGFuZGxlRXZlbnQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zO2lmKCFscyhlLnR5cGUsdCkpcmV0dXJuO2xldCBuPXRoaXMuX2dldExlZ2VuZEl0ZW1BdChlLngsZS55KTtpZihlLnR5cGU9PT1gbW91c2Vtb3ZlYHx8ZS50eXBlPT09YG1vdXNlb3V0YCl7bGV0IHI9dGhpcy5faG92ZXJlZEl0ZW0saT1ycyhyLG4pO3ImJiFpJiZ6KHQub25MZWF2ZSxbZSxyLHRoaXNdLHRoaXMpLHRoaXMuX2hvdmVyZWRJdGVtPW4sbiYmIWkmJnoodC5vbkhvdmVyLFtlLG4sdGhpc10sdGhpcyl9ZWxzZSBuJiZ6KHQub25DbGljayxbZSxuLHRoaXNdLHRoaXMpfX07ZnVuY3Rpb24gYXMoZSx0LG4scixpKXtyZXR1cm57aXRlbVdpZHRoOm9zKHIsZSx0LG4pLGl0ZW1IZWlnaHQ6c3MoaSxyLHQubGluZUhlaWdodCl9fWZ1bmN0aW9uIG9zKGUsdCxuLHIpe2xldCBpPWUudGV4dDtyZXR1cm4gaSYmdHlwZW9mIGkhPWBzdHJpbmdgJiYoaT1pLnJlZHVjZSgoZSx0KT0+ZS5sZW5ndGg+dC5sZW5ndGg/ZTp0KSksdCtuLnNpemUvMityLm1lYXN1cmVUZXh0KGkpLndpZHRofWZ1bmN0aW9uIHNzKGUsdCxuKXtsZXQgcj1lO3JldHVybiB0eXBlb2YgdC50ZXh0IT1gc3RyaW5nYCYmKHI9Y3ModCxuKSkscn1mdW5jdGlvbiBjcyhlLHQpe3JldHVybiB0KihlLnRleHQ/ZS50ZXh0Lmxlbmd0aDowKX1mdW5jdGlvbiBscyhlLHQpe3JldHVybiEhKChlPT09YG1vdXNlbW92ZWB8fGU9PT1gbW91c2VvdXRgKSYmKHQub25Ib3Zlcnx8dC5vbkxlYXZlKXx8dC5vbkNsaWNrJiYoZT09PWBjbGlja2B8fGU9PT1gbW91c2V1cGApKX12YXIgdXM9e2lkOmBsZWdlbmRgLF9lbGVtZW50OmlzLHN0YXJ0KGUsdCxuKXtsZXQgcj1lLmxlZ2VuZD1uZXcgaXMoe2N0eDplLmN0eCxvcHRpb25zOm4sY2hhcnQ6ZX0pO2ZhLmNvbmZpZ3VyZShlLHIsbiksZmEuYWRkQm94KGUscil9LHN0b3AoZSl7ZmEucmVtb3ZlQm94KGUsZS5sZWdlbmQpLGRlbGV0ZSBlLmxlZ2VuZH0sYmVmb3JlVXBkYXRlKGUsdCxuKXtsZXQgcj1lLmxlZ2VuZDtmYS5jb25maWd1cmUoZSxyLG4pLHIub3B0aW9ucz1ufSxhZnRlclVwZGF0ZShlKXtsZXQgdD1lLmxlZ2VuZDt0LmJ1aWxkTGFiZWxzKCksdC5hZGp1c3RIaXRCb3hlcygpfSxhZnRlckV2ZW50KGUsdCl7dC5yZXBsYXl8fGUubGVnZW5kLmhhbmRsZUV2ZW50KHQuZXZlbnQpfSxkZWZhdWx0czp7ZGlzcGxheTohMCxwb3NpdGlvbjpgdG9wYCxhbGlnbjpgY2VudGVyYCxmdWxsU2l6ZTohMCxyZXZlcnNlOiExLHdlaWdodDoxZTMsb25DbGljayhlLHQsbil7bGV0IHI9dC5kYXRhc2V0SW5kZXgsaT1uLmNoYXJ0O2kuaXNEYXRhc2V0VmlzaWJsZShyKT8oaS5oaWRlKHIpLHQuaGlkZGVuPSEwKTooaS5zaG93KHIpLHQuaGlkZGVuPSExKX0sb25Ib3ZlcjpudWxsLG9uTGVhdmU6bnVsbCxsYWJlbHM6e2NvbG9yOmU9PmUuY2hhcnQub3B0aW9ucy5jb2xvcixib3hXaWR0aDo0MCxwYWRkaW5nOjEwLGdlbmVyYXRlTGFiZWxzKGUpe2xldCB0PWUuZGF0YS5kYXRhc2V0cyx7bGFiZWxzOnt1c2VQb2ludFN0eWxlOm4scG9pbnRTdHlsZTpyLHRleHRBbGlnbjppLGNvbG9yOmEsdXNlQm9yZGVyUmFkaXVzOm8sYm9yZGVyUmFkaXVzOnN9fT1lLmxlZ2VuZC5vcHRpb25zO3JldHVybiBlLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoKS5tYXAoZT0+e2xldCBjPWUuY29udHJvbGxlci5nZXRTdHlsZShuPzA6dm9pZCAwKSxsPUooYy5ib3JkZXJXaWR0aCk7cmV0dXJue3RleHQ6dFtlLmluZGV4XS5sYWJlbCxmaWxsU3R5bGU6Yy5iYWNrZ3JvdW5kQ29sb3IsZm9udENvbG9yOmEsaGlkZGVuOiFlLnZpc2libGUsbGluZUNhcDpjLmJvcmRlckNhcFN0eWxlLGxpbmVEYXNoOmMuYm9yZGVyRGFzaCxsaW5lRGFzaE9mZnNldDpjLmJvcmRlckRhc2hPZmZzZXQsbGluZUpvaW46Yy5ib3JkZXJKb2luU3R5bGUsbGluZVdpZHRoOihsLndpZHRoK2wuaGVpZ2h0KS80LHN0cm9rZVN0eWxlOmMuYm9yZGVyQ29sb3IscG9pbnRTdHlsZTpyfHxjLnBvaW50U3R5bGUscm90YXRpb246Yy5yb3RhdGlvbix0ZXh0QWxpZ246aXx8Yy50ZXh0QWxpZ24sYm9yZGVyUmFkaXVzOm8mJihzfHxjLmJvcmRlclJhZGl1cyksZGF0YXNldEluZGV4OmUuaW5kZXh9fSx0aGlzKX19LHRpdGxlOntjb2xvcjplPT5lLmNoYXJ0Lm9wdGlvbnMuY29sb3IsZGlzcGxheTohMSxwb3NpdGlvbjpgY2VudGVyYCx0ZXh0OmBgfX0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksbGFiZWxzOntfc2NyaXB0YWJsZTplPT4hW2BnZW5lcmF0ZUxhYmVsc2AsYGZpbHRlcmAsYHNvcnRgXS5pbmNsdWRlcyhlKX19fSxkcz17YXZlcmFnZShlKXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IHQsbixyPW5ldyBTZXQsaT0wLGE9MDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuOysrdCl7bGV0IG49ZVt0XS5lbGVtZW50O2lmKG4mJm4uaGFzVmFsdWUoKSl7bGV0IGU9bi50b29sdGlwUG9zaXRpb24oKTtyLmFkZChlLngpLGkrPWUueSwrK2F9fXJldHVybiBhPT09MHx8ci5zaXplPT09MD8hMTp7eDpbLi4ucl0ucmVkdWNlKChlLHQpPT5lK3QpL3Iuc2l6ZSx5OmkvYX19LG5lYXJlc3QoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IG49dC54LHI9dC55LGk9MS8wLGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtsZXQgbj1lW2FdLmVsZW1lbnQ7aWYobiYmbi5oYXNWYWx1ZSgpKXtsZXQgZT1YdCh0LG4uZ2V0Q2VudGVyUG9pbnQoKSk7ZTxpJiYoaT1lLHM9bil9fWlmKHMpe2xldCBlPXMudG9vbHRpcFBvc2l0aW9uKCk7bj1lLngscj1lLnl9cmV0dXJue3g6bix5OnJ9fX07ZnVuY3Rpb24gWihlLHQpe3JldHVybiB0JiYoUCh0KT9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLHQpOmUucHVzaCh0KSksZX1mdW5jdGlvbiBmcyhlKXtyZXR1cm4odHlwZW9mIGU9PWBzdHJpbmdgfHxlIGluc3RhbmNlb2YgU3RyaW5nKSYmZS5pbmRleE9mKGAKYCk+LTE/ZS5zcGxpdChgCmApOmV9ZnVuY3Rpb24gcHMoZSx0KXtsZXR7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpyLGluZGV4Oml9PXQsYT1lLmdldERhdGFzZXRNZXRhKHIpLmNvbnRyb2xsZXIse2xhYmVsOm8sdmFsdWU6c309YS5nZXRMYWJlbEFuZFZhbHVlKGkpO3JldHVybntjaGFydDplLGxhYmVsOm8scGFyc2VkOmEuZ2V0UGFyc2VkKGkpLHJhdzplLmRhdGEuZGF0YXNldHNbcl0uZGF0YVtpXSxmb3JtYXR0ZWRWYWx1ZTpzLGRhdGFzZXQ6YS5nZXREYXRhc2V0KCksZGF0YUluZGV4OmksZGF0YXNldEluZGV4OnIsZWxlbWVudDpufX1mdW5jdGlvbiBtcyhlLHQpe2xldCBuPWUuY2hhcnQuY3R4LHtib2R5OnIsZm9vdGVyOmksdGl0bGU6YX09ZSx7Ym94V2lkdGg6byxib3hIZWlnaHQ6c309dCxjPVkodC5ib2R5Rm9udCksbD1ZKHQudGl0bGVGb250KSx1PVkodC5mb290ZXJGb250KSxkPWEubGVuZ3RoLGY9aS5sZW5ndGgscD1yLmxlbmd0aCxtPUoodC5wYWRkaW5nKSxoPW0uaGVpZ2h0LGc9MCxfPXIucmVkdWNlKChlLHQpPT5lK3QuYmVmb3JlLmxlbmd0aCt0LmxpbmVzLmxlbmd0aCt0LmFmdGVyLmxlbmd0aCwwKTtpZihfKz1lLmJlZm9yZUJvZHkubGVuZ3RoK2UuYWZ0ZXJCb2R5Lmxlbmd0aCxkJiYoaCs9ZCpsLmxpbmVIZWlnaHQrKGQtMSkqdC50aXRsZVNwYWNpbmcrdC50aXRsZU1hcmdpbkJvdHRvbSksXyl7bGV0IGU9dC5kaXNwbGF5Q29sb3JzP01hdGgubWF4KHMsYy5saW5lSGVpZ2h0KTpjLmxpbmVIZWlnaHQ7aCs9cCplKyhfLXApKmMubGluZUhlaWdodCsoXy0xKSp0LmJvZHlTcGFjaW5nfWYmJihoKz10LmZvb3Rlck1hcmdpblRvcCtmKnUubGluZUhlaWdodCsoZi0xKSp0LmZvb3RlclNwYWNpbmcpO2xldCB2PTAseT1mdW5jdGlvbihlKXtnPU1hdGgubWF4KGcsbi5tZWFzdXJlVGV4dChlKS53aWR0aCt2KX07cmV0dXJuIG4uc2F2ZSgpLG4uZm9udD1sLnN0cmluZyxCKGUudGl0bGUseSksbi5mb250PWMuc3RyaW5nLEIoZS5iZWZvcmVCb2R5LmNvbmNhdChlLmFmdGVyQm9keSkseSksdj10LmRpc3BsYXlDb2xvcnM/bysyK3QuYm94UGFkZGluZzowLEIocixlPT57QihlLmJlZm9yZSx5KSxCKGUubGluZXMseSksQihlLmFmdGVyLHkpfSksdj0wLG4uZm9udD11LnN0cmluZyxCKGUuZm9vdGVyLHkpLG4ucmVzdG9yZSgpLGcrPW0ud2lkdGgse3dpZHRoOmcsaGVpZ2h0Omh9fWZ1bmN0aW9uIGhzKGUsdCl7bGV0e3k6bixoZWlnaHQ6cn09dDtyZXR1cm4gbjxyLzI/YHRvcGA6bj5lLmhlaWdodC1yLzI/YGJvdHRvbWA6YGNlbnRlcmB9ZnVuY3Rpb24gZ3MoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1yLG89bi5jYXJldFNpemUrbi5jYXJldFBhZGRpbmc7aWYoZT09PWBsZWZ0YCYmaSthK28+dC53aWR0aHx8ZT09PWByaWdodGAmJmktYS1vPDApcmV0dXJuITB9ZnVuY3Rpb24gX3MoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1uLHt3aWR0aDpvLGNoYXJ0QXJlYTp7bGVmdDpzLHJpZ2h0OmN9fT1lLGw9YGNlbnRlcmA7cmV0dXJuIHI9PT1gY2VudGVyYD9sPWk8PShzK2MpLzI/YGxlZnRgOmByaWdodGA6aTw9YS8yP2w9YGxlZnRgOmk+PW8tYS8yJiYobD1gcmlnaHRgKSxncyhsLGUsdCxuKSYmKGw9YGNlbnRlcmApLGx9ZnVuY3Rpb24gdnMoZSx0LG4pe2xldCByPW4ueUFsaWdufHx0LnlBbGlnbnx8aHMoZSxuKTtyZXR1cm57eEFsaWduOm4ueEFsaWdufHx0LnhBbGlnbnx8X3MoZSx0LG4scikseUFsaWduOnJ9fWZ1bmN0aW9uIHlzKGUsdCl7bGV0e3g6bix3aWR0aDpyfT1lO3JldHVybiB0PT09YHJpZ2h0YD9uLT1yOnQ9PT1gY2VudGVyYCYmKG4tPXIvMiksbn1mdW5jdGlvbiBicyhlLHQsbil7bGV0e3k6cixoZWlnaHQ6aX09ZTtyZXR1cm4gdD09PWB0b3BgP3IrPW46ci09dD09PWBib3R0b21gP2krbjppLzIscn1mdW5jdGlvbiB4cyhlLHQsbixyKXtsZXR7Y2FyZXRTaXplOmksY2FyZXRQYWRkaW5nOmEsY29ybmVyUmFkaXVzOm99PWUse3hBbGlnbjpzLHlBbGlnbjpjfT1uLGw9aSthLHt0b3BMZWZ0OnUsdG9wUmlnaHQ6ZCxib3R0b21MZWZ0OmYsYm90dG9tUmlnaHQ6cH09cnIobyksbT15cyh0LHMpLGg9YnModCxjLGwpO3JldHVybiBjPT09YGNlbnRlcmA/cz09PWBsZWZ0YD9tKz1sOnM9PT1gcmlnaHRgJiYobS09bCk6cz09PWBsZWZ0YD9tLT1NYXRoLm1heCh1LGYpK2k6cz09PWByaWdodGAmJihtKz1NYXRoLm1heChkLHApK2kpLHt4OkcobSwwLHIud2lkdGgtdC53aWR0aCkseTpHKGgsMCxyLmhlaWdodC10LmhlaWdodCl9fWZ1bmN0aW9uIFNzKGUsdCxuKXtsZXQgcj1KKG4ucGFkZGluZyk7cmV0dXJuIHQ9PT1gY2VudGVyYD9lLngrZS53aWR0aC8yOnQ9PT1gcmlnaHRgP2UueCtlLndpZHRoLXIucmlnaHQ6ZS54K3IubGVmdH1mdW5jdGlvbiBDcyhlKXtyZXR1cm4gWihbXSxmcyhlKSl9ZnVuY3Rpb24gd3MoZSx0LG4pe3JldHVybiBvcihlLHt0b29sdGlwOnQsdG9vbHRpcEl0ZW1zOm4sdHlwZTpgdG9vbHRpcGB9KX1mdW5jdGlvbiBUcyhlLHQpe2xldCBuPXQmJnQuZGF0YXNldCYmdC5kYXRhc2V0LnRvb2x0aXAmJnQuZGF0YXNldC50b29sdGlwLmNhbGxiYWNrcztyZXR1cm4gbj9lLm92ZXJyaWRlKG4pOmV9dmFyIEVzPXtiZWZvcmVUaXRsZTpNLHRpdGxlKGUpe2lmKGUubGVuZ3RoPjApe2xldCB0PWVbMF0sbj10LmNoYXJ0LmRhdGEubGFiZWxzLHI9bj9uLmxlbmd0aDowO2lmKHRoaXMmJnRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm1vZGU9PT1gZGF0YXNldGApcmV0dXJuIHQuZGF0YXNldC5sYWJlbHx8YGA7aWYodC5sYWJlbClyZXR1cm4gdC5sYWJlbDtpZihyPjAmJnQuZGF0YUluZGV4PHIpcmV0dXJuIG5bdC5kYXRhSW5kZXhdfXJldHVybmBgfSxhZnRlclRpdGxlOk0sYmVmb3JlQm9keTpNLGJlZm9yZUxhYmVsOk0sbGFiZWwoZSl7aWYodGhpcyYmdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubW9kZT09PWBkYXRhc2V0YClyZXR1cm4gZS5sYWJlbCtgOiBgK2UuZm9ybWF0dGVkVmFsdWV8fGUuZm9ybWF0dGVkVmFsdWU7bGV0IHQ9ZS5kYXRhc2V0LmxhYmVsfHxgYDt0JiYodCs9YDogYCk7bGV0IG49ZS5mb3JtYXR0ZWRWYWx1ZTtyZXR1cm4gTihuKXx8KHQrPW4pLHR9LGxhYmVsQ29sb3IoZSl7bGV0IHQ9ZS5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRTdHlsZShlLmRhdGFJbmRleCk7cmV0dXJue2JvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsYmFja2dyb3VuZENvbG9yOnQuYmFja2dyb3VuZENvbG9yLGJvcmRlcldpZHRoOnQuYm9yZGVyV2lkdGgsYm9yZGVyRGFzaDp0LmJvcmRlckRhc2gsYm9yZGVyRGFzaE9mZnNldDp0LmJvcmRlckRhc2hPZmZzZXQsYm9yZGVyUmFkaXVzOjB9fSxsYWJlbFRleHRDb2xvcigpe3JldHVybiB0aGlzLm9wdGlvbnMuYm9keUNvbG9yfSxsYWJlbFBvaW50U3R5bGUoZSl7bGV0IHQ9ZS5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRTdHlsZShlLmRhdGFJbmRleCk7cmV0dXJue3BvaW50U3R5bGU6dC5wb2ludFN0eWxlLHJvdGF0aW9uOnQucm90YXRpb259fSxhZnRlckxhYmVsOk0sYWZ0ZXJCb2R5Ok0sYmVmb3JlRm9vdGVyOk0sZm9vdGVyOk0sYWZ0ZXJGb290ZXI6TX07ZnVuY3Rpb24gUShlLHQsbixyKXtsZXQgaT1lW3RdLmNhbGwobixyKTtyZXR1cm4gaT09PXZvaWQgMD9Fc1t0XS5jYWxsKG4scik6aX12YXIgRHM9Y2xhc3MgZXh0ZW5kcyBJYXtzdGF0aWMgcG9zaXRpb25lcnM9ZHM7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9wYWNpdHk9MCx0aGlzLl9hY3RpdmU9W10sdGhpcy5fZXZlbnRQb3NpdGlvbj12b2lkIDAsdGhpcy5fc2l6ZT12b2lkIDAsdGhpcy5fY2FjaGVkQW5pbWF0aW9ucz12b2lkIDAsdGhpcy5fdG9vbHRpcEl0ZW1zPVtdLHRoaXMuJGFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwLHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLm9wdGlvbnM9ZS5vcHRpb25zLHRoaXMuZGF0YVBvaW50cz12b2lkIDAsdGhpcy50aXRsZT12b2lkIDAsdGhpcy5iZWZvcmVCb2R5PXZvaWQgMCx0aGlzLmJvZHk9dm9pZCAwLHRoaXMuYWZ0ZXJCb2R5PXZvaWQgMCx0aGlzLmZvb3Rlcj12b2lkIDAsdGhpcy54QWxpZ249dm9pZCAwLHRoaXMueUFsaWduPXZvaWQgMCx0aGlzLng9dm9pZCAwLHRoaXMueT12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2FyZXRYPXZvaWQgMCx0aGlzLmNhcmV0WT12b2lkIDAsdGhpcy5sYWJlbENvbG9ycz12b2lkIDAsdGhpcy5sYWJlbFBvaW50U3R5bGVzPXZvaWQgMCx0aGlzLmxhYmVsVGV4dENvbG9ycz12b2lkIDB9aW5pdGlhbGl6ZShlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLl9jYWNoZWRBbmltYXRpb25zPXZvaWQgMCx0aGlzLiRjb250ZXh0PXZvaWQgMH1fcmVzb2x2ZUFuaW1hdGlvbnMoKXtsZXQgZT10aGlzLl9jYWNoZWRBbmltYXRpb25zO2lmKGUpcmV0dXJuIGU7bGV0IHQ9dGhpcy5jaGFydCxuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPW4uZW5hYmxlZCYmdC5vcHRpb25zLmFuaW1hdGlvbiYmbi5hbmltYXRpb25zLGk9bmV3IGVpKHRoaXMuY2hhcnQscik7cmV0dXJuIHIuX2NhY2hlYWJsZSYmKHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9T2JqZWN0LmZyZWV6ZShpKSksaX1nZXRDb250ZXh0KCl7cmV0dXJuIHRoaXMuJGNvbnRleHR8fD13cyh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzLHRoaXMuX3Rvb2x0aXBJdGVtcyl9Z2V0VGl0bGUoZSx0KXtsZXR7Y2FsbGJhY2tzOm59PXQscj1RKG4sYGJlZm9yZVRpdGxlYCx0aGlzLGUpLGk9UShuLGB0aXRsZWAsdGhpcyxlKSxhPVEobixgYWZ0ZXJUaXRsZWAsdGhpcyxlKSxvPVtdO3JldHVybiBvPVoobyxmcyhyKSksbz1aKG8sZnMoaSkpLG89WihvLGZzKGEpKSxvfWdldEJlZm9yZUJvZHkoZSx0KXtyZXR1cm4gQ3MoUSh0LmNhbGxiYWNrcyxgYmVmb3JlQm9keWAsdGhpcyxlKSl9Z2V0Qm9keShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPVtdO3JldHVybiBCKGUsZT0+e2xldCB0PXtiZWZvcmU6W10sbGluZXM6W10sYWZ0ZXI6W119LGk9VHMobixlKTtaKHQuYmVmb3JlLGZzKFEoaSxgYmVmb3JlTGFiZWxgLHRoaXMsZSkpKSxaKHQubGluZXMsUShpLGBsYWJlbGAsdGhpcyxlKSksWih0LmFmdGVyLGZzKFEoaSxgYWZ0ZXJMYWJlbGAsdGhpcyxlKSkpLHIucHVzaCh0KX0pLHJ9Z2V0QWZ0ZXJCb2R5KGUsdCl7cmV0dXJuIENzKFEodC5jYWxsYmFja3MsYGFmdGVyQm9keWAsdGhpcyxlKSl9Z2V0Rm9vdGVyKGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9UShuLGBiZWZvcmVGb290ZXJgLHRoaXMsZSksaT1RKG4sYGZvb3RlcmAsdGhpcyxlKSxhPVEobixgYWZ0ZXJGb290ZXJgLHRoaXMsZSksbz1bXTtyZXR1cm4gbz1aKG8sZnMocikpLG89WihvLGZzKGkpKSxvPVoobyxmcyhhKSksb31fY3JlYXRlSXRlbXMoZSl7bGV0IHQ9dGhpcy5fYWN0aXZlLG49dGhpcy5jaGFydC5kYXRhLHI9W10saT1bXSxhPVtdLG89W10scyxjO2ZvcihzPTAsYz10Lmxlbmd0aDtzPGM7KytzKW8ucHVzaChwcyh0aGlzLmNoYXJ0LHRbc10pKTtyZXR1cm4gZS5maWx0ZXImJihvPW8uZmlsdGVyKCh0LHIsaSk9PmUuZmlsdGVyKHQscixpLG4pKSksZS5pdGVtU29ydCYmKG89by5zb3J0KCh0LHIpPT5lLml0ZW1Tb3J0KHQscixuKSkpLEIobyx0PT57bGV0IG49VHMoZS5jYWxsYmFja3MsdCk7ci5wdXNoKFEobixgbGFiZWxDb2xvcmAsdGhpcyx0KSksaS5wdXNoKFEobixgbGFiZWxQb2ludFN0eWxlYCx0aGlzLHQpKSxhLnB1c2goUShuLGBsYWJlbFRleHRDb2xvcmAsdGhpcyx0KSl9KSx0aGlzLmxhYmVsQ29sb3JzPXIsdGhpcy5sYWJlbFBvaW50U3R5bGVzPWksdGhpcy5sYWJlbFRleHRDb2xvcnM9YSx0aGlzLmRhdGFQb2ludHM9byxvfXVwZGF0ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPXRoaXMuX2FjdGl2ZSxpLGE9W107aWYoIXIubGVuZ3RoKXRoaXMub3BhY2l0eSE9PTAmJihpPXtvcGFjaXR5OjB9KTtlbHNle2xldCBlPWRzW24ucG9zaXRpb25dLmNhbGwodGhpcyxyLHRoaXMuX2V2ZW50UG9zaXRpb24pO2E9dGhpcy5fY3JlYXRlSXRlbXMobiksdGhpcy50aXRsZT10aGlzLmdldFRpdGxlKGEsbiksdGhpcy5iZWZvcmVCb2R5PXRoaXMuZ2V0QmVmb3JlQm9keShhLG4pLHRoaXMuYm9keT10aGlzLmdldEJvZHkoYSxuKSx0aGlzLmFmdGVyQm9keT10aGlzLmdldEFmdGVyQm9keShhLG4pLHRoaXMuZm9vdGVyPXRoaXMuZ2V0Rm9vdGVyKGEsbik7bGV0IHQ9dGhpcy5fc2l6ZT1tcyh0aGlzLG4pLG89T2JqZWN0LmFzc2lnbih7fSxlLHQpLHM9dnModGhpcy5jaGFydCxuLG8pLGM9eHMobixvLHMsdGhpcy5jaGFydCk7dGhpcy54QWxpZ249cy54QWxpZ24sdGhpcy55QWxpZ249cy55QWxpZ24saT17b3BhY2l0eToxLHg6Yy54LHk6Yy55LHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LGNhcmV0WDplLngsY2FyZXRZOmUueX19dGhpcy5fdG9vbHRpcEl0ZW1zPWEsdGhpcy4kY29udGV4dD12b2lkIDAsaSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcyxpKSxlJiZuLmV4dGVybmFsJiZuLmV4dGVybmFsLmNhbGwodGhpcyx7Y2hhcnQ6dGhpcy5jaGFydCx0b29sdGlwOnRoaXMscmVwbGF5OnR9KX1kcmF3Q2FyZXQoZSx0LG4scil7bGV0IGk9dGhpcy5nZXRDYXJldFBvc2l0aW9uKGUsbixyKTt0LmxpbmVUbyhpLngxLGkueTEpLHQubGluZVRvKGkueDIsaS55MiksdC5saW5lVG8oaS54MyxpLnkzKX1nZXRDYXJldFBvc2l0aW9uKGUsdCxuKXtsZXR7eEFsaWduOnIseUFsaWduOml9PXRoaXMse2NhcmV0U2l6ZTphLGNvcm5lclJhZGl1czpvfT1uLHt0b3BMZWZ0OnMsdG9wUmlnaHQ6Yyxib3R0b21MZWZ0OmwsYm90dG9tUmlnaHQ6dX09cnIobykse3g6ZCx5OmZ9PWUse3dpZHRoOnAsaGVpZ2h0Om19PXQsaCxnLF8sdix5LGI7cmV0dXJuIGk9PT1gY2VudGVyYD8oeT1mK20vMixyPT09YGxlZnRgPyhoPWQsZz1oLWEsdj15K2EsYj15LWEpOihoPWQrcCxnPWgrYSx2PXktYSxiPXkrYSksXz1oKTooZz1yPT09YGxlZnRgP2QrTWF0aC5tYXgocyxsKSthOnI9PT1gcmlnaHRgP2QrcC1NYXRoLm1heChjLHUpLWE6dGhpcy5jYXJldFgsaT09PWB0b3BgPyh2PWYseT12LWEsaD1nLWEsXz1nK2EpOih2PWYrbSx5PXYrYSxoPWcrYSxfPWctYSksYj12KSx7eDE6aCx4MjpnLHgzOl8seTE6dix5Mjp5LHkzOmJ9fWRyYXdUaXRsZShlLHQsbil7bGV0IHI9dGhpcy50aXRsZSxpPXIubGVuZ3RoLGEsbyxzO2lmKGkpe2xldCBjPVdyKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKTtmb3IoZS54PVNzKHRoaXMsbi50aXRsZUFsaWduLG4pLHQudGV4dEFsaWduPWMudGV4dEFsaWduKG4udGl0bGVBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT1ZKG4udGl0bGVGb250KSxvPW4udGl0bGVTcGFjaW5nLHQuZmlsbFN0eWxlPW4udGl0bGVDb2xvcix0LmZvbnQ9YS5zdHJpbmcscz0wO3M8aTsrK3MpdC5maWxsVGV4dChyW3NdLGMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbyxzKzE9PT1pJiYoZS55Kz1uLnRpdGxlTWFyZ2luQm90dG9tLW8pfX1fZHJhd0NvbG9yQm94KGUsdCxuLHIsaSl7bGV0IGE9dGhpcy5sYWJlbENvbG9yc1tuXSxvPXRoaXMubGFiZWxQb2ludFN0eWxlc1tuXSx7Ym94SGVpZ2h0OnMsYm94V2lkdGg6Y309aSxsPVkoaS5ib2R5Rm9udCksdT1Tcyh0aGlzLGBsZWZ0YCxpKSxkPXIueCh1KSxmPXM8bC5saW5lSGVpZ2h0PyhsLmxpbmVIZWlnaHQtcykvMjowLHA9dC55K2Y7aWYoaS51c2VQb2ludFN0eWxlKXtsZXQgdD17cmFkaXVzOk1hdGgubWluKGMscykvMixwb2ludFN0eWxlOm8ucG9pbnRTdHlsZSxyb3RhdGlvbjpvLnJvdGF0aW9uLGJvcmRlcldpZHRoOjF9LG49ci5sZWZ0Rm9yTHRyKGQsYykrYy8yLGw9cCtzLzI7ZS5zdHJva2VTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxWbihlLHQsbixsKSxlLnN0cm9rZVN0eWxlPWEuYm9yZGVyQ29sb3IsZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3IsVm4oZSx0LG4sbCl9ZWxzZXtlLmxpbmVXaWR0aD1GKGEuYm9yZGVyV2lkdGgpP01hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoYS5ib3JkZXJXaWR0aCkpOmEuYm9yZGVyV2lkdGh8fDEsZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuc2V0TGluZURhc2goYS5ib3JkZXJEYXNofHxbXSksZS5saW5lRGFzaE9mZnNldD1hLmJvcmRlckRhc2hPZmZzZXR8fDA7bGV0IHQ9ci5sZWZ0Rm9yTHRyKGQsYyksbj1yLmxlZnRGb3JMdHIoci54UGx1cyhkLDEpLGMtMiksbz1ycihhLmJvcmRlclJhZGl1cyk7T2JqZWN0LnZhbHVlcyhvKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxYbihlLHt4OnQseTpwLHc6YyxoOnMscmFkaXVzOm99KSxlLmZpbGwoKSxlLnN0cm9rZSgpLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLGUuYmVnaW5QYXRoKCksWG4oZSx7eDpuLHk6cCsxLHc6Yy0yLGg6cy0yLHJhZGl1czpvfSksZS5maWxsKCkpOihlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxSZWN0KHQscCxjLHMpLGUuc3Ryb2tlUmVjdCh0LHAsYyxzKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmZpbGxSZWN0KG4scCsxLGMtMixzLTIpKX1lLmZpbGxTdHlsZT10aGlzLmxhYmVsVGV4dENvbG9yc1tuXX1kcmF3Qm9keShlLHQsbil7bGV0e2JvZHk6cn09dGhpcyx7Ym9keVNwYWNpbmc6aSxib2R5QWxpZ246YSxkaXNwbGF5Q29sb3JzOm8sYm94SGVpZ2h0OnMsYm94V2lkdGg6Yyxib3hQYWRkaW5nOmx9PW4sdT1ZKG4uYm9keUZvbnQpLGQ9dS5saW5lSGVpZ2h0LGY9MCxwPVdyKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKSxtPWZ1bmN0aW9uKG4pe3QuZmlsbFRleHQobixwLngoZS54K2YpLGUueStkLzIpLGUueSs9ZCtpfSxoPXAudGV4dEFsaWduKGEpLGcsXyx2LHksYix4LFM7Zm9yKHQudGV4dEFsaWduPWEsdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdC5mb250PXUuc3RyaW5nLGUueD1Tcyh0aGlzLGgsbiksdC5maWxsU3R5bGU9bi5ib2R5Q29sb3IsQih0aGlzLmJlZm9yZUJvZHksbSksZj1vJiZoIT09YHJpZ2h0YD9hPT09YGNlbnRlcmA/Yy8yK2w6YysyK2w6MCx5PTAseD1yLmxlbmd0aDt5PHg7Kyt5KXtmb3IoZz1yW3ldLF89dGhpcy5sYWJlbFRleHRDb2xvcnNbeV0sdC5maWxsU3R5bGU9XyxCKGcuYmVmb3JlLG0pLHY9Zy5saW5lcyxvJiZ2Lmxlbmd0aCYmKHRoaXMuX2RyYXdDb2xvckJveCh0LGUseSxwLG4pLGQ9TWF0aC5tYXgodS5saW5lSGVpZ2h0LHMpKSxiPTAsUz12Lmxlbmd0aDtiPFM7KytiKW0odltiXSksZD11LmxpbmVIZWlnaHQ7QihnLmFmdGVyLG0pfWY9MCxkPXUubGluZUhlaWdodCxCKHRoaXMuYWZ0ZXJCb2R5LG0pLGUueS09aX1kcmF3Rm9vdGVyKGUsdCxuKXtsZXQgcj10aGlzLmZvb3RlcixpPXIubGVuZ3RoLGEsbztpZihpKXtsZXQgcz1XcihuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1Tcyh0aGlzLG4uZm9vdGVyQWxpZ24sbiksZS55Kz1uLmZvb3Rlck1hcmdpblRvcCx0LnRleHRBbGlnbj1zLnRleHRBbGlnbihuLmZvb3RlckFsaWduKSx0LnRleHRCYXNlbGluZT1gbWlkZGxlYCxhPVkobi5mb290ZXJGb250KSx0LmZpbGxTdHlsZT1uLmZvb3RlckNvbG9yLHQuZm9udD1hLnN0cmluZyxvPTA7bzxpOysrbyl0LmZpbGxUZXh0KHJbb10scy54KGUueCksZS55K2EubGluZUhlaWdodC8yKSxlLnkrPWEubGluZUhlaWdodCtuLmZvb3RlclNwYWNpbmd9fWRyYXdCYWNrZ3JvdW5kKGUsdCxuLHIpe2xldHt4QWxpZ246aSx5QWxpZ246YX09dGhpcyx7eDpvLHk6c309ZSx7d2lkdGg6YyxoZWlnaHQ6bH09bix7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PXJyKHIuY29ybmVyUmFkaXVzKTt0LmZpbGxTdHlsZT1yLmJhY2tncm91bmRDb2xvcix0LnN0cm9rZVN0eWxlPXIuYm9yZGVyQ29sb3IsdC5saW5lV2lkdGg9ci5ib3JkZXJXaWR0aCx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG8rdSxzKSxhPT09YHRvcGAmJnRoaXMuZHJhd0NhcmV0KGUsdCxuLHIpLHQubGluZVRvKG8rYy1kLHMpLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscyxvK2MscytkKSxhPT09YGNlbnRlcmAmJmk9PT1gcmlnaHRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MscytsLXApLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscytsLG8rYy1wLHMrbCksYT09PWBib3R0b21gJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2YscytsKSx0LnF1YWRyYXRpY0N1cnZlVG8obyxzK2wsbyxzK2wtZiksYT09PWBjZW50ZXJgJiZpPT09YGxlZnRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvLHMrdSksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scyxvK3UscyksdC5jbG9zZVBhdGgoKSx0LmZpbGwoKSxyLmJvcmRlcldpZHRoPjAmJnQuc3Ryb2tlKCl9X3VwZGF0ZUFuaW1hdGlvblRhcmdldChlKXtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy4kYW5pbWF0aW9ucyxyPW4mJm4ueCxpPW4mJm4ueTtpZihyfHxpKXtsZXQgbj1kc1tlLnBvc2l0aW9uXS5jYWxsKHRoaXMsdGhpcy5fYWN0aXZlLHRoaXMuX2V2ZW50UG9zaXRpb24pO2lmKCFuKXJldHVybjtsZXQgYT10aGlzLl9zaXplPW1zKHRoaXMsZSksbz1PYmplY3QuYXNzaWduKHt9LG4sdGhpcy5fc2l6ZSkscz12cyh0LGUsbyksYz14cyhlLG8scyx0KTsoci5fdG8hPT1jLnh8fGkuX3RvIT09Yy55KSYmKHRoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLHRoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLmNhcmV0WD1uLngsdGhpcy5jYXJldFk9bi55LHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsYykpfX1fd2lsbFJlbmRlcigpe3JldHVybiEhdGhpcy5vcGFjaXR5fWRyYXcoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLG49dGhpcy5vcGFjaXR5O2lmKCFuKXJldHVybjt0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQodCk7bGV0IHI9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxpPXt4OnRoaXMueCx5OnRoaXMueX07bj1NYXRoLmFicyhuKTwuMDAxPzA6bjtsZXQgYT1KKHQucGFkZGluZyksbz10aGlzLnRpdGxlLmxlbmd0aHx8dGhpcy5iZWZvcmVCb2R5Lmxlbmd0aHx8dGhpcy5ib2R5Lmxlbmd0aHx8dGhpcy5hZnRlckJvZHkubGVuZ3RofHx0aGlzLmZvb3Rlci5sZW5ndGg7dC5lbmFibGVkJiZvJiYoZS5zYXZlKCksZS5nbG9iYWxBbHBoYT1uLHRoaXMuZHJhd0JhY2tncm91bmQoaSxlLHIsdCksR3IoZSx0LnRleHREaXJlY3Rpb24pLGkueSs9YS50b3AsdGhpcy5kcmF3VGl0bGUoaSxlLHQpLHRoaXMuZHJhd0JvZHkoaSxlLHQpLHRoaXMuZHJhd0Zvb3RlcihpLGUsdCksS3IoZSx0LnRleHREaXJlY3Rpb24pLGUucmVzdG9yZSgpKX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fYWN0aXZlLHI9ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KSxpPSFfdChuLHIpLGE9dGhpcy5fcG9zaXRpb25DaGFuZ2VkKHIsdCk7KGl8fGEpJiYodGhpcy5fYWN0aXZlPXIsdGhpcy5fZXZlbnRQb3NpdGlvbj10LHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMCx0aGlzLnVwZGF0ZSghMCkpfWhhbmRsZUV2ZW50KGUsdCxuPSEwKXtpZih0JiZ0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHMpcmV0dXJuITE7dGhpcy5faWdub3JlUmVwbGF5RXZlbnRzPSExO2xldCByPXRoaXMub3B0aW9ucyxpPXRoaXMuX2FjdGl2ZXx8W10sYT10aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLGksdCxuKSxvPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChhLGUpLHM9dHx8IV90KGEsaSl8fG87cmV0dXJuIHMmJih0aGlzLl9hY3RpdmU9YSwoci5lbmFibGVkfHxyLmV4dGVybmFsKSYmKHRoaXMuX2V2ZW50UG9zaXRpb249e3g6ZS54LHk6ZS55fSx0aGlzLnVwZGF0ZSghMCx0KSkpLHN9X2dldEFjdGl2ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9ucztpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFyKXJldHVybiB0LmZpbHRlcihlPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZS5kYXRhc2V0SW5kZXhdJiZ0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFBhcnNlZChlLmluZGV4KSE9PXZvaWQgMCk7bGV0IGE9dGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGksbik7cmV0dXJuIGkucmV2ZXJzZSYmYS5yZXZlcnNlKCksYX1fcG9zaXRpb25DaGFuZ2VkKGUsdCl7bGV0e2NhcmV0WDpuLGNhcmV0WTpyLG9wdGlvbnM6aX09dGhpcyxhPWRzW2kucG9zaXRpb25dLmNhbGwodGhpcyxlLHQpO3JldHVybiBhIT09ITEmJihuIT09YS54fHxyIT09YS55KX19LE9zPXtpZDpgdG9vbHRpcGAsX2VsZW1lbnQ6RHMscG9zaXRpb25lcnM6ZHMsYWZ0ZXJJbml0KGUsdCxuKXtuJiYoZS50b29sdGlwPW5ldyBEcyh7Y2hhcnQ6ZSxvcHRpb25zOm59KSl9LGJlZm9yZVVwZGF0ZShlLHQsbil7ZS50b29sdGlwJiZlLnRvb2x0aXAuaW5pdGlhbGl6ZShuKX0scmVzZXQoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LGFmdGVyRHJhdyhlKXtsZXQgdD1lLnRvb2x0aXA7aWYodCYmdC5fd2lsbFJlbmRlcigpKXtsZXQgbj17dG9vbHRpcDp0fTtpZihlLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVRvb2x0aXBEcmF3YCx7Li4ubixjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47dC5kcmF3KGUuY3R4KSxlLm5vdGlmeVBsdWdpbnMoYGFmdGVyVG9vbHRpcERyYXdgLG4pfX0sYWZ0ZXJFdmVudChlLHQpe2lmKGUudG9vbHRpcCl7bGV0IG49dC5yZXBsYXk7ZS50b29sdGlwLmhhbmRsZUV2ZW50KHQuZXZlbnQsbix0LmluQ2hhcnRBcmVhKSYmKHQuY2hhbmdlZD0hMCl9fSxkZWZhdWx0czp7ZW5hYmxlZDohMCxleHRlcm5hbDpudWxsLHBvc2l0aW9uOmBhdmVyYWdlYCxiYWNrZ3JvdW5kQ29sb3I6YHJnYmEoMCwwLDAsMC44KWAsdGl0bGVDb2xvcjpgI2ZmZmAsdGl0bGVGb250Ont3ZWlnaHQ6YGJvbGRgfSx0aXRsZVNwYWNpbmc6Mix0aXRsZU1hcmdpbkJvdHRvbTo2LHRpdGxlQWxpZ246YGxlZnRgLGJvZHlDb2xvcjpgI2ZmZmAsYm9keVNwYWNpbmc6Mixib2R5Rm9udDp7fSxib2R5QWxpZ246YGxlZnRgLGZvb3RlckNvbG9yOmAjZmZmYCxmb290ZXJTcGFjaW5nOjIsZm9vdGVyTWFyZ2luVG9wOjYsZm9vdGVyRm9udDp7d2VpZ2h0OmBib2xkYH0sZm9vdGVyQWxpZ246YGxlZnRgLHBhZGRpbmc6NixjYXJldFBhZGRpbmc6MixjYXJldFNpemU6NSxjb3JuZXJSYWRpdXM6Nixib3hIZWlnaHQ6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxib3hXaWR0aDooZSx0KT0+dC5ib2R5Rm9udC5zaXplLG11bHRpS2V5QmFja2dyb3VuZDpgI2ZmZmAsZGlzcGxheUNvbG9yczohMCxib3hQYWRkaW5nOjAsYm9yZGVyQ29sb3I6YHJnYmEoMCwwLDAsMClgLGJvcmRlcldpZHRoOjAsYW5pbWF0aW9uOntkdXJhdGlvbjo0MDAsZWFzaW5nOmBlYXNlT3V0UXVhcnRgfSxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYHdpZHRoYCxgaGVpZ2h0YCxgY2FyZXRYYCxgY2FyZXRZYF19LG9wYWNpdHk6e2Vhc2luZzpgbGluZWFyYCxkdXJhdGlvbjoyMDB9fSxjYWxsYmFja3M6RXN9LGRlZmF1bHRSb3V0ZXM6e2JvZHlGb250OmBmb250YCxmb290ZXJGb250OmBmb250YCx0aXRsZUZvbnQ6YGZvbnRgfSxkZXNjcmlwdG9yczp7X3NjcmlwdGFibGU6ZT0+ZSE9PWBmaWx0ZXJgJiZlIT09YGl0ZW1Tb3J0YCYmZSE9PWBleHRlcm5hbGAsX2luZGV4YWJsZTohMSxjYWxsYmFja3M6e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9LGFuaW1hdGlvbjp7X2ZhbGxiYWNrOiExfSxhbmltYXRpb25zOntfZmFsbGJhY2s6YGFuaW1hdGlvbmB9fSxhZGRpdGlvbmFsT3B0aW9uU2NvcGVzOltgaW50ZXJhY3Rpb25gXX0sa3M9KGUsdCxuLHIpPT4odHlwZW9mIHQ9PWBzdHJpbmdgPyhuPWUucHVzaCh0KS0xLHIudW5zaGlmdCh7aW5kZXg6bixsYWJlbDp0fSkpOmlzTmFOKHQpJiYobj1udWxsKSxuKTtmdW5jdGlvbiBBcyhlLHQsbixyKXtsZXQgaT1lLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9rcyhlLHQsbixyKTppPT09ZS5sYXN0SW5kZXhPZih0KT9pOm59dmFyIGpzPShlLHQpPT5lPT09bnVsbD9udWxsOkcoTWF0aC5yb3VuZChlKSwwLHQpO2Z1bmN0aW9uIE1zKGUpe2xldCB0PXRoaXMuZ2V0TGFiZWxzKCk7cmV0dXJuIGU+PTAmJmU8dC5sZW5ndGg/dFtlXTplfXZhciBOcz1jbGFzcyBleHRlbmRzIG5ve3N0YXRpYyBpZD1gY2F0ZWdvcnlgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOk1zfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wLHRoaXMuX2FkZGVkTGFiZWxzPVtdfWluaXQoZSl7bGV0IHQ9dGhpcy5fYWRkZWRMYWJlbHM7aWYodC5sZW5ndGgpe2xldCBlPXRoaXMuZ2V0TGFiZWxzKCk7Zm9yKGxldHtpbmRleDpuLGxhYmVsOnJ9b2YgdCllW25dPT09ciYmZS5zcGxpY2UobiwxKTt0aGlzLl9hZGRlZExhYmVscz1bXX1zdXBlci5pbml0KGUpfXBhcnNlKGUsdCl7aWYoTihlKSlyZXR1cm4gbnVsbDtsZXQgbj10aGlzLmdldExhYmVscygpO3JldHVybiB0PWlzRmluaXRlKHQpJiZuW3RdPT09ZT90OkFzKG4sZSxSKHQsZSksdGhpcy5fYWRkZWRMYWJlbHMpLGpzKHQsbi5sZW5ndGgtMSl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOm4sbWF4OnJ9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm9wdGlvbnMuYm91bmRzPT09YHRpY2tzYCYmKGV8fChuPTApLHR8fChyPXRoaXMuZ2V0TGFiZWxzKCkubGVuZ3RoLTEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMubWluLHQ9dGhpcy5tYXgsbj10aGlzLm9wdGlvbnMub2Zmc2V0LHI9W10saT10aGlzLmdldExhYmVscygpO2k9ZT09PTAmJnQ9PT1pLmxlbmd0aC0xP2k6aS5zbGljZShlLHQrMSksdGhpcy5fdmFsdWVSYW5nZT1NYXRoLm1heChpLmxlbmd0aC0rIW4sMSksdGhpcy5fc3RhcnRWYWx1ZT10aGlzLm1pbi0obj8uNTowKTtmb3IobGV0IG49ZTtuPD10O24rKylyLnB1c2goe3ZhbHVlOm59KTtyZXR1cm4gcn1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBNcy5jYWxsKHRoaXMsZSl9Y29uZmlndXJlKCl7c3VwZXIuY29uZmlndXJlKCksdGhpcy5pc0hvcml6b250YWwoKXx8KHRoaXMuX3JldmVyc2VQaXhlbHM9IXRoaXMuX3JldmVyc2VQaXhlbHMpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIHR5cGVvZiBlIT1gbnVtYmVyYCYmKGU9dGhpcy5wYXJzZShlKSksZT09PW51bGw/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKChlLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUrdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkqdGhpcy5fdmFsdWVSYW5nZSl9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuYm90dG9tfX07ZnVuY3Rpb24gUHMoZSx0KXtsZXQgbj1bXSx7Ym91bmRzOnIsc3RlcDppLG1pbjphLG1heDpvLHByZWNpc2lvbjpzLGNvdW50OmMsbWF4VGlja3M6bCxtYXhEaWdpdHM6dSxpbmNsdWRlQm91bmRzOmR9PWUsZj1pfHwxLHA9bC0xLHttaW46bSxtYXg6aH09dCxnPSFOKGEpLF89IU4obyksdj0hTihjKSx5PShoLW0pLyh1KzEpLGI9QnQoKGgtbSkvcC9mKSpmLHgsUyxDLHc7aWYoYjwxZS0xNCYmIWcmJiFfKXJldHVyblt7dmFsdWU6bX0se3ZhbHVlOmh9XTt3PU1hdGguY2VpbChoL2IpLU1hdGguZmxvb3IobS9iKSx3PnAmJihiPUJ0KHcqYi9wL2YpKmYpLE4ocyl8fCh4PTEwKipzLGI9TWF0aC5jZWlsKGIqeCkveCkscj09PWB0aWNrc2A/KFM9TWF0aC5mbG9vcihtL2IpKmIsQz1NYXRoLmNlaWwoaC9iKSpiKTooUz1tLEM9aCksZyYmXyYmaSYmV3QoKG8tYSkvaSxiLzFlMyk/KHc9TWF0aC5yb3VuZChNYXRoLm1pbigoby1hKS9iLGwpKSxiPShvLWEpL3csUz1hLEM9byk6dj8oUz1nP2E6UyxDPV8/bzpDLHc9Yy0xLGI9KEMtUykvdyk6KHc9KEMtUykvYix3PXp0KHcsTWF0aC5yb3VuZCh3KSxiLzFlMyk/TWF0aC5yb3VuZCh3KTpNYXRoLmNlaWwodykpO2xldCBUPU1hdGgubWF4KEp0KGIpLEp0KFMpKTt4PTEwKiooTihzKT9UOnMpLFM9TWF0aC5yb3VuZChTKngpL3gsQz1NYXRoLnJvdW5kKEMqeCkveDtsZXQgRT0wO2ZvcihnJiYoZCYmUyE9PWE/KG4ucHVzaCh7dmFsdWU6YX0pLFM8YSYmRSsrLHp0KE1hdGgucm91bmQoKFMrRSpiKSp4KS94LGEsRnMoYSx5LGUpKSYmRSsrKTpTPGEmJkUrKyk7RTx3OysrRSl7bGV0IGU9TWF0aC5yb3VuZCgoUytFKmIpKngpL3g7aWYoXyYmZT5vKWJyZWFrO24ucHVzaCh7dmFsdWU6ZX0pfXJldHVybiBfJiZkJiZDIT09bz9uLmxlbmd0aCYmenQobltuLmxlbmd0aC0xXS52YWx1ZSxvLEZzKG8seSxlKSk/bltuLmxlbmd0aC0xXS52YWx1ZT1vOm4ucHVzaCh7dmFsdWU6b30pOighX3x8Qz09PW8pJiZuLnB1c2goe3ZhbHVlOkN9KSxufWZ1bmN0aW9uIEZzKGUsdCx7aG9yaXpvbnRhbDpuLG1pblJvdGF0aW9uOnJ9KXtsZXQgaT1LdChyKSxhPShuP01hdGguc2luKGkpOk1hdGguY29zKGkpKXx8LjAwMSxvPS43NSp0KihgYCtlKS5sZW5ndGg7cmV0dXJuIE1hdGgubWluKHQvYSxvKX12YXIgSXM9Y2xhc3MgZXh0ZW5kcyBub3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fZW5kVmFsdWU9dm9pZCAwLHRoaXMuX3ZhbHVlUmFuZ2U9MH1wYXJzZShlLHQpe3JldHVybiBOKGUpfHwodHlwZW9mIGU9PWBudW1iZXJgfHxlIGluc3RhbmNlb2YgTnVtYmVyKSYmIWlzRmluaXRlKCtlKT9udWxsOitlfWhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKXtsZXR7YmVnaW5BdFplcm86ZX09dGhpcy5vcHRpb25zLHttaW5EZWZpbmVkOnQsbWF4RGVmaW5lZDpufT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOnIsbWF4Oml9PXRoaXMsYT1lPT5yPXQ/cjplLG89ZT0+aT1uP2k6ZTtpZihlKXtsZXQgZT1SdChyKSx0PVJ0KGkpO2U8MCYmdDwwP28oMCk6ZT4wJiZ0PjAmJmEoMCl9aWYocj09PWkpe2xldCB0PWk9PT0wPzE6TWF0aC5hYnMoaSouMDUpO28oaSt0KSxlfHxhKHItdCl9dGhpcy5taW49cix0aGlzLm1heD1pfWdldFRpY2tMaW1pdCgpe2xldHttYXhUaWNrc0xpbWl0OmUsc3RlcFNpemU6dH09dGhpcy5vcHRpb25zLnRpY2tzLG47cmV0dXJuIHQ/KG49TWF0aC5jZWlsKHRoaXMubWF4L3QpLU1hdGguZmxvb3IodGhpcy5taW4vdCkrMSxuPjFlMyYmKGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7dH0gd291bGQgcmVzdWx0IGdlbmVyYXRpbmcgdXAgdG8gJHtufSB0aWNrcy4gTGltaXRpbmcgdG8gMTAwMC5gKSxuPTFlMykpOihuPXRoaXMuY29tcHV0ZVRpY2tMaW1pdCgpLGV8fD0xMSksZSYmKG49TWF0aC5taW4oZSxuKSksbn1jb21wdXRlVGlja0xpbWl0KCl7cmV0dXJuIDEvMH1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aWNrcyxuPXRoaXMuZ2V0VGlja0xpbWl0KCk7bj1NYXRoLm1heCgyLG4pO2xldCByPVBzKHttYXhUaWNrczpuLGJvdW5kczplLmJvdW5kcyxtaW46ZS5taW4sbWF4OmUubWF4LHByZWNpc2lvbjp0LnByZWNpc2lvbixzdGVwOnQuc3RlcFNpemUsY291bnQ6dC5jb3VudCxtYXhEaWdpdHM6dGhpcy5fbWF4RGlnaXRzKCksaG9yaXpvbnRhbDp0aGlzLmlzSG9yaXpvbnRhbCgpLG1pblJvdGF0aW9uOnQubWluUm90YXRpb258fDAsaW5jbHVkZUJvdW5kczp0LmluY2x1ZGVCb3VuZHMhPT0hMX0sdGhpcy5fcmFuZ2V8fHRoaXMpO3JldHVybiBlLmJvdW5kcz09PWB0aWNrc2AmJkd0KHIsdGhpcyxgdmFsdWVgKSxlLnJldmVyc2U/KHIucmV2ZXJzZSgpLHRoaXMuc3RhcnQ9dGhpcy5tYXgsdGhpcy5lbmQ9dGhpcy5taW4pOih0aGlzLnN0YXJ0PXRoaXMubWluLHRoaXMuZW5kPXRoaXMubWF4KSxyfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMudGlja3MsdD10aGlzLm1pbixuPXRoaXMubWF4O2lmKHN1cGVyLmNvbmZpZ3VyZSgpLHRoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoKXtsZXQgcj0obi10KS9NYXRoLm1heChlLmxlbmd0aC0xLDEpLzI7dC09cixuKz1yfXRoaXMuX3N0YXJ0VmFsdWU9dCx0aGlzLl9lbmRWYWx1ZT1uLHRoaXMuX3ZhbHVlUmFuZ2U9bi10fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIERuKGUsdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSx0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KX19LExzPWNsYXNzIGV4dGVuZHMgSXN7c3RhdGljIGlkPWBsaW5lYXJgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOkFuLmZvcm1hdHRlcnMubnVtZXJpY319O2RldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm1pbj1JKGUpP2U6MCx0aGlzLm1heD1JKHQpP3Q6MSx0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKX1jb21wdXRlVGlja0xpbWl0KCl7bGV0IGU9dGhpcy5pc0hvcml6b250YWwoKSx0PWU/dGhpcy53aWR0aDp0aGlzLmhlaWdodCxuPUt0KHRoaXMub3B0aW9ucy50aWNrcy5taW5Sb3RhdGlvbikscj0oZT9NYXRoLnNpbihuKTpNYXRoLmNvcyhuKSl8fC4wMDEsaT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApO3JldHVybiBNYXRoLmNlaWwodC9NYXRoLm1pbig0MCxpLmxpbmVIZWlnaHQvcikpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgoZS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiB0aGlzLl9zdGFydFZhbHVlK3RoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpKnRoaXMuX3ZhbHVlUmFuZ2V9fSxScz1lPT5NYXRoLmZsb29yKEx0KGUpKSx6cz0oZSx0KT0+MTAqKihScyhlKSt0KTtmdW5jdGlvbiBCcyhlKXtyZXR1cm4gZS8xMCoqUnMoZSk9PTF9ZnVuY3Rpb24gVnMoZSx0LG4pe2xldCByPTEwKipuLGk9TWF0aC5mbG9vcihlL3IpO3JldHVybiBNYXRoLmNlaWwodC9yKS1pfWZ1bmN0aW9uIEhzKGUsdCl7bGV0IG49UnModC1lKTtmb3IoO1ZzKGUsdCxuKT4xMDspbisrO2Zvcig7VnMoZSx0LG4pPDEwOyluLS07cmV0dXJuIE1hdGgubWluKG4sUnMoZSkpfWZ1bmN0aW9uIFVzKGUse21pbjp0LG1heDpufSl7dD1MKGUubWluLHQpO2xldCByPVtdLGk9UnModCksYT1Icyh0LG4pLG89YTwwPzEwKipNYXRoLmFicyhhKToxLHM9MTAqKmEsYz1pPmE/MTAqKmk6MCxsPU1hdGgucm91bmQoKHQtYykqbykvbyx1PU1hdGguZmxvb3IoKHQtYykvcy8xMCkqcyoxMCxkPU1hdGguZmxvb3IoKGwtdSkvMTAqKmEpLGY9TChlLm1pbixNYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbyk7Zm9yKDtmPG47KXIucHVzaCh7dmFsdWU6ZixtYWpvcjpCcyhmKSxzaWduaWZpY2FuZDpkfSksZD49MTA/ZD1kPDE1PzE1OjIwOmQrKyxkPj0yMCYmKGErKyxkPTIsbz1hPj0wPzE6byksZj1NYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbztsZXQgcD1MKGUubWF4LGYpO3JldHVybiByLnB1c2goe3ZhbHVlOnAsbWFqb3I6QnMocCksc2lnbmlmaWNhbmQ6ZH0pLHJ9KGNsYXNzIGV4dGVuZHMgbm97c3RhdGljIGlkPWBsb2dhcml0aG1pY2A7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6QW4uZm9ybWF0dGVycy5sb2dhcml0aG1pYyxtYWpvcjp7ZW5hYmxlZDohMH19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wfXBhcnNlKGUsdCl7bGV0IG49SXMucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsW2UsdF0pO2lmKG49PT0wKXt0aGlzLl96ZXJvPSEwO3JldHVybn1yZXR1cm4gSShuKSYmbj4wP246bnVsbH1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMCk7dGhpcy5taW49SShlKT9NYXRoLm1heCgwLGUpOm51bGwsdGhpcy5tYXg9SSh0KT9NYXRoLm1heCgwLHQpOm51bGwsdGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvJiYodGhpcy5femVybz0hMCksdGhpcy5femVybyYmdGhpcy5taW4hPT10aGlzLl9zdWdnZXN0ZWRNaW4mJiFJKHRoaXMuX3VzZXJNaW4pJiYodGhpcy5taW49ZT09PXpzKHRoaXMubWluLDApP3pzKHRoaXMubWluLC0xKTp6cyh0aGlzLm1pbiwwKSksdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9aGFuZGxlVGlja1JhbmdlT3B0aW9ucygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSxuPXRoaXMubWluLHI9dGhpcy5tYXgsaT10PT5uPWU/bjp0LGE9ZT0+cj10P3I6ZTtuPT09ciYmKG48PTA/KGkoMSksYSgxMCkpOihpKHpzKG4sLTEpKSxhKHpzKHIsMSkpKSksbjw9MCYmaSh6cyhyLC0xKSkscjw9MCYmYSh6cyhuLDEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PVVzKHttaW46dGhpcy5fdXNlck1pbixtYXg6dGhpcy5fdXNlck1heH0sdGhpcyk7cmV0dXJuIGUuYm91bmRzPT09YHRpY2tzYCYmR3QodCx0aGlzLGB2YWx1ZWApLGUucmV2ZXJzZT8odC5yZXZlcnNlKCksdGhpcy5zdGFydD10aGlzLm1heCx0aGlzLmVuZD10aGlzLm1pbik6KHRoaXMuc3RhcnQ9dGhpcy5taW4sdGhpcy5lbmQ9dGhpcy5tYXgpLHR9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PXZvaWQgMD9gMGA6RG4oZSx0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMubWluO3N1cGVyLmNvbmZpZ3VyZSgpLHRoaXMuX3N0YXJ0VmFsdWU9THQoZSksdGhpcy5fdmFsdWVSYW5nZT1MdCh0aGlzLm1heCktTHQoZSl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4oZT09PXZvaWQgMHx8ZT09PTApJiYoZT10aGlzLm1pbiksZT09PW51bGx8fGlzTmFOKGUpP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbChlPT09dGhpcy5taW4/MDooTHQoZSktdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKTtyZXR1cm4gMTAqKih0aGlzLl9zdGFydFZhbHVlK3QqdGhpcy5fdmFsdWVSYW5nZSl9fSk7ZnVuY3Rpb24gV3MoZSl7bGV0IHQ9ZS50aWNrcztpZih0LmRpc3BsYXkmJmUuZGlzcGxheSl7bGV0IGU9Sih0LmJhY2tkcm9wUGFkZGluZyk7cmV0dXJuIFIodC5mb250JiZ0LmZvbnQuc2l6ZSxxLmZvbnQuc2l6ZSkrZS5oZWlnaHR9cmV0dXJuIDB9ZnVuY3Rpb24gR3MoZSx0LG4pe3JldHVybiBuPVAobik/bjpbbl0se3c6Um4oZSx0LnN0cmluZyxuKSxoOm4ubGVuZ3RoKnQubGluZUhlaWdodH19ZnVuY3Rpb24gS3MoZSx0LG4scixpKXtyZXR1cm4gZT09PXJ8fGU9PT1pP3tzdGFydDp0LW4vMixlbmQ6dCtuLzJ9OmU8cnx8ZT5pP3tzdGFydDp0LW4sZW5kOnR9OntzdGFydDp0LGVuZDp0K259fWZ1bmN0aW9uIHFzKGUpe2xldCB0PXtsOmUubGVmdCtlLl9wYWRkaW5nLmxlZnQscjplLnJpZ2h0LWUuX3BhZGRpbmcucmlnaHQsdDplLnRvcCtlLl9wYWRkaW5nLnRvcCxiOmUuYm90dG9tLWUuX3BhZGRpbmcuYm90dG9tfSxuPU9iamVjdC5hc3NpZ24oe30sdCkscj1bXSxpPVtdLGE9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLG89ZS5vcHRpb25zLnBvaW50TGFiZWxzLHM9by5jZW50ZXJQb2ludExhYmVscz9WL2E6MDtmb3IobGV0IGM9MDtjPGE7YysrKXtsZXQgYT1vLnNldENvbnRleHQoZS5nZXRQb2ludExhYmVsQ29udGV4dChjKSk7aVtjXT1hLnBhZGRpbmc7bGV0IGw9ZS5nZXRQb2ludFBvc2l0aW9uKGMsZS5kcmF3aW5nQXJlYStpW2NdLHMpLHU9WShhLmZvbnQpLGQ9R3MoZS5jdHgsdSxlLl9wb2ludExhYmVsc1tjXSk7cltjXT1kO2xldCBmPVcoZS5nZXRJbmRleEFuZ2xlKGMpK3MpLHA9TWF0aC5yb3VuZChxdChmKSk7SnMobix0LGYsS3MocCxsLngsZC53LDAsMTgwKSxLcyhwLGwueSxkLmgsOTAsMjcwKSl9ZS5zZXRDZW50ZXJQb2ludCh0Lmwtbi5sLG4uci10LnIsdC50LW4udCxuLmItdC5iKSxlLl9wb2ludExhYmVsSXRlbXM9WnMoZSxyLGkpfWZ1bmN0aW9uIEpzKGUsdCxuLHIsaSl7bGV0IGE9TWF0aC5hYnMoTWF0aC5zaW4obikpLG89TWF0aC5hYnMoTWF0aC5jb3MobikpLHM9MCxjPTA7ci5zdGFydDx0Lmw/KHM9KHQubC1yLnN0YXJ0KS9hLGUubD1NYXRoLm1pbihlLmwsdC5sLXMpKTpyLmVuZD50LnImJihzPShyLmVuZC10LnIpL2EsZS5yPU1hdGgubWF4KGUucix0LnIrcykpLGkuc3RhcnQ8dC50PyhjPSh0LnQtaS5zdGFydCkvbyxlLnQ9TWF0aC5taW4oZS50LHQudC1jKSk6aS5lbmQ+dC5iJiYoYz0oaS5lbmQtdC5iKS9vLGUuYj1NYXRoLm1heChlLmIsdC5iK2MpKX1mdW5jdGlvbiBZcyhlLHQsbil7bGV0IHI9ZS5kcmF3aW5nQXJlYSx7ZXh0cmE6aSxhZGRpdGlvbmFsQW5nbGU6YSxwYWRkaW5nOm8sc2l6ZTpzfT1uLGM9ZS5nZXRQb2ludFBvc2l0aW9uKHQscitpK28sYSksbD1NYXRoLnJvdW5kKHF0KFcoYy5hbmdsZStVKSkpLHU9ZWMoYy55LHMuaCxsKSxkPVFzKGwpLGY9JHMoYy54LHMudyxkKTtyZXR1cm57dmlzaWJsZTohMCx4OmMueCx5OnUsdGV4dEFsaWduOmQsbGVmdDpmLHRvcDp1LHJpZ2h0OmYrcy53LGJvdHRvbTp1K3MuaH19ZnVuY3Rpb24gWHMoZSx0KXtpZighdClyZXR1cm4hMDtsZXR7bGVmdDpuLHRvcDpyLHJpZ2h0OmksYm90dG9tOmF9PWU7cmV0dXJuIShVbih7eDpuLHk6cn0sdCl8fFVuKHt4Om4seTphfSx0KXx8VW4oe3g6aSx5OnJ9LHQpfHxVbih7eDppLHk6YX0sdCkpfWZ1bmN0aW9uIFpzKGUsdCxuKXtsZXQgcj1bXSxpPWUuX3BvaW50TGFiZWxzLmxlbmd0aCxhPWUub3B0aW9ucyx7Y2VudGVyUG9pbnRMYWJlbHM6byxkaXNwbGF5OnN9PWEucG9pbnRMYWJlbHMsYz17ZXh0cmE6V3MoYSkvMixhZGRpdGlvbmFsQW5nbGU6bz9WL2k6MH0sbDtmb3IobGV0IGE9MDthPGk7YSsrKXtjLnBhZGRpbmc9blthXSxjLnNpemU9dFthXTtsZXQgaT1ZcyhlLGEsYyk7ci5wdXNoKGkpLHM9PT1gYXV0b2AmJihpLnZpc2libGU9WHMoaSxsKSxpLnZpc2libGUmJihsPWkpKX1yZXR1cm4gcn1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZT09PTB8fGU9PT0xODA/YGNlbnRlcmA6ZTwxODA/YGxlZnRgOmByaWdodGB9ZnVuY3Rpb24gJHMoZSx0LG4pe3JldHVybiBuPT09YHJpZ2h0YD9lLT10Om49PT1gY2VudGVyYCYmKGUtPXQvMiksZX1mdW5jdGlvbiBlYyhlLHQsbil7cmV0dXJuIG49PT05MHx8bj09PTI3MD9lLT10LzI6KG4+MjcwfHxuPDkwKSYmKGUtPXQpLGV9ZnVuY3Rpb24gdGMoZSx0LG4pe2xldHtsZWZ0OnIsdG9wOmkscmlnaHQ6YSxib3R0b206b309bix7YmFja2Ryb3BDb2xvcjpzfT10O2lmKCFOKHMpKXtsZXQgbj1ycih0LmJvcmRlclJhZGl1cyksYz1KKHQuYmFja2Ryb3BQYWRkaW5nKTtlLmZpbGxTdHlsZT1zO2xldCBsPXItYy5sZWZ0LHU9aS1jLnRvcCxkPWEtcitjLndpZHRoLGY9by1pK2MuaGVpZ2h0O09iamVjdC52YWx1ZXMobikuc29tZShlPT5lIT09MCk/KGUuYmVnaW5QYXRoKCksWG4oZSx7eDpsLHk6dSx3OmQsaDpmLHJhZGl1czpufSksZS5maWxsKCkpOmUuZmlsbFJlY3QobCx1LGQsZil9fWZ1bmN0aW9uIG5jKGUsdCl7bGV0e2N0eDpuLG9wdGlvbnM6e3BvaW50TGFiZWxzOnJ9fT1lO2ZvcihsZXQgaT10LTE7aT49MDtpLS0pe2xldCB0PWUuX3BvaW50TGFiZWxJdGVtc1tpXTtpZighdC52aXNpYmxlKWNvbnRpbnVlO2xldCBhPXIuc2V0Q29udGV4dChlLmdldFBvaW50TGFiZWxDb250ZXh0KGkpKTt0YyhuLGEsdCk7bGV0IG89WShhLmZvbnQpLHt4OnMseTpjLHRleHRBbGlnbjpsfT10O1luKG4sZS5fcG9pbnRMYWJlbHNbaV0scyxjK28ubGluZUhlaWdodC8yLG8se2NvbG9yOmEuY29sb3IsdGV4dEFsaWduOmwsdGV4dEJhc2VsaW5lOmBtaWRkbGVgfSl9fWZ1bmN0aW9uIHJjKGUsdCxuLHIpe2xldHtjdHg6aX09ZTtpZihuKWkuYXJjKGUueENlbnRlcixlLnlDZW50ZXIsdCwwLEgpO2Vsc2V7bGV0IG49ZS5nZXRQb2ludFBvc2l0aW9uKDAsdCk7aS5tb3ZlVG8obi54LG4ueSk7Zm9yKGxldCBhPTE7YTxyO2ErKyluPWUuZ2V0UG9pbnRQb3NpdGlvbihhLHQpLGkubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBpYyhlLHQsbixyLGkpe2xldCBhPWUuY3R4LG89dC5jaXJjdWxhcix7Y29sb3I6cyxsaW5lV2lkdGg6Y309dDshbyYmIXJ8fCFzfHwhY3x8bjwwfHwoYS5zYXZlKCksYS5zdHJva2VTdHlsZT1zLGEubGluZVdpZHRoPWMsYS5zZXRMaW5lRGFzaChpLmRhc2h8fFtdKSxhLmxpbmVEYXNoT2Zmc2V0PWkuZGFzaE9mZnNldCxhLmJlZ2luUGF0aCgpLHJjKGUsbixvLHIpLGEuY2xvc2VQYXRoKCksYS5zdHJva2UoKSxhLnJlc3RvcmUoKSl9ZnVuY3Rpb24gYWMoZSx0LG4pe3JldHVybiBvcihlLHtsYWJlbDpuLGluZGV4OnQsdHlwZTpgcG9pbnRMYWJlbGB9KX0oY2xhc3MgZXh0ZW5kcyBJc3tzdGF0aWMgaWQ9YHJhZGlhbExpbmVhcmA7c3RhdGljIGRlZmF1bHRzPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246YGNoYXJ0QXJlYWAsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZDp7Y2lyY3VsYXI6ITF9LHN0YXJ0QW5nbGU6MCx0aWNrczp7c2hvd0xhYmVsQmFja2Ryb3A6ITAsY2FsbGJhY2s6QW4uZm9ybWF0dGVycy5udW1lcmljfSxwb2ludExhYmVsczp7YmFja2Ryb3BDb2xvcjp2b2lkIDAsYmFja2Ryb3BQYWRkaW5nOjIsZGlzcGxheTohMCxmb250OntzaXplOjEwfSxjYWxsYmFjayhlKXtyZXR1cm4gZX0scGFkZGluZzo1LGNlbnRlclBvaW50TGFiZWxzOiExfX07c3RhdGljIGRlZmF1bHRSb3V0ZXM9eyJhbmdsZUxpbmVzLmNvbG9yIjpgYm9yZGVyQ29sb3JgLCJwb2ludExhYmVscy5jb2xvciI6YGNvbG9yYCwidGlja3MuY29sb3IiOmBjb2xvcmB9O3N0YXRpYyBkZXNjcmlwdG9ycz17YW5nbGVMaW5lczp7X2ZhbGxiYWNrOmBncmlkYH19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMueENlbnRlcj12b2lkIDAsdGhpcy55Q2VudGVyPXZvaWQgMCx0aGlzLmRyYXdpbmdBcmVhPXZvaWQgMCx0aGlzLl9wb2ludExhYmVscz1bXSx0aGlzLl9wb2ludExhYmVsSXRlbXM9W119c2V0RGltZW5zaW9ucygpe2xldCBlPXRoaXMuX3BhZGRpbmc9SihXcyh0aGlzLm9wdGlvbnMpLzIpLHQ9dGhpcy53aWR0aD10aGlzLm1heFdpZHRoLWUud2lkdGgsbj10aGlzLmhlaWdodD10aGlzLm1heEhlaWdodC1lLmhlaWdodDt0aGlzLnhDZW50ZXI9TWF0aC5mbG9vcih0aGlzLmxlZnQrdC8yK2UubGVmdCksdGhpcy55Q2VudGVyPU1hdGguZmxvb3IodGhpcy50b3Arbi8yK2UudG9wKSx0aGlzLmRyYXdpbmdBcmVhPU1hdGguZmxvb3IoTWF0aC5taW4odCxuKS8yKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMSk7dGhpcy5taW49SShlKSYmIWlzTmFOKGUpP2U6MCx0aGlzLm1heD1JKHQpJiYhaXNOYU4odCk/dDowLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWNvbXB1dGVUaWNrTGltaXQoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuZHJhd2luZ0FyZWEvV3ModGhpcy5vcHRpb25zKSl9Z2VuZXJhdGVUaWNrTGFiZWxzKGUpe0lzLnByb3RvdHlwZS5nZW5lcmF0ZVRpY2tMYWJlbHMuY2FsbCh0aGlzLGUpLHRoaXMuX3BvaW50TGFiZWxzPXRoaXMuZ2V0TGFiZWxzKCkubWFwKChlLHQpPT57bGV0IG49eih0aGlzLm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssW2UsdF0sdGhpcyk7cmV0dXJuIG58fG49PT0wP246YGB9KS5maWx0ZXIoKGUsdCk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkodCkpfWZpdCgpe2xldCBlPXRoaXMub3B0aW9ucztlLmRpc3BsYXkmJmUucG9pbnRMYWJlbHMuZGlzcGxheT9xcyh0aGlzKTp0aGlzLnNldENlbnRlclBvaW50KDAsMCwwLDApfXNldENlbnRlclBvaW50KGUsdCxuLHIpe3RoaXMueENlbnRlcis9TWF0aC5mbG9vcigoZS10KS8yKSx0aGlzLnlDZW50ZXIrPU1hdGguZmxvb3IoKG4tcikvMiksdGhpcy5kcmF3aW5nQXJlYS09TWF0aC5taW4odGhpcy5kcmF3aW5nQXJlYS8yLE1hdGgubWF4KGUsdCxuLHIpKX1nZXRJbmRleEFuZ2xlKGUpe2xldCB0PUgvKHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aHx8MSksbj10aGlzLm9wdGlvbnMuc3RhcnRBbmdsZXx8MDtyZXR1cm4gVyhlKnQrS3QobikpfWdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUpe2lmKE4oZSkpcmV0dXJuIE5hTjtsZXQgdD10aGlzLmRyYXdpbmdBcmVhLyh0aGlzLm1heC10aGlzLm1pbik7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXZlcnNlPyh0aGlzLm1heC1lKSp0OihlLXRoaXMubWluKSp0fWdldFZhbHVlRm9yRGlzdGFuY2VGcm9tQ2VudGVyKGUpe2lmKE4oZSkpcmV0dXJuIE5hTjtsZXQgdD1lLyh0aGlzLmRyYXdpbmdBcmVhLyh0aGlzLm1heC10aGlzLm1pbikpO3JldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZT90aGlzLm1heC10OnRoaXMubWluK3R9Z2V0UG9pbnRMYWJlbENvbnRleHQoZSl7bGV0IHQ9dGhpcy5fcG9pbnRMYWJlbHN8fFtdO2lmKGU+PTAmJmU8dC5sZW5ndGgpe2xldCBuPXRbZV07cmV0dXJuIGFjKHRoaXMuZ2V0Q29udGV4dCgpLGUsbil9fWdldFBvaW50UG9zaXRpb24oZSx0LG49MCl7bGV0IHI9dGhpcy5nZXRJbmRleEFuZ2xlKGUpLVUrbjtyZXR1cm57eDpNYXRoLmNvcyhyKSp0K3RoaXMueENlbnRlcix5Ok1hdGguc2luKHIpKnQrdGhpcy55Q2VudGVyLGFuZ2xlOnJ9fWdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShlLHQpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24oZSx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQpKX1nZXRCYXNlUG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGV8fDAsdGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0UG9pbnRMYWJlbFBvc2l0aW9uKGUpe2xldHtsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX09dGhpcy5fcG9pbnRMYWJlbEl0ZW1zW2VdO3JldHVybntsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX19ZHJhd0JhY2tncm91bmQoKXtsZXR7YmFja2dyb3VuZENvbG9yOmUsZ3JpZDp7Y2lyY3VsYXI6dH19PXRoaXMub3B0aW9ucztpZihlKXtsZXQgbj10aGlzLmN0eDtuLnNhdmUoKSxuLmJlZ2luUGF0aCgpLHJjKHRoaXMsdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksdCx0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpLG4uY2xvc2VQYXRoKCksbi5maWxsU3R5bGU9ZSxuLmZpbGwoKSxuLnJlc3RvcmUoKX19ZHJhd0dyaWQoKXtsZXQgZT10aGlzLmN0eCx0PXRoaXMub3B0aW9ucyx7YW5nbGVMaW5lczpuLGdyaWQ6cixib3JkZXI6aX09dCxhPXRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCxvLHMsYztpZih0LnBvaW50TGFiZWxzLmRpc3BsYXkmJm5jKHRoaXMsYSksci5kaXNwbGF5JiZ0aGlzLnRpY2tzLmZvckVhY2goKGUsdCk9PntpZih0IT09MHx8dD09PTAmJnRoaXMubWluPDApe3M9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShlLnZhbHVlKTtsZXQgbj10aGlzLmdldENvbnRleHQodCksbz1yLnNldENvbnRleHQobiksYz1pLnNldENvbnRleHQobik7aWModGhpcyxvLHMsYSxjKX19KSxuLmRpc3BsYXkpe2ZvcihlLnNhdmUoKSxvPWEtMTtvPj0wO28tLSl7bGV0IHI9bi5zZXRDb250ZXh0KHRoaXMuZ2V0UG9pbnRMYWJlbENvbnRleHQobykpLHtjb2xvcjppLGxpbmVXaWR0aDphfT1yOyFhfHwhaXx8KGUubGluZVdpZHRoPWEsZS5zdHJva2VTdHlsZT1pLGUuc2V0TGluZURhc2goci5ib3JkZXJEYXNoKSxlLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxzPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodC5yZXZlcnNlP3RoaXMubWluOnRoaXMubWF4KSxjPXRoaXMuZ2V0UG9pbnRQb3NpdGlvbihvLHMpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5saW5lVG8oYy54LGMueSksZS5zdHJva2UoKSl9ZS5yZXN0b3JlKCl9fWRyYXdCb3JkZXIoKXt9ZHJhd0xhYmVscygpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLG49dC50aWNrcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoMCksaSxhO2Uuc2F2ZSgpLGUudHJhbnNsYXRlKHRoaXMueENlbnRlcix0aGlzLnlDZW50ZXIpLGUucm90YXRlKHIpLGUudGV4dEFsaWduPWBjZW50ZXJgLGUudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHRoaXMudGlja3MuZm9yRWFjaCgocixvKT0+e2lmKG89PT0wJiZ0aGlzLm1pbj49MCYmIXQucmV2ZXJzZSlyZXR1cm47bGV0IHM9bi5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChvKSksYz1ZKHMuZm9udCk7aWYoaT10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMudGlja3Nbb10udmFsdWUpLHMuc2hvd0xhYmVsQmFja2Ryb3Ape2UuZm9udD1jLnN0cmluZyxhPWUubWVhc3VyZVRleHQoci5sYWJlbCkud2lkdGgsZS5maWxsU3R5bGU9cy5iYWNrZHJvcENvbG9yO2xldCB0PUoocy5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFJlY3QoLWEvMi10LmxlZnQsLWktYy5zaXplLzItdC50b3AsYSt0LndpZHRoLGMuc2l6ZSt0LmhlaWdodCl9WW4oZSxyLmxhYmVsLDAsLWksYyx7Y29sb3I6cy5jb2xvcixzdHJva2VDb2xvcjpzLnRleHRTdHJva2VDb2xvcixzdHJva2VXaWR0aDpzLnRleHRTdHJva2VXaWR0aH0pfSksZS5yZXN0b3JlKCl9ZHJhd1RpdGxlKCl7fX0pO3ZhciBvYz17bWlsbGlzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjEsc3RlcHM6MWUzfSxzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjFlMyxzdGVwczo2MH0sbWludXRlOntjb21tb246ITAsc2l6ZTo2ZTQsc3RlcHM6NjB9LGhvdXI6e2NvbW1vbjohMCxzaXplOjM2ZTUsc3RlcHM6MjR9LGRheTp7Y29tbW9uOiEwLHNpemU6ODY0ZTUsc3RlcHM6MzB9LHdlZWs6e2NvbW1vbjohMSxzaXplOjYwNDhlNSxzdGVwczo0fSxtb250aDp7Y29tbW9uOiEwLHNpemU6MjYyOGU2LHN0ZXBzOjEyfSxxdWFydGVyOntjb21tb246ITEsc2l6ZTo3ODg0ZTYsc3RlcHM6NH0seWVhcjp7Y29tbW9uOiEwLHNpemU6MzE1NGU3fX0sJD1PYmplY3Qua2V5cyhvYyk7ZnVuY3Rpb24gc2MoZSx0KXtyZXR1cm4gZS10fWZ1bmN0aW9uIGNjKGUsdCl7aWYoTih0KSlyZXR1cm4gbnVsbDtsZXQgbj1lLl9hZGFwdGVyLHtwYXJzZXI6cixyb3VuZDppLGlzb1dlZWtkYXk6YX09ZS5fcGFyc2VPcHRzLG89dDtyZXR1cm4gdHlwZW9mIHI9PWBmdW5jdGlvbmAmJihvPXIobykpLEkobyl8fChvPXR5cGVvZiByPT1gc3RyaW5nYD9uLnBhcnNlKG8scik6bi5wYXJzZShvKSksbz09PW51bGw/bnVsbDooaSYmKG89aT09PWB3ZWVrYCYmKFV0KGEpfHxhPT09ITApP24uc3RhcnRPZihvLGBpc29XZWVrYCxhKTpuLnN0YXJ0T2YobyxpKSksK28pfWZ1bmN0aW9uIGxjKGUsdCxuLHIpe2xldCBpPSQubGVuZ3RoO2ZvcihsZXQgYT0kLmluZGV4T2YoZSk7YTxpLTE7KythKXtsZXQgZT1vY1skW2FdXSxpPWUuc3RlcHM/ZS5zdGVwczoyKio1My0xO2lmKGUuY29tbW9uJiZNYXRoLmNlaWwoKG4tdCkvKGkqZS5zaXplKSk8PXIpcmV0dXJuICRbYV19cmV0dXJuICRbaS0xXX1mdW5jdGlvbiB1YyhlLHQsbixyLGkpe2ZvcihsZXQgYT0kLmxlbmd0aC0xO2E+PSQuaW5kZXhPZihuKTthLS0pe2xldCBuPSRbYV07aWYob2Nbbl0uY29tbW9uJiZlLl9hZGFwdGVyLmRpZmYoaSxyLG4pPj10LTEpcmV0dXJuIG59cmV0dXJuICRbbj8kLmluZGV4T2Yobik6MF19ZnVuY3Rpb24gZGMoZSl7Zm9yKGxldCB0PSQuaW5kZXhPZihlKSsxLG49JC5sZW5ndGg7dDxuOysrdClpZihvY1skW3RdXS5jb21tb24pcmV0dXJuICRbdF19ZnVuY3Rpb24gZmMoZSx0LG4pe2lmKCFuKWVbdF09ITA7ZWxzZSBpZihuLmxlbmd0aCl7bGV0e2xvOnIsaGk6aX09ZW4obix0KSxhPW5bcl0+PXQ/bltyXTpuW2ldO2VbYV09ITB9fWZ1bmN0aW9uIHBjKGUsdCxuLHIpe2xldCBpPWUuX2FkYXB0ZXIsYT0raS5zdGFydE9mKHRbMF0udmFsdWUsciksbz10W3QubGVuZ3RoLTFdLnZhbHVlLHMsYztmb3Iocz1hO3M8PW87cz0raS5hZGQocywxLHIpKWM9bltzXSxjPj0wJiYodFtjXS5tYWpvcj0hMCk7cmV0dXJuIHR9ZnVuY3Rpb24gbWMoZSx0LG4pe2xldCByPVtdLGk9e30sYT10Lmxlbmd0aCxvLHM7Zm9yKG89MDtvPGE7KytvKXM9dFtvXSxpW3NdPW8sci5wdXNoKHt2YWx1ZTpzLG1ham9yOiExfSk7cmV0dXJuIGE9PT0wfHwhbj9yOnBjKGUscixpLG4pfXZhciBoYz1jbGFzcyBleHRlbmRzIG5ve3N0YXRpYyBpZD1gdGltZWA7c3RhdGljIGRlZmF1bHRzPXtib3VuZHM6YGRhdGFgLGFkYXB0ZXJzOnt9LHRpbWU6e3BhcnNlcjohMSx1bml0OiExLHJvdW5kOiExLGlzb1dlZWtkYXk6ITEsbWluVW5pdDpgbWlsbGlzZWNvbmRgLGRpc3BsYXlGb3JtYXRzOnt9fSx0aWNrczp7c291cmNlOmBhdXRvYCxjYWxsYmFjazohMSxtYWpvcjp7ZW5hYmxlZDohMX19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfSx0aGlzLl91bml0PWBkYXlgLHRoaXMuX21ham9yVW5pdD12b2lkIDAsdGhpcy5fb2Zmc2V0cz17fSx0aGlzLl9ub3JtYWxpemVkPSExLHRoaXMuX3BhcnNlT3B0cz12b2lkIDB9aW5pdChlLHQ9e30pe2xldCBuPWUudGltZXx8PXt9LHI9dGhpcy5fYWRhcHRlcj1uZXcgQmkuX2RhdGUoZS5hZGFwdGVycy5kYXRlKTtyLmluaXQodCksU3Qobi5kaXNwbGF5Rm9ybWF0cyxyLmZvcm1hdHMoKSksdGhpcy5fcGFyc2VPcHRzPXtwYXJzZXI6bi5wYXJzZXIscm91bmQ6bi5yb3VuZCxpc29XZWVrZGF5Om4uaXNvV2Vla2RheX0sc3VwZXIuaW5pdChlKSx0aGlzLl9ub3JtYWxpemVkPXQubm9ybWFsaXplZH1wYXJzZShlLHQpe3JldHVybiBlPT09dm9pZCAwP251bGw6Y2ModGhpcyxlKX1iZWZvcmVMYXlvdXQoKXtzdXBlci5iZWZvcmVMYXlvdXQoKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9dGhpcy5fYWRhcHRlcixuPWUudGltZS51bml0fHxgZGF5YCx7bWluOnIsbWF4OmksbWluRGVmaW5lZDphLG1heERlZmluZWQ6b309dGhpcy5nZXRVc2VyQm91bmRzKCk7ZnVuY3Rpb24gcyhlKXshYSYmIWlzTmFOKGUubWluKSYmKHI9TWF0aC5taW4ocixlLm1pbikpLCFvJiYhaXNOYU4oZS5tYXgpJiYoaT1NYXRoLm1heChpLGUubWF4KSl9KCFhfHwhbykmJihzKHRoaXMuX2dldExhYmVsQm91bmRzKCkpLChlLmJvdW5kcyE9PWB0aWNrc2B8fGUudGlja3Muc291cmNlIT09YGxhYmVsc2ApJiZzKHRoaXMuZ2V0TWluTWF4KCExKSkpLHI9SShyKSYmIWlzTmFOKHIpP3I6K3Quc3RhcnRPZihEYXRlLm5vdygpLG4pLGk9SShpKSYmIWlzTmFOKGkpP2k6K3QuZW5kT2YoRGF0ZS5ub3coKSxuKSsxLHRoaXMubWluPU1hdGgubWluKHIsaS0xKSx0aGlzLm1heD1NYXRoLm1heChyKzEsaSl9X2dldExhYmVsQm91bmRzKCl7bGV0IGU9dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKSx0PTEvMCxuPS0xLzA7cmV0dXJuIGUubGVuZ3RoJiYodD1lWzBdLG49ZVtlLmxlbmd0aC0xXSkse21pbjp0LG1heDpufX1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aW1lLG49ZS50aWNrcyxyPW4uc291cmNlPT09YGxhYmVsc2A/dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTp0aGlzLl9nZW5lcmF0ZSgpO2UuYm91bmRzPT09YHRpY2tzYCYmci5sZW5ndGgmJih0aGlzLm1pbj10aGlzLl91c2VyTWlufHxyWzBdLHRoaXMubWF4PXRoaXMuX3VzZXJNYXh8fHJbci5sZW5ndGgtMV0pO2xldCBpPXRoaXMubWluLGE9dGhpcy5tYXgsbz1ybihyLGksYSk7cmV0dXJuIHRoaXMuX3VuaXQ9dC51bml0fHwobi5hdXRvU2tpcD9sYyh0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShpKSk6dWModGhpcyxvLmxlbmd0aCx0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgpKSx0aGlzLl9tYWpvclVuaXQ9IW4ubWFqb3IuZW5hYmxlZHx8dGhpcy5fdW5pdD09PWB5ZWFyYD92b2lkIDA6ZGModGhpcy5fdW5pdCksdGhpcy5pbml0T2Zmc2V0cyhyKSxlLnJldmVyc2UmJm8ucmV2ZXJzZSgpLG1jKHRoaXMsbyx0aGlzLl9tYWpvclVuaXQpfWFmdGVyQXV0b1NraXAoKXt0aGlzLm9wdGlvbnMub2Zmc2V0QWZ0ZXJBdXRvc2tpcCYmdGhpcy5pbml0T2Zmc2V0cyh0aGlzLnRpY2tzLm1hcChlPT4rZS52YWx1ZSkpfWluaXRPZmZzZXRzKGU9W10pe2xldCB0PTAsbj0wLHIsaTt0aGlzLm9wdGlvbnMub2Zmc2V0JiZlLmxlbmd0aCYmKHI9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVswXSksdD1lLmxlbmd0aD09PTE/MS1yOih0aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzFdKS1yKS8yLGk9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVtlLmxlbmd0aC0xXSksbj1lLmxlbmd0aD09PTE/aTooaS10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTJdKSkvMik7bGV0IGE9ZS5sZW5ndGg8Mz8uNTouMjU7dD1HKHQsMCxhKSxuPUcobiwwLGEpLHRoaXMuX29mZnNldHM9e3N0YXJ0OnQsZW5kOm4sZmFjdG9yOjEvKHQrMStuKX19X2dlbmVyYXRlKCl7bGV0IGU9dGhpcy5fYWRhcHRlcix0PXRoaXMubWluLG49dGhpcy5tYXgscj10aGlzLm9wdGlvbnMsaT1yLnRpbWUsYT1pLnVuaXR8fGxjKGkubWluVW5pdCx0LG4sdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eSh0KSksbz1SKHIudGlja3Muc3RlcFNpemUsMSkscz1hPT09YHdlZWtgJiZpLmlzb1dlZWtkYXksYz1VdChzKXx8cz09PSEwLGw9e30sdT10LGQsZjtpZihjJiYodT0rZS5zdGFydE9mKHUsYGlzb1dlZWtgLHMpKSx1PStlLnN0YXJ0T2YodSxjP2BkYXlgOmEpLGUuZGlmZihuLHQsYSk+MWU1Km8pdGhyb3cgRXJyb3IodCtgIGFuZCBgK24rYCBhcmUgdG9vIGZhciBhcGFydCB3aXRoIHN0ZXBTaXplIG9mIGArbytgIGArYSk7bGV0IHA9ci50aWNrcy5zb3VyY2U9PT1gZGF0YWAmJnRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtmb3IoZD11LGY9MDtkPG47ZD0rZS5hZGQoZCxvLGEpLGYrKylmYyhsLGQscCk7cmV0dXJuKGQ9PT1ufHxyLmJvdW5kcz09PWB0aWNrc2B8fGY9PT0xKSYmZmMobCxkLHApLE9iamVjdC5rZXlzKGwpLnNvcnQoc2MpLm1hcChlPT4rZSl9Z2V0TGFiZWxGb3JWYWx1ZShlKXtsZXQgdD10aGlzLl9hZGFwdGVyLG49dGhpcy5vcHRpb25zLnRpbWU7cmV0dXJuIG4udG9vbHRpcEZvcm1hdD90LmZvcm1hdChlLG4udG9vbHRpcEZvcm1hdCk6dC5mb3JtYXQoZSxuLmRpc3BsYXlGb3JtYXRzLmRhdGV0aW1lKX1mb3JtYXQoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMudGltZS5kaXNwbGF5Rm9ybWF0cyxyPXRoaXMuX3VuaXQsaT10fHxuW3JdO3JldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdChlLGkpfV90aWNrRm9ybWF0RnVuY3Rpb24oZSx0LG4scil7bGV0IGk9dGhpcy5vcHRpb25zLGE9aS50aWNrcy5jYWxsYmFjaztpZihhKXJldHVybiB6KGEsW2UsdCxuXSx0aGlzKTtsZXQgbz1pLnRpbWUuZGlzcGxheUZvcm1hdHMscz10aGlzLl91bml0LGM9dGhpcy5fbWFqb3JVbml0LGw9cyYmb1tzXSx1PWMmJm9bY10sZD1uW3RdLGY9YyYmdSYmZCYmZC5tYWpvcjtyZXR1cm4gdGhpcy5fYWRhcHRlci5mb3JtYXQoZSxyfHwoZj91OmwpKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7bGV0IHQsbixyO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXI9ZVt0XSxyLmxhYmVsPXRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbihyLnZhbHVlLHQsZSl9Z2V0RGVjaW1hbEZvclZhbHVlKGUpe3JldHVybiBlPT09bnVsbD9OYU46KGUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZSk7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKCh0LnN0YXJ0K24pKnQuZmFjdG9yKX1nZXRWYWx1ZUZvclBpeGVsKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKS90LmZhY3Rvci10LmVuZDtyZXR1cm4gdGhpcy5taW4rbioodGhpcy5tYXgtdGhpcy5taW4pfV9nZXRMYWJlbFNpemUoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLG49dGhpcy5jdHgubWVhc3VyZVRleHQoZSkud2lkdGgscj1LdCh0aGlzLmlzSG9yaXpvbnRhbCgpP3QubWF4Um90YXRpb246dC5taW5Sb3RhdGlvbiksaT1NYXRoLmNvcyhyKSxhPU1hdGguc2luKHIpLG89dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5zaXplO3JldHVybnt3Om4qaStvKmEsaDpuKmErbyppfX1fZ2V0TGFiZWxDYXBhY2l0eShlKXtsZXQgdD10aGlzLm9wdGlvbnMudGltZSxuPXQuZGlzcGxheUZvcm1hdHMscj1uW3QudW5pdF18fG4ubWlsbGlzZWNvbmQsaT10aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24oZSwwLG1jKHRoaXMsW2VdLHRoaXMuX21ham9yVW5pdCksciksYT10aGlzLl9nZXRMYWJlbFNpemUoaSksbz1NYXRoLmZsb29yKHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aC9hLnc6dGhpcy5oZWlnaHQvYS5oKS0xO3JldHVybiBvPjA/bzoxfWdldERhdGFUaW1lc3RhbXBzKCl7bGV0IGU9dGhpcy5fY2FjaGUuZGF0YXx8W10sdCxuO2lmKGUubGVuZ3RoKXJldHVybiBlO2xldCByPXRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtpZih0aGlzLl9ub3JtYWxpemVkJiZyLmxlbmd0aClyZXR1cm4gdGhpcy5fY2FjaGUuZGF0YT1yWzBdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWU9ZS5jb25jYXQoclt0XS5jb250cm9sbGVyLmdldEFsbFBhcnNlZFZhbHVlcyh0aGlzKSk7cmV0dXJuIHRoaXMuX2NhY2hlLmRhdGE9dGhpcy5ub3JtYWxpemUoZSl9Z2V0TGFiZWxUaW1lc3RhbXBzKCl7bGV0IGU9dGhpcy5fY2FjaGUubGFiZWxzfHxbXSx0LG47aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9dGhpcy5nZXRMYWJlbHMoKTtmb3IodD0wLG49ci5sZW5ndGg7dDxuOysrdCllLnB1c2goY2ModGhpcyxyW3RdKSk7cmV0dXJuIHRoaXMuX2NhY2hlLmxhYmVscz10aGlzLl9ub3JtYWxpemVkP2U6dGhpcy5ub3JtYWxpemUoZSl9bm9ybWFsaXplKGUpe3JldHVybiBjbihlLnNvcnQoc2MpKX19O2Z1bmN0aW9uIGdjKGUsdCxuKXtsZXQgcj0wLGk9ZS5sZW5ndGgtMSxhLG8scyxjO24/KHQ+PWVbcl0ucG9zJiZ0PD1lW2ldLnBvcyYmKHtsbzpyLGhpOml9PXRuKGUsYHBvc2AsdCkpLHtwb3M6YSx0aW1lOnN9PWVbcl0se3BvczpvLHRpbWU6Y309ZVtpXSk6KHQ+PWVbcl0udGltZSYmdDw9ZVtpXS50aW1lJiYoe2xvOnIsaGk6aX09dG4oZSxgdGltZWAsdCkpLHt0aW1lOmEscG9zOnN9PWVbcl0se3RpbWU6byxwb3M6Y309ZVtpXSk7bGV0IGw9by1hO3JldHVybiBsP3MrKGMtcykqKHQtYSkvbDpzfShjbGFzcyBleHRlbmRzIGhje3N0YXRpYyBpZD1gdGltZXNlcmllc2A7c3RhdGljIGRlZmF1bHRzPWhjLmRlZmF1bHRzO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuX3RhYmxlPVtdLHRoaXMuX21pblBvcz12b2lkIDAsdGhpcy5fdGFibGVSYW5nZT12b2lkIDB9aW5pdE9mZnNldHMoKXtsZXQgZT10aGlzLl9nZXRUaW1lc3RhbXBzRm9yVGFibGUoKSx0PXRoaXMuX3RhYmxlPXRoaXMuYnVpbGRMb29rdXBUYWJsZShlKTt0aGlzLl9taW5Qb3M9Z2ModCx0aGlzLm1pbiksdGhpcy5fdGFibGVSYW5nZT1nYyh0LHRoaXMubWF4KS10aGlzLl9taW5Qb3Msc3VwZXIuaW5pdE9mZnNldHMoZSl9YnVpbGRMb29rdXBUYWJsZShlKXtsZXR7bWluOnQsbWF4Om59PXRoaXMscj1bXSxpPVtdLGEsbyxzLGMsbDtmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSljPWVbYV0sYz49dCYmYzw9biYmci5wdXNoKGMpO2lmKHIubGVuZ3RoPDIpcmV0dXJuW3t0aW1lOnQscG9zOjB9LHt0aW1lOm4scG9zOjF9XTtmb3IoYT0wLG89ci5sZW5ndGg7YTxvOysrYSlsPXJbYSsxXSxzPXJbYS0xXSxjPXJbYV0sTWF0aC5yb3VuZCgobCtzKS8yKSE9PWMmJmkucHVzaCh7dGltZTpjLHBvczphLyhvLTEpfSk7cmV0dXJuIGl9X2dlbmVyYXRlKCl7bGV0IGU9dGhpcy5taW4sdD10aGlzLm1heCxuPXN1cGVyLmdldERhdGFUaW1lc3RhbXBzKCk7cmV0dXJuKCFuLmluY2x1ZGVzKGUpfHwhbi5sZW5ndGgpJiZuLnNwbGljZSgwLDAsZSksKCFuLmluY2x1ZGVzKHQpfHxuLmxlbmd0aD09PTEpJiZuLnB1c2godCksbi5zb3J0KChlLHQpPT5lLXQpfV9nZXRUaW1lc3RhbXBzRm9yVGFibGUoKXtsZXQgZT10aGlzLl9jYWNoZS5hbGx8fFtdO2lmKGUubGVuZ3RoKXJldHVybiBlO2xldCB0PXRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKSxuPXRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCk7cmV0dXJuIGU9dC5sZW5ndGgmJm4ubGVuZ3RoP3RoaXMubm9ybWFsaXplKHQuY29uY2F0KG4pKTp0Lmxlbmd0aD90Om4sZT10aGlzLl9jYWNoZS5hbGw9ZSxlfWdldERlY2ltYWxGb3JWYWx1ZShlKXtyZXR1cm4oZ2ModGhpcy5fdGFibGUsZSktdGhpcy5fbWluUG9zKS90aGlzLl90YWJsZVJhbmdlfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpL3QuZmFjdG9yLXQuZW5kO3JldHVybiBnYyh0aGlzLl90YWJsZSxuKnRoaXMuX3RhYmxlUmFuZ2UrdGhpcy5fbWluUG9zLCEwKX19KTt2YXIgX2M9e2RhdGE6e3R5cGU6T2JqZWN0LHJlcXVpcmVkOiEwfSxvcHRpb25zOnt0eXBlOk9iamVjdCxkZWZhdWx0OigpPT4oe30pfSxwbHVnaW5zOnt0eXBlOkFycmF5LGRlZmF1bHQ6KCk9PltdfSxkYXRhc2V0SWRLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6YGxhYmVsYH0sdXBkYXRlTW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDp2b2lkIDB9fSx2Yz17YXJpYUxhYmVsOnt0eXBlOlN0cmluZ30sYXJpYURlc2NyaWJlZGJ5Ont0eXBlOlN0cmluZ319LHljPXt0eXBlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGVzdHJveURlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LC4uLl9jLC4uLnZjfSxiYz0oZSx0KT0+T2JqZWN0LmFzc2lnbihlLHQpO2Z1bmN0aW9uIHhjKGUpe3JldHVybiB3KGUpP3JlKGUpOmV9ZnVuY3Rpb24gU2MoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmU7cmV0dXJuIHcodCk/bmV3IFByb3h5KGUse30pOmV9ZnVuY3Rpb24gQ2MoZSx0KXtsZXQgbj1lLm9wdGlvbnM7biYmdCYmT2JqZWN0LmFzc2lnbihuLHQpfWZ1bmN0aW9uIHdjKGUsdCl7ZS5sYWJlbHM9dH1mdW5jdGlvbiBUYyhlLHQsbil7bGV0IHI9W107ZS5kYXRhc2V0cz10Lm1hcCh0PT57bGV0IGk9ZS5kYXRhc2V0cy5maW5kKGU9PmVbbl09PT10W25dKTtyZXR1cm4haXx8IXQuZGF0YXx8ci5pbmNsdWRlcyhpKT97Li4udH06KHIucHVzaChpKSxPYmplY3QuYXNzaWduKGksdCksaSl9KX1mdW5jdGlvbiBFYyhlLHQpe2xldCBuPXtsYWJlbHM6W10sZGF0YXNldHM6W119O3JldHVybiB3YyhuLGUubGFiZWxzKSxUYyhuLGUuZGF0YXNldHMsdCksbn12YXIgRGM9dih7cHJvcHM6eWMsc2V0dXAodCxyKXtsZXR7ZXhwb3NlOmksc2xvdHM6YX09cixvPV8obnVsbCkscz1lKG51bGwpO2koe2NoYXJ0OnN9KTtsZXQgbD0oKT0+e2lmKCFvLnZhbHVlKXJldHVybjtsZXR7dHlwZTplLGRhdGE6bixvcHRpb25zOnIscGx1Z2luczppLGRhdGFzZXRJZEtleTphfT10LGM9U2MoRWMobixhKSxuKTtzLnZhbHVlPW5ldyBXbyhvLnZhbHVlLHt0eXBlOmUsZGF0YTpjLG9wdGlvbnM6ey4uLnJ9LHBsdWdpbnM6aX0pfSxkPSgpPT57bGV0IGU9cmUocy52YWx1ZSk7ZSYmKHQuZGVzdHJveURlbGF5PjA/c2V0VGltZW91dCgoKT0+e2UuZGVzdHJveSgpLHMudmFsdWU9bnVsbH0sdC5kZXN0cm95RGVsYXkpOihlLmRlc3Ryb3koKSxzLnZhbHVlPW51bGwpKX0sZj1lPT57ZS51cGRhdGUodC51cGRhdGVNb2RlKX07cmV0dXJuIGMobCkseChkKSx1KFsoKT0+dC5vcHRpb25zLCgpPT50LmRhdGFdLChlLHIpPT57bGV0W2ksYV09ZSxbbyxjXT1yLGw9cmUocy52YWx1ZSk7aWYoIWwpcmV0dXJuO2xldCB1PSExO2lmKGkpe2xldCBlPXhjKGkpLHQ9eGMobyk7ZSYmZSE9PXQmJihDYyhsLGUpLHU9ITApfWlmKGEpe2xldCBlPXhjKGEubGFiZWxzKSxuPXhjKGMubGFiZWxzKSxyPXhjKGEuZGF0YXNldHMpLGk9eGMoYy5kYXRhc2V0cyk7ZSE9PW4mJih3YyhsLmNvbmZpZy5kYXRhLGUpLHU9ITApLHImJnIhPT1pJiYoVGMobC5jb25maWcuZGF0YSxyLHQuZGF0YXNldElkS2V5KSx1PSEwKX11JiZuKCgpPT57ZihsKX0pfSx7ZGVlcDohMH0pLCgpPT53ZShgY2FudmFzYCx7cm9sZTpgaW1nYCwiYXJpYS1sYWJlbCI6dC5hcmlhTGFiZWwsImFyaWEtZGVzY3JpYmVkYnkiOnQuYXJpYURlc2NyaWJlZGJ5LHJlZjpvfSxbd2UoYHBgLHt9LFthLmRlZmF1bHQ/YS5kZWZhdWx0KCk6YGBdKV0pfX0pO2Z1bmN0aW9uIE9jKHQsbil7cmV0dXJuIFdvLnJlZ2lzdGVyKG4pLHYoe3Byb3BzOl9jLHNldHVwKG4scil7bGV0e2V4cG9zZTppfT1yLGE9ZShudWxsKSxvPWUobnVsbCk7dSgoKT0+by52YWx1ZT8uY2hhcnQ/P251bGwsZT0+e2EudmFsdWU9ZX0se2ZsdXNoOmBzeW5jYH0pLGkoe2NoYXJ0OmF9KTtsZXQgcz1lPT57by52YWx1ZT1lfTtyZXR1cm4oKT0+d2UoRGMsYmMoe3JlZjpzfSx7dHlwZTp0LC4uLm59KSl9fSl9dmFyIGtjPU9jKGBiYXJgLFJpKTtXby5yZWdpc3RlcihSaSx0cyxOcyxMcyx1cyxPcyk7ZnVuY3Rpb24gQWMoKXtsZXQgZT1fKGBgKSx0PV8oYGApLG49XyhgYCk7ZnVuY3Rpb24gcigpe2xldCByPWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtlLnZhbHVlPXIuZ2V0UHJvcGVydHlWYWx1ZShgLS1mb3JlZ3JvdW5kYCkudHJpbSgpLHQudmFsdWU9ci5nZXRQcm9wZXJ0eVZhbHVlKGAtLW11dGVkLWZvcmVncm91bmRgKS50cmltKCksbi52YWx1ZT1yLmdldFByb3BlcnR5VmFsdWUoYC0tYm9yZGVyYCkudHJpbSgpfWxldCBpO3JldHVybiBjKCgpPT57cigpLGk9d2luZG93Lm1hdGNoTWVkaWEoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylgKSxpLmFkZEV2ZW50TGlzdGVuZXIoYGNoYW5nZWAscil9KSxTKCgpPT57aT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCxyKX0pLHtmb3JlZ3JvdW5kOmUsbXV0ZWRGb3JlZ3JvdW5kOnQsYm9yZGVyOm59fXZhciBqYz17a2V5OjAsY2xhc3M6YHB5LTggdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxNYz12KHtfX25hbWU6YE1vZGVsVXNhZ2VDaGFydGAscHJvcHM6e21ldHJpYzp7fSxtb2RlbHM6e319LHNldHVwKGUpe2xldCB0PWUse2ZvcmVncm91bmQ6bixtdXRlZEZvcmVncm91bmQ6cixib3JkZXI6aX09QWMoKSxhPXtyZXE6YC0tY2hhcnQtcmVxdWVzdHNgLHRva2luOmAtLWNoYXJ0LXRva2Vucy1pbmAsdG9rb3V0OmAtLWNoYXJ0LXRva2Vucy1vdXRgLGNvc3Q6YC0tY2hhcnQtY29zdGB9O2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZT09PWBjb3N0YD90LzFlNjp0fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGUpLnRyaW0oKX1sZXQgbD1rKCgpPT4obi52YWx1ZSx7bGFiZWxzOnQubW9kZWxzLm1hcChlPT5lLmlkKSxkYXRhc2V0czpbe2xhYmVsOnRlW3QubWV0cmljXSxiYWNrZ3JvdW5kQ29sb3I6YyhhW3QubWV0cmljXSksZGF0YTp0Lm1vZGVscy5tYXAoZT0+cyh0Lm1ldHJpYyxlLnZhbHVlKSl9XX0pKSx1PWsoKCk9PmAke01hdGgubWF4KDE4MCx0Lm1vZGVscy5sZW5ndGgqMjgrNjApfXB4YCksZD1rKCgpPT4oe2luZGV4QXhpczpgeWAscmVzcG9uc2l2ZTohMCxtYWludGFpbkFzcGVjdFJhdGlvOiExLGFuaW1hdGlvbjohMSxzY2FsZXM6e3g6e2JlZ2luQXRaZXJvOiEwLGdyaWQ6e2NvbG9yOmkudmFsdWV9LHRpY2tzOntjb2xvcjpyLnZhbHVlLGNhbGxiYWNrOmU9PnQubWV0cmljPT09YGNvc3RgP3VlKE51bWJlcihlKSoxZTYpOm1lKE51bWJlcihlKSl9fSx5OntncmlkOntkaXNwbGF5OiExfSx0aWNrczp7Y29sb3I6ci52YWx1ZSxhdXRvU2tpcDohMX19fSxwbHVnaW5zOntsZWdlbmQ6e2Rpc3BsYXk6ITF9LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6ZT0+e2xldCBuPWUucGFyc2VkLng/PzA7cmV0dXJuIHQubWV0cmljPT09YGNvc3RgP2Ake3RlW3QubWV0cmljXX06ICQke24udG9GaXhlZCg0KX1gOmAke3RlW3QubWV0cmljXX06ICR7bWUobil9ICgke29lKG4pfSlgfX19fX0pKTtyZXR1cm4odCxuKT0+ZS5tb2RlbHMubGVuZ3RoPT09MD8oQygpLG8oYHBgLGpjLGAgTm8gbW9kZWwgcmVjb3JkZWQgYW55IHVzYWdlIGluIHRoaXMgd2luZG93LiBgKSk6KEMoKSxvKGBkaXZgLHtrZXk6MSxjbGFzczpgdy1mdWxsYCxzdHlsZTpmZSh7aGVpZ2h0OnUudmFsdWV9KX0sW2YoQShrYykse2RhdGE6bC52YWx1ZSxvcHRpb25zOmQudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBvcHRpb25zYF0pXSw0KSl9fSksTmM9e2NsYXNzOmBoLTcyIHctZnVsbGB9LFBjPXYoe19fbmFtZTpgVXNhZ2VDaGFydGAscHJvcHM6e3RhYjp7fSx3aW5kb3c6e30sc2VyaWVzQnlNZXRyaWM6e319LHNldHVwKGUpe2xldCB0PWUse2ZvcmVncm91bmQ6bixtdXRlZEZvcmVncm91bmQ6cixib3JkZXI6aX09QWMoKSxhPXtyZXF1ZXN0czpbe21ldHJpYzpgcmVxYCxsYWJlbDpgUmVxdWVzdHNgLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH1dLHRva2Vuczpbe21ldHJpYzpgdG9raW5gLGxhYmVsOmBUb2tlbnMgaW5gLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1pbmB9LHttZXRyaWM6YHRva291dGAsbGFiZWw6YFRva2VucyBvdXRgLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1vdXRgfV0sY29zdDpbe21ldHJpYzpgY29zdGAsbGFiZWw6YENvc3QgKFVTRClgLGNvbG9yOmAtLWNoYXJ0LWNvc3RgfV19O2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZT09PWBjb3N0YD90LzFlNjp0fWxldCBjPWsoKCk9PntsZXQgZT1hW3QudGFiXSxuPW5ldyBTZXQ7Zm9yKGxldCByIG9mIGUpZm9yKGxldCBlIG9mIHQuc2VyaWVzQnlNZXRyaWNbci5tZXRyaWNdPz9bXSluLmFkZChlLmJ1Y2tldCk7cmV0dXJuIEFycmF5LmZyb20obikuc29ydCgpfSksbD1rKCgpPT5jLnZhbHVlLm1hcChlPT5pZShlLHQud2luZG93KSkpO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGUpLnRyaW0oKX1sZXQgZD1rKCgpPT57bi52YWx1ZTtsZXQgZT1jLnZhbHVlO3JldHVybntsYWJlbHM6bC52YWx1ZSxkYXRhc2V0czphW3QudGFiXS5tYXAobj0+e2xldCByPW5ldyBNYXAoKHQuc2VyaWVzQnlNZXRyaWNbbi5tZXRyaWNdPz9bXSkubWFwKGU9PltlLmJ1Y2tldCxlLnZhbHVlXSkpO3JldHVybntsYWJlbDpuLmxhYmVsLGJhY2tncm91bmRDb2xvcjp1KG4uY29sb3IpLGRhdGE6ZS5tYXAoZT0+cyhuLm1ldHJpYyxyLmdldChlKT8/MCkpfX0pfX0pLHA9aygoKT0+YVt0LnRhYl0ubGVuZ3RoPjEpLG09aygoKT0+KHtyZXNwb25zaXZlOiEwLG1haW50YWluQXNwZWN0UmF0aW86ITEsYW5pbWF0aW9uOiExLHNjYWxlczp7eDp7c3RhY2tlZDpwLnZhbHVlLGdyaWQ6e2NvbG9yOmkudmFsdWUsZGlzcGxheTohMX0sdGlja3M6e2NvbG9yOnIudmFsdWV9fSx5OntzdGFja2VkOnAudmFsdWUsYmVnaW5BdFplcm86ITAsZ3JpZDp7Y29sb3I6aS52YWx1ZX0sdGlja3M6e2NvbG9yOnIudmFsdWUsY2FsbGJhY2s6ZT0+dC50YWI9PT1gY29zdGA/dWUoTnVtYmVyKGUpKjFlNik6bWUoTnVtYmVyKGUpKX19fSxwbHVnaW5zOntsZWdlbmQ6e2Rpc3BsYXk6cC52YWx1ZSxsYWJlbHM6e2NvbG9yOm4udmFsdWV9fSx0b29sdGlwOntjYWxsYmFja3M6e2xhYmVsOmU9PntsZXQgbj1lLnBhcnNlZC55Pz8wO3JldHVybiB0LnRhYj09PWBjb3N0YD9gJHtlLmRhdGFzZXQubGFiZWx9OiAkJHtuLnRvRml4ZWQoNCl9YDpgJHtlLmRhdGFzZXQubGFiZWx9OiAke21lKG4pfSAoJHtvZShuKX0pYH19fX19KSk7cmV0dXJuKGUsdCk9PihDKCksbyhgZGl2YCxOYyxbZihBKGtjKSx7ZGF0YTpkLnZhbHVlLG9wdGlvbnM6bS52YWx1ZX0sbnVsbCw4LFtgZGF0YWAsYG9wdGlvbnNgXSldKSl9fSk7ZnVuY3Rpb24gRmMoZSx0KXtyZXR1cm4gdD9lLmZpbHRlcihlPT5lLmlkLnN0YXJ0c1dpdGgodCkpOmV9dmFyIEljPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zYH0sTGM9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtZGVzdHJ1Y3RpdmVgfSxSYz17a2V5OjEsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0semM9e2NsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEJjPXtrZXk6MCxjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXNtYH0sVmM9e2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LEhjPXtrZXk6MSxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxVYz17Y2xhc3M6YGZsZXgganVzdGlmeS1lbmRgfSxXYz12KHtfX25hbWU6YENoYXJ0c1ZpZXdgLHNldHVwKGUpe2xldCBuPXIoKSxfPW5lKCkse3F1ZXJ5OnYsbm9ybWFsaXplZDpTLGhhc1F1ZXJ5Ond9PWFlKCkscmU9aygoKT0+e2xldCBlPW4udXNhZ2U/LnVzZXJzPz9bXSx0PW4udXNhZ2U/Lmdyb3Vwcz8/W10scj1lLmZpbHRlcihlPT4hdy52YWx1ZXx8ZGUoZSxTLnZhbHVlKXx8YHVzZXI6JHtlLmlkfWA9PT1fLnNjb3BlKS5tYXAoZT0+KHt2YWx1ZTpgdXNlcjoke2UuaWR9YCxsYWJlbDplLmlkfSkpLGk9dC5maWx0ZXIodD0+IXcudmFsdWV8fHZlKHQsZSxTLnZhbHVlKXx8YGdyb3VwOiR7dC5pZH1gPT09Xy5zY29wZSkubWFwKGU9Pih7dmFsdWU6YGdyb3VwOiR7ZS5pZH1gLGxhYmVsOmUuaWR9KSksYT0oXy5tb2RlbE9wdGlvbnM/P1tdKS5maWx0ZXIoZT0+IXcudmFsdWV8fGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTLnZhbHVlKXx8YG1vZGVsOiR7ZS5pZH1gPT09Xy5zY29wZSkubWFwKGU9Pih7dmFsdWU6YG1vZGVsOiR7ZS5pZH1gLGxhYmVsOmUuaWR9KSk7cmV0dXJuIF8uc2NvcGUuc3RhcnRzV2l0aChgbW9kZWw6YCkmJiFhLnNvbWUoZT0+ZS52YWx1ZT09PV8uc2NvcGUpJiZhLnB1c2goe3ZhbHVlOl8uc2NvcGUsbGFiZWw6Xy5zY29wZS5zbGljZSg2KX0pLFt7dmFsdWU6YHRvdGFsYCxsYWJlbDpgVG90YWwgKGFsbCB0cmFmZmljKWB9LC4uLmksLi4uciwuLi5hXX0pLGllPVtgaG91cmAsYGRheWAsYG1vbnRoYF0sb2U9W2Bjb3N0YCxgcmVxYCxgdG9raW5gLGB0b2tvdXRgXSx1ZT1rKCgpPT5GYyhfLm1vZGVsUmFua2luZyxfLm1vZGVsRmlsdGVyKSk7ZnVuY3Rpb24gZmUoKXtyZXR1cm4gaGUodWUudmFsdWUsdGVbXy5tb2RlbE1ldHJpY10sbGVbXy53aW5kb3ddLHllW18ud2luZG93XSxfLm1vZGVsTWV0cmljPT09YGNvc3RgKX1mdW5jdGlvbiBtZSgpe18uc2V0TW9kZWxGaWx0ZXIoYGApfWxldCB3ZT1rKCgpPT5fLnRhYj09PWBtb2RlbHNgP2ByZXF1ZXN0c2A6Xy50YWIpO2Z1bmN0aW9uIFRlKGUpe18uc2V0VGFiKGUpfWZ1bmN0aW9uIEVlKGUpe3R5cGVvZiBlPT1gc3RyaW5nYCYmXy5zZXRTY29wZShlKX1mdW5jdGlvbiBEZShlKXt0eXBlb2YgZT09YHN0cmluZ2AmJl8uc2V0TW9kZWxNZXRyaWMoZSl9cmV0dXJuIGMoKCk9PntfLmZldGNoTW9kZWxPcHRpb25zKCksXy5zdGFydEF1dG9SZWZyZXNoKCl9KSx4KCgpPT57Xy5zdG9wQXV0b1JlZnJlc2goKX0pLHUocmUsZT0+e2Uuc29tZShlPT5lLnZhbHVlPT09Xy5zY29wZSl8fF8uc2V0U2NvcGUoYHRvdGFsYCl9KSwoZSxuKT0+e2xldCByPWQoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBDKCksbShBKGkpLG51bGwse2RlZmF1bHQ6VCgoKT0+W2YoQShiKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTQgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlbmB9LHtkZWZhdWx0OlQoKCk9PltmKEEoeGUpLG51bGwse2RlZmF1bHQ6VCgoKT0+Wy4uLm5bMl18fD1bbChgVXNhZ2UgY2hhcnRzYCwtMSldXSksXzoxfSkscChgZGl2YCxJYyxbQShfKS50YWI9PT1gbW9kZWxzYD9nKGBgLCEwKTooQygpLG0oeSx7a2V5OjAsbW9kZWxWYWx1ZTpBKHYpLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpuWzBdfHw9ZT0+RSh2KT92LnZhbHVlPWU6bnVsbCxwbGFjZWhvbGRlcjpgRmlsdGVyIHVzZXJzLCBncm91cHMgb3IgbW9kZWxzYCxjbGFzczpgdy01NmB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSkpLEEoXykudGFiPT09YG1vZGVsc2A/KEMoKSxtKEEoU2UpLHtrZXk6MSwibW9kZWwtdmFsdWUiOkEoXykubW9kZWxNZXRyaWMsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOkRlfSx7ZGVmYXVsdDpUKCgpPT5bZihBKGJlKSx7Y2xhc3M6YHctNDBgLCJhcmlhLWxhYmVsIjpgUmFuayBtb2RlbHMgYnlgfSx7ZGVmYXVsdDpUKCgpPT5bZihBKEQpLHtwbGFjZWhvbGRlcjpgUmFuayBieWB9KV0pLF86MX0pLGYoQShlZSksbnVsbCx7ZGVmYXVsdDpUKCgpPT5bKEMoKSxvKHQsbnVsbCxzKG9lLGU9PmYoQShDZSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OlQoKCk9PltsKGdlKEEodGUpW2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSw2NCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSk6KEMoKSxtKEEoU2UpLHtrZXk6MiwibW9kZWwtdmFsdWUiOkEoXykuc2NvcGUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOkVlfSx7ZGVmYXVsdDpUKCgpPT5bZihBKGJlKSx7Y2xhc3M6YHctNTZgfSx7ZGVmYXVsdDpUKCgpPT5bZihBKEQpLHtwbGFjZWhvbGRlcjpgU2NvcGVgfSldKSxfOjF9KSxmKEEoZWUpLG51bGwse2RlZmF1bHQ6VCgoKT0+WyhDKCEwKSxvKHQsbnVsbCxzKHJlLnZhbHVlLGU9PihDKCksbShBKENlKSx7a2V5OmUudmFsdWUsdmFsdWU6ZS52YWx1ZX0se2RlZmF1bHQ6VCgoKT0+W2woZ2UoZS5sYWJlbCksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSksZihBKF9lKSx7Im1vZGVsLXZhbHVlIjpBKF8pLndpbmRvdywib25VcGRhdGU6bW9kZWxWYWx1ZSI6blsxXXx8PWU9PkEoXykuc2V0V2luZG93KGUpfSx7ZGVmYXVsdDpUKCgpPT5bZihBKHBlKSxudWxsLHtkZWZhdWx0OlQoKCk9PlsoQygpLG8odCxudWxsLHMoaWUsZT0+ZihBKE8pLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpUKCgpPT5bbChnZShBKGxlKVtlXSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSksNjQpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKV0pLF86MX0pLGYoQShhKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSx7ZGVmYXVsdDpUKCgpPT5bZihBKF9lKSx7Im1vZGVsLXZhbHVlIjpBKF8pLnRhYiwib25VcGRhdGU6bW9kZWxWYWx1ZSI6VGV9LHtkZWZhdWx0OlQoKCk9PltmKEEocGUpLG51bGwse2RlZmF1bHQ6VCgoKT0+W2YoQShPKSx7dmFsdWU6YHJlcXVlc3RzYH0se2RlZmF1bHQ6VCgoKT0+Wy4uLm5bM118fD1bbChgUmVxdWVzdHNgLC0xKV1dKSxfOjF9KSxmKEEoTykse3ZhbHVlOmB0b2tlbnNgfSx7ZGVmYXVsdDpUKCgpPT5bLi4ubls0XXx8PVtsKGBUb2tlbnNgLC0xKV1dKSxfOjF9KSxmKEEoTykse3ZhbHVlOmBjb3N0YH0se2RlZmF1bHQ6VCgoKT0+Wy4uLm5bNV18fD1bbChgQ29zdGAsLTEpXV0pLF86MX0pLGYoQShPKSx7dmFsdWU6YG1vZGVsc2B9LHtkZWZhdWx0OlQoKCk9PlsuLi5uWzZdfHw9W2woYE1vZGVsc2AsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSxBKF8pLmVycm9yPyhDKCksbyhgcGAsTGMsZ2UoQShfKS5lcnJvciksMSkpOkEoXykubG9hZGluZyYmIUEoXykubG9hZGVkPyhDKCksbyhgcGAsUmMsYExvYWRpbmfigKZgKSk6ZyhgYCwhMCksQShfKS50YWI9PT1gbW9kZWxzYD8oQygpLG8odCx7a2V5OjJ9LFtwKGBwYCx6YyxgIE1vZGVscyB3aXRoIHVzYWdlIG92ZXIgdGhlIGxhc3QgYCtnZShBKGxlKVtBKF8pLndpbmRvd10pK2AsIHJhbmtlZCBieSBgK2dlKEEodGUpW0EoXykubW9kZWxNZXRyaWNdLnRvTG93ZXJDYXNlKCkpK2AuIEVhY2ggcm93IGlzIHRoZSBwcm92aWRlciB0aGF0IHNlcnZlZCB0aGUgdHJhZmZpYywgc28gYSBtb2RlbCByZWFjaGVkIHRocm91Z2ggbW9yZSB0aGFuIG9uZSBwcm92aWRlciBhcHBlYXJzIG9uY2UgcGVyIHByb3ZpZGVyLiBgLDEpLEEoXykubW9kZWxGaWx0ZXI/KEMoKSxvKGBwYCxCYyxbbls3XXx8PXAoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEZpbHRlcmVkIHRvYCwtMSkscChgc3BhbmAsVmMsZ2UoQShfKS5tb2RlbEZpbHRlciksMSksZihBKGgpLHt2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbi14c2AsImFyaWEtbGFiZWwiOmBDbGVhciBtb2RlbCBmaWx0ZXJgLG9uQ2xpY2s6bWV9LHtkZWZhdWx0OlQoKCk9PltmKHIse2ljb246QShjZSksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pXSkpOmcoYGAsITApLEEoXykubW9kZWxSYW5raW5nLmxlbmd0aD09PUEoMjApPyhDKCksbyhgcGAsSGMsYCBUb3AgYCtnZShBKDIwKSkrYCBtb2RlbHMgYCwxKSk6ZyhgYCwhMCksZihNYyx7bWV0cmljOkEoXykubW9kZWxNZXRyaWMsbW9kZWxzOnVlLnZhbHVlfSxudWxsLDgsW2BtZXRyaWNgLGBtb2RlbHNgXSkscChgZGl2YCxVYyxbZihzZSx7ZmlsZW5hbWU6YHVzYWdlLW1vZGVscy0ke0EoXykud2luZG93fS5jc3ZgLGJ1aWxkOmZlfSxudWxsLDgsW2BmaWxlbmFtZWBdKV0pXSw2NCkpOihDKCksbShQYyx7a2V5OjMsdGFiOndlLnZhbHVlLHdpbmRvdzpBKF8pLndpbmRvdywic2VyaWVzLWJ5LW1ldHJpYyI6QShfKS5zZXJpZXNCeU1ldHJpY30sbnVsbCw4LFtgdGFiYCxgd2luZG93YCxgc2VyaWVzLWJ5LW1ldHJpY2BdKSldKSxfOjF9KV0pLF86MX0pfX19KTtleHBvcnR7V2MgYXMgZGVmYXVsdH07", ), }, - "index-Bl-2uRON.js": { + "index-AWMozAX1.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5LHQ9KHQsbik9PntsZXQgcj17fTtmb3IodmFyIGkgaW4gdCllKHIsaSx7Z2V0OnRbaV0sZW51bWVyYWJsZTohMH0pO3JldHVybiBufHxlKHIsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpgTW9kdWxlYH0pLHJ9O2Z1bmN0aW9uIG4oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG4gb2YgZS5zcGxpdChgLGApKXRbbl09MTtyZXR1cm4gZT0+ZSBpbiB0fXZhciByPXt9LGk9W10sYT0oKT0+e30sbz0oKT0+ITEscz1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmKGUuY2hhckNvZGVBdCgyKT4xMjJ8fGUuY2hhckNvZGVBdCgyKTw5NyksYz1lPT5lLnN0YXJ0c1dpdGgoYG9uVXBkYXRlOmApLGw9T2JqZWN0LmFzc2lnbix1PShlLHQpPT57bGV0IG49ZS5pbmRleE9mKHQpO24+LTEmJmUuc3BsaWNlKG4sMSl9LGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxmPShlLHQpPT5kLmNhbGwoZSx0KSxwPUFycmF5LmlzQXJyYXksbT1lPT53KGUpPT09YFtvYmplY3QgTWFwXWAsaD1lPT53KGUpPT09YFtvYmplY3QgU2V0XWAsZz1lPT53KGUpPT09YFtvYmplY3QgRGF0ZV1gLF89ZT0+dyhlKT09PWBbb2JqZWN0IFJlZ0V4cF1gLHY9ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAseT1lPT50eXBlb2YgZT09YHN0cmluZ2AsYj1lPT50eXBlb2YgZT09YHN5bWJvbGAseD1lPT50eXBlb2YgZT09YG9iamVjdGAmJiEhZSxTPWU9Pih4KGUpfHx2KGUpKSYmdihlLnRoZW4pJiZ2KGUuY2F0Y2gpLEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyx3PWU9PkMuY2FsbChlKSxlZT1lPT53KGUpLnNsaWNlKDgsLTEpLHRlPWU9PncoZSk9PT1gW29iamVjdCBPYmplY3RdYCxUPWU9PnkoZSkmJmUhPT1gTmFOYCYmZVswXSE9PWAtYCYmYGArcGFyc2VJbnQoZSwxMCk9PT1lLG5lPW4oYCxrZXkscmVmLHJlZl9mb3IscmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkYCkscmU9ZT0+e2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuKG49PnRbbl18fCh0W25dPWUobikpKX0saWU9Ly1cdy9nLEU9cmUoZT0+ZS5yZXBsYWNlKGllLGU9PmUuc2xpY2UoMSkudG9VcHBlckNhc2UoKSkpLGFlPS9cQihbQS1aXSkvZyxvZT1yZShlPT5lLnJlcGxhY2UoYWUsYC0kMWApLnRvTG93ZXJDYXNlKCkpLHNlPXJlKGU9PmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSksY2U9cmUoZT0+ZT9gb24ke3NlKGUpfWA6YGApLEQ9KGUsdCk9PiFPYmplY3QuaXMoZSx0KSxsZT0oZSwuLi50KT0+e2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl0oLi4udCl9LHVlPShlLHQsbixyPSExKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOnIsdmFsdWU6bn0pfSxkZT1lPT57bGV0IHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fSxmZT1lPT57bGV0IHQ9eShlKT9OdW1iZXIoZSk6TmFOO3JldHVybiBpc05hTih0KT9lOnR9LHBlLG1lPSgpPT5wZXx8PXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPGB1YD9zZWxmOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6e30saGU9bihgSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IsU3ltYm9sYCk7ZnVuY3Rpb24gZ2UoZSl7aWYocChlKSl7bGV0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl0saT15KHIpP2JlKHIpOmdlKHIpO2lmKGkpZm9yKGxldCBlIGluIGkpdFtlXT1pW2VdfXJldHVybiB0fWlmKHkoZSl8fHgoZSkpcmV0dXJuIGV9dmFyIF9lPS87KD8hW14oXSpcKSkvZyx2ZT0vOihbXl0rKS8seWU9L1wvXCpbXl0qP1wqXC8vZztmdW5jdGlvbiBiZShlKXtsZXQgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHllLGBgKS5zcGxpdChfZSkuZm9yRWFjaChlPT57aWYoZSl7bGV0IG49ZS5zcGxpdCh2ZSk7bi5sZW5ndGg+MSYmKHRbblswXS50cmltKCldPW5bMV0udHJpbSgpKX19KSx0fWZ1bmN0aW9uIE8oZSl7bGV0IHQ9YGA7aWYoeShlKSl0PWU7ZWxzZSBpZihwKGUpKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1PKGVbbl0pO3ImJih0Kz1yK2AgYCl9ZWxzZSBpZih4KGUpKWZvcihsZXQgbiBpbiBlKWVbbl0mJih0Kz1uK2AgYCk7cmV0dXJuIHQudHJpbSgpfWZ1bmN0aW9uIHhlKGUpe2lmKCFlKXJldHVybiBudWxsO2xldHtjbGFzczp0LHN0eWxlOm59PWU7cmV0dXJuIHQmJiF5KHQpJiYoZS5jbGFzcz1PKHQpKSxuJiYoZS5zdHlsZT1nZShuKSksZX12YXIgU2U9YGl0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92YWxpZGF0ZSxyZWFkb25seWAsQ2U9bihTZSk7U2UrYGA7ZnVuY3Rpb24gd2UoZSl7cmV0dXJuISFlfHxlPT09YGB9ZnVuY3Rpb24gVGUoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2xldCBuPSEwO2ZvcihsZXQgcj0wO24mJnI8ZS5sZW5ndGg7cisrKW49RWUoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBFZShlLHQpe2lmKGU9PT10KXJldHVybiEwO2xldCBuPWcoZSkscj1nKHQpO2lmKG58fHIpcmV0dXJuIG4mJnI/ZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTohMTtpZihuPWIoZSkscj1iKHQpLG58fHIpcmV0dXJuIGU9PT10O2lmKG49cChlKSxyPXAodCksbnx8cilyZXR1cm4gbiYmcj9UZShlLHQpOiExO2lmKG49eChlKSxyPXgodCksbnx8cil7aWYoIW58fCFyfHxPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuIGluIGUpe2xldCByPWUuaGFzT3duUHJvcGVydHkobiksaT10Lmhhc093blByb3BlcnR5KG4pO2lmKHImJiFpfHwhciYmaXx8IUVlKGVbbl0sdFtuXSkpcmV0dXJuITF9fXJldHVybiBTdHJpbmcoZSk9PT1TdHJpbmcodCl9ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4gZS5maW5kSW5kZXgoZT0+RWUoZSx0KSl9dmFyIE9lPWU9PiEhKGUmJmUuX192X2lzUmVmPT09ITApLGs9ZT0+eShlKT9lOmU9PW51bGw/YGA6cChlKXx8eChlKSYmKGUudG9TdHJpbmc9PT1DfHwhdihlLnRvU3RyaW5nKSk/T2UoZSk/ayhlLnZhbHVlKTpKU09OLnN0cmluZ2lmeShlLGtlLDIpOlN0cmluZyhlKSxrZT0oZSx0KT0+T2UodCk/a2UoZSx0LnZhbHVlKTptKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cmllcygpXS5yZWR1Y2UoKGUsW3Qsbl0scik9PihlW0FlKHQscikrYCA9PmBdPW4sZSkse30pfTpoKHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChlPT5BZShlKSl9OmIodCk/QWUodCk6eCh0KSYmIXAodCkmJiF0ZSh0KT9TdHJpbmcodCk6dCxBZT0oZSx0PWBgKT0+YihlKT9gU3ltYm9sKCR7ZS5kZXNjcmlwdGlvbj8/dH0pYDplO2Z1bmN0aW9uIGplKGUpe3JldHVybiBlPT1udWxsP2Bpbml0aWFsYDp0eXBlb2YgZT09YHN0cmluZ2A/ZT09PWBgP2AgYDplOlN0cmluZyhlKX12YXIgTWUsTmU9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5kZXRhY2hlZD1lLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9vbj0wLHRoaXMuZWZmZWN0cz1bXSx0aGlzLmNsZWFudXBzPVtdLHRoaXMuX2lzUGF1c2VkPSExLHRoaXMuX3dhcm5PblJ1bj0hMCx0aGlzLl9fdl9za2lwPSEwLCFlJiZNZSYmKE1lLmFjdGl2ZT8odGhpcy5wYXJlbnQ9TWUsdGhpcy5pbmRleD0oTWUuc2NvcGVzfHwoTWUuc2NvcGVzPVtdKSkucHVzaCh0aGlzKS0xKToodGhpcy5fYWN0aXZlPSExLHRoaXMuX3dhcm5PblJ1bj0hMSkpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXNlKCl7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9pc1BhdXNlZD0hMDtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucGF1c2UoKX1mb3IoZT0wLHQ9dGhpcy5lZmZlY3RzLmxlbmd0aDtlPHQ7ZSsrKXRoaXMuZWZmZWN0c1tlXS5wYXVzZSgpfX1yZXN1bWUoKXtpZih0aGlzLl9hY3RpdmUmJnRoaXMuX2lzUGF1c2VkKXt0aGlzLl9pc1BhdXNlZD0hMTtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucmVzdW1lKCl9bGV0IG49dGhpcy5lZmZlY3RzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5yZXN1bWUoKX19cnVuKGUpe2lmKHRoaXMuX2FjdGl2ZSl7bGV0IHQ9TWU7dHJ5e3JldHVybiBNZT10aGlzLGUoKX1maW5hbGx5e01lPXR9fX1vbigpeysrdGhpcy5fb249PT0xJiYodGhpcy5wcmV2U2NvcGU9TWUsTWU9dGhpcyl9b2ZmKCl7aWYodGhpcy5fb24+MCYmLS10aGlzLl9vbj09PTApe2lmKE1lPT09dGhpcylNZT10aGlzLnByZXZTY29wZTtlbHNle2xldCBlPU1lO2Zvcig7ZTspe2lmKGUucHJldlNjb3BlPT09dGhpcyl7ZS5wcmV2U2NvcGU9dGhpcy5wcmV2U2NvcGU7YnJlYWt9ZT1lLnByZXZTY29wZX19dGhpcy5wcmV2U2NvcGU9dm9pZCAwfX1zdG9wKGUpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5fYWN0aXZlPSExO2xldCB0LG47Zm9yKHQ9MCxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjdHMubGVuZ3RoPTAsdD0wLG49dGhpcy5jbGVhbnVwcy5sZW5ndGg7dDxuO3QrKyl0aGlzLmNsZWFudXBzW3RdKCk7aWYodGhpcy5jbGVhbnVwcy5sZW5ndGg9MCx0aGlzLnNjb3Blcyl7bGV0IGU9dGhpcy5zY29wZXMuc2xpY2UoKTtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aGlzLnBhcmVudCYmIWUpe2xldCBlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtlJiZlIT09dGhpcyYmKHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XT1lLGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwfX19O2Z1bmN0aW9uIFBlKGUpe3JldHVybiBuZXcgTmUoZSl9ZnVuY3Rpb24gRmUoKXtyZXR1cm4gTWV9ZnVuY3Rpb24gSWUoZSx0PSExKXtNZSYmTWUuY2xlYW51cHMucHVzaChlKX12YXIgTGUsUmU9bmV3IFdlYWtTZXQsemU9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5mbj1lLHRoaXMuZGVwcz12b2lkIDAsdGhpcy5kZXBzVGFpbD12b2lkIDAsdGhpcy5mbGFncz01LHRoaXMubmV4dD12b2lkIDAsdGhpcy5jbGVhbnVwPXZvaWQgMCx0aGlzLnNjaGVkdWxlcj12b2lkIDAsTWUmJihNZS5hY3RpdmU/TWUuZWZmZWN0cy5wdXNoKHRoaXMpOnRoaXMuZmxhZ3MmPS0yKX1wYXVzZSgpe3RoaXMuZmxhZ3N8PTY0fXJlc3VtZSgpe3RoaXMuZmxhZ3MmNjQmJih0aGlzLmZsYWdzJj0tNjUsUmUuaGFzKHRoaXMpJiYoUmUuZGVsZXRlKHRoaXMpLHRoaXMudHJpZ2dlcigpKSl9bm90aWZ5KCl7dGhpcy5mbGFncyYyJiYhKHRoaXMuZmxhZ3MmMzIpfHx0aGlzLmZsYWdzJjh8fFVlKHRoaXMpfXJ1bigpe2lmKCEodGhpcy5mbGFncyYxKSlyZXR1cm4gdGhpcy5mbigpO3RoaXMuZmxhZ3N8PTIsaXQodGhpcyksS2UodGhpcyk7bGV0IGU9TGUsdD1ldDtMZT10aGlzLGV0PSEwO3RyeXtyZXR1cm4gdGhpcy5mbigpfWZpbmFsbHl7cWUodGhpcyksTGU9ZSxldD10LHRoaXMuZmxhZ3MmPS0zfX1zdG9wKCl7aWYodGhpcy5mbGFncyYxKXtmb3IobGV0IGU9dGhpcy5kZXBzO2U7ZT1lLm5leHREZXApWGUoZSk7dGhpcy5kZXBzPXRoaXMuZGVwc1RhaWw9dm9pZCAwLGl0KHRoaXMpLHRoaXMub25TdG9wJiZ0aGlzLm9uU3RvcCgpLHRoaXMuZmxhZ3MmPS0yfX10cmlnZ2VyKCl7dGhpcy5mbGFncyY2ND9SZS5hZGQodGhpcyk6dGhpcy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRGlydHkoKX1ydW5JZkRpcnR5KCl7SmUodGhpcykmJnRoaXMucnVuKCl9Z2V0IGRpcnR5KCl7cmV0dXJuIEplKHRoaXMpfX0sQmU9MCxWZSxIZTtmdW5jdGlvbiBVZShlLHQ9ITEpe2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PUhlLEhlPWU7cmV0dXJufWUubmV4dD1WZSxWZT1lfWZ1bmN0aW9uIFdlKCl7QmUrK31mdW5jdGlvbiBHZSgpe2lmKC0tQmU+MClyZXR1cm47aWYoSGUpe2xldCBlPUhlO2ZvcihIZT12b2lkIDA7ZTspe2xldCB0PWUubmV4dDtlLm5leHQ9dm9pZCAwLGUuZmxhZ3MmPS05LGU9dH19bGV0IGU7Zm9yKDtWZTspe2xldCB0PVZlO2ZvcihWZT12b2lkIDA7dDspe2xldCBuPXQubmV4dDtpZih0Lm5leHQ9dm9pZCAwLHQuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC50cmlnZ2VyKCl9Y2F0Y2godCl7ZXx8PXR9dD1ufX1pZihlKXRocm93IGV9ZnVuY3Rpb24gS2UoZSl7Zm9yKGxldCB0PWUuZGVwczt0O3Q9dC5uZXh0RGVwKXQudmVyc2lvbj0tMSx0LnByZXZBY3RpdmVMaW5rPXQuZGVwLmFjdGl2ZUxpbmssdC5kZXAuYWN0aXZlTGluaz10fWZ1bmN0aW9uIHFlKGUpe2xldCB0LG49ZS5kZXBzVGFpbCxyPW47Zm9yKDtyOyl7bGV0IGU9ci5wcmV2RGVwO3IudmVyc2lvbj09PS0xPyhyPT09biYmKG49ZSksWGUociksWmUocikpOnQ9cixyLmRlcC5hY3RpdmVMaW5rPXIucHJldkFjdGl2ZUxpbmssci5wcmV2QWN0aXZlTGluaz12b2lkIDAscj1lfWUuZGVwcz10LGUuZGVwc1RhaWw9bn1mdW5jdGlvbiBKZShlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApaWYodC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbnx8dC5kZXAuY29tcHV0ZWQmJihZZSh0LmRlcC5jb21wdXRlZCl8fHQuZGVwLnZlcnNpb24hPT10LnZlcnNpb24pKXJldHVybiEwO3JldHVybiEhZS5fZGlydHl9ZnVuY3Rpb24gWWUoZSl7aWYoZS5mbGFncyY0JiYhKGUuZmxhZ3MmMTYpfHwoZS5mbGFncyY9LTE3LGUuZ2xvYmFsVmVyc2lvbj09PWF0KXx8KGUuZ2xvYmFsVmVyc2lvbj1hdCwhZS5pc1NTUiYmZS5mbGFncyYxMjgmJighZS5kZXBzJiYhZS5fZGlydHl8fCFKZShlKSkpKXJldHVybjtlLmZsYWdzfD0yO2xldCB0PWUuZGVwLG49TGUscj1ldDtMZT1lLGV0PSEwO3RyeXtLZShlKTtsZXQgbj1lLmZuKGUuX3ZhbHVlKTsodC52ZXJzaW9uPT09MHx8RChuLGUuX3ZhbHVlKSkmJihlLmZsYWdzfD0xMjgsZS5fdmFsdWU9bix0LnZlcnNpb24rKyl9Y2F0Y2goZSl7dGhyb3cgdC52ZXJzaW9uKyssZX1maW5hbGx5e0xlPW4sZXQ9cixxZShlKSxlLmZsYWdzJj0tM319ZnVuY3Rpb24gWGUoZSx0PSExKXtsZXR7ZGVwOm4scHJldlN1YjpyLG5leHRTdWI6aX09ZTtpZihyJiYoci5uZXh0U3ViPWksZS5wcmV2U3ViPXZvaWQgMCksaSYmKGkucHJldlN1Yj1yLGUubmV4dFN1Yj12b2lkIDApLG4uc3Vicz09PWUmJihuLnN1YnM9ciwhciYmbi5jb21wdXRlZCkpe24uY29tcHV0ZWQuZmxhZ3MmPS01O2ZvcihsZXQgZT1uLmNvbXB1dGVkLmRlcHM7ZTtlPWUubmV4dERlcClYZShlLCEwKX0hdCYmIS0tbi5zYyYmbi5tYXAmJm4ubWFwLmRlbGV0ZShuLmtleSl9ZnVuY3Rpb24gWmUoZSl7bGV0e3ByZXZEZXA6dCxuZXh0RGVwOm59PWU7dCYmKHQubmV4dERlcD1uLGUucHJldkRlcD12b2lkIDApLG4mJihuLnByZXZEZXA9dCxlLm5leHREZXA9dm9pZCAwKX1mdW5jdGlvbiBRZShlLHQpe2UuZWZmZWN0IGluc3RhbmNlb2YgemUmJihlPWUuZWZmZWN0LmZuKTtsZXQgbj1uZXcgemUoZSk7dCYmbChuLHQpO3RyeXtuLnJ1bigpfWNhdGNoKGUpe3Rocm93IG4uc3RvcCgpLGV9bGV0IHI9bi5ydW4uYmluZChuKTtyZXR1cm4gci5lZmZlY3Q9bixyfWZ1bmN0aW9uICRlKGUpe2UuZWZmZWN0LnN0b3AoKX12YXIgZXQ9ITAsdHQ9W107ZnVuY3Rpb24gbnQoKXt0dC5wdXNoKGV0KSxldD0hMX1mdW5jdGlvbiBydCgpe2xldCBlPXR0LnBvcCgpO2V0PWU9PT12b2lkIDB8fGV9ZnVuY3Rpb24gaXQoZSl7bGV0e2NsZWFudXA6dH09ZTtpZihlLmNsZWFudXA9dm9pZCAwLHQpe2xldCBlPUxlO0xlPXZvaWQgMDt0cnl7dCgpfWZpbmFsbHl7TGU9ZX19fXZhciBhdD0wLG90PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdWI9ZSx0aGlzLmRlcD10LHRoaXMudmVyc2lvbj10LnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkRlcD10aGlzLm5leHRTdWI9dGhpcy5wcmV2U3ViPXRoaXMucHJldkFjdGl2ZUxpbms9dm9pZCAwfX0sc3Q9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlZD1lLHRoaXMudmVyc2lvbj0wLHRoaXMuYWN0aXZlTGluaz12b2lkIDAsdGhpcy5zdWJzPXZvaWQgMCx0aGlzLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9MCx0aGlzLl9fdl9za2lwPSEwfXRyYWNrKGUpe2lmKCFMZXx8IWV0fHxMZT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCB0PXRoaXMuYWN0aXZlTGluaztpZih0PT09dm9pZCAwfHx0LnN1YiE9PUxlKXQ9dGhpcy5hY3RpdmVMaW5rPW5ldyBvdChMZSx0aGlzKSxMZS5kZXBzPyh0LnByZXZEZXA9TGUuZGVwc1RhaWwsTGUuZGVwc1RhaWwubmV4dERlcD10LExlLmRlcHNUYWlsPXQpOkxlLmRlcHM9TGUuZGVwc1RhaWw9dCxjdCh0KTtlbHNlIGlmKHQudmVyc2lvbj09PS0xJiYodC52ZXJzaW9uPXRoaXMudmVyc2lvbix0Lm5leHREZXApKXtsZXQgZT10Lm5leHREZXA7ZS5wcmV2RGVwPXQucHJldkRlcCx0LnByZXZEZXAmJih0LnByZXZEZXAubmV4dERlcD1lKSx0LnByZXZEZXA9TGUuZGVwc1RhaWwsdC5uZXh0RGVwPXZvaWQgMCxMZS5kZXBzVGFpbC5uZXh0RGVwPXQsTGUuZGVwc1RhaWw9dCxMZS5kZXBzPT09dCYmKExlLmRlcHM9ZSl9cmV0dXJuIHR9dHJpZ2dlcihlKXt0aGlzLnZlcnNpb24rKyxhdCsrLHRoaXMubm90aWZ5KGUpfW5vdGlmeShlKXtXZSgpO3RyeXtmb3IobGV0IGU9dGhpcy5zdWJzO2U7ZT1lLnByZXZTdWIpZS5zdWIubm90aWZ5KCkmJmUuc3ViLmRlcC5ub3RpZnkoKX1maW5hbGx5e0dlKCl9fX07ZnVuY3Rpb24gY3QoZSl7aWYoZS5kZXAuc2MrKyxlLnN1Yi5mbGFncyY0KXtsZXQgdD1lLmRlcC5jb21wdXRlZDtpZih0JiYhZS5kZXAuc3Vicyl7dC5mbGFnc3w9MjA7Zm9yKGxldCBlPXQuZGVwcztlO2U9ZS5uZXh0RGVwKWN0KGUpfWxldCBuPWUuZGVwLnN1YnM7biE9PWUmJihlLnByZXZTdWI9bixuJiYobi5uZXh0U3ViPWUpKSxlLmRlcC5zdWJzPWV9fXZhciBsdD1uZXcgV2Vha01hcCx1dD1TeW1ib2woYGApLGR0PVN5bWJvbChgYCksZnQ9U3ltYm9sKGBgKTtmdW5jdGlvbiBwdChlLHQsbil7aWYoZXQmJkxlKXtsZXQgdD1sdC5nZXQoZSk7dHx8bHQuc2V0KGUsdD1uZXcgTWFwKTtsZXQgcj10LmdldChuKTtyfHwodC5zZXQobixyPW5ldyBzdCksci5tYXA9dCxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0aW9uIG10KGUsdCxuLHIsaSxhKXtsZXQgbz1sdC5nZXQoZSk7aWYoIW8pe2F0Kys7cmV0dXJufWxldCBzPWU9PntlJiZlLnRyaWdnZXIoKX07aWYoV2UoKSx0PT09YGNsZWFyYClvLmZvckVhY2gocyk7ZWxzZXtsZXQgaT1wKGUpLGE9aSYmVChuKTtpZihpJiZuPT09YGxlbmd0aGApe2xldCBlPU51bWJlcihyKTtvLmZvckVhY2goKHQsbik9Pnsobj09PWBsZW5ndGhgfHxuPT09ZnR8fCFiKG4pJiZuPj1lKSYmcyh0KX0pfWVsc2Ugc3dpdGNoKChuIT09dm9pZCAwfHxvLmhhcyh2b2lkIDApKSYmcyhvLmdldChuKSksYSYmcyhvLmdldChmdCkpLHQpe2Nhc2VgYWRkYDppP2EmJnMoby5nZXQoYGxlbmd0aGApKToocyhvLmdldCh1dCkpLG0oZSkmJnMoby5nZXQoZHQpKSk7YnJlYWs7Y2FzZWBkZWxldGVgOml8fChzKG8uZ2V0KHV0KSksbShlKSYmcyhvLmdldChkdCkpKTticmVhaztjYXNlYHNldGA6bShlKSYmcyhvLmdldCh1dCkpfX1HZSgpfWZ1bmN0aW9uIGh0KGUsdCl7bGV0IG49bHQuZ2V0KGUpO3JldHVybiBuJiZuLmdldCh0KX1mdW5jdGlvbiBndChlKXtsZXQgdD1BKGUpO3JldHVybiB0PT09ZT90OihwdCh0LGBpdGVyYXRlYCxmdCksYW4oZSk/dDp0Lm1hcChjbikpfWZ1bmN0aW9uIF90KGUpe3JldHVybiBwdChlPUEoZSksYGl0ZXJhdGVgLGZ0KSxlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIHJuKGUpP2xuKG5uKGUpP2NuKHQpOnQpOmNuKHQpfXZhciB5dD17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gYnQodGhpcyxTeW1ib2wuaXRlcmF0b3IsZT0+dnQodGhpcyxlKSl9LGNvbmNhdCguLi5lKXtyZXR1cm4gZ3QodGhpcykuY29uY2F0KC4uLmUubWFwKGU9PnAoZSk/Z3QoZSk6ZSkpfSxlbnRyaWVzKCl7cmV0dXJuIGJ0KHRoaXMsYGVudHJpZXNgLGU9PihlWzFdPXZ0KHRoaXMsZVsxXSksZSkpfSxldmVyeShlLHQpe3JldHVybiBTdCh0aGlzLGBldmVyeWAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmaWx0ZXIoZSx0KXtyZXR1cm4gU3QodGhpcyxgZmlsdGVyYCxlLHQsZT0+ZS5tYXAoZT0+dnQodGhpcyxlKSksYXJndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiBTdCh0aGlzLGBmaW5kYCxlLHQsZT0+dnQodGhpcyxlKSxhcmd1bWVudHMpfSxmaW5kSW5kZXgoZSx0KXtyZXR1cm4gU3QodGhpcyxgZmluZEluZGV4YCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZpbmRMYXN0KGUsdCl7cmV0dXJuIFN0KHRoaXMsYGZpbmRMYXN0YCxlLHQsZT0+dnQodGhpcyxlKSxhcmd1bWVudHMpfSxmaW5kTGFzdEluZGV4KGUsdCl7cmV0dXJuIFN0KHRoaXMsYGZpbmRMYXN0SW5kZXhgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZm9yRWFjaChlLHQpe3JldHVybiBTdCh0aGlzLGBmb3JFYWNoYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB3dCh0aGlzLGBpbmNsdWRlc2AsZSl9LGluZGV4T2YoLi4uZSl7cmV0dXJuIHd0KHRoaXMsYGluZGV4T2ZgLGUpfSxqb2luKGUpe3JldHVybiBndCh0aGlzKS5qb2luKGUpfSxsYXN0SW5kZXhPZiguLi5lKXtyZXR1cm4gd3QodGhpcyxgbGFzdEluZGV4T2ZgLGUpfSxtYXAoZSx0KXtyZXR1cm4gU3QodGhpcyxgbWFwYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LHBvcCgpe3JldHVybiBUdCh0aGlzLGBwb3BgKX0scHVzaCguLi5lKXtyZXR1cm4gVHQodGhpcyxgcHVzaGAsZSl9LHJlZHVjZShlLC4uLnQpe3JldHVybiBDdCh0aGlzLGByZWR1Y2VgLGUsdCl9LHJlZHVjZVJpZ2h0KGUsLi4udCl7cmV0dXJuIEN0KHRoaXMsYHJlZHVjZVJpZ2h0YCxlLHQpfSxzaGlmdCgpe3JldHVybiBUdCh0aGlzLGBzaGlmdGApfSxzb21lKGUsdCl7cmV0dXJuIFN0KHRoaXMsYHNvbWVgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sc3BsaWNlKC4uLmUpe3JldHVybiBUdCh0aGlzLGBzcGxpY2VgLGUpfSx0b1JldmVyc2VkKCl7cmV0dXJuIGd0KHRoaXMpLnRvUmV2ZXJzZWQoKX0sdG9Tb3J0ZWQoZSl7cmV0dXJuIGd0KHRoaXMpLnRvU29ydGVkKGUpfSx0b1NwbGljZWQoLi4uZSl7cmV0dXJuIGd0KHRoaXMpLnRvU3BsaWNlZCguLi5lKX0sdW5zaGlmdCguLi5lKXtyZXR1cm4gVHQodGhpcyxgdW5zaGlmdGAsZSl9LHZhbHVlcygpe3JldHVybiBidCh0aGlzLGB2YWx1ZXNgLGU9PnZ0KHRoaXMsZSkpfX07ZnVuY3Rpb24gYnQoZSx0LG4pe2xldCByPV90KGUpLGk9clt0XSgpO3JldHVybiByIT09ZSYmIWFuKGUpJiYoaS5fbmV4dD1pLm5leHQsaS5uZXh0PSgpPT57bGV0IGU9aS5fbmV4dCgpO3JldHVybiBlLmRvbmV8fChlLnZhbHVlPW4oZS52YWx1ZSkpLGV9KSxpfXZhciB4dD1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gU3QoZSx0LG4scixpLGEpe2xldCBvPV90KGUpLHM9byE9PWUmJiFhbihlKSxjPW9bdF07aWYoYyE9PXh0W3RdKXtsZXQgdD1jLmFwcGx5KGUsYSk7cmV0dXJuIHM/Y24odCk6dH1sZXQgbD1uO28hPT1lJiYocz9sPWZ1bmN0aW9uKHQscil7cmV0dXJuIG4uY2FsbCh0aGlzLHZ0KGUsdCkscixlKX06bi5sZW5ndGg+MiYmKGw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxyLGUpfSkpO2xldCB1PWMuY2FsbChvLGwscik7cmV0dXJuIHMmJmk/aSh1KTp1fWZ1bmN0aW9uIEN0KGUsdCxuLHIpe2xldCBpPV90KGUpLGE9aSE9PWUmJiFhbihlKSxvPW4scz0hMTtpIT09ZSYmKGE/KHM9ci5sZW5ndGg9PT0wLG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBzJiYocz0hMSx0PXZ0KGUsdCkpLG4uY2FsbCh0aGlzLHQsdnQoZSxyKSxpLGUpfSk6bi5sZW5ndGg+MyYmKG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBuLmNhbGwodGhpcyx0LHIsaSxlKX0pKTtsZXQgYz1pW3RdKG8sLi4ucik7cmV0dXJuIHM/dnQoZSxjKTpjfWZ1bmN0aW9uIHd0KGUsdCxuKXtsZXQgcj1BKGUpO3B0KHIsYGl0ZXJhdGVgLGZ0KTtsZXQgaT1yW3RdKC4uLm4pO3JldHVybihpPT09LTF8fGk9PT0hMSkmJm9uKG5bMF0pPyhuWzBdPUEoblswXSksclt0XSguLi5uKSk6aX1mdW5jdGlvbiBUdChlLHQsbj1bXSl7bnQoKSxXZSgpO2xldCByPUEoZSlbdF0uYXBwbHkoZSxuKTtyZXR1cm4gR2UoKSxydCgpLHJ9dmFyIEV0PW4oYF9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZWApLER0PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoZT0+ZSE9PWBhcmd1bWVudHNgJiZlIT09YGNhbGxlcmApLm1hcChlPT5TeW1ib2xbZV0pLmZpbHRlcihiKSk7ZnVuY3Rpb24gT3QoZSl7YihlKXx8KGU9U3RyaW5nKGUpKTtsZXQgdD1BKHRoaXMpO3JldHVybiBwdCh0LGBoYXNgLGUpLHQuaGFzT3duUHJvcGVydHkoZSl9dmFyIGt0PWNsYXNze2NvbnN0cnVjdG9yKGU9ITEsdD0hMSl7dGhpcy5faXNSZWFkb25seT1lLHRoaXMuX2lzU2hhbGxvdz10fWdldChlLHQsbil7aWYodD09PWBfX3Zfc2tpcGApcmV0dXJuIGUuX192X3NraXA7bGV0IHI9dGhpcy5faXNSZWFkb25seSxpPXRoaXMuX2lzU2hhbGxvdztpZih0PT09YF9fdl9pc1JlYWN0aXZlYClyZXR1cm4hcjtpZih0PT09YF9fdl9pc1JlYWRvbmx5YClyZXR1cm4gcjtpZih0PT09YF9fdl9pc1NoYWxsb3dgKXJldHVybiBpO2lmKHQ9PT1gX192X3Jhd2ApcmV0dXJuIG49PT0ocj9pP1l0Okp0Omk/cXQ6S3QpLmdldChlKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pP2U6dm9pZCAwO2xldCBhPXAoZSk7aWYoIXIpe2xldCBlO2lmKGEmJihlPXl0W3RdKSlyZXR1cm4gZTtpZih0PT09YGhhc093blByb3BlcnR5YClyZXR1cm4gT3R9bGV0IG89UmVmbGVjdC5nZXQoZSx0LGooZSk/ZTpuKTtpZigoYih0KT9EdC5oYXModCk6RXQodCkpfHwocnx8cHQoZSxgZ2V0YCx0KSxpKSlyZXR1cm4gbztpZihqKG8pKXtsZXQgZT1hJiZUKHQpP286by52YWx1ZTtyZXR1cm4gciYmeChlKT8kdChlKTplfXJldHVybiB4KG8pP3I/JHQobyk6WnQobyk6b319LEF0PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoITEsZSl9c2V0KGUsdCxuLHIpe2xldCBpPWVbdF0sYT1wKGUpJiZUKHQpO2lmKCF0aGlzLl9pc1NoYWxsb3cpe2xldCBlPXJuKGkpO2lmKCFhbihuKSYmIXJuKG4pJiYoaT1BKGkpLG49QShuKSksIWEmJmooaSkmJiFqKG4pKXJldHVybiBlfHwoaS52YWx1ZT1uKSwhMH1sZXQgbz1hP051bWJlcih0KTxlLmxlbmd0aDpmKGUsdCkscz1SZWZsZWN0LnNldChlLHQsbixqKGUpP2U6cik7cmV0dXJuIGU9PT1BKHIpJiZzJiYobz9EKG4saSkmJm10KGUsYHNldGAsdCxuLGkpOm10KGUsYGFkZGAsdCxuKSksc31kZWxldGVQcm9wZXJ0eShlLHQpe2xldCBuPWYoZSx0KSxyPWVbdF0saT1SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGUsdCk7cmV0dXJuIGkmJm4mJm10KGUsYGRlbGV0ZWAsdCx2b2lkIDAsciksaX1oYXMoZSx0KXtsZXQgbj1SZWZsZWN0LmhhcyhlLHQpO3JldHVybighYih0KXx8IUR0Lmhhcyh0KSkmJnB0KGUsYGhhc2AsdCksbn1vd25LZXlzKGUpe3JldHVybiBwdChlLGBpdGVyYXRlYCxwKGUpP2BsZW5ndGhgOnV0KSxSZWZsZWN0Lm93bktleXMoZSl9fSxqdD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKGU9ITEpe3N1cGVyKCEwLGUpfXNldChlLHQpe3JldHVybiEwfWRlbGV0ZVByb3BlcnR5KGUsdCl7cmV0dXJuITB9fSxNdD1uZXcgQXQsTnQ9bmV3IGp0LFB0PW5ldyBBdCghMCksRnQ9bmV3IGp0KCEwKSxJdD1lPT5lLEx0PWU9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZnVuY3Rpb24gUnQoZSx0LG4pe3JldHVybiBmdW5jdGlvbiguLi5yKXtsZXQgaT10aGlzLl9fdl9yYXcsYT1BKGkpLG89bShhKSxzPWU9PT1gZW50cmllc2B8fGU9PT1TeW1ib2wuaXRlcmF0b3ImJm8sYz1lPT09YGtleXNgJiZvLHU9aVtlXSguLi5yKSxkPW4/SXQ6dD9sbjpjbjtyZXR1cm4hdCYmcHQoYSxgaXRlcmF0ZWAsYz9kdDp1dCksbChPYmplY3QuY3JlYXRlKHUpLHtuZXh0KCl7bGV0e3ZhbHVlOmUsZG9uZTp0fT11Lm5leHQoKTtyZXR1cm4gdD97dmFsdWU6ZSxkb25lOnR9Ont2YWx1ZTpzP1tkKGVbMF0pLGQoZVsxXSldOmQoZSksZG9uZTp0fX19KX19ZnVuY3Rpb24genQoZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnQpe3JldHVybiBlPT09YGRlbGV0ZWA/ITE6ZT09PWBjbGVhcmA/dm9pZCAwOnRoaXN9fWZ1bmN0aW9uIEJ0KGUsdCl7bGV0IG49e2dldChuKXtsZXQgcj10aGlzLl9fdl9yYXcsaT1BKHIpLGE9QShuKTtlfHwoRChuLGEpJiZwdChpLGBnZXRgLG4pLHB0KGksYGdldGAsYSkpO2xldHtoYXM6b309THQoaSkscz10P0l0OmU/bG46Y247aWYoby5jYWxsKGksbikpcmV0dXJuIHMoci5nZXQobikpO2lmKG8uY2FsbChpLGEpKXJldHVybiBzKHIuZ2V0KGEpKTtyIT09aSYmci5nZXQobil9LGdldCBzaXplKCl7bGV0IHQ9dGhpcy5fX3ZfcmF3O3JldHVybiFlJiZwdChBKHQpLGBpdGVyYXRlYCx1dCksdC5zaXplfSxoYXModCl7bGV0IG49dGhpcy5fX3ZfcmF3LHI9QShuKSxpPUEodCk7cmV0dXJuIGV8fChEKHQsaSkmJnB0KHIsYGhhc2AsdCkscHQocixgaGFzYCxpKSksdD09PWk/bi5oYXModCk6bi5oYXModCl8fG4uaGFzKGkpfSxmb3JFYWNoKG4scil7bGV0IGk9dGhpcyxhPWkuX192X3JhdyxvPUEoYSkscz10P0l0OmU/bG46Y247cmV0dXJuIWUmJnB0KG8sYGl0ZXJhdGVgLHV0KSxhLmZvckVhY2goKGUsdCk9Pm4uY2FsbChyLHMoZSkscyh0KSxpKSl9fTtyZXR1cm4gbChuLGU/e2FkZDp6dChgYWRkYCksc2V0Onp0KGBzZXRgKSxkZWxldGU6enQoYGRlbGV0ZWApLGNsZWFyOnp0KGBjbGVhcmApfTp7YWRkKGUpe2xldCBuPUEodGhpcykscj1MdChuKSxpPUEoZSksYT0hdCYmIWFuKGUpJiYhcm4oZSk/aTplO3JldHVybiByLmhhcy5jYWxsKG4sYSl8fEQoZSxhKSYmci5oYXMuY2FsbChuLGUpfHxEKGksYSkmJnIuaGFzLmNhbGwobixpKXx8KG4uYWRkKGEpLG10KG4sYGFkZGAsYSxhKSksdGhpc30sc2V0KGUsbil7IXQmJiFhbihuKSYmIXJuKG4pJiYobj1BKG4pKTtsZXQgcj1BKHRoaXMpLHtoYXM6aSxnZXQ6YX09THQociksbz1pLmNhbGwocixlKTtvfHw9KGU9QShlKSxpLmNhbGwocixlKSk7bGV0IHM9YS5jYWxsKHIsZSk7cmV0dXJuIHIuc2V0KGUsbiksbz9EKG4scykmJm10KHIsYHNldGAsZSxuLHMpOm10KHIsYGFkZGAsZSxuKSx0aGlzfSxkZWxldGUoZSl7bGV0IHQ9QSh0aGlzKSx7aGFzOm4sZ2V0OnJ9PUx0KHQpLGk9bi5jYWxsKHQsZSk7aXx8PShlPUEoZSksbi5jYWxsKHQsZSkpO2xldCBhPXI/ci5jYWxsKHQsZSk6dm9pZCAwLG89dC5kZWxldGUoZSk7cmV0dXJuIGkmJm10KHQsYGRlbGV0ZWAsZSx2b2lkIDAsYSksb30sY2xlYXIoKXtsZXQgZT1BKHRoaXMpLHQ9ZS5zaXplIT09MCxuPWUuY2xlYXIoKTtyZXR1cm4gdCYmbXQoZSxgY2xlYXJgLHZvaWQgMCx2b2lkIDAsdm9pZCAwKSxufX0pLFtga2V5c2AsYHZhbHVlc2AsYGVudHJpZXNgLFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaChyPT57bltyXT1SdChyLGUsdCl9KSxufWZ1bmN0aW9uIFZ0KGUsdCl7bGV0IG49QnQoZSx0KTtyZXR1cm4odCxyLGkpPT5yPT09YF9fdl9pc1JlYWN0aXZlYD8hZTpyPT09YF9fdl9pc1JlYWRvbmx5YD9lOnI9PT1gX192X3Jhd2A/dDpSZWZsZWN0LmdldChmKG4scikmJnIgaW4gdD9uOnQscixpKX12YXIgSHQ9e2dldDpWdCghMSwhMSl9LFV0PXtnZXQ6VnQoITEsITApfSxXdD17Z2V0OlZ0KCEwLCExKX0sR3Q9e2dldDpWdCghMCwhMCl9LEt0PW5ldyBXZWFrTWFwLHF0PW5ldyBXZWFrTWFwLEp0PW5ldyBXZWFrTWFwLFl0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFh0KGUpe3N3aXRjaChlKXtjYXNlYE9iamVjdGA6Y2FzZWBBcnJheWA6cmV0dXJuIDE7Y2FzZWBNYXBgOmNhc2VgU2V0YDpjYXNlYFdlYWtNYXBgOmNhc2VgV2Vha1NldGA6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gWnQoZSl7cmV0dXJuIHJuKGUpP2U6dG4oZSwhMSxNdCxIdCxLdCl9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIHRuKGUsITEsUHQsVXQscXQpfWZ1bmN0aW9uICR0KGUpe3JldHVybiB0bihlLCEwLE50LFd0LEp0KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gdG4oZSwhMCxGdCxHdCxZdCl9ZnVuY3Rpb24gdG4oZSx0LG4scixpKXtpZigheChlKXx8ZS5fX3ZfcmF3JiYhKHQmJmUuX192X2lzUmVhY3RpdmUpfHxlLl9fdl9za2lwfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSlyZXR1cm4gZTtsZXQgYT1pLmdldChlKTtpZihhKXJldHVybiBhO2xldCBvPVh0KGVlKGUpKTtpZihvPT09MClyZXR1cm4gZTtsZXQgcz1uZXcgUHJveHkoZSxvPT09Mj9yOm4pO3JldHVybiBpLnNldChlLHMpLHN9ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIHJuKGUpP25uKGUuX192X3Jhdyk6ISEoZSYmZS5fX3ZfaXNSZWFjdGl2ZSl9ZnVuY3Rpb24gcm4oZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNSZWFkb25seSl9ZnVuY3Rpb24gYW4oZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNTaGFsbG93KX1mdW5jdGlvbiBvbihlKXtyZXR1cm4gZT8hIWUuX192X3JhdzohMX1mdW5jdGlvbiBBKGUpe2xldCB0PWUmJmUuX192X3JhdztyZXR1cm4gdD9BKHQpOmV9ZnVuY3Rpb24gc24oZSl7cmV0dXJuIWYoZSxgX192X3NraXBgKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmdWUoZSxgX192X3NraXBgLCEwKSxlfXZhciBjbj1lPT54KGUpP1p0KGUpOmUsbG49ZT0+eChlKT8kdChlKTplO2Z1bmN0aW9uIGooZSl7cmV0dXJuIGU/ZS5fX3ZfaXNSZWY9PT0hMDohMX1mdW5jdGlvbiBNKGUpe3JldHVybiBkbihlLCExKX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZG4oZSwhMCl9ZnVuY3Rpb24gZG4oZSx0KXtyZXR1cm4gaihlKT9lOm5ldyBmbihlLHQpfXZhciBmbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGVwPW5ldyBzdCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1NoYWxsb3c9ITEsdGhpcy5fcmF3VmFsdWU9dD9lOkEoZSksdGhpcy5fdmFsdWU9dD9lOmNuKGUpLHRoaXMuX192X2lzU2hhbGxvdz10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmRlcC50cmFjaygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXtsZXQgdD10aGlzLl9yYXdWYWx1ZSxuPXRoaXMuX192X2lzU2hhbGxvd3x8YW4oZSl8fHJuKGUpO2U9bj9lOkEoZSksRChlLHQpJiYodGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl92YWx1ZT1uP2U6Y24oZSksdGhpcy5kZXAudHJpZ2dlcigpKX19O2Z1bmN0aW9uIHBuKGUpe2UuZGVwJiZlLmRlcC50cmlnZ2VyKCl9ZnVuY3Rpb24gTihlKXtyZXR1cm4gaihlKT9lLnZhbHVlOmV9ZnVuY3Rpb24gbW4oZSl7cmV0dXJuIHYoZSk/ZSgpOk4oZSl9dmFyIGhuPXtnZXQ6KGUsdCxuKT0+dD09PWBfX3ZfcmF3YD9lOk4oUmVmbGVjdC5nZXQoZSx0LG4pKSxzZXQ6KGUsdCxuLHIpPT57bGV0IGk9ZVt0XTtyZXR1cm4gaihpKSYmIWoobik/KGkudmFsdWU9biwhMCk6UmVmbGVjdC5zZXQoZSx0LG4scil9fTtmdW5jdGlvbiBnbihlKXtyZXR1cm4gbm4oZSk/ZTpuZXcgUHJveHkoZSxobil9dmFyIF9uPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMDtsZXQgdD10aGlzLmRlcD1uZXcgc3Qse2dldDpuLHNldDpyfT1lKHQudHJhY2suYmluZCh0KSx0LnRyaWdnZXIuYmluZCh0KSk7dGhpcy5fZ2V0PW4sdGhpcy5fc2V0PXJ9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlPXRoaXMuX2dldCgpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXQoZSl9fTtmdW5jdGlvbiB2bihlKXtyZXR1cm4gbmV3IF9uKGUpfWZ1bmN0aW9uIHluKGUpe2xldCB0PXAoZSk/QXJyYXkoZS5sZW5ndGgpOnt9O2ZvcihsZXQgbiBpbiBlKXRbbl09Q24oZSxuKTtyZXR1cm4gdH12YXIgYm49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX29iamVjdD1lLHRoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLl9rZXk9Yih0KT90OlN0cmluZyh0KSx0aGlzLl9yYXc9QShlKTtsZXQgcj0hMCxpPWU7aWYoIXAoZSl8fGIodGhpcy5fa2V5KXx8IVQodGhpcy5fa2V5KSlkbyByPSFvbihpKXx8YW4oaSk7d2hpbGUociYmKGk9aS5fX3ZfcmF3KSk7dGhpcy5fc2hhbGxvdz1yfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX29iamVjdFt0aGlzLl9rZXldO3JldHVybiB0aGlzLl9zaGFsbG93JiYoZT1OKGUpKSx0aGlzLl92YWx1ZT1lPT09dm9pZCAwP3RoaXMuX2RlZmF1bHRWYWx1ZTplfXNldCB2YWx1ZShlKXtpZih0aGlzLl9zaGFsbG93JiZqKHRoaXMuX3Jhd1t0aGlzLl9rZXldKSl7bGV0IHQ9dGhpcy5fb2JqZWN0W3RoaXMuX2tleV07aWYoaih0KSl7dC52YWx1ZT1lO3JldHVybn19dGhpcy5fb2JqZWN0W3RoaXMuX2tleV09ZX1nZXQgZGVwKCl7cmV0dXJuIGh0KHRoaXMuX3Jhdyx0aGlzLl9rZXkpfX0seG49Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fZ2V0dGVyPWUsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNSZWFkb25seT0hMCx0aGlzLl92YWx1ZT12b2lkIDB9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlPXRoaXMuX2dldHRlcigpfX07ZnVuY3Rpb24gU24oZSx0LG4pe3JldHVybiBqKGUpP2U6dihlKT9uZXcgeG4oZSk6eChlKSYmYXJndW1lbnRzLmxlbmd0aD4xP0NuKGUsdCxuKTpNKGUpfWZ1bmN0aW9uIENuKGUsdCxuKXtyZXR1cm4gbmV3IGJuKGUsdCxuKX12YXIgd249Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZm49ZSx0aGlzLnNldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLmRlcD1uZXcgc3QodGhpcyksdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5kZXBzPXZvaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTE2LHRoaXMuZ2xvYmFsVmVyc2lvbj1hdC0xLHRoaXMubmV4dD12b2lkIDAsdGhpcy5lZmZlY3Q9dGhpcyx0aGlzLl9fdl9pc1JlYWRvbmx5PSF0LHRoaXMuaXNTU1I9bn1ub3RpZnkoKXtpZih0aGlzLmZsYWdzfD0xNiwhKHRoaXMuZmxhZ3MmOCkmJkxlIT09dGhpcylyZXR1cm4gVWUodGhpcywhMCksITB9Z2V0IHZhbHVlKCl7bGV0IGU9dGhpcy5kZXAudHJhY2soKTtyZXR1cm4gWWUodGhpcyksZSYmKGUudmVyc2lvbj10aGlzLmRlcC52ZXJzaW9uKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5zZXR0ZXImJnRoaXMuc2V0dGVyKGUpfX07ZnVuY3Rpb24gVG4oZSx0LG49ITEpe2xldCByLGk7cmV0dXJuIHYoZSk/cj1lOihyPWUuZ2V0LGk9ZS5zZXQpLG5ldyB3bihyLGksbil9dmFyIEVuPXtHRVQ6YGdldGAsSEFTOmBoYXNgLElURVJBVEU6YGl0ZXJhdGVgfSxEbj17U0VUOmBzZXRgLEFERDpgYWRkYCxERUxFVEU6YGRlbGV0ZWAsQ0xFQVI6YGNsZWFyYH0sT249e30sa249bmV3IFdlYWtNYXAsQW49dm9pZCAwO2Z1bmN0aW9uIGpuKCl7cmV0dXJuIEFufWZ1bmN0aW9uIE1uKGUsdD0hMSxuPUFuKXtpZihuKXtsZXQgdD1rbi5nZXQobik7dHx8a24uc2V0KG4sdD1bXSksdC5wdXNoKGUpfX1mdW5jdGlvbiBObihlLHQsbj1yKXtsZXR7aW1tZWRpYXRlOmksZGVlcDpvLG9uY2U6cyxzY2hlZHVsZXI6YyxhdWdtZW50Sm9iOmwsY2FsbDpkfT1uLGY9ZT0+bz9lOmFuKGUpfHxvPT09ITF8fG89PT0wP1BuKGUsMSk6UG4oZSksbSxoLGcsXyx5PSExLGI9ITE7aWYoaihlKT8oaD0oKT0+ZS52YWx1ZSx5PWFuKGUpKTpubihlKT8oaD0oKT0+ZihlKSx5PSEwKTpwKGUpPyhiPSEwLHk9ZS5zb21lKGU9Pm5uKGUpfHxhbihlKSksaD0oKT0+ZS5tYXAoZT0+e2lmKGooZSkpcmV0dXJuIGUudmFsdWU7aWYobm4oZSkpcmV0dXJuIGYoZSk7aWYodihlKSlyZXR1cm4gZD9kKGUsMik6ZSgpfSkpOmg9dihlKT90P2Q/KCk9PmQoZSwyKTplOigpPT57aWYoZyl7bnQoKTt0cnl7ZygpfWZpbmFsbHl7cnQoKX19bGV0IHQ9QW47QW49bTt0cnl7cmV0dXJuIGQ/ZChlLDMsW19dKTplKF8pfWZpbmFsbHl7QW49dH19OmEsdCYmbyl7bGV0IGU9aCx0PW89PT0hMD8xLzA6bztoPSgpPT5QbihlKCksdCl9bGV0IHg9RmUoKSxTPSgpPT57bS5zdG9wKCkseCYmeC5hY3RpdmUmJnUoeC5lZmZlY3RzLG0pfTtpZihzJiZ0KXtsZXQgZT10O3Q9KC4uLnQpPT57bGV0IG49ZSguLi50KTtyZXR1cm4gUygpLG59fWxldCBDPWI/QXJyYXkoZS5sZW5ndGgpLmZpbGwoT24pOk9uLHc9ZT0+e2lmKCEoIShtLmZsYWdzJjEpfHwhbS5kaXJ0eSYmIWUpKXtpZih0KXtsZXQgbj1tLnJ1bigpO2lmKGV8fG98fHl8fChiP24uc29tZSgoZSx0KT0+RChlLENbdF0pKTpEKG4sQykpKXtnJiZnKCk7bGV0IGU9QW47QW49bTt0cnl7bGV0IGU9W24sQz09PU9uP3ZvaWQgMDpiJiZDWzBdPT09T24/W106QyxfXTtDPW4sZD9kKHQsMyxlKTp0KC4uLmUpfWZpbmFsbHl7QW49ZX19fWVsc2UgbS5ydW4oKX19O3JldHVybiBsJiZsKHcpLG09bmV3IHplKGgpLG0uc2NoZWR1bGVyPWM/KCk9PmModywhMSk6dyxfPWU9Pk1uKGUsITEsbSksZz1tLm9uU3RvcD0oKT0+e2xldCBlPWtuLmdldChtKTtpZihlKXtpZihkKWQoZSw0KTtlbHNlIGZvcihsZXQgdCBvZiBlKXQoKTtrbi5kZWxldGUobSl9fSx0P2k/dyghMCk6Qz1tLnJ1bigpOmM/Yyh3LmJpbmQobnVsbCwhMCksITApOm0ucnVuKCksUy5wYXVzZT1tLnBhdXNlLmJpbmQobSksUy5yZXN1bWU9bS5yZXN1bWUuYmluZChtKSxTLnN0b3A9UyxTfWZ1bmN0aW9uIFBuKGUsdD0xLzAsbil7aWYodDw9MHx8IXgoZSl8fGUuX192X3NraXB8fChufHw9bmV3IE1hcCwobi5nZXQoZSl8fDApPj10KSlyZXR1cm4gZTtpZihuLnNldChlLHQpLHQtLSxqKGUpKVBuKGUudmFsdWUsdCxuKTtlbHNlIGlmKHAoZSkpZm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspUG4oZVtyXSx0LG4pO2Vsc2UgaWYoaChlKXx8bShlKSllLmZvckVhY2goZT0+e1BuKGUsdCxuKX0pO2Vsc2UgaWYodGUoZSkpe2ZvcihsZXQgciBpbiBlKVBuKGVbcl0sdCxuKTtmb3IobGV0IHIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSlPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmUG4oZVtyXSx0LG4pfXJldHVybiBlfXZhciBGbj1bXTtmdW5jdGlvbiBJbihlKXtGbi5wdXNoKGUpfWZ1bmN0aW9uIExuKCl7Rm4ucG9wKCl9ZnVuY3Rpb24gUm4oZSx0KXt9dmFyIHpuPXtTRVRVUF9GVU5DVElPTjowLDA6YFNFVFVQX0ZVTkNUSU9OYCxSRU5ERVJfRlVOQ1RJT046MSwxOmBSRU5ERVJfRlVOQ1RJT05gLE5BVElWRV9FVkVOVF9IQU5ETEVSOjUsNTpgTkFUSVZFX0VWRU5UX0hBTkRMRVJgLENPTVBPTkVOVF9FVkVOVF9IQU5ETEVSOjYsNjpgQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVJgLFZOT0RFX0hPT0s6Nyw3OmBWTk9ERV9IT09LYCxESVJFQ1RJVkVfSE9PSzo4LDg6YERJUkVDVElWRV9IT09LYCxUUkFOU0lUSU9OX0hPT0s6OSw5OmBUUkFOU0lUSU9OX0hPT0tgLEFQUF9FUlJPUl9IQU5ETEVSOjEwLDEwOmBBUFBfRVJST1JfSEFORExFUmAsQVBQX1dBUk5fSEFORExFUjoxMSwxMTpgQVBQX1dBUk5fSEFORExFUmAsRlVOQ1RJT05fUkVGOjEyLDEyOmBGVU5DVElPTl9SRUZgLEFTWU5DX0NPTVBPTkVOVF9MT0FERVI6MTMsMTM6YEFTWU5DX0NPTVBPTkVOVF9MT0FERVJgLFNDSEVEVUxFUjoxNCwxNDpgU0NIRURVTEVSYCxDT01QT05FTlRfVVBEQVRFOjE1LDE1OmBDT01QT05FTlRfVVBEQVRFYCxBUFBfVU5NT1VOVF9DTEVBTlVQOjE2LDE2OmBBUFBfVU5NT1VOVF9DTEVBTlVQYH0sQm49e3NwOmBzZXJ2ZXJQcmVmZXRjaCBob29rYCxiYzpgYmVmb3JlQ3JlYXRlIGhvb2tgLGM6YGNyZWF0ZWQgaG9va2AsYm06YGJlZm9yZU1vdW50IGhvb2tgLG06YG1vdW50ZWQgaG9va2AsYnU6YGJlZm9yZVVwZGF0ZSBob29rYCx1OmB1cGRhdGVkYCxidW06YGJlZm9yZVVubW91bnQgaG9va2AsdW06YHVubW91bnRlZCBob29rYCxhOmBhY3RpdmF0ZWQgaG9va2AsZGE6YGRlYWN0aXZhdGVkIGhvb2tgLGVjOmBlcnJvckNhcHR1cmVkIGhvb2tgLHJ0YzpgcmVuZGVyVHJhY2tlZCBob29rYCxydGc6YHJlbmRlclRyaWdnZXJlZCBob29rYCwwOmBzZXR1cCBmdW5jdGlvbmAsMTpgcmVuZGVyIGZ1bmN0aW9uYCwyOmB3YXRjaGVyIGdldHRlcmAsMzpgd2F0Y2hlciBjYWxsYmFja2AsNDpgd2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uYCw1OmBuYXRpdmUgZXZlbnQgaGFuZGxlcmAsNjpgY29tcG9uZW50IGV2ZW50IGhhbmRsZXJgLDc6YHZub2RlIGhvb2tgLDg6YGRpcmVjdGl2ZSBob29rYCw5OmB0cmFuc2l0aW9uIGhvb2tgLDEwOmBhcHAgZXJyb3JIYW5kbGVyYCwxMTpgYXBwIHdhcm5IYW5kbGVyYCwxMjpgcmVmIGZ1bmN0aW9uYCwxMzpgYXN5bmMgY29tcG9uZW50IGxvYWRlcmAsMTQ6YHNjaGVkdWxlciBmbHVzaGAsMTU6YGNvbXBvbmVudCB1cGRhdGVgLDE2OmBhcHAgdW5tb3VudCBjbGVhbnVwIGZ1bmN0aW9uYH07ZnVuY3Rpb24gVm4oZSx0LG4scil7dHJ5e3JldHVybiByP2UoLi4ucik6ZSgpfWNhdGNoKGUpe1VuKGUsdCxuKX19ZnVuY3Rpb24gSG4oZSx0LG4scil7aWYodihlKSl7bGV0IGk9Vm4oZSx0LG4scik7cmV0dXJuIGkmJlMoaSkmJmkuY2F0Y2goZT0+e1VuKGUsdCxuKX0pLGl9aWYocChlKSl7bGV0IGk9W107Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspaS5wdXNoKEhuKGVbYV0sdCxuLHIpKTtyZXR1cm4gaX19ZnVuY3Rpb24gVW4oZSx0LG4saT0hMCl7bGV0IGE9dD90LnZub2RlOm51bGwse2Vycm9ySGFuZGxlcjpvLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246c309dCYmdC5hcHBDb250ZXh0LmNvbmZpZ3x8cjtpZih0KXtsZXQgcj10LnBhcmVudCxpPXQucHJveHksYT1gaHR0cHM6Ly92dWVqcy5vcmcvZXJyb3ItcmVmZXJlbmNlLyNydW50aW1lLSR7bn1gO2Zvcig7cjspe2xldCB0PXIuZWM7aWYodCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXShlLGksYSk9PT0hMSlyZXR1cm59cj1yLnBhcmVudH1pZihvKXtudCgpLFZuKG8sbnVsbCwxMCxbZSxpLGFdKSxydCgpO3JldHVybn19V24oZSxuLGEsaSxzKX1mdW5jdGlvbiBXbihlLHQsbixyPSEwLGk9ITEpe2lmKGkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciBHbj1bXSxLbj0tMSxxbj1bXSxKbj1udWxsLFluPTAsWG49UHJvbWlzZS5yZXNvbHZlKCksWm49bnVsbDtmdW5jdGlvbiBRbihlKXtsZXQgdD1abnx8WG47cmV0dXJuIGU/dC50aGVuKHRoaXM/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gJG4oZSl7bGV0IHQ9S24rMSxuPUduLmxlbmd0aDtmb3IoO3Q8bjspe2xldCByPXQrbj4+PjEsaT1HbltyXSxhPWFyKGkpO2E8ZXx8YT09PWUmJmkuZmxhZ3MmMj90PXIrMTpuPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gZXIoZSl7aWYoIShlLmZsYWdzJjEpKXtsZXQgdD1hcihlKSxuPUduW0duLmxlbmd0aC0xXTshbnx8IShlLmZsYWdzJjIpJiZ0Pj1hcihuKT9Hbi5wdXNoKGUpOkduLnNwbGljZSgkbih0KSwwLGUpLGUuZmxhZ3N8PTEsdHIoKX19ZnVuY3Rpb24gdHIoKXtabnx8PVhuLnRoZW4ob3IpfWZ1bmN0aW9uIG5yKGUpe2lmKCFwKGUpKUpuJiZlLmlkPT09LTE/Sm4uc3BsaWNlKFluKzEsMCxlKTplLmZsYWdzJjF8fChxbi5wdXNoKGUpLGUuZmxhZ3N8PTEpO2Vsc2UgZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspcW4ucHVzaChlW3RdKTt0cigpfWZ1bmN0aW9uIHJyKGUsdCxuPUtuKzEpe2Zvcig7bjxHbi5sZW5ndGg7bisrKXtsZXQgdD1HbltuXTtpZih0JiZ0LmZsYWdzJjIpe2lmKGUmJnQuaWQhPT1lLnVpZCljb250aW51ZTtHbi5zcGxpY2UobiwxKSxuLS0sdC5mbGFncyY0JiYodC5mbGFncyY9LTIpLHQoKSx0LmZsYWdzJjR8fCh0LmZsYWdzJj0tMil9fX1mdW5jdGlvbiBpcihlKXtpZihxbi5sZW5ndGgpe2xldCBlPVsuLi5uZXcgU2V0KHFuKV0uc29ydCgoZSx0KT0+YXIoZSktYXIodCkpO2lmKHFuLmxlbmd0aD0wLEpuKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylKbi5wdXNoKGVbdF0pO3JldHVybn1mb3IoSm49ZSxZbj0wO1luPEpuLmxlbmd0aDtZbisrKXtsZXQgZT1KbltZbl07ZS5mbGFncyY0JiYoZS5mbGFncyY9LTIpLGUuZmxhZ3MmOHx8ZSgpLGUuZmxhZ3MmPS0yfUpuPW51bGwsWW49MH19dmFyIGFyPWU9PmUuaWQ9PW51bGw/ZS5mbGFncyYyPy0xOjEvMDplLmlkO2Z1bmN0aW9uIG9yKGUpe3RyeXtmb3IoS249MDtLbjxHbi5sZW5ndGg7S24rKyl7bGV0IGU9R25bS25dO2UmJiEoZS5mbGFncyY4KSYmKGUuZmxhZ3MmNCYmKGUuZmxhZ3MmPS0yKSxWbihlLGUuaSxlLmk/MTU6MTQpLGUuZmxhZ3MmNHx8KGUuZmxhZ3MmPS0yKSl9fWZpbmFsbHl7Zm9yKDtLbjxHbi5sZW5ndGg7S24rKyl7bGV0IGU9R25bS25dO2UmJihlLmZsYWdzJj0tMil9S249LTEsR24ubGVuZ3RoPTAsaXIoZSksWm49bnVsbCwoR24ubGVuZ3RofHxxbi5sZW5ndGgpJiZvcihlKX19dmFyIHNyLGNyPVtdO2Z1bmN0aW9uIGxyKGUsdCl7c3I9ZSxzcj8oc3IuZW5hYmxlZD0hMCxjci5mb3JFYWNoKCh7ZXZlbnQ6ZSxhcmdzOnR9KT0+c3IuZW1pdChlLC4uLnQpKSxjcj1bXSk6dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdy5IVE1MRWxlbWVudCYmISh3aW5kb3cubmF2aWdhdG9yPy51c2VyQWdlbnQpPy5pbmNsdWRlcyhganNkb21gKT8oKHQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz10Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdKS5wdXNoKGU9PntscihlLHQpfSksc2V0VGltZW91dCgoKT0+e3NyfHwodC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsY3I9W10pfSwzZTMpKTpjcj1bXX12YXIgdXI9bnVsbCxkcj1udWxsO2Z1bmN0aW9uIGZyKGUpe2xldCB0PXVyO3JldHVybiB1cj1lLGRyPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiBwcihlKXtkcj1lfWZ1bmN0aW9uIG1yKCl7ZHI9bnVsbH12YXIgaHI9ZT0+UDtmdW5jdGlvbiBQKGUsdD11cixuKXtpZighdHx8ZS5fbilyZXR1cm4gZTtsZXQgcj0oLi4ubik9PntyLl9kJiZtcygtMSk7bGV0IGk9ZnIodCksYT11cy5sZW5ndGgsbzt0cnl7bz1lKC4uLm4pfWZpbmFsbHl7Zm9yKGxldCBlPXVzLmxlbmd0aDtlPmE7ZS0tKWZzKCk7ZnIoaSksci5fZCYmbXMoMSl9cmV0dXJuIG99O3JldHVybiByLl9uPSEwLHIuX2M9ITAsci5fZD0hMCxyfWZ1bmN0aW9uIGdyKGUsdCl7aWYodXI9PT1udWxsKXJldHVybiBlO2xldCBuPVFzKHVyKSxpPWUuZGlyc3x8PVtdO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXRbYSxvLHMsYz1yXT10W2VdO2EmJih2KGEpJiYoYT17bW91bnRlZDphLHVwZGF0ZWQ6YX0pLGEuZGVlcCYmUG4obyksaS5wdXNoKHtkaXI6YSxpbnN0YW5jZTpuLHZhbHVlOm8sb2xkVmFsdWU6dm9pZCAwLGFyZzpzLG1vZGlmaWVyczpjfSkpfXJldHVybiBlfWZ1bmN0aW9uIF9yKGUsdCxuLHIpe2xldCBpPWUuZGlycyxhPXQmJnQuZGlycztmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IHM9aVtvXTthJiYocy5vbGRWYWx1ZT1hW29dLnZhbHVlKTtsZXQgYz1zLmRpcltyXTtjJiYobnQoKSxIbihjLG4sOCxbZS5lbCxzLGUsdF0pLHJ0KCkpfX1mdW5jdGlvbiB2cihlLHQpe2lmKFBzKXtsZXQgbj1Qcy5wcm92aWRlcyxyPVBzLnBhcmVudCYmUHMucGFyZW50LnByb3ZpZGVzO3I9PT1uJiYobj1Qcy5wcm92aWRlcz1PYmplY3QuY3JlYXRlKHIpKSxuW2VdPXR9fWZ1bmN0aW9uIHlyKGUsdCxuPSExKXtsZXQgcj1GcygpO2lmKHJ8fG5vKXtsZXQgaT1ubz9uby5fY29udGV4dC5wcm92aWRlczpyP3IucGFyZW50PT1udWxsfHxyLmNlP3Iudm5vZGUuYXBwQ29udGV4dCYmci52bm9kZS5hcHBDb250ZXh0LnByb3ZpZGVzOnIucGFyZW50LnByb3ZpZGVzOnZvaWQgMDtpZihpJiZlIGluIGkpcmV0dXJuIGlbZV07aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiBuJiZ2KHQpP3QuY2FsbChyJiZyLnByb3h5KTp0fX1mdW5jdGlvbiBicigpe3JldHVybiEhKEZzKCl8fG5vKX12YXIgeHI9U3ltYm9sLmZvcihgdi1zY3hgKSxTcj0oKT0+eXIoeHIpO2Z1bmN0aW9uIENyKGUsdCl7cmV0dXJuIERyKGUsbnVsbCx0KX1mdW5jdGlvbiB3cihlLHQpe3JldHVybiBEcihlLG51bGwse2ZsdXNoOmBwb3N0YH0pfWZ1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIERyKGUsbnVsbCx7Zmx1c2g6YHN5bmNgfSl9ZnVuY3Rpb24gRXIoZSx0LG4pe3JldHVybiBEcihlLHQsbil9ZnVuY3Rpb24gRHIoZSx0LG49cil7bGV0e2ltbWVkaWF0ZTppLGRlZXA6byxmbHVzaDpzLG9uY2U6Y309bix1PWwoe30sbiksZD10JiZpfHwhdCYmcyE9PWBwb3N0YCxmO2lmKFZzKXtpZihzPT09YHN5bmNgKXtsZXQgZT1TcigpO2Y9ZS5fX3dhdGNoZXJIYW5kbGVzfHw9W119ZWxzZSBpZighZCl7bGV0IGU9KCk9Pnt9O3JldHVybiBlLnN0b3A9YSxlLnJlc3VtZT1hLGUucGF1c2U9YSxlfX1sZXQgcD1Qczt1LmNhbGw9KGUsdCxuKT0+SG4oZSxwLHQsbik7bGV0IG09ITE7cz09PWBwb3N0YD91LnNjaGVkdWxlcj1lPT57SW8oZSxwJiZwLnN1c3BlbnNlKX06cyE9PWBzeW5jYCYmKG09ITAsdS5zY2hlZHVsZXI9KGUsdCk9Pnt0P2UoKTplcihlKX0pLHUuYXVnbWVudEpvYj1lPT57dCYmKGUuZmxhZ3N8PTQpLG0mJihlLmZsYWdzfD0yLHAmJihlLmlkPXAudWlkLGUuaT1wKSl9O2xldCBoPU5uKGUsdCx1KTtyZXR1cm4gVnMmJihmP2YucHVzaChoKTpkJiZoKCkpLGh9ZnVuY3Rpb24gT3IoZSx0LG4pe2xldCByPXRoaXMucHJveHksaT15KGUpP2UuaW5jbHVkZXMoYC5gKT9rcihyLGUpOigpPT5yW2VdOmUuYmluZChyLHIpLGE7dih0KT9hPXQ6KGE9dC5oYW5kbGVyLG49dCk7bGV0IG89UnModGhpcykscz1EcihpLGEuYmluZChyKSxuKTtyZXR1cm4gbygpLHN9ZnVuY3Rpb24ga3IoZSx0KXtsZXQgbj10LnNwbGl0KGAuYCk7cmV0dXJuKCk9PntsZXQgdD1lO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJnQ7ZSsrKXQ9dFtuW2VdXTtyZXR1cm4gdH19dmFyIEFyPW5ldyBXZWFrTWFwLGpyPVN5bWJvbChgX3Z0ZWApLE1yPWU9PmUuX19pc1RlbGVwb3J0LE5yPWU9PmUmJihlLmRpc2FibGVkfHxlLmRpc2FibGVkPT09YGApLFByPWU9PmUmJihlLmRlZmVyfHxlLmRlZmVyPT09YGApLEZyPWU9PnR5cGVvZiBTVkdFbGVtZW50PGB1YCYmZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQsSXI9ZT0+dHlwZW9mIE1hdGhNTEVsZW1lbnQ9PWBmdW5jdGlvbmAmJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50LExyPShlLHQpPT57bGV0IG49ZSYmZS50bztyZXR1cm4geShuKT90P3Qobik6bnVsbDpufSxScj17bmFtZTpgVGVsZXBvcnRgLF9faXNUZWxlcG9ydDohMCxwcm9jZXNzKGUsdCxuLHIsaSxhLG8scyxjLGwpe2xldHttYzp1LHBjOmQscGJjOmYsbzp7aW5zZXJ0OnAscXVlcnlTZWxlY3RvcjptLGNyZWF0ZVRleHQ6aCxjcmVhdGVDb21tZW50OmcscGFyZW50Tm9kZTpffX09bCx2PU5yKHQucHJvcHMpLHtkeW5hbWljQ2hpbGRyZW46eX09dCxiPShlLHQsbik9PntlLnNoYXBlRmxhZyYxNiYmdShlLmNoaWxkcmVuLHQsbixpLGEsbyxzLGMpfSx4PShlPXQpPT57bGV0IG49TnIoZS5wcm9wcykscj1lLnRhcmdldD1McihlLnByb3BzLG0pLGE9VXIocixlLGgscCk7ciYmKG8hPT1gc3ZnYCYmRnIocik/bz1gc3ZnYDpvIT09YG1hdGhtbGAmJklyKHIpJiYobz1gbWF0aG1sYCksaSYmaS5pc0NFJiYoaS5jZS5fdGVsZXBvcnRUYXJnZXRzfHwoaS5jZS5fdGVsZXBvcnRUYXJnZXRzPW5ldyBTZXQpKS5hZGQociksbnx8KGIoZSxyLGEpLEhyKGUsITEpKSl9LFM9ZT0+e2xldCB0PSgpPT57aWYoQXIuZ2V0KGUpPT09dCl7aWYoQXIuZGVsZXRlKGUpLE5yKGUucHJvcHMpKXtsZXQgdD1fKGUuZWwpfHxuO2IoZSx0LGUuYW5jaG9yKSxIcihlLCEwKX14KGUpfX07QXIuc2V0KGUsdCksSW8odCxhKX07aWYoZT09bnVsbCl7bGV0IGU9dC5lbD1oKGBgKSxpPXQuYW5jaG9yPWgoYGApO2lmKHAoZSxuLHIpLHAoaSxuLHIpLFByKHQucHJvcHMpfHxhJiZhLnBlbmRpbmdCcmFuY2gpe1ModCk7cmV0dXJufXYmJihiKHQsbixpKSxIcih0LCEwKSkseCgpfWVsc2V7dC5lbD1lLmVsO2xldCByPXQuYW5jaG9yPWUuYW5jaG9yLHU9QXIuZ2V0KGUpO2lmKHUpe3UuZmxhZ3N8PTgsQXIuZGVsZXRlKGUpLFModCk7cmV0dXJufXQudGFyZ2V0U3RhcnQ9ZS50YXJnZXRTdGFydDtsZXQgcD10LnRhcmdldD1lLnRhcmdldCxoPXQudGFyZ2V0QW5jaG9yPWUudGFyZ2V0QW5jaG9yLGc9TnIoZS5wcm9wcyksXz1nP246cCxiPWc/cjpoO2lmKG89PT1gc3ZnYHx8RnIocCk/bz1gc3ZnYDoobz09PWBtYXRobWxgfHxJcihwKSkmJihvPWBtYXRobWxgKSx5PyhmKGUuZHluYW1pY0NoaWxkcmVuLHksXyxpLGEsbyxzKSxVbyhlLHQsITApKTpjfHxkKGUsdCxfLGIsaSxhLG8scywhMSksdilnP3QucHJvcHMmJmUucHJvcHMmJnQucHJvcHMudG8hPT1lLnByb3BzLnRvJiYodC5wcm9wcy50bz1lLnByb3BzLnRvKTp6cih0LG4scixsLDEpO2Vsc2UgaWYoKHQucHJvcHMmJnQucHJvcHMudG8pIT09KGUucHJvcHMmJmUucHJvcHMudG8pKXtsZXQgZT1Mcih0LnByb3BzLG0pO2UmJih0LnRhcmdldD1lLHpyKHQsZSxudWxsLGwsMCkpfWVsc2UgZyYmenIodCxwLGgsbCwxKTtIcih0LHYpfX0scmVtb3ZlKGUsdCxuLHt1bTpyLG86e3JlbW92ZTppfX0sYSl7bGV0e3NoYXBlRmxhZzpvLGNoaWxkcmVuOnMsYW5jaG9yOmMsdGFyZ2V0U3RhcnQ6bCx0YXJnZXRBbmNob3I6dSx0YXJnZXQ6ZCxwcm9wczpmfT1lLHA9TnIoZiksbT1hfHwhcCxoPUFyLmdldChlKTtpZihoJiYoaC5mbGFnc3w9OCxBci5kZWxldGUoZSkpLGQmJihpKGwpLGkodSkpLGEmJmkoYyksIWgmJihwfHxkKSYmbyYxNilmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKyl7bGV0IGk9c1tlXTtyKGksdCxuLG0sISFpLmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOnpyLGh5ZHJhdGU6QnJ9O2Z1bmN0aW9uIHpyKGUsdCxuLHtvOntpbnNlcnQ6cn0sbTppfSxhPTIpe2E9PT0wJiZyKGUudGFyZ2V0QW5jaG9yLHQsbik7bGV0e2VsOm8sYW5jaG9yOnMsc2hhcGVGbGFnOmMsY2hpbGRyZW46bCxwcm9wczp1fT1lLGQ9YT09PTI7aWYoZCYmcihvLHQsbiksIUFyLmhhcyhlKSYmKCFkfHxOcih1KSkmJmMmMTYpZm9yKGxldCBlPTA7ZTxsLmxlbmd0aDtlKyspaShsW2VdLHQsbiwyKTtkJiZyKHMsdCxuKX1mdW5jdGlvbiBCcihlLHQsbixyLGksYSx7bzp7bmV4dFNpYmxpbmc6byxwYXJlbnROb2RlOnMscXVlcnlTZWxlY3RvcjpjLGluc2VydDpsLGNyZWF0ZVRleHQ6dX19LGQpe2Z1bmN0aW9uIGYoZSxuKXtsZXQgcj1uO2Zvcig7cjspe2lmKHImJnIubm9kZVR5cGU9PT04KXtpZihyLmRhdGE9PT1gdGVsZXBvcnQgc3RhcnQgYW5jaG9yYCl0LnRhcmdldFN0YXJ0PXI7ZWxzZSBpZihyLmRhdGE9PT1gdGVsZXBvcnQgYW5jaG9yYCl7dC50YXJnZXRBbmNob3I9cixlLl9scGE9dC50YXJnZXRBbmNob3ImJm8odC50YXJnZXRBbmNob3IpO2JyZWFrfX1yPW8ocil9fWZ1bmN0aW9uIHAoZSx0KXt0LmFuY2hvcj1kKG8oZSksdCxzKGUpLG4scixpLGEpfWxldCBtPXQudGFyZ2V0PUxyKHQucHJvcHMsYyksaD1Ocih0LnByb3BzKTtpZihtKXtsZXQgYz1tLl9scGF8fG0uZmlyc3RDaGlsZDt0LnNoYXBlRmxhZyYxNiYmKGg/KHAoZSx0KSxmKG0sYyksdC50YXJnZXRBbmNob3J8fFVyKG0sdCx1LGwscyhlKT09PW0/ZTpudWxsKSk6KHQuYW5jaG9yPW8oZSksZihtLGMpLHQudGFyZ2V0QW5jaG9yfHxVcihtLHQsdSxsKSxkKGMmJm8oYyksdCxtLG4scixpLGEpKSksSHIodCxoKX1lbHNlIGgmJnQuc2hhcGVGbGFnJjE2JiYocChlLHQpLHQudGFyZ2V0U3RhcnQ9ZSx0LnRhcmdldEFuY2hvcj1vKGUpKTtyZXR1cm4gdC5hbmNob3ImJm8odC5hbmNob3IpfXZhciBWcj1ScjtmdW5jdGlvbiBIcihlLHQpe2xldCBuPWUuY3R4O2lmKG4mJm4udXQpe2xldCByLGk7Zm9yKHQ/KHI9ZS5lbCxpPWUuYW5jaG9yKToocj1lLnRhcmdldFN0YXJ0LGk9ZS50YXJnZXRBbmNob3IpO3ImJnIhPT1pOylyLm5vZGVUeXBlPT09MSYmci5zZXRBdHRyaWJ1dGUoYGRhdGEtdi1vd25lcmAsbi51aWQpLHI9ci5uZXh0U2libGluZztuLnV0KCl9fWZ1bmN0aW9uIFVyKGUsdCxuLHIsaT1udWxsKXtsZXQgYT10LnRhcmdldFN0YXJ0PW4oYGApLG89dC50YXJnZXRBbmNob3I9bihgYCk7cmV0dXJuIGFbanJdPW8sZSYmKHIoYSxlLGkpLHIobyxlLGkpKSxvfXZhciBXcj1TeW1ib2woYF9sZWF2ZUNiYCksR3I9U3ltYm9sKGBfZW50ZXJDYmApO2Z1bmN0aW9uIEtyKCl7bGV0IGU9e2lzTW91bnRlZDohMSxpc0xlYXZpbmc6ITEsaXNVbm1vdW50aW5nOiExLGxlYXZpbmdWTm9kZXM6bmV3IE1hcH07cmV0dXJuIFppKCgpPT57ZS5pc01vdW50ZWQ9ITB9KSxlYSgoKT0+e2UuaXNVbm1vdW50aW5nPSEwfSksZX12YXIgcXI9W0Z1bmN0aW9uLEFycmF5XSxKcj17bW9kZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4scGVyc2lzdGVkOkJvb2xlYW4sb25CZWZvcmVFbnRlcjpxcixvbkVudGVyOnFyLG9uQWZ0ZXJFbnRlcjpxcixvbkVudGVyQ2FuY2VsbGVkOnFyLG9uQmVmb3JlTGVhdmU6cXIsb25MZWF2ZTpxcixvbkFmdGVyTGVhdmU6cXIsb25MZWF2ZUNhbmNlbGxlZDpxcixvbkJlZm9yZUFwcGVhcjpxcixvbkFwcGVhcjpxcixvbkFmdGVyQXBwZWFyOnFyLG9uQXBwZWFyQ2FuY2VsbGVkOnFyfSxZcj1lPT57bGV0IHQ9ZS5zdWJUcmVlO3JldHVybiB0LmNvbXBvbmVudD9Zcih0LmNvbXBvbmVudCk6dH0sWHI9e25hbWU6YEJhc2VUcmFuc2l0aW9uYCxwcm9wczpKcixzZXR1cChlLHtzbG90czp0fSl7bGV0IG49RnMoKSxyPUtyKCk7cmV0dXJuKCk9PntsZXQgaT10LmRlZmF1bHQmJmlpKHQuZGVmYXVsdCgpLCEwKSxhPWkmJmkubGVuZ3RoP1pyKGkpOm4uc3ViVHJlZT9UcygpOnZvaWQgMDtpZighYSlyZXR1cm47bGV0IG89QShlKSx7bW9kZTpzfT1vO2lmKHIuaXNMZWF2aW5nKXJldHVybiB0aShhKTtsZXQgYz1uaShhKTtpZighYylyZXR1cm4gdGkoYSk7bGV0IGw9ZWkoYyxvLHIsbixlPT5sPWUpO2MudHlwZSE9PWNzJiZyaShjLGwpO2xldCB1PW4uc3ViVHJlZSYmbmkobi5zdWJUcmVlKTtpZih1JiZ1LnR5cGUhPT1jcyYmIV9zKHUsYykmJllyKG4pLnR5cGUhPT1jcyl7bGV0IGU9ZWkodSxvLHIsbik7aWYocmkodSxlKSxzPT09YG91dC1pbmAmJmMudHlwZSE9PWNzKXJldHVybiByLmlzTGVhdmluZz0hMCxlLmFmdGVyTGVhdmU9KCk9PntyLmlzTGVhdmluZz0hMSxuLmpvYi5mbGFncyY4fHxuLnVwZGF0ZSgpLGRlbGV0ZSBlLmFmdGVyTGVhdmUsdT12b2lkIDB9LHRpKGEpO3M9PT1gaW4tb3V0YCYmYy50eXBlIT09Y3M/ZS5kZWxheUxlYXZlPShlLHQsbik9PntsZXQgaT0kcihyLHUpO2lbU3RyaW5nKHUua2V5KV09dSxlW1dyXT0oKT0+e3QoKSxlW1dyXT12b2lkIDAsZGVsZXRlIGwuZGVsYXllZExlYXZlLHU9dm9pZCAwfSxsLmRlbGF5ZWRMZWF2ZT0oKT0+e24oKSxkZWxldGUgbC5kZWxheWVkTGVhdmUsdT12b2lkIDB9fTp1PXZvaWQgMH1lbHNlIHUmJj12b2lkIDA7cmV0dXJuIGF9fX07ZnVuY3Rpb24gWnIoZSl7bGV0IHQ9ZVswXTtpZihlLmxlbmd0aD4xKXtmb3IobGV0IG4gb2YgZSlpZihuLnR5cGUhPT1jcyl7dD1uO2JyZWFrfX1yZXR1cm4gdH12YXIgUXI9WHI7ZnVuY3Rpb24gJHIoZSx0KXtsZXR7bGVhdmluZ1ZOb2RlczpufT1lLHI9bi5nZXQodC50eXBlKTtyZXR1cm4gcnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuLnNldCh0LnR5cGUscikpLHJ9ZnVuY3Rpb24gZWkoZSx0LG4scixpKXtsZXR7YXBwZWFyOmEsbW9kZTpvLHBlcnNpc3RlZDpzPSExLG9uQmVmb3JlRW50ZXI6YyxvbkVudGVyOmwsb25BZnRlckVudGVyOnUsb25FbnRlckNhbmNlbGxlZDpkLG9uQmVmb3JlTGVhdmU6ZixvbkxlYXZlOm0sb25BZnRlckxlYXZlOmgsb25MZWF2ZUNhbmNlbGxlZDpnLG9uQmVmb3JlQXBwZWFyOl8sb25BcHBlYXI6dixvbkFmdGVyQXBwZWFyOnksb25BcHBlYXJDYW5jZWxsZWQ6Yn09dCx4PVN0cmluZyhlLmtleSksUz0kcihuLGUpLEM9KGUsdCk9PntlJiZIbihlLHIsOSx0KX0sdz0oZSx0KT0+e2xldCBuPXRbMV07QyhlLHQpLHAoZSk/ZS5ldmVyeShlPT5lLmxlbmd0aDw9MSkmJm4oKTplLmxlbmd0aDw9MSYmbigpfSxlZT17bW9kZTpvLHBlcnNpc3RlZDpzLGJlZm9yZUVudGVyKHQpe2xldCByPWM7aWYoIW4uaXNNb3VudGVkKXtpZihhKXI9X3x8YztlbHNlIHJldHVybn10W1dyXSYmdFtXcl0oITApO2xldCBpPVNbeF07aSYmX3MoZSxpKSYmaS5lbFtXcl0mJmkuZWxbV3JdKCksQyhyLFt0XSl9LGVudGVyKHQpe2lmKFNbeF09PT1lKXJldHVybjtsZXQgcj1sLGk9dSxvPWQ7aWYoIW4uaXNNb3VudGVkKXtpZihhKXI9dnx8bCxpPXl8fHUsbz1ifHxkO2Vsc2UgcmV0dXJufWxldCBzPSExO3RbR3JdPWU9PntzfHwocz0hMCxDKGU/bzppLFt0XSksZWUuZGVsYXllZExlYXZlJiZlZS5kZWxheWVkTGVhdmUoKSx0W0dyXT12b2lkIDApfTtsZXQgYz10W0dyXS5iaW5kKG51bGwsITEpO3I/dyhyLFt0LGNdKTpjKCl9LGxlYXZlKHQscil7bGV0IGk9U3RyaW5nKGUua2V5KTtpZih0W0dyXSYmdFtHcl0oITApLG4uaXNVbm1vdW50aW5nKXJldHVybiByKCk7QyhmLFt0XSk7bGV0IGE9ITE7dFtXcl09bj0+e2F8fChhPSEwLHIoKSxDKG4/ZzpoLFt0XSksdFtXcl09dm9pZCAwLFNbaV09PT1lJiZkZWxldGUgU1tpXSl9O2xldCBvPXRbV3JdLmJpbmQobnVsbCwhMSk7U1tpXT1lLG0/dyhtLFt0LG9dKTpvKCl9LGNsb25lKGUpe2xldCBhPWVpKGUsdCxuLHIsaSk7cmV0dXJuIGkmJmkoYSksYX19O3JldHVybiBlZX1mdW5jdGlvbiB0aShlKXtpZih6aShlKSlyZXR1cm4gZT1DcyhlKSxlLmNoaWxkcmVuPW51bGwsZX1mdW5jdGlvbiBuaShlKXtpZighemkoZSkpcmV0dXJuIE1yKGUudHlwZSkmJmUuY2hpbGRyZW4/WnIoZS5jaGlsZHJlbik6ZTtpZihlLmNvbXBvbmVudClyZXR1cm4gZS5jb21wb25lbnQuc3ViVHJlZTtsZXR7c2hhcGVGbGFnOnQsY2hpbGRyZW46bn09ZTtpZihuKXtpZih0JjE2KXJldHVybiBuWzBdO2lmKHQmMzImJnYobi5kZWZhdWx0KSlyZXR1cm4gbi5kZWZhdWx0KCl9fWZ1bmN0aW9uIHJpKGUsdCl7aWYoZS5zaGFwZUZsYWcmNiYmZS5jb21wb25lbnQpe2UudHJhbnNpdGlvbj10O2xldCBuPWUuY29tcG9uZW50LnN1YlRyZWU7cmkoTXIobi50eXBlKSYmbmkobil8fG4sdCl9ZWxzZSBlLnNoYXBlRmxhZyYxMjg/KGUuc3NDb250ZW50LnRyYW5zaXRpb249dC5jbG9uZShlLnNzQ29udGVudCksZS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249dC5jbG9uZShlLnNzRmFsbGJhY2spKTplLnRyYW5zaXRpb249dH1mdW5jdGlvbiBpaShlLHQ9ITEsbil7bGV0IHI9W10saT0wO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbz1lW2FdLHM9bj09bnVsbD9vLmtleTpTdHJpbmcobikrU3RyaW5nKG8ua2V5PT1udWxsP2E6by5rZXkpO28udHlwZT09PUw/KG8ucGF0Y2hGbGFnJjEyOCYmaSsrLHI9ci5jb25jYXQoaWkoby5jaGlsZHJlbix0LHMpKSk6KHR8fG8udHlwZSE9PWNzKSYmci5wdXNoKHM9PW51bGw/bzpDcyhvLHtrZXk6c30pKX1pZihpPjEpZm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXS5wYXRjaEZsYWc9LTI7cmV0dXJuIHJ9ZnVuY3Rpb24gRihlLHQpe3JldHVybiB2KGUpP2woe25hbWU6ZS5uYW1lfSx0LHtzZXR1cDplfSk6ZX1mdW5jdGlvbiBhaSgpe2xldCBlPUZzKCk7cmV0dXJuIGU/KGUuYXBwQ29udGV4dC5jb25maWcuaWRQcmVmaXh8fGB2YCkrYC1gK2UuaWRzWzBdK2UuaWRzWzFdKys6YGB9ZnVuY3Rpb24gb2koZSl7ZS5pZHM9W2UuaWRzWzBdK2UuaWRzWzJdKysrYC1gLDAsMF19ZnVuY3Rpb24gc2koZSl7bGV0IHQ9RnMoKSxuPXVuKG51bGwpO2lmKHQpe2xldCBpPXQucmVmcz09PXI/dC5yZWZzPXt9OnQucmVmcztPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+bi52YWx1ZSxzZXQ6ZT0+bi52YWx1ZT1lfSl9cmV0dXJuIG59ZnVuY3Rpb24gY2koZSx0KXtsZXQgbjtyZXR1cm4hISgobj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkpJiYhbi5jb25maWd1cmFibGUpfXZhciBsaT1uZXcgV2Vha01hcDtmdW5jdGlvbiB1aShlLHQsbixpLGE9ITEpe2lmKHAoZSkpe2UuZm9yRWFjaCgoZSxyKT0+dWkoZSx0JiYocCh0KT90W3JdOnQpLG4saSxhKSk7cmV0dXJufWlmKElpKGkpJiYhYSl7aS5zaGFwZUZsYWcmNTEyJiZpLnR5cGUuX19hc3luY1Jlc29sdmVkJiZpLmNvbXBvbmVudC5zdWJUcmVlLmNvbXBvbmVudCYmdWkoZSx0LG4saS5jb21wb25lbnQuc3ViVHJlZSk7cmV0dXJufWxldCBzPWkuc2hhcGVGbGFnJjQ/UXMoaS5jb21wb25lbnQpOmkuZWwsYz1hP251bGw6cyx7aTpsLHI6ZH09ZSxtPXQmJnQucixoPWwucmVmcz09PXI/bC5yZWZzPXt9OmwucmVmcyxnPWwuc2V0dXBTdGF0ZSxfPUEoZyksYj1nPT09cj9vOmU9PiFjaShoLGUpJiZmKF8sZSkseD0oZSx0KT0+ISh0JiZjaShoLHQpKTtpZihtIT1udWxsJiZtIT09ZCl7aWYoZGkodCkseShtKSloW21dPW51bGwsYihtKSYmKGdbbV09bnVsbCk7ZWxzZSBpZihqKG0pKXtsZXQgZT10O3gobSxlLmspJiYobS52YWx1ZT1udWxsKSxlLmsmJihoW2Uua109bnVsbCl9fWlmKHYoZCkpVm4oZCxsLDEyLFtjLGhdKTtlbHNle2xldCB0PXkoZCkscj1qKGQpO2lmKHR8fHIpe2xldCBpPSgpPT57aWYoZS5mKXtsZXQgbj10P2IoZCk/Z1tkXTpoW2RdOngoZCl8fCFlLms/ZC52YWx1ZTpoW2Uua107aWYoYSlwKG4pJiZ1KG4scyk7ZWxzZSBpZihwKG4pKW4uaW5jbHVkZXMocyl8fG4ucHVzaChzKTtlbHNlIGlmKHQpaFtkXT1bc10sYihkKSYmKGdbZF09aFtkXSk7ZWxzZXtsZXQgdD1bc107eChkLGUuaykmJihkLnZhbHVlPXQpLGUuayYmKGhbZS5rXT10KX19ZWxzZSB0PyhoW2RdPWMsYihkKSYmKGdbZF09YykpOnImJih4KGQsZS5rKSYmKGQudmFsdWU9YyksZS5rJiYoaFtlLmtdPWMpKX07aWYoYyl7bGV0IHQ9KCk9PntpKCksbGkuZGVsZXRlKGUpfTt0LmlkPS0xLGxpLnNldChlLHQpLElvKHQsbil9ZWxzZSBkaShlKSxpKCl9fX1mdW5jdGlvbiBkaShlKXtsZXQgdD1saS5nZXQoZSk7dCYmKHQuZmxhZ3N8PTgsbGkuZGVsZXRlKGUpKX12YXIgZmk9ITEscGk9KCk9PntmaXx8PShjb25zb2xlLmVycm9yKGBIeWRyYXRpb24gY29tcGxldGVkIGJ1dCBjb250YWlucyBtaXNtYXRjaGVzLmApLCEwKX0sbWk9ZT0+ZS5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoYHN2Z2ApJiZlLnRhZ05hbWUhPT1gZm9yZWlnbk9iamVjdGAsaGk9ZT0+ZS5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoYE1hdGhNTGApLGdpPWU9PntpZihlLm5vZGVUeXBlPT09MSl7aWYobWkoZSkpcmV0dXJuYHN2Z2A7aWYoaGkoZSkpcmV0dXJuYG1hdGhtbGB9fSxfaT1lPT5lLm5vZGVUeXBlPT09ODtmdW5jdGlvbiB2aShlKXtsZXR7bXQ6dCxwOm4sbzp7cGF0Y2hQcm9wOnIsY3JlYXRlVGV4dDppLG5leHRTaWJsaW5nOmEscGFyZW50Tm9kZTpvLHJlbW92ZTpjLGluc2VydDpsLGNyZWF0ZUNvbW1lbnQ6dX19PWUsZD0oZSx0KT0+e2lmKCF0Lmhhc0NoaWxkTm9kZXMoKSl7bihudWxsLGUsdCksaXIoKSx0Ll92bm9kZT1lO3JldHVybn1mKHQuZmlyc3RDaGlsZCxlLG51bGwsbnVsbCxudWxsKSxpcigpLHQuX3Zub2RlPWV9LGY9KG4scixzLGMsdSxkPSExKT0+e2R8fD0hIXIuZHluYW1pY0NoaWxkcmVuO2xldCBiPV9pKG4pJiZuLmRhdGE9PT1gW2AseD0oKT0+ZyhuLHIscyxjLHUsYikse3R5cGU6UyxyZWY6QyxzaGFwZUZsYWc6dyxwYXRjaEZsYWc6ZWV9PXIsdGU9bi5ub2RlVHlwZTtyLmVsPW4sZWU9PT0tMiYmKGQ9ITEsci5keW5hbWljQ2hpbGRyZW49bnVsbCk7bGV0IFQ9bnVsbDtzd2l0Y2goUyl7Y2FzZSBzczp0ZT09PTM/KG4uZGF0YSE9PXIuY2hpbGRyZW4mJihwaSgpLG4uZGF0YT1yLmNoaWxkcmVuKSxUPWEobikpOnIuY2hpbGRyZW49PT1gYD8obChyLmVsPWkoYGApLG8obiksbiksVD1uKTpUPXgoKTticmVhaztjYXNlIGNzOnkobik/KFQ9YShuKSx2KHIuZWw9bi5jb250ZW50LmZpcnN0Q2hpbGQsbixzKSk6VD10ZSE9PTh8fGI/eCgpOmEobik7YnJlYWs7Y2FzZSBsczppZihiJiYobj1hKG4pLHRlPW4ubm9kZVR5cGUpLHRlPT09MXx8dGU9PT0zKXtUPW47bGV0IGU9IXIuY2hpbGRyZW4ubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ci5zdGF0aWNDb3VudDt0KyspZSYmKHIuY2hpbGRyZW4rPVQubm9kZVR5cGU9PT0xP1Qub3V0ZXJIVE1MOlQuZGF0YSksdD09PXIuc3RhdGljQ291bnQtMSYmKHIuYW5jaG9yPVQpLFQ9YShUKTtyZXR1cm4gYj9hKFQpOlR9eCgpO2JyZWFrO2Nhc2UgTDpUPWI/aChuLHIscyxjLHUsZCk6eCgpO2JyZWFrO2RlZmF1bHQ6aWYodyYxKVQ9KHRlIT09MXx8ci50eXBlLnRvTG93ZXJDYXNlKCkhPT1uLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJiF5KG4pP3goKTpwKG4scixzLGMsdSxkKTtlbHNlIGlmKHcmNil7ci5zbG90U2NvcGVJZHM9dTtsZXQgZT1vKG4pO2lmKFQ9Yj9fKG4pOl9pKG4pJiZuLmRhdGE9PT1gdGVsZXBvcnQgc3RhcnRgP18obixuLmRhdGEsYHRlbGVwb3J0IGVuZGApOmEobiksdChyLGUsbnVsbCxzLGMsZ2koZSksZCksSWkocikmJiFyLnR5cGUuX19hc3luY1Jlc29sdmVkKXtsZXQgdDtiPyh0PUgoTCksdC5hbmNob3I9VD9ULnByZXZpb3VzU2libGluZzplLmxhc3RDaGlsZCk6dD1uLm5vZGVUeXBlPT09Mz9VKGBgKTpIKGBkaXZgKSx0LmVsPW4sci5jb21wb25lbnQuc3ViVHJlZT10fX1lbHNlIHcmNjQ/VD10ZT09PTg/ci50eXBlLmh5ZHJhdGUobixyLHMsYyx1LGQsZSxtKTp4KCk6dyYxMjgmJihUPXIudHlwZS5oeWRyYXRlKG4scixzLGMsZ2kobyhuKSksdSxkLGUsZikpfXJldHVybiBDIT1udWxsJiZ1aShDLG51bGwsYyxyKSxUfSxwPShlLHQsbixpLGEsbyk9PntvfHw9ISF0LmR5bmFtaWNDaGlsZHJlbjtsZXR7dHlwZTpsLGR5bmFtaWNQcm9wczp1LHByb3BzOmQscGF0Y2hGbGFnOmYsc2hhcGVGbGFnOnAsZGlyczpoLHRyYW5zaXRpb246Z309dCxfPWw9PT1gaW5wdXRgfHxsPT09YG9wdGlvbmAsYj0hIXU7aWYoX3x8Ynx8ZiE9PS0xKXtoJiZfcih0LG51bGwsbixgY3JlYXRlZGApO2xldCBsPSExO2lmKHkoZSkpe2w9SG8obnVsbCxnKSYmbiYmbi52bm9kZS5wcm9wcyYmbi52bm9kZS5wcm9wcy5hcHBlYXI7bGV0IHI9ZS5jb250ZW50LmZpcnN0Q2hpbGQ7aWYobCl7bGV0IGU9ci5nZXRBdHRyaWJ1dGUoYGNsYXNzYCk7ZSYmKHIuJGNscz1lKSxnLmJlZm9yZUVudGVyKHIpfXYocixlLG4pLHQuZWw9ZT1yfWlmKHAmMTYmJiEoZCYmKGQuaW5uZXJIVE1MfHxkLnRleHRDb250ZW50KSkpe2xldCByPW0oZS5maXJzdENoaWxkLHQsZSxuLGksYSxvKTtmb3IociYmIUNpKGUsMSkmJnBpKCk7cjspe2xldCBlPXI7cj1yLm5leHRTaWJsaW5nLGMoZSl9fWVsc2UgaWYocCY4KXtsZXQgbj10LmNoaWxkcmVuO25bMF09PT1gCmAmJihlLnRhZ05hbWU9PT1gUFJFYHx8ZS50YWdOYW1lPT09YFRFWFRBUkVBYCkmJihuPW4uc2xpY2UoMSkpO2xldHt0ZXh0Q29udGVudDpyfT1lO3IhPT1uJiZyIT09bi5yZXBsYWNlKC9cclxufFxyL2csYApgKSYmKENpKGUsMCl8fHBpKCksZS50ZXh0Q29udGVudD10LmNoaWxkcmVuKX1pZihkKXtpZihffHxifHwhb3x8ZiY0OCl7bGV0IHQ9ZS50YWdOYW1lLmluY2x1ZGVzKGAtYCksaT1lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgc3ZnYCk/YHN2Z2A6ZS5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoYE1hdGhNTGApP2BtYXRobWxgOnZvaWQgMDtmb3IobGV0IGEgaW4gZClpZihfJiYoYS5lbmRzV2l0aChgdmFsdWVgKXx8YT09PWBpbmRldGVybWluYXRlYCl8fHMoYSkmJiFuZShhKXx8YVswXT09PWAuYHx8dCYmIW5lKGEpfHx1JiZ1LmluY2x1ZGVzKGEpKXtpZihiaShlLGEsZFthXSkpY29udGludWU7cihlLGEsbnVsbCxkW2FdLGksbil9fWVsc2UgaWYoZC5vbkNsaWNrKXIoZSxgb25DbGlja2AsbnVsbCxkLm9uQ2xpY2ssdm9pZCAwLG4pO2Vsc2UgaWYoZiY0JiZubihkLnN0eWxlKSlmb3IobGV0IGUgaW4gZC5zdHlsZSlkLnN0eWxlW2VdfWxldCB4Oyh4PWQmJmQub25Wbm9kZUJlZm9yZU1vdW50KSYmQXMoeCxuLHQpLGgmJl9yKHQsbnVsbCxuLGBiZWZvcmVNb3VudGApLCgoeD1kJiZkLm9uVm5vZGVNb3VudGVkKXx8aHx8bCkmJmlzKCgpPT57eCYmQXMoeCxuLHQpLGwmJmcuZW50ZXIoZSksaCYmX3IodCxudWxsLG4sYG1vdW50ZWRgKX0saSl9cmV0dXJuIGUubmV4dFNpYmxpbmd9LG09KGUsdCxyLG8scyxjLHUpPT57dXx8PSEhdC5keW5hbWljQ2hpbGRyZW47bGV0IGQ9dC5jaGlsZHJlbixwPWQubGVuZ3RoLG09ITE7Zm9yKGxldCB0PTA7dDxwO3QrKyl7bGV0IGg9dT9kW3RdOmRbdF09RXMoZFt0XSksZz1oLnR5cGU9PT1zcztlPyhnJiYhdSYmdCsxPHAmJkVzKGRbdCsxXSkudHlwZT09PXNzJiYobChpKGUuZGF0YS5zbGljZShoLmNoaWxkcmVuLmxlbmd0aCkpLHIsYShlKSksZS5kYXRhPWguY2hpbGRyZW4pLGU9ZihlLGgsbyxzLGMsdSkpOmcmJiFoLmNoaWxkcmVuP2woaC5lbD1pKGBgKSxyKToobXx8KG09ITAsQ2kociwxKXx8cGkoKSksbihudWxsLGgscixudWxsLG8scyxnaShyKSxjKSl9cmV0dXJuIGV9LGg9KGUsdCxuLHIsaSxzKT0+e2xldHtzbG90U2NvcGVJZHM6Y309dDtjJiYoaT1pP2kuY29uY2F0KGMpOmMpO2xldCBkPW8oZSksZj1tKGEoZSksdCxkLG4scixpLHMpO3JldHVybiBmJiZfaShmKSYmZi5kYXRhPT09YF1gP2EodC5hbmNob3I9Zik6KHBpKCksbCh0LmFuY2hvcj11KGBdYCksZCxmKSxmKX0sZz0oZSx0LHIsaSxzLGwpPT57aWYoVGkoZSx0KXx8cGkoKSx0LmVsPW51bGwsbCl7bGV0IHQ9XyhlKTtmb3IoOzspe2xldCBuPWEoZSk7aWYobiYmbiE9PXQpYyhuKTtlbHNlIGJyZWFrfX1sZXQgdT1hKGUpLGQ9byhlKTtyZXR1cm4gYyhlKSxuKG51bGwsdCxkLHUscixpLGdpKGQpLHMpLHImJihyLnZub2RlLmVsPXQuZWwsX28ocix0LmVsKSksdX0sXz0oZSx0PWBbYCxuPWBdYCk9PntsZXQgcj0wO2Zvcig7ZTspaWYoZT1hKGUpLGUmJl9pKGUpJiYoZS5kYXRhPT09dCYmcisrLGUuZGF0YT09PW4pKXtpZihyPT09MClyZXR1cm4gYShlKTtyLS19cmV0dXJuIGV9LHY9KGUsdCxuKT0+e2xldCByPXQucGFyZW50Tm9kZTtyJiZyLnJlcGxhY2VDaGlsZChlLHQpO2xldCBpPW47Zm9yKDtpOylpLnZub2RlLmVsPT09dCYmKGkudm5vZGUuZWw9aS5zdWJUcmVlLmVsPWUpLGk9aS5wYXJlbnR9LHk9ZT0+ZS5ub2RlVHlwZT09PTEmJmUudGFnTmFtZT09PWBURU1QTEFURWA7cmV0dXJuW2QsZl19dmFyIHlpPW5ldyBTZXQoW2BzcmNgLGBzcmNzZXRgLGBocmVmYCxgcG9zdGVyYF0pO2Z1bmN0aW9uIGJpKGUsdCxuKXtyZXR1cm4geWkuaGFzKHQpP2UuZ2V0QXR0cmlidXRlKHQpPT09KG49PW51bGw/bnVsbDpgJHtufWApOiExfXZhciB4aT1gZGF0YS1hbGxvdy1taXNtYXRjaGAsU2k9ezA6YHRleHRgLDE6YGNoaWxkcmVuYCwyOmBjbGFzc2AsMzpgc3R5bGVgLDQ6YGF0dHJpYnV0ZWB9O2Z1bmN0aW9uIENpKGUsdCl7aWYodD09PTB8fHQ9PT0xKWZvcig7ZSYmIWUuaGFzQXR0cmlidXRlKHhpKTspZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIHdpKGUmJmUuZ2V0QXR0cmlidXRlKHhpKSx0KX1mdW5jdGlvbiB3aShlLHQpe2lmKGU9PW51bGwpcmV0dXJuITE7aWYoZT09PWBgKXJldHVybiEwO3tsZXQgbj1lLnNwbGl0KGAsYCk7cmV0dXJuIHQ9PT0wJiZuLmluY2x1ZGVzKGBjaGlsZHJlbmApPyEwOm4uaW5jbHVkZXMoU2lbdF0pfX1mdW5jdGlvbiBUaShlLHQpe3JldHVybiBDaShlLnBhcmVudEVsZW1lbnQsMSl8fEVpKGUpfHxEaSh0KX1mdW5jdGlvbiBFaShlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTEmJndpKGUuZ2V0QXR0cmlidXRlKHhpKSwxKX1mdW5jdGlvbiBEaSh7cHJvcHM6ZX0pe2xldCB0PWUmJmVbeGldO3JldHVybiB0eXBlb2YgdD09YHN0cmluZ2AmJndpKHQsMSl9dmFyIE9pPW1lKCkucmVxdWVzdElkbGVDYWxsYmFja3x8KGU9PnNldFRpbWVvdXQoZSwxKSksa2k9bWUoKS5jYW5jZWxJZGxlQ2FsbGJhY2t8fChlPT5jbGVhclRpbWVvdXQoZSkpLEFpPShlPTFlNCk9PnQ9PntsZXQgbj1PaSh0LHt0aW1lb3V0OmV9KTtyZXR1cm4oKT0+a2kobil9O2Z1bmN0aW9uIGppKGUpe2xldHt0b3A6dCxsZWZ0Om4sYm90dG9tOnIscmlnaHQ6aX09ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7aW5uZXJIZWlnaHQ6YSxpbm5lcldpZHRoOm99PXdpbmRvdztyZXR1cm4odD4wJiZ0PGF8fHI+MCYmcjxhKSYmKG4+MCYmbjxvfHxpPjAmJmk8byl9dmFyIE1pPWU9Pih0LG4pPT57bGV0IHI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGU9Pntmb3IobGV0IG4gb2YgZSlpZihuLmlzSW50ZXJzZWN0aW5nKXtyLmRpc2Nvbm5lY3QoKSx0KCk7YnJlYWt9fSxlKTtyZXR1cm4gbihlPT57aWYoZSBpbnN0YW5jZW9mIEVsZW1lbnQpe2lmKGppKGUpKXJldHVybiB0KCksci5kaXNjb25uZWN0KCksITE7ci5vYnNlcnZlKGUpfX0pLCgpPT5yLmRpc2Nvbm5lY3QoKX0sTmk9ZT0+dD0+e2lmKGUpe2xldCBuPW1hdGNoTWVkaWEoZSk7aWYobi5tYXRjaGVzKXQoKTtlbHNlIHJldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoYGNoYW5nZWAsdCx7b25jZTohMH0pLCgpPT5uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNoYW5nZWAsdCl9fSxQaT0oZT1bXSk9Pih0LG4pPT57eShlKSYmKGU9W2VdKTtsZXQgcj0hMSxpPWU9PntyfHwocj0hMCxhKCksdCgpLGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IGUuY29uc3RydWN0b3IoZS50eXBlLGUpKSl9LGE9KCk9PntuKHQ9Pntmb3IobGV0IG4gb2YgZSl0LnJlbW92ZUV2ZW50TGlzdGVuZXIobixpKX0pfTtyZXR1cm4gbih0PT57Zm9yKGxldCBuIG9mIGUpdC5hZGRFdmVudExpc3RlbmVyKG4saSx7b25jZTohMH0pfSksYX07ZnVuY3Rpb24gRmkoZSx0KXtpZihfaShlKSYmZS5kYXRhPT09YFtgKXtsZXQgbj0xLHI9ZS5uZXh0U2libGluZztmb3IoO3I7KXtpZihyLm5vZGVUeXBlPT09MSl7aWYodChyKT09PSExKWJyZWFrfWVsc2UgaWYoX2kocikpe2lmKHIuZGF0YT09PWBdYCl7aWYoLS1uPT09MClicmVha31lbHNlIHIuZGF0YT09PWBbYCYmbisrfXI9ci5uZXh0U2libGluZ319ZWxzZSB0KGUpfXZhciBJaT1lPT4hIWUudHlwZS5fX2FzeW5jTG9hZGVyO2Z1bmN0aW9uIExpKGUpe3YoZSkmJihlPXtsb2FkZXI6ZX0pO2xldHtsb2FkZXI6dCxsb2FkaW5nQ29tcG9uZW50Om4sZXJyb3JDb21wb25lbnQ6cixkZWxheTppPTIwMCxoeWRyYXRlOmEsdGltZW91dDpvLHN1c3BlbnNpYmxlOnM9ITAsb25FcnJvcjpjfT1lLGw9bnVsbCx1LGQ9MCxmPSgpPT4oZCsrLGw9bnVsbCxwKCkpLHA9KCk9PntsZXQgZTtyZXR1cm4gbHx8KGU9bD10KCkuY2F0Y2goZT0+e2lmKGU9ZSBpbnN0YW5jZW9mIEVycm9yP2U6RXJyb3IoU3RyaW5nKGUpKSxjKXJldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2MoZSwoKT0+dChmKCkpLCgpPT5uKGUpLGQrMSl9KTt0aHJvdyBlfSkudGhlbih0PT5lIT09bCYmbD9sOih0JiYodC5fX2VzTW9kdWxlfHx0W1N5bWJvbC50b1N0cmluZ1RhZ109PT1gTW9kdWxlYCkmJih0PXQuZGVmYXVsdCksdT10LHQpKSl9O3JldHVybiBGKHtuYW1lOmBBc3luY0NvbXBvbmVudFdyYXBwZXJgLF9fYXN5bmNMb2FkZXI6cCxfX2FzeW5jSHlkcmF0ZShlLHQsbil7bGV0IHI9ZS5pc0Nvbm5lY3RlZCxpPSExOyh0LmJ1fHw9W10pLnB1c2goKCk9Pmk9ITApO2xldCBvPSgpPT57aXx8IWUucGFyZW50Tm9kZXx8ciYmIWUuaXNDb25uZWN0ZWR8fG4oKX0scz1hPygpPT57bGV0IG49YShvLHQ9PkZpKGUsdCkpO24mJih0LmJ1bXx8PVtdKS5wdXNoKG4pfTpvO3U/cygpOnAoKS50aGVuKCgpPT4hdC5pc1VubW91bnRlZCYmcygpKX0sZ2V0IF9fYXN5bmNSZXNvbHZlZCgpe3JldHVybiB1fSxzZXR1cCgpe2xldCBlPVBzO2lmKG9pKGUpLHUpcmV0dXJuKCk9PlJpKHUsZSk7bGV0IHQ9dD0+e2w9bnVsbCxVbih0LGUsMTMsIXIpfTtpZihzJiZlLnN1c3BlbnNlfHxWcylyZXR1cm4gcCgpLnRoZW4odD0+KCk9PlJpKHQsZSkpLmNhdGNoKGU9Pih0KGUpLCgpPT5yP0gocix7ZXJyb3I6ZX0pOm51bGwpKTtsZXQgYT1NKCExKSxjPU0oKSxkPU0oISFpKSxmLG07cmV0dXJuIHRhKCgpPT57ZiE9bnVsbCYmY2xlYXJUaW1lb3V0KGYpLG0hPW51bGwmJmNsZWFyVGltZW91dChtKX0pLGkmJihtPXNldFRpbWVvdXQoKCk9PntlLmlzVW5tb3VudGVkfHwoZC52YWx1ZT0hMSl9LGkpKSxvIT1udWxsJiYoZj1zZXRUaW1lb3V0KCgpPT57aWYoIWUuaXNVbm1vdW50ZWQmJiFhLnZhbHVlJiYhYy52YWx1ZSl7bGV0IGU9RXJyb3IoYEFzeW5jIGNvbXBvbmVudCB0aW1lZCBvdXQgYWZ0ZXIgJHtvfW1zLmApO3QoZSksYy52YWx1ZT1lfX0sbykpLHAoKS50aGVuKCgpPT57ZS5pc1VubW91bnRlZHx8KGEudmFsdWU9ITAsZS5wYXJlbnQmJnppKGUucGFyZW50LnZub2RlKSYmZS5wYXJlbnQudXBkYXRlKCkpfSkuY2F0Y2gobj0+e2lmKGUuaXNVbm1vdW50ZWQpe2w9bnVsbDtyZXR1cm59dChuKSxjLnZhbHVlPW59KSwoKT0+e2lmKGEudmFsdWUmJnUpcmV0dXJuIFJpKHUsZSk7aWYoYy52YWx1ZSYmcilyZXR1cm4gSChyLHtlcnJvcjpjLnZhbHVlfSk7aWYobiYmIWQudmFsdWUpcmV0dXJuIFJpKG4sZSl9fX0pfWZ1bmN0aW9uIFJpKGUsdCl7bGV0e3JlZjpuLHByb3BzOnIsY2hpbGRyZW46aSxjZTphfT10LnZub2RlLG89SChlLHIsaSk7cmV0dXJuIG8ucmVmPW4sby5jZT1hLGRlbGV0ZSB0LnZub2RlLmNlLG99dmFyIHppPWU9PmUudHlwZS5fX2lzS2VlcEFsaXZlLEJpPXtuYW1lOmBLZWVwQWxpdmVgLF9faXNLZWVwQWxpdmU6ITAscHJvcHM6e2luY2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLGV4Y2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLG1heDpbU3RyaW5nLE51bWJlcl19LHNldHVwKGUse3Nsb3RzOnR9KXtsZXQgbj1GcygpLHI9bi5jdHg7aWYoIXIucmVuZGVyZXIpcmV0dXJuKCk9PntsZXQgZT10LmRlZmF1bHQmJnQuZGVmYXVsdCgpO3JldHVybiBlJiZlLmxlbmd0aD09PTE/ZVswXTplfTtsZXQgaT1uZXcgTWFwLGE9bmV3IFNldCxvPW51bGwscz1uLnN1c3BlbnNlLHtyZW5kZXJlcjp7cDpjLG06bCx1bTp1LG86e2NyZWF0ZUVsZW1lbnQ6ZH19fT1yLGY9ZChgZGl2YCk7ci5hY3RpdmF0ZT0oZSx0LG4scixpKT0+e2xldCBhPWUuY29tcG9uZW50O2woZSx0LG4sMCxzKSxjKGEudm5vZGUsZSx0LG4sYSxzLHIsZS5zbG90U2NvcGVJZHMsaSksSW8oKCk9PnthLmlzRGVhY3RpdmF0ZWQ9ITEsYS5hJiZsZShhLmEpO2xldCB0PWUucHJvcHMmJmUucHJvcHMub25Wbm9kZU1vdW50ZWQ7dCYmQXModCxhLnBhcmVudCxlKX0scyl9LHIuZGVhY3RpdmF0ZT1lPT57bGV0IHQ9ZS5jb21wb25lbnQ7S28odC5tKSxLbyh0LmEpLGwoZSxmLG51bGwsMSxzKSxJbygoKT0+e3QuZGEmJmxlKHQuZGEpO2xldCBuPWUucHJvcHMmJmUucHJvcHMub25Wbm9kZVVubW91bnRlZDtuJiZBcyhuLHQucGFyZW50LGUpLHQuaXNEZWFjdGl2YXRlZD0hMH0scyl9O2Z1bmN0aW9uIHAoZSl7S2koZSksdShlLG4scywhMCl9ZnVuY3Rpb24gbShlKXtpLmZvckVhY2goKHQsbik9PntsZXQgcj0kcyhJaSh0KT90LnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTp0LnR5cGUpO3ImJiFlKHIpJiZoKG4pfSl9ZnVuY3Rpb24gaChlKXtsZXQgdD1pLmdldChlKTt0JiYoIW98fCFfcyh0LG8pKT9wKHQpOm8mJktpKG8pLGkuZGVsZXRlKGUpLGEuZGVsZXRlKGUpfUVyKCgpPT5bZS5pbmNsdWRlLGUuZXhjbHVkZV0sKFtlLHRdKT0+e2UmJm0odD0+VmkoZSx0KSksdCYmbShlPT4hVmkodCxlKSl9LHtmbHVzaDpgcG9zdGAsZGVlcDohMH0pO2xldCBnPW51bGwsXz0oKT0+e2chPW51bGwmJihKbyhuLnN1YlRyZWUudHlwZSk/SW8oKCk9PntpLnNldChnLHFpKG4uc3ViVHJlZSkpfSxuLnN1YlRyZWUuc3VzcGVuc2UpOmkuc2V0KGcscWkobi5zdWJUcmVlKSkpfTtyZXR1cm4gWmkoXyksJGkoXyksZWEoKCk9PntpLmZvckVhY2goZT0+e2xldHtzdWJUcmVlOnQsc3VzcGVuc2U6cn09bixpPXFpKHQpO2lmKGUudHlwZT09PWkudHlwZSYmZS5rZXk9PT1pLmtleSl7S2koaSk7bGV0IGU9aS5jb21wb25lbnQuZGE7ZSYmSW8oZSxyKTtyZXR1cm59cChlKX0pfSksKCk9PntpZihnPW51bGwsIXQuZGVmYXVsdClyZXR1cm4gbz1udWxsO2xldCBuPXQuZGVmYXVsdCgpLHI9blswXTtpZihuLmxlbmd0aD4xKXJldHVybiBvPW51bGwsbjtpZighZ3Mocil8fCEoci5zaGFwZUZsYWcmNCkmJiEoci5zaGFwZUZsYWcmMTI4KSlyZXR1cm4gbz1udWxsLHI7bGV0IHM9cWkocik7aWYocy50eXBlPT09Y3MpcmV0dXJuIG89bnVsbCxzO2xldCBjPXMudHlwZSxsPSRzKElpKHMpP3MudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OmMpLHtpbmNsdWRlOnUsZXhjbHVkZTpkLG1heDpmfT1lO2lmKHUmJighbHx8IVZpKHUsbCkpfHxkJiZsJiZWaShkLGwpKXJldHVybiBzLnNoYXBlRmxhZyY9LTI1NyxvPXMscjtsZXQgcD1zLmtleT09bnVsbD9jOnMua2V5LG09aS5nZXQocCk7cmV0dXJuIHMuZWwmJihzPUNzKHMpLHIuc2hhcGVGbGFnJjEyOCYmKHIuc3NDb250ZW50PXMpKSxnPXAsbT8ocy5lbD1tLmVsLHMuY29tcG9uZW50PW0uY29tcG9uZW50LHMudHJhbnNpdGlvbiYmcmkocyxzLnRyYW5zaXRpb24pLHMuc2hhcGVGbGFnfD01MTIsYS5kZWxldGUocCksYS5hZGQocCkpOihhLmFkZChwKSxmJiZhLnNpemU+cGFyc2VJbnQoZiwxMCkmJmgoYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpKSxzLnNoYXBlRmxhZ3w9MjU2LG89cyxKbyhyLnR5cGUpP3I6c319fTtmdW5jdGlvbiBWaShlLHQpe3JldHVybiBwKGUpP2Uuc29tZShlPT5WaShlLHQpKTp5KGUpP2Uuc3BsaXQoYCxgKS5pbmNsdWRlcyh0KTpfKGUpPyhlLmxhc3RJbmRleD0wLGUudGVzdCh0KSk6ITF9ZnVuY3Rpb24gSGkoZSx0KXtXaShlLGBhYCx0KX1mdW5jdGlvbiBVaShlLHQpe1dpKGUsYGRhYCx0KX1mdW5jdGlvbiBXaShlLHQsbj1Qcyl7bGV0IHI9ZS5fX3dkY3x8PSgpPT57bGV0IHQ9bjtmb3IoO3Q7KXtpZih0LmlzRGVhY3RpdmF0ZWQpcmV0dXJuO3Q9dC5wYXJlbnR9cmV0dXJuIGUoKX07aWYoSmkodCxyLG4pLG4pe2xldCBlPW4ucGFyZW50O2Zvcig7ZSYmZS5wYXJlbnQ7KXppKGUucGFyZW50LnZub2RlKSYmR2kocix0LG4sZSksZT1lLnBhcmVudH19ZnVuY3Rpb24gR2koZSx0LG4scil7bGV0IGk9SmkodCxlLHIsITApO3RhKCgpPT57dShyW3RdLGkpfSxuKX1mdW5jdGlvbiBLaShlKXtlLnNoYXBlRmxhZyY9LTI1NyxlLnNoYXBlRmxhZyY9LTUxM31mdW5jdGlvbiBxaShlKXtyZXR1cm4gZS5zaGFwZUZsYWcmMTI4P2Uuc3NDb250ZW50OmV9ZnVuY3Rpb24gSmkoZSx0LG49UHMscj0hMSl7aWYobil7bGV0IGk9bltlXXx8KG5bZV09W10pLGE9dC5fX3dlaHx8PSguLi5yKT0+e250KCk7bGV0IGk9UnMobiksYT1Ibih0LG4sZSxyKTtyZXR1cm4gaSgpLHJ0KCksYX07cmV0dXJuIHI/aS51bnNoaWZ0KGEpOmkucHVzaChhKSxhfX12YXIgWWk9ZT0+KHQsbj1Qcyk9PnsoIVZzfHxlPT09YHNwYCkmJkppKGUsKC4uLmUpPT50KC4uLmUpLG4pfSxYaT1ZaShgYm1gKSxaaT1ZaShgbWApLFFpPVlpKGBidWApLCRpPVlpKGB1YCksZWE9WWkoYGJ1bWApLHRhPVlpKGB1bWApLG5hPVlpKGBzcGApLHJhPVlpKGBydGdgKSxpYT1ZaShgcnRjYCk7ZnVuY3Rpb24gYWEoZSx0PVBzKXtKaShgZWNgLGUsdCl9dmFyIG9hPWBjb21wb25lbnRzYCxzYT1gZGlyZWN0aXZlc2A7ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gZmEob2EsZSwhMCx0KXx8ZX12YXIgbGE9U3ltYm9sLmZvcihgdi1uZGNgKTtmdW5jdGlvbiB1YShlKXtyZXR1cm4geShlKT9mYShvYSxlLCExKXx8ZTplfHxsYX1mdW5jdGlvbiBkYShlKXtyZXR1cm4gZmEoc2EsZSl9ZnVuY3Rpb24gZmEoZSx0LG49ITAscj0hMSl7bGV0IGk9dXJ8fFBzO2lmKGkpe2xldCBuPWkudHlwZTtpZihlPT09b2Epe2xldCBlPSRzKG4sITEpO2lmKGUmJihlPT09dHx8ZT09PUUodCl8fGU9PT1zZShFKHQpKSkpcmV0dXJuIG59bGV0IGE9cGEoaVtlXXx8bltlXSx0KXx8cGEoaS5hcHBDb250ZXh0W2VdLHQpO3JldHVybiFhJiZyP246YX19ZnVuY3Rpb24gcGEoZSx0KXtyZXR1cm4gZSYmKGVbdF18fGVbRSh0KV18fGVbc2UoRSh0KSldKX1mdW5jdGlvbiBtYShlLHQsbixyKXtsZXQgaSxhPW4mJm5bcl0sbz1wKGUpO2lmKG98fHkoZSkpe2xldCBuPW8mJm5uKGUpLHI9ITEscz0hMTtuJiYocj0hYW4oZSkscz1ybihlKSxlPV90KGUpKSxpPUFycmF5KGUubGVuZ3RoKTtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspaVtuXT10KHI/cz9sbihjbihlW25dKSk6Y24oZVtuXSk6ZVtuXSxuLHZvaWQgMCxhJiZhW25dKX1lbHNlIGlmKHR5cGVvZiBlPT1gbnVtYmVyYCl7aT1BcnJheShlKTtmb3IobGV0IG49MDtuPGU7bisrKWlbbl09dChuKzEsbix2b2lkIDAsYSYmYVtuXSl9ZWxzZSBpZih4KGUpKXtpZihlW1N5bWJvbC5pdGVyYXRvcl0paT1BcnJheS5mcm9tKGUsKGUsbik9PnQoZSxuLHZvaWQgMCxhJiZhW25dKSk7ZWxzZXtsZXQgbj1PYmplY3Qua2V5cyhlKTtpPUFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IHI9MCxvPW4ubGVuZ3RoO3I8bztyKyspe2xldCBvPW5bcl07aVtyXT10KGVbb10sbyxyLGEmJmFbcl0pfX19ZWxzZSBpPVtdO3JldHVybiBuJiYobltyXT1pKSxpfWZ1bmN0aW9uIGhhKGUsdCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCByPXRbbl07aWYocChyKSlmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyllW3JbdF0ubmFtZV09clt0XS5mbjtlbHNlIHImJihlW3IubmFtZV09ci5rZXk/KC4uLmUpPT57bGV0IHQ9ci5mbiguLi5lKTtyZXR1cm4gdCYmKHQua2V5PXIua2V5KSx0fTpyLmZuKX1yZXR1cm4gZX1mdW5jdGlvbiBJKGUsdCxuLHIsaSxhKXtpZihuPz89e30sdXIuY2V8fHVyLnBhcmVudCYmSWkodXIucGFyZW50KSYmdXIucGFyZW50LmNlKXtsZXQgZT1hIT1udWxsJiZuLmtleT09bnVsbD9sKHt9LG4se2tleTphfSk6bixpPU9iamVjdC5rZXlzKGUpLmxlbmd0aD4wO3JldHVybiB0IT09ImRlZmF1bHQiJiYoZS5uYW1lPXQpLFIoKSxCKEwsbnVsbCxbSChgc2xvdGAsZSxyJiZyKCkpXSxpPy0yOjY0KX1sZXQgbz1lW3RdO28mJm8uX2MmJihvLl9kPSExKTtsZXQgcz11cy5sZW5ndGg7UigpO2xldCBjO3RyeXtsZXQgaT1vJiZnYShvKG4pKSxzPW4ua2V5fHxhfHxpJiZpLmtleTtjPUIoTCx7a2V5OihzJiYhYihzKT9zOmBfJHt0fWApKyghaSYmcj9gX2ZiYDpgYCl9LGl8fChyP3IoKTpbXSksaSYmZS5fPT09MT82NDotMil9Y2F0Y2goZSl7Zm9yKGxldCBlPXVzLmxlbmd0aDtlPnM7ZS0tKWZzKCk7dGhyb3cgZX1maW5hbGx5e28mJm8uX2MmJihvLl9kPSEwKX1yZXR1cm4haSYmYy5zY29wZUlkJiYoYy5zbG90U2NvcGVJZHM9W2Muc2NvcGVJZCtgLXNgXSksY31mdW5jdGlvbiBnYShlKXtyZXR1cm4gZS5zb21lKGU9PiFncyhlKXx8IShlLnR5cGU9PT1jc3x8ZS50eXBlPT09TCYmIWdhKGUuY2hpbGRyZW4pKSk/ZTpudWxsfWZ1bmN0aW9uIF9hKGUsdCl7bGV0IG49e307Zm9yKGxldCByIGluIGUpblt0JiYvW0EtWl0vLnRlc3Qocik/YG9uOiR7cn1gOmNlKHIpXT1lW3JdO3JldHVybiBufXZhciB2YT1lPT5lP0JzKGUpP1FzKGUpOnZhKGUucGFyZW50KTpudWxsLHlhPWwoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDplPT5lLCRlbDplPT5lLnZub2RlLmVsLCRkYXRhOmU9PmUuZGF0YSwkcHJvcHM6ZT0+ZS5wcm9wcywkYXR0cnM6ZT0+ZS5hdHRycywkc2xvdHM6ZT0+ZS5zbG90cywkcmVmczplPT5lLnJlZnMsJHBhcmVudDplPT52YShlLnBhcmVudCksJHJvb3Q6ZT0+dmEoZS5yb290KSwkaG9zdDplPT5lLmNlLCRlbWl0OmU9PmUuZW1pdCwkb3B0aW9uczplPT5VYShlKSwkZm9yY2VVcGRhdGU6ZT0+ZS5mfHw9KCk9PntlcihlLnVwZGF0ZSl9LCRuZXh0VGljazplPT5lLm58fD1Rbi5iaW5kKGUucHJveHkpLCR3YXRjaDplPT5Pci5iaW5kKGUpfSksYmE9KGUsdCk9PmUhPT1yJiYhZS5fX2lzU2NyaXB0U2V0dXAmJmYoZSx0KSx4YT17Z2V0KHtfOmV9LHQpe2lmKHQ9PT1gX192X3NraXBgKXJldHVybiEwO2xldHtjdHg6bixzZXR1cFN0YXRlOmksZGF0YTphLHByb3BzOm8sYWNjZXNzQ2FjaGU6cyx0eXBlOmMsYXBwQ29udGV4dDpsfT1lO2lmKHRbMF0hPT1gJGApe2xldCBlPXNbdF07aWYoZSE9PXZvaWQgMClzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBpW3RdO2Nhc2UgMjpyZXR1cm4gYVt0XTtjYXNlIDQ6cmV0dXJuIG5bdF07Y2FzZSAzOnJldHVybiBvW3RdfWVsc2UgaWYoYmEoaSx0KSlyZXR1cm4gc1t0XT0xLGlbdF07ZWxzZSBpZihhIT09ciYmZihhLHQpKXJldHVybiBzW3RdPTIsYVt0XTtlbHNlIGlmKGYobyx0KSlyZXR1cm4gc1t0XT0zLG9bdF07ZWxzZSBpZihuIT09ciYmZihuLHQpKXJldHVybiBzW3RdPTQsblt0XTtlbHNlIFJhJiYoc1t0XT0wKX1sZXQgdT15YVt0XSxkLHA7aWYodSlyZXR1cm4gdD09PWAkYXR0cnNgJiZwdChlLmF0dHJzLGBnZXRgLGBgKSx1KGUpO2lmKChkPWMuX19jc3NNb2R1bGVzKSYmKGQ9ZFt0XSkpcmV0dXJuIGQ7aWYobiE9PXImJmYobix0KSlyZXR1cm4gc1t0XT00LG5bdF07aWYocD1sLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGYocCx0KSlyZXR1cm4gcFt0XX0sc2V0KHtfOmV9LHQsbil7bGV0e2RhdGE6aSxzZXR1cFN0YXRlOmEsY3R4Om99PWU7cmV0dXJuIGJhKGEsdCk/KGFbdF09biwhMCk6aSE9PXImJmYoaSx0KT8oaVt0XT1uLCEwKTpmKGUucHJvcHMsdCl8fHRbMF09PT1gJGAmJnQuc2xpY2UoMSlpbiBlPyExOihvW3RdPW4sITApfSxoYXMoe186e2RhdGE6ZSxzZXR1cFN0YXRlOnQsYWNjZXNzQ2FjaGU6bixjdHg6aSxhcHBDb250ZXh0OmEscHJvcHM6byx0eXBlOnN9fSxjKXtsZXQgbDtyZXR1cm4hIShuW2NdfHxlIT09ciYmY1swXSE9PWAkYCYmZihlLGMpfHxiYSh0LGMpfHxmKG8sYyl8fGYoaSxjKXx8Zih5YSxjKXx8ZihhLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGMpfHwobD1zLl9fY3NzTW9kdWxlcykmJmxbY10pfSxkZWZpbmVQcm9wZXJ0eShlLHQsbil7cmV0dXJuIG4uZ2V0PT1udWxsP2YobixgdmFsdWVgKSYmdGhpcy5zZXQoZSx0LG4udmFsdWUsbnVsbCk6ZS5fLmFjY2Vzc0NhY2hlW3RdPTAsUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsbil9fSxTYT1sKHt9LHhhLHtnZXQoZSx0KXtpZih0IT09U3ltYm9sLnVuc2NvcGFibGVzKXJldHVybiB4YS5nZXQoZSx0LGUpfSxoYXMoZSx0KXtyZXR1cm4gdFswXSE9PWBfYCYmIWhlKHQpfX0pO2Z1bmN0aW9uIENhKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gd2EoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUYShlKXt9ZnVuY3Rpb24gRWEoZSl7fWZ1bmN0aW9uIERhKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gT2EoKXt9ZnVuY3Rpb24ga2EoZSx0KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBYSgpe3JldHVybiBNYShgdXNlU2xvdHNgKS5zbG90c31mdW5jdGlvbiBqYSgpe3JldHVybiBNYShgdXNlQXR0cnNgKS5hdHRyc31mdW5jdGlvbiBNYShlKXtsZXQgdD1GcygpO3JldHVybiB0LnNldHVwQ29udGV4dHx8PVpzKHQpfWZ1bmN0aW9uIE5hKGUpe3JldHVybiBwKGUpP2UucmVkdWNlKChlLHQpPT4oZVt0XT1udWxsLGUpLHt9KTplfWZ1bmN0aW9uIFBhKGUsdCl7bGV0IG49TmEoZSk7Zm9yKGxldCBlIGluIHQpe2lmKGUuc3RhcnRzV2l0aChgX19za2lwYCkpY29udGludWU7bGV0IHI9bltlXTtyP3Aocil8fHYocik/cj1uW2VdPXt0eXBlOnIsZGVmYXVsdDp0W2VdfTpyLmRlZmF1bHQ9dFtlXTpyPT09bnVsbCYmKHI9bltlXT17ZGVmYXVsdDp0W2VdfSksciYmdFtgX19za2lwXyR7ZX1gXSYmKHIuc2tpcEZhY3Rvcnk9ITApfXJldHVybiBufWZ1bmN0aW9uIEZhKGUsdCl7cmV0dXJuIWV8fCF0P2V8fHQ6cChlKSYmcCh0KT9lLmNvbmNhdCh0KTpsKHt9LE5hKGUpLE5hKHQpKX1mdW5jdGlvbiBJYShlLHQpe2xldCBuPXt9O2ZvcihsZXQgciBpbiBlKXQuaW5jbHVkZXMocil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHIse2VudW1lcmFibGU6ITAsZ2V0OigpPT5lW3JdfSk7cmV0dXJuIG59ZnVuY3Rpb24gTGEoZSl7bGV0IHQ9RnMoKSxuPVZzLHI9ZSgpO3pzKCksbiYmTHMoITEpO2xldCBpPSgpPT57UnModCksbiYmTHMoITApfSxhPSgpPT57RnMoKSE9PXQmJnQuc2NvcGUub2ZmKCksenMoKSxuJiZMcyghMSl9O3JldHVybiBTKHIpJiYocj1yLmNhdGNoKGU9Pnt0aHJvdyBpKCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbihhKSksZX0pKSxbciwoKT0+e2koKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGEpfV19dmFyIFJhPSEwO2Z1bmN0aW9uIHphKGUpe2xldCB0PVVhKGUpLG49ZS5wcm94eSxyPWUuY3R4O1JhPSExLHQuYmVmb3JlQ3JlYXRlJiZWYSh0LmJlZm9yZUNyZWF0ZSxlLGBiY2ApO2xldHtkYXRhOmksY29tcHV0ZWQ6byxtZXRob2RzOnMsd2F0Y2g6Yyxwcm92aWRlOmwsaW5qZWN0OnUsY3JlYXRlZDpkLGJlZm9yZU1vdW50OmYsbW91bnRlZDptLGJlZm9yZVVwZGF0ZTpoLHVwZGF0ZWQ6ZyxhY3RpdmF0ZWQ6XyxkZWFjdGl2YXRlZDp5LGJlZm9yZURlc3Ryb3k6YixiZWZvcmVVbm1vdW50OlMsZGVzdHJveWVkOkMsdW5tb3VudGVkOncscmVuZGVyOmVlLHJlbmRlclRyYWNrZWQ6dGUscmVuZGVyVHJpZ2dlcmVkOlQsZXJyb3JDYXB0dXJlZDpuZSxzZXJ2ZXJQcmVmZXRjaDpyZSxleHBvc2U6aWUsaW5oZXJpdEF0dHJzOkUsY29tcG9uZW50czphZSxkaXJlY3RpdmVzOm9lLGZpbHRlcnM6c2V9PXQ7aWYodSYmQmEodSxyLG51bGwpLHMpZm9yKGxldCBlIGluIHMpe2xldCB0PXNbZV07dih0KSYmKHJbZV09dC5iaW5kKG4pKX1pZihpKXtsZXQgdD1pLmNhbGwobixuKTt4KHQpJiYoZS5kYXRhPVp0KHQpKX1pZihSYT0hMCxvKWZvcihsZXQgZSBpbiBvKXtsZXQgdD1vW2VdLGk9Vyh7Z2V0OnYodCk/dC5iaW5kKG4sbik6dih0LmdldCk/dC5nZXQuYmluZChuLG4pOmEsc2V0OiF2KHQpJiZ2KHQuc2V0KT90LnNldC5iaW5kKG4pOmF9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmkudmFsdWUsc2V0OmU9PmkudmFsdWU9ZX0pfWlmKGMpZm9yKGxldCBlIGluIGMpSGEoY1tlXSxyLG4sZSk7aWYobCl7bGV0IGU9dihsKT9sLmNhbGwobik6bDtSZWZsZWN0Lm93bktleXMoZSkuZm9yRWFjaCh0PT57dnIodCxlW3RdKX0pfWQmJlZhKGQsZSxgY2ApO2Z1bmN0aW9uIGNlKGUsdCl7cCh0KT90LmZvckVhY2godD0+ZSh0LmJpbmQobikpKTp0JiZlKHQuYmluZChuKSl9aWYoY2UoWGksZiksY2UoWmksbSksY2UoUWksaCksY2UoJGksZyksY2UoSGksXyksY2UoVWkseSksY2UoYWEsbmUpLGNlKGlhLHRlKSxjZShyYSxUKSxjZShlYSxTKSxjZSh0YSx3KSxjZShuYSxyZSkscChpZSkpe2lmKGllLmxlbmd0aCl7bGV0IHQ9ZS5leHBvc2VkfHw9e307aWUuZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OigpPT5uW2VdLHNldDp0PT5uW2VdPXQsZW51bWVyYWJsZTohMH0pfSl9ZWxzZSBlLmV4cG9zZWR8fD17fX1lZSYmZS5yZW5kZXI9PT1hJiYoZS5yZW5kZXI9ZWUpLEUhPW51bGwmJihlLmluaGVyaXRBdHRycz1FKSxhZSYmKGUuY29tcG9uZW50cz1hZSksb2UmJihlLmRpcmVjdGl2ZXM9b2UpLHJlJiZvaShlKX1mdW5jdGlvbiBCYShlLHQsbj1hKXtwKGUpJiYoZT1KYShlKSk7Zm9yKGxldCBuIGluIGUpe2xldCByPWVbbl0saTtpPXgocik/YGRlZmF1bHRgaW4gcj95cihyLmZyb218fG4sci5kZWZhdWx0LCEwKTp5cihyLmZyb218fG4pOnlyKHIpLGooaSk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pLnZhbHVlLHNldDplPT5pLnZhbHVlPWV9KTp0W25dPWl9fWZ1bmN0aW9uIFZhKGUsdCxuKXtIbihwKGUpP2UubWFwKGU9PmUuYmluZCh0LnByb3h5KSk6ZS5iaW5kKHQucHJveHkpLHQsbil9ZnVuY3Rpb24gSGEoZSx0LG4scil7bGV0IGk9ci5pbmNsdWRlcyhgLmApP2tyKG4scik6KCk9Pm5bcl07aWYoeShlKSl7bGV0IG49dFtlXTt2KG4pJiZFcihpLG4pfWVsc2UgaWYodihlKSlFcihpLGUuYmluZChuKSk7ZWxzZSBpZih4KGUpKXtpZihwKGUpKWUuZm9yRWFjaChlPT5IYShlLHQsbixyKSk7ZWxzZXtsZXQgcj12KGUuaGFuZGxlcik/ZS5oYW5kbGVyLmJpbmQobik6dFtlLmhhbmRsZXJdO3YocikmJkVyKGkscixlKX19fWZ1bmN0aW9uIFVhKGUpe2xldCB0PWUudHlwZSx7bWl4aW5zOm4sZXh0ZW5kczpyfT10LHttaXhpbnM6aSxvcHRpb25zQ2FjaGU6YSxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczpvfX09ZS5hcHBDb250ZXh0LHM9YS5nZXQodCksYztyZXR1cm4gcz9jPXM6IWkubGVuZ3RoJiYhbiYmIXI/Yz10OihjPXt9LGkubGVuZ3RoJiZpLmZvckVhY2goZT0+V2EoYyxlLG8sITApKSxXYShjLHQsbykpLHgodCkmJmEuc2V0KHQsYyksY31mdW5jdGlvbiBXYShlLHQsbixyPSExKXtsZXR7bWl4aW5zOmksZXh0ZW5kczphfT10O2EmJldhKGUsYSxuLCEwKSxpJiZpLmZvckVhY2godD0+V2EoZSx0LG4sITApKTtmb3IobGV0IGkgaW4gdClpZighKHImJmk9PT1gZXhwb3NlYCkpe2xldCByPUdhW2ldfHxuJiZuW2ldO2VbaV09cj9yKGVbaV0sdFtpXSk6dFtpXX1yZXR1cm4gZX12YXIgR2E9e2RhdGE6S2EscHJvcHM6WmEsZW1pdHM6WmEsbWV0aG9kczpYYSxjb21wdXRlZDpYYSxiZWZvcmVDcmVhdGU6WWEsY3JlYXRlZDpZYSxiZWZvcmVNb3VudDpZYSxtb3VudGVkOllhLGJlZm9yZVVwZGF0ZTpZYSx1cGRhdGVkOllhLGJlZm9yZURlc3Ryb3k6WWEsYmVmb3JlVW5tb3VudDpZYSxkZXN0cm95ZWQ6WWEsdW5tb3VudGVkOllhLGFjdGl2YXRlZDpZYSxkZWFjdGl2YXRlZDpZYSxlcnJvckNhcHR1cmVkOllhLHNlcnZlclByZWZldGNoOllhLGNvbXBvbmVudHM6WGEsZGlyZWN0aXZlczpYYSx3YXRjaDpRYSxwcm92aWRlOkthLGluamVjdDpxYX07ZnVuY3Rpb24gS2EoZSx0KXtyZXR1cm4gdD9lP2Z1bmN0aW9uKCl7cmV0dXJuIGwodihlKT9lLmNhbGwodGhpcyx0aGlzKTplLHYodCk/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OnQ6ZX1mdW5jdGlvbiBxYShlLHQpe3JldHVybiBYYShKYShlKSxKYSh0KSl9ZnVuY3Rpb24gSmEoZSl7aWYocChlKSl7bGV0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdFtlW25dXT1lW25dO3JldHVybiB0fXJldHVybiBlfWZ1bmN0aW9uIFlhKGUsdCl7cmV0dXJuIGU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGUsdCkpXTp0fWZ1bmN0aW9uIFhhKGUsdCl7cmV0dXJuIGU/bChPYmplY3QuY3JlYXRlKG51bGwpLGUsdCk6dH1mdW5jdGlvbiBaYShlLHQpe3JldHVybiBlP3AoZSkmJnAodCk/Wy4uLm5ldyBTZXQoWy4uLmUsLi4udF0pXTpsKE9iamVjdC5jcmVhdGUobnVsbCksTmEoZSksTmEodD8/e30pKTp0fWZ1bmN0aW9uIFFhKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0dXJuIGU7bGV0IG49bChPYmplY3QuY3JlYXRlKG51bGwpLGUpO2ZvcihsZXQgciBpbiB0KW5bcl09WWEoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiAkYSgpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOm8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIGVvPTA7ZnVuY3Rpb24gdG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyPW51bGwpe3Yobil8fChuPWwoe30sbikpLHIhPW51bGwmJiF4KHIpJiYocj1udWxsKTtsZXQgaT0kYSgpLGE9bmV3IFdlYWtTZXQsbz1bXSxzPSExLGM9aS5hcHA9e191aWQ6ZW8rKyxfY29tcG9uZW50Om4sX3Byb3BzOnIsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjppYyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmlnKGUpe30sdXNlKGUsLi4udCl7cmV0dXJuIGEuaGFzKGUpfHwoZSYmdihlLmluc3RhbGwpPyhhLmFkZChlKSxlLmluc3RhbGwoYywuLi50KSk6dihlKSYmKGEuYWRkKGUpLGUoYywuLi50KSkpLGN9LG1peGluKGUpe3JldHVybiBpLm1peGlucy5pbmNsdWRlcyhlKXx8aS5taXhpbnMucHVzaChlKSxjfSxjb21wb25lbnQoZSx0KXtyZXR1cm4gdD8oaS5jb21wb25lbnRzW2VdPXQsYyk6aS5jb21wb25lbnRzW2VdfSxkaXJlY3RpdmUoZSx0KXtyZXR1cm4gdD8oaS5kaXJlY3RpdmVzW2VdPXQsYyk6aS5kaXJlY3RpdmVzW2VdfSxtb3VudChhLG8sbCl7aWYoIXMpe2xldCB1PWMuX2NlVk5vZGV8fEgobixyKTtyZXR1cm4gdS5hcHBDb250ZXh0PWksbD09PSEwP2w9YHN2Z2A6bD09PSExJiYobD12b2lkIDApLG8mJnQ/dCh1LGEpOmUodSxhLGwpLHM9ITAsYy5fY29udGFpbmVyPWEsYS5fX3Z1ZV9hcHBfXz1jLFFzKHUuY29tcG9uZW50KX19LG9uVW5tb3VudChlKXtvLnB1c2goZSl9LHVubW91bnQoKXtzJiYoSG4obyxjLl9pbnN0YW5jZSwxNiksZShudWxsLGMuX2NvbnRhaW5lciksZGVsZXRlIGMuX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoZSx0KXtyZXR1cm4gaS5wcm92aWRlc1tlXT10LGN9LHJ1bldpdGhDb250ZXh0KGUpe2xldCB0PW5vO25vPWM7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtubz10fX19O3JldHVybiBjfX12YXIgbm89bnVsbDtmdW5jdGlvbiBybyhlLHQsbj1yKXtsZXQgaT1GcygpLGE9RSh0KSxvPW9lKHQpLHM9aW8oZSxhKSxjPXZuKChzLGMpPT57bGV0IGwsdT1yLGQ7cmV0dXJuIFRyKCgpPT57bGV0IHQ9ZVthXTtEKGwsdCkmJihsPXQsYygpKX0pLHtnZXQoKXtyZXR1cm4gcygpLG4uZ2V0P24uZ2V0KGwpOmx9LHNldChlKXtsZXQgcz1uLnNldD9uLnNldChlKTplO2lmKCFEKHMsbCkmJiEodSE9PXImJkQoZSx1KSkpcmV0dXJuO2xldCBmPWkudm5vZGUucHJvcHMscD0hIShmJiYodCBpbiBmfHxhIGluIGZ8fG8gaW4gZikmJihgb25VcGRhdGU6JHt0fWBpbiBmfHxgb25VcGRhdGU6JHthfWBpbiBmfHxgb25VcGRhdGU6JHtvfWBpbiBmKSk7cHx8KGw9ZSxjKCkpLGkuZW1pdChgdXBkYXRlOiR7dH1gLHMpLEQoZSx1KSYmKEQoZSxzKSYmIUQocyxkKXx8cCYmdSE9PXImJiFEKHMsbCkpJiZjKCksdT1lLGQ9c319fSk7cmV0dXJuIGNbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e2xldCBlPTA7cmV0dXJue25leHQoKXtyZXR1cm4gZTwyP3t2YWx1ZTplKys/c3x8cjpjLGRvbmU6ITF9Ontkb25lOiEwfX19fSxjfXZhciBpbz0oZSx0KT0+dD09PWBtb2RlbFZhbHVlYHx8dD09PWBtb2RlbC12YWx1ZWA/ZS5tb2RlbE1vZGlmaWVyczplW2Ake3R9TW9kaWZpZXJzYF18fGVbYCR7RSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtvZSh0KX1Nb2RpZmllcnNgXTtmdW5jdGlvbiBhbyhlLHQsLi4ubil7aWYoZS5pc1VubW91bnRlZClyZXR1cm47bGV0IGk9ZS52bm9kZS5wcm9wc3x8cixhPW4sbz10LnN0YXJ0c1dpdGgoYHVwZGF0ZTpgKSxzPW8mJmlvKGksdC5zbGljZSg3KSk7cyYmKHMudHJpbSYmKGE9bi5tYXAoZT0+eShlKT9lLnRyaW0oKTplKSkscy5udW1iZXImJihhPW4ubWFwKGRlKSkpO2xldCBjLGw9aVtjPWNlKHQpXXx8aVtjPWNlKEUodCkpXTshbCYmbyYmKGw9aVtjPWNlKG9lKHQpKV0pLGwmJkhuKGwsZSw2LGEpO2xldCB1PWlbYytgT25jZWBdO2lmKHUpe2lmKCFlLmVtaXR0ZWQpZS5lbWl0dGVkPXt9O2Vsc2UgaWYoZS5lbWl0dGVkW2NdKXJldHVybjtlLmVtaXR0ZWRbY109ITAsSG4odSxlLDYsYSl9fXZhciBvbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBzbyhlLHQsbj0hMSl7bGV0IHI9bj9vbzp0LmVtaXRzQ2FjaGUsaT1yLmdldChlKTtpZihpIT09dm9pZCAwKXJldHVybiBpO2xldCBhPWUuZW1pdHMsbz17fSxzPSExO2lmKCF2KGUpKXtsZXQgcj1lPT57bGV0IG49c28oZSx0LCEwKTtuJiYocz0hMCxsKG8sbikpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0Lm1peGlucy5mb3JFYWNoKHIpLGUuZXh0ZW5kcyYmcihlLmV4dGVuZHMpLGUubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKHIpfXJldHVybiFhJiYhcz8oeChlKSYmci5zZXQoZSxudWxsKSxudWxsKToocChhKT9hLmZvckVhY2goZT0+b1tlXT1udWxsKTpsKG8sYSkseChlKSYmci5zZXQoZSxvKSxvKX1mdW5jdGlvbiBjbyhlLHQpe3JldHVybiFlfHwhcyh0KT8hMToodD10LnNsaWNlKDIpLHQ9dD09PWBPbmNlYD90OnQucmVwbGFjZSgvT25jZSQvLGBgKSxmKGUsdFswXS50b0xvd2VyQ2FzZSgpK3Quc2xpY2UoMSkpfHxmKGUsb2UodCkpfHxmKGUsdCkpfWZ1bmN0aW9uIGxvKGUpe2xldHt0eXBlOnQsdm5vZGU6bixwcm94eTpyLHdpdGhQcm94eTppLHByb3BzT3B0aW9uczpbYV0sc2xvdHM6byxhdHRyczpzLGVtaXQ6bCxyZW5kZXI6dSxyZW5kZXJDYWNoZTpkLHByb3BzOmYsZGF0YTpwLHNldHVwU3RhdGU6bSxjdHg6aCxpbmhlcml0QXR0cnM6Z309ZSxfPWZyKGUpLHYseTt0cnl7aWYobi5zaGFwZUZsYWcmNCl7bGV0IGU9aXx8cix0PWU7dj1Fcyh1LmNhbGwodCxlLGQsZixtLHAsaCkpLHk9c31lbHNle2xldCBlPXQ7dj1FcyhlLmxlbmd0aD4xP2UoZix7YXR0cnM6cyxzbG90czpvLGVtaXQ6bH0pOmUoZixudWxsKSkseT10LnByb3BzP3M6Zm8ocyl9fWNhdGNoKHQpe3VzLmxlbmd0aD0wLFVuKHQsZSwxKSx2PUgoY3MpfWxldCBiPXY7aWYoeSYmZyE9PSExKXtsZXQgZT1PYmplY3Qua2V5cyh5KSx7c2hhcGVGbGFnOnR9PWI7ZS5sZW5ndGgmJnQmNyYmKGEmJmUuc29tZShjKSYmKHk9cG8oeSxhKSksYj1DcyhiLHksITEsITApKX1yZXR1cm4gbi5kaXJzJiYoYj1DcyhiLG51bGwsITEsITApLGIuZGlycz1iLmRpcnM/Yi5kaXJzLmNvbmNhdChuLmRpcnMpOm4uZGlycyksbi50cmFuc2l0aW9uJiZyaShNcihiLnR5cGUpJiZuaShiKXx8YixuLnRyYW5zaXRpb24pLHY9YixmcihfKSx2fWZ1bmN0aW9uIHVvKGUsdD0hMCl7bGV0IG47Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoZ3Mocikpe2lmKHIudHlwZSE9PWNzfHxyLmNoaWxkcmVuPT09YHYtaWZgKXtpZihuKXJldHVybjtuPXJ9fWVsc2UgcmV0dXJufXJldHVybiBufXZhciBmbz1lPT57bGV0IHQ7Zm9yKGxldCBuIGluIGUpKG49PT1gY2xhc3NgfHxuPT09YHN0eWxlYHx8cyhuKSkmJigodHx8PXt9KVtuXT1lW25dKTtyZXR1cm4gdH0scG89KGUsdCk9PntsZXQgbj17fTtmb3IobGV0IHIgaW4gZSkoIWMocil8fCEoci5zbGljZSg5KWluIHQpKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59O2Z1bmN0aW9uIG1vKGUsdCxuKXtsZXR7cHJvcHM6cixjaGlsZHJlbjppLGNvbXBvbmVudDphfT1lLHtwcm9wczpvLGNoaWxkcmVuOnMscGF0Y2hGbGFnOmN9PXQsbD1hLmVtaXRzT3B0aW9ucztpZih0LmRpcnN8fHQudHJhbnNpdGlvbilyZXR1cm4hMDtpZihuJiZjPj0wKXtpZihjJjEwMjQpcmV0dXJuITA7aWYoYyYxNilyZXR1cm4gcj9obyhyLG8sbCk6ISFvO2lmKGMmOCl7bGV0IGU9dC5keW5hbWljUHJvcHM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF07aWYoZ28obyxyLG4pJiYhY28obCxuKSlyZXR1cm4hMH19fWVsc2UgcmV0dXJuKGl8fHMpJiYoIXN8fCFzLiRzdGFibGUpPyEwOnI9PT1vPyExOnI/IW98fGhvKHIsbyxsKTohIW87cmV0dXJuITF9ZnVuY3Rpb24gaG8oZSx0LG4pe2xldCByPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgYT1yW2ldO2lmKGdvKHQsZSxhKSYmIWNvKG4sYSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZ28oZSx0LG4pe2xldCByPWVbbl0saT10W25dO3JldHVybiBuPT09YHN0eWxlYCYmeChyKSYmeChpKT8hRWUocixpKTpyIT09aX1mdW5jdGlvbiBfbyh7dm5vZGU6ZSxwYXJlbnQ6dCxzdXNwZW5zZTpufSxyKXtmb3IoO3Q7KXtsZXQgbj10LnN1YlRyZWU7aWYobi5zdXNwZW5zZSYmbi5zdXNwZW5zZS5hY3RpdmVCcmFuY2g9PT1lJiYobi5zdXNwZW5zZS52bm9kZS5lbD1uLmVsPXIsZT1uKSxuPT09ZSkoZT10LnZub2RlKS5lbD1yLHQ9dC5wYXJlbnQ7ZWxzZSBicmVha31uJiZuLmFjdGl2ZUJyYW5jaD09PWUmJihuLnZub2RlLmVsPXIpfXZhciB2bz17fSx5bz0oKT0+T2JqZWN0LmNyZWF0ZSh2byksYm89ZT0+T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09dm87ZnVuY3Rpb24geG8oZSx0LG4scj0hMSl7bGV0IGk9e30sYT15bygpO2UucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLENvKGUsdCxpLGEpO2ZvcihsZXQgdCBpbiBlLnByb3BzT3B0aW9uc1swXSl0IGluIGl8fChpW3RdPXZvaWQgMCk7ZS5wcm9wcz1uP3I/aTpRdChpKTplLnR5cGUucHJvcHM/aTphLGUuYXR0cnM9YX1mdW5jdGlvbiBTbyhlLHQsbixyKXtsZXR7cHJvcHM6aSxhdHRyczphLHZub2RlOntwYXRjaEZsYWc6b319PWUscz1BKGkpLFtjXT1lLnByb3BzT3B0aW9ucyxsPSExO2lmKChyfHxvPjApJiYhKG8mMTYpKXtpZihvJjgpe2xldCBuPWUudm5vZGUuZHluYW1pY1Byb3BzO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKXtsZXQgbz1uW3JdO2lmKGNvKGUuZW1pdHNPcHRpb25zLG8pKWNvbnRpbnVlO2xldCB1PXRbb107aWYoYyl7aWYoZihhLG8pKXUhPT1hW29dJiYoYVtvXT11LGw9ITApO2Vsc2V7bGV0IHQ9RShvKTtpW3RdPXdvKGMscyx0LHUsZSwhMSl9fWVsc2UgdSE9PWFbb10mJihhW29dPXUsbD0hMCl9fX1lbHNle0NvKGUsdCxpLGEpJiYobD0hMCk7bGV0IHI7Zm9yKGxldCBhIGluIHMpKCF0fHwhZih0LGEpJiYoKHI9b2UoYSkpPT09YXx8IWYodCxyKSkpJiYoYz9uJiYoblthXSE9PXZvaWQgMHx8bltyXSE9PXZvaWQgMCkmJihpW2FdPXdvKGMscyxhLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIGlbYV0pO2lmKGEhPT1zKWZvcihsZXQgZSBpbiBhKSghdHx8IWYodCxlKSkmJihkZWxldGUgYVtlXSxsPSEwKX1sJiZtdChlLmF0dHJzLGBzZXRgLGBgKX1mdW5jdGlvbiBDbyhlLHQsbixpKXtsZXRbYSxvXT1lLnByb3BzT3B0aW9ucyxzPSExLGM7aWYodClmb3IobGV0IHIgaW4gdCl7aWYobmUocikpY29udGludWU7bGV0IGw9dFtyXSx1O2EmJmYoYSx1PUUocikpPyFvfHwhby5pbmNsdWRlcyh1KT9uW3VdPWw6KGN8fD17fSlbdV09bDpjbyhlLmVtaXRzT3B0aW9ucyxyKXx8KCEociBpbiBpKXx8bCE9PWlbcl0pJiYoaVtyXT1sLHM9ITApfWlmKG8pe2xldCB0PUEobiksaT1jfHxyO2ZvcihsZXQgcj0wO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdO25bc109d28oYSx0LHMsaVtzXSxlLCFmKGkscykpfX1yZXR1cm4gc31mdW5jdGlvbiB3byhlLHQsbixyLGksYSl7bGV0IG89ZVtuXTtpZihvIT1udWxsKXtsZXQgZT1mKG8sYGRlZmF1bHRgKTtpZihlJiZyPT09dm9pZCAwKXtsZXQgZT1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiFvLnNraXBGYWN0b3J5JiZ2KGUpKXtsZXR7cHJvcHNEZWZhdWx0czphfT1pO2lmKG4gaW4gYSlyPWFbbl07ZWxzZXtsZXQgbz1ScyhpKTtyPWFbbl09ZS5jYWxsKG51bGwsdCksbygpfX1lbHNlIHI9ZTtpLmNlJiZpLmNlLl9zZXRQcm9wKG4scil9b1swXSYmKGEmJiFlP3I9ITE6b1sxXSYmKHI9PT1gYHx8cj09PW9lKG4pKSYmKHI9ITApKX1yZXR1cm4gcn12YXIgVG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRW8oZSx0LG49ITEpe2xldCBhPW4/VG86dC5wcm9wc0NhY2hlLG89YS5nZXQoZSk7aWYobylyZXR1cm4gbztsZXQgcz1lLnByb3BzLGM9e30sdT1bXSxkPSExO2lmKCF2KGUpKXtsZXQgcj1lPT57ZD0hMDtsZXRbbixyXT1FbyhlLHQsITApO2woYyxuKSxyJiZ1LnB1c2goLi4ucil9OyFuJiZ0Lm1peGlucy5sZW5ndGgmJnQubWl4aW5zLmZvckVhY2gociksZS5leHRlbmRzJiZyKGUuZXh0ZW5kcyksZS5taXhpbnMmJmUubWl4aW5zLmZvckVhY2gocil9aWYoIXMmJiFkKXJldHVybiB4KGUpJiZhLnNldChlLGkpLGk7aWYocChzKSlmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKyl7bGV0IHQ9RShzW2VdKTtEbyh0KSYmKGNbdF09cil9ZWxzZSBpZihzKWZvcihsZXQgZSBpbiBzKXtsZXQgdD1FKGUpO2lmKERvKHQpKXtsZXQgbj1zW2VdLHI9Y1t0XT1wKG4pfHx2KG4pP3t0eXBlOm59Omwoe30sbiksaT1yLnR5cGUsYT0hMSxvPSEwO2lmKHAoaSkpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDsrK2Upe2xldCB0PWlbZV0sbj12KHQpJiZ0Lm5hbWU7aWYobj09PWBCb29sZWFuYCl7YT0hMDticmVha31uPT09YFN0cmluZ2AmJihvPSExKX1lbHNlIGE9dihpKSYmaS5uYW1lPT09YEJvb2xlYW5gO3JbMF09YSxyWzFdPW8sKGF8fGYocixgZGVmYXVsdGApKSYmdS5wdXNoKHQpfX1sZXQgbT1bYyx1XTtyZXR1cm4geChlKSYmYS5zZXQoZSxtKSxtfWZ1bmN0aW9uIERvKGUpe3JldHVybiBlWzBdIT09YCRgJiYhbmUoZSl9dmFyIE9vPWU9PmU9PT1gX2B8fGU9PT1gX2N0eGB8fGU9PT1gJHN0YWJsZWAsa289ZT0+cChlKT9lLm1hcChFcyk6W0VzKGUpXSxBbz0oZSx0LG4pPT57aWYodC5fbilyZXR1cm4gdDtsZXQgcj1QKCguLi5lKT0+a28odCguLi5lKSksbik7cmV0dXJuIHIuX2M9ITEscn0sam89KGUsdCxuKT0+e2xldCByPWUuX2N0eDtmb3IobGV0IG4gaW4gZSl7aWYoT28obikpY29udGludWU7bGV0IGk9ZVtuXTtpZih2KGkpKXRbbl09QW8obixpLHIpO2Vsc2UgaWYoaSE9bnVsbCl7bGV0IGU9a28oaSk7dFtuXT0oKT0+ZX19fSxNbz0oZSx0KT0+e2xldCBuPWtvKHQpO2Uuc2xvdHMuZGVmYXVsdD0oKT0+bn0sTm89KGUsdCxuKT0+e2ZvcihsZXQgciBpbiB0KShufHwhT28ocikpJiYoZVtyXT10W3JdKX0sUG89KGUsdCxuKT0+e2xldCByPWUuc2xvdHM9eW8oKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7bGV0IGU9dC5fO2U/KE5vKHIsdCxuKSxuJiZ1ZShyLGBfYCxlLCEwKSk6am8odCxyKX1lbHNlIHQmJk1vKGUsdCl9LEZvPShlLHQsbik9PntsZXR7dm5vZGU6aSxzbG90czphfT1lLG89ITAscz1yO2lmKGkuc2hhcGVGbGFnJjMyKXtsZXQgZT10Ll87ZT9uJiZlPT09MT9vPSExOk5vKGEsdCxuKToobz0hdC4kc3RhYmxlLGpvKHQsYSkpLHM9dH1lbHNlIHQmJihNbyhlLHQpLHM9e2RlZmF1bHQ6MX0pO2lmKG8pZm9yKGxldCBlIGluIGEpIU9vKGUpJiZzW2VdPT1udWxsJiZkZWxldGUgYVtlXX0sSW89aXM7ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIHpvKGUpfWZ1bmN0aW9uIFJvKGUpe3JldHVybiB6byhlLHZpKX1mdW5jdGlvbiB6byhlLHQpe2xldCBuPW1lKCk7bi5fX1ZVRV9fPSEwO2xldHtpbnNlcnQ6byxyZW1vdmU6cyxwYXRjaFByb3A6YyxjcmVhdGVFbGVtZW50OmwsY3JlYXRlVGV4dDp1LGNyZWF0ZUNvbW1lbnQ6ZCxzZXRUZXh0OmYsc2V0RWxlbWVudFRleHQ6cCxwYXJlbnROb2RlOm0sbmV4dFNpYmxpbmc6aCxzZXRTY29wZUlkOmc9YSxpbnNlcnRTdGF0aWNDb250ZW50Ol99PWUsdj0oZSx0LG4scj1udWxsLGk9bnVsbCxhPW51bGwsbz12b2lkIDAscz1udWxsLGM9ISF0LmR5bmFtaWNDaGlsZHJlbik9PntpZihlPT09dClyZXR1cm47ZSYmIV9zKGUsdCkmJihyPU8oZSksZ2UoZSxpLGEsITApLGU9bnVsbCksdC5wYXRjaEZsYWc9PT0tMiYmKGM9ITEsdC5keW5hbWljQ2hpbGRyZW49bnVsbCk7bGV0e3R5cGU6bCxyZWY6dSxzaGFwZUZsYWc6ZH09dDtzd2l0Y2gobCl7Y2FzZSBzczp5KGUsdCxuLHIpO2JyZWFrO2Nhc2UgY3M6YihlLHQsbixyKTticmVhaztjYXNlIGxzOmU/P3godCxuLHIsbyk7YnJlYWs7Y2FzZSBMOmFlKGUsdCxuLHIsaSxhLG8scyxjKTticmVhaztkZWZhdWx0OmQmMT93KGUsdCxuLHIsaSxhLG8scyxjKTpkJjY/b2UoZSx0LG4scixpLGEsbyxzLGMpOihkJjY0fHxkJjEyOCkmJmwucHJvY2VzcyhlLHQsbixyLGksYSxvLHMsYyxDZSl9dSE9bnVsbCYmaT91aSh1LGUmJmUucmVmLGEsdHx8ZSwhdCk6dT09bnVsbCYmZSYmZS5yZWYhPW51bGwmJnVpKGUucmVmLG51bGwsYSxlLCEwKX0seT0oZSx0LG4scik9PntpZihlPT1udWxsKW8odC5lbD11KHQuY2hpbGRyZW4pLG4scik7ZWxzZXtsZXQgbj10LmVsPWUuZWw7dC5jaGlsZHJlbiE9PWUuY2hpbGRyZW4mJmYobix0LmNoaWxkcmVuKX19LGI9KGUsdCxuLHIpPT57ZT09bnVsbD9vKHQuZWw9ZCh0LmNoaWxkcmVufHxgYCksbixyKTp0LmVsPWUuZWx9LHg9KGUsdCxuLHIpPT57W2UuZWwsZS5hbmNob3JdPV8oZS5jaGlsZHJlbix0LG4scixlLmVsLGUuYW5jaG9yKX0sUz0oe2VsOmUsYW5jaG9yOnR9LG4scik9PntsZXQgaTtmb3IoO2UmJmUhPT10OylpPWgoZSksbyhlLG4sciksZT1pO28odCxuLHIpfSxDPSh7ZWw6ZSxhbmNob3I6dH0pPT57bGV0IG47Zm9yKDtlJiZlIT09dDspbj1oKGUpLHMoZSksZT1uO3ModCl9LHc9KGUsdCxuLHIsaSxhLG8scyxjKT0+e2lmKHQudHlwZT09PWBzdmdgP289YHN2Z2A6dC50eXBlPT09YG1hdGhgJiYobz1gbWF0aG1sYCksZT09bnVsbCllZSh0LG4scixpLGEsbyxzLGMpO2Vsc2V7bGV0IG49ZS5lbCYmZS5lbC5faXNWdWVDRT9lLmVsOm51bGw7dHJ5e24mJm4uX2JlZ2luUGF0Y2goKSxyZShlLHQsaSxhLG8scyxjKX1maW5hbGx5e24mJm4uX2VuZFBhdGNoKCl9fX0sZWU9KGUsdCxuLHIsaSxhLHMsdSk9PntsZXQgZCxmLHtwcm9wczptLHNoYXBlRmxhZzpoLHRyYW5zaXRpb246ZyxkaXJzOl99PWU7aWYoZD1lLmVsPWwoZS50eXBlLGEsbSYmbS5pcyxtKSxoJjg/cChkLGUuY2hpbGRyZW4pOmgmMTYmJlQoZS5jaGlsZHJlbixkLG51bGwscixpLEJvKGUsYSkscyx1KSxfJiZfcihlLG51bGwscixgY3JlYXRlZGApLHRlKGQsZSxlLnNjb3BlSWQscyxyKSxtKXtmb3IobGV0IGUgaW4gbSllIT09YHZhbHVlYCYmIW5lKGUpJiZjKGQsZSxudWxsLG1bZV0sYSxyKTtgdmFsdWVgaW4gbSYmYyhkLGB2YWx1ZWAsbnVsbCxtLnZhbHVlLGEpLChmPW0ub25Wbm9kZUJlZm9yZU1vdW50KSYmQXMoZixyLGUpfV8mJl9yKGUsbnVsbCxyLGBiZWZvcmVNb3VudGApO2xldCB2PUhvKGksZyk7diYmZy5iZWZvcmVFbnRlcihkKSxvKGQsdCxuKSwoKGY9bSYmbS5vblZub2RlTW91bnRlZCl8fHZ8fF8pJiZJbygoKT0+e3RyeXtmJiZBcyhmLHIsZSksdiYmZy5lbnRlcihkKSxfJiZfcihlLG51bGwscixgbW91bnRlZGApfWZpbmFsbHl7fX0saSl9LHRlPShlLHQsbixyLGkpPT57aWYobiYmZyhlLG4pLHIpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0KyspZyhlLHJbdF0pO2lmKGkpe2xldCBuPWkuc3ViVHJlZTtpZih0PT09bnx8Sm8obi50eXBlKSYmKG4uc3NDb250ZW50PT09dHx8bi5zc0ZhbGxiYWNrPT09dCkpe2xldCB0PWkudm5vZGU7dGUoZSx0LHQuc2NvcGVJZCx0LnNsb3RTY29wZUlkcyxpLnBhcmVudCl9fX0sVD0oZSx0LG4scixpLGEsbyxzLGM9MCk9Pntmb3IobGV0IGw9YztsPGUubGVuZ3RoO2wrKyl7bGV0IGM9ZVtsXT1zP0RzKGVbbF0pOkVzKGVbbF0pO3YobnVsbCxjLHQsbixyLGksYSxvLHMpfX0scmU9KGUsdCxuLGksYSxvLHMpPT57bGV0IGw9dC5lbD1lLmVsLHtwYXRjaEZsYWc6dSxkeW5hbWljQ2hpbGRyZW46ZCxkaXJzOmZ9PXQ7dXw9ZS5wYXRjaEZsYWcmMTY7bGV0IG09ZS5wcm9wc3x8cixoPXQucHJvcHN8fHIsZztpZihuJiZWbyhuLCExKSwoZz1oLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZBcyhnLG4sdCxlKSxmJiZfcih0LGUsbixgYmVmb3JlVXBkYXRlYCksbiYmVm8obiwhMCksZCYmKCFlLmR5bmFtaWNDaGlsZHJlbnx8ZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoIT09ZC5sZW5ndGgpJiYodT0wLHM9ITEsZD1udWxsKSwobS5pbm5lckhUTUwmJmguaW5uZXJIVE1MPT1udWxsfHxtLnRleHRDb250ZW50JiZoLnRleHRDb250ZW50PT1udWxsKSYmcChsLGBgKSxkP2llKGUuZHluYW1pY0NoaWxkcmVuLGQsbCxuLGksQm8odCxhKSxvKTpzfHxkZShlLHQsbCxudWxsLG4saSxCbyh0LGEpLG8sITEpLHU+MCl7aWYodSYxNilFKGwsbSxoLG4sYSk7ZWxzZSBpZih1JjImJm0uY2xhc3MhPT1oLmNsYXNzJiZjKGwsYGNsYXNzYCxudWxsLGguY2xhc3MsYSksdSY0JiZjKGwsYHN0eWxlYCxtLnN0eWxlLGguc3R5bGUsYSksdSY4KXtsZXQgZT10LmR5bmFtaWNQcm9wcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XSxpPW1bcl0sbz1oW3JdOyhvIT09aXx8cj09PWB2YWx1ZWApJiZjKGwscixpLG8sYSxuKX19dSYxJiZlLmNoaWxkcmVuIT09dC5jaGlsZHJlbiYmcChsLHQuY2hpbGRyZW4pfWVsc2UhcyYmZD09bnVsbCYmRShsLG0saCxuLGEpOygoZz1oLm9uVm5vZGVVcGRhdGVkKXx8ZikmJklvKCgpPT57ZyYmQXMoZyxuLHQsZSksZiYmX3IodCxlLG4sYHVwZGF0ZWRgKX0saSl9LGllPShlLHQsbixyLGksYSxvKT0+e2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXtsZXQgYz1lW3NdLGw9dFtzXSx1PWMuZWwmJihjLnR5cGU9PT1MfHwhX3MoYyxsKXx8Yy5zaGFwZUZsYWcmMTk4KT9tKGMuZWwpOm47dihjLGwsdSxudWxsLHIsaSxhLG8sITApfX0sRT0oZSx0LG4saSxhKT0+e2lmKHQhPT1uKXtpZih0IT09cilmb3IobGV0IHIgaW4gdCkhbmUocikmJiEociBpbiBuKSYmYyhlLHIsdFtyXSxudWxsLGEsaSk7Zm9yKGxldCByIGluIG4pe2lmKG5lKHIpKWNvbnRpbnVlO2xldCBvPW5bcl0scz10W3JdO28hPT1zJiZyIT09YHZhbHVlYCYmYyhlLHIscyxvLGEsaSl9YHZhbHVlYGluIG4mJmMoZSxgdmFsdWVgLHQudmFsdWUsbi52YWx1ZSxhKX19LGFlPShlLHQsbixyLGksYSxzLGMsbCk9PntsZXQgZD10LmVsPWU/ZS5lbDp1KGBgKSxmPXQuYW5jaG9yPWU/ZS5hbmNob3I6dShgYCkse3BhdGNoRmxhZzpwLGR5bmFtaWNDaGlsZHJlbjptLHNsb3RTY29wZUlkczpofT10O2gmJihjPWM/Yy5jb25jYXQoaCk6aCksZT09bnVsbD8obyhkLG4sciksbyhmLG4sciksVCh0LmNoaWxkcmVufHxbXSxuLGYsaSxhLHMsYyxsKSk6cD4wJiZwJjY0JiZtJiZlLmR5bmFtaWNDaGlsZHJlbiYmZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoPT09bS5sZW5ndGg/KGllKGUuZHluYW1pY0NoaWxkcmVuLG0sbixpLGEscyxjKSwodC5rZXkhPW51bGx8fGkmJnQ9PT1pLnN1YlRyZWUpJiZVbyhlLHQsITApKTpkZShlLHQsbixmLGksYSxzLGMsbCl9LG9lPShlLHQsbixyLGksYSxvLHMsYyk9Pnt0LnNsb3RTY29wZUlkcz1zLGU9PW51bGw/dC5zaGFwZUZsYWcmNTEyP2kuY3R4LmFjdGl2YXRlKHQsbixyLG8sYyk6c2UodCxuLHIsaSxhLG8sYyk6Y2UoZSx0LGMpfSxzZT0oZSx0LG4scixpLGEsbyk9PntsZXQgcz1lLmNvbXBvbmVudD1OcyhlLHIsaSk7aWYoemkoZSkmJihzLmN0eC5yZW5kZXJlcj1DZSksSHMocywhMSxvKSxzLmFzeW5jRGVwKXtpZihpJiZpLnJlZ2lzdGVyRGVwKHMsRCxvKSwhZS5lbCl7bGV0IHI9cy5zdWJUcmVlPUgoY3MpO2IobnVsbCxyLHQsbiksZS5wbGFjZWhvbGRlcj1yLmVsfX1lbHNlIEQocyxlLHQsbixpLGEsbyl9LGNlPShlLHQsbik9PntsZXQgcj10LmNvbXBvbmVudD1lLmNvbXBvbmVudDtpZihtbyhlLHQsbikpe2lmKHIuYXN5bmNEZXAmJiFyLmFzeW5jUmVzb2x2ZWQpe3VlKHIsdCxuKTtyZXR1cm59ci5uZXh0PXQsci51cGRhdGUoKX1lbHNlIHQuZWw9ZS5lbCxyLnZub2RlPXR9LEQ9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9KCk9PntpZihlLmlzTW91bnRlZCl7bGV0e25leHQ6dCxidTpuLHU6cixwYXJlbnQ6cyx2bm9kZTpjfT1lO3tsZXQgbj1HbyhlKTtpZihuKXt0JiYodC5lbD1jLmVsLHVlKGUsdCxvKSksbi5hc3luY0RlcC50aGVuKCgpPT57SW8oKCk9PntlLmlzVW5tb3VudGVkfHxsKCl9LGkpfSk7cmV0dXJufX1sZXQgdT10LGQ7Vm8oZSwhMSksdD8odC5lbD1jLmVsLHVlKGUsdCxvKSk6dD1jLG4mJmxlKG4pLChkPXQucHJvcHMmJnQucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJkFzKGQscyx0LGMpLFZvKGUsITApO2xldCBmPWxvKGUpLHA9ZS5zdWJUcmVlO2Uuc3ViVHJlZT1mLHYocCxmLG0ocC5lbCksTyhwKSxlLGksYSksdC5lbD1mLmVsLHU9PT1udWxsJiZfbyhlLGYuZWwpLHImJklvKHIsaSksKGQ9dC5wcm9wcyYmdC5wcm9wcy5vblZub2RlVXBkYXRlZCkmJklvKCgpPT5BcyhkLHMsdCxjKSxpKX1lbHNle2xldCBvLHtlbDpzLHByb3BzOmN9PXQse2JtOmwsbTp1LHBhcmVudDpkLHJvb3Q6Zix0eXBlOnB9PWUsbT1JaSh0KTtpZihWbyhlLCExKSxsJiZsZShsKSwhbSYmKG89YyYmYy5vblZub2RlQmVmb3JlTW91bnQpJiZBcyhvLGQsdCksVm8oZSwhMCkscyYmVGUpe2xldCB0PSgpPT57ZS5zdWJUcmVlPWxvKGUpLFRlKHMsZS5zdWJUcmVlLGUsaSxudWxsKX07bSYmcC5fX2FzeW5jSHlkcmF0ZT9wLl9fYXN5bmNIeWRyYXRlKHMsZSx0KTp0KCl9ZWxzZXtmLmNlJiZmLmNlLl9oYXNTaGFkb3dSb290KCkmJmYuY2UuX2luamVjdENoaWxkU3R5bGUocCxlLnBhcmVudD9lLnBhcmVudC50eXBlOnZvaWQgMCk7bGV0IG89ZS5zdWJUcmVlPWxvKGUpO3YobnVsbCxvLG4scixlLGksYSksdC5lbD1vLmVsfWlmKHUmJklvKHUsaSksIW0mJihvPWMmJmMub25Wbm9kZU1vdW50ZWQpKXtsZXQgZT10O0lvKCgpPT5BcyhvLGQsZSksaSl9KHQuc2hhcGVGbGFnJjI1Nnx8ZCYmSWkoZC52bm9kZSkmJmQudm5vZGUuc2hhcGVGbGFnJjI1NikmJmUuYSYmSW8oZS5hLGkpLGUuaXNNb3VudGVkPSEwLHQ9bj1yPW51bGx9fTtlLnNjb3BlLm9uKCk7bGV0IGM9ZS5lZmZlY3Q9bmV3IHplKHMpO2Uuc2NvcGUub2ZmKCk7bGV0IGw9ZS51cGRhdGU9Yy5ydW4uYmluZChjKSx1PWUuam9iPWMucnVuSWZEaXJ0eS5iaW5kKGMpO3UuaT1lLHUuaWQ9ZS51aWQsYy5zY2hlZHVsZXI9KCk9PmVyKHUpLFZvKGUsITApLGwoKX0sdWU9KGUsdCxuKT0+e3QuY29tcG9uZW50PWU7bGV0IHI9ZS52bm9kZS5wcm9wcztlLnZub2RlPXQsZS5uZXh0PW51bGwsU28oZSx0LnByb3BzLHIsbiksRm8oZSx0LmNoaWxkcmVuLG4pLG50KCkscnIoZSkscnQoKX0sZGU9KGUsdCxuLHIsaSxhLG8scyxjPSExKT0+e2xldCBsPWUmJmUuY2hpbGRyZW4sdT1lP2Uuc2hhcGVGbGFnOjAsZD10LmNoaWxkcmVuLHtwYXRjaEZsYWc6ZixzaGFwZUZsYWc6bX09dDtpZihmPjApe2lmKGYmMTI4KXtwZShsLGQsbixyLGksYSxvLHMsYyk7cmV0dXJufWlmKGYmMjU2KXtmZShsLGQsbixyLGksYSxvLHMsYyk7cmV0dXJufX1tJjg/KHUmMTYmJmJlKGwsaSxhKSxkIT09bCYmcChuLGQpKTp1JjE2P20mMTY/cGUobCxkLG4scixpLGEsbyxzLGMpOmJlKGwsaSxhLCEwKToodSY4JiZwKG4sYGApLG0mMTYmJlQoZCxuLHIsaSxhLG8scyxjKSl9LGZlPShlLHQsbixyLGEsbyxzLGMsbCk9PntlfHw9aSx0fHw9aTtsZXQgdT1lLmxlbmd0aCxkPXQubGVuZ3RoLGY9TWF0aC5taW4odSxkKSxwO2ZvcihwPTA7cDxmO3ArKyl7bGV0IHI9dFtwXT1sP0RzKHRbcF0pOkVzKHRbcF0pO3YoZVtwXSxyLG4sbnVsbCxhLG8scyxjLGwpfXU+ZD9iZShlLGEsbywhMCwhMSxmKTpUKHQsbixyLGEsbyxzLGMsbCxmKX0scGU9KGUsdCxuLHIsYSxvLHMsYyxsKT0+e2xldCB1PTAsZD10Lmxlbmd0aCxmPWUubGVuZ3RoLTEscD1kLTE7Zm9yKDt1PD1mJiZ1PD1wOyl7bGV0IHI9ZVt1XSxpPXRbdV09bD9Ecyh0W3VdKTpFcyh0W3VdKTtpZihfcyhyLGkpKXYocixpLG4sbnVsbCxhLG8scyxjLGwpO2Vsc2UgYnJlYWs7dSsrfWZvcig7dTw9ZiYmdTw9cDspe2xldCByPWVbZl0saT10W3BdPWw/RHModFtwXSk6RXModFtwXSk7aWYoX3MocixpKSl2KHIsaSxuLG51bGwsYSxvLHMsYyxsKTtlbHNlIGJyZWFrO2YtLSxwLS19aWYodT5mKXtpZih1PD1wKXtsZXQgZT1wKzEsaT1lPGQ/dFtlXS5lbDpyO2Zvcig7dTw9cDspdihudWxsLHRbdV09bD9Ecyh0W3VdKTpFcyh0W3VdKSxuLGksYSxvLHMsYyxsKSx1Kyt9fWVsc2UgaWYodT5wKWZvcig7dTw9ZjspZ2UoZVt1XSxhLG8sITApLHUrKztlbHNle2xldCBtPXUsaD11LGc9bmV3IE1hcDtmb3IodT1oO3U8PXA7dSsrKXtsZXQgZT10W3VdPWw/RHModFt1XSk6RXModFt1XSk7ZS5rZXkhPW51bGwmJmcuc2V0KGUua2V5LHUpfWxldCBfLHk9MCxiPXAtaCsxLHg9ITEsUz0wLEM9QXJyYXkoYik7Zm9yKHU9MDt1PGI7dSsrKUNbdV09MDtmb3IodT1tO3U8PWY7dSsrKXtsZXQgcj1lW3VdO2lmKHk+PWIpe2dlKHIsYSxvLCEwKTtjb250aW51ZX1sZXQgaTtpZihyLmtleSE9bnVsbClpPWcuZ2V0KHIua2V5KTtlbHNlIGZvcihfPWg7Xzw9cDtfKyspaWYoQ1tfLWhdPT09MCYmX3Mocix0W19dKSl7aT1fO2JyZWFrfWk9PT12b2lkIDA/Z2UocixhLG8sITApOihDW2ktaF09dSsxLGk+PVM/Uz1pOng9ITAsdihyLHRbaV0sbixudWxsLGEsbyxzLGMsbCkseSsrKX1sZXQgdz14P1dvKEMpOmk7Zm9yKF89dy5sZW5ndGgtMSx1PWItMTt1Pj0wO3UtLSl7bGV0IGU9aCt1LGk9dFtlXSxmPXRbZSsxXSxwPWUrMTxkP2YuZWx8fHFvKGYpOnI7Q1t1XT09PTA/dihudWxsLGksbixwLGEsbyxzLGMsbCk6eCYmKF88MHx8dSE9PXdbX10/aGUoaSxuLHAsMik6Xy0tKX19fSxoZT0oZSx0LG4scixpPW51bGwpPT57bGV0e2VsOmEsdHlwZTpjLHRyYW5zaXRpb246bCxjaGlsZHJlbjp1LHNoYXBlRmxhZzpkfT1lO2lmKGQmNil7aGUoZS5jb21wb25lbnQuc3ViVHJlZSx0LG4scik7cmV0dXJufWlmKGQmMTI4KXtlLnN1c3BlbnNlLm1vdmUodCxuLHIpO3JldHVybn1pZihkJjY0KXtjLm1vdmUoZSx0LG4sQ2UpO3JldHVybn1pZihjPT09TCl7byhhLHQsbik7Zm9yKGxldCBlPTA7ZTx1Lmxlbmd0aDtlKyspaGUodVtlXSx0LG4scik7byhlLmFuY2hvcix0LG4pO3JldHVybn1pZihjPT09bHMpe1MoZSx0LG4pO3JldHVybn1pZihyIT09MiYmZCYxJiZsKXtpZihyPT09MClsLnBlcnNpc3RlZCYmIWFbV3JdP28oYSx0LG4pOihsLmJlZm9yZUVudGVyKGEpLG8oYSx0LG4pLElvKCgpPT5sLmVudGVyKGEpLGkpKTtlbHNle2xldHtsZWF2ZTpyLGRlbGF5TGVhdmU6aSxhZnRlckxlYXZlOmN9PWwsdT0oKT0+e2UuY3R4LmlzVW5tb3VudGVkP3MoYSk6byhhLHQsbil9LGQ9KCk9PntsZXQgZT1hLl9pc0xlYXZpbmd8fCEhYVtXcl07YS5faXNMZWF2aW5nJiZhW1dyXSghMCksbC5wZXJzaXN0ZWQmJiFlP3UoKTpyKGEsKCk9Pnt1KCksYyYmYygpfSl9O2k/aShhLHUsZCk6ZCgpfX1lbHNlIG8oYSx0LG4pfSxnZT0oZSx0LG4scj0hMSxpPSExKT0+e2xldHt0eXBlOmEscHJvcHM6byxyZWY6cyxjaGlsZHJlbjpjLGR5bmFtaWNDaGlsZHJlbjpsLHNoYXBlRmxhZzp1LHBhdGNoRmxhZzpkLGRpcnM6ZixjYWNoZUluZGV4OnAsbWVtbzptfT1lO2lmKGQ9PT0tMiYmKGk9ITEpLHMhPW51bGwmJihudCgpLHVpKHMsbnVsbCxuLGUsITApLHJ0KCkpLHAhPW51bGwmJih0LnJlbmRlckNhY2hlW3BdPXZvaWQgMCksdSYyNTYpe3QuY3R4LmRlYWN0aXZhdGUoZSk7cmV0dXJufWxldCBoPXUmMSYmZixnPSFJaShlKSxfO2lmKGcmJihfPW8mJm8ub25Wbm9kZUJlZm9yZVVubW91bnQpJiZBcyhfLHQsZSksdSY2KXllKGUuY29tcG9uZW50LG4scik7ZWxzZXtpZih1JjEyOCl7ZS5zdXNwZW5zZS51bm1vdW50KG4scik7cmV0dXJufWgmJl9yKGUsbnVsbCx0LGBiZWZvcmVVbm1vdW50YCksdSY2ND9lLnR5cGUucmVtb3ZlKGUsdCxuLENlLHIpOmwmJiFsLmhhc09uY2UmJihhIT09THx8ZD4wJiZkJjY0KT9iZShsLHQsbiwhMSwhMCk6KGE9PT1MJiZkJjM4NHx8IWkmJnUmMTYpJiZiZShjLHQsbiksciYmX2UoZSl9bGV0IHY9bSE9bnVsbCYmcD09bnVsbDsoZyYmKF89byYmby5vblZub2RlVW5tb3VudGVkKXx8aHx8dikmJklvKCgpPT57XyYmQXMoXyx0LGUpLGgmJl9yKGUsbnVsbCx0LGB1bm1vdW50ZWRgKSx2JiYoZS5lbD1udWxsKX0sbil9LF9lPWU9PntsZXR7dHlwZTp0LGVsOm4sYW5jaG9yOnIsdHJhbnNpdGlvbjppfT1lO2lmKHQ9PT1MKXt2ZShuLHIpO3JldHVybn1pZih0PT09bHMpe0MoZSk7cmV0dXJufWxldCBhPSgpPT57cyhuKSxpJiYhaS5wZXJzaXN0ZWQmJmkuYWZ0ZXJMZWF2ZSYmaS5hZnRlckxlYXZlKCl9O2lmKGUuc2hhcGVGbGFnJjEmJmkmJiFpLnBlcnNpc3RlZCl7bGV0e2xlYXZlOnQsZGVsYXlMZWF2ZTpyfT1pLG89KCk9PnQobixhKTtyP3IoZS5lbCxhLG8pOm8oKX1lbHNlIGEoKX0sdmU9KGUsdCk9PntsZXQgbjtmb3IoO2UhPT10OyluPWgoZSkscyhlKSxlPW47cyh0KX0seWU9KGUsdCxuKT0+e2xldHtidW06cixzY29wZTppLGpvYjphLHN1YlRyZWU6byx1bTpzLG06YyxhOmx9PWU7S28oYyksS28obCksciYmbGUociksaS5zdG9wKCksYSYmKGEuZmxhZ3N8PTgsZ2UobyxlLHQsbikpLHMmJklvKHMsdCksSW8oKCk9PntlLmlzVW5tb3VudGVkPSEwfSx0KX0sYmU9KGUsdCxuLHI9ITEsaT0hMSxhPTApPT57Zm9yKGxldCBvPWE7bzxlLmxlbmd0aDtvKyspZ2UoZVtvXSx0LG4scixpKX0sTz1lPT57aWYoZS5zaGFwZUZsYWcmNilyZXR1cm4gTyhlLmNvbXBvbmVudC5zdWJUcmVlKTtpZihlLnNoYXBlRmxhZyYxMjgpcmV0dXJuIGUuc3VzcGVuc2UubmV4dCgpO2xldCB0PWgoZS5hbmNob3J8fGUuZWwpLG49dCYmdFtqcl07cmV0dXJuIG4/aChuKTp0fSx4ZT0hMSxTZT0oZSx0LG4pPT57bGV0IHI7ZT09bnVsbD90Ll92bm9kZSYmKGdlKHQuX3Zub2RlLG51bGwsbnVsbCwhMCkscj10Ll92bm9kZS5jb21wb25lbnQpOnYodC5fdm5vZGV8fG51bGwsZSx0LG51bGwsbnVsbCxudWxsLG4pLHQuX3Zub2RlPWUseGV8fD0oeGU9ITAscnIociksaXIoKSwhMSl9LENlPXtwOnYsdW06Z2UsbTpoZSxyOl9lLG10OnNlLG1jOlQscGM6ZGUscGJjOmllLG46TyxvOmV9LHdlLFRlO3JldHVybiB0JiYoW3dlLFRlXT10KENlKSkse3JlbmRlcjpTZSxoeWRyYXRlOndlLGNyZWF0ZUFwcDp0byhTZSx3ZSl9fWZ1bmN0aW9uIEJvKHt0eXBlOmUscHJvcHM6dH0sbil7cmV0dXJuIG49PT1gc3ZnYCYmZT09PWBmb3JlaWduT2JqZWN0YHx8bj09PWBtYXRobWxgJiZlPT09YGFubm90YXRpb24teG1sYCYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcyhgaHRtbGApP3ZvaWQgMDpufWZ1bmN0aW9uIFZvKHtlZmZlY3Q6ZSxqb2I6dH0sbil7bj8oZS5mbGFnc3w9MzIsdC5mbGFnc3w9NCk6KGUuZmxhZ3MmPS0zMyx0LmZsYWdzJj0tNSl9ZnVuY3Rpb24gSG8oZSx0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiZ0JiYhdC5wZXJzaXN0ZWR9ZnVuY3Rpb24gVW8oZSx0LG49ITEpe2xldCByPWUuY2hpbGRyZW4saT10LmNoaWxkcmVuO2lmKHAocikmJnAoaSkpZm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe2xldCB0PXJbZV0sYT1pW2VdO2Euc2hhcGVGbGFnJjEmJiFhLmR5bmFtaWNDaGlsZHJlbiYmKChhLnBhdGNoRmxhZzw9MHx8YS5wYXRjaEZsYWc9PT0zMikmJihhPWlbZV09RHMoaVtlXSksYS5lbD10LmVsKSwhbiYmYS5wYXRjaEZsYWchPT0tMiYmVW8odCxhKSksYS50eXBlPT09c3MmJihhLnBhdGNoRmxhZz09PS0xJiYoYT1pW2VdPURzKGEpKSxhLmVsPXQuZWwpLGEudHlwZT09PWNzJiYhYS5lbCYmKGEuZWw9dC5lbCl9fWZ1bmN0aW9uIFdvKGUpe2xldCB0PWUuc2xpY2UoKSxuPVswXSxyLGksYSxvLHMsYz1lLmxlbmd0aDtmb3Iocj0wO3I8YztyKyspe2xldCBjPWVbcl07aWYoYyE9PTApe2lmKGk9bltuLmxlbmd0aC0xXSxlW2ldPGMpe3Rbcl09aSxuLnB1c2gocik7Y29udGludWV9Zm9yKGE9MCxvPW4ubGVuZ3RoLTE7YTxvOylzPWErbz4+MSxlW25bc11dPGM/YT1zKzE6bz1zO2M8ZVtuW2FdXSYmKGE+MCYmKHRbcl09blthLTFdKSxuW2FdPXIpfX1mb3IoYT1uLmxlbmd0aCxvPW5bYS0xXTthLS0+MDspblthXT1vLG89dFtvXTtyZXR1cm4gbn1mdW5jdGlvbiBHbyhlKXtsZXQgdD1lLnN1YlRyZWUuY29tcG9uZW50O2lmKHQpcmV0dXJuIHQuYXN5bmNEZXAmJiF0LmFzeW5jUmVzb2x2ZWQ/dDpHbyh0KX1mdW5jdGlvbiBLbyhlKXtpZihlKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uZmxhZ3N8PTh9ZnVuY3Rpb24gcW8oZSl7aWYoZS5wbGFjZWhvbGRlcilyZXR1cm4gZS5wbGFjZWhvbGRlcjtsZXQgdD1lLmNvbXBvbmVudDtyZXR1cm4gdD9xbyh0LnN1YlRyZWUpOm51bGx9dmFyIEpvPWU9PmUuX19pc1N1c3BlbnNlLFlvPTAsWG89e25hbWU6YFN1c3BlbnNlYCxfX2lzU3VzcGVuc2U6ITAscHJvY2VzcyhlLHQsbixyLGksYSxvLHMsYyxsKXtpZihlPT1udWxsKVFvKHQsbixyLGksYSxvLHMsYyxsKTtlbHNle2lmKGEmJmEuZGVwcz4wJiYhZS5zdXNwZW5zZS5pc0luRmFsbGJhY2spe3Quc3VzcGVuc2U9ZS5zdXNwZW5zZSx0LnN1c3BlbnNlLnZub2RlPXQsdC5lbD1lLmVsO3JldHVybn0kbyhlLHQsbixyLGksbyxzLGMsbCl9fSxoeWRyYXRlOnRzLG5vcm1hbGl6ZTpuc307ZnVuY3Rpb24gWm8oZSx0KXtsZXQgbj1lLnByb3BzJiZlLnByb3BzW3RdO3YobikmJm4oKX1mdW5jdGlvbiBRbyhlLHQsbixyLGksYSxvLHMsYyl7bGV0e3A6bCxvOntjcmVhdGVFbGVtZW50OnV9fT1jLGQ9dShgZGl2YCksZj1lLnN1c3BlbnNlPWVzKGUsaSxyLHQsZCxuLGEsbyxzLGMpO2wobnVsbCxmLnBlbmRpbmdCcmFuY2g9ZS5zc0NvbnRlbnQsZCxudWxsLHIsZixhLG8pLGYuZGVwcz4wPyhabyhlLGBvblBlbmRpbmdgKSxabyhlLGBvbkZhbGxiYWNrYCksbChudWxsLGUuc3NGYWxsYmFjayx0LG4scixudWxsLGEsbyksYXMoZixlLnNzRmFsbGJhY2spKTpmLnJlc29sdmUoITEsITApfWZ1bmN0aW9uICRvKGUsdCxuLHIsaSxhLG8scyx7cDpjLHVtOmwsbzp7Y3JlYXRlRWxlbWVudDp1fX0pe2xldCBkPXQuc3VzcGVuc2U9ZS5zdXNwZW5zZTtkLnZub2RlPXQsdC5lbD1lLmVsO2xldCBmPXQuc3NDb250ZW50LHA9dC5zc0ZhbGxiYWNrLHthY3RpdmVCcmFuY2g6bSxwZW5kaW5nQnJhbmNoOmgsaXNJbkZhbGxiYWNrOmcsaXNIeWRyYXRpbmc6X309ZDtpZihoKWQucGVuZGluZ0JyYW5jaD1mLF9zKGgsZik/KGMoaCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTA/ZC5yZXNvbHZlKCk6ZyYmKF98fChjKG0scCxuLHIsaSxudWxsLGEsbyxzKSxhcyhkLHApKSkpOihkLnBlbmRpbmdJZD1ZbysrLF8/KGQuaXNIeWRyYXRpbmc9ITEsZC5hY3RpdmVCcmFuY2g9aCk6bChoLGksZCksZC5kZXBzPTAsZC5lZmZlY3RzLmxlbmd0aD0wLGQuaGlkZGVuQ29udGFpbmVyPXUoYGRpdmApLGc/KGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTA/ZC5yZXNvbHZlKCk6KGMobSxwLG4scixpLG51bGwsYSxvLHMpLGFzKGQscCkpKTptJiZfcyhtLGYpPyhjKG0sZixuLHIsaSxkLGEsbyxzKSxkLnJlc29sdmUoITApKTooYyhudWxsLGYsZC5oaWRkZW5Db250YWluZXIsbnVsbCxpLGQsYSxvLHMpLGQuZGVwczw9MCYmZC5yZXNvbHZlKCkpKTtlbHNlIGlmKG0mJl9zKG0sZikpYyhtLGYsbixyLGksZCxhLG8scyksYXMoZCxmKTtlbHNlIGlmKFpvKHQsYG9uUGVuZGluZ2ApLGQucGVuZGluZ0JyYW5jaD1mLGQucGVuZGluZ0lkPWYuc2hhcGVGbGFnJjUxMj9mLmNvbXBvbmVudC5zdXNwZW5zZUlkOllvKyssYyhudWxsLGYsZC5oaWRkZW5Db250YWluZXIsbnVsbCxpLGQsYSxvLHMpLGQuZGVwczw9MClkLnJlc29sdmUoKTtlbHNle2xldHt0aW1lb3V0OmUscGVuZGluZ0lkOnR9PWQ7ZT4wP3NldFRpbWVvdXQoKCk9PntkLnBlbmRpbmdJZD09PXQmJmQuZmFsbGJhY2socCl9LGUpOmU9PT0wJiZkLmZhbGxiYWNrKHApfX1mdW5jdGlvbiBlcyhlLHQsbixyLGksYSxvLHMsYyxsLHU9ITEpe2xldHtwOmQsbTpmLHVtOnAsbjptLG86e3BhcmVudE5vZGU6aCxyZW1vdmU6Z319PWwsXyx2PW9zKGUpO3YmJnQmJnQucGVuZGluZ0JyYW5jaCYmKF89dC5wZW5kaW5nSWQsdC5kZXBzKyspO2xldCB5PWUucHJvcHM/ZmUoZS5wcm9wcy50aW1lb3V0KTp2b2lkIDAsYj1hLHg9e3Zub2RlOmUscGFyZW50OnQscGFyZW50Q29tcG9uZW50Om4sbmFtZXNwYWNlOm8sY29udGFpbmVyOnIsaGlkZGVuQ29udGFpbmVyOmksZGVwczowLHBlbmRpbmdJZDpZbysrLHRpbWVvdXQ6dHlwZW9mIHk9PWBudW1iZXJgP3k6LTEsYWN0aXZlQnJhbmNoOm51bGwsaXNGYWxsYmFja01vdW50UGVuZGluZzohMSxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiF1LGlzSHlkcmF0aW5nOnUsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKGU9ITEsbj0hMSl7bGV0e3Zub2RlOnIsYWN0aXZlQnJhbmNoOmkscGVuZGluZ0JyYW5jaDpvLHBlbmRpbmdJZDpzLGVmZmVjdHM6YyxwYXJlbnRDb21wb25lbnQ6bCxjb250YWluZXI6dSxpc0luRmFsbGJhY2s6ZH09eCxnPSExO2lmKHguaXNIeWRyYXRpbmcpeC5pc0h5ZHJhdGluZz0hMTtlbHNlIGlmKCFlKXtnPWkmJm8udHJhbnNpdGlvbiYmby50cmFuc2l0aW9uLm1vZGU9PT1gb3V0LWluYDtsZXQgZT0hMTtnJiYoaS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9KCk9PntzPT09eC5wZW5kaW5nSWQmJihmKG8sdSxhPT09YiYmIWU/bShpKTphLDApLG5yKGMpLGQmJnIuc3NGYWxsYmFjayYmKHIuc3NGYWxsYmFjay5lbD1udWxsKSl9KSxpJiYheC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nJiYoaChpLmVsKT09PXUmJihhPW0oaSksZT0hMCkscChpLGwseCwhMCksIWcmJmQmJnIuc3NGYWxsYmFjayYmSW8oKCk9PnIuc3NGYWxsYmFjay5lbD1udWxsLHgpKSxnfHxmKG8sdSxhLDApfXguaXNGYWxsYmFja01vdW50UGVuZGluZz0hMSxhcyh4LG8pLHgucGVuZGluZ0JyYW5jaD1udWxsLHguaXNJbkZhbGxiYWNrPSExO2xldCB5PXgucGFyZW50LFM9ITE7Zm9yKDt5Oyl7aWYoeS5wZW5kaW5nQnJhbmNoKXtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl5LmVmZmVjdHMucHVzaChjW2VdKTtTPSEwO2JyZWFrfXk9eS5wYXJlbnR9IVMmJiFnJiZucihjKSx4LmVmZmVjdHM9W10sdiYmdCYmdC5wZW5kaW5nQnJhbmNoJiZfPT09dC5wZW5kaW5nSWQmJih0LmRlcHMtLSx0LmRlcHM9PT0wJiYhbiYmdC5yZXNvbHZlKCkpLFpvKHIsYG9uUmVzb2x2ZWApfSxmYWxsYmFjayhlKXtpZigheC5wZW5kaW5nQnJhbmNoKXJldHVybjtsZXR7dm5vZGU6dCxhY3RpdmVCcmFuY2g6bixwYXJlbnRDb21wb25lbnQ6cixjb250YWluZXI6aSxuYW1lc3BhY2U6YX09eDtabyh0LGBvbkZhbGxiYWNrYCk7bGV0IG89bShuKSxsPSgpPT57eC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nPSExLHguaXNJbkZhbGxiYWNrJiYoZChudWxsLGUsaSxvLHIsbnVsbCxhLHMsYyksYXMoeCxlKSl9LHU9ZS50cmFuc2l0aW9uJiZlLnRyYW5zaXRpb24ubW9kZT09PWBvdXQtaW5gO3UmJih4LmlzRmFsbGJhY2tNb3VudFBlbmRpbmc9ITAsbi50cmFuc2l0aW9uLmFmdGVyTGVhdmU9bCkseC5pc0luRmFsbGJhY2s9ITAscChuLHIsbnVsbCwhMCksdXx8bCgpfSxtb3ZlKGUsdCxuKXt4LmFjdGl2ZUJyYW5jaCYmZih4LmFjdGl2ZUJyYW5jaCxlLHQsbikseC5jb250YWluZXI9ZX0sbmV4dCgpe3JldHVybiB4LmFjdGl2ZUJyYW5jaCYmbSh4LmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKGUsdCxuKXtsZXQgcj0hIXgucGVuZGluZ0JyYW5jaDtyJiZ4LmRlcHMrKztsZXQgaT1lLnZub2RlLmVsO2UuYXN5bmNEZXAuY2F0Y2godD0+e1VuKHQsZSwwKX0pLnRoZW4oYT0+e2lmKGUuaXNVbm1vdW50ZWR8fHguaXNVbm1vdW50ZWR8fHgucGVuZGluZ0lkIT09ZS5zdXNwZW5zZUlkKXJldHVybjt6cygpLGUuYXN5bmNSZXNvbHZlZD0hMDtsZXR7dm5vZGU6c309ZTtXcyhlLGEsITEpLGkmJihzLmVsPWkpO2xldCBjPSFpJiZlLnN1YlRyZWUuZWw7dChlLHMsaChpfHxlLnN1YlRyZWUuZWwpLGk/bnVsbDptKGUuc3ViVHJlZSkseCxvLG4pLGMmJihzLnBsYWNlaG9sZGVyPW51bGwsZyhjKSksX28oZSxzLmVsKSxyJiYtLXguZGVwcz09PTAmJngucmVzb2x2ZSgpfSl9LHVubW91bnQoZSx0KXt4LmlzVW5tb3VudGVkPSEwLHguYWN0aXZlQnJhbmNoJiZwKHguYWN0aXZlQnJhbmNoLG4sZSx0KSx4LnBlbmRpbmdCcmFuY2gmJnAoeC5wZW5kaW5nQnJhbmNoLG4sZSx0KX19O3JldHVybiB4fWZ1bmN0aW9uIHRzKGUsdCxuLHIsaSxhLG8scyxjKXtsZXQgbD10LnN1c3BlbnNlPWVzKHQscixuLGUucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSxudWxsLGksYSxvLHMsITApLHU9YyhlLGwucGVuZGluZ0JyYW5jaD10LnNzQ29udGVudCxuLGwsYSxvKTtyZXR1cm4gbC5kZXBzPT09MCYmbC5yZXNvbHZlKCExLCEwKSx1fWZ1bmN0aW9uIG5zKGUpe2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lLHI9dCYzMjtlLnNzQ29udGVudD1ycyhyP24uZGVmYXVsdDpuKSxlLnNzRmFsbGJhY2s9cj9ycyhuLmZhbGxiYWNrKTpIKGNzKX1mdW5jdGlvbiBycyhlKXtsZXQgdDtpZih2KGUpKXtsZXQgbj1wcyYmZS5fYztuJiYoZS5fZD0hMSxSKCkpLGU9ZSgpLG4mJihlLl9kPSEwLHQ9ZHMsZnMoKSl9cmV0dXJuIHAoZSkmJihlPXVvKGUpKSxlPUVzKGUpLHQmJiFlLmR5bmFtaWNDaGlsZHJlbiYmKGUuZHluYW1pY0NoaWxkcmVuPXQuZmlsdGVyKHQ9PnQhPT1lKSksZX1mdW5jdGlvbiBpcyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9wKGUpP3QuZWZmZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOm5yKGUpfWZ1bmN0aW9uIGFzKGUsdCl7ZS5hY3RpdmVCcmFuY2g9dDtsZXR7dm5vZGU6bixwYXJlbnRDb21wb25lbnQ6cn09ZSxpPXQuZWw7Zm9yKDshaSYmdC5jb21wb25lbnQ7KXQ9dC5jb21wb25lbnQuc3ViVHJlZSxpPXQuZWw7bi5lbD1pLHImJnIuc3ViVHJlZT09PW4mJihyLnZub2RlLmVsPWksX28ocixpKSl9ZnVuY3Rpb24gb3MoZSl7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5zdXNwZW5zaWJsZTtyZXR1cm4gdCE9bnVsbCYmdCE9PSExfXZhciBMPVN5bWJvbC5mb3IoYHYtZmd0YCksc3M9U3ltYm9sLmZvcihgdi10eHRgKSxjcz1TeW1ib2wuZm9yKGB2LWNtdGApLGxzPVN5bWJvbC5mb3IoYHYtc3RjYCksdXM9W10sZHM9bnVsbDtmdW5jdGlvbiBSKGU9ITEpe3VzLnB1c2goZHM9ZT9udWxsOltdKX1mdW5jdGlvbiBmcygpe3VzLnBvcCgpLGRzPXVzW3VzLmxlbmd0aC0xXXx8bnVsbH12YXIgcHM9MTtmdW5jdGlvbiBtcyhlLHQ9ITEpe3BzKz1lLGU8MCYmZHMmJnQmJihkcy5oYXNPbmNlPSEwKX1mdW5jdGlvbiBocyhlKXtyZXR1cm4gZS5keW5hbWljQ2hpbGRyZW49cHM+MD9kc3x8aTpudWxsLGZzKCkscHM+MCYmZHMmJmRzLnB1c2goZSksZX1mdW5jdGlvbiB6KGUsdCxuLHIsaSxhKXtyZXR1cm4gaHMoVihlLHQsbixyLGksYSwhMCkpfWZ1bmN0aW9uIEIoZSx0LG4scixpKXtyZXR1cm4gaHMoSChlLHQsbixyLGksITApKX1mdW5jdGlvbiBncyhlKXtyZXR1cm4gZT9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gX3MoZSx0KXtyZXR1cm4gZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fWZ1bmN0aW9uIHZzKGUpe312YXIgeXM9KHtrZXk6ZX0pPT5lPz9udWxsLGJzPSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwZW9mIGU9PWBudW1iZXJgJiYoZT1gYCtlKSxlPT1udWxsP251bGw6eShlKXx8aihlKXx8dihlKT97aTp1cixyOmUsazp0LGY6ISFufTplKTtmdW5jdGlvbiBWKGUsdD1udWxsLG49bnVsbCxyPTAsaT1udWxsLGE9ZT09PUw/MDoxLG89ITEscz0hMSl7bGV0IGM9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZSxwcm9wczp0LGtleTp0JiZ5cyh0KSxyZWY6dCYmYnModCksc2NvcGVJZDpkcixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOmEscGF0Y2hGbGFnOnIsZHluYW1pY1Byb3BzOmksZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDp1cn07cmV0dXJuIHM/KE9zKGMsbiksYSYxMjgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PXkobik/ODoxNikscHM+MCYmIW8mJmRzJiYoYy5wYXRjaEZsYWc+MHx8YSY2KSYmYy5wYXRjaEZsYWchPT0zMiYmZHMucHVzaChjKSxjfXZhciBIPXhzO2Z1bmN0aW9uIHhzKGUsdD1udWxsLG49bnVsbCxyPTAsaT1udWxsLGE9ITEpe2lmKCghZXx8ZT09PWxhKSYmKGU9Y3MpLGdzKGUpKXtsZXQgcj1DcyhlLHQsITApO3JldHVybiBuJiZPcyhyLG4pLHBzPjAmJiFhJiZkcyYmKHIuc2hhcGVGbGFnJjY/ZHNbZHMuaW5kZXhPZihlKV09cjpkcy5wdXNoKHIpKSxyLnBhdGNoRmxhZz0tMixyfWlmKGVjKGUpJiYoZT1lLl9fdmNjT3B0cyksdCl7dD1Tcyh0KTtsZXR7Y2xhc3M6ZSxzdHlsZTpufT10O2UmJiF5KGUpJiYodC5jbGFzcz1PKGUpKSx4KG4pJiYob24obikmJiFwKG4pJiYobj1sKHt9LG4pKSx0LnN0eWxlPWdlKG4pKX1sZXQgbz15KGUpPzE6Sm8oZSk/MTI4Ok1yKGUpPzY0OngoZSk/NDp2KGUpPzI6MDtyZXR1cm4gVihlLHQsbixyLGksbyxhLCEwKX1mdW5jdGlvbiBTcyhlKXtyZXR1cm4gZT9vbihlKXx8Ym8oZSk/bCh7fSxlKTplOm51bGx9ZnVuY3Rpb24gQ3MoZSx0LG49ITEscj0hMSl7bGV0e3Byb3BzOmkscmVmOmEscGF0Y2hGbGFnOm8sY2hpbGRyZW46cyx0cmFuc2l0aW9uOmN9PWUsbD10P2tzKGl8fHt9LHQpOmksdT17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTplLnR5cGUscHJvcHM6bCxrZXk6bCYmeXMobCkscmVmOnQmJnQucmVmP24mJmE/cChhKT9hLmNvbmNhdChicyh0KSk6W2EsYnModCldOmJzKHQpOmEsc2NvcGVJZDplLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmUuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOnMsdGFyZ2V0OmUudGFyZ2V0LHRhcmdldFN0YXJ0OmUudGFyZ2V0U3RhcnQsdGFyZ2V0QW5jaG9yOmUudGFyZ2V0QW5jaG9yLHN0YXRpY0NvdW50OmUuc3RhdGljQ291bnQsc2hhcGVGbGFnOmUuc2hhcGVGbGFnLHBhdGNoRmxhZzp0JiZlLnR5cGUhPT1MP289PT0tMT8xNjpvfDE2Om8sZHluYW1pY1Byb3BzOmUuZHluYW1pY1Byb3BzLGR5bmFtaWNDaGlsZHJlbjplLmR5bmFtaWNDaGlsZHJlbixhcHBDb250ZXh0OmUuYXBwQ29udGV4dCxkaXJzOmUuZGlycyx0cmFuc2l0aW9uOmMsY29tcG9uZW50OmUuY29tcG9uZW50LHN1c3BlbnNlOmUuc3VzcGVuc2Usc3NDb250ZW50OmUuc3NDb250ZW50JiZDcyhlLnNzQ29udGVudCksc3NGYWxsYmFjazplLnNzRmFsbGJhY2smJkNzKGUuc3NGYWxsYmFjaykscGxhY2Vob2xkZXI6ZS5wbGFjZWhvbGRlcixlbDplLmVsLGFuY2hvcjplLmFuY2hvcixjdHg6ZS5jdHgsY2U6ZS5jZX07cmV0dXJuIGMmJnImJnJpKHUsYy5jbG9uZSh1KSksdX1mdW5jdGlvbiBVKGU9YCBgLHQ9MCl7cmV0dXJuIEgoc3MsbnVsbCxlLHQpfWZ1bmN0aW9uIHdzKGUsdCl7bGV0IG49SChscyxudWxsLGUpO3JldHVybiBuLnN0YXRpY0NvdW50PXQsbn1mdW5jdGlvbiBUcyhlPWBgLHQ9ITEpe3JldHVybiB0PyhSKCksQihjcyxudWxsLGUpKTpIKGNzLG51bGwsZSl9ZnVuY3Rpb24gRXMoZSl7cmV0dXJuIGU9PW51bGx8fHR5cGVvZiBlPT1gYm9vbGVhbmA/SChjcyk6cChlKT9IKEwsbnVsbCxlLnNsaWNlKCkpOmdzKGUpP0RzKGUpOkgoc3MsbnVsbCxTdHJpbmcoZSkpfWZ1bmN0aW9uIERzKGUpe3JldHVybiBlLmVsPT09bnVsbCYmZS5wYXRjaEZsYWchPT0tMXx8ZS5tZW1vP2U6Q3MoZSl9ZnVuY3Rpb24gT3MoZSx0KXtsZXQgbj0wLHtzaGFwZUZsYWc6cn09ZTtpZih0PT1udWxsKXQ9bnVsbDtlbHNlIGlmKHAodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PT1gb2JqZWN0YCl7aWYociY2NSl7bGV0IG49dC5kZWZhdWx0O24mJihuLl9jJiYobi5fZD0hMSksT3MoZSxuKCkpLG4uX2MmJihuLl9kPSEwKSk7cmV0dXJufXtuPTMyO2xldCByPXQuXzshciYmIWJvKHQpP3QuX2N0eD11cjpyPT09MyYmdXImJih1ci5zbG90cy5fPT09MT90Ll89MToodC5fPTIsZS5wYXRjaEZsYWd8PTEwMjQpKX19ZWxzZSBpZih2KHQpKXtpZihyJjY1KXtPcyhlLHtkZWZhdWx0OnR9KTtyZXR1cm59dD17ZGVmYXVsdDp0LF9jdHg6dXJ9LG49MzJ9ZWxzZSB0PVN0cmluZyh0KSxyJjY0PyhuPTE2LHQ9W1UodCldKTpuPTg7ZS5jaGlsZHJlbj10LGUuc2hhcGVGbGFnfD1ufWZ1bmN0aW9uIGtzKC4uLmUpe2xldCB0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO2ZvcihsZXQgZSBpbiByKWlmKGU9PT1gY2xhc3NgKXQuY2xhc3MhPT1yLmNsYXNzJiYodC5jbGFzcz1PKFt0LmNsYXNzLHIuY2xhc3NdKSk7ZWxzZSBpZihlPT09YHN0eWxlYCl0LnN0eWxlPWdlKFt0LnN0eWxlLHIuc3R5bGVdKTtlbHNlIGlmKHMoZSkpe2xldCBuPXRbZV0saT1yW2VdO2kmJm4hPT1pJiYhKHAobikmJm4uaW5jbHVkZXMoaSkpP3RbZV09bj9bXS5jb25jYXQobixpKTppOmk9PW51bGwmJm49PW51bGwmJiFjKGUpJiYodFtlXT1pKX1lbHNlIGUhPT1gYCYmKHRbZV09cltlXSl9cmV0dXJuIHR9ZnVuY3Rpb24gQXMoZSx0LG4scj1udWxsKXtIbihlLHQsNyxbbixyXSl9dmFyIGpzPSRhKCksTXM9MDtmdW5jdGlvbiBOcyhlLHQsbil7bGV0IGk9ZS50eXBlLGE9KHQ/dC5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fGpzLG89e3VpZDpNcysrLHZub2RlOmUsdHlwZTppLHBhcmVudDp0LGFwcENvbnRleHQ6YSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqb2I6bnVsbCxzY29wZTpuZXcgTmUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6dD90LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoYS5wcm92aWRlcyksaWRzOnQ/dC5pZHM6W2BgLDAsMF0sYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpFbyhpLGEpLGVtaXRzT3B0aW9uczpzbyhpLGEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpyLGluaGVyaXRBdHRyczppLmluaGVyaXRBdHRycyxjdHg6cixkYXRhOnIscHJvcHM6cixhdHRyczpyLHNsb3RzOnIscmVmczpyLHNldHVwU3RhdGU6cixzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpuLHN1c3BlbnNlSWQ6bj9uLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIG8uY3R4PXtfOm99LG8ucm9vdD10P3Qucm9vdDpvLG8uZW1pdD1hby5iaW5kKG51bGwsbyksZS5jZSYmZS5jZShvKSxvfXZhciBQcz1udWxsLEZzPSgpPT5Qc3x8dXIsSXMsTHM7e2xldCBlPW1lKCksdD0odCxuKT0+e2xldCByO3JldHVybihyPWVbdF0pfHwocj1lW3RdPVtdKSxyLnB1c2gobiksZT0+e3IubGVuZ3RoPjE/ci5mb3JFYWNoKHQ9PnQoZSkpOnJbMF0oZSl9fTtJcz10KGBfX1ZVRV9JTlNUQU5DRV9TRVRURVJTX19gLGU9PlBzPWUpLExzPXQoYF9fVlVFX1NTUl9TRVRURVJTX19gLGU9PlZzPWUpfXZhciBScz1lPT57bGV0IHQ9UHM7cmV0dXJuIElzKGUpLGUuc2NvcGUub24oKSwoKT0+e2Uuc2NvcGUub2ZmKCksSXModCl9fSx6cz0oKT0+e1BzJiZQcy5zY29wZS5vZmYoKSxJcyhudWxsKX07ZnVuY3Rpb24gQnMoZSl7cmV0dXJuIGUudm5vZGUuc2hhcGVGbGFnJjR9dmFyIFZzPSExO2Z1bmN0aW9uIEhzKGUsdD0hMSxuPSExKXt0JiZMcyh0KTtsZXR7cHJvcHM6cixjaGlsZHJlbjppfT1lLnZub2RlLGE9QnMoZSk7eG8oZSxyLGEsdCksUG8oZSxpLG58fHQpO2xldCBvPWE/VXMoZSx0KTp2b2lkIDA7cmV0dXJuIHQmJkxzKCExKSxvfWZ1bmN0aW9uIFVzKGUsdCl7bGV0IG49ZS50eXBlO2UuYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxlLnByb3h5PW5ldyBQcm94eShlLmN0eCx4YSk7bGV0e3NldHVwOnJ9PW47aWYocil7bnQoKTtsZXQgbj1lLnNldHVwQ29udGV4dD1yLmxlbmd0aD4xP1pzKGUpOm51bGwsaT1ScyhlKSxhPVZuKHIsZSwwLFtlLnByb3BzLG5dKSxvPVMoYSk7aWYocnQoKSxpKCksKG98fGUuc3ApJiYhSWkoZSkmJm9pKGUpLG8pe2lmKGEudGhlbih6cyx6cyksdClyZXR1cm4gYS50aGVuKG49PntMcyghMCk7dHJ5e1dzKGUsbix0KX1maW5hbGx5e0xzKCExKX19KS5jYXRjaCh0PT57VW4odCxlLDApfSk7ZS5hc3luY0RlcD1hfWVsc2UgV3MoZSxhLHQpfWVsc2UgWXMoZSx0KX1mdW5jdGlvbiBXcyhlLHQsbil7dih0KT9lLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/ZS5zc3JSZW5kZXI9dDplLnJlbmRlcj10OngodCkmJihlLnNldHVwU3RhdGU9Z24odCkpLFlzKGUsbil9dmFyIEdzLEtzO2Z1bmN0aW9uIHFzKGUpe0dzPWUsS3M9ZT0+e2UucmVuZGVyLl9yYyYmKGUud2l0aFByb3h5PW5ldyBQcm94eShlLmN0eCxTYSkpfX12YXIgSnM9KCk9PiFHcztmdW5jdGlvbiBZcyhlLHQsbil7bGV0IHI9ZS50eXBlO2lmKCFlLnJlbmRlcil7aWYoIXQmJkdzJiYhci5yZW5kZXIpe2xldCB0PXIudGVtcGxhdGV8fFVhKGUpLnRlbXBsYXRlO2lmKHQpe2xldHtpc0N1c3RvbUVsZW1lbnQ6bixjb21waWxlck9wdGlvbnM6aX09ZS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczphLGNvbXBpbGVyT3B0aW9uczpvfT1yLHM9bChsKHtpc0N1c3RvbUVsZW1lbnQ6bixkZWxpbWl0ZXJzOmF9LGkpLG8pO3IucmVuZGVyPUdzKHQscyl9fWUucmVuZGVyPXIucmVuZGVyfHxhLEtzJiZLcyhlKX17bGV0IHQ9UnMoZSk7bnQoKTt0cnl7emEoZSl9ZmluYWxseXtydCgpLHQoKX19fXZhciBYcz17Z2V0KGUsdCl7cmV0dXJuIHB0KGUsYGdldGAsYGApLGVbdF19fTtmdW5jdGlvbiBacyhlKXtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsWHMpLHNsb3RzOmUuc2xvdHMsZW1pdDplLmVtaXQsZXhwb3NlOnQ9PntlLmV4cG9zZWQ9dHx8e319fX1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZS5leHBvc2VkP2UuZXhwb3NlUHJveHl8fD1uZXcgUHJveHkoZ24oc24oZS5leHBvc2VkKSkse2dldCh0LG4pe2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIHlhKXJldHVybiB5YVtuXShlKX0saGFzKGUsdCl7cmV0dXJuIHQgaW4gZXx8dCBpbiB5YX19KTplLnByb3h5fWZ1bmN0aW9uICRzKGUsdD0hMCl7cmV0dXJuIHYoZSk/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOmUubmFtZXx8dCYmZS5fX25hbWV9ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIHYoZSkmJmBfX3ZjY09wdHNgaW4gZX12YXIgVz0oZSx0KT0+VG4oZSx0LFZzKTtmdW5jdGlvbiBHKGUsdCxuKXt0cnl7bXMoLTEpO2xldCByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI9PT0yP3godCkmJiFwKHQpP2dzKHQpP0goZSxudWxsLFt0XSk6SChlLHQpOkgoZSxudWxsLHQpOihyPjM/bj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik6cj09PTMmJmdzKG4pJiYobj1bbl0pLEgoZSx0LG4pKX1maW5hbGx5e21zKDEpfX1mdW5jdGlvbiB0Yygpe31mdW5jdGlvbiBuYyhlLHQsbixyKXtsZXQgaT1uW3JdO2lmKGkmJnJjKGksZSkpcmV0dXJuIGk7bGV0IGE9dCgpO3JldHVybiBhLm1lbW89ZS5zbGljZSgpLGEuY2FjaGVJbmRleD1yLG5bcl09YX1mdW5jdGlvbiByYyhlLHQpe2xldCBuPWUubWVtbztpZihuLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYoRChuW2VdLHRbZV0pKXJldHVybiExO3JldHVybiBwcz4wJiZkcyYmZHMucHVzaChlKSwhMH12YXIgaWM9YDMuNS40MWAsYWM9YSxvYz1CbixzYz1zcixjYz1scixsYz17Y3JlYXRlQ29tcG9uZW50SW5zdGFuY2U6TnMsc2V0dXBDb21wb25lbnQ6SHMscmVuZGVyQ29tcG9uZW50Um9vdDpsbyxzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U6ZnIsaXNWTm9kZTpncyxub3JtYWxpemVWTm9kZTpFcyxnZXRDb21wb25lbnRQdWJsaWNJbnN0YW5jZTpRcyxlbnN1cmVWYWxpZFZOb2RlOmdhLHB1c2hXYXJuaW5nQ29udGV4dDpJbixwb3BXYXJuaW5nQ29udGV4dDpMbn0sdWM9dm9pZCAwLGRjPXR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cudHJ1c3RlZFR5cGVzO2lmKGRjKXRyeXt1Yz1kYy5jcmVhdGVQb2xpY3koYHZ1ZWAse2NyZWF0ZUhUTUw6ZT0+ZX0pfWNhdGNoe312YXIgZmM9dWM/ZT0+dWMuY3JlYXRlSFRNTChlKTplPT5lLHBjPWBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsbWM9YGh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxgLGhjPXR5cGVvZiBkb2N1bWVudDxgdWA/ZG9jdW1lbnQ6bnVsbCxnYz1oYyYmaGMuY3JlYXRlRWxlbWVudChgdGVtcGxhdGVgKSxfYz17aW5zZXJ0OihlLHQsbik9Pnt0Lmluc2VydEJlZm9yZShlLG58fG51bGwpfSxyZW1vdmU6ZT0+e2xldCB0PWUucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKGUpfSxjcmVhdGVFbGVtZW50OihlLHQsbixyKT0+e2xldCBpPXQ9PT1gc3ZnYD9oYy5jcmVhdGVFbGVtZW50TlMocGMsZSk6dD09PWBtYXRobWxgP2hjLmNyZWF0ZUVsZW1lbnROUyhtYyxlKTpuP2hjLmNyZWF0ZUVsZW1lbnQoZSx7aXM6bn0pOmhjLmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIGU9PT1gc2VsZWN0YCYmciYmci5tdWx0aXBsZSE9bnVsbCYmaS5zZXRBdHRyaWJ1dGUoYG11bHRpcGxlYCxyLm11bHRpcGxlKSxpfSxjcmVhdGVUZXh0OmU9PmhjLmNyZWF0ZVRleHROb2RlKGUpLGNyZWF0ZUNvbW1lbnQ6ZT0+aGMuY3JlYXRlQ29tbWVudChlKSxzZXRUZXh0OihlLHQpPT57ZS5ub2RlVmFsdWU9dH0sc2V0RWxlbWVudFRleHQ6KGUsdCk9PntlLnRleHRDb250ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmU9PmUubmV4dFNpYmxpbmcscXVlcnlTZWxlY3RvcjplPT5oYy5xdWVyeVNlbGVjdG9yKGUpLHNldFNjb3BlSWQoZSx0KXtlLnNldEF0dHJpYnV0ZSh0LGBgKX0saW5zZXJ0U3RhdGljQ29udGVudChlLHQsbixyLGksYSl7bGV0IG89bj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZDtpZihpJiYoaT09PWF8fGkubmV4dFNpYmxpbmcpKWZvcig7dC5pbnNlcnRCZWZvcmUoaS5jbG9uZU5vZGUoITApLG4pLCEoaT09PWF8fCEoaT1pLm5leHRTaWJsaW5nKSk7KTtlbHNle2djLmlubmVySFRNTD1mYyhyPT09YHN2Z2A/YDxzdmc+JHtlfTwvc3ZnPmA6cj09PWBtYXRobWxgP2A8bWF0aD4ke2V9PC9tYXRoPmA6ZSk7bGV0IGk9Z2MuY29udGVudDtpZihyPT09YHN2Z2B8fHI9PT1gbWF0aG1sYCl7bGV0IGU9aS5maXJzdENoaWxkO2Zvcig7ZS5maXJzdENoaWxkOylpLmFwcGVuZENoaWxkKGUuZmlyc3RDaGlsZCk7aS5yZW1vdmVDaGlsZChlKX10Lmluc2VydEJlZm9yZShpLG4pfXJldHVybltvP28ubmV4dFNpYmxpbmc6dC5maXJzdENoaWxkLG4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGRdfX0sdmM9YHRyYW5zaXRpb25gLHljPWBhbmltYXRpb25gLGJjPVN5bWJvbChgX3Z0Y2ApLHhjPXtuYW1lOlN0cmluZyx0eXBlOlN0cmluZyxjc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxkdXJhdGlvbjpbU3RyaW5nLE51bWJlcixPYmplY3RdLGVudGVyRnJvbUNsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGFwcGVhckZyb21DbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGxlYXZlRnJvbUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZVRvQ2xhc3M6U3RyaW5nfSxTYz1sKHt9LEpyLHhjKSxDYz0oZT0+KGUuZGlzcGxheU5hbWU9YFRyYW5zaXRpb25gLGUucHJvcHM9U2MsZSkpKChlLHtzbG90czp0fSk9PkcoUXIsRWMoZSksdCkpLHdjPShlLHQ9W10pPT57cChlKT9lLmZvckVhY2goZT0+ZSguLi50KSk6ZSYmZSguLi50KX0sVGM9ZT0+ZT9wKGUpP2Uuc29tZShlPT5lLmxlbmd0aD4xKTplLmxlbmd0aD4xOiExO2Z1bmN0aW9uIEVjKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKW4gaW4geGN8fCh0W25dPWVbbl0pO2lmKGUuY3NzPT09ITEpcmV0dXJuIHQ7bGV0e25hbWU6bj1gdmAsdHlwZTpyLGR1cmF0aW9uOmksZW50ZXJGcm9tQ2xhc3M6YT1gJHtufS1lbnRlci1mcm9tYCxlbnRlckFjdGl2ZUNsYXNzOm89YCR7bn0tZW50ZXItYWN0aXZlYCxlbnRlclRvQ2xhc3M6cz1gJHtufS1lbnRlci10b2AsYXBwZWFyRnJvbUNsYXNzOmM9YSxhcHBlYXJBY3RpdmVDbGFzczp1PW8sYXBwZWFyVG9DbGFzczpkPXMsbGVhdmVGcm9tQ2xhc3M6Zj1gJHtufS1sZWF2ZS1mcm9tYCxsZWF2ZUFjdGl2ZUNsYXNzOnA9YCR7bn0tbGVhdmUtYWN0aXZlYCxsZWF2ZVRvQ2xhc3M6bT1gJHtufS1sZWF2ZS10b2B9PWUsaD1EYyhpKSxnPWgmJmhbMF0sXz1oJiZoWzFdLHtvbkJlZm9yZUVudGVyOnYsb25FbnRlcjp5LG9uRW50ZXJDYW5jZWxsZWQ6YixvbkxlYXZlOngsb25MZWF2ZUNhbmNlbGxlZDpTLG9uQmVmb3JlQXBwZWFyOkM9dixvbkFwcGVhcjp3PXksb25BcHBlYXJDYW5jZWxsZWQ6ZWU9Yn09dCx0ZT0oZSx0LG4scik9PntlLl9lbnRlckNhbmNlbGxlZD1yLEFjKGUsdD9kOnMpLEFjKGUsdD91Om8pLG4mJm4oKX0sVD0oZSx0KT0+e2UuX2lzTGVhdmluZz0hMSxBYyhlLGYpLEFjKGUsbSksQWMoZSxwKSx0JiZ0KCl9LG5lPWU9Pih0LG4pPT57bGV0IGk9ZT93Onksbz0oKT0+dGUodCxlLG4pO3djKGksW3Qsb10pLGpjKCgpPT57QWModCxlP2M6YSksa2ModCxlP2Q6cyksVGMoaSl8fE5jKHQscixnLG8pfSl9O3JldHVybiBsKHQse29uQmVmb3JlRW50ZXIoZSl7d2ModixbZV0pLGtjKGUsYSksa2MoZSxvKX0sb25CZWZvcmVBcHBlYXIoZSl7d2MoQyxbZV0pLGtjKGUsYyksa2MoZSx1KX0sb25FbnRlcjpuZSghMSksb25BcHBlYXI6bmUoITApLG9uTGVhdmUoZSx0KXtlLl9pc0xlYXZpbmc9ITA7bGV0IG49KCk9PlQoZSx0KTtrYyhlLGYpLGUuX2VudGVyQ2FuY2VsbGVkPyhrYyhlLHApLExjKGUpKTooTGMoZSksa2MoZSxwKSksamMoKCk9PntlLl9pc0xlYXZpbmcmJihBYyhlLGYpLGtjKGUsbSksVGMoeCl8fE5jKGUscixfLG4pKX0pLHdjKHgsW2Usbl0pfSxvbkVudGVyQ2FuY2VsbGVkKGUpe3RlKGUsITEsdm9pZCAwLCEwKSx3YyhiLFtlXSl9LG9uQXBwZWFyQ2FuY2VsbGVkKGUpe3RlKGUsITAsdm9pZCAwLCEwKSx3YyhlZSxbZV0pfSxvbkxlYXZlQ2FuY2VsbGVkKGUpe1QoZSksd2MoUyxbZV0pfX0pfWZ1bmN0aW9uIERjKGUpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoeChlKSlyZXR1cm5bT2MoZS5lbnRlciksT2MoZS5sZWF2ZSldO3tsZXQgdD1PYyhlKTtyZXR1cm5bdCx0XX19ZnVuY3Rpb24gT2MoZSl7cmV0dXJuIGZlKGUpfWZ1bmN0aW9uIGtjKGUsdCl7dC5zcGxpdCgvXHMrLykuZm9yRWFjaCh0PT50JiZlLmNsYXNzTGlzdC5hZGQodCkpLChlW2JjXXx8KGVbYmNdPW5ldyBTZXQpKS5hZGQodCl9ZnVuY3Rpb24gQWMoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LnJlbW92ZSh0KSk7bGV0IG49ZVtiY107biYmKG4uZGVsZXRlKHQpLG4uc2l6ZXx8KGVbYmNdPXZvaWQgMCkpfWZ1bmN0aW9uIGpjKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX0pfXZhciBNYz0wO2Z1bmN0aW9uIE5jKGUsdCxuLHIpe2xldCBpPWUuX2VuZElkPSsrTWMsYT0oKT0+e2k9PT1lLl9lbmRJZCYmcigpfTtpZihuIT1udWxsKXJldHVybiBzZXRUaW1lb3V0KGEsbik7bGV0e3R5cGU6byx0aW1lb3V0OnMscHJvcENvdW50OmN9PVBjKGUsdCk7aWYoIW8pcmV0dXJuIHIoKTtsZXQgbD1vK2BlbmRgLHU9MCxkPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGwsZiksYSgpfSxmPXQ9Pnt0LnRhcmdldD09PWUmJisrdT49YyYmZCgpfTtzZXRUaW1lb3V0KCgpPT57dTxjJiZkKCl9LHMrMSksZS5hZGRFdmVudExpc3RlbmVyKGwsZil9ZnVuY3Rpb24gUGMoZSx0KXtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxyPWU9PihuW2VdfHxgYCkuc3BsaXQoYCwgYCksaT1yKGAke3ZjfURlbGF5YCksYT1yKGAke3ZjfUR1cmF0aW9uYCksbz1GYyhpLGEpLHM9cihgJHt5Y31EZWxheWApLGM9cihgJHt5Y31EdXJhdGlvbmApLGw9RmMocyxjKSx1PW51bGwsZD0wLGY9MDt0PT09dmM/bz4wJiYodT12YyxkPW8sZj1hLmxlbmd0aCk6dD09PXljP2w+MCYmKHU9eWMsZD1sLGY9Yy5sZW5ndGgpOihkPU1hdGgubWF4KG8sbCksdT1kPjA/bz5sP3ZjOnljOm51bGwsZj11P3U9PT12Yz9hLmxlbmd0aDpjLmxlbmd0aDowKTtsZXQgcD11PT09dmMmJi9cYig/OnRyYW5zZm9ybXxhbGwpKD86LHwkKS8udGVzdChyKGAke3ZjfVByb3BlcnR5YCkudG9TdHJpbmcoKSk7cmV0dXJue3R5cGU6dSx0aW1lb3V0OmQscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOnB9fWZ1bmN0aW9uIEZjKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXgoLi4udC5tYXAoKHQsbik9PkljKHQpK0ljKGVbbl0pKSl9ZnVuY3Rpb24gSWMoZSl7cmV0dXJuIGU9PT1gYXV0b2A/MDpOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKGAsYCxgLmApKSoxZTN9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuKGU/ZS5vd25lckRvY3VtZW50OmRvY3VtZW50KS5ib2R5Lm9mZnNldEhlaWdodH1mdW5jdGlvbiBSYyhlLHQsbil7bGV0IHI9ZVtiY107ciYmKHQ9KHQ/W3QsLi4ucl06Wy4uLnJdKS5qb2luKGAgYCkpLHQ9PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6bj9lLnNldEF0dHJpYnV0ZShgY2xhc3NgLHQpOmUuY2xhc3NOYW1lPXR9dmFyIHpjPVN5bWJvbChgX3ZvZGApLEJjPVN5bWJvbChgX3ZzaGApLFZjPXtuYW1lOmBzaG93YCxiZWZvcmVNb3VudChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7ZVt6Y109ZS5zdHlsZS5kaXNwbGF5PT09YG5vbmVgP2BgOmUuc3R5bGUuZGlzcGxheSxuJiZ0P24uYmVmb3JlRW50ZXIoZSk6SGMoZSx0KX0sbW91bnRlZChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7biYmdCYmbi5lbnRlcihlKX0sdXBkYXRlZChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHt0cmFuc2l0aW9uOnJ9KXshdCE9IW4mJihyP3Q/KHIuYmVmb3JlRW50ZXIoZSksSGMoZSwhMCksci5lbnRlcihlKSk6ci5sZWF2ZShlLCgpPT57SGMoZSwhMSl9KTpIYyhlLHQpKX0sYmVmb3JlVW5tb3VudChlLHt2YWx1ZTp0fSl7SGMoZSx0KX19O2Z1bmN0aW9uIEhjKGUsdCl7ZS5zdHlsZS5kaXNwbGF5PXQ/ZVt6Y106YG5vbmVgLGVbQmNdPSF0fWZ1bmN0aW9uIFVjKCl7VmMuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSk9PntpZighZSlyZXR1cm57c3R5bGU6e2Rpc3BsYXk6YG5vbmVgfX19fXZhciBXYz1TeW1ib2woYGApO2Z1bmN0aW9uIEdjKGUpe2xldCB0PUZzKCk7aWYoIXQpcmV0dXJuO2xldCBuPXQudXQ9KG49ZSh0LnByb3h5KSk9PntBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXYtb3duZXI9IiR7dC51aWR9Il1gKSkuZm9yRWFjaChlPT5xYyhlLG4pKX0scj0oKT0+e2xldCByPWUodC5wcm94eSk7dC5jZT9xYyh0LmNlLHIpOktjKHQuc3ViVHJlZSxyKSxuKHIpfTtRaSgoKT0+e25yKHIpfSksWmkoKCk9PntFcihyLGEse2ZsdXNoOmBwb3N0YH0pO2xldCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKHIpO2Uub2JzZXJ2ZSh0LnN1YlRyZWUuZWwucGFyZW50Tm9kZSx7Y2hpbGRMaXN0OiEwfSksdGEoKCk9PmUuZGlzY29ubmVjdCgpKX0pfWZ1bmN0aW9uIEtjKGUsdCl7aWYoZS5zaGFwZUZsYWcmMTI4KXtsZXQgbj1lLnN1c3BlbnNlO2U9bi5hY3RpdmVCcmFuY2gsbi5wZW5kaW5nQnJhbmNoJiYhbi5pc0h5ZHJhdGluZyYmbi5lZmZlY3RzLnB1c2goKCk9PntLYyhuLmFjdGl2ZUJyYW5jaCx0KX0pfWZvcig7ZS5jb21wb25lbnQ7KWU9ZS5jb21wb25lbnQuc3ViVHJlZTtpZihlLnNoYXBlRmxhZyYxJiZlLmVsKXFjKGUuZWwsdCk7ZWxzZSBpZihlLnR5cGU9PT1MKWUuY2hpbGRyZW4uZm9yRWFjaChlPT5LYyhlLHQpKTtlbHNlIGlmKGUudHlwZT09PWxzKXtsZXR7ZWw6bixhbmNob3I6cn09ZTtmb3IoO24mJihxYyhuLHQpLG4hPT1yKTspbj1uLm5leHRTaWJsaW5nfX1mdW5jdGlvbiBxYyhlLHQpe2lmKGUubm9kZVR5cGU9PT0xKXtsZXQgbj1lLnN0eWxlLHI9YGA7Zm9yKGxldCBlIGluIHQpe2xldCBpPWplKHRbZV0pO24uc2V0UHJvcGVydHkoYC0tJHtlfWAsaSkscis9YC0tJHtlfTogJHtpfTtgfW5bV2NdPXJ9fXZhciBKYz0vKD86Xnw7KVxzKmRpc3BsYXlccyo6LztmdW5jdGlvbiBZYyhlLHQsbil7bGV0IHI9ZS5zdHlsZSxpPXkobiksYT0hMTtpZihuJiYhaSl7aWYodCl7aWYoeSh0KSlmb3IobGV0IGUgb2YgdC5zcGxpdChgO2ApKXtsZXQgdD1lLnNsaWNlKDAsZS5pbmRleE9mKGA6YCkpLnRyaW0oKTtuW3RdPz9aYyhyLHQsYGApfWVsc2UgZm9yKGxldCBlIGluIHQpbltlXT8/WmMocixlLGBgKX1mb3IobGV0IGkgaW4gbil7aT09PWBkaXNwbGF5YCYmKGE9ITApO2xldCBvPW5baV07bz09bnVsbD9aYyhyLGksYGApOnRsKGUsaSwheSh0KSYmdD90W2ldOnZvaWQgMCxvKXx8WmMocixpLG8pfX1lbHNlIGlmKGkpe2lmKHQhPT1uKXtsZXQgZT1yW1djXTtlJiYobis9YDtgK2UpLHIuY3NzVGV4dD1uLGE9SmMudGVzdChuKX19ZWxzZSB0JiZlLnJlbW92ZUF0dHJpYnV0ZShgc3R5bGVgKTt6YyBpbiBlJiYoZVt6Y109YT9yLmRpc3BsYXk6YGAsZVtCY10mJihyLmRpc3BsYXk9YG5vbmVgKSl9dmFyIFhjPS9ccyohaW1wb3J0YW50JC87ZnVuY3Rpb24gWmMoZSx0LG4pe2lmKHAobikpbi5mb3JFYWNoKG49PlpjKGUsdCxuKSk7ZWxzZSBpZihuPz89YGAsdC5zdGFydHNXaXRoKGAtLWApKWUuc2V0UHJvcGVydHkodCxuKTtlbHNle2xldCByPWVsKGUsdCk7WGMudGVzdChuKT9lLnNldFByb3BlcnR5KG9lKHIpLG4ucmVwbGFjZShYYyxgYCksYGltcG9ydGFudGApOmVbcl09bn19dmFyIFFjPVtgV2Via2l0YCxgTW96YCxgbXNgXSwkYz17fTtmdW5jdGlvbiBlbChlLHQpe2xldCBuPSRjW3RdO2lmKG4pcmV0dXJuIG47bGV0IHI9RSh0KTtpZihyIT09YGZpbHRlcmAmJnIgaW4gZSlyZXR1cm4gJGNbdF09cjtyPXNlKHIpO2ZvcihsZXQgbj0wO248UWMubGVuZ3RoO24rKyl7bGV0IGk9UWNbbl0rcjtpZihpIGluIGUpcmV0dXJuICRjW3RdPWl9cmV0dXJuIHR9ZnVuY3Rpb24gdGwoZSx0LG4scil7cmV0dXJuIGUudGFnTmFtZT09PWBURVhUQVJFQWAmJih0PT09YHdpZHRoYHx8dD09PWBoZWlnaHRgKSYmeShyKSYmbj09PXJ9dmFyIG5sPWBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYDtmdW5jdGlvbiBybChlLHQsbixyLGksYT1DZSh0KSl7ciYmdC5zdGFydHNXaXRoKGB4bGluazpgKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMobmwsdC5zbGljZSg2LHQubGVuZ3RoKSk6ZS5zZXRBdHRyaWJ1dGVOUyhubCx0LG4pOm49PW51bGx8fGEmJiF3ZShuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LGE/YGA6YihuKT9TdHJpbmcobik6bil9ZnVuY3Rpb24gaWwoZSx0LG4scixpKXtpZih0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgKXtuIT1udWxsJiYoZVt0XT10PT09YGlubmVySFRNTGA/ZmMobik6bik7cmV0dXJufWxldCBhPWUudGFnTmFtZTtpZih0PT09YHZhbHVlYCYmYSE9PWBQUk9HUkVTU2AmJiFhLmluY2x1ZGVzKGAtYCkpe2xldCByPWE9PT1gT1BUSU9OYD9lLmdldEF0dHJpYnV0ZShgdmFsdWVgKXx8YGA6ZS52YWx1ZSxpPW49PW51bGw/ZS50eXBlPT09YGNoZWNrYm94YD9gb25gOmBgOlN0cmluZyhuKTsociE9PWl8fCEoYF92YWx1ZWBpbiBlKSkmJihlLnZhbHVlPWkpLG4/P2UucmVtb3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT1gYHx8bj09bnVsbCl7bGV0IHI9dHlwZW9mIGVbdF07cj09PWBib29sZWFuYD9uPXdlKG4pOm49PW51bGwmJnI9PT1gc3RyaW5nYD8obj1gYCxvPSEwKTpyPT09YG51bWJlcmAmJihuPTAsbz0hMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUoaXx8dCl9ZnVuY3Rpb24gYWwoZSx0LG4scil7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKX1mdW5jdGlvbiBvbChlLHQsbixyKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfXZhciBzbD1TeW1ib2woYF92ZWlgKTtmdW5jdGlvbiBjbChlLHQsbixyLGk9bnVsbCl7bGV0IGE9ZVtzbF18fChlW3NsXT17fSksbz1hW3RdO2lmKHImJm8pby52YWx1ZT1yO2Vsc2V7bGV0W24sc109ZGwodCk7cj9hbChlLG4sYVt0XT1obChyLGkpLHMpOm8mJihvbChlLG4sbyxzKSxhW3RdPXZvaWQgMCl9fXZhciBsbD0vKE9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvLHVsPS9eb246Pyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIGRsKGUpe2xldCB0LG47Zm9yKDsobj1lLm1hdGNoKGxsKSkmJiF1bC50ZXN0KGUpOyl0fHw9e30sZT1lLnNsaWNlKDAsZS5sZW5ndGgtblsxXS5sZW5ndGgpLHRbblsxXS50b0xvd2VyQ2FzZSgpXT0hMDtyZXR1cm5bZVsyXT09PWA6YD9lLnNsaWNlKDMpOm9lKGUuc2xpY2UoMikpLHRdfXZhciBmbD0wLHBsPVByb21pc2UucmVzb2x2ZSgpLG1sPSgpPT5mbHx8PShwbC50aGVuKCgpPT5mbD0wKSxEYXRlLm5vdygpKTtmdW5jdGlvbiBobChlLHQpe2xldCBuPWU9PntpZighZS5fdnRzKWUuX3Z0cz1EYXRlLm5vdygpO2Vsc2UgaWYoZS5fdnRzPD1uLmF0dGFjaGVkKXJldHVybjtsZXQgcj1uLnZhbHVlO2lmKHAocikpe2xldCBuPWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPSgpPT57bi5jYWxsKGUpLGUuX3N0b3BwZWQ9ITB9O2xldCBpPXIuc2xpY2UoKSxhPVtlXTtmb3IobGV0IG49MDtuPGkubGVuZ3RoJiYhZS5fc3RvcHBlZDtuKyspe2xldCBlPWlbbl07ZSYmSG4oZSx0LDUsYSl9fWVsc2UgSG4ocix0LDUsW2VdKX07cmV0dXJuIG4udmFsdWU9ZSxuLmF0dGFjaGVkPW1sKCksbn12YXIgZ2w9ZT0+ZS5jaGFyQ29kZUF0KDApPT09MTExJiZlLmNoYXJDb2RlQXQoMSk9PT0xMTAmJmUuY2hhckNvZGVBdCgyKT45NiYmZS5jaGFyQ29kZUF0KDIpPDEyMyxfbD0oZSx0LG4scixpLGEpPT57bGV0IG89aT09PWBzdmdgO3Q9PT1gY2xhc3NgP1JjKGUscixvKTp0PT09YHN0eWxlYD9ZYyhlLG4scik6cyh0KT9jKHQpfHxjbChlLHQsbixyLGEpOih0WzBdPT09YC5gPyh0PXQuc2xpY2UoMSksITApOnRbMF09PT1gXmA/KHQ9dC5zbGljZSgxKSwhMSk6dmwoZSx0LHIsbykpPyhpbChlLHQsciksIWUudGFnTmFtZS5pbmNsdWRlcyhgLWApJiYodD09PWB2YWx1ZWB8fHQ9PT1gY2hlY2tlZGB8fHQ9PT1gc2VsZWN0ZWRgKSYmcmwoZSx0LHIsbyxhLHQhPT1gdmFsdWVgKSk6ZS5faXNWdWVDRSYmKHlsKGUsdCl8fGUuX2RlZi5fX2FzeW5jTG9hZGVyJiYoL1tBLVpdLy50ZXN0KHQpfHwheShyKSkpP2lsKGUsRSh0KSxyLGEsdCk6KHQ9PT1gdHJ1ZS12YWx1ZWA/ZS5fdHJ1ZVZhbHVlPXI6dD09PWBmYWxzZS12YWx1ZWAmJihlLl9mYWxzZVZhbHVlPXIpLHJsKGUsdCxyLG8pKX07ZnVuY3Rpb24gdmwoZSx0LG4scil7aWYocilyZXR1cm4hISh0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgfHx0IGluIGUmJmdsKHQpJiZ2KG4pKTtpZih0PT09YHNwZWxsY2hlY2tgfHx0PT09YGRyYWdnYWJsZWB8fHQ9PT1gdHJhbnNsYXRlYHx8dD09PWBhdXRvY29ycmVjdGB8fHQ9PT1gc2FuZGJveGAmJmUudGFnTmFtZT09PWBJRlJBTUVgfHx0PT09YGZvcm1gfHx0PT09YGxpc3RgJiZlLnRhZ05hbWU9PT1gSU5QVVRgfHx0PT09YHR5cGVgJiZlLnRhZ05hbWU9PT1gVEVYVEFSRUFgKXJldHVybiExO2lmKHQ9PT1gd2lkdGhgfHx0PT09YGhlaWdodGApe2xldCB0PWUudGFnTmFtZTtpZih0PT09YElNR2B8fHQ9PT1gVklERU9gfHx0PT09YENBTlZBU2B8fHQ9PT1gU09VUkNFYClyZXR1cm4hMX1yZXR1cm4gZ2wodCkmJnkobik/ITE6dCBpbiBlfWZ1bmN0aW9uIHlsKGUsdCl7bGV0IG49ZS5fZGVmLnByb3BzO2lmKCFuKXJldHVybiExO2xldCByPUUodCk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5zb21lKGU9PkUoZSk9PT1yKTpPYmplY3Qua2V5cyhuKS5zb21lKGU9PkUoZSk9PT1yKX12YXIgYmw9e307ZnVuY3Rpb24geGwoZSx0LG4pe2xldCByPUYoZSx0KTt0ZShyKSYmKHI9bCh7fSxyLHQpKTtjbGFzcyBpIGV4dGVuZHMgd2x7Y29uc3RydWN0b3IoZSl7c3VwZXIocixlLG4pfX1yZXR1cm4gaS5kZWY9cixpfXZhciBTbD0oKGUsdCk9PnhsKGUsdCxodSkpLENsPXR5cGVvZiBIVE1MRWxlbWVudDxgdWA/SFRNTEVsZW1lbnQ6Y2xhc3N7fSx3bD1jbGFzcyBlIGV4dGVuZHMgQ2x7Y29uc3RydWN0b3IoZSx0PXt9LG49bXUpe3N1cGVyKCksdGhpcy5fZGVmPWUsdGhpcy5fcHJvcHM9dCx0aGlzLl9jcmVhdGVBcHA9bix0aGlzLl9pc1Z1ZUNFPSEwLHRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fYXBwPW51bGwsdGhpcy5fbm9uY2U9dGhpcy5fZGVmLm5vbmNlLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl9yZXNvbHZlZD0hMSx0aGlzLl9wYXRjaGluZz0hMSx0aGlzLl9kaXJ0eT0hMSx0aGlzLl9udW1iZXJQcm9wcz1udWxsLHRoaXMuX3N0eWxlQ2hpbGRyZW49bmV3IFdlYWtTZXQsdGhpcy5fc3R5bGVBbmNob3JzPW5ldyBXZWFrTWFwLHRoaXMuX29iPW51bGwsdGhpcy5zaGFkb3dSb290JiZuIT09bXU/dGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3Q6ZS5zaGFkb3dSb290PT09ITE/dGhpcy5fcm9vdD10aGlzOih0aGlzLmF0dGFjaFNoYWRvdyhsKHt9LGUuc2hhZG93Um9vdE9wdGlvbnMse21vZGU6YG9wZW5gfSkpLHRoaXMuX3Jvb3Q9dGhpcy5zaGFkb3dSb290KX1jb25uZWN0ZWRDYWxsYmFjaygpe2lmKCF0aGlzLmlzQ29ubmVjdGVkKXJldHVybjshdGhpcy5zaGFkb3dSb290JiYhdGhpcy5fcmVzb2x2ZWQmJnRoaXMuX3BhcnNlU2xvdHMoKSx0aGlzLl9jb25uZWN0ZWQ9ITA7bGV0IHQ9dGhpcztmb3IoO3QmJj10LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlfHx0Lmhvc3Q7KWlmKHQgaW5zdGFuY2VvZiBlKXt0aGlzLl9wYXJlbnQ9dDticmVha310aGlzLl9pbnN0YW5jZXx8KHRoaXMuX3Jlc29sdmVkP3RoaXMuX21vdW50KHRoaXMuX2RlZik6dCYmdC5fcGVuZGluZ1Jlc29sdmU/dGhpcy5fcGVuZGluZ1Jlc29sdmU9dC5fcGVuZGluZ1Jlc29sdmUudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMCx0aGlzLmlzQ29ubmVjdGVkKXJldHVybiB0aGlzLl9yZXNvbHZlRGVmKCl9KTp0aGlzLl9yZXNvbHZlRGVmKCkpfV9zZXRQYXJlbnQoZT10aGlzLl9wYXJlbnQpe2UmJih0aGlzLl9pbnN0YW5jZS5wYXJlbnQ9ZS5faW5zdGFuY2UsdGhpcy5faW5oZXJpdFBhcmVudENvbnRleHQoZSkpfV9pbmhlcml0UGFyZW50Q29udGV4dChlPXRoaXMuX3BhcmVudCl7ZSYmdGhpcy5fYXBwJiZPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcy5fYXBwLl9jb250ZXh0LnByb3ZpZGVzLGUuX2luc3RhbmNlLnByb3ZpZGVzKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX2Nvbm5lY3RlZD0hMSxRbigoKT0+e3RoaXMuX2Nvbm5lY3RlZHx8KHRoaXMuX29iJiY9KHRoaXMuX29iLmRpc2Nvbm5lY3QoKSxudWxsKSx0aGlzLl9hcHAmJnRoaXMuX2FwcC51bm1vdW50KCksdGhpcy5faW5zdGFuY2UmJih0aGlzLl9pbnN0YW5jZS5jZT12b2lkIDApLHRoaXMuX2FwcD10aGlzLl9pbnN0YW5jZT1udWxsLHRoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmPSh0aGlzLl90ZWxlcG9ydFRhcmdldHMuY2xlYXIoKSx2b2lkIDApKX0pfV9wcm9jZXNzTXV0YXRpb25zKGUpe2ZvcihsZXQgdCBvZiBlKXRoaXMuX3NldEF0dHIodC5hdHRyaWJ1dGVOYW1lKX1fcmVzb2x2ZURlZigpe2lmKHRoaXMuX3BlbmRpbmdSZXNvbHZlKXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZTtmb3IobGV0IGU9MDtlPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7ZSsrKXRoaXMuX3NldEF0dHIodGhpcy5hdHRyaWJ1dGVzW2VdLm5hbWUpO3RoaXMuX29iPW5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMuYmluZCh0aGlzKSksdGhpcy5fb2Iub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSk7bGV0IGU9KGUsdD0hMSk9Pnt0aGlzLl9yZXNvbHZlZD0hMCx0aGlzLl9wZW5kaW5nUmVzb2x2ZT12b2lkIDA7bGV0e3Byb3BzOm4sc3R5bGVzOnJ9PWUsaTtpZihuJiYhcChuKSlmb3IobGV0IGUgaW4gbil7bGV0IHQ9bltlXTsodD09PU51bWJlcnx8dCYmdC50eXBlPT09TnVtYmVyKSYmKGUgaW4gdGhpcy5fcHJvcHMmJih0aGlzLl9wcm9wc1tlXT1mZSh0aGlzLl9wcm9wc1tlXSkpLChpfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbRShlKV09ITApfXRoaXMuX251bWJlclByb3BzPWksdGhpcy5fcmVzb2x2ZVByb3BzKGUpLHRoaXMuc2hhZG93Um9vdCYmdGhpcy5fYXBwbHlTdHlsZXMociksdGhpcy5fbW91bnQoZSl9LHQ9dGhpcy5fZGVmLl9fYXN5bmNMb2FkZXI7aWYodClyZXR1cm4gdGhpcy5fcGVuZGluZ1Jlc29sdmU9dCgpLnRoZW4odD0+e3QuY29uZmlndXJlQXBwPXRoaXMuX2RlZi5jb25maWd1cmVBcHAsZSh0aGlzLl9kZWY9dCwhMCl9KSx0aGlzLl9wZW5kaW5nUmVzb2x2ZTtlKHRoaXMuX2RlZil9X21vdW50KGUpe3RoaXMuX2FwcD10aGlzLl9jcmVhdGVBcHAoZSksdGhpcy5faW5oZXJpdFBhcmVudENvbnRleHQoKSxlLmNvbmZpZ3VyZUFwcCYmZS5jb25maWd1cmVBcHAodGhpcy5fYXBwKSx0aGlzLl9hcHAuX2NlVk5vZGU9dGhpcy5fY3JlYXRlVk5vZGUoKSx0aGlzLl9hcHAubW91bnQodGhpcy5fcm9vdCk7bGV0IHQ9dGhpcy5faW5zdGFuY2UmJnRoaXMuX2luc3RhbmNlLmV4cG9zZWQ7aWYodClmb3IobGV0IGUgaW4gdClmKHRoaXMsZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldDooKT0+Tih0W2VdKX0pfV9yZXNvbHZlUHJvcHMoZSl7bGV0e3Byb3BzOnR9PWUsbj1wKHQpP3Q6T2JqZWN0LmtleXModHx8e30pO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0aGlzKSllWzBdIT09YF9gJiZuLmluY2x1ZGVzKGUpJiZ0aGlzLl9zZXRQcm9wKGUsdGhpc1tlXSk7Zm9yKGxldCBlIG9mIG4ubWFwKEUpKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldCgpe3JldHVybiB0aGlzLl9nZXRQcm9wKGUpfSxzZXQodCl7dGhpcy5fc2V0UHJvcChlLHQsITAsIXRoaXMuX3BhdGNoaW5nKX19KX1fc2V0QXR0cihlKXtpZihlLnN0YXJ0c1dpdGgoYGRhdGEtdi1gKSlyZXR1cm47bGV0IHQ9dGhpcy5oYXNBdHRyaWJ1dGUoZSksbj10P3RoaXMuZ2V0QXR0cmlidXRlKGUpOmJsLHI9RShlKTt0JiZ0aGlzLl9udW1iZXJQcm9wcyYmdGhpcy5fbnVtYmVyUHJvcHNbcl0mJihuPWZlKG4pKSx0aGlzLl9zZXRQcm9wKHIsbiwhMSwhMCl9X2dldFByb3AoZSl7cmV0dXJuIHRoaXMuX3Byb3BzW2VdfV9zZXRQcm9wKGUsdCxuPSEwLHI9ITEpe2lmKHQhPT10aGlzLl9wcm9wc1tlXSYmKHRoaXMuX2RpcnR5PSEwLHQ9PT1ibD9kZWxldGUgdGhpcy5fcHJvcHNbZV06KHRoaXMuX3Byb3BzW2VdPXQsZT09PWBrZXlgJiZ0aGlzLl9hcHAmJih0aGlzLl9hcHAuX2NlVk5vZGUua2V5PXQpKSxyJiZ0aGlzLl9pbnN0YW5jZSYmdGhpcy5fdXBkYXRlKCksbikpe2xldCBuPXRoaXMuX29iO24mJih0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG4udGFrZVJlY29yZHMoKSksbi5kaXNjb25uZWN0KCkpLHQ9PT0hMD90aGlzLnNldEF0dHJpYnV0ZShvZShlKSxgYCk6dHlwZW9mIHQ9PWBzdHJpbmdgfHx0eXBlb2YgdD09YG51bWJlcmA/dGhpcy5zZXRBdHRyaWJ1dGUob2UoZSksdCtgYCk6dHx8dGhpcy5yZW1vdmVBdHRyaWJ1dGUob2UoZSkpLG4mJm4ub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSl9fV91cGRhdGUoKXtsZXQgZT10aGlzLl9jcmVhdGVWTm9kZSgpO3RoaXMuX2FwcCYmKGUuYXBwQ29udGV4dD10aGlzLl9hcHAuX2NvbnRleHQpLGZ1KGUsdGhpcy5fcm9vdCl9X2NyZWF0ZVZOb2RlKCl7bGV0IGU9e307dGhpcy5zaGFkb3dSb290fHwoZS5vblZub2RlTW91bnRlZD1lLm9uVm5vZGVVcGRhdGVkPXRoaXMuX3JlbmRlclNsb3RzLmJpbmQodGhpcykpO2xldCB0PUgodGhpcy5fZGVmLGwoZSx0aGlzLl9wcm9wcykpO3JldHVybiB0aGlzLl9pbnN0YW5jZXx8KHQuY2U9ZT0+e3RoaXMuX2luc3RhbmNlPWUsZS5jZT10aGlzLGUuaXNDRT0hMDtsZXQgdD0oZSx0KT0+e3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZSx0ZSh0WzBdKT9sKHtkZXRhaWw6dH0sdFswXSk6e2RldGFpbDp0fSkpfTtlLmVtaXQ9KGUsLi4ubik9Pnt0KGUsbiksb2UoZSkhPT1lJiZ0KG9lKGUpLG4pfSx0aGlzLl9zZXRQYXJlbnQoKX0pLHR9X2FwcGx5U3R5bGVzKGUsdCxuKXtpZighZSlyZXR1cm47aWYodCl7aWYodD09PXRoaXMuX2RlZnx8dGhpcy5fc3R5bGVDaGlsZHJlbi5oYXModCkpcmV0dXJuO3RoaXMuX3N0eWxlQ2hpbGRyZW4uYWRkKHQpfWxldCByPXRoaXMuX25vbmNlLGk9dGhpcy5zaGFkb3dSb290LGE9bj90aGlzLl9nZXRTdHlsZUFuY2hvcihuKXx8dGhpcy5fZ2V0U3R5bGVBbmNob3IodGhpcy5fZGVmKTp0aGlzLl9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoaSksbz1udWxsO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3ImJmMuc2V0QXR0cmlidXRlKGBub25jZWAsciksYy50ZXh0Q29udGVudD1lW3NdLGkuaW5zZXJ0QmVmb3JlKGMsb3x8YSksbz1jLHM9PT0wJiYobnx8dGhpcy5fc3R5bGVBbmNob3JzLnNldCh0aGlzLl9kZWYsYyksdCYmdGhpcy5fc3R5bGVBbmNob3JzLnNldCh0LGMpKX19X2dldFN0eWxlQW5jaG9yKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PXRoaXMuX3N0eWxlQW5jaG9ycy5nZXQoZSk7cmV0dXJuIHQmJnQucGFyZW50Tm9kZT09PXRoaXMuc2hhZG93Um9vdD90Oih0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuZGVsZXRlKGUpLG51bGwpfV9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoZSl7Zm9yKGxldCB0PTA7dDxlLmNoaWxkTm9kZXMubGVuZ3RoO3QrKyl7bGV0IG49ZS5jaGlsZE5vZGVzW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpKXJldHVybiBufXJldHVybiBudWxsfV9wYXJzZVNsb3RzKCl7bGV0IGU9dGhpcy5fc2xvdHM9e30sdDtmb3IoO3Q9dGhpcy5maXJzdENoaWxkOyl7bGV0IG49dC5ub2RlVHlwZT09PTEmJnQuZ2V0QXR0cmlidXRlKGBzbG90YCl8fGBkZWZhdWx0YDsoZVtuXXx8KGVbbl09W10pKS5wdXNoKHQpLHRoaXMucmVtb3ZlQ2hpbGQodCl9fV9yZW5kZXJTbG90cygpe2xldCBlPXRoaXMuX2dldFNsb3RzKCksdD10aGlzLl9pbnN0YW5jZS50eXBlLl9fc2NvcGVJZDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPXIuZ2V0QXR0cmlidXRlKGBuYW1lYCl8fGBkZWZhdWx0YCxhPXRoaXMuX3Nsb3RzW2ldLG89ci5wYXJlbnROb2RlO2lmKGEpZm9yKGxldCBlIG9mIGEpe2lmKHQmJmUubm9kZVR5cGU9PT0xKXtsZXQgbj10K2Atc2Ascj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsMSk7ZS5zZXRBdHRyaWJ1dGUobixgYCk7bGV0IGk7Zm9yKDtpPXIubmV4dE5vZGUoKTspaS5zZXRBdHRyaWJ1dGUobixgYCl9by5pbnNlcnRCZWZvcmUoZSxyKX1lbHNlIGZvcig7ci5maXJzdENoaWxkOylvLmluc2VydEJlZm9yZShyLmZpcnN0Q2hpbGQscik7by5yZW1vdmVDaGlsZChyKX19X2dldFNsb3RzKCl7bGV0IGU9W3RoaXNdO3RoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmZS5wdXNoKC4uLnRoaXMuX3RlbGVwb3J0VGFyZ2V0cyk7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSl7bGV0IGU9bi5xdWVyeVNlbGVjdG9yQWxsKGBzbG90YCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5hZGQoZVtuXSl9cmV0dXJuIEFycmF5LmZyb20odCl9X2luamVjdENoaWxkU3R5bGUoZSx0KXt0aGlzLl9hcHBseVN0eWxlcyhlLnN0eWxlcyxlLHQpfV9iZWdpblBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITAsdGhpcy5fZGlydHk9ITF9X2VuZFBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITEsdGhpcy5fZGlydHkmJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKX1faGFzU2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9kZWYuc2hhZG93Um9vdCE9PSExfV9yZW1vdmVDaGlsZFN0eWxlKGUpe319O2Z1bmN0aW9uIFRsKGUpe2xldCB0PUZzKCk7cmV0dXJuIHQmJnQuY2V8fG51bGx9ZnVuY3Rpb24gRWwoKXtsZXQgZT1UbCgpO3JldHVybiBlJiZlLnNoYWRvd1Jvb3R9ZnVuY3Rpb24gRGwoZT1gJHN0eWxlYCl7e2xldCB0PUZzKCk7aWYoIXQpcmV0dXJuIHI7bGV0IG49dC50eXBlLl9fY3NzTW9kdWxlcztyZXR1cm4gbiYmbltlXXx8cn19dmFyIE9sPW5ldyBXZWFrTWFwLGtsPW5ldyBXZWFrTWFwLEFsPVN5bWJvbChgX21vdmVDYmApLGpsPVN5bWJvbChgX2VudGVyQ2JgKSxNbD0oZT0+KGRlbGV0ZSBlLnByb3BzLm1vZGUsZSkpKHtuYW1lOmBUcmFuc2l0aW9uR3JvdXBgLHByb3BzOmwoe30sU2Mse3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30pLHNldHVwKGUse3Nsb3RzOnR9KXtsZXQgbj1GcygpLHI9S3IoKSxpLGE7cmV0dXJuICRpKCgpPT57aWYoIWkubGVuZ3RoKXJldHVybjtsZXQgdD1lLm1vdmVDbGFzc3x8YCR7ZS5uYW1lfHxgdmB9LW1vdmVgO2lmKCFMbChpWzBdLmVsLG4udm5vZGUuZWwsdCkpe2k9W107cmV0dXJufWkuZm9yRWFjaChObCksaS5mb3JFYWNoKFBsKTtsZXQgcj1pLmZpbHRlcihGbCk7TGMobi52bm9kZS5lbCksci5mb3JFYWNoKGU9PntsZXQgbj1lLmVsLHI9bi5zdHlsZTtrYyhuLHQpLHIudHJhbnNmb3JtPXIud2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPWBgO2xldCBpPW5bQWxdPWU9PntlJiZlLnRhcmdldCE9PW58fCghZXx8ZS5wcm9wZXJ0eU5hbWUuZW5kc1dpdGgoYHRyYW5zZm9ybWApKSYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdHJhbnNpdGlvbmVuZGAsaSksbltBbF09bnVsbCxBYyhuLHQpKX07bi5hZGRFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKX0pLGk9W119KSwoKT0+e2xldCBvPUEoZSkscz1FYyhvKSxjPW8udGFnfHxMO2lmKGk9W10sYSlmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrKyl7bGV0IHQ9YVtlXTt0LmVsJiZ0LmVsIGluc3RhbmNlb2YgRWxlbWVudCYmIXQuZWxbQmNdJiYoaS5wdXNoKHQpLHJpKHQsZWkodCxzLHIsbikpLE9sLnNldCh0LElsKHQuZWwpKSl9YT10LmRlZmF1bHQ/aWkodC5kZWZhdWx0KCkpOltdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3Qua2V5IT1udWxsJiZyaSh0LGVpKHQscyxyLG4pKX1yZXR1cm4gSChjLG51bGwsYSl9fX0pO2Z1bmN0aW9uIE5sKGUpe2xldCB0PWUuZWw7dFtBbF0mJnRbQWxdKCksdFtqbF0mJnRbamxdKCl9ZnVuY3Rpb24gUGwoZSl7a2wuc2V0KGUsSWwoZS5lbCkpfWZ1bmN0aW9uIEZsKGUpe2xldCB0PU9sLmdldChlKSxuPWtsLmdldChlKSxyPXQubGVmdC1uLmxlZnQsaT10LnRvcC1uLnRvcDtpZihyfHxpKXtsZXQgdD1lLmVsLG49dC5zdHlsZSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLHM9MTtyZXR1cm4gdC5vZmZzZXRXaWR0aCYmKG89YS53aWR0aC90Lm9mZnNldFdpZHRoKSx0Lm9mZnNldEhlaWdodCYmKHM9YS5oZWlnaHQvdC5vZmZzZXRIZWlnaHQpLCghTnVtYmVyLmlzRmluaXRlKG8pfHxvPT09MCkmJihvPTEpLCghTnVtYmVyLmlzRmluaXRlKHMpfHxzPT09MCkmJihzPTEpLE1hdGguYWJzKG8tMSk8LjAxJiYobz0xKSxNYXRoLmFicyhzLTEpPC4wMSYmKHM9MSksbi50cmFuc2Zvcm09bi53ZWJraXRUcmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Ivb31weCwke2kvc31weClgLG4udHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZX19ZnVuY3Rpb24gSWwoZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDp0LmxlZnQsdG9wOnQudG9wfX1mdW5jdGlvbiBMbChlLHQsbil7bGV0IHI9ZS5jbG9uZU5vZGUoKSxpPWVbYmNdO2kmJmkuZm9yRWFjaChlPT57ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5yZW1vdmUoZSkpfSksbi5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5hZGQoZSkpLHIuc3R5bGUuZGlzcGxheT1gbm9uZWA7bGV0IGE9dC5ub2RlVHlwZT09PTE/dDp0LnBhcmVudE5vZGU7YS5hcHBlbmRDaGlsZChyKTtsZXR7aGFzVHJhbnNmb3JtOm99PVBjKHIpO3JldHVybiBhLnJlbW92ZUNoaWxkKHIpLG99dmFyIFJsPWU9PntsZXQgdD1lLnByb3BzW2BvblVwZGF0ZTptb2RlbFZhbHVlYF18fCExO3JldHVybiBwKHQpP2U9PmxlKHQsZSk6dH07ZnVuY3Rpb24gemwoZSl7ZS50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIEJsKGUpe2xldCB0PWUudGFyZ2V0O3QuY29tcG9zaW5nJiYodC5jb21wb3Npbmc9ITEsdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChgaW5wdXRgKSkpfXZhciBWbD1TeW1ib2woYF9hc3NpZ25gKSxIbD1TeW1ib2woYF9pbml0aWFsVmFsdWVgKTtmdW5jdGlvbiBVbChlLHQsbil7cmV0dXJuIHQmJihlPWUudHJpbSgpKSxuJiYoZT1kZShlKSksZX12YXIgV2w9e2NyZWF0ZWQoZSx7bW9kaWZpZXJzOntsYXp5OnQsdHJpbTpuLG51bWJlcjpyfX0saSl7ZS5wYXJlbnROb2RlJiYoZS50eXBlPT09YHRleHRgP2VbSGxdPWUuZGVmYXVsdFZhbHVlLnJlcGxhY2UoL1tcclxuXS9nLGBgKTplLnR5cGU9PT1gdGV4dGFyZWFgJiYoZVtIbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvXHJcbj8vZyxgCmApKSksZVtWbF09UmwoaSk7bGV0IGE9cnx8aS5wcm9wcyYmaS5wcm9wcy50eXBlPT09YG51bWJlcmA7YWwoZSx0P2BjaGFuZ2VgOmBpbnB1dGAsdD0+e3QudGFyZ2V0LmNvbXBvc2luZ3x8ZVtWbF0oVWwoZS52YWx1ZSxuLGEpKX0pLChufHxhKSYmYWwoZSxgY2hhbmdlYCwoKT0+e2UudmFsdWU9VWwoZS52YWx1ZSxuLGEpfSksdHx8KGFsKGUsYGNvbXBvc2l0aW9uc3RhcnRgLHpsKSxhbChlLGBjb21wb3NpdGlvbmVuZGAsQmwpLGFsKGUsYGNoYW5nZWAsQmwpKX0sbW91bnRlZChlLHt2YWx1ZTp0LG1vZGlmaWVyczp7dHJpbTpuLG51bWJlcjpyfX0pe2xldCBpPXQ/P2BgLGE9ZVtIbF07ZGVsZXRlIGVbSGxdLGEhPT12b2lkIDAmJihlLnR5cGU9PT1gdGV4dGB8fGUudHlwZT09PWB0ZXh0YXJlYWApJiZlLnZhbHVlIT09YT9lW1ZsXShVbChlLnZhbHVlLG4scikpOmUudmFsdWU9aX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnQsb2xkVmFsdWU6bixtb2RpZmllcnM6e2xhenk6cix0cmltOmksbnVtYmVyOmF9fSxvKXtpZihlW1ZsXT1SbChvKSxlLmNvbXBvc2luZylyZXR1cm47bGV0IHM9KGF8fGUudHlwZT09PWBudW1iZXJgKSYmIS9eMFxkLy50ZXN0KGUudmFsdWUpP2RlKGUudmFsdWUpOmUudmFsdWUsYz10Pz9gYDtpZihzPT09YylyZXR1cm47bGV0IGw9ZS5nZXRSb290Tm9kZSgpOyhsIGluc3RhbmNlb2YgRG9jdW1lbnR8fGwgaW5zdGFuY2VvZiBTaGFkb3dSb290KSYmbC5hY3RpdmVFbGVtZW50PT09ZSYmZS50eXBlIT09YHJhbmdlYCYmKHImJnQ9PT1ufHxpJiZlLnZhbHVlLnRyaW0oKT09PWMpfHwoZS52YWx1ZT1jKX19LEdsPXtkZWVwOiEwLGNyZWF0ZWQoZSx0LG4pe2VbVmxdPVJsKG4pLGFsKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1lLl9tb2RlbFZhbHVlLG49WGwoZSkscj1lLmNoZWNrZWQsaT1lW1ZsXTtpZihwKHQpKXtsZXQgZT1EZSh0LG4pLGE9ZSE9PS0xO2lmKHImJiFhKWkodC5jb25jYXQobikpO2Vsc2UgaWYoIXImJmEpe2xldCBuPVsuLi50XTtuLnNwbGljZShlLDEpLGkobil9fWVsc2UgaWYoaCh0KSl7bGV0IGU9bmV3IFNldCh0KTtyP2UuYWRkKG4pOmUuZGVsZXRlKG4pLGkoZSl9ZWxzZSBpKFpsKGUscikpfSl9LG1vdW50ZWQ6S2wsYmVmb3JlVXBkYXRlKGUsdCxuKXtlW1ZsXT1SbChuKSxLbChlLHQsbil9fTtmdW5jdGlvbiBLbChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHIpe2UuX21vZGVsVmFsdWU9dDtsZXQgaTtpZihwKHQpKWk9RGUodCxyLnByb3BzLnZhbHVlKT4tMTtlbHNlIGlmKGgodCkpaT10LmhhcyhyLnByb3BzLnZhbHVlKTtlbHNle2lmKHQ9PT1uKXJldHVybjtpPUVlKHQsWmwoZSwhMCkpfWUuY2hlY2tlZCE9PWkmJihlLmNoZWNrZWQ9aSl9dmFyIHFsPXtjcmVhdGVkKGUse3ZhbHVlOnR9LG4pe2UuY2hlY2tlZD1FZSh0LG4ucHJvcHMudmFsdWUpLGVbVmxdPVJsKG4pLGFsKGUsYGNoYW5nZWAsKCk9PntlW1ZsXShYbChlKSl9KX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZVtWbF09UmwociksdCE9PW4mJihlLmNoZWNrZWQ9RWUodCxyLnByb3BzLnZhbHVlKSl9fSxKbD17ZGVlcDohMCxjcmVhdGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOntudW1iZXI6bn19LHIpe2UuX21vZGVsVmFsdWU9dCxhbChlLGBjaGFuZ2VgLCgpPT57bGV0IHQ9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUub3B0aW9ucyxlPT5lLnNlbGVjdGVkKS5tYXAoZT0+bj9kZShYbChlKSk6WGwoZSkpO2VbVmxdKGUubXVsdGlwbGU/aChlLl9tb2RlbFZhbHVlKT9uZXcgU2V0KHQpOnQ6dFswXSksZS5fYXNzaWduaW5nPSEwLFFuKCgpPT57ZS5fYXNzaWduaW5nPSExfSl9KSxlW1ZsXT1SbChyKX0sbW91bnRlZChlLHt2YWx1ZTp0fSl7WWwoZSx0KX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnR9LG4pe2UuX21vZGVsVmFsdWU9dCxlW1ZsXT1SbChuKX0sdXBkYXRlZChlLHt2YWx1ZTp0fSl7ZS5fYXNzaWduaW5nfHxZbChlLHQpfX07ZnVuY3Rpb24gWWwoZSx0KXtsZXQgbj1lLm11bHRpcGxlLHI9cCh0KTtpZighKG4mJiFyJiYhaCh0KSkpe2ZvcihsZXQgaT0wLGE9ZS5vcHRpb25zLmxlbmd0aDtpPGE7aSsrKXtsZXQgYT1lLm9wdGlvbnNbaV0sbz1YbChhKTtpZihuKXtpZihyKXtsZXQgZT10eXBlb2YgbzthLnNlbGVjdGVkPWU9PT1gc3RyaW5nYHx8ZT09PWBudW1iZXJgP3Quc29tZShlPT5TdHJpbmcoZSk9PT1TdHJpbmcobykpOkRlKHQsbyk+LTF9ZWxzZSBhLnNlbGVjdGVkPXQuaGFzKG8pfWVsc2UgaWYoRWUoWGwoYSksdCkpe2Uuc2VsZWN0ZWRJbmRleCE9PWkmJihlLnNlbGVjdGVkSW5kZXg9aSk7cmV0dXJufX0hbiYmZS5zZWxlY3RlZEluZGV4IT09LTEmJihlLnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBYbChlKXtyZXR1cm5gX3ZhbHVlYGluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBabChlLHQpe2xldCBuPXQ/YF90cnVlVmFsdWVgOmBfZmFsc2VWYWx1ZWA7cmV0dXJuIG4gaW4gZT9lW25dOnR9dmFyIFFsPXtjcmVhdGVkKGUsdCxuKXtldShlLHQsbixudWxsLGBjcmVhdGVkYCl9LG1vdW50ZWQoZSx0LG4pe2V1KGUsdCxuLG51bGwsYG1vdW50ZWRgKX0sYmVmb3JlVXBkYXRlKGUsdCxuLHIpe2V1KGUsdCxuLHIsYGJlZm9yZVVwZGF0ZWApfSx1cGRhdGVkKGUsdCxuLHIpe2V1KGUsdCxuLHIsYHVwZGF0ZWRgKX19O2Z1bmN0aW9uICRsKGUsdCl7c3dpdGNoKGUpe2Nhc2VgU0VMRUNUYDpyZXR1cm4gSmw7Y2FzZWBURVhUQVJFQWA6cmV0dXJuIFdsO2RlZmF1bHQ6c3dpdGNoKHQpe2Nhc2VgY2hlY2tib3hgOnJldHVybiBHbDtjYXNlYHJhZGlvYDpyZXR1cm4gcWw7ZGVmYXVsdDpyZXR1cm4gV2x9fX1mdW5jdGlvbiBldShlLHQsbixyLGkpe2xldCBhPSRsKGUudGFnTmFtZSxuLnByb3BzJiZuLnByb3BzLnR5cGUpW2ldO2EmJmEoZSx0LG4scil9ZnVuY3Rpb24gdHUoKXtXbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9KT0+KHt2YWx1ZTplfSkscWwuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSx0KT0+e2lmKHQucHJvcHMmJkVlKHQucHJvcHMudmFsdWUsZSkpcmV0dXJue2NoZWNrZWQ6ITB9fSxHbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYocChlKSl7aWYodC5wcm9wcyYmRGUoZSx0LnByb3BzLnZhbHVlKT4tMSlyZXR1cm57Y2hlY2tlZDohMH19ZWxzZSBpZihoKGUpKXtpZih0LnByb3BzJiZlLmhhcyh0LnByb3BzLnZhbHVlKSlyZXR1cm57Y2hlY2tlZDohMH19ZWxzZSBpZihlKXJldHVybntjaGVja2VkOiEwfX0sUWwuZ2V0U1NSUHJvcHM9KGUsdCk9PntpZih0eXBlb2YgdC50eXBlIT1gc3RyaW5nYClyZXR1cm47bGV0IG49JGwodC50eXBlLnRvVXBwZXJDYXNlKCksdC5wcm9wcyYmdC5wcm9wcy50eXBlKTtpZihuLmdldFNTUlByb3BzKXJldHVybiBuLmdldFNTUlByb3BzKGUsdCl9fXZhciBudT1bYGN0cmxgLGBzaGlmdGAsYGFsdGAsYG1ldGFgXSxydT17c3RvcDplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6ZT0+ZS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6ZT0+ZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQsY3RybDplPT4hZS5jdHJsS2V5LHNoaWZ0OmU9PiFlLnNoaWZ0S2V5LGFsdDplPT4hZS5hbHRLZXksbWV0YTplPT4hZS5tZXRhS2V5LGxlZnQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTAsbWlkZGxlOmU9PmBidXR0b25gaW4gZSYmZS5idXR0b24hPT0xLHJpZ2h0OmU9PmBidXR0b25gaW4gZSYmZS5idXR0b24hPT0yLGV4YWN0OihlLHQpPT5udS5zb21lKG49PmVbYCR7bn1LZXlgXSYmIXQuaW5jbHVkZXMobikpfSxpdT0oZSx0KT0+e2lmKCFlKXJldHVybiBlO2xldCBuPWUuX3dpdGhNb2RzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KChuLC4uLnIpPT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCByPXJ1W3RbZV1dO2lmKHImJnIobix0KSlyZXR1cm59cmV0dXJuIGUobiwuLi5yKX0pKX0sYXU9e2VzYzpgZXNjYXBlYCxzcGFjZTpgIGAsdXA6YGFycm93LXVwYCxsZWZ0OmBhcnJvdy1sZWZ0YCxyaWdodDpgYXJyb3ctcmlnaHRgLGRvd246YGFycm93LWRvd25gLGRlbGV0ZTpgYmFja3NwYWNlYH0sb3U9KGUsdCk9PntsZXQgbj1lLl93aXRoS2V5c3x8PXt9LHI9dC5qb2luKGAuYCk7cmV0dXJuIG5bcl18fChuW3JdPShuPT57aWYoIShga2V5YGluIG4pKXJldHVybjtsZXQgcj1vZShuLmtleSk7aWYodC5zb21lKGU9PmU9PT1yfHxhdVtlXT09PXIpKXJldHVybiBlKG4pfSkpfSxzdT1sKHtwYXRjaFByb3A6X2x9LF9jKSxjdSxsdT0hMTtmdW5jdGlvbiB1dSgpe3JldHVybiBjdXx8PUxvKHN1KX1mdW5jdGlvbiBkdSgpe3JldHVybiBjdT1sdT9jdTpSbyhzdSksbHU9ITAsY3V9dmFyIGZ1PSgoLi4uZSk9Pnt1dSgpLnJlbmRlciguLi5lKX0pLHB1PSgoLi4uZSk9PntkdSgpLmh5ZHJhdGUoLi4uZSl9KSxtdT0oKC4uLmUpPT57bGV0IHQ9dXUoKS5jcmVhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9ZT0+e2xldCByPV91KGUpO2lmKCFyKXJldHVybjtsZXQgaT10Ll9jb21wb25lbnQ7IXYoaSkmJiFpLnJlbmRlciYmIWkudGVtcGxhdGUmJihpLnRlbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeXBlPT09MSYmKHIudGV4dENvbnRlbnQ9YGApO2xldCBhPW4ociwhMSxndShyKSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBFbGVtZW50JiYoci5yZW1vdmVBdHRyaWJ1dGUoYHYtY2xvYWtgKSxyLnNldEF0dHJpYnV0ZShgZGF0YS12LWFwcGAsYGApKSxhfSx0fSksaHU9KCguLi5lKT0+e2xldCB0PWR1KCkuY3JlYXRlQXBwKC4uLmUpLHttb3VudDpufT10O3JldHVybiB0Lm1vdW50PWU9PntsZXQgdD1fdShlKTtpZih0KXJldHVybiBuKHQsITAsZ3UodCkpfSx0fSk7ZnVuY3Rpb24gZ3UoZSl7aWYoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuYHN2Z2A7aWYodHlwZW9mIE1hdGhNTEVsZW1lbnQ9PWBmdW5jdGlvbmAmJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50KXJldHVybmBtYXRobWxgfWZ1bmN0aW9uIF91KGUpe3JldHVybiB5KGUpP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ZX12YXIgdnU9ITEseXU9KCk9Pnt2dXx8KHZ1PSEwLHR1KCksVWMoKSl9LGJ1PXQoe0Jhc2VUcmFuc2l0aW9uOigpPT5RcixCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9yczooKT0+SnIsQ29tbWVudDooKT0+Y3MsRGVwcmVjYXRpb25UeXBlczooKT0+bnVsbCxFZmZlY3RTY29wZTooKT0+TmUsRXJyb3JDb2RlczooKT0+em4sRXJyb3JUeXBlU3RyaW5nczooKT0+b2MsRnJhZ21lbnQ6KCk9PkwsS2VlcEFsaXZlOigpPT5CaSxSZWFjdGl2ZUVmZmVjdDooKT0+emUsU3RhdGljOigpPT5scyxTdXNwZW5zZTooKT0+WG8sVGVsZXBvcnQ6KCk9PlZyLFRleHQ6KCk9PnNzLFRyYWNrT3BUeXBlczooKT0+RW4sVHJhbnNpdGlvbjooKT0+Q2MsVHJhbnNpdGlvbkdyb3VwOigpPT5NbCxUcmlnZ2VyT3BUeXBlczooKT0+RG4sVnVlRWxlbWVudDooKT0+d2wsYXNzZXJ0TnVtYmVyOigpPT5SbixjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZzooKT0+SG4sY2FsbFdpdGhFcnJvckhhbmRsaW5nOigpPT5WbixjYW1lbGl6ZTooKT0+RSxjYXBpdGFsaXplOigpPT5zZSxjbG9uZVZOb2RlOigpPT5Dcyxjb21wYXRVdGlsczooKT0+bnVsbCxjb21waWxlOigpPT54dSxjb21wdXRlZDooKT0+VyxjcmVhdGVBcHA6KCk9Pm11LGNyZWF0ZUJsb2NrOigpPT5CLGNyZWF0ZUNvbW1lbnRWTm9kZTooKT0+VHMsY3JlYXRlRWxlbWVudEJsb2NrOigpPT56LGNyZWF0ZUVsZW1lbnRWTm9kZTooKT0+VixjcmVhdGVIeWRyYXRpb25SZW5kZXJlcjooKT0+Um8sY3JlYXRlUHJvcHNSZXN0UHJveHk6KCk9PklhLGNyZWF0ZVJlbmRlcmVyOigpPT5MbyxjcmVhdGVTU1JBcHA6KCk9Pmh1LGNyZWF0ZVNsb3RzOigpPT5oYSxjcmVhdGVTdGF0aWNWTm9kZTooKT0+d3MsY3JlYXRlVGV4dFZOb2RlOigpPT5VLGNyZWF0ZVZOb2RlOigpPT5ILGN1c3RvbVJlZjooKT0+dm4sZGVmaW5lQXN5bmNDb21wb25lbnQ6KCk9PkxpLGRlZmluZUNvbXBvbmVudDooKT0+RixkZWZpbmVDdXN0b21FbGVtZW50OigpPT54bCxkZWZpbmVFbWl0czooKT0+d2EsZGVmaW5lRXhwb3NlOigpPT5UYSxkZWZpbmVNb2RlbDooKT0+T2EsZGVmaW5lT3B0aW9uczooKT0+RWEsZGVmaW5lUHJvcHM6KCk9PkNhLGRlZmluZVNTUkN1c3RvbUVsZW1lbnQ6KCk9PlNsLGRlZmluZVNsb3RzOigpPT5EYSxkZXZ0b29sczooKT0+c2MsZWZmZWN0OigpPT5RZSxlZmZlY3RTY29wZTooKT0+UGUsZ2V0Q3VycmVudEluc3RhbmNlOigpPT5GcyxnZXRDdXJyZW50U2NvcGU6KCk9PkZlLGdldEN1cnJlbnRXYXRjaGVyOigpPT5qbixnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW46KCk9PmlpLGd1YXJkUmVhY3RpdmVQcm9wczooKT0+U3MsaDooKT0+RyxoYW5kbGVFcnJvcjooKT0+VW4saGFzSW5qZWN0aW9uQ29udGV4dDooKT0+YnIsaHlkcmF0ZTooKT0+cHUsaHlkcmF0ZU9uSWRsZTooKT0+QWksaHlkcmF0ZU9uSW50ZXJhY3Rpb246KCk9PlBpLGh5ZHJhdGVPbk1lZGlhUXVlcnk6KCk9Pk5pLGh5ZHJhdGVPblZpc2libGU6KCk9Pk1pLGluaXRDdXN0b21Gb3JtYXR0ZXI6KCk9PnRjLGluaXREaXJlY3RpdmVzRm9yU1NSOigpPT55dSxpbmplY3Q6KCk9PnlyLGlzTWVtb1NhbWU6KCk9PnJjLGlzUHJveHk6KCk9Pm9uLGlzUmVhY3RpdmU6KCk9Pm5uLGlzUmVhZG9ubHk6KCk9PnJuLGlzUmVmOigpPT5qLGlzUnVudGltZU9ubHk6KCk9PkpzLGlzU2hhbGxvdzooKT0+YW4saXNWTm9kZTooKT0+Z3MsbWFya1JhdzooKT0+c24sbWVyZ2VEZWZhdWx0czooKT0+UGEsbWVyZ2VNb2RlbHM6KCk9PkZhLG1lcmdlUHJvcHM6KCk9PmtzLG5leHRUaWNrOigpPT5Rbixub2RlT3BzOigpPT5fYyxub3JtYWxpemVDbGFzczooKT0+Tyxub3JtYWxpemVQcm9wczooKT0+eGUsbm9ybWFsaXplU3R5bGU6KCk9PmdlLG9uQWN0aXZhdGVkOigpPT5IaSxvbkJlZm9yZU1vdW50OigpPT5YaSxvbkJlZm9yZVVubW91bnQ6KCk9PmVhLG9uQmVmb3JlVXBkYXRlOigpPT5RaSxvbkRlYWN0aXZhdGVkOigpPT5VaSxvbkVycm9yQ2FwdHVyZWQ6KCk9PmFhLG9uTW91bnRlZDooKT0+Wmksb25SZW5kZXJUcmFja2VkOigpPT5pYSxvblJlbmRlclRyaWdnZXJlZDooKT0+cmEsb25TY29wZURpc3Bvc2U6KCk9PkllLG9uU2VydmVyUHJlZmV0Y2g6KCk9Pm5hLG9uVW5tb3VudGVkOigpPT50YSxvblVwZGF0ZWQ6KCk9PiRpLG9uV2F0Y2hlckNsZWFudXA6KCk9Pk1uLG9wZW5CbG9jazooKT0+UixwYXRjaFByb3A6KCk9Pl9sLHBvcFNjb3BlSWQ6KCk9Pm1yLHByb3ZpZGU6KCk9PnZyLHByb3h5UmVmczooKT0+Z24scHVzaFNjb3BlSWQ6KCk9PnByLHF1ZXVlUG9zdEZsdXNoQ2I6KCk9Pm5yLHJlYWN0aXZlOigpPT5adCxyZWFkb25seTooKT0+JHQscmVmOigpPT5NLHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyOigpPT5xcyxyZW5kZXI6KCk9PmZ1LHJlbmRlckxpc3Q6KCk9Pm1hLHJlbmRlclNsb3Q6KCk9PkkscmVzb2x2ZUNvbXBvbmVudDooKT0+Y2EscmVzb2x2ZURpcmVjdGl2ZTooKT0+ZGEscmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ6KCk9PnVhLHJlc29sdmVGaWx0ZXI6KCk9Pm51bGwscmVzb2x2ZVRyYW5zaXRpb25Ib29rczooKT0+ZWksc2V0QmxvY2tUcmFja2luZzooKT0+bXMsc2V0RGV2dG9vbHNIb29rOigpPT5jYyxzZXRUcmFuc2l0aW9uSG9va3M6KCk9PnJpLHNoYWxsb3dSZWFjdGl2ZTooKT0+UXQsc2hhbGxvd1JlYWRvbmx5OigpPT5lbixzaGFsbG93UmVmOigpPT51bixzc3JDb250ZXh0S2V5OigpPT54cixzc3JVdGlsczooKT0+bGMsc3RvcDooKT0+JGUsdG9EaXNwbGF5U3RyaW5nOigpPT5rLHRvSGFuZGxlcktleTooKT0+Y2UsdG9IYW5kbGVyczooKT0+X2EsdG9SYXc6KCk9PkEsdG9SZWY6KCk9PlNuLHRvUmVmczooKT0+eW4sdG9WYWx1ZTooKT0+bW4sdHJhbnNmb3JtVk5vZGVBcmdzOigpPT52cyx0cmlnZ2VyUmVmOigpPT5wbix1bnJlZjooKT0+Tix1c2VBdHRyczooKT0+amEsdXNlQ3NzTW9kdWxlOigpPT5EbCx1c2VDc3NWYXJzOigpPT5HYyx1c2VIb3N0OigpPT5UbCx1c2VJZDooKT0+YWksdXNlTW9kZWw6KCk9PnJvLHVzZVNTUkNvbnRleHQ6KCk9PlNyLHVzZVNoYWRvd1Jvb3Q6KCk9PkVsLHVzZVNsb3RzOigpPT5BYSx1c2VUZW1wbGF0ZVJlZjooKT0+c2ksdXNlVHJhbnNpdGlvblN0YXRlOigpPT5Lcix2TW9kZWxDaGVja2JveDooKT0+R2wsdk1vZGVsRHluYW1pYzooKT0+UWwsdk1vZGVsUmFkaW86KCk9PnFsLHZNb2RlbFNlbGVjdDooKT0+Smwsdk1vZGVsVGV4dDooKT0+V2wsdlNob3c6KCk9PlZjLHZlcnNpb246KCk9PmljLHdhcm46KCk9PmFjLHdhdGNoOigpPT5Fcix3YXRjaEVmZmVjdDooKT0+Q3Isd2F0Y2hQb3N0RWZmZWN0OigpPT53cix3YXRjaFN5bmNFZmZlY3Q6KCk9PlRyLHdpdGhBc3luY0NvbnRleHQ6KCk9PkxhLHdpdGhDdHg6KCk9PlAsd2l0aERlZmF1bHRzOigpPT5rYSx3aXRoRGlyZWN0aXZlczooKT0+Z3Isd2l0aEtleXM6KCk9Pm91LHdpdGhNZW1vOigpPT5uYyx3aXRoTW9kaWZpZXJzOigpPT5pdSx3aXRoU2NvcGVJZDooKT0+aHJ9KSx4dT0oKT0+e307ZnVuY3Rpb24gU3UoZSx0KXsodD09bnVsbHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIEN1KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gd3UoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gU3UoZSl9ZnVuY3Rpb24gVHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbmApfWZ1bmN0aW9uIEV1KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsYHZhbHVlYGluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxMdShyLmtleSkscil9fWZ1bmN0aW9uIER1KGUsdCxuKXtyZXR1cm4gdCYmRXUoZS5wcm90b3R5cGUsdCksbiYmRXUoZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIE91KGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj16dShlKSl8fHQmJmUmJnR5cGVvZiBlLmxlbmd0aD09YG51bWJlcmApe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW4ubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsYT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG4ucmV0dXJuPT1udWxsfHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIEsoZSx0LG4pe3JldHVybih0PUx1KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGt1KGUpe2lmKHR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbYEBAaXRlcmF0b3JgXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBBdShlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KHI9YS5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbi5yZXR1cm4hPW51bGwmJihvPW4ucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319ZnVuY3Rpb24ganUoKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBNdSgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBOdShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHEoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/TnUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0soZSx0LG5bdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TnUoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pfXJldHVybiBlfWZ1bmN0aW9uIFB1KGUsdCl7cmV0dXJuIEN1KGUpfHxBdShlLHQpfHx6dShlLHQpfHxqdSgpfWZ1bmN0aW9uIEZ1KGUpe3JldHVybiB3dShlKXx8a3UoZSl8fHp1KGUpfHxNdSgpfWZ1bmN0aW9uIEl1KGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8YGRlZmF1bHRgKTtpZih0eXBlb2YgciE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybih0PT09YHN0cmluZ2A/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gTHUoZSl7dmFyIHQ9SXUoZSxgc3RyaW5nYCk7cmV0dXJuIHR5cGVvZiB0PT1gc3ltYm9sYD90OnQrYGB9ZnVuY3Rpb24gUnUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gUnU9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LFJ1KGUpfWZ1bmN0aW9uIHp1KGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBTdShlLHQpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIG49PT1gT2JqZWN0YCYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09YE1hcGB8fG49PT1gU2V0YD9BcnJheS5mcm9tKGUpOm49PT1gQXJndW1lbnRzYHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/U3UoZSx0KTp2b2lkIDB9fXZhciBCdT1mdW5jdGlvbigpe30sVnU9e30sSHU9e30sVXU9bnVsbCxXdT17bWFyazpCdSxtZWFzdXJlOkJ1fTt0cnl7dHlwZW9mIHdpbmRvdzxgdWAmJihWdT13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDxgdWAmJihIdT1kb2N1bWVudCksdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8YHVgJiYoVXU9TXV0YXRpb25PYnNlcnZlciksdHlwZW9mIHBlcmZvcm1hbmNlPGB1YCYmKFd1PXBlcmZvcm1hbmNlKX1jYXRjaHt9dmFyIEd1PShWdS5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQsS3U9R3U9PT12b2lkIDA/YGA6R3UscXU9VnUsSnU9SHUsWXU9VXUsWHU9V3U7cXUuZG9jdW1lbnQ7dmFyIFp1PSEhSnUuZG9jdW1lbnRFbGVtZW50JiYhIUp1LmhlYWQmJnR5cGVvZiBKdS5hZGRFdmVudExpc3RlbmVyPT1gZnVuY3Rpb25gJiZ0eXBlb2YgSnUuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCxRdT1+S3UuaW5kZXhPZihgTVNJRWApfHx+S3UuaW5kZXhPZihgVHJpZGVudC9gKSwkdSxlZD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyx0ZD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2ksbmQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LHJkPXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0saWQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sYWQ9YGNsYXNzaWNgLG9kPWBkdW90b25lYCxzZD1gc2hhcnBgLGNkPWBzaGFycC1kdW90b25lYCxsZD1gY2hpc2VsYCx1ZD1gZXRjaGAsZGQ9YGdyYXBoaXRlYCxmZD1gamVsbHlgLHBkPWBqZWxseS1kdW9gLG1kPWBqZWxseS1maWxsYCxoZD1gbW9zYWljYCxnZD1gbm90ZG9nYCxfZD1gbm90ZG9nLWR1b2AsdmQ9YHBpeGVsYCx5ZD1gc2xhYmAsYmQ9YHNsYWItZHVvYCx4ZD1gc2xhYi1wcmVzc2AsU2Q9YHNsYWItcHJlc3MtZHVvYCxDZD1gdGh1bWJwcmludGAsd2Q9YHV0aWxpdHlgLFRkPWB1dGlsaXR5LWR1b2AsRWQ9YHV0aWxpdHktZmlsbGAsRGQ9YHZlbGx1bWAsT2Q9YHdoaXRlYm9hcmRgLGtkPWBDbGFzc2ljYCxBZD1gRHVvdG9uZWAsamQ9YFNoYXJwYCxNZD1gU2hhcnAgRHVvdG9uZWAsTmQ9YENoaXNlbGAsUGQ9YEV0Y2hgLEZkPWBHcmFwaGl0ZWAsSWQ9YEplbGx5YCxMZD1gSmVsbHkgRHVvYCxSZD1gSmVsbHkgRmlsbGAsemQ9YE1vc2FpY2AsQmQ9YE5vdGRvZ2AsVmQ9YE5vdGRvZyBEdW9gLEhkPWBQaXhlbGAsVWQ9YFNsYWJgLFdkPWBTbGFiIER1b2AsR2Q9YFNsYWIgUHJlc3NgLEtkPWBTbGFiIFByZXNzIER1b2AscWQ9YFRodW1icHJpbnRgLEpkPWBVdGlsaXR5YCxZZD1gVXRpbGl0eSBEdW9gLFhkPWBVdGlsaXR5IEZpbGxgLFpkPWBWZWxsdW1gLFFkPWBXaGl0ZWJvYXJkYCwkZD1bYWQsb2Qsc2QsY2QsbGQsdWQsZGQsZmQscGQsbWQsaGQsZ2QsX2QsdmQseWQsYmQseGQsU2QsQ2Qsd2QsVGQsRWQsRGQsT2RdOyR1PXt9LEsoSyhLKEsoSyhLKEsoSyhLKEsoJHUsYWQsa2QpLG9kLEFkKSxzZCxqZCksY2QsTWQpLGxkLE5kKSx1ZCxQZCksZGQsRmQpLGZkLElkKSxwZCxMZCksbWQsUmQpLEsoSyhLKEsoSyhLKEsoSyhLKEsoJHUsaGQsemQpLGdkLEJkKSxfZCxWZCksdmQsSGQpLHlkLFVkKSxiZCxXZCkseGQsR2QpLFNkLEtkKSxDZCxxZCksd2QsSmQpLEsoSyhLKEsoJHUsVGQsWWQpLEVkLFhkKSxEZCxaZCksT2QsUWQpO3ZhciBlZj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LHRmPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0sbmY9bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSkscmY9e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxhZj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLG9mPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LHNmPVtga2l0YF07SyhLKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciBjZj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSxsZj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sdWY9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSxkZj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0sZmYscGY9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxtZj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtmZj17fSxLKEsoSyhLKEsoSyhLKEsoSyhLKGZmLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksSyhLKEsoSyhLKEsoSyhLKEsoSyhmZixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLEsoSyhLKEsoZmYsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLEsoSyh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgaGY9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sZ2Y9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LF9mPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSx2Zj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQobWYsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSkseWY9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSxiZj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLHhmPWJmLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxTZj1bXS5jb25jYXQoRnUoT2JqZWN0LmtleXMoZ2YpKSx5ZixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLHBmLkdST1VQLHBmLlNXQVBfT1BBQ0lUWSxwZi5QUklNQVJZLHBmLlNFQ09OREFSWV0sYmYubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSx4Zi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSksQ2Y9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0sd2Y9YF9fX0ZPTlRfQVdFU09NRV9fX2AsVGY9MTYsRWY9YGZhYCxEZj1gc3ZnLWlubGluZS0tZmFgLE9mPWBkYXRhLWZhLWkyc3ZnYCxrZj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAsQWY9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AsamY9YGRhdGEtcHJlZml4YCxNZj1gZGF0YS1pY29uYCxOZj1gZm9udGF3ZXNvbWUtaTJzdmdgLFBmPWBhc3luY2AsRmY9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sSWY9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sTGY9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIFJmKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbYWRdfX0pfXZhciB6Zj1xKHt9LG5kKTt6ZlthZF09cShxKHEocSh7fSx7ImZhLWR1b3RvbmUiOmBkdW90b25lYH0pLG5kW2FkXSksb2Yua2l0KSxvZltga2l0LWR1b3RvbmVgXSk7dmFyIEJmPVJmKHpmKSxWZj1xKHt9LHJmKTtWZlthZF09cShxKHEocSh7fSx7ZHVvdG9uZTpgZmFkYH0pLFZmW2FkXSksZGYua2l0KSxkZltga2l0LWR1b3RvbmVgXSk7dmFyIEhmPVJmKFZmKSxVZj1xKHt9LF9mKTtVZlthZF09cShxKHt9LFVmW2FkXSksdWYua2l0KTt2YXIgV2Y9UmYoVWYpLEdmPXEoe30saGYpO0dmW2FkXT1xKHEoe30sR2ZbYWRdKSxjZi5raXQpLFJmKEdmKTt2YXIgS2Y9ZWQscWY9YGZhLWxheWVycy10ZXh0YCxKZj10ZDtSZihxKHt9LGVmKSk7dmFyIFlmPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sWGY9cmQsWmY9W10uY29uY2F0KEZ1KHNmKSxGdShTZikpLFFmPXF1LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiAkZihlKXt2YXIgdD1KdS5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbYCtlK2BdYCk7aWYodClyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gZXAoZSl7cmV0dXJuIGU9PT1gYD8hMDplPT09YGZhbHNlYD8hMTplPT09YHRydWVgfHxlfUp1JiZ0eXBlb2YgSnUucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVB1KGUsMiksbj10WzBdLHI9dFsxXSxpPWVwKCRmKG4pKTtpIT1udWxsJiYoUWZbcl09aSl9KTt2YXIgdHA9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6YWQsY3NzUHJlZml4OkVmLHJlcGxhY2VtZW50Q2xhc3M6RGYsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDpgYXN5bmNgLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07UWYuZmFtaWx5UHJlZml4JiYoUWYuY3NzUHJlZml4PVFmLmZhbWlseVByZWZpeCk7dmFyIG5wPXEocSh7fSx0cCksUWYpO25wLmF1dG9SZXBsYWNlU3ZnfHwobnAub2JzZXJ2ZU11dGF0aW9ucz0hMSk7dmFyIEo9e307T2JqZWN0LmtleXModHApLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosZSx7ZW51bWVyYWJsZTohMCxzZXQ6ZnVuY3Rpb24odCl7bnBbZV09dCxycC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKEopfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBucFtlXX19KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtucC5jc3NQcmVmaXg9ZSxycC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKEopfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBucC5jc3NQcmVmaXh9fSkscXUuRm9udEF3ZXNvbWVDb25maWc9Sjt2YXIgcnA9W107ZnVuY3Rpb24gaXAoZSl7cmV0dXJuIHJwLnB1c2goZSksZnVuY3Rpb24oKXtycC5zcGxpY2UocnAuaW5kZXhPZihlKSwxKX19dmFyIGFwPVRmLG9wPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIHNwKGUpe2lmKCEoIWV8fCFadSkpe3ZhciB0PUp1LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7dC5zZXRBdHRyaWJ1dGUoYHR5cGVgLGB0ZXh0L2Nzc2ApLHQuaW5uZXJIVE1MPWU7Zm9yKHZhciBuPUp1LmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gSnUuaGVhZC5pbnNlcnRCZWZvcmUodCxyKSxlfX12YXIgY3A9YDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYDtmdW5jdGlvbiBscCgpe2Zvcih2YXIgZT0xMix0PWBgO2UtLT4wOyl0Kz1jcFtNYXRoLnJhbmRvbSgpKjYyfDBdO3JldHVybiB0fWZ1bmN0aW9uIHVwKGUpe2Zvcih2YXIgdD1bXSxuPShlfHxbXSkubGVuZ3RoPj4+MDtuLS07KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBkcChlKXtyZXR1cm4gZS5jbGFzc0xpc3Q/dXAoZS5jbGFzc0xpc3QpOihlLmdldEF0dHJpYnV0ZShgY2xhc3NgKXx8YGApLnNwbGl0KGAgYCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9ZnVuY3Rpb24gZnAoZSl7cmV0dXJuYCR7ZX1gLnJlcGxhY2UoLyYvZyxgJmFtcDtgKS5yZXBsYWNlKC8iL2csYCZxdW90O2ApLnJlcGxhY2UoLycvZyxgJiMzOTtgKS5yZXBsYWNlKC88L2csYCZsdDtgKS5yZXBsYWNlKC8+L2csYCZndDtgKX1mdW5jdGlvbiBwcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259PSIke2ZwKGVbbl0pfSIgYH0sYGApLnRyaW0oKX1mdW5jdGlvbiBtcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259OiAke2Vbbl0udHJpbSgpfTtgfSxgYCl9ZnVuY3Rpb24gaHAoZSl7cmV0dXJuIGUuc2l6ZSE9PW9wLnNpemV8fGUueCE9PW9wLnh8fGUueSE9PW9wLnl8fGUucm90YXRlIT09b3Aucm90YXRlfHxlLmZsaXBYfHxlLmZsaXBZfWZ1bmN0aW9uIGdwKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS5jb250YWluZXJXaWR0aCxyPWUuaWNvbldpZHRoO3JldHVybntvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtuLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHt0LngqMzJ9LCAke3QueSozMn0pIGB9ICR7YHNjYWxlKCR7dC5zaXplLzE2Kih0LmZsaXBYPy0xOjEpfSwgJHt0LnNpemUvMTYqKHQuZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHt0LnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzIqLTF9IC0yNTYpYH19fWZ1bmN0aW9uIF9wKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS53aWR0aCxyPW49PT12b2lkIDA/VGY6bixpPWUuaGVpZ2h0LGE9aT09PXZvaWQgMD9UZjppLG89ZS5zdGFydENlbnRlcmVkLHM9byE9PXZvaWQgMCYmbyxjPWBgO3JldHVybiBjKz1zJiZRdT9gdHJhbnNsYXRlKCR7dC54L2FwLXIvMn1lbSwgJHt0LnkvYXAtYS8yfWVtKSBgOnM/YHRyYW5zbGF0ZShjYWxjKC01MCUgKyAke3QueC9hcH1lbSksIGNhbGMoLTUwJSArICR7dC55L2FwfWVtKSkgYDpgdHJhbnNsYXRlKCR7dC54L2FwfWVtLCAke3QueS9hcH1lbSkgYCxjKz1gc2NhbGUoJHt0LnNpemUvYXAqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS9hcCoodC5mbGlwWT8tMToxKX0pIGAsYys9YHJvdGF0ZSgke3Qucm90YXRlfWRlZykgYCxjfXZhciB2cD1gOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJzsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBCcmFuZHMnOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWInOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MnOwogIC0tZmEtZm9udC1zbGFiLWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTbGFiIER1byc7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MgRHVvJzsKICAtLWZhLWZvbnQtcGl4ZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUGl4ZWwnOwogIC0tZmEtZm9udC1tb3NhaWMtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE1vc2FpYyc7CiAgLS1mYS1mb250LXZlbGx1bS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVmVsbHVtJzsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCc7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQnOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyc7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8nOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBFdGNoJzsKICAtLWZhLWZvbnQtZ3JhcGhpdGUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUnOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSc7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCc7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8nOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgQ2hpc2VsJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSc7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byc7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsJzsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtY2FudmFzLXNxdWFyZSB7CiAgcGFkZGluZy1ibG9jazogMC4xMjVlbTsKICBtYXJnaW4tYmxvY2stZW5kOiAtMC4xMjVlbTsKfQoKLmZhLWNhbnZhcy1yb29teSB7CiAgcGFkZGluZy1ibG9jazogMC4yNWVtOwogIHBhZGRpbmctaW5saW5lOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjI1ZW07CiAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5mYS11bCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLWxpLW1hcmdpbiwgMi41ZW0pOwogIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0Owp9CgovKiBIZWFkcyBVcDogQm9yZGVyZWQgSWNvbnMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUhCiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhCiAgLSBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCBpbiB0aGlzIHZlcnNpb24gKnY3KSwgYnV0IGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBGb250IEF3ZXNvbWUgdjguCiovCi8qIE5vdGVzOgoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItd2lkdGggPSAxLzE2IGJ5IGRlZmF1bHQgKHRvIHJlbmRlciBhcyB+MXB4IGJhc2VkIG9uIGEgMTZweCBkZWZhdWx0IGZvbnQtc2l6ZSkKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXBhZGRpbmcgPQogICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KQogICoqIDQvMTYgZm9yIGhvcml6b250YWwgcGFkZGluZyAodG8gZ2l2ZSB+NHB4IG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbikKKi8KLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA2MjVlbSk7CiAgYm94LXNpemluZzogdmFyKC0tZmEtYm9yZGVyLWJveC1zaXppbmcsIGNvbnRlbnQtYm94KTsKICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCwKLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1wdWxsLXJpZ2h0LAouZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1iZWF0IHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpOwp9CgouZmEtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxLjVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcC0zNjAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwLTM2MDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNzVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc3BpbiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7Cn0KCi5mYS1zcGluLXNuYXAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluLXNuYXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtNCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC00OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMi40cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtOCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC04OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgNHMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtYnV6eiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJ1eno7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjZzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXdhZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXdhZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjsKfQoKLmZhLWZsb2F0IHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxvYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwp9CgouZmEtc3dpbmcgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zd2luZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjsKfQoKLmZhLWplbGxvIHsKICBhbmltYXRpb24tbmFtZTogZmEtamVsbG87CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjlzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1vdXQpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtZmxpcC0zNjAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSwKICAuZmEtYnV6eiwKICAuZmEtZmxvYXQsCiAgLmZhLWplbGxvLAogIC5mYS1zcGluLXNuYXAsCiAgLmZhLXNwaW4tc25hcC00LAogIC5mYS1zcGluLXNuYXAtOCwKICAuZmEtc3dpbmcsCiAgLmZhLXdhZyB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA0NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjIgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjIyKSkpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcpOwogIH0KICAxNCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4wNiksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjk0KSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtYW50aWNpcGF0aW9uLCAzcHgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45NCksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMTIpKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgNTIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0tZmEtYm91bmNlLWhlaWdodCwgMC41ZW0pICogMS4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41LCAwLCAxLCAwLjUpOwogIH0KICA3MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45MikpIHRyYW5zbGF0ZVkoMCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC4zMywgMC42NiwgMSk7CiAgfQogIDg1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgsIDEuMDQpIHRyYW5zbGF0ZVkoY2FsYygtMnB4ICogdmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIDEpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgNDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgMjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ1JSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICBvcGFjaXR5OiBjYWxjKHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpICsgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjI4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIDAuNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA5MiUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiB2YXIoLS1mYS1mbGlwLW92ZXJzaG9vdCwgMS4wNCkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAtMzYwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpIHRyYW5zbGF0ZVgoLTFweCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA3OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTNkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxNi42NyUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDI4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDMzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDYyJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDY2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDc4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDgzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDk1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtNCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtOCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEyLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAyMS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAzNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAzNy41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ2LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNTklIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA3MS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDg0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDg3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYnV6eiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjEsIDAsIDAuOSwgMSk7CiAgfQogIDUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC41ZGVnKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC41ZGVnKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC4zZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC4zZGVnKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjcpKSByb3RhdGUoMC4yZGVnKTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgtMC4yZGVnKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjQpKSByb3RhdGUoMC4xZGVnKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS13YWcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNiwgMSk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpICogMC44NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbG9hdCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjQgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKHZhcigtLWZhLWZsb2F0LWRyaWZ0LCAxcHgpKSByb3RhdGUodmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpIHNjYWxlKDEsIDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXgsIDAuOTgpLCB2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXksIDEuMDMpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMCk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC45MiAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgwLjk5NSwgMS4wMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMC4zMyk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC4zICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LXRpbHQsIDFkZWcpKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygwLjA1ICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3dpbmcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAxOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC42NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuNjUsIDEpOwogIH0KICAzOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjQ1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGMoLTEgKiB2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtamVsbG8gewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSwgY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMiAtIHZhcigtLWZhLWplbGxvLXNjYWxlLXksIDEuMTIpKSwgdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpLCBjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSAtIDEpICogMC41KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpLCBjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMiwgMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA2OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gO2Z1bmN0aW9uIHlwKCl7dmFyIGU9RWYsdD1EZixuPUouY3NzUHJlZml4LHI9Si5yZXBsYWNlbWVudENsYXNzLGk9dnA7aWYobiE9PWV8fHIhPT10KXt2YXIgYT1SZWdFeHAoYFxcLiR7ZX1cXC1gLGBnYCksbz1SZWdFeHAoYFxcLS0ke2V9XFwtYCxgZ2ApLHM9UmVnRXhwKGBcXC4ke3R9YCxgZ2ApO2k9aS5yZXBsYWNlKGEsYC4ke259LWApLnJlcGxhY2UobyxgLS0ke259LWApLnJlcGxhY2UocyxgLiR7cn1gKX1yZXR1cm4gaX12YXIgYnA9ITE7ZnVuY3Rpb24geHAoKXtKLmF1dG9BZGRDc3MmJiFicCYmKHNwKHlwKCkpLGJwPSEwKX12YXIgU3A9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e2Nzczp5cCxpbnNlcnRDc3M6eHB9fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57YmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOmZ1bmN0aW9uKCl7eHAoKX0sYmVmb3JlSTJzdmc6ZnVuY3Rpb24oKXt4cCgpfX19fSxDcD1xdXx8e307Q3Bbd2ZdfHwoQ3Bbd2ZdPXt9KSxDcFt3Zl0uc3R5bGVzfHwoQ3Bbd2ZdLnN0eWxlcz17fSksQ3Bbd2ZdLmhvb2tzfHwoQ3Bbd2ZdLmhvb2tzPXt9KSxDcFt3Zl0uc2hpbXN8fChDcFt3Zl0uc2hpbXM9W10pO3ZhciB3cD1DcFt3Zl0sVHA9W10sRXA9ZnVuY3Rpb24oKXtKdS5yZW1vdmVFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCxFcCksRHA9MSxUcC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxEcD0hMTtadSYmKERwPShKdS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChKdS5yZWFkeVN0YXRlKSxEcHx8SnUuYWRkRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsRXApKTtmdW5jdGlvbiBPcChlKXtadSYmKERwP3NldFRpbWVvdXQoZSwwKTpUcC5wdXNoKGUpKX1mdW5jdGlvbiBrcChlKXt2YXIgdD1lLnRhZyxuPWUuYXR0cmlidXRlcyxyPW49PT12b2lkIDA/e306bixpPWUuY2hpbGRyZW4sYT1pPT09dm9pZCAwP1tdOmk7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9mcChlKTpgPCR7dH0gJHtwcChyKX0+JHthLm1hcChrcCkuam9pbihgYCl9PC8ke3R9PmB9ZnVuY3Rpb24gQXAoZSx0LG4pe2lmKGUmJmVbdF0mJmVbdF1bbl0pcmV0dXJue3ByZWZpeDp0LGljb25OYW1lOm4saWNvbjplW3RdW25dfX12YXIganA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfX0sTXA9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmtleXMoZSksYT1pLmxlbmd0aCxvPXI9PT12b2lkIDA/dDpqcCh0LHIpLHMsYyxsO2ZvcihuPT09dm9pZCAwPyhzPTEsbD1lW2lbMF1dKToocz0wLGw9bik7czxhO3MrKyljPWlbc10sbD1vKGwsZVtjXSxjLGUpO3JldHVybiBsfTtmdW5jdGlvbiBOcChlKXtyZXR1cm4gRnUoZSkubGVuZ3RoPT09MT9lLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTpudWxsfWZ1bmN0aW9uIFBwKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj1lW25dO3JldHVybiByLmljb24/dFtyLmljb25OYW1lXT1yLmljb246dFtuXT1yLHR9LHt9KX1mdW5jdGlvbiBGcChlLHQpe3ZhciBuPShhcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30pLnNraXBIb29rcyxyPW4hPT12b2lkIDAmJm4saT1QcCh0KTt0eXBlb2Ygd3AuaG9va3MuYWRkUGFjaz09YGZ1bmN0aW9uYCYmIXI/d3AuaG9va3MuYWRkUGFjayhlLFBwKHQpKTp3cC5zdHlsZXNbZV09cShxKHt9LHdwLnN0eWxlc1tlXXx8e30pLGkpLGU9PT1gZmFzYCYmRnAoYGZhYCx0KX12YXIgSXA9d3Auc3R5bGVzLExwPXdwLnNoaW1zLFJwPU9iamVjdC5rZXlzKFdmKSx6cD1ScC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1PYmplY3Qua2V5cyhXZlt0XSksZX0se30pLEJwPW51bGwsVnA9e30sSHA9e30sVXA9e30sV3A9e30sR3A9e307ZnVuY3Rpb24gS3AoZSl7cmV0dXJuflpmLmluZGV4T2YoZSl9ZnVuY3Rpb24gcXAoZSx0KXt2YXIgbj10LnNwbGl0KGAtYCkscj1uWzBdLGk9bi5zbGljZSgxKS5qb2luKGAtYCk7cmV0dXJuIHI9PT1lJiZpIT09YGAmJiFLcChpKT9pOm51bGx9dmFyIEpwPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1wKElwLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtyXT1NcChuLGUse30pLHR9LHt9KX07VnA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRbM10mJihlW3RbM11dPW4pLHRbMl0mJnRbMl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmB9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC50b1N0cmluZygxNildPW59KSxlfSksSHA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbbl09bix0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSksR3A9ZShmdW5jdGlvbihlLHQsbil7dmFyIHI9dFsyXTtyZXR1cm4gZVtuXT1uLHIuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSk7dmFyIHQ9YGZhcmBpbiBJcHx8Si5hdXRvRmV0Y2hTdmcsbj1NcChMcCxmdW5jdGlvbihlLG4pe3ZhciByPW5bMF0saT1uWzFdLGE9blsyXTtyZXR1cm4gaT09PWBmYXJgJiYhdCYmKGk9YGZhc2ApLHR5cGVvZiByPT1gc3RyaW5nYCYmKGUubmFtZXNbcl09e3ByZWZpeDppLGljb25OYW1lOmF9KSx0eXBlb2Ygcj09YG51bWJlcmAmJihlLnVuaWNvZGVzW3IudG9TdHJpbmcoMTYpXT17cHJlZml4OmksaWNvbk5hbWU6YX0pLGV9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO1VwPW4ubmFtZXMsV3A9bi51bmljb2RlcyxCcD1ybShKLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OkouZmFtaWx5RGVmYXVsdH0pfTtpcChmdW5jdGlvbihlKXtCcD1ybShlLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OkouZmFtaWx5RGVmYXVsdH0pfSksSnAoKTtmdW5jdGlvbiBZcChlLHQpe3JldHVybihWcFtlXXx8e30pW3RdfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuKEhwW2VdfHx7fSlbdF19ZnVuY3Rpb24gWnAoZSx0KXtyZXR1cm4oR3BbZV18fHt9KVt0XX1mdW5jdGlvbiBRcChlKXtyZXR1cm4gVXBbZV18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiAkcChlKXt2YXIgdD1XcFtlXSxuPVlwKGBmYXNgLGUpO3JldHVybiB0fHwobj97cHJlZml4OmBmYXNgLGljb25OYW1lOm59Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gZW0oKXtyZXR1cm4gQnB9dmFyIHRtPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O2Z1bmN0aW9uIG5tKGUpe3ZhciB0PWFkLG49UnAucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7Si5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gJGQuZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB6cFtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIHJtKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/YWQ6dCxyPUJmW25dW2VdO2lmKG49PT1vZCYmIWUpcmV0dXJuYGZhZGA7dmFyIGk9SGZbbl1bZV18fEhmW25dW3JdLGE9ZSBpbiB3cC5zdHlsZXM/ZTpudWxsO3JldHVybiBpfHxhfHxudWxsfWZ1bmN0aW9uIGltKGUpe3ZhciB0PVtdLG49bnVsbDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXFwKEouY3NzUHJlZml4LGUpO3I/bj1yOmUmJnQucHVzaChlKX0pLHtpY29uTmFtZTpuLHJlc3Q6dH19ZnVuY3Rpb24gYW0oZSl7cmV0dXJuIGUuc29ydCgpLmZpbHRlcihmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uaW5kZXhPZihlKT09PXR9KX12YXIgb209dmYuY29uY2F0KGFmKTtmdW5jdGlvbiBzbShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5za2lwTG9va3VwcyxuPXQhPT12b2lkIDAmJnQscj1udWxsLGk9YW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG9tLmluY2x1ZGVzKGUpfSkpLGE9YW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIW9tLmluY2x1ZGVzKGUpfSkpLG89UHUoaS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSwhaWQuaW5jbHVkZXMoZSl9KSwxKVswXSxzPW89PT12b2lkIDA/bnVsbDpvLGM9bm0oaSksbD1xKHEoe30saW0oYSkpLHt9LHtwcmVmaXg6cm0ocyx7ZmFtaWx5OmN9KX0pO3JldHVybiBxKHEocSh7fSxsKSxkbSh7dmFsdWVzOmUsZmFtaWx5OmMsc3R5bGVzOklwLGNvbmZpZzpKLGNhbm9uaWNhbDpsLGdpdmVuUHJlZml4OnJ9KSksY20obixyLGwpKX1mdW5jdGlvbiBjbShlLHQsbil7dmFyIHI9bi5wcmVmaXgsaT1uLmljb25OYW1lO2lmKGV8fCFyfHwhaSlyZXR1cm57cHJlZml4OnIsaWNvbk5hbWU6aX07dmFyIGE9dD09PWBmYWA/UXAoaSk6e30sbz1acChyLGkpO3JldHVybiBpPWEuaWNvbk5hbWV8fG98fGkscj1hLnByZWZpeHx8cixyPT09YGZhcmAmJiFJcC5mYXImJklwLmZhcyYmIUouYXV0b0ZldGNoU3ZnJiYocj1gZmFzYCkse3ByZWZpeDpyLGljb25OYW1lOml9fXZhciBsbT0kZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1hZHx8ZSE9PW9kfSksdW09T2JqZWN0LmtleXMoX2YpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWFkfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhfZltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gZG0oZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09b2QsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJmxtLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gdW0uaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9bmYuZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9WnAoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PWVtKCl8fGBmYXNgKSxyfXZhciBmbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtUdSh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIER1KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPXEocSh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksRnAobix0W25dKTt2YXIgcj1XZlthZF1bbl07ciYmRnAocix0W25dKSxKcCgpfSl9fSx7a2V5OmByZXNldGAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb25zPXt9fX0se2tleTpgX3B1bGxEZWZpbml0aW9uc2AsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnByZWZpeCYmdC5pY29uTmFtZSYmdC5pY29uP3swOnR9OnQ7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGk9ci5wcmVmaXgsYT1yLmljb25OYW1lLG89ci5pY29uLHM9b1syXTtlW2ldfHwoZVtpXT17fSkscy5sZW5ndGg+MCYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT1gc3RyaW5nYCYmKGVbaV1bdF09byl9KSxlW2ldW2FdPW99KSxlfX1dKX0oKSxwbT1bXSxtbT17fSxobT17fSxnbT1PYmplY3Qua2V5cyhobSk7ZnVuY3Rpb24gX20oZSx0KXt2YXIgbj10Lm1peG91dHNUbztyZXR1cm4gcG09ZSxtbT17fSxPYmplY3Qua2V5cyhobSkuZm9yRWFjaChmdW5jdGlvbihlKXtnbS5pbmRleE9mKGUpPT09LTEmJmRlbGV0ZSBobVtlXX0pLHBtLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taXhvdXQ/ZS5taXhvdXQoKTp7fTtpZihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3R5cGVvZiB0W2VdPT1gZnVuY3Rpb25gJiYobltlXT10W2VdKSxSdSh0W2VdKT09PWBvYmplY3RgJiZPYmplY3Qua2V5cyh0W2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe25bZV18fChuW2VdPXt9KSxuW2VdW3JdPXRbZV1bcl19KX0pLGUuaG9va3Mpe3ZhciByPWUuaG9va3MoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe21tW2VdfHwobW1bZV09W10pLG1tW2VdLnB1c2gocltlXSl9KX1lLnByb3ZpZGVzJiZlLnByb3ZpZGVzKGhtKX0pLG59ZnVuY3Rpb24gdm0oZSx0KXt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgyKTtyZXR1cm4obW1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9ZS5hcHBseShudWxsLFt0XS5jb25jYXQobikpfSksdH1mdW5jdGlvbiB5bShlKXt2YXIgdD1bLi4uYXJndW1lbnRzXS5zbGljZSgxKTsobW1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYXBwbHkobnVsbCx0KX0pfWZ1bmN0aW9uIGJtKCl7dmFyIGU9YXJndW1lbnRzWzBdLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBobVtlXT9obVtlXS5hcHBseShudWxsLHQpOnZvaWQgMH1mdW5jdGlvbiB4bShlKXtlLnByZWZpeD09PWBmYWAmJihlLnByZWZpeD1gZmFzYCk7dmFyIHQ9ZS5pY29uTmFtZSxuPWUucHJlZml4fHxlbSgpO2lmKHQpcmV0dXJuIHQ9WnAobix0KXx8dCxBcChTbS5kZWZpbml0aW9ucyxuLHQpfHxBcCh3cC5zdHlsZXMsbix0KX12YXIgU209bmV3IGZtLENtPXtub0F1dG86ZnVuY3Rpb24oKXtKLmF1dG9SZXBsYWNlU3ZnPSExLEoub2JzZXJ2ZU11dGF0aW9ucz0hMSx5bShgbm9BdXRvYCl9LGNvbmZpZzpKLGRvbTp7aTJzdmc6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307cmV0dXJuIFp1Pyh5bShgYmVmb3JlSTJzdmdgLGUpLGJtKGBwc2V1ZG9FbGVtZW50czJzdmdgLGUpLGJtKGBpMnN2Z2AsZSkpOlByb21pc2UucmVqZWN0KEVycm9yKGBPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLmApKX0sd2F0Y2g6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sdD1lLmF1dG9SZXBsYWNlU3ZnUm9vdDtKLmF1dG9SZXBsYWNlU3ZnPT09ITEmJihKLmF1dG9SZXBsYWNlU3ZnPSEwKSxKLm9ic2VydmVNdXRhdGlvbnM9ITAsT3AoZnVuY3Rpb24oKXt3bSh7YXV0b1JlcGxhY2VTdmdSb290OnR9KSx5bShgd2F0Y2hgLGUpfSl9fSxwYXJzZTp7aWNvbjpmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZihSdShlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm57cHJlZml4OmUucHJlZml4LGljb25OYW1lOlpwKGUucHJlZml4LGUuaWNvbk5hbWUpfHxlLmljb25OYW1lfTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpe3ZhciB0PWVbMV0uaW5kZXhPZihgZmEtYCk9PT0wP2VbMV0uc2xpY2UoMyk6ZVsxXSxuPXJtKGVbMF0pO3JldHVybntwcmVmaXg6bixpY29uTmFtZTpacChuLHQpfHx0fX1pZih0eXBlb2YgZT09YHN0cmluZ2AmJihlLmluZGV4T2YoYCR7Si5jc3NQcmVmaXh9LWApPi0xfHxlLm1hdGNoKEtmKSkpe3ZhciByPXNtKGUuc3BsaXQoYCBgKSx7c2tpcExvb2t1cHM6ITB9KTtyZXR1cm57cHJlZml4OnIucHJlZml4fHxlbSgpLGljb25OYW1lOlpwKHIucHJlZml4LHIuaWNvbk5hbWUpfHxyLmljb25OYW1lfX1pZih0eXBlb2YgZT09YHN0cmluZ2Ape3ZhciBpPWVtKCk7cmV0dXJue3ByZWZpeDppLGljb25OYW1lOlpwKGksZSl8fGV9fX19LGxpYnJhcnk6U20sZmluZEljb25EZWZpbml0aW9uOnhtLHRvSHRtbDprcH0sd209ZnVuY3Rpb24oKXt2YXIgZT0oYXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9KS5hdXRvUmVwbGFjZVN2Z1Jvb3QsdD1lPT09dm9pZCAwP0p1OmU7KE9iamVjdC5rZXlzKHdwLnN0eWxlcykubGVuZ3RoPjB8fEouYXV0b0ZldGNoU3ZnKSYmWnUmJkouYXV0b1JlcGxhY2VTdmcmJkNtLmRvbS5pMnN2Zyh7bm9kZTp0fSl9O2Z1bmN0aW9uIFRtKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhYnN0cmFjdCIse2dldDp0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImh0bWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hYnN0cmFjdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGtwKGUpfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZihadSl7dmFyIHQ9SnUuY3JlYXRlRWxlbWVudChgZGl2YCk7cmV0dXJuIHQuaW5uZXJIVE1MPWUuaHRtbCx0LmNoaWxkcmVufX19KSxlfWZ1bmN0aW9uIEVtKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLm1haW4scj1lLm1hc2ssaT1lLmF0dHJpYnV0ZXMsYT1lLnN0eWxlcyxvPWUudHJhbnNmb3JtO2lmKGhwKG8pJiZuLmZvdW5kJiYhci5mb3VuZCl7dmFyIHM9e3g6bi53aWR0aC9uLmhlaWdodC8yLHk6LjV9O2kuc3R5bGU9bXAocShxKHt9LGEpLHt9LHsidHJhbnNmb3JtLW9yaWdpbiI6YCR7cy54K28ueC8xNn1lbSAke3MueStvLnkvMTZ9ZW1gfSkpfXJldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fV19ZnVuY3Rpb24gRG0oZSl7dmFyIHQ9ZS5wcmVmaXgsbj1lLmljb25OYW1lLHI9ZS5jaGlsZHJlbixpPWUuYXR0cmlidXRlcyxhPWUuc3ltYm9sLG89YT09PSEwP2Ake3R9LSR7Si5jc3NQcmVmaXh9LSR7bn1gOmE7cmV0dXJuW3t0YWc6YHN2Z2AsYXR0cmlidXRlczp7c3R5bGU6YGRpc3BsYXk6IG5vbmU7YH0sY2hpbGRyZW46W3t0YWc6YHN5bWJvbGAsYXR0cmlidXRlczpxKHEoe30saSkse30se2lkOm99KSxjaGlsZHJlbjpyfV19XX1mdW5jdGlvbiBPbShlKXtyZXR1cm5bYGFyaWEtbGFiZWxgLGBhcmlhLWxhYmVsbGVkYnlgLGB0aXRsZWAsYHJvbGVgXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGV9KX1mdW5jdGlvbiBrbShlKXt2YXIgdD1lLmljb25zLG49dC5tYWluLHI9dC5tYXNrLGk9ZS5wcmVmaXgsYT1lLmljb25OYW1lLG89ZS50cmFuc2Zvcm0scz1lLnN5bWJvbCxjPWUubWFza0lkLGw9ZS5leHRyYSx1PWUud2F0Y2hhYmxlLGQ9dSE9PXZvaWQgMCYmdSxmPXIuZm91bmQ/cjpuLHA9Zi53aWR0aCxtPWYuaGVpZ2h0LGg9W0oucmVwbGFjZW1lbnRDbGFzcyxhP2Ake0ouY3NzUHJlZml4fS0ke2F9YDpgYF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsLmNsYXNzZXMuaW5kZXhPZihlKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09YGB8fCEhZX0pLmNvbmNhdChsLmNsYXNzZXMpLmpvaW4oYCBgKSxnPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnEocSh7fSxsLmF0dHJpYnV0ZXMpLHt9LHsiZGF0YS1wcmVmaXgiOmksImRhdGEtaWNvbiI6YSxjbGFzczpoLHJvbGU6bC5hdHRyaWJ1dGVzLnJvbGV8fGBpbWdgLHZpZXdCb3g6YDAgMCAke3B9ICR7bX1gfSl9OyFPbShsLmF0dHJpYnV0ZXMpJiYhbC5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdJiYoZy5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdPWB0cnVlYCksZCYmKGcuYXR0cmlidXRlc1tPZl09YGApO3ZhciBfPXEocSh7fSxnKSx7fSx7cHJlZml4OmksaWNvbk5hbWU6YSxtYWluOm4sbWFzazpyLG1hc2tJZDpjLHRyYW5zZm9ybTpvLHN5bWJvbDpzLHN0eWxlczpxKHt9LGwuc3R5bGVzKX0pLHY9ci5mb3VuZCYmbi5mb3VuZD9ibShgZ2VuZXJhdGVBYnN0cmFjdE1hc2tgLF8pfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06Ym0oYGdlbmVyYXRlQWJzdHJhY3RJY29uYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LHk9di5jaGlsZHJlbixiPXYuYXR0cmlidXRlcztyZXR1cm4gXy5jaGlsZHJlbj15LF8uYXR0cmlidXRlcz1iLHM/RG0oXyk6RW0oXyl9ZnVuY3Rpb24gQW0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9ZS50cmFuc2Zvcm0sYT1lLmV4dHJhLG89ZS53YXRjaGFibGUscz1vIT09dm9pZCAwJiZvLGM9cShxKHt9LGEuYXR0cmlidXRlcykse30se2NsYXNzOmEuY2xhc3Nlcy5qb2luKGAgYCl9KTtzJiYoY1tPZl09YGApO3ZhciBsPXEoe30sYS5zdHlsZXMpO2hwKGkpJiYobC50cmFuc2Zvcm09X3Aoe3RyYW5zZm9ybTppLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6bixoZWlnaHQ6cn0pLGxbYC13ZWJraXQtdHJhbnNmb3JtYF09bC50cmFuc2Zvcm0pO3ZhciB1PW1wKGwpO3UubGVuZ3RoPjAmJihjLnN0eWxlPXUpO3ZhciBkPVtdO3JldHVybiBkLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpjLGNoaWxkcmVuOlt0XX0pLGR9ZnVuY3Rpb24gam0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS5leHRyYSxyPXEocSh7fSxuLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpuLmNsYXNzZXMuam9pbihgIGApfSksaT1tcChuLnN0eWxlcyk7aS5sZW5ndGg+MCYmKHIuc3R5bGU9aSk7dmFyIGE9W107cmV0dXJuIGEucHVzaCh7dGFnOmBzcGFuYCxhdHRyaWJ1dGVzOnIsY2hpbGRyZW46W3RdfSksYX12YXIgTW09d3Auc3R5bGVzO2Z1bmN0aW9uIE5tKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9UHUoZS5zbGljZSg0KSwxKVswXSxpPW51bGw7cmV0dXJuIGk9QXJyYXkuaXNBcnJheShyKT97dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtKLmNzc1ByZWZpeH0tJHtYZi5HUk9VUH1gfSxjaGlsZHJlbjpbe3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7Si5jc3NQcmVmaXh9LSR7WGYuU0VDT05EQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMF19fSx7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtKLmNzc1ByZWZpeH0tJHtYZi5QUklNQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMV19fV19Ont0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2ZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyfX0se2ZvdW5kOiEwLHdpZHRoOnQsaGVpZ2h0Om4saWNvbjppfX12YXIgUG09e2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyfTtmdW5jdGlvbiBGbShlLHQpeyFMZiYmIUouc2hvd01pc3NpbmdJY29ucyYmZSYmY29uc29sZS5lcnJvcihgSWNvbiB3aXRoIG5hbWUgIiR7ZX0iIGFuZCBwcmVmaXggIiR7dH0iIGlzIG1pc3NpbmcuYCl9ZnVuY3Rpb24gSW0oZSx0KXt2YXIgbj10O3JldHVybiB0PT09YGZhYCYmSi5zdHlsZURlZmF1bHQhPT1udWxsJiYodD1lbSgpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe2lmKG49PT1gZmFgKXt2YXIgYT1RcChlKXx8e307ZT1hLmljb25OYW1lfHxlLHQ9YS5wcmVmaXh8fHR9aWYoZSYmdCYmTW1bdF0mJk1tW3RdW2VdKXt2YXIgbz1NbVt0XVtlXTtyZXR1cm4gcihObShvKSl9Rm0oZSx0KSxyKHEocSh7fSxQbSkse30se2ljb246Si5zaG93TWlzc2luZ0ljb25zJiZlJiZibShgbWlzc2luZ0ljb25BYnN0cmFjdGApfHx7fX0pKX0pfXZhciBMbT1mdW5jdGlvbigpe30sUm09Si5tZWFzdXJlUGVyZm9ybWFuY2UmJlh1JiZYdS5tYXJrJiZYdS5tZWFzdXJlP1h1OnttYXJrOkxtLG1lYXN1cmU6TG19LHptPWBGQSAiNy4zLjEiYCxCbT1mdW5jdGlvbihlKXtyZXR1cm4gUm0ubWFyayhgJHt6bX0gJHtlfSBiZWdpbnNgKSxmdW5jdGlvbigpe3JldHVybiBWbShlKX19LFZtPWZ1bmN0aW9uKGUpe1JtLm1hcmsoYCR7em19ICR7ZX0gZW5kc2ApLFJtLm1lYXN1cmUoYCR7em19ICR7ZX1gLGAke3ptfSAke2V9IGJlZ2luc2AsYCR7em19ICR7ZX0gZW5kc2ApfSxIbT17YmVnaW46Qm0sZW5kOlZtfSxVbT1mdW5jdGlvbigpe307ZnVuY3Rpb24gV20oZSl7cmV0dXJuIHR5cGVvZihlLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZShPZik6bnVsbCk9PWBzdHJpbmdgfWZ1bmN0aW9uIEdtKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKGpmKTpudWxsLG49ZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUoTWYpOm51bGw7cmV0dXJuIHQmJm59ZnVuY3Rpb24gS20oZSl7cmV0dXJuIGUmJmUuY2xhc3NMaXN0JiZlLmNsYXNzTGlzdC5jb250YWlucyYmZS5jbGFzc0xpc3QuY29udGFpbnMoSi5yZXBsYWNlbWVudENsYXNzKX1mdW5jdGlvbiBxbSgpe3JldHVybiBKLmF1dG9SZXBsYWNlU3ZnPT09ITA/UW0ucmVwbGFjZTpRbVtKLmF1dG9SZXBsYWNlU3ZnXXx8UW0ucmVwbGFjZX1mdW5jdGlvbiBKbShlKXtyZXR1cm4gSnUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gWW0oZSl7cmV0dXJuIEp1LmNyZWF0ZUVsZW1lbnQoZSl9ZnVuY3Rpb24gWG0oZSl7dmFyIHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSkuY2VGbixuPXQ9PT12b2lkIDA/ZS50YWc9PT1gc3ZnYD9KbTpZbTp0O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gSnUuY3JlYXRlVGV4dE5vZGUoZSk7dmFyIHI9bihlLnRhZyk7cmV0dXJuIE9iamVjdC5rZXlzKGUuYXR0cmlidXRlc3x8W10pLmZvckVhY2goZnVuY3Rpb24odCl7ci5zZXRBdHRyaWJ1dGUodCxlLmF0dHJpYnV0ZXNbdF0pfSksKGUuY2hpbGRyZW58fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuYXBwZW5kQ2hpbGQoWG0oZSx7Y2VGbjpufSkpfSkscn1mdW5jdGlvbiBabShlKXt2YXIgdD1gICR7ZS5vdXRlckhUTUx9IGA7cmV0dXJuIHQ9YCR7dH1Gb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIGAsdH12YXIgUW09e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtpZih0LnBhcmVudE5vZGUpe2lmKGVbMV0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFhtKGUpLHQpfSksdC5nZXRBdHRyaWJ1dGUoT2YpPT09bnVsbCYmSi5rZWVwT3JpZ2luYWxTb3VyY2Upe3ZhciBuPUp1LmNyZWF0ZUNvbW1lbnQoWm0odCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH5kcCh0KS5pbmRleE9mKEoucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIFFtLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke0ouY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PUoucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBrcChlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZShPZixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uICRtKGUpe2UoKX1mdW5jdGlvbiBlaChlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6VW07aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPSRtO0oubXV0YXRlQXBwcm9hY2g9PT1QZiYmKHI9cXUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwkbSkscihmdW5jdGlvbigpe3ZhciB0PXFtKCkscj1IbS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgdGg9ITE7ZnVuY3Rpb24gbmgoKXt0aD0hMH1mdW5jdGlvbiByaCgpe3RoPSExfXZhciBpaD1udWxsO2Z1bmN0aW9uIGFoKGUpe2lmKFl1JiZKLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9VbTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP1VtOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP1VtOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9KdTpzO2loPW5ldyBZdShmdW5jdGlvbihlKXtpZighdGgpe3ZhciB0PWVtKCk7dXAoZSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLnR5cGU9PT1gY2hpbGRMaXN0YCYmZS5hZGRlZE5vZGVzLmxlbmd0aD4wJiYhV20oZS5hZGRlZE5vZGVzWzBdKSYmKEouc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oZS50YXJnZXQpLG4oZS50YXJnZXQpKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJmUudGFyZ2V0LnBhcmVudE5vZGUmJkouc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oW2UudGFyZ2V0XSwhMCksZS50eXBlPT09YGF0dHJpYnV0ZXNgJiZXbShlLnRhcmdldCkmJn5ZZi5pbmRleE9mKGUuYXR0cmlidXRlTmFtZSkpe2lmKGUuYXR0cmlidXRlTmFtZT09PWBjbGFzc2AmJkdtKGUudGFyZ2V0KSl7dmFyIHI9c20oZHAoZS50YXJnZXQpKSxhPXIucHJlZml4LHM9ci5pY29uTmFtZTtlLnRhcmdldC5zZXRBdHRyaWJ1dGUoamYsYXx8dCkscyYmZS50YXJnZXQuc2V0QXR0cmlidXRlKE1mLHMpfWVsc2UgS20oZS50YXJnZXQpJiZpKGUudGFyZ2V0KX19KX19KSxadSYmaWgub2JzZXJ2ZShjLHtjaGlsZExpc3Q6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITB9KX19ZnVuY3Rpb24gb2goKXtpaCYmaWguZGlzY29ubmVjdCgpfWZ1bmN0aW9uIHNoKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKGBzdHlsZWApLG49W107cmV0dXJuIHQmJihuPXQuc3BsaXQoYDtgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwbGl0KGA6YCkscj1uWzBdLGk9bi5zbGljZSgxKTtyZXR1cm4gciYmaS5sZW5ndGg+MCYmKGVbcl09aS5qb2luKGA6YCkudHJpbSgpKSxlfSx7fSkpLG59ZnVuY3Rpb24gY2goZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtcHJlZml4YCksbj1lLmdldEF0dHJpYnV0ZShgZGF0YS1pY29uYCkscj1lLmlubmVyVGV4dD09PXZvaWQgMD9gYDplLmlubmVyVGV4dC50cmltKCksaT1zbShkcChlKSk7cmV0dXJuIGkucHJlZml4fHw9ZW0oKSx0JiZuJiYoaS5wcmVmaXg9dCxpLmljb25OYW1lPW4pLGkuaWNvbk5hbWUmJmkucHJlZml4P2k6KGkucHJlZml4JiZyLmxlbmd0aD4wJiYoaS5pY29uTmFtZT1YcChpLnByZWZpeCxlLmlubmVyVGV4dCl8fFlwKGkucHJlZml4LE5wKGUuaW5uZXJUZXh0KSkpLCFpLmljb25OYW1lJiZKLmF1dG9GZXRjaFN2ZyYmZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmKGkuaWNvbk5hbWU9ZS5maXJzdENoaWxkLmRhdGEpLGkpfWZ1bmN0aW9uIGxoKGUpe3JldHVybiB1cChlLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm5hbWUhPT1gY2xhc3NgJiZlLm5hbWUhPT1gc3R5bGVgJiYoZVt0Lm5hbWVdPXQudmFsdWUpLGV9LHt9KX1mdW5jdGlvbiB1aCgpe3JldHVybntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpvcCxzeW1ib2w6ITEsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxleHRyYTp7Y2xhc3NlczpbXSxzdHlsZXM6e30sYXR0cmlidXRlczp7fX19fWZ1bmN0aW9uIGRoKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7c3R5bGVQYXJzZXI6ITB9LG49Y2goZSkscj1uLmljb25OYW1lLGk9bi5wcmVmaXgsYT1uLnJlc3Qsbz1saChlKSxzPXZtKGBwYXJzZU5vZGVBdHRyaWJ1dGVzYCx7fSxlKTtyZXR1cm4gcSh7aWNvbk5hbWU6cixwcmVmaXg6aSx0cmFuc2Zvcm06b3AsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxzeW1ib2w6ITEsZXh0cmE6e2NsYXNzZXM6YSxzdHlsZXM6dC5zdHlsZVBhcnNlcj9zaChlKTpbXSxhdHRyaWJ1dGVzOm99fSxzKX12YXIgZmg9d3Auc3R5bGVzO2Z1bmN0aW9uIHBoKGUpe3ZhciB0PUouYXV0b1JlcGxhY2VTdmc9PT1gbmVzdGA/ZGgoZSx7c3R5bGVQYXJzZXI6ITF9KTpkaChlKTtyZXR1cm5+dC5leHRyYS5jbGFzc2VzLmluZGV4T2YocWYpP2JtKGBnZW5lcmF0ZUxheWVyc1RleHRgLGUsdCk6Ym0oYGdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbmAsZSx0KX1mdW5jdGlvbiBtaCgpe3JldHVybltdLmNvbmNhdChGdShhZiksRnUodmYpKX1mdW5jdGlvbiBoaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtpZighWnUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBuPUp1LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Qscj1mdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoYCR7TmZ9LSR7ZX1gKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbi5yZW1vdmUoYCR7TmZ9LSR7ZX1gKX0sYT1KLmF1dG9GZXRjaFN2Zz9taCgpOmlkLmNvbmNhdChPYmplY3Qua2V5cyhmaCkpO2EuaW5jbHVkZXMoYGZhYCl8fGEucHVzaChgZmFgKTt2YXIgbz1bYC4ke3FmfTpub3QoWyR7T2Z9XSlgXS5jb25jYXQoYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYC4ke2V9Om5vdChbJHtPZn1dKWB9KSkuam9pbihgLCBgKTtpZihvLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBzPVtdO3RyeXtzPXVwKGUucXVlcnlTZWxlY3RvckFsbChvKSl9Y2F0Y2h7fWlmKHMubGVuZ3RoPjApcihgcGVuZGluZ2ApLGkoYGNvbXBsZXRlYCk7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGM9SG0uYmVnaW4oYG9uVHJlZWApLGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49cGgodCk7biYmZS5wdXNoKG4pfWNhdGNoKGUpe0xmfHxlLm5hbWU9PT1gTWlzc2luZ0ljb25gJiZjb25zb2xlLmVycm9yKGUpfXJldHVybiBlfSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5hbGwobCkudGhlbihmdW5jdGlvbihuKXtlaChuLGZ1bmN0aW9uKCl7cihgYWN0aXZlYCkscihgY29tcGxldGVgKSxpKGBwZW5kaW5nYCksdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJnQoKSxjKCksZSgpfSl9KS5jYXRjaChmdW5jdGlvbihlKXtjKCksbihlKX0pfSl9ZnVuY3Rpb24gZ2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7cGgoZSkudGhlbihmdW5jdGlvbihlKXtlJiZlaChbZV0sdCl9KX1mdW5jdGlvbiBfaChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9KHR8fHt9KS5pY29uP3Q6eG0odHx8e30pLGk9bi5tYXNrO3JldHVybiBpJiY9KGl8fHt9KS5pY29uP2k6eG0oaXx8e30pLGUocixxKHEoe30sbikse30se21hc2s6aX0pKX19dmFyIHZoPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9vcDpuLGk9dC5zeW1ib2wsYT1pIT09dm9pZCAwJiZpLG89dC5tYXNrLHM9bz09PXZvaWQgMD9udWxsOm8sYz10Lm1hc2tJZCxsPWM9PT12b2lkIDA/bnVsbDpjLHU9dC5jbGFzc2VzLGQ9dT09PXZvaWQgMD9bXTp1LGY9dC5hdHRyaWJ1dGVzLHA9Zj09PXZvaWQgMD97fTpmLG09dC5zdHlsZXMsaD1tPT09dm9pZCAwP3t9Om07aWYoZSl7dmFyIGc9ZS5wcmVmaXgsXz1lLmljb25OYW1lLHY9ZS5pY29uO3JldHVybiBUbShxKHt0eXBlOmBpY29uYH0sZSksZnVuY3Rpb24oKXtyZXR1cm4geW0oYGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbmAse2ljb25EZWZpbml0aW9uOmUscGFyYW1zOnR9KSxrbSh7aWNvbnM6e21haW46Tm0odiksbWFzazpzP05tKHMuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDpnLGljb25OYW1lOl8sdHJhbnNmb3JtOnEocSh7fSxvcCksciksc3ltYm9sOmEsbWFza0lkOmwsZXh0cmE6e2F0dHJpYnV0ZXM6cCxzdHlsZXM6aCxjbGFzc2VzOmR9fSl9KX19LHloPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57aWNvbjpfaCh2aCl9fSxob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyZWVDYWxsYmFjaz1oaCxlLm5vZGVDYWxsYmFjaz1naCxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuaTJzdmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLG49dD09PXZvaWQgMD9KdTp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gaGgobixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtJbShuLHIpLG8uaWNvbk5hbWU/SW0oby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPVB1KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLGttKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89bXAoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIGhwKGkpJiYocz1ibShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSxiaD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gVG0oe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXt5bShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtKLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KEZ1KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSx4aD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIFRtKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHltKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxqbSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake0ouY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChGdShhKSl9fSl9KX19fX0sU2g9e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9vcDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIFRtKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHltKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxBbSh7Y29udGVudDplLHRyYW5zZm9ybTpxKHEoe30sb3ApLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7Si5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KEZ1KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoUXUpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSxBbSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSxDaD1SZWdFeHAoYCJgLGB1Z2ApLHdoPVsxMTA1OTIwLDExMTIzMTldLFRoPXEocShxKHEoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLHRmKSxDZiksbGYpLEVoPU9iamVjdC5rZXlzKFRoKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPVRoW3RdLGV9LHt9KSxEaD1PYmplY3Qua2V5cyhFaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49RWhbdF07cmV0dXJuIGVbdF09bls5MDBdfHxGdShPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIE9oKGUpe3JldHVybiBOcChGdShlLnJlcGxhY2UoQ2gsYGApKVswXXx8YGApfWZ1bmN0aW9uIGtoKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2UoQ2gsYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PXdoWzBdJiZyPD13aFsxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24gQWgoZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKEVoW25dfHx7fSlbaV18fERoW25dfWZ1bmN0aW9uIGpoKGUsdCl7dmFyIG49YCR7QWZ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT11cChlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKGtmKT09PXR9KVswXSxvPXF1LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goSmYpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj1BaChzLGwpLHA9T2goZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD1raChvKSxnPVlwKGYscCksXz1nO2lmKG0pe3ZhciB2PSRwKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKGpmKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKE1mKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9dWgoKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW2tmXT10LEltKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT1rbShxKHEoe30seSkse30se2ljb25zOnttYWluOmksbWFzazp0bSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89SnUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsYHN2Z2ApO3Q9PT1gOjpiZWZvcmVgP2UuaW5zZXJ0QmVmb3JlKG8sZS5maXJzdENoaWxkKTplLmFwcGVuZENoaWxkKG8pLG8ub3V0ZXJIVE1MPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBrcChlKX0pLmpvaW4oYApgKSxlLnJlbW92ZUF0dHJpYnV0ZShuKSxyKCl9KS5jYXRjaChpKX1lbHNlIHIoKX1lbHNlIHIoKX0pfWZ1bmN0aW9uIE1oKGUpe3JldHVybiBQcm9taXNlLmFsbChbamgoZSxgOjpiZWZvcmVgKSxqaChlLGA6OmFmdGVyYCldKX1mdW5jdGlvbiBOaChlKXtyZXR1cm4gZS5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmIX5GZi5pbmRleE9mKGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSYmIWUuZ2V0QXR0cmlidXRlKGtmKSYmKCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS50YWdOYW1lIT09YHN2Z2ApfXZhciBQaD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJklmLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0sRmg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107dmFyIHQ9bmV3IFNldCxuPWUuc3BsaXQoLywoPyFbXigpXSpcKSkvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSk7bj1uLmZsYXRNYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoYChgKT9lOmUuc3BsaXQoYCxgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSl9KTt2YXIgcj1PdShuKSxpO3RyeXtmb3Ioci5zKCk7IShpPXIubigpKS5kb25lOyl7dmFyIGE9aS52YWx1ZTtpZihQaChhKSl7dmFyIG89SWYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LGBgKX0sYSk7byE9PWBgJiZvIT09YCpgJiZ0LmFkZChvKX19fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0fTtmdW5jdGlvbiBJaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMCYmYXJndW1lbnRzWzFdO2lmKFp1KXt2YXIgbjtpZih0KW49ZTtlbHNlIGlmKEouc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiluPWUucXVlcnlTZWxlY3RvckFsbChgKmApO2Vsc2V7dmFyIHI9bmV3IFNldCxpPU91KGRvY3VtZW50LnN0eWxlU2hlZXRzKSxhO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZTt0cnl7dmFyIHM9T3Uoby5jc3NSdWxlcyksYzt0cnl7Zm9yKHMucygpOyEoYz1zLm4oKSkuZG9uZTspe3ZhciBsPWMudmFsdWUsdT1PdShGaChsLnNlbGVjdG9yVGV4dCkpLGQ7dHJ5e2Zvcih1LnMoKTshKGQ9dS5uKCkpLmRvbmU7KXt2YXIgZj1kLnZhbHVlO3IuYWRkKGYpfX1jYXRjaChlKXt1LmUoZSl9ZmluYWxseXt1LmYoKX19fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX1jYXRjaChlKXtKLnNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MmJmNvbnNvbGUud2FybihgRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogJHtvLmhyZWZ9ICgke2UubWVzc2FnZX0pCklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLmApfX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9aWYoIXIuc2l6ZSlyZXR1cm47dmFyIHA9QXJyYXkuZnJvbShyKS5qb2luKGAsIGApO3RyeXtuPWUucXVlcnlTZWxlY3RvckFsbChwKX1jYXRjaHt9fXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciByPXVwKG4pLmZpbHRlcihOaCkubWFwKE1oKSxpPUhtLmJlZ2luKGBzZWFyY2hQc2V1ZG9FbGVtZW50c2ApO25oKCksUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbigpe2koKSxyaCgpLGUoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7aSgpLHJoKCksdCgpfSl9KX19dmFyIExoPXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9SWgsZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLnBzZXVkb0VsZW1lbnRzMnN2Zz1mdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUsbj10PT09dm9pZCAwP0p1OnQ7Si5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmSWgobil9fX0sUmg9ITEsemg9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e3Vud2F0Y2g6ZnVuY3Rpb24oKXtuaCgpLFJoPSEwfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntib290c3RyYXA6ZnVuY3Rpb24oKXthaCh2bShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7b2goKX0sd2F0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vYnNlcnZlTXV0YXRpb25zUm9vdDtSaD9yaCgpOmFoKHZtKGBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzYCx7b2JzZXJ2ZU11dGF0aW9uc1Jvb3Q6dH0pKX19fX0sQmg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdChgIGApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO2lmKHImJmk9PT1gaGApcmV0dXJuIGUuZmxpcFg9ITAsZTtpZihyJiZpPT09YHZgKXJldHVybiBlLmZsaXBZPSEwLGU7aWYoaT1wYXJzZUZsb2F0KGkpLGlzTmFOKGkpKXJldHVybiBlO3N3aXRjaChyKXtjYXNlYGdyb3dgOmUuc2l6ZSs9aTticmVhaztjYXNlYHNocmlua2A6ZS5zaXplLT1pO2JyZWFrO2Nhc2VgbGVmdGA6ZS54LT1pO2JyZWFrO2Nhc2VgcmlnaHRgOmUueCs9aTticmVhaztjYXNlYHVwYDplLnktPWk7YnJlYWs7Y2FzZWBkb3duYDplLnkrPWk7YnJlYWs7Y2FzZWByb3RhdGVgOmUucm90YXRlKz1pfXJldHVybiBlfSx7c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfSl9LFZoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gQmgoZSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS10cmFuc2Zvcm1gKTtyZXR1cm4gbiYmKGUudHJhbnNmb3JtPUJoKG4pKSxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWFpbixuPWUudHJhbnNmb3JtLHI9ZS5jb250YWluZXJXaWR0aCxpPWUuaWNvbldpZHRoLGE9e291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke24ueCozMn0sICR7bi55KjMyfSkgYH0gJHtgc2NhbGUoJHtuLnNpemUvMTYqKG4uZmxpcFg/LTE6MSl9LCAke24uc2l6ZS8xNioobi5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke24ucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke2kvMiotMX0gLTI1NilgfX07cmV0dXJue3RhZzpgZ2AsYXR0cmlidXRlczpxKHt9LGEub3V0ZXIpLGNoaWxkcmVuOlt7dGFnOmBnYCxhdHRyaWJ1dGVzOnEoe30sYS5pbm5lciksY2hpbGRyZW46W3t0YWc6dC5pY29uLnRhZyxjaGlsZHJlbjp0Lmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpxKHEoe30sdC5pY29uLmF0dHJpYnV0ZXMpLGEucGF0aCl9XX1dfX19fSxIaD17eDowLHk6MCx3aWR0aDpgMTAwJWAsaGVpZ2h0OmAxMDAlYH07ZnVuY3Rpb24gVWgoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBlLmF0dHJpYnV0ZXMmJihlLmF0dHJpYnV0ZXMuZmlsbHx8dCkmJihlLmF0dHJpYnV0ZXMuZmlsbD1gYmxhY2tgKSxlfWZ1bmN0aW9uIFdoKGUpe3JldHVybiBlLnRhZz09PWBnYD9lLmNoaWxkcmVuOltlXX1fbShbU3AseWgsYmgseGgsU2gsTGgsemgsVmgse2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrYCkscj1uP3NtKG4uc3BsaXQoYCBgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSkpOnRtKCk7cmV0dXJuIHIucHJlZml4fHw9ZW0oKSxlLm1hc2s9cixlLm1hc2tJZD10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrLWlkYCksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RNYXNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLm1hc2ssYT1lLm1hc2tJZCxvPWUudHJhbnNmb3JtLHM9ci53aWR0aCxjPXIuaWNvbixsPWkud2lkdGgsdT1pLmljb24sZD1ncCh7dHJhbnNmb3JtOm8sY29udGFpbmVyV2lkdGg6bCxpY29uV2lkdGg6c30pLGY9e3RhZzpgcmVjdGAsYXR0cmlidXRlczpxKHEoe30sSGgpLHt9LHtmaWxsOmB3aGl0ZWB9KX0scD1jLmNoaWxkcmVuP3tjaGlsZHJlbjpjLmNoaWxkcmVuLm1hcChVaCl9Ont9LG09e3RhZzpgZ2AsYXR0cmlidXRlczpxKHt9LGQuaW5uZXIpLGNoaWxkcmVuOltVaChxKHt0YWc6Yy50YWcsYXR0cmlidXRlczpxKHEoe30sYy5hdHRyaWJ1dGVzKSxkLnBhdGgpfSxwKSldfSxoPXt0YWc6YGdgLGF0dHJpYnV0ZXM6cSh7fSxkLm91dGVyKSxjaGlsZHJlbjpbbV19LGc9YG1hc2stJHthfHxscCgpfWAsXz1gY2xpcC0ke2F8fGxwKCl9YCx2PXt0YWc6YG1hc2tgLGF0dHJpYnV0ZXM6cShxKHt9LEhoKSx7fSx7aWQ6ZyxtYXNrVW5pdHM6YHVzZXJTcGFjZU9uVXNlYCxtYXNrQ29udGVudFVuaXRzOmB1c2VyU3BhY2VPblVzZWB9KSxjaGlsZHJlbjpbZixoXX0seT17dGFnOmBkZWZzYCxjaGlsZHJlbjpbe3RhZzpgY2xpcFBhdGhgLGF0dHJpYnV0ZXM6e2lkOl99LGNoaWxkcmVuOldoKHUpfSx2XX07cmV0dXJuIHQucHVzaCh5LHt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6cSh7ZmlsbDpgY3VycmVudENvbG9yYCwiY2xpcC1wYXRoIjpgdXJsKCMke199KWAsbWFzazpgdXJsKCMke2d9KWB9LEhoKX0pLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6bn19fX0se3Byb3ZpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSExO3F1Lm1hdGNoTWVkaWEmJih0PXF1Lm1hdGNoTWVkaWEoYChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpYCkubWF0Y2hlcyksZS5taXNzaW5nSWNvbkFic3RyYWN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sbj17ZmlsbDpgY3VycmVudENvbG9yYH0scj17YXR0cmlidXRlVHlwZTpgWE1MYCxyZXBlYXRDb3VudDpgaW5kZWZpbml0ZWAsZHVyOmAyc2B9O2UucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7ZDpgTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40emB9KX0pO3ZhciBpPXEocSh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgb3BhY2l0eWB9KSxhPXt0YWc6YGNpcmNsZWAsYXR0cmlidXRlczpxKHEoe30sbikse30se2N4OmAyNTZgLGN5OmAzNjRgLHI6YDI4YH0pLGNoaWxkcmVuOltdfTtyZXR1cm4gdHx8YS5jaGlsZHJlbi5wdXNoKHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6cShxKHt9LHIpLHt9LHthdHRyaWJ1dGVOYW1lOmByYCx2YWx1ZXM6YDI4OzE0OzI4OzI4OzE0OzI4O2B9KX0se3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpxKHEoe30saSkse30se3ZhbHVlczpgMTswOzE7MTswOzE7YH0pfSksZS5wdXNoKGEpLGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7b3BhY2l0eTpgMWAsZDpgTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyemB9KSxjaGlsZHJlbjp0P1tdOlt7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOnEocSh7fSxpKSx7fSx7dmFsdWVzOmAxOzA7MDswOzA7MTtgfSl9XX0pLHR8fGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7b3BhY2l0eTpgMGAsZDpgTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41emB9KSxjaGlsZHJlbjpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpxKHEoe30saSkse30se3ZhbHVlczpgMDswOzE7MTswOzA7YH0pfV19KSx7dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgbWlzc2luZ2B9LGNoaWxkcmVuOmV9fX19LHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtc3ltYm9sYCk7cmV0dXJuIGUuc3ltYm9sPW49PT1udWxsPyExOm49PT1gYHx8bixlfX19fV0se21peG91dHNUbzpDbX0pLENtLm5vQXV0byxDbS5jb25maWcsQ20ubGlicmFyeSxDbS5kb207dmFyIEdoPUNtLnBhcnNlO0NtLmZpbmRJY29uRGVmaW5pdGlvbixDbS50b0h0bWw7dmFyIEtoPUNtLmljb247Q20ubGF5ZXIsQ20udGV4dCxDbS5jb3VudGVyO2Z1bmN0aW9uIHFoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBKaChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBxaChlKX1mdW5jdGlvbiBZaChlLHQsbil7cmV0dXJuKHQ9aWcodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWGgoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIFpoKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFFoKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gJGgoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/UWgoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1loKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlFoKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBlZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPXRnKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiB0ZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIEpoKGUpfHxYaChlKXx8b2coZSl8fFpoKCl9ZnVuY3Rpb24gcmcoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBpZyhlKXt2YXIgdD1yZyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBhZyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBhZz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sYWcoZSl9ZnVuY3Rpb24gb2coZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIHFoKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9xaChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WWgoe30sZSx0KTp7fX1mdW5jdGlvbiBjZyhlKXt2YXIgdCxuPSh0PXsiZmEtc3BpbiI6ZS5zcGluLCJmYS1wdWxzZSI6ZS5wdWxzZSwiZmEtZnciOmUuZml4ZWRXaWR0aCwiZmEtYm9yZGVyIjplLmJvcmRlciwiZmEtbGkiOmUubGlzdEl0ZW0sImZhLWludmVyc2UiOmUuaW52ZXJzZSwiZmEtZmxpcCI6ZS5mbGlwPT09ITAsImZhLWZsaXAtaG9yaXpvbnRhbCI6ZS5mbGlwPT09YGhvcml6b250YWxgfHxlLmZsaXA9PT1gYm90aGAsImZhLWZsaXAtdmVydGljYWwiOmUuZmxpcD09PWB2ZXJ0aWNhbGB8fGUuZmxpcD09PWBib3RoYH0sWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgodCxgZmEtJHtlLnNpemV9YCxlLnNpemUhPT1udWxsKSxgZmEtcm90YXRlLSR7ZS5yb3RhdGlvbn1gLGUucm90YXRpb24hPT1udWxsKSxgZmEtcm90YXRlLWJ5YCxlLnJvdGF0ZUJ5KSxgZmEtcHVsbC0ke2UucHVsbH1gLGUucHVsbCE9PW51bGwpLGBmYS1zd2FwLW9wYWNpdHlgLGUuc3dhcE9wYWNpdHkpLGBmYS1ib3VuY2VgLGUuYm91bmNlKSxgZmEtc2hha2VgLGUuc2hha2UpLGBmYS1iZWF0YCxlLmJlYXQpLGBmYS1mYWRlYCxlLmZhZGUpLGBmYS1iZWF0LWZhZGVgLGUuYmVhdEZhZGUpLFloKFloKFloKFloKFloKFloKFloKFloKFloKFloKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFloKFloKFloKFloKFloKHQsYGZhLXNwaW4tc25hcGAsZS5zcGluU25hcCksYGZhLXNwaW4tc25hcC00YCxlLnNwaW5TbmFwNCksYGZhLXNwaW4tc25hcC04YCxlLnNwaW5TbmFwOCksYGZhLXN3aW5nYCxlLnN3aW5nKSxgZmEtd2FnYCxlLndhZykpO3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/ZTpudWxsfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9dmFyIGxnPXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30sdWc9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe2lmKCFsKHQpfHxkKHQpfHxmKHQpfHxwKHQpfHxjKHQpKXJldHVybiB0O3ZhciBpLGE9MCxvPTA7aWYodSh0KSlmb3IoaT1bXSxvPXQubGVuZ3RoO2E8bzthKyspaS5wdXNoKG4oZSx0W2FdLHIpKTtlbHNlIGZvcih2YXIgcyBpbiBpPXt9LHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihpW2UocyxyKV09bihlLHRbc10scikpO3JldHVybiBpfSxyPWZ1bmN0aW9uKGUsdCl7dHx8PXt9O3ZhciBuPXQuc2VwYXJhdG9yfHxgX2Ascj10LnNwbGl0fHwvKD89W0EtWl0pLztyZXR1cm4gZS5zcGxpdChyKS5qb2luKG4pfSxpPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP2U6KGU9ZS5yZXBsYWNlKC9bXC1fXHNdKyguKT8vZyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpgYH0pLGUuc3Vic3RyKDAsMSkudG9Mb3dlckNhc2UoKStlLnN1YnN0cigxKSl9LGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtyZXR1cm4gdC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0KS50b0xvd2VyQ2FzZSgpfSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmB9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1PYmplY3QoZSl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQXJyYXldYH0sZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGUpPT1gW29iamVjdCBEYXRlXWB9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgUmVnRXhwXWB9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQm9vbGVhbl1gfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLT0wLGU9PT1lfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmYHByb2Nlc3NgaW4gdD90LnByb2Nlc3M6dDtyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/ZnVuY3Rpb24odCxyKXtyZXR1cm4gbih0LGUscil9OmV9LGc9e2NhbWVsaXplOmksZGVjYW1lbGl6ZTpvLHBhc2NhbGl6ZTphLGRlcGFzY2FsaXplOm8sY2FtZWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChpLHQpLGUpfSxkZWNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgobyx0KSxlLHQpfSxwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChhLHQpLGUpfSxkZXBhc2NhbGl6ZUtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNhbWVsaXplS2V5cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtlLmV4cG9ydHM/ZS5leHBvcnRzPWc6dC5odW1wcz1nfSkobGcpfSkodWcpO3ZhciBkZz11Zy5leHBvcnRzLGZnPVtgZ3JhZGllbnRGaWxsYF0scGc9W2BjbGFzc2AsYHN0eWxlYF0sbWc9W2B0eXBlYCxgc3RvcHNgLGBpZGBdO2Z1bmN0aW9uIGhnKGUpe3JldHVybiBlLnNwbGl0KGA7YCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuaW5kZXhPZihgOmApLHI9ZGcuY2FtZWxpemUodC5zbGljZSgwLG4pKTtyZXR1cm4gZVtyXT10LnNsaWNlKG4rMSkudHJpbSgpLGV9LHt9KX1mdW5jdGlvbiBnZyhlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ITAsZX0se30pfWZ1bmN0aW9uIF9nKGUsdCl7cmV0dXJuIEcoYHN0b3BgLCRoKHtrZXk6YCR7dH0tJHtlLm9mZnNldH1gLG9mZnNldDplLm9mZnNldCwic3RvcC1jb2xvciI6ZS5jb2xvcn0sZS5vcGFjaXR5IT09dm9pZCAwJiZ7InN0b3Atb3BhY2l0eSI6ZS5vcGFjaXR5fSkpfWZ1bmN0aW9uIHZnKGUpe2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTt2YXIgdD0oZS5jaGlsZHJlbnx8W10pLm1hcCh2Zyk7cmV0dXJuIGUudGFnPT09YHBhdGhgJiZlLmF0dHJpYnV0ZXMmJmBmaWxsYGluIGUuYXR0cmlidXRlcz8kaCgkaCh7fSxlKSx7fSx7YXR0cmlidXRlczokaCgkaCh7fSxlLmF0dHJpYnV0ZXMpLHt9LHtmaWxsOnZvaWQgMH0pLGNoaWxkcmVuOnR9KTokaCgkaCh7fSxlKSx7fSx7Y2hpbGRyZW46dH0pfWZ1bmN0aW9uIHlnKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHI9dC5ncmFkaWVudEZpbGwsaT1yPT09dm9pZCAwP251bGw6cixhPWVnKHQsZmcpLG89aXx8YGZpbGxgaW4gbj92ZyhlKTplLHM9KG8uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHlnKGUse30se30pfSksYz1PYmplY3Qua2V5cyhvLmF0dHJpYnV0ZXN8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmF0dHJpYnV0ZXNbdF07c3dpdGNoKHQpe2Nhc2VgY2xhc3NgOmUuY2xhc3M9Z2cobik7YnJlYWs7Y2FzZWBzdHlsZWA6ZS5zdHlsZT1oZyhuKTticmVhaztkZWZhdWx0OmUuYXR0cnNbdF09bn1yZXR1cm4gZX0se2F0dHJzOnt9LGNsYXNzOnt9LHN0eWxlOnt9fSk7bi5jbGFzczt2YXIgbD1uLnN0eWxlLHU9bD09PXZvaWQgMD97fTpsLGQ9ZWcobixwZyk7aWYoaSYmaS5pZCYmKGkudHlwZT09PWBsaW5lYXJgfHxpLnR5cGU9PT1gcmFkaWFsYCkpe3ZhciBmPWkudHlwZSxwPWkuc3RvcHMsbT1wPT09dm9pZCAwP1tdOnAsaD1pLmlkLGc9ZWcoaSxtZyksXz1HKGY9PT1gbGluZWFyYD9gbGluZWFyR3JhZGllbnRgOmByYWRpYWxHcmFkaWVudGAsJGgoJGgoe30sZykse30se2lkOmh9KSxtLm1hcChfZykpO3JldHVybiBHKG8udGFnLCRoKCRoKCRoKCRoKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOiRoKCRoKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSx7fSx7ZmlsbDpgdXJsKCMke2h9KWB9KSxbX10uY29uY2F0KG5nKHMpKSl9cmV0dXJuIEcoZS50YWcsJGgoJGgoJGgoe30sYSkse30se2NsYXNzOmMuY2xhc3Msc3R5bGU6JGgoJGgoe30sYy5zdHlsZSksdSl9LGMuYXR0cnMpLGQpLHMpfXZhciBiZz0hMTt0cnl7Ymc9ITB9Y2F0Y2h7fWZ1bmN0aW9uIHhnKCl7aWYoIWJnJiZjb25zb2xlJiZ0eXBlb2YgY29uc29sZS5lcnJvcj09YGZ1bmN0aW9uYCl7dmFyIGU7KGU9Y29uc29sZSkuZXJyb3IuYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBTZyhlKXtpZihlJiZhZyhlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSYmZS5pY29uKXJldHVybiBlO2lmKEdoLmljb24pcmV0dXJuIEdoLmljb24oZSk7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoYWcoZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUpcmV0dXJuIGU7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg9PT0yKXJldHVybntwcmVmaXg6ZVswXSxpY29uTmFtZTplWzFdfTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJue3ByZWZpeDpgZmFzYCxpY29uTmFtZTplfX12YXIgQ2c9Rih7bmFtZTpgRm9udEF3ZXNvbWVJY29uYCxwcm9wczp7Ym9yZGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZml4ZWRXaWR0aDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsaXA6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bITAsITEsYGhvcml6b250YWxgLGB2ZXJ0aWNhbGAsYGJvdGhgXS5pbmRleE9mKGUpPi0xfX0saWNvbjp7dHlwZTpbT2JqZWN0LEFycmF5LFN0cmluZ10scmVxdWlyZWQ6ITB9LG1hc2s6e3R5cGU6W09iamVjdCxBcnJheSxTdHJpbmddLGRlZmF1bHQ6bnVsbH0sbWFza0lkOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LGxpc3RJdGVtOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scHVsbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYHJpZ2h0YCxgbGVmdGBdLmluZGV4T2YoZSk+LTF9fSxwdWxzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHJvdGF0aW9uOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybls5MCwxODAsMjcwXS5pbmRleE9mKE51bWJlci5wYXJzZUludChlLDEwKSk+LTF9fSxyb3RhdGVCeTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHN3YXBPcGFjaXR5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYDJ4c2AsYHhzYCxgc21gLGBsZ2AsYHhsYCxgMnhsYCxgMXhgLGAyeGAsYDN4YCxgNHhgLGA1eGAsYDZ4YCxgN3hgLGA4eGAsYDl4YCxgMTB4YF0uaW5kZXhPZihlKT4tMX19LHNwaW46e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx0cmFuc2Zvcm06e3R5cGU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHQ6bnVsbH0sc3ltYm9sOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sdGl0bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0sdGl0bGVJZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSxpbnZlcnNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYm91bmNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2hha2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxiZWF0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmFkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJlYXRGYWRlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxhc2g6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluUHVsc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluUmV2ZXJzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdpZHRoQXV0bzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNhbnZhc1NxdWFyZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNhbnZhc1Jvb215Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZ3JhZGllbnRGaWxsOnt0eXBlOk9iamVjdCxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZS5pZCE9YHN0cmluZ2B8fCFlLmlkPyhjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lSWNvbjogZ3JhZGllbnRGaWxsLmlkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCksITEpOmUudHlwZSE9PWBsaW5lYXJgJiZlLnR5cGUhPT1gcmFkaWFsYD8oY29uc29sZS53YXJuKGBGb250QXdlc29tZUljb246IGdyYWRpZW50RmlsbC50eXBlIG11c3QgYmUgImxpbmVhciIgb3IgInJhZGlhbCJgKSwhMSk6ITB9fSxmbGlwMzYwOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYnV6ejp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsb2F0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0samVsbG86e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwNDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwODp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHN3aW5nOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sd2FnOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LHNldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hdHRycyxyPVcoZnVuY3Rpb24oKXtyZXR1cm4gU2coZS5pY29uKX0pLGk9VyhmdW5jdGlvbigpe3JldHVybiBzZyhgY2xhc3Nlc2AsY2coZSkpfSksYT1XKGZ1bmN0aW9uKCl7cmV0dXJuIHNnKGB0cmFuc2Zvcm1gLHR5cGVvZiBlLnRyYW5zZm9ybT09YHN0cmluZ2A/R2gudHJhbnNmb3JtKGUudHJhbnNmb3JtKTplLnRyYW5zZm9ybSl9KSxvPVcoZnVuY3Rpb24oKXtyZXR1cm4gc2coYG1hc2tgLFNnKGUubWFzaykpfSkscz1XKGZ1bmN0aW9uKCl7dmFyIHQ9JGgoJGgoJGgoJGgoe30saS52YWx1ZSksYS52YWx1ZSksby52YWx1ZSkse30se3N5bWJvbDplLnN5bWJvbCxtYXNrSWQ6ZS5tYXNrSWR9KTtyZXR1cm4gdC50aXRsZT1lLnRpdGxlLHQudGl0bGVJZD1lLnRpdGxlSWQsS2goci52YWx1ZSx0KX0pO0VyKHMsZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHhnKGBDb3VsZCBub3QgZmluZCBvbmUgb3IgbW9yZSBpY29uKHMpYCxyLnZhbHVlLG8udmFsdWUpfSx7aW1tZWRpYXRlOiEwfSksZS5ncmFkaWVudEZpbGwmJmUuc3ltYm9sJiZ4ZyhgZ3JhZGllbnRGaWxsIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBzeW1ib2wgaXMgdHJ1ZSBhbmQgd2lsbCBiZSBpZ25vcmVkYCk7dmFyIGM9VyhmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlP3lnKHMudmFsdWUuYWJzdHJhY3RbMF0se2dyYWRpZW50RmlsbDplLnN5bWJvbD9udWxsOmUuZ3JhZGllbnRGaWxsfSxuKTpudWxsfSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMudmFsdWV9fX0pLHdnPXR5cGVvZiB3aW5kb3c8YHVgLFRnLEVnPWU9PlRnPWUsRGc9U3ltYm9sKCk7ZnVuY3Rpb24gT2coZSl7cmV0dXJuIGUmJnR5cGVvZiBlPT1gb2JqZWN0YCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWAmJnR5cGVvZiBlLnRvSlNPTiE9YGZ1bmN0aW9uYH12YXIga2c9dHlwZW9mIHdpbmRvdz09YG9iamVjdGAmJndpbmRvdy53aW5kb3c9PT13aW5kb3c/d2luZG93OnR5cGVvZiBzZWxmPT1gb2JqZWN0YCYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOnR5cGVvZiBnbG9iYWw9PWBvYmplY3RgJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsP2dsb2JhbDp0eXBlb2YgZ2xvYmFsVGhpcz09YG9iamVjdGA/Z2xvYmFsVGhpczp7SFRNTEVsZW1lbnQ6bnVsbH07ZnVuY3Rpb24gQWcoZSx7YXV0b0JvbTp0PSExfT17fSl7cmV0dXJuIHQmJi9eXHMqKD86dGV4dFwvXFMqfGFwcGxpY2F0aW9uXC94bWx8XFMqXC9cUypcK3htbClccyo7LipjaGFyc2V0XHMqPVxzKnV0Zi04L2kudGVzdChlLnR5cGUpP25ldyBCbG9iKFtg77u/YCxlXSx7dHlwZTplLnR5cGV9KTplfWZ1bmN0aW9uIGpnKGUsdCxuKXtsZXQgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7ci5vcGVuKGBHRVRgLGUpLHIucmVzcG9uc2VUeXBlPWBibG9iYCxyLm9ubG9hZD1mdW5jdGlvbigpe0lnKHIucmVzcG9uc2UsdCxuKX0sci5vbmVycm9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihgY291bGQgbm90IGRvd25sb2FkIGZpbGVgKX0sci5zZW5kKCl9ZnVuY3Rpb24gTWcoZSl7bGV0IHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3Qub3BlbihgSEVBRGAsZSwhMSk7dHJ5e3Quc2VuZCgpfWNhdGNoe31yZXR1cm4gdC5zdGF0dXM+PTIwMCYmdC5zdGF0dXM8PTI5OX1mdW5jdGlvbiBOZyhlKXt0cnl7ZS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGBjbGlja2ApKX1jYXRjaHtsZXQgdD1uZXcgTW91c2VFdmVudChgY2xpY2tgLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsdmlldzp3aW5kb3csZGV0YWlsOjAsc2NyZWVuWDo4MCxzY3JlZW5ZOjIwLGNsaWVudFg6ODAsY2xpZW50WToyMCxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6bnVsbH0pO2UuZGlzcGF0Y2hFdmVudCh0KX19dmFyIFBnPXR5cGVvZiBuYXZpZ2F0b3I9PWBvYmplY3RgP25hdmlnYXRvcjp7dXNlckFnZW50OmBgfSxGZz0vTWFjaW50b3NoLy50ZXN0KFBnLnVzZXJBZ2VudCkmJi9BcHBsZVdlYktpdC8udGVzdChQZy51c2VyQWdlbnQpJiYhL1NhZmFyaS8udGVzdChQZy51c2VyQWdlbnQpLElnPXdnP3R5cGVvZiBIVE1MQW5jaG9yRWxlbWVudDxgdWAmJmBkb3dubG9hZGBpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFGZz9MZzpgbXNTYXZlT3JPcGVuQmxvYmBpbiBQZz9SZzp6ZzooKT0+e307ZnVuY3Rpb24gTGcoZSx0PWBkb3dubG9hZGAsbil7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3IuZG93bmxvYWQ9dCxyLnJlbD1gbm9vcGVuZXJgLHR5cGVvZiBlPT1gc3RyaW5nYD8oci5ocmVmPWUsci5vcmlnaW49PT1sb2NhdGlvbi5vcmlnaW4/Tmcocik6TWcoci5ocmVmKT9qZyhlLHQsbik6KHIudGFyZ2V0PWBfYmxhbmtgLE5nKHIpKSk6KHIuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHIuaHJlZil9LDRlNCksc2V0VGltZW91dChmdW5jdGlvbigpe05nKHIpfSwwKSl9ZnVuY3Rpb24gUmcoZSx0PWBkb3dubG9hZGAsbil7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtpZihNZyhlKSlqZyhlLHQsbik7ZWxzZXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7dC5ocmVmPWUsdC50YXJnZXQ9YF9ibGFua2Asc2V0VGltZW91dChmdW5jdGlvbigpe05nKHQpfSl9fWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoQWcoZSxuKSx0KX1mdW5jdGlvbiB6ZyhlLHQsbixyKXtpZihyfHw9b3BlbihgYCxgX2JsYW5rYCksciYmKHIuZG9jdW1lbnQudGl0bGU9ci5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1gZG93bmxvYWRpbmcuLi5gKSx0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGpnKGUsdCxuKTtsZXQgaT1lLnR5cGU9PT1gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCxhPS9jb25zdHJ1Y3Rvci9pLnRlc3QoU3RyaW5nKGtnLkhUTUxFbGVtZW50KSl8fGBzYWZhcmlgaW4ga2csbz0vQ3JpT1NcL1tcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChvfHxpJiZhfHxGZykmJnR5cGVvZiBGaWxlUmVhZGVyPGB1YCl7bGV0IHQ9bmV3IEZpbGVSZWFkZXI7dC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXtsZXQgZT10LnJlc3VsdDtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgcj1udWxsLEVycm9yKGBXcm9uZyByZWFkZXIucmVzdWx0IHR5cGVgKTtlPW8/ZTplLnJlcGxhY2UoL15kYXRhOlteO10qOy8sYGRhdGE6YXR0YWNobWVudC9maWxlO2ApLHI/ci5sb2NhdGlvbi5ocmVmPWU6bG9jYXRpb24uYXNzaWduKGUpLHI9bnVsbH0sdC5yZWFkQXNEYXRhVVJMKGUpfWVsc2V7bGV0IHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChlKTtyP3IubG9jYXRpb24uYXNzaWduKHQpOmxvY2F0aW9uLmhyZWY9dCxyPW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwodCl9LDRlNCl9fXZhcnthc3NpZ246Qmd9PU9iamVjdDtmdW5jdGlvbiBWZygpe2xldCBlPVBlKCEwKSx0PWUucnVuKCgpPT5NKHt9KSksbj1bXSxyPVtdLGk9c24oe2luc3RhbGwoZSl7RWcoaSksaS5fYT1lLGUucHJvdmlkZShEZyxpKSxlLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRwaW5pYT1pLHIuZm9yRWFjaChlPT5uLnB1c2goZSkpLHI9W119LHVzZShlKXtyZXR1cm4gdGhpcy5fYT9uLnB1c2goZSk6ci5wdXNoKGUpLHRoaXN9LF9wOm4sX2E6bnVsbCxfZTplLF9zOm5ldyBNYXAsc3RhdGU6dH0pO3JldHVybiBpfXZhciBIZz0oKT0+e307ZnVuY3Rpb24gVWcoZSx0LG4scj1IZyl7ZS5hZGQodCk7bGV0IGk9KCk9PntlLmRlbGV0ZSh0KSYmcigpfTtyZXR1cm4hbiYmRmUoKSYmSWUoaSksaX1mdW5jdGlvbiBXZyhlLC4uLnQpe2UuZm9yRWFjaChlPT57ZSguLi50KX0pfXZhciBHZz1lPT5lKCksS2c9U3ltYm9sKCkscWc9U3ltYm9sKCk7ZnVuY3Rpb24gSmcoZSx0KXtlIGluc3RhbmNlb2YgTWFwJiZ0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaCgodCxuKT0+ZS5zZXQobix0KSk6ZSBpbnN0YW5jZW9mIFNldCYmdCBpbnN0YW5jZW9mIFNldCYmdC5mb3JFYWNoKGUuYWRkLGUpO2ZvcihsZXQgbiBpbiB0KXtpZighT2JqZWN0Lmhhc093bih0LG4pKWNvbnRpbnVlO2xldCByPXRbbl0saT1lW25dO2Vbbl09T2coaSkmJk9nKHIpJiZPYmplY3QuaGFzT3duKGUsbikmJiFqKHIpJiYhbm4ocik/SmcoaSxyKTpyfXJldHVybiBlfXZhciBZZz1TeW1ib2woKTtmdW5jdGlvbiBYZyhlKXtyZXR1cm4hZXx8dHlwZW9mIGUhPWBvYmplY3RgfHwhT2JqZWN0Lmhhc093bihlLFlnKX12YXJ7YXNzaWduOlpnfT1PYmplY3Q7ZnVuY3Rpb24gUWcoZSl7cmV0dXJuISEoaihlKSYmZS5lZmZlY3QpfWZ1bmN0aW9uICRnKGUsdCxuLHIpe2xldHtzdGF0ZTppLGFjdGlvbnM6YSxnZXR0ZXJzOm99PXQscz1uLnN0YXRlLnZhbHVlW2VdLGM7ZnVuY3Rpb24gbCgpe3JldHVybiBzfHwobi5zdGF0ZS52YWx1ZVtlXT1pP2koKTp7fSksWmcoeW4obi5zdGF0ZS52YWx1ZVtlXSksYSxPYmplY3Qua2V5cyhvfHx7fSkucmVkdWNlKCh0LHIpPT4odFtyXT1zbihXKCgpPT57RWcobik7bGV0IHQ9bi5fcy5nZXQoZSk7cmV0dXJuIG9bcl0uY2FsbCh0LHQpfSkpLHQpLHt9KSl9cmV0dXJuIGM9ZV8oZSxsLHQsbixyLCEwKSxjfWZ1bmN0aW9uIGVfKGUsdCxuPXt9LHIsaSxhKXtsZXQgbyxzPVpnKHthY3Rpb25zOnt9fSxuKSxjPXtkZWVwOiEwfSxsLHUsZD1uZXcgU2V0LGY9bmV3IFNldCxwLG09ci5zdGF0ZS52YWx1ZVtlXTshYSYmIW0mJihyLnN0YXRlLnZhbHVlW2VdPXt9KTtsZXQgaDtmdW5jdGlvbiBnKHQpe2xldCBuO2w9dT0hMSx0eXBlb2YgdD09YGZ1bmN0aW9uYD8odChyLnN0YXRlLnZhbHVlW2VdKSxuPXt0eXBlOmBwYXRjaCBmdW5jdGlvbmAsc3RvcmVJZDplLGV2ZW50czpwfSk6KEpnKHIuc3RhdGUudmFsdWVbZV0sdCksbj17dHlwZTpgcGF0Y2ggb2JqZWN0YCxwYXlsb2FkOnQsc3RvcmVJZDplLGV2ZW50czpwfSk7bGV0IGk9aD1TeW1ib2woKTtRbigpLnRoZW4oKCk9PntoPT09aSYmKGw9ITApfSksdT0hMCxXZyhkLG4sci5zdGF0ZS52YWx1ZVtlXSl9bGV0IF89YT9mdW5jdGlvbigpe2xldHtzdGF0ZTplfT1uLHQ9ZT9lKCk6e307dGhpcy4kcGF0Y2goZT0+e1pnKGUsdCl9KX06SGc7ZnVuY3Rpb24gdigpe28uc3RvcCgpLGQuY2xlYXIoKSxmLmNsZWFyKCksci5fcy5kZWxldGUoZSl9bGV0IHk9KHQsbj1gYCk9PntpZihLZyBpbiB0KXJldHVybiB0W3FnXT1uLHQ7bGV0IGk9ZnVuY3Rpb24oKXtFZyhyKTtsZXQgbj1BcnJheS5mcm9tKGFyZ3VtZW50cyksYT1uZXcgU2V0LG89bmV3IFNldDtmdW5jdGlvbiBzKGUpe2EuYWRkKGUpfWZ1bmN0aW9uIGMoZSl7by5hZGQoZSl9V2coZix7YXJnczpuLG5hbWU6aVtxZ10sc3RvcmU6YixhZnRlcjpzLG9uRXJyb3I6Y30pO2xldCBsO3RyeXtsPXQuYXBwbHkodGhpcyYmdGhpcy4kaWQ9PT1lP3RoaXM6YixuKX1jYXRjaChlKXt0aHJvdyBXZyhvLGUpLGV9cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihlPT4oV2coYSxlKSxlKSkuY2F0Y2goZT0+KFdnKG8sZSksUHJvbWlzZS5yZWplY3QoZSkpKTooV2coYSxsKSxsKX07cmV0dXJuIGlbS2ddPSEwLGlbcWddPW4saX0sYj1adCh7X3A6ciwkaWQ6ZSwkb25BY3Rpb246VWcuYmluZChudWxsLGYpLCRwYXRjaDpnLCRyZXNldDpfLCRzdWJzY3JpYmUodCxuPXt9KXtpZihkLmhhcyh0KSlyZXR1cm4gSGc7bGV0IGk9VWcoZCx0LG4uZGV0YWNoZWQsKCk9PmEoKSksYT1vLnJ1bigoKT0+RXIoKCk9PnIuc3RhdGUudmFsdWVbZV0scj0+eyhuLmZsdXNoPT09YHN5bmNgP3U6bCkmJnQoe3N0b3JlSWQ6ZSx0eXBlOmBkaXJlY3RgLGV2ZW50czpwfSxyKX0sWmcoe30sYyxuKSkpO3JldHVybiBpfSwkZGlzcG9zZTp2fSk7ci5fcy5zZXQoZSxiKTtsZXQgeD0oci5fYSYmci5fYS5ydW5XaXRoQ29udGV4dHx8R2cpKCgpPT5yLl9lLnJ1bigoKT0+KG89UGUoKSkucnVuKCgpPT50KHthY3Rpb246eX0pKSkpO2ZvcihsZXQgdCBpbiB4KXtsZXQgbj14W3RdO2oobikmJiFRZyhuKXx8bm4obik/YXx8KG0mJlhnKG4pJiYoaihuKT9uLnZhbHVlPW1bdF06KChuIGluc3RhbmNlb2YgU2V0fHxuIGluc3RhbmNlb2YgTWFwKSYmbi5jbGVhcigpLEpnKG4sbVt0XSkpKSxyLnN0YXRlLnZhbHVlW2VdW3RdPW4pOnR5cGVvZiBuPT1gZnVuY3Rpb25gJiYoeFt0XT15KG4sdCkscy5hY3Rpb25zW3RdPW4pfXJldHVybiBaZyhiLHgpLFpnKEEoYikseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIiRzdGF0ZSIse2dldDooKT0+ci5zdGF0ZS52YWx1ZVtlXSxzZXQ6ZT0+e2codD0+e1pnKHQsZSl9KX19KSxyLl9wLmZvckVhY2goZT0+e2xldCB0PW8ucnVuKCgpPT5lKHtzdG9yZTpiLGFwcDpyLl9hLHBpbmlhOnIsb3B0aW9uczpzfSkpO1pnKGIsdCl9KSxtJiZhJiZuLmh5ZHJhdGUmJm4uaHlkcmF0ZShiLiRzdGF0ZSxtKSxsPSEwLHU9ITAsYn1mdW5jdGlvbiB0XyhlLHQsbil7bGV0IHIsaT10eXBlb2YgdD09YGZ1bmN0aW9uYDtyPWk/bjp0O2Z1bmN0aW9uIGEobixhKXtsZXQgbz1icigpO3JldHVybiBufHw9bz95cihEZyxudWxsKTpudWxsLG4mJkVnKG4pLG49VGcsbi5fcy5oYXMoZSl8fChpP2VfKGUsdCxyLG4pOiRnKGUscixuKSksbi5fcy5nZXQoZSl9cmV0dXJuIGEuJGlkPWUsYX12YXIgbl89e3ByZWZpeDpgZmFiYCxpY29uTmFtZTpgZ2l0aHViYCxpY29uOls1MTIsNTEyLFtdLGBmMDliYCxgTTIxNi41IDM2Mi41Yy02Ni04LTExMi41LTU1LjUtMTEyLjUtMTE3IDAtMjUgOS01MiAyNC03MC02LjUtMTYuNS01LjUtNTEuNSAyLTY2IDIwLTIuNSA0NyA4IDYzIDIyLjUgMTktNiAzOS05IDYzLjUtOXM0NC41IDMgNjIuNSA4LjVjMTUuNS0xNCA0My0yNC41IDYzLTIyIDcgMTMuNSA4IDQ4LjUgMS41IDY1LjUgMTYgMTkgMjQuNSA0NC41IDI0LjUgNzAuNSAwIDYxLjUtNDYuNSAxMDgtMTEzLjUgMTE2LjUgMTcgMTEgMjguNSAzNSAyOC41IDYyLjVsMCA1MkMzMjMgNDkxLjUgMzM1LjUgNTAwIDM1MC41IDQ5NCA0NDEgNDU5LjUgNTEyIDM2OSA1MTIgMjU3IDUxMiAxMTUuNSAzOTcgMCAyNTUuNSAwUzAgMTE1LjUgMCAyNTdjMCAxMTEgNzAuNSAyMDMgMTY1LjUgMjM3LjUgMTMuNSA1IDI2LjUtNCAyNi41LTE3LjVsMC00MGMtNyAzLTE2IDUtMjQgNS0zMyAwLTUyLjUtMTgtNjYuNS01MS41LTUuNS0xMy41LTExLjUtMjEuNS0yMy0yMy02LS41LTgtMy04LTYgMC02IDEwLTEwLjUgMjAtMTAuNSAxNC41IDAgMjcgOSA0MCAyNy41IDEwIDE0LjUgMjAuNSAyMSAzMyAyMXMyMC41LTQuNSAzMi0xNmM4LjUtOC41IDE1LTE2IDIxLTIxemBdfSxyXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBtYWduaWZ5aW5nLWdsYXNzYCxpY29uOls1MTIsNTEyLFsxMjgyNjksYHNlYXJjaGBdLGBmMDAyYCxgTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6YF19LGlfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGtleWAsaWNvbjpbNTEyLDUxMixbMTI4MjczXSxgZjA4NGAsYE0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwemBdfSxhXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0LXVwYCxpY29uOlszODQsNTEyLFtgc29ydC1hc2NgXSxgZjBkZWAsYE0zMiAyMjRjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTc4LjUgOS40IDE2OS40bDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzNjQuOSAyMjQgMzUyIDIyNEwzMiAyMjR6YF19LG9fPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGV5ZWAsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSxgZjA2ZWAsYE0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6YF19LHNfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoZXZyb24tdXBgLGljb246WzQ0OCw1MTIsW10sYGYwNzdgLGBNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnpgXX0sY189e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLXhtYXJrYCxpY29uOls1MTIsNTEyLFs2MTUzMixgdGltZXMtY2lyY2xlYCxgeG1hcmstY2lyY2xlYF0sYGYwNTdgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6YF19LGxfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNpcmNsZS1leGNsYW1hdGlvbmAsaWNvbjpbNTEyLDUxMixbYGV4Y2xhbWF0aW9uLWNpcmNsZWBdLGBmMDZhYCxgTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6YF19LHVfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoZWNrYCxpY29uOls0NDgsNTEyLFsxMDAwMywxMDAwNF0sYGYwMGNgLGBNNDM0LjggNzAuMWMxNC4zIDEwLjQgMTcuNSAzMC40IDcuMSA0NC43bC0yNTYgMzUyYy01LjUgNy42LTE0IDEyLjMtMjMuNCAxMy4xcy0xOC41LTIuNy0yNS4xLTkuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxMDEuNSAxMDEuNSAyMzQtMzIxLjdjMTAuNC0xNC4zIDMwLjQtMTcuNSA0NC43LTcuMXpgXX0sZF89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydGAsaWNvbjpbMzg0LDUxMixbYHVuc29ydGVkYF0sYGYwZGNgLGBNMi40IDIwNC4yYzUgMTIgMTYuNiAxOS44IDI5LjYgMTkuOGwzMjAgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0Ljl6bTAgMTAzLjVjLTUgMTItMi4yIDI1LjcgNi45IDM0LjlsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHpgXX0sZl89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgeG1hcmtgLGljb246WzM4NCw1MTIsWzEyODQ3MywxMDAwNSwxMDAwNiwxMDA2MCwyMTUsYGNsb3NlYCxgbXVsdGlwbHlgLGByZW1vdmVgLGB0aW1lc2BdLGBmMDBkYCxgTTU1LjEgNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTQ3LjIgMjU2IDkuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIuNSAzMDEuMyAzMjkuOSA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy44IDI1NiAzNzUuMSAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIuNSAyMTAuNyA1NS4xIDczLjR6YF19LHBfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNpcmNsZS1jaGVja2AsaWNvbjpbNTEyLDUxMixbNjE1MzMsYGNoZWNrLWNpcmNsZWBdLGBmMDU4YCxgTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyek0zNzQgMTQ1LjdjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zTDIyMS4xIDMxNS4yIDE2OSAyNjMuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM1IDUgMTEuOCA3LjUgMTguOCA3czEzLjQtNC4xIDE3LjUtOS44TDM3OS4zIDE3OS4yYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41emBdfSxtXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGV2cm9uLWRvd25gLGljb246WzQ0OCw1MTIsW10sYGYwNzhgLGBNMjAxLjQgNDA2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTkyLTE5MmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzM4LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MnpgXX0saF89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgdHJpYW5nbGUtZXhjbGFtYXRpb25gLGljb246WzUxMiw1MTIsWzk4ODgsYGV4Y2xhbWF0aW9uLXRyaWFuZ2xlYCxgd2FybmluZ2BdLGBmMDcxYCxgTTI1NiAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNVM0ODYuMSA0ODAgNDcyIDQ4MEw0MCA0ODBjLTE0LjEgMC0yNy4yLTcuNC0zNC40LTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMGM3LTEyLjkgMjAuNS0yMSAzNS4yLTIxem0wIDM1MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjUgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6YF19LGdfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNvcHlgLGljb246WzQ0OCw1MTIsW10sYGYwYzVgLGBNMTkyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjAwLjZjMC0xNy40LTcuMS0zNC4xLTE5LjctNDYuMkwzNzAuNiAxNy44QzM1OC43IDYuNCAzNDIuOCAwIDMyNi4zIDBMMTkyIDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi02NCAwIDAgMTYtMTkyIDAgMC0yNTYgMTYgMCAwLTY0LTE2IDB6YF19LF9fPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGV5ZS1zbGFzaGAsaWNvbjpbNTc2LDUxMixbXSxgZjA3MGAsYE00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNMzI1LjMgMzk1LjFjLTExLjkgMy4yLTI0LjQgNC45LTM3LjMgNC45LTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtMTIuOSAxLjctMjUuNCA0LjktMzcuM0w2OS40IDEzOS4yYy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNmwtNjQuMi02NC4yemBdfSx2Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0LWRvd25gLGljb246WzM4NCw1MTIsW2Bzb3J0LWRlc2NgXSxgZjBkZGAsYE0zMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjIgMzMzLjUgOS40IDM0Mi42bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODh6YF19O2Z1bmN0aW9uIHlfKGUpe3ZhciB0LG4scj1gYDtpZih0eXBlb2YgZT09YHN0cmluZ2B8fHR5cGVvZiBlPT1gbnVtYmVyYClyKz1lO2Vsc2UgaWYodHlwZW9mIGU9PWBvYmplY3RgKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgaT1lLmxlbmd0aDtmb3IodD0wO3Q8aTt0KyspZVt0XSYmKG49eV8oZVt0XSkpJiYociYmKHIrPWAgYCkscis9bil9ZWxzZSBmb3IobiBpbiBlKWVbbl0mJihyJiYocis9YCBgKSxyKz1uKX1yZXR1cm4gcn1mdW5jdGlvbiBiXygpe2Zvcih2YXIgZSx0LG49MCxyPWBgLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKShlPWFyZ3VtZW50c1tuXSkmJih0PXlfKGUpKSYmKHImJihyKz1gIGApLHIrPXQpO3JldHVybiByfXZhciB4Xz1lPT50eXBlb2YgZT09YGJvb2xlYW5gP2Ake2V9YDplPT09MD9gMGA6ZSxTXz1iXyxDXz0oZSx0KT0+bj0+e2lmKHQ/LnZhcmlhbnRzPT1udWxsKXJldHVybiBTXyhlLG4/LmNsYXNzLG4/LmNsYXNzTmFtZSk7bGV0e3ZhcmlhbnRzOnIsZGVmYXVsdFZhcmlhbnRzOml9PXQsYT1PYmplY3Qua2V5cyhyKS5tYXAoZT0+e2xldCB0PW4/LltlXSxhPWk/LltlXTtpZih0PT09bnVsbClyZXR1cm4gbnVsbDtsZXQgbz14Xyh0KXx8eF8oYSk7cmV0dXJuIHJbZV1bb119KSxvPW4mJk9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHI9PT12b2lkIDB8fChlW25dPXIpLGV9LHt9KTtyZXR1cm4gU18oZSxhLHQ/LmNvbXBvdW5kVmFyaWFudHM/LnJlZHVjZSgoZSx0KT0+e2xldHtjbGFzczpuLGNsYXNzTmFtZTpyLC4uLmF9PXQ7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGEpLmV2ZXJ5KGU9PntsZXRbdCxuXT1lO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXMoey4uLmksLi4ub31bdF0pOnsuLi5pLC4uLm99W3RdPT09bn0pP1suLi5lLG4scl06ZX0sW10pLG4/LmNsYXNzLG4/LmNsYXNzTmFtZSl9LHdfPShlLHQpPT57bGV0IG49QXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyluW2UubGVuZ3RoK3JdPXRbcl07cmV0dXJuIG59LFRfPShlLHQpPT4oe2NsYXNzR3JvdXBJZDplLHZhbGlkYXRvcjp0fSksRV89KGU9bmV3IE1hcCx0PW51bGwsbik9Pih7bmV4dFBhcnQ6ZSx2YWxpZGF0b3JzOnQsY2xhc3NHcm91cElkOm59KSxEXz1gLWAsT189W10sa189YGFyYml0cmFyeS4uYCxBXz1lPT57bGV0IHQ9Tl8oZSkse2NvbmZsaWN0aW5nQ2xhc3NHcm91cHM6bixjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6cn09ZTtyZXR1cm57Z2V0Q2xhc3NHcm91cElkOmU9PntpZihlLnN0YXJ0c1dpdGgoYFtgKSYmZS5lbmRzV2l0aChgXWApKXJldHVybiBNXyhlKTtsZXQgbj1lLnNwbGl0KERfKTtyZXR1cm4gal8obiwrKG5bMF09PT1gYCYmbi5sZW5ndGg+MSksdCl9LGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczooZSx0KT0+e2lmKHQpe2xldCB0PXJbZV0saT1uW2VdO3JldHVybiB0P2k/d18oaSx0KTp0Oml8fE9ffXJldHVybiBuW2VdfHxPX319fSxqXz0oZSx0LG4pPT57aWYoZS5sZW5ndGgtdD09PTApcmV0dXJuIG4uY2xhc3NHcm91cElkO2xldCByPWVbdF0saT1uLm5leHRQYXJ0LmdldChyKTtpZihpKXtsZXQgbj1qXyhlLHQrMSxpKTtpZihuKXJldHVybiBufWxldCBhPW4udmFsaWRhdG9ycztpZihhPT09bnVsbClyZXR1cm47bGV0IG89dD09PTA/ZS5qb2luKERfKTplLnNsaWNlKHQpLmpvaW4oRF8pLHM9YS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxzO2UrKyl7bGV0IHQ9YVtlXTtpZih0LnZhbGlkYXRvcihvKSlyZXR1cm4gdC5jbGFzc0dyb3VwSWR9fSxNXz1lPT5lLnNsaWNlKDEsLTEpLmluZGV4T2YoYDpgKT09PS0xP3ZvaWQgMDooKCk9PntsZXQgdD1lLnNsaWNlKDEsLTEpLG49dC5pbmRleE9mKGA6YCkscj10LnNsaWNlKDAsbik7cmV0dXJuIHI/a18rcjp2b2lkIDB9KSgpLE5fPWU9PntsZXR7dGhlbWU6dCxjbGFzc0dyb3VwczpufT1lO3JldHVybiBQXyhuLHQpfSxQXz0oZSx0KT0+e2xldCBuPUVfKCk7Zm9yKGxldCByIGluIGUpe2xldCBpPWVbcl07Rl8oaSxuLHIsdCl9cmV0dXJuIG59LEZfPShlLHQsbixyKT0+e2xldCBpPWUubGVuZ3RoO2ZvcihsZXQgYT0wO2E8aTthKyspe2xldCBpPWVbYV07SV8oaSx0LG4scil9fSxJXz0oZSx0LG4scik9PntpZih0eXBlb2YgZT09YHN0cmluZ2Ape0xfKGUsdCxuKTtyZXR1cm59aWYodHlwZW9mIGU9PWBmdW5jdGlvbmApe1JfKGUsdCxuLHIpO3JldHVybn16XyhlLHQsbixyKX0sTF89KGUsdCxuKT0+e2xldCByPWU9PT1gYD90OkJfKHQsZSk7ci5jbGFzc0dyb3VwSWQ9bn0sUl89KGUsdCxuLHIpPT57aWYoVl8oZSkpe0ZfKGUociksdCxuLHIpO3JldHVybn10LnZhbGlkYXRvcnM9PT1udWxsJiYodC52YWxpZGF0b3JzPVtdKSx0LnZhbGlkYXRvcnMucHVzaChUXyhuLGUpKX0sel89KGUsdCxuLHIpPT57bGV0IGk9T2JqZWN0LmVudHJpZXMoZSksYT1pLmxlbmd0aDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtsZXRbYSxvXT1pW2VdO0ZfKG8sQl8odCxhKSxuLHIpfX0sQl89KGUsdCk9PntsZXQgbj1lLHI9dC5zcGxpdChEXyksaT1yLmxlbmd0aDtmb3IobGV0IGU9MDtlPGk7ZSsrKXtsZXQgdD1yW2VdLGk9bi5uZXh0UGFydC5nZXQodCk7aXx8KGk9RV8oKSxuLm5leHRQYXJ0LnNldCh0LGkpKSxuPWl9cmV0dXJuIG59LFZfPWU9PmBpc1RoZW1lR2V0dGVyYGluIGUmJmUuaXNUaGVtZUdldHRlcj09PSEwLEhfPWU9PntpZihlPDEpcmV0dXJue2dldDooKT0+dm9pZCAwLHNldDooKT0+e319O2xldCB0PTAsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxpPShpLGEpPT57bltpXT1hLHQrKyx0PmUmJih0PTAscj1uLG49T2JqZWN0LmNyZWF0ZShudWxsKSl9O3JldHVybntnZXQoZSl7bGV0IHQ9bltlXTtpZih0IT09dm9pZCAwKXJldHVybiB0O2lmKCh0PXJbZV0pIT09dm9pZCAwKXJldHVybiBpKGUsdCksdH0sc2V0KGUsdCl7ZSBpbiBuP25bZV09dDppKGUsdCl9fX0sVV89YCFgLFdfPWA6YCxHXz1bXSxLXz0oZSx0LG4scixpKT0+KHttb2RpZmllcnM6ZSxoYXNJbXBvcnRhbnRNb2RpZmllcjp0LGJhc2VDbGFzc05hbWU6bixtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOnIsaXNFeHRlcm5hbDppfSkscV89ZT0+e2xldHtwcmVmaXg6dCxleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZTpufT1lLHI9ZT0+e2xldCB0PVtdLG49MCxyPTAsaT0wLGEsbz1lLmxlbmd0aDtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgbz1lW3NdO2lmKG49PT0wJiZyPT09MCl7aWYobz09PVdfKXt0LnB1c2goZS5zbGljZShpLHMpKSxpPXMrMTtjb250aW51ZX1pZihvPT09YC9gKXthPXM7Y29udGludWV9fW89PT1gW2A/bisrOm89PT1gXWA/bi0tOm89PT1gKGA/cisrOm89PT1gKWAmJnItLX1sZXQgcz10Lmxlbmd0aD09PTA/ZTplLnNsaWNlKGkpLGM9cyxsPSExO3MuZW5kc1dpdGgoVV8pPyhjPXMuc2xpY2UoMCwtMSksbD0hMCk6cy5zdGFydHNXaXRoKFVfKSYmKGM9cy5zbGljZSgxKSxsPSEwKTtsZXQgdT1hJiZhPmk/YS1pOnZvaWQgMDtyZXR1cm4gS18odCxsLGMsdSl9O2lmKHQpe2xldCBlPXQrV18sbj1yO3I9dD0+dC5zdGFydHNXaXRoKGUpP24odC5zbGljZShlLmxlbmd0aCkpOktfKEdfLCExLHQsdm9pZCAwLCEwKX1pZihuKXtsZXQgZT1yO3I9dD0+bih7Y2xhc3NOYW1lOnQscGFyc2VDbGFzc05hbWU6ZX0pfXJldHVybiByfSxKXz1lPT57bGV0IHQ9bmV3IE1hcDtyZXR1cm4gZS5vcmRlclNlbnNpdGl2ZU1vZGlmaWVycy5mb3JFYWNoKChlLG4pPT57dC5zZXQoZSwxZTYrbil9KSxlPT57bGV0IG49W10scj1bXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXSxvPWFbMF09PT1gW2Ascz10LmhhcyhhKTtvfHxzPyhyLmxlbmd0aD4wJiYoci5zb3J0KCksbi5wdXNoKC4uLnIpLHI9W10pLG4ucHVzaChhKSk6ci5wdXNoKGEpfXJldHVybiByLmxlbmd0aD4wJiYoci5zb3J0KCksbi5wdXNoKC4uLnIpKSxufX0sWV89ZT0+KHtjYWNoZTpIXyhlLmNhY2hlU2l6ZSkscGFyc2VDbGFzc05hbWU6cV8oZSksc29ydE1vZGlmaWVyczpKXyhlKSxwb3N0Zml4TG9va3VwQ2xhc3NHcm91cElkczpYXyhlKSwuLi5BXyhlKX0pLFhfPWU9PntsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49ZS5wb3N0Zml4TG9va3VwQ2xhc3NHcm91cHM7aWYobilmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0W25bZV1dPSEwO3JldHVybiB0fSxaXz0vXHMrLyxRXz0oZSx0KT0+e2xldHtwYXJzZUNsYXNzTmFtZTpuLGdldENsYXNzR3JvdXBJZDpyLGdldENvbmZsaWN0aW5nQ2xhc3NHcm91cElkczppLHNvcnRNb2RpZmllcnM6YSxwb3N0Zml4TG9va3VwQ2xhc3NHcm91cElkczpvfT10LHM9W10sYz1lLnRyaW0oKS5zcGxpdChaXyksbD1gYDtmb3IobGV0IGU9Yy5sZW5ndGgtMTtlPj0wOy0tZSl7bGV0IHQ9Y1tlXSx7aXNFeHRlcm5hbDp1LG1vZGlmaWVyczpkLGhhc0ltcG9ydGFudE1vZGlmaWVyOmYsYmFzZUNsYXNzTmFtZTpwLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246bX09bih0KTtpZih1KXtsPXQrKGwubGVuZ3RoPjA/YCBgK2w6bCk7Y29udGludWV9bGV0IGg9ISFtLGc7aWYoaCl7Zz1yKHAuc3Vic3RyaW5nKDAsbSkpO2xldCBlPWcmJm9bZ10/cihwKTp2b2lkIDA7ZSYmZSE9PWcmJihnPWUsaD0hMSl9ZWxzZSBnPXIocCk7aWYoIWcpe2lmKCFoKXtsPXQrKGwubGVuZ3RoPjA/YCBgK2w6bCk7Y29udGludWV9aWYoZz1yKHApLCFnKXtsPXQrKGwubGVuZ3RoPjA/YCBgK2w6bCk7Y29udGludWV9aD0hMX1sZXQgXz1kLmxlbmd0aD09PTA/YGA6ZC5sZW5ndGg9PT0xP2RbMF06YShkKS5qb2luKGA6YCksdj1mP18rVV86Xyx5PXYrZztpZihzLmluZGV4T2YoeSk+LTEpY29udGludWU7cy5wdXNoKHkpO2xldCBiPWkoZyxoKTtmb3IobGV0IGU9MDtlPGIubGVuZ3RoOysrZSl7bGV0IHQ9YltlXTtzLnB1c2godit0KX1sPXQrKGwubGVuZ3RoPjA/YCBgK2w6bCl9cmV0dXJuIGx9LCRfPSguLi5lKT0+e2xldCB0PTAsbixyLGk9YGA7Zm9yKDt0PGUubGVuZ3RoOykobj1lW3QrK10pJiYocj1ldihuKSkmJihpJiYoaSs9YCBgKSxpKz1yKTtyZXR1cm4gaX0sZXY9ZT0+e2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTtsZXQgdCxuPWBgO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0mJih0PWV2KGVbcl0pKSYmKG4mJihuKz1gIGApLG4rPXQpO3JldHVybiBufSx0dj0oZSwuLi50KT0+e2xldCBuLHIsaSxhLG89bz0+KG49WV8odC5yZWR1Y2UoKGUsdCk9PnQoZSksZSgpKSkscj1uLmNhY2hlLmdldCxpPW4uY2FjaGUuc2V0LGE9cyxzKG8pKSxzPWU9PntsZXQgdD1yKGUpO2lmKHQpcmV0dXJuIHQ7bGV0IGE9UV8oZSxuKTtyZXR1cm4gaShlLGEpLGF9O3JldHVybiBhPW8sKC4uLmUpPT5hKCRfKC4uLmUpKX0sbnY9W10scnY9ZT0+e2xldCB0PXQ9PnRbZV18fG52O3JldHVybiB0LmlzVGhlbWVHZXR0ZXI9ITAsdH0saXY9L15cWyg/Oihcd1tcdy1dKik6KT8oLispXF0kL2ksYXY9L15cKCg/Oihcd1tcdy1dKik6KT8oLispXCkkL2ksb3Y9L15cZCsoPzpcLlxkKyk/XC9cZCsoPzpcLlxkKyk/JC8sc3Y9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxjdj0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sbHY9L14ocmdiYT98aHNsYT98aHdifChvayk/KGxhYnxsY2gpfGNvbG9yLW1peClcKC4rXCkkLyx1dj0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxkdj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLGZ2PWU9Pm92LnRlc3QoZSksWT1lPT4hIWUmJiFOdW1iZXIuaXNOYU4oTnVtYmVyKGUpKSxwdj1lPT4hIWUmJk51bWJlci5pc0ludGVnZXIoTnVtYmVyKGUpKSxtdj1lPT5lLmVuZHNXaXRoKGAlYCkmJlkoZS5zbGljZSgwLC0xKSksaHY9ZT0+c3YudGVzdChlKSxndj0oKT0+ITAsX3Y9ZT0+Y3YudGVzdChlKSYmIWx2LnRlc3QoZSksdnY9KCk9PiExLHl2PWU9PnV2LnRlc3QoZSksYnY9ZT0+ZHYudGVzdChlKSx4dj1lPT4hWChlKSYmIVooZSksU3Y9ZT0+ZS5zdGFydHNXaXRoKGBAY29udGFpbmVyYCkmJihlWzEwXT09PWAvYCYmZVsxMV0hPT12b2lkIDB8fGVbMTFdPT09YHNgJiZlWzE2XSE9PXZvaWQgMCYmZS5zdGFydHNXaXRoKGAtc2l6ZS9gLDEwKXx8ZVsxMV09PT1gbmAmJmVbMThdIT09dm9pZCAwJiZlLnN0YXJ0c1dpdGgoYC1ub3JtYWwvYCwxMCkpLEN2PWU9PlJ2KGUsSHYsdnYpLFg9ZT0+aXYudGVzdChlKSx3dj1lPT5SdihlLFV2LF92KSxUdj1lPT5SdihlLFd2LFkpLEV2PWU9PlJ2KGUsS3YsZ3YpLER2PWU9PlJ2KGUsR3YsdnYpLE92PWU9PlJ2KGUsQnYsdnYpLGt2PWU9PlJ2KGUsVnYsYnYpLEF2PWU9PlJ2KGUscXYseXYpLFo9ZT0+YXYudGVzdChlKSxqdj1lPT56dihlLFV2KSxNdj1lPT56dihlLEd2KSxOdj1lPT56dihlLEJ2KSxQdj1lPT56dihlLEh2KSxGdj1lPT56dihlLFZ2KSxJdj1lPT56dihlLHF2LCEwKSxMdj1lPT56dihlLEt2LCEwKSxSdj0oZSx0LG4pPT57bGV0IHI9aXYuZXhlYyhlKTtyZXR1cm4gcj9yWzFdP3QoclsxXSk6bihyWzJdKTohMX0senY9KGUsdCxuPSExKT0+e2xldCByPWF2LmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90KHJbMV0pOm46ITF9LEJ2PWU9PmU9PT1gcG9zaXRpb25gfHxlPT09YHBlcmNlbnRhZ2VgLFZ2PWU9PmU9PT1gaW1hZ2VgfHxlPT09YHVybGAsSHY9ZT0+ZT09PWBsZW5ndGhgfHxlPT09YHNpemVgfHxlPT09YGJnLXNpemVgLFV2PWU9PmU9PT1gbGVuZ3RoYCxXdj1lPT5lPT09YG51bWJlcmAsR3Y9ZT0+ZT09PWBmYW1pbHktbmFtZWAsS3Y9ZT0+ZT09PWBudW1iZXJgfHxlPT09YHdlaWdodGAscXY9ZT0+ZT09PWBzaGFkb3dgLEp2PXR2KCgpPT57bGV0IGU9cnYoYGNvbG9yYCksdD1ydihgZm9udGApLG49cnYoYHRleHRgKSxyPXJ2KGBmb250LXdlaWdodGApLGk9cnYoYHRyYWNraW5nYCksYT1ydihgbGVhZGluZ2ApLG89cnYoYGJyZWFrcG9pbnRgKSxzPXJ2KGBjb250YWluZXJgKSxjPXJ2KGBzcGFjaW5nYCksbD1ydihgcmFkaXVzYCksdT1ydihgc2hhZG93YCksZD1ydihgaW5zZXQtc2hhZG93YCksZj1ydihgdGV4dC1zaGFkb3dgKSxwPXJ2KGBkcm9wLXNoYWRvd2ApLG09cnYoYGJsdXJgKSxoPXJ2KGBwZXJzcGVjdGl2ZWApLGc9cnYoYGFzcGVjdGApLF89cnYoYGVhc2VgKSx2PXJ2KGBhbmltYXRlYCkseT0oKT0+W2BhdXRvYCxgYXZvaWRgLGBhbGxgLGBhdm9pZC1wYWdlYCxgcGFnZWAsYGxlZnRgLGByaWdodGAsYGNvbHVtbmBdLGI9KCk9PltgY2VudGVyYCxgdG9wYCxgYm90dG9tYCxgbGVmdGAsYHJpZ2h0YCxgdG9wLWxlZnRgLGBsZWZ0LXRvcGAsYHRvcC1yaWdodGAsYHJpZ2h0LXRvcGAsYGJvdHRvbS1yaWdodGAsYHJpZ2h0LWJvdHRvbWAsYGJvdHRvbS1sZWZ0YCxgbGVmdC1ib3R0b21gXSx4PSgpPT5bLi4uYigpLFosWF0sUz0oKT0+W2BhdXRvYCxgaGlkZGVuYCxgY2xpcGAsYHZpc2libGVgLGBzY3JvbGxgXSxDPSgpPT5bYGF1dG9gLGBjb250YWluYCxgbm9uZWBdLHc9KCk9PltaLFgsY10sZWU9KCk9PltmdixgZnVsbGAsYGF1dG9gLC4uLncoKV0sdGU9KCk9Pltwdixgbm9uZWAsYHN1YmdyaWRgLFosWF0sVD0oKT0+W2BhdXRvYCx7c3BhbjpbYGZ1bGxgLHB2LFosWF19LHB2LFosWF0sbmU9KCk9PltwdixgYXV0b2AsWixYXSxyZT0oKT0+W2BhdXRvYCxgbWluYCxgbWF4YCxgZnJgLFosWF0saWU9KCk9Pltgc3RhcnRgLGBlbmRgLGBjZW50ZXJgLGBiZXR3ZWVuYCxgYXJvdW5kYCxgZXZlbmx5YCxgc3RyZXRjaGAsYGJhc2VsaW5lYCxgY2VudGVyLXNhZmVgLGBlbmQtc2FmZWBdLEU9KCk9Pltgc3RhcnRgLGBlbmRgLGBjZW50ZXJgLGBzdHJldGNoYCxgY2VudGVyLXNhZmVgLGBlbmQtc2FmZWBdLGFlPSgpPT5bYGF1dG9gLC4uLncoKV0sb2U9KCk9PltmdixgYXV0b2AsYGZ1bGxgLGBkdndgLGBkdmhgLGBsdndgLGBsdmhgLGBzdndgLGBzdmhgLGBtaW5gLGBtYXhgLGBmaXRgLC4uLncoKV0sc2U9KCk9Pltmdixgc2NyZWVuYCxgZnVsbGAsYGR2d2AsYGx2d2AsYHN2d2AsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxjZT0oKT0+W2Z2LGBzY3JlZW5gLGBmdWxsYCxgbGhgLGBkdmhgLGBsdmhgLGBzdmhgLGBtaW5gLGBtYXhgLGBmaXRgLC4uLncoKV0sRD0oKT0+W2UsWixYXSxsZT0oKT0+Wy4uLmIoKSxOdixPdix7cG9zaXRpb246W1osWF19XSx1ZT0oKT0+W2Buby1yZXBlYXRgLHtyZXBlYXQ6W2BgLGB4YCxgeWAsYHNwYWNlYCxgcm91bmRgXX1dLGRlPSgpPT5bYGF1dG9gLGBjb3ZlcmAsYGNvbnRhaW5gLFB2LEN2LHtzaXplOltaLFhdfV0sZmU9KCk9Plttdixqdix3dl0scGU9KCk9PltgYCxgbm9uZWAsYGZ1bGxgLGwsWixYXSxtZT0oKT0+W2BgLFksanYsd3ZdLGhlPSgpPT5bYHNvbGlkYCxgZGFzaGVkYCxgZG90dGVkYCxgZG91YmxlYF0sZ2U9KCk9Pltgbm9ybWFsYCxgbXVsdGlwbHlgLGBzY3JlZW5gLGBvdmVybGF5YCxgZGFya2VuYCxgbGlnaHRlbmAsYGNvbG9yLWRvZGdlYCxgY29sb3ItYnVybmAsYGhhcmQtbGlnaHRgLGBzb2Z0LWxpZ2h0YCxgZGlmZmVyZW5jZWAsYGV4Y2x1c2lvbmAsYGh1ZWAsYHNhdHVyYXRpb25gLGBjb2xvcmAsYGx1bWlub3NpdHlgXSxfZT0oKT0+W1ksbXYsTnYsT3ZdLHZlPSgpPT5bYGAsYG5vbmVgLG0sWixYXSx5ZT0oKT0+W2Bub25lYCxZLFosWF0sYmU9KCk9Pltgbm9uZWAsWSxaLFhdLE89KCk9PltZLFosWF0seGU9KCk9PltmdixgZnVsbGAsLi4udygpXTtyZXR1cm57Y2FjaGVTaXplOjUwMCx0aGVtZTp7YW5pbWF0ZTpbYHNwaW5gLGBwaW5nYCxgcHVsc2VgLGBib3VuY2VgXSxhc3BlY3Q6W2B2aWRlb2BdLGJsdXI6W2h2XSxicmVha3BvaW50Oltodl0sY29sb3I6W2d2XSxjb250YWluZXI6W2h2XSwiZHJvcC1zaGFkb3ciOltodl0sZWFzZTpbYGluYCxgb3V0YCxgaW4tb3V0YF0sZm9udDpbeHZdLCJmb250LXdlaWdodCI6W2B0aGluYCxgZXh0cmFsaWdodGAsYGxpZ2h0YCxgbm9ybWFsYCxgbWVkaXVtYCxgc2VtaWJvbGRgLGBib2xkYCxgZXh0cmFib2xkYCxgYmxhY2tgXSwiaW5zZXQtc2hhZG93IjpbaHZdLGxlYWRpbmc6W2Bub25lYCxgdGlnaHRgLGBzbnVnYCxgbm9ybWFsYCxgcmVsYXhlZGAsYGxvb3NlYF0scGVyc3BlY3RpdmU6W2BkcmFtYXRpY2AsYG5lYXJgLGBub3JtYWxgLGBtaWRyYW5nZWAsYGRpc3RhbnRgLGBub25lYF0scmFkaXVzOltodl0sc2hhZG93Oltodl0sc3BhY2luZzpbYHB4YCxZXSx0ZXh0Oltodl0sInRleHQtc2hhZG93IjpbaHZdLHRyYWNraW5nOltgdGlnaHRlcmAsYHRpZ2h0YCxgbm9ybWFsYCxgd2lkZWAsYHdpZGVyYCxgd2lkZXN0YF19LGNsYXNzR3JvdXBzOnthc3BlY3Q6W3thc3BlY3Q6W2BhdXRvYCxgc3F1YXJlYCxmdixYLFosZ119XSxjb250YWluZXI6W2Bjb250YWluZXJgXSwiY29udGFpbmVyLXR5cGUiOlt7IkBjb250YWluZXIiOltgYCxgbm9ybWFsYCxgc2l6ZWAsWixYXX1dLCJjb250YWluZXItbmFtZWQiOltTdl0sY29sdW1uczpbe2NvbHVtbnM6W1ksWCxaLHNdfV0sImJyZWFrLWFmdGVyIjpbeyJicmVhay1hZnRlciI6eSgpfV0sImJyZWFrLWJlZm9yZSI6W3siYnJlYWstYmVmb3JlIjp5KCl9XSwiYnJlYWstaW5zaWRlIjpbeyJicmVhay1pbnNpZGUiOltgYXV0b2AsYGF2b2lkYCxgYXZvaWQtcGFnZWAsYGF2b2lkLWNvbHVtbmBdfV0sImJveC1kZWNvcmF0aW9uIjpbeyJib3gtZGVjb3JhdGlvbiI6W2BzbGljZWAsYGNsb25lYF19XSxib3g6W3tib3g6W2Bib3JkZXJgLGBjb250ZW50YF19XSxkaXNwbGF5OltgYmxvY2tgLGBpbmxpbmUtYmxvY2tgLGBpbmxpbmVgLGBmbGV4YCxgaW5saW5lLWZsZXhgLGB0YWJsZWAsYGlubGluZS10YWJsZWAsYHRhYmxlLWNhcHRpb25gLGB0YWJsZS1jZWxsYCxgdGFibGUtY29sdW1uYCxgdGFibGUtY29sdW1uLWdyb3VwYCxgdGFibGUtZm9vdGVyLWdyb3VwYCxgdGFibGUtaGVhZGVyLWdyb3VwYCxgdGFibGUtcm93LWdyb3VwYCxgdGFibGUtcm93YCxgZmxvdy1yb290YCxgZ3JpZGAsYGlubGluZS1ncmlkYCxgY29udGVudHNgLGBsaXN0LWl0ZW1gLGBoaWRkZW5gXSxzcjpbYHNyLW9ubHlgLGBub3Qtc3Itb25seWBdLGZsb2F0Olt7ZmxvYXQ6W2ByaWdodGAsYGxlZnRgLGBub25lYCxgc3RhcnRgLGBlbmRgXX1dLGNsZWFyOlt7Y2xlYXI6W2BsZWZ0YCxgcmlnaHRgLGBib3RoYCxgbm9uZWAsYHN0YXJ0YCxgZW5kYF19XSxpc29sYXRpb246W2Bpc29sYXRlYCxgaXNvbGF0aW9uLWF1dG9gXSwib2JqZWN0LWZpdCI6W3tvYmplY3Q6W2Bjb250YWluYCxgY292ZXJgLGBmaWxsYCxgbm9uZWAsYHNjYWxlLWRvd25gXX1dLCJvYmplY3QtcG9zaXRpb24iOlt7b2JqZWN0OngoKX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6UygpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOlMoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjpTKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpDKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOkMoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6QygpfV0scG9zaXRpb246W2BzdGF0aWNgLGBmaXhlZGAsYGFic29sdXRlYCxgcmVsYXRpdmVgLGBzdGlja3lgXSxpbnNldDpbe2luc2V0OmVlKCl9XSwiaW5zZXQteCI6W3siaW5zZXQteCI6ZWUoKX1dLCJpbnNldC15IjpbeyJpbnNldC15IjplZSgpfV0sc3RhcnQ6W3siaW5zZXQtcyI6ZWUoKSxzdGFydDplZSgpfV0sZW5kOlt7Imluc2V0LWUiOmVlKCksZW5kOmVlKCl9XSwiaW5zZXQtYnMiOlt7Imluc2V0LWJzIjplZSgpfV0sImluc2V0LWJlIjpbeyJpbnNldC1iZSI6ZWUoKX1dLHRvcDpbe3RvcDplZSgpfV0scmlnaHQ6W3tyaWdodDplZSgpfV0sYm90dG9tOlt7Ym90dG9tOmVlKCl9XSxsZWZ0Olt7bGVmdDplZSgpfV0sdmlzaWJpbGl0eTpbYHZpc2libGVgLGBpbnZpc2libGVgLGBjb2xsYXBzZWBdLHo6W3t6OltwdixgYXV0b2AsWixYXX1dLGJhc2lzOlt7YmFzaXM6W2Z2LGBmdWxsYCxgYXV0b2AscywuLi53KCldfV0sImZsZXgtZGlyZWN0aW9uIjpbe2ZsZXg6W2Byb3dgLGByb3ctcmV2ZXJzZWAsYGNvbGAsYGNvbC1yZXZlcnNlYF19XSwiZmxleC13cmFwIjpbe2ZsZXg6W2Bub3dyYXBgLGB3cmFwYCxgd3JhcC1yZXZlcnNlYF19XSxmbGV4Olt7ZmxleDpbWSxmdixgYXV0b2AsYGluaXRpYWxgLGBub25lYCxYXX1dLGdyb3c6W3tncm93OltgYCxZLFosWF19XSxzaHJpbms6W3tzaHJpbms6W2BgLFksWixYXX1dLG9yZGVyOlt7b3JkZXI6W3B2LGBmaXJzdGAsYGxhc3RgLGBub25lYCxaLFhdfV0sImdyaWQtY29scyI6W3siZ3JpZC1jb2xzIjp0ZSgpfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOlQoKX1dLCJjb2wtc3RhcnQiOlt7ImNvbC1zdGFydCI6bmUoKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjpuZSgpfV0sImdyaWQtcm93cyI6W3siZ3JpZC1yb3dzIjp0ZSgpfV0sInJvdy1zdGFydC1lbmQiOlt7cm93OlQoKX1dLCJyb3ctc3RhcnQiOlt7InJvdy1zdGFydCI6bmUoKX1dLCJyb3ctZW5kIjpbeyJyb3ctZW5kIjpuZSgpfV0sImdyaWQtZmxvdyI6W3siZ3JpZC1mbG93IjpbYHJvd2AsYGNvbGAsYGRlbnNlYCxgcm93LWRlbnNlYCxgY29sLWRlbnNlYF19XSwiYXV0by1jb2xzIjpbeyJhdXRvLWNvbHMiOnJlKCl9XSwiYXV0by1yb3dzIjpbeyJhdXRvLXJvd3MiOnJlKCl9XSxnYXA6W3tnYXA6dygpfV0sImdhcC14IjpbeyJnYXAteCI6dygpfV0sImdhcC15IjpbeyJnYXAteSI6dygpfV0sImp1c3RpZnktY29udGVudCI6W3tqdXN0aWZ5OlsuLi5pZSgpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbLi4uRSgpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6W2BhdXRvYCwuLi5FKCldfV0sImFsaWduLWNvbnRlbnQiOlt7Y29udGVudDpbYG5vcm1hbGAsLi4uaWUoKV19XSwiYWxpZ24taXRlbXMiOlt7aXRlbXM6Wy4uLkUoKSx7YmFzZWxpbmU6W2BgLGBsYXN0YF19XX1dLCJhbGlnbi1zZWxmIjpbe3NlbGY6W2BhdXRvYCwuLi5FKCkse2Jhc2VsaW5lOltgYCxgbGFzdGBdfV19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6aWUoKX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsuLi5FKCksYGJhc2VsaW5lYF19XSwicGxhY2Utc2VsZiI6W3sicGxhY2Utc2VsZiI6W2BhdXRvYCwuLi5FKCldfV0scDpbe3A6dygpfV0scHg6W3tweDp3KCl9XSxweTpbe3B5OncoKX1dLHBzOlt7cHM6dygpfV0scGU6W3twZTp3KCl9XSxwYnM6W3twYnM6dygpfV0scGJlOlt7cGJlOncoKX1dLHB0Olt7cHQ6dygpfV0scHI6W3twcjp3KCl9XSxwYjpbe3BiOncoKX1dLHBsOlt7cGw6dygpfV0sbTpbe206YWUoKX1dLG14Olt7bXg6YWUoKX1dLG15Olt7bXk6YWUoKX1dLG1zOlt7bXM6YWUoKX1dLG1lOlt7bWU6YWUoKX1dLG1iczpbe21iczphZSgpfV0sbWJlOlt7bWJlOmFlKCl9XSxtdDpbe210OmFlKCl9XSxtcjpbe21yOmFlKCl9XSxtYjpbe21iOmFlKCl9XSxtbDpbe21sOmFlKCl9XSwic3BhY2UteCI6W3sic3BhY2UteCI6dygpfV0sInNwYWNlLXgtcmV2ZXJzZSI6W2BzcGFjZS14LXJldmVyc2VgXSwic3BhY2UteSI6W3sic3BhY2UteSI6dygpfV0sInNwYWNlLXktcmV2ZXJzZSI6W2BzcGFjZS15LXJldmVyc2VgXSxzaXplOlt7c2l6ZTpvZSgpfV0sImlubGluZS1zaXplIjpbe2lubGluZTpbYGF1dG9gLC4uLnNlKCldfV0sIm1pbi1pbmxpbmUtc2l6ZSI6W3sibWluLWlubGluZSI6W2BhdXRvYCwuLi5zZSgpXX1dLCJtYXgtaW5saW5lLXNpemUiOlt7Im1heC1pbmxpbmUiOltgbm9uZWAsLi4uc2UoKV19XSwiYmxvY2stc2l6ZSI6W3tibG9jazpbYGF1dG9gLC4uLmNlKCldfV0sIm1pbi1ibG9jay1zaXplIjpbeyJtaW4tYmxvY2siOltgYXV0b2AsLi4uY2UoKV19XSwibWF4LWJsb2NrLXNpemUiOlt7Im1heC1ibG9jayI6W2Bub25lYCwuLi5jZSgpXX1dLHc6W3t3OltzLGBzY3JlZW5gLC4uLm9lKCldfV0sIm1pbi13IjpbeyJtaW4tdyI6W3MsYHNjcmVlbmAsYG5vbmVgLC4uLm9lKCldfV0sIm1heC13IjpbeyJtYXgtdyI6W3MsYHNjcmVlbmAsYG5vbmVgLGBwcm9zZWAse3NjcmVlbjpbb119LC4uLm9lKCldfV0saDpbe2g6W2BzY3JlZW5gLGBsaGAsLi4ub2UoKV19XSwibWluLWgiOlt7Im1pbi1oIjpbYHNjcmVlbmAsYGxoYCxgbm9uZWAsLi4ub2UoKV19XSwibWF4LWgiOlt7Im1heC1oIjpbYHNjcmVlbmAsYGxoYCwuLi5vZSgpXX1dLCJmb250LXNpemUiOlt7dGV4dDpbYGJhc2VgLG4sanYsd3ZdfV0sImZvbnQtc21vb3RoaW5nIjpbYGFudGlhbGlhc2VkYCxgc3VicGl4ZWwtYW50aWFsaWFzZWRgXSwiZm9udC1zdHlsZSI6W2BpdGFsaWNgLGBub3QtaXRhbGljYF0sImZvbnQtd2VpZ2h0Ijpbe2ZvbnQ6W3IsTHYsRXZdfV0sImZvbnQtc3RyZXRjaCI6W3siZm9udC1zdHJldGNoIjpbYHVsdHJhLWNvbmRlbnNlZGAsYGV4dHJhLWNvbmRlbnNlZGAsYGNvbmRlbnNlZGAsYHNlbWktY29uZGVuc2VkYCxgbm9ybWFsYCxgc2VtaS1leHBhbmRlZGAsYGV4cGFuZGVkYCxgZXh0cmEtZXhwYW5kZWRgLGB1bHRyYS1leHBhbmRlZGAsbXYsWF19XSwiZm9udC1mYW1pbHkiOlt7Zm9udDpbTXYsRHYsdF19XSwiZm9udC1mZWF0dXJlcyI6W3siZm9udC1mZWF0dXJlcyI6W1hdfV0sImZ2bi1ub3JtYWwiOltgbm9ybWFsLW51bXNgXSwiZnZuLW9yZGluYWwiOltgb3JkaW5hbGBdLCJmdm4tc2xhc2hlZC16ZXJvIjpbYHNsYXNoZWQtemVyb2BdLCJmdm4tZmlndXJlIjpbYGxpbmluZy1udW1zYCxgb2xkc3R5bGUtbnVtc2BdLCJmdm4tc3BhY2luZyI6W2Bwcm9wb3J0aW9uYWwtbnVtc2AsYHRhYnVsYXItbnVtc2BdLCJmdm4tZnJhY3Rpb24iOltgZGlhZ29uYWwtZnJhY3Rpb25zYCxgc3RhY2tlZC1mcmFjdGlvbnNgXSx0cmFja2luZzpbe3RyYWNraW5nOltpLFosWF19XSwibGluZS1jbGFtcCI6W3sibGluZS1jbGFtcCI6W1ksYG5vbmVgLFosVHZdfV0sbGVhZGluZzpbe2xlYWRpbmc6W2EsLi4udygpXX1dLCJsaXN0LWltYWdlIjpbeyJsaXN0LWltYWdlIjpbYG5vbmVgLFosWF19XSwibGlzdC1zdHlsZS1wb3NpdGlvbiI6W3tsaXN0OltgaW5zaWRlYCxgb3V0c2lkZWBdfV0sImxpc3Qtc3R5bGUtdHlwZSI6W3tsaXN0OltgZGlzY2AsYGRlY2ltYWxgLGBub25lYCxaLFhdfV0sInRleHQtYWxpZ25tZW50Ijpbe3RleHQ6W2BsZWZ0YCxgY2VudGVyYCxgcmlnaHRgLGBqdXN0aWZ5YCxgc3RhcnRgLGBlbmRgXX1dLCJwbGFjZWhvbGRlci1jb2xvciI6W3twbGFjZWhvbGRlcjpEKCl9XSwidGV4dC1jb2xvciI6W3t0ZXh0OkQoKX1dLCJ0ZXh0LWRlY29yYXRpb24iOltgdW5kZXJsaW5lYCxgb3ZlcmxpbmVgLGBsaW5lLXRocm91Z2hgLGBuby11bmRlcmxpbmVgXSwidGV4dC1kZWNvcmF0aW9uLXN0eWxlIjpbe2RlY29yYXRpb246Wy4uLmhlKCksYHdhdnlgXX1dLCJ0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzIjpbe2RlY29yYXRpb246W1ksYGZyb20tZm9udGAsYGF1dG9gLFosd3ZdfV0sInRleHQtZGVjb3JhdGlvbi1jb2xvciI6W3tkZWNvcmF0aW9uOkQoKX1dLCJ1bmRlcmxpbmUtb2Zmc2V0IjpbeyJ1bmRlcmxpbmUtb2Zmc2V0IjpbWSxgYXV0b2AsWixYXX1dLCJ0ZXh0LXRyYW5zZm9ybSI6W2B1cHBlcmNhc2VgLGBsb3dlcmNhc2VgLGBjYXBpdGFsaXplYCxgbm9ybWFsLWNhc2VgXSwidGV4dC1vdmVyZmxvdyI6W2B0cnVuY2F0ZWAsYHRleHQtZWxsaXBzaXNgLGB0ZXh0LWNsaXBgXSwidGV4dC13cmFwIjpbe3RleHQ6W2B3cmFwYCxgbm93cmFwYCxgYmFsYW5jZWAsYHByZXR0eWBdfV0saW5kZW50Olt7aW5kZW50OncoKX1dLCJ0YWItc2l6ZSI6W3t0YWI6W3B2LFosWF19XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246W2BiYXNlbGluZWAsYHRvcGAsYG1pZGRsZWAsYGJvdHRvbWAsYHRleHQtdG9wYCxgdGV4dC1ib3R0b21gLGBzdWJgLGBzdXBlcmAsWixYXX1dLHdoaXRlc3BhY2U6W3t3aGl0ZXNwYWNlOltgbm9ybWFsYCxgbm93cmFwYCxgcHJlYCxgcHJlLWxpbmVgLGBwcmUtd3JhcGAsYGJyZWFrLXNwYWNlc2BdfV0sYnJlYWs6W3ticmVhazpbYG5vcm1hbGAsYHdvcmRzYCxgYWxsYCxga2VlcGBdfV0sd3JhcDpbe3dyYXA6W2BicmVhay13b3JkYCxgYW55d2hlcmVgLGBub3JtYWxgXX1dLGh5cGhlbnM6W3toeXBoZW5zOltgbm9uZWAsYG1hbnVhbGAsYGF1dG9gXX1dLGNvbnRlbnQ6W3tjb250ZW50Oltgbm9uZWAsWixYXX1dLCJiZy1hdHRhY2htZW50Ijpbe2JnOltgZml4ZWRgLGBsb2NhbGAsYHNjcm9sbGBdfV0sImJnLWNsaXAiOlt7ImJnLWNsaXAiOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGB0ZXh0YF19XSwiYmctb3JpZ2luIjpbeyJiZy1vcmlnaW4iOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgXX1dLCJiZy1wb3NpdGlvbiI6W3tiZzpsZSgpfV0sImJnLXJlcGVhdCI6W3tiZzp1ZSgpfV0sImJnLXNpemUiOlt7Ymc6ZGUoKX1dLCJiZy1pbWFnZSI6W3tiZzpbYG5vbmVgLHtsaW5lYXI6W3t0bzpbYHRgLGB0cmAsYHJgLGBicmAsYGJgLGBibGAsYGxgLGB0bGBdfSxwdixaLFhdLHJhZGlhbDpbYGAsWixYXSxjb25pYzpbcHYsWixYXX0sRnYsa3ZdfV0sImJnLWNvbG9yIjpbe2JnOkQoKX1dLCJncmFkaWVudC1mcm9tLXBvcyI6W3tmcm9tOmZlKCl9XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6ZmUoKX1dLCJncmFkaWVudC10by1wb3MiOlt7dG86ZmUoKX1dLCJncmFkaWVudC1mcm9tIjpbe2Zyb206RCgpfV0sImdyYWRpZW50LXZpYSI6W3t2aWE6RCgpfV0sImdyYWRpZW50LXRvIjpbe3RvOkQoKX1dLHJvdW5kZWQ6W3tyb3VuZGVkOnBlKCl9XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOnBlKCl9XSwicm91bmRlZC1lIjpbeyJyb3VuZGVkLWUiOnBlKCl9XSwicm91bmRlZC10IjpbeyJyb3VuZGVkLXQiOnBlKCl9XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOnBlKCl9XSwicm91bmRlZC1iIjpbeyJyb3VuZGVkLWIiOnBlKCl9XSwicm91bmRlZC1sIjpbeyJyb3VuZGVkLWwiOnBlKCl9XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6cGUoKX1dLCJyb3VuZGVkLXNlIjpbeyJyb3VuZGVkLXNlIjpwZSgpfV0sInJvdW5kZWQtZWUiOlt7InJvdW5kZWQtZWUiOnBlKCl9XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6cGUoKX1dLCJyb3VuZGVkLXRsIjpbeyJyb3VuZGVkLXRsIjpwZSgpfV0sInJvdW5kZWQtdHIiOlt7InJvdW5kZWQtdHIiOnBlKCl9XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6cGUoKX1dLCJyb3VuZGVkLWJsIjpbeyJyb3VuZGVkLWJsIjpwZSgpfV0sImJvcmRlci13Ijpbe2JvcmRlcjptZSgpfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjptZSgpfV0sImJvcmRlci13LXkiOlt7ImJvcmRlci15IjptZSgpfV0sImJvcmRlci13LXMiOlt7ImJvcmRlci1zIjptZSgpfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjptZSgpfV0sImJvcmRlci13LWJzIjpbeyJib3JkZXItYnMiOm1lKCl9XSwiYm9yZGVyLXctYmUiOlt7ImJvcmRlci1iZSI6bWUoKX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6bWUoKX1dLCJib3JkZXItdy1yIjpbeyJib3JkZXItciI6bWUoKX1dLCJib3JkZXItdy1iIjpbeyJib3JkZXItYiI6bWUoKX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6bWUoKX1dLCJkaXZpZGUteCI6W3siZGl2aWRlLXgiOm1lKCl9XSwiZGl2aWRlLXgtcmV2ZXJzZSI6W2BkaXZpZGUteC1yZXZlcnNlYF0sImRpdmlkZS15IjpbeyJkaXZpZGUteSI6bWUoKX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbYGRpdmlkZS15LXJldmVyc2VgXSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uaGUoKSxgaGlkZGVuYCxgbm9uZWBdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6Wy4uLmhlKCksYGhpZGRlbmAsYG5vbmVgXX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOkQoKX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOkQoKX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOkQoKX1dLCJib3JkZXItY29sb3ItcyI6W3siYm9yZGVyLXMiOkQoKX1dLCJib3JkZXItY29sb3ItZSI6W3siYm9yZGVyLWUiOkQoKX1dLCJib3JkZXItY29sb3ItYnMiOlt7ImJvcmRlci1icyI6RCgpfV0sImJvcmRlci1jb2xvci1iZSI6W3siYm9yZGVyLWJlIjpEKCl9XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpEKCl9XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpEKCl9XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpEKCl9XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsuLi5oZSgpLGBub25lYCxgaGlkZGVuYF19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbWSxaLFhdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltgYCxZLGp2LHd2XX1dLCJvdXRsaW5lLWNvbG9yIjpbe291dGxpbmU6RCgpfV0sc2hhZG93Olt7c2hhZG93OltgYCxgbm9uZWAsdSxJdixBdl19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpEKCl9XSwiaW5zZXQtc2hhZG93IjpbeyJpbnNldC1zaGFkb3ciOltgbm9uZWAsZCxJdixBdl19XSwiaW5zZXQtc2hhZG93LWNvbG9yIjpbeyJpbnNldC1zaGFkb3ciOkQoKX1dLCJyaW5nLXciOlt7cmluZzptZSgpfV0sInJpbmctdy1pbnNldCI6W2ByaW5nLWluc2V0YF0sInJpbmctY29sb3IiOlt7cmluZzpEKCl9XSwicmluZy1vZmZzZXQtdyI6W3sicmluZy1vZmZzZXQiOltZLHd2XX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOkQoKX1dLCJpbnNldC1yaW5nLXciOlt7Imluc2V0LXJpbmciOm1lKCl9XSwiaW5zZXQtcmluZy1jb2xvciI6W3siaW5zZXQtcmluZyI6RCgpfV0sInRleHQtc2hhZG93IjpbeyJ0ZXh0LXNoYWRvdyI6W2Bub25lYCxmLEl2LEF2XX1dLCJ0ZXh0LXNoYWRvdy1jb2xvciI6W3sidGV4dC1zaGFkb3ciOkQoKX1dLG9wYWNpdHk6W3tvcGFjaXR5OltZLFosWF19XSwibWl4LWJsZW5kIjpbeyJtaXgtYmxlbmQiOlsuLi5nZSgpLGBwbHVzLWRhcmtlcmAsYHBsdXMtbGlnaHRlcmBdfV0sImJnLWJsZW5kIjpbeyJiZy1ibGVuZCI6Z2UoKX1dLCJtYXNrLWNsaXAiOlt7Im1hc2stY2xpcCI6W2Bib3JkZXJgLGBwYWRkaW5nYCxgY29udGVudGAsYGZpbGxgLGBzdHJva2VgLGB2aWV3YF19LGBtYXNrLW5vLWNsaXBgXSwibWFzay1jb21wb3NpdGUiOlt7bWFzazpbYGFkZGAsYHN1YnRyYWN0YCxgaW50ZXJzZWN0YCxgZXhjbHVkZWBdfV0sIm1hc2staW1hZ2UtbGluZWFyLXBvcyI6W3sibWFzay1saW5lYXIiOltZXX1dLCJtYXNrLWltYWdlLWxpbmVhci1mcm9tLXBvcyI6W3sibWFzay1saW5lYXItZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1wb3MiOlt7Im1hc2stbGluZWFyLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtbGluZWFyLWZyb20tY29sb3IiOlt7Im1hc2stbGluZWFyLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1jb2xvciI6W3sibWFzay1saW5lYXItdG8iOkQoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1wb3MiOlt7Im1hc2stdC1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtdC10by1wb3MiOlt7Im1hc2stdC10byI6X2UoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1jb2xvciI6W3sibWFzay10LWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXQtdG8tY29sb3IiOlt7Im1hc2stdC10byI6RCgpfV0sIm1hc2staW1hZ2Utci1mcm9tLXBvcyI6W3sibWFzay1yLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1yLXRvLXBvcyI6W3sibWFzay1yLXRvIjpfZSgpfV0sIm1hc2staW1hZ2Utci1mcm9tLWNvbG9yIjpbeyJtYXNrLXItZnJvbSI6RCgpfV0sIm1hc2staW1hZ2Utci10by1jb2xvciI6W3sibWFzay1yLXRvIjpEKCl9XSwibWFzay1pbWFnZS1iLWZyb20tcG9zIjpbeyJtYXNrLWItZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLWItdG8tcG9zIjpbeyJtYXNrLWItdG8iOl9lKCl9XSwibWFzay1pbWFnZS1iLWZyb20tY29sb3IiOlt7Im1hc2stYi1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1iLXRvLWNvbG9yIjpbeyJtYXNrLWItdG8iOkQoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1wb3MiOlt7Im1hc2stbC1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtbC10by1wb3MiOlt7Im1hc2stbC10byI6X2UoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1jb2xvciI6W3sibWFzay1sLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLWwtdG8tY29sb3IiOlt7Im1hc2stbC10byI6RCgpfV0sIm1hc2staW1hZ2UteC1mcm9tLXBvcyI6W3sibWFzay14LWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS14LXRvLXBvcyI6W3sibWFzay14LXRvIjpfZSgpfV0sIm1hc2staW1hZ2UteC1mcm9tLWNvbG9yIjpbeyJtYXNrLXgtZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UteC10by1jb2xvciI6W3sibWFzay14LXRvIjpEKCl9XSwibWFzay1pbWFnZS15LWZyb20tcG9zIjpbeyJtYXNrLXktZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXktdG8tcG9zIjpbeyJtYXNrLXktdG8iOl9lKCl9XSwibWFzay1pbWFnZS15LWZyb20tY29sb3IiOlt7Im1hc2steS1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS15LXRvLWNvbG9yIjpbeyJtYXNrLXktdG8iOkQoKX1dLCJtYXNrLWltYWdlLXJhZGlhbCI6W3sibWFzay1yYWRpYWwiOltaLFhdfV0sIm1hc2staW1hZ2UtcmFkaWFsLWZyb20tcG9zIjpbeyJtYXNrLXJhZGlhbC1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXRvLXBvcyI6W3sibWFzay1yYWRpYWwtdG8iOl9lKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1jb2xvciI6W3sibWFzay1yYWRpYWwtZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXRvLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC10byI6RCgpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXNoYXBlIjpbeyJtYXNrLXJhZGlhbCI6W2BjaXJjbGVgLGBlbGxpcHNlYF19XSwibWFzay1pbWFnZS1yYWRpYWwtc2l6ZSI6W3sibWFzay1yYWRpYWwiOlt7Y2xvc2VzdDpbYHNpZGVgLGBjb3JuZXJgXSxmYXJ0aGVzdDpbYHNpZGVgLGBjb3JuZXJgXX1dfV0sIm1hc2staW1hZ2UtcmFkaWFsLXBvcyI6W3sibWFzay1yYWRpYWwtYXQiOmIoKX1dLCJtYXNrLWltYWdlLWNvbmljLXBvcyI6W3sibWFzay1jb25pYyI6W1ldfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1wb3MiOlt7Im1hc2stY29uaWMtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLXBvcyI6W3sibWFzay1jb25pYy10byI6X2UoKX1dLCJtYXNrLWltYWdlLWNvbmljLWZyb20tY29sb3IiOlt7Im1hc2stY29uaWMtZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tY29sb3IiOlt7Im1hc2stY29uaWMtdG8iOkQoKX1dLCJtYXNrLW1vZGUiOlt7bWFzazpbYGFscGhhYCxgbHVtaW5hbmNlYCxgbWF0Y2hgXX1dLCJtYXNrLW9yaWdpbiI6W3sibWFzay1vcmlnaW4iOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGBmaWxsYCxgc3Ryb2tlYCxgdmlld2BdfV0sIm1hc2stcG9zaXRpb24iOlt7bWFzazpsZSgpfV0sIm1hc2stcmVwZWF0Ijpbe21hc2s6dWUoKX1dLCJtYXNrLXNpemUiOlt7bWFzazpkZSgpfV0sIm1hc2stdHlwZSI6W3sibWFzay10eXBlIjpbYGFscGhhYCxgbHVtaW5hbmNlYF19XSwibWFzay1pbWFnZSI6W3ttYXNrOltgbm9uZWAsWixYXX1dLGZpbHRlcjpbe2ZpbHRlcjpbYGAsYG5vbmVgLFosWF19XSxibHVyOlt7Ymx1cjp2ZSgpfV0sYnJpZ2h0bmVzczpbe2JyaWdodG5lc3M6W1ksWixYXX1dLGNvbnRyYXN0Olt7Y29udHJhc3Q6W1ksWixYXX1dLCJkcm9wLXNoYWRvdyI6W3siZHJvcC1zaGFkb3ciOltgYCxgbm9uZWAscCxJdixBdl19XSwiZHJvcC1zaGFkb3ctY29sb3IiOlt7ImRyb3Atc2hhZG93IjpEKCl9XSxncmF5c2NhbGU6W3tncmF5c2NhbGU6W2BgLFksWixYXX1dLCJodWUtcm90YXRlIjpbeyJodWUtcm90YXRlIjpbWSxaLFhdfV0saW52ZXJ0Olt7aW52ZXJ0OltgYCxZLFosWF19XSxzYXR1cmF0ZTpbe3NhdHVyYXRlOltZLFosWF19XSxzZXBpYTpbe3NlcGlhOltgYCxZLFosWF19XSwiYmFja2Ryb3AtZmlsdGVyIjpbeyJiYWNrZHJvcC1maWx0ZXIiOltgYCxgbm9uZWAsWixYXX1dLCJiYWNrZHJvcC1ibHVyIjpbeyJiYWNrZHJvcC1ibHVyIjp2ZSgpfV0sImJhY2tkcm9wLWJyaWdodG5lc3MiOlt7ImJhY2tkcm9wLWJyaWdodG5lc3MiOltZLFosWF19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbWSxaLFhdfV0sImJhY2tkcm9wLWdyYXlzY2FsZSI6W3siYmFja2Ryb3AtZ3JheXNjYWxlIjpbYGAsWSxaLFhdfV0sImJhY2tkcm9wLWh1ZS1yb3RhdGUiOlt7ImJhY2tkcm9wLWh1ZS1yb3RhdGUiOltZLFosWF19XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOltgYCxZLFosWF19XSwiYmFja2Ryb3Atb3BhY2l0eSI6W3siYmFja2Ryb3Atb3BhY2l0eSI6W1ksWixYXX1dLCJiYWNrZHJvcC1zYXR1cmF0ZSI6W3siYmFja2Ryb3Atc2F0dXJhdGUiOltZLFosWF19XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpbYGAsWSxaLFhdfV0sImJvcmRlci1jb2xsYXBzZSI6W3tib3JkZXI6W2Bjb2xsYXBzZWAsYHNlcGFyYXRlYF19XSwiYm9yZGVyLXNwYWNpbmciOlt7ImJvcmRlci1zcGFjaW5nIjp3KCl9XSwiYm9yZGVyLXNwYWNpbmcteCI6W3siYm9yZGVyLXNwYWNpbmcteCI6dygpfV0sImJvcmRlci1zcGFjaW5nLXkiOlt7ImJvcmRlci1zcGFjaW5nLXkiOncoKX1dLCJ0YWJsZS1sYXlvdXQiOlt7dGFibGU6W2BhdXRvYCxgZml4ZWRgXX1dLGNhcHRpb246W3tjYXB0aW9uOltgdG9wYCxgYm90dG9tYF19XSx0cmFuc2l0aW9uOlt7dHJhbnNpdGlvbjpbYGAsYGFsbGAsYGNvbG9yc2AsYG9wYWNpdHlgLGBzaGFkb3dgLGB0cmFuc2Zvcm1gLGBub25lYCxaLFhdfV0sInRyYW5zaXRpb24tYmVoYXZpb3IiOlt7dHJhbnNpdGlvbjpbYG5vcm1hbGAsYGRpc2NyZXRlYF19XSxkdXJhdGlvbjpbe2R1cmF0aW9uOltZLGBpbml0aWFsYCxaLFhdfV0sZWFzZTpbe2Vhc2U6W2BsaW5lYXJgLGBpbml0aWFsYCxfLFosWF19XSxkZWxheTpbe2RlbGF5OltZLFosWF19XSxhbmltYXRlOlt7YW5pbWF0ZTpbYG5vbmVgLHYsWixYXX1dLGJhY2tmYWNlOlt7YmFja2ZhY2U6W2BoaWRkZW5gLGB2aXNpYmxlYF19XSxwZXJzcGVjdGl2ZTpbe3BlcnNwZWN0aXZlOltoLFosWF19XSwicGVyc3BlY3RpdmUtb3JpZ2luIjpbeyJwZXJzcGVjdGl2ZS1vcmlnaW4iOngoKX1dLHJvdGF0ZTpbe3JvdGF0ZTp5ZSgpfV0sInJvdGF0ZS14IjpbeyJyb3RhdGUteCI6eWUoKX1dLCJyb3RhdGUteSI6W3sicm90YXRlLXkiOnllKCl9XSwicm90YXRlLXoiOlt7InJvdGF0ZS16Ijp5ZSgpfV0sc2NhbGU6W3tzY2FsZTpiZSgpfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOmJlKCl9XSwic2NhbGUteSI6W3sic2NhbGUteSI6YmUoKX1dLCJzY2FsZS16IjpbeyJzY2FsZS16IjpiZSgpfV0sInNjYWxlLTNkIjpbYHNjYWxlLTNkYF0sc2tldzpbe3NrZXc6TygpfV0sInNrZXcteCI6W3sic2tldy14IjpPKCl9XSwic2tldy15IjpbeyJza2V3LXkiOk8oKX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbWixYLGBgLGBub25lYCxgZ3B1YCxgY3B1YF19XSwidHJhbnNmb3JtLW9yaWdpbiI6W3tvcmlnaW46eCgpfV0sInRyYW5zZm9ybS1zdHlsZSI6W3t0cmFuc2Zvcm06W2AzZGAsYGZsYXRgXX1dLHRyYW5zbGF0ZTpbe3RyYW5zbGF0ZTp4ZSgpfV0sInRyYW5zbGF0ZS14IjpbeyJ0cmFuc2xhdGUteCI6eGUoKX1dLCJ0cmFuc2xhdGUteSI6W3sidHJhbnNsYXRlLXkiOnhlKCl9XSwidHJhbnNsYXRlLXoiOlt7InRyYW5zbGF0ZS16Ijp4ZSgpfV0sInRyYW5zbGF0ZS1ub25lIjpbYHRyYW5zbGF0ZS1ub25lYF0sem9vbTpbe3pvb206W3B2LFosWF19XSxhY2NlbnQ6W3thY2NlbnQ6RCgpfV0sYXBwZWFyYW5jZTpbe2FwcGVhcmFuY2U6W2Bub25lYCxgYXV0b2BdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0OkQoKX1dLCJjb2xvci1zY2hlbWUiOlt7c2NoZW1lOltgbm9ybWFsYCxgZGFya2AsYGxpZ2h0YCxgbGlnaHQtZGFya2AsYG9ubHktZGFya2AsYG9ubHktbGlnaHRgXX1dLGN1cnNvcjpbe2N1cnNvcjpbYGF1dG9gLGBkZWZhdWx0YCxgcG9pbnRlcmAsYHdhaXRgLGB0ZXh0YCxgbW92ZWAsYGhlbHBgLGBub3QtYWxsb3dlZGAsYG5vbmVgLGBjb250ZXh0LW1lbnVgLGBwcm9ncmVzc2AsYGNlbGxgLGBjcm9zc2hhaXJgLGB2ZXJ0aWNhbC10ZXh0YCxgYWxpYXNgLGBjb3B5YCxgbm8tZHJvcGAsYGdyYWJgLGBncmFiYmluZ2AsYGFsbC1zY3JvbGxgLGBjb2wtcmVzaXplYCxgcm93LXJlc2l6ZWAsYG4tcmVzaXplYCxgZS1yZXNpemVgLGBzLXJlc2l6ZWAsYHctcmVzaXplYCxgbmUtcmVzaXplYCxgbnctcmVzaXplYCxgc2UtcmVzaXplYCxgc3ctcmVzaXplYCxgZXctcmVzaXplYCxgbnMtcmVzaXplYCxgbmVzdy1yZXNpemVgLGBud3NlLXJlc2l6ZWAsYHpvb20taW5gLGB6b29tLW91dGAsWixYXX1dLCJmaWVsZC1zaXppbmciOlt7ImZpZWxkLXNpemluZyI6W2BmaXhlZGAsYGNvbnRlbnRgXX1dLCJwb2ludGVyLWV2ZW50cyI6W3sicG9pbnRlci1ldmVudHMiOltgYXV0b2AsYG5vbmVgXX1dLHJlc2l6ZTpbe3Jlc2l6ZTpbYG5vbmVgLGBgLGB5YCxgeGBdfV0sInNjcm9sbC1iZWhhdmlvciI6W3tzY3JvbGw6W2BhdXRvYCxgc21vb3RoYF19XSwic2Nyb2xsYmFyLXRodW1iLWNvbG9yIjpbeyJzY3JvbGxiYXItdGh1bWIiOkQoKX1dLCJzY3JvbGxiYXItdHJhY2stY29sb3IiOlt7InNjcm9sbGJhci10cmFjayI6RCgpfV0sInNjcm9sbGJhci1ndXR0ZXIiOlt7InNjcm9sbGJhci1ndXR0ZXIiOltgYXV0b2AsYHN0YWJsZWAsYGJvdGhgXX1dLCJzY3JvbGxiYXItdyI6W3tzY3JvbGxiYXI6W2BhdXRvYCxgdGhpbmAsYG5vbmVgXX1dLCJzY3JvbGwtbSI6W3sic2Nyb2xsLW0iOncoKX1dLCJzY3JvbGwtbXgiOlt7InNjcm9sbC1teCI6dygpfV0sInNjcm9sbC1teSI6W3sic2Nyb2xsLW15Ijp3KCl9XSwic2Nyb2xsLW1zIjpbeyJzY3JvbGwtbXMiOncoKX1dLCJzY3JvbGwtbWUiOlt7InNjcm9sbC1tZSI6dygpfV0sInNjcm9sbC1tYnMiOlt7InNjcm9sbC1tYnMiOncoKX1dLCJzY3JvbGwtbWJlIjpbeyJzY3JvbGwtbWJlIjp3KCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOncoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6dygpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjp3KCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOncoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOncoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6dygpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5Ijp3KCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOncoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6dygpfV0sInNjcm9sbC1wYnMiOlt7InNjcm9sbC1wYnMiOncoKX1dLCJzY3JvbGwtcGJlIjpbeyJzY3JvbGwtcGJlIjp3KCl9XSwic2Nyb2xsLXB0IjpbeyJzY3JvbGwtcHQiOncoKX1dLCJzY3JvbGwtcHIiOlt7InNjcm9sbC1wciI6dygpfV0sInNjcm9sbC1wYiI6W3sic2Nyb2xsLXBiIjp3KCl9XSwic2Nyb2xsLXBsIjpbeyJzY3JvbGwtcGwiOncoKX1dLCJzbmFwLWFsaWduIjpbe3NuYXA6W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGFsaWduLW5vbmVgXX1dLCJzbmFwLXN0b3AiOlt7c25hcDpbYG5vcm1hbGAsYGFsd2F5c2BdfV0sInNuYXAtdHlwZSI6W3tzbmFwOltgbm9uZWAsYHhgLGB5YCxgYm90aGBdfV0sInNuYXAtc3RyaWN0bmVzcyI6W3tzbmFwOltgbWFuZGF0b3J5YCxgcHJveGltaXR5YF19XSx0b3VjaDpbe3RvdWNoOltgYXV0b2AsYG5vbmVgLGBtYW5pcHVsYXRpb25gXX1dLCJ0b3VjaC14IjpbeyJ0b3VjaC1wYW4iOltgeGAsYGxlZnRgLGByaWdodGBdfV0sInRvdWNoLXkiOlt7InRvdWNoLXBhbiI6W2B5YCxgdXBgLGBkb3duYF19XSwidG91Y2gtcHoiOltgdG91Y2gtcGluY2gtem9vbWBdLHNlbGVjdDpbe3NlbGVjdDpbYG5vbmVgLGB0ZXh0YCxgYWxsYCxgYXV0b2BdfV0sIndpbGwtY2hhbmdlIjpbeyJ3aWxsLWNoYW5nZSI6W2BhdXRvYCxgc2Nyb2xsYCxgY29udGVudHNgLGB0cmFuc2Zvcm1gLFosWF19XSxmaWxsOlt7ZmlsbDpbYG5vbmVgLC4uLkQoKV19XSwic3Ryb2tlLXciOlt7c3Ryb2tlOltZLGp2LHd2LFR2XX1dLHN0cm9rZTpbe3N0cm9rZTpbYG5vbmVgLC4uLkQoKV19XSwiZm9yY2VkLWNvbG9yLWFkanVzdCI6W3siZm9yY2VkLWNvbG9yLWFkanVzdCI6W2BhdXRvYCxgbm9uZWBdfV19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cHM6eyJjb250YWluZXItbmFtZWQiOltgY29udGFpbmVyLXR5cGVgXSxvdmVyZmxvdzpbYG92ZXJmbG93LXhgLGBvdmVyZmxvdy15YF0sb3ZlcnNjcm9sbDpbYG92ZXJzY3JvbGwteGAsYG92ZXJzY3JvbGwteWBdLGluc2V0OltgaW5zZXQteGAsYGluc2V0LXlgLGBpbnNldC1ic2AsYGluc2V0LWJlYCxgc3RhcnRgLGBlbmRgLGB0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXSwiaW5zZXQteCI6W2ByaWdodGAsYGxlZnRgXSwiaW5zZXQteSI6W2B0b3BgLGBib3R0b21gXSxmbGV4OltgYmFzaXNgLGBncm93YCxgc2hyaW5rYF0sZ2FwOltgZ2FwLXhgLGBnYXAteWBdLHA6W2BweGAsYHB5YCxgcHNgLGBwZWAsYHBic2AsYHBiZWAsYHB0YCxgcHJgLGBwYmAsYHBsYF0scHg6W2BwcmAsYHBsYF0scHk6W2BwdGAsYHBiYF0sbTpbYG14YCxgbXlgLGBtc2AsYG1lYCxgbWJzYCxgbWJlYCxgbXRgLGBtcmAsYG1iYCxgbWxgXSxteDpbYG1yYCxgbWxgXSxteTpbYG10YCxgbWJgXSxzaXplOltgd2AsYGhgXSwiZm9udC1zaXplIjpbYGxlYWRpbmdgXSwiZnZuLW5vcm1hbCI6W2Bmdm4tb3JkaW5hbGAsYGZ2bi1zbGFzaGVkLXplcm9gLGBmdm4tZmlndXJlYCxgZnZuLXNwYWNpbmdgLGBmdm4tZnJhY3Rpb25gXSwiZnZuLW9yZGluYWwiOltgZnZuLW5vcm1hbGBdLCJmdm4tc2xhc2hlZC16ZXJvIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZpZ3VyZSI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1zcGFjaW5nIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZyYWN0aW9uIjpbYGZ2bi1ub3JtYWxgXSwibGluZS1jbGFtcCI6W2BkaXNwbGF5YCxgb3ZlcmZsb3dgXSxyb3VuZGVkOltgcm91bmRlZC1zYCxgcm91bmRlZC1lYCxgcm91bmRlZC10YCxgcm91bmRlZC1yYCxgcm91bmRlZC1iYCxgcm91bmRlZC1sYCxgcm91bmRlZC1zc2AsYHJvdW5kZWQtc2VgLGByb3VuZGVkLWVlYCxgcm91bmRlZC1lc2AsYHJvdW5kZWQtdGxgLGByb3VuZGVkLXRyYCxgcm91bmRlZC1icmAsYHJvdW5kZWQtYmxgXSwicm91bmRlZC1zIjpbYHJvdW5kZWQtc3NgLGByb3VuZGVkLWVzYF0sInJvdW5kZWQtZSI6W2Byb3VuZGVkLXNlYCxgcm91bmRlZC1lZWBdLCJyb3VuZGVkLXQiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtdHJgXSwicm91bmRlZC1yIjpbYHJvdW5kZWQtdHJgLGByb3VuZGVkLWJyYF0sInJvdW5kZWQtYiI6W2Byb3VuZGVkLWJyYCxgcm91bmRlZC1ibGBdLCJyb3VuZGVkLWwiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtYmxgXSwiYm9yZGVyLXNwYWNpbmciOltgYm9yZGVyLXNwYWNpbmcteGAsYGJvcmRlci1zcGFjaW5nLXlgXSwiYm9yZGVyLXciOltgYm9yZGVyLXcteGAsYGJvcmRlci13LXlgLGBib3JkZXItdy1zYCxgYm9yZGVyLXctZWAsYGJvcmRlci13LWJzYCxgYm9yZGVyLXctYmVgLGBib3JkZXItdy10YCxgYm9yZGVyLXctcmAsYGJvcmRlci13LWJgLGBib3JkZXItdy1sYF0sImJvcmRlci13LXgiOltgYm9yZGVyLXctcmAsYGJvcmRlci13LWxgXSwiYm9yZGVyLXcteSI6W2Bib3JkZXItdy10YCxgYm9yZGVyLXctYmBdLCJib3JkZXItY29sb3IiOltgYm9yZGVyLWNvbG9yLXhgLGBib3JkZXItY29sb3IteWAsYGJvcmRlci1jb2xvci1zYCxgYm9yZGVyLWNvbG9yLWVgLGBib3JkZXItY29sb3ItYnNgLGBib3JkZXItY29sb3ItYmVgLGBib3JkZXItY29sb3ItdGAsYGJvcmRlci1jb2xvci1yYCxgYm9yZGVyLWNvbG9yLWJgLGBib3JkZXItY29sb3ItbGBdLCJib3JkZXItY29sb3IteCI6W2Bib3JkZXItY29sb3ItcmAsYGJvcmRlci1jb2xvci1sYF0sImJvcmRlci1jb2xvci15IjpbYGJvcmRlci1jb2xvci10YCxgYm9yZGVyLWNvbG9yLWJgXSx0cmFuc2xhdGU6W2B0cmFuc2xhdGUteGAsYHRyYW5zbGF0ZS15YCxgdHJhbnNsYXRlLW5vbmVgXSwidHJhbnNsYXRlLW5vbmUiOltgdHJhbnNsYXRlYCxgdHJhbnNsYXRlLXhgLGB0cmFuc2xhdGUteWAsYHRyYW5zbGF0ZS16YF0sInNjcm9sbC1tIjpbYHNjcm9sbC1teGAsYHNjcm9sbC1teWAsYHNjcm9sbC1tc2AsYHNjcm9sbC1tZWAsYHNjcm9sbC1tYnNgLGBzY3JvbGwtbWJlYCxgc2Nyb2xsLW10YCxgc2Nyb2xsLW1yYCxgc2Nyb2xsLW1iYCxgc2Nyb2xsLW1sYF0sInNjcm9sbC1teCI6W2BzY3JvbGwtbXJgLGBzY3JvbGwtbWxgXSwic2Nyb2xsLW15IjpbYHNjcm9sbC1tdGAsYHNjcm9sbC1tYmBdLCJzY3JvbGwtcCI6W2BzY3JvbGwtcHhgLGBzY3JvbGwtcHlgLGBzY3JvbGwtcHNgLGBzY3JvbGwtcGVgLGBzY3JvbGwtcGJzYCxgc2Nyb2xsLXBiZWAsYHNjcm9sbC1wdGAsYHNjcm9sbC1wcmAsYHNjcm9sbC1wYmAsYHNjcm9sbC1wbGBdLCJzY3JvbGwtcHgiOltgc2Nyb2xsLXByYCxgc2Nyb2xsLXBsYF0sInNjcm9sbC1weSI6W2BzY3JvbGwtcHRgLGBzY3JvbGwtcGJgXSx0b3VjaDpbYHRvdWNoLXhgLGB0b3VjaC15YCxgdG91Y2gtcHpgXSwidG91Y2gteCI6W2B0b3VjaGBdLCJ0b3VjaC15IjpbYHRvdWNoYF0sInRvdWNoLXB6IjpbYHRvdWNoYF19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczp7ImZvbnQtc2l6ZSI6W2BsZWFkaW5nYF19LHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwczpbYGNvbnRhaW5lci10eXBlYF0sb3JkZXJTZW5zaXRpdmVNb2RpZmllcnM6W2AqYCxgKipgLGBhZnRlcmAsYGJhY2tkcm9wYCxgYmVmb3JlYCxgZGV0YWlscy1jb250ZW50YCxgZmlsZWAsYGZpcnN0LWxldHRlcmAsYGZpcnN0LWxpbmVgLGBtYXJrZXJgLGBwbGFjZWhvbGRlcmAsYHNlbGVjdGlvbmBdfX0pO2Z1bmN0aW9uIFl2KC4uLmUpe3JldHVybiBKdihiXyhlKSl9dmFyIFh2PUYoe19fbmFtZTpgQWxlcnRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50Ont9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBhbGVydGAsY2xhc3M6TyhOKFl2KShOKCR2KSh7dmFyaWFudDplLnZhcmlhbnR9KSx0LmNsYXNzKSkscm9sZTpgYWxlcnRgfSxbSShuLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWnY9Rih7X19uYW1lOmBBbGVydERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGFsZXJ0LWRlc2NyaXB0aW9uYCxjbGFzczpPKE4oWXYpKGB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbSB0ZXh0LWJhbGFuY2UgbWQ6dGV4dC1wcmV0dHkgWyZfcDpub3QoOmxhc3QtY2hpbGQpXTptYi00IFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxRdj1GKHtfX25hbWU6YEFsZXJ0VGl0bGVgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtdGl0bGVgLGNsYXNzOk8oTihZdikoYGZvbnQtbWVkaXVtIGdyb3VwLWhhcy1bPnN2Z10vYWxlcnQ6Y29sLXN0YXJ0LTIgZm9udC1oZWFkaW5nIFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSwkdj1DXyhgZ3JpZCBnYXAtMC41IHJvdW5kZWQtbGcgYm9yZGVyIHB4LTIuNSBweS0yIHRleHQtbGVmdCB0ZXh0LXNtIGhhcy1kYXRhLVtzbG90PWFsZXJ0LWFjdGlvbl06cmVsYXRpdmUgaGFzLWRhdGEtW3Nsb3Q9YWxlcnQtYWN0aW9uXTpwci0xOCBoYXMtWz5zdmddOmdyaWQtY29scy1bYXV0b18xZnJdIGhhcy1bPnN2Z106Z2FwLXgtMiAqOltzdmddOnJvdy1zcGFuLTIgKjpbc3ZnXTp0cmFuc2xhdGUteS0wLjUgKjpbc3ZnXTp0ZXh0LWN1cnJlbnQgKjpbc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9hbGVydCByZWxhdGl2ZSB3LWZ1bGxgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YHRleHQtZGVzdHJ1Y3RpdmUgYmctY2FyZCAqOmRhdGEtW3Nsb3Q9YWxlcnQtZGVzY3JpcHRpb25dOnRleHQtZGVzdHJ1Y3RpdmUvOTAgKjpbc3ZnXTp0ZXh0LWN1cnJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiBleShlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgP2AnJHtlfSdgOm5ldyBpeSgpLnNlcmlhbGl6ZShlKX12YXIgdHk9YCBfLSw7OiE/LiciKClbXXt9QCovXFwmIyVcYF4rPD0+fH4kMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YCxueT0oZnVuY3Rpb24oKXtsZXQgZT1uZXcgVWludDhBcnJheSgxMjgpO2ZvcihsZXQgdD0wO3Q8Njk7dCsrKWVbdHkuY2hhckNvZGVBdCh0KV09dCsxO2ZvcihsZXQgdD02NTt0PD05MDt0KyspZVt0XT1lW3QrMzJdO3JldHVybiBlfSkoKTtmdW5jdGlvbiByeShlLHQpe2lmKGU9PT10KXJldHVybiAwO2xldCBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG49ZS5jaGFyQ29kZUF0KGkpLGE9dC5jaGFyQ29kZUF0KGkpO2lmKG49PT1hKWNvbnRpbnVlO2xldCBvPW48MTI4JiZueVtuXT9ueVtuXTpuKzEyOCxzPWE8MTI4JiZueVthXT9ueVthXTphKzEyODtpZihvIT09cylyZXR1cm4gbzxzPy0xOjE7cj09PTAmJihyPW4+YT8tMToxKX1yZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aD9yOmUubGVuZ3RoPHQubGVuZ3RoPy0xOjF9dmFyIGl5PShmdW5jdGlvbigpe2NsYXNzIGV7I2U9bmV3IE1hcDtjb21wYXJlKGUsdCl7bGV0IG49dHlwZW9mIGUscj10eXBlb2YgdDtyZXR1cm4gbj09PWBzdHJpbmdgJiZyPT09YHN0cmluZ2A/cnkoZSx0KTpuPT09YG51bWJlcmAmJnI9PT1gbnVtYmVyYD9lLXQ6cnkodGhpcy5zZXJpYWxpemUoZSwhMCksdGhpcy5zZXJpYWxpemUodCwhMCkpfXNlcmlhbGl6ZShlLHQpe2lmKGU9PT1udWxsKXJldHVybmBudWxsYDtzd2l0Y2godHlwZW9mIGUpe2Nhc2Vgc3RyaW5nYDpyZXR1cm4gdD9lOmAnJHtlfSdgO2Nhc2VgYmlnaW50YDpyZXR1cm5gJHtlfW5gO2Nhc2Vgb2JqZWN0YDpyZXR1cm4gdGhpcy4kb2JqZWN0KGUpO2Nhc2VgZnVuY3Rpb25gOnJldHVybiB0aGlzLiRmdW5jdGlvbihlKX1yZXR1cm4gU3RyaW5nKGUpfXNlcmlhbGl6ZU9iamVjdChlKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7aWYodCE9PWBbb2JqZWN0IE9iamVjdF1gKXJldHVybiB0aGlzLnNlcmlhbGl6ZUJ1aWx0SW5UeXBlKHQubGVuZ3RoPDEwP2B1bmtub3duOiR7dH1gOnQuc2xpY2UoOCwtMSksZSk7bGV0IG49ZS5jb25zdHJ1Y3RvcixyPW49PT1PYmplY3R8fG49PT12b2lkIDA/YGA6bi5uYW1lO2lmKHIhPT1gYCYmZ2xvYmFsVGhpc1tyXT09PW4pcmV0dXJuIHRoaXMuc2VyaWFsaXplQnVpbHRJblR5cGUocixlKTtpZihgdG9KU09OYGluIGUmJnR5cGVvZiBlLnRvSlNPTj09YGZ1bmN0aW9uYCl7bGV0IHQ9ZS50b0pTT04oKTtyZXR1cm4gcisodHlwZW9mIHQ9PWBvYmplY3RgJiZ0P3RoaXMuJG9iamVjdCh0KTpgKCR7dGhpcy5zZXJpYWxpemUodCl9KWApfWxldCBpPU9iamVjdC5rZXlzKGUpLnNvcnQocnkpLGE9YCR7cn17YDtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IG49aVt0XTthKz1gJHtufToke3RoaXMuc2VyaWFsaXplKGVbbl0pfWAsdDxpLmxlbmd0aC0xJiYoYSs9YCxgKX1yZXR1cm4gYStgfWB9c2VyaWFsaXplQnVpbHRJblR5cGUoZSx0KXtsZXQgbj10aGlzW2AkYCtlXTtpZihuKXJldHVybiBuLmNhbGwodGhpcyx0KTtpZih0eXBlb2YgdC5lbnRyaWVzPT1gZnVuY3Rpb25gKXJldHVybiB0aGlzLnNlcmlhbGl6ZU9iamVjdEVudHJpZXMoZSx0LmVudHJpZXMoKSk7dGhyb3cgRXJyb3IoYENhbm5vdCBzZXJpYWxpemUgJHtlfWApfXNlcmlhbGl6ZU9iamVjdEVudHJpZXMoZSx0KXtsZXQgbj1BcnJheS5mcm9tKHQpLnNvcnQoKGUsdCk9PnRoaXMuY29tcGFyZShlWzBdLHRbMF0pKSxyPWAke2V9e2A7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldFt0LGldPW5bZV07cis9YCR7dGhpcy5zZXJpYWxpemUodCwhMCl9OiR7dGhpcy5zZXJpYWxpemUoaSl9YCxlPG4ubGVuZ3RoLTEmJihyKz1gLGApfXJldHVybiByK2B9YH0kb2JqZWN0KGUpe2xldCB0PXRoaXMuI2UuZ2V0KGUpO3JldHVybiB0PT09dm9pZCAwJiYodGhpcy4jZS5zZXQoZSxgIyR7dGhpcy4jZS5zaXplfWApLHQ9dGhpcy5zZXJpYWxpemVPYmplY3QoZSksdGhpcy4jZS5zZXQoZSx0KSksdH0kZnVuY3Rpb24oZSl7bGV0IHQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7cmV0dXJuIHQuc2xpY2UoLTE1KT09PWBbbmF0aXZlIGNvZGVdIH1gP2Ake2UubmFtZXx8YGB9KClbbmF0aXZlXWA6YCR7ZS5uYW1lfSgke2UubGVuZ3RofSkke3QucmVwbGFjZSgvXHMqXG5ccyovZyxgYCl9YH0kQXJyYXkoZSl7bGV0IHQ9YFtgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPXRoaXMuc2VyaWFsaXplKGVbbl0pLG48ZS5sZW5ndGgtMSYmKHQrPWAsYCk7cmV0dXJuIHQrYF1gfSREYXRlKGUpe3RyeXtyZXR1cm5gRGF0ZSgke2UudG9JU09TdHJpbmcoKX0pYH1jYXRjaHtyZXR1cm5gRGF0ZShudWxsKWB9fSRBcnJheUJ1ZmZlcihlKXtyZXR1cm5gQXJyYXlCdWZmZXJbJHtuZXcgVWludDhBcnJheShlKS5qb2luKGAsYCl9XWB9JFNldChlKXtyZXR1cm5gU2V0JHt0aGlzLiRBcnJheShBcnJheS5mcm9tKGUpLnNvcnQoKGUsdCk9PnRoaXMuY29tcGFyZShlLHQpKSl9YH0kTWFwKGUpe3JldHVybiB0aGlzLnNlcmlhbGl6ZU9iamVjdEVudHJpZXMoYE1hcGAsZS5lbnRyaWVzKCkpfX1mb3IobGV0IHQgb2ZbYEVycm9yYCxgUmVnRXhwYCxgVVJMYF0pZS5wcm90b3R5cGVbYCRgK3RdPWZ1bmN0aW9uKGUpe3JldHVybmAke3R9KCR7ZX0pYH07Zm9yKGxldCB0IG9mW2BJbnQ4QXJyYXlgLGBVaW50OEFycmF5YCxgVWludDhDbGFtcGVkQXJyYXlgLGBJbnQxNkFycmF5YCxgVWludDE2QXJyYXlgLGBJbnQzMkFycmF5YCxgVWludDMyQXJyYXlgLGBGbG9hdDMyQXJyYXlgLGBGbG9hdDY0QXJyYXlgXSllLnByb3RvdHlwZVtgJGArdF09ZnVuY3Rpb24oZSl7cmV0dXJuYCR7dH1bJHtlLmpvaW4oYCxgKX1dYH07Zm9yKGxldCB0IG9mW2BCaWdJbnQ2NEFycmF5YCxgQmlnVWludDY0QXJyYXlgXSllLnByb3RvdHlwZVtgJGArdF09ZnVuY3Rpb24oZSl7cmV0dXJuYCR7dH1bJHtlLmpvaW4oYG4sYCl9JHtlLmxlbmd0aD4wP2BuYDpgYH1dYH07cmV0dXJuIGV9KSgpO2Z1bmN0aW9uIGF5KGUsdCl7cmV0dXJuIGU9PT10fHxleShlKT09PWV5KHQpfWZ1bmN0aW9uIG95KGUsdCl7bGV0IG49dHlwZW9mIGU9PWBzdHJpbmdgJiYhdD9gJHtlfUNvbnRleHRgOnQscj1TeW1ib2wobik7cmV0dXJuW3Q9PntsZXQgbj15cihyLHQpO2lmKG58fG49PT1udWxsKXJldHVybiBuO3Rocm93IEVycm9yKGBJbmplY3Rpb24gXGAke3IudG9TdHJpbmcoKX1cYCBub3QgZm91bmQuIENvbXBvbmVudCBtdXN0IGJlIHVzZWQgd2l0aGluICR7QXJyYXkuaXNBcnJheShlKT9gb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJHtlLmpvaW4oYCwgYCl9YDpgXGAke2V9XGBgfWApfSxlPT4odnIocixlKSxlKV19ZnVuY3Rpb24gc3koKXtsZXQgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKDtlIT1udWxsJiZlLnNoYWRvd1Jvb3QhPW51bGwmJmUuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50IT1udWxsOyllPWUuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiBlfWZ1bmN0aW9uIGN5KGUpe3JldHVybiBlPT1udWxsfWZ1bmN0aW9uIGx5KGUsdCl7cmV0dXJuIGN5KGUpPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKGU9PmF5KGUsdCkpOmF5KGUsdCl9ZnVuY3Rpb24gdXkoZSx0KXtyZXR1cm4gRmUoKT8oSWUoZSx0KSwhMCk6ITF9ZnVuY3Rpb24gZHkoZSl7bGV0IHQ9ITEsbixyPVBlKCEwKTtyZXR1cm4oKC4uLmkpPT4odHx8PShuPXIucnVuKCgpPT5lKC4uLmkpKSwhMCksbikpfXZhciBmeT10eXBlb2Ygd2luZG93PGB1YCYmdHlwZW9mIGRvY3VtZW50PGB1YDt0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8YHVgJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7dmFyIHB5PWU9PmUhPT12b2lkIDAsbXk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoeT1lPT5teS5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWAsZ3k9X3koKTtmdW5jdGlvbiBfeSgpe3ZhciBlLHQ7cmV0dXJuIGZ5JiYhISgoZT13aW5kb3cpIT1udWxsJiYoZT1lLm5hdmlnYXRvcikhPW51bGwmJmUudXNlckFnZW50KSYmKC9pUCg/OmFkfGhvbmV8b2QpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KXx8KCh0PXdpbmRvdyk9PW51bGx8fCh0PXQubmF2aWdhdG9yKT09bnVsbD92b2lkIDA6dC5tYXhUb3VjaFBvaW50cyk+MiYmL2lQYWR8TWFjaW50b3NoLy50ZXN0KHdpbmRvdz8ubmF2aWdhdG9yLnVzZXJBZ2VudCkpfWZ1bmN0aW9uIHZ5KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIHl5KGUpe3JldHVybiBlfHxGcygpfWZ1bmN0aW9uIGJ5KGUpe2lmKCFmeSlyZXR1cm4gZTtsZXQgdD0wLG4scixpPSgpPT57LS10LHImJnQ8PTAmJihyLnN0b3AoKSxuPXZvaWQgMCxyPXZvaWQgMCl9O3JldHVybigoLi4uYSk9Pih0Kz0xLHJ8fChyPVBlKCEwKSxuPXIucnVuKCgpPT5lKC4uLmEpKSksdXkoaSksbikpfWZ1bmN0aW9uIHh5KGUpe3JldHVybiBadChqKGUpP25ldyBQcm94eSh7fSx7Z2V0KHQsbixyKXtyZXR1cm4gTihSZWZsZWN0LmdldChlLnZhbHVlLG4scikpfSxzZXQodCxuLHIpe3JldHVybiBqKGUudmFsdWVbbl0pJiYhaihyKT9lLnZhbHVlW25dLnZhbHVlPXI6ZS52YWx1ZVtuXT1yLCEwfSxkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGUudmFsdWUsbil9LGhhcyh0LG4pe3JldHVybiBSZWZsZWN0LmhhcyhlLnZhbHVlLG4pfSxvd25LZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKGUudmFsdWUpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKXtyZXR1cm57ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0pOmUpfWZ1bmN0aW9uIFN5KGUpe3JldHVybiB4eShXKGUpKX1mdW5jdGlvbiBDeShlLC4uLnQpe2xldCBuPXQuZmxhdCgpLHI9blswXTtyZXR1cm4gU3koKCk9Pk9iamVjdC5mcm9tRW50cmllcyh0eXBlb2Ygcj09YGZ1bmN0aW9uYD9PYmplY3QuZW50cmllcyh5bihlKSkuZmlsdGVyKChbZSx0XSk9PiFyKG1uKHQpLGUpKTpPYmplY3QuZW50cmllcyh5bihlKSkuZmlsdGVyKGU9PiFuLmluY2x1ZGVzKGVbMF0pKSkpfWZ1bmN0aW9uIHd5KGUsdD0xZTQpe3JldHVybiB2bigobixyKT0+e2xldCBpPW1uKGUpLGEsbz0oKT0+c2V0VGltZW91dCgoKT0+e2k9bW4oZSkscigpfSxtbih0KSk7cmV0dXJuIHV5KCgpPT57Y2xlYXJUaW1lb3V0KGEpfSkse2dldCgpe3JldHVybiBuKCksaX0sc2V0KGUpe2k9ZSxyKCksY2xlYXJUaW1lb3V0KGEpLGE9bygpfX19KX1mdW5jdGlvbiBUeShlLHQpe3l5KHQpJiZlYShlLHQpfWZ1bmN0aW9uIEV5KGUsdCxuKXtyZXR1cm4gRXIoZSx0LHsuLi5uLGltbWVkaWF0ZTohMH0pfXZhciBEeT1meT93aW5kb3c6dm9pZCAwO2Z5JiZ3aW5kb3cuZG9jdW1lbnQsZnkmJndpbmRvdy5uYXZpZ2F0b3IsZnkmJndpbmRvdy5sb2NhdGlvbjtmdW5jdGlvbiBPeShlKXtsZXQgdD1tbihlKTtyZXR1cm4gdD8uJGVsPz90fWZ1bmN0aW9uIGt5KC4uLmUpe2xldCB0PShlLHQsbixyKT0+KGUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sciksKCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scikpLG49VygoKT0+e2xldCB0PXZ5KG1uKGVbMF0pKS5maWx0ZXIoZT0+ZSE9bnVsbCk7cmV0dXJuIHQuZXZlcnkoZT0+dHlwZW9mIGUhPWBzdHJpbmdgKT90OnZvaWQgMH0pO3JldHVybiBFeSgoKT0+W24udmFsdWU/Lm1hcChlPT5PeShlKSk/P1tEeV0uZmlsdGVyKGU9PmUhPW51bGwpLHZ5KG1uKG4udmFsdWU/ZVsxXTplWzBdKSksdnkoTihuLnZhbHVlP2VbMl06ZVsxXSkpLG1uKG4udmFsdWU/ZVszXTplWzJdKV0sKFtlLG4scixpXSxhLG8pPT57aWYoIWU/Lmxlbmd0aHx8IW4/Lmxlbmd0aHx8IXI/Lmxlbmd0aClyZXR1cm47bGV0IHM9aHkoaSk/ey4uLml9OmksYz1lLmZsYXRNYXAoZT0+bi5mbGF0TWFwKG49PnIubWFwKHI9PnQoZSxuLHIscykpKSk7bygoKT0+e2MuZm9yRWFjaChlPT5lKCkpfSl9LHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiBBeSgpe2xldCBlPXVuKCExKSx0PUZzKCk7cmV0dXJuIHQmJlppKCgpPT57ZS52YWx1ZT0hMH0sdCksZX1mdW5jdGlvbiBqeShlKXtsZXQgdD1BeSgpO3JldHVybiBXKCgpPT4odC52YWx1ZSwhIWUoKSkpfWZ1bmN0aW9uIE15KGUpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnR5cGVvZiBlPT1gc3RyaW5nYD90PT50LmtleT09PWU6QXJyYXkuaXNBcnJheShlKT90PT5lLmluY2x1ZGVzKHQua2V5KTooKT0+ITB9ZnVuY3Rpb24gTnkoLi4uZSl7bGV0IHQsbixyPXt9O2UubGVuZ3RoPT09Mz8odD1lWzBdLG49ZVsxXSxyPWVbMl0pOmUubGVuZ3RoPT09Mj90eXBlb2YgZVsxXT09YG9iamVjdGA/KHQ9ITAsbj1lWzBdLHI9ZVsxXSk6KHQ9ZVswXSxuPWVbMV0pOih0PSEwLG49ZVswXSk7bGV0e3RhcmdldDppPUR5LGV2ZW50TmFtZTphPWBrZXlkb3duYCxwYXNzaXZlOm89ITEsZGVkdXBlOnM9ITF9PXIsYz1NeSh0KTtyZXR1cm4ga3koaSxhLGU9PntlLnJlcGVhdCYmbW4ocyl8fGMoZSkmJm4oZSl9LG8pfWZ1bmN0aW9uIFB5KGUpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBGeShlLHQsbj17fSl7bGV0e3dpbmRvdzpyPUR5LC4uLml9PW4sYSxvPWp5KCgpPT5yJiZgUmVzaXplT2JzZXJ2ZXJgaW4gcikscz0oKT0+e2EmJj0oYS5kaXNjb25uZWN0KCksdm9pZCAwKX0sYz1FcihXKCgpPT57bGV0IHQ9bW4oZSk7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoZT0+T3koZSkpOltPeSh0KV19KSxlPT57aWYocygpLG8udmFsdWUmJnIpe2E9bmV3IFJlc2l6ZU9ic2VydmVyKHQpO2ZvcihsZXQgdCBvZiBlKXQmJmEub2JzZXJ2ZSh0LGkpfX0se2ltbWVkaWF0ZTohMCxmbHVzaDpgcG9zdGB9KSxsPSgpPT57cygpLGMoKX07cmV0dXJuIHV5KGwpLHtpc1N1cHBvcnRlZDpvLHN0b3A6bH19ZnVuY3Rpb24gSXkoZSx0LG4scj17fSl7dmFyIGksYTtsZXR7Y2xvbmU6bz0hMSxwYXNzaXZlOnM9ITEsZXZlbnROYW1lOmMsZGVlcDpsPSExLGRlZmF1bHRWYWx1ZTp1LHNob3VsZEVtaXQ6ZH09cixmPUZzKCkscD1ufHxmPy5lbWl0fHwoZj09bnVsbHx8KGk9Zi4kZW1pdCk9PW51bGw/dm9pZCAwOmkuYmluZChmKSl8fChmPT1udWxsfHwoYT1mLnByb3h5KT09bnVsbHx8KGE9YS4kZW1pdCk9PW51bGw/dm9pZCAwOmEuYmluZChmPy5wcm94eSkpLG09Yzt0fHw9YG1vZGVsVmFsdWVgLG18fD1gdXBkYXRlOiR7dC50b1N0cmluZygpfWA7bGV0IGg9ZT0+bz90eXBlb2Ygbz09YGZ1bmN0aW9uYD9vKGUpOlB5KGUpOmUsZz0oKT0+cHkoZVt0XSk/aChlW3RdKTp1LF89ZT0+e2Q/ZChlKSYmcChtLGUpOnAobSxlKX07aWYocyl7bGV0IG49TShnKCkpLHI9ITE7cmV0dXJuIEVyKCgpPT5lW3RdLGU9PntyfHwocj0hMCxuLnZhbHVlPWgoZSksUW4oKCk9PnI9ITEpKX0pLEVyKG4sbj0+eyFyJiYobiE9PWVbdF18fGwpJiZfKG4pfSx7ZGVlcDpsfSksbn1yZXR1cm4gVyh7Z2V0KCl7cmV0dXJuIGcoKX0sc2V0KGUpe18oZSl9fSl9ZnVuY3Rpb24gTHkoZSl7cmV0dXJuIGU/ZS5mbGF0TWFwKGU9PmUudHlwZT09PUw/THkoZS5jaGlsZHJlbik6W2VdKTpbXX12YXIgUnk9W2BJTlBVVGAsYFRFWFRBUkVBYF07ZnVuY3Rpb24genkoZSx0LG4scj17fSl7aWYoIXR8fHIuZW5hYmxlSWdub3JlZEVsZW1lbnQmJlJ5LmluY2x1ZGVzKHQubm9kZU5hbWUpKXJldHVybiBudWxsO2xldHthcnJvd0tleU9wdGlvbnM6aT1gYm90aGAsYXR0cmlidXRlTmFtZTphPWBbZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbV1gLGl0ZW1zQXJyYXk6bz1bXSxsb29wOnM9ITAsZGlyOmM9YGx0cmAscHJldmVudFNjcm9sbDpsPSEwLGZvY3VzOnU9ITF9PXIsW2QsZixwLG0saCxnXT1bZS5rZXk9PT1gQXJyb3dSaWdodGAsZS5rZXk9PT1gQXJyb3dMZWZ0YCxlLmtleT09PWBBcnJvd1VwYCxlLmtleT09PWBBcnJvd0Rvd25gLGUua2V5PT09YEhvbWVgLGUua2V5PT09YEVuZGBdLF89cHx8bSx2PWR8fGY7aWYoIWgmJiFnJiYoIV8mJiF2fHxpPT09YHZlcnRpY2FsYCYmdnx8aT09PWBob3Jpem9udGFsYCYmXykpcmV0dXJuIG51bGw7bGV0IHk9bj9BcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbChhKSk6bztpZigheS5sZW5ndGgpcmV0dXJuIG51bGw7bCYmZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPW51bGw7cmV0dXJuIHZ8fF8/Yj1CeSh5LHQse2dvRm9yd2FyZDpfP206Yz09PWBsdHJgP2Q6Zixsb29wOnN9KTpoP2I9eS5hdCgwKXx8bnVsbDpnJiYoYj15LmF0KC0xKXx8bnVsbCksdSYmYj8uZm9jdXMoKSxifWZ1bmN0aW9uIEJ5KGUsdCxuLHI9ZS5pbmNsdWRlcyh0KT9lLmxlbmd0aDplLmxlbmd0aCsxKXtpZigtLXI9PT0wKXJldHVybiBudWxsO2xldCBpPWUuaW5kZXhPZih0KSxhO2lmKGE9aT09PS0xP24uZ29Gb3J3YXJkPzA6ZS5sZW5ndGgtMTpuLmdvRm9yd2FyZD9pKzE6aS0xLCFuLmxvb3AmJihhPDB8fGE+PWUubGVuZ3RoKSlyZXR1cm4gbnVsbDtsZXQgbz1lWyhhK2UubGVuZ3RoKSVlLmxlbmd0aF07cmV0dXJuIG8/by5oYXNBdHRyaWJ1dGUoYGRpc2FibGVkYCkmJm8uZ2V0QXR0cmlidXRlKGBkaXNhYmxlZGApIT09YGZhbHNlYD9CeShlLG8sbixyKTpvOm51bGx9dmFyW1Z5LEh5XT1veShgQ29uZmlnUHJvdmlkZXJgKTtmdW5jdGlvbiBVeShlKXtsZXQgdD1WeSh7ZGlyOk0oYGx0cmApfSk7cmV0dXJuIFcoKCk9PmU/LnZhbHVlfHx0LmRpcj8udmFsdWV8fGBsdHJgKX1mdW5jdGlvbiBXeShlKXtsZXQgdD1GcygpLG49dD8udHlwZS5lbWl0cyxyPXt9O3JldHVybiBuPy5sZW5ndGh8fGNvbnNvbGUud2FybihgTm8gZW1pdHRlZCBldmVudCBmb3VuZC4gUGxlYXNlIGNoZWNrIGNvbXBvbmVudDogJHt0Py50eXBlLl9fbmFtZX1gKSxuPy5mb3JFYWNoKHQ9PntyW2NlKEUodCkpXT0oLi4ubik9PmUodCwuLi5uKX0pLHJ9ZnVuY3Rpb24gR3koKXtsZXQgZT1GcygpLHQ9TSgpLG49VygoKT0+cigpKTskaSgoKT0+e24udmFsdWUhPT1yKCkmJnBuKHQpfSk7ZnVuY3Rpb24gcigpe3JldHVybiB0LnZhbHVlJiZgJGVsYGluIHQudmFsdWUmJltgI3RleHRgLGAjY29tbWVudGBdLmluY2x1ZGVzKHQudmFsdWUuJGVsLm5vZGVOYW1lKT90LnZhbHVlLiRlbC5uZXh0RWxlbWVudFNpYmxpbmc6T3kodCl9bGV0IGk9T2JqZWN0LmFzc2lnbih7fSxlLmV4cG9zZWQpLGE9e307Zm9yKGxldCB0IGluIGUucHJvcHMpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5lLnByb3BzW3RdfSk7aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjApZm9yKGxldCBlIGluIGkpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pW2VdfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIiRlbCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+ZS52bm9kZS5lbH0pLGUuZXhwb3NlZD1hO2Z1bmN0aW9uIG8obil7aWYodC52YWx1ZT1uLG4mJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiJGVsIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5uIGluc3RhbmNlb2YgRWxlbWVudD9uOm4uJGVsfSksIShuIGluc3RhbmNlb2YgRWxlbWVudCkmJiFPYmplY3QuaGFzT3duKG4sYCRlbGApKSl7bGV0IHQ9bi4kLmV4cG9zZWQscj1PYmplY3QuYXNzaWduKHt9LGEpO2ZvcihsZXQgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+dFtlXX0pO2UuZXhwb3NlZD1yfX1yZXR1cm57Zm9yd2FyZFJlZjpvLGN1cnJlbnRSZWY6dCxjdXJyZW50RWxlbWVudDpufX1mdW5jdGlvbiBLeShlKXtsZXQgdD1GcygpLG49T2JqZWN0LmtleXModD8udHlwZS5wcm9wcz8/e30pLnJlZHVjZSgoZSxuKT0+e2xldCByPSh0Py50eXBlLnByb3BzW25dKS5kZWZhdWx0O3JldHVybiByIT09dm9pZCAwJiYoZVtuXT1yKSxlfSx7fSkscj1TbihlKTtyZXR1cm4gVygoKT0+e2xldCBlPXt9LGk9dD8udm5vZGUucHJvcHM/P3t9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHQ9PntlW0UodCldPWlbdF19KSxPYmplY3Qua2V5cyh7Li4ubiwuLi5lfSkucmVkdWNlKChlLHQpPT4oci52YWx1ZVt0XSE9PXZvaWQgMCYmKGVbdF09ci52YWx1ZVt0XSksZSkse30pfSl9ZnVuY3Rpb24gcXkoZSx0KXtsZXQgbj1LeShlKSxyPXQ/V3kodCk6e307cmV0dXJuIFcoKCk9Pih7Li4ubi52YWx1ZSwuLi5yfSkpfXZhciBKeT0wO2Z1bmN0aW9uIFl5KGUsdD1gcmVrYWApe2lmKGUpcmV0dXJuIGU7bGV0IG4scj1WeSh7dXNlSWQ6dm9pZCAwfSk7cmV0dXJuIG49ci51c2VJZD9yLnVzZUlkKCk6YHVzZUlkYGluIGJ1P2FpPy4oKTpgJHsrK0p5fWAsdD9gJHt0fS0ke259YDpufWZ1bmN0aW9uIFh5KGUsdCl7bGV0IG49TShlKTtmdW5jdGlvbiByKGUpe3JldHVybiB0W24udmFsdWVdW2VdPz9uLnZhbHVlfXJldHVybntzdGF0ZTpuLGRpc3BhdGNoOmU9PntuLnZhbHVlPXIoZSl9fX1mdW5jdGlvbiBaeShlLHQpe2xldCBuPU0oe30pLHI9TShgbm9uZWApLGk9TShlKSxhPWUudmFsdWU/YG1vdW50ZWRgOmB1bm1vdW50ZWRgLG8scz10LnZhbHVlPy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz9EeSx7c3RhdGU6YyxkaXNwYXRjaDpsfT1YeShhLHttb3VudGVkOntVTk1PVU5UOmB1bm1vdW50ZWRgLEFOSU1BVElPTl9PVVQ6YHVubW91bnRTdXNwZW5kZWRgfSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDpgbW91bnRlZGAsQU5JTUFUSU9OX0VORDpgdW5tb3VudGVkYH0sdW5tb3VudGVkOntNT1VOVDpgbW91bnRlZGB9fSksdT1lPT57aWYoZnkpe2xldCBuPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KTt0LnZhbHVlPy5kaXNwYXRjaEV2ZW50KG4pfX07RXIoZSxhc3luYyhlLGkpPT57bGV0IGE9aSE9PWU7aWYoYXdhaXQgUW4oKSxhKXtsZXQgYT1yLnZhbHVlLG89UXkodC52YWx1ZSk7ZT8obChgTU9VTlRgKSx1KGBlbnRlcmApLG89PT1gbm9uZWAmJnUoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8obChgVU5NT1VOVGApLHUoYGxlYXZlYCksdShgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGwoYEFOSU1BVElPTl9PVVRgKSx1KGBsZWF2ZWApKToobChgVU5NT1VOVGApLHUoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBkPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPVF5KHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9Yy52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKHUoYGFmdGVyLSR7YX1gKSxsKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmbChgQU5JTUFUSU9OX0VORGApfSxmPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPVF5KHQudmFsdWUpKX0scD1Fcih0LChlLHQpPT57ZT8obi52YWx1ZT1nZXRDb21wdXRlZFN0eWxlKGUpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxkKSxlLmFkZEV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpOihsKGBBTklNQVRJT05fRU5EYCksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbnN0YXJ0YCxmKSx0Py5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpfSx7aW1tZWRpYXRlOiEwfSksbT1FcihjLCgpPT57bGV0IGU9UXkodC52YWx1ZSk7ci52YWx1ZT1jLnZhbHVlPT09YG1vdW50ZWRgP2U6YG5vbmVgfSk7cmV0dXJuIHRhKCgpPT57cCgpLG0oKSx0LnZhbHVlJiYodC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsZiksdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pfSkse2lzUHJlc2VudDpXKCgpPT5bYG1vdW50ZWRgLGB1bm1vdW50U3VzcGVuZGVkYF0uaW5jbHVkZXMoYy52YWx1ZSkpfX1mdW5jdGlvbiBReShlKXtyZXR1cm4gZSYmZ2V0Q29tcHV0ZWRTdHlsZShlKS5hbmltYXRpb25OYW1lfHxgbm9uZWB9dmFyICR5PUYoe25hbWU6YFByZXNlbmNlYCxwcm9wczp7cHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59fSxzbG90czp7fSxzZXR1cChlLHtzbG90czp0LGV4cG9zZTpufSl7bGV0e3ByZXNlbnQ6cixmb3JjZU1vdW50Oml9PXluKGUpLGE9TSgpLHtpc1ByZXNlbnQ6b309WnkocixhKTtuKHtwcmVzZW50Om99KTtsZXQgcz10LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pO3M9THkoc3x8W10pO2xldCBjPUZzKCk7aWYocyYmcz8ubGVuZ3RoPjEpe2xldCBlPWM/LnBhcmVudD8udHlwZS5uYW1lP2A8JHtjLnBhcmVudC50eXBlLm5hbWV9IC8+YDpgY29tcG9uZW50YDt0aHJvdyBFcnJvcihbYERldGVjdGVkIGFuIGludmFsaWQgY2hpbGRyZW4gZm9yIFxgJHtlfVxgIGZvciAgXGBQcmVzZW5jZVxgIGNvbXBvbmVudC5gLGBgLCJOb3RlOiBQcmVzZW5jZSB3b3JrcyBzaW1pbGFybHkgdG8gYHYtaWZgIGRpcmVjdGx5LCBidXQgaXQgd2FpdHMgZm9yIGFuaW1hdGlvbi90cmFuc2l0aW9uIHRvIGZpbmlzaGVkIGJlZm9yZSB1bm1vdW50aW5nLiBTbyBpdCBleHBlY3Qgb25seSBvbmUgZGlyZWN0IGNoaWxkIG9mIHZhbGlkIFZOb2RlIHR5cGUuIixgWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6YCxbIlByb3ZpZGUgYSBzaW5nbGUgY2hpbGQgZWxlbWVudCBzbyB0aGF0IGBwcmVzZW5jZWAgZGlyZWN0aXZlIGF0dGFjaCBjb3JyZWN0bHkuIixgRW5zdXJlIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiBhY3R1YWwgZWxlbWVudCBpbnN0ZWFkIG9mIGEgcmF3IHRleHQgbm9kZSBvciBjb21tZW50IG5vZGUuYF0ubWFwKGU9PmAgIC0gJHtlfWApLmpvaW4oYApgKV0uam9pbihgCmApKX1yZXR1cm4oKT0+aS52YWx1ZXx8ci52YWx1ZXx8by52YWx1ZT9HKHQuZGVmYXVsdCh7cHJlc2VudDpvLnZhbHVlfSlbMF0se3JlZjplPT57bGV0IHQ9T3koZSk7cmV0dXJuIHQ/Lmhhc0F0dHJpYnV0ZT09PXZvaWQgMHx8KHQ/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9hLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6YS52YWx1ZT10KSx0fX0pOm51bGx9fSksZWI9Rih7bmFtZTpgUHJpbWl0aXZlU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe3JldHVybigpPT57aWYoIW4uZGVmYXVsdClyZXR1cm4gbnVsbDtsZXQgZT1MeShuLmRlZmF1bHQoKSkscj1lLmZpbmRJbmRleChlPT5lLnR5cGUhPT1jcyk7aWYocj09PS0xKXJldHVybiBlO2xldCBpPWVbcl07ZGVsZXRlIGkucHJvcHM/LnJlZjtsZXQgYT1pLnByb3BzP2tzKHQsaS5wcm9wcyk6dCxvPUNzKHsuLi5pLHByb3BzOnt9fSxhKTtyZXR1cm4gZS5sZW5ndGg9PT0xP286KGVbcl09byxlKX19fSksdGI9W2BhcmVhYCxgaW1nYCxgaW5wdXRgXSxuYj1GKHtuYW1lOmBQcmltaXRpdmVgLGluaGVyaXRBdHRyczohMSxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFzOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0OmBkaXZgfX0sc2V0dXAoZSx7YXR0cnM6dCxzbG90czpufSl7bGV0IHI9ZS5hc0NoaWxkP2B0ZW1wbGF0ZWA6ZS5hcztyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgJiZ0Yi5pbmNsdWRlcyhyKT8oKT0+RyhyLHQpOnI9PT1gdGVtcGxhdGVgPygpPT5HKGViLHQse2RlZmF1bHQ6bi5kZWZhdWx0fSk6KCk9PkcoZS5hcyx0LHtkZWZhdWx0Om4uZGVmYXVsdH0pfX0pO2Z1bmN0aW9uIHJiKCl7bGV0IGU9TSgpO3JldHVybntwcmltaXRpdmVFbGVtZW50OmUsY3VycmVudEVsZW1lbnQ6VygoKT0+W2AjdGV4dGAsYCNjb21tZW50YF0uaW5jbHVkZXMoZS52YWx1ZT8uJGVsLm5vZGVOYW1lKT9lLnZhbHVlPy4kZWwubmV4dEVsZW1lbnRTaWJsaW5nOk95KGUpKX19dmFyW2liLGFiXT1veShgQ29sbGFwc2libGVSb290YCksb2I9Rih7X19uYW1lOmBDb2xsYXBzaWJsZVJvb3RgLHByb3BzOntkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LG9wZW46e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OnZvaWQgMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtleHBvc2U6dCxlbWl0Om59KXtsZXQgcj1lLGk9SXkocixgb3BlbmAsbix7ZGVmYXVsdFZhbHVlOnIuZGVmYXVsdE9wZW4scGFzc2l2ZTpyLm9wZW49PT12b2lkIDB9KSx7ZGlzYWJsZWQ6YSx1bm1vdW50T25IaWRlOm99PXluKHIpO3JldHVybiBhYih7Y29udGVudElkOmBgLGRpc2FibGVkOmEsb3BlbjppLHVubW91bnRPbkhpZGU6byxvbk9wZW5Ub2dnbGU6KCk9PnthLnZhbHVlfHwoaS52YWx1ZT0haS52YWx1ZSl9fSksdCh7b3BlbjppfSksR3koKSwoZSx0KT0+KFIoKSxCKE4obmIpLHthczplLmFzLCJhcy1jaGlsZCI6ci5hc0NoaWxkLCJkYXRhLXN0YXRlIjpOKGkpP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6TihhKT9gYDp2b2lkIDB9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCx7b3BlbjpOKGkpfSldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLHNiPUYoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YENvbGxhcHNpYmxlQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Bjb250ZW50Rm91bmRgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPWliKCk7aS5jb250ZW50SWR8fD1ZeSh2b2lkIDAsYHJla2EtY29sbGFwc2libGUtY29udGVudGApO2xldCBhPU0oKSx7Zm9yd2FyZFJlZjpvLGN1cnJlbnRFbGVtZW50OnN9PUd5KCksYz1NKDApLGw9TSgwKSx1PVcoKCk9Pmkub3Blbi52YWx1ZSksZD1NKHUudmFsdWUpLGY9TSgpO0VyKCgpPT5bdS52YWx1ZSxhLnZhbHVlPy5wcmVzZW50XSxhc3luYygpPT57YXdhaXQgUW4oKTtsZXQgZT1zLnZhbHVlO2lmKCFlKXJldHVybjtmLnZhbHVlPWYudmFsdWV8fHt0cmFuc2l0aW9uRHVyYXRpb246ZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24sYW5pbWF0aW9uTmFtZTplLnN0eWxlLmFuaW1hdGlvbk5hbWV9LGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZS5zdHlsZS5hbmltYXRpb25OYW1lPWBub25lYDtsZXQgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2wudmFsdWU9dC5oZWlnaHQsYy52YWx1ZT10LndpZHRoLGQudmFsdWV8fChlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1mLnZhbHVlLnRyYW5zaXRpb25EdXJhdGlvbixlLnN0eWxlLmFuaW1hdGlvbk5hbWU9Zi52YWx1ZS5hbmltYXRpb25OYW1lKX0se2ltbWVkaWF0ZTohMH0pO2xldCBwPVcoKCk9PmQudmFsdWUmJmkub3Blbi52YWx1ZSk7cmV0dXJuIFppKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57ZC52YWx1ZT0hMX0pfSksa3kocyxgYmVmb3JlbWF0Y2hgLGU9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntpLm9uT3BlblRvZ2dsZSgpLHIoYGNvbnRlbnRGb3VuZGApfSl9KSwoZSx0KT0+KFIoKSxCKE4oJHkpLHtyZWZfa2V5OmBwcmVzZW50UmVmYCxyZWY6YSxwcmVzZW50OmUuZm9yY2VNb3VudHx8TihpKS5vcGVuLnZhbHVlLCJmb3JjZS1tb3VudCI6ITB9LHtkZWZhdWx0OlAoKHtwcmVzZW50OnR9KT0+W0goTihuYiksa3MoZS4kYXR0cnMse2lkOk4oaSkuY29udGVudElkLHJlZjpOKG8pLCJhcy1jaGlsZCI6bi5hc0NoaWxkLGFzOmUuYXMsaGlkZGVuOnQ/dm9pZCAwOk4oaSkudW5tb3VudE9uSGlkZS52YWx1ZT9gYDpgdW50aWwtZm91bmRgLCJkYXRhLXN0YXRlIjpwLnZhbHVlP3ZvaWQgMDpOKGkpLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpOKGkpLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsc3R5bGU6eyItLXJla2EtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmAke2wudmFsdWV9cHhgLCItLXJla2EtY29sbGFwc2libGUtY29udGVudC13aWR0aCI6YCR7Yy52YWx1ZX1weGB9fSkse2RlZmF1bHQ6UCgoKT0+WyFOKGkpLnVubW91bnRPbkhpZGUudmFsdWV8fHQ/SShlLiRzbG90cyxgZGVmYXVsdGAse2tleTowfSk6VHMoYHYtaWZgLCEwKV0pLF86Mn0sMTA0MCxbYGlkYCxgYXMtY2hpbGRgLGBhc2AsYGhpZGRlbmAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYCxgc3R5bGVgXSldKSxfOjN9LDgsW2BwcmVzZW50YF0pKX19KSxjYj1GKHtfX25hbWU6YENvbGxhcHNpYmxlVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZTtHeSgpO2xldCBuPWliKCk7cmV0dXJuKGUscik9PihSKCksQihOKG5iKSx7dHlwZTplLmFzPT09YGJ1dHRvbmA/YGJ1dHRvbmA6dm9pZCAwLGFzOmUuYXMsImFzLWNoaWxkIjp0LmFzQ2hpbGQsImFyaWEtY29udHJvbHMiOk4obikuY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpOKG4pLm9wZW4udmFsdWUsImRhdGEtc3RhdGUiOk4obikub3Blbi52YWx1ZT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOk4obikuZGlzYWJsZWQ/LnZhbHVlP2BgOnZvaWQgMCxkaXNhYmxlZDpOKG4pLmRpc2FibGVkPy52YWx1ZSxvbkNsaWNrOk4obikub25PcGVuVG9nZ2xlfSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWNvbnRyb2xzYCxgYXJpYS1leHBhbmRlZGAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYCxgZGlzYWJsZWRgLGBvbkNsaWNrYF0pKX19KTtmdW5jdGlvbiBsYih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pe2xldCByPW58fHQ7cmV0dXJuIG4hPT12b2lkIDB8fHQhPT12b2lkIDA/QXJyYXkuaXNBcnJheShyKT9gbXVsdGlwbGVgOmBzaW5nbGVgOmU/P2BzaW5nbGVgfWZ1bmN0aW9uIHViKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl7cmV0dXJuIGV8fGxiKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl9ZnVuY3Rpb24gZGIoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dH0pe3JldHVybiB0PT09dm9pZCAwP2U9PT1gc2luZ2xlYD92b2lkIDA6W106dH1mdW5jdGlvbiBmYihlLHQpe2xldCBuPVcoKCk9PnViKGUpKSxyPUl5KGUsYG1vZGVsVmFsdWVgLHQse2RlZmF1bHRWYWx1ZTpkYihlKSxwYXNzaXZlOmUubW9kZWxWYWx1ZT09PXZvaWQgMCxkZWVwOiEwfSk7ZnVuY3Rpb24gaShlKXtpZihuLnZhbHVlPT09YHNpbmdsZWApci52YWx1ZT1heShlLHIudmFsdWUpP3ZvaWQgMDplO2Vsc2V7bGV0IHQ9QXJyYXkuaXNBcnJheShyLnZhbHVlKT9bLi4uci52YWx1ZXx8W11dOltyLnZhbHVlXS5maWx0ZXIoQm9vbGVhbik7aWYobHkodCxlKSl7bGV0IG49dC5maW5kSW5kZXgodD0+YXkodCxlKSk7dC5zcGxpY2UobiwxKX1lbHNlIHQucHVzaChlKTtyLnZhbHVlPXR9fXJldHVybnttb2RlbFZhbHVlOnIsY2hhbmdlTW9kZWxWYWx1ZTppLGlzU2luZ2xlOlcoKCk9Pm4udmFsdWU9PT1gc2luZ2xlYCl9fXZhcltwYixtYl09b3koYEFjY29yZGlvblJvb3RgKSxoYj1GKHtfX25hbWU6YEFjY29yZGlvblJvb3RgLHByb3BzOntjb2xsYXBzaWJsZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHZlcnRpY2FsYH0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sdHlwZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG1vZGVsVmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGVmYXVsdFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2RpcjppLGRpc2FibGVkOmEsdW5tb3VudE9uSGlkZTpvfT15bihuKSxzPVV5KGkpLHttb2RlbFZhbHVlOmMsY2hhbmdlTW9kZWxWYWx1ZTpsLGlzU2luZ2xlOnV9PWZiKG4scikse2ZvcndhcmRSZWY6ZCxjdXJyZW50RWxlbWVudDpmfT1HeSgpO3JldHVybiBtYih7ZGlzYWJsZWQ6YSxkaXJlY3Rpb246cyxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLHBhcmVudEVsZW1lbnQ6Zixpc1NpbmdsZTp1LGNvbGxhcHNpYmxlOm4uY29sbGFwc2libGUsbW9kZWxWYWx1ZTpjLGNoYW5nZU1vZGVsVmFsdWU6bCx1bm1vdW50T25IaWRlOm99KSwoZSx0KT0+KFIoKSxCKE4obmIpLHtyZWY6TihkKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzfSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGAse21vZGVsVmFsdWU6TihjKX0pXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2BdKSl9fSksZ2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuT3Blbj1gb3BlbmAsZS5DbG9zZWQ9YGNsb3NlZGAsZX0oZ2J8fHt9KSxbX2IsdmJdPW95KGBBY2NvcmRpb25JdGVtYCkseWI9Rih7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUse2V4cG9zZTp0fSl7bGV0IG49ZSxyPXBiKCksaT1XKCgpPT5yLmlzU2luZ2xlLnZhbHVlP24udmFsdWU9PT1yLm1vZGVsVmFsdWUudmFsdWU6QXJyYXkuaXNBcnJheShyLm1vZGVsVmFsdWUudmFsdWUpJiZyLm1vZGVsVmFsdWUudmFsdWUuaW5jbHVkZXMobi52YWx1ZSkpLGE9VygoKT0+ci5kaXNhYmxlZC52YWx1ZXx8bi5kaXNhYmxlZCksbz1XKCgpPT5hLnZhbHVlP2BgOnZvaWQgMCkscz1XKCgpPT5pLnZhbHVlP2diLk9wZW46Z2IuQ2xvc2VkKTt0KHtvcGVuOmksZGF0YURpc2FibGVkOm99KTtsZXR7Y3VycmVudFJlZjpjLGN1cnJlbnRFbGVtZW50Omx9PUd5KCk7dmIoe29wZW46aSxkYXRhU3RhdGU6cyxkaXNhYmxlZDphLGRhdGFEaXNhYmxlZDpvLHRyaWdnZXJJZDpgYCxjdXJyZW50UmVmOmMsY3VycmVudEVsZW1lbnQ6bCx2YWx1ZTpXKCgpPT5uLnZhbHVlKX0pO2Z1bmN0aW9uIHUoZSl7bGV0IHQ9ZS50YXJnZXQ7aWYoQXJyYXkuZnJvbShyLnBhcmVudEVsZW1lbnQudmFsdWU/LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtXWApPz9bXSkuZmluZEluZGV4KGU9PmU9PT10KT09PS0xKXJldHVybiBudWxsO3p5KGUsdCxyLnBhcmVudEVsZW1lbnQudmFsdWUse2Fycm93S2V5T3B0aW9uczpyLm9yaWVudGF0aW9uLGRpcjpyLmRpcmVjdGlvbi52YWx1ZSxmb2N1czohMH0pfXJldHVybihlLHQpPT4oUigpLEIoTihvYikseyJkYXRhLW9yaWVudGF0aW9uIjpOKHIpLm9yaWVudGF0aW9uLCJkYXRhLWRpc2FibGVkIjpvLnZhbHVlLCJkYXRhLXN0YXRlIjpzLnZhbHVlLGRpc2FibGVkOmEudmFsdWUsb3BlbjppLnZhbHVlLGFzOm4uYXMsImFzLWNoaWxkIjpuLmFzQ2hpbGQsInVubW91bnQtb24taGlkZSI6bi51bm1vdW50T25IaWRlPz9OKHIpLnVubW91bnRPbkhpZGUudmFsdWUsb25LZXlkb3duOm91KHUsW2B1cGAsYGRvd25gLGBsZWZ0YCxgcmlnaHRgLGBob21lYCxgZW5kYF0pfSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGAse29wZW46aS52YWx1ZX0pXSksXzozfSw4LFtgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgLGBvcGVuYCxgYXNgLGBhcy1jaGlsZGAsYHVubW91bnQtb24taGlkZWBdKSl9fSksYmI9Rih7X19uYW1lOmBBY2NvcmRpb25Db250ZW50YCxwcm9wczp7Zm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49cGIoKSxyPV9iKCk7cmV0dXJuIEd5KCksKGUsaSk9PihSKCksQihOKHNiKSx7cm9sZTpgcmVnaW9uYCwiYXMtY2hpbGQiOnQuYXNDaGlsZCxhczplLmFzLCJmb3JjZS1tb3VudCI6dC5mb3JjZU1vdW50LCJhcmlhLWxhYmVsbGVkYnkiOk4ocikudHJpZ2dlcklkLCJkYXRhLXN0YXRlIjpOKHIpLmRhdGFTdGF0ZS52YWx1ZSwiZGF0YS1kaXNhYmxlZCI6TihyKS5kYXRhRGlzYWJsZWQudmFsdWUsImRhdGEtb3JpZW50YXRpb24iOk4obikub3JpZW50YXRpb24sc3R5bGU6eyItLXJla2EtYWNjb3JkaW9uLWNvbnRlbnQtd2lkdGgiOmB2YXIoLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgpYCwiLS1yZWthLWFjY29yZGlvbi1jb250ZW50LWhlaWdodCI6YHZhcigtLXJla2EtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQpYH0sb25Db250ZW50Rm91bmQ6aVswXXx8PWU9Pk4obikuY2hhbmdlTW9kZWxWYWx1ZShOKHIpLnZhbHVlLnZhbHVlKX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgLGBmb3JjZS1tb3VudGAsYGFyaWEtbGFiZWxsZWRieWAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1vcmllbnRhdGlvbmBdKSl9fSkseGI9Rih7X19uYW1lOmBBY2NvcmRpb25IZWFkZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaDNgfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXBiKCkscj1fYigpO3JldHVybiBHeSgpLChlLGkpPT4oUigpLEIoTihuYikse2FzOnQuYXMsImFzLWNoaWxkIjp0LmFzQ2hpbGQsImRhdGEtb3JpZW50YXRpb24iOk4obikub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOk4ocikuZGF0YVN0YXRlLnZhbHVlLCJkYXRhLWRpc2FibGVkIjpOKHIpLmRhdGFEaXNhYmxlZC52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLFNiPUYoe19fbmFtZTpgQWNjb3JkaW9uVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1wYigpLHI9X2IoKTtyLnRyaWdnZXJJZHx8PVl5KHZvaWQgMCxgcmVrYS1hY2NvcmRpb24tdHJpZ2dlcmApO2Z1bmN0aW9uIGkoKXtsZXQgZT1uLmlzU2luZ2xlLnZhbHVlJiZyLm9wZW4udmFsdWUmJiFuLmNvbGxhcHNpYmxlO3IuZGlzYWJsZWQudmFsdWV8fGV8fG4uY2hhbmdlTW9kZWxWYWx1ZShyLnZhbHVlLnZhbHVlKX1yZXR1cm4oZSxhKT0+KFIoKSxCKE4oY2IpLHtpZDpOKHIpLnRyaWdnZXJJZCxyZWY6TihyKS5jdXJyZW50UmVmLCJkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtIjpgYCxhczp0LmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJhcmlhLWRpc2FibGVkIjpOKHIpLmRpc2FibGVkLnZhbHVlfHx2b2lkIDAsImFyaWEtZXhwYW5kZWQiOk4ocikub3Blbi52YWx1ZXx8ITEsImRhdGEtZGlzYWJsZWQiOk4ocikuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpOKG4pLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjpOKHIpLmRhdGFTdGF0ZS52YWx1ZSxkaXNhYmxlZDpOKHIpLmRpc2FibGVkLnZhbHVlLG9uQ2xpY2s6aX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGlkYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtZGlzYWJsZWRgLGBhcmlhLWV4cGFuZGVkYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgXSkpfX0pLENiPWBkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtYDtmdW5jdGlvbiB3YihlPXt9KXtsZXR7a2V5OnQ9YGAsaXNQcm92aWRlcjpuPSExfT1lLHI9YCR7dH1Db2xsZWN0aW9uUHJvdmlkZXJgLGk7bj8oaT17Y29sbGVjdGlvblJlZjpNKCksaXRlbU1hcDpNKG5ldyBNYXApfSx2cihyLGkpKTppPXlyKHIpO2xldCBhPShlPSExKT0+e2xldCB0PWkuY29sbGVjdGlvblJlZi52YWx1ZTtpZighdClyZXR1cm5bXTtsZXQgbj1BcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChgWyR7Q2J9XWApKSxyPW5ldyBNYXAobi5tYXAoKGUsdCk9PltlLHRdKSksYT1BcnJheS5mcm9tKGkuaXRlbU1hcC52YWx1ZS52YWx1ZXMoKSkuc29ydCgoZSx0KT0+KHIuZ2V0KGUucmVmKT8/LTEpLShyLmdldCh0LnJlZik/Py0xKSk7cmV0dXJuIGU/YTphLmZpbHRlcihlPT5lLnJlZi5kYXRhc2V0LmRpc2FibGVkIT09YGApfSxvPUYoe25hbWU6YENvbGxlY3Rpb25TbG90YCxpbmhlcml0QXR0cnM6ITEsc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1yYigpO3JldHVybiBFcihhLCgpPT57aS5jb2xsZWN0aW9uUmVmLnZhbHVlPWEudmFsdWV9KSwoKT0+RyhlYix7cmVmOnIsLi4ubn0sdCl9fSkscz1GKHtuYW1lOmBDb2xsZWN0aW9uSXRlbWAsaW5oZXJpdEF0dHJzOiExLHByb3BzOnt2YWx1ZTp7dmFsaWRhdG9yOigpPT4hMH19LHNldHVwKGUse3Nsb3RzOnQsYXR0cnM6bn0pe2xldHtwcmltaXRpdmVFbGVtZW50OnIsY3VycmVudEVsZW1lbnQ6YX09cmIoKTtyZXR1cm4gQ3IodD0+e2lmKGEudmFsdWUpe2xldCBuPXNuKGEudmFsdWUpO2kuaXRlbU1hcC52YWx1ZS5zZXQobix7cmVmOmEudmFsdWUsdmFsdWU6ZS52YWx1ZX0pLHQoKCk9PmkuaXRlbU1hcC52YWx1ZS5kZWxldGUobikpfX0pLCgpPT5HKGViLHsuLi5uLFtDYl06YGAscmVmOnJ9LHQpfX0pO3JldHVybntnZXRJdGVtczphLHJlYWN0aXZlSXRlbXM6VygoKT0+QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpKSxpdGVtTWFwU2l6ZTpXKCgpPT5pLml0ZW1NYXAudmFsdWUuc2l6ZSksQ29sbGVjdGlvblNsb3Q6byxDb2xsZWN0aW9uSXRlbTpzfX12YXIgVGI9YHJvdmluZ0ZvY3VzR3JvdXAub25FbnRyeUZvY3VzYCxFYj17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxEYj17QXJyb3dMZWZ0OmBwcmV2YCxBcnJvd1VwOmBwcmV2YCxBcnJvd1JpZ2h0OmBuZXh0YCxBcnJvd0Rvd246YG5leHRgLFBhZ2VVcDpgZmlyc3RgLEhvbWU6YGZpcnN0YCxQYWdlRG93bjpgbGFzdGAsRW5kOmBsYXN0YH07ZnVuY3Rpb24gT2IoZSx0KXtyZXR1cm4gdD09PWBydGxgP2U9PT1gQXJyb3dMZWZ0YD9gQXJyb3dSaWdodGA6ZT09PWBBcnJvd1JpZ2h0YD9gQXJyb3dMZWZ0YDplOmV9ZnVuY3Rpb24ga2IoZSx0LG4pe2xldCByPU9iKGUua2V5LG4pO2lmKCEodD09PWB2ZXJ0aWNhbGAmJltgQXJyb3dMZWZ0YCxgQXJyb3dSaWdodGBdLmluY2x1ZGVzKHIpKSYmISh0PT09YGhvcml6b250YWxgJiZbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhyKSkpcmV0dXJuIERiW3JdfWZ1bmN0aW9uIEFiKGUsdD0hMSl7bGV0IG49c3koKTtmb3IobGV0IHIgb2YgZSlpZihyPT09bnx8KHIuZm9jdXMoe3ByZXZlbnRTY3JvbGw6dH0pLHN5KCkhPT1uKSlyZXR1cm59ZnVuY3Rpb24gamIoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbTWIsTmJdPW95KGBSb3ZpbmdGb2N1c0dyb3VwYCksUGI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0dyb3VwYCxwcm9wczp7b3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sY3VycmVudFRhYlN0b3BJZDp7dHlwZTpbU3RyaW5nLG51bGxdLHJlcXVpcmVkOiExfSxkZWZhdWx0Q3VycmVudFRhYlN0b3BJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYGVudHJ5Rm9jdXNgLGB1cGRhdGU6Y3VycmVudFRhYlN0b3BJZGBdLHNldHVwKGUse2V4cG9zZTp0LGVtaXQ6bn0pe2xldCByPWUsaT1uLHtsb29wOmEsb3JpZW50YXRpb246byxkaXI6c309eW4ociksYz1VeShzKSxsPUl5KHIsYGN1cnJlbnRUYWJTdG9wSWRgLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRDdXJyZW50VGFiU3RvcElkLHBhc3NpdmU6ci5jdXJyZW50VGFiU3RvcElkPT09dm9pZCAwfSksdT1NKCExKSxkPU0oITEpLGY9TSgwKSx7Z2V0SXRlbXM6cCxDb2xsZWN0aW9uU2xvdDptfT13Yih7aXNQcm92aWRlcjohMH0pO2Z1bmN0aW9uIGgoZSl7bGV0IHQ9IWQudmFsdWU7aWYoZS5jdXJyZW50VGFyZ2V0JiZlLnRhcmdldD09PWUuY3VycmVudFRhcmdldCYmdCYmIXUudmFsdWUpe2xldCB0PW5ldyBDdXN0b21FdmVudChUYixFYik7aWYoZS5jdXJyZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQodCksaShgZW50cnlGb2N1c2AsdCksIXQuZGVmYXVsdFByZXZlbnRlZCl7bGV0IGU9cCgpLm1hcChlPT5lLnJlZikuZmlsdGVyKGU9PmUuZGF0YXNldC5kaXNhYmxlZCE9PWBgKTtBYihbZS5maW5kKGU9PmUuZ2V0QXR0cmlidXRlKGBkYXRhLWFjdGl2ZWApPT09YGApLGUuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1oaWdobGlnaHRlZGApPT09YGApLGUuZmluZChlPT5lLmlkPT09bC52YWx1ZSksLi4uZV0uZmlsdGVyKEJvb2xlYW4pLHIucHJldmVudFNjcm9sbE9uRW50cnlGb2N1cyl9fWQudmFsdWU9ITF9ZnVuY3Rpb24gZygpe3NldFRpbWVvdXQoKCk9PntkLnZhbHVlPSExfSwxKX1yZXR1cm4gdCh7Z2V0SXRlbXM6cH0pLE5iKHtsb29wOmEsZGlyOmMsb3JpZW50YXRpb246byxjdXJyZW50VGFiU3RvcElkOmwsb25JdGVtRm9jdXM6ZT0+e2wudmFsdWU9ZX0sb25JdGVtU2hpZnRUYWI6KCk9Pnt1LnZhbHVlPSEwfSxvbkZvY3VzYWJsZUl0ZW1BZGQ6KCk9PntmLnZhbHVlKyt9LG9uRm9jdXNhYmxlSXRlbVJlbW92ZTooKT0+e2YudmFsdWUtLX19KSwoZSx0KT0+KFIoKSxCKE4obSksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7dGFiaW5kZXg6dS52YWx1ZXx8Zi52YWx1ZT09PTA/LTE6MCwiZGF0YS1vcmllbnRhdGlvbiI6TihvKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGRpcjpOKGMpLHN0eWxlOntvdXRsaW5lOmBub25lYH0sb25Nb3VzZWRvd246dFswXXx8PWU9PmQudmFsdWU9ITAsb25Nb3VzZXVwOmcsb25Gb2N1czpoLG9uQmx1cjp0WzFdfHw9ZT0+dS52YWx1ZT0hMX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHRhYmluZGV4YCxgZGF0YS1vcmllbnRhdGlvbmAsYGFzYCxgYXMtY2hpbGRgLGBkaXJgXSldKSxfOjN9KSl9fSksRmI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0l0ZW1gLHByb3BzOnt0YWJTdG9wSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxmb2N1c2FibGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxsb3dTaGlmdEtleTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49TWIoKSxyPVl5KCksaT1XKCgpPT50LnRhYlN0b3BJZHx8ciksYT1XKCgpPT5uLmN1cnJlbnRUYWJTdG9wSWQudmFsdWU9PT1pLnZhbHVlKSx7Z2V0SXRlbXM6byxDb2xsZWN0aW9uSXRlbTpzfT13YigpO1ppKCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtQWRkKCl9KSx0YSgoKT0+e3QuZm9jdXNhYmxlJiZuLm9uRm9jdXNhYmxlSXRlbVJlbW92ZSgpfSksRXIoKCk9PnQuZm9jdXNhYmxlLChlLHQpPT57ZSE9PXQmJihlP24ub25Gb2N1c2FibGVJdGVtQWRkKCk6bi5vbkZvY3VzYWJsZUl0ZW1SZW1vdmUoKSl9KTtmdW5jdGlvbiBjKGUpe2lmKGUua2V5PT09YFRhYmAmJmUuc2hpZnRLZXkpe24ub25JdGVtU2hpZnRUYWIoKTtyZXR1cm59aWYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQpcmV0dXJuO2xldCByPWtiKGUsbi5vcmllbnRhdGlvbi52YWx1ZSxuLmRpci52YWx1ZSk7aWYociE9PXZvaWQgMCl7aWYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5fHwhdC5hbGxvd1NoaWZ0S2V5JiZlLnNoaWZ0S2V5KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGk9Wy4uLm8oKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCldO2lmKHI9PT1gbGFzdGApaS5yZXZlcnNlKCk7ZWxzZSBpZihyPT09YHByZXZgfHxyPT09YG5leHRgKXtyPT09YHByZXZgJiZpLnJldmVyc2UoKTtsZXQgdD1pLmluZGV4T2YoZS5jdXJyZW50VGFyZ2V0KTtpPW4ubG9vcC52YWx1ZT9qYihpLHQrMSk6aS5zbGljZSh0KzEpfVFuKCgpPT5BYihpKSl9fXJldHVybihlLHQpPT4oUigpLEIoTihzKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4obmIpLHt0YWJpbmRleDphLnZhbHVlPzA6LTEsImRhdGEtb3JpZW50YXRpb24iOk4obikub3JpZW50YXRpb24udmFsdWUsImRhdGEtYWN0aXZlIjplLmFjdGl2ZT9gYDp2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmUuZm9jdXNhYmxlP3ZvaWQgMDpgYCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLG9uTW91c2Vkb3duOnRbMF18fD10PT57ZS5mb2N1c2FibGU/TihuKS5vbkl0ZW1Gb2N1cyhpLnZhbHVlKTp0LnByZXZlbnREZWZhdWx0KCl9LG9uRm9jdXM6dFsxXXx8PWU9Pk4obikub25JdGVtRm9jdXMoaS52YWx1ZSksb25LZXlkb3duOmN9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0YWJpbmRleGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWFjdGl2ZWAsYGRhdGEtZGlzYWJsZWRgLGBhc2AsYGFzLWNoaWxkYF0pXSksXzozfSkpfX0pLFtJYixMYl09b3koYFRhYnNSb290YCksUmI9Rih7X19uYW1lOmBUYWJzUm9vdGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaG9yaXpvbnRhbGB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFjdGl2YXRpb25Nb2RlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBhdXRvbWF0aWNgfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse29yaWVudGF0aW9uOmksdW5tb3VudE9uSGlkZTphLGRpcjpvfT15bihuKSxzPVV5KG8pO0d5KCk7bGV0IGM9SXkobixgbW9kZWxWYWx1ZWAscix7ZGVmYXVsdFZhbHVlOm4uZGVmYXVsdFZhbHVlLHBhc3NpdmU6bi5tb2RlbFZhbHVlPT09dm9pZCAwfSksbD1NKCksdT11bihuZXcgU2V0KTtyZXR1cm4gTGIoe21vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmU9PntjLnZhbHVlPWV9LG9yaWVudGF0aW9uOmksZGlyOnMsdW5tb3VudE9uSGlkZTphLGFjdGl2YXRpb25Nb2RlOm4uYWN0aXZhdGlvbk1vZGUsYmFzZUlkOll5KHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6bCxjb250ZW50SWRzOnUscmVnaXN0ZXJDb250ZW50OmU9Pnt1LnZhbHVlPW5ldyBTZXQoWy4uLnUudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldCh1LnZhbHVlKTt0LmRlbGV0ZShlKSx1LnZhbHVlPXR9fSksKGUsdCk9PihSKCksQihOKG5iKSx7ZGlyOk4ocyksImRhdGEtb3JpZW50YXRpb24iOk4oaSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk4oYyl9KV0pLF86M30sOCxbYGRpcmAsYGRhdGEtb3JpZW50YXRpb25gLGBhcy1jaGlsZGAsYGFzYF0pKX19KTtmdW5jdGlvbiB6YihlLHQpe3JldHVybmAke2V9LXRyaWdnZXItJHt0fWB9ZnVuY3Rpb24gQmIoZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBWYj1GKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bn09R3koKSxyPUliKCksaT1XKCgpPT56YihyLmJhc2VJZCx0LnZhbHVlKSksYT1XKCgpPT5CYihyLmJhc2VJZCx0LnZhbHVlKSksbz1XKCgpPT50LnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlKSxzPU0oby52YWx1ZSk7cmV0dXJuIFppKCgpPT57ci5yZWdpc3RlckNvbnRlbnQodC52YWx1ZSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cy52YWx1ZT0hMX0pfSksZWEoKCk9PntyLnVucmVnaXN0ZXJDb250ZW50KHQudmFsdWUpfSksKGUsdCk9PihSKCksQihOKCR5KSx7cHJlc2VudDplLmZvcmNlTW91bnR8fG8udmFsdWUsImZvcmNlLW1vdW50IjpgYH0se2RlZmF1bHQ6UCgoe3ByZXNlbnQ6dH0pPT5bSChOKG5iKSx7aWQ6YS52YWx1ZSxyZWY6TihuKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLHJvbGU6YHRhYnBhbmVsYCwiZGF0YS1zdGF0ZSI6by52YWx1ZT9gYWN0aXZlYDpgaW5hY3RpdmVgLCJkYXRhLW9yaWVudGF0aW9uIjpOKHIpLm9yaWVudGF0aW9uLnZhbHVlLCJhcmlhLWxhYmVsbGVkYnkiOmkudmFsdWUsaGlkZGVuOiF0LHRhYmluZGV4OmAwYCxzdHlsZTpnZSh7YW5pbWF0aW9uRHVyYXRpb246cy52YWx1ZT9gMHNgOnZvaWQgMH0pfSx7ZGVmYXVsdDpQKCgpPT5bIU4ocikudW5tb3VudE9uSGlkZS52YWx1ZXx8dD9JKGUuJHNsb3RzLGBkZWZhdWx0YCx7a2V5OjB9KTpUcyhgdi1pZmAsITApXSksXzoyfSwxMDMyLFtgaWRgLGBhcy1jaGlsZGAsYGFzYCxgZGF0YS1zdGF0ZWAsYGRhdGEtb3JpZW50YXRpb25gLGBhcmlhLWxhYmVsbGVkYnlgLGBoaWRkZW5gLGBzdHlsZWBdKV0pLF86M30sOCxbYHByZXNlbnRgXSkpfX0pLEhiPUYoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0e2xvb3A6dH09eW4oZSkse2ZvcndhcmRSZWY6bixjdXJyZW50RWxlbWVudDpyfT1HeSgpLGk9SWIoKTtyZXR1cm4gaS50YWJzTGlzdD1yLChlLHIpPT4oUigpLEIoTihQYikseyJhcy1jaGlsZCI6YGAsb3JpZW50YXRpb246TihpKS5vcmllbnRhdGlvbi52YWx1ZSxkaXI6TihpKS5kaXIudmFsdWUsbG9vcDpOKHQpfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7cmVmOk4obikscm9sZTpgdGFibGlzdGAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcywiYXJpYS1vcmllbnRhdGlvbiI6TihpKS5vcmllbnRhdGlvbi52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgLGBhcmlhLW9yaWVudGF0aW9uYF0pXSksXzozfSw4LFtgb3JpZW50YXRpb25gLGBkaXJgLGBsb29wYF0pKX19KSxVYj1GKHtfX25hbWU6YFRhYnNUcmlnZ2VyYCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZSx7Zm9yd2FyZFJlZjpufT1HeSgpLHI9SWIoKSxpPVcoKCk9PnpiKHIuYmFzZUlkLHQudmFsdWUpKSxhPVcoKCk9PnIuY29udGVudElkcy52YWx1ZS5oYXModC52YWx1ZSk/QmIoci5iYXNlSWQsdC52YWx1ZSk6dm9pZCAwKSxvPVcoKCk9PnQudmFsdWU9PT1yLm1vZGVsVmFsdWUudmFsdWUpO3JldHVybihlLHQpPT4oUigpLEIoTihGYikseyJhcy1jaGlsZCI6YGAsZm9jdXNhYmxlOiFlLmRpc2FibGVkLGFjdGl2ZTpvLnZhbHVlfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7aWQ6aS52YWx1ZSxyZWY6TihuKSxyb2xlOmB0YWJgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLXNlbGVjdGVkIjpvLnZhbHVlP2B0cnVlYDpgZmFsc2VgLCJhcmlhLWNvbnRyb2xzIjphLnZhbHVlLCJkYXRhLXN0YXRlIjpvLnZhbHVlP2BhY3RpdmVgOmBpbmFjdGl2ZWAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwiZGF0YS1kaXNhYmxlZCI6ZS5kaXNhYmxlZD9gYDp2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOk4ocikub3JpZW50YXRpb24udmFsdWUsb25Nb3VzZWRvd246dFswXXx8PWl1KHQ9PnshZS5kaXNhYmxlZCYmdC5jdHJsS2V5PT09ITE/TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpOnQucHJldmVudERlZmF1bHQoKX0sW2BsZWZ0YF0pLG9uS2V5ZG93bjp0WzFdfHw9b3UodD0+TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpLFtgZW50ZXJgLGBzcGFjZWBdKSxvbkZvY3VzOnRbMl18fD0oKT0+e2xldCB0PU4ocikuYWN0aXZhdGlvbk1vZGUhPT1gbWFudWFsYDshby52YWx1ZSYmIWUuZGlzYWJsZWQmJnQmJk4ocikuY2hhbmdlTW9kZWxWYWx1ZShlLnZhbHVlKX19LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BpZGAsYHR5cGVgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1zZWxlY3RlZGAsYGFyaWEtY29udHJvbHNgLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1vcmllbnRhdGlvbmBdKV0pLF86M30sOCxbYGZvY3VzYWJsZWAsYGFjdGl2ZWBdKSl9fSksV2I9Rih7X19uYW1lOmBCdXR0b25gLHByb3BzOnt2YXJpYW50Ont9LHNpemU6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7ZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9PihSKCksQihOKG5iKSx7ImRhdGEtc2xvdCI6YGJ1dHRvbmAsImRhdGEtdmFyaWFudCI6ZS52YXJpYW50LCJkYXRhLXNpemUiOmUuc2l6ZSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGNsYXNzOk8oTihZdikoTihHYikoe3ZhcmlhbnQ6ZS52YXJpYW50LHNpemU6ZS5zaXplfSksdC5jbGFzcykpfSx7ZGVmYXVsdDpQKCgpPT5bSShuLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgZGF0YS12YXJpYW50YCxgZGF0YS1zaXplYCxgYXNgLGBhcy1jaGlsZGAsYGNsYXNzYF0pKX19KSxHYj1DXyhgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBiZy1jbGlwLXBhZGRpbmcgdGV4dC1zbSBmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIGFjdGl2ZTpub3QtYXJpYS1baGFzcG9wdXBdOnRyYW5zbGF0ZS15LXB4IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZ3JvdXAvYnV0dG9uIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgc2VsZWN0LW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLG91dGxpbmU6YGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwIGFyaWEtZXhwYW5kZWQ6Ymctc2Vjb25kYXJ5IGFyaWEtZXhwYW5kZWQ6dGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLGRlc3RydWN0aXZlOmBiZy1kZXN0cnVjdGl2ZS8xMCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMCB0ZXh0LWRlc3RydWN0aXZlIGZvY3VzLXZpc2libGU6Ym9yZGVyLWRlc3RydWN0aXZlLzQwIGRhcms6aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMzBgLGxpbms6YHRleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lYH0sc2l6ZTp7ZGVmYXVsdDpgaC04IGdhcC0xLjUgcHgtMi41IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTIgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0yYCx4czpgaC02IGdhcC0xIHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSBweC0yIHRleHQteHMgaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLHNtOmBoLTcgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIHB4LTIuNSB0ZXh0LVswLjhyZW1dIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEuNSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS0zLjVgLGxnOmBoLTkgZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLGljb246YHNpemUtOGAsImljb24teHMiOmBzaXplLTYgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLCJpY29uLXNtIjpgc2l6ZS03IHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEycHgpXSBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZ2AsImljb24tbGciOmBzaXplLTlgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YCxzaXplOmBkZWZhdWx0YH19KSxLYj1bYGRhdGEtc2l6ZWBdLHFiPUYoe19fbmFtZTpgQ2FyZGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19LHNpemU6e2RlZmF1bHQ6YGRlZmF1bHRgfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZGAsImRhdGEtc2l6ZSI6ZS5zaXplLGNsYXNzOk8oTihZdikoYHJpbmctZm9yZWdyb3VuZC8xMCBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kIGdhcC00IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXhsIHB5LTQgdGV4dC1zbSByaW5nLTEgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1mb290ZXJdOnBiLTAgaGFzLVs+aW1nOmZpcnN0LWNoaWxkXTpwdC0wIGRhdGEtW3NpemU9c21dOmdhcC0zIGRhdGEtW3NpemU9c21dOnB5LTMgZGF0YS1bc2l6ZT1zbV06aGFzLWRhdGEtW3Nsb3Q9Y2FyZC1mb290ZXJdOnBiLTAgKjpbaW1nOmZpcnN0LWNoaWxkXTpyb3VuZGVkLXQteGwgKjpbaW1nOmxhc3QtY2hpbGRdOnJvdW5kZWQtYi14bCBncm91cC9jYXJkIGZsZXggZmxleC1jb2xgLHQuY2xhc3MpKX0sW0kobi4kc2xvdHMsYGRlZmF1bHRgKV0sMTAsS2IpKX19KSxKYj1GKHtfX25hbWU6YENhcmRDb250ZW50YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtY29udGVudGAsY2xhc3M6TyhOKFl2KShgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTNgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFliPUYoe19fbmFtZTpgQ2FyZERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTihZdikoYHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxYYj1GKHtfX25hbWU6YENhcmRIZWFkZXJgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1oZWFkZXJgLGNsYXNzOk8oTihZdikoYGdhcC0xIHJvdW5kZWQtdC14bCBweC00IGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6cHgtMyBbLmJvcmRlci1iXTpwYi00IGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6Wy5ib3JkZXItYl06cGItMyBncm91cC9jYXJkLWhlYWRlciBAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBpdGVtcy1zdGFydCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10gaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1kZXNjcmlwdGlvbl06Z3JpZC1yb3dzLVthdXRvX2F1dG9dYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxaYj1GKHtfX25hbWU6YENhcmRUaXRsZWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLXRpdGxlYCxjbGFzczpPKE4oWXYpKGB0ZXh0LWJhc2UgbGVhZGluZy1zbnVnIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6dGV4dC1zbSBmb250LWhlYWRpbmdgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFFiPUYoe19fbmFtZTpgSW5wdXRgLHByb3BzOntkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj1JeShuLGBtb2RlbFZhbHVlYCx0LHtwYXNzaXZlOiEwLGRlZmF1bHRWYWx1ZTpuLmRlZmF1bHRWYWx1ZX0pO3JldHVybihlLHQpPT5ncigoUigpLHooYGlucHV0YCx7Im9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKHIpP3IudmFsdWU9ZTpudWxsLCJkYXRhLXNsb3QiOmBpbnB1dGAsY2xhc3M6TyhOKFl2KShgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGRpc2FibGVkOmJnLWlucHV0LzUwIGRhcms6ZGlzYWJsZWQ6YmctaW5wdXQvODAgaC04IHJvdW5kZWQtbGcgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBweS0xIHRleHQtYmFzZSB0cmFuc2l0aW9uLWNvbG9ycyBmaWxlOmgtNiBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIG1kOnRleHQtc20gdy1mdWxsIG1pbi13LTAgb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwYCxuLmNsYXNzKSl9LG51bGwsMikpLFtbV2wsTihyKV1dKX19KSwkYj1gbGxtZ3dBZG1pbktleWA7ZnVuY3Rpb24gZXgoKXt0cnl7cmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJGIpPz9gYH1jYXRjaHtyZXR1cm5gYH19ZnVuY3Rpb24gdHgoZSl7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJGIsZSl9Y2F0Y2h7fX1mdW5jdGlvbiBueCgpe3RyeXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCRiKX1jYXRjaHt9fXZhciByeD10XyhgYXV0aGAse3N0YXRlOigpPT4oe2FwaUtleTpleCgpLGVycm9yOmBgfSksZ2V0dGVyczp7aXNBdXRoZW50aWNhdGVkOmU9PmUuYXBpS2V5IT09YGB9LGFjdGlvbnM6e3N1Ym1pdChlKXtlJiYodGhpcy5hcGlLZXk9ZSx0aGlzLmVycm9yPWBgLHR4KGUpKX0scmVqZWN0KGUpe3RoaXMuYXBpS2V5PWBgLHRoaXMuZXJyb3I9ZSxueCgpfX19KSxpeD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXR1cztjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLHRoaXMubmFtZT1gQWRtaW5BcGlFcnJvcmAsdGhpcy5zdGF0dXM9dH19O2FzeW5jIGZ1bmN0aW9uIGF4KGUsdCl7bGV0IG49YCR7dH06IEhUVFAgJHtlLnN0YXR1c31gO3RyeXtyZXR1cm4oYXdhaXQgZS5qc29uKCkpLmVycm9yPy5tZXNzYWdlfHxufWNhdGNoe3JldHVybiBufX1hc3luYyBmdW5jdGlvbiBveChlKXtsZXQgdD1yeCgpLG49dC5hcGlLZXkscj1hd2FpdCBmZXRjaChlLHtjcmVkZW50aWFsczpgc2FtZS1vcmlnaW5gLGhlYWRlcnM6bj97IngtYXBpLWtleSI6bn06e319KTtpZighci5vayl7bGV0IGk9YXdhaXQgYXgocixlKTt0aHJvdyhyLnN0YXR1cz09PTQwMXx8ci5zdGF0dXM9PT00MDMpJiZ0LmFwaUtleT09PW4mJnQucmVqZWN0KGBpbnZhbGlkIGtleSwgb3Igbm90IGFuIGFkbWluYCksbmV3IGl4KGksci5zdGF0dXMpfXJldHVybiBhd2FpdCByLmpzb24oKX12YXIgc3g9NWUzLGN4PXRfKGBkYXNoYm9hcmRgLHtzdGF0ZTooKT0+KHtvdmVydmlldzpudWxsLHVzYWdlOm51bGwsdGFyZ2V0czpudWxsLGxhc3RVcGRhdGVkOm51bGwsZXJyb3I6YGAsdGltZXI6dm9pZCAwLHJlZnJlc2hpbmc6ITF9KSxhY3Rpb25zOnthc3luYyByZWZyZXNoKCl7aWYocngoKS5pc0F1dGhlbnRpY2F0ZWQmJiF0aGlzLnJlZnJlc2hpbmcpe3RoaXMucmVmcmVzaGluZz0hMDt0cnl7YXdhaXQgdGhpcy5kb1JlZnJlc2goKX1maW5hbGx5e3RoaXMucmVmcmVzaGluZz0hMX19fSxhc3luYyBkb1JlZnJlc2goKXtsZXRbZSx0LG5dPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbb3goYC9hZG1pbi9hcGkvb3ZlcnZpZXdgKSxveChgL2FkbWluL2FwaS91c2FnZWApLG94KGAvYWRtaW4vYXBpL3RhcmdldHNgKV0pO2Uuc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLm92ZXJ2aWV3PWUudmFsdWUpLHQuc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLnVzYWdlPXQudmFsdWUpLG4uc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLnRhcmdldHM9bi52YWx1ZSk7bGV0IHI9W107aWYoZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZyLnB1c2goe2xhYmVsOmBvdmVydmlld2AscmVhc29uOmUucmVhc29ufSksdC5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZyLnB1c2goe2xhYmVsOmB1c2FnZWAscmVhc29uOnQucmVhc29ufSksbi5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZyLnB1c2goe2xhYmVsOmB0YXJnZXRzYCxyZWFzb246bi5yZWFzb259KSxyLmxlbmd0aD09PTApe3RoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUsdGhpcy5lcnJvcj1gYDtyZXR1cm59ci5zb21lKCh7cmVhc29uOmV9KT0+ZSBpbnN0YW5jZW9mIGl4JiYoZS5zdGF0dXM9PT00MDF8fGUuc3RhdHVzPT09NDAzKSl8fChyLmxlbmd0aDwzJiYodGhpcy5sYXN0VXBkYXRlZD1uZXcgRGF0ZSksdGhpcy5lcnJvcj1yLm1hcCgoe2xhYmVsOmUscmVhc29uOnR9KT0+YCR7ZX06ICR7dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9YCkuam9pbihgOyBgKSl9LHN0YXJ0UG9sbGluZygpe3RoaXMudGltZXI9PT12b2lkIDAmJih0aGlzLnJlZnJlc2goKSx0aGlzLnRpbWVyPXNldEludGVydmFsKCgpPT52b2lkIHRoaXMucmVmcmVzaCgpLHN4KSl9fX0pLGx4PXtjbGFzczpgbXgtYXV0byBmbGV4IG1pbi1oLVs3MHZoXSBtYXgtdy1tZCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBweC00YH0sdXg9e2NsYXNzOmBmbGV4IHNpemUtMTIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeWB9LGR4PXtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTFgfSxmeD17ImFyaWEtbGFiZWxsZWRieSI6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxweD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LG14PXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0saHg9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSxneD17Y2xhc3M6YHJlbGF0aXZlYH0sX3g9KChlLHQpPT57bGV0IG49ZS5fX3ZjY09wdHN8fGU7Zm9yKGxldFtlLHJdb2YgdCluW2VdPXI7cmV0dXJuIG59KShGKHtfX25hbWU6YEF1dGhHYXRlYCxzZXR1cChlKXtsZXQgdD1yeCgpLG49Y3goKSxyPU0oYGApLGk9TSghMSksYT1NKG51bGwpLG89VygoKT0+ci52YWx1ZS50cmltKCkhPT1gYCk7ZnVuY3Rpb24gcygpe2xldCBlPXIudmFsdWU7ci52YWx1ZT1gYCx0LnN1Ym1pdChlKSxuLnJlZnJlc2goKX1mdW5jdGlvbiBjKCl7UW4oKCk9PmEudmFsdWU/LiRlbD8uZm9jdXMoKSl9cmV0dXJuIFppKGMpLEVyKCgpPT50LmVycm9yLGU9PntlJiZjKCl9KSwoZSxuKT0+e2xldCBjPWNhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUigpLHooYGRpdmAsbHgsW0goTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyYH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsdXgsW0goYyx7aWNvbjpOKGlfKSxjbGFzczpgc2l6ZS01YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLFYoYGRpdmAsZHgsW25bM118fD1WKGBzcGFuYCx7Y2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExMTSBHYXRld2F5YCwtMSksSChOKFpiKSx7Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZGB9LHtkZWZhdWx0OlAoKCk9PlsuLi5uWzJdfHw9W1UoYEFkbWluIGtleSByZXF1aXJlZGAsLTEpXV0pLF86MX0pXSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzRdfHw9W1UoYEVudGVyIGFuIGFkbWluIEFQSSBrZXkgdG8gY29udGludWUuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OlAoKCk9PltuWzEwXXx8PVYoYGgyYCx7aWQ6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBzci1vbmx5YH0sYCBIb3cgdGhpcyBrZXkgaXMgaGFuZGxlZCBgLC0xKSxWKGB1bGAsZngsW1YoYGxpYCxweCxbSChjLHtpY29uOk4odV8pLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzVdfHw9Vihgc3BhbmAsbnVsbCxgS2VwdCBvbmx5IGluIHRoaXMgdGFiJ3Mgc2Vzc2lvbiBzdG9yYWdlYCwtMSldKSxWKGBsaWAsbXgsW0goYyx7aWNvbjpOKHVfKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls2XXx8PVYoYHNwYW5gLG51bGwsYE5ldmVyIHdyaXR0ZW4gdG8gZGlza2AsLTEpXSksVihgbGlgLGh4LFtIKGMse2ljb246Tih1XyksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bN118fD1WKGBzcGFuYCxudWxsLGBTZW50IG9ubHkgdG8gdGhpcyBwYWdlJ3Mgb3duIC9hZG1pbi9hcGkvKiByZXF1ZXN0c2AsLTEpXSldKSxWKGBmb3JtYCx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgLG9uU3VibWl0Oml1KHMsW2BwcmV2ZW50YF0pfSxbVihgZGl2YCxneCxbSChOKFFiKSx7cmVmX2tleTpga2V5SW5wdXRFbGAscmVmOmEsbW9kZWxWYWx1ZTpyLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpuWzBdfHw9ZT0+ci52YWx1ZT1lLHR5cGU6aS52YWx1ZT9gdGV4dGA6YHBhc3N3b3JkYCxhdXRvY29tcGxldGU6YG9mZmAscGxhY2Vob2xkZXI6YEFQSSBrZXlgLCJhcmlhLWxhYmVsIjpgQWRtaW4gQVBJIGtleWAsImFyaWEtaW52YWxpZCI6ISFOKHQpLmVycm9yLCJhcmlhLWRlc2NyaWJlZGJ5IjpOKHQpLmVycm9yP2BhdXRoZ2F0ZS1lcnJvcmA6dm9pZCAwLGNsYXNzOk8oW2BoLTEwIHByLTEwYCx7ImF1dGhnYXRlLXNoYWtlIjpOKHQpLmVycm9yfV0pfSxudWxsLDgsW2Btb2RlbFZhbHVlYCxgdHlwZWAsYGFyaWEtaW52YWxpZGAsYGFyaWEtZGVzY3JpYmVkYnlgLGBjbGFzc2BdKSxIKE4oV2IpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCxjbGFzczpgYWJzb2x1dGUgdG9wLTEvMiByaWdodC0xLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCwiYXJpYS1sYWJlbCI6aS52YWx1ZT9gSGlkZSBrZXlgOmBTaG93IGtleWAsb25DbGljazpuWzFdfHw9ZT0+aS52YWx1ZT0haS52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0goYyx7aWNvbjppLnZhbHVlP04oX18pOk4ob18pLGNsYXNzOmBzaXplLTMuNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9LDgsW2BhcmlhLWxhYmVsYF0pXSksSChOKFdiKSx7dHlwZTpgc3VibWl0YCxjbGFzczpgdy1mdWxsYCxkaXNhYmxlZDohby52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+Wy4uLm5bOF18fD1bVShgIENvbnRpbnVlIGAsLTEpXV0pLF86MX0sOCxbYGRpc2FibGVkYF0pXSwzMiksTih0KS5lcnJvcj8oUigpLEIoTihYdikse2tleTowLGlkOmBhdXRoZ2F0ZS1lcnJvcmAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpQKCgpPT5bSChOKFF2KSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzldfHw9W1UoYEF1dGhlbnRpY2F0aW9uIGZhaWxlZGAsLTEpXV0pLF86MX0pLEgoTihadiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bVShrKE4odCkuZXJyb3IpLDEpXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KV0pfX19KSxbW2BfX3Njb3BlSWRgLGBkYXRhLXYtNGJlNmJjMDlgXV0pO2Z1bmN0aW9uIHZ4KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiB5eChlLHQpe3JldHVybiBuPT57dC5zZXRTdGF0ZSh0PT4oey4uLnQsW2VdOnZ4KG4sdFtlXSl9KSl9fWZ1bmN0aW9uIGJ4KGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24geHgoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+dHlwZW9mIGU9PWBudW1iZXJgKX1mdW5jdGlvbiBTeChlLHQpe2xldCBuPVtdLHI9ZT0+e2UuZm9yRWFjaChlPT57bi5wdXNoKGUpO2xldCBpPXQoZSk7aSE9bnVsbCYmaS5sZW5ndGgmJnIoaSl9KX07cmV0dXJuIHIoZSksbn1mdW5jdGlvbiBRKGUsdCxuKXtsZXQgcj1bXSxpO3JldHVybiBhPT57bGV0IG87bi5rZXkmJm4uZGVidWcmJihvPURhdGUubm93KCkpO2xldCBzPWUoYSk7aWYoIShzLmxlbmd0aCE9PXIubGVuZ3RofHxzLnNvbWUoKGUsdCk9PnJbdF0hPT1lKSkpcmV0dXJuIGk7cj1zO2xldCBjO2lmKG4ua2V5JiZuLmRlYnVnJiYoYz1EYXRlLm5vdygpKSxpPXQoLi4ucyksbj09bnVsbHx8bi5vbkNoYW5nZT09bnVsbHx8bi5vbkNoYW5nZShpKSxuLmtleSYmbi5kZWJ1ZyYmbiE9bnVsbCYmbi5kZWJ1ZygpKXtsZXQgZT1NYXRoLnJvdW5kKChEYXRlLm5vdygpLW8pKjEwMCkvMTAwLHQ9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jKSoxMDApLzEwMCxyPXQvMTYsaT0oZSx0KT0+e2ZvcihlPVN0cmluZyhlKTtlLmxlbmd0aDx0OyllPWAgYCtlO3JldHVybiBlfTtjb25zb2xlLmluZm8oYCVj4o+xICR7aSh0LDUpfSAvJHtpKGUsNSl9IG1zYCxgCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjb2xvcjogaHNsKCR7TWF0aC5tYXgoMCxNYXRoLm1pbigxMjAtMTIwKnIsMTIwKSl9ZGVnIDEwMCUgMzElKTtgLG4/LmtleSl9cmV0dXJuIGl9fWZ1bmN0aW9uICQoZSx0LG4scil7cmV0dXJue2RlYnVnOigpPT5lPy5kZWJ1Z0FsbD8/ZVt0XSxrZXk6ITEsb25DaGFuZ2U6cn19ZnVuY3Rpb24gQ3goZSx0LG4scil7bGV0IGk9e2lkOmAke3QuaWR9XyR7bi5pZH1gLHJvdzp0LGNvbHVtbjpuLGdldFZhbHVlOigpPT50LmdldFZhbHVlKHIpLHJlbmRlclZhbHVlOigpPT5pLmdldFZhbHVlKCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLGdldENvbnRleHQ6USgoKT0+W2Usbix0LGldLChlLHQsbixyKT0+KHt0YWJsZTplLGNvbHVtbjp0LHJvdzpuLGNlbGw6cixnZXRWYWx1ZTpyLmdldFZhbHVlLHJlbmRlclZhbHVlOnIucmVuZGVyVmFsdWV9KSwkKGUub3B0aW9ucyxgZGVidWdDZWxsc2AsYGNlbGwuZ2V0Q29udGV4dGApKX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2gocj0+e3IuY3JlYXRlQ2VsbD09bnVsbHx8ci5jcmVhdGVDZWxsKGksbix0LGUpfSx7fSksaX1mdW5jdGlvbiB3eChlLHQsbixyKXtsZXQgaT17Li4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLC4uLnR9LGE9aS5hY2Nlc3NvcktleSxvPWkuaWQ/PyhhP3R5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGw9PWBmdW5jdGlvbmA/YS5yZXBsYWNlQWxsKGAuYCxgX2ApOmEucmVwbGFjZSgvXC4vZyxgX2ApOnZvaWQgMCk/Pyh0eXBlb2YgaS5oZWFkZXI9PWBzdHJpbmdgP2kuaGVhZGVyOnZvaWQgMCkscztpZihpLmFjY2Vzc29yRm4/cz1pLmFjY2Vzc29yRm46YSYmKHM9YS5pbmNsdWRlcyhgLmApP2U9PntsZXQgdD1lO2ZvcihsZXQgZSBvZiBhLnNwbGl0KGAuYCkpdD10Py5bZV07cmV0dXJuIHR9OmU9PmVbaS5hY2Nlc3NvcktleV0pLCFvKXRocm93IEVycm9yKCk7bGV0IGM9e2lkOmAke1N0cmluZyhvKX1gLGFjY2Vzc29yRm46cyxwYXJlbnQ6cixkZXB0aDpuLGNvbHVtbkRlZjppLGNvbHVtbnM6W10sZ2V0RmxhdENvbHVtbnM6USgoKT0+WyEwXSwoKT0+W2MsLi4uYy5jb2x1bW5zPy5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSldLCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0RmxhdENvbHVtbnNgKSksZ2V0TGVhZkNvbHVtbnM6USgoKT0+W2UuX2dldE9yZGVyQ29sdW1uc0ZuKCldLGU9Pnt2YXIgdDtyZXR1cm4odD1jLmNvbHVtbnMpIT1udWxsJiZ0Lmxlbmd0aD9lKGMuY29sdW1ucy5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpOltjXX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGNvbHVtbi5nZXRMZWFmQ29sdW1uc2ApKX07Zm9yKGxldCB0IG9mIGUuX2ZlYXR1cmVzKXQuY3JlYXRlQ29sdW1uPT1udWxsfHx0LmNyZWF0ZUNvbHVtbihjLGUpO3JldHVybiBjfXZhciBUeD1gZGVidWdIZWFkZXJzYDtmdW5jdGlvbiBFeChlLHQsbil7bGV0IHI9e2lkOm4uaWQ/P3QuaWQsY29sdW1uOnQsaW5kZXg6bi5pbmRleCxpc1BsYWNlaG9sZGVyOiEhbi5pc1BsYWNlaG9sZGVyLHBsYWNlaG9sZGVySWQ6bi5wbGFjZWhvbGRlcklkLGRlcHRoOm4uZGVwdGgsc3ViSGVhZGVyczpbXSxjb2xTcGFuOjAscm93U3BhbjowLGhlYWRlckdyb3VwOm51bGwsZ2V0TGVhZkhlYWRlcnM6KCk9PntsZXQgZT1bXSx0PW49PntuLnN1YkhlYWRlcnMmJm4uc3ViSGVhZGVycy5sZW5ndGgmJm4uc3ViSGVhZGVycy5tYXAodCksZS5wdXNoKG4pfTtyZXR1cm4gdChyKSxlfSxnZXRDb250ZXh0OigpPT4oe3RhYmxlOmUsaGVhZGVyOnIsY29sdW1uOnR9KX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2godD0+e3QuY3JlYXRlSGVhZGVyPT1udWxsfHx0LmNyZWF0ZUhlYWRlcihyLGUpfSkscn12YXIgRHg9e2NyZWF0ZVRhYmxlOmU9PntlLmdldEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PntsZXQgYT1yPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxvPWk/Lm1hcChlPT5uLmZpbmQodD0+dC5pZD09PWUpKS5maWx0ZXIoQm9vbGVhbik/P1tdLHM9bi5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUuaWQpKSYmIShpIT1udWxsJiZpLmluY2x1ZGVzKGUuaWQpKSk7cmV0dXJuIE94KHQsWy4uLmEsLi4ucywuLi5vXSxlKX0sJChlLm9wdGlvbnMsVHgsYGdldEhlYWRlckdyb3Vwc2ApKSxlLmdldENlbnRlckhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PihuPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpLE94KHQsbixlLGBjZW50ZXJgKSksJChlLm9wdGlvbnMsVHgsYGdldENlbnRlckhlYWRlckdyb3Vwc2ApKSxlLmdldExlZnRIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKHQsbixyKT0+T3godCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGBsZWZ0YCksJChlLm9wdGlvbnMsVHgsYGdldExlZnRIZWFkZXJHcm91cHNgKSksZS5nZXRSaWdodEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKHQsbixyKT0+T3godCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGByaWdodGApLCQoZS5vcHRpb25zLFR4LGBnZXRSaWdodEhlYWRlckdyb3Vwc2ApKSxlLmdldEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSwkKGUub3B0aW9ucyxUeCxgZ2V0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0TGVmdEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsVHgsYGdldExlZnRGb290ZXJHcm91cHNgKSksZS5nZXRDZW50ZXJGb290ZXJHcm91cHM9USgoKT0+W2UuZ2V0Q2VudGVySGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsVHgsYGdldENlbnRlckZvb3Rlckdyb3Vwc2ApKSxlLmdldFJpZ2h0Rm9vdGVyR3JvdXBzPVEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsVHgsYGdldFJpZ2h0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0RmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLFR4LGBnZXRGbGF0SGVhZGVyc2ApKSxlLmdldExlZnRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLFR4LGBnZXRMZWZ0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksJChlLm9wdGlvbnMsVHgsYGdldENlbnRlckZsYXRIZWFkZXJzYCkpLGUuZ2V0UmlnaHRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRSaWdodEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSwkKGUub3B0aW9ucyxUeCxgZ2V0UmlnaHRGbGF0SGVhZGVyc2ApKSxlLmdldENlbnRlckxlYWZIZWFkZXJzPVEoKCk9PltlLmdldENlbnRlckZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLCQoZS5vcHRpb25zLFR4LGBnZXRDZW50ZXJMZWFmSGVhZGVyc2ApKSxlLmdldExlZnRMZWFmSGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksJChlLm9wdGlvbnMsVHgsYGdldExlZnRMZWFmSGVhZGVyc2ApKSxlLmdldFJpZ2h0TGVhZkhlYWRlcnM9USgoKT0+W2UuZ2V0UmlnaHRGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSwkKGUub3B0aW9ucyxUeCxgZ2V0UmlnaHRMZWFmSGVhZGVyc2ApKSxlLmdldExlYWZIZWFkZXJzPVEoKCk9PltlLmdldExlZnRIZWFkZXJHcm91cHMoKSxlLmdldENlbnRlckhlYWRlckdyb3VwcygpLGUuZ2V0UmlnaHRIZWFkZXJHcm91cHMoKV0sKGUsdCxuKT0+Wy4uLmVbMF0/LmhlYWRlcnM/P1tdLC4uLnRbMF0/LmhlYWRlcnM/P1tdLC4uLm5bMF0/LmhlYWRlcnM/P1tdXS5tYXAoZT0+ZS5nZXRMZWFmSGVhZGVycygpKS5mbGF0KCksJChlLm9wdGlvbnMsVHgsYGdldExlYWZIZWFkZXJzYCkpfX07ZnVuY3Rpb24gT3goZSx0LG4scil7bGV0IGk9MCxhPWZ1bmN0aW9uKGUsdCl7dD09PXZvaWQgMCYmKHQ9MSksaT1NYXRoLm1heChpLHQpLGUuZmlsdGVyKGU9PmUuZ2V0SXNWaXNpYmxlKCkpLmZvckVhY2goZT0+e3ZhciBuOyhuPWUuY29sdW1ucykhPW51bGwmJm4ubGVuZ3RoJiZhKGUuY29sdW1ucyx0KzEpfSwwKX07YShlKTtsZXQgbz1bXSxzPShlLHQpPT57bGV0IGk9e2RlcHRoOnQsaWQ6W3IsYCR7dH1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGhlYWRlcnM6W119LGE9W107ZS5mb3JFYWNoKGU9PntsZXQgbz1bLi4uYV0ucmV2ZXJzZSgpWzBdLHM9ZS5jb2x1bW4uZGVwdGg9PT1pLmRlcHRoLGMsbD0hMTtpZihzJiZlLmNvbHVtbi5wYXJlbnQ/Yz1lLmNvbHVtbi5wYXJlbnQ6KGM9ZS5jb2x1bW4sbD0hMCksbyYmbz8uY29sdW1uPT09YylvLnN1YkhlYWRlcnMucHVzaChlKTtlbHNle2xldCBpPUV4KG4sYyx7aWQ6W3IsdCxjLmlkLGU/LmlkXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGlzUGxhY2Vob2xkZXI6bCxwbGFjZWhvbGRlcklkOmw/YCR7YS5maWx0ZXIoZT0+ZS5jb2x1bW49PT1jKS5sZW5ndGh9YDp2b2lkIDAsZGVwdGg6dCxpbmRleDphLmxlbmd0aH0pO2kuc3ViSGVhZGVycy5wdXNoKGUpLGEucHVzaChpKX1pLmhlYWRlcnMucHVzaChlKSxlLmhlYWRlckdyb3VwPWl9KSxvLnB1c2goaSksdD4wJiZzKGEsdC0xKX07cyh0Lm1hcCgoZSx0KT0+RXgobixlLHtkZXB0aDppLGluZGV4OnR9KSksaS0xKSxvLnJldmVyc2UoKTtsZXQgYz1lPT5lLmZpbHRlcihlPT5lLmNvbHVtbi5nZXRJc1Zpc2libGUoKSkubWFwKGU9PntsZXQgdD0wLG49MCxyPVswXTtlLnN1YkhlYWRlcnMmJmUuc3ViSGVhZGVycy5sZW5ndGg/KHI9W10sYyhlLnN1YkhlYWRlcnMpLmZvckVhY2goZT0+e2xldHtjb2xTcGFuOm4scm93U3BhbjppfT1lO3QrPW4sci5wdXNoKGkpfSkpOnQ9MTtsZXQgaT1NYXRoLm1pbiguLi5yKTtyZXR1cm4gbis9aSxlLmNvbFNwYW49dCxlLnJvd1NwYW49bix7Y29sU3Bhbjp0LHJvd1NwYW46bn19KTtyZXR1cm4gYyhvWzBdPy5oZWFkZXJzPz9bXSksb312YXIga3g9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9e2lkOnQsaW5kZXg6cixvcmlnaW5hbDpuLGRlcHRoOmkscGFyZW50SWQ6byxfdmFsdWVzQ2FjaGU6e30sX3VuaXF1ZVZhbHVlc0NhY2hlOnt9LGdldFZhbHVlOnQ9PntpZihzLl92YWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBzLl92YWx1ZXNDYWNoZVt0XT1uLmFjY2Vzc29yRm4ocy5vcmlnaW5hbCxyKSxzLl92YWx1ZXNDYWNoZVt0XX0sZ2V0VW5pcXVlVmFsdWVzOnQ9PntpZihzLl91bmlxdWVWYWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBuLmNvbHVtbkRlZi5nZXRVbmlxdWVWYWx1ZXM/KHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdPW4uY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcyhzLm9yaWdpbmFsLHIpLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKToocy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF09W3MuZ2V0VmFsdWUodCldLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKX0scmVuZGVyVmFsdWU6dD0+cy5nZXRWYWx1ZSh0KT8/ZS5vcHRpb25zLnJlbmRlckZhbGxiYWNrVmFsdWUsc3ViUm93czphPz9bXSxnZXRMZWFmUm93czooKT0+U3gocy5zdWJSb3dzLGU9PmUuc3ViUm93cyksZ2V0UGFyZW50Um93OigpPT5zLnBhcmVudElkP2UuZ2V0Um93KHMucGFyZW50SWQsITApOnZvaWQgMCxnZXRQYXJlbnRSb3dzOigpPT57bGV0IGU9W10sdD1zO2Zvcig7Oyl7bGV0IG49dC5nZXRQYXJlbnRSb3coKTtpZighbilicmVhaztlLnB1c2gobiksdD1ufXJldHVybiBlLnJldmVyc2UoKX0sZ2V0QWxsQ2VsbHM6USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKV0sdD0+dC5tYXAodD0+Q3goZSxzLHQsdC5pZCkpLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRBbGxDZWxsc2ApKSxfZ2V0QWxsQ2VsbHNCeUNvbHVtbklkOlEoKCk9PltzLmdldEFsbENlbGxzKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmNvbHVtbi5pZF09dCxlKSx7fSksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEFsbENlbGxzQnlDb2x1bW5JZGApKX07Zm9yKGxldCB0PTA7dDxlLl9mZWF0dXJlcy5sZW5ndGg7dCsrKXtsZXQgbj1lLl9mZWF0dXJlc1t0XTtuPT1udWxsfHxuLmNyZWF0ZVJvdz09bnVsbHx8bi5jcmVhdGVSb3cocyxlKX1yZXR1cm4gc30sQXg9e2NyZWF0ZUNvbHVtbjooZSx0KT0+e2UuX2dldEZhY2V0ZWRSb3dNb2RlbD10Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKHQsZS5pZCksZS5nZXRGYWNldGVkUm93TW9kZWw9KCk9PmUuX2dldEZhY2V0ZWRSb3dNb2RlbD9lLl9nZXRGYWNldGVkUm93TW9kZWwoKTp0LmdldFByZUZpbHRlcmVkUm93TW9kZWwoKSxlLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz0oKT0+ZS5fZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz9lLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzKCk6bmV3IE1hcCxlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcz0oKT0+e2lmKGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMpcmV0dXJuIGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMoKX19fSxqeD0oZSx0LG4pPT57dmFyIHIsaTtsZXQgYT1uPT1udWxsfHwocj1uLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCk7cmV0dXJuISEoKGk9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihpPWkudG9TdHJpbmcoKSkhPW51bGwmJihpPWkudG9Mb3dlckNhc2UoKSkhPW51bGwmJmkuaW5jbHVkZXMoYSkpfTtqeC5hdXRvUmVtb3ZlPWU9PlZ4KGUpO3ZhciBNeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuISEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihyPXIudG9TdHJpbmcoKSkhPW51bGwmJnIuaW5jbHVkZXMobikpfTtNeC5hdXRvUmVtb3ZlPWU9PlZ4KGUpO3ZhciBOeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuKChyPWUuZ2V0VmFsdWUodCkpPT1udWxsfHwocj1yLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpPT09bj8udG9Mb3dlckNhc2UoKX07TnguYXV0b1JlbW92ZT1lPT5WeChlKTt2YXIgUHg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT8uaW5jbHVkZXMobik7UHguYXV0b1JlbW92ZT1lPT5WeChlKTt2YXIgRng9KGUsdCxuKT0+IW4uc29tZShuPT57dmFyIHI7cmV0dXJuISgocj1lLmdldFZhbHVlKHQpKSE9bnVsbCYmci5pbmNsdWRlcyhuKSl9KTtGeC5hdXRvUmVtb3ZlPWU9PlZ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgSXg9KGUsdCxuKT0+bi5zb21lKG49PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pKTtJeC5hdXRvUmVtb3ZlPWU9PlZ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgTHg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09PW47THguYXV0b1JlbW92ZT1lPT5WeChlKTt2YXIgUng9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09bjtSeC5hdXRvUmVtb3ZlPWU9PlZ4KGUpO3ZhciB6eD0oZSx0LG4pPT57bGV0W3IsaV09bixhPWUuZ2V0VmFsdWUodCk7cmV0dXJuIGE+PXImJmE8PWl9O3p4LnJlc29sdmVGaWx0ZXJWYWx1ZT1lPT57bGV0W3Qsbl09ZSxyPXR5cGVvZiB0PT1gbnVtYmVyYD90OnBhcnNlRmxvYXQodCksaT10eXBlb2Ygbj09YG51bWJlcmA/bjpwYXJzZUZsb2F0KG4pLGE9dD09PW51bGx8fE51bWJlci5pc05hTihyKT8tMS8wOnIsbz1uPT09bnVsbHx8TnVtYmVyLmlzTmFOKGkpPzEvMDppO2lmKGE+byl7bGV0IGU9YTthPW8sbz1lfXJldHVyblthLG9dfSx6eC5hdXRvUmVtb3ZlPWU9PlZ4KGUpfHxWeChlWzBdKSYmVngoZVsxXSk7dmFyIEJ4PXtpbmNsdWRlc1N0cmluZzpqeCxpbmNsdWRlc1N0cmluZ1NlbnNpdGl2ZTpNeCxlcXVhbHNTdHJpbmc6TngsYXJySW5jbHVkZXM6UHgsYXJySW5jbHVkZXNBbGw6RngsYXJySW5jbHVkZXNTb21lOkl4LGVxdWFsczpMeCx3ZWFrRXF1YWxzOlJ4LGluTnVtYmVyUmFuZ2U6enh9O2Z1bmN0aW9uIFZ4KGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB9dmFyIEh4PXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe2ZpbHRlckZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbkZpbHRlcnM6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5GaWx0ZXJzQ2hhbmdlOnl4KGBjb2x1bW5GaWx0ZXJzYCxlKSxmaWx0ZXJGcm9tTGVhZlJvd3M6ITEsbWF4TGVhZlJvd0ZpbHRlckRlcHRoOjEwMH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UuZ2V0QXV0b0ZpbHRlckZuPSgpPT57bGV0IG49dC5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk7cmV0dXJuIHR5cGVvZiBuPT1gc3RyaW5nYD9CeC5pbmNsdWRlc1N0cmluZzp0eXBlb2Ygbj09YG51bWJlcmA/QnguaW5OdW1iZXJSYW5nZTp0eXBlb2Ygbj09YGJvb2xlYW5gfHx0eXBlb2Ygbj09YG9iamVjdGAmJm4/QnguZXF1YWxzOkFycmF5LmlzQXJyYXkobik/QnguYXJySW5jbHVkZXM6Qngud2Vha0VxdWFsc30sZS5nZXRGaWx0ZXJGbj0oKT0+YngoZS5jb2x1bW5EZWYuZmlsdGVyRm4pP2UuY29sdW1uRGVmLmZpbHRlckZuOmUuY29sdW1uRGVmLmZpbHRlckZuPT09YGF1dG9gP2UuZ2V0QXV0b0ZpbHRlckZuKCk6dC5vcHRpb25zLmZpbHRlckZucz8uW2UuY29sdW1uRGVmLmZpbHRlckZuXT8/QnhbZS5jb2x1bW5EZWYuZmlsdGVyRm5dLGUuZ2V0Q2FuRmlsdGVyPSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlQ29sdW1uRmlsdGVyPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uRmlsdGVycz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmISFlLmFjY2Vzc29yRm4sZS5nZXRJc0ZpbHRlcmVkPSgpPT5lLmdldEZpbHRlckluZGV4KCk+LTEsZS5nZXRGaWx0ZXJWYWx1ZT0oKT0+e3ZhciBuO3JldHVybihuPXQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzKT09bnVsbHx8KG49bi5maW5kKHQ9PnQuaWQ9PT1lLmlkKSk9PW51bGw/dm9pZCAwOm4udmFsdWV9LGUuZ2V0RmlsdGVySW5kZXg9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzPy5maW5kSW5kZXgodD0+dC5pZD09PWUuaWQpPz8tMSxlLnNldEZpbHRlclZhbHVlPW49Pnt0LnNldENvbHVtbkZpbHRlcnModD0+e2xldCByPWUuZ2V0RmlsdGVyRm4oKSxpPXQ/LmZpbmQodD0+dC5pZD09PWUuaWQpLGE9dngobixpP2kudmFsdWU6dm9pZCAwKTtpZihVeChyLGEsZSkpcmV0dXJuIHQ/LmZpbHRlcih0PT50LmlkIT09ZS5pZCk/P1tdO2xldCBvPXtpZDplLmlkLHZhbHVlOmF9O3JldHVybiBpP3Q/Lm1hcCh0PT50LmlkPT09ZS5pZD9vOnQpPz9bXTp0IT1udWxsJiZ0Lmxlbmd0aD9bLi4udCxvXTpbb119KX19LGNyZWF0ZVJvdzooZSx0KT0+e2UuY29sdW1uRmlsdGVycz17fSxlLmNvbHVtbkZpbHRlcnNNZXRhPXt9fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5GaWx0ZXJzPXQ9PntsZXQgbj1lLmdldEFsbExlYWZDb2x1bW5zKCk7ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShlPT52eCh0LGUpPy5maWx0ZXIoZT0+e2xldCB0PW4uZmluZCh0PT50LmlkPT09ZS5pZCk7cmV0dXJuISh0JiZVeCh0LmdldEZpbHRlckZuKCksZS52YWx1ZSx0KSl9KSl9LGUucmVzZXRDb2x1bW5GaWx0ZXJzPXQ9PntlLnNldENvbHVtbkZpbHRlcnModD9bXTplLmluaXRpYWxTdGF0ZT8uY29sdW1uRmlsdGVycz8/W10pfSxlLmdldFByZUZpbHRlcmVkUm93TW9kZWw9KCk9PmUuZ2V0Q29yZVJvd01vZGVsKCksZS5nZXRGaWx0ZXJlZFJvd01vZGVsPSgpPT4oIWUuX2dldEZpbHRlcmVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsJiYoZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmlsdGVyZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEZpbHRlcmVkUm93TW9kZWw/ZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCk6ZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCgpKX19O2Z1bmN0aW9uIFV4KGUsdCxuKXtyZXR1cm4oZSYmZS5hdXRvUmVtb3ZlP2UuYXV0b1JlbW92ZSh0LG4pOiExKXx8dD09PXZvaWQgMHx8dHlwZW9mIHQ9PWBzdHJpbmdgJiYhdH12YXIgV3g9e3N1bTooZSx0LG4pPT5uLnJlZHVjZSgodCxuKT0+e2xldCByPW4uZ2V0VmFsdWUoZSk7cmV0dXJuIHQrKHR5cGVvZiByPT1gbnVtYmVyYD9yOjApfSwwKSxtaW46KGUsdCxuKT0+e2xldCByO3JldHVybiBuLmZvckVhY2godD0+e2xldCBuPXQuZ2V0VmFsdWUoZSk7biE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pfSkscn0sbWF4OihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LGV4dGVudDooZSx0LG4pPT57bGV0IHIsaTtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPT09dm9pZCAwP24+PW4mJihyPWk9bik6KHI+biYmKHI9biksaTxuJiYoaT1uKSkpfSksW3IsaV19LG1lYW46KGUsdCk9PntsZXQgbj0wLHI9MDtpZih0LmZvckVhY2godD0+e2xldCBpPXQuZ2V0VmFsdWUoZSk7aSE9bnVsbCYmKGk9K2kpPj1pJiYoKytuLHIrPWkpfSksbilyZXR1cm4gci9ufSxtZWRpYW46KGUsdCk9PntpZighdC5sZW5ndGgpcmV0dXJuO2xldCBuPXQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpO2lmKCF4eChuKSlyZXR1cm47aWYobi5sZW5ndGg9PT0xKXJldHVybiBuWzBdO2xldCByPU1hdGguZmxvb3Iobi5sZW5ndGgvMiksaT1uLnNvcnQoKGUsdCk9PmUtdCk7cmV0dXJuIG4ubGVuZ3RoJTI9PTA/KGlbci0xXStpW3JdKS8yOmlbcl19LHVuaXF1ZTooZSx0KT0+QXJyYXkuZnJvbShuZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS52YWx1ZXMoKSksdW5pcXVlQ291bnQ6KGUsdCk9Pm5ldyBTZXQodC5tYXAodD0+dC5nZXRWYWx1ZShlKSkpLnNpemUsY291bnQ6KGUsdCk9PnQubGVuZ3RofSxHeD17Z2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHthZ2dyZWdhdGVkQ2VsbDplPT57dmFyIHQ7cmV0dXJuKCh0PWUuZ2V0VmFsdWUoKSk9PW51bGx8fHQudG9TdHJpbmc9PW51bGw/dm9pZCAwOnQudG9TdHJpbmcoKSk/P251bGx9LGFnZ3JlZ2F0aW9uRm46YGF1dG9gfSksZ2V0SW5pdGlhbFN0YXRlOmU9Pih7Z3JvdXBpbmc6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Hcm91cGluZ0NoYW5nZTp5eChgZ3JvdXBpbmdgLGUpLGdyb3VwZWRDb2x1bW5Nb2RlOmByZW9yZGVyYH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlR3JvdXBpbmc9KCk9Pnt0LnNldEdyb3VwaW5nKHQ9PnQhPW51bGwmJnQuaW5jbHVkZXMoZS5pZCk/dC5maWx0ZXIodD0+dCE9PWUuaWQpOlsuLi50Pz9bXSxlLmlkXSl9LGUuZ2V0Q2FuR3JvdXA9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nPz8hMCkmJighIWUuYWNjZXNzb3JGbnx8ISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKSxlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmNsdWRlcyhlLmlkKSxlLmdldEdyb3VwZWRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmRleE9mKGUuaWQpLGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5Hcm91cCgpO3JldHVybigpPT57dCYmZS50b2dnbGVHcm91cGluZygpfX0sZS5nZXRBdXRvQWdncmVnYXRpb25Gbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO2lmKHR5cGVvZiBuPT1gbnVtYmVyYClyZXR1cm4gV3guc3VtO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PWBbb2JqZWN0IERhdGVdYClyZXR1cm4gV3guZXh0ZW50fSxlLmdldEFnZ3JlZ2F0aW9uRm49KCk9PntpZighZSl0aHJvdyBFcnJvcigpO3JldHVybiBieChlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuKT9lLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuOmUuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm49PT1gYXV0b2A/ZS5nZXRBdXRvQWdncmVnYXRpb25GbigpOnQub3B0aW9ucy5hZ2dyZWdhdGlvbkZucz8uW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dPz9XeFtlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldEdyb3VwaW5nPXQ9PmUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Hcm91cGluZ0NoYW5nZSh0KSxlLnJlc2V0R3JvdXBpbmc9dD0+e2Uuc2V0R3JvdXBpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uZ3JvdXBpbmc/P1tdKX0sZS5nZXRQcmVHcm91cGVkUm93TW9kZWw9KCk9PmUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLGUuZ2V0R3JvdXBlZFJvd01vZGVsPSgpPT4oIWUuX2dldEdyb3VwZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEdyb3VwZWRSb3dNb2RlbCYmKGUuX2dldEdyb3VwZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0R3JvdXBlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsR3JvdXBpbmd8fCFlLl9nZXRHcm91cGVkUm93TW9kZWw/ZS5nZXRQcmVHcm91cGVkUm93TW9kZWwoKTplLl9nZXRHcm91cGVkUm93TW9kZWwoKSl9LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0SXNHcm91cGVkPSgpPT4hIWUuZ3JvdXBpbmdDb2x1bW5JZCxlLmdldEdyb3VwaW5nVmFsdWU9bj0+e2lmKGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl07bGV0IHI9dC5nZXRDb2x1bW4obik7cmV0dXJuIHIhPW51bGwmJnIuY29sdW1uRGVmLmdldEdyb3VwaW5nVmFsdWU/KGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl09ci5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZShlLm9yaWdpbmFsKSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW25dKTplLmdldFZhbHVlKG4pfSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlPXt9fSxjcmVhdGVDZWxsOihlLHQsbixyKT0+e2UuZ2V0SXNHcm91cGVkPSgpPT50LmdldElzR3JvdXBlZCgpJiZ0LmlkPT09bi5ncm91cGluZ0NvbHVtbklkLGUuZ2V0SXNQbGFjZWhvbGRlcj0oKT0+IWUuZ2V0SXNHcm91cGVkKCkmJnQuZ2V0SXNHcm91cGVkKCksZS5nZXRJc0FnZ3JlZ2F0ZWQ9KCk9Pnt2YXIgdDtyZXR1cm4hZS5nZXRJc0dyb3VwZWQoKSYmIWUuZ2V0SXNQbGFjZWhvbGRlcigpJiYhISgodD1uLnN1YlJvd3MpIT1udWxsJiZ0Lmxlbmd0aCl9fX07ZnVuY3Rpb24gS3goZSx0LG4pe2lmKCEodCE9bnVsbCYmdC5sZW5ndGgpfHwhbilyZXR1cm4gZTtsZXQgcj1lLmZpbHRlcihlPT4hdC5pbmNsdWRlcyhlLmlkKSk7cmV0dXJuIG49PT1gcmVtb3ZlYD9yOlsuLi50Lm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksLi4ucl19dmFyIHF4PXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtjb2x1bW5PcmRlcjpbXSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtbk9yZGVyQ2hhbmdlOnl4KGBjb2x1bW5PcmRlcmAsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEluZGV4PVEoZT0+W2lTKHQsZSldLHQ9PnQuZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSwkKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0SW5kZXhgKSksZS5nZXRJc0ZpcnN0Q29sdW1uPW49PmlTKHQsbilbMF0/LmlkPT09ZS5pZCxlLmdldElzTGFzdENvbHVtbj1uPT57bGV0IHI9aVModCxuKTtyZXR1cm4gcltyLmxlbmd0aC0xXT8uaWQ9PT1lLmlkfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uT3JkZXI9dD0+ZS5vcHRpb25zLm9uQ29sdW1uT3JkZXJDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5PcmRlcj10PT57ZS5zZXRDb2x1bW5PcmRlcih0P1tdOmUuaW5pdGlhbFN0YXRlLmNvbHVtbk9yZGVyPz9bXSl9LGUuX2dldE9yZGVyQ29sdW1uc0ZuPVEoKCk9PltlLmdldFN0YXRlKCkuY29sdW1uT3JkZXIsZS5nZXRTdGF0ZSgpLmdyb3VwaW5nLGUub3B0aW9ucy5ncm91cGVkQ29sdW1uTW9kZV0sKGUsdCxuKT0+cj0+e2xldCBpPVtdO2lmKCEoZSE9bnVsbCYmZS5sZW5ndGgpKWk9cjtlbHNle2xldCB0PVsuLi5lXSxuPVsuLi5yXTtmb3IoO24ubGVuZ3RoJiZ0Lmxlbmd0aDspe2xldCBlPXQuc2hpZnQoKSxyPW4uZmluZEluZGV4KHQ9PnQuaWQ9PT1lKTtyPi0xJiZpLnB1c2gobi5zcGxpY2UociwxKVswXSl9aT1bLi4uaSwuLi5uXX1yZXR1cm4gS3goaSx0LG4pfSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYF9nZXRPcmRlckNvbHVtbnNGbmApKX19LEp4PSgpPT4oe2xlZnQ6W10scmlnaHQ6W119KSxZeD17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uUGlubmluZzpKeCgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uUGlubmluZ0NoYW5nZTp5eChgY29sdW1uUGlubmluZ2AsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLnBpbj1uPT57bGV0IHI9ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKS5maWx0ZXIoQm9vbGVhbik7dC5zZXRDb2x1bW5QaW5uaW5nKGU9Pm49PT1gcmlnaHRgP3tsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OlsuLi4oZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSksLi4ucl19Om49PT1gbGVmdGA/e2xlZnQ6Wy4uLihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX06e2xlZnQ6KGU/LmxlZnQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSkscmlnaHQ6KGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT5lLmdldExlYWZDb2x1bW5zKCkuc29tZShlPT4oZS5jb2x1bW5EZWYuZW5hYmxlUGlubmluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtblBpbm5pbmc/P3Qub3B0aW9ucy5lbmFibGVQaW5uaW5nPz8hMCkpLGUuZ2V0SXNQaW5uZWQ9KCk9PntsZXQgbj1lLmdldExlYWZDb2x1bW5zKCkubWFwKGU9PmUuaWQpLHtsZWZ0OnIscmlnaHQ6aX09dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcsYT1uLnNvbWUoZT0+cj8uaW5jbHVkZXMoZSkpLG89bi5zb21lKGU9Pmk/LmluY2x1ZGVzKGUpKTtyZXR1cm4gYT9gbGVmdGA6bz9gcmlnaHRgOiExfSxlLmdldFBpbm5lZEluZGV4PSgpPT57dmFyIG47bGV0IHI9ZS5nZXRJc1Bpbm5lZCgpO3JldHVybiByPygobj10LmdldFN0YXRlKCkuY29sdW1uUGlubmluZyk9PW51bGx8fChuPW5bcl0pPT1udWxsP3ZvaWQgMDpuLmluZGV4T2YoZS5pZCkpPz8tMTowfX0sY3JlYXRlUm93OihlLHQpPT57ZS5nZXRDZW50ZXJWaXNpYmxlQ2VsbHM9USgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQsbik9PntsZXQgcj1bLi4udD8/W10sLi4ubj8/W11dO3JldHVybiBlLmZpbHRlcihlPT4hci5pbmNsdWRlcyhlLmNvbHVtbi5pZCkpfSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0Q2VudGVyVmlzaWJsZUNlbGxzYCkpLGUuZ2V0TGVmdFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmNvbHVtbi5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbikubWFwKGU9Pih7Li4uZSxwb3NpdGlvbjpgbGVmdGB9KSksJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldExlZnRWaXNpYmxlQ2VsbHNgKSksZS5nZXRSaWdodFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YHJpZ2h0YH0pKSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0UmlnaHRWaXNpYmxlQ2VsbHNgKSl9LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtblBpbm5pbmc9dD0+ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZSh0KSxlLnJlc2V0Q29sdW1uUGlubmluZz10PT5lLnNldENvbHVtblBpbm5pbmcodD9KeCgpOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5QaW5uaW5nPz9KeCgpKSxlLmdldElzU29tZUNvbHVtbnNQaW5uZWQ9dD0+e2xldCBuPWUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nO3JldHVybiB0PyEhblt0XT8ubGVuZ3RoOiEhKG4ubGVmdD8ubGVuZ3RofHxuLnJpZ2h0Py5sZW5ndGgpfSxlLmdldExlZnRMZWFmQ29sdW1ucz1RKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldExlZnRMZWFmQ29sdW1uc2ApKSxlLmdldFJpZ2h0TGVhZkNvbHVtbnM9USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSwkKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0UmlnaHRMZWFmQ29sdW1uc2ApKSxlLmdldENlbnRlckxlYWZDb2x1bW5zPVEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCxuKT0+e2xldCByPVsuLi50Pz9bXSwuLi5uPz9bXV07cmV0dXJuIGUuZmlsdGVyKGU9PiFyLmluY2x1ZGVzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldENlbnRlckxlYWZDb2x1bW5zYCkpfX07ZnVuY3Rpb24gWHgoZSl7cmV0dXJuIGV8fCh0eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwpfXZhciBaeD17c2l6ZToxNTAsbWluU2l6ZToyMCxtYXhTaXplOjIqKjUzLTF9LFF4PSgpPT4oe3N0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxpc1Jlc2l6aW5nQ29sdW1uOiExLGNvbHVtblNpemluZ1N0YXJ0OltdfSksJHg9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Plp4LGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblNpemluZzp7fSxjb2x1bW5TaXppbmdJbmZvOlF4KCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7Y29sdW1uUmVzaXplTW9kZTpgb25FbmRgLGNvbHVtblJlc2l6ZURpcmVjdGlvbjpgbHRyYCxvbkNvbHVtblNpemluZ0NoYW5nZTp5eChgY29sdW1uU2l6aW5nYCxlKSxvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6eXgoYGNvbHVtblNpemluZ0luZm9gLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRTaXplPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ1tlLmlkXTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZS5jb2x1bW5EZWYubWluU2l6ZT8/WngubWluU2l6ZSxuPz9lLmNvbHVtbkRlZi5zaXplPz9aeC5zaXplKSxlLmNvbHVtbkRlZi5tYXhTaXplPz9aeC5tYXhTaXplKX0sZS5nZXRTdGFydD1RKGU9PltlLGlTKHQsZSksdC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ10sKHQsbik9Pm4uc2xpY2UoMCxlLmdldEluZGV4KHQpKS5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCksJCh0Lm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldFN0YXJ0YCkpLGUuZ2V0QWZ0ZXI9UShlPT5bZSxpUyh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKGUuZ2V0SW5kZXgodCkrMSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLCQodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBZnRlcmApKSxlLnJlc2V0U2l6ZT0oKT0+e3Quc2V0Q29sdW1uU2l6aW5nKHQ9PntsZXR7W2UuaWRdOm4sLi4ucn09dDtyZXR1cm4gcn0pfSxlLmdldENhblJlc2l6ZT0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uUmVzaXppbmc/PyEwKSxlLmdldElzUmVzaXppbmc9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdJbmZvLmlzUmVzaXppbmdDb2x1bW49PT1lLmlkfSxjcmVhdGVIZWFkZXI6KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgdD0wLG49ZT0+e2Uuc3ViSGVhZGVycy5sZW5ndGg/ZS5zdWJIZWFkZXJzLmZvckVhY2gobik6dCs9ZS5jb2x1bW4uZ2V0U2l6ZSgpPz8wfTtyZXR1cm4gbihlKSx0fSxlLmdldFN0YXJ0PSgpPT57aWYoZS5pbmRleD4wKXtsZXQgdD1lLmhlYWRlckdyb3VwLmhlYWRlcnNbZS5pbmRleC0xXTtyZXR1cm4gdC5nZXRTdGFydCgpK3QuZ2V0U2l6ZSgpfXJldHVybiAwfSxlLmdldFJlc2l6ZUhhbmRsZXI9bj0+e2xldCByPXQuZ2V0Q29sdW1uKGUuY29sdW1uLmlkKSxpPXI/LmdldENhblJlc2l6ZSgpO3JldHVybiBhPT57aWYoIXJ8fCFpfHwoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSxuUyhhKSYmYS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoPjEpKXJldHVybjtsZXQgbz1lLmdldFNpemUoKSxzPWU/ZS5nZXRMZWFmSGVhZGVycygpLm1hcChlPT5bZS5jb2x1bW4uaWQsZS5jb2x1bW4uZ2V0U2l6ZSgpXSk6W1tyLmlkLHIuZ2V0U2l6ZSgpXV0sYz1uUyhhKT9NYXRoLnJvdW5kKGEudG91Y2hlc1swXS5jbGllbnRYKTphLmNsaWVudFgsbD17fSx1PShlLG4pPT57dHlwZW9mIG49PWBudW1iZXJgJiYodC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9PntsZXQgcj10Lm9wdGlvbnMuY29sdW1uUmVzaXplRGlyZWN0aW9uPT09YHJ0bGA/LTE6MSxpPShuLShlPy5zdGFydE9mZnNldD8/MCkpKnIsYT1NYXRoLm1heChpLyhlPy5zdGFydFNpemU/PzApLC0uOTk5OTk5KTtyZXR1cm4gZS5jb2x1bW5TaXppbmdTdGFydC5mb3JFYWNoKGU9PntsZXRbdCxuXT1lO2xbdF09TWF0aC5yb3VuZChNYXRoLm1heChuK24qYSwwKSoxMDApLzEwMH0pLHsuLi5lLGRlbHRhT2Zmc2V0OmksZGVsdGFQZXJjZW50YWdlOmF9fSksKHQub3B0aW9ucy5jb2x1bW5SZXNpemVNb2RlPT09YG9uQ2hhbmdlYHx8ZT09PWBlbmRgKSYmdC5zZXRDb2x1bW5TaXppbmcoZT0+KHsuLi5lLC4uLmx9KSkpfSxkPWU9PnUoYG1vdmVgLGUpLGY9ZT0+e3UoYGVuZGAsZSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxpc1Jlc2l6aW5nQ29sdW1uOiExLHN0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxjb2x1bW5TaXppbmdTdGFydDpbXX0pKX0scD1YeChuKSxtPXttb3ZlSGFuZGxlcjplPT5kKGUuY2xpZW50WCksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZW1vdmVgLG0ubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYG1vdXNldXBgLG0udXBIYW5kbGVyKSxmKGUuY2xpZW50WCl9fSxoPXttb3ZlSGFuZGxlcjplPT4oZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGQoZS50b3VjaGVzWzBdLmNsaWVudFgpLCExKSx1cEhhbmRsZXI6ZT0+e3A/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNobW92ZWAsaC5tb3ZlSGFuZGxlcikscD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdG91Y2hlbmRgLGgudXBIYW5kbGVyKSxlLmNhbmNlbGFibGUmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSksZihlLnRvdWNoZXNbMF0/LmNsaWVudFgpfX0sZz10UygpP3twYXNzaXZlOiExfTohMTtuUyhhKT8ocD8uYWRkRXZlbnRMaXN0ZW5lcihgdG91Y2htb3ZlYCxoLm1vdmVIYW5kbGVyLGcpLHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlcixnKSk6KHA/LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlbW92ZWAsbS5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlcixnKSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxzdGFydE9mZnNldDpjLHN0YXJ0U2l6ZTpvLGRlbHRhT2Zmc2V0OjAsZGVsdGFQZXJjZW50YWdlOjAsY29sdW1uU2l6aW5nU3RhcnQ6cyxpc1Jlc2l6aW5nQ29sdW1uOnIuaWR9KSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uU2l6aW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlKHQpLGUuc2V0Q29sdW1uU2l6aW5nSW5mbz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5TaXppbmc9dD0+e2Uuc2V0Q29sdW1uU2l6aW5nKHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nPz97fSl9LGUucmVzZXRIZWFkZXJTaXplSW5mbz10PT57ZS5zZXRDb2x1bW5TaXppbmdJbmZvKHQ/UXgoKTplLmluaXRpYWxTdGF0ZS5jb2x1bW5TaXppbmdJbmZvPz9ReCgpKX0sZS5nZXRUb3RhbFNpemU9KCk9PmUuZ2V0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0TGVmdFRvdGFsU2l6ZT0oKT0+ZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0Q2VudGVyVG90YWxTaXplPSgpPT5lLmdldENlbnRlckhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldFJpZ2h0VG90YWxTaXplPSgpPT5lLmdldFJpZ2h0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wfX0sZVM9bnVsbDtmdW5jdGlvbiB0Uygpe2lmKHR5cGVvZiBlUz09YGJvb2xlYW5gKXJldHVybiBlUztsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fSxuPSgpPT57fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgdGVzdGAsbix0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdGVzdGAsbil9Y2F0Y2h7ZT0hMX1yZXR1cm4gZVM9ZSxlU31mdW5jdGlvbiBuUyhlKXtyZXR1cm4gZS50eXBlPT09YHRvdWNoc3RhcnRgfXZhciByUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uVmlzaWJpbGl0eTp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2U6eXgoYGNvbHVtblZpc2liaWxpdHlgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS50b2dnbGVWaXNpYmlsaXR5PW49PntlLmdldENhbkhpZGUoKSYmdC5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ9Pih7Li4udCxbZS5pZF06bj8/IWUuZ2V0SXNWaXNpYmxlKCl9KSl9LGUuZ2V0SXNWaXNpYmxlPSgpPT57bGV0IG49ZS5jb2x1bW5zO3JldHVybihuLmxlbmd0aD9uLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGUoKSk6dC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHk/LltlLmlkXSk/PyEwfSxlLmdldENhbkhpZGU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVIaWRpbmc/PyEwKSxlLmdldFRvZ2dsZVZpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVWaXNpYmlsaXR5PT1udWxsfHxlLnRvZ2dsZVZpc2liaWxpdHkodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLl9nZXRBbGxWaXNpYmxlQ2VsbHM9USgoKT0+W2UuZ2V0QWxsQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLCQodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBfZ2V0QWxsVmlzaWJsZUNlbGxzYCkpLGUuZ2V0VmlzaWJsZUNlbGxzPVEoKCk9PltlLmdldExlZnRWaXNpYmxlQ2VsbHMoKSxlLmdldENlbnRlclZpc2libGVDZWxscygpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHMoKV0sKGUsdCxuKT0+Wy4uLmUsLi4udCwuLi5uXSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9KHQsbik9PlEoKCk9PltuKCksbigpLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+ZS5pZCkuam9pbihgX2ApXSxlPT5lLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZT09bnVsbD92b2lkIDA6ZS5nZXRJc1Zpc2libGUoKSksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsdCkpO2UuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zPXQoYGdldFZpc2libGVGbGF0Q29sdW1uc2AsKCk9PmUuZ2V0QWxsRmxhdENvbHVtbnMoKSksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpKSxlLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0TGVmdExlYWZDb2x1bW5zKCkpLGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldFJpZ2h0TGVhZkNvbHVtbnMoKSksZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSxlLnNldENvbHVtblZpc2liaWxpdHk9dD0+ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uVmlzaWJpbGl0eT10PT57ZS5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eT8/e30pfSxlLnRvZ2dsZUFsbENvbHVtbnNWaXNpYmxlPXQ9Pnt0Pz89IWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLGUuc2V0Q29sdW1uVmlzaWJpbGl0eShlLmdldEFsbExlYWZDb2x1bW5zKCkucmVkdWNlKChlLG4pPT4oey4uLmUsW24uaWRdOnR8fCEobi5nZXRDYW5IaWRlIT1udWxsJiZuLmdldENhbkhpZGUoKSl9KSx7fSkpfSxlLmdldElzQWxsQ29sdW1uc1Zpc2libGU9KCk9PiFlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZShlPT4hKGUuZ2V0SXNWaXNpYmxlIT1udWxsJiZlLmdldElzVmlzaWJsZSgpKSksZS5nZXRJc1NvbWVDb2x1bW5zVmlzaWJsZT0oKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLGUuZ2V0VG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSh0LnRhcmdldD8uY2hlY2tlZCl9fX07ZnVuY3Rpb24gaVMoZSx0KXtyZXR1cm4gdD90PT09YGNlbnRlcmA/ZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnMoKTp0PT09YGxlZnRgP2UuZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1ucygpOmUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnMoKTplLmdldFZpc2libGVMZWFmQ29sdW1ucygpfXZhciBhUz17Y3JlYXRlVGFibGU6ZT0+e2UuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD0oKT0+ZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD9lLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKTplLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWwoKSxlLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPWUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyhlLGBfX2dsb2JhbF9fYCksZS5nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPSgpPT5lLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzP2UuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKTpuZXcgTWFwLGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9ZS5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMmJmUub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9KCk9PntpZihlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKXJldHVybiBlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKCl9fX0sb1M9e2dldEluaXRpYWxTdGF0ZTplPT4oe2dsb2JhbEZpbHRlcjp2b2lkIDAsLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25HbG9iYWxGaWx0ZXJDaGFuZ2U6eXgoYGdsb2JhbEZpbHRlcmAsZSksZ2xvYmFsRmlsdGVyRm46YGF1dG9gLGdldENvbHVtbkNhbkdsb2JhbEZpbHRlcjp0PT57dmFyIG47bGV0IHI9KG49ZS5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXSk9PW51bGx8fChuPW4uX2dldEFsbENlbGxzQnlDb2x1bW5JZCgpW3QuaWRdKT09bnVsbD92b2lkIDA6bi5nZXRWYWx1ZSgpO3JldHVybiB0eXBlb2Ygcj09YHN0cmluZ2B8fHR5cGVvZiByPT1gbnVtYmVyYH19KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldENhbkdsb2JhbEZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmKCh0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyPT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyKGUpKT8/ITApJiYhIWUuYWNjZXNzb3JGbn0sY3JlYXRlVGFibGU6ZT0+e2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuPSgpPT5CeC5pbmNsdWRlc1N0cmluZyxlLmdldEdsb2JhbEZpbHRlckZuPSgpPT57bGV0e2dsb2JhbEZpbHRlckZuOnR9PWUub3B0aW9ucztyZXR1cm4gYngodCk/dDp0PT09YGF1dG9gP2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuKCk6ZS5vcHRpb25zLmZpbHRlckZucz8uW3RdPz9CeFt0XX0sZS5zZXRHbG9iYWxGaWx0ZXI9dD0+e2Uub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uR2xvYmFsRmlsdGVyQ2hhbmdlKHQpfSxlLnJlc2V0R2xvYmFsRmlsdGVyPXQ9PntlLnNldEdsb2JhbEZpbHRlcih0P3ZvaWQgMDplLmluaXRpYWxTdGF0ZS5nbG9iYWxGaWx0ZXIpfX19LHNTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtleHBhbmRlZDp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkV4cGFuZGVkQ2hhbmdlOnl4KGBleHBhbmRlZGAsZSkscGFnaW5hdGVFeHBhbmRlZFJvd3M6ITB9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRFeHBhbmRlZD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldEV4cGFuZGVkPz8hZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZyl7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRFeHBhbmRlZCgpLG49ITF9KX19LGUuc2V0RXhwYW5kZWQ9dD0+ZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKHQpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkPXQ9Pnt0Pz8hZS5nZXRJc0FsbFJvd3NFeHBhbmRlZCgpP2Uuc2V0RXhwYW5kZWQoITApOmUuc2V0RXhwYW5kZWQoe30pfSxlLnJlc2V0RXhwYW5kZWQ9dD0+e2Uuc2V0RXhwYW5kZWQodD97fTplLmluaXRpYWxTdGF0ZT8uZXhwYW5kZWQ/P3t9KX0sZS5nZXRDYW5Tb21lUm93c0V4cGFuZD0oKT0+ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PmUuZ2V0Q2FuRXhwYW5kKCkpLGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlcj0oKT0+dD0+e3QucGVyc2lzdD09bnVsbHx8dC5wZXJzaXN0KCksZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKX0sZS5nZXRJc1NvbWVSb3dzRXhwYW5kZWQ9KCk9PntsZXQgdD1lLmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuIHQ9PT0hMHx8T2JqZWN0LnZhbHVlcyh0KS5zb21lKEJvb2xlYW4pfSxlLmdldElzQWxsUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0eXBlb2YgdD09YGJvb2xlYW5gP3Q9PT0hMDohKCFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fGUuZ2V0Um93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PiFlLmdldElzRXhwYW5kZWQoKSkpfSxlLmdldEV4cGFuZGVkRGVwdGg9KCk9PntsZXQgdD0wO3JldHVybihlLmdldFN0YXRlKCkuZXhwYW5kZWQ9PT0hMD9PYmplY3Qua2V5cyhlLmdldFJvd01vZGVsKCkucm93c0J5SWQpOk9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5leHBhbmRlZCkpLmZvckVhY2goZT0+e2xldCBuPWUuc3BsaXQoYC5gKTt0PU1hdGgubWF4KHQsbi5sZW5ndGgpfSksdH0sZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsPSgpPT5lLmdldFNvcnRlZFJvd01vZGVsKCksZS5nZXRFeHBhbmRlZFJvd01vZGVsPSgpPT4oIWUuX2dldEV4cGFuZGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsJiYoZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZ3x8IWUuX2dldEV4cGFuZGVkUm93TW9kZWw/ZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCk6ZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVFeHBhbmRlZD1uPT57dC5zZXRFeHBhbmRlZChyPT57bGV0IGk9cj09PSEwfHwhIShyIT1udWxsJiZyW2UuaWRdKSxhPXt9O2lmKHI9PT0hMD9PYmplY3Qua2V5cyh0LmdldFJvd01vZGVsKCkucm93c0J5SWQpLmZvckVhY2goZT0+e2FbZV09ITB9KTphPXIsbj8/PSFpLCFpJiZuKXJldHVybnsuLi5hLFtlLmlkXTohMH07aWYoaSYmIW4pe2xldHtbZS5pZF06dCwuLi5ufT1hO3JldHVybiBufXJldHVybiByfSl9LGUuZ2V0SXNFeHBhbmRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4hISgodC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKT8/KG49PT0hMHx8bj8uW2UuaWRdKSl9LGUuZ2V0Q2FuRXhwYW5kPSgpPT57dmFyIG47cmV0dXJuKHQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQoZSkpPz8oKHQub3B0aW9ucy5lbmFibGVFeHBhbmRpbmc/PyEwKSYmISEoKG49ZS5zdWJSb3dzKSE9bnVsbCYmbi5sZW5ndGgpKX0sZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZD0oKT0+e2xldCBuPSEwLHI9ZTtmb3IoO24mJnIucGFyZW50SWQ7KXI9dC5nZXRSb3coci5wYXJlbnRJZCwhMCksbj1yLmdldElzRXhwYW5kZWQoKTtyZXR1cm4gbn0sZS5nZXRUb2dnbGVFeHBhbmRlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhbkV4cGFuZCgpO3JldHVybigpPT57dCYmZS50b2dnbGVFeHBhbmRlZCgpfX19fSxjUz0wLGxTPTEwLHVTPSgpPT4oe3BhZ2VJbmRleDpjUyxwYWdlU2l6ZTpsU30pLGRTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHsuLi5lLHBhZ2luYXRpb246ey4uLnVTKCksLi4uZT8ucGFnaW5hdGlvbn19KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUGFnaW5hdGlvbkNoYW5nZTp5eChgcGFnaW5hdGlvbmAsZSl9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRQYWdlSW5kZXg9KCk9PntpZighdCl7ZS5fcXVldWUoKCk9Pnt0PSEwfSk7cmV0dXJufWlmKGUub3B0aW9ucy5hdXRvUmVzZXRBbGw/P2Uub3B0aW9ucy5hdXRvUmVzZXRQYWdlSW5kZXg/PyFlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbil7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRQYWdlSW5kZXgoKSxuPSExfSl9fSxlLnNldFBhZ2luYXRpb249dD0+ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZShlPT52eCh0LGUpKSxlLnJlc2V0UGFnaW5hdGlvbj10PT57ZS5zZXRQYWdpbmF0aW9uKHQ/dVMoKTplLmluaXRpYWxTdGF0ZS5wYWdpbmF0aW9uPz91UygpKX0sZS5zZXRQYWdlSW5kZXg9dD0+e2Uuc2V0UGFnaW5hdGlvbihuPT57bGV0IHI9dngodCxuLnBhZ2VJbmRleCksaT1lLm9wdGlvbnMucGFnZUNvdW50PT09dm9pZCAwfHxlLm9wdGlvbnMucGFnZUNvdW50PT09LTE/MioqNTMtMTplLm9wdGlvbnMucGFnZUNvdW50LTE7cmV0dXJuIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGkpKSx7Li4ubixwYWdlSW5kZXg6cn19KX0sZS5yZXNldFBhZ2VJbmRleD10PT57dmFyIG47ZS5zZXRQYWdlSW5kZXgodD9jUzooKG49ZS5pbml0aWFsU3RhdGUpPT1udWxsfHwobj1uLnBhZ2luYXRpb24pPT1udWxsP3ZvaWQgMDpuLnBhZ2VJbmRleCk/P2NTKX0sZS5yZXNldFBhZ2VTaXplPXQ9Pnt2YXIgbjtlLnNldFBhZ2VTaXplKHQ/bFM6KChuPWUuaW5pdGlhbFN0YXRlKT09bnVsbHx8KG49bi5wYWdpbmF0aW9uKT09bnVsbD92b2lkIDA6bi5wYWdlU2l6ZSk/P2xTKX0sZS5zZXRQYWdlU2l6ZT10PT57ZS5zZXRQYWdpbmF0aW9uKGU9PntsZXQgbj1NYXRoLm1heCgxLHZ4KHQsZS5wYWdlU2l6ZSkpLHI9ZS5wYWdlU2l6ZSplLnBhZ2VJbmRleCxpPU1hdGguZmxvb3Ioci9uKTtyZXR1cm57Li4uZSxwYWdlSW5kZXg6aSxwYWdlU2l6ZTpufX0pfSxlLnNldFBhZ2VDb3VudD10PT5lLnNldFBhZ2luYXRpb24obj0+e2xldCByPXZ4KHQsZS5vcHRpb25zLnBhZ2VDb3VudD8/LTEpO3JldHVybiB0eXBlb2Ygcj09YG51bWJlcmAmJihyPU1hdGgubWF4KC0xLHIpKSx7Li4ubixwYWdlQ291bnQ6cn19KSxlLmdldFBhZ2VPcHRpb25zPVEoKCk9PltlLmdldFBhZ2VDb3VudCgpXSxlPT57bGV0IHQ9W107cmV0dXJuIGUmJmU+MCYmKHQ9Wy4uLkFycmF5KGUpXS5maWxsKG51bGwpLm1hcCgoZSx0KT0+dCkpLHR9LCQoZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0UGFnZU9wdGlvbnNgKSksZS5nZXRDYW5QcmV2aW91c1BhZ2U9KCk9PmUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLnBhZ2VJbmRleD4wLGUuZ2V0Q2FuTmV4dFBhZ2U9KCk9PntsZXR7cGFnZUluZGV4OnR9PWUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLG49ZS5nZXRQYWdlQ291bnQoKTtyZXR1cm4gbj09PS0xfHxuIT09MCYmdDxuLTF9LGUucHJldmlvdXNQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lLTEpLGUubmV4dFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGU9PmUrMSksZS5maXJzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KDApLGUubGFzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGUuZ2V0UGFnZUNvdW50KCktMSksZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWw9KCk9PmUuZ2V0RXhwYW5kZWRSb3dNb2RlbCgpLGUuZ2V0UGFnaW5hdGlvblJvd01vZGVsPSgpPT4oIWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCYmZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbCYmKGUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD1lLm9wdGlvbnMuZ2V0UGFnaW5hdGlvblJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbnx8IWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpOmUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCgpKSxlLmdldFBhZ2VDb3VudD0oKT0+ZS5vcHRpb25zLnBhZ2VDb3VudD8/TWF0aC5jZWlsKGUuZ2V0Um93Q291bnQoKS9lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlU2l6ZSksZS5nZXRSb3dDb3VudD0oKT0+ZS5vcHRpb25zLnJvd0NvdW50Pz9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpLnJvd3MubGVuZ3RofX0sZlM9KCk9Pih7dG9wOltdLGJvdHRvbTpbXX0pLHBTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtyb3dQaW5uaW5nOmZTKCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Sb3dQaW5uaW5nQ2hhbmdlOnl4KGByb3dQaW5uaW5nYCxlKX0pLGNyZWF0ZVJvdzooZSx0KT0+e2UucGluPShuLHIsaSk9PntsZXQgYT1yP2UuZ2V0TGVhZlJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10sbz1pP2UuZ2V0UGFyZW50Um93cygpLm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KTpbXSxzPW5ldyBTZXQoWy4uLm8sZS5pZCwuLi5hXSk7dC5zZXRSb3dQaW5uaW5nKGU9Pm49PT1gYm90dG9tYD97dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTpbLi4uKGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV19Om49PT1gdG9wYD97dG9wOlsuLi4oZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSwuLi5BcnJheS5mcm9tKHMpXSxib3R0b206KGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSl9Ont0b3A6KGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT57bGV0e2VuYWJsZVJvd1Bpbm5pbmc6bixlbmFibGVQaW5uaW5nOnJ9PXQub3B0aW9ucztyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/bihlKTpuPz9yPz8hMH0sZS5nZXRJc1Bpbm5lZD0oKT0+e2xldCBuPVtlLmlkXSx7dG9wOnIsYm90dG9tOml9PXQuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YHRvcGA6bz9gYm90dG9tYDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e2xldCBuPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gbj8oKG49PT1gdG9wYD90LmdldFRvcFJvd3MoKTp0LmdldEJvdHRvbVJvd3MoKSk/Lm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KSk/LmluZGV4T2YoZS5pZCk/Py0xOi0xfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93UGlubmluZz10PT5lLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlKHQpLGUucmVzZXRSb3dQaW5uaW5nPXQ9PmUuc2V0Um93UGlubmluZyh0P2ZTKCk6ZS5pbml0aWFsU3RhdGU/LnJvd1Bpbm5pbmc/P2ZTKCkpLGUuZ2V0SXNTb21lUm93c1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi50b3A/Lmxlbmd0aHx8bi5ib3R0b20/Lmxlbmd0aCl9LGUuX2dldFBpbm5lZFJvd3M9KHQsbixyKT0+KGUub3B0aW9ucy5rZWVwUGlubmVkUm93cz8/ITA/KG4/P1tdKS5tYXAodD0+e2xldCBuPWUuZ2V0Um93KHQsITApO3JldHVybiBuLmdldElzQWxsUGFyZW50c0V4cGFuZGVkKCk/bjpudWxsfSk6KG4/P1tdKS5tYXAoZT0+dC5maW5kKHQ9PnQuaWQ9PT1lKSkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOnJ9KSksZS5nZXRUb3BSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3BdLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgdG9wYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFRvcFJvd3NgKSksZS5nZXRCb3R0b21Sb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgYm90dG9tYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEJvdHRvbVJvd3NgKSksZS5nZXRDZW50ZXJSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3AsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwoZSx0LG4pPT57bGV0IHI9bmV3IFNldChbLi4udD8/W10sLi4ubj8/W11dKTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaGFzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclJvd3NgKSl9fSxtUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93U2VsZWN0aW9uOnt9LC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93U2VsZWN0aW9uQ2hhbmdlOnl4KGByb3dTZWxlY3Rpb25gLGUpLGVuYWJsZVJvd1NlbGVjdGlvbjohMCxlbmFibGVNdWx0aVJvd1NlbGVjdGlvbjohMCxlbmFibGVTdWJSb3dTZWxlY3Rpb246ITB9KSxjcmVhdGVUYWJsZTplPT57ZS5zZXRSb3dTZWxlY3Rpb249dD0+ZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dTZWxlY3Rpb25DaGFuZ2UodCksZS5yZXNldFJvd1NlbGVjdGlvbj10PT5lLnNldFJvd1NlbGVjdGlvbih0P3t9OmUuaW5pdGlhbFN0YXRlLnJvd1NlbGVjdGlvbj8/e30pLGUudG9nZ2xlQWxsUm93c1NlbGVjdGVkPXQ9PntlLnNldFJvd1NlbGVjdGlvbihuPT57dD10PT09dm9pZCAwPyFlLmdldElzQWxsUm93c1NlbGVjdGVkKCk6dDtsZXQgcj17Li4ubn0saT1lLmdldFByZUdyb3VwZWRSb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiB0P2kuZm9yRWFjaChlPT57ZS5nZXRDYW5TZWxlY3QoKSYmKHJbZS5pZF09ITApfSk6aS5mb3JFYWNoKGU9PntkZWxldGUgcltlLmlkXX0pLHJ9KX0sZS50b2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkPXQ9PmUuc2V0Um93U2VsZWN0aW9uKG49PntsZXQgcj10PT09dm9pZCAwPyFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpOnQsaT17Li4ubn07cmV0dXJuIGUuZ2V0Um93TW9kZWwoKS5yb3dzLmZvckVhY2godD0+e2hTKGksdC5pZCxyLCEwLGUpfSksaX0pLGUuZ2V0UHJlU2VsZWN0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRDb3JlUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9nUyhlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/Z1MoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbD1RKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldFNvcnRlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/Z1MoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldElzQWxsUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Mse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hISh0Lmxlbmd0aCYmT2JqZWN0LmtleXMobikubGVuZ3RoKTtyZXR1cm4gciYmdC5zb21lKGU9PmUuZ2V0Q2FuU2VsZWN0KCkmJiFuW2UuaWRdKSYmKHI9ITEpLHJ9LGUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5maWx0ZXIoZT0+ZS5nZXRDYW5TZWxlY3QoKSkse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hIXQubGVuZ3RoO3JldHVybiByJiZ0LnNvbWUoZT0+IW5bZS5pZF0pJiYocj0hMSkscn0sZS5nZXRJc1NvbWVSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1PYmplY3Qua2V5cyhlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uPz97fSkubGVuZ3RoO3JldHVybiB0PjAmJnQ8ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MubGVuZ3RofSxlLmdldElzU29tZVBhZ2VSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpJiZ0LmZpbHRlcihlPT5lLmdldENhblNlbGVjdCgpKS5zb21lKGU9PmUuZ2V0SXNTZWxlY3RlZCgpfHxlLmdldElzU29tZVNlbGVjdGVkKCkpfSxlLmdldFRvZ2dsZUFsbFJvd3NTZWxlY3RlZEhhbmRsZXI9KCk9PnQ9PntlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX0sZS5nZXRUb2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkSGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX19LGNyZWF0ZVJvdzooZSx0KT0+e2UudG9nZ2xlU2VsZWN0ZWQ9KG4scik9PntsZXQgaT1lLmdldElzU2VsZWN0ZWQoKTt0LnNldFJvd1NlbGVjdGlvbihhPT57aWYobj1uPT09dm9pZCAwPyFpOm4sZS5nZXRDYW5TZWxlY3QoKSYmaT09PW4pcmV0dXJuIGE7bGV0IG89ey4uLmF9O3JldHVybiBoUyhvLGUuaWQsbixyPy5zZWxlY3RDaGlsZHJlbj8/ITAsdCksb30pfSxlLmdldElzU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gX1MoZSxuKX0sZS5nZXRJc1NvbWVTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiB2UyhlLG4pPT09YHNvbWVgfSxlLmdldElzQWxsU3ViUm93c1NlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIHZTKGUsbik9PT1gYWxsYH0sZS5nZXRDYW5TZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRDYW5TZWxlY3RTdWJSb3dzPSgpPT50eXBlb2YgdC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb24/PyEwLGUuZ2V0Q2FuTXVsdGlTZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRUb2dnbGVTZWxlY3RlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhblNlbGVjdCgpO3JldHVybiBuPT57dCYmZS50b2dnbGVTZWxlY3RlZChuLnRhcmdldD8uY2hlY2tlZCl9fX19LGhTPShlLHQsbixyLGkpPT57dmFyIGE7bGV0IG89aS5nZXRSb3codCwhMCk7bj8oby5nZXRDYW5NdWx0aVNlbGVjdCgpfHxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PmRlbGV0ZSBlW3RdKSxvLmdldENhblNlbGVjdCgpJiYoZVt0XT0hMCkpOmRlbGV0ZSBlW3RdLHImJihhPW8uc3ViUm93cykhPW51bGwmJmEubGVuZ3RoJiZvLmdldENhblNlbGVjdFN1YlJvd3MoKSYmby5zdWJSb3dzLmZvckVhY2godD0+aFMoZSx0LmlkLG4scixpKSl9O2Z1bmN0aW9uIGdTKGUsdCl7bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixyPVtdLGk9e30sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChlPT57dmFyIHQ7bGV0IG89X1MoZSxuKTtpZihvJiYoci5wdXNoKGUpLGlbZS5pZF09ZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlPXsuLi5lLHN1YlJvd3M6YShlLnN1YlJvd3MpfSksbylyZXR1cm4gZX0pLmZpbHRlcihCb29sZWFuKX07cmV0dXJue3Jvd3M6YSh0LnJvd3MpLGZsYXRSb3dzOnIscm93c0J5SWQ6aX19ZnVuY3Rpb24gX1MoZSx0KXtyZXR1cm4gdFtlLmlkXT8/ITF9ZnVuY3Rpb24gdlMoZSx0LG4pe3ZhciByO2lmKCEoKHI9ZS5zdWJSb3dzKSE9bnVsbCYmci5sZW5ndGgpKXJldHVybiExO2xldCBpPSEwLGE9ITE7cmV0dXJuIGUuc3ViUm93cy5mb3JFYWNoKGU9PntpZighKGEmJiFpKSYmKGUuZ2V0Q2FuU2VsZWN0KCkmJihfUyhlLHQpP2E9ITA6aT0hMSksZS5zdWJSb3dzJiZlLnN1YlJvd3MubGVuZ3RoKSl7bGV0IG49dlMoZSx0KTtuPT09YGFsbGA/YT0hMDoobj09PWBzb21lYCYmKGE9ITApLGk9ITEpfX0pLGk/YGFsbGA6YT9gc29tZWA6ITF9dmFyIHlTPS8oWzAtOV0rKS9nbSxiUz0oZSx0LG4pPT5PUyhEUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLERTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLHhTPShlLHQsbik9Pk9TKERTKGUuZ2V0VmFsdWUobikpLERTKHQuZ2V0VmFsdWUobikpKSxTUz0oZSx0LG4pPT5FUyhEUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLERTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLENTPShlLHQsbik9PkVTKERTKGUuZ2V0VmFsdWUobikpLERTKHQuZ2V0VmFsdWUobikpKSx3Uz0oZSx0LG4pPT57bGV0IHI9ZS5nZXRWYWx1ZShuKSxpPXQuZ2V0VmFsdWUobik7cmV0dXJuIHI+aT8xOnI8aT8tMTowfSxUUz0oZSx0LG4pPT5FUyhlLmdldFZhbHVlKG4pLHQuZ2V0VmFsdWUobikpO2Z1bmN0aW9uIEVTKGUsdCl7cmV0dXJuIGU9PT10PzA6ZT50PzE6LTF9ZnVuY3Rpb24gRFMoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD9pc05hTihlKXx8ZT09PTEvMHx8ZT09PS0xLzA/YGA6U3RyaW5nKGUpOnR5cGVvZiBlPT1gc3RyaW5nYD9lOmBgfWZ1bmN0aW9uIE9TKGUsdCl7bGV0IG49ZS5zcGxpdCh5UykuZmlsdGVyKEJvb2xlYW4pLHI9dC5zcGxpdCh5UykuZmlsdGVyKEJvb2xlYW4pO2Zvcig7bi5sZW5ndGgmJnIubGVuZ3RoOyl7bGV0IGU9bi5zaGlmdCgpLHQ9ci5zaGlmdCgpLGk9cGFyc2VJbnQoZSwxMCksYT1wYXJzZUludCh0LDEwKSxvPVtpLGFdLnNvcnQoKTtpZihpc05hTihvWzBdKSl7aWYoZT50KXJldHVybiAxO2lmKHQ+ZSlyZXR1cm4tMTtjb250aW51ZX1pZihpc05hTihvWzFdKSlyZXR1cm4gaXNOYU4oaSk/LTE6MTtpZihpPmEpcmV0dXJuIDE7aWYoYT5pKXJldHVybi0xfXJldHVybiBuLmxlbmd0aC1yLmxlbmd0aH12YXIga1M9e2FscGhhbnVtZXJpYzpiUyxhbHBoYW51bWVyaWNDYXNlU2Vuc2l0aXZlOnhTLHRleHQ6U1MsdGV4dENhc2VTZW5zaXRpdmU6Q1MsZGF0ZXRpbWU6d1MsYmFzaWM6VFN9LEFTPVtEeCxyUyxxeCxZeCxBeCxIeCxhUyxvUyx7Z2V0SW5pdGlhbFN0YXRlOmU9Pih7c29ydGluZzpbXSwuLi5lfSksZ2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHtzb3J0aW5nRm46YGF1dG9gLHNvcnRVbmRlZmluZWQ6MX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Tb3J0aW5nQ2hhbmdlOnl4KGBzb3J0aW5nYCxlKSxpc011bHRpU29ydEV2ZW50OmU9PmUuc2hpZnRLZXl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEF1dG9Tb3J0aW5nRm49KCk9PntsZXQgbj10LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93cy5zbGljZSgxMCkscj0hMTtmb3IobGV0IHQgb2Ygbil7bGV0IG49dD8uZ2V0VmFsdWUoZS5pZCk7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09YFtvYmplY3QgRGF0ZV1gKXJldHVybiBrUy5kYXRldGltZTtpZih0eXBlb2Ygbj09YHN0cmluZ2AmJihyPSEwLG4uc3BsaXQoeVMpLmxlbmd0aD4xKSlyZXR1cm4ga1MuYWxwaGFudW1lcmljfXJldHVybiByP2tTLnRleHQ6a1MuYmFzaWN9LGUuZ2V0QXV0b1NvcnREaXI9KCk9PnR5cGVvZiB0LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk9PWBzdHJpbmdgP2Bhc2NgOmBkZXNjYCxlLmdldFNvcnRpbmdGbj0oKT0+e2lmKCFlKXRocm93IEVycm9yKCk7cmV0dXJuIGJ4KGUuY29sdW1uRGVmLnNvcnRpbmdGbik/ZS5jb2x1bW5EZWYuc29ydGluZ0ZuOmUuY29sdW1uRGVmLnNvcnRpbmdGbj09PWBhdXRvYD9lLmdldEF1dG9Tb3J0aW5nRm4oKTp0Lm9wdGlvbnMuc29ydGluZ0Zucz8uW2UuY29sdW1uRGVmLnNvcnRpbmdGbl0/P2tTW2UuY29sdW1uRGVmLnNvcnRpbmdGbl19LGUudG9nZ2xlU29ydGluZz0obixyKT0+e2xldCBpPWUuZ2V0TmV4dFNvcnRpbmdPcmRlcigpLGE9biE9bnVsbDt0LnNldFNvcnRpbmcobz0+e2xldCBzPW8/LmZpbmQodD0+dC5pZD09PWUuaWQpLGM9bz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSxsPVtdLHUsZD1hP246aT09PWBkZXNjYDtyZXR1cm4gdT1vIT1udWxsJiZvLmxlbmd0aCYmZS5nZXRDYW5NdWx0aVNvcnQoKSYmcj9zP2B0b2dnbGVgOmBhZGRgOm8hPW51bGwmJm8ubGVuZ3RoJiZjIT09by5sZW5ndGgtMT9gcmVwbGFjZWA6cz9gdG9nZ2xlYDpgcmVwbGFjZWAsdT09PWB0b2dnbGVgJiYoYXx8aXx8KHU9YHJlbW92ZWApKSx1PT09YGFkZGA/KGw9Wy4uLm8se2lkOmUuaWQsZGVzYzpkfV0sbC5zcGxpY2UoMCxsLmxlbmd0aC0odC5vcHRpb25zLm1heE11bHRpU29ydENvbENvdW50Pz8yKio1My0xKSkpOmw9dT09PWB0b2dnbGVgP28ubWFwKHQ9PnQuaWQ9PT1lLmlkP3suLi50LGRlc2M6ZH06dCk6dT09PWByZW1vdmVgP28uZmlsdGVyKHQ9PnQuaWQhPT1lLmlkKTpbe2lkOmUuaWQsZGVzYzpkfV0sbH0pfSxlLmdldEZpcnN0U29ydERpcj0oKT0+ZS5jb2x1bW5EZWYuc29ydERlc2NGaXJzdD8/dC5vcHRpb25zLnNvcnREZXNjRmlyc3Q/P2UuZ2V0QXV0b1NvcnREaXIoKT09PWBkZXNjYD9gZGVzY2A6YGFzY2AsZS5nZXROZXh0U29ydGluZ09yZGVyPW49PntsZXQgcj1lLmdldEZpcnN0U29ydERpcigpLGk9ZS5nZXRJc1NvcnRlZCgpO3JldHVybiBpP2khPT1yJiYodC5vcHRpb25zLmVuYWJsZVNvcnRpbmdSZW1vdmFsPz8hMCkmJighbnx8KHQub3B0aW9ucy5lbmFibGVNdWx0aVJlbW92ZT8/ITApKT8hMTppPT09YGRlc2NgP2Bhc2NgOmBkZXNjYDpyfSxlLmdldENhblNvcnQ9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVTb3J0aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlU29ydGluZz8/ITApJiYhIWUuYWNjZXNzb3JGbixlLmdldENhbk11bHRpU29ydD0oKT0+ZS5jb2x1bW5EZWYuZW5hYmxlTXVsdGlTb3J0Pz90Lm9wdGlvbnMuZW5hYmxlTXVsdGlTb3J0Pz8hIWUuYWNjZXNzb3JGbixlLmdldElzU29ydGVkPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLnNvcnRpbmc/LmZpbmQodD0+dC5pZD09PWUuaWQpO3JldHVybiBuP24uZGVzYz9gZGVzY2A6YGFzY2A6ITF9LGUuZ2V0U29ydEluZGV4PSgpPT50LmdldFN0YXRlKCkuc29ydGluZz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5jbGVhclNvcnRpbmc9KCk9Pnt0LnNldFNvcnRpbmcodD0+dCE9bnVsbCYmdC5sZW5ndGg/dC5maWx0ZXIodD0+dC5pZCE9PWUuaWQpOltdKX0sZS5nZXRUb2dnbGVTb3J0aW5nSGFuZGxlcj0oKT0+e2xldCBuPWUuZ2V0Q2FuU29ydCgpO3JldHVybiByPT57biYmKHIucGVyc2lzdD09bnVsbHx8ci5wZXJzaXN0KCksZS50b2dnbGVTb3J0aW5nPT1udWxsfHxlLnRvZ2dsZVNvcnRpbmcodm9pZCAwLGUuZ2V0Q2FuTXVsdGlTb3J0KCk/dC5vcHRpb25zLmlzTXVsdGlTb3J0RXZlbnQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5pc011bHRpU29ydEV2ZW50KHIpOiExKSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0U29ydGluZz10PT5lLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlKHQpLGUucmVzZXRTb3J0aW5nPXQ9PntlLnNldFNvcnRpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uc29ydGluZz8/W10pfSxlLmdldFByZVNvcnRlZFJvd01vZGVsPSgpPT5lLmdldEdyb3VwZWRSb3dNb2RlbCgpLGUuZ2V0U29ydGVkUm93TW9kZWw9KCk9PighZS5fZ2V0U29ydGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbCYmKGUuX2dldFNvcnRlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFNvcnRpbmd8fCFlLl9nZXRTb3J0ZWRSb3dNb2RlbD9lLmdldFByZVNvcnRlZFJvd01vZGVsKCk6ZS5fZ2V0U29ydGVkUm93TW9kZWwoKSl9fSxHeCxzUyxkUyxwUyxtUywkeF07ZnVuY3Rpb24galMoZSl7bGV0IHQ9Wy4uLkFTLC4uLmUuX2ZlYXR1cmVzPz9bXV0sbj17X2ZlYXR1cmVzOnR9LHI9bi5fZmVhdHVyZXMucmVkdWNlKChlLHQpPT5PYmplY3QuYXNzaWduKGUsdC5nZXREZWZhdWx0T3B0aW9ucz09bnVsbD92b2lkIDA6dC5nZXREZWZhdWx0T3B0aW9ucyhuKSkse30pLGk9ZT0+bi5vcHRpb25zLm1lcmdlT3B0aW9ucz9uLm9wdGlvbnMubWVyZ2VPcHRpb25zKHIsZSk6ey4uLnIsLi4uZX0sYT17Li4uZS5pbml0aWFsU3RhdGU/P3t9fTtuLl9mZWF0dXJlcy5mb3JFYWNoKGU9PnthPShlLmdldEluaXRpYWxTdGF0ZT09bnVsbD92b2lkIDA6ZS5nZXRJbml0aWFsU3RhdGUoYSkpPz9hfSk7bGV0IG89W10scz0hMSxjPXtfZmVhdHVyZXM6dCxvcHRpb25zOnsuLi5yLC4uLmV9LGluaXRpYWxTdGF0ZTphLF9xdWV1ZTplPT57by5wdXNoKGUpLHN8fChzPSEwLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pntmb3IoO28ubGVuZ3RoOylvLnNoaWZ0KCkoKTtzPSExfSkuY2F0Y2goZT0+c2V0VGltZW91dCgoKT0+e3Rocm93IGV9KSkpfSxyZXNldDooKT0+e24uc2V0U3RhdGUobi5pbml0aWFsU3RhdGUpfSxzZXRPcHRpb25zOmU9PntsZXQgdD12eChlLG4ub3B0aW9ucyk7bi5vcHRpb25zPWkodCl9LGdldFN0YXRlOigpPT5uLm9wdGlvbnMuc3RhdGUsc2V0U3RhdGU6ZT0+e24ub3B0aW9ucy5vblN0YXRlQ2hhbmdlPT1udWxsfHxuLm9wdGlvbnMub25TdGF0ZUNoYW5nZShlKX0sX2dldFJvd0lkOihlLHQscik9PihuLm9wdGlvbnMuZ2V0Um93SWQ9PW51bGw/dm9pZCAwOm4ub3B0aW9ucy5nZXRSb3dJZChlLHQscikpPz9gJHtyP1tyLmlkLHRdLmpvaW4oYC5gKTp0fWAsZ2V0Q29yZVJvd01vZGVsOigpPT4obi5fZ2V0Q29yZVJvd01vZGVsfHw9bi5vcHRpb25zLmdldENvcmVSb3dNb2RlbChuKSxuLl9nZXRDb3JlUm93TW9kZWwoKSksZ2V0Um93TW9kZWw6KCk9Pm4uZ2V0UGFnaW5hdGlvblJvd01vZGVsKCksZ2V0Um93OihlLHQpPT57bGV0IHI9KHQ/bi5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTpuLmdldFJvd01vZGVsKCkpLnJvd3NCeUlkW2VdO2lmKCFyJiYocj1uLmdldENvcmVSb3dNb2RlbCgpLnJvd3NCeUlkW2VdLCFyKSl0aHJvdyBFcnJvcigpO3JldHVybiByfSxfZ2V0RGVmYXVsdENvbHVtbkRlZjpRKCgpPT5bbi5vcHRpb25zLmRlZmF1bHRDb2x1bW5dLGU9PihlPz89e30se2hlYWRlcjplPT57bGV0IHQ9ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZjtyZXR1cm4gdC5hY2Nlc3NvcktleT90LmFjY2Vzc29yS2V5OnQuYWNjZXNzb3JGbj90LmlkOm51bGx9LGNlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLnJlbmRlclZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSwuLi5uLl9mZWF0dXJlcy5yZWR1Y2UoKGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0LmdldERlZmF1bHRDb2x1bW5EZWY9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdENvbHVtbkRlZigpKSx7fSksLi4uZX0pLCQoZSxgZGVidWdDb2x1bW5zYCxgX2dldERlZmF1bHRDb2x1bW5EZWZgKSksX2dldENvbHVtbkRlZnM6KCk9Pm4ub3B0aW9ucy5jb2x1bW5zLGdldEFsbENvbHVtbnM6USgoKT0+W24uX2dldENvbHVtbkRlZnMoKV0sZT0+e2xldCB0PWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksZS5tYXAoZT0+e2xldCBhPXd4KG4sZSxpLHIpLG89ZTtyZXR1cm4gYS5jb2x1bW5zPW8uY29sdW1ucz90KG8uY29sdW1ucyxhLGkrMSk6W10sYX0pfTtyZXR1cm4gdChlKX0sJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxDb2x1bW5zYCkpLGdldEFsbEZsYXRDb2x1bW5zOlEoKCk9PltuLmdldEFsbENvbHVtbnMoKV0sZT0+ZS5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSksJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc2ApKSxfZ2V0QWxsRmxhdENvbHVtbnNCeUlkOlEoKCk9PltuLmdldEFsbEZsYXRDb2x1bW5zKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmlkXT10LGUpLHt9KSwkKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbEZsYXRDb2x1bW5zQnlJZGApKSxnZXRBbGxMZWFmQ29sdW1uczpRKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCksbi5fZ2V0T3JkZXJDb2x1bW5zRm4oKV0sKGUsdCk9PnQoZS5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpLCQoZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsTGVhZkNvbHVtbnNgKSksZ2V0Q29sdW1uOmU9Pm4uX2dldEFsbEZsYXRDb2x1bW5zQnlJZCgpW2VdfTtPYmplY3QuYXNzaWduKG4sYyk7Zm9yKGxldCBlPTA7ZTxuLl9mZWF0dXJlcy5sZW5ndGg7ZSsrKXtsZXQgdD1uLl9mZWF0dXJlc1tlXTt0PT1udWxsfHx0LmNyZWF0ZVRhYmxlPT1udWxsfHx0LmNyZWF0ZVRhYmxlKG4pfXJldHVybiBufWZ1bmN0aW9uIE1TKCl7cmV0dXJuIGU9PlEoKCk9PltlLm9wdGlvbnMuZGF0YV0sdD0+e2xldCBuPXtyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxyPWZ1bmN0aW9uKHQsaSxhKXtpPT09dm9pZCAwJiYoaT0wKTtsZXQgbz1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7bGV0IGw9a3goZSxlLl9nZXRSb3dJZCh0W2NdLGMsYSksdFtjXSxjLGksdm9pZCAwLGE/LmlkKTtpZihuLmZsYXRSb3dzLnB1c2gobCksbi5yb3dzQnlJZFtsLmlkXT1sLG8ucHVzaChsKSxlLm9wdGlvbnMuZ2V0U3ViUm93cyl7dmFyIHM7bC5vcmlnaW5hbFN1YlJvd3M9ZS5vcHRpb25zLmdldFN1YlJvd3ModFtjXSxjKSwocz1sLm9yaWdpbmFsU3ViUm93cykhPW51bGwmJnMubGVuZ3RoJiYobC5zdWJSb3dzPXIobC5vcmlnaW5hbFN1YlJvd3MsaSsxLGwpKX19cmV0dXJuIG99O3JldHVybiBuLnJvd3M9cih0KSxufSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBOUygpe3JldHVybiBlPT5RKCgpPT5bZS5nZXRTdGF0ZSgpLnNvcnRpbmcsZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpXSwodCxuKT0+e2lmKCFuLnJvd3MubGVuZ3RofHwhKHQhPW51bGwmJnQubGVuZ3RoKSlyZXR1cm4gbjtsZXQgcj1lLmdldFN0YXRlKCkuc29ydGluZyxpPVtdLGE9ci5maWx0ZXIodD0+ZS5nZXRDb2x1bW4odC5pZCk/LmdldENhblNvcnQoKSksbz17fTthLmZvckVhY2godD0+e2xldCBuPWUuZ2V0Q29sdW1uKHQuaWQpO24mJihvW3QuaWRdPXtzb3J0VW5kZWZpbmVkOm4uY29sdW1uRGVmLnNvcnRVbmRlZmluZWQsaW52ZXJ0U29ydGluZzpuLmNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nLHNvcnRpbmdGbjpuLmdldFNvcnRpbmdGbigpfSl9KTtsZXQgcz1lPT57bGV0IHQ9ZS5tYXAoZT0+KHsuLi5lfSkpO3JldHVybiB0LnNvcnQoKGUsdCk9Pntmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rPTEpe2xldCByPWFbbl0saT1vW3IuaWRdLHM9aS5zb3J0VW5kZWZpbmVkLGM9cj8uZGVzYz8/ITEsbD0wO2lmKHMpe2xldCBuPWUuZ2V0VmFsdWUoci5pZCksaT10LmdldFZhbHVlKHIuaWQpLGE9bj09PXZvaWQgMCxvPWk9PT12b2lkIDA7aWYoYXx8byl7aWYocz09PWBmaXJzdGApcmV0dXJuIGE/LTE6MTtpZihzPT09YGxhc3RgKXJldHVybiBhPzE6LTE7bD1hJiZvPzA6YT9zOi1zfX1pZihsPT09MCYmKGw9aS5zb3J0aW5nRm4oZSx0LHIuaWQpKSxsIT09MClyZXR1cm4gYyYmKGwqPS0xKSxpLmludmVydFNvcnRpbmcmJihsKj0tMSksbH1yZXR1cm4gZS5pbmRleC10LmluZGV4fSksdC5mb3JFYWNoKGU9Pnt2YXIgdDtpLnB1c2goZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlLnN1YlJvd3M9cyhlLnN1YlJvd3MpKX0pLHR9O3JldHVybntyb3dzOnMobi5yb3dzKSxmbGF0Um93czppLHJvd3NCeUlkOm4ucm93c0J5SWR9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNvcnRlZFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBQUygpe3JldHVybiEwfXZhciBGUz1TeW1ib2woYG1lcmdlLXByb3h5YCksSVM9e2dldChlLHQsbil7cmV0dXJuIHQ9PT1GUz9uOmUuZ2V0KHQpfSxoYXMoZSx0KXtyZXR1cm4gZS5oYXModCl9LHNldDpQUyxkZWxldGVQcm9wZXJ0eTpQUyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIGUuZ2V0KHQpfSxzZXQ6UFMsZGVsZXRlUHJvcGVydHk6UFN9fSxvd25LZXlzKGUpe3JldHVybiBlLmtleXMoKX19O2Z1bmN0aW9uIExTKGUpe3JldHVybmB2YWx1ZWBpbiBlP2UudmFsdWU6ZX1mdW5jdGlvbiBSUygpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3JldHVybiBuZXcgUHJveHkoe2dldCh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IHI9TFMoZVtuXSlbdF07aWYociE9PXZvaWQgMClyZXR1cm4gcn19LGhhcyh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZih0IGluIExTKGVbbl0pKXJldHVybiEwO3JldHVybiExfSxrZXlzKCl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKC4uLk9iamVjdC5rZXlzKExTKGVbbl0pKSk7cmV0dXJuWy4uLkFycmF5LmZyb20obmV3IFNldCh0KSldfX0sSVMpfXZhciB6Uz1GKHtwcm9wczpbYHJlbmRlcmAsYHByb3BzYF0sc2V0dXA6ZT0+KCk9PnR5cGVvZiBlLnJlbmRlcj09YGZ1bmN0aW9uYHx8dHlwZW9mIGUucmVuZGVyPT1gb2JqZWN0YD9HKGUucmVuZGVyLGUucHJvcHMpOmUucmVuZGVyfSk7ZnVuY3Rpb24gQlMoZSl7cmV0dXJuIFJTKGUse2RhdGE6TihlLmRhdGEpfSl9ZnVuY3Rpb24gVlMoZSl7bGV0IHQ9aihlLmRhdGEpLG49alMoUlMoe3N0YXRlOnt9LG9uU3RhdGVDaGFuZ2U6KCk9Pnt9LHJlbmRlckZhbGxiYWNrVmFsdWU6bnVsbCxtZXJnZU9wdGlvbnMoZSxuKXtyZXR1cm4gdD97Li4uZSwuLi5ufTpSUyhlLG4pfX0sdD9CUyhlKTplKSk7aWYodCl7bGV0IHQ9dW4oZS5kYXRhKTtFcih0LCgpPT57bi5zZXRTdGF0ZShlPT4oey4uLmUsZGF0YTp0LnZhbHVlfSkpfSx7aW1tZWRpYXRlOiEwfSl9bGV0IHI9TShuLmluaXRpYWxTdGF0ZSk7cmV0dXJuIENyKCgpPT57bi5zZXRPcHRpb25zKG49PntsZXQgaT1uZXcgUHJveHkoe30se2dldDooZSx0KT0+ci52YWx1ZVt0XX0pO3JldHVybiBSUyhuLHQ/QlMoZSk6ZSx7c3RhdGU6UlMoaSxlLnN0YXRlPz97fSksb25TdGF0ZUNoYW5nZTp0PT57dCBpbnN0YW5jZW9mIEZ1bmN0aW9uP3IudmFsdWU9dChyLnZhbHVlKTpyLnZhbHVlPXQsZS5vblN0YXRlQ2hhbmdlPT1udWxsfHxlLm9uU3RhdGVDaGFuZ2UodCl9fSl9KX0pLG59dmFyIEhTPVtgYXJpYS1sYWJlbGBdLFVTPUYoe19fbmFtZTpgU29ydEhlYWRlckJ1dHRvbmAscHJvcHM6e2hlYWRlcjp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PnQuaGVhZGVyLmNvbHVtbi5nZXRJc1NvcnRlZCgpKSxyPVcoKCk9Pm4udmFsdWU9PT1gYXNjYD9hXzpuLnZhbHVlPT09YGRlc2NgP3ZfOmRfKSxpPVcoKCk9PntsZXQgZT10LmhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcjtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgP2U6dC5oZWFkZXIuY29sdW1uLmlkfSksYT1XKCgpPT57bGV0IGU9bi52YWx1ZT09PWBhc2NgP2Bhc2NlbmRpbmdgOm4udmFsdWU9PT1gZGVzY2A/YGRlc2NlbmRpbmdgOmBub25lYDtyZXR1cm5gU29ydCBieSAke2kudmFsdWV9LCBjdXJyZW50bHkgJHtlfWB9KTtmdW5jdGlvbiBvKCl7dC5oZWFkZXIuY29sdW1uLnRvZ2dsZVNvcnRpbmcobi52YWx1ZT09PWBhc2NgKX1yZXR1cm4odCxpKT0+e2xldCBzPWNhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUigpLHooYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsImFyaWEtbGFiZWwiOmEudmFsdWUsY2xhc3M6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkIHB4LTEuNSBweS0wLjUgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nYCxvbkNsaWNrOm99LFtlLmhlYWRlci5pc1BsYWNlaG9sZGVyP1RzKGBgLCEwKTooUigpLEIoTih6Uykse2tleTowLHJlbmRlcjplLmhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmhlYWRlci5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pKSxIKHMse2ljb246ci52YWx1ZSxjbGFzczpPKFtgc2l6ZS0zIHNocmluay0wYCxuLnZhbHVlP2B0ZXh0LWZvcmVncm91bmRgOmB0ZXh0LW11dGVkLWZvcmVncm91bmQvNjBgXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKV0sOCxIUyl9fX0pLFdTPXsiZGF0YS1zbG90IjpgdGFibGUtY29udGFpbmVyYCxjbGFzczpgcmVsYXRpdmUgdy1mdWxsIG92ZXJmbG93LXgtYXV0b2B9LEdTPUYoe19fbmFtZTpgVGFibGVgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLFdTLFtWKGB0YWJsZWAseyJkYXRhLXNsb3QiOmB0YWJsZWAsY2xhc3M6TyhOKFl2KShgdy1mdWxsIGNhcHRpb24tYm90dG9tIHRleHQtc21gLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSl9fSksS1M9Rih7X19uYW1lOmBUYWJsZUJvZHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0Ym9keWAseyJkYXRhLXNsb3QiOmB0YWJsZS1ib2R5YCxjbGFzczpPKE4oWXYpKGBbJl90cjpsYXN0LWNoaWxkXTpib3JkZXItMGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSkscVM9Rih7X19uYW1lOmBUYWJsZUNlbGxgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0ZGAseyJkYXRhLXNsb3QiOmB0YWJsZS1jZWxsYCxjbGFzczpPKE4oWXYpKGBwLTIgYWxpZ24tbWlkZGxlIHdoaXRlc3BhY2Utbm93cmFwIFsmOmhhcyhbcm9sZT1jaGVja2JveF0pXTpwci0wYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxKUz1GKHtfX25hbWU6YFRhYmxlUm93YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgdHJgLHsiZGF0YS1zbG90IjpgdGFibGUtcm93YCxjbGFzczpPKE4oWXYpKGBob3ZlcjpiZy1tdXRlZC81MCBkYXRhLVtzdGF0ZT1zZWxlY3RlZF06YmctbXV0ZWQgYm9yZGVyLWIgdHJhbnNpdGlvbi1jb2xvcnMgaGFzLWFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQvNTBgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFlTPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMTBgfSxYUz1GKHtfX25hbWU6YFRhYmxlRW1wdHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxjb2xzcGFuOntkZWZhdWx0OjF9fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KFIoKSxCKEpTLG51bGwse2RlZmF1bHQ6UCgoKT0+W0gocVMsa3Moe2NsYXNzOk4oWXYpKGBwLTQgd2hpdGVzcGFjZS1ub3dyYXAgYWxpZ24tbWlkZGxlIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKX0sTihuKSkse2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsWVMsW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pXSksXzozfSwxNixbYGNsYXNzYF0pXSksXzozfSkpfX0pLFpTPUYoe19fbmFtZTpgVGFibGVIZWFkYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgdGhgLHsiZGF0YS1zbG90IjpgdGFibGUtaGVhZGAsY2xhc3M6TyhOKFl2KShgdGV4dC1mb3JlZ3JvdW5kIGgtMTAgcHgtMiB0ZXh0LWxlZnQgYWxpZ24tbWlkZGxlIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIFsmOmhhcyhbcm9sZT1jaGVja2JveF0pXTpwci0wYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxRUz1GKHtfX25hbWU6YFRhYmxlSGVhZGVyYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgdGhlYWRgLHsiZGF0YS1zbG90IjpgdGFibGUtaGVhZGVyYCxjbGFzczpPKE4oWXYpKGBbJl90cl06Ym9yZGVyLWJgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pO2Z1bmN0aW9uICRTKGUsdCl7dC52YWx1ZT10eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQudmFsdWUpOmV9dmFyIGVDPUYoe19fbmFtZTpgRGF0YVRhYmxlYCxwcm9wczp7Y29sdW1uczp7fSxkYXRhOnt9LHJvd0NsYXNzOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e319LHNldHVwKGUpe2xldCB0PWUsbj1NKFtdKSxyPVZTKHtnZXQgZGF0YSgpe3JldHVybiB0LmRhdGF9LGdldCBjb2x1bW5zKCl7cmV0dXJuIHQuY29sdW1uc30sZ2V0Q29yZVJvd01vZGVsOk1TKCksZ2V0U29ydGVkUm93TW9kZWw6TlMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+JFMoZSxuKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gbi52YWx1ZX19fSk7ZnVuY3Rpb24gaShlKXtpZihlPT09YGFzY2ApcmV0dXJuYGFzY2VuZGluZ2A7aWYoZT09PWBkZXNjYClyZXR1cm5gZGVzY2VuZGluZ2B9cmV0dXJuKHQsbik9PihSKCksQihOKEdTKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oUVMpLG51bGwse2RlZmF1bHQ6UCgoKT0+WyhSKCEwKSx6KEwsbnVsbCxtYShOKHIpLmdldEhlYWRlckdyb3VwcygpLGU9PihSKCksQihOKEpTKSx7a2V5OmUuaWR9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEoZS5oZWFkZXJzLGU9PihSKCksQihOKFpTKSx7a2V5OmUuaWQsY2xhc3M6TyhlLmNvbHVtbi5jb2x1bW5EZWYubWV0YT8uYWxpZ249PT1gcmlnaHRgP2B0ZXh0LXJpZ2h0YDp2b2lkIDApLCJhcmlhLXNvcnQiOmUuY29sdW1uLmdldENhblNvcnQoKT9pKGUuY29sdW1uLmdldElzU29ydGVkKCkpPz9gbm9uZWA6dm9pZCAwfSx7ZGVmYXVsdDpQKCgpPT5bZS5jb2x1bW4uZ2V0Q2FuU29ydCgpPyhSKCksQihVUyx7a2V5OjAsaGVhZGVyOmUsY2xhc3M6YC1teC0xLjVgfSxudWxsLDgsW2BoZWFkZXJgXSkpOmUuaXNQbGFjZWhvbGRlcj9UcyhgYCwhMCk6KFIoKSxCKE4oelMpLHtrZXk6MSxyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpXSksXzoyfSwxMDMyLFtgY2xhc3NgLGBhcmlhLXNvcnRgXSkpKSwxMjgpKV0pLF86Mn0sMTAyNCkpKSwxMjgpKV0pLF86MX0pLEgoTihLUyksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoPT09MD8oUigpLEIoTihYUykse2tleTowLGNvbHNwYW46ZS5jb2x1bW5zLmxlbmd0aCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlLmVtcHR5TWVzc2FnZT8/YG5vbmVgKSwxKV0pLF86MX0sOCxbYGNvbHNwYW5gXSkpOlRzKGBgLCEwKSwoUighMCkseihMLG51bGwsbWEoTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MsdD0+KFIoKSxCKE4oSlMpLHtrZXk6dC5pZCxjbGFzczpPKGUucm93Q2xhc3M/Lih0Lm9yaWdpbmFsKSl9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodC5nZXRWaXNpYmxlQ2VsbHMoKSxlPT4oUigpLEIoTihxUykse2tleTplLmlkLGNsYXNzOk8oZS5jb2x1bW4uY29sdW1uRGVmLm1ldGE/LmFsaWduPT09YHJpZ2h0YD9gdGV4dC1yaWdodCB0YWJ1bGFyLW51bXNgOnZvaWQgMCl9LHtkZWZhdWx0OlAoKCk9PltIKE4oelMpLHtyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmNlbGwscHJvcHM6ZS5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pXSksXzoyfSwxMDMyLFtgY2xhc3NgXSkpKSwxMjgpKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KSx0Qz1GKHtfX25hbWU6YEJhZGdlYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx2YXJpYW50Ont9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4ocixpKT0+KFIoKSxCKE4obmIpLGtzKHsiZGF0YS1zbG90IjpgYmFkZ2VgLCJkYXRhLXZhcmlhbnQiOmUudmFyaWFudCxjbGFzczpOKFl2KShOKG5DKSh7dmFyaWFudDplLnZhcmlhbnR9KSx0LmNsYXNzKX0sTihuKSkse2RlZmF1bHQ6UCgoKT0+W0koci4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSksbkM9Q18oYGgtNSBnYXAtMSByb3VuZGVkLTR4bCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMC41IHRleHQteHMgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmPnN2Z106c2l6ZS0zISBncm91cC9iYWRnZSBpbmxpbmUtZmxleCB3LWZpdCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIFsmPnN2Z106cG9pbnRlci1ldmVudHMtbm9uZWAse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OmBiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1wcmltYXJ5LzgwYCxzZWNvbmRhcnk6YGJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1zZWNvbmRhcnkvODBgLGRlc3RydWN0aXZlOmBiZy1kZXN0cnVjdGl2ZS8xMCBbYV06aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMjAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIHRleHQtZGVzdHJ1Y3RpdmUgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMGAsb3V0bGluZTpgYm9yZGVyLWJvcmRlciB0ZXh0LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLW11dGVkIFthXTpob3Zlcjp0ZXh0LW11dGVkLWZvcmVncm91bmRgLGdob3N0OmBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1tdXRlZC81MGAsbGluazpgdGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTthc3luYyBmdW5jdGlvbiByQyhlLHQpe2lmKG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dCl0cnl7cmV0dXJuIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLGBjb3BpZWRgfWNhdGNoe31pZighdClyZXR1cm5gZmFpbGVkYDtsZXQgbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2VsZWN0Tm9kZUNvbnRlbnRzKHQpO2xldCByPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gcj8oci5yZW1vdmVBbGxSYW5nZXMoKSxyLmFkZFJhbmdlKG4pLGBzZWxlY3RlZGApOmBmYWlsZWRgfWZ1bmN0aW9uIGlDKGUsdCl7cmV0dXJuYCR7ZX0vJHt0fWB9ZnVuY3Rpb24gYUMoZSl7cmV0dXJuYCQkeyhlLzFlNikudG9GaXhlZCg0KX1gfWZ1bmN0aW9uIG9DKGUpe3JldHVybiBlLnRvTG9jYWxlU3RyaW5nKGBlbi1VU2ApfWZ1bmN0aW9uIHNDKGUpe2xldCB0PU1hdGguYWJzKGUpO2lmKHQ8MWU0KXJldHVybiBvQyhlKTtsZXQgbj1lPDA/YC1gOmBgLFtyLGldPXQ8MWU2P1sxZTMsYGtgXTp0PDFlOT9bMWU2LGBNYF06WzFlOSxgQmBdLGE9dC9yLG89My0oTWF0aC5mbG9vcihhKT49MTAwPzM6TWF0aC5mbG9vcihhKT49MTA/MjoxKSxzPTEwKipvLGM9KE1hdGguZmxvb3IodCpzL3IpL3MpLnRvRml4ZWQobyk7cmV0dXJuIG8+MCYmKGM9Yy5yZXBsYWNlKC8wKyQvLGBgKS5yZXBsYWNlKC9cLiQvLGBgKSksYCR7bn0ke2N9JHtpfWB9ZnVuY3Rpb24gY0MoZSl7cmV0dXJuIGU+MCYmIShlJmUtMSl9ZnVuY3Rpb24gbEMoZSl7cmV0dXJuIGU8MTAyND9gJHtlfWA6Y0MoZSk/ZTwxMDQ4NTc2P2Ake01hdGgucm91bmQoZS8xMDI0KX1rYDpgJHtNYXRoLnJvdW5kKGUvMTA0ODU3Nil9TWA6ZTwxZTY/YCR7TWF0aC5yb3VuZChlLzFlMyl9a2A6YCR7TWF0aC5yb3VuZChlLzFlNil9TWB9ZnVuY3Rpb24gdUMoZSl7cmV0dXJuYCQke2UudG9GaXhlZCgyKX1gfWZ1bmN0aW9uIGRDKGUsdCl7cmV0dXJuIGU9PT0wJiZ0PT09MD9gZnJlZWA6YGluICR7dUMoZSl9IC8gb3V0ICR7dUModCl9IHBlciBNVG9rYH1mdW5jdGlvbiBmQyhlKXtyZXR1cm4gZTwxZTM/YCR7TWF0aC5yb3VuZChlKX1tc2A6YCR7KGUvMWUzKS50b0ZpeGVkKDEpfXNgfWZ1bmN0aW9uIHBDKGUsdCl7aWYoIWV8fGU9PT1gMDAwMS0wMS0wMVQwMDowMDowMFpgKXJldHVybiBudWxsO2xldCBuPW5ldyBEYXRlKGUpLmdldFRpbWUoKTtyZXR1cm4gTnVtYmVyLmlzTmFOKG4pP251bGw6TWF0aC5tYXgoMCxNYXRoLnJvdW5kKCh0LW4pLzFlMykpfWZ1bmN0aW9uIG1DKGUpe2xldCB0PXBDKGUsRGF0ZS5ub3coKSk7cmV0dXJuIHQ9PT1udWxsP2BgOmAgKCR7dH1zIGFnbylgfWZ1bmN0aW9uIGhDKGUsdD1EYXRlLm5vdygpKXtsZXQgbj1wQyhlLHQpO3JldHVybiBuPT09bnVsbD9gYDpgJHtufXMgYWdvYH1mdW5jdGlvbiBnQyhlKXtpZighZXx8ZT09PWAwMDAxLTAxLTAxVDAwOjAwOjAwWmApcmV0dXJuYGA7bGV0IHQ9bmV3IERhdGUoZSkuZ2V0VGltZSgpO2lmKE51bWJlci5pc05hTih0KSlyZXR1cm5gYDtsZXQgbj1NYXRoLnJvdW5kKCh0LURhdGUubm93KCkpLzFlMyk7cmV0dXJuIG48PTA/YGA6YGluICR7bn1zYH1mdW5jdGlvbiBfQyhlKXtpZighZXx8ZT09PWAwMDAxLTAxLTAxVDAwOjAwOjAwWmApcmV0dXJuYG5ldmVyYDtsZXQgdD1uZXcgRGF0ZShlKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVTdHJpbmcoKX1mdW5jdGlvbiB2QyhlLHQpe3JldHVybiBlP21DKHQpP2ByZWZyZXNoZWRgOmBwZW5kaW5nYDpgb2ZmYH1mdW5jdGlvbiB5QyhlLHQpe3N3aXRjaCh2QyhlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm5gcmVmcmVzaGVkJHttQyh0KX1gfX1mdW5jdGlvbiBiQyhlLHQpe3N3aXRjaCh2QyhlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm4gX0ModCl9fWZ1bmN0aW9uIHhDKGUpe2lmKCFlKXJldHVybmBub25lYDtsZXQgdD1bXTtyZXR1cm4gZS5yZXF1ZXN0c1Blck1pbnV0ZSYmdC5wdXNoKGByZXEvbWluICR7ZS5yZXF1ZXN0c1Blck1pbnV0ZX1gKSxlLnJlcXVlc3RzUGVyRGF5JiZ0LnB1c2goYHJlcS9kYXkgJHtlLnJlcXVlc3RzUGVyRGF5fWApLGUudG9rZW5zUGVyRGF5JiZ0LnB1c2goYHRvay9kYXkgJHtlLnRva2Vuc1BlckRheX1gKSxlLnRva2Vuc1Blck1vbnRoJiZ0LnB1c2goYHRvay9tb250aCAke2UudG9rZW5zUGVyTW9udGh9YCksZS5jb3N0UGVyRGF5VVNEJiZ0LnB1c2goYGNvc3QvZGF5ICQke2UuY29zdFBlckRheVVTRH1gKSxlLmNvc3RQZXJNb250aFVTRCYmdC5wdXNoKGBjb3N0L21vbnRoICQke2UuY29zdFBlck1vbnRoVVNEfWApLHQubGVuZ3RoP3Quam9pbihgLCBgKTpgbm9uZWB9ZnVuY3Rpb24gU0MoZSx0KXtzd2l0Y2godCl7Y2FzZWBob3VyYDpyZXR1cm5gJHtlLnNsaWNlKDgsMTApfTowMCBVVENgO2Nhc2VgZGF5YDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKSxyPU51bWJlcihlLnNsaWNlKDYsOCkpO3JldHVybiBuZXcgRGF0ZSh0LG4tMSxyKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDpgc2hvcnRgLGRheTpgbnVtZXJpY2B9KX1jYXNlYG1vbnRoYDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEsMSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCx5ZWFyOmBudW1lcmljYH0pfX19dmFyIENDPUYoe19fbmFtZTpgTW9kZWxDaGlwYCxwcm9wczp7aWQ6e30sY29udGV4dFRva2Vuczp7fSxpbnB1dFBlck1Ub2tVc2Q6e30sb3V0cHV0UGVyTVRva1VzZDp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXNpKGBsYWJlbGApLHI9TShgaWRsZWApLGk7ZnVuY3Rpb24gYSgpe2NsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoKCk9PntyLnZhbHVlPWBpZGxlYH0sMTUwMCl9YXN5bmMgZnVuY3Rpb24gbygpe2xldCBlPWF3YWl0IHJDKHQuaWQsbi52YWx1ZT8/dm9pZCAwKTtyLnZhbHVlPWUsYSgpfWxldCBzPXtpZGxlOmdfLGNvcGllZDp1XyxzZWxlY3RlZDp1XyxmYWlsZWQ6aF99LGM9VygoKT0+KHtpZGxlOmBDb3B5ICR7dC5pZH1gLGNvcGllZDpgQ29waWVkYCxzZWxlY3RlZDpgU2VsZWN0ZWQg4oCUIHByZXNzIEN0cmwvQ21kK0NgLGZhaWxlZDpgQ29weSBmYWlsZWRgfSkpLGw9VygoKT0+e2xldCBlPVtdO3JldHVybiB0LmlucHV0UGVyTVRva1VzZCE9PXZvaWQgMCYmdC5vdXRwdXRQZXJNVG9rVXNkIT09dm9pZCAwJiZlLnB1c2goZEModC5pbnB1dFBlck1Ub2tVc2QsdC5vdXRwdXRQZXJNVG9rVXNkKSksdC5jb250ZXh0VG9rZW5zIT09dm9pZCAwJiZlLnB1c2goYCR7bEModC5jb250ZXh0VG9rZW5zKX0gY29udGV4dGApLGUuam9pbihgIMK3IGApfSksdT1XKCgpPT57bGV0IGU9Yy52YWx1ZVtyLnZhbHVlXTtyZXR1cm4gbC52YWx1ZT9gJHtlfSDCtyAke2wudmFsdWV9YDplfSk7cmV0dXJuIHRhKCgpPT57Y2xlYXJUaW1lb3V0KGkpfSksKHQsbik9PntsZXQgaT1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSxCKE4odEMpLHthczpgYnV0dG9uYCx0eXBlOmBidXR0b25gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6TyhbYGN1cnNvci1wb2ludGVyIGdhcC0xIGZvbnQtbW9ubyB0ZXh0LXhzIGZvbnQtbm9ybWFsIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kYCxyLnZhbHVlPT09YGZhaWxlZGA/YHRleHQtZGVzdHJ1Y3RpdmVgOmBgXSksdGl0bGU6dS52YWx1ZSwiYXJpYS1sYWJlbCI6dS52YWx1ZSxvbkNsaWNrOm99LHtkZWZhdWx0OlAoKCk9PltWKGBzcGFuYCx7cmVmOmBsYWJlbGAsY2xhc3M6YHNlbGVjdC10ZXh0YH0sayhlLmlkKSw1MTMpLEgoaSx7aWNvbjpzW3IudmFsdWVdLGNsYXNzOmBzaXplLTIuNSBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9LDgsW2BjbGFzc2AsYHRpdGxlYCxgYXJpYS1sYWJlbGBdKX19fSk7ZnVuY3Rpb24gd0MoZSx0KXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKGUpfHxlPD0wP251bGw6KGUtKE51bWJlci5pc0Zpbml0ZSh0KT90OjApKS9lfWZ1bmN0aW9uIFRDKGUpe3JldHVybiBlPT09bnVsbD9gbm8tdHJhZmZpY2A6ZTwuOT9gc2V2ZXJlYDplPC45OT9gZGVncmFkZWRgOmBoZWFsdGh5YH1mdW5jdGlvbiBFQyhlLHQpe2xldCBuPXdDKGUsdCk7cmV0dXJuIG4hPT1udWxsJiZuPC45OX1mdW5jdGlvbiBEQyhlKXtyZXR1cm4gZT49MT9gMTAwJWA6YCR7TWF0aC5mbG9vcihlKjEwMCl9JWB9ZnVuY3Rpb24gT0MoZSx0LG4pe3JldHVybiBlPT09MT90Om59ZnVuY3Rpb24ga0MoZSx0KXtpZihlPD0wKXJldHVybmBubyB0cmFmZmljIGluIHRoZSBsYXN0IG1pbnV0ZWA7bGV0IG49d0MoZSx0KSxyPW49PT1udWxsP2BgOmAgKCR7REMobil9KWA7cmV0dXJuYCR7ZX0gJHtPQyhlLGBhdHRlbXB0YCxgYXR0ZW1wdHNgKX0sICR7dH0gJHtPQyh0LGBmYWlsdXJlYCxgZmFpbHVyZXNgKX0gaW4gdGhlIGxhc3QgbWludXRlJHtyfWB9ZnVuY3Rpb24gQUMoZSx0KXtpZihlPD0wKXJldHVybmBubyB0cmFmZmljIHRvZGF5YDtsZXQgbj13QyhlLHQpLHI9bj09PW51bGw/YGA6YCAoJHtEQyhuKX0pYDtyZXR1cm5gJHtlfSAke09DKGUsYGF0dGVtcHRgLGBhdHRlbXB0c2ApfSwgJHt0fSAke09DKHQsYGZhaWx1cmVgLGBmYWlsdXJlc2ApfSB0b2RheSR7cn1gfXZhciBqQz17ImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LE1DPXtjbGFzczpgc3Itb25seWB9LE5DPUYoe19fbmFtZTpgUHJvdmlkZXJSYXRlQmFkZ2VgLHByb3BzOnthdHRlbXB0c0RheTp7fSxmYWlsdXJlc0RheTp7fSxhdHRlbXB0c01pbnV0ZTp7fSxmYWlsdXJlc01pbnV0ZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PndDKHQuYXR0ZW1wdHNEYXksdC5mYWlsdXJlc0RheSkpLHI9VygoKT0+VEMobi52YWx1ZSkpLGk9VygoKT0+ci52YWx1ZT09PWBuby10cmFmZmljYD9gbm8gdHJhZmZpY2A6REMobi52YWx1ZSkpLGE9VygoKT0+dC5hdHRlbXB0c01pbnV0ZT09PXZvaWQgMHx8dC5mYWlsdXJlc01pbnV0ZT09PXZvaWQgMD9BQyh0LmF0dGVtcHRzRGF5LHQuZmFpbHVyZXNEYXkpOmtDKHQuYXR0ZW1wdHNNaW51dGUsdC5mYWlsdXJlc01pbnV0ZSkpLG89VygoKT0+ci52YWx1ZT09PWBzZXZlcmVgP2BkZXN0cnVjdGl2ZWA6ci52YWx1ZT09PWBoZWFsdGh5YD9gc2Vjb25kYXJ5YDpgb3V0bGluZWApLHM9VygoKT0+ci52YWx1ZT09PWBkZWdyYWRlZGA/YGJvcmRlci1zdGF0dXMtd2Fybi80MCB0ZXh0LXN0YXR1cy13YXJuYDpyLnZhbHVlPT09YG5vLXRyYWZmaWNgP2B0ZXh0LW11dGVkLWZvcmVncm91bmRgOmBgKTtyZXR1cm4oZSx0KT0+KFIoKSxCKE4odEMpLHthczpgc3BhbmAsdmFyaWFudDpvLnZhbHVlLGNsYXNzOk8oW3MudmFsdWUsYGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2BdKSx0aXRsZTphLnZhbHVlfSx7ZGVmYXVsdDpQKCgpPT5bVihgc3BhbmAsakMsayhpLnZhbHVlKSwxKSxWKGBzcGFuYCxNQyxrKGEudmFsdWUpLDEpXSksXzoxfSw4LFtgdmFyaWFudGAsYGNsYXNzYCxgdGl0bGVgXSkpfX0pLFBDPUYoe19fbmFtZTpgU2VhcmNoSW5wdXRgLHByb3BzOnttb2RlbFZhbHVlOnt9LHBsYWNlaG9sZGVyOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1XKCgpPT5uLm1vZGVsVmFsdWUubGVuZ3RoPjApO2Z1bmN0aW9uIGEoZSl7cihgdXBkYXRlOm1vZGVsVmFsdWVgLFN0cmluZyhlKSl9ZnVuY3Rpb24gbygpe3IoYHVwZGF0ZTptb2RlbFZhbHVlYCxgYCl9cmV0dXJuKHQscik9PntsZXQgcz1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSx6KGBkaXZgLHtjbGFzczpPKE4oWXYpKGByZWxhdGl2ZWAsbi5jbGFzcykpfSxbSChzLHtpY29uOk4ocl8pLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgbGVmdC0yLjUgc2l6ZS0zLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLEgoTihRYikseyJtb2RlbC12YWx1ZSI6ZS5tb2RlbFZhbHVlLHR5cGU6YHRleHRgLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsImFyaWEtbGFiZWwiOmUucGxhY2Vob2xkZXIsY2xhc3M6YHByLTggcGwtOGAsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmF9LG51bGwsOCxbYG1vZGVsLXZhbHVlYCxgcGxhY2Vob2xkZXJgLGBhcmlhLWxhYmVsYF0pLGkudmFsdWU/KFIoKSxCKE4oV2IpLHtrZXk6MCx0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCwiYXJpYS1sYWJlbCI6YENsZWFyIHNlYXJjaGAsY2xhc3M6YGFic29sdXRlIHRvcC0xLzIgcmlnaHQtMSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgLG9uQ2xpY2s6b30se2RlZmF1bHQ6UCgoKT0+W0gocyx7aWNvbjpOKGZfKSxjbGFzczpgc2l6ZS0zLjVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSkpOlRzKGBgLCEwKV0sMil9fX0pLEZDPUYoe19fbmFtZTpgQWNjb3JkaW9uYCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sZGlyOnt9LG9yaWVudGF0aW9uOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx0eXBlOnt9LG1vZGVsVmFsdWU6e30sZGVmYXVsdFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1xeShDeShuLGBjbGFzc2ApLHIpO3JldHVybihlLHQpPT4oUigpLEIoTihoYiksa3MoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb25gfSxOKGkpLHtjbGFzczpOKFl2KShgZmxleCB3LWZ1bGwgZmxleC1jb2xgLG4uY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksSUM9Rih7X19uYW1lOmBBY2NvcmRpb25Db250ZW50YCxwcm9wczp7Zm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oYmIpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLWNvbnRlbnRgfSxOKG4pLHtjbGFzczpgZGF0YS1vcGVuOmFuaW1hdGUtYWNjb3JkaW9uLWRvd24gZGF0YS1jbG9zZWQ6YW5pbWF0ZS1hY2NvcmRpb24tdXAgdGV4dC1zbSBvdmVyZmxvdy1oaWRkZW5gfSkse2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAse2NsYXNzOk8oTihZdikoYHB0LTAgcGItMi41IFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kIFsmX3A6bm90KDpsYXN0LWNoaWxkKV06bWItNGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKV0pLF86M30sMTYpKX19KSxMQz1GKHtfX25hbWU6YEFjY29yZGlvbkl0ZW1gLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFufSx2YWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1LeShDeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oeWIpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLWl0ZW1gfSxOKG4pLHtjbGFzczpOKFl2KShgbm90LWxhc3Q6Ym9yZGVyLWJgLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksUkM9Rih7X19uYW1lOmBBY2NvcmRpb25UcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUN5KHQsYGNsYXNzYCk7cmV0dXJuKGUscik9PntsZXQgaT1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSxCKE4oeGIpLHtjbGFzczpgZmxleGB9LHtkZWZhdWx0OlAoKCk9PltIKE4oU2IpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXJgfSxOKG4pLHtjbGFzczpOKFl2KShgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOmFmdGVyOmJvcmRlci1yaW5nICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbGcgcHktMi41IHRleHQtbGVmdCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBmb2N1cy12aXNpYmxlOnJpbmctMyAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOm1sLWF1dG8gKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTpzaXplLTQgZ3JvdXAvYWNjb3JkaW9uLXRyaWdnZXIgcmVsYXRpdmUgZmxleCBmbGV4LTEgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1hbGwgb3V0bGluZS1ub25lIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGApLEkoZS4kc2xvdHMsYGljb25gLHt9LCgpPT5bSChpLHtpY29uOk4obV8pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBzaHJpbmstMCBncm91cC1hcmlhLWV4cGFuZGVkL2FjY29yZGlvbi10cmlnZ2VyOmhpZGRlbmB9LG51bGwsOCxbYGljb25gXSksSChpLHtpY29uOk4oc18pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBoaWRkZW4gc2hyaW5rLTAgZ3JvdXAtYXJpYS1leHBhbmRlZC9hY2NvcmRpb24tdHJpZ2dlcjppbmxpbmVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9KX19fSk7ZnVuY3Rpb24gekMoKXtsZXQgZT1NKGBgKSx0PVcoKCk9PmUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO3JldHVybntxdWVyeTplLG5vcm1hbGl6ZWQ6dCxoYXNRdWVyeTpXKCgpPT50LnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQkMoZSx0LG4pe2lmKCF0KXJldHVybiBuZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7bGV0IHI9bmV3IFNldChlLm1hbnVhbGx5RXhwYW5kZWQpO2ZvcihsZXQgdCBvZiBuKWUubWFudWFsbHlDb2xsYXBzZWQuaGFzKHQpfHxyLmFkZCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBWQyhlLHQsbil7bj8oZS5tYW51YWxseUV4cGFuZGVkLmRlbGV0ZSh0KSxlLm1hbnVhbGx5Q29sbGFwc2VkLmFkZCh0KSk6KGUubWFudWFsbHlDb2xsYXBzZWQuZGVsZXRlKHQpLGUubWFudWFsbHlFeHBhbmRlZC5hZGQodCkpfWZ1bmN0aW9uIEhDKGUpe2UubWFudWFsbHlDb2xsYXBzZWQuY2xlYXIoKX12YXIgVUM9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sV0M9e2NsYXNzOmBncmlkIGdhcC00IHNtOmdyaWQtY29scy0zYH0sR0M9e2NsYXNzOmBmb250LW1lZGl1bWB9LEtDPXtrZXk6MCxjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41IHRleHQtZGVzdHJ1Y3RpdmVgfSxxQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sSkM9e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxZQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sWEM9e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxaQz17a2V5OjAsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxRQz17a2V5OjEsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSwkQz17Y2xhc3M6YGZsZXggZmxleC0xIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtMyBnYXAteS0xIHByLTIgdGV4dC1sZWZ0YH0sZXc9e2NsYXNzOmBmb250LW1lZGl1bWB9LHR3PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sbnc9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHJ3PXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTNgfSxpdz17Y2xhc3M6YGJyZWFrLWFsbGB9LGF3PXtrZXk6MH0sb3c9e2tleToxfSxzdz17Y2xhc3M6YHRleHQtZGVzdHJ1Y3RpdmVgfSxjdz17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxsdz17a2V5OjAsdGl0bGU6YGNvbnRleHQgd2luZG93YCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sdXc9e2tleToxLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGR3PXtrZXk6MCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxmdz1gUGVyLXJlcGxpY2EsIGluLXByb2Nlc3Mgb25seSDigJQgbm90IGEgZmxlZXQtd2lkZSBhdmVyYWdlIGFjcm9zcyB0aGlzIGRlcGxveW1lbnTigJlzIHJlcGxpY2FzLmAscHc9Rih7X19uYW1lOmBQcm92aWRlcnNWaWV3YCxzZXR1cChlKXtsZXQgdD1jeCgpLG49VygoKT0+dC5vdmVydmlldykscj1adCh7bWFudWFsbHlFeHBhbmRlZDpuZXcgU2V0LG1hbnVhbGx5Q29sbGFwc2VkOm5ldyBTZXR9KSx7cXVlcnk6aSxub3JtYWxpemVkOmEsaGFzUXVlcnk6b309ekMoKTtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGlDKGUsdCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhhLnZhbHVlKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLm1vZGVscy5zb21lKHQ9PnMoZS5uYW1lLHQpKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLmFsaWFzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYS52YWx1ZSl8fGUudGFyZ2V0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYS52YWx1ZSl9bGV0IHU9VygoKT0+e2xldCBlPW4udmFsdWU/LnByb3ZpZGVycz8/W107cmV0dXJuIG8udmFsdWU/ZS5maWx0ZXIoYyk6ZX0pLGQ9VygoKT0+e2xldCBlPW4udmFsdWU/LmFsaWFzZXM/P1tdO3JldHVybiBvLnZhbHVlP2UuZmlsdGVyKGwpOmV9KSxmPVcoKCk9PkJDKHIsby52YWx1ZSx1LnZhbHVlLm1hcChlPT5lLm5hbWUpKSk7ZnVuY3Rpb24gcChlKXtWQyhyLGUsZi52YWx1ZS5oYXMoZSkpfWxldCBtPVcoe2dldDooKT0+QXJyYXkuZnJvbShmLnZhbHVlKSxzZXQ6ZT0+e2xldCB0PW5ldyBTZXQoZSk7Zm9yKGxldCBlIG9mIGYudmFsdWUpdC5oYXMoZSl8fHAoZSk7Zm9yKGxldCBlIG9mIHQpZi52YWx1ZS5oYXMoZSl8fHAoZSl9fSk7RXIoaSxlPT57ZS50cmltKCk9PT1gYCYmSEMocil9KTtmdW5jdGlvbiBoKGUpe3JldHVybiBvLnZhbHVlP2UubW9kZWxzLmZpbHRlcih0PT5zKGUubmFtZSx0KSk6ZS5tb2RlbHN9bGV0IGc9e2F0dGVtcHRzRGF5OjAsZmFpbHVyZXNEYXk6MH07ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBlLm1vZGVsUmF0ZXM/Llt0XT8/Z31mdW5jdGlvbiB2KGUsdCl7bGV0IG49XyhlLHQpO3JldHVybiBFQyhuLmF0dGVtcHRzRGF5LG4uZmFpbHVyZXNEYXkpfWxldCB5PXt9O2Z1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZS5tb2RlbE1ldGE/Llt0XT8/eX1mdW5jdGlvbiB4KGUpe3N3aXRjaChlKXtjYXNlYG9wZW5gOnJldHVybmBkZXN0cnVjdGl2ZWA7Y2FzZWBoYWxmLW9wZW5gOnJldHVybmBzZWNvbmRhcnlgO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBTKGUpe2xldCB0PWdDKGUub3BlblVudGlsKTtyZXR1cm4gdD9gJHtlLmhlYWx0aFN0YXRlfSAoJHt0fSlgOmUuaGVhbHRoU3RhdGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZT09PWBvcGVuYD9gdGV4dC1kZXN0cnVjdGl2ZWA6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZS5sYXRlbmN5Py5zdHJlYW1pbmd9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuIGUubGF0ZW5jeT8uW2Bub24tc3RyZWFtaW5nYF19ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGUuY291bnQ9PT12b2lkIDA/YG5vIG9ic2VydmF0aW9ucyBjb3VudGVkYDpgJHtlLmNvdW50fSAke2UuY291bnQ9PT0xP2BvYnNlcnZhdGlvbmA6YG9ic2VydmF0aW9uc2B9IG9uIHRoaXMgcmVwbGljYWB9ZnVuY3Rpb24gVChlKXtyZXR1cm5gQXZlcmFnZSB0aW1lIHRvIGZpcnN0IGJ5dGUsIHRoZSBsb2FkLXNlbnNpdGl2ZSByZWFkaW5nIGZvciBzdHJlYW1pbmcgdHJhZmZpYy4gJHt0ZShlKX0uICR7Znd9YH1mdW5jdGlvbiBuZShlKXtyZXR1cm5gQXZlcmFnZSB0b3RhbCByZXNwb25zZSB0aW1lLCBpbmNsdWRpbmcgZ2VuZXJhdGlvbiDigJQgbm90IGEgbG9hZC1zZW5zaXRpdmUgc2lnbmFsIGxpa2Ugc3RyZWFtaW5nIHR0ZmIsIHNpbmNlIHRoaXMgcHJvdmlkZXIgYnVmZmVycyB0aGUgd2hvbGUgY29tcGxldGlvbiBiZWZvcmUgc2VuZGluZyBhbnl0aGluZy4gJHt0ZShlKX0uICR7Znd9YH1mdW5jdGlvbiByZShlKXtyZXR1cm4gZS5wcm92ZW5hbmNlPy5lc3RpbWF0ZWR9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIGUucHJvdmVuYW5jZT8udW5iaWxsZWR9ZnVuY3Rpb24gRShlKXtsZXQgdD1lLnJlcXVlc3RzPT09MT9gYDpgc2A7cmV0dXJuYCR7ZS5yZXF1ZXN0c30gbm9uLXN0cmVhbWluZyByZXNwb25zZSR7dH0gY2FycmllZCBubyB1c2FnZSBmcm9tIHRoZSBwcm92aWRlciDigJQgcHJvbXB0IHRva2VucyB3ZXJlIGVzdGltYXRlZCBmcm9tIHJlcXVlc3QgYm9keSBzaXplIGluc3RlYWQgKCR7ZS50b2tlbnN9IHRva2VucyBiaWxsZWQgZnJvbSB0aGUgZXN0aW1hdGUpLCBjb21wbGV0aW9uIGJpbGxlZCBhcyB6ZXJvLiAke2Z3fWB9ZnVuY3Rpb24gYWUoZSl7bGV0IHQ9ZS5yZXF1ZXN0cz09PTE/YGA6YHNgO3JldHVybmAke2UucmVxdWVzdHN9IHN0cmVhbWluZyByZXNwb25zZSR7dH0gY2FycmllZCBubyB1c2FnZSBmcm9tIHRoZSBwcm92aWRlciDigJQgdGhlIHJlcXVlc3Qgd2FzIGNvdW50ZWQgYnV0IHplcm8gdG9rZW5zIHdlcmUgYmlsbGVkLiBJZiB0aGlzIGtlZXBzIGhhcHBlbmluZywgdGhpcyBwcm92aWRlciBtYXkgYmUgc2VydmluZyBjb21wbGV0aW9ucyBlbnRpcmVseSBmcmVlIGFnYWluc3QgZXZlcnkgYnVkZ2V0LiAke2Z3fWB9bGV0IG9lPVt7aWQ6YGFsaWFzYCxoZWFkZXI6YEFsaWFzYCxhY2Nlc3NvckZuOmU9PmUuYWxpYXMsY2VsbDooe3JvdzplfSk9PkcoQ0Mse2lkOmUub3JpZ2luYWwuYWxpYXMsY29udGV4dFRva2VuczplLm9yaWdpbmFsLm1vZGVsTWV0YT8uY29udGV4dFRva2VucyxpbnB1dFBlck1Ub2tVc2Q6ZS5vcmlnaW5hbC5tb2RlbE1ldGE/LmlucHV0UGVyTVRva1VzZCxvdXRwdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwubW9kZWxNZXRhPy5vdXRwdXRQZXJNVG9rVXNkfSl9LHtpZDpgdGFyZ2V0YCxoZWFkZXI6YFRhcmdldGAsYWNjZXNzb3JGbjplPT5lLnRhcmdldCxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxlLm9yaWdpbmFsLnRhcmdldCl9XSxzZT1XKCgpPT5uLnZhbHVlPy5hbGlhc2VzLmxlbmd0aD9vLnZhbHVlP2BubyBhbGlhc2VzIG1hdGNoICIke2kudmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKTtyZXR1cm4oZSx0KT0+e2xldCByPWNhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUigpLHooYGRpdmAsVUMsW1YoYGRpdmAsV0MsW0goTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChyLHtpY29uOm4udmFsdWU/LnJlZGlzLmNvbmZpZ3VyZWQ/TihwXyk6TihjXyksY2xhc3M6Tyhbbi52YWx1ZT8ucmVkaXMuY29uZmlndXJlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksdFsyXXx8PVUoYCBSZWRpcyBgLC0xKV0pLF86MX0pXSksXzoxfSksSChOKEpiKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEgdGV4dC1zbWB9LHtkZWZhdWx0OlAoKCk9PltWKGBwYCxHQyxrKG4udmFsdWU/LnJlZGlzLmNvbmZpZ3VyZWQ/YENvbmZpZ3VyZWRgOmBOb3QgY29uZmlndXJlZGApLDEpLG4udmFsdWU/LnJlZGlzLmxhc3RFcnI/KFIoKSx6KGBwYCxLQyxbSChyLHtpY29uOk4oaF8pLGNsYXNzOmBtdC0wLjUgc2l6ZS0zLjUgc2hyaW5rLTBgfSxudWxsLDgsW2BpY29uYF0pLFYoYHNwYW5gLG51bGwsayhuLnZhbHVlLnJlZGlzLmxhc3RFcnIpK2soTihtQykobi52YWx1ZS5yZWRpcy5sYXN0RXJyQXQpKSwxKV0pKTpUcyhgYCwhMCldKSxfOjF9KV0pLF86MX0pLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChyLHtpY29uOm4udmFsdWU/LmNhY2hlLmVuYWJsZWQ/TihwXyk6TihjXyksY2xhc3M6Tyhbbi52YWx1ZT8uY2FjaGUuZW5hYmxlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksdFszXXx8PVUoYCBSZXNwb25zZSBjYWNoZSBgLC0xKV0pLF86MX0pXSksXzoxfSksSChOKEpiKSx7Y2xhc3M6YHRleHQtc21gfSx7ZGVmYXVsdDpQKCgpPT5bVihgcGAscUMsayhuLnZhbHVlPy5jYWNoZS5lbmFibGVkP2BFbmFibGVkYDpgRGlzYWJsZWRgKSwxKSxuLnZhbHVlPy5jYWNoZS5lbmFibGVkPyhSKCkseihgcGAsSkMsYHR0bCBgK2sobi52YWx1ZS5jYWNoZS50dGwpLDEpKTpUcyhgYCwhMCldKSxfOjF9KV0pLF86MX0pLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChyLHtpY29uOm4udmFsdWU/LnJldHJ5LmVuYWJsZWQ/TihwXyk6TihjXyksY2xhc3M6Tyhbbi52YWx1ZT8ucmV0cnkuZW5hYmxlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksdFs0XXx8PVUoYCBSZXRyeSBgLC0xKV0pLF86MX0pXSksXzoxfSksSChOKEpiKSx7Y2xhc3M6YHRleHQtc21gfSx7ZGVmYXVsdDpQKCgpPT5bVihgcGAsWUMsayhuLnZhbHVlPy5yZXRyeS5lbmFibGVkP2BFbmFibGVkYDpgRGlzYWJsZWRgKSwxKSxuLnZhbHVlPy5yZXRyeS5lbmFibGVkPyhSKCkseihgcGAsWEMsYCBhdHRlbXB0cyBgK2sobi52YWx1ZS5yZXRyeS5hdHRlbXB0cykrYCwgYmFja29mZiBgK2sobi52YWx1ZS5yZXRyeS5iYWNrb2ZmKSwxKSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KV0pLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbNV18fD1bVShgUHJvdmlkZXJzYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzZdfHw9W1UoYCBFdmVyeSBjb25maWd1cmVkIHVwc3RyZWFtIGFuZCBpdHMgbGFzdCBkaXNjb3ZlcnkgcmVmcmVzaC4gU2VhcmNoIGZpbHRlcnMgcHJvdmlkZXJzIGFuZCBhbGlhc2VzIGJ5IG1vZGVsIGlkLiBgLC0xKV1dKSxfOjF9KSxIKFBDLHttb2RlbFZhbHVlOk4oaSksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKGkpP2kudmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBTZWFyY2ggbW9kZWxzIG9yIGFsaWFzZXMuLi5gLGNsYXNzOmBtdC0yIG1heC13LXNtYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLF86MX0pLEgoTihKYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bbi52YWx1ZT8ucHJvdmlkZXJzLmxlbmd0aD9OKG8pJiZ1LnZhbHVlLmxlbmd0aD09PTA/KFIoKSx6KGBwYCxRQyxgIG5vIHByb3ZpZGVycyBtYXRjaCAiYCtrKE4oaSkpK2AiIGAsMSkpOihSKCksQihOKEZDKSx7a2V5OjIsbW9kZWxWYWx1ZTptLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+bS52YWx1ZT1lLHR5cGU6YG11bHRpcGxlYCxjbGFzczpgcm91bmRlZC1tZCBib3JkZXIgcHgtM2B9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodS52YWx1ZSxlPT4oUigpLEIoTihMQykse2tleTplLm5hbWUsdmFsdWU6ZS5uYW1lfSx7ZGVmYXVsdDpQKCgpPT5bSChOKFJDKSxudWxsLHtkZWZhdWx0OlAoKCk9PltWKGBzcGFuYCwkQyxbVihgc3BhbmAsZXcsayhlLm5hbWUpLDEpLEgoTih0Qykse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGB9LHtkZWZhdWx0OlAoKCk9PltVKGsoZS50eXBlKSwxKV0pLF86Mn0sMTAyNCksVihgc3BhbmAsdHcsayhlLm1vZGVsQ291bnQpK2AgbW9kZWxzYCwxKSxIKE5DLHsiYXR0ZW1wdHMtZGF5IjplLmF0dGVtcHRzRGF5LCJmYWlsdXJlcy1kYXkiOmUuZmFpbHVyZXNEYXksImF0dGVtcHRzLW1pbnV0ZSI6ZS5hdHRlbXB0c01pbnV0ZSwiZmFpbHVyZXMtbWludXRlIjplLmZhaWx1cmVzTWludXRlfSxudWxsLDgsW2BhdHRlbXB0cy1kYXlgLGBmYWlsdXJlcy1kYXlgLGBhdHRlbXB0cy1taW51dGVgLGBmYWlsdXJlcy1taW51dGVgXSksZS5oZWFsdGhTdGF0ZT09PWBjbG9zZWRgP1RzKGBgLCEwKTooUigpLEIoTih0Qykse2tleTowLGFzOmBzcGFuYCx2YXJpYW50OngoZS5oZWFsdGhTdGF0ZSksY2xhc3M6YGZvbnQtbm9ybWFsYCx0aXRsZTplLmhlYWx0aFN0YXRlPT09YG9wZW5gP2BkaXNjb3ZlcnkgaXMgYmFja2luZyBvZmYgYWZ0ZXIgcmVwZWF0ZWQgZmFpbHVyZXNgOmBhIGRpc2NvdmVyeSBwcm9iZSBpcyBkZWNpZGluZyB3aGV0aGVyIHRvIHJlY292ZXJgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKFMoZSkpLDEpXSksXzoyfSwxMDMyLFtgdmFyaWFudGAsYHRpdGxlYF0pKSx3KGUpPy5hdmdUdGZiTXM9PT12b2lkIDA/VHMoYGAsITApOihSKCksQihOKHRDKSx7a2V5OjEsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOlQodyhlKSl9LHtkZWZhdWx0OlAoKCk9PltVKGAgc3RyZWFtaW5nIHR0ZmIgYCtrKE4oZkMpKHcoZSkuYXZnVHRmYk1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksZWUoZSk/LmF2Z0R1cmF0aW9uTXM9PT12b2lkIDA/VHMoYGAsITApOihSKCksQihOKHRDKSx7a2V5OjIsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOm5lKGVlKGUpKX0se2RlZmF1bHQ6UCgoKT0+W1UoYCBub24tc3RyZWFtaW5nIGF2ZyBgK2soTihmQykoZWUoZSkuYXZnRHVyYXRpb25NcykpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpLHJlKGUpPyhSKCksQihOKHRDKSx7a2V5OjMsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6RShyZShlKSl9LHtkZWZhdWx0OlAoKCk9PltVKGAgZXN0aW1hdGVkIGArayhyZShlKS5yZXF1ZXN0cyksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSk6VHMoYGAsITApLGllKGUpPyhSKCksQihOKHRDKSx7a2V5OjQsYXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTphZShpZShlKSl9LHtkZWZhdWx0OlAoKCk9PltVKGAgdW5iaWxsZWQgYCtrKGllKGUpLnJlcXVlc3RzKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTpUcyhgYCwhMCksZS5sYXN0RXJyPyhSKCksQihyLHtrZXk6NSxpY29uOk4oaF8pLGNsYXNzOmBzaXplLTMuNSBzaHJpbmstMCB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSk6VHMoYGAsITApLFYoYHNwYW5gLG53LGsoTih5QykoZS5kaXNjb3ZlcnlFbmFibGVkLGUubGFzdFJlZnJlc2gpKSwxKV0pXSksXzoyfSwxMDI0KSxIKE4oSUMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYGRsYCxydyxbVihgZGl2YCxudWxsLFt0WzddfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQmFzZSBVUkxgLC0xKSxWKGBkZGAsaXcsayhlLmJhc2VVcmwpLDEpXSksVihgZGl2YCxudWxsLFt0WzhdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGFzdCByZWZyZXNoYCwtMSksVihgZGRgLG51bGwsayhOKGJDKShlLmRpc2NvdmVyeUVuYWJsZWQsZS5sYXN0UmVmcmVzaCkpLDEpXSksZS5oZWFsdGhTdGF0ZT09PWBjbG9zZWRgP1RzKGBgLCEwKTooUigpLHooYGRpdmAsYXcsW3RbOV18fD1WKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBEaXNjb3ZlcnkgaGVhbHRoYCwtMSksVihgZGRgLHtjbGFzczpPKEMoZS5oZWFsdGhTdGF0ZSkpfSxrKFMoZSkpLDMpXSkpLGUubGFzdEVycj8oUigpLHooYGRpdmAsb3csW3RbMTBdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGFzdCBlcnJvcmAsLTEpLFYoYGRkYCxzdyxrKGUubGFzdEVyciksMSldKSk6VHMoYGAsITApXSksaChlKS5sZW5ndGg/KFIoKSx6KGBkaXZgLGN3LFsoUighMCkseihMLG51bGwsbWEoaChlKSx0PT4oUigpLHooYHNwYW5gLHtrZXk6dCxjbGFzczpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xYH0sW0goQ0Mse2lkOk4oaUMpKGUubmFtZSx0KSwiY29udGV4dC10b2tlbnMiOmIoZSx0KS5jb250ZXh0VG9rZW5zLCJpbnB1dC1wZXItbS10b2stdXNkIjpiKGUsdCkuaW5wdXRQZXJNVG9rVXNkLCJvdXRwdXQtcGVyLW0tdG9rLXVzZCI6YihlLHQpLm91dHB1dFBlck1Ub2tVc2R9LG51bGwsOCxbYGlkYCxgY29udGV4dC10b2tlbnNgLGBpbnB1dC1wZXItbS10b2stdXNkYCxgb3V0cHV0LXBlci1tLXRvay11c2RgXSksYihlLHQpLmNvbnRleHRUb2tlbnM9PT12b2lkIDA/VHMoYGAsITApOihSKCkseihgc3BhbmAsbHcsayhOKGxDKShiKGUsdCkuY29udGV4dFRva2VucykpLDEpKSx2KGUsdCk/KFIoKSxCKE5DLHtrZXk6MSwiYXR0ZW1wdHMtZGF5IjpfKGUsdCkuYXR0ZW1wdHNEYXksImZhaWx1cmVzLWRheSI6XyhlLHQpLmZhaWx1cmVzRGF5fSxudWxsLDgsW2BhdHRlbXB0cy1kYXlgLGBmYWlsdXJlcy1kYXlgXSkpOlRzKGBgLCEwKV0pKSksMTI4KSldKSk6KFIoKSx6KGBwYCx1dyxgbm8gbW9kZWxzIGtub3duIHlldGApKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKSk6KFIoKSx6KGBwYCxaQyxgbm9uZWApKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsxMV18fD1bVShgTW9kZWwgYWxpYXNlc2AsLTEpXV0pLF86MX0pLEgoTihZYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsxMl18fD1bVShgT3BlcmF0b3ItZGVmaW5lZCBhbGlhcyDihpIgdGFyZ2V0IG1vZGVsIG1hcHBpbmdzLmAsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKGVDLHtjb2x1bW5zOm9lLGRhdGE6ZC52YWx1ZSwiZW1wdHktbWVzc2FnZSI6c2UudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBlbXB0eS1tZXNzYWdlYF0pXSksXzoxfSldKSxfOjF9KSxuLnZhbHVlPy52ZXJzaW9uPyhSKCkseihgcGAsZHcsYFZlcnNpb246IGArayhuLnZhbHVlLnZlcnNpb24pLDEpKTpUcyhgYCwhMCldKX19fSksbXc9W2B0aXRsZWBdLGh3PXsiYXJpYS1oaWRkZW4iOmB0cnVlYH0sZ3c9e2NsYXNzOmBzci1vbmx5YH0sX3c9Rih7X19uYW1lOmBDb21wYWN0TnVtYmVyYCxwcm9wczp7dmFsdWU6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT5zQyh0LnZhbHVlKSkscj1XKCgpPT5vQyh0LnZhbHVlKSk7cmV0dXJuKGUsdCk9PihSKCkseihgc3BhbmAse3RpdGxlOnIudmFsdWV9LFtWKGBzcGFuYCxodyxrKG4udmFsdWUpLDEpLFYoYHNwYW5gLGd3LGsoci52YWx1ZSksMSldLDgsbXcpKX19KTtmdW5jdGlvbiB2dyhlLHQsbil7cmV0dXJue2lkOmUsaGVhZGVyOnQsYWNjZXNzb3JGbjpuLG1ldGE6e2FsaWduOmByaWdodGB9LGNlbGw6KHtyb3c6ZX0pPT5HKF93LHt2YWx1ZTpuKGUub3JpZ2luYWwpfSl9fXZhciB5dz1gbm90IG9ic2VydmVkIHlldCDigJQgbm8gdHJhZmZpYyBhbmQgcHJvYmVzIGRpc2FibGVkIG9yIG5vdCB5ZXQgcnVuYDtmdW5jdGlvbiBidyhlKXtsZXQgdD1oQyhlLmxhc3RDaGVjayk7cmV0dXJuIHQ/YHVuaGVhbHRoeSAoJHt0fSlgOmB1bmhlYWx0aHlgfWZ1bmN0aW9uIHh3KGUpe2xldCB0PWUuY29uc2VjdXRpdmVGYWlsdXJlcz09PTE/YGZhaWx1cmVgOmBmYWlsdXJlc2Asbj1lLnNvdXJjZT9gIHZpYSAke2Uuc291cmNlfWA6YGAscj1gJHtlLmNvbnNlY3V0aXZlRmFpbHVyZXN9IGNvbnNlY3V0aXZlICR7dH0ke259YDtyZXR1cm4gZS5sYXN0RXJyb3I/YCR7cn06ICR7ZS5sYXN0RXJyb3J9YDpyfWZ1bmN0aW9uIFN3KGUpe2xldCB0PWhDKGUubGFzdENoZWNrKTtyZXR1cm4gdD9lLnNvdXJjZT9gJHt0fSB2aWEgJHtlLnNvdXJjZX1gOnQ6ZS5zb3VyY2U/YHZpYSAke2Uuc291cmNlfWA6YGB9ZnVuY3Rpb24gQ3coZSl7aWYoZS5jb25zZWN1dGl2ZUZhaWx1cmVzPD0wJiYhZS5sYXN0RXJyb3IpcmV0dXJuIHl3O2xldCB0PWUuY29uc2VjdXRpdmVGYWlsdXJlcz09PTE/YGZhaWx1cmVgOmBmYWlsdXJlc2Asbj1lLnNvdXJjZT9gIHZpYSAke2Uuc291cmNlfWA6YGAscj1gJHtlLmNvbnNlY3V0aXZlRmFpbHVyZXN9ICR7dH0gc28gZmFyJHtufWA7cmV0dXJuIGUubGFzdEVycm9yP2Ake3J9OiAke2UubGFzdEVycm9yfWA6cn1mdW5jdGlvbiB3dyhlKXtpZihlLnN0YXRlPT09YHVuaGVhbHRoeWApcmV0dXJuIEcodEMse2FzOmBzcGFuYCx2YXJpYW50OmBkZXN0cnVjdGl2ZWAsY2xhc3M6YGZvbnQtbm9ybWFsYCx0aXRsZTp4dyhlKX0sKCk9PmJ3KGUpKTtpZihlLnN0YXRlPT09YGhlYWx0aHlgKXtsZXQgdD1lLmxhdGVuY3lNcz09PXZvaWQgMD9gYDpgIMK3ICR7ZkMoZS5sYXRlbmN5TXMpfWA7cmV0dXJuIEcoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpTdyhlKX0sYGhlYWx0aHkke3R9YCl9cmV0dXJuIEcodEMse2FzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOkN3KGUpfSwoKT0+YHVua25vd25gKX1mdW5jdGlvbiBUdygpe3JldHVyblt7aWQ6YG5hbWVgLGhlYWRlcjpgTmFtZWAsYWNjZXNzb3JGbjplPT5lLm5hbWUsY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgZm9udC1tZWRpdW1gfSxlLm9yaWdpbmFsLm5hbWUpfSx7aWQ6YHVybGAsaGVhZGVyOmBVUkxgLGFjY2Vzc29yRm46ZT0+ZS51cmwsY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgYmxvY2sgbWF4LXcteHMgdHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTplLm9yaWdpbmFsLnVybH0sZS5vcmlnaW5hbC51cmwpfSx7aWQ6YGhlYWx0aGAsaGVhZGVyOmBIZWFsdGhgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLmhlYWx0aC5zdGF0ZSxjZWxsOih7cm93OmV9KT0+d3coZS5vcmlnaW5hbC5oZWFsdGgpfSx7aWQ6YGFjY2Vzc2AsaGVhZGVyOmBBY2Nlc3NgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT4oZS5hY2Nlc3M/P1tdKS5qb2luKGAsIGApLGNlbGw6KHtyb3c6ZX0pPT57bGV0IHQ9ZS5vcmlnaW5hbC5hY2Nlc3M7cmV0dXJuIHQ9PW51bGw/Ryhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQWxsIGdyb3Vwc2ApOnQubGVuZ3RoPT09MD9HKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBObyBncm91cHNgKTpHKGBkaXZgLHtjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LHQubWFwKGU9PkcodEMse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSwoKT0+ZSkpKX19LHZ3KGByZXFNaW5gLGByZXEvbWluYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTWludXRlKSx2dyhgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1BlckRheSksdncoYHJlcU1vbnRoYCxgcmVxL21vbnRoYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTW9udGgpXX12YXIgRXc9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sRHc9Rih7X19uYW1lOmBUYXJnZXRzVmlld2Asc2V0dXAoZSl7bGV0IHQ9Y3goKSxuPVcoKCk9PnQudGFyZ2V0cykse3F1ZXJ5OnIsbm9ybWFsaXplZDppLGhhc1F1ZXJ5OmF9PXpDKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS52YWx1ZSl9bGV0IHM9VygoKT0+e2xldCBlPW4udmFsdWU/Lm1jcFNlcnZlcnM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KSxjPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hZ2VudHM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGU/YS52YWx1ZSYmdD09PTA/YG5vIHRhcmdldHMgbWF0Y2ggIiR7ci52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGB9bGV0IHU9VygoKT0+bChuLnZhbHVlPy5tY3BTZXJ2ZXJzLmxlbmd0aD8/MCxzLnZhbHVlLmxlbmd0aCkpLGQ9VygoKT0+bChuLnZhbHVlPy5hZ2VudHMubGVuZ3RoPz8wLGMudmFsdWUubGVuZ3RoKSksZj1UdygpO3JldHVybihlLHQpPT4oUigpLHooYGRpdmAsRXcsW0goUEMse21vZGVsVmFsdWU6TihyKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9Pmoocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBNQ1Agc2VydmVycyBvciBhZ2VudHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsxXXx8PVtVKGBNQ1Agc2VydmVyc2AsLTEpXV0pLF86MX0pLEgoTihZYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsyXXx8PVtVKGBDb25maWd1cmVkIE1DUCBwcm94eSB0YXJnZXRzLCB0aGUgZ3JvdXBzIGFsbG93ZWQgdG8gcmVhY2ggdGhlbSwgYW5kIHRoZWlyIHJlcXVlc3QgY291bnRlcnMuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goZUMse2NvbHVtbnM6TihmKSxkYXRhOnMudmFsdWUsImVtcHR5LW1lc3NhZ2UiOnUudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFszXXx8PVtVKGBBZ2VudHNgLC0xKV1dKSxfOjF9KSxIKE4oWWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbNF18fD1bVShgQ29uZmlndXJlZCBBMkEgYWdlbnQgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLmAsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKGVDLHtjb2x1bW5zOk4oZiksZGF0YTpjLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpkLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLE93PUYoe19fbmFtZTpgVGFic2AscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxvcmllbnRhdGlvbjp7fSxkaXI6e30sYWN0aXZhdGlvbk1vZGU6e30sbW9kZWxWYWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPXF5KEN5KG4sYGNsYXNzYCkscik7cmV0dXJuKGUsdCk9PihSKCksQihOKFJiKSxrcyh7ImRhdGEtc2xvdCI6YHRhYnNgLCJkYXRhLW9yaWVudGF0aW9uIjpOKGkpLm9yaWVudGF0aW9ufHxgaG9yaXpvbnRhbGB9LE4oaSkse2NsYXNzOk4oWXYpKGBnYXAtMiBncm91cC90YWJzIGZsZXggZGF0YS1ob3Jpem9udGFsOmZsZXgtY29sYCxuLmNsYXNzKX0pLHtkZWZhdWx0OlAodD0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHhlKFNzKHQpKSldKSxfOjN9LDE2LFtgZGF0YS1vcmllbnRhdGlvbmAsYGNsYXNzYF0pKX19KSxrdz1GKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e30sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oVmIpLGtzKHsiZGF0YS1zbG90IjpgdGFicy1jb250ZW50YCxjbGFzczpOKFl2KShgdGV4dC1zbSBmbGV4LTEgb3V0bGluZS1ub25lYCx0LmNsYXNzKX0sTihuKSkse2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksQXc9Rih7X19uYW1lOmBUYWJzTGlzdGAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50OntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1DeSh0LGBjbGFzc2AsYHZhcmlhbnRgKTtyZXR1cm4ocixpKT0+KFIoKSxCKE4oSGIpLGtzKHsiZGF0YS1zbG90IjpgdGFicy1saXN0YCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnR9LE4obikse2NsYXNzOk4oWXYpKE4oTXcpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCgoKT0+W0koci4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSksanc9Rih7X19uYW1lOmBUYWJzVHJpZ2dlcmAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1LeShDeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oVWIpLGtzKHsiZGF0YS1zbG90IjpgdGFicy10cmlnZ2VyYCxjbGFzczpOKFl2KShgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9ZGVmYXVsdF0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1zbSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpzaGFkb3ctbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xIHJlbGF0aXZlIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZm9yZWdyb3VuZC82MCB0cmFuc2l0aW9uLWFsbCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6dy1mdWxsIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczpqdXN0aWZ5LXN0YXJ0IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXJrOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsYGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmJnLXRyYW5zcGFyZW50IGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJnLXRyYW5zcGFyZW50IGRhcms6Z3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6Ym9yZGVyLXRyYW5zcGFyZW50IGRhcms6Z3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YmctdHJhbnNwYXJlbnRgLGBkYXRhLWFjdGl2ZTpiZy1iYWNrZ3JvdW5kIGRhdGEtYWN0aXZlOnRleHQtZm9yZWdyb3VuZCBkYXJrOmRhdGEtYWN0aXZlOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtYWN0aXZlOmJnLWlucHV0LzMwIGRhcms6ZGF0YS1hY3RpdmU6dGV4dC1mb3JlZ3JvdW5kYCxgYWZ0ZXI6YWJzb2x1dGUgYWZ0ZXI6YmctZm9yZWdyb3VuZCBhZnRlcjpvcGFjaXR5LTAgYWZ0ZXI6dHJhbnNpdGlvbi1vcGFjaXR5IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmluc2V0LXgtMCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjpib3R0b20tWy01cHhdIGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmgtMC41IGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjppbnNldC15LTAgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOi1yaWdodC0xIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjp3LTAuNSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTphZnRlcjpvcGFjaXR5LTEwMGAsdC5jbGFzcyl9LE4obikpLHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLE13PUNfKGByb3VuZGVkLWxnIHAtMC43NSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpoLTggZGF0YS1bdmFyaWFudD1saW5lXTpyb3VuZGVkLW5vbmUgZ3JvdXAvdGFicy1saXN0IGlubGluZS1mbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmgtZml0IGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczpmbGV4LWNvbGAse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OmBiZy1tdXRlZGAsbGluZTpgZ2FwLTEgYmctdHJhbnNwYXJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiBOdyhlLHQsbixyPVN0cmluZyxpPSEwKXtyZXR1cm57aWQ6ZSxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sbWV0YTp7YWxpZ246YHJpZ2h0YH0sY2VsbDooe3JvdzplfSk9PntpZihlLm9yaWdpbmFsLnN0b3JlRG93bilyZXR1cm5gP2A7bGV0IHQ9bihlLm9yaWdpbmFsKTtyZXR1cm4gaT9HKF93LHt2YWx1ZTp0fSk6cih0KX19fWZ1bmN0aW9uIFB3KGUsdCxuKXtyZXR1cm5be2lkOmBpZGAsaGVhZGVyOmUsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT5HKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sZS5vcmlnaW5hbC5pZCl9LHtpZDpgc2Vjb25kYXJ5YCxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sc29ydGluZ0ZuOmBhbHBoYW51bWVyaWNgLGNlbGw6KHtyb3c6ZX0pPT5HKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LG4oZS5vcmlnaW5hbCkpfSx7aWQ6YGxpbWl0c2AsaGVhZGVyOmBMaW1pdHNgLGFjY2Vzc29yRm46ZT0+eEMoZS5saW1pdHMpLGNlbGw6KHtyb3c6ZX0pPT5HKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHhDKGUub3JpZ2luYWwubGltaXRzKSl9LE53KGByZXFNaW5gLGByZXEvbWluYCxlPT5lLnJlcXVlc3RzUGVyTWludXRlKSxOdyhgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5yZXF1ZXN0c1BlckRheSksTncoYHRva0luRGF5YCxgdG9rSW4vZGF5YCxlPT5lLnRva2Vuc0luUGVyRGF5KSxOdyhgdG9rT3V0RGF5YCxgdG9rT3V0L2RheWAsZT0+ZS50b2tlbnNPdXRQZXJEYXkpLE53KGB0b2tJbk1vbnRoYCxgdG9rSW4vbW9udGhgLGU9PmUudG9rZW5zSW5QZXJNb250aCksTncoYHRva091dE1vbnRoYCxgdG9rT3V0L21vbnRoYCxlPT5lLnRva2Vuc091dFBlck1vbnRoKSxOdyhgY29zdERheWAsYGNvc3QvZGF5YCxlPT5lLmNvc3RQZXJEYXlNaWNyb1VzZCxhQywhMSksTncoYGNvc3RNb250aGAsYGNvc3QvbW9udGhgLGU9PmUuY29zdFBlck1vbnRoTWljcm9Vc2QsYUMsITEpXX12YXIgRnc9Rih7X19uYW1lOmBVc2FnZVRhYmxlYCxwcm9wczp7aWRMYWJlbDp7fSxlbnRyaWVzOnt9LHNlY29uZGFyeUNvbHVtbkxhYmVsOnt9LHNlY29uZGFyeVZhbHVlOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT5Qdyh0LmlkTGFiZWwsdC5zZWNvbmRhcnlDb2x1bW5MYWJlbCx0LnNlY29uZGFyeVZhbHVlKSk7cmV0dXJuKHQscik9PihSKCksQihlQyx7Y29sdW1uczpuLnZhbHVlLGRhdGE6ZS5lbnRyaWVzLCJlbXB0eS1tZXNzYWdlIjplLmVtcHR5TWVzc2FnZSwicm93LWNsYXNzIjplPT5lLnN0b3JlRG93bj9gYmctZGVzdHJ1Y3RpdmUvMTBgOnZvaWQgMH0sbnVsbCw4LFtgY29sdW1uc2AsYGRhdGFgLGBlbXB0eS1tZXNzYWdlYCxgcm93LWNsYXNzYF0pKX19KTtmdW5jdGlvbiBJdyhlLHQpe3JldHVybiBlLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModCl9ZnVuY3Rpb24gTHcoZSx0KXtyZXR1cm4gZS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIFJ3KGUsdCl7cmV0dXJuIHQuZmlsdGVyKHQ9Pih0Lmdyb3Vwcz8/W3QuZ3JvdXBOYW1lXSkuaW5jbHVkZXMoZS5pZCkpfWZ1bmN0aW9uIHp3KGUsdCxuKXtyZXR1cm4gUncoZSx0KS5maWx0ZXIoZT0+SXcoZSxuKSl9ZnVuY3Rpb24gQncoZSx0LG4pe3JldHVybiBMdyhlLG4pfHx6dyhlLHQsbikubGVuZ3RoPjB9dmFyIFZ3PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LEh3PXtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2B9LFV3PXtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2B9LFd3PXtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2B9LEd3PXtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2B9LEt3PXtrZXk6MCxjbGFzczpgbWItMyBmbGV4IGZsZXgtd3JhcCBnYXAteC00IGdhcC15LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxxdz17Y2xhc3M6YGZsZXggZmxleC0xIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtNCBnYXAteS0xIHByLTIgdGV4dC1sZWZ0YH0sSnc9e2NsYXNzOmBmb250LW1lZGl1bWB9LFl3PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sWHc9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxadz17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LFF3PXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTRgfSwkdz17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxlVD17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHRUPXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LG5UPXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sclQ9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0saVQ9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxhVD17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxvVD17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHNUPXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTRgfSxjVD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LGxUPXtjbGFzczpgdGFidWxhci1udW1zYH0sdVQ9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxkVD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LGZUPXtjbGFzczpgdGFidWxhci1udW1zYH0scFQ9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxtVD17a2V5OjIsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxoVD1gR2xvYiBwYXR0ZXJuIOKAlCBtYXRjaGVzIGxpa2UgYSBzaGVsbCB3aWxkY2FyZCAoKiwgPywgWy4uLl0pYCxnVD1GKHtfX25hbWU6YFVzYWdlVmlld2Asc2V0dXAoZSl7bGV0IHQ9Y3goKSxuPVcoKCk9PnQudXNhZ2UpLHI9VygoKT0+e2xldCBlPXt9O2ZvcihsZXQgbiBvZiB0Lm92ZXJ2aWV3Py5ncm91cHM/P1tdKWVbbi5uYW1lXT1uLm1lbWJlckNvdW50O3JldHVybiBlfSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4oZS5ncm91cHM/PyhlLmdyb3VwTmFtZT09PXZvaWQgMD9bXTpbZS5ncm91cE5hbWVdKSkuam9pbihgLCBgKX1mdW5jdGlvbiBhKGUpe2xldCB0PXIudmFsdWVbZS5pZF07cmV0dXJuIHQ9PT12b2lkIDA/YGA6U3RyaW5nKHQpfWxldHtxdWVyeTpvLG5vcm1hbGl6ZWQ6cyxoYXNRdWVyeTpjfT16QygpLGw9VygoKT0+e2xldCBlPW4udmFsdWU/Lmdyb3Vwcz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiBlLmZpbHRlcihlPT5CdyhlLHQscy52YWx1ZSkpfSksdT1XKCgpPT5jLnZhbHVlP2wudmFsdWUuZmlsdGVyKGU9PiFMdyhlLHMudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIGQoZSl7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiFjLnZhbHVlfHxMdyhlLHMudmFsdWUpP1J3KGUsdCk6encoZSx0LHMudmFsdWUpfWxldCBmPVcoKCk9Pm4udmFsdWU/Lmdyb3Vwcy5sZW5ndGg/Yy52YWx1ZT9gbm8gZ3JvdXBzIG1hdGNoICIke28udmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKSxwPVcoKCk9PntsZXQgZT1uLnZhbHVlPy51c2Vycz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8uZ3JvdXBzPz9bXSxyPW5ldyBTZXQodC5maWx0ZXIoZT0+THcoZSxzLnZhbHVlKSkubWFwKGU9PmUuaWQpKTtyZXR1cm4gZS5maWx0ZXIoZT0+SXcoZSxzLnZhbHVlKXx8KGUuZ3JvdXBzPz9bZS5ncm91cE5hbWVdKS5zb21lKGU9PmUhPT12b2lkIDAmJnIuaGFzKGUpKSl9KSxtPVcoKCk9Pm4udmFsdWU/LnVzZXJzLmxlbmd0aD9jLnZhbHVlP2BubyB1c2VycyBtYXRjaCAiJHtvLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCksaD1QdyhgTmFtZWAsYE1lbWJlcnNgLGEpLGc9TShbXSksXz1WUyh7Z2V0IGRhdGEoKXtyZXR1cm4gbC52YWx1ZX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gaH0sZ2V0Q29yZVJvd01vZGVsOk1TKCksZ2V0U29ydGVkUm93TW9kZWw6TlMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+JFMoZSxnKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gZy52YWx1ZX19fSksdj1XKCgpPT5fLmdldFJvd01vZGVsKCkucm93cykseT1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLGI9VygoKT0+Xy5nZXRIZWFkZXJHcm91cHMoKVswXS5oZWFkZXJzLmZpbHRlcihlPT55LmhhcyhlLmNvbHVtbi5pZCkpKSx4PVp0KHttYW51YWxseUV4cGFuZGVkOm5ldyBTZXQsbWFudWFsbHlDb2xsYXBzZWQ6bmV3IFNldH0pLFM9VygoKT0+QkMoeCxjLnZhbHVlLHUudmFsdWUpKTtmdW5jdGlvbiBDKGUpe1ZDKHgsZSxTLnZhbHVlLmhhcyhlKSl9bGV0IHc9Vyh7Z2V0OigpPT5BcnJheS5mcm9tKFMudmFsdWUpLHNldDplPT57bGV0IHQ9bmV3IFNldChlKTtmb3IobGV0IGUgb2YgUy52YWx1ZSl0LmhhcyhlKXx8QyhlKTtmb3IobGV0IGUgb2YgdClTLnZhbHVlLmhhcyhlKXx8QyhlKX19KTtFcihvLGU9PntlLnRyaW0oKT09PWBgJiZIQyh4KX0pO2Z1bmN0aW9uIGVlKGUpe3JldHVybi9bKj9bXS8udGVzdChlKX1yZXR1cm4oZSx0KT0+KFIoKSx6KGBkaXZgLFZ3LFtIKFBDLHttb2RlbFZhbHVlOk4obyksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKG8pP28udmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgdXNlcnMgb3IgZ3JvdXBzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLG4udmFsdWU/KFIoKSxCKE4ocWIpLHtrZXk6MH0se2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzJdfHw9W1UoYFRvdGFsYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzNdfHw9W1UoYFVzYWdlIHN1bW1lZCBhY3Jvc3MgZXZlcnkgdXNlciBhbmQgZ3JvdXAgY29tYmluZWQuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsbnVsbCxbdFs0XXx8PVYoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFJlcXVlc3RzL2RheWAsLTEpLFYoYHBgLEh3LFtIKF93LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzVdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIGluL2RheWAsLTEpLFYoYHBgLFV3LFtIKF93LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnRva2Vuc0luUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzZdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIG91dC9kYXlgLC0xKSxWKGBwYCxXdyxbSChfdyx7dmFsdWU6bi52YWx1ZS50b3RhbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxWKGBkaXZgLG51bGwsW3RbN118fD1WKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBDb3N0L2RheWAsLTEpLFYoYHBgLEd3LGsoTihhQykobi52YWx1ZS50b3RhbC5jb3N0UGVyRGF5TWljcm9Vc2QpKSwxKV0pXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbOF18fD1bVShgR3JvdXBzYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzldfHw9W1UoYEV4cGFuZCBhIGdyb3VwIHRvIHNlZSBpdHMgbWVtYmVyIHVzZXJzJyBvd24gdXNhZ2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W3YudmFsdWUubGVuZ3RoPyhSKCkseihgZGl2YCxLdyxbKFIoITApLHooTCxudWxsLG1hKGIudmFsdWUsZT0+KFIoKSxCKFVTLHtrZXk6ZS5pZCxoZWFkZXI6ZX0sbnVsbCw4LFtgaGVhZGVyYF0pKSksMTI4KSldKSk6VHMoYGAsITApLHYudmFsdWUubGVuZ3RoPyhSKCksQihOKEZDKSx7a2V5OjEsbW9kZWxWYWx1ZTp3LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+dy52YWx1ZT1lLHR5cGU6YG11bHRpcGxlYCxjbGFzczpgcm91bmRlZC1tZCBib3JkZXIgcHgtM2B9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodi52YWx1ZSxlPT4oUigpLEIoTihMQykse2tleTplLm9yaWdpbmFsLmlkLHZhbHVlOmUub3JpZ2luYWwuaWR9LHtkZWZhdWx0OlAoKCk9PltIKE4oUkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLHF3LFtWKGBzcGFuYCxKdyxrKGUub3JpZ2luYWwuaWQpLDEpLFYoYHNwYW5gLFl3LGsoYShlLm9yaWdpbmFsKXx8YDBgKStgIG1lbWJlcnNgLDEpLFYoYHNwYW5gLFh3LFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKF93LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSksdFsxMF18fD1VKGAgcmVxL2RheSBgLC0xKV0pLFYoYHNwYW5gLFp3LGsoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOk4oYUMpKGUub3JpZ2luYWwuY29zdFBlckRheU1pY3JvVXNkKSkrYC9kYXkgYCwxKV0pXSksXzoyfSwxMDI0KSxIKE4oSUMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYGRsYCxRdyxbVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6aFR9LGBQcm92aWRlcnNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5wcm92aWRlcnM/Lmxlbmd0aD8oUigpLHooYGRpdmAsJHcsWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLnByb3ZpZGVycyxlPT4oUigpLEIoTih0Qykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsZVQsYEFsbCBwcm92aWRlcnNgKSldKV0pLFYoYGRpdmAsbnVsbCxbVihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOmhUfSxgTW9kZWxzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubW9kZWxzPy5sZW5ndGg/KFIoKSx6KGBkaXZgLHRULFsoUighMCkseihMLG51bGwsbWEoZS5vcmlnaW5hbC5tb2RlbHMsZT0+KFIoKSx6KEwse2tleTplfSxbZWUoZSk/KFIoKSxCKE4odEMpLHtrZXk6MSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlKSwxKV0pLF86Mn0sMTAyNCkpOihSKCksQihDQyx7a2V5OjAsaWQ6ZX0sbnVsbCw4LFtgaWRgXSkpXSw2NCkpKSwxMjgpKV0pKTooUigpLHooYHNwYW5gLG5ULGBBbGwgbW9kZWxzYCkpXSldKSxWKGBkaXZgLG51bGwsW1YoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpoVH0sYE1DUCBzZXJ2ZXJzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubWNwU2VydmVycz8ubGVuZ3RoPyhSKCkseihgZGl2YCxyVCxbKFIoITApLHooTCxudWxsLG1hKGUub3JpZ2luYWwubWNwU2VydmVycyxlPT4oUigpLEIoTih0Qykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsaVQsYEFsbCBNQ1Agc2VydmVyc2ApKV0pXSksVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6aFR9LGBBZ2VudHNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5hZ2VudHM/Lmxlbmd0aD8oUigpLHooYGRpdmAsYVQsWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLmFnZW50cyxlPT4oUigpLEIoTih0Qykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsb1QsYEFsbCBhZ2VudHNgKSldKV0pXSksVihgZGxgLHNULFtWKGBkaXZgLG51bGwsW3RbMTFdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGltaXRzYCwtMSksVihgZGRgLG51bGwsayhOKHhDKShlLm9yaWdpbmFsLmxpbWl0cykpLDEpXSksVihgZGl2YCxudWxsLFt0WzEyXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHJlcS9taW5gLC0xKSxWKGBkZGAsY1QsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhSKCkseihMLHtrZXk6MH0sW1UoYD9gKV0sNjQpKTooUigpLEIoX3cse2tleToxLHZhbHVlOmUub3JpZ2luYWwucmVxdWVzdHNQZXJNaW51dGV9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzEzXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL2RheWAsLTEpLFYoYGRkYCxsVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihfdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJblBlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTRdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgdG9rT3V0L2RheWAsLTEpLFYoYGRkYCx1VCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihfdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE1XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL21vbnRoYCwtMSksVihgZGRgLGRULFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKF93LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc0luUGVyTW9udGh9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE2XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva091dC9tb250aGAsLTEpLFYoYGRkYCxmVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihfdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJNb250aH0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTddfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgY29zdC9tb250aGAsLTEpLFYoYGRkYCxwVCxrKGUub3JpZ2luYWwuc3RvcmVEb3duP2A/YDpOKGFDKShlLm9yaWdpbmFsLmNvc3RQZXJNb250aE1pY3JvVXNkKSksMSldKV0pLHRbMThdfHw9VihgcGAse2NsYXNzOmBtYi0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTWVtYmVyc2AsLTEpLEgoRncseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6ZChlLm9yaWdpbmFsKSwic2Vjb25kYXJ5LXZhbHVlIjppfSxudWxsLDgsW2BlbnRyaWVzYF0pXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLHooYHBgLG1ULGsoZi52YWx1ZSksMSkpXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzE5XXx8PVtVKGBVc2Vyc2AsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKEZ3LHsiaWQtbGFiZWwiOmBOYW1lYCwic2Vjb25kYXJ5LWNvbHVtbi1sYWJlbCI6YEdyb3VwYCxlbnRyaWVzOnAudmFsdWUsInNlY29uZGFyeS12YWx1ZSI6aSwiZW1wdHktbWVzc2FnZSI6bS52YWx1ZX0sbnVsbCw4LFtgZW50cmllc2AsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pO2Z1bmN0aW9uIF9UKGUsdCxuKXtsZXQgcj1lLnN0YXJ0c1dpdGgoYCNgKT9lLnNsaWNlKDEpOmU7cmV0dXJuIHQuaW5jbHVkZXMocik/cjpufWZ1bmN0aW9uIHZUKGUpe3JldHVybmAjJHtlfWB9ZnVuY3Rpb24geVQoe3ZhbGlkVGFiczplLGRlZmF1bHRUYWI6dH0pe2xldCBuPXR5cGVvZiB3aW5kb3c8YHVgLHI9TShuP19UKHdpbmRvdy5sb2NhdGlvbi5oYXNoLGUsdCk6dCk7RXIocixlPT57aWYoIW4pcmV0dXJuO2xldCB0PXZUKGUpO3dpbmRvdy5sb2NhdGlvbi5oYXNoIT09dCYmd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsYGAsdCl9KTtmdW5jdGlvbiBpKCl7ci52YWx1ZT1fVCh3aW5kb3cubG9jYXRpb24uaGFzaCxlLHQpfXJldHVybiBuJiYoWmkoKCk9PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSksdGEoKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSkpLHJ9dmFyIGJUPShmdW5jdGlvbigpe2xldCBlPXR5cGVvZiBkb2N1bWVudDxgdWAmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKS5yZWxMaXN0O3JldHVybiBlJiZlLnN1cHBvcnRzJiZlLnN1cHBvcnRzKGBtb2R1bGVwcmVsb2FkYCk/YG1vZHVsZXByZWxvYWRgOmBwcmVsb2FkYH0pKCkseFQ9ZnVuY3Rpb24oZSl7cmV0dXJuYC9hZG1pbi9gK2V9LFNUPXt9LENUPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1Qcm9taXNlLnJlc29sdmUoKTtpZih0JiZ0Lmxlbmd0aD4wKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShgbGlua2ApLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtwcm9wZXJ0eT1jc3Atbm9uY2VdYCksYT1pPy5ub25jZXx8aT8uZ2V0QXR0cmlidXRlKGBub25jZWApO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKGU9PlByb21pc2UucmVzb2x2ZShlKS50aGVuKGU9Pih7c3RhdHVzOmBmdWxmaWxsZWRgLHZhbHVlOmV9KSxlPT4oe3N0YXR1czpgcmVqZWN0ZWRgLHJlYXNvbjplfSkpKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZT9pbXBvcnQubWV0YS5yZXNvbHZlKGUpOm5ldyBVUkwoZSxpbXBvcnQubWV0YS51cmwpLmhyZWZ9cj1vKHQubWFwKHQ9PntpZih0PXhUKHQsbiksdD1zKHQpLHQgaW4gU1QpcmV0dXJuO1NUW3RdPSEwO2xldCByPXQuZW5kc1dpdGgoYC5jc3NgKTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpZihpLmhyZWY9PT10JiYoIXJ8fGkucmVsPT09YHN0eWxlc2hlZXRgKSlyZXR1cm59bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApO2lmKGkucmVsPXI/YHN0eWxlc2hlZXRgOmJULHJ8fChpLmFzPWBzY3JpcHRgKSxpLmNyb3NzT3JpZ2luPWBgLGkuaHJlZj10LGEmJmkuc2V0QXR0cmlidXRlKGBub25jZWAsYSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSxyKXJldHVybiBuZXcgUHJvbWlzZSgoZSxuKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsZSksaS5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsKCk9Pm4oRXJyb3IoYFVuYWJsZSB0byBwcmVsb2FkIENTUyBmb3IgJHt0fWApKSl9KX0pKX1mdW5jdGlvbiBpKGUpe2xldCB0PW5ldyBFdmVudChgdml0ZTpwcmVsb2FkRXJyb3JgLHtjYW5jZWxhYmxlOiEwfSk7aWYodC5wYXlsb2FkPWUsd2luZG93LmRpc3BhdGNoRXZlbnQodCksIXQuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBlfXJldHVybiByLnRoZW4odD0+e2ZvcihsZXQgZSBvZiB0fHxbXSllLnN0YXR1cz09PWByZWplY3RlZGAmJmkoZS5yZWFzb24pO3JldHVybiBlKCkuY2F0Y2goaSl9KX0sd1Q9e2NsYXNzOmBmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNiBweC00IHB5LTggc206cHgtNiBsZzpweC04YH0sVFQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sRVQ9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSxEVD17a2V5OjAsY2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxPVD1gaHR0cHM6Ly9naXRodWIuY29tL2x1a2FzenJhY3p5bG8vdHJhZWZpay1sbG1nYXRld2F5YCxrVD1tdShGKHtfX25hbWU6YEFwcGAsc2V0dXAoZSl7bGV0IHQ9TGkoKCk9PkNUKCgpPT5pbXBvcnQoYC4vQ2hhcnRzVmlldy1DVDdIT3hQZy5qc2ApLFtdKSksbj1yeCgpLHI9Y3goKSxpPXlUKHt2YWxpZFRhYnM6W2Bwcm92aWRlcnNgLGB1c2FnZWAsYGNoYXJ0c2AsYHRhcmdldHNgXSxkZWZhdWx0VGFiOmBwcm92aWRlcnNgfSksYT1XKCgpPT5yLmVycm9yP2ByZWZyZXNoIGZhaWxlZDogJHtyLmVycm9yfWA6ci5sYXN0VXBkYXRlZD9gbGFzdCB1cGRhdGVkICR7ci5sYXN0VXBkYXRlZC50b0xvY2FsZVRpbWVTdHJpbmcoKX1gOmBsb2FkaW5nLi4uYCk7cmV0dXJuIFppKCgpPT57ci5zdGFydFBvbGxpbmcoKX0pLChlLG8pPT57bGV0IHM9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCx3VCxbVihgaGVhZGVyYCxUVCxbVihgZGl2YCxFVCxbb1sxXXx8PVYoYGgxYCx7Y2xhc3M6YHRleHQteGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodGB9LGBMTE0gR2F0ZXdheSDigJQgQWRtaW5gLC0xKSxIKE4oV2IpLHthczpgYWAsaHJlZjpPVCx0YXJnZXQ6YF9ibGFua2AscmVsOmBub29wZW5lciBub3JlZmVycmVyYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbmAsImFyaWEtbGFiZWwiOmBHaXRIdWIgcmVwb3NpdG9yeWAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChzLHtpY29uOk4obl8pLGNsYXNzOmBzaXplLTRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxOKG4pLmlzQXV0aGVudGljYXRlZD8oUigpLHooYHBgLERULFtOKHIpLmVycm9yPyhSKCksQihzLHtrZXk6MCxpY29uOk4obF8pLGNsYXNzOmBzaXplLTMuNSB0ZXh0LWRlc3RydWN0aXZlYH0sbnVsbCw4LFtgaWNvbmBdKSk6VHMoYGAsITApLFYoYHNwYW5gLHtjbGFzczpPKE4ocikuZXJyb3I/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMCl9LGsoYS52YWx1ZSksMyldKSk6VHMoYGAsITApXSksTihuKS5pc0F1dGhlbnRpY2F0ZWQ/KFIoKSxCKE4oT3cpLHtrZXk6MSxtb2RlbFZhbHVlOk4oaSksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm9bMF18fD1lPT5qKGkpP2kudmFsdWU9ZTpudWxsfSx7ZGVmYXVsdDpQKCgpPT5bSChOKEF3KSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oancpLHt2YWx1ZTpgcHJvdmlkZXJzYH0se2RlZmF1bHQ6UCgoKT0+Wy4uLm9bMl18fD1bVShgUHJvdmlkZXJzYCwtMSldXSksXzoxfSksSChOKGp3KSx7dmFsdWU6YHVzYWdlYH0se2RlZmF1bHQ6UCgoKT0+Wy4uLm9bM118fD1bVShgVXNhZ2VgLC0xKV1dKSxfOjF9KSxIKE4oancpLHt2YWx1ZTpgY2hhcnRzYH0se2RlZmF1bHQ6UCgoKT0+Wy4uLm9bNF18fD1bVShgQ2hhcnRzYCwtMSldXSksXzoxfSksSChOKGp3KSx7dmFsdWU6YHRhcmdldHNgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1s1XXx8PVtVKGBNQ1AgJiBBZ2VudHNgLC0xKV1dKSxfOjF9KV0pLF86MX0pLEgoTihrdykse3ZhbHVlOmBwcm92aWRlcnNgfSx7ZGVmYXVsdDpQKCgpPT5bSChwdyldKSxfOjF9KSxIKE4oa3cpLHt2YWx1ZTpgdXNhZ2VgfSx7ZGVmYXVsdDpQKCgpPT5bSChnVCldKSxfOjF9KSxIKE4oa3cpLHt2YWx1ZTpgY2hhcnRzYH0se2RlZmF1bHQ6UCgoKT0+W0goTih0KSldKSxfOjF9KSxIKE4oa3cpLHt2YWx1ZTpgdGFyZ2V0c2B9LHtkZWZhdWx0OlAoKCk9PltIKER3KV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKSk6KFIoKSxCKF94LHtrZXk6MH0pKV0pfX19KSk7a1QudXNlKFZnKCkpLGtULmNvbXBvbmVudChgRm9udEF3ZXNvbWVJY29uYCxDZyksa1QubW91bnQoYCNhcHBgKTtleHBvcnR7TCBhcyAkLE95IGFzIEEsSWUgYXMgQXQsd3kgYXMgQix4ZSBhcyBCdCxZeSBhcyBDLENyIGFzIEN0LFV5IGFzIEQsRmUgYXMgRHQsR3kgYXMgRSxuYyBhcyBFdCxkeSBhcyBGLEEgYXMgRnQsYXkgYXMgRyxjeSBhcyBILGsgYXMgSHQsYnkgYXMgSSx5biBhcyBJdCxtXyBhcyBKLFl2IGFzIEssZnkgYXMgTCxtbiBhcyBMdCxBeSBhcyBNLE0gYXMgTXQsRnkgYXMgTixlbiBhcyBOdCxWeSBhcyBPLG9uIGFzIE90LEl5IGFzIFAsdW4gYXMgUHQsaXUgYXMgUSxneSBhcyBSLE4gYXMgUnQsJHkgYXMgUyxFciBhcyBTdCxLeSBhcyBULFAgYXMgVHQsc3kgYXMgVSxUeSBhcyBWLGdlIGFzIFZ0LG95IGFzIFcsdF8gYXMgWCxzXyBhcyBZLENnIGFzIFosWGIgYXMgXyxSIGFzIF90LE93IGFzIGEseiBhcyBhdCx3YiBhcyBiLHVhIGFzIGJ0LFNDIGFzIGMsRiBhcyBjdCxvQyBhcyBkLFBhIGFzIGR0LFZyIGFzIGV0LGN4IGFzIGYsa3MgYXMgZnQsWmIgYXMgZyx0YSBhcyBndCxyeCBhcyBoLFppIGFzIGh0LEF3IGFzIGksVHMgYXMgaXQsa3kgYXMgaixadCBhcyBqdCxOeSBhcyBrLGogYXMga3Qsc0MgYXMgbCxTcyBhcyBsdCxveCBhcyBtLGVhIGFzIG10LEl3IGFzIG4sViBhcyBudCx6QyBhcyBvLFUgYXMgb3QsaXggYXMgcCxRbiBhcyBwdCx1XyBhcyBxLGp3IGFzIHIsQiBhcyBydCxQQyBhcyBzLEggYXMgc3QsQncgYXMgdCxXIGFzIHR0LGFDIGFzIHUsRyBhcyB1dCxKYiBhcyB2LG1hIGFzIHZ0LHF5IGFzIHcsd3IgYXMgd3QsbmIgYXMgeCxpYyBhcyB4dCxxYiBhcyB5LEkgYXMgeXQsQ3kgYXMgeixPIGFzIHp0fTs=", + "dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5LHQ9KHQsbik9PntsZXQgcj17fTtmb3IodmFyIGkgaW4gdCllKHIsaSx7Z2V0OnRbaV0sZW51bWVyYWJsZTohMH0pO3JldHVybiBufHxlKHIsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpgTW9kdWxlYH0pLHJ9O2Z1bmN0aW9uIG4oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG4gb2YgZS5zcGxpdChgLGApKXRbbl09MTtyZXR1cm4gZT0+ZSBpbiB0fXZhciByPXt9LGk9W10sYT0oKT0+e30sbz0oKT0+ITEscz1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmKGUuY2hhckNvZGVBdCgyKT4xMjJ8fGUuY2hhckNvZGVBdCgyKTw5NyksYz1lPT5lLnN0YXJ0c1dpdGgoYG9uVXBkYXRlOmApLGw9T2JqZWN0LmFzc2lnbix1PShlLHQpPT57bGV0IG49ZS5pbmRleE9mKHQpO24+LTEmJmUuc3BsaWNlKG4sMSl9LGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxmPShlLHQpPT5kLmNhbGwoZSx0KSxwPUFycmF5LmlzQXJyYXksbT1lPT53KGUpPT09YFtvYmplY3QgTWFwXWAsaD1lPT53KGUpPT09YFtvYmplY3QgU2V0XWAsZz1lPT53KGUpPT09YFtvYmplY3QgRGF0ZV1gLF89ZT0+dyhlKT09PWBbb2JqZWN0IFJlZ0V4cF1gLHY9ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAseT1lPT50eXBlb2YgZT09YHN0cmluZ2AsYj1lPT50eXBlb2YgZT09YHN5bWJvbGAseD1lPT50eXBlb2YgZT09YG9iamVjdGAmJiEhZSxTPWU9Pih4KGUpfHx2KGUpKSYmdihlLnRoZW4pJiZ2KGUuY2F0Y2gpLEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyx3PWU9PkMuY2FsbChlKSxlZT1lPT53KGUpLnNsaWNlKDgsLTEpLHRlPWU9PncoZSk9PT1gW29iamVjdCBPYmplY3RdYCxUPWU9PnkoZSkmJmUhPT1gTmFOYCYmZVswXSE9PWAtYCYmYGArcGFyc2VJbnQoZSwxMCk9PT1lLG5lPW4oYCxrZXkscmVmLHJlZl9mb3IscmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkYCkscmU9ZT0+e2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuKG49PnRbbl18fCh0W25dPWUobikpKX0saWU9Ly1cdy9nLEU9cmUoZT0+ZS5yZXBsYWNlKGllLGU9PmUuc2xpY2UoMSkudG9VcHBlckNhc2UoKSkpLGFlPS9cQihbQS1aXSkvZyxvZT1yZShlPT5lLnJlcGxhY2UoYWUsYC0kMWApLnRvTG93ZXJDYXNlKCkpLHNlPXJlKGU9PmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSksY2U9cmUoZT0+ZT9gb24ke3NlKGUpfWA6YGApLEQ9KGUsdCk9PiFPYmplY3QuaXMoZSx0KSxsZT0oZSwuLi50KT0+e2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl0oLi4udCl9LHVlPShlLHQsbixyPSExKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOnIsdmFsdWU6bn0pfSxkZT1lPT57bGV0IHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fSxmZT1lPT57bGV0IHQ9eShlKT9OdW1iZXIoZSk6TmFOO3JldHVybiBpc05hTih0KT9lOnR9LHBlLG1lPSgpPT5wZXx8PXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPGB1YD9zZWxmOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6e30saGU9bihgSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IsU3ltYm9sYCk7ZnVuY3Rpb24gZ2UoZSl7aWYocChlKSl7bGV0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl0saT15KHIpP2JlKHIpOmdlKHIpO2lmKGkpZm9yKGxldCBlIGluIGkpdFtlXT1pW2VdfXJldHVybiB0fWlmKHkoZSl8fHgoZSkpcmV0dXJuIGV9dmFyIF9lPS87KD8hW14oXSpcKSkvZyx2ZT0vOihbXl0rKS8seWU9L1wvXCpbXl0qP1wqXC8vZztmdW5jdGlvbiBiZShlKXtsZXQgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHllLGBgKS5zcGxpdChfZSkuZm9yRWFjaChlPT57aWYoZSl7bGV0IG49ZS5zcGxpdCh2ZSk7bi5sZW5ndGg+MSYmKHRbblswXS50cmltKCldPW5bMV0udHJpbSgpKX19KSx0fWZ1bmN0aW9uIE8oZSl7bGV0IHQ9YGA7aWYoeShlKSl0PWU7ZWxzZSBpZihwKGUpKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1PKGVbbl0pO3ImJih0Kz1yK2AgYCl9ZWxzZSBpZih4KGUpKWZvcihsZXQgbiBpbiBlKWVbbl0mJih0Kz1uK2AgYCk7cmV0dXJuIHQudHJpbSgpfWZ1bmN0aW9uIHhlKGUpe2lmKCFlKXJldHVybiBudWxsO2xldHtjbGFzczp0LHN0eWxlOm59PWU7cmV0dXJuIHQmJiF5KHQpJiYoZS5jbGFzcz1PKHQpKSxuJiYoZS5zdHlsZT1nZShuKSksZX12YXIgU2U9YGl0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92YWxpZGF0ZSxyZWFkb25seWAsQ2U9bihTZSk7U2UrYGA7ZnVuY3Rpb24gd2UoZSl7cmV0dXJuISFlfHxlPT09YGB9ZnVuY3Rpb24gVGUoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2xldCBuPSEwO2ZvcihsZXQgcj0wO24mJnI8ZS5sZW5ndGg7cisrKW49RWUoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBFZShlLHQpe2lmKGU9PT10KXJldHVybiEwO2xldCBuPWcoZSkscj1nKHQpO2lmKG58fHIpcmV0dXJuIG4mJnI/ZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTohMTtpZihuPWIoZSkscj1iKHQpLG58fHIpcmV0dXJuIGU9PT10O2lmKG49cChlKSxyPXAodCksbnx8cilyZXR1cm4gbiYmcj9UZShlLHQpOiExO2lmKG49eChlKSxyPXgodCksbnx8cil7aWYoIW58fCFyfHxPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuIGluIGUpe2xldCByPWUuaGFzT3duUHJvcGVydHkobiksaT10Lmhhc093blByb3BlcnR5KG4pO2lmKHImJiFpfHwhciYmaXx8IUVlKGVbbl0sdFtuXSkpcmV0dXJuITF9fXJldHVybiBTdHJpbmcoZSk9PT1TdHJpbmcodCl9ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4gZS5maW5kSW5kZXgoZT0+RWUoZSx0KSl9dmFyIE9lPWU9PiEhKGUmJmUuX192X2lzUmVmPT09ITApLGs9ZT0+eShlKT9lOmU9PW51bGw/YGA6cChlKXx8eChlKSYmKGUudG9TdHJpbmc9PT1DfHwhdihlLnRvU3RyaW5nKSk/T2UoZSk/ayhlLnZhbHVlKTpKU09OLnN0cmluZ2lmeShlLGtlLDIpOlN0cmluZyhlKSxrZT0oZSx0KT0+T2UodCk/a2UoZSx0LnZhbHVlKTptKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cmllcygpXS5yZWR1Y2UoKGUsW3Qsbl0scik9PihlW0FlKHQscikrYCA9PmBdPW4sZSkse30pfTpoKHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChlPT5BZShlKSl9OmIodCk/QWUodCk6eCh0KSYmIXAodCkmJiF0ZSh0KT9TdHJpbmcodCk6dCxBZT0oZSx0PWBgKT0+YihlKT9gU3ltYm9sKCR7ZS5kZXNjcmlwdGlvbj8/dH0pYDplO2Z1bmN0aW9uIGplKGUpe3JldHVybiBlPT1udWxsP2Bpbml0aWFsYDp0eXBlb2YgZT09YHN0cmluZ2A/ZT09PWBgP2AgYDplOlN0cmluZyhlKX12YXIgTWUsTmU9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5kZXRhY2hlZD1lLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9vbj0wLHRoaXMuZWZmZWN0cz1bXSx0aGlzLmNsZWFudXBzPVtdLHRoaXMuX2lzUGF1c2VkPSExLHRoaXMuX3dhcm5PblJ1bj0hMCx0aGlzLl9fdl9za2lwPSEwLCFlJiZNZSYmKE1lLmFjdGl2ZT8odGhpcy5wYXJlbnQ9TWUsdGhpcy5pbmRleD0oTWUuc2NvcGVzfHwoTWUuc2NvcGVzPVtdKSkucHVzaCh0aGlzKS0xKToodGhpcy5fYWN0aXZlPSExLHRoaXMuX3dhcm5PblJ1bj0hMSkpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXNlKCl7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9pc1BhdXNlZD0hMDtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucGF1c2UoKX1mb3IoZT0wLHQ9dGhpcy5lZmZlY3RzLmxlbmd0aDtlPHQ7ZSsrKXRoaXMuZWZmZWN0c1tlXS5wYXVzZSgpfX1yZXN1bWUoKXtpZih0aGlzLl9hY3RpdmUmJnRoaXMuX2lzUGF1c2VkKXt0aGlzLl9pc1BhdXNlZD0hMTtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucmVzdW1lKCl9bGV0IG49dGhpcy5lZmZlY3RzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5yZXN1bWUoKX19cnVuKGUpe2lmKHRoaXMuX2FjdGl2ZSl7bGV0IHQ9TWU7dHJ5e3JldHVybiBNZT10aGlzLGUoKX1maW5hbGx5e01lPXR9fX1vbigpeysrdGhpcy5fb249PT0xJiYodGhpcy5wcmV2U2NvcGU9TWUsTWU9dGhpcyl9b2ZmKCl7aWYodGhpcy5fb24+MCYmLS10aGlzLl9vbj09PTApe2lmKE1lPT09dGhpcylNZT10aGlzLnByZXZTY29wZTtlbHNle2xldCBlPU1lO2Zvcig7ZTspe2lmKGUucHJldlNjb3BlPT09dGhpcyl7ZS5wcmV2U2NvcGU9dGhpcy5wcmV2U2NvcGU7YnJlYWt9ZT1lLnByZXZTY29wZX19dGhpcy5wcmV2U2NvcGU9dm9pZCAwfX1zdG9wKGUpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5fYWN0aXZlPSExO2xldCB0LG47Zm9yKHQ9MCxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjdHMubGVuZ3RoPTAsdD0wLG49dGhpcy5jbGVhbnVwcy5sZW5ndGg7dDxuO3QrKyl0aGlzLmNsZWFudXBzW3RdKCk7aWYodGhpcy5jbGVhbnVwcy5sZW5ndGg9MCx0aGlzLnNjb3Blcyl7bGV0IGU9dGhpcy5zY29wZXMuc2xpY2UoKTtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aGlzLnBhcmVudCYmIWUpe2xldCBlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtlJiZlIT09dGhpcyYmKHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XT1lLGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwfX19O2Z1bmN0aW9uIFBlKGUpe3JldHVybiBuZXcgTmUoZSl9ZnVuY3Rpb24gRmUoKXtyZXR1cm4gTWV9ZnVuY3Rpb24gSWUoZSx0PSExKXtNZSYmTWUuY2xlYW51cHMucHVzaChlKX12YXIgTGUsUmU9bmV3IFdlYWtTZXQsemU9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5mbj1lLHRoaXMuZGVwcz12b2lkIDAsdGhpcy5kZXBzVGFpbD12b2lkIDAsdGhpcy5mbGFncz01LHRoaXMubmV4dD12b2lkIDAsdGhpcy5jbGVhbnVwPXZvaWQgMCx0aGlzLnNjaGVkdWxlcj12b2lkIDAsTWUmJihNZS5hY3RpdmU/TWUuZWZmZWN0cy5wdXNoKHRoaXMpOnRoaXMuZmxhZ3MmPS0yKX1wYXVzZSgpe3RoaXMuZmxhZ3N8PTY0fXJlc3VtZSgpe3RoaXMuZmxhZ3MmNjQmJih0aGlzLmZsYWdzJj0tNjUsUmUuaGFzKHRoaXMpJiYoUmUuZGVsZXRlKHRoaXMpLHRoaXMudHJpZ2dlcigpKSl9bm90aWZ5KCl7dGhpcy5mbGFncyYyJiYhKHRoaXMuZmxhZ3MmMzIpfHx0aGlzLmZsYWdzJjh8fFVlKHRoaXMpfXJ1bigpe2lmKCEodGhpcy5mbGFncyYxKSlyZXR1cm4gdGhpcy5mbigpO3RoaXMuZmxhZ3N8PTIsaXQodGhpcyksS2UodGhpcyk7bGV0IGU9TGUsdD1ldDtMZT10aGlzLGV0PSEwO3RyeXtyZXR1cm4gdGhpcy5mbigpfWZpbmFsbHl7cWUodGhpcyksTGU9ZSxldD10LHRoaXMuZmxhZ3MmPS0zfX1zdG9wKCl7aWYodGhpcy5mbGFncyYxKXtmb3IobGV0IGU9dGhpcy5kZXBzO2U7ZT1lLm5leHREZXApWGUoZSk7dGhpcy5kZXBzPXRoaXMuZGVwc1RhaWw9dm9pZCAwLGl0KHRoaXMpLHRoaXMub25TdG9wJiZ0aGlzLm9uU3RvcCgpLHRoaXMuZmxhZ3MmPS0yfX10cmlnZ2VyKCl7dGhpcy5mbGFncyY2ND9SZS5hZGQodGhpcyk6dGhpcy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRGlydHkoKX1ydW5JZkRpcnR5KCl7SmUodGhpcykmJnRoaXMucnVuKCl9Z2V0IGRpcnR5KCl7cmV0dXJuIEplKHRoaXMpfX0sQmU9MCxWZSxIZTtmdW5jdGlvbiBVZShlLHQ9ITEpe2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PUhlLEhlPWU7cmV0dXJufWUubmV4dD1WZSxWZT1lfWZ1bmN0aW9uIFdlKCl7QmUrK31mdW5jdGlvbiBHZSgpe2lmKC0tQmU+MClyZXR1cm47aWYoSGUpe2xldCBlPUhlO2ZvcihIZT12b2lkIDA7ZTspe2xldCB0PWUubmV4dDtlLm5leHQ9dm9pZCAwLGUuZmxhZ3MmPS05LGU9dH19bGV0IGU7Zm9yKDtWZTspe2xldCB0PVZlO2ZvcihWZT12b2lkIDA7dDspe2xldCBuPXQubmV4dDtpZih0Lm5leHQ9dm9pZCAwLHQuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC50cmlnZ2VyKCl9Y2F0Y2godCl7ZXx8PXR9dD1ufX1pZihlKXRocm93IGV9ZnVuY3Rpb24gS2UoZSl7Zm9yKGxldCB0PWUuZGVwczt0O3Q9dC5uZXh0RGVwKXQudmVyc2lvbj0tMSx0LnByZXZBY3RpdmVMaW5rPXQuZGVwLmFjdGl2ZUxpbmssdC5kZXAuYWN0aXZlTGluaz10fWZ1bmN0aW9uIHFlKGUpe2xldCB0LG49ZS5kZXBzVGFpbCxyPW47Zm9yKDtyOyl7bGV0IGU9ci5wcmV2RGVwO3IudmVyc2lvbj09PS0xPyhyPT09biYmKG49ZSksWGUociksWmUocikpOnQ9cixyLmRlcC5hY3RpdmVMaW5rPXIucHJldkFjdGl2ZUxpbmssci5wcmV2QWN0aXZlTGluaz12b2lkIDAscj1lfWUuZGVwcz10LGUuZGVwc1RhaWw9bn1mdW5jdGlvbiBKZShlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApaWYodC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbnx8dC5kZXAuY29tcHV0ZWQmJihZZSh0LmRlcC5jb21wdXRlZCl8fHQuZGVwLnZlcnNpb24hPT10LnZlcnNpb24pKXJldHVybiEwO3JldHVybiEhZS5fZGlydHl9ZnVuY3Rpb24gWWUoZSl7aWYoZS5mbGFncyY0JiYhKGUuZmxhZ3MmMTYpfHwoZS5mbGFncyY9LTE3LGUuZ2xvYmFsVmVyc2lvbj09PWF0KXx8KGUuZ2xvYmFsVmVyc2lvbj1hdCwhZS5pc1NTUiYmZS5mbGFncyYxMjgmJighZS5kZXBzJiYhZS5fZGlydHl8fCFKZShlKSkpKXJldHVybjtlLmZsYWdzfD0yO2xldCB0PWUuZGVwLG49TGUscj1ldDtMZT1lLGV0PSEwO3RyeXtLZShlKTtsZXQgbj1lLmZuKGUuX3ZhbHVlKTsodC52ZXJzaW9uPT09MHx8RChuLGUuX3ZhbHVlKSkmJihlLmZsYWdzfD0xMjgsZS5fdmFsdWU9bix0LnZlcnNpb24rKyl9Y2F0Y2goZSl7dGhyb3cgdC52ZXJzaW9uKyssZX1maW5hbGx5e0xlPW4sZXQ9cixxZShlKSxlLmZsYWdzJj0tM319ZnVuY3Rpb24gWGUoZSx0PSExKXtsZXR7ZGVwOm4scHJldlN1YjpyLG5leHRTdWI6aX09ZTtpZihyJiYoci5uZXh0U3ViPWksZS5wcmV2U3ViPXZvaWQgMCksaSYmKGkucHJldlN1Yj1yLGUubmV4dFN1Yj12b2lkIDApLG4uc3Vicz09PWUmJihuLnN1YnM9ciwhciYmbi5jb21wdXRlZCkpe24uY29tcHV0ZWQuZmxhZ3MmPS01O2ZvcihsZXQgZT1uLmNvbXB1dGVkLmRlcHM7ZTtlPWUubmV4dERlcClYZShlLCEwKX0hdCYmIS0tbi5zYyYmbi5tYXAmJm4ubWFwLmRlbGV0ZShuLmtleSl9ZnVuY3Rpb24gWmUoZSl7bGV0e3ByZXZEZXA6dCxuZXh0RGVwOm59PWU7dCYmKHQubmV4dERlcD1uLGUucHJldkRlcD12b2lkIDApLG4mJihuLnByZXZEZXA9dCxlLm5leHREZXA9dm9pZCAwKX1mdW5jdGlvbiBRZShlLHQpe2UuZWZmZWN0IGluc3RhbmNlb2YgemUmJihlPWUuZWZmZWN0LmZuKTtsZXQgbj1uZXcgemUoZSk7dCYmbChuLHQpO3RyeXtuLnJ1bigpfWNhdGNoKGUpe3Rocm93IG4uc3RvcCgpLGV9bGV0IHI9bi5ydW4uYmluZChuKTtyZXR1cm4gci5lZmZlY3Q9bixyfWZ1bmN0aW9uICRlKGUpe2UuZWZmZWN0LnN0b3AoKX12YXIgZXQ9ITAsdHQ9W107ZnVuY3Rpb24gbnQoKXt0dC5wdXNoKGV0KSxldD0hMX1mdW5jdGlvbiBydCgpe2xldCBlPXR0LnBvcCgpO2V0PWU9PT12b2lkIDB8fGV9ZnVuY3Rpb24gaXQoZSl7bGV0e2NsZWFudXA6dH09ZTtpZihlLmNsZWFudXA9dm9pZCAwLHQpe2xldCBlPUxlO0xlPXZvaWQgMDt0cnl7dCgpfWZpbmFsbHl7TGU9ZX19fXZhciBhdD0wLG90PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdWI9ZSx0aGlzLmRlcD10LHRoaXMudmVyc2lvbj10LnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkRlcD10aGlzLm5leHRTdWI9dGhpcy5wcmV2U3ViPXRoaXMucHJldkFjdGl2ZUxpbms9dm9pZCAwfX0sc3Q9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlZD1lLHRoaXMudmVyc2lvbj0wLHRoaXMuYWN0aXZlTGluaz12b2lkIDAsdGhpcy5zdWJzPXZvaWQgMCx0aGlzLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9MCx0aGlzLl9fdl9za2lwPSEwfXRyYWNrKGUpe2lmKCFMZXx8IWV0fHxMZT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCB0PXRoaXMuYWN0aXZlTGluaztpZih0PT09dm9pZCAwfHx0LnN1YiE9PUxlKXQ9dGhpcy5hY3RpdmVMaW5rPW5ldyBvdChMZSx0aGlzKSxMZS5kZXBzPyh0LnByZXZEZXA9TGUuZGVwc1RhaWwsTGUuZGVwc1RhaWwubmV4dERlcD10LExlLmRlcHNUYWlsPXQpOkxlLmRlcHM9TGUuZGVwc1RhaWw9dCxjdCh0KTtlbHNlIGlmKHQudmVyc2lvbj09PS0xJiYodC52ZXJzaW9uPXRoaXMudmVyc2lvbix0Lm5leHREZXApKXtsZXQgZT10Lm5leHREZXA7ZS5wcmV2RGVwPXQucHJldkRlcCx0LnByZXZEZXAmJih0LnByZXZEZXAubmV4dERlcD1lKSx0LnByZXZEZXA9TGUuZGVwc1RhaWwsdC5uZXh0RGVwPXZvaWQgMCxMZS5kZXBzVGFpbC5uZXh0RGVwPXQsTGUuZGVwc1RhaWw9dCxMZS5kZXBzPT09dCYmKExlLmRlcHM9ZSl9cmV0dXJuIHR9dHJpZ2dlcihlKXt0aGlzLnZlcnNpb24rKyxhdCsrLHRoaXMubm90aWZ5KGUpfW5vdGlmeShlKXtXZSgpO3RyeXtmb3IobGV0IGU9dGhpcy5zdWJzO2U7ZT1lLnByZXZTdWIpZS5zdWIubm90aWZ5KCkmJmUuc3ViLmRlcC5ub3RpZnkoKX1maW5hbGx5e0dlKCl9fX07ZnVuY3Rpb24gY3QoZSl7aWYoZS5kZXAuc2MrKyxlLnN1Yi5mbGFncyY0KXtsZXQgdD1lLmRlcC5jb21wdXRlZDtpZih0JiYhZS5kZXAuc3Vicyl7dC5mbGFnc3w9MjA7Zm9yKGxldCBlPXQuZGVwcztlO2U9ZS5uZXh0RGVwKWN0KGUpfWxldCBuPWUuZGVwLnN1YnM7biE9PWUmJihlLnByZXZTdWI9bixuJiYobi5uZXh0U3ViPWUpKSxlLmRlcC5zdWJzPWV9fXZhciBsdD1uZXcgV2Vha01hcCx1dD1TeW1ib2woYGApLGR0PVN5bWJvbChgYCksZnQ9U3ltYm9sKGBgKTtmdW5jdGlvbiBwdChlLHQsbil7aWYoZXQmJkxlKXtsZXQgdD1sdC5nZXQoZSk7dHx8bHQuc2V0KGUsdD1uZXcgTWFwKTtsZXQgcj10LmdldChuKTtyfHwodC5zZXQobixyPW5ldyBzdCksci5tYXA9dCxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0aW9uIG10KGUsdCxuLHIsaSxhKXtsZXQgbz1sdC5nZXQoZSk7aWYoIW8pe2F0Kys7cmV0dXJufWxldCBzPWU9PntlJiZlLnRyaWdnZXIoKX07aWYoV2UoKSx0PT09YGNsZWFyYClvLmZvckVhY2gocyk7ZWxzZXtsZXQgaT1wKGUpLGE9aSYmVChuKTtpZihpJiZuPT09YGxlbmd0aGApe2xldCBlPU51bWJlcihyKTtvLmZvckVhY2goKHQsbik9Pnsobj09PWBsZW5ndGhgfHxuPT09ZnR8fCFiKG4pJiZuPj1lKSYmcyh0KX0pfWVsc2Ugc3dpdGNoKChuIT09dm9pZCAwfHxvLmhhcyh2b2lkIDApKSYmcyhvLmdldChuKSksYSYmcyhvLmdldChmdCkpLHQpe2Nhc2VgYWRkYDppP2EmJnMoby5nZXQoYGxlbmd0aGApKToocyhvLmdldCh1dCkpLG0oZSkmJnMoby5nZXQoZHQpKSk7YnJlYWs7Y2FzZWBkZWxldGVgOml8fChzKG8uZ2V0KHV0KSksbShlKSYmcyhvLmdldChkdCkpKTticmVhaztjYXNlYHNldGA6bShlKSYmcyhvLmdldCh1dCkpfX1HZSgpfWZ1bmN0aW9uIGh0KGUsdCl7bGV0IG49bHQuZ2V0KGUpO3JldHVybiBuJiZuLmdldCh0KX1mdW5jdGlvbiBndChlKXtsZXQgdD1BKGUpO3JldHVybiB0PT09ZT90OihwdCh0LGBpdGVyYXRlYCxmdCksYW4oZSk/dDp0Lm1hcChjbikpfWZ1bmN0aW9uIF90KGUpe3JldHVybiBwdChlPUEoZSksYGl0ZXJhdGVgLGZ0KSxlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIHJuKGUpP2xuKG5uKGUpP2NuKHQpOnQpOmNuKHQpfXZhciB5dD17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gYnQodGhpcyxTeW1ib2wuaXRlcmF0b3IsZT0+dnQodGhpcyxlKSl9LGNvbmNhdCguLi5lKXtyZXR1cm4gZ3QodGhpcykuY29uY2F0KC4uLmUubWFwKGU9PnAoZSk/Z3QoZSk6ZSkpfSxlbnRyaWVzKCl7cmV0dXJuIGJ0KHRoaXMsYGVudHJpZXNgLGU9PihlWzFdPXZ0KHRoaXMsZVsxXSksZSkpfSxldmVyeShlLHQpe3JldHVybiBTdCh0aGlzLGBldmVyeWAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmaWx0ZXIoZSx0KXtyZXR1cm4gU3QodGhpcyxgZmlsdGVyYCxlLHQsZT0+ZS5tYXAoZT0+dnQodGhpcyxlKSksYXJndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiBTdCh0aGlzLGBmaW5kYCxlLHQsZT0+dnQodGhpcyxlKSxhcmd1bWVudHMpfSxmaW5kSW5kZXgoZSx0KXtyZXR1cm4gU3QodGhpcyxgZmluZEluZGV4YCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZpbmRMYXN0KGUsdCl7cmV0dXJuIFN0KHRoaXMsYGZpbmRMYXN0YCxlLHQsZT0+dnQodGhpcyxlKSxhcmd1bWVudHMpfSxmaW5kTGFzdEluZGV4KGUsdCl7cmV0dXJuIFN0KHRoaXMsYGZpbmRMYXN0SW5kZXhgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZm9yRWFjaChlLHQpe3JldHVybiBTdCh0aGlzLGBmb3JFYWNoYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB3dCh0aGlzLGBpbmNsdWRlc2AsZSl9LGluZGV4T2YoLi4uZSl7cmV0dXJuIHd0KHRoaXMsYGluZGV4T2ZgLGUpfSxqb2luKGUpe3JldHVybiBndCh0aGlzKS5qb2luKGUpfSxsYXN0SW5kZXhPZiguLi5lKXtyZXR1cm4gd3QodGhpcyxgbGFzdEluZGV4T2ZgLGUpfSxtYXAoZSx0KXtyZXR1cm4gU3QodGhpcyxgbWFwYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LHBvcCgpe3JldHVybiBUdCh0aGlzLGBwb3BgKX0scHVzaCguLi5lKXtyZXR1cm4gVHQodGhpcyxgcHVzaGAsZSl9LHJlZHVjZShlLC4uLnQpe3JldHVybiBDdCh0aGlzLGByZWR1Y2VgLGUsdCl9LHJlZHVjZVJpZ2h0KGUsLi4udCl7cmV0dXJuIEN0KHRoaXMsYHJlZHVjZVJpZ2h0YCxlLHQpfSxzaGlmdCgpe3JldHVybiBUdCh0aGlzLGBzaGlmdGApfSxzb21lKGUsdCl7cmV0dXJuIFN0KHRoaXMsYHNvbWVgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sc3BsaWNlKC4uLmUpe3JldHVybiBUdCh0aGlzLGBzcGxpY2VgLGUpfSx0b1JldmVyc2VkKCl7cmV0dXJuIGd0KHRoaXMpLnRvUmV2ZXJzZWQoKX0sdG9Tb3J0ZWQoZSl7cmV0dXJuIGd0KHRoaXMpLnRvU29ydGVkKGUpfSx0b1NwbGljZWQoLi4uZSl7cmV0dXJuIGd0KHRoaXMpLnRvU3BsaWNlZCguLi5lKX0sdW5zaGlmdCguLi5lKXtyZXR1cm4gVHQodGhpcyxgdW5zaGlmdGAsZSl9LHZhbHVlcygpe3JldHVybiBidCh0aGlzLGB2YWx1ZXNgLGU9PnZ0KHRoaXMsZSkpfX07ZnVuY3Rpb24gYnQoZSx0LG4pe2xldCByPV90KGUpLGk9clt0XSgpO3JldHVybiByIT09ZSYmIWFuKGUpJiYoaS5fbmV4dD1pLm5leHQsaS5uZXh0PSgpPT57bGV0IGU9aS5fbmV4dCgpO3JldHVybiBlLmRvbmV8fChlLnZhbHVlPW4oZS52YWx1ZSkpLGV9KSxpfXZhciB4dD1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gU3QoZSx0LG4scixpLGEpe2xldCBvPV90KGUpLHM9byE9PWUmJiFhbihlKSxjPW9bdF07aWYoYyE9PXh0W3RdKXtsZXQgdD1jLmFwcGx5KGUsYSk7cmV0dXJuIHM/Y24odCk6dH1sZXQgbD1uO28hPT1lJiYocz9sPWZ1bmN0aW9uKHQscil7cmV0dXJuIG4uY2FsbCh0aGlzLHZ0KGUsdCkscixlKX06bi5sZW5ndGg+MiYmKGw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxyLGUpfSkpO2xldCB1PWMuY2FsbChvLGwscik7cmV0dXJuIHMmJmk/aSh1KTp1fWZ1bmN0aW9uIEN0KGUsdCxuLHIpe2xldCBpPV90KGUpLGE9aSE9PWUmJiFhbihlKSxvPW4scz0hMTtpIT09ZSYmKGE/KHM9ci5sZW5ndGg9PT0wLG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBzJiYocz0hMSx0PXZ0KGUsdCkpLG4uY2FsbCh0aGlzLHQsdnQoZSxyKSxpLGUpfSk6bi5sZW5ndGg+MyYmKG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBuLmNhbGwodGhpcyx0LHIsaSxlKX0pKTtsZXQgYz1pW3RdKG8sLi4ucik7cmV0dXJuIHM/dnQoZSxjKTpjfWZ1bmN0aW9uIHd0KGUsdCxuKXtsZXQgcj1BKGUpO3B0KHIsYGl0ZXJhdGVgLGZ0KTtsZXQgaT1yW3RdKC4uLm4pO3JldHVybihpPT09LTF8fGk9PT0hMSkmJm9uKG5bMF0pPyhuWzBdPUEoblswXSksclt0XSguLi5uKSk6aX1mdW5jdGlvbiBUdChlLHQsbj1bXSl7bnQoKSxXZSgpO2xldCByPUEoZSlbdF0uYXBwbHkoZSxuKTtyZXR1cm4gR2UoKSxydCgpLHJ9dmFyIEV0PW4oYF9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZWApLER0PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoZT0+ZSE9PWBhcmd1bWVudHNgJiZlIT09YGNhbGxlcmApLm1hcChlPT5TeW1ib2xbZV0pLmZpbHRlcihiKSk7ZnVuY3Rpb24gT3QoZSl7YihlKXx8KGU9U3RyaW5nKGUpKTtsZXQgdD1BKHRoaXMpO3JldHVybiBwdCh0LGBoYXNgLGUpLHQuaGFzT3duUHJvcGVydHkoZSl9dmFyIGt0PWNsYXNze2NvbnN0cnVjdG9yKGU9ITEsdD0hMSl7dGhpcy5faXNSZWFkb25seT1lLHRoaXMuX2lzU2hhbGxvdz10fWdldChlLHQsbil7aWYodD09PWBfX3Zfc2tpcGApcmV0dXJuIGUuX192X3NraXA7bGV0IHI9dGhpcy5faXNSZWFkb25seSxpPXRoaXMuX2lzU2hhbGxvdztpZih0PT09YF9fdl9pc1JlYWN0aXZlYClyZXR1cm4hcjtpZih0PT09YF9fdl9pc1JlYWRvbmx5YClyZXR1cm4gcjtpZih0PT09YF9fdl9pc1NoYWxsb3dgKXJldHVybiBpO2lmKHQ9PT1gX192X3Jhd2ApcmV0dXJuIG49PT0ocj9pP1l0Okp0Omk/cXQ6S3QpLmdldChlKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pP2U6dm9pZCAwO2xldCBhPXAoZSk7aWYoIXIpe2xldCBlO2lmKGEmJihlPXl0W3RdKSlyZXR1cm4gZTtpZih0PT09YGhhc093blByb3BlcnR5YClyZXR1cm4gT3R9bGV0IG89UmVmbGVjdC5nZXQoZSx0LHVuKGUpP2U6bik7aWYoKGIodCk/RHQuaGFzKHQpOkV0KHQpKXx8KHJ8fHB0KGUsYGdldGAsdCksaSkpcmV0dXJuIG87aWYodW4obykpe2xldCBlPWEmJlQodCk/bzpvLnZhbHVlO3JldHVybiByJiZ4KGUpPyR0KGUpOmV9cmV0dXJuIHgobyk/cj8kdChvKTpadChvKTpvfX0sQXQ9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3RvcihlPSExKXtzdXBlcighMSxlKX1zZXQoZSx0LG4scil7bGV0IGk9ZVt0XSxhPXAoZSkmJlQodCk7aWYoIXRoaXMuX2lzU2hhbGxvdyl7bGV0IGU9cm4oaSk7aWYoIWFuKG4pJiYhcm4obikmJihpPUEoaSksbj1BKG4pKSwhYSYmdW4oaSkmJiF1bihuKSlyZXR1cm4gZXx8KGkudmFsdWU9biksITB9bGV0IG89YT9OdW1iZXIodCk8ZS5sZW5ndGg6ZihlLHQpLHM9UmVmbGVjdC5zZXQoZSx0LG4sdW4oZSk/ZTpyKTtyZXR1cm4gZT09PUEocikmJnMmJihvP0QobixpKSYmbXQoZSxgc2V0YCx0LG4saSk6bXQoZSxgYWRkYCx0LG4pKSxzfWRlbGV0ZVByb3BlcnR5KGUsdCl7bGV0IG49ZihlLHQpLHI9ZVt0XSxpPVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZSx0KTtyZXR1cm4gaSYmbiYmbXQoZSxgZGVsZXRlYCx0LHZvaWQgMCxyKSxpfWhhcyhlLHQpe2xldCBuPVJlZmxlY3QuaGFzKGUsdCk7cmV0dXJuKCFiKHQpfHwhRHQuaGFzKHQpKSYmcHQoZSxgaGFzYCx0KSxufW93bktleXMoZSl7cmV0dXJuIHB0KGUsYGl0ZXJhdGVgLHAoZSk/YGxlbmd0aGA6dXQpLFJlZmxlY3Qub3duS2V5cyhlKX19LGp0PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoITAsZSl9c2V0KGUsdCl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkoZSx0KXtyZXR1cm4hMH19LE10PW5ldyBBdCxOdD1uZXcganQsUHQ9bmV3IEF0KCEwKSxGdD1uZXcganQoITApLEl0PWU9PmUsTHQ9ZT0+UmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKTtmdW5jdGlvbiBSdChlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe2xldCBpPXRoaXMuX192X3JhdyxhPUEoaSksbz1tKGEpLHM9ZT09PWBlbnRyaWVzYHx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbyxjPWU9PT1ga2V5c2AmJm8sdT1pW2VdKC4uLnIpLGQ9bj9JdDp0P2xuOmNuO3JldHVybiF0JiZwdChhLGBpdGVyYXRlYCxjP2R0OnV0KSxsKE9iamVjdC5jcmVhdGUodSkse25leHQoKXtsZXR7dmFsdWU6ZSxkb25lOnR9PXUubmV4dCgpO3JldHVybiB0P3t2YWx1ZTplLGRvbmU6dH06e3ZhbHVlOnM/W2QoZVswXSksZChlWzFdKV06ZChlKSxkb25lOnR9fX0pfX1mdW5jdGlvbiB6dChlKXtyZXR1cm4gZnVuY3Rpb24oLi4udCl7cmV0dXJuIGU9PT1gZGVsZXRlYD8hMTplPT09YGNsZWFyYD92b2lkIDA6dGhpc319ZnVuY3Rpb24gQnQoZSx0KXtsZXQgbj17Z2V0KG4pe2xldCByPXRoaXMuX192X3JhdyxpPUEociksYT1BKG4pO2V8fChEKG4sYSkmJnB0KGksYGdldGAsbikscHQoaSxgZ2V0YCxhKSk7bGV0e2hhczpvfT1MdChpKSxzPXQ/SXQ6ZT9sbjpjbjtpZihvLmNhbGwoaSxuKSlyZXR1cm4gcyhyLmdldChuKSk7aWYoby5jYWxsKGksYSkpcmV0dXJuIHMoci5nZXQoYSkpO3IhPT1pJiZyLmdldChuKX0sZ2V0IHNpemUoKXtsZXQgdD10aGlzLl9fdl9yYXc7cmV0dXJuIWUmJnB0KEEodCksYGl0ZXJhdGVgLHV0KSx0LnNpemV9LGhhcyh0KXtsZXQgbj10aGlzLl9fdl9yYXcscj1BKG4pLGk9QSh0KTtyZXR1cm4gZXx8KEQodCxpKSYmcHQocixgaGFzYCx0KSxwdChyLGBoYXNgLGkpKSx0PT09aT9uLmhhcyh0KTpuLmhhcyh0KXx8bi5oYXMoaSl9LGZvckVhY2gobixyKXtsZXQgaT10aGlzLGE9aS5fX3ZfcmF3LG89QShhKSxzPXQ/SXQ6ZT9sbjpjbjtyZXR1cm4hZSYmcHQobyxgaXRlcmF0ZWAsdXQpLGEuZm9yRWFjaCgoZSx0KT0+bi5jYWxsKHIscyhlKSxzKHQpLGkpKX19O3JldHVybiBsKG4sZT97YWRkOnp0KGBhZGRgKSxzZXQ6enQoYHNldGApLGRlbGV0ZTp6dChgZGVsZXRlYCksY2xlYXI6enQoYGNsZWFyYCl9OnthZGQoZSl7bGV0IG49QSh0aGlzKSxyPUx0KG4pLGk9QShlKSxhPSF0JiYhYW4oZSkmJiFybihlKT9pOmU7cmV0dXJuIHIuaGFzLmNhbGwobixhKXx8RChlLGEpJiZyLmhhcy5jYWxsKG4sZSl8fEQoaSxhKSYmci5oYXMuY2FsbChuLGkpfHwobi5hZGQoYSksbXQobixgYWRkYCxhLGEpKSx0aGlzfSxzZXQoZSxuKXshdCYmIWFuKG4pJiYhcm4obikmJihuPUEobikpO2xldCByPUEodGhpcykse2hhczppLGdldDphfT1MdChyKSxvPWkuY2FsbChyLGUpO298fD0oZT1BKGUpLGkuY2FsbChyLGUpKTtsZXQgcz1hLmNhbGwocixlKTtyZXR1cm4gci5zZXQoZSxuKSxvP0QobixzKSYmbXQocixgc2V0YCxlLG4scyk6bXQocixgYWRkYCxlLG4pLHRoaXN9LGRlbGV0ZShlKXtsZXQgdD1BKHRoaXMpLHtoYXM6bixnZXQ6cn09THQodCksaT1uLmNhbGwodCxlKTtpfHw9KGU9QShlKSxuLmNhbGwodCxlKSk7bGV0IGE9cj9yLmNhbGwodCxlKTp2b2lkIDAsbz10LmRlbGV0ZShlKTtyZXR1cm4gaSYmbXQodCxgZGVsZXRlYCxlLHZvaWQgMCxhKSxvfSxjbGVhcigpe2xldCBlPUEodGhpcyksdD1lLnNpemUhPT0wLG49ZS5jbGVhcigpO3JldHVybiB0JiZtdChlLGBjbGVhcmAsdm9pZCAwLHZvaWQgMCx2b2lkIDApLG59fSksW2BrZXlzYCxgdmFsdWVzYCxgZW50cmllc2AsU3ltYm9sLml0ZXJhdG9yXS5mb3JFYWNoKHI9PntuW3JdPVJ0KHIsZSx0KX0pLG59ZnVuY3Rpb24gVnQoZSx0KXtsZXQgbj1CdChlLHQpO3JldHVybih0LHIsaSk9PnI9PT1gX192X2lzUmVhY3RpdmVgPyFlOnI9PT1gX192X2lzUmVhZG9ubHlgP2U6cj09PWBfX3ZfcmF3YD90OlJlZmxlY3QuZ2V0KGYobixyKSYmciBpbiB0P246dCxyLGkpfXZhciBIdD17Z2V0OlZ0KCExLCExKX0sVXQ9e2dldDpWdCghMSwhMCl9LFd0PXtnZXQ6VnQoITAsITEpfSxHdD17Z2V0OlZ0KCEwLCEwKX0sS3Q9bmV3IFdlYWtNYXAscXQ9bmV3IFdlYWtNYXAsSnQ9bmV3IFdlYWtNYXAsWXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWHQoZSl7c3dpdGNoKGUpe2Nhc2VgT2JqZWN0YDpjYXNlYEFycmF5YDpyZXR1cm4gMTtjYXNlYE1hcGA6Y2FzZWBTZXRgOmNhc2VgV2Vha01hcGA6Y2FzZWBXZWFrU2V0YDpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBadChlKXtyZXR1cm4gcm4oZSk/ZTp0bihlLCExLE10LEh0LEt0KX1mdW5jdGlvbiBRdChlKXtyZXR1cm4gdG4oZSwhMSxQdCxVdCxxdCl9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIHRuKGUsITAsTnQsV3QsSnQpfWZ1bmN0aW9uIGVuKGUpe3JldHVybiB0bihlLCEwLEZ0LEd0LFl0KX1mdW5jdGlvbiB0bihlLHQsbixyLGkpe2lmKCF4KGUpfHxlLl9fdl9yYXcmJiEodCYmZS5fX3ZfaXNSZWFjdGl2ZSl8fGUuX192X3NraXB8fCFPYmplY3QuaXNFeHRlbnNpYmxlKGUpKXJldHVybiBlO2xldCBhPWkuZ2V0KGUpO2lmKGEpcmV0dXJuIGE7bGV0IG89WHQoZWUoZSkpO2lmKG89PT0wKXJldHVybiBlO2xldCBzPW5ldyBQcm94eShlLG89PT0yP3I6bik7cmV0dXJuIGkuc2V0KGUscyksc31mdW5jdGlvbiBubihlKXtyZXR1cm4gcm4oZSk/bm4oZS5fX3ZfcmF3KTohIShlJiZlLl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBybihlKXtyZXR1cm4hIShlJiZlLl9fdl9pc1JlYWRvbmx5KX1mdW5jdGlvbiBhbihlKXtyZXR1cm4hIShlJiZlLl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIG9uKGUpe3JldHVybiBlPyEhZS5fX3ZfcmF3OiExfWZ1bmN0aW9uIEEoZSl7bGV0IHQ9ZSYmZS5fX3ZfcmF3O3JldHVybiB0P0EodCk6ZX1mdW5jdGlvbiBzbihlKXtyZXR1cm4hZihlLGBfX3Zfc2tpcGApJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZ1ZShlLGBfX3Zfc2tpcGAsITApLGV9dmFyIGNuPWU9PngoZSk/WnQoZSk6ZSxsbj1lPT54KGUpPyR0KGUpOmU7ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIGU/ZS5fX3ZfaXNSZWY9PT0hMDohMX1mdW5jdGlvbiBqKGUpe3JldHVybiBmbihlLCExKX1mdW5jdGlvbiBkbihlKXtyZXR1cm4gZm4oZSwhMCl9ZnVuY3Rpb24gZm4oZSx0KXtyZXR1cm4gdW4oZSk/ZTpuZXcgcG4oZSx0KX12YXIgcG49Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRlcD1uZXcgc3QsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNTaGFsbG93PSExLHRoaXMuX3Jhd1ZhbHVlPXQ/ZTpBKGUpLHRoaXMuX3ZhbHVlPXQ/ZTpjbihlKSx0aGlzLl9fdl9pc1NoYWxsb3c9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5kZXAudHJhY2soKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7bGV0IHQ9dGhpcy5fcmF3VmFsdWUsbj10aGlzLl9fdl9pc1NoYWxsb3d8fGFuKGUpfHxybihlKTtlPW4/ZTpBKGUpLEQoZSx0KSYmKHRoaXMuX3Jhd1ZhbHVlPWUsdGhpcy5fdmFsdWU9bj9lOmNuKGUpLHRoaXMuZGVwLnRyaWdnZXIoKSl9fTtmdW5jdGlvbiBtbihlKXtlLmRlcCYmZS5kZXAudHJpZ2dlcigpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIHVuKGUpP2UudmFsdWU6ZX1mdW5jdGlvbiBobihlKXtyZXR1cm4gdihlKT9lKCk6TShlKX12YXIgZ249e2dldDooZSx0LG4pPT50PT09YF9fdl9yYXdgP2U6TShSZWZsZWN0LmdldChlLHQsbikpLHNldDooZSx0LG4scik9PntsZXQgaT1lW3RdO3JldHVybiB1bihpKSYmIXVuKG4pPyhpLnZhbHVlPW4sITApOlJlZmxlY3Quc2V0KGUsdCxuLHIpfX07ZnVuY3Rpb24gX24oZSl7cmV0dXJuIG5uKGUpP2U6bmV3IFByb3h5KGUsZ24pfXZhciB2bj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl92YWx1ZT12b2lkIDA7bGV0IHQ9dGhpcy5kZXA9bmV3IHN0LHtnZXQ6bixzZXQ6cn09ZSh0LnRyYWNrLmJpbmQodCksdC50cmlnZ2VyLmJpbmQodCkpO3RoaXMuX2dldD1uLHRoaXMuX3NldD1yfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZT10aGlzLl9nZXQoKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2V0KGUpfX07ZnVuY3Rpb24geW4oZSl7cmV0dXJuIG5ldyB2bihlKX1mdW5jdGlvbiBibihlKXtsZXQgdD1wKGUpP0FycmF5KGUubGVuZ3RoKTp7fTtmb3IobGV0IG4gaW4gZSl0W25dPXduKGUsbik7cmV0dXJuIHR9dmFyIHhuPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl9vYmplY3Q9ZSx0aGlzLl9kZWZhdWx0VmFsdWU9bix0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl92YWx1ZT12b2lkIDAsdGhpcy5fa2V5PWIodCk/dDpTdHJpbmcodCksdGhpcy5fcmF3PUEoZSk7bGV0IHI9ITAsaT1lO2lmKCFwKGUpfHxiKHRoaXMuX2tleSl8fCFUKHRoaXMuX2tleSkpZG8gcj0hb24oaSl8fGFuKGkpO3doaWxlKHImJihpPWkuX192X3JhdykpO3RoaXMuX3NoYWxsb3c9cn1nZXQgdmFsdWUoKXtsZXQgZT10aGlzLl9vYmplY3RbdGhpcy5fa2V5XTtyZXR1cm4gdGhpcy5fc2hhbGxvdyYmKGU9TShlKSksdGhpcy5fdmFsdWU9ZT09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6ZX1zZXQgdmFsdWUoZSl7aWYodGhpcy5fc2hhbGxvdyYmdW4odGhpcy5fcmF3W3RoaXMuX2tleV0pKXtsZXQgdD10aGlzLl9vYmplY3RbdGhpcy5fa2V5XTtpZih1bih0KSl7dC52YWx1ZT1lO3JldHVybn19dGhpcy5fb2JqZWN0W3RoaXMuX2tleV09ZX1nZXQgZGVwKCl7cmV0dXJuIGh0KHRoaXMuX3Jhdyx0aGlzLl9rZXkpfX0sU249Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fZ2V0dGVyPWUsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNSZWFkb25seT0hMCx0aGlzLl92YWx1ZT12b2lkIDB9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlPXRoaXMuX2dldHRlcigpfX07ZnVuY3Rpb24gQ24oZSx0LG4pe3JldHVybiB1bihlKT9lOnYoZSk/bmV3IFNuKGUpOngoZSkmJmFyZ3VtZW50cy5sZW5ndGg+MT93bihlLHQsbik6aihlKX1mdW5jdGlvbiB3bihlLHQsbil7cmV0dXJuIG5ldyB4bihlLHQsbil9dmFyIFRuPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmZuPWUsdGhpcy5zZXR0ZXI9dCx0aGlzLl92YWx1ZT12b2lkIDAsdGhpcy5kZXA9bmV3IHN0KHRoaXMpLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuZGVwcz12b2lkIDAsdGhpcy5kZXBzVGFpbD12b2lkIDAsdGhpcy5mbGFncz0xNix0aGlzLmdsb2JhbFZlcnNpb249YXQtMSx0aGlzLm5leHQ9dm9pZCAwLHRoaXMuZWZmZWN0PXRoaXMsdGhpcy5fX3ZfaXNSZWFkb25seT0hdCx0aGlzLmlzU1NSPW59bm90aWZ5KCl7aWYodGhpcy5mbGFnc3w9MTYsISh0aGlzLmZsYWdzJjgpJiZMZSE9PXRoaXMpcmV0dXJuIFVlKHRoaXMsITApLCEwfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuZGVwLnRyYWNrKCk7cmV0dXJuIFllKHRoaXMpLGUmJihlLnZlcnNpb249dGhpcy5kZXAudmVyc2lvbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMuc2V0dGVyJiZ0aGlzLnNldHRlcihlKX19O2Z1bmN0aW9uIEVuKGUsdCxuPSExKXtsZXQgcixpO3JldHVybiB2KGUpP3I9ZToocj1lLmdldCxpPWUuc2V0KSxuZXcgVG4ocixpLG4pfXZhciBEbj17R0VUOmBnZXRgLEhBUzpgaGFzYCxJVEVSQVRFOmBpdGVyYXRlYH0sT249e1NFVDpgc2V0YCxBREQ6YGFkZGAsREVMRVRFOmBkZWxldGVgLENMRUFSOmBjbGVhcmB9LGtuPXt9LEFuPW5ldyBXZWFrTWFwLGpuPXZvaWQgMDtmdW5jdGlvbiBNbigpe3JldHVybiBqbn1mdW5jdGlvbiBObihlLHQ9ITEsbj1qbil7aWYobil7bGV0IHQ9QW4uZ2V0KG4pO3R8fEFuLnNldChuLHQ9W10pLHQucHVzaChlKX19ZnVuY3Rpb24gUG4oZSx0LG49cil7bGV0e2ltbWVkaWF0ZTppLGRlZXA6byxvbmNlOnMsc2NoZWR1bGVyOmMsYXVnbWVudEpvYjpsLGNhbGw6ZH09bixmPWU9Pm8/ZTphbihlKXx8bz09PSExfHxvPT09MD9GbihlLDEpOkZuKGUpLG0saCxnLF8seT0hMSxiPSExO2lmKHVuKGUpPyhoPSgpPT5lLnZhbHVlLHk9YW4oZSkpOm5uKGUpPyhoPSgpPT5mKGUpLHk9ITApOnAoZSk/KGI9ITAseT1lLnNvbWUoZT0+bm4oZSl8fGFuKGUpKSxoPSgpPT5lLm1hcChlPT57aWYodW4oZSkpcmV0dXJuIGUudmFsdWU7aWYobm4oZSkpcmV0dXJuIGYoZSk7aWYodihlKSlyZXR1cm4gZD9kKGUsMik6ZSgpfSkpOmg9dihlKT90P2Q/KCk9PmQoZSwyKTplOigpPT57aWYoZyl7bnQoKTt0cnl7ZygpfWZpbmFsbHl7cnQoKX19bGV0IHQ9am47am49bTt0cnl7cmV0dXJuIGQ/ZChlLDMsW19dKTplKF8pfWZpbmFsbHl7am49dH19OmEsdCYmbyl7bGV0IGU9aCx0PW89PT0hMD8xLzA6bztoPSgpPT5GbihlKCksdCl9bGV0IHg9RmUoKSxTPSgpPT57bS5zdG9wKCkseCYmeC5hY3RpdmUmJnUoeC5lZmZlY3RzLG0pfTtpZihzJiZ0KXtsZXQgZT10O3Q9KC4uLnQpPT57bGV0IG49ZSguLi50KTtyZXR1cm4gUygpLG59fWxldCBDPWI/QXJyYXkoZS5sZW5ndGgpLmZpbGwoa24pOmtuLHc9ZT0+e2lmKCEoIShtLmZsYWdzJjEpfHwhbS5kaXJ0eSYmIWUpKXtpZih0KXtsZXQgbj1tLnJ1bigpO2lmKGV8fG98fHl8fChiP24uc29tZSgoZSx0KT0+RChlLENbdF0pKTpEKG4sQykpKXtnJiZnKCk7bGV0IGU9am47am49bTt0cnl7bGV0IGU9W24sQz09PWtuP3ZvaWQgMDpiJiZDWzBdPT09a24/W106QyxfXTtDPW4sZD9kKHQsMyxlKTp0KC4uLmUpfWZpbmFsbHl7am49ZX19fWVsc2UgbS5ydW4oKX19O3JldHVybiBsJiZsKHcpLG09bmV3IHplKGgpLG0uc2NoZWR1bGVyPWM/KCk9PmModywhMSk6dyxfPWU9Pk5uKGUsITEsbSksZz1tLm9uU3RvcD0oKT0+e2xldCBlPUFuLmdldChtKTtpZihlKXtpZihkKWQoZSw0KTtlbHNlIGZvcihsZXQgdCBvZiBlKXQoKTtBbi5kZWxldGUobSl9fSx0P2k/dyghMCk6Qz1tLnJ1bigpOmM/Yyh3LmJpbmQobnVsbCwhMCksITApOm0ucnVuKCksUy5wYXVzZT1tLnBhdXNlLmJpbmQobSksUy5yZXN1bWU9bS5yZXN1bWUuYmluZChtKSxTLnN0b3A9UyxTfWZ1bmN0aW9uIEZuKGUsdD0xLzAsbil7aWYodDw9MHx8IXgoZSl8fGUuX192X3NraXB8fChufHw9bmV3IE1hcCwobi5nZXQoZSl8fDApPj10KSlyZXR1cm4gZTtpZihuLnNldChlLHQpLHQtLSx1bihlKSlGbihlLnZhbHVlLHQsbik7ZWxzZSBpZihwKGUpKWZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKUZuKGVbcl0sdCxuKTtlbHNlIGlmKGgoZSl8fG0oZSkpZS5mb3JFYWNoKGU9PntGbihlLHQsbil9KTtlbHNlIGlmKHRlKGUpKXtmb3IobGV0IHIgaW4gZSlGbihlW3JdLHQsbik7Zm9yKGxldCByIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJkZuKGVbcl0sdCxuKX1yZXR1cm4gZX12YXIgSW49W107ZnVuY3Rpb24gTG4oZSl7SW4ucHVzaChlKX1mdW5jdGlvbiBSbigpe0luLnBvcCgpfWZ1bmN0aW9uIHpuKGUsdCl7fXZhciBCbj17U0VUVVBfRlVOQ1RJT046MCwwOmBTRVRVUF9GVU5DVElPTmAsUkVOREVSX0ZVTkNUSU9OOjEsMTpgUkVOREVSX0ZVTkNUSU9OYCxOQVRJVkVfRVZFTlRfSEFORExFUjo1LDU6YE5BVElWRV9FVkVOVF9IQU5ETEVSYCxDT01QT05FTlRfRVZFTlRfSEFORExFUjo2LDY6YENPTVBPTkVOVF9FVkVOVF9IQU5ETEVSYCxWTk9ERV9IT09LOjcsNzpgVk5PREVfSE9PS2AsRElSRUNUSVZFX0hPT0s6OCw4OmBESVJFQ1RJVkVfSE9PS2AsVFJBTlNJVElPTl9IT09LOjksOTpgVFJBTlNJVElPTl9IT09LYCxBUFBfRVJST1JfSEFORExFUjoxMCwxMDpgQVBQX0VSUk9SX0hBTkRMRVJgLEFQUF9XQVJOX0hBTkRMRVI6MTEsMTE6YEFQUF9XQVJOX0hBTkRMRVJgLEZVTkNUSU9OX1JFRjoxMiwxMjpgRlVOQ1RJT05fUkVGYCxBU1lOQ19DT01QT05FTlRfTE9BREVSOjEzLDEzOmBBU1lOQ19DT01QT05FTlRfTE9BREVSYCxTQ0hFRFVMRVI6MTQsMTQ6YFNDSEVEVUxFUmAsQ09NUE9ORU5UX1VQREFURToxNSwxNTpgQ09NUE9ORU5UX1VQREFURWAsQVBQX1VOTU9VTlRfQ0xFQU5VUDoxNiwxNjpgQVBQX1VOTU9VTlRfQ0xFQU5VUGB9LFZuPXtzcDpgc2VydmVyUHJlZmV0Y2ggaG9va2AsYmM6YGJlZm9yZUNyZWF0ZSBob29rYCxjOmBjcmVhdGVkIGhvb2tgLGJtOmBiZWZvcmVNb3VudCBob29rYCxtOmBtb3VudGVkIGhvb2tgLGJ1OmBiZWZvcmVVcGRhdGUgaG9va2AsdTpgdXBkYXRlZGAsYnVtOmBiZWZvcmVVbm1vdW50IGhvb2tgLHVtOmB1bm1vdW50ZWQgaG9va2AsYTpgYWN0aXZhdGVkIGhvb2tgLGRhOmBkZWFjdGl2YXRlZCBob29rYCxlYzpgZXJyb3JDYXB0dXJlZCBob29rYCxydGM6YHJlbmRlclRyYWNrZWQgaG9va2AscnRnOmByZW5kZXJUcmlnZ2VyZWQgaG9va2AsMDpgc2V0dXAgZnVuY3Rpb25gLDE6YHJlbmRlciBmdW5jdGlvbmAsMjpgd2F0Y2hlciBnZXR0ZXJgLDM6YHdhdGNoZXIgY2FsbGJhY2tgLDQ6YHdhdGNoZXIgY2xlYW51cCBmdW5jdGlvbmAsNTpgbmF0aXZlIGV2ZW50IGhhbmRsZXJgLDY6YGNvbXBvbmVudCBldmVudCBoYW5kbGVyYCw3OmB2bm9kZSBob29rYCw4OmBkaXJlY3RpdmUgaG9va2AsOTpgdHJhbnNpdGlvbiBob29rYCwxMDpgYXBwIGVycm9ySGFuZGxlcmAsMTE6YGFwcCB3YXJuSGFuZGxlcmAsMTI6YHJlZiBmdW5jdGlvbmAsMTM6YGFzeW5jIGNvbXBvbmVudCBsb2FkZXJgLDE0OmBzY2hlZHVsZXIgZmx1c2hgLDE1OmBjb21wb25lbnQgdXBkYXRlYCwxNjpgYXBwIHVubW91bnQgY2xlYW51cCBmdW5jdGlvbmB9O2Z1bmN0aW9uIEhuKGUsdCxuLHIpe3RyeXtyZXR1cm4gcj9lKC4uLnIpOmUoKX1jYXRjaChlKXtXbihlLHQsbil9fWZ1bmN0aW9uIFVuKGUsdCxuLHIpe2lmKHYoZSkpe2xldCBpPUhuKGUsdCxuLHIpO3JldHVybiBpJiZTKGkpJiZpLmNhdGNoKGU9PntXbihlLHQsbil9KSxpfWlmKHAoZSkpe2xldCBpPVtdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKWkucHVzaChVbihlW2FdLHQsbixyKSk7cmV0dXJuIGl9fWZ1bmN0aW9uIFduKGUsdCxuLGk9ITApe2xldCBhPXQ/dC52bm9kZTpudWxsLHtlcnJvckhhbmRsZXI6byx0aHJvd1VuaGFuZGxlZEVycm9ySW5Qcm9kdWN0aW9uOnN9PXQmJnQuYXBwQ29udGV4dC5jb25maWd8fHI7aWYodCl7bGV0IHI9dC5wYXJlbnQsaT10LnByb3h5LGE9YGh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnVudGltZS0ke259YDtmb3IoO3I7KXtsZXQgdD1yLmVjO2lmKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0oZSxpLGEpPT09ITEpcmV0dXJufXI9ci5wYXJlbnR9aWYobyl7bnQoKSxIbihvLG51bGwsMTAsW2UsaSxhXSkscnQoKTtyZXR1cm59fUduKGUsbixhLGkscyl9ZnVuY3Rpb24gR24oZSx0LG4scj0hMCxpPSExKXtpZihpKXRocm93IGU7Y29uc29sZS5lcnJvcihlKX12YXIgS249W10scW49LTEsSm49W10sWW49bnVsbCxYbj0wLFpuPVByb21pc2UucmVzb2x2ZSgpLFFuPW51bGw7ZnVuY3Rpb24gJG4oZSl7bGV0IHQ9UW58fFpuO3JldHVybiBlP3QudGhlbih0aGlzP2UuYmluZCh0aGlzKTplKTp0fWZ1bmN0aW9uIGVyKGUpe2xldCB0PXFuKzEsbj1Lbi5sZW5ndGg7Zm9yKDt0PG47KXtsZXQgcj10K24+Pj4xLGk9S25bcl0sYT1vcihpKTthPGV8fGE9PT1lJiZpLmZsYWdzJjI/dD1yKzE6bj1yfXJldHVybiB0fWZ1bmN0aW9uIHRyKGUpe2lmKCEoZS5mbGFncyYxKSl7bGV0IHQ9b3IoZSksbj1LbltLbi5sZW5ndGgtMV07IW58fCEoZS5mbGFncyYyKSYmdD49b3Iobik/S24ucHVzaChlKTpLbi5zcGxpY2UoZXIodCksMCxlKSxlLmZsYWdzfD0xLG5yKCl9fWZ1bmN0aW9uIG5yKCl7UW58fD1abi50aGVuKHNyKX1mdW5jdGlvbiBycihlKXtpZighcChlKSlZbiYmZS5pZD09PS0xP1luLnNwbGljZShYbisxLDAsZSk6ZS5mbGFncyYxfHwoSm4ucHVzaChlKSxlLmZsYWdzfD0xKTtlbHNlIGZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKUpuLnB1c2goZVt0XSk7bnIoKX1mdW5jdGlvbiBpcihlLHQsbj1xbisxKXtmb3IoO248S24ubGVuZ3RoO24rKyl7bGV0IHQ9S25bbl07aWYodCYmdC5mbGFncyYyKXtpZihlJiZ0LmlkIT09ZS51aWQpY29udGludWU7S24uc3BsaWNlKG4sMSksbi0tLHQuZmxhZ3MmNCYmKHQuZmxhZ3MmPS0yKSx0KCksdC5mbGFncyY0fHwodC5mbGFncyY9LTIpfX19ZnVuY3Rpb24gYXIoZSl7aWYoSm4ubGVuZ3RoKXtsZXQgZT1bLi4ubmV3IFNldChKbildLnNvcnQoKGUsdCk9Pm9yKGUpLW9yKHQpKTtpZihKbi5sZW5ndGg9MCxZbil7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspWW4ucHVzaChlW3RdKTtyZXR1cm59Zm9yKFluPWUsWG49MDtYbjxZbi5sZW5ndGg7WG4rKyl7bGV0IGU9WW5bWG5dO2UuZmxhZ3MmNCYmKGUuZmxhZ3MmPS0yKSxlLmZsYWdzJjh8fGUoKSxlLmZsYWdzJj0tMn1Zbj1udWxsLFhuPTB9fXZhciBvcj1lPT5lLmlkPT1udWxsP2UuZmxhZ3MmMj8tMToxLzA6ZS5pZDtmdW5jdGlvbiBzcihlKXt0cnl7Zm9yKHFuPTA7cW48S24ubGVuZ3RoO3FuKyspe2xldCBlPUtuW3FuXTtlJiYhKGUuZmxhZ3MmOCkmJihlLmZsYWdzJjQmJihlLmZsYWdzJj0tMiksSG4oZSxlLmksZS5pPzE1OjE0KSxlLmZsYWdzJjR8fChlLmZsYWdzJj0tMikpfX1maW5hbGx5e2Zvcig7cW48S24ubGVuZ3RoO3FuKyspe2xldCBlPUtuW3FuXTtlJiYoZS5mbGFncyY9LTIpfXFuPS0xLEtuLmxlbmd0aD0wLGFyKGUpLFFuPW51bGwsKEtuLmxlbmd0aHx8Sm4ubGVuZ3RoKSYmc3IoZSl9fXZhciBjcixscj1bXTtmdW5jdGlvbiB1cihlLHQpe2NyPWUsY3I/KGNyLmVuYWJsZWQ9ITAsbHIuZm9yRWFjaCgoe2V2ZW50OmUsYXJnczp0fSk9PmNyLmVtaXQoZSwuLi50KSksbHI9W10pOnR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cuSFRNTEVsZW1lbnQmJiEod2luZG93Lm5hdmlnYXRvcj8udXNlckFnZW50KT8uaW5jbHVkZXMoYGpzZG9tYCk/KCh0Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189dC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXSkucHVzaChlPT57dXIoZSx0KX0pLHNldFRpbWVvdXQoKCk9Pntjcnx8KHQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLGxyPVtdKX0sM2UzKSk6bHI9W119dmFyIGRyPW51bGwsZnI9bnVsbDtmdW5jdGlvbiBwcihlKXtsZXQgdD1kcjtyZXR1cm4gZHI9ZSxmcj1lJiZlLnR5cGUuX19zY29wZUlkfHxudWxsLHR9ZnVuY3Rpb24gbXIoZSl7ZnI9ZX1mdW5jdGlvbiBocigpe2ZyPW51bGx9dmFyIGdyPWU9Pk47ZnVuY3Rpb24gTihlLHQ9ZHIsbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7bGV0IHI9KC4uLm4pPT57ci5fZCYmaHMoLTEpO2xldCBpPXByKHQpLGE9ZHMubGVuZ3RoLG87dHJ5e289ZSguLi5uKX1maW5hbGx5e2ZvcihsZXQgZT1kcy5sZW5ndGg7ZT5hO2UtLSlwcygpO3ByKGkpLHIuX2QmJmhzKDEpfXJldHVybiBvfTtyZXR1cm4gci5fbj0hMCxyLl9jPSEwLHIuX2Q9ITAscn1mdW5jdGlvbiBfcihlLHQpe2lmKGRyPT09bnVsbClyZXR1cm4gZTtsZXQgbj1RcyhkciksaT1lLmRpcnN8fD1bXTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0W2EsbyxzLGM9cl09dFtlXTthJiYodihhKSYmKGE9e21vdW50ZWQ6YSx1cGRhdGVkOmF9KSxhLmRlZXAmJkZuKG8pLGkucHVzaCh7ZGlyOmEsaW5zdGFuY2U6bix2YWx1ZTpvLG9sZFZhbHVlOnZvaWQgMCxhcmc6cyxtb2RpZmllcnM6Y30pKX1yZXR1cm4gZX1mdW5jdGlvbiB2cihlLHQsbixyKXtsZXQgaT1lLmRpcnMsYT10JiZ0LmRpcnM7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107YSYmKHMub2xkVmFsdWU9YVtvXS52YWx1ZSk7bGV0IGM9cy5kaXJbcl07YyYmKG50KCksVW4oYyxuLDgsW2UuZWwscyxlLHRdKSxydCgpKX19ZnVuY3Rpb24geXIoZSx0KXtpZihQcyl7bGV0IG49UHMucHJvdmlkZXMscj1Qcy5wYXJlbnQmJlBzLnBhcmVudC5wcm92aWRlcztyPT09biYmKG49UHMucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShyKSksbltlXT10fX1mdW5jdGlvbiBicihlLHQsbj0hMSl7bGV0IHI9RnMoKTtpZihyfHxybyl7bGV0IGk9cm8/cm8uX2NvbnRleHQucHJvdmlkZXM6cj9yLnBhcmVudD09bnVsbHx8ci5jZT9yLnZub2RlLmFwcENvbnRleHQmJnIudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlczpyLnBhcmVudC5wcm92aWRlczp2b2lkIDA7aWYoaSYmZSBpbiBpKXJldHVybiBpW2VdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gbiYmdih0KT90LmNhbGwociYmci5wcm94eSk6dH19ZnVuY3Rpb24geHIoKXtyZXR1cm4hIShGcygpfHxybyl9dmFyIFNyPVN5bWJvbC5mb3IoYHYtc2N4YCksQ3I9KCk9PmJyKFNyKTtmdW5jdGlvbiB3cihlLHQpe3JldHVybiBPcihlLG51bGwsdCl9ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gT3IoZSxudWxsLHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiBFcihlLHQpe3JldHVybiBPcihlLG51bGwse2ZsdXNoOmBzeW5jYH0pfWZ1bmN0aW9uIERyKGUsdCxuKXtyZXR1cm4gT3IoZSx0LG4pfWZ1bmN0aW9uIE9yKGUsdCxuPXIpe2xldHtpbW1lZGlhdGU6aSxkZWVwOm8sZmx1c2g6cyxvbmNlOmN9PW4sdT1sKHt9LG4pLGQ9dCYmaXx8IXQmJnMhPT1gcG9zdGAsZjtpZihWcyl7aWYocz09PWBzeW5jYCl7bGV0IGU9Q3IoKTtmPWUuX193YXRjaGVySGFuZGxlc3x8PVtdfWVsc2UgaWYoIWQpe2xldCBlPSgpPT57fTtyZXR1cm4gZS5zdG9wPWEsZS5yZXN1bWU9YSxlLnBhdXNlPWEsZX19bGV0IHA9UHM7dS5jYWxsPShlLHQsbik9PlVuKGUscCx0LG4pO2xldCBtPSExO3M9PT1gcG9zdGA/dS5zY2hlZHVsZXI9ZT0+e0xvKGUscCYmcC5zdXNwZW5zZSl9OnMhPT1gc3luY2AmJihtPSEwLHUuc2NoZWR1bGVyPShlLHQpPT57dD9lKCk6dHIoZSl9KSx1LmF1Z21lbnRKb2I9ZT0+e3QmJihlLmZsYWdzfD00KSxtJiYoZS5mbGFnc3w9MixwJiYoZS5pZD1wLnVpZCxlLmk9cCkpfTtsZXQgaD1QbihlLHQsdSk7cmV0dXJuIFZzJiYoZj9mLnB1c2goaCk6ZCYmaCgpKSxofWZ1bmN0aW9uIGtyKGUsdCxuKXtsZXQgcj10aGlzLnByb3h5LGk9eShlKT9lLmluY2x1ZGVzKGAuYCk/QXIocixlKTooKT0+cltlXTplLmJpbmQocixyKSxhO3YodCk/YT10OihhPXQuaGFuZGxlcixuPXQpO2xldCBvPVJzKHRoaXMpLHM9T3IoaSxhLmJpbmQociksbik7cmV0dXJuIG8oKSxzfWZ1bmN0aW9uIEFyKGUsdCl7bGV0IG49dC5zcGxpdChgLmApO3JldHVybigpPT57bGV0IHQ9ZTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoJiZ0O2UrKyl0PXRbbltlXV07cmV0dXJuIHR9fXZhciBqcj1uZXcgV2Vha01hcCxNcj1TeW1ib2woYF92dGVgKSxOcj1lPT5lLl9faXNUZWxlcG9ydCxQcj1lPT5lJiYoZS5kaXNhYmxlZHx8ZS5kaXNhYmxlZD09PWBgKSxGcj1lPT5lJiYoZS5kZWZlcnx8ZS5kZWZlcj09PWBgKSxJcj1lPT50eXBlb2YgU1ZHRWxlbWVudDxgdWAmJmUgaW5zdGFuY2VvZiBTVkdFbGVtZW50LExyPWU9PnR5cGVvZiBNYXRoTUxFbGVtZW50PT1gZnVuY3Rpb25gJiZlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudCxScj0oZSx0KT0+e2xldCBuPWUmJmUudG87cmV0dXJuIHkobik/dD90KG4pOm51bGw6bn0senI9e25hbWU6YFRlbGVwb3J0YCxfX2lzVGVsZXBvcnQ6ITAscHJvY2VzcyhlLHQsbixyLGksYSxvLHMsYyxsKXtsZXR7bWM6dSxwYzpkLHBiYzpmLG86e2luc2VydDpwLHF1ZXJ5U2VsZWN0b3I6bSxjcmVhdGVUZXh0OmgsY3JlYXRlQ29tbWVudDpnLHBhcmVudE5vZGU6X319PWwsdj1Qcih0LnByb3BzKSx7ZHluYW1pY0NoaWxkcmVuOnl9PXQsYj0oZSx0LG4pPT57ZS5zaGFwZUZsYWcmMTYmJnUoZS5jaGlsZHJlbix0LG4saSxhLG8scyxjKX0seD0oZT10KT0+e2xldCBuPVByKGUucHJvcHMpLHI9ZS50YXJnZXQ9UnIoZS5wcm9wcyxtKSxhPVdyKHIsZSxoLHApO3ImJihvIT09YHN2Z2AmJklyKHIpP289YHN2Z2A6byE9PWBtYXRobWxgJiZMcihyKSYmKG89YG1hdGhtbGApLGkmJmkuaXNDRSYmKGkuY2UuX3RlbGVwb3J0VGFyZ2V0c3x8KGkuY2UuX3RlbGVwb3J0VGFyZ2V0cz1uZXcgU2V0KSkuYWRkKHIpLG58fChiKGUscixhKSxVcihlLCExKSkpfSxTPWU9PntsZXQgdD0oKT0+e2lmKGpyLmdldChlKT09PXQpe2lmKGpyLmRlbGV0ZShlKSxQcihlLnByb3BzKSl7bGV0IHQ9XyhlLmVsKXx8bjtiKGUsdCxlLmFuY2hvciksVXIoZSwhMCl9eChlKX19O2pyLnNldChlLHQpLExvKHQsYSl9O2lmKGU9PW51bGwpe2xldCBlPXQuZWw9aChgYCksaT10LmFuY2hvcj1oKGBgKTtpZihwKGUsbixyKSxwKGksbixyKSxGcih0LnByb3BzKXx8YSYmYS5wZW5kaW5nQnJhbmNoKXtTKHQpO3JldHVybn12JiYoYih0LG4saSksVXIodCwhMCkpLHgoKX1lbHNle3QuZWw9ZS5lbDtsZXQgcj10LmFuY2hvcj1lLmFuY2hvcix1PWpyLmdldChlKTtpZih1KXt1LmZsYWdzfD04LGpyLmRlbGV0ZShlKSxTKHQpO3JldHVybn10LnRhcmdldFN0YXJ0PWUudGFyZ2V0U3RhcnQ7bGV0IHA9dC50YXJnZXQ9ZS50YXJnZXQsaD10LnRhcmdldEFuY2hvcj1lLnRhcmdldEFuY2hvcixnPVByKGUucHJvcHMpLF89Zz9uOnAsYj1nP3I6aDtpZihvPT09YHN2Z2B8fElyKHApP289YHN2Z2A6KG89PT1gbWF0aG1sYHx8THIocCkpJiYobz1gbWF0aG1sYCkseT8oZihlLmR5bmFtaWNDaGlsZHJlbix5LF8saSxhLG8scyksV28oZSx0LCEwKSk6Y3x8ZChlLHQsXyxiLGksYSxvLHMsITEpLHYpZz90LnByb3BzJiZlLnByb3BzJiZ0LnByb3BzLnRvIT09ZS5wcm9wcy50byYmKHQucHJvcHMudG89ZS5wcm9wcy50byk6QnIodCxuLHIsbCwxKTtlbHNlIGlmKCh0LnByb3BzJiZ0LnByb3BzLnRvKSE9PShlLnByb3BzJiZlLnByb3BzLnRvKSl7bGV0IGU9UnIodC5wcm9wcyxtKTtlJiYodC50YXJnZXQ9ZSxCcih0LGUsbnVsbCxsLDApKX1lbHNlIGcmJkJyKHQscCxoLGwsMSk7VXIodCx2KX19LHJlbW92ZShlLHQsbix7dW06cixvOntyZW1vdmU6aX19LGEpe2xldHtzaGFwZUZsYWc6byxjaGlsZHJlbjpzLGFuY2hvcjpjLHRhcmdldFN0YXJ0OmwsdGFyZ2V0QW5jaG9yOnUsdGFyZ2V0OmQscHJvcHM6Zn09ZSxwPVByKGYpLG09YXx8IXAsaD1qci5nZXQoZSk7aWYoaCYmKGguZmxhZ3N8PTgsanIuZGVsZXRlKGUpKSxkJiYoaShsKSxpKHUpKSxhJiZpKGMpLCFoJiYocHx8ZCkmJm8mMTYpZm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspe2xldCBpPXNbZV07cihpLHQsbixtLCEhaS5keW5hbWljQ2hpbGRyZW4pfX0sbW92ZTpCcixoeWRyYXRlOlZyfTtmdW5jdGlvbiBCcihlLHQsbix7bzp7aW5zZXJ0OnJ9LG06aX0sYT0yKXthPT09MCYmcihlLnRhcmdldEFuY2hvcix0LG4pO2xldHtlbDpvLGFuY2hvcjpzLHNoYXBlRmxhZzpjLGNoaWxkcmVuOmwscHJvcHM6dX09ZSxkPWE9PT0yO2lmKGQmJnIobyx0LG4pLCFqci5oYXMoZSkmJighZHx8UHIodSkpJiZjJjE2KWZvcihsZXQgZT0wO2U8bC5sZW5ndGg7ZSsrKWkobFtlXSx0LG4sMik7ZCYmcihzLHQsbil9ZnVuY3Rpb24gVnIoZSx0LG4scixpLGEse286e25leHRTaWJsaW5nOm8scGFyZW50Tm9kZTpzLHF1ZXJ5U2VsZWN0b3I6YyxpbnNlcnQ6bCxjcmVhdGVUZXh0OnV9fSxkKXtmdW5jdGlvbiBmKGUsbil7bGV0IHI9bjtmb3IoO3I7KXtpZihyJiZyLm5vZGVUeXBlPT09OCl7aWYoci5kYXRhPT09YHRlbGVwb3J0IHN0YXJ0IGFuY2hvcmApdC50YXJnZXRTdGFydD1yO2Vsc2UgaWYoci5kYXRhPT09YHRlbGVwb3J0IGFuY2hvcmApe3QudGFyZ2V0QW5jaG9yPXIsZS5fbHBhPXQudGFyZ2V0QW5jaG9yJiZvKHQudGFyZ2V0QW5jaG9yKTticmVha319cj1vKHIpfX1mdW5jdGlvbiBwKGUsdCl7dC5hbmNob3I9ZChvKGUpLHQscyhlKSxuLHIsaSxhKX1sZXQgbT10LnRhcmdldD1Scih0LnByb3BzLGMpLGg9UHIodC5wcm9wcyk7aWYobSl7bGV0IGM9bS5fbHBhfHxtLmZpcnN0Q2hpbGQ7dC5zaGFwZUZsYWcmMTYmJihoPyhwKGUsdCksZihtLGMpLHQudGFyZ2V0QW5jaG9yfHxXcihtLHQsdSxsLHMoZSk9PT1tP2U6bnVsbCkpOih0LmFuY2hvcj1vKGUpLGYobSxjKSx0LnRhcmdldEFuY2hvcnx8V3IobSx0LHUsbCksZChjJiZvKGMpLHQsbSxuLHIsaSxhKSkpLFVyKHQsaCl9ZWxzZSBoJiZ0LnNoYXBlRmxhZyYxNiYmKHAoZSx0KSx0LnRhcmdldFN0YXJ0PWUsdC50YXJnZXRBbmNob3I9byhlKSk7cmV0dXJuIHQuYW5jaG9yJiZvKHQuYW5jaG9yKX12YXIgSHI9enI7ZnVuY3Rpb24gVXIoZSx0KXtsZXQgbj1lLmN0eDtpZihuJiZuLnV0KXtsZXQgcixpO2Zvcih0PyhyPWUuZWwsaT1lLmFuY2hvcik6KHI9ZS50YXJnZXRTdGFydCxpPWUudGFyZ2V0QW5jaG9yKTtyJiZyIT09aTspci5ub2RlVHlwZT09PTEmJnIuc2V0QXR0cmlidXRlKGBkYXRhLXYtb3duZXJgLG4udWlkKSxyPXIubmV4dFNpYmxpbmc7bi51dCgpfX1mdW5jdGlvbiBXcihlLHQsbixyLGk9bnVsbCl7bGV0IGE9dC50YXJnZXRTdGFydD1uKGBgKSxvPXQudGFyZ2V0QW5jaG9yPW4oYGApO3JldHVybiBhW01yXT1vLGUmJihyKGEsZSxpKSxyKG8sZSxpKSksb312YXIgR3I9U3ltYm9sKGBfbGVhdmVDYmApLEtyPVN5bWJvbChgX2VudGVyQ2JgKTtmdW5jdGlvbiBxcigpe2xldCBlPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBRaSgoKT0+e2UuaXNNb3VudGVkPSEwfSksdGEoKCk9PntlLmlzVW5tb3VudGluZz0hMH0pLGV9dmFyIEpyPVtGdW5jdGlvbixBcnJheV0sWXI9e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6SnIsb25FbnRlcjpKcixvbkFmdGVyRW50ZXI6SnIsb25FbnRlckNhbmNlbGxlZDpKcixvbkJlZm9yZUxlYXZlOkpyLG9uTGVhdmU6SnIsb25BZnRlckxlYXZlOkpyLG9uTGVhdmVDYW5jZWxsZWQ6SnIsb25CZWZvcmVBcHBlYXI6SnIsb25BcHBlYXI6SnIsb25BZnRlckFwcGVhcjpKcixvbkFwcGVhckNhbmNlbGxlZDpKcn0sWHI9ZT0+e2xldCB0PWUuc3ViVHJlZTtyZXR1cm4gdC5jb21wb25lbnQ/WHIodC5jb21wb25lbnQpOnR9LFpyPXtuYW1lOmBCYXNlVHJhbnNpdGlvbmAscHJvcHM6WXIsc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPUZzKCkscj1xcigpO3JldHVybigpPT57bGV0IGk9dC5kZWZhdWx0JiZhaSh0LmRlZmF1bHQoKSwhMCksYT1pJiZpLmxlbmd0aD9RcihpKTpuLnN1YlRyZWU/VSgpOnZvaWQgMDtpZighYSlyZXR1cm47bGV0IG89QShlKSx7bW9kZTpzfT1vO2lmKHIuaXNMZWF2aW5nKXJldHVybiBuaShhKTtsZXQgYz1yaShhKTtpZighYylyZXR1cm4gbmkoYSk7bGV0IGw9dGkoYyxvLHIsbixlPT5sPWUpO2MudHlwZSE9PWxzJiZpaShjLGwpO2xldCB1PW4uc3ViVHJlZSYmcmkobi5zdWJUcmVlKTtpZih1JiZ1LnR5cGUhPT1scyYmIXZzKHUsYykmJlhyKG4pLnR5cGUhPT1scyl7bGV0IGU9dGkodSxvLHIsbik7aWYoaWkodSxlKSxzPT09YG91dC1pbmAmJmMudHlwZSE9PWxzKXJldHVybiByLmlzTGVhdmluZz0hMCxlLmFmdGVyTGVhdmU9KCk9PntyLmlzTGVhdmluZz0hMSxuLmpvYi5mbGFncyY4fHxuLnVwZGF0ZSgpLGRlbGV0ZSBlLmFmdGVyTGVhdmUsdT12b2lkIDB9LG5pKGEpO3M9PT1gaW4tb3V0YCYmYy50eXBlIT09bHM/ZS5kZWxheUxlYXZlPShlLHQsbik9PntsZXQgaT1laShyLHUpO2lbU3RyaW5nKHUua2V5KV09dSxlW0dyXT0oKT0+e3QoKSxlW0dyXT12b2lkIDAsZGVsZXRlIGwuZGVsYXllZExlYXZlLHU9dm9pZCAwfSxsLmRlbGF5ZWRMZWF2ZT0oKT0+e24oKSxkZWxldGUgbC5kZWxheWVkTGVhdmUsdT12b2lkIDB9fTp1PXZvaWQgMH1lbHNlIHUmJj12b2lkIDA7cmV0dXJuIGF9fX07ZnVuY3Rpb24gUXIoZSl7bGV0IHQ9ZVswXTtpZihlLmxlbmd0aD4xKXtmb3IobGV0IG4gb2YgZSlpZihuLnR5cGUhPT1scyl7dD1uO2JyZWFrfX1yZXR1cm4gdH12YXIgJHI9WnI7ZnVuY3Rpb24gZWkoZSx0KXtsZXR7bGVhdmluZ1ZOb2RlczpufT1lLHI9bi5nZXQodC50eXBlKTtyZXR1cm4gcnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuLnNldCh0LnR5cGUscikpLHJ9ZnVuY3Rpb24gdGkoZSx0LG4scixpKXtsZXR7YXBwZWFyOmEsbW9kZTpvLHBlcnNpc3RlZDpzPSExLG9uQmVmb3JlRW50ZXI6YyxvbkVudGVyOmwsb25BZnRlckVudGVyOnUsb25FbnRlckNhbmNlbGxlZDpkLG9uQmVmb3JlTGVhdmU6ZixvbkxlYXZlOm0sb25BZnRlckxlYXZlOmgsb25MZWF2ZUNhbmNlbGxlZDpnLG9uQmVmb3JlQXBwZWFyOl8sb25BcHBlYXI6dixvbkFmdGVyQXBwZWFyOnksb25BcHBlYXJDYW5jZWxsZWQ6Yn09dCx4PVN0cmluZyhlLmtleSksUz1laShuLGUpLEM9KGUsdCk9PntlJiZVbihlLHIsOSx0KX0sdz0oZSx0KT0+e2xldCBuPXRbMV07QyhlLHQpLHAoZSk/ZS5ldmVyeShlPT5lLmxlbmd0aDw9MSkmJm4oKTplLmxlbmd0aDw9MSYmbigpfSxlZT17bW9kZTpvLHBlcnNpc3RlZDpzLGJlZm9yZUVudGVyKHQpe2xldCByPWM7aWYoIW4uaXNNb3VudGVkKXtpZihhKXI9X3x8YztlbHNlIHJldHVybn10W0dyXSYmdFtHcl0oITApO2xldCBpPVNbeF07aSYmdnMoZSxpKSYmaS5lbFtHcl0mJmkuZWxbR3JdKCksQyhyLFt0XSl9LGVudGVyKHQpe2lmKFNbeF09PT1lKXJldHVybjtsZXQgcj1sLGk9dSxvPWQ7aWYoIW4uaXNNb3VudGVkKXtpZihhKXI9dnx8bCxpPXl8fHUsbz1ifHxkO2Vsc2UgcmV0dXJufWxldCBzPSExO3RbS3JdPWU9PntzfHwocz0hMCxDKGU/bzppLFt0XSksZWUuZGVsYXllZExlYXZlJiZlZS5kZWxheWVkTGVhdmUoKSx0W0tyXT12b2lkIDApfTtsZXQgYz10W0tyXS5iaW5kKG51bGwsITEpO3I/dyhyLFt0LGNdKTpjKCl9LGxlYXZlKHQscil7bGV0IGk9U3RyaW5nKGUua2V5KTtpZih0W0tyXSYmdFtLcl0oITApLG4uaXNVbm1vdW50aW5nKXJldHVybiByKCk7QyhmLFt0XSk7bGV0IGE9ITE7dFtHcl09bj0+e2F8fChhPSEwLHIoKSxDKG4/ZzpoLFt0XSksdFtHcl09dm9pZCAwLFNbaV09PT1lJiZkZWxldGUgU1tpXSl9O2xldCBvPXRbR3JdLmJpbmQobnVsbCwhMSk7U1tpXT1lLG0/dyhtLFt0LG9dKTpvKCl9LGNsb25lKGUpe2xldCBhPXRpKGUsdCxuLHIsaSk7cmV0dXJuIGkmJmkoYSksYX19O3JldHVybiBlZX1mdW5jdGlvbiBuaShlKXtpZihCaShlKSlyZXR1cm4gZT13cyhlKSxlLmNoaWxkcmVuPW51bGwsZX1mdW5jdGlvbiByaShlKXtpZighQmkoZSkpcmV0dXJuIE5yKGUudHlwZSkmJmUuY2hpbGRyZW4/UXIoZS5jaGlsZHJlbik6ZTtpZihlLmNvbXBvbmVudClyZXR1cm4gZS5jb21wb25lbnQuc3ViVHJlZTtsZXR7c2hhcGVGbGFnOnQsY2hpbGRyZW46bn09ZTtpZihuKXtpZih0JjE2KXJldHVybiBuWzBdO2lmKHQmMzImJnYobi5kZWZhdWx0KSlyZXR1cm4gbi5kZWZhdWx0KCl9fWZ1bmN0aW9uIGlpKGUsdCl7aWYoZS5zaGFwZUZsYWcmNiYmZS5jb21wb25lbnQpe2UudHJhbnNpdGlvbj10O2xldCBuPWUuY29tcG9uZW50LnN1YlRyZWU7aWkoTnIobi50eXBlKSYmcmkobil8fG4sdCl9ZWxzZSBlLnNoYXBlRmxhZyYxMjg/KGUuc3NDb250ZW50LnRyYW5zaXRpb249dC5jbG9uZShlLnNzQ29udGVudCksZS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249dC5jbG9uZShlLnNzRmFsbGJhY2spKTplLnRyYW5zaXRpb249dH1mdW5jdGlvbiBhaShlLHQ9ITEsbil7bGV0IHI9W10saT0wO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbz1lW2FdLHM9bj09bnVsbD9vLmtleTpTdHJpbmcobikrU3RyaW5nKG8ua2V5PT1udWxsP2E6by5rZXkpO28udHlwZT09PUk/KG8ucGF0Y2hGbGFnJjEyOCYmaSsrLHI9ci5jb25jYXQoYWkoby5jaGlsZHJlbix0LHMpKSk6KHR8fG8udHlwZSE9PWxzKSYmci5wdXNoKHM9PW51bGw/bzp3cyhvLHtrZXk6c30pKX1pZihpPjEpZm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXS5wYXRjaEZsYWc9LTI7cmV0dXJuIHJ9ZnVuY3Rpb24gUChlLHQpe3JldHVybiB2KGUpP2woe25hbWU6ZS5uYW1lfSx0LHtzZXR1cDplfSk6ZX1mdW5jdGlvbiBvaSgpe2xldCBlPUZzKCk7cmV0dXJuIGU/KGUuYXBwQ29udGV4dC5jb25maWcuaWRQcmVmaXh8fGB2YCkrYC1gK2UuaWRzWzBdK2UuaWRzWzFdKys6YGB9ZnVuY3Rpb24gc2koZSl7ZS5pZHM9W2UuaWRzWzBdK2UuaWRzWzJdKysrYC1gLDAsMF19ZnVuY3Rpb24gY2koZSl7bGV0IHQ9RnMoKSxuPWRuKG51bGwpO2lmKHQpe2xldCBpPXQucmVmcz09PXI/dC5yZWZzPXt9OnQucmVmcztPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+bi52YWx1ZSxzZXQ6ZT0+bi52YWx1ZT1lfSl9cmV0dXJuIG59ZnVuY3Rpb24gbGkoZSx0KXtsZXQgbjtyZXR1cm4hISgobj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkpJiYhbi5jb25maWd1cmFibGUpfXZhciB1aT1uZXcgV2Vha01hcDtmdW5jdGlvbiBkaShlLHQsbixpLGE9ITEpe2lmKHAoZSkpe2UuZm9yRWFjaCgoZSxyKT0+ZGkoZSx0JiYocCh0KT90W3JdOnQpLG4saSxhKSk7cmV0dXJufWlmKExpKGkpJiYhYSl7aS5zaGFwZUZsYWcmNTEyJiZpLnR5cGUuX19hc3luY1Jlc29sdmVkJiZpLmNvbXBvbmVudC5zdWJUcmVlLmNvbXBvbmVudCYmZGkoZSx0LG4saS5jb21wb25lbnQuc3ViVHJlZSk7cmV0dXJufWxldCBzPWkuc2hhcGVGbGFnJjQ/UXMoaS5jb21wb25lbnQpOmkuZWwsYz1hP251bGw6cyx7aTpsLHI6ZH09ZSxtPXQmJnQucixoPWwucmVmcz09PXI/bC5yZWZzPXt9OmwucmVmcyxnPWwuc2V0dXBTdGF0ZSxfPUEoZyksYj1nPT09cj9vOmU9PiFsaShoLGUpJiZmKF8sZSkseD0oZSx0KT0+ISh0JiZsaShoLHQpKTtpZihtIT1udWxsJiZtIT09ZCl7aWYoZmkodCkseShtKSloW21dPW51bGwsYihtKSYmKGdbbV09bnVsbCk7ZWxzZSBpZih1bihtKSl7bGV0IGU9dDt4KG0sZS5rKSYmKG0udmFsdWU9bnVsbCksZS5rJiYoaFtlLmtdPW51bGwpfX1pZih2KGQpKUhuKGQsbCwxMixbYyxoXSk7ZWxzZXtsZXQgdD15KGQpLHI9dW4oZCk7aWYodHx8cil7bGV0IGk9KCk9PntpZihlLmYpe2xldCBuPXQ/YihkKT9nW2RdOmhbZF06eChkKXx8IWUuaz9kLnZhbHVlOmhbZS5rXTtpZihhKXAobikmJnUobixzKTtlbHNlIGlmKHAobikpbi5pbmNsdWRlcyhzKXx8bi5wdXNoKHMpO2Vsc2UgaWYodCloW2RdPVtzXSxiKGQpJiYoZ1tkXT1oW2RdKTtlbHNle2xldCB0PVtzXTt4KGQsZS5rKSYmKGQudmFsdWU9dCksZS5rJiYoaFtlLmtdPXQpfX1lbHNlIHQ/KGhbZF09YyxiKGQpJiYoZ1tkXT1jKSk6ciYmKHgoZCxlLmspJiYoZC52YWx1ZT1jKSxlLmsmJihoW2Uua109YykpfTtpZihjKXtsZXQgdD0oKT0+e2koKSx1aS5kZWxldGUoZSl9O3QuaWQ9LTEsdWkuc2V0KGUsdCksTG8odCxuKX1lbHNlIGZpKGUpLGkoKX19fWZ1bmN0aW9uIGZpKGUpe2xldCB0PXVpLmdldChlKTt0JiYodC5mbGFnc3w9OCx1aS5kZWxldGUoZSkpfXZhciBwaT0hMSxtaT0oKT0+e3BpfHw9KGNvbnNvbGUuZXJyb3IoYEh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuYCksITApfSxoaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgc3ZnYCkmJmUudGFnTmFtZSE9PWBmb3JlaWduT2JqZWN0YCxnaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgTWF0aE1MYCksX2k9ZT0+e2lmKGUubm9kZVR5cGU9PT0xKXtpZihoaShlKSlyZXR1cm5gc3ZnYDtpZihnaShlKSlyZXR1cm5gbWF0aG1sYH19LHZpPWU9PmUubm9kZVR5cGU9PT04O2Z1bmN0aW9uIHlpKGUpe2xldHttdDp0LHA6bixvOntwYXRjaFByb3A6cixjcmVhdGVUZXh0OmksbmV4dFNpYmxpbmc6YSxwYXJlbnROb2RlOm8scmVtb3ZlOmMsaW5zZXJ0OmwsY3JlYXRlQ29tbWVudDp1fX09ZSxkPShlLHQpPT57aWYoIXQuaGFzQ2hpbGROb2RlcygpKXtuKG51bGwsZSx0KSxhcigpLHQuX3Zub2RlPWU7cmV0dXJufWYodC5maXJzdENoaWxkLGUsbnVsbCxudWxsLG51bGwpLGFyKCksdC5fdm5vZGU9ZX0sZj0obixyLHMsYyx1LGQ9ITEpPT57ZHx8PSEhci5keW5hbWljQ2hpbGRyZW47bGV0IGI9dmkobikmJm4uZGF0YT09PWBbYCx4PSgpPT5nKG4scixzLGMsdSxiKSx7dHlwZTpTLHJlZjpDLHNoYXBlRmxhZzp3LHBhdGNoRmxhZzplZX09cix0ZT1uLm5vZGVUeXBlO3IuZWw9bixlZT09PS0yJiYoZD0hMSxyLmR5bmFtaWNDaGlsZHJlbj1udWxsKTtsZXQgVD1udWxsO3N3aXRjaChTKXtjYXNlIGNzOnRlPT09Mz8obi5kYXRhIT09ci5jaGlsZHJlbiYmKG1pKCksbi5kYXRhPXIuY2hpbGRyZW4pLFQ9YShuKSk6ci5jaGlsZHJlbj09PWBgPyhsKHIuZWw9aShgYCksbyhuKSxuKSxUPW4pOlQ9eCgpO2JyZWFrO2Nhc2UgbHM6eShuKT8oVD1hKG4pLHYoci5lbD1uLmNvbnRlbnQuZmlyc3RDaGlsZCxuLHMpKTpUPXRlIT09OHx8Yj94KCk6YShuKTticmVhaztjYXNlIHVzOmlmKGImJihuPWEobiksdGU9bi5ub2RlVHlwZSksdGU9PT0xfHx0ZT09PTMpe1Q9bjtsZXQgZT0hci5jaGlsZHJlbi5sZW5ndGg7Zm9yKGxldCB0PTA7dDxyLnN0YXRpY0NvdW50O3QrKyllJiYoci5jaGlsZHJlbis9VC5ub2RlVHlwZT09PTE/VC5vdXRlckhUTUw6VC5kYXRhKSx0PT09ci5zdGF0aWNDb3VudC0xJiYoci5hbmNob3I9VCksVD1hKFQpO3JldHVybiBiP2EoVCk6VH14KCk7YnJlYWs7Y2FzZSBJOlQ9Yj9oKG4scixzLGMsdSxkKTp4KCk7YnJlYWs7ZGVmYXVsdDppZih3JjEpVD0odGUhPT0xfHxyLnR5cGUudG9Mb3dlckNhc2UoKSE9PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSYmIXkobik/eCgpOnAobixyLHMsYyx1LGQpO2Vsc2UgaWYodyY2KXtyLnNsb3RTY29wZUlkcz11O2xldCBlPW8obik7aWYoVD1iP18obik6dmkobikmJm4uZGF0YT09PWB0ZWxlcG9ydCBzdGFydGA/XyhuLG4uZGF0YSxgdGVsZXBvcnQgZW5kYCk6YShuKSx0KHIsZSxudWxsLHMsYyxfaShlKSxkKSxMaShyKSYmIXIudHlwZS5fX2FzeW5jUmVzb2x2ZWQpe2xldCB0O2I/KHQ9VihJKSx0LmFuY2hvcj1UP1QucHJldmlvdXNTaWJsaW5nOmUubGFzdENoaWxkKTp0PW4ubm9kZVR5cGU9PT0zP0goYGApOlYoYGRpdmApLHQuZWw9bixyLmNvbXBvbmVudC5zdWJUcmVlPXR9fWVsc2UgdyY2ND9UPXRlPT09OD9yLnR5cGUuaHlkcmF0ZShuLHIscyxjLHUsZCxlLG0pOngoKTp3JjEyOCYmKFQ9ci50eXBlLmh5ZHJhdGUobixyLHMsYyxfaShvKG4pKSx1LGQsZSxmKSl9cmV0dXJuIEMhPW51bGwmJmRpKEMsbnVsbCxjLHIpLFR9LHA9KGUsdCxuLGksYSxvKT0+e298fD0hIXQuZHluYW1pY0NoaWxkcmVuO2xldHt0eXBlOmwsZHluYW1pY1Byb3BzOnUscHJvcHM6ZCxwYXRjaEZsYWc6ZixzaGFwZUZsYWc6cCxkaXJzOmgsdHJhbnNpdGlvbjpnfT10LF89bD09PWBpbnB1dGB8fGw9PT1gb3B0aW9uYCxiPSEhdTtpZihffHxifHxmIT09LTEpe2gmJnZyKHQsbnVsbCxuLGBjcmVhdGVkYCk7bGV0IGw9ITE7aWYoeShlKSl7bD1VbyhudWxsLGcpJiZuJiZuLnZub2RlLnByb3BzJiZuLnZub2RlLnByb3BzLmFwcGVhcjtsZXQgcj1lLmNvbnRlbnQuZmlyc3RDaGlsZDtpZihsKXtsZXQgZT1yLmdldEF0dHJpYnV0ZShgY2xhc3NgKTtlJiYoci4kY2xzPWUpLGcuYmVmb3JlRW50ZXIocil9dihyLGUsbiksdC5lbD1lPXJ9aWYocCYxNiYmIShkJiYoZC5pbm5lckhUTUx8fGQudGV4dENvbnRlbnQpKSl7bGV0IHI9bShlLmZpcnN0Q2hpbGQsdCxlLG4saSxhLG8pO2ZvcihyJiYhd2koZSwxKSYmbWkoKTtyOyl7bGV0IGU9cjtyPXIubmV4dFNpYmxpbmcsYyhlKX19ZWxzZSBpZihwJjgpe2xldCBuPXQuY2hpbGRyZW47blswXT09PWAKYCYmKGUudGFnTmFtZT09PWBQUkVgfHxlLnRhZ05hbWU9PT1gVEVYVEFSRUFgKSYmKG49bi5zbGljZSgxKSk7bGV0e3RleHRDb250ZW50OnJ9PWU7ciE9PW4mJnIhPT1uLnJlcGxhY2UoL1xyXG58XHIvZyxgCmApJiYod2koZSwwKXx8bWkoKSxlLnRleHRDb250ZW50PXQuY2hpbGRyZW4pfWlmKGQpe2lmKF98fGJ8fCFvfHxmJjQ4KXtsZXQgdD1lLnRhZ05hbWUuaW5jbHVkZXMoYC1gKSxpPWUubmFtZXNwYWNlVVJJLmluY2x1ZGVzKGBzdmdgKT9gc3ZnYDplLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgTWF0aE1MYCk/YG1hdGhtbGA6dm9pZCAwO2ZvcihsZXQgYSBpbiBkKWlmKF8mJihhLmVuZHNXaXRoKGB2YWx1ZWApfHxhPT09YGluZGV0ZXJtaW5hdGVgKXx8cyhhKSYmIW5lKGEpfHxhWzBdPT09YC5gfHx0JiYhbmUoYSl8fHUmJnUuaW5jbHVkZXMoYSkpe2lmKHhpKGUsYSxkW2FdKSljb250aW51ZTtyKGUsYSxudWxsLGRbYV0saSxuKX19ZWxzZSBpZihkLm9uQ2xpY2spcihlLGBvbkNsaWNrYCxudWxsLGQub25DbGljayx2b2lkIDAsbik7ZWxzZSBpZihmJjQmJm5uKGQuc3R5bGUpKWZvcihsZXQgZSBpbiBkLnN0eWxlKWQuc3R5bGVbZV19bGV0IHg7KHg9ZCYmZC5vblZub2RlQmVmb3JlTW91bnQpJiZBcyh4LG4sdCksaCYmdnIodCxudWxsLG4sYGJlZm9yZU1vdW50YCksKCh4PWQmJmQub25Wbm9kZU1vdW50ZWQpfHxofHxsKSYmYXMoKCk9Pnt4JiZBcyh4LG4sdCksbCYmZy5lbnRlcihlKSxoJiZ2cih0LG51bGwsbixgbW91bnRlZGApfSxpKX1yZXR1cm4gZS5uZXh0U2libGluZ30sbT0oZSx0LHIsbyxzLGMsdSk9Pnt1fHw9ISF0LmR5bmFtaWNDaGlsZHJlbjtsZXQgZD10LmNoaWxkcmVuLHA9ZC5sZW5ndGgsbT0hMTtmb3IobGV0IHQ9MDt0PHA7dCsrKXtsZXQgaD11P2RbdF06ZFt0XT1FcyhkW3RdKSxnPWgudHlwZT09PWNzO2U/KGcmJiF1JiZ0KzE8cCYmRXMoZFt0KzFdKS50eXBlPT09Y3MmJihsKGkoZS5kYXRhLnNsaWNlKGguY2hpbGRyZW4ubGVuZ3RoKSkscixhKGUpKSxlLmRhdGE9aC5jaGlsZHJlbiksZT1mKGUsaCxvLHMsYyx1KSk6ZyYmIWguY2hpbGRyZW4/bChoLmVsPWkoYGApLHIpOihtfHwobT0hMCx3aShyLDEpfHxtaSgpKSxuKG51bGwsaCxyLG51bGwsbyxzLF9pKHIpLGMpKX1yZXR1cm4gZX0saD0oZSx0LG4scixpLHMpPT57bGV0e3Nsb3RTY29wZUlkczpjfT10O2MmJihpPWk/aS5jb25jYXQoYyk6Yyk7bGV0IGQ9byhlKSxmPW0oYShlKSx0LGQsbixyLGkscyk7cmV0dXJuIGYmJnZpKGYpJiZmLmRhdGE9PT1gXWA/YSh0LmFuY2hvcj1mKToobWkoKSxsKHQuYW5jaG9yPXUoYF1gKSxkLGYpLGYpfSxnPShlLHQscixpLHMsbCk9PntpZihFaShlLHQpfHxtaSgpLHQuZWw9bnVsbCxsKXtsZXQgdD1fKGUpO2Zvcig7Oyl7bGV0IG49YShlKTtpZihuJiZuIT09dCljKG4pO2Vsc2UgYnJlYWt9fWxldCB1PWEoZSksZD1vKGUpO3JldHVybiBjKGUpLG4obnVsbCx0LGQsdSxyLGksX2koZCkscyksciYmKHIudm5vZGUuZWw9dC5lbCx2byhyLHQuZWwpKSx1fSxfPShlLHQ9YFtgLG49YF1gKT0+e2xldCByPTA7Zm9yKDtlOylpZihlPWEoZSksZSYmdmkoZSkmJihlLmRhdGE9PT10JiZyKyssZS5kYXRhPT09bikpe2lmKHI9PT0wKXJldHVybiBhKGUpO3ItLX1yZXR1cm4gZX0sdj0oZSx0LG4pPT57bGV0IHI9dC5wYXJlbnROb2RlO3ImJnIucmVwbGFjZUNoaWxkKGUsdCk7bGV0IGk9bjtmb3IoO2k7KWkudm5vZGUuZWw9PT10JiYoaS52bm9kZS5lbD1pLnN1YlRyZWUuZWw9ZSksaT1pLnBhcmVudH0seT1lPT5lLm5vZGVUeXBlPT09MSYmZS50YWdOYW1lPT09YFRFTVBMQVRFYDtyZXR1cm5bZCxmXX12YXIgYmk9bmV3IFNldChbYHNyY2AsYHNyY3NldGAsYGhyZWZgLGBwb3N0ZXJgXSk7ZnVuY3Rpb24geGkoZSx0LG4pe3JldHVybiBiaS5oYXModCk/ZS5nZXRBdHRyaWJ1dGUodCk9PT0obj09bnVsbD9udWxsOmAke259YCk6ITF9dmFyIFNpPWBkYXRhLWFsbG93LW1pc21hdGNoYCxDaT17MDpgdGV4dGAsMTpgY2hpbGRyZW5gLDI6YGNsYXNzYCwzOmBzdHlsZWAsNDpgYXR0cmlidXRlYH07ZnVuY3Rpb24gd2koZSx0KXtpZih0PT09MHx8dD09PTEpZm9yKDtlJiYhZS5oYXNBdHRyaWJ1dGUoU2kpOyllPWUucGFyZW50RWxlbWVudDtyZXR1cm4gVGkoZSYmZS5nZXRBdHRyaWJ1dGUoU2kpLHQpfWZ1bmN0aW9uIFRpKGUsdCl7aWYoZT09bnVsbClyZXR1cm4hMTtpZihlPT09YGApcmV0dXJuITA7e2xldCBuPWUuc3BsaXQoYCxgKTtyZXR1cm4gdD09PTAmJm4uaW5jbHVkZXMoYGNoaWxkcmVuYCk/ITA6bi5pbmNsdWRlcyhDaVt0XSl9fWZ1bmN0aW9uIEVpKGUsdCl7cmV0dXJuIHdpKGUucGFyZW50RWxlbWVudCwxKXx8RGkoZSl8fE9pKHQpfWZ1bmN0aW9uIERpKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MSYmVGkoZS5nZXRBdHRyaWJ1dGUoU2kpLDEpfWZ1bmN0aW9uIE9pKHtwcm9wczplfSl7bGV0IHQ9ZSYmZVtTaV07cmV0dXJuIHR5cGVvZiB0PT1gc3RyaW5nYCYmVGkodCwxKX12YXIga2k9bWUoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrfHwoZT0+c2V0VGltZW91dChlLDEpKSxBaT1tZSgpLmNhbmNlbElkbGVDYWxsYmFja3x8KGU9PmNsZWFyVGltZW91dChlKSksamk9KGU9MWU0KT0+dD0+e2xldCBuPWtpKHQse3RpbWVvdXQ6ZX0pO3JldHVybigpPT5BaShuKX07ZnVuY3Rpb24gTWkoZSl7bGV0e3RvcDp0LGxlZnQ6bixib3R0b206cixyaWdodDppfT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtpbm5lckhlaWdodDphLGlubmVyV2lkdGg6b309d2luZG93O3JldHVybih0PjAmJnQ8YXx8cj4wJiZyPGEpJiYobj4wJiZuPG98fGk+MCYmaTxvKX12YXIgTmk9ZT0+KHQsbik9PntsZXQgcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgbiBvZiBlKWlmKG4uaXNJbnRlcnNlY3Rpbmcpe3IuZGlzY29ubmVjdCgpLHQoKTticmVha319LGUpO3JldHVybiBuKGU9PntpZihlIGluc3RhbmNlb2YgRWxlbWVudCl7aWYoTWkoZSkpcmV0dXJuIHQoKSxyLmRpc2Nvbm5lY3QoKSwhMTtyLm9ic2VydmUoZSl9fSksKCk9PnIuZGlzY29ubmVjdCgpfSxQaT1lPT50PT57aWYoZSl7bGV0IG49bWF0Y2hNZWRpYShlKTtpZihuLm1hdGNoZXMpdCgpO2Vsc2UgcmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0LHtvbmNlOiEwfSksKCk9Pm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0KX19LEZpPShlPVtdKT0+KHQsbik9Pnt5KGUpJiYoZT1bZV0pO2xldCByPSExLGk9ZT0+e3J8fChyPSEwLGEoKSx0KCksZS50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgZS5jb25zdHJ1Y3RvcihlLnR5cGUsZSkpKX0sYT0oKT0+e24odD0+e2ZvcihsZXQgbiBvZiBlKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGkpfSl9O3JldHVybiBuKHQ9Pntmb3IobGV0IG4gb2YgZSl0LmFkZEV2ZW50TGlzdGVuZXIobixpLHtvbmNlOiEwfSl9KSxhfTtmdW5jdGlvbiBJaShlLHQpe2lmKHZpKGUpJiZlLmRhdGE9PT1gW2Ape2xldCBuPTEscj1lLm5leHRTaWJsaW5nO2Zvcig7cjspe2lmKHIubm9kZVR5cGU9PT0xKXtpZih0KHIpPT09ITEpYnJlYWt9ZWxzZSBpZih2aShyKSl7aWYoci5kYXRhPT09YF1gKXtpZigtLW49PT0wKWJyZWFrfWVsc2Ugci5kYXRhPT09YFtgJiZuKyt9cj1yLm5leHRTaWJsaW5nfX1lbHNlIHQoZSl9dmFyIExpPWU9PiEhZS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gUmkoZSl7dihlKSYmKGU9e2xvYWRlcjplfSk7bGV0e2xvYWRlcjp0LGxvYWRpbmdDb21wb25lbnQ6bixlcnJvckNvbXBvbmVudDpyLGRlbGF5Omk9MjAwLGh5ZHJhdGU6YSx0aW1lb3V0Om8sc3VzcGVuc2libGU6cz0hMCxvbkVycm9yOmN9PWUsbD1udWxsLHUsZD0wLGY9KCk9PihkKyssbD1udWxsLHAoKSkscD0oKT0+e2xldCBlO3JldHVybiBsfHwoZT1sPXQoKS5jYXRjaChlPT57aWYoZT1lIGluc3RhbmNlb2YgRXJyb3I/ZTpFcnJvcihTdHJpbmcoZSkpLGMpcmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57YyhlLCgpPT50KGYoKSksKCk9Pm4oZSksZCsxKX0pO3Rocm93IGV9KS50aGVuKHQ9PmUhPT1sJiZsP2w6KHQmJih0Ll9fZXNNb2R1bGV8fHRbU3ltYm9sLnRvU3RyaW5nVGFnXT09PWBNb2R1bGVgKSYmKHQ9dC5kZWZhdWx0KSx1PXQsdCkpKX07cmV0dXJuIFAoe25hbWU6YEFzeW5jQ29tcG9uZW50V3JhcHBlcmAsX19hc3luY0xvYWRlcjpwLF9fYXN5bmNIeWRyYXRlKGUsdCxuKXtsZXQgcj1lLmlzQ29ubmVjdGVkLGk9ITE7KHQuYnV8fD1bXSkucHVzaCgoKT0+aT0hMCk7bGV0IG89KCk9PntpfHwhZS5wYXJlbnROb2RlfHxyJiYhZS5pc0Nvbm5lY3RlZHx8bigpfSxzPWE/KCk9PntsZXQgbj1hKG8sdD0+SWkoZSx0KSk7biYmKHQuYnVtfHw9W10pLnB1c2gobil9Om87dT9zKCk6cCgpLnRoZW4oKCk9PiF0LmlzVW5tb3VudGVkJiZzKCkpfSxnZXQgX19hc3luY1Jlc29sdmVkKCl7cmV0dXJuIHV9LHNldHVwKCl7bGV0IGU9UHM7aWYoc2koZSksdSlyZXR1cm4oKT0+emkodSxlKTtsZXQgdD10PT57bD1udWxsLFduKHQsZSwxMywhcil9O2lmKHMmJmUuc3VzcGVuc2V8fFZzKXJldHVybiBwKCkudGhlbih0PT4oKT0+emkodCxlKSkuY2F0Y2goZT0+KHQoZSksKCk9PnI/VihyLHtlcnJvcjplfSk6bnVsbCkpO2xldCBhPWooITEpLGM9aigpLGQ9aighIWkpLGYsbTtyZXR1cm4gbmEoKCk9PntmIT1udWxsJiZjbGVhclRpbWVvdXQoZiksbSE9bnVsbCYmY2xlYXJUaW1lb3V0KG0pfSksaSYmKG09c2V0VGltZW91dCgoKT0+e2UuaXNVbm1vdW50ZWR8fChkLnZhbHVlPSExKX0saSkpLG8hPW51bGwmJihmPXNldFRpbWVvdXQoKCk9PntpZighZS5pc1VubW91bnRlZCYmIWEudmFsdWUmJiFjLnZhbHVlKXtsZXQgZT1FcnJvcihgQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAke299bXMuYCk7dChlKSxjLnZhbHVlPWV9fSxvKSkscCgpLnRoZW4oKCk9PntlLmlzVW5tb3VudGVkfHwoYS52YWx1ZT0hMCxlLnBhcmVudCYmQmkoZS5wYXJlbnQudm5vZGUpJiZlLnBhcmVudC51cGRhdGUoKSl9KS5jYXRjaChuPT57aWYoZS5pc1VubW91bnRlZCl7bD1udWxsO3JldHVybn10KG4pLGMudmFsdWU9bn0pLCgpPT57aWYoYS52YWx1ZSYmdSlyZXR1cm4gemkodSxlKTtpZihjLnZhbHVlJiZyKXJldHVybiBWKHIse2Vycm9yOmMudmFsdWV9KTtpZihuJiYhZC52YWx1ZSlyZXR1cm4gemkobixlKX19fSl9ZnVuY3Rpb24gemkoZSx0KXtsZXR7cmVmOm4scHJvcHM6cixjaGlsZHJlbjppLGNlOmF9PXQudm5vZGUsbz1WKGUscixpKTtyZXR1cm4gby5yZWY9bixvLmNlPWEsZGVsZXRlIHQudm5vZGUuY2Usb312YXIgQmk9ZT0+ZS50eXBlLl9faXNLZWVwQWxpdmUsVmk9e25hbWU6YEtlZXBBbGl2ZWAsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPUZzKCkscj1uLmN0eDtpZighci5yZW5kZXJlcilyZXR1cm4oKT0+e2xldCBlPXQuZGVmYXVsdCYmdC5kZWZhdWx0KCk7cmV0dXJuIGUmJmUubGVuZ3RoPT09MT9lWzBdOmV9O2xldCBpPW5ldyBNYXAsYT1uZXcgU2V0LG89bnVsbCxzPW4uc3VzcGVuc2Use3JlbmRlcmVyOntwOmMsbTpsLHVtOnUsbzp7Y3JlYXRlRWxlbWVudDpkfX19PXIsZj1kKGBkaXZgKTtyLmFjdGl2YXRlPShlLHQsbixyLGkpPT57bGV0IGE9ZS5jb21wb25lbnQ7bChlLHQsbiwwLHMpLGMoYS52bm9kZSxlLHQsbixhLHMscixlLnNsb3RTY29wZUlkcyxpKSxMbygoKT0+e2EuaXNEZWFjdGl2YXRlZD0hMSxhLmEmJmxlKGEuYSk7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5vblZub2RlTW91bnRlZDt0JiZBcyh0LGEucGFyZW50LGUpfSxzKX0sci5kZWFjdGl2YXRlPWU9PntsZXQgdD1lLmNvbXBvbmVudDtxbyh0Lm0pLHFvKHQuYSksbChlLGYsbnVsbCwxLHMpLExvKCgpPT57dC5kYSYmbGUodC5kYSk7bGV0IG49ZS5wcm9wcyYmZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO24mJkFzKG4sdC5wYXJlbnQsZSksdC5pc0RlYWN0aXZhdGVkPSEwfSxzKX07ZnVuY3Rpb24gcChlKXtxaShlKSx1KGUsbixzLCEwKX1mdW5jdGlvbiBtKGUpe2kuZm9yRWFjaCgodCxuKT0+e2xldCByPSRzKExpKHQpP3QudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OnQudHlwZSk7ciYmIWUocikmJmgobil9KX1mdW5jdGlvbiBoKGUpe2xldCB0PWkuZ2V0KGUpO3QmJighb3x8IXZzKHQsbykpP3AodCk6byYmcWkobyksaS5kZWxldGUoZSksYS5kZWxldGUoZSl9RHIoKCk9PltlLmluY2x1ZGUsZS5leGNsdWRlXSwoW2UsdF0pPT57ZSYmbSh0PT5IaShlLHQpKSx0JiZtKGU9PiFIaSh0LGUpKX0se2ZsdXNoOmBwb3N0YCxkZWVwOiEwfSk7bGV0IGc9bnVsbCxfPSgpPT57ZyE9bnVsbCYmKFlvKG4uc3ViVHJlZS50eXBlKT9MbygoKT0+e2kuc2V0KGcsSmkobi5zdWJUcmVlKSl9LG4uc3ViVHJlZS5zdXNwZW5zZSk6aS5zZXQoZyxKaShuLnN1YlRyZWUpKSl9O3JldHVybiBRaShfKSxlYShfKSx0YSgoKT0+e2kuZm9yRWFjaChlPT57bGV0e3N1YlRyZWU6dCxzdXNwZW5zZTpyfT1uLGk9SmkodCk7aWYoZS50eXBlPT09aS50eXBlJiZlLmtleT09PWkua2V5KXtxaShpKTtsZXQgZT1pLmNvbXBvbmVudC5kYTtlJiZMbyhlLHIpO3JldHVybn1wKGUpfSl9KSwoKT0+e2lmKGc9bnVsbCwhdC5kZWZhdWx0KXJldHVybiBvPW51bGw7bGV0IG49dC5kZWZhdWx0KCkscj1uWzBdO2lmKG4ubGVuZ3RoPjEpcmV0dXJuIG89bnVsbCxuO2lmKCFfcyhyKXx8IShyLnNoYXBlRmxhZyY0KSYmIShyLnNoYXBlRmxhZyYxMjgpKXJldHVybiBvPW51bGwscjtsZXQgcz1KaShyKTtpZihzLnR5cGU9PT1scylyZXR1cm4gbz1udWxsLHM7bGV0IGM9cy50eXBlLGw9JHMoTGkocyk/cy50eXBlLl9fYXN5bmNSZXNvbHZlZHx8e306Yykse2luY2x1ZGU6dSxleGNsdWRlOmQsbWF4OmZ9PWU7aWYodSYmKCFsfHwhSGkodSxsKSl8fGQmJmwmJkhpKGQsbCkpcmV0dXJuIHMuc2hhcGVGbGFnJj0tMjU3LG89cyxyO2xldCBwPXMua2V5PT1udWxsP2M6cy5rZXksbT1pLmdldChwKTtyZXR1cm4gcy5lbCYmKHM9d3Mocyksci5zaGFwZUZsYWcmMTI4JiYoci5zc0NvbnRlbnQ9cykpLGc9cCxtPyhzLmVsPW0uZWwscy5jb21wb25lbnQ9bS5jb21wb25lbnQscy50cmFuc2l0aW9uJiZpaShzLHMudHJhbnNpdGlvbikscy5zaGFwZUZsYWd8PTUxMixhLmRlbGV0ZShwKSxhLmFkZChwKSk6KGEuYWRkKHApLGYmJmEuc2l6ZT5wYXJzZUludChmLDEwKSYmaChhLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLHMuc2hhcGVGbGFnfD0yNTYsbz1zLFlvKHIudHlwZSk/cjpzfX19O2Z1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIHAoZSk/ZS5zb21lKGU9PkhpKGUsdCkpOnkoZSk/ZS5zcGxpdChgLGApLmluY2x1ZGVzKHQpOl8oZSk/KGUubGFzdEluZGV4PTAsZS50ZXN0KHQpKTohMX1mdW5jdGlvbiBVaShlLHQpe0dpKGUsYGFgLHQpfWZ1bmN0aW9uIFdpKGUsdCl7R2koZSxgZGFgLHQpfWZ1bmN0aW9uIEdpKGUsdCxuPVBzKXtsZXQgcj1lLl9fd2RjfHw9KCk9PntsZXQgdD1uO2Zvcig7dDspe2lmKHQuaXNEZWFjdGl2YXRlZClyZXR1cm47dD10LnBhcmVudH1yZXR1cm4gZSgpfTtpZihZaSh0LHIsbiksbil7bGV0IGU9bi5wYXJlbnQ7Zm9yKDtlJiZlLnBhcmVudDspQmkoZS5wYXJlbnQudm5vZGUpJiZLaShyLHQsbixlKSxlPWUucGFyZW50fX1mdW5jdGlvbiBLaShlLHQsbixyKXtsZXQgaT1ZaSh0LGUsciwhMCk7bmEoKCk9Pnt1KHJbdF0saSl9LG4pfWZ1bmN0aW9uIHFpKGUpe2Uuc2hhcGVGbGFnJj0tMjU3LGUuc2hhcGVGbGFnJj0tNTEzfWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnNoYXBlRmxhZyYxMjg/ZS5zc0NvbnRlbnQ6ZX1mdW5jdGlvbiBZaShlLHQsbj1QcyxyPSExKXtpZihuKXtsZXQgaT1uW2VdfHwobltlXT1bXSksYT10Ll9fd2VofHw9KC4uLnIpPT57bnQoKTtsZXQgaT1ScyhuKSxhPVVuKHQsbixlLHIpO3JldHVybiBpKCkscnQoKSxhfTtyZXR1cm4gcj9pLnVuc2hpZnQoYSk6aS5wdXNoKGEpLGF9fXZhciBYaT1lPT4odCxuPVBzKT0+eyghVnN8fGU9PT1gc3BgKSYmWWkoZSwoLi4uZSk9PnQoLi4uZSksbil9LFppPVhpKGBibWApLFFpPVhpKGBtYCksJGk9WGkoYGJ1YCksZWE9WGkoYHVgKSx0YT1YaShgYnVtYCksbmE9WGkoYHVtYCkscmE9WGkoYHNwYCksaWE9WGkoYHJ0Z2ApLGFhPVhpKGBydGNgKTtmdW5jdGlvbiBvYShlLHQ9UHMpe1lpKGBlY2AsZSx0KX12YXIgc2E9YGNvbXBvbmVudHNgLGNhPWBkaXJlY3RpdmVzYDtmdW5jdGlvbiBsYShlLHQpe3JldHVybiBwYShzYSxlLCEwLHQpfHxlfXZhciB1YT1TeW1ib2wuZm9yKGB2LW5kY2ApO2Z1bmN0aW9uIGRhKGUpe3JldHVybiB5KGUpP3BhKHNhLGUsITEpfHxlOmV8fHVhfWZ1bmN0aW9uIGZhKGUpe3JldHVybiBwYShjYSxlKX1mdW5jdGlvbiBwYShlLHQsbj0hMCxyPSExKXtsZXQgaT1kcnx8UHM7aWYoaSl7bGV0IG49aS50eXBlO2lmKGU9PT1zYSl7bGV0IGU9JHMobiwhMSk7aWYoZSYmKGU9PT10fHxlPT09RSh0KXx8ZT09PXNlKEUodCkpKSlyZXR1cm4gbn1sZXQgYT1tYShpW2VdfHxuW2VdLHQpfHxtYShpLmFwcENvbnRleHRbZV0sdCk7cmV0dXJuIWEmJnI/bjphfX1mdW5jdGlvbiBtYShlLHQpe3JldHVybiBlJiYoZVt0XXx8ZVtFKHQpXXx8ZVtzZShFKHQpKV0pfWZ1bmN0aW9uIGhhKGUsdCxuLHIpe2xldCBpLGE9biYmbltyXSxvPXAoZSk7aWYob3x8eShlKSl7bGV0IG49byYmbm4oZSkscj0hMSxzPSExO24mJihyPSFhbihlKSxzPXJuKGUpLGU9X3QoZSkpLGk9QXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKylpW25dPXQocj9zP2xuKGNuKGVbbl0pKTpjbihlW25dKTplW25dLG4sdm9pZCAwLGEmJmFbbl0pfWVsc2UgaWYodHlwZW9mIGU9PWBudW1iZXJgKXtpPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspaVtuXT10KG4rMSxuLHZvaWQgMCxhJiZhW25dKX1lbHNlIGlmKHgoZSkpe2lmKGVbU3ltYm9sLml0ZXJhdG9yXSlpPUFycmF5LmZyb20oZSwoZSxuKT0+dChlLG4sdm9pZCAwLGEmJmFbbl0pKTtlbHNle2xldCBuPU9iamVjdC5rZXlzKGUpO2k9QXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgcj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7bGV0IG89bltyXTtpW3JdPXQoZVtvXSxvLHIsYSYmYVtyXSl9fX1lbHNlIGk9W107cmV0dXJuIG4mJihuW3JdPWkpLGl9ZnVuY3Rpb24gZ2EoZSx0KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IHI9dFtuXTtpZihwKHIpKWZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKWVbclt0XS5uYW1lXT1yW3RdLmZuO2Vsc2UgciYmKGVbci5uYW1lXT1yLmtleT8oLi4uZSk9PntsZXQgdD1yLmZuKC4uLmUpO3JldHVybiB0JiYodC5rZXk9ci5rZXkpLHR9OnIuZm4pfXJldHVybiBlfWZ1bmN0aW9uIEYoZSx0LG4scixpLGEpe2lmKG4/Pz17fSxkci5jZXx8ZHIucGFyZW50JiZMaShkci5wYXJlbnQpJiZkci5wYXJlbnQuY2Upe2xldCBlPWEhPW51bGwmJm4ua2V5PT1udWxsP2woe30sbix7a2V5OmF9KTpuLGk9T2JqZWN0LmtleXMoZSkubGVuZ3RoPjA7cmV0dXJuIHQhPT0iZGVmYXVsdCImJihlLm5hbWU9dCksTCgpLHooSSxudWxsLFtWKGBzbG90YCxlLHImJnIoKSldLGk/LTI6NjQpfWxldCBvPWVbdF07byYmby5fYyYmKG8uX2Q9ITEpO2xldCBzPWRzLmxlbmd0aDtMKCk7bGV0IGM7dHJ5e2xldCBpPW8mJl9hKG8obikpLHM9bi5rZXl8fGF8fGkmJmkua2V5O2M9eihJLHtrZXk6KHMmJiFiKHMpP3M6YF8ke3R9YCkrKCFpJiZyP2BfZmJgOmBgKX0saXx8KHI/cigpOltdKSxpJiZlLl89PT0xPzY0Oi0yKX1jYXRjaChlKXtmb3IobGV0IGU9ZHMubGVuZ3RoO2U+cztlLS0pcHMoKTt0aHJvdyBlfWZpbmFsbHl7byYmby5fYyYmKG8uX2Q9ITApfXJldHVybiFpJiZjLnNjb3BlSWQmJihjLnNsb3RTY29wZUlkcz1bYy5zY29wZUlkK2Atc2BdKSxjfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBlLnNvbWUoZT0+IV9zKGUpfHwhKGUudHlwZT09PWxzfHxlLnR5cGU9PT1JJiYhX2EoZS5jaGlsZHJlbikpKT9lOm51bGx9ZnVuY3Rpb24gdmEoZSx0KXtsZXQgbj17fTtmb3IobGV0IHIgaW4gZSluW3QmJi9bQS1aXS8udGVzdChyKT9gb246JHtyfWA6Y2UocildPWVbcl07cmV0dXJuIG59dmFyIHlhPWU9PmU/QnMoZSk/UXMoZSk6eWEoZS5wYXJlbnQpOm51bGwsYmE9bChPYmplY3QuY3JlYXRlKG51bGwpLHskOmU9PmUsJGVsOmU9PmUudm5vZGUuZWwsJGRhdGE6ZT0+ZS5kYXRhLCRwcm9wczplPT5lLnByb3BzLCRhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzOmU9PmUucmVmcywkcGFyZW50OmU9PnlhKGUucGFyZW50KSwkcm9vdDplPT55YShlLnJvb3QpLCRob3N0OmU9PmUuY2UsJGVtaXQ6ZT0+ZS5lbWl0LCRvcHRpb25zOmU9PldhKGUpLCRmb3JjZVVwZGF0ZTplPT5lLmZ8fD0oKT0+e3RyKGUudXBkYXRlKX0sJG5leHRUaWNrOmU9PmUubnx8PSRuLmJpbmQoZS5wcm94eSksJHdhdGNoOmU9PmtyLmJpbmQoZSl9KSx4YT0oZSx0KT0+ZSE9PXImJiFlLl9faXNTY3JpcHRTZXR1cCYmZihlLHQpLFNhPXtnZXQoe186ZX0sdCl7aWYodD09PWBfX3Zfc2tpcGApcmV0dXJuITA7bGV0e2N0eDpuLHNldHVwU3RhdGU6aSxkYXRhOmEscHJvcHM6byxhY2Nlc3NDYWNoZTpzLHR5cGU6YyxhcHBDb250ZXh0Omx9PWU7aWYodFswXSE9PWAkYCl7bGV0IGU9c1t0XTtpZihlIT09dm9pZCAwKXN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGlbdF07Y2FzZSAyOnJldHVybiBhW3RdO2Nhc2UgNDpyZXR1cm4gblt0XTtjYXNlIDM6cmV0dXJuIG9bdF19ZWxzZSBpZih4YShpLHQpKXJldHVybiBzW3RdPTEsaVt0XTtlbHNlIGlmKGEhPT1yJiZmKGEsdCkpcmV0dXJuIHNbdF09MixhW3RdO2Vsc2UgaWYoZihvLHQpKXJldHVybiBzW3RdPTMsb1t0XTtlbHNlIGlmKG4hPT1yJiZmKG4sdCkpcmV0dXJuIHNbdF09NCxuW3RdO2Vsc2UgemEmJihzW3RdPTApfWxldCB1PWJhW3RdLGQscDtpZih1KXJldHVybiB0PT09YCRhdHRyc2AmJnB0KGUuYXR0cnMsYGdldGAsYGApLHUoZSk7aWYoKGQ9Yy5fX2Nzc01vZHVsZXMpJiYoZD1kW3RdKSlyZXR1cm4gZDtpZihuIT09ciYmZihuLHQpKXJldHVybiBzW3RdPTQsblt0XTtpZihwPWwuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsZihwLHQpKXJldHVybiBwW3RdfSxzZXQoe186ZX0sdCxuKXtsZXR7ZGF0YTppLHNldHVwU3RhdGU6YSxjdHg6b309ZTtyZXR1cm4geGEoYSx0KT8oYVt0XT1uLCEwKTppIT09ciYmZihpLHQpPyhpW3RdPW4sITApOmYoZS5wcm9wcyx0KXx8dFswXT09PWAkYCYmdC5zbGljZSgxKWluIGU/ITE6KG9bdF09biwhMCl9LGhhcyh7Xzp7ZGF0YTplLHNldHVwU3RhdGU6dCxhY2Nlc3NDYWNoZTpuLGN0eDppLGFwcENvbnRleHQ6YSxwcm9wczpvLHR5cGU6c319LGMpe2xldCBsO3JldHVybiEhKG5bY118fGUhPT1yJiZjWzBdIT09YCRgJiZmKGUsYyl8fHhhKHQsYyl8fGYobyxjKXx8ZihpLGMpfHxmKGJhLGMpfHxmKGEuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsYyl8fChsPXMuX19jc3NNb2R1bGVzKSYmbFtjXSl9LGRlZmluZVByb3BlcnR5KGUsdCxuKXtyZXR1cm4gbi5nZXQ9PW51bGw/ZihuLGB2YWx1ZWApJiZ0aGlzLnNldChlLHQsbi52YWx1ZSxudWxsKTplLl8uYWNjZXNzQ2FjaGVbdF09MCxSZWZsZWN0LmRlZmluZVByb3BlcnR5KGUsdCxuKX19LENhPWwoe30sU2Ese2dldChlLHQpe2lmKHQhPT1TeW1ib2wudW5zY29wYWJsZXMpcmV0dXJuIFNhLmdldChlLHQsZSl9LGhhcyhlLHQpe3JldHVybiB0WzBdIT09YF9gJiYhaGUodCl9fSk7ZnVuY3Rpb24gd2EoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUYSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEVhKGUpe31mdW5jdGlvbiBEYShlKXt9ZnVuY3Rpb24gT2EoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBrYSgpe31mdW5jdGlvbiBBYShlLHQpe3JldHVybiBudWxsfWZ1bmN0aW9uIGphKCl7cmV0dXJuIE5hKGB1c2VTbG90c2ApLnNsb3RzfWZ1bmN0aW9uIE1hKCl7cmV0dXJuIE5hKGB1c2VBdHRyc2ApLmF0dHJzfWZ1bmN0aW9uIE5hKGUpe2xldCB0PUZzKCk7cmV0dXJuIHQuc2V0dXBDb250ZXh0fHw9WnModCl9ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIHAoZSk/ZS5yZWR1Y2UoKGUsdCk9PihlW3RdPW51bGwsZSkse30pOmV9ZnVuY3Rpb24gRmEoZSx0KXtsZXQgbj1QYShlKTtmb3IobGV0IGUgaW4gdCl7aWYoZS5zdGFydHNXaXRoKGBfX3NraXBgKSljb250aW51ZTtsZXQgcj1uW2VdO3I/cChyKXx8dihyKT9yPW5bZV09e3R5cGU6cixkZWZhdWx0OnRbZV19OnIuZGVmYXVsdD10W2VdOnI9PT1udWxsJiYocj1uW2VdPXtkZWZhdWx0OnRbZV19KSxyJiZ0W2BfX3NraXBfJHtlfWBdJiYoci5za2lwRmFjdG9yeT0hMCl9cmV0dXJuIG59ZnVuY3Rpb24gSWEoZSx0KXtyZXR1cm4hZXx8IXQ/ZXx8dDpwKGUpJiZwKHQpP2UuY29uY2F0KHQpOmwoe30sUGEoZSksUGEodCkpfWZ1bmN0aW9uIExhKGUsdCl7bGV0IG49e307Zm9yKGxldCByIGluIGUpdC5pbmNsdWRlcyhyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PmVbcl19KTtyZXR1cm4gbn1mdW5jdGlvbiBSYShlKXtsZXQgdD1GcygpLG49VnMscj1lKCk7enMoKSxuJiZMcyghMSk7bGV0IGk9KCk9PntScyh0KSxuJiZMcyghMCl9LGE9KCk9PntGcygpIT09dCYmdC5zY29wZS5vZmYoKSx6cygpLG4mJkxzKCExKX07cmV0dXJuIFMocikmJihyPXIuY2F0Y2goZT0+e3Rocm93IGkoKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGEpKSxlfSkpLFtyLCgpPT57aSgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYSl9XX12YXIgemE9ITA7ZnVuY3Rpb24gQmEoZSl7bGV0IHQ9V2EoZSksbj1lLnByb3h5LHI9ZS5jdHg7emE9ITEsdC5iZWZvcmVDcmVhdGUmJkhhKHQuYmVmb3JlQ3JlYXRlLGUsYGJjYCk7bGV0e2RhdGE6aSxjb21wdXRlZDpvLG1ldGhvZHM6cyx3YXRjaDpjLHByb3ZpZGU6bCxpbmplY3Q6dSxjcmVhdGVkOmQsYmVmb3JlTW91bnQ6Zixtb3VudGVkOm0sYmVmb3JlVXBkYXRlOmgsdXBkYXRlZDpnLGFjdGl2YXRlZDpfLGRlYWN0aXZhdGVkOnksYmVmb3JlRGVzdHJveTpiLGJlZm9yZVVubW91bnQ6UyxkZXN0cm95ZWQ6Qyx1bm1vdW50ZWQ6dyxyZW5kZXI6ZWUscmVuZGVyVHJhY2tlZDp0ZSxyZW5kZXJUcmlnZ2VyZWQ6VCxlcnJvckNhcHR1cmVkOm5lLHNlcnZlclByZWZldGNoOnJlLGV4cG9zZTppZSxpbmhlcml0QXR0cnM6RSxjb21wb25lbnRzOmFlLGRpcmVjdGl2ZXM6b2UsZmlsdGVyczpzZX09dDtpZih1JiZWYSh1LHIsbnVsbCkscylmb3IobGV0IGUgaW4gcyl7bGV0IHQ9c1tlXTt2KHQpJiYocltlXT10LmJpbmQobikpfWlmKGkpe2xldCB0PWkuY2FsbChuLG4pO3godCkmJihlLmRhdGE9WnQodCkpfWlmKHphPSEwLG8pZm9yKGxldCBlIGluIG8pe2xldCB0PW9bZV0saT1XKHtnZXQ6dih0KT90LmJpbmQobixuKTp2KHQuZ2V0KT90LmdldC5iaW5kKG4sbik6YSxzZXQ6IXYodCkmJnYodC5zZXQpP3Quc2V0LmJpbmQobik6YX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+aS52YWx1ZSxzZXQ6ZT0+aS52YWx1ZT1lfSl9aWYoYylmb3IobGV0IGUgaW4gYylVYShjW2VdLHIsbixlKTtpZihsKXtsZXQgZT12KGwpP2wuY2FsbChuKTpsO1JlZmxlY3Qub3duS2V5cyhlKS5mb3JFYWNoKHQ9Pnt5cih0LGVbdF0pfSl9ZCYmSGEoZCxlLGBjYCk7ZnVuY3Rpb24gY2UoZSx0KXtwKHQpP3QuZm9yRWFjaCh0PT5lKHQuYmluZChuKSkpOnQmJmUodC5iaW5kKG4pKX1pZihjZShaaSxmKSxjZShRaSxtKSxjZSgkaSxoKSxjZShlYSxnKSxjZShVaSxfKSxjZShXaSx5KSxjZShvYSxuZSksY2UoYWEsdGUpLGNlKGlhLFQpLGNlKHRhLFMpLGNlKG5hLHcpLGNlKHJhLHJlKSxwKGllKSl7aWYoaWUubGVuZ3RoKXtsZXQgdD1lLmV4cG9zZWR8fD17fTtpZS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6KCk9Pm5bZV0sc2V0OnQ9Pm5bZV09dCxlbnVtZXJhYmxlOiEwfSl9KX1lbHNlIGUuZXhwb3NlZHx8PXt9fWVlJiZlLnJlbmRlcj09PWEmJihlLnJlbmRlcj1lZSksRSE9bnVsbCYmKGUuaW5oZXJpdEF0dHJzPUUpLGFlJiYoZS5jb21wb25lbnRzPWFlKSxvZSYmKGUuZGlyZWN0aXZlcz1vZSkscmUmJnNpKGUpfWZ1bmN0aW9uIFZhKGUsdCxuPWEpe3AoZSkmJihlPVlhKGUpKTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXSxpO2k9eChyKT9gZGVmYXVsdGBpbiByP2JyKHIuZnJvbXx8bixyLmRlZmF1bHQsITApOmJyKHIuZnJvbXx8bik6YnIociksdW4oaSk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pLnZhbHVlLHNldDplPT5pLnZhbHVlPWV9KTp0W25dPWl9fWZ1bmN0aW9uIEhhKGUsdCxuKXtVbihwKGUpP2UubWFwKGU9PmUuYmluZCh0LnByb3h5KSk6ZS5iaW5kKHQucHJveHkpLHQsbil9ZnVuY3Rpb24gVWEoZSx0LG4scil7bGV0IGk9ci5pbmNsdWRlcyhgLmApP0FyKG4scik6KCk9Pm5bcl07aWYoeShlKSl7bGV0IG49dFtlXTt2KG4pJiZEcihpLG4pfWVsc2UgaWYodihlKSlEcihpLGUuYmluZChuKSk7ZWxzZSBpZih4KGUpKXtpZihwKGUpKWUuZm9yRWFjaChlPT5VYShlLHQsbixyKSk7ZWxzZXtsZXQgcj12KGUuaGFuZGxlcik/ZS5oYW5kbGVyLmJpbmQobik6dFtlLmhhbmRsZXJdO3YocikmJkRyKGkscixlKX19fWZ1bmN0aW9uIFdhKGUpe2xldCB0PWUudHlwZSx7bWl4aW5zOm4sZXh0ZW5kczpyfT10LHttaXhpbnM6aSxvcHRpb25zQ2FjaGU6YSxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczpvfX09ZS5hcHBDb250ZXh0LHM9YS5nZXQodCksYztyZXR1cm4gcz9jPXM6IWkubGVuZ3RoJiYhbiYmIXI/Yz10OihjPXt9LGkubGVuZ3RoJiZpLmZvckVhY2goZT0+R2EoYyxlLG8sITApKSxHYShjLHQsbykpLHgodCkmJmEuc2V0KHQsYyksY31mdW5jdGlvbiBHYShlLHQsbixyPSExKXtsZXR7bWl4aW5zOmksZXh0ZW5kczphfT10O2EmJkdhKGUsYSxuLCEwKSxpJiZpLmZvckVhY2godD0+R2EoZSx0LG4sITApKTtmb3IobGV0IGkgaW4gdClpZighKHImJmk9PT1gZXhwb3NlYCkpe2xldCByPUthW2ldfHxuJiZuW2ldO2VbaV09cj9yKGVbaV0sdFtpXSk6dFtpXX1yZXR1cm4gZX12YXIgS2E9e2RhdGE6cWEscHJvcHM6UWEsZW1pdHM6UWEsbWV0aG9kczpaYSxjb21wdXRlZDpaYSxiZWZvcmVDcmVhdGU6WGEsY3JlYXRlZDpYYSxiZWZvcmVNb3VudDpYYSxtb3VudGVkOlhhLGJlZm9yZVVwZGF0ZTpYYSx1cGRhdGVkOlhhLGJlZm9yZURlc3Ryb3k6WGEsYmVmb3JlVW5tb3VudDpYYSxkZXN0cm95ZWQ6WGEsdW5tb3VudGVkOlhhLGFjdGl2YXRlZDpYYSxkZWFjdGl2YXRlZDpYYSxlcnJvckNhcHR1cmVkOlhhLHNlcnZlclByZWZldGNoOlhhLGNvbXBvbmVudHM6WmEsZGlyZWN0aXZlczpaYSx3YXRjaDokYSxwcm92aWRlOnFhLGluamVjdDpKYX07ZnVuY3Rpb24gcWEoZSx0KXtyZXR1cm4gdD9lP2Z1bmN0aW9uKCl7cmV0dXJuIGwodihlKT9lLmNhbGwodGhpcyx0aGlzKTplLHYodCk/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OnQ6ZX1mdW5jdGlvbiBKYShlLHQpe3JldHVybiBaYShZYShlKSxZYSh0KSl9ZnVuY3Rpb24gWWEoZSl7aWYocChlKSl7bGV0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdFtlW25dXT1lW25dO3JldHVybiB0fXJldHVybiBlfWZ1bmN0aW9uIFhhKGUsdCl7cmV0dXJuIGU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGUsdCkpXTp0fWZ1bmN0aW9uIFphKGUsdCl7cmV0dXJuIGU/bChPYmplY3QuY3JlYXRlKG51bGwpLGUsdCk6dH1mdW5jdGlvbiBRYShlLHQpe3JldHVybiBlP3AoZSkmJnAodCk/Wy4uLm5ldyBTZXQoWy4uLmUsLi4udF0pXTpsKE9iamVjdC5jcmVhdGUobnVsbCksUGEoZSksUGEodD8/e30pKTp0fWZ1bmN0aW9uICRhKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0dXJuIGU7bGV0IG49bChPYmplY3QuY3JlYXRlKG51bGwpLGUpO2ZvcihsZXQgciBpbiB0KW5bcl09WGEoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBlbygpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOm8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIHRvPTA7ZnVuY3Rpb24gbm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyPW51bGwpe3Yobil8fChuPWwoe30sbikpLHIhPW51bGwmJiF4KHIpJiYocj1udWxsKTtsZXQgaT1lbygpLGE9bmV3IFdlYWtTZXQsbz1bXSxzPSExLGM9aS5hcHA9e191aWQ6dG8rKyxfY29tcG9uZW50Om4sX3Byb3BzOnIsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjppYyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmlnKGUpe30sdXNlKGUsLi4udCl7cmV0dXJuIGEuaGFzKGUpfHwoZSYmdihlLmluc3RhbGwpPyhhLmFkZChlKSxlLmluc3RhbGwoYywuLi50KSk6dihlKSYmKGEuYWRkKGUpLGUoYywuLi50KSkpLGN9LG1peGluKGUpe3JldHVybiBpLm1peGlucy5pbmNsdWRlcyhlKXx8aS5taXhpbnMucHVzaChlKSxjfSxjb21wb25lbnQoZSx0KXtyZXR1cm4gdD8oaS5jb21wb25lbnRzW2VdPXQsYyk6aS5jb21wb25lbnRzW2VdfSxkaXJlY3RpdmUoZSx0KXtyZXR1cm4gdD8oaS5kaXJlY3RpdmVzW2VdPXQsYyk6aS5kaXJlY3RpdmVzW2VdfSxtb3VudChhLG8sbCl7aWYoIXMpe2xldCB1PWMuX2NlVk5vZGV8fFYobixyKTtyZXR1cm4gdS5hcHBDb250ZXh0PWksbD09PSEwP2w9YHN2Z2A6bD09PSExJiYobD12b2lkIDApLG8mJnQ/dCh1LGEpOmUodSxhLGwpLHM9ITAsYy5fY29udGFpbmVyPWEsYS5fX3Z1ZV9hcHBfXz1jLFFzKHUuY29tcG9uZW50KX19LG9uVW5tb3VudChlKXtvLnB1c2goZSl9LHVubW91bnQoKXtzJiYoVW4obyxjLl9pbnN0YW5jZSwxNiksZShudWxsLGMuX2NvbnRhaW5lciksZGVsZXRlIGMuX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoZSx0KXtyZXR1cm4gaS5wcm92aWRlc1tlXT10LGN9LHJ1bldpdGhDb250ZXh0KGUpe2xldCB0PXJvO3JvPWM7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtybz10fX19O3JldHVybiBjfX12YXIgcm89bnVsbDtmdW5jdGlvbiBpbyhlLHQsbj1yKXtsZXQgaT1GcygpLGE9RSh0KSxvPW9lKHQpLHM9YW8oZSxhKSxjPXluKChzLGMpPT57bGV0IGwsdT1yLGQ7cmV0dXJuIEVyKCgpPT57bGV0IHQ9ZVthXTtEKGwsdCkmJihsPXQsYygpKX0pLHtnZXQoKXtyZXR1cm4gcygpLG4uZ2V0P24uZ2V0KGwpOmx9LHNldChlKXtsZXQgcz1uLnNldD9uLnNldChlKTplO2lmKCFEKHMsbCkmJiEodSE9PXImJkQoZSx1KSkpcmV0dXJuO2xldCBmPWkudm5vZGUucHJvcHMscD0hIShmJiYodCBpbiBmfHxhIGluIGZ8fG8gaW4gZikmJihgb25VcGRhdGU6JHt0fWBpbiBmfHxgb25VcGRhdGU6JHthfWBpbiBmfHxgb25VcGRhdGU6JHtvfWBpbiBmKSk7cHx8KGw9ZSxjKCkpLGkuZW1pdChgdXBkYXRlOiR7dH1gLHMpLEQoZSx1KSYmKEQoZSxzKSYmIUQocyxkKXx8cCYmdSE9PXImJiFEKHMsbCkpJiZjKCksdT1lLGQ9c319fSk7cmV0dXJuIGNbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e2xldCBlPTA7cmV0dXJue25leHQoKXtyZXR1cm4gZTwyP3t2YWx1ZTplKys/c3x8cjpjLGRvbmU6ITF9Ontkb25lOiEwfX19fSxjfXZhciBhbz0oZSx0KT0+dD09PWBtb2RlbFZhbHVlYHx8dD09PWBtb2RlbC12YWx1ZWA/ZS5tb2RlbE1vZGlmaWVyczplW2Ake3R9TW9kaWZpZXJzYF18fGVbYCR7RSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtvZSh0KX1Nb2RpZmllcnNgXTtmdW5jdGlvbiBvbyhlLHQsLi4ubil7aWYoZS5pc1VubW91bnRlZClyZXR1cm47bGV0IGk9ZS52bm9kZS5wcm9wc3x8cixhPW4sbz10LnN0YXJ0c1dpdGgoYHVwZGF0ZTpgKSxzPW8mJmFvKGksdC5zbGljZSg3KSk7cyYmKHMudHJpbSYmKGE9bi5tYXAoZT0+eShlKT9lLnRyaW0oKTplKSkscy5udW1iZXImJihhPW4ubWFwKGRlKSkpO2xldCBjLGw9aVtjPWNlKHQpXXx8aVtjPWNlKEUodCkpXTshbCYmbyYmKGw9aVtjPWNlKG9lKHQpKV0pLGwmJlVuKGwsZSw2LGEpO2xldCB1PWlbYytgT25jZWBdO2lmKHUpe2lmKCFlLmVtaXR0ZWQpZS5lbWl0dGVkPXt9O2Vsc2UgaWYoZS5lbWl0dGVkW2NdKXJldHVybjtlLmVtaXR0ZWRbY109ITAsVW4odSxlLDYsYSl9fXZhciBzbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBjbyhlLHQsbj0hMSl7bGV0IHI9bj9zbzp0LmVtaXRzQ2FjaGUsaT1yLmdldChlKTtpZihpIT09dm9pZCAwKXJldHVybiBpO2xldCBhPWUuZW1pdHMsbz17fSxzPSExO2lmKCF2KGUpKXtsZXQgcj1lPT57bGV0IG49Y28oZSx0LCEwKTtuJiYocz0hMCxsKG8sbikpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0Lm1peGlucy5mb3JFYWNoKHIpLGUuZXh0ZW5kcyYmcihlLmV4dGVuZHMpLGUubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKHIpfXJldHVybiFhJiYhcz8oeChlKSYmci5zZXQoZSxudWxsKSxudWxsKToocChhKT9hLmZvckVhY2goZT0+b1tlXT1udWxsKTpsKG8sYSkseChlKSYmci5zZXQoZSxvKSxvKX1mdW5jdGlvbiBsbyhlLHQpe3JldHVybiFlfHwhcyh0KT8hMToodD10LnNsaWNlKDIpLHQ9dD09PWBPbmNlYD90OnQucmVwbGFjZSgvT25jZSQvLGBgKSxmKGUsdFswXS50b0xvd2VyQ2FzZSgpK3Quc2xpY2UoMSkpfHxmKGUsb2UodCkpfHxmKGUsdCkpfWZ1bmN0aW9uIHVvKGUpe2xldHt0eXBlOnQsdm5vZGU6bixwcm94eTpyLHdpdGhQcm94eTppLHByb3BzT3B0aW9uczpbYV0sc2xvdHM6byxhdHRyczpzLGVtaXQ6bCxyZW5kZXI6dSxyZW5kZXJDYWNoZTpkLHByb3BzOmYsZGF0YTpwLHNldHVwU3RhdGU6bSxjdHg6aCxpbmhlcml0QXR0cnM6Z309ZSxfPXByKGUpLHYseTt0cnl7aWYobi5zaGFwZUZsYWcmNCl7bGV0IGU9aXx8cix0PWU7dj1Fcyh1LmNhbGwodCxlLGQsZixtLHAsaCkpLHk9c31lbHNle2xldCBlPXQ7dj1FcyhlLmxlbmd0aD4xP2UoZix7YXR0cnM6cyxzbG90czpvLGVtaXQ6bH0pOmUoZixudWxsKSkseT10LnByb3BzP3M6cG8ocyl9fWNhdGNoKHQpe2RzLmxlbmd0aD0wLFduKHQsZSwxKSx2PVYobHMpfWxldCBiPXY7aWYoeSYmZyE9PSExKXtsZXQgZT1PYmplY3Qua2V5cyh5KSx7c2hhcGVGbGFnOnR9PWI7ZS5sZW5ndGgmJnQmNyYmKGEmJmUuc29tZShjKSYmKHk9bW8oeSxhKSksYj13cyhiLHksITEsITApKX1yZXR1cm4gbi5kaXJzJiYoYj13cyhiLG51bGwsITEsITApLGIuZGlycz1iLmRpcnM/Yi5kaXJzLmNvbmNhdChuLmRpcnMpOm4uZGlycyksbi50cmFuc2l0aW9uJiZpaShOcihiLnR5cGUpJiZyaShiKXx8YixuLnRyYW5zaXRpb24pLHY9YixwcihfKSx2fWZ1bmN0aW9uIGZvKGUsdD0hMCl7bGV0IG47Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoX3Mocikpe2lmKHIudHlwZSE9PWxzfHxyLmNoaWxkcmVuPT09YHYtaWZgKXtpZihuKXJldHVybjtuPXJ9fWVsc2UgcmV0dXJufXJldHVybiBufXZhciBwbz1lPT57bGV0IHQ7Zm9yKGxldCBuIGluIGUpKG49PT1gY2xhc3NgfHxuPT09YHN0eWxlYHx8cyhuKSkmJigodHx8PXt9KVtuXT1lW25dKTtyZXR1cm4gdH0sbW89KGUsdCk9PntsZXQgbj17fTtmb3IobGV0IHIgaW4gZSkoIWMocil8fCEoci5zbGljZSg5KWluIHQpKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59O2Z1bmN0aW9uIGhvKGUsdCxuKXtsZXR7cHJvcHM6cixjaGlsZHJlbjppLGNvbXBvbmVudDphfT1lLHtwcm9wczpvLGNoaWxkcmVuOnMscGF0Y2hGbGFnOmN9PXQsbD1hLmVtaXRzT3B0aW9ucztpZih0LmRpcnN8fHQudHJhbnNpdGlvbilyZXR1cm4hMDtpZihuJiZjPj0wKXtpZihjJjEwMjQpcmV0dXJuITA7aWYoYyYxNilyZXR1cm4gcj9nbyhyLG8sbCk6ISFvO2lmKGMmOCl7bGV0IGU9dC5keW5hbWljUHJvcHM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF07aWYoX28obyxyLG4pJiYhbG8obCxuKSlyZXR1cm4hMH19fWVsc2UgcmV0dXJuKGl8fHMpJiYoIXN8fCFzLiRzdGFibGUpPyEwOnI9PT1vPyExOnI/IW98fGdvKHIsbyxsKTohIW87cmV0dXJuITF9ZnVuY3Rpb24gZ28oZSx0LG4pe2xldCByPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgYT1yW2ldO2lmKF9vKHQsZSxhKSYmIWxvKG4sYSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gX28oZSx0LG4pe2xldCByPWVbbl0saT10W25dO3JldHVybiBuPT09YHN0eWxlYCYmeChyKSYmeChpKT8hRWUocixpKTpyIT09aX1mdW5jdGlvbiB2byh7dm5vZGU6ZSxwYXJlbnQ6dCxzdXNwZW5zZTpufSxyKXtmb3IoO3Q7KXtsZXQgbj10LnN1YlRyZWU7aWYobi5zdXNwZW5zZSYmbi5zdXNwZW5zZS5hY3RpdmVCcmFuY2g9PT1lJiYobi5zdXNwZW5zZS52bm9kZS5lbD1uLmVsPXIsZT1uKSxuPT09ZSkoZT10LnZub2RlKS5lbD1yLHQ9dC5wYXJlbnQ7ZWxzZSBicmVha31uJiZuLmFjdGl2ZUJyYW5jaD09PWUmJihuLnZub2RlLmVsPXIpfXZhciB5bz17fSxibz0oKT0+T2JqZWN0LmNyZWF0ZSh5bykseG89ZT0+T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09eW87ZnVuY3Rpb24gU28oZSx0LG4scj0hMSl7bGV0IGk9e30sYT1ibygpO2UucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLHdvKGUsdCxpLGEpO2ZvcihsZXQgdCBpbiBlLnByb3BzT3B0aW9uc1swXSl0IGluIGl8fChpW3RdPXZvaWQgMCk7ZS5wcm9wcz1uP3I/aTpRdChpKTplLnR5cGUucHJvcHM/aTphLGUuYXR0cnM9YX1mdW5jdGlvbiBDbyhlLHQsbixyKXtsZXR7cHJvcHM6aSxhdHRyczphLHZub2RlOntwYXRjaEZsYWc6b319PWUscz1BKGkpLFtjXT1lLnByb3BzT3B0aW9ucyxsPSExO2lmKChyfHxvPjApJiYhKG8mMTYpKXtpZihvJjgpe2xldCBuPWUudm5vZGUuZHluYW1pY1Byb3BzO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKXtsZXQgbz1uW3JdO2lmKGxvKGUuZW1pdHNPcHRpb25zLG8pKWNvbnRpbnVlO2xldCB1PXRbb107aWYoYyl7aWYoZihhLG8pKXUhPT1hW29dJiYoYVtvXT11LGw9ITApO2Vsc2V7bGV0IHQ9RShvKTtpW3RdPVRvKGMscyx0LHUsZSwhMSl9fWVsc2UgdSE9PWFbb10mJihhW29dPXUsbD0hMCl9fX1lbHNle3dvKGUsdCxpLGEpJiYobD0hMCk7bGV0IHI7Zm9yKGxldCBhIGluIHMpKCF0fHwhZih0LGEpJiYoKHI9b2UoYSkpPT09YXx8IWYodCxyKSkpJiYoYz9uJiYoblthXSE9PXZvaWQgMHx8bltyXSE9PXZvaWQgMCkmJihpW2FdPVRvKGMscyxhLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIGlbYV0pO2lmKGEhPT1zKWZvcihsZXQgZSBpbiBhKSghdHx8IWYodCxlKSkmJihkZWxldGUgYVtlXSxsPSEwKX1sJiZtdChlLmF0dHJzLGBzZXRgLGBgKX1mdW5jdGlvbiB3byhlLHQsbixpKXtsZXRbYSxvXT1lLnByb3BzT3B0aW9ucyxzPSExLGM7aWYodClmb3IobGV0IHIgaW4gdCl7aWYobmUocikpY29udGludWU7bGV0IGw9dFtyXSx1O2EmJmYoYSx1PUUocikpPyFvfHwhby5pbmNsdWRlcyh1KT9uW3VdPWw6KGN8fD17fSlbdV09bDpsbyhlLmVtaXRzT3B0aW9ucyxyKXx8KCEociBpbiBpKXx8bCE9PWlbcl0pJiYoaVtyXT1sLHM9ITApfWlmKG8pe2xldCB0PUEobiksaT1jfHxyO2ZvcihsZXQgcj0wO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdO25bc109VG8oYSx0LHMsaVtzXSxlLCFmKGkscykpfX1yZXR1cm4gc31mdW5jdGlvbiBUbyhlLHQsbixyLGksYSl7bGV0IG89ZVtuXTtpZihvIT1udWxsKXtsZXQgZT1mKG8sYGRlZmF1bHRgKTtpZihlJiZyPT09dm9pZCAwKXtsZXQgZT1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiFvLnNraXBGYWN0b3J5JiZ2KGUpKXtsZXR7cHJvcHNEZWZhdWx0czphfT1pO2lmKG4gaW4gYSlyPWFbbl07ZWxzZXtsZXQgbz1ScyhpKTtyPWFbbl09ZS5jYWxsKG51bGwsdCksbygpfX1lbHNlIHI9ZTtpLmNlJiZpLmNlLl9zZXRQcm9wKG4scil9b1swXSYmKGEmJiFlP3I9ITE6b1sxXSYmKHI9PT1gYHx8cj09PW9lKG4pKSYmKHI9ITApKX1yZXR1cm4gcn12YXIgRW89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRG8oZSx0LG49ITEpe2xldCBhPW4/RW86dC5wcm9wc0NhY2hlLG89YS5nZXQoZSk7aWYobylyZXR1cm4gbztsZXQgcz1lLnByb3BzLGM9e30sdT1bXSxkPSExO2lmKCF2KGUpKXtsZXQgcj1lPT57ZD0hMDtsZXRbbixyXT1EbyhlLHQsITApO2woYyxuKSxyJiZ1LnB1c2goLi4ucil9OyFuJiZ0Lm1peGlucy5sZW5ndGgmJnQubWl4aW5zLmZvckVhY2gociksZS5leHRlbmRzJiZyKGUuZXh0ZW5kcyksZS5taXhpbnMmJmUubWl4aW5zLmZvckVhY2gocil9aWYoIXMmJiFkKXJldHVybiB4KGUpJiZhLnNldChlLGkpLGk7aWYocChzKSlmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKyl7bGV0IHQ9RShzW2VdKTtPbyh0KSYmKGNbdF09cil9ZWxzZSBpZihzKWZvcihsZXQgZSBpbiBzKXtsZXQgdD1FKGUpO2lmKE9vKHQpKXtsZXQgbj1zW2VdLHI9Y1t0XT1wKG4pfHx2KG4pP3t0eXBlOm59Omwoe30sbiksaT1yLnR5cGUsYT0hMSxvPSEwO2lmKHAoaSkpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDsrK2Upe2xldCB0PWlbZV0sbj12KHQpJiZ0Lm5hbWU7aWYobj09PWBCb29sZWFuYCl7YT0hMDticmVha31uPT09YFN0cmluZ2AmJihvPSExKX1lbHNlIGE9dihpKSYmaS5uYW1lPT09YEJvb2xlYW5gO3JbMF09YSxyWzFdPW8sKGF8fGYocixgZGVmYXVsdGApKSYmdS5wdXNoKHQpfX1sZXQgbT1bYyx1XTtyZXR1cm4geChlKSYmYS5zZXQoZSxtKSxtfWZ1bmN0aW9uIE9vKGUpe3JldHVybiBlWzBdIT09YCRgJiYhbmUoZSl9dmFyIGtvPWU9PmU9PT1gX2B8fGU9PT1gX2N0eGB8fGU9PT1gJHN0YWJsZWAsQW89ZT0+cChlKT9lLm1hcChFcyk6W0VzKGUpXSxqbz0oZSx0LG4pPT57aWYodC5fbilyZXR1cm4gdDtsZXQgcj1OKCguLi5lKT0+QW8odCguLi5lKSksbik7cmV0dXJuIHIuX2M9ITEscn0sTW89KGUsdCxuKT0+e2xldCByPWUuX2N0eDtmb3IobGV0IG4gaW4gZSl7aWYoa28obikpY29udGludWU7bGV0IGk9ZVtuXTtpZih2KGkpKXRbbl09am8obixpLHIpO2Vsc2UgaWYoaSE9bnVsbCl7bGV0IGU9QW8oaSk7dFtuXT0oKT0+ZX19fSxObz0oZSx0KT0+e2xldCBuPUFvKHQpO2Uuc2xvdHMuZGVmYXVsdD0oKT0+bn0sUG89KGUsdCxuKT0+e2ZvcihsZXQgciBpbiB0KShufHwha28ocikpJiYoZVtyXT10W3JdKX0sRm89KGUsdCxuKT0+e2xldCByPWUuc2xvdHM9Ym8oKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7bGV0IGU9dC5fO2U/KFBvKHIsdCxuKSxuJiZ1ZShyLGBfYCxlLCEwKSk6TW8odCxyKX1lbHNlIHQmJk5vKGUsdCl9LElvPShlLHQsbik9PntsZXR7dm5vZGU6aSxzbG90czphfT1lLG89ITAscz1yO2lmKGkuc2hhcGVGbGFnJjMyKXtsZXQgZT10Ll87ZT9uJiZlPT09MT9vPSExOlBvKGEsdCxuKToobz0hdC4kc3RhYmxlLE1vKHQsYSkpLHM9dH1lbHNlIHQmJihObyhlLHQpLHM9e2RlZmF1bHQ6MX0pO2lmKG8pZm9yKGxldCBlIGluIGEpIWtvKGUpJiZzW2VdPT1udWxsJiZkZWxldGUgYVtlXX0sTG89YXM7ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIEJvKGUpfWZ1bmN0aW9uIHpvKGUpe3JldHVybiBCbyhlLHlpKX1mdW5jdGlvbiBCbyhlLHQpe2xldCBuPW1lKCk7bi5fX1ZVRV9fPSEwO2xldHtpbnNlcnQ6byxyZW1vdmU6cyxwYXRjaFByb3A6YyxjcmVhdGVFbGVtZW50OmwsY3JlYXRlVGV4dDp1LGNyZWF0ZUNvbW1lbnQ6ZCxzZXRUZXh0OmYsc2V0RWxlbWVudFRleHQ6cCxwYXJlbnROb2RlOm0sbmV4dFNpYmxpbmc6aCxzZXRTY29wZUlkOmc9YSxpbnNlcnRTdGF0aWNDb250ZW50Ol99PWUsdj0oZSx0LG4scj1udWxsLGk9bnVsbCxhPW51bGwsbz12b2lkIDAscz1udWxsLGM9ISF0LmR5bmFtaWNDaGlsZHJlbik9PntpZihlPT09dClyZXR1cm47ZSYmIXZzKGUsdCkmJihyPU8oZSksZ2UoZSxpLGEsITApLGU9bnVsbCksdC5wYXRjaEZsYWc9PT0tMiYmKGM9ITEsdC5keW5hbWljQ2hpbGRyZW49bnVsbCk7bGV0e3R5cGU6bCxyZWY6dSxzaGFwZUZsYWc6ZH09dDtzd2l0Y2gobCl7Y2FzZSBjczp5KGUsdCxuLHIpO2JyZWFrO2Nhc2UgbHM6YihlLHQsbixyKTticmVhaztjYXNlIHVzOmU/P3godCxuLHIsbyk7YnJlYWs7Y2FzZSBJOmFlKGUsdCxuLHIsaSxhLG8scyxjKTticmVhaztkZWZhdWx0OmQmMT93KGUsdCxuLHIsaSxhLG8scyxjKTpkJjY/b2UoZSx0LG4scixpLGEsbyxzLGMpOihkJjY0fHxkJjEyOCkmJmwucHJvY2VzcyhlLHQsbixyLGksYSxvLHMsYyxDZSl9dSE9bnVsbCYmaT9kaSh1LGUmJmUucmVmLGEsdHx8ZSwhdCk6dT09bnVsbCYmZSYmZS5yZWYhPW51bGwmJmRpKGUucmVmLG51bGwsYSxlLCEwKX0seT0oZSx0LG4scik9PntpZihlPT1udWxsKW8odC5lbD11KHQuY2hpbGRyZW4pLG4scik7ZWxzZXtsZXQgbj10LmVsPWUuZWw7dC5jaGlsZHJlbiE9PWUuY2hpbGRyZW4mJmYobix0LmNoaWxkcmVuKX19LGI9KGUsdCxuLHIpPT57ZT09bnVsbD9vKHQuZWw9ZCh0LmNoaWxkcmVufHxgYCksbixyKTp0LmVsPWUuZWx9LHg9KGUsdCxuLHIpPT57W2UuZWwsZS5hbmNob3JdPV8oZS5jaGlsZHJlbix0LG4scixlLmVsLGUuYW5jaG9yKX0sUz0oe2VsOmUsYW5jaG9yOnR9LG4scik9PntsZXQgaTtmb3IoO2UmJmUhPT10OylpPWgoZSksbyhlLG4sciksZT1pO28odCxuLHIpfSxDPSh7ZWw6ZSxhbmNob3I6dH0pPT57bGV0IG47Zm9yKDtlJiZlIT09dDspbj1oKGUpLHMoZSksZT1uO3ModCl9LHc9KGUsdCxuLHIsaSxhLG8scyxjKT0+e2lmKHQudHlwZT09PWBzdmdgP289YHN2Z2A6dC50eXBlPT09YG1hdGhgJiYobz1gbWF0aG1sYCksZT09bnVsbCllZSh0LG4scixpLGEsbyxzLGMpO2Vsc2V7bGV0IG49ZS5lbCYmZS5lbC5faXNWdWVDRT9lLmVsOm51bGw7dHJ5e24mJm4uX2JlZ2luUGF0Y2goKSxyZShlLHQsaSxhLG8scyxjKX1maW5hbGx5e24mJm4uX2VuZFBhdGNoKCl9fX0sZWU9KGUsdCxuLHIsaSxhLHMsdSk9PntsZXQgZCxmLHtwcm9wczptLHNoYXBlRmxhZzpoLHRyYW5zaXRpb246ZyxkaXJzOl99PWU7aWYoZD1lLmVsPWwoZS50eXBlLGEsbSYmbS5pcyxtKSxoJjg/cChkLGUuY2hpbGRyZW4pOmgmMTYmJlQoZS5jaGlsZHJlbixkLG51bGwscixpLFZvKGUsYSkscyx1KSxfJiZ2cihlLG51bGwscixgY3JlYXRlZGApLHRlKGQsZSxlLnNjb3BlSWQscyxyKSxtKXtmb3IobGV0IGUgaW4gbSllIT09YHZhbHVlYCYmIW5lKGUpJiZjKGQsZSxudWxsLG1bZV0sYSxyKTtgdmFsdWVgaW4gbSYmYyhkLGB2YWx1ZWAsbnVsbCxtLnZhbHVlLGEpLChmPW0ub25Wbm9kZUJlZm9yZU1vdW50KSYmQXMoZixyLGUpfV8mJnZyKGUsbnVsbCxyLGBiZWZvcmVNb3VudGApO2xldCB2PVVvKGksZyk7diYmZy5iZWZvcmVFbnRlcihkKSxvKGQsdCxuKSwoKGY9bSYmbS5vblZub2RlTW91bnRlZCl8fHZ8fF8pJiZMbygoKT0+e3RyeXtmJiZBcyhmLHIsZSksdiYmZy5lbnRlcihkKSxfJiZ2cihlLG51bGwscixgbW91bnRlZGApfWZpbmFsbHl7fX0saSl9LHRlPShlLHQsbixyLGkpPT57aWYobiYmZyhlLG4pLHIpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0KyspZyhlLHJbdF0pO2lmKGkpe2xldCBuPWkuc3ViVHJlZTtpZih0PT09bnx8WW8obi50eXBlKSYmKG4uc3NDb250ZW50PT09dHx8bi5zc0ZhbGxiYWNrPT09dCkpe2xldCB0PWkudm5vZGU7dGUoZSx0LHQuc2NvcGVJZCx0LnNsb3RTY29wZUlkcyxpLnBhcmVudCl9fX0sVD0oZSx0LG4scixpLGEsbyxzLGM9MCk9Pntmb3IobGV0IGw9YztsPGUubGVuZ3RoO2wrKyl7bGV0IGM9ZVtsXT1zP0RzKGVbbF0pOkVzKGVbbF0pO3YobnVsbCxjLHQsbixyLGksYSxvLHMpfX0scmU9KGUsdCxuLGksYSxvLHMpPT57bGV0IGw9dC5lbD1lLmVsLHtwYXRjaEZsYWc6dSxkeW5hbWljQ2hpbGRyZW46ZCxkaXJzOmZ9PXQ7dXw9ZS5wYXRjaEZsYWcmMTY7bGV0IG09ZS5wcm9wc3x8cixoPXQucHJvcHN8fHIsZztpZihuJiZIbyhuLCExKSwoZz1oLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZBcyhnLG4sdCxlKSxmJiZ2cih0LGUsbixgYmVmb3JlVXBkYXRlYCksbiYmSG8obiwhMCksZCYmKCFlLmR5bmFtaWNDaGlsZHJlbnx8ZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoIT09ZC5sZW5ndGgpJiYodT0wLHM9ITEsZD1udWxsKSwobS5pbm5lckhUTUwmJmguaW5uZXJIVE1MPT1udWxsfHxtLnRleHRDb250ZW50JiZoLnRleHRDb250ZW50PT1udWxsKSYmcChsLGBgKSxkP2llKGUuZHluYW1pY0NoaWxkcmVuLGQsbCxuLGksVm8odCxhKSxvKTpzfHxkZShlLHQsbCxudWxsLG4saSxWbyh0LGEpLG8sITEpLHU+MCl7aWYodSYxNilFKGwsbSxoLG4sYSk7ZWxzZSBpZih1JjImJm0uY2xhc3MhPT1oLmNsYXNzJiZjKGwsYGNsYXNzYCxudWxsLGguY2xhc3MsYSksdSY0JiZjKGwsYHN0eWxlYCxtLnN0eWxlLGguc3R5bGUsYSksdSY4KXtsZXQgZT10LmR5bmFtaWNQcm9wcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XSxpPW1bcl0sbz1oW3JdOyhvIT09aXx8cj09PWB2YWx1ZWApJiZjKGwscixpLG8sYSxuKX19dSYxJiZlLmNoaWxkcmVuIT09dC5jaGlsZHJlbiYmcChsLHQuY2hpbGRyZW4pfWVsc2UhcyYmZD09bnVsbCYmRShsLG0saCxuLGEpOygoZz1oLm9uVm5vZGVVcGRhdGVkKXx8ZikmJkxvKCgpPT57ZyYmQXMoZyxuLHQsZSksZiYmdnIodCxlLG4sYHVwZGF0ZWRgKX0saSl9LGllPShlLHQsbixyLGksYSxvKT0+e2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXtsZXQgYz1lW3NdLGw9dFtzXSx1PWMuZWwmJihjLnR5cGU9PT1JfHwhdnMoYyxsKXx8Yy5zaGFwZUZsYWcmMTk4KT9tKGMuZWwpOm47dihjLGwsdSxudWxsLHIsaSxhLG8sITApfX0sRT0oZSx0LG4saSxhKT0+e2lmKHQhPT1uKXtpZih0IT09cilmb3IobGV0IHIgaW4gdCkhbmUocikmJiEociBpbiBuKSYmYyhlLHIsdFtyXSxudWxsLGEsaSk7Zm9yKGxldCByIGluIG4pe2lmKG5lKHIpKWNvbnRpbnVlO2xldCBvPW5bcl0scz10W3JdO28hPT1zJiZyIT09YHZhbHVlYCYmYyhlLHIscyxvLGEsaSl9YHZhbHVlYGluIG4mJmMoZSxgdmFsdWVgLHQudmFsdWUsbi52YWx1ZSxhKX19LGFlPShlLHQsbixyLGksYSxzLGMsbCk9PntsZXQgZD10LmVsPWU/ZS5lbDp1KGBgKSxmPXQuYW5jaG9yPWU/ZS5hbmNob3I6dShgYCkse3BhdGNoRmxhZzpwLGR5bmFtaWNDaGlsZHJlbjptLHNsb3RTY29wZUlkczpofT10O2gmJihjPWM/Yy5jb25jYXQoaCk6aCksZT09bnVsbD8obyhkLG4sciksbyhmLG4sciksVCh0LmNoaWxkcmVufHxbXSxuLGYsaSxhLHMsYyxsKSk6cD4wJiZwJjY0JiZtJiZlLmR5bmFtaWNDaGlsZHJlbiYmZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoPT09bS5sZW5ndGg/KGllKGUuZHluYW1pY0NoaWxkcmVuLG0sbixpLGEscyxjKSwodC5rZXkhPW51bGx8fGkmJnQ9PT1pLnN1YlRyZWUpJiZXbyhlLHQsITApKTpkZShlLHQsbixmLGksYSxzLGMsbCl9LG9lPShlLHQsbixyLGksYSxvLHMsYyk9Pnt0LnNsb3RTY29wZUlkcz1zLGU9PW51bGw/dC5zaGFwZUZsYWcmNTEyP2kuY3R4LmFjdGl2YXRlKHQsbixyLG8sYyk6c2UodCxuLHIsaSxhLG8sYyk6Y2UoZSx0LGMpfSxzZT0oZSx0LG4scixpLGEsbyk9PntsZXQgcz1lLmNvbXBvbmVudD1OcyhlLHIsaSk7aWYoQmkoZSkmJihzLmN0eC5yZW5kZXJlcj1DZSksSHMocywhMSxvKSxzLmFzeW5jRGVwKXtpZihpJiZpLnJlZ2lzdGVyRGVwKHMsRCxvKSwhZS5lbCl7bGV0IHI9cy5zdWJUcmVlPVYobHMpO2IobnVsbCxyLHQsbiksZS5wbGFjZWhvbGRlcj1yLmVsfX1lbHNlIEQocyxlLHQsbixpLGEsbyl9LGNlPShlLHQsbik9PntsZXQgcj10LmNvbXBvbmVudD1lLmNvbXBvbmVudDtpZihobyhlLHQsbikpe2lmKHIuYXN5bmNEZXAmJiFyLmFzeW5jUmVzb2x2ZWQpe3VlKHIsdCxuKTtyZXR1cm59ci5uZXh0PXQsci51cGRhdGUoKX1lbHNlIHQuZWw9ZS5lbCxyLnZub2RlPXR9LEQ9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9KCk9PntpZihlLmlzTW91bnRlZCl7bGV0e25leHQ6dCxidTpuLHU6cixwYXJlbnQ6cyx2bm9kZTpjfT1lO3tsZXQgbj1LbyhlKTtpZihuKXt0JiYodC5lbD1jLmVsLHVlKGUsdCxvKSksbi5hc3luY0RlcC50aGVuKCgpPT57TG8oKCk9PntlLmlzVW5tb3VudGVkfHxsKCl9LGkpfSk7cmV0dXJufX1sZXQgdT10LGQ7SG8oZSwhMSksdD8odC5lbD1jLmVsLHVlKGUsdCxvKSk6dD1jLG4mJmxlKG4pLChkPXQucHJvcHMmJnQucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJkFzKGQscyx0LGMpLEhvKGUsITApO2xldCBmPXVvKGUpLHA9ZS5zdWJUcmVlO2Uuc3ViVHJlZT1mLHYocCxmLG0ocC5lbCksTyhwKSxlLGksYSksdC5lbD1mLmVsLHU9PT1udWxsJiZ2byhlLGYuZWwpLHImJkxvKHIsaSksKGQ9dC5wcm9wcyYmdC5wcm9wcy5vblZub2RlVXBkYXRlZCkmJkxvKCgpPT5BcyhkLHMsdCxjKSxpKX1lbHNle2xldCBvLHtlbDpzLHByb3BzOmN9PXQse2JtOmwsbTp1LHBhcmVudDpkLHJvb3Q6Zix0eXBlOnB9PWUsbT1MaSh0KTtpZihIbyhlLCExKSxsJiZsZShsKSwhbSYmKG89YyYmYy5vblZub2RlQmVmb3JlTW91bnQpJiZBcyhvLGQsdCksSG8oZSwhMCkscyYmVGUpe2xldCB0PSgpPT57ZS5zdWJUcmVlPXVvKGUpLFRlKHMsZS5zdWJUcmVlLGUsaSxudWxsKX07bSYmcC5fX2FzeW5jSHlkcmF0ZT9wLl9fYXN5bmNIeWRyYXRlKHMsZSx0KTp0KCl9ZWxzZXtmLmNlJiZmLmNlLl9oYXNTaGFkb3dSb290KCkmJmYuY2UuX2luamVjdENoaWxkU3R5bGUocCxlLnBhcmVudD9lLnBhcmVudC50eXBlOnZvaWQgMCk7bGV0IG89ZS5zdWJUcmVlPXVvKGUpO3YobnVsbCxvLG4scixlLGksYSksdC5lbD1vLmVsfWlmKHUmJkxvKHUsaSksIW0mJihvPWMmJmMub25Wbm9kZU1vdW50ZWQpKXtsZXQgZT10O0xvKCgpPT5BcyhvLGQsZSksaSl9KHQuc2hhcGVGbGFnJjI1Nnx8ZCYmTGkoZC52bm9kZSkmJmQudm5vZGUuc2hhcGVGbGFnJjI1NikmJmUuYSYmTG8oZS5hLGkpLGUuaXNNb3VudGVkPSEwLHQ9bj1yPW51bGx9fTtlLnNjb3BlLm9uKCk7bGV0IGM9ZS5lZmZlY3Q9bmV3IHplKHMpO2Uuc2NvcGUub2ZmKCk7bGV0IGw9ZS51cGRhdGU9Yy5ydW4uYmluZChjKSx1PWUuam9iPWMucnVuSWZEaXJ0eS5iaW5kKGMpO3UuaT1lLHUuaWQ9ZS51aWQsYy5zY2hlZHVsZXI9KCk9PnRyKHUpLEhvKGUsITApLGwoKX0sdWU9KGUsdCxuKT0+e3QuY29tcG9uZW50PWU7bGV0IHI9ZS52bm9kZS5wcm9wcztlLnZub2RlPXQsZS5uZXh0PW51bGwsQ28oZSx0LnByb3BzLHIsbiksSW8oZSx0LmNoaWxkcmVuLG4pLG50KCksaXIoZSkscnQoKX0sZGU9KGUsdCxuLHIsaSxhLG8scyxjPSExKT0+e2xldCBsPWUmJmUuY2hpbGRyZW4sdT1lP2Uuc2hhcGVGbGFnOjAsZD10LmNoaWxkcmVuLHtwYXRjaEZsYWc6ZixzaGFwZUZsYWc6bX09dDtpZihmPjApe2lmKGYmMTI4KXtwZShsLGQsbixyLGksYSxvLHMsYyk7cmV0dXJufWlmKGYmMjU2KXtmZShsLGQsbixyLGksYSxvLHMsYyk7cmV0dXJufX1tJjg/KHUmMTYmJmJlKGwsaSxhKSxkIT09bCYmcChuLGQpKTp1JjE2P20mMTY/cGUobCxkLG4scixpLGEsbyxzLGMpOmJlKGwsaSxhLCEwKToodSY4JiZwKG4sYGApLG0mMTYmJlQoZCxuLHIsaSxhLG8scyxjKSl9LGZlPShlLHQsbixyLGEsbyxzLGMsbCk9PntlfHw9aSx0fHw9aTtsZXQgdT1lLmxlbmd0aCxkPXQubGVuZ3RoLGY9TWF0aC5taW4odSxkKSxwO2ZvcihwPTA7cDxmO3ArKyl7bGV0IHI9dFtwXT1sP0RzKHRbcF0pOkVzKHRbcF0pO3YoZVtwXSxyLG4sbnVsbCxhLG8scyxjLGwpfXU+ZD9iZShlLGEsbywhMCwhMSxmKTpUKHQsbixyLGEsbyxzLGMsbCxmKX0scGU9KGUsdCxuLHIsYSxvLHMsYyxsKT0+e2xldCB1PTAsZD10Lmxlbmd0aCxmPWUubGVuZ3RoLTEscD1kLTE7Zm9yKDt1PD1mJiZ1PD1wOyl7bGV0IHI9ZVt1XSxpPXRbdV09bD9Ecyh0W3VdKTpFcyh0W3VdKTtpZih2cyhyLGkpKXYocixpLG4sbnVsbCxhLG8scyxjLGwpO2Vsc2UgYnJlYWs7dSsrfWZvcig7dTw9ZiYmdTw9cDspe2xldCByPWVbZl0saT10W3BdPWw/RHModFtwXSk6RXModFtwXSk7aWYodnMocixpKSl2KHIsaSxuLG51bGwsYSxvLHMsYyxsKTtlbHNlIGJyZWFrO2YtLSxwLS19aWYodT5mKXtpZih1PD1wKXtsZXQgZT1wKzEsaT1lPGQ/dFtlXS5lbDpyO2Zvcig7dTw9cDspdihudWxsLHRbdV09bD9Ecyh0W3VdKTpFcyh0W3VdKSxuLGksYSxvLHMsYyxsKSx1Kyt9fWVsc2UgaWYodT5wKWZvcig7dTw9ZjspZ2UoZVt1XSxhLG8sITApLHUrKztlbHNle2xldCBtPXUsaD11LGc9bmV3IE1hcDtmb3IodT1oO3U8PXA7dSsrKXtsZXQgZT10W3VdPWw/RHModFt1XSk6RXModFt1XSk7ZS5rZXkhPW51bGwmJmcuc2V0KGUua2V5LHUpfWxldCBfLHk9MCxiPXAtaCsxLHg9ITEsUz0wLEM9QXJyYXkoYik7Zm9yKHU9MDt1PGI7dSsrKUNbdV09MDtmb3IodT1tO3U8PWY7dSsrKXtsZXQgcj1lW3VdO2lmKHk+PWIpe2dlKHIsYSxvLCEwKTtjb250aW51ZX1sZXQgaTtpZihyLmtleSE9bnVsbClpPWcuZ2V0KHIua2V5KTtlbHNlIGZvcihfPWg7Xzw9cDtfKyspaWYoQ1tfLWhdPT09MCYmdnMocix0W19dKSl7aT1fO2JyZWFrfWk9PT12b2lkIDA/Z2UocixhLG8sITApOihDW2ktaF09dSsxLGk+PVM/Uz1pOng9ITAsdihyLHRbaV0sbixudWxsLGEsbyxzLGMsbCkseSsrKX1sZXQgdz14P0dvKEMpOmk7Zm9yKF89dy5sZW5ndGgtMSx1PWItMTt1Pj0wO3UtLSl7bGV0IGU9aCt1LGk9dFtlXSxmPXRbZSsxXSxwPWUrMTxkP2YuZWx8fEpvKGYpOnI7Q1t1XT09PTA/dihudWxsLGksbixwLGEsbyxzLGMsbCk6eCYmKF88MHx8dSE9PXdbX10/aGUoaSxuLHAsMik6Xy0tKX19fSxoZT0oZSx0LG4scixpPW51bGwpPT57bGV0e2VsOmEsdHlwZTpjLHRyYW5zaXRpb246bCxjaGlsZHJlbjp1LHNoYXBlRmxhZzpkfT1lO2lmKGQmNil7aGUoZS5jb21wb25lbnQuc3ViVHJlZSx0LG4scik7cmV0dXJufWlmKGQmMTI4KXtlLnN1c3BlbnNlLm1vdmUodCxuLHIpO3JldHVybn1pZihkJjY0KXtjLm1vdmUoZSx0LG4sQ2UpO3JldHVybn1pZihjPT09SSl7byhhLHQsbik7Zm9yKGxldCBlPTA7ZTx1Lmxlbmd0aDtlKyspaGUodVtlXSx0LG4scik7byhlLmFuY2hvcix0LG4pO3JldHVybn1pZihjPT09dXMpe1MoZSx0LG4pO3JldHVybn1pZihyIT09MiYmZCYxJiZsKXtpZihyPT09MClsLnBlcnNpc3RlZCYmIWFbR3JdP28oYSx0LG4pOihsLmJlZm9yZUVudGVyKGEpLG8oYSx0LG4pLExvKCgpPT5sLmVudGVyKGEpLGkpKTtlbHNle2xldHtsZWF2ZTpyLGRlbGF5TGVhdmU6aSxhZnRlckxlYXZlOmN9PWwsdT0oKT0+e2UuY3R4LmlzVW5tb3VudGVkP3MoYSk6byhhLHQsbil9LGQ9KCk9PntsZXQgZT1hLl9pc0xlYXZpbmd8fCEhYVtHcl07YS5faXNMZWF2aW5nJiZhW0dyXSghMCksbC5wZXJzaXN0ZWQmJiFlP3UoKTpyKGEsKCk9Pnt1KCksYyYmYygpfSl9O2k/aShhLHUsZCk6ZCgpfX1lbHNlIG8oYSx0LG4pfSxnZT0oZSx0LG4scj0hMSxpPSExKT0+e2xldHt0eXBlOmEscHJvcHM6byxyZWY6cyxjaGlsZHJlbjpjLGR5bmFtaWNDaGlsZHJlbjpsLHNoYXBlRmxhZzp1LHBhdGNoRmxhZzpkLGRpcnM6ZixjYWNoZUluZGV4OnAsbWVtbzptfT1lO2lmKGQ9PT0tMiYmKGk9ITEpLHMhPW51bGwmJihudCgpLGRpKHMsbnVsbCxuLGUsITApLHJ0KCkpLHAhPW51bGwmJih0LnJlbmRlckNhY2hlW3BdPXZvaWQgMCksdSYyNTYpe3QuY3R4LmRlYWN0aXZhdGUoZSk7cmV0dXJufWxldCBoPXUmMSYmZixnPSFMaShlKSxfO2lmKGcmJihfPW8mJm8ub25Wbm9kZUJlZm9yZVVubW91bnQpJiZBcyhfLHQsZSksdSY2KXllKGUuY29tcG9uZW50LG4scik7ZWxzZXtpZih1JjEyOCl7ZS5zdXNwZW5zZS51bm1vdW50KG4scik7cmV0dXJufWgmJnZyKGUsbnVsbCx0LGBiZWZvcmVVbm1vdW50YCksdSY2ND9lLnR5cGUucmVtb3ZlKGUsdCxuLENlLHIpOmwmJiFsLmhhc09uY2UmJihhIT09SXx8ZD4wJiZkJjY0KT9iZShsLHQsbiwhMSwhMCk6KGE9PT1JJiZkJjM4NHx8IWkmJnUmMTYpJiZiZShjLHQsbiksciYmX2UoZSl9bGV0IHY9bSE9bnVsbCYmcD09bnVsbDsoZyYmKF89byYmby5vblZub2RlVW5tb3VudGVkKXx8aHx8dikmJkxvKCgpPT57XyYmQXMoXyx0LGUpLGgmJnZyKGUsbnVsbCx0LGB1bm1vdW50ZWRgKSx2JiYoZS5lbD1udWxsKX0sbil9LF9lPWU9PntsZXR7dHlwZTp0LGVsOm4sYW5jaG9yOnIsdHJhbnNpdGlvbjppfT1lO2lmKHQ9PT1JKXt2ZShuLHIpO3JldHVybn1pZih0PT09dXMpe0MoZSk7cmV0dXJufWxldCBhPSgpPT57cyhuKSxpJiYhaS5wZXJzaXN0ZWQmJmkuYWZ0ZXJMZWF2ZSYmaS5hZnRlckxlYXZlKCl9O2lmKGUuc2hhcGVGbGFnJjEmJmkmJiFpLnBlcnNpc3RlZCl7bGV0e2xlYXZlOnQsZGVsYXlMZWF2ZTpyfT1pLG89KCk9PnQobixhKTtyP3IoZS5lbCxhLG8pOm8oKX1lbHNlIGEoKX0sdmU9KGUsdCk9PntsZXQgbjtmb3IoO2UhPT10OyluPWgoZSkscyhlKSxlPW47cyh0KX0seWU9KGUsdCxuKT0+e2xldHtidW06cixzY29wZTppLGpvYjphLHN1YlRyZWU6byx1bTpzLG06YyxhOmx9PWU7cW8oYykscW8obCksciYmbGUociksaS5zdG9wKCksYSYmKGEuZmxhZ3N8PTgsZ2UobyxlLHQsbikpLHMmJkxvKHMsdCksTG8oKCk9PntlLmlzVW5tb3VudGVkPSEwfSx0KX0sYmU9KGUsdCxuLHI9ITEsaT0hMSxhPTApPT57Zm9yKGxldCBvPWE7bzxlLmxlbmd0aDtvKyspZ2UoZVtvXSx0LG4scixpKX0sTz1lPT57aWYoZS5zaGFwZUZsYWcmNilyZXR1cm4gTyhlLmNvbXBvbmVudC5zdWJUcmVlKTtpZihlLnNoYXBlRmxhZyYxMjgpcmV0dXJuIGUuc3VzcGVuc2UubmV4dCgpO2xldCB0PWgoZS5hbmNob3J8fGUuZWwpLG49dCYmdFtNcl07cmV0dXJuIG4/aChuKTp0fSx4ZT0hMSxTZT0oZSx0LG4pPT57bGV0IHI7ZT09bnVsbD90Ll92bm9kZSYmKGdlKHQuX3Zub2RlLG51bGwsbnVsbCwhMCkscj10Ll92bm9kZS5jb21wb25lbnQpOnYodC5fdm5vZGV8fG51bGwsZSx0LG51bGwsbnVsbCxudWxsLG4pLHQuX3Zub2RlPWUseGV8fD0oeGU9ITAsaXIociksYXIoKSwhMSl9LENlPXtwOnYsdW06Z2UsbTpoZSxyOl9lLG10OnNlLG1jOlQscGM6ZGUscGJjOmllLG46TyxvOmV9LHdlLFRlO3JldHVybiB0JiYoW3dlLFRlXT10KENlKSkse3JlbmRlcjpTZSxoeWRyYXRlOndlLGNyZWF0ZUFwcDpubyhTZSx3ZSl9fWZ1bmN0aW9uIFZvKHt0eXBlOmUscHJvcHM6dH0sbil7cmV0dXJuIG49PT1gc3ZnYCYmZT09PWBmb3JlaWduT2JqZWN0YHx8bj09PWBtYXRobWxgJiZlPT09YGFubm90YXRpb24teG1sYCYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcyhgaHRtbGApP3ZvaWQgMDpufWZ1bmN0aW9uIEhvKHtlZmZlY3Q6ZSxqb2I6dH0sbil7bj8oZS5mbGFnc3w9MzIsdC5mbGFnc3w9NCk6KGUuZmxhZ3MmPS0zMyx0LmZsYWdzJj0tNSl9ZnVuY3Rpb24gVW8oZSx0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiZ0JiYhdC5wZXJzaXN0ZWR9ZnVuY3Rpb24gV28oZSx0LG49ITEpe2xldCByPWUuY2hpbGRyZW4saT10LmNoaWxkcmVuO2lmKHAocikmJnAoaSkpZm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe2xldCB0PXJbZV0sYT1pW2VdO2Euc2hhcGVGbGFnJjEmJiFhLmR5bmFtaWNDaGlsZHJlbiYmKChhLnBhdGNoRmxhZzw9MHx8YS5wYXRjaEZsYWc9PT0zMikmJihhPWlbZV09RHMoaVtlXSksYS5lbD10LmVsKSwhbiYmYS5wYXRjaEZsYWchPT0tMiYmV28odCxhKSksYS50eXBlPT09Y3MmJihhLnBhdGNoRmxhZz09PS0xJiYoYT1pW2VdPURzKGEpKSxhLmVsPXQuZWwpLGEudHlwZT09PWxzJiYhYS5lbCYmKGEuZWw9dC5lbCl9fWZ1bmN0aW9uIEdvKGUpe2xldCB0PWUuc2xpY2UoKSxuPVswXSxyLGksYSxvLHMsYz1lLmxlbmd0aDtmb3Iocj0wO3I8YztyKyspe2xldCBjPWVbcl07aWYoYyE9PTApe2lmKGk9bltuLmxlbmd0aC0xXSxlW2ldPGMpe3Rbcl09aSxuLnB1c2gocik7Y29udGludWV9Zm9yKGE9MCxvPW4ubGVuZ3RoLTE7YTxvOylzPWErbz4+MSxlW25bc11dPGM/YT1zKzE6bz1zO2M8ZVtuW2FdXSYmKGE+MCYmKHRbcl09blthLTFdKSxuW2FdPXIpfX1mb3IoYT1uLmxlbmd0aCxvPW5bYS0xXTthLS0+MDspblthXT1vLG89dFtvXTtyZXR1cm4gbn1mdW5jdGlvbiBLbyhlKXtsZXQgdD1lLnN1YlRyZWUuY29tcG9uZW50O2lmKHQpcmV0dXJuIHQuYXN5bmNEZXAmJiF0LmFzeW5jUmVzb2x2ZWQ/dDpLbyh0KX1mdW5jdGlvbiBxbyhlKXtpZihlKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uZmxhZ3N8PTh9ZnVuY3Rpb24gSm8oZSl7aWYoZS5wbGFjZWhvbGRlcilyZXR1cm4gZS5wbGFjZWhvbGRlcjtsZXQgdD1lLmNvbXBvbmVudDtyZXR1cm4gdD9Kbyh0LnN1YlRyZWUpOm51bGx9dmFyIFlvPWU9PmUuX19pc1N1c3BlbnNlLFhvPTAsWm89e25hbWU6YFN1c3BlbnNlYCxfX2lzU3VzcGVuc2U6ITAscHJvY2VzcyhlLHQsbixyLGksYSxvLHMsYyxsKXtpZihlPT1udWxsKSRvKHQsbixyLGksYSxvLHMsYyxsKTtlbHNle2lmKGEmJmEuZGVwcz4wJiYhZS5zdXNwZW5zZS5pc0luRmFsbGJhY2spe3Quc3VzcGVuc2U9ZS5zdXNwZW5zZSx0LnN1c3BlbnNlLnZub2RlPXQsdC5lbD1lLmVsO3JldHVybn1lcyhlLHQsbixyLGksbyxzLGMsbCl9fSxoeWRyYXRlOm5zLG5vcm1hbGl6ZTpyc307ZnVuY3Rpb24gUW8oZSx0KXtsZXQgbj1lLnByb3BzJiZlLnByb3BzW3RdO3YobikmJm4oKX1mdW5jdGlvbiAkbyhlLHQsbixyLGksYSxvLHMsYyl7bGV0e3A6bCxvOntjcmVhdGVFbGVtZW50OnV9fT1jLGQ9dShgZGl2YCksZj1lLnN1c3BlbnNlPXRzKGUsaSxyLHQsZCxuLGEsbyxzLGMpO2wobnVsbCxmLnBlbmRpbmdCcmFuY2g9ZS5zc0NvbnRlbnQsZCxudWxsLHIsZixhLG8pLGYuZGVwcz4wPyhRbyhlLGBvblBlbmRpbmdgKSxRbyhlLGBvbkZhbGxiYWNrYCksbChudWxsLGUuc3NGYWxsYmFjayx0LG4scixudWxsLGEsbyksb3MoZixlLnNzRmFsbGJhY2spKTpmLnJlc29sdmUoITEsITApfWZ1bmN0aW9uIGVzKGUsdCxuLHIsaSxhLG8scyx7cDpjLHVtOmwsbzp7Y3JlYXRlRWxlbWVudDp1fX0pe2xldCBkPXQuc3VzcGVuc2U9ZS5zdXNwZW5zZTtkLnZub2RlPXQsdC5lbD1lLmVsO2xldCBmPXQuc3NDb250ZW50LHA9dC5zc0ZhbGxiYWNrLHthY3RpdmVCcmFuY2g6bSxwZW5kaW5nQnJhbmNoOmgsaXNJbkZhbGxiYWNrOmcsaXNIeWRyYXRpbmc6X309ZDtpZihoKWQucGVuZGluZ0JyYW5jaD1mLHZzKGgsZik/KGMoaCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTA/ZC5yZXNvbHZlKCk6ZyYmKF98fChjKG0scCxuLHIsaSxudWxsLGEsbyxzKSxvcyhkLHApKSkpOihkLnBlbmRpbmdJZD1YbysrLF8/KGQuaXNIeWRyYXRpbmc9ITEsZC5hY3RpdmVCcmFuY2g9aCk6bChoLGksZCksZC5kZXBzPTAsZC5lZmZlY3RzLmxlbmd0aD0wLGQuaGlkZGVuQ29udGFpbmVyPXUoYGRpdmApLGc/KGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTA/ZC5yZXNvbHZlKCk6KGMobSxwLG4scixpLG51bGwsYSxvLHMpLG9zKGQscCkpKTptJiZ2cyhtLGYpPyhjKG0sZixuLHIsaSxkLGEsbyxzKSxkLnJlc29sdmUoITApKTooYyhudWxsLGYsZC5oaWRkZW5Db250YWluZXIsbnVsbCxpLGQsYSxvLHMpLGQuZGVwczw9MCYmZC5yZXNvbHZlKCkpKTtlbHNlIGlmKG0mJnZzKG0sZikpYyhtLGYsbixyLGksZCxhLG8scyksb3MoZCxmKTtlbHNlIGlmKFFvKHQsYG9uUGVuZGluZ2ApLGQucGVuZGluZ0JyYW5jaD1mLGQucGVuZGluZ0lkPWYuc2hhcGVGbGFnJjUxMj9mLmNvbXBvbmVudC5zdXNwZW5zZUlkOlhvKyssYyhudWxsLGYsZC5oaWRkZW5Db250YWluZXIsbnVsbCxpLGQsYSxvLHMpLGQuZGVwczw9MClkLnJlc29sdmUoKTtlbHNle2xldHt0aW1lb3V0OmUscGVuZGluZ0lkOnR9PWQ7ZT4wP3NldFRpbWVvdXQoKCk9PntkLnBlbmRpbmdJZD09PXQmJmQuZmFsbGJhY2socCl9LGUpOmU9PT0wJiZkLmZhbGxiYWNrKHApfX1mdW5jdGlvbiB0cyhlLHQsbixyLGksYSxvLHMsYyxsLHU9ITEpe2xldHtwOmQsbTpmLHVtOnAsbjptLG86e3BhcmVudE5vZGU6aCxyZW1vdmU6Z319PWwsXyx2PXNzKGUpO3YmJnQmJnQucGVuZGluZ0JyYW5jaCYmKF89dC5wZW5kaW5nSWQsdC5kZXBzKyspO2xldCB5PWUucHJvcHM/ZmUoZS5wcm9wcy50aW1lb3V0KTp2b2lkIDAsYj1hLHg9e3Zub2RlOmUscGFyZW50OnQscGFyZW50Q29tcG9uZW50Om4sbmFtZXNwYWNlOm8sY29udGFpbmVyOnIsaGlkZGVuQ29udGFpbmVyOmksZGVwczowLHBlbmRpbmdJZDpYbysrLHRpbWVvdXQ6dHlwZW9mIHk9PWBudW1iZXJgP3k6LTEsYWN0aXZlQnJhbmNoOm51bGwsaXNGYWxsYmFja01vdW50UGVuZGluZzohMSxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiF1LGlzSHlkcmF0aW5nOnUsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKGU9ITEsbj0hMSl7bGV0e3Zub2RlOnIsYWN0aXZlQnJhbmNoOmkscGVuZGluZ0JyYW5jaDpvLHBlbmRpbmdJZDpzLGVmZmVjdHM6YyxwYXJlbnRDb21wb25lbnQ6bCxjb250YWluZXI6dSxpc0luRmFsbGJhY2s6ZH09eCxnPSExO2lmKHguaXNIeWRyYXRpbmcpeC5pc0h5ZHJhdGluZz0hMTtlbHNlIGlmKCFlKXtnPWkmJm8udHJhbnNpdGlvbiYmby50cmFuc2l0aW9uLm1vZGU9PT1gb3V0LWluYDtsZXQgZT0hMTtnJiYoaS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9KCk9PntzPT09eC5wZW5kaW5nSWQmJihmKG8sdSxhPT09YiYmIWU/bShpKTphLDApLHJyKGMpLGQmJnIuc3NGYWxsYmFjayYmKHIuc3NGYWxsYmFjay5lbD1udWxsKSl9KSxpJiYheC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nJiYoaChpLmVsKT09PXUmJihhPW0oaSksZT0hMCkscChpLGwseCwhMCksIWcmJmQmJnIuc3NGYWxsYmFjayYmTG8oKCk9PnIuc3NGYWxsYmFjay5lbD1udWxsLHgpKSxnfHxmKG8sdSxhLDApfXguaXNGYWxsYmFja01vdW50UGVuZGluZz0hMSxvcyh4LG8pLHgucGVuZGluZ0JyYW5jaD1udWxsLHguaXNJbkZhbGxiYWNrPSExO2xldCB5PXgucGFyZW50LFM9ITE7Zm9yKDt5Oyl7aWYoeS5wZW5kaW5nQnJhbmNoKXtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl5LmVmZmVjdHMucHVzaChjW2VdKTtTPSEwO2JyZWFrfXk9eS5wYXJlbnR9IVMmJiFnJiZycihjKSx4LmVmZmVjdHM9W10sdiYmdCYmdC5wZW5kaW5nQnJhbmNoJiZfPT09dC5wZW5kaW5nSWQmJih0LmRlcHMtLSx0LmRlcHM9PT0wJiYhbiYmdC5yZXNvbHZlKCkpLFFvKHIsYG9uUmVzb2x2ZWApfSxmYWxsYmFjayhlKXtpZigheC5wZW5kaW5nQnJhbmNoKXJldHVybjtsZXR7dm5vZGU6dCxhY3RpdmVCcmFuY2g6bixwYXJlbnRDb21wb25lbnQ6cixjb250YWluZXI6aSxuYW1lc3BhY2U6YX09eDtRbyh0LGBvbkZhbGxiYWNrYCk7bGV0IG89bShuKSxsPSgpPT57eC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nPSExLHguaXNJbkZhbGxiYWNrJiYoZChudWxsLGUsaSxvLHIsbnVsbCxhLHMsYyksb3MoeCxlKSl9LHU9ZS50cmFuc2l0aW9uJiZlLnRyYW5zaXRpb24ubW9kZT09PWBvdXQtaW5gO3UmJih4LmlzRmFsbGJhY2tNb3VudFBlbmRpbmc9ITAsbi50cmFuc2l0aW9uLmFmdGVyTGVhdmU9bCkseC5pc0luRmFsbGJhY2s9ITAscChuLHIsbnVsbCwhMCksdXx8bCgpfSxtb3ZlKGUsdCxuKXt4LmFjdGl2ZUJyYW5jaCYmZih4LmFjdGl2ZUJyYW5jaCxlLHQsbikseC5jb250YWluZXI9ZX0sbmV4dCgpe3JldHVybiB4LmFjdGl2ZUJyYW5jaCYmbSh4LmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKGUsdCxuKXtsZXQgcj0hIXgucGVuZGluZ0JyYW5jaDtyJiZ4LmRlcHMrKztsZXQgaT1lLnZub2RlLmVsO2UuYXN5bmNEZXAuY2F0Y2godD0+e1duKHQsZSwwKX0pLnRoZW4oYT0+e2lmKGUuaXNVbm1vdW50ZWR8fHguaXNVbm1vdW50ZWR8fHgucGVuZGluZ0lkIT09ZS5zdXNwZW5zZUlkKXJldHVybjt6cygpLGUuYXN5bmNSZXNvbHZlZD0hMDtsZXR7dm5vZGU6c309ZTtXcyhlLGEsITEpLGkmJihzLmVsPWkpO2xldCBjPSFpJiZlLnN1YlRyZWUuZWw7dChlLHMsaChpfHxlLnN1YlRyZWUuZWwpLGk/bnVsbDptKGUuc3ViVHJlZSkseCxvLG4pLGMmJihzLnBsYWNlaG9sZGVyPW51bGwsZyhjKSksdm8oZSxzLmVsKSxyJiYtLXguZGVwcz09PTAmJngucmVzb2x2ZSgpfSl9LHVubW91bnQoZSx0KXt4LmlzVW5tb3VudGVkPSEwLHguYWN0aXZlQnJhbmNoJiZwKHguYWN0aXZlQnJhbmNoLG4sZSx0KSx4LnBlbmRpbmdCcmFuY2gmJnAoeC5wZW5kaW5nQnJhbmNoLG4sZSx0KX19O3JldHVybiB4fWZ1bmN0aW9uIG5zKGUsdCxuLHIsaSxhLG8scyxjKXtsZXQgbD10LnN1c3BlbnNlPXRzKHQscixuLGUucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSxudWxsLGksYSxvLHMsITApLHU9YyhlLGwucGVuZGluZ0JyYW5jaD10LnNzQ29udGVudCxuLGwsYSxvKTtyZXR1cm4gbC5kZXBzPT09MCYmbC5yZXNvbHZlKCExLCEwKSx1fWZ1bmN0aW9uIHJzKGUpe2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lLHI9dCYzMjtlLnNzQ29udGVudD1pcyhyP24uZGVmYXVsdDpuKSxlLnNzRmFsbGJhY2s9cj9pcyhuLmZhbGxiYWNrKTpWKGxzKX1mdW5jdGlvbiBpcyhlKXtsZXQgdDtpZih2KGUpKXtsZXQgbj1tcyYmZS5fYztuJiYoZS5fZD0hMSxMKCkpLGU9ZSgpLG4mJihlLl9kPSEwLHQ9ZnMscHMoKSl9cmV0dXJuIHAoZSkmJihlPWZvKGUpKSxlPUVzKGUpLHQmJiFlLmR5bmFtaWNDaGlsZHJlbiYmKGUuZHluYW1pY0NoaWxkcmVuPXQuZmlsdGVyKHQ9PnQhPT1lKSksZX1mdW5jdGlvbiBhcyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9wKGUpP3QuZWZmZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOnJyKGUpfWZ1bmN0aW9uIG9zKGUsdCl7ZS5hY3RpdmVCcmFuY2g9dDtsZXR7dm5vZGU6bixwYXJlbnRDb21wb25lbnQ6cn09ZSxpPXQuZWw7Zm9yKDshaSYmdC5jb21wb25lbnQ7KXQ9dC5jb21wb25lbnQuc3ViVHJlZSxpPXQuZWw7bi5lbD1pLHImJnIuc3ViVHJlZT09PW4mJihyLnZub2RlLmVsPWksdm8ocixpKSl9ZnVuY3Rpb24gc3MoZSl7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5zdXNwZW5zaWJsZTtyZXR1cm4gdCE9bnVsbCYmdCE9PSExfXZhciBJPVN5bWJvbC5mb3IoYHYtZmd0YCksY3M9U3ltYm9sLmZvcihgdi10eHRgKSxscz1TeW1ib2wuZm9yKGB2LWNtdGApLHVzPVN5bWJvbC5mb3IoYHYtc3RjYCksZHM9W10sZnM9bnVsbDtmdW5jdGlvbiBMKGU9ITEpe2RzLnB1c2goZnM9ZT9udWxsOltdKX1mdW5jdGlvbiBwcygpe2RzLnBvcCgpLGZzPWRzW2RzLmxlbmd0aC0xXXx8bnVsbH12YXIgbXM9MTtmdW5jdGlvbiBocyhlLHQ9ITEpe21zKz1lLGU8MCYmZnMmJnQmJihmcy5oYXNPbmNlPSEwKX1mdW5jdGlvbiBncyhlKXtyZXR1cm4gZS5keW5hbWljQ2hpbGRyZW49bXM+MD9mc3x8aTpudWxsLHBzKCksbXM+MCYmZnMmJmZzLnB1c2goZSksZX1mdW5jdGlvbiBSKGUsdCxuLHIsaSxhKXtyZXR1cm4gZ3MoQihlLHQsbixyLGksYSwhMCkpfWZ1bmN0aW9uIHooZSx0LG4scixpKXtyZXR1cm4gZ3MoVihlLHQsbixyLGksITApKX1mdW5jdGlvbiBfcyhlKXtyZXR1cm4gZT9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gdnMoZSx0KXtyZXR1cm4gZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fWZ1bmN0aW9uIHlzKGUpe312YXIgYnM9KHtrZXk6ZX0pPT5lPz9udWxsLHhzPSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwZW9mIGU9PWBudW1iZXJgJiYoZT1gYCtlKSxlPT1udWxsP251bGw6eShlKXx8dW4oZSl8fHYoZSk/e2k6ZHIscjplLGs6dCxmOiEhbn06ZSk7ZnVuY3Rpb24gQihlLHQ9bnVsbCxuPW51bGwscj0wLGk9bnVsbCxhPWU9PT1JPzA6MSxvPSExLHM9ITEpe2xldCBjPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmUscHJvcHM6dCxrZXk6dCYmYnModCkscmVmOnQmJnhzKHQpLHNjb3BlSWQ6ZnIsc2xvdFNjb3BlSWRzOm51bGwsY2hpbGRyZW46bixjb21wb25lbnQ6bnVsbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdGlvbjpudWxsLGVsOm51bGwsYW5jaG9yOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0U3RhcnQ6bnVsbCx0YXJnZXRBbmNob3I6bnVsbCxzdGF0aWNDb3VudDowLHNoYXBlRmxhZzphLHBhdGNoRmxhZzpyLGR5bmFtaWNQcm9wczppLGR5bmFtaWNDaGlsZHJlbjpudWxsLGFwcENvbnRleHQ6bnVsbCxjdHg6ZHJ9O3JldHVybiBzPyhPcyhjLG4pLGEmMTI4JiZlLm5vcm1hbGl6ZShjKSk6biYmKGMuc2hhcGVGbGFnfD15KG4pPzg6MTYpLG1zPjAmJiFvJiZmcyYmKGMucGF0Y2hGbGFnPjB8fGEmNikmJmMucGF0Y2hGbGFnIT09MzImJmZzLnB1c2goYyksY312YXIgVj1TcztmdW5jdGlvbiBTcyhlLHQ9bnVsbCxuPW51bGwscj0wLGk9bnVsbCxhPSExKXtpZigoIWV8fGU9PT11YSkmJihlPWxzKSxfcyhlKSl7bGV0IHI9d3MoZSx0LCEwKTtyZXR1cm4gbiYmT3MocixuKSxtcz4wJiYhYSYmZnMmJihyLnNoYXBlRmxhZyY2P2ZzW2ZzLmluZGV4T2YoZSldPXI6ZnMucHVzaChyKSksci5wYXRjaEZsYWc9LTIscn1pZihlYyhlKSYmKGU9ZS5fX3ZjY09wdHMpLHQpe3Q9Q3ModCk7bGV0e2NsYXNzOmUsc3R5bGU6bn09dDtlJiYheShlKSYmKHQuY2xhc3M9TyhlKSkseChuKSYmKG9uKG4pJiYhcChuKSYmKG49bCh7fSxuKSksdC5zdHlsZT1nZShuKSl9bGV0IG89eShlKT8xOllvKGUpPzEyODpOcihlKT82NDp4KGUpPzQ6dihlKT8yOjA7cmV0dXJuIEIoZSx0LG4scixpLG8sYSwhMCl9ZnVuY3Rpb24gQ3MoZSl7cmV0dXJuIGU/b24oZSl8fHhvKGUpP2woe30sZSk6ZTpudWxsfWZ1bmN0aW9uIHdzKGUsdCxuPSExLHI9ITEpe2xldHtwcm9wczppLHJlZjphLHBhdGNoRmxhZzpvLGNoaWxkcmVuOnMsdHJhbnNpdGlvbjpjfT1lLGw9dD9rcyhpfHx7fSx0KTppLHU9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZS50eXBlLHByb3BzOmwsa2V5OmwmJmJzKGwpLHJlZjp0JiZ0LnJlZj9uJiZhP3AoYSk/YS5jb25jYXQoeHModCkpOlthLHhzKHQpXTp4cyh0KTphLHNjb3BlSWQ6ZS5zY29wZUlkLHNsb3RTY29wZUlkczplLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpzLHRhcmdldDplLnRhcmdldCx0YXJnZXRTdGFydDplLnRhcmdldFN0YXJ0LHRhcmdldEFuY2hvcjplLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDplLnN0YXRpY0NvdW50LHNoYXBlRmxhZzplLnNoYXBlRmxhZyxwYXRjaEZsYWc6dCYmZS50eXBlIT09ST9vPT09LTE/MTY6b3wxNjpvLGR5bmFtaWNQcm9wczplLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46ZS5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDplLmFwcENvbnRleHQsZGlyczplLmRpcnMsdHJhbnNpdGlvbjpjLGNvbXBvbmVudDplLmNvbXBvbmVudCxzdXNwZW5zZTplLnN1c3BlbnNlLHNzQ29udGVudDplLnNzQ29udGVudCYmd3MoZS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6ZS5zc0ZhbGxiYWNrJiZ3cyhlLnNzRmFsbGJhY2spLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsZWw6ZS5lbCxhbmNob3I6ZS5hbmNob3IsY3R4OmUuY3R4LGNlOmUuY2V9O3JldHVybiBjJiZyJiZpaSh1LGMuY2xvbmUodSkpLHV9ZnVuY3Rpb24gSChlPWAgYCx0PTApe3JldHVybiBWKGNzLG51bGwsZSx0KX1mdW5jdGlvbiBUcyhlLHQpe2xldCBuPVYodXMsbnVsbCxlKTtyZXR1cm4gbi5zdGF0aWNDb3VudD10LG59ZnVuY3Rpb24gVShlPWBgLHQ9ITEpe3JldHVybiB0PyhMKCkseihscyxudWxsLGUpKTpWKGxzLG51bGwsZSl9ZnVuY3Rpb24gRXMoZSl7cmV0dXJuIGU9PW51bGx8fHR5cGVvZiBlPT1gYm9vbGVhbmA/Vihscyk6cChlKT9WKEksbnVsbCxlLnNsaWNlKCkpOl9zKGUpP0RzKGUpOlYoY3MsbnVsbCxTdHJpbmcoZSkpfWZ1bmN0aW9uIERzKGUpe3JldHVybiBlLmVsPT09bnVsbCYmZS5wYXRjaEZsYWchPT0tMXx8ZS5tZW1vP2U6d3MoZSl9ZnVuY3Rpb24gT3MoZSx0KXtsZXQgbj0wLHtzaGFwZUZsYWc6cn09ZTtpZih0PT1udWxsKXQ9bnVsbDtlbHNlIGlmKHAodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PT1gb2JqZWN0YCl7aWYociY2NSl7bGV0IG49dC5kZWZhdWx0O24mJihuLl9jJiYobi5fZD0hMSksT3MoZSxuKCkpLG4uX2MmJihuLl9kPSEwKSk7cmV0dXJufXtuPTMyO2xldCByPXQuXzshciYmIXhvKHQpP3QuX2N0eD1kcjpyPT09MyYmZHImJihkci5zbG90cy5fPT09MT90Ll89MToodC5fPTIsZS5wYXRjaEZsYWd8PTEwMjQpKX19ZWxzZSBpZih2KHQpKXtpZihyJjY1KXtPcyhlLHtkZWZhdWx0OnR9KTtyZXR1cm59dD17ZGVmYXVsdDp0LF9jdHg6ZHJ9LG49MzJ9ZWxzZSB0PVN0cmluZyh0KSxyJjY0PyhuPTE2LHQ9W0godCldKTpuPTg7ZS5jaGlsZHJlbj10LGUuc2hhcGVGbGFnfD1ufWZ1bmN0aW9uIGtzKC4uLmUpe2xldCB0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO2ZvcihsZXQgZSBpbiByKWlmKGU9PT1gY2xhc3NgKXQuY2xhc3MhPT1yLmNsYXNzJiYodC5jbGFzcz1PKFt0LmNsYXNzLHIuY2xhc3NdKSk7ZWxzZSBpZihlPT09YHN0eWxlYCl0LnN0eWxlPWdlKFt0LnN0eWxlLHIuc3R5bGVdKTtlbHNlIGlmKHMoZSkpe2xldCBuPXRbZV0saT1yW2VdO2kmJm4hPT1pJiYhKHAobikmJm4uaW5jbHVkZXMoaSkpP3RbZV09bj9bXS5jb25jYXQobixpKTppOmk9PW51bGwmJm49PW51bGwmJiFjKGUpJiYodFtlXT1pKX1lbHNlIGUhPT1gYCYmKHRbZV09cltlXSl9cmV0dXJuIHR9ZnVuY3Rpb24gQXMoZSx0LG4scj1udWxsKXtVbihlLHQsNyxbbixyXSl9dmFyIGpzPWVvKCksTXM9MDtmdW5jdGlvbiBOcyhlLHQsbil7bGV0IGk9ZS50eXBlLGE9KHQ/dC5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fGpzLG89e3VpZDpNcysrLHZub2RlOmUsdHlwZTppLHBhcmVudDp0LGFwcENvbnRleHQ6YSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqb2I6bnVsbCxzY29wZTpuZXcgTmUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6dD90LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoYS5wcm92aWRlcyksaWRzOnQ/dC5pZHM6W2BgLDAsMF0sYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpEbyhpLGEpLGVtaXRzT3B0aW9uczpjbyhpLGEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpyLGluaGVyaXRBdHRyczppLmluaGVyaXRBdHRycyxjdHg6cixkYXRhOnIscHJvcHM6cixhdHRyczpyLHNsb3RzOnIscmVmczpyLHNldHVwU3RhdGU6cixzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpuLHN1c3BlbnNlSWQ6bj9uLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIG8uY3R4PXtfOm99LG8ucm9vdD10P3Qucm9vdDpvLG8uZW1pdD1vby5iaW5kKG51bGwsbyksZS5jZSYmZS5jZShvKSxvfXZhciBQcz1udWxsLEZzPSgpPT5Qc3x8ZHIsSXMsTHM7e2xldCBlPW1lKCksdD0odCxuKT0+e2xldCByO3JldHVybihyPWVbdF0pfHwocj1lW3RdPVtdKSxyLnB1c2gobiksZT0+e3IubGVuZ3RoPjE/ci5mb3JFYWNoKHQ9PnQoZSkpOnJbMF0oZSl9fTtJcz10KGBfX1ZVRV9JTlNUQU5DRV9TRVRURVJTX19gLGU9PlBzPWUpLExzPXQoYF9fVlVFX1NTUl9TRVRURVJTX19gLGU9PlZzPWUpfXZhciBScz1lPT57bGV0IHQ9UHM7cmV0dXJuIElzKGUpLGUuc2NvcGUub24oKSwoKT0+e2Uuc2NvcGUub2ZmKCksSXModCl9fSx6cz0oKT0+e1BzJiZQcy5zY29wZS5vZmYoKSxJcyhudWxsKX07ZnVuY3Rpb24gQnMoZSl7cmV0dXJuIGUudm5vZGUuc2hhcGVGbGFnJjR9dmFyIFZzPSExO2Z1bmN0aW9uIEhzKGUsdD0hMSxuPSExKXt0JiZMcyh0KTtsZXR7cHJvcHM6cixjaGlsZHJlbjppfT1lLnZub2RlLGE9QnMoZSk7U28oZSxyLGEsdCksRm8oZSxpLG58fHQpO2xldCBvPWE/VXMoZSx0KTp2b2lkIDA7cmV0dXJuIHQmJkxzKCExKSxvfWZ1bmN0aW9uIFVzKGUsdCl7bGV0IG49ZS50eXBlO2UuYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxlLnByb3h5PW5ldyBQcm94eShlLmN0eCxTYSk7bGV0e3NldHVwOnJ9PW47aWYocil7bnQoKTtsZXQgbj1lLnNldHVwQ29udGV4dD1yLmxlbmd0aD4xP1pzKGUpOm51bGwsaT1ScyhlKSxhPUhuKHIsZSwwLFtlLnByb3BzLG5dKSxvPVMoYSk7aWYocnQoKSxpKCksKG98fGUuc3ApJiYhTGkoZSkmJnNpKGUpLG8pe2lmKGEudGhlbih6cyx6cyksdClyZXR1cm4gYS50aGVuKG49PntMcyghMCk7dHJ5e1dzKGUsbix0KX1maW5hbGx5e0xzKCExKX19KS5jYXRjaCh0PT57V24odCxlLDApfSk7ZS5hc3luY0RlcD1hfWVsc2UgV3MoZSxhLHQpfWVsc2UgWXMoZSx0KX1mdW5jdGlvbiBXcyhlLHQsbil7dih0KT9lLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/ZS5zc3JSZW5kZXI9dDplLnJlbmRlcj10OngodCkmJihlLnNldHVwU3RhdGU9X24odCkpLFlzKGUsbil9dmFyIEdzLEtzO2Z1bmN0aW9uIHFzKGUpe0dzPWUsS3M9ZT0+e2UucmVuZGVyLl9yYyYmKGUud2l0aFByb3h5PW5ldyBQcm94eShlLmN0eCxDYSkpfX12YXIgSnM9KCk9PiFHcztmdW5jdGlvbiBZcyhlLHQsbil7bGV0IHI9ZS50eXBlO2lmKCFlLnJlbmRlcil7aWYoIXQmJkdzJiYhci5yZW5kZXIpe2xldCB0PXIudGVtcGxhdGV8fFdhKGUpLnRlbXBsYXRlO2lmKHQpe2xldHtpc0N1c3RvbUVsZW1lbnQ6bixjb21waWxlck9wdGlvbnM6aX09ZS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczphLGNvbXBpbGVyT3B0aW9uczpvfT1yLHM9bChsKHtpc0N1c3RvbUVsZW1lbnQ6bixkZWxpbWl0ZXJzOmF9LGkpLG8pO3IucmVuZGVyPUdzKHQscyl9fWUucmVuZGVyPXIucmVuZGVyfHxhLEtzJiZLcyhlKX17bGV0IHQ9UnMoZSk7bnQoKTt0cnl7QmEoZSl9ZmluYWxseXtydCgpLHQoKX19fXZhciBYcz17Z2V0KGUsdCl7cmV0dXJuIHB0KGUsYGdldGAsYGApLGVbdF19fTtmdW5jdGlvbiBacyhlKXtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsWHMpLHNsb3RzOmUuc2xvdHMsZW1pdDplLmVtaXQsZXhwb3NlOnQ9PntlLmV4cG9zZWQ9dHx8e319fX1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZS5leHBvc2VkP2UuZXhwb3NlUHJveHl8fD1uZXcgUHJveHkoX24oc24oZS5leHBvc2VkKSkse2dldCh0LG4pe2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIGJhKXJldHVybiBiYVtuXShlKX0saGFzKGUsdCl7cmV0dXJuIHQgaW4gZXx8dCBpbiBiYX19KTplLnByb3h5fWZ1bmN0aW9uICRzKGUsdD0hMCl7cmV0dXJuIHYoZSk/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOmUubmFtZXx8dCYmZS5fX25hbWV9ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIHYoZSkmJmBfX3ZjY09wdHNgaW4gZX12YXIgVz0oZSx0KT0+RW4oZSx0LFZzKTtmdW5jdGlvbiBHKGUsdCxuKXt0cnl7aHMoLTEpO2xldCByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI9PT0yP3godCkmJiFwKHQpP19zKHQpP1YoZSxudWxsLFt0XSk6VihlLHQpOlYoZSxudWxsLHQpOihyPjM/bj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik6cj09PTMmJl9zKG4pJiYobj1bbl0pLFYoZSx0LG4pKX1maW5hbGx5e2hzKDEpfX1mdW5jdGlvbiB0Yygpe31mdW5jdGlvbiBuYyhlLHQsbixyKXtsZXQgaT1uW3JdO2lmKGkmJnJjKGksZSkpcmV0dXJuIGk7bGV0IGE9dCgpO3JldHVybiBhLm1lbW89ZS5zbGljZSgpLGEuY2FjaGVJbmRleD1yLG5bcl09YX1mdW5jdGlvbiByYyhlLHQpe2xldCBuPWUubWVtbztpZihuLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYoRChuW2VdLHRbZV0pKXJldHVybiExO3JldHVybiBtcz4wJiZmcyYmZnMucHVzaChlKSwhMH12YXIgaWM9YDMuNS40MWAsYWM9YSxvYz1WbixzYz1jcixjYz11cixsYz17Y3JlYXRlQ29tcG9uZW50SW5zdGFuY2U6TnMsc2V0dXBDb21wb25lbnQ6SHMscmVuZGVyQ29tcG9uZW50Um9vdDp1byxzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U6cHIsaXNWTm9kZTpfcyxub3JtYWxpemVWTm9kZTpFcyxnZXRDb21wb25lbnRQdWJsaWNJbnN0YW5jZTpRcyxlbnN1cmVWYWxpZFZOb2RlOl9hLHB1c2hXYXJuaW5nQ29udGV4dDpMbixwb3BXYXJuaW5nQ29udGV4dDpSbn0sdWM9dm9pZCAwLGRjPXR5cGVvZiB3aW5kb3c8YHVgJiZ3aW5kb3cudHJ1c3RlZFR5cGVzO2lmKGRjKXRyeXt1Yz1kYy5jcmVhdGVQb2xpY3koYHZ1ZWAse2NyZWF0ZUhUTUw6ZT0+ZX0pfWNhdGNoe312YXIgZmM9dWM/ZT0+dWMuY3JlYXRlSFRNTChlKTplPT5lLHBjPWBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsbWM9YGh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxgLGhjPXR5cGVvZiBkb2N1bWVudDxgdWA/ZG9jdW1lbnQ6bnVsbCxnYz1oYyYmaGMuY3JlYXRlRWxlbWVudChgdGVtcGxhdGVgKSxfYz17aW5zZXJ0OihlLHQsbik9Pnt0Lmluc2VydEJlZm9yZShlLG58fG51bGwpfSxyZW1vdmU6ZT0+e2xldCB0PWUucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKGUpfSxjcmVhdGVFbGVtZW50OihlLHQsbixyKT0+e2xldCBpPXQ9PT1gc3ZnYD9oYy5jcmVhdGVFbGVtZW50TlMocGMsZSk6dD09PWBtYXRobWxgP2hjLmNyZWF0ZUVsZW1lbnROUyhtYyxlKTpuP2hjLmNyZWF0ZUVsZW1lbnQoZSx7aXM6bn0pOmhjLmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIGU9PT1gc2VsZWN0YCYmciYmci5tdWx0aXBsZSE9bnVsbCYmaS5zZXRBdHRyaWJ1dGUoYG11bHRpcGxlYCxyLm11bHRpcGxlKSxpfSxjcmVhdGVUZXh0OmU9PmhjLmNyZWF0ZVRleHROb2RlKGUpLGNyZWF0ZUNvbW1lbnQ6ZT0+aGMuY3JlYXRlQ29tbWVudChlKSxzZXRUZXh0OihlLHQpPT57ZS5ub2RlVmFsdWU9dH0sc2V0RWxlbWVudFRleHQ6KGUsdCk9PntlLnRleHRDb250ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmU9PmUubmV4dFNpYmxpbmcscXVlcnlTZWxlY3RvcjplPT5oYy5xdWVyeVNlbGVjdG9yKGUpLHNldFNjb3BlSWQoZSx0KXtlLnNldEF0dHJpYnV0ZSh0LGBgKX0saW5zZXJ0U3RhdGljQ29udGVudChlLHQsbixyLGksYSl7bGV0IG89bj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZDtpZihpJiYoaT09PWF8fGkubmV4dFNpYmxpbmcpKWZvcig7dC5pbnNlcnRCZWZvcmUoaS5jbG9uZU5vZGUoITApLG4pLCEoaT09PWF8fCEoaT1pLm5leHRTaWJsaW5nKSk7KTtlbHNle2djLmlubmVySFRNTD1mYyhyPT09YHN2Z2A/YDxzdmc+JHtlfTwvc3ZnPmA6cj09PWBtYXRobWxgP2A8bWF0aD4ke2V9PC9tYXRoPmA6ZSk7bGV0IGk9Z2MuY29udGVudDtpZihyPT09YHN2Z2B8fHI9PT1gbWF0aG1sYCl7bGV0IGU9aS5maXJzdENoaWxkO2Zvcig7ZS5maXJzdENoaWxkOylpLmFwcGVuZENoaWxkKGUuZmlyc3RDaGlsZCk7aS5yZW1vdmVDaGlsZChlKX10Lmluc2VydEJlZm9yZShpLG4pfXJldHVybltvP28ubmV4dFNpYmxpbmc6dC5maXJzdENoaWxkLG4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGRdfX0sdmM9YHRyYW5zaXRpb25gLHljPWBhbmltYXRpb25gLGJjPVN5bWJvbChgX3Z0Y2ApLHhjPXtuYW1lOlN0cmluZyx0eXBlOlN0cmluZyxjc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxkdXJhdGlvbjpbU3RyaW5nLE51bWJlcixPYmplY3RdLGVudGVyRnJvbUNsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGFwcGVhckZyb21DbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGxlYXZlRnJvbUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZVRvQ2xhc3M6U3RyaW5nfSxTYz1sKHt9LFlyLHhjKSxDYz0oZT0+KGUuZGlzcGxheU5hbWU9YFRyYW5zaXRpb25gLGUucHJvcHM9U2MsZSkpKChlLHtzbG90czp0fSk9PkcoJHIsRWMoZSksdCkpLHdjPShlLHQ9W10pPT57cChlKT9lLmZvckVhY2goZT0+ZSguLi50KSk6ZSYmZSguLi50KX0sVGM9ZT0+ZT9wKGUpP2Uuc29tZShlPT5lLmxlbmd0aD4xKTplLmxlbmd0aD4xOiExO2Z1bmN0aW9uIEVjKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKW4gaW4geGN8fCh0W25dPWVbbl0pO2lmKGUuY3NzPT09ITEpcmV0dXJuIHQ7bGV0e25hbWU6bj1gdmAsdHlwZTpyLGR1cmF0aW9uOmksZW50ZXJGcm9tQ2xhc3M6YT1gJHtufS1lbnRlci1mcm9tYCxlbnRlckFjdGl2ZUNsYXNzOm89YCR7bn0tZW50ZXItYWN0aXZlYCxlbnRlclRvQ2xhc3M6cz1gJHtufS1lbnRlci10b2AsYXBwZWFyRnJvbUNsYXNzOmM9YSxhcHBlYXJBY3RpdmVDbGFzczp1PW8sYXBwZWFyVG9DbGFzczpkPXMsbGVhdmVGcm9tQ2xhc3M6Zj1gJHtufS1sZWF2ZS1mcm9tYCxsZWF2ZUFjdGl2ZUNsYXNzOnA9YCR7bn0tbGVhdmUtYWN0aXZlYCxsZWF2ZVRvQ2xhc3M6bT1gJHtufS1sZWF2ZS10b2B9PWUsaD1EYyhpKSxnPWgmJmhbMF0sXz1oJiZoWzFdLHtvbkJlZm9yZUVudGVyOnYsb25FbnRlcjp5LG9uRW50ZXJDYW5jZWxsZWQ6YixvbkxlYXZlOngsb25MZWF2ZUNhbmNlbGxlZDpTLG9uQmVmb3JlQXBwZWFyOkM9dixvbkFwcGVhcjp3PXksb25BcHBlYXJDYW5jZWxsZWQ6ZWU9Yn09dCx0ZT0oZSx0LG4scik9PntlLl9lbnRlckNhbmNlbGxlZD1yLEFjKGUsdD9kOnMpLEFjKGUsdD91Om8pLG4mJm4oKX0sVD0oZSx0KT0+e2UuX2lzTGVhdmluZz0hMSxBYyhlLGYpLEFjKGUsbSksQWMoZSxwKSx0JiZ0KCl9LG5lPWU9Pih0LG4pPT57bGV0IGk9ZT93Onksbz0oKT0+dGUodCxlLG4pO3djKGksW3Qsb10pLGpjKCgpPT57QWModCxlP2M6YSksa2ModCxlP2Q6cyksVGMoaSl8fE5jKHQscixnLG8pfSl9O3JldHVybiBsKHQse29uQmVmb3JlRW50ZXIoZSl7d2ModixbZV0pLGtjKGUsYSksa2MoZSxvKX0sb25CZWZvcmVBcHBlYXIoZSl7d2MoQyxbZV0pLGtjKGUsYyksa2MoZSx1KX0sb25FbnRlcjpuZSghMSksb25BcHBlYXI6bmUoITApLG9uTGVhdmUoZSx0KXtlLl9pc0xlYXZpbmc9ITA7bGV0IG49KCk9PlQoZSx0KTtrYyhlLGYpLGUuX2VudGVyQ2FuY2VsbGVkPyhrYyhlLHApLExjKGUpKTooTGMoZSksa2MoZSxwKSksamMoKCk9PntlLl9pc0xlYXZpbmcmJihBYyhlLGYpLGtjKGUsbSksVGMoeCl8fE5jKGUscixfLG4pKX0pLHdjKHgsW2Usbl0pfSxvbkVudGVyQ2FuY2VsbGVkKGUpe3RlKGUsITEsdm9pZCAwLCEwKSx3YyhiLFtlXSl9LG9uQXBwZWFyQ2FuY2VsbGVkKGUpe3RlKGUsITAsdm9pZCAwLCEwKSx3YyhlZSxbZV0pfSxvbkxlYXZlQ2FuY2VsbGVkKGUpe1QoZSksd2MoUyxbZV0pfX0pfWZ1bmN0aW9uIERjKGUpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoeChlKSlyZXR1cm5bT2MoZS5lbnRlciksT2MoZS5sZWF2ZSldO3tsZXQgdD1PYyhlKTtyZXR1cm5bdCx0XX19ZnVuY3Rpb24gT2MoZSl7cmV0dXJuIGZlKGUpfWZ1bmN0aW9uIGtjKGUsdCl7dC5zcGxpdCgvXHMrLykuZm9yRWFjaCh0PT50JiZlLmNsYXNzTGlzdC5hZGQodCkpLChlW2JjXXx8KGVbYmNdPW5ldyBTZXQpKS5hZGQodCl9ZnVuY3Rpb24gQWMoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LnJlbW92ZSh0KSk7bGV0IG49ZVtiY107biYmKG4uZGVsZXRlKHQpLG4uc2l6ZXx8KGVbYmNdPXZvaWQgMCkpfWZ1bmN0aW9uIGpjKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX0pfXZhciBNYz0wO2Z1bmN0aW9uIE5jKGUsdCxuLHIpe2xldCBpPWUuX2VuZElkPSsrTWMsYT0oKT0+e2k9PT1lLl9lbmRJZCYmcigpfTtpZihuIT1udWxsKXJldHVybiBzZXRUaW1lb3V0KGEsbik7bGV0e3R5cGU6byx0aW1lb3V0OnMscHJvcENvdW50OmN9PVBjKGUsdCk7aWYoIW8pcmV0dXJuIHIoKTtsZXQgbD1vK2BlbmRgLHU9MCxkPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGwsZiksYSgpfSxmPXQ9Pnt0LnRhcmdldD09PWUmJisrdT49YyYmZCgpfTtzZXRUaW1lb3V0KCgpPT57dTxjJiZkKCl9LHMrMSksZS5hZGRFdmVudExpc3RlbmVyKGwsZil9ZnVuY3Rpb24gUGMoZSx0KXtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxyPWU9PihuW2VdfHxgYCkuc3BsaXQoYCwgYCksaT1yKGAke3ZjfURlbGF5YCksYT1yKGAke3ZjfUR1cmF0aW9uYCksbz1GYyhpLGEpLHM9cihgJHt5Y31EZWxheWApLGM9cihgJHt5Y31EdXJhdGlvbmApLGw9RmMocyxjKSx1PW51bGwsZD0wLGY9MDt0PT09dmM/bz4wJiYodT12YyxkPW8sZj1hLmxlbmd0aCk6dD09PXljP2w+MCYmKHU9eWMsZD1sLGY9Yy5sZW5ndGgpOihkPU1hdGgubWF4KG8sbCksdT1kPjA/bz5sP3ZjOnljOm51bGwsZj11P3U9PT12Yz9hLmxlbmd0aDpjLmxlbmd0aDowKTtsZXQgcD11PT09dmMmJi9cYig/OnRyYW5zZm9ybXxhbGwpKD86LHwkKS8udGVzdChyKGAke3ZjfVByb3BlcnR5YCkudG9TdHJpbmcoKSk7cmV0dXJue3R5cGU6dSx0aW1lb3V0OmQscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOnB9fWZ1bmN0aW9uIEZjKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXgoLi4udC5tYXAoKHQsbik9PkljKHQpK0ljKGVbbl0pKSl9ZnVuY3Rpb24gSWMoZSl7cmV0dXJuIGU9PT1gYXV0b2A/MDpOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKGAsYCxgLmApKSoxZTN9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuKGU/ZS5vd25lckRvY3VtZW50OmRvY3VtZW50KS5ib2R5Lm9mZnNldEhlaWdodH1mdW5jdGlvbiBSYyhlLHQsbil7bGV0IHI9ZVtiY107ciYmKHQ9KHQ/W3QsLi4ucl06Wy4uLnJdKS5qb2luKGAgYCkpLHQ9PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6bj9lLnNldEF0dHJpYnV0ZShgY2xhc3NgLHQpOmUuY2xhc3NOYW1lPXR9dmFyIHpjPVN5bWJvbChgX3ZvZGApLEJjPVN5bWJvbChgX3ZzaGApLFZjPXtuYW1lOmBzaG93YCxiZWZvcmVNb3VudChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7ZVt6Y109ZS5zdHlsZS5kaXNwbGF5PT09YG5vbmVgP2BgOmUuc3R5bGUuZGlzcGxheSxuJiZ0P24uYmVmb3JlRW50ZXIoZSk6SGMoZSx0KX0sbW91bnRlZChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7biYmdCYmbi5lbnRlcihlKX0sdXBkYXRlZChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHt0cmFuc2l0aW9uOnJ9KXshdCE9IW4mJihyP3Q/KHIuYmVmb3JlRW50ZXIoZSksSGMoZSwhMCksci5lbnRlcihlKSk6ci5sZWF2ZShlLCgpPT57SGMoZSwhMSl9KTpIYyhlLHQpKX0sYmVmb3JlVW5tb3VudChlLHt2YWx1ZTp0fSl7SGMoZSx0KX19O2Z1bmN0aW9uIEhjKGUsdCl7ZS5zdHlsZS5kaXNwbGF5PXQ/ZVt6Y106YG5vbmVgLGVbQmNdPSF0fWZ1bmN0aW9uIFVjKCl7VmMuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSk9PntpZighZSlyZXR1cm57c3R5bGU6e2Rpc3BsYXk6YG5vbmVgfX19fXZhciBXYz1TeW1ib2woYGApO2Z1bmN0aW9uIEdjKGUpe2xldCB0PUZzKCk7aWYoIXQpcmV0dXJuO2xldCBuPXQudXQ9KG49ZSh0LnByb3h5KSk9PntBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXYtb3duZXI9IiR7dC51aWR9Il1gKSkuZm9yRWFjaChlPT5xYyhlLG4pKX0scj0oKT0+e2xldCByPWUodC5wcm94eSk7dC5jZT9xYyh0LmNlLHIpOktjKHQuc3ViVHJlZSxyKSxuKHIpfTskaSgoKT0+e3JyKHIpfSksUWkoKCk9PntEcihyLGEse2ZsdXNoOmBwb3N0YH0pO2xldCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKHIpO2Uub2JzZXJ2ZSh0LnN1YlRyZWUuZWwucGFyZW50Tm9kZSx7Y2hpbGRMaXN0OiEwfSksbmEoKCk9PmUuZGlzY29ubmVjdCgpKX0pfWZ1bmN0aW9uIEtjKGUsdCl7aWYoZS5zaGFwZUZsYWcmMTI4KXtsZXQgbj1lLnN1c3BlbnNlO2U9bi5hY3RpdmVCcmFuY2gsbi5wZW5kaW5nQnJhbmNoJiYhbi5pc0h5ZHJhdGluZyYmbi5lZmZlY3RzLnB1c2goKCk9PntLYyhuLmFjdGl2ZUJyYW5jaCx0KX0pfWZvcig7ZS5jb21wb25lbnQ7KWU9ZS5jb21wb25lbnQuc3ViVHJlZTtpZihlLnNoYXBlRmxhZyYxJiZlLmVsKXFjKGUuZWwsdCk7ZWxzZSBpZihlLnR5cGU9PT1JKWUuY2hpbGRyZW4uZm9yRWFjaChlPT5LYyhlLHQpKTtlbHNlIGlmKGUudHlwZT09PXVzKXtsZXR7ZWw6bixhbmNob3I6cn09ZTtmb3IoO24mJihxYyhuLHQpLG4hPT1yKTspbj1uLm5leHRTaWJsaW5nfX1mdW5jdGlvbiBxYyhlLHQpe2lmKGUubm9kZVR5cGU9PT0xKXtsZXQgbj1lLnN0eWxlLHI9YGA7Zm9yKGxldCBlIGluIHQpe2xldCBpPWplKHRbZV0pO24uc2V0UHJvcGVydHkoYC0tJHtlfWAsaSkscis9YC0tJHtlfTogJHtpfTtgfW5bV2NdPXJ9fXZhciBKYz0vKD86Xnw7KVxzKmRpc3BsYXlccyo6LztmdW5jdGlvbiBZYyhlLHQsbil7bGV0IHI9ZS5zdHlsZSxpPXkobiksYT0hMTtpZihuJiYhaSl7aWYodCl7aWYoeSh0KSlmb3IobGV0IGUgb2YgdC5zcGxpdChgO2ApKXtsZXQgdD1lLnNsaWNlKDAsZS5pbmRleE9mKGA6YCkpLnRyaW0oKTtuW3RdPz9aYyhyLHQsYGApfWVsc2UgZm9yKGxldCBlIGluIHQpbltlXT8/WmMocixlLGBgKX1mb3IobGV0IGkgaW4gbil7aT09PWBkaXNwbGF5YCYmKGE9ITApO2xldCBvPW5baV07bz09bnVsbD9aYyhyLGksYGApOnRsKGUsaSwheSh0KSYmdD90W2ldOnZvaWQgMCxvKXx8WmMocixpLG8pfX1lbHNlIGlmKGkpe2lmKHQhPT1uKXtsZXQgZT1yW1djXTtlJiYobis9YDtgK2UpLHIuY3NzVGV4dD1uLGE9SmMudGVzdChuKX19ZWxzZSB0JiZlLnJlbW92ZUF0dHJpYnV0ZShgc3R5bGVgKTt6YyBpbiBlJiYoZVt6Y109YT9yLmRpc3BsYXk6YGAsZVtCY10mJihyLmRpc3BsYXk9YG5vbmVgKSl9dmFyIFhjPS9ccyohaW1wb3J0YW50JC87ZnVuY3Rpb24gWmMoZSx0LG4pe2lmKHAobikpbi5mb3JFYWNoKG49PlpjKGUsdCxuKSk7ZWxzZSBpZihuPz89YGAsdC5zdGFydHNXaXRoKGAtLWApKWUuc2V0UHJvcGVydHkodCxuKTtlbHNle2xldCByPWVsKGUsdCk7WGMudGVzdChuKT9lLnNldFByb3BlcnR5KG9lKHIpLG4ucmVwbGFjZShYYyxgYCksYGltcG9ydGFudGApOmVbcl09bn19dmFyIFFjPVtgV2Via2l0YCxgTW96YCxgbXNgXSwkYz17fTtmdW5jdGlvbiBlbChlLHQpe2xldCBuPSRjW3RdO2lmKG4pcmV0dXJuIG47bGV0IHI9RSh0KTtpZihyIT09YGZpbHRlcmAmJnIgaW4gZSlyZXR1cm4gJGNbdF09cjtyPXNlKHIpO2ZvcihsZXQgbj0wO248UWMubGVuZ3RoO24rKyl7bGV0IGk9UWNbbl0rcjtpZihpIGluIGUpcmV0dXJuICRjW3RdPWl9cmV0dXJuIHR9ZnVuY3Rpb24gdGwoZSx0LG4scil7cmV0dXJuIGUudGFnTmFtZT09PWBURVhUQVJFQWAmJih0PT09YHdpZHRoYHx8dD09PWBoZWlnaHRgKSYmeShyKSYmbj09PXJ9dmFyIG5sPWBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYDtmdW5jdGlvbiBybChlLHQsbixyLGksYT1DZSh0KSl7ciYmdC5zdGFydHNXaXRoKGB4bGluazpgKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMobmwsdC5zbGljZSg2LHQubGVuZ3RoKSk6ZS5zZXRBdHRyaWJ1dGVOUyhubCx0LG4pOm49PW51bGx8fGEmJiF3ZShuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LGE/YGA6YihuKT9TdHJpbmcobik6bil9ZnVuY3Rpb24gaWwoZSx0LG4scixpKXtpZih0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgKXtuIT1udWxsJiYoZVt0XT10PT09YGlubmVySFRNTGA/ZmMobik6bik7cmV0dXJufWxldCBhPWUudGFnTmFtZTtpZih0PT09YHZhbHVlYCYmYSE9PWBQUk9HUkVTU2AmJiFhLmluY2x1ZGVzKGAtYCkpe2xldCByPWE9PT1gT1BUSU9OYD9lLmdldEF0dHJpYnV0ZShgdmFsdWVgKXx8YGA6ZS52YWx1ZSxpPW49PW51bGw/ZS50eXBlPT09YGNoZWNrYm94YD9gb25gOmBgOlN0cmluZyhuKTsociE9PWl8fCEoYF92YWx1ZWBpbiBlKSkmJihlLnZhbHVlPWkpLG4/P2UucmVtb3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT1gYHx8bj09bnVsbCl7bGV0IHI9dHlwZW9mIGVbdF07cj09PWBib29sZWFuYD9uPXdlKG4pOm49PW51bGwmJnI9PT1gc3RyaW5nYD8obj1gYCxvPSEwKTpyPT09YG51bWJlcmAmJihuPTAsbz0hMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUoaXx8dCl9ZnVuY3Rpb24gYWwoZSx0LG4scil7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKX1mdW5jdGlvbiBvbChlLHQsbixyKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfXZhciBzbD1TeW1ib2woYF92ZWlgKTtmdW5jdGlvbiBjbChlLHQsbixyLGk9bnVsbCl7bGV0IGE9ZVtzbF18fChlW3NsXT17fSksbz1hW3RdO2lmKHImJm8pby52YWx1ZT1yO2Vsc2V7bGV0W24sc109ZGwodCk7cj9hbChlLG4sYVt0XT1obChyLGkpLHMpOm8mJihvbChlLG4sbyxzKSxhW3RdPXZvaWQgMCl9fXZhciBsbD0vKE9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvLHVsPS9eb246Pyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIGRsKGUpe2xldCB0LG47Zm9yKDsobj1lLm1hdGNoKGxsKSkmJiF1bC50ZXN0KGUpOyl0fHw9e30sZT1lLnNsaWNlKDAsZS5sZW5ndGgtblsxXS5sZW5ndGgpLHRbblsxXS50b0xvd2VyQ2FzZSgpXT0hMDtyZXR1cm5bZVsyXT09PWA6YD9lLnNsaWNlKDMpOm9lKGUuc2xpY2UoMikpLHRdfXZhciBmbD0wLHBsPVByb21pc2UucmVzb2x2ZSgpLG1sPSgpPT5mbHx8PShwbC50aGVuKCgpPT5mbD0wKSxEYXRlLm5vdygpKTtmdW5jdGlvbiBobChlLHQpe2xldCBuPWU9PntpZighZS5fdnRzKWUuX3Z0cz1EYXRlLm5vdygpO2Vsc2UgaWYoZS5fdnRzPD1uLmF0dGFjaGVkKXJldHVybjtsZXQgcj1uLnZhbHVlO2lmKHAocikpe2xldCBuPWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPSgpPT57bi5jYWxsKGUpLGUuX3N0b3BwZWQ9ITB9O2xldCBpPXIuc2xpY2UoKSxhPVtlXTtmb3IobGV0IG49MDtuPGkubGVuZ3RoJiYhZS5fc3RvcHBlZDtuKyspe2xldCBlPWlbbl07ZSYmVW4oZSx0LDUsYSl9fWVsc2UgVW4ocix0LDUsW2VdKX07cmV0dXJuIG4udmFsdWU9ZSxuLmF0dGFjaGVkPW1sKCksbn12YXIgZ2w9ZT0+ZS5jaGFyQ29kZUF0KDApPT09MTExJiZlLmNoYXJDb2RlQXQoMSk9PT0xMTAmJmUuY2hhckNvZGVBdCgyKT45NiYmZS5jaGFyQ29kZUF0KDIpPDEyMyxfbD0oZSx0LG4scixpLGEpPT57bGV0IG89aT09PWBzdmdgO3Q9PT1gY2xhc3NgP1JjKGUscixvKTp0PT09YHN0eWxlYD9ZYyhlLG4scik6cyh0KT9jKHQpfHxjbChlLHQsbixyLGEpOih0WzBdPT09YC5gPyh0PXQuc2xpY2UoMSksITApOnRbMF09PT1gXmA/KHQ9dC5zbGljZSgxKSwhMSk6dmwoZSx0LHIsbykpPyhpbChlLHQsciksIWUudGFnTmFtZS5pbmNsdWRlcyhgLWApJiYodD09PWB2YWx1ZWB8fHQ9PT1gY2hlY2tlZGB8fHQ9PT1gc2VsZWN0ZWRgKSYmcmwoZSx0LHIsbyxhLHQhPT1gdmFsdWVgKSk6ZS5faXNWdWVDRSYmKHlsKGUsdCl8fGUuX2RlZi5fX2FzeW5jTG9hZGVyJiYoL1tBLVpdLy50ZXN0KHQpfHwheShyKSkpP2lsKGUsRSh0KSxyLGEsdCk6KHQ9PT1gdHJ1ZS12YWx1ZWA/ZS5fdHJ1ZVZhbHVlPXI6dD09PWBmYWxzZS12YWx1ZWAmJihlLl9mYWxzZVZhbHVlPXIpLHJsKGUsdCxyLG8pKX07ZnVuY3Rpb24gdmwoZSx0LG4scil7aWYocilyZXR1cm4hISh0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgfHx0IGluIGUmJmdsKHQpJiZ2KG4pKTtpZih0PT09YHNwZWxsY2hlY2tgfHx0PT09YGRyYWdnYWJsZWB8fHQ9PT1gdHJhbnNsYXRlYHx8dD09PWBhdXRvY29ycmVjdGB8fHQ9PT1gc2FuZGJveGAmJmUudGFnTmFtZT09PWBJRlJBTUVgfHx0PT09YGZvcm1gfHx0PT09YGxpc3RgJiZlLnRhZ05hbWU9PT1gSU5QVVRgfHx0PT09YHR5cGVgJiZlLnRhZ05hbWU9PT1gVEVYVEFSRUFgKXJldHVybiExO2lmKHQ9PT1gd2lkdGhgfHx0PT09YGhlaWdodGApe2xldCB0PWUudGFnTmFtZTtpZih0PT09YElNR2B8fHQ9PT1gVklERU9gfHx0PT09YENBTlZBU2B8fHQ9PT1gU09VUkNFYClyZXR1cm4hMX1yZXR1cm4gZ2wodCkmJnkobik/ITE6dCBpbiBlfWZ1bmN0aW9uIHlsKGUsdCl7bGV0IG49ZS5fZGVmLnByb3BzO2lmKCFuKXJldHVybiExO2xldCByPUUodCk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5zb21lKGU9PkUoZSk9PT1yKTpPYmplY3Qua2V5cyhuKS5zb21lKGU9PkUoZSk9PT1yKX12YXIgYmw9e307ZnVuY3Rpb24geGwoZSx0LG4pe2xldCByPVAoZSx0KTt0ZShyKSYmKHI9bCh7fSxyLHQpKTtjbGFzcyBpIGV4dGVuZHMgd2x7Y29uc3RydWN0b3IoZSl7c3VwZXIocixlLG4pfX1yZXR1cm4gaS5kZWY9cixpfXZhciBTbD0oKGUsdCk9PnhsKGUsdCxodSkpLENsPXR5cGVvZiBIVE1MRWxlbWVudDxgdWA/SFRNTEVsZW1lbnQ6Y2xhc3N7fSx3bD1jbGFzcyBlIGV4dGVuZHMgQ2x7Y29uc3RydWN0b3IoZSx0PXt9LG49bXUpe3N1cGVyKCksdGhpcy5fZGVmPWUsdGhpcy5fcHJvcHM9dCx0aGlzLl9jcmVhdGVBcHA9bix0aGlzLl9pc1Z1ZUNFPSEwLHRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fYXBwPW51bGwsdGhpcy5fbm9uY2U9dGhpcy5fZGVmLm5vbmNlLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl9yZXNvbHZlZD0hMSx0aGlzLl9wYXRjaGluZz0hMSx0aGlzLl9kaXJ0eT0hMSx0aGlzLl9udW1iZXJQcm9wcz1udWxsLHRoaXMuX3N0eWxlQ2hpbGRyZW49bmV3IFdlYWtTZXQsdGhpcy5fc3R5bGVBbmNob3JzPW5ldyBXZWFrTWFwLHRoaXMuX29iPW51bGwsdGhpcy5zaGFkb3dSb290JiZuIT09bXU/dGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3Q6ZS5zaGFkb3dSb290PT09ITE/dGhpcy5fcm9vdD10aGlzOih0aGlzLmF0dGFjaFNoYWRvdyhsKHt9LGUuc2hhZG93Um9vdE9wdGlvbnMse21vZGU6YG9wZW5gfSkpLHRoaXMuX3Jvb3Q9dGhpcy5zaGFkb3dSb290KX1jb25uZWN0ZWRDYWxsYmFjaygpe2lmKCF0aGlzLmlzQ29ubmVjdGVkKXJldHVybjshdGhpcy5zaGFkb3dSb290JiYhdGhpcy5fcmVzb2x2ZWQmJnRoaXMuX3BhcnNlU2xvdHMoKSx0aGlzLl9jb25uZWN0ZWQ9ITA7bGV0IHQ9dGhpcztmb3IoO3QmJj10LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlfHx0Lmhvc3Q7KWlmKHQgaW5zdGFuY2VvZiBlKXt0aGlzLl9wYXJlbnQ9dDticmVha310aGlzLl9pbnN0YW5jZXx8KHRoaXMuX3Jlc29sdmVkP3RoaXMuX21vdW50KHRoaXMuX2RlZik6dCYmdC5fcGVuZGluZ1Jlc29sdmU/dGhpcy5fcGVuZGluZ1Jlc29sdmU9dC5fcGVuZGluZ1Jlc29sdmUudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMCx0aGlzLmlzQ29ubmVjdGVkKXJldHVybiB0aGlzLl9yZXNvbHZlRGVmKCl9KTp0aGlzLl9yZXNvbHZlRGVmKCkpfV9zZXRQYXJlbnQoZT10aGlzLl9wYXJlbnQpe2UmJih0aGlzLl9pbnN0YW5jZS5wYXJlbnQ9ZS5faW5zdGFuY2UsdGhpcy5faW5oZXJpdFBhcmVudENvbnRleHQoZSkpfV9pbmhlcml0UGFyZW50Q29udGV4dChlPXRoaXMuX3BhcmVudCl7ZSYmdGhpcy5fYXBwJiZPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcy5fYXBwLl9jb250ZXh0LnByb3ZpZGVzLGUuX2luc3RhbmNlLnByb3ZpZGVzKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX2Nvbm5lY3RlZD0hMSwkbigoKT0+e3RoaXMuX2Nvbm5lY3RlZHx8KHRoaXMuX29iJiY9KHRoaXMuX29iLmRpc2Nvbm5lY3QoKSxudWxsKSx0aGlzLl9hcHAmJnRoaXMuX2FwcC51bm1vdW50KCksdGhpcy5faW5zdGFuY2UmJih0aGlzLl9pbnN0YW5jZS5jZT12b2lkIDApLHRoaXMuX2FwcD10aGlzLl9pbnN0YW5jZT1udWxsLHRoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmPSh0aGlzLl90ZWxlcG9ydFRhcmdldHMuY2xlYXIoKSx2b2lkIDApKX0pfV9wcm9jZXNzTXV0YXRpb25zKGUpe2ZvcihsZXQgdCBvZiBlKXRoaXMuX3NldEF0dHIodC5hdHRyaWJ1dGVOYW1lKX1fcmVzb2x2ZURlZigpe2lmKHRoaXMuX3BlbmRpbmdSZXNvbHZlKXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZTtmb3IobGV0IGU9MDtlPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7ZSsrKXRoaXMuX3NldEF0dHIodGhpcy5hdHRyaWJ1dGVzW2VdLm5hbWUpO3RoaXMuX29iPW5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMuYmluZCh0aGlzKSksdGhpcy5fb2Iub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSk7bGV0IGU9KGUsdD0hMSk9Pnt0aGlzLl9yZXNvbHZlZD0hMCx0aGlzLl9wZW5kaW5nUmVzb2x2ZT12b2lkIDA7bGV0e3Byb3BzOm4sc3R5bGVzOnJ9PWUsaTtpZihuJiYhcChuKSlmb3IobGV0IGUgaW4gbil7bGV0IHQ9bltlXTsodD09PU51bWJlcnx8dCYmdC50eXBlPT09TnVtYmVyKSYmKGUgaW4gdGhpcy5fcHJvcHMmJih0aGlzLl9wcm9wc1tlXT1mZSh0aGlzLl9wcm9wc1tlXSkpLChpfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbRShlKV09ITApfXRoaXMuX251bWJlclByb3BzPWksdGhpcy5fcmVzb2x2ZVByb3BzKGUpLHRoaXMuc2hhZG93Um9vdCYmdGhpcy5fYXBwbHlTdHlsZXMociksdGhpcy5fbW91bnQoZSl9LHQ9dGhpcy5fZGVmLl9fYXN5bmNMb2FkZXI7aWYodClyZXR1cm4gdGhpcy5fcGVuZGluZ1Jlc29sdmU9dCgpLnRoZW4odD0+e3QuY29uZmlndXJlQXBwPXRoaXMuX2RlZi5jb25maWd1cmVBcHAsZSh0aGlzLl9kZWY9dCwhMCl9KSx0aGlzLl9wZW5kaW5nUmVzb2x2ZTtlKHRoaXMuX2RlZil9X21vdW50KGUpe3RoaXMuX2FwcD10aGlzLl9jcmVhdGVBcHAoZSksdGhpcy5faW5oZXJpdFBhcmVudENvbnRleHQoKSxlLmNvbmZpZ3VyZUFwcCYmZS5jb25maWd1cmVBcHAodGhpcy5fYXBwKSx0aGlzLl9hcHAuX2NlVk5vZGU9dGhpcy5fY3JlYXRlVk5vZGUoKSx0aGlzLl9hcHAubW91bnQodGhpcy5fcm9vdCk7bGV0IHQ9dGhpcy5faW5zdGFuY2UmJnRoaXMuX2luc3RhbmNlLmV4cG9zZWQ7aWYodClmb3IobGV0IGUgaW4gdClmKHRoaXMsZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldDooKT0+TSh0W2VdKX0pfV9yZXNvbHZlUHJvcHMoZSl7bGV0e3Byb3BzOnR9PWUsbj1wKHQpP3Q6T2JqZWN0LmtleXModHx8e30pO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0aGlzKSllWzBdIT09YF9gJiZuLmluY2x1ZGVzKGUpJiZ0aGlzLl9zZXRQcm9wKGUsdGhpc1tlXSk7Zm9yKGxldCBlIG9mIG4ubWFwKEUpKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldCgpe3JldHVybiB0aGlzLl9nZXRQcm9wKGUpfSxzZXQodCl7dGhpcy5fc2V0UHJvcChlLHQsITAsIXRoaXMuX3BhdGNoaW5nKX19KX1fc2V0QXR0cihlKXtpZihlLnN0YXJ0c1dpdGgoYGRhdGEtdi1gKSlyZXR1cm47bGV0IHQ9dGhpcy5oYXNBdHRyaWJ1dGUoZSksbj10P3RoaXMuZ2V0QXR0cmlidXRlKGUpOmJsLHI9RShlKTt0JiZ0aGlzLl9udW1iZXJQcm9wcyYmdGhpcy5fbnVtYmVyUHJvcHNbcl0mJihuPWZlKG4pKSx0aGlzLl9zZXRQcm9wKHIsbiwhMSwhMCl9X2dldFByb3AoZSl7cmV0dXJuIHRoaXMuX3Byb3BzW2VdfV9zZXRQcm9wKGUsdCxuPSEwLHI9ITEpe2lmKHQhPT10aGlzLl9wcm9wc1tlXSYmKHRoaXMuX2RpcnR5PSEwLHQ9PT1ibD9kZWxldGUgdGhpcy5fcHJvcHNbZV06KHRoaXMuX3Byb3BzW2VdPXQsZT09PWBrZXlgJiZ0aGlzLl9hcHAmJih0aGlzLl9hcHAuX2NlVk5vZGUua2V5PXQpKSxyJiZ0aGlzLl9pbnN0YW5jZSYmdGhpcy5fdXBkYXRlKCksbikpe2xldCBuPXRoaXMuX29iO24mJih0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG4udGFrZVJlY29yZHMoKSksbi5kaXNjb25uZWN0KCkpLHQ9PT0hMD90aGlzLnNldEF0dHJpYnV0ZShvZShlKSxgYCk6dHlwZW9mIHQ9PWBzdHJpbmdgfHx0eXBlb2YgdD09YG51bWJlcmA/dGhpcy5zZXRBdHRyaWJ1dGUob2UoZSksdCtgYCk6dHx8dGhpcy5yZW1vdmVBdHRyaWJ1dGUob2UoZSkpLG4mJm4ub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSl9fV91cGRhdGUoKXtsZXQgZT10aGlzLl9jcmVhdGVWTm9kZSgpO3RoaXMuX2FwcCYmKGUuYXBwQ29udGV4dD10aGlzLl9hcHAuX2NvbnRleHQpLGZ1KGUsdGhpcy5fcm9vdCl9X2NyZWF0ZVZOb2RlKCl7bGV0IGU9e307dGhpcy5zaGFkb3dSb290fHwoZS5vblZub2RlTW91bnRlZD1lLm9uVm5vZGVVcGRhdGVkPXRoaXMuX3JlbmRlclNsb3RzLmJpbmQodGhpcykpO2xldCB0PVYodGhpcy5fZGVmLGwoZSx0aGlzLl9wcm9wcykpO3JldHVybiB0aGlzLl9pbnN0YW5jZXx8KHQuY2U9ZT0+e3RoaXMuX2luc3RhbmNlPWUsZS5jZT10aGlzLGUuaXNDRT0hMDtsZXQgdD0oZSx0KT0+e3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZSx0ZSh0WzBdKT9sKHtkZXRhaWw6dH0sdFswXSk6e2RldGFpbDp0fSkpfTtlLmVtaXQ9KGUsLi4ubik9Pnt0KGUsbiksb2UoZSkhPT1lJiZ0KG9lKGUpLG4pfSx0aGlzLl9zZXRQYXJlbnQoKX0pLHR9X2FwcGx5U3R5bGVzKGUsdCxuKXtpZighZSlyZXR1cm47aWYodCl7aWYodD09PXRoaXMuX2RlZnx8dGhpcy5fc3R5bGVDaGlsZHJlbi5oYXModCkpcmV0dXJuO3RoaXMuX3N0eWxlQ2hpbGRyZW4uYWRkKHQpfWxldCByPXRoaXMuX25vbmNlLGk9dGhpcy5zaGFkb3dSb290LGE9bj90aGlzLl9nZXRTdHlsZUFuY2hvcihuKXx8dGhpcy5fZ2V0U3R5bGVBbmNob3IodGhpcy5fZGVmKTp0aGlzLl9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoaSksbz1udWxsO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3ImJmMuc2V0QXR0cmlidXRlKGBub25jZWAsciksYy50ZXh0Q29udGVudD1lW3NdLGkuaW5zZXJ0QmVmb3JlKGMsb3x8YSksbz1jLHM9PT0wJiYobnx8dGhpcy5fc3R5bGVBbmNob3JzLnNldCh0aGlzLl9kZWYsYyksdCYmdGhpcy5fc3R5bGVBbmNob3JzLnNldCh0LGMpKX19X2dldFN0eWxlQW5jaG9yKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PXRoaXMuX3N0eWxlQW5jaG9ycy5nZXQoZSk7cmV0dXJuIHQmJnQucGFyZW50Tm9kZT09PXRoaXMuc2hhZG93Um9vdD90Oih0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuZGVsZXRlKGUpLG51bGwpfV9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoZSl7Zm9yKGxldCB0PTA7dDxlLmNoaWxkTm9kZXMubGVuZ3RoO3QrKyl7bGV0IG49ZS5jaGlsZE5vZGVzW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpKXJldHVybiBufXJldHVybiBudWxsfV9wYXJzZVNsb3RzKCl7bGV0IGU9dGhpcy5fc2xvdHM9e30sdDtmb3IoO3Q9dGhpcy5maXJzdENoaWxkOyl7bGV0IG49dC5ub2RlVHlwZT09PTEmJnQuZ2V0QXR0cmlidXRlKGBzbG90YCl8fGBkZWZhdWx0YDsoZVtuXXx8KGVbbl09W10pKS5wdXNoKHQpLHRoaXMucmVtb3ZlQ2hpbGQodCl9fV9yZW5kZXJTbG90cygpe2xldCBlPXRoaXMuX2dldFNsb3RzKCksdD10aGlzLl9pbnN0YW5jZS50eXBlLl9fc2NvcGVJZDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPXIuZ2V0QXR0cmlidXRlKGBuYW1lYCl8fGBkZWZhdWx0YCxhPXRoaXMuX3Nsb3RzW2ldLG89ci5wYXJlbnROb2RlO2lmKGEpZm9yKGxldCBlIG9mIGEpe2lmKHQmJmUubm9kZVR5cGU9PT0xKXtsZXQgbj10K2Atc2Ascj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsMSk7ZS5zZXRBdHRyaWJ1dGUobixgYCk7bGV0IGk7Zm9yKDtpPXIubmV4dE5vZGUoKTspaS5zZXRBdHRyaWJ1dGUobixgYCl9by5pbnNlcnRCZWZvcmUoZSxyKX1lbHNlIGZvcig7ci5maXJzdENoaWxkOylvLmluc2VydEJlZm9yZShyLmZpcnN0Q2hpbGQscik7by5yZW1vdmVDaGlsZChyKX19X2dldFNsb3RzKCl7bGV0IGU9W3RoaXNdO3RoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmZS5wdXNoKC4uLnRoaXMuX3RlbGVwb3J0VGFyZ2V0cyk7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSl7bGV0IGU9bi5xdWVyeVNlbGVjdG9yQWxsKGBzbG90YCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5hZGQoZVtuXSl9cmV0dXJuIEFycmF5LmZyb20odCl9X2luamVjdENoaWxkU3R5bGUoZSx0KXt0aGlzLl9hcHBseVN0eWxlcyhlLnN0eWxlcyxlLHQpfV9iZWdpblBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITAsdGhpcy5fZGlydHk9ITF9X2VuZFBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITEsdGhpcy5fZGlydHkmJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKX1faGFzU2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9kZWYuc2hhZG93Um9vdCE9PSExfV9yZW1vdmVDaGlsZFN0eWxlKGUpe319O2Z1bmN0aW9uIFRsKGUpe2xldCB0PUZzKCk7cmV0dXJuIHQmJnQuY2V8fG51bGx9ZnVuY3Rpb24gRWwoKXtsZXQgZT1UbCgpO3JldHVybiBlJiZlLnNoYWRvd1Jvb3R9ZnVuY3Rpb24gRGwoZT1gJHN0eWxlYCl7e2xldCB0PUZzKCk7aWYoIXQpcmV0dXJuIHI7bGV0IG49dC50eXBlLl9fY3NzTW9kdWxlcztyZXR1cm4gbiYmbltlXXx8cn19dmFyIE9sPW5ldyBXZWFrTWFwLGtsPW5ldyBXZWFrTWFwLEFsPVN5bWJvbChgX21vdmVDYmApLGpsPVN5bWJvbChgX2VudGVyQ2JgKSxNbD0oZT0+KGRlbGV0ZSBlLnByb3BzLm1vZGUsZSkpKHtuYW1lOmBUcmFuc2l0aW9uR3JvdXBgLHByb3BzOmwoe30sU2Mse3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30pLHNldHVwKGUse3Nsb3RzOnR9KXtsZXQgbj1GcygpLHI9cXIoKSxpLGE7cmV0dXJuIGVhKCgpPT57aWYoIWkubGVuZ3RoKXJldHVybjtsZXQgdD1lLm1vdmVDbGFzc3x8YCR7ZS5uYW1lfHxgdmB9LW1vdmVgO2lmKCFMbChpWzBdLmVsLG4udm5vZGUuZWwsdCkpe2k9W107cmV0dXJufWkuZm9yRWFjaChObCksaS5mb3JFYWNoKFBsKTtsZXQgcj1pLmZpbHRlcihGbCk7TGMobi52bm9kZS5lbCksci5mb3JFYWNoKGU9PntsZXQgbj1lLmVsLHI9bi5zdHlsZTtrYyhuLHQpLHIudHJhbnNmb3JtPXIud2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPWBgO2xldCBpPW5bQWxdPWU9PntlJiZlLnRhcmdldCE9PW58fCghZXx8ZS5wcm9wZXJ0eU5hbWUuZW5kc1dpdGgoYHRyYW5zZm9ybWApKSYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdHJhbnNpdGlvbmVuZGAsaSksbltBbF09bnVsbCxBYyhuLHQpKX07bi5hZGRFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKX0pLGk9W119KSwoKT0+e2xldCBvPUEoZSkscz1FYyhvKSxjPW8udGFnfHxJO2lmKGk9W10sYSlmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrKyl7bGV0IHQ9YVtlXTt0LmVsJiZ0LmVsIGluc3RhbmNlb2YgRWxlbWVudCYmIXQuZWxbQmNdJiYoaS5wdXNoKHQpLGlpKHQsdGkodCxzLHIsbikpLE9sLnNldCh0LElsKHQuZWwpKSl9YT10LmRlZmF1bHQ/YWkodC5kZWZhdWx0KCkpOltdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3Qua2V5IT1udWxsJiZpaSh0LHRpKHQscyxyLG4pKX1yZXR1cm4gVihjLG51bGwsYSl9fX0pO2Z1bmN0aW9uIE5sKGUpe2xldCB0PWUuZWw7dFtBbF0mJnRbQWxdKCksdFtqbF0mJnRbamxdKCl9ZnVuY3Rpb24gUGwoZSl7a2wuc2V0KGUsSWwoZS5lbCkpfWZ1bmN0aW9uIEZsKGUpe2xldCB0PU9sLmdldChlKSxuPWtsLmdldChlKSxyPXQubGVmdC1uLmxlZnQsaT10LnRvcC1uLnRvcDtpZihyfHxpKXtsZXQgdD1lLmVsLG49dC5zdHlsZSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLHM9MTtyZXR1cm4gdC5vZmZzZXRXaWR0aCYmKG89YS53aWR0aC90Lm9mZnNldFdpZHRoKSx0Lm9mZnNldEhlaWdodCYmKHM9YS5oZWlnaHQvdC5vZmZzZXRIZWlnaHQpLCghTnVtYmVyLmlzRmluaXRlKG8pfHxvPT09MCkmJihvPTEpLCghTnVtYmVyLmlzRmluaXRlKHMpfHxzPT09MCkmJihzPTEpLE1hdGguYWJzKG8tMSk8LjAxJiYobz0xKSxNYXRoLmFicyhzLTEpPC4wMSYmKHM9MSksbi50cmFuc2Zvcm09bi53ZWJraXRUcmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Ivb31weCwke2kvc31weClgLG4udHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZX19ZnVuY3Rpb24gSWwoZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDp0LmxlZnQsdG9wOnQudG9wfX1mdW5jdGlvbiBMbChlLHQsbil7bGV0IHI9ZS5jbG9uZU5vZGUoKSxpPWVbYmNdO2kmJmkuZm9yRWFjaChlPT57ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5yZW1vdmUoZSkpfSksbi5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5hZGQoZSkpLHIuc3R5bGUuZGlzcGxheT1gbm9uZWA7bGV0IGE9dC5ub2RlVHlwZT09PTE/dDp0LnBhcmVudE5vZGU7YS5hcHBlbmRDaGlsZChyKTtsZXR7aGFzVHJhbnNmb3JtOm99PVBjKHIpO3JldHVybiBhLnJlbW92ZUNoaWxkKHIpLG99dmFyIFJsPWU9PntsZXQgdD1lLnByb3BzW2BvblVwZGF0ZTptb2RlbFZhbHVlYF18fCExO3JldHVybiBwKHQpP2U9PmxlKHQsZSk6dH07ZnVuY3Rpb24gemwoZSl7ZS50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIEJsKGUpe2xldCB0PWUudGFyZ2V0O3QuY29tcG9zaW5nJiYodC5jb21wb3Npbmc9ITEsdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChgaW5wdXRgKSkpfXZhciBWbD1TeW1ib2woYF9hc3NpZ25gKSxIbD1TeW1ib2woYF9pbml0aWFsVmFsdWVgKTtmdW5jdGlvbiBVbChlLHQsbil7cmV0dXJuIHQmJihlPWUudHJpbSgpKSxuJiYoZT1kZShlKSksZX12YXIgV2w9e2NyZWF0ZWQoZSx7bW9kaWZpZXJzOntsYXp5OnQsdHJpbTpuLG51bWJlcjpyfX0saSl7ZS5wYXJlbnROb2RlJiYoZS50eXBlPT09YHRleHRgP2VbSGxdPWUuZGVmYXVsdFZhbHVlLnJlcGxhY2UoL1tcclxuXS9nLGBgKTplLnR5cGU9PT1gdGV4dGFyZWFgJiYoZVtIbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvXHJcbj8vZyxgCmApKSksZVtWbF09UmwoaSk7bGV0IGE9cnx8aS5wcm9wcyYmaS5wcm9wcy50eXBlPT09YG51bWJlcmA7YWwoZSx0P2BjaGFuZ2VgOmBpbnB1dGAsdD0+e3QudGFyZ2V0LmNvbXBvc2luZ3x8ZVtWbF0oVWwoZS52YWx1ZSxuLGEpKX0pLChufHxhKSYmYWwoZSxgY2hhbmdlYCwoKT0+e2UudmFsdWU9VWwoZS52YWx1ZSxuLGEpfSksdHx8KGFsKGUsYGNvbXBvc2l0aW9uc3RhcnRgLHpsKSxhbChlLGBjb21wb3NpdGlvbmVuZGAsQmwpLGFsKGUsYGNoYW5nZWAsQmwpKX0sbW91bnRlZChlLHt2YWx1ZTp0LG1vZGlmaWVyczp7dHJpbTpuLG51bWJlcjpyfX0pe2xldCBpPXQ/P2BgLGE9ZVtIbF07ZGVsZXRlIGVbSGxdLGEhPT12b2lkIDAmJihlLnR5cGU9PT1gdGV4dGB8fGUudHlwZT09PWB0ZXh0YXJlYWApJiZlLnZhbHVlIT09YT9lW1ZsXShVbChlLnZhbHVlLG4scikpOmUudmFsdWU9aX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnQsb2xkVmFsdWU6bixtb2RpZmllcnM6e2xhenk6cix0cmltOmksbnVtYmVyOmF9fSxvKXtpZihlW1ZsXT1SbChvKSxlLmNvbXBvc2luZylyZXR1cm47bGV0IHM9KGF8fGUudHlwZT09PWBudW1iZXJgKSYmIS9eMFxkLy50ZXN0KGUudmFsdWUpP2RlKGUudmFsdWUpOmUudmFsdWUsYz10Pz9gYDtpZihzPT09YylyZXR1cm47bGV0IGw9ZS5nZXRSb290Tm9kZSgpOyhsIGluc3RhbmNlb2YgRG9jdW1lbnR8fGwgaW5zdGFuY2VvZiBTaGFkb3dSb290KSYmbC5hY3RpdmVFbGVtZW50PT09ZSYmZS50eXBlIT09YHJhbmdlYCYmKHImJnQ9PT1ufHxpJiZlLnZhbHVlLnRyaW0oKT09PWMpfHwoZS52YWx1ZT1jKX19LEdsPXtkZWVwOiEwLGNyZWF0ZWQoZSx0LG4pe2VbVmxdPVJsKG4pLGFsKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1lLl9tb2RlbFZhbHVlLG49WGwoZSkscj1lLmNoZWNrZWQsaT1lW1ZsXTtpZihwKHQpKXtsZXQgZT1EZSh0LG4pLGE9ZSE9PS0xO2lmKHImJiFhKWkodC5jb25jYXQobikpO2Vsc2UgaWYoIXImJmEpe2xldCBuPVsuLi50XTtuLnNwbGljZShlLDEpLGkobil9fWVsc2UgaWYoaCh0KSl7bGV0IGU9bmV3IFNldCh0KTtyP2UuYWRkKG4pOmUuZGVsZXRlKG4pLGkoZSl9ZWxzZSBpKFpsKGUscikpfSl9LG1vdW50ZWQ6S2wsYmVmb3JlVXBkYXRlKGUsdCxuKXtlW1ZsXT1SbChuKSxLbChlLHQsbil9fTtmdW5jdGlvbiBLbChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHIpe2UuX21vZGVsVmFsdWU9dDtsZXQgaTtpZihwKHQpKWk9RGUodCxyLnByb3BzLnZhbHVlKT4tMTtlbHNlIGlmKGgodCkpaT10LmhhcyhyLnByb3BzLnZhbHVlKTtlbHNle2lmKHQ9PT1uKXJldHVybjtpPUVlKHQsWmwoZSwhMCkpfWUuY2hlY2tlZCE9PWkmJihlLmNoZWNrZWQ9aSl9dmFyIHFsPXtjcmVhdGVkKGUse3ZhbHVlOnR9LG4pe2UuY2hlY2tlZD1FZSh0LG4ucHJvcHMudmFsdWUpLGVbVmxdPVJsKG4pLGFsKGUsYGNoYW5nZWAsKCk9PntlW1ZsXShYbChlKSl9KX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZVtWbF09UmwociksdCE9PW4mJihlLmNoZWNrZWQ9RWUodCxyLnByb3BzLnZhbHVlKSl9fSxKbD17ZGVlcDohMCxjcmVhdGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOntudW1iZXI6bn19LHIpe2UuX21vZGVsVmFsdWU9dCxhbChlLGBjaGFuZ2VgLCgpPT57bGV0IHQ9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUub3B0aW9ucyxlPT5lLnNlbGVjdGVkKS5tYXAoZT0+bj9kZShYbChlKSk6WGwoZSkpO2VbVmxdKGUubXVsdGlwbGU/aChlLl9tb2RlbFZhbHVlKT9uZXcgU2V0KHQpOnQ6dFswXSksZS5fYXNzaWduaW5nPSEwLCRuKCgpPT57ZS5fYXNzaWduaW5nPSExfSl9KSxlW1ZsXT1SbChyKX0sbW91bnRlZChlLHt2YWx1ZTp0fSl7WWwoZSx0KX0sYmVmb3JlVXBkYXRlKGUse3ZhbHVlOnR9LG4pe2UuX21vZGVsVmFsdWU9dCxlW1ZsXT1SbChuKX0sdXBkYXRlZChlLHt2YWx1ZTp0fSl7ZS5fYXNzaWduaW5nfHxZbChlLHQpfX07ZnVuY3Rpb24gWWwoZSx0KXtsZXQgbj1lLm11bHRpcGxlLHI9cCh0KTtpZighKG4mJiFyJiYhaCh0KSkpe2ZvcihsZXQgaT0wLGE9ZS5vcHRpb25zLmxlbmd0aDtpPGE7aSsrKXtsZXQgYT1lLm9wdGlvbnNbaV0sbz1YbChhKTtpZihuKXtpZihyKXtsZXQgZT10eXBlb2YgbzthLnNlbGVjdGVkPWU9PT1gc3RyaW5nYHx8ZT09PWBudW1iZXJgP3Quc29tZShlPT5TdHJpbmcoZSk9PT1TdHJpbmcobykpOkRlKHQsbyk+LTF9ZWxzZSBhLnNlbGVjdGVkPXQuaGFzKG8pfWVsc2UgaWYoRWUoWGwoYSksdCkpe2Uuc2VsZWN0ZWRJbmRleCE9PWkmJihlLnNlbGVjdGVkSW5kZXg9aSk7cmV0dXJufX0hbiYmZS5zZWxlY3RlZEluZGV4IT09LTEmJihlLnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBYbChlKXtyZXR1cm5gX3ZhbHVlYGluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBabChlLHQpe2xldCBuPXQ/YF90cnVlVmFsdWVgOmBfZmFsc2VWYWx1ZWA7cmV0dXJuIG4gaW4gZT9lW25dOnR9dmFyIFFsPXtjcmVhdGVkKGUsdCxuKXtldShlLHQsbixudWxsLGBjcmVhdGVkYCl9LG1vdW50ZWQoZSx0LG4pe2V1KGUsdCxuLG51bGwsYG1vdW50ZWRgKX0sYmVmb3JlVXBkYXRlKGUsdCxuLHIpe2V1KGUsdCxuLHIsYGJlZm9yZVVwZGF0ZWApfSx1cGRhdGVkKGUsdCxuLHIpe2V1KGUsdCxuLHIsYHVwZGF0ZWRgKX19O2Z1bmN0aW9uICRsKGUsdCl7c3dpdGNoKGUpe2Nhc2VgU0VMRUNUYDpyZXR1cm4gSmw7Y2FzZWBURVhUQVJFQWA6cmV0dXJuIFdsO2RlZmF1bHQ6c3dpdGNoKHQpe2Nhc2VgY2hlY2tib3hgOnJldHVybiBHbDtjYXNlYHJhZGlvYDpyZXR1cm4gcWw7ZGVmYXVsdDpyZXR1cm4gV2x9fX1mdW5jdGlvbiBldShlLHQsbixyLGkpe2xldCBhPSRsKGUudGFnTmFtZSxuLnByb3BzJiZuLnByb3BzLnR5cGUpW2ldO2EmJmEoZSx0LG4scil9ZnVuY3Rpb24gdHUoKXtXbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9KT0+KHt2YWx1ZTplfSkscWwuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSx0KT0+e2lmKHQucHJvcHMmJkVlKHQucHJvcHMudmFsdWUsZSkpcmV0dXJue2NoZWNrZWQ6ITB9fSxHbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYocChlKSl7aWYodC5wcm9wcyYmRGUoZSx0LnByb3BzLnZhbHVlKT4tMSlyZXR1cm57Y2hlY2tlZDohMH19ZWxzZSBpZihoKGUpKXtpZih0LnByb3BzJiZlLmhhcyh0LnByb3BzLnZhbHVlKSlyZXR1cm57Y2hlY2tlZDohMH19ZWxzZSBpZihlKXJldHVybntjaGVja2VkOiEwfX0sUWwuZ2V0U1NSUHJvcHM9KGUsdCk9PntpZih0eXBlb2YgdC50eXBlIT1gc3RyaW5nYClyZXR1cm47bGV0IG49JGwodC50eXBlLnRvVXBwZXJDYXNlKCksdC5wcm9wcyYmdC5wcm9wcy50eXBlKTtpZihuLmdldFNTUlByb3BzKXJldHVybiBuLmdldFNTUlByb3BzKGUsdCl9fXZhciBudT1bYGN0cmxgLGBzaGlmdGAsYGFsdGAsYG1ldGFgXSxydT17c3RvcDplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6ZT0+ZS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6ZT0+ZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQsY3RybDplPT4hZS5jdHJsS2V5LHNoaWZ0OmU9PiFlLnNoaWZ0S2V5LGFsdDplPT4hZS5hbHRLZXksbWV0YTplPT4hZS5tZXRhS2V5LGxlZnQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTAsbWlkZGxlOmU9PmBidXR0b25gaW4gZSYmZS5idXR0b24hPT0xLHJpZ2h0OmU9PmBidXR0b25gaW4gZSYmZS5idXR0b24hPT0yLGV4YWN0OihlLHQpPT5udS5zb21lKG49PmVbYCR7bn1LZXlgXSYmIXQuaW5jbHVkZXMobikpfSxpdT0oZSx0KT0+e2lmKCFlKXJldHVybiBlO2xldCBuPWUuX3dpdGhNb2RzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KChuLC4uLnIpPT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCByPXJ1W3RbZV1dO2lmKHImJnIobix0KSlyZXR1cm59cmV0dXJuIGUobiwuLi5yKX0pKX0sYXU9e2VzYzpgZXNjYXBlYCxzcGFjZTpgIGAsdXA6YGFycm93LXVwYCxsZWZ0OmBhcnJvdy1sZWZ0YCxyaWdodDpgYXJyb3ctcmlnaHRgLGRvd246YGFycm93LWRvd25gLGRlbGV0ZTpgYmFja3NwYWNlYH0sb3U9KGUsdCk9PntsZXQgbj1lLl93aXRoS2V5c3x8PXt9LHI9dC5qb2luKGAuYCk7cmV0dXJuIG5bcl18fChuW3JdPShuPT57aWYoIShga2V5YGluIG4pKXJldHVybjtsZXQgcj1vZShuLmtleSk7aWYodC5zb21lKGU9PmU9PT1yfHxhdVtlXT09PXIpKXJldHVybiBlKG4pfSkpfSxzdT1sKHtwYXRjaFByb3A6X2x9LF9jKSxjdSxsdT0hMTtmdW5jdGlvbiB1dSgpe3JldHVybiBjdXx8PVJvKHN1KX1mdW5jdGlvbiBkdSgpe3JldHVybiBjdT1sdT9jdTp6byhzdSksbHU9ITAsY3V9dmFyIGZ1PSgoLi4uZSk9Pnt1dSgpLnJlbmRlciguLi5lKX0pLHB1PSgoLi4uZSk9PntkdSgpLmh5ZHJhdGUoLi4uZSl9KSxtdT0oKC4uLmUpPT57bGV0IHQ9dXUoKS5jcmVhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9ZT0+e2xldCByPV91KGUpO2lmKCFyKXJldHVybjtsZXQgaT10Ll9jb21wb25lbnQ7IXYoaSkmJiFpLnJlbmRlciYmIWkudGVtcGxhdGUmJihpLnRlbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeXBlPT09MSYmKHIudGV4dENvbnRlbnQ9YGApO2xldCBhPW4ociwhMSxndShyKSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBFbGVtZW50JiYoci5yZW1vdmVBdHRyaWJ1dGUoYHYtY2xvYWtgKSxyLnNldEF0dHJpYnV0ZShgZGF0YS12LWFwcGAsYGApKSxhfSx0fSksaHU9KCguLi5lKT0+e2xldCB0PWR1KCkuY3JlYXRlQXBwKC4uLmUpLHttb3VudDpufT10O3JldHVybiB0Lm1vdW50PWU9PntsZXQgdD1fdShlKTtpZih0KXJldHVybiBuKHQsITAsZ3UodCkpfSx0fSk7ZnVuY3Rpb24gZ3UoZSl7aWYoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuYHN2Z2A7aWYodHlwZW9mIE1hdGhNTEVsZW1lbnQ9PWBmdW5jdGlvbmAmJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50KXJldHVybmBtYXRobWxgfWZ1bmN0aW9uIF91KGUpe3JldHVybiB5KGUpP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ZX12YXIgdnU9ITEseXU9KCk9Pnt2dXx8KHZ1PSEwLHR1KCksVWMoKSl9LGJ1PXQoe0Jhc2VUcmFuc2l0aW9uOigpPT4kcixCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9yczooKT0+WXIsQ29tbWVudDooKT0+bHMsRGVwcmVjYXRpb25UeXBlczooKT0+bnVsbCxFZmZlY3RTY29wZTooKT0+TmUsRXJyb3JDb2RlczooKT0+Qm4sRXJyb3JUeXBlU3RyaW5nczooKT0+b2MsRnJhZ21lbnQ6KCk9PkksS2VlcEFsaXZlOigpPT5WaSxSZWFjdGl2ZUVmZmVjdDooKT0+emUsU3RhdGljOigpPT51cyxTdXNwZW5zZTooKT0+Wm8sVGVsZXBvcnQ6KCk9PkhyLFRleHQ6KCk9PmNzLFRyYWNrT3BUeXBlczooKT0+RG4sVHJhbnNpdGlvbjooKT0+Q2MsVHJhbnNpdGlvbkdyb3VwOigpPT5NbCxUcmlnZ2VyT3BUeXBlczooKT0+T24sVnVlRWxlbWVudDooKT0+d2wsYXNzZXJ0TnVtYmVyOigpPT56bixjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZzooKT0+VW4sY2FsbFdpdGhFcnJvckhhbmRsaW5nOigpPT5IbixjYW1lbGl6ZTooKT0+RSxjYXBpdGFsaXplOigpPT5zZSxjbG9uZVZOb2RlOigpPT53cyxjb21wYXRVdGlsczooKT0+bnVsbCxjb21waWxlOigpPT54dSxjb21wdXRlZDooKT0+VyxjcmVhdGVBcHA6KCk9Pm11LGNyZWF0ZUJsb2NrOigpPT56LGNyZWF0ZUNvbW1lbnRWTm9kZTooKT0+VSxjcmVhdGVFbGVtZW50QmxvY2s6KCk9PlIsY3JlYXRlRWxlbWVudFZOb2RlOigpPT5CLGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyOigpPT56byxjcmVhdGVQcm9wc1Jlc3RQcm94eTooKT0+TGEsY3JlYXRlUmVuZGVyZXI6KCk9PlJvLGNyZWF0ZVNTUkFwcDooKT0+aHUsY3JlYXRlU2xvdHM6KCk9PmdhLGNyZWF0ZVN0YXRpY1ZOb2RlOigpPT5UcyxjcmVhdGVUZXh0Vk5vZGU6KCk9PkgsY3JlYXRlVk5vZGU6KCk9PlYsY3VzdG9tUmVmOigpPT55bixkZWZpbmVBc3luY0NvbXBvbmVudDooKT0+UmksZGVmaW5lQ29tcG9uZW50OigpPT5QLGRlZmluZUN1c3RvbUVsZW1lbnQ6KCk9PnhsLGRlZmluZUVtaXRzOigpPT5UYSxkZWZpbmVFeHBvc2U6KCk9PkVhLGRlZmluZU1vZGVsOigpPT5rYSxkZWZpbmVPcHRpb25zOigpPT5EYSxkZWZpbmVQcm9wczooKT0+d2EsZGVmaW5lU1NSQ3VzdG9tRWxlbWVudDooKT0+U2wsZGVmaW5lU2xvdHM6KCk9Pk9hLGRldnRvb2xzOigpPT5zYyxlZmZlY3Q6KCk9PlFlLGVmZmVjdFNjb3BlOigpPT5QZSxnZXRDdXJyZW50SW5zdGFuY2U6KCk9PkZzLGdldEN1cnJlbnRTY29wZTooKT0+RmUsZ2V0Q3VycmVudFdhdGNoZXI6KCk9Pk1uLGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbjooKT0+YWksZ3VhcmRSZWFjdGl2ZVByb3BzOigpPT5DcyxoOigpPT5HLGhhbmRsZUVycm9yOigpPT5XbixoYXNJbmplY3Rpb25Db250ZXh0OigpPT54cixoeWRyYXRlOigpPT5wdSxoeWRyYXRlT25JZGxlOigpPT5qaSxoeWRyYXRlT25JbnRlcmFjdGlvbjooKT0+RmksaHlkcmF0ZU9uTWVkaWFRdWVyeTooKT0+UGksaHlkcmF0ZU9uVmlzaWJsZTooKT0+TmksaW5pdEN1c3RvbUZvcm1hdHRlcjooKT0+dGMsaW5pdERpcmVjdGl2ZXNGb3JTU1I6KCk9Pnl1LGluamVjdDooKT0+YnIsaXNNZW1vU2FtZTooKT0+cmMsaXNQcm94eTooKT0+b24saXNSZWFjdGl2ZTooKT0+bm4saXNSZWFkb25seTooKT0+cm4saXNSZWY6KCk9PnVuLGlzUnVudGltZU9ubHk6KCk9PkpzLGlzU2hhbGxvdzooKT0+YW4saXNWTm9kZTooKT0+X3MsbWFya1JhdzooKT0+c24sbWVyZ2VEZWZhdWx0czooKT0+RmEsbWVyZ2VNb2RlbHM6KCk9PklhLG1lcmdlUHJvcHM6KCk9PmtzLG5leHRUaWNrOigpPT4kbixub2RlT3BzOigpPT5fYyxub3JtYWxpemVDbGFzczooKT0+Tyxub3JtYWxpemVQcm9wczooKT0+eGUsbm9ybWFsaXplU3R5bGU6KCk9PmdlLG9uQWN0aXZhdGVkOigpPT5VaSxvbkJlZm9yZU1vdW50OigpPT5aaSxvbkJlZm9yZVVubW91bnQ6KCk9PnRhLG9uQmVmb3JlVXBkYXRlOigpPT4kaSxvbkRlYWN0aXZhdGVkOigpPT5XaSxvbkVycm9yQ2FwdHVyZWQ6KCk9Pm9hLG9uTW91bnRlZDooKT0+UWksb25SZW5kZXJUcmFja2VkOigpPT5hYSxvblJlbmRlclRyaWdnZXJlZDooKT0+aWEsb25TY29wZURpc3Bvc2U6KCk9PkllLG9uU2VydmVyUHJlZmV0Y2g6KCk9PnJhLG9uVW5tb3VudGVkOigpPT5uYSxvblVwZGF0ZWQ6KCk9PmVhLG9uV2F0Y2hlckNsZWFudXA6KCk9Pk5uLG9wZW5CbG9jazooKT0+TCxwYXRjaFByb3A6KCk9Pl9sLHBvcFNjb3BlSWQ6KCk9PmhyLHByb3ZpZGU6KCk9PnlyLHByb3h5UmVmczooKT0+X24scHVzaFNjb3BlSWQ6KCk9Pm1yLHF1ZXVlUG9zdEZsdXNoQ2I6KCk9PnJyLHJlYWN0aXZlOigpPT5adCxyZWFkb25seTooKT0+JHQscmVmOigpPT5qLHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyOigpPT5xcyxyZW5kZXI6KCk9PmZ1LHJlbmRlckxpc3Q6KCk9PmhhLHJlbmRlclNsb3Q6KCk9PkYscmVzb2x2ZUNvbXBvbmVudDooKT0+bGEscmVzb2x2ZURpcmVjdGl2ZTooKT0+ZmEscmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ6KCk9PmRhLHJlc29sdmVGaWx0ZXI6KCk9Pm51bGwscmVzb2x2ZVRyYW5zaXRpb25Ib29rczooKT0+dGksc2V0QmxvY2tUcmFja2luZzooKT0+aHMsc2V0RGV2dG9vbHNIb29rOigpPT5jYyxzZXRUcmFuc2l0aW9uSG9va3M6KCk9PmlpLHNoYWxsb3dSZWFjdGl2ZTooKT0+UXQsc2hhbGxvd1JlYWRvbmx5OigpPT5lbixzaGFsbG93UmVmOigpPT5kbixzc3JDb250ZXh0S2V5OigpPT5Tcixzc3JVdGlsczooKT0+bGMsc3RvcDooKT0+JGUsdG9EaXNwbGF5U3RyaW5nOigpPT5rLHRvSGFuZGxlcktleTooKT0+Y2UsdG9IYW5kbGVyczooKT0+dmEsdG9SYXc6KCk9PkEsdG9SZWY6KCk9PkNuLHRvUmVmczooKT0+Ym4sdG9WYWx1ZTooKT0+aG4sdHJhbnNmb3JtVk5vZGVBcmdzOigpPT55cyx0cmlnZ2VyUmVmOigpPT5tbix1bnJlZjooKT0+TSx1c2VBdHRyczooKT0+TWEsdXNlQ3NzTW9kdWxlOigpPT5EbCx1c2VDc3NWYXJzOigpPT5HYyx1c2VIb3N0OigpPT5UbCx1c2VJZDooKT0+b2ksdXNlTW9kZWw6KCk9PmlvLHVzZVNTUkNvbnRleHQ6KCk9PkNyLHVzZVNoYWRvd1Jvb3Q6KCk9PkVsLHVzZVNsb3RzOigpPT5qYSx1c2VUZW1wbGF0ZVJlZjooKT0+Y2ksdXNlVHJhbnNpdGlvblN0YXRlOigpPT5xcix2TW9kZWxDaGVja2JveDooKT0+R2wsdk1vZGVsRHluYW1pYzooKT0+UWwsdk1vZGVsUmFkaW86KCk9PnFsLHZNb2RlbFNlbGVjdDooKT0+Smwsdk1vZGVsVGV4dDooKT0+V2wsdlNob3c6KCk9PlZjLHZlcnNpb246KCk9PmljLHdhcm46KCk9PmFjLHdhdGNoOigpPT5Ecix3YXRjaEVmZmVjdDooKT0+d3Isd2F0Y2hQb3N0RWZmZWN0OigpPT5Ucix3YXRjaFN5bmNFZmZlY3Q6KCk9PkVyLHdpdGhBc3luY0NvbnRleHQ6KCk9PlJhLHdpdGhDdHg6KCk9Pk4sd2l0aERlZmF1bHRzOigpPT5BYSx3aXRoRGlyZWN0aXZlczooKT0+X3Isd2l0aEtleXM6KCk9Pm91LHdpdGhNZW1vOigpPT5uYyx3aXRoTW9kaWZpZXJzOigpPT5pdSx3aXRoU2NvcGVJZDooKT0+Z3J9KSx4dT0oKT0+e307ZnVuY3Rpb24gU3UoZSx0KXsodD09bnVsbHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIEN1KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gd3UoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gU3UoZSl9ZnVuY3Rpb24gVHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbmApfWZ1bmN0aW9uIEV1KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsYHZhbHVlYGluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxMdShyLmtleSkscil9fWZ1bmN0aW9uIER1KGUsdCxuKXtyZXR1cm4gdCYmRXUoZS5wcm90b3R5cGUsdCksbiYmRXUoZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIE91KGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj16dShlKSl8fHQmJmUmJnR5cGVvZiBlLmxlbmd0aD09YG51bWJlcmApe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW4ubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsYT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG4ucmV0dXJuPT1udWxsfHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIEsoZSx0LG4pe3JldHVybih0PUx1KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGt1KGUpe2lmKHR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbYEBAaXRlcmF0b3JgXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBBdShlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KHI9YS5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbi5yZXR1cm4hPW51bGwmJihvPW4ucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319ZnVuY3Rpb24ganUoKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBNdSgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBOdShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHEoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/TnUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0soZSx0LG5bdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TnUoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pfXJldHVybiBlfWZ1bmN0aW9uIFB1KGUsdCl7cmV0dXJuIEN1KGUpfHxBdShlLHQpfHx6dShlLHQpfHxqdSgpfWZ1bmN0aW9uIEZ1KGUpe3JldHVybiB3dShlKXx8a3UoZSl8fHp1KGUpfHxNdSgpfWZ1bmN0aW9uIEl1KGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8YGRlZmF1bHRgKTtpZih0eXBlb2YgciE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybih0PT09YHN0cmluZ2A/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gTHUoZSl7dmFyIHQ9SXUoZSxgc3RyaW5nYCk7cmV0dXJuIHR5cGVvZiB0PT1gc3ltYm9sYD90OnQrYGB9ZnVuY3Rpb24gUnUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gUnU9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LFJ1KGUpfWZ1bmN0aW9uIHp1KGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBTdShlLHQpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIG49PT1gT2JqZWN0YCYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09YE1hcGB8fG49PT1gU2V0YD9BcnJheS5mcm9tKGUpOm49PT1gQXJndW1lbnRzYHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/U3UoZSx0KTp2b2lkIDB9fXZhciBCdT1mdW5jdGlvbigpe30sVnU9e30sSHU9e30sVXU9bnVsbCxXdT17bWFyazpCdSxtZWFzdXJlOkJ1fTt0cnl7dHlwZW9mIHdpbmRvdzxgdWAmJihWdT13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDxgdWAmJihIdT1kb2N1bWVudCksdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8YHVgJiYoVXU9TXV0YXRpb25PYnNlcnZlciksdHlwZW9mIHBlcmZvcm1hbmNlPGB1YCYmKFd1PXBlcmZvcm1hbmNlKX1jYXRjaHt9dmFyIEd1PShWdS5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQsS3U9R3U9PT12b2lkIDA/YGA6R3UscXU9VnUsSnU9SHUsWXU9VXUsWHU9V3U7cXUuZG9jdW1lbnQ7dmFyIFp1PSEhSnUuZG9jdW1lbnRFbGVtZW50JiYhIUp1LmhlYWQmJnR5cGVvZiBKdS5hZGRFdmVudExpc3RlbmVyPT1gZnVuY3Rpb25gJiZ0eXBlb2YgSnUuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCxRdT1+S3UuaW5kZXhPZihgTVNJRWApfHx+S3UuaW5kZXhPZihgVHJpZGVudC9gKSwkdSxlZD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyx0ZD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2ksbmQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LHJkPXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0saWQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sYWQ9YGNsYXNzaWNgLG9kPWBkdW90b25lYCxzZD1gc2hhcnBgLGNkPWBzaGFycC1kdW90b25lYCxsZD1gY2hpc2VsYCx1ZD1gZXRjaGAsZGQ9YGdyYXBoaXRlYCxmZD1gamVsbHlgLHBkPWBqZWxseS1kdW9gLG1kPWBqZWxseS1maWxsYCxoZD1gbW9zYWljYCxnZD1gbm90ZG9nYCxfZD1gbm90ZG9nLWR1b2AsdmQ9YHBpeGVsYCx5ZD1gc2xhYmAsYmQ9YHNsYWItZHVvYCx4ZD1gc2xhYi1wcmVzc2AsU2Q9YHNsYWItcHJlc3MtZHVvYCxDZD1gdGh1bWJwcmludGAsd2Q9YHV0aWxpdHlgLFRkPWB1dGlsaXR5LWR1b2AsRWQ9YHV0aWxpdHktZmlsbGAsRGQ9YHZlbGx1bWAsT2Q9YHdoaXRlYm9hcmRgLGtkPWBDbGFzc2ljYCxBZD1gRHVvdG9uZWAsamQ9YFNoYXJwYCxNZD1gU2hhcnAgRHVvdG9uZWAsTmQ9YENoaXNlbGAsUGQ9YEV0Y2hgLEZkPWBHcmFwaGl0ZWAsSWQ9YEplbGx5YCxMZD1gSmVsbHkgRHVvYCxSZD1gSmVsbHkgRmlsbGAsemQ9YE1vc2FpY2AsQmQ9YE5vdGRvZ2AsVmQ9YE5vdGRvZyBEdW9gLEhkPWBQaXhlbGAsVWQ9YFNsYWJgLFdkPWBTbGFiIER1b2AsR2Q9YFNsYWIgUHJlc3NgLEtkPWBTbGFiIFByZXNzIER1b2AscWQ9YFRodW1icHJpbnRgLEpkPWBVdGlsaXR5YCxZZD1gVXRpbGl0eSBEdW9gLFhkPWBVdGlsaXR5IEZpbGxgLFpkPWBWZWxsdW1gLFFkPWBXaGl0ZWJvYXJkYCwkZD1bYWQsb2Qsc2QsY2QsbGQsdWQsZGQsZmQscGQsbWQsaGQsZ2QsX2QsdmQseWQsYmQseGQsU2QsQ2Qsd2QsVGQsRWQsRGQsT2RdOyR1PXt9LEsoSyhLKEsoSyhLKEsoSyhLKEsoJHUsYWQsa2QpLG9kLEFkKSxzZCxqZCksY2QsTWQpLGxkLE5kKSx1ZCxQZCksZGQsRmQpLGZkLElkKSxwZCxMZCksbWQsUmQpLEsoSyhLKEsoSyhLKEsoSyhLKEsoJHUsaGQsemQpLGdkLEJkKSxfZCxWZCksdmQsSGQpLHlkLFVkKSxiZCxXZCkseGQsR2QpLFNkLEtkKSxDZCxxZCksd2QsSmQpLEsoSyhLKEsoJHUsVGQsWWQpLEVkLFhkKSxEZCxaZCksT2QsUWQpO3ZhciBlZj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LHRmPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0sbmY9bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSkscmY9e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxhZj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLG9mPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LHNmPVtga2l0YF07SyhLKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciBjZj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSxsZj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sdWY9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSxkZj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0sZmYscGY9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxtZj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtmZj17fSxLKEsoSyhLKEsoSyhLKEsoSyhLKGZmLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksSyhLKEsoSyhLKEsoSyhLKEsoSyhmZixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLEsoSyhLKEsoZmYsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLEsoSyh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgaGY9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sZ2Y9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LF9mPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSx2Zj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQobWYsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSkseWY9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSxiZj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLHhmPWJmLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxTZj1bXS5jb25jYXQoRnUoT2JqZWN0LmtleXMoZ2YpKSx5ZixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLHBmLkdST1VQLHBmLlNXQVBfT1BBQ0lUWSxwZi5QUklNQVJZLHBmLlNFQ09OREFSWV0sYmYubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSx4Zi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSksQ2Y9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0sd2Y9YF9fX0ZPTlRfQVdFU09NRV9fX2AsVGY9MTYsRWY9YGZhYCxEZj1gc3ZnLWlubGluZS0tZmFgLE9mPWBkYXRhLWZhLWkyc3ZnYCxrZj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAsQWY9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AsamY9YGRhdGEtcHJlZml4YCxNZj1gZGF0YS1pY29uYCxOZj1gZm9udGF3ZXNvbWUtaTJzdmdgLFBmPWBhc3luY2AsRmY9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sSWY9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sTGY9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIFJmKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbYWRdfX0pfXZhciB6Zj1xKHt9LG5kKTt6ZlthZF09cShxKHEocSh7fSx7ImZhLWR1b3RvbmUiOmBkdW90b25lYH0pLG5kW2FkXSksb2Yua2l0KSxvZltga2l0LWR1b3RvbmVgXSk7dmFyIEJmPVJmKHpmKSxWZj1xKHt9LHJmKTtWZlthZF09cShxKHEocSh7fSx7ZHVvdG9uZTpgZmFkYH0pLFZmW2FkXSksZGYua2l0KSxkZltga2l0LWR1b3RvbmVgXSk7dmFyIEhmPVJmKFZmKSxVZj1xKHt9LF9mKTtVZlthZF09cShxKHt9LFVmW2FkXSksdWYua2l0KTt2YXIgV2Y9UmYoVWYpLEdmPXEoe30saGYpO0dmW2FkXT1xKHEoe30sR2ZbYWRdKSxjZi5raXQpLFJmKEdmKTt2YXIgS2Y9ZWQscWY9YGZhLWxheWVycy10ZXh0YCxKZj10ZDtSZihxKHt9LGVmKSk7dmFyIFlmPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sWGY9cmQsWmY9W10uY29uY2F0KEZ1KHNmKSxGdShTZikpLFFmPXF1LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiAkZihlKXt2YXIgdD1KdS5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbYCtlK2BdYCk7aWYodClyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gZXAoZSl7cmV0dXJuIGU9PT1gYD8hMDplPT09YGZhbHNlYD8hMTplPT09YHRydWVgfHxlfUp1JiZ0eXBlb2YgSnUucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVB1KGUsMiksbj10WzBdLHI9dFsxXSxpPWVwKCRmKG4pKTtpIT1udWxsJiYoUWZbcl09aSl9KTt2YXIgdHA9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6YWQsY3NzUHJlZml4OkVmLHJlcGxhY2VtZW50Q2xhc3M6RGYsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDpgYXN5bmNgLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07UWYuZmFtaWx5UHJlZml4JiYoUWYuY3NzUHJlZml4PVFmLmZhbWlseVByZWZpeCk7dmFyIG5wPXEocSh7fSx0cCksUWYpO25wLmF1dG9SZXBsYWNlU3ZnfHwobnAub2JzZXJ2ZU11dGF0aW9ucz0hMSk7dmFyIEo9e307T2JqZWN0LmtleXModHApLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosZSx7ZW51bWVyYWJsZTohMCxzZXQ6ZnVuY3Rpb24odCl7bnBbZV09dCxycC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKEopfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBucFtlXX19KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtucC5jc3NQcmVmaXg9ZSxycC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKEopfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBucC5jc3NQcmVmaXh9fSkscXUuRm9udEF3ZXNvbWVDb25maWc9Sjt2YXIgcnA9W107ZnVuY3Rpb24gaXAoZSl7cmV0dXJuIHJwLnB1c2goZSksZnVuY3Rpb24oKXtycC5zcGxpY2UocnAuaW5kZXhPZihlKSwxKX19dmFyIGFwPVRmLG9wPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIHNwKGUpe2lmKCEoIWV8fCFadSkpe3ZhciB0PUp1LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7dC5zZXRBdHRyaWJ1dGUoYHR5cGVgLGB0ZXh0L2Nzc2ApLHQuaW5uZXJIVE1MPWU7Zm9yKHZhciBuPUp1LmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gSnUuaGVhZC5pbnNlcnRCZWZvcmUodCxyKSxlfX12YXIgY3A9YDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYDtmdW5jdGlvbiBscCgpe2Zvcih2YXIgZT0xMix0PWBgO2UtLT4wOyl0Kz1jcFtNYXRoLnJhbmRvbSgpKjYyfDBdO3JldHVybiB0fWZ1bmN0aW9uIHVwKGUpe2Zvcih2YXIgdD1bXSxuPShlfHxbXSkubGVuZ3RoPj4+MDtuLS07KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBkcChlKXtyZXR1cm4gZS5jbGFzc0xpc3Q/dXAoZS5jbGFzc0xpc3QpOihlLmdldEF0dHJpYnV0ZShgY2xhc3NgKXx8YGApLnNwbGl0KGAgYCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9ZnVuY3Rpb24gZnAoZSl7cmV0dXJuYCR7ZX1gLnJlcGxhY2UoLyYvZyxgJmFtcDtgKS5yZXBsYWNlKC8iL2csYCZxdW90O2ApLnJlcGxhY2UoLycvZyxgJiMzOTtgKS5yZXBsYWNlKC88L2csYCZsdDtgKS5yZXBsYWNlKC8+L2csYCZndDtgKX1mdW5jdGlvbiBwcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259PSIke2ZwKGVbbl0pfSIgYH0sYGApLnRyaW0oKX1mdW5jdGlvbiBtcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259OiAke2Vbbl0udHJpbSgpfTtgfSxgYCl9ZnVuY3Rpb24gaHAoZSl7cmV0dXJuIGUuc2l6ZSE9PW9wLnNpemV8fGUueCE9PW9wLnh8fGUueSE9PW9wLnl8fGUucm90YXRlIT09b3Aucm90YXRlfHxlLmZsaXBYfHxlLmZsaXBZfWZ1bmN0aW9uIGdwKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS5jb250YWluZXJXaWR0aCxyPWUuaWNvbldpZHRoO3JldHVybntvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtuLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHt0LngqMzJ9LCAke3QueSozMn0pIGB9ICR7YHNjYWxlKCR7dC5zaXplLzE2Kih0LmZsaXBYPy0xOjEpfSwgJHt0LnNpemUvMTYqKHQuZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHt0LnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzIqLTF9IC0yNTYpYH19fWZ1bmN0aW9uIF9wKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS53aWR0aCxyPW49PT12b2lkIDA/VGY6bixpPWUuaGVpZ2h0LGE9aT09PXZvaWQgMD9UZjppLG89ZS5zdGFydENlbnRlcmVkLHM9byE9PXZvaWQgMCYmbyxjPWBgO3JldHVybiBjKz1zJiZRdT9gdHJhbnNsYXRlKCR7dC54L2FwLXIvMn1lbSwgJHt0LnkvYXAtYS8yfWVtKSBgOnM/YHRyYW5zbGF0ZShjYWxjKC01MCUgKyAke3QueC9hcH1lbSksIGNhbGMoLTUwJSArICR7dC55L2FwfWVtKSkgYDpgdHJhbnNsYXRlKCR7dC54L2FwfWVtLCAke3QueS9hcH1lbSkgYCxjKz1gc2NhbGUoJHt0LnNpemUvYXAqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS9hcCoodC5mbGlwWT8tMToxKX0pIGAsYys9YHJvdGF0ZSgke3Qucm90YXRlfWRlZykgYCxjfXZhciB2cD1gOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJzsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBCcmFuZHMnOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWInOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MnOwogIC0tZmEtZm9udC1zbGFiLWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTbGFiIER1byc7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MgRHVvJzsKICAtLWZhLWZvbnQtcGl4ZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUGl4ZWwnOwogIC0tZmEtZm9udC1tb3NhaWMtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE1vc2FpYyc7CiAgLS1mYS1mb250LXZlbGx1bS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVmVsbHVtJzsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCc7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQnOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyc7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8nOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBFdGNoJzsKICAtLWZhLWZvbnQtZ3JhcGhpdGUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUnOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSc7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCc7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8nOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgQ2hpc2VsJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSc7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byc7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsJzsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtY2FudmFzLXNxdWFyZSB7CiAgcGFkZGluZy1ibG9jazogMC4xMjVlbTsKICBtYXJnaW4tYmxvY2stZW5kOiAtMC4xMjVlbTsKfQoKLmZhLWNhbnZhcy1yb29teSB7CiAgcGFkZGluZy1ibG9jazogMC4yNWVtOwogIHBhZGRpbmctaW5saW5lOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjI1ZW07CiAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5mYS11bCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLWxpLW1hcmdpbiwgMi41ZW0pOwogIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0Owp9CgovKiBIZWFkcyBVcDogQm9yZGVyZWQgSWNvbnMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUhCiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhCiAgLSBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCBpbiB0aGlzIHZlcnNpb24gKnY3KSwgYnV0IGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBGb250IEF3ZXNvbWUgdjguCiovCi8qIE5vdGVzOgoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItd2lkdGggPSAxLzE2IGJ5IGRlZmF1bHQgKHRvIHJlbmRlciBhcyB+MXB4IGJhc2VkIG9uIGEgMTZweCBkZWZhdWx0IGZvbnQtc2l6ZSkKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXBhZGRpbmcgPQogICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KQogICoqIDQvMTYgZm9yIGhvcml6b250YWwgcGFkZGluZyAodG8gZ2l2ZSB+NHB4IG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbikKKi8KLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA2MjVlbSk7CiAgYm94LXNpemluZzogdmFyKC0tZmEtYm9yZGVyLWJveC1zaXppbmcsIGNvbnRlbnQtYm94KTsKICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCwKLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1wdWxsLXJpZ2h0LAouZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1iZWF0IHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpOwp9CgouZmEtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxLjVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcC0zNjAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwLTM2MDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNzVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc3BpbiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7Cn0KCi5mYS1zcGluLXNuYXAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluLXNuYXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtNCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC00OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMi40cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtOCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC04OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgNHMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtYnV6eiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJ1eno7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjZzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXdhZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXdhZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjsKfQoKLmZhLWZsb2F0IHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxvYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwp9CgouZmEtc3dpbmcgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zd2luZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjsKfQoKLmZhLWplbGxvIHsKICBhbmltYXRpb24tbmFtZTogZmEtamVsbG87CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjlzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1vdXQpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtZmxpcC0zNjAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSwKICAuZmEtYnV6eiwKICAuZmEtZmxvYXQsCiAgLmZhLWplbGxvLAogIC5mYS1zcGluLXNuYXAsCiAgLmZhLXNwaW4tc25hcC00LAogIC5mYS1zcGluLXNuYXAtOCwKICAuZmEtc3dpbmcsCiAgLmZhLXdhZyB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA0NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjIgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjIyKSkpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcpOwogIH0KICAxNCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4wNiksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjk0KSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtYW50aWNpcGF0aW9uLCAzcHgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45NCksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMTIpKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgNTIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0tZmEtYm91bmNlLWhlaWdodCwgMC41ZW0pICogMS4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41LCAwLCAxLCAwLjUpOwogIH0KICA3MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45MikpIHRyYW5zbGF0ZVkoMCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC4zMywgMC42NiwgMSk7CiAgfQogIDg1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgsIDEuMDQpIHRyYW5zbGF0ZVkoY2FsYygtMnB4ICogdmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIDEpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgNDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgMjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ1JSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICBvcGFjaXR5OiBjYWxjKHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpICsgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjI4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIDAuNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA5MiUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiB2YXIoLS1mYS1mbGlwLW92ZXJzaG9vdCwgMS4wNCkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAtMzYwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpIHRyYW5zbGF0ZVgoLTFweCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA3OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTNkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxNi42NyUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDI4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDMzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDYyJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDY2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDc4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDgzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDk1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtNCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtOCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEyLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAyMS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAzNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAzNy41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ2LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNTklIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA3MS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDg0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDg3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYnV6eiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjEsIDAsIDAuOSwgMSk7CiAgfQogIDUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC41ZGVnKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC41ZGVnKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC4zZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC4zZGVnKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjcpKSByb3RhdGUoMC4yZGVnKTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgtMC4yZGVnKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjQpKSByb3RhdGUoMC4xZGVnKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS13YWcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNiwgMSk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpICogMC44NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbG9hdCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjQgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKHZhcigtLWZhLWZsb2F0LWRyaWZ0LCAxcHgpKSByb3RhdGUodmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpIHNjYWxlKDEsIDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXgsIDAuOTgpLCB2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXksIDEuMDMpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMCk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC45MiAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgwLjk5NSwgMS4wMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMC4zMyk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC4zICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LXRpbHQsIDFkZWcpKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygwLjA1ICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3dpbmcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAxOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC42NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuNjUsIDEpOwogIH0KICAzOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjQ1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGMoLTEgKiB2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtamVsbG8gewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSwgY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMiAtIHZhcigtLWZhLWplbGxvLXNjYWxlLXksIDEuMTIpKSwgdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpLCBjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSAtIDEpICogMC41KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpLCBjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMiwgMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA2OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gO2Z1bmN0aW9uIHlwKCl7dmFyIGU9RWYsdD1EZixuPUouY3NzUHJlZml4LHI9Si5yZXBsYWNlbWVudENsYXNzLGk9dnA7aWYobiE9PWV8fHIhPT10KXt2YXIgYT1SZWdFeHAoYFxcLiR7ZX1cXC1gLGBnYCksbz1SZWdFeHAoYFxcLS0ke2V9XFwtYCxgZ2ApLHM9UmVnRXhwKGBcXC4ke3R9YCxgZ2ApO2k9aS5yZXBsYWNlKGEsYC4ke259LWApLnJlcGxhY2UobyxgLS0ke259LWApLnJlcGxhY2UocyxgLiR7cn1gKX1yZXR1cm4gaX12YXIgYnA9ITE7ZnVuY3Rpb24geHAoKXtKLmF1dG9BZGRDc3MmJiFicCYmKHNwKHlwKCkpLGJwPSEwKX12YXIgU3A9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e2Nzczp5cCxpbnNlcnRDc3M6eHB9fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57YmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOmZ1bmN0aW9uKCl7eHAoKX0sYmVmb3JlSTJzdmc6ZnVuY3Rpb24oKXt4cCgpfX19fSxDcD1xdXx8e307Q3Bbd2ZdfHwoQ3Bbd2ZdPXt9KSxDcFt3Zl0uc3R5bGVzfHwoQ3Bbd2ZdLnN0eWxlcz17fSksQ3Bbd2ZdLmhvb2tzfHwoQ3Bbd2ZdLmhvb2tzPXt9KSxDcFt3Zl0uc2hpbXN8fChDcFt3Zl0uc2hpbXM9W10pO3ZhciB3cD1DcFt3Zl0sVHA9W10sRXA9ZnVuY3Rpb24oKXtKdS5yZW1vdmVFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCxFcCksRHA9MSxUcC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxEcD0hMTtadSYmKERwPShKdS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChKdS5yZWFkeVN0YXRlKSxEcHx8SnUuYWRkRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsRXApKTtmdW5jdGlvbiBPcChlKXtadSYmKERwP3NldFRpbWVvdXQoZSwwKTpUcC5wdXNoKGUpKX1mdW5jdGlvbiBrcChlKXt2YXIgdD1lLnRhZyxuPWUuYXR0cmlidXRlcyxyPW49PT12b2lkIDA/e306bixpPWUuY2hpbGRyZW4sYT1pPT09dm9pZCAwP1tdOmk7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9mcChlKTpgPCR7dH0gJHtwcChyKX0+JHthLm1hcChrcCkuam9pbihgYCl9PC8ke3R9PmB9ZnVuY3Rpb24gQXAoZSx0LG4pe2lmKGUmJmVbdF0mJmVbdF1bbl0pcmV0dXJue3ByZWZpeDp0LGljb25OYW1lOm4saWNvbjplW3RdW25dfX12YXIganA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfX0sTXA9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmtleXMoZSksYT1pLmxlbmd0aCxvPXI9PT12b2lkIDA/dDpqcCh0LHIpLHMsYyxsO2ZvcihuPT09dm9pZCAwPyhzPTEsbD1lW2lbMF1dKToocz0wLGw9bik7czxhO3MrKyljPWlbc10sbD1vKGwsZVtjXSxjLGUpO3JldHVybiBsfTtmdW5jdGlvbiBOcChlKXtyZXR1cm4gRnUoZSkubGVuZ3RoPT09MT9lLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTpudWxsfWZ1bmN0aW9uIFBwKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj1lW25dO3JldHVybiByLmljb24/dFtyLmljb25OYW1lXT1yLmljb246dFtuXT1yLHR9LHt9KX1mdW5jdGlvbiBGcChlLHQpe3ZhciBuPShhcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30pLnNraXBIb29rcyxyPW4hPT12b2lkIDAmJm4saT1QcCh0KTt0eXBlb2Ygd3AuaG9va3MuYWRkUGFjaz09YGZ1bmN0aW9uYCYmIXI/d3AuaG9va3MuYWRkUGFjayhlLFBwKHQpKTp3cC5zdHlsZXNbZV09cShxKHt9LHdwLnN0eWxlc1tlXXx8e30pLGkpLGU9PT1gZmFzYCYmRnAoYGZhYCx0KX12YXIgSXA9d3Auc3R5bGVzLExwPXdwLnNoaW1zLFJwPU9iamVjdC5rZXlzKFdmKSx6cD1ScC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1PYmplY3Qua2V5cyhXZlt0XSksZX0se30pLEJwPW51bGwsVnA9e30sSHA9e30sVXA9e30sV3A9e30sR3A9e307ZnVuY3Rpb24gS3AoZSl7cmV0dXJuflpmLmluZGV4T2YoZSl9ZnVuY3Rpb24gcXAoZSx0KXt2YXIgbj10LnNwbGl0KGAtYCkscj1uWzBdLGk9bi5zbGljZSgxKS5qb2luKGAtYCk7cmV0dXJuIHI9PT1lJiZpIT09YGAmJiFLcChpKT9pOm51bGx9dmFyIEpwPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1wKElwLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtyXT1NcChuLGUse30pLHR9LHt9KX07VnA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRbM10mJihlW3RbM11dPW4pLHRbMl0mJnRbMl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmB9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC50b1N0cmluZygxNildPW59KSxlfSksSHA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbbl09bix0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSksR3A9ZShmdW5jdGlvbihlLHQsbil7dmFyIHI9dFsyXTtyZXR1cm4gZVtuXT1uLHIuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSk7dmFyIHQ9YGZhcmBpbiBJcHx8Si5hdXRvRmV0Y2hTdmcsbj1NcChMcCxmdW5jdGlvbihlLG4pe3ZhciByPW5bMF0saT1uWzFdLGE9blsyXTtyZXR1cm4gaT09PWBmYXJgJiYhdCYmKGk9YGZhc2ApLHR5cGVvZiByPT1gc3RyaW5nYCYmKGUubmFtZXNbcl09e3ByZWZpeDppLGljb25OYW1lOmF9KSx0eXBlb2Ygcj09YG51bWJlcmAmJihlLnVuaWNvZGVzW3IudG9TdHJpbmcoMTYpXT17cHJlZml4OmksaWNvbk5hbWU6YX0pLGV9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO1VwPW4ubmFtZXMsV3A9bi51bmljb2RlcyxCcD1ybShKLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OkouZmFtaWx5RGVmYXVsdH0pfTtpcChmdW5jdGlvbihlKXtCcD1ybShlLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OkouZmFtaWx5RGVmYXVsdH0pfSksSnAoKTtmdW5jdGlvbiBZcChlLHQpe3JldHVybihWcFtlXXx8e30pW3RdfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuKEhwW2VdfHx7fSlbdF19ZnVuY3Rpb24gWnAoZSx0KXtyZXR1cm4oR3BbZV18fHt9KVt0XX1mdW5jdGlvbiBRcChlKXtyZXR1cm4gVXBbZV18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiAkcChlKXt2YXIgdD1XcFtlXSxuPVlwKGBmYXNgLGUpO3JldHVybiB0fHwobj97cHJlZml4OmBmYXNgLGljb25OYW1lOm59Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gZW0oKXtyZXR1cm4gQnB9dmFyIHRtPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O2Z1bmN0aW9uIG5tKGUpe3ZhciB0PWFkLG49UnAucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7Si5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gJGQuZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB6cFtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIHJtKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/YWQ6dCxyPUJmW25dW2VdO2lmKG49PT1vZCYmIWUpcmV0dXJuYGZhZGA7dmFyIGk9SGZbbl1bZV18fEhmW25dW3JdLGE9ZSBpbiB3cC5zdHlsZXM/ZTpudWxsO3JldHVybiBpfHxhfHxudWxsfWZ1bmN0aW9uIGltKGUpe3ZhciB0PVtdLG49bnVsbDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXFwKEouY3NzUHJlZml4LGUpO3I/bj1yOmUmJnQucHVzaChlKX0pLHtpY29uTmFtZTpuLHJlc3Q6dH19ZnVuY3Rpb24gYW0oZSl7cmV0dXJuIGUuc29ydCgpLmZpbHRlcihmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uaW5kZXhPZihlKT09PXR9KX12YXIgb209dmYuY29uY2F0KGFmKTtmdW5jdGlvbiBzbShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5za2lwTG9va3VwcyxuPXQhPT12b2lkIDAmJnQscj1udWxsLGk9YW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG9tLmluY2x1ZGVzKGUpfSkpLGE9YW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIW9tLmluY2x1ZGVzKGUpfSkpLG89UHUoaS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSwhaWQuaW5jbHVkZXMoZSl9KSwxKVswXSxzPW89PT12b2lkIDA/bnVsbDpvLGM9bm0oaSksbD1xKHEoe30saW0oYSkpLHt9LHtwcmVmaXg6cm0ocyx7ZmFtaWx5OmN9KX0pO3JldHVybiBxKHEocSh7fSxsKSxkbSh7dmFsdWVzOmUsZmFtaWx5OmMsc3R5bGVzOklwLGNvbmZpZzpKLGNhbm9uaWNhbDpsLGdpdmVuUHJlZml4OnJ9KSksY20obixyLGwpKX1mdW5jdGlvbiBjbShlLHQsbil7dmFyIHI9bi5wcmVmaXgsaT1uLmljb25OYW1lO2lmKGV8fCFyfHwhaSlyZXR1cm57cHJlZml4OnIsaWNvbk5hbWU6aX07dmFyIGE9dD09PWBmYWA/UXAoaSk6e30sbz1acChyLGkpO3JldHVybiBpPWEuaWNvbk5hbWV8fG98fGkscj1hLnByZWZpeHx8cixyPT09YGZhcmAmJiFJcC5mYXImJklwLmZhcyYmIUouYXV0b0ZldGNoU3ZnJiYocj1gZmFzYCkse3ByZWZpeDpyLGljb25OYW1lOml9fXZhciBsbT0kZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1hZHx8ZSE9PW9kfSksdW09T2JqZWN0LmtleXMoX2YpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWFkfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhfZltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gZG0oZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09b2QsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJmxtLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gdW0uaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9bmYuZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9WnAoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PWVtKCl8fGBmYXNgKSxyfXZhciBmbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtUdSh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIER1KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPXEocSh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksRnAobix0W25dKTt2YXIgcj1XZlthZF1bbl07ciYmRnAocix0W25dKSxKcCgpfSl9fSx7a2V5OmByZXNldGAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb25zPXt9fX0se2tleTpgX3B1bGxEZWZpbml0aW9uc2AsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnByZWZpeCYmdC5pY29uTmFtZSYmdC5pY29uP3swOnR9OnQ7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGk9ci5wcmVmaXgsYT1yLmljb25OYW1lLG89ci5pY29uLHM9b1syXTtlW2ldfHwoZVtpXT17fSkscy5sZW5ndGg+MCYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT1gc3RyaW5nYCYmKGVbaV1bdF09byl9KSxlW2ldW2FdPW99KSxlfX1dKX0oKSxwbT1bXSxtbT17fSxobT17fSxnbT1PYmplY3Qua2V5cyhobSk7ZnVuY3Rpb24gX20oZSx0KXt2YXIgbj10Lm1peG91dHNUbztyZXR1cm4gcG09ZSxtbT17fSxPYmplY3Qua2V5cyhobSkuZm9yRWFjaChmdW5jdGlvbihlKXtnbS5pbmRleE9mKGUpPT09LTEmJmRlbGV0ZSBobVtlXX0pLHBtLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taXhvdXQ/ZS5taXhvdXQoKTp7fTtpZihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3R5cGVvZiB0W2VdPT1gZnVuY3Rpb25gJiYobltlXT10W2VdKSxSdSh0W2VdKT09PWBvYmplY3RgJiZPYmplY3Qua2V5cyh0W2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe25bZV18fChuW2VdPXt9KSxuW2VdW3JdPXRbZV1bcl19KX0pLGUuaG9va3Mpe3ZhciByPWUuaG9va3MoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe21tW2VdfHwobW1bZV09W10pLG1tW2VdLnB1c2gocltlXSl9KX1lLnByb3ZpZGVzJiZlLnByb3ZpZGVzKGhtKX0pLG59ZnVuY3Rpb24gdm0oZSx0KXt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgyKTtyZXR1cm4obW1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9ZS5hcHBseShudWxsLFt0XS5jb25jYXQobikpfSksdH1mdW5jdGlvbiB5bShlKXt2YXIgdD1bLi4uYXJndW1lbnRzXS5zbGljZSgxKTsobW1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYXBwbHkobnVsbCx0KX0pfWZ1bmN0aW9uIGJtKCl7dmFyIGU9YXJndW1lbnRzWzBdLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBobVtlXT9obVtlXS5hcHBseShudWxsLHQpOnZvaWQgMH1mdW5jdGlvbiB4bShlKXtlLnByZWZpeD09PWBmYWAmJihlLnByZWZpeD1gZmFzYCk7dmFyIHQ9ZS5pY29uTmFtZSxuPWUucHJlZml4fHxlbSgpO2lmKHQpcmV0dXJuIHQ9WnAobix0KXx8dCxBcChTbS5kZWZpbml0aW9ucyxuLHQpfHxBcCh3cC5zdHlsZXMsbix0KX12YXIgU209bmV3IGZtLENtPXtub0F1dG86ZnVuY3Rpb24oKXtKLmF1dG9SZXBsYWNlU3ZnPSExLEoub2JzZXJ2ZU11dGF0aW9ucz0hMSx5bShgbm9BdXRvYCl9LGNvbmZpZzpKLGRvbTp7aTJzdmc6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307cmV0dXJuIFp1Pyh5bShgYmVmb3JlSTJzdmdgLGUpLGJtKGBwc2V1ZG9FbGVtZW50czJzdmdgLGUpLGJtKGBpMnN2Z2AsZSkpOlByb21pc2UucmVqZWN0KEVycm9yKGBPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLmApKX0sd2F0Y2g6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sdD1lLmF1dG9SZXBsYWNlU3ZnUm9vdDtKLmF1dG9SZXBsYWNlU3ZnPT09ITEmJihKLmF1dG9SZXBsYWNlU3ZnPSEwKSxKLm9ic2VydmVNdXRhdGlvbnM9ITAsT3AoZnVuY3Rpb24oKXt3bSh7YXV0b1JlcGxhY2VTdmdSb290OnR9KSx5bShgd2F0Y2hgLGUpfSl9fSxwYXJzZTp7aWNvbjpmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZihSdShlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm57cHJlZml4OmUucHJlZml4LGljb25OYW1lOlpwKGUucHJlZml4LGUuaWNvbk5hbWUpfHxlLmljb25OYW1lfTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpe3ZhciB0PWVbMV0uaW5kZXhPZihgZmEtYCk9PT0wP2VbMV0uc2xpY2UoMyk6ZVsxXSxuPXJtKGVbMF0pO3JldHVybntwcmVmaXg6bixpY29uTmFtZTpacChuLHQpfHx0fX1pZih0eXBlb2YgZT09YHN0cmluZ2AmJihlLmluZGV4T2YoYCR7Si5jc3NQcmVmaXh9LWApPi0xfHxlLm1hdGNoKEtmKSkpe3ZhciByPXNtKGUuc3BsaXQoYCBgKSx7c2tpcExvb2t1cHM6ITB9KTtyZXR1cm57cHJlZml4OnIucHJlZml4fHxlbSgpLGljb25OYW1lOlpwKHIucHJlZml4LHIuaWNvbk5hbWUpfHxyLmljb25OYW1lfX1pZih0eXBlb2YgZT09YHN0cmluZ2Ape3ZhciBpPWVtKCk7cmV0dXJue3ByZWZpeDppLGljb25OYW1lOlpwKGksZSl8fGV9fX19LGxpYnJhcnk6U20sZmluZEljb25EZWZpbml0aW9uOnhtLHRvSHRtbDprcH0sd209ZnVuY3Rpb24oKXt2YXIgZT0oYXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9KS5hdXRvUmVwbGFjZVN2Z1Jvb3QsdD1lPT09dm9pZCAwP0p1OmU7KE9iamVjdC5rZXlzKHdwLnN0eWxlcykubGVuZ3RoPjB8fEouYXV0b0ZldGNoU3ZnKSYmWnUmJkouYXV0b1JlcGxhY2VTdmcmJkNtLmRvbS5pMnN2Zyh7bm9kZTp0fSl9O2Z1bmN0aW9uIFRtKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhYnN0cmFjdCIse2dldDp0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImh0bWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hYnN0cmFjdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGtwKGUpfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZihadSl7dmFyIHQ9SnUuY3JlYXRlRWxlbWVudChgZGl2YCk7cmV0dXJuIHQuaW5uZXJIVE1MPWUuaHRtbCx0LmNoaWxkcmVufX19KSxlfWZ1bmN0aW9uIEVtKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLm1haW4scj1lLm1hc2ssaT1lLmF0dHJpYnV0ZXMsYT1lLnN0eWxlcyxvPWUudHJhbnNmb3JtO2lmKGhwKG8pJiZuLmZvdW5kJiYhci5mb3VuZCl7dmFyIHM9e3g6bi53aWR0aC9uLmhlaWdodC8yLHk6LjV9O2kuc3R5bGU9bXAocShxKHt9LGEpLHt9LHsidHJhbnNmb3JtLW9yaWdpbiI6YCR7cy54K28ueC8xNn1lbSAke3MueStvLnkvMTZ9ZW1gfSkpfXJldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fV19ZnVuY3Rpb24gRG0oZSl7dmFyIHQ9ZS5wcmVmaXgsbj1lLmljb25OYW1lLHI9ZS5jaGlsZHJlbixpPWUuYXR0cmlidXRlcyxhPWUuc3ltYm9sLG89YT09PSEwP2Ake3R9LSR7Si5jc3NQcmVmaXh9LSR7bn1gOmE7cmV0dXJuW3t0YWc6YHN2Z2AsYXR0cmlidXRlczp7c3R5bGU6YGRpc3BsYXk6IG5vbmU7YH0sY2hpbGRyZW46W3t0YWc6YHN5bWJvbGAsYXR0cmlidXRlczpxKHEoe30saSkse30se2lkOm99KSxjaGlsZHJlbjpyfV19XX1mdW5jdGlvbiBPbShlKXtyZXR1cm5bYGFyaWEtbGFiZWxgLGBhcmlhLWxhYmVsbGVkYnlgLGB0aXRsZWAsYHJvbGVgXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGV9KX1mdW5jdGlvbiBrbShlKXt2YXIgdD1lLmljb25zLG49dC5tYWluLHI9dC5tYXNrLGk9ZS5wcmVmaXgsYT1lLmljb25OYW1lLG89ZS50cmFuc2Zvcm0scz1lLnN5bWJvbCxjPWUubWFza0lkLGw9ZS5leHRyYSx1PWUud2F0Y2hhYmxlLGQ9dSE9PXZvaWQgMCYmdSxmPXIuZm91bmQ/cjpuLHA9Zi53aWR0aCxtPWYuaGVpZ2h0LGg9W0oucmVwbGFjZW1lbnRDbGFzcyxhP2Ake0ouY3NzUHJlZml4fS0ke2F9YDpgYF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsLmNsYXNzZXMuaW5kZXhPZihlKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09YGB8fCEhZX0pLmNvbmNhdChsLmNsYXNzZXMpLmpvaW4oYCBgKSxnPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnEocSh7fSxsLmF0dHJpYnV0ZXMpLHt9LHsiZGF0YS1wcmVmaXgiOmksImRhdGEtaWNvbiI6YSxjbGFzczpoLHJvbGU6bC5hdHRyaWJ1dGVzLnJvbGV8fGBpbWdgLHZpZXdCb3g6YDAgMCAke3B9ICR7bX1gfSl9OyFPbShsLmF0dHJpYnV0ZXMpJiYhbC5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdJiYoZy5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdPWB0cnVlYCksZCYmKGcuYXR0cmlidXRlc1tPZl09YGApO3ZhciBfPXEocSh7fSxnKSx7fSx7cHJlZml4OmksaWNvbk5hbWU6YSxtYWluOm4sbWFzazpyLG1hc2tJZDpjLHRyYW5zZm9ybTpvLHN5bWJvbDpzLHN0eWxlczpxKHt9LGwuc3R5bGVzKX0pLHY9ci5mb3VuZCYmbi5mb3VuZD9ibShgZ2VuZXJhdGVBYnN0cmFjdE1hc2tgLF8pfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06Ym0oYGdlbmVyYXRlQWJzdHJhY3RJY29uYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LHk9di5jaGlsZHJlbixiPXYuYXR0cmlidXRlcztyZXR1cm4gXy5jaGlsZHJlbj15LF8uYXR0cmlidXRlcz1iLHM/RG0oXyk6RW0oXyl9ZnVuY3Rpb24gQW0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9ZS50cmFuc2Zvcm0sYT1lLmV4dHJhLG89ZS53YXRjaGFibGUscz1vIT09dm9pZCAwJiZvLGM9cShxKHt9LGEuYXR0cmlidXRlcykse30se2NsYXNzOmEuY2xhc3Nlcy5qb2luKGAgYCl9KTtzJiYoY1tPZl09YGApO3ZhciBsPXEoe30sYS5zdHlsZXMpO2hwKGkpJiYobC50cmFuc2Zvcm09X3Aoe3RyYW5zZm9ybTppLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6bixoZWlnaHQ6cn0pLGxbYC13ZWJraXQtdHJhbnNmb3JtYF09bC50cmFuc2Zvcm0pO3ZhciB1PW1wKGwpO3UubGVuZ3RoPjAmJihjLnN0eWxlPXUpO3ZhciBkPVtdO3JldHVybiBkLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpjLGNoaWxkcmVuOlt0XX0pLGR9ZnVuY3Rpb24gam0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS5leHRyYSxyPXEocSh7fSxuLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpuLmNsYXNzZXMuam9pbihgIGApfSksaT1tcChuLnN0eWxlcyk7aS5sZW5ndGg+MCYmKHIuc3R5bGU9aSk7dmFyIGE9W107cmV0dXJuIGEucHVzaCh7dGFnOmBzcGFuYCxhdHRyaWJ1dGVzOnIsY2hpbGRyZW46W3RdfSksYX12YXIgTW09d3Auc3R5bGVzO2Z1bmN0aW9uIE5tKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9UHUoZS5zbGljZSg0KSwxKVswXSxpPW51bGw7cmV0dXJuIGk9QXJyYXkuaXNBcnJheShyKT97dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtKLmNzc1ByZWZpeH0tJHtYZi5HUk9VUH1gfSxjaGlsZHJlbjpbe3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7Si5jc3NQcmVmaXh9LSR7WGYuU0VDT05EQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMF19fSx7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtKLmNzc1ByZWZpeH0tJHtYZi5QUklNQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMV19fV19Ont0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2ZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyfX0se2ZvdW5kOiEwLHdpZHRoOnQsaGVpZ2h0Om4saWNvbjppfX12YXIgUG09e2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyfTtmdW5jdGlvbiBGbShlLHQpeyFMZiYmIUouc2hvd01pc3NpbmdJY29ucyYmZSYmY29uc29sZS5lcnJvcihgSWNvbiB3aXRoIG5hbWUgIiR7ZX0iIGFuZCBwcmVmaXggIiR7dH0iIGlzIG1pc3NpbmcuYCl9ZnVuY3Rpb24gSW0oZSx0KXt2YXIgbj10O3JldHVybiB0PT09YGZhYCYmSi5zdHlsZURlZmF1bHQhPT1udWxsJiYodD1lbSgpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe2lmKG49PT1gZmFgKXt2YXIgYT1RcChlKXx8e307ZT1hLmljb25OYW1lfHxlLHQ9YS5wcmVmaXh8fHR9aWYoZSYmdCYmTW1bdF0mJk1tW3RdW2VdKXt2YXIgbz1NbVt0XVtlXTtyZXR1cm4gcihObShvKSl9Rm0oZSx0KSxyKHEocSh7fSxQbSkse30se2ljb246Si5zaG93TWlzc2luZ0ljb25zJiZlJiZibShgbWlzc2luZ0ljb25BYnN0cmFjdGApfHx7fX0pKX0pfXZhciBMbT1mdW5jdGlvbigpe30sUm09Si5tZWFzdXJlUGVyZm9ybWFuY2UmJlh1JiZYdS5tYXJrJiZYdS5tZWFzdXJlP1h1OnttYXJrOkxtLG1lYXN1cmU6TG19LHptPWBGQSAiNy4zLjEiYCxCbT1mdW5jdGlvbihlKXtyZXR1cm4gUm0ubWFyayhgJHt6bX0gJHtlfSBiZWdpbnNgKSxmdW5jdGlvbigpe3JldHVybiBWbShlKX19LFZtPWZ1bmN0aW9uKGUpe1JtLm1hcmsoYCR7em19ICR7ZX0gZW5kc2ApLFJtLm1lYXN1cmUoYCR7em19ICR7ZX1gLGAke3ptfSAke2V9IGJlZ2luc2AsYCR7em19ICR7ZX0gZW5kc2ApfSxIbT17YmVnaW46Qm0sZW5kOlZtfSxVbT1mdW5jdGlvbigpe307ZnVuY3Rpb24gV20oZSl7cmV0dXJuIHR5cGVvZihlLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZShPZik6bnVsbCk9PWBzdHJpbmdgfWZ1bmN0aW9uIEdtKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKGpmKTpudWxsLG49ZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUoTWYpOm51bGw7cmV0dXJuIHQmJm59ZnVuY3Rpb24gS20oZSl7cmV0dXJuIGUmJmUuY2xhc3NMaXN0JiZlLmNsYXNzTGlzdC5jb250YWlucyYmZS5jbGFzc0xpc3QuY29udGFpbnMoSi5yZXBsYWNlbWVudENsYXNzKX1mdW5jdGlvbiBxbSgpe3JldHVybiBKLmF1dG9SZXBsYWNlU3ZnPT09ITA/UW0ucmVwbGFjZTpRbVtKLmF1dG9SZXBsYWNlU3ZnXXx8UW0ucmVwbGFjZX1mdW5jdGlvbiBKbShlKXtyZXR1cm4gSnUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gWW0oZSl7cmV0dXJuIEp1LmNyZWF0ZUVsZW1lbnQoZSl9ZnVuY3Rpb24gWG0oZSl7dmFyIHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSkuY2VGbixuPXQ9PT12b2lkIDA/ZS50YWc9PT1gc3ZnYD9KbTpZbTp0O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gSnUuY3JlYXRlVGV4dE5vZGUoZSk7dmFyIHI9bihlLnRhZyk7cmV0dXJuIE9iamVjdC5rZXlzKGUuYXR0cmlidXRlc3x8W10pLmZvckVhY2goZnVuY3Rpb24odCl7ci5zZXRBdHRyaWJ1dGUodCxlLmF0dHJpYnV0ZXNbdF0pfSksKGUuY2hpbGRyZW58fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuYXBwZW5kQ2hpbGQoWG0oZSx7Y2VGbjpufSkpfSkscn1mdW5jdGlvbiBabShlKXt2YXIgdD1gICR7ZS5vdXRlckhUTUx9IGA7cmV0dXJuIHQ9YCR7dH1Gb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIGAsdH12YXIgUW09e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtpZih0LnBhcmVudE5vZGUpe2lmKGVbMV0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFhtKGUpLHQpfSksdC5nZXRBdHRyaWJ1dGUoT2YpPT09bnVsbCYmSi5rZWVwT3JpZ2luYWxTb3VyY2Upe3ZhciBuPUp1LmNyZWF0ZUNvbW1lbnQoWm0odCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH5kcCh0KS5pbmRleE9mKEoucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIFFtLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke0ouY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PUoucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBrcChlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZShPZixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uICRtKGUpe2UoKX1mdW5jdGlvbiBlaChlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6VW07aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPSRtO0oubXV0YXRlQXBwcm9hY2g9PT1QZiYmKHI9cXUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwkbSkscihmdW5jdGlvbigpe3ZhciB0PXFtKCkscj1IbS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgdGg9ITE7ZnVuY3Rpb24gbmgoKXt0aD0hMH1mdW5jdGlvbiByaCgpe3RoPSExfXZhciBpaD1udWxsO2Z1bmN0aW9uIGFoKGUpe2lmKFl1JiZKLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9VbTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP1VtOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP1VtOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9KdTpzO2loPW5ldyBZdShmdW5jdGlvbihlKXtpZighdGgpe3ZhciB0PWVtKCk7dXAoZSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLnR5cGU9PT1gY2hpbGRMaXN0YCYmZS5hZGRlZE5vZGVzLmxlbmd0aD4wJiYhV20oZS5hZGRlZE5vZGVzWzBdKSYmKEouc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oZS50YXJnZXQpLG4oZS50YXJnZXQpKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJmUudGFyZ2V0LnBhcmVudE5vZGUmJkouc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oW2UudGFyZ2V0XSwhMCksZS50eXBlPT09YGF0dHJpYnV0ZXNgJiZXbShlLnRhcmdldCkmJn5ZZi5pbmRleE9mKGUuYXR0cmlidXRlTmFtZSkpe2lmKGUuYXR0cmlidXRlTmFtZT09PWBjbGFzc2AmJkdtKGUudGFyZ2V0KSl7dmFyIHI9c20oZHAoZS50YXJnZXQpKSxhPXIucHJlZml4LHM9ci5pY29uTmFtZTtlLnRhcmdldC5zZXRBdHRyaWJ1dGUoamYsYXx8dCkscyYmZS50YXJnZXQuc2V0QXR0cmlidXRlKE1mLHMpfWVsc2UgS20oZS50YXJnZXQpJiZpKGUudGFyZ2V0KX19KX19KSxadSYmaWgub2JzZXJ2ZShjLHtjaGlsZExpc3Q6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITB9KX19ZnVuY3Rpb24gb2goKXtpaCYmaWguZGlzY29ubmVjdCgpfWZ1bmN0aW9uIHNoKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKGBzdHlsZWApLG49W107cmV0dXJuIHQmJihuPXQuc3BsaXQoYDtgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwbGl0KGA6YCkscj1uWzBdLGk9bi5zbGljZSgxKTtyZXR1cm4gciYmaS5sZW5ndGg+MCYmKGVbcl09aS5qb2luKGA6YCkudHJpbSgpKSxlfSx7fSkpLG59ZnVuY3Rpb24gY2goZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtcHJlZml4YCksbj1lLmdldEF0dHJpYnV0ZShgZGF0YS1pY29uYCkscj1lLmlubmVyVGV4dD09PXZvaWQgMD9gYDplLmlubmVyVGV4dC50cmltKCksaT1zbShkcChlKSk7cmV0dXJuIGkucHJlZml4fHw9ZW0oKSx0JiZuJiYoaS5wcmVmaXg9dCxpLmljb25OYW1lPW4pLGkuaWNvbk5hbWUmJmkucHJlZml4P2k6KGkucHJlZml4JiZyLmxlbmd0aD4wJiYoaS5pY29uTmFtZT1YcChpLnByZWZpeCxlLmlubmVyVGV4dCl8fFlwKGkucHJlZml4LE5wKGUuaW5uZXJUZXh0KSkpLCFpLmljb25OYW1lJiZKLmF1dG9GZXRjaFN2ZyYmZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmKGkuaWNvbk5hbWU9ZS5maXJzdENoaWxkLmRhdGEpLGkpfWZ1bmN0aW9uIGxoKGUpe3JldHVybiB1cChlLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm5hbWUhPT1gY2xhc3NgJiZlLm5hbWUhPT1gc3R5bGVgJiYoZVt0Lm5hbWVdPXQudmFsdWUpLGV9LHt9KX1mdW5jdGlvbiB1aCgpe3JldHVybntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpvcCxzeW1ib2w6ITEsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxleHRyYTp7Y2xhc3NlczpbXSxzdHlsZXM6e30sYXR0cmlidXRlczp7fX19fWZ1bmN0aW9uIGRoKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7c3R5bGVQYXJzZXI6ITB9LG49Y2goZSkscj1uLmljb25OYW1lLGk9bi5wcmVmaXgsYT1uLnJlc3Qsbz1saChlKSxzPXZtKGBwYXJzZU5vZGVBdHRyaWJ1dGVzYCx7fSxlKTtyZXR1cm4gcSh7aWNvbk5hbWU6cixwcmVmaXg6aSx0cmFuc2Zvcm06b3AsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxzeW1ib2w6ITEsZXh0cmE6e2NsYXNzZXM6YSxzdHlsZXM6dC5zdHlsZVBhcnNlcj9zaChlKTpbXSxhdHRyaWJ1dGVzOm99fSxzKX12YXIgZmg9d3Auc3R5bGVzO2Z1bmN0aW9uIHBoKGUpe3ZhciB0PUouYXV0b1JlcGxhY2VTdmc9PT1gbmVzdGA/ZGgoZSx7c3R5bGVQYXJzZXI6ITF9KTpkaChlKTtyZXR1cm5+dC5leHRyYS5jbGFzc2VzLmluZGV4T2YocWYpP2JtKGBnZW5lcmF0ZUxheWVyc1RleHRgLGUsdCk6Ym0oYGdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbmAsZSx0KX1mdW5jdGlvbiBtaCgpe3JldHVybltdLmNvbmNhdChGdShhZiksRnUodmYpKX1mdW5jdGlvbiBoaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtpZighWnUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBuPUp1LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Qscj1mdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoYCR7TmZ9LSR7ZX1gKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbi5yZW1vdmUoYCR7TmZ9LSR7ZX1gKX0sYT1KLmF1dG9GZXRjaFN2Zz9taCgpOmlkLmNvbmNhdChPYmplY3Qua2V5cyhmaCkpO2EuaW5jbHVkZXMoYGZhYCl8fGEucHVzaChgZmFgKTt2YXIgbz1bYC4ke3FmfTpub3QoWyR7T2Z9XSlgXS5jb25jYXQoYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYC4ke2V9Om5vdChbJHtPZn1dKWB9KSkuam9pbihgLCBgKTtpZihvLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBzPVtdO3RyeXtzPXVwKGUucXVlcnlTZWxlY3RvckFsbChvKSl9Y2F0Y2h7fWlmKHMubGVuZ3RoPjApcihgcGVuZGluZ2ApLGkoYGNvbXBsZXRlYCk7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGM9SG0uYmVnaW4oYG9uVHJlZWApLGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49cGgodCk7biYmZS5wdXNoKG4pfWNhdGNoKGUpe0xmfHxlLm5hbWU9PT1gTWlzc2luZ0ljb25gJiZjb25zb2xlLmVycm9yKGUpfXJldHVybiBlfSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5hbGwobCkudGhlbihmdW5jdGlvbihuKXtlaChuLGZ1bmN0aW9uKCl7cihgYWN0aXZlYCkscihgY29tcGxldGVgKSxpKGBwZW5kaW5nYCksdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJnQoKSxjKCksZSgpfSl9KS5jYXRjaChmdW5jdGlvbihlKXtjKCksbihlKX0pfSl9ZnVuY3Rpb24gZ2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7cGgoZSkudGhlbihmdW5jdGlvbihlKXtlJiZlaChbZV0sdCl9KX1mdW5jdGlvbiBfaChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9KHR8fHt9KS5pY29uP3Q6eG0odHx8e30pLGk9bi5tYXNrO3JldHVybiBpJiY9KGl8fHt9KS5pY29uP2k6eG0oaXx8e30pLGUocixxKHEoe30sbikse30se21hc2s6aX0pKX19dmFyIHZoPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9vcDpuLGk9dC5zeW1ib2wsYT1pIT09dm9pZCAwJiZpLG89dC5tYXNrLHM9bz09PXZvaWQgMD9udWxsOm8sYz10Lm1hc2tJZCxsPWM9PT12b2lkIDA/bnVsbDpjLHU9dC5jbGFzc2VzLGQ9dT09PXZvaWQgMD9bXTp1LGY9dC5hdHRyaWJ1dGVzLHA9Zj09PXZvaWQgMD97fTpmLG09dC5zdHlsZXMsaD1tPT09dm9pZCAwP3t9Om07aWYoZSl7dmFyIGc9ZS5wcmVmaXgsXz1lLmljb25OYW1lLHY9ZS5pY29uO3JldHVybiBUbShxKHt0eXBlOmBpY29uYH0sZSksZnVuY3Rpb24oKXtyZXR1cm4geW0oYGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbmAse2ljb25EZWZpbml0aW9uOmUscGFyYW1zOnR9KSxrbSh7aWNvbnM6e21haW46Tm0odiksbWFzazpzP05tKHMuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDpnLGljb25OYW1lOl8sdHJhbnNmb3JtOnEocSh7fSxvcCksciksc3ltYm9sOmEsbWFza0lkOmwsZXh0cmE6e2F0dHJpYnV0ZXM6cCxzdHlsZXM6aCxjbGFzc2VzOmR9fSl9KX19LHloPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57aWNvbjpfaCh2aCl9fSxob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyZWVDYWxsYmFjaz1oaCxlLm5vZGVDYWxsYmFjaz1naCxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuaTJzdmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLG49dD09PXZvaWQgMD9KdTp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gaGgobixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtJbShuLHIpLG8uaWNvbk5hbWU/SW0oby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPVB1KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLGttKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89bXAoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIGhwKGkpJiYocz1ibShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSxiaD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gVG0oe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXt5bShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtKLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KEZ1KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSx4aD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIFRtKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHltKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxqbSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake0ouY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChGdShhKSl9fSl9KX19fX0sU2g9e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9vcDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIFRtKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHltKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxBbSh7Y29udGVudDplLHRyYW5zZm9ybTpxKHEoe30sb3ApLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7Si5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KEZ1KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoUXUpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSxBbSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSxDaD1SZWdFeHAoYCJgLGB1Z2ApLHdoPVsxMTA1OTIwLDExMTIzMTldLFRoPXEocShxKHEoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLHRmKSxDZiksbGYpLEVoPU9iamVjdC5rZXlzKFRoKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPVRoW3RdLGV9LHt9KSxEaD1PYmplY3Qua2V5cyhFaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49RWhbdF07cmV0dXJuIGVbdF09bls5MDBdfHxGdShPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIE9oKGUpe3JldHVybiBOcChGdShlLnJlcGxhY2UoQ2gsYGApKVswXXx8YGApfWZ1bmN0aW9uIGtoKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2UoQ2gsYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PXdoWzBdJiZyPD13aFsxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24gQWgoZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKEVoW25dfHx7fSlbaV18fERoW25dfWZ1bmN0aW9uIGpoKGUsdCl7dmFyIG49YCR7QWZ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT11cChlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKGtmKT09PXR9KVswXSxvPXF1LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goSmYpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj1BaChzLGwpLHA9T2goZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD1raChvKSxnPVlwKGYscCksXz1nO2lmKG0pe3ZhciB2PSRwKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKGpmKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKE1mKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9dWgoKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW2tmXT10LEltKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT1rbShxKHEoe30seSkse30se2ljb25zOnttYWluOmksbWFzazp0bSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89SnUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsYHN2Z2ApO3Q9PT1gOjpiZWZvcmVgP2UuaW5zZXJ0QmVmb3JlKG8sZS5maXJzdENoaWxkKTplLmFwcGVuZENoaWxkKG8pLG8ub3V0ZXJIVE1MPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBrcChlKX0pLmpvaW4oYApgKSxlLnJlbW92ZUF0dHJpYnV0ZShuKSxyKCl9KS5jYXRjaChpKX1lbHNlIHIoKX1lbHNlIHIoKX0pfWZ1bmN0aW9uIE1oKGUpe3JldHVybiBQcm9taXNlLmFsbChbamgoZSxgOjpiZWZvcmVgKSxqaChlLGA6OmFmdGVyYCldKX1mdW5jdGlvbiBOaChlKXtyZXR1cm4gZS5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmIX5GZi5pbmRleE9mKGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSYmIWUuZ2V0QXR0cmlidXRlKGtmKSYmKCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS50YWdOYW1lIT09YHN2Z2ApfXZhciBQaD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJklmLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0sRmg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107dmFyIHQ9bmV3IFNldCxuPWUuc3BsaXQoLywoPyFbXigpXSpcKSkvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSk7bj1uLmZsYXRNYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoYChgKT9lOmUuc3BsaXQoYCxgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSl9KTt2YXIgcj1PdShuKSxpO3RyeXtmb3Ioci5zKCk7IShpPXIubigpKS5kb25lOyl7dmFyIGE9aS52YWx1ZTtpZihQaChhKSl7dmFyIG89SWYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LGBgKX0sYSk7byE9PWBgJiZvIT09YCpgJiZ0LmFkZChvKX19fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0fTtmdW5jdGlvbiBJaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMCYmYXJndW1lbnRzWzFdO2lmKFp1KXt2YXIgbjtpZih0KW49ZTtlbHNlIGlmKEouc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiluPWUucXVlcnlTZWxlY3RvckFsbChgKmApO2Vsc2V7dmFyIHI9bmV3IFNldCxpPU91KGRvY3VtZW50LnN0eWxlU2hlZXRzKSxhO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZTt0cnl7dmFyIHM9T3Uoby5jc3NSdWxlcyksYzt0cnl7Zm9yKHMucygpOyEoYz1zLm4oKSkuZG9uZTspe3ZhciBsPWMudmFsdWUsdT1PdShGaChsLnNlbGVjdG9yVGV4dCkpLGQ7dHJ5e2Zvcih1LnMoKTshKGQ9dS5uKCkpLmRvbmU7KXt2YXIgZj1kLnZhbHVlO3IuYWRkKGYpfX1jYXRjaChlKXt1LmUoZSl9ZmluYWxseXt1LmYoKX19fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX1jYXRjaChlKXtKLnNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MmJmNvbnNvbGUud2FybihgRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogJHtvLmhyZWZ9ICgke2UubWVzc2FnZX0pCklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLmApfX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9aWYoIXIuc2l6ZSlyZXR1cm47dmFyIHA9QXJyYXkuZnJvbShyKS5qb2luKGAsIGApO3RyeXtuPWUucXVlcnlTZWxlY3RvckFsbChwKX1jYXRjaHt9fXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciByPXVwKG4pLmZpbHRlcihOaCkubWFwKE1oKSxpPUhtLmJlZ2luKGBzZWFyY2hQc2V1ZG9FbGVtZW50c2ApO25oKCksUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbigpe2koKSxyaCgpLGUoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7aSgpLHJoKCksdCgpfSl9KX19dmFyIExoPXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9SWgsZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLnBzZXVkb0VsZW1lbnRzMnN2Zz1mdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUsbj10PT09dm9pZCAwP0p1OnQ7Si5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmSWgobil9fX0sUmg9ITEsemg9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e3Vud2F0Y2g6ZnVuY3Rpb24oKXtuaCgpLFJoPSEwfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntib290c3RyYXA6ZnVuY3Rpb24oKXthaCh2bShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7b2goKX0sd2F0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vYnNlcnZlTXV0YXRpb25zUm9vdDtSaD9yaCgpOmFoKHZtKGBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzYCx7b2JzZXJ2ZU11dGF0aW9uc1Jvb3Q6dH0pKX19fX0sQmg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdChgIGApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO2lmKHImJmk9PT1gaGApcmV0dXJuIGUuZmxpcFg9ITAsZTtpZihyJiZpPT09YHZgKXJldHVybiBlLmZsaXBZPSEwLGU7aWYoaT1wYXJzZUZsb2F0KGkpLGlzTmFOKGkpKXJldHVybiBlO3N3aXRjaChyKXtjYXNlYGdyb3dgOmUuc2l6ZSs9aTticmVhaztjYXNlYHNocmlua2A6ZS5zaXplLT1pO2JyZWFrO2Nhc2VgbGVmdGA6ZS54LT1pO2JyZWFrO2Nhc2VgcmlnaHRgOmUueCs9aTticmVhaztjYXNlYHVwYDplLnktPWk7YnJlYWs7Y2FzZWBkb3duYDplLnkrPWk7YnJlYWs7Y2FzZWByb3RhdGVgOmUucm90YXRlKz1pfXJldHVybiBlfSx7c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfSl9LFZoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gQmgoZSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS10cmFuc2Zvcm1gKTtyZXR1cm4gbiYmKGUudHJhbnNmb3JtPUJoKG4pKSxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWFpbixuPWUudHJhbnNmb3JtLHI9ZS5jb250YWluZXJXaWR0aCxpPWUuaWNvbldpZHRoLGE9e291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke24ueCozMn0sICR7bi55KjMyfSkgYH0gJHtgc2NhbGUoJHtuLnNpemUvMTYqKG4uZmxpcFg/LTE6MSl9LCAke24uc2l6ZS8xNioobi5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke24ucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke2kvMiotMX0gLTI1NilgfX07cmV0dXJue3RhZzpgZ2AsYXR0cmlidXRlczpxKHt9LGEub3V0ZXIpLGNoaWxkcmVuOlt7dGFnOmBnYCxhdHRyaWJ1dGVzOnEoe30sYS5pbm5lciksY2hpbGRyZW46W3t0YWc6dC5pY29uLnRhZyxjaGlsZHJlbjp0Lmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpxKHEoe30sdC5pY29uLmF0dHJpYnV0ZXMpLGEucGF0aCl9XX1dfX19fSxIaD17eDowLHk6MCx3aWR0aDpgMTAwJWAsaGVpZ2h0OmAxMDAlYH07ZnVuY3Rpb24gVWgoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBlLmF0dHJpYnV0ZXMmJihlLmF0dHJpYnV0ZXMuZmlsbHx8dCkmJihlLmF0dHJpYnV0ZXMuZmlsbD1gYmxhY2tgKSxlfWZ1bmN0aW9uIFdoKGUpe3JldHVybiBlLnRhZz09PWBnYD9lLmNoaWxkcmVuOltlXX1fbShbU3AseWgsYmgseGgsU2gsTGgsemgsVmgse2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrYCkscj1uP3NtKG4uc3BsaXQoYCBgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSkpOnRtKCk7cmV0dXJuIHIucHJlZml4fHw9ZW0oKSxlLm1hc2s9cixlLm1hc2tJZD10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrLWlkYCksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RNYXNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLm1hc2ssYT1lLm1hc2tJZCxvPWUudHJhbnNmb3JtLHM9ci53aWR0aCxjPXIuaWNvbixsPWkud2lkdGgsdT1pLmljb24sZD1ncCh7dHJhbnNmb3JtOm8sY29udGFpbmVyV2lkdGg6bCxpY29uV2lkdGg6c30pLGY9e3RhZzpgcmVjdGAsYXR0cmlidXRlczpxKHEoe30sSGgpLHt9LHtmaWxsOmB3aGl0ZWB9KX0scD1jLmNoaWxkcmVuP3tjaGlsZHJlbjpjLmNoaWxkcmVuLm1hcChVaCl9Ont9LG09e3RhZzpgZ2AsYXR0cmlidXRlczpxKHt9LGQuaW5uZXIpLGNoaWxkcmVuOltVaChxKHt0YWc6Yy50YWcsYXR0cmlidXRlczpxKHEoe30sYy5hdHRyaWJ1dGVzKSxkLnBhdGgpfSxwKSldfSxoPXt0YWc6YGdgLGF0dHJpYnV0ZXM6cSh7fSxkLm91dGVyKSxjaGlsZHJlbjpbbV19LGc9YG1hc2stJHthfHxscCgpfWAsXz1gY2xpcC0ke2F8fGxwKCl9YCx2PXt0YWc6YG1hc2tgLGF0dHJpYnV0ZXM6cShxKHt9LEhoKSx7fSx7aWQ6ZyxtYXNrVW5pdHM6YHVzZXJTcGFjZU9uVXNlYCxtYXNrQ29udGVudFVuaXRzOmB1c2VyU3BhY2VPblVzZWB9KSxjaGlsZHJlbjpbZixoXX0seT17dGFnOmBkZWZzYCxjaGlsZHJlbjpbe3RhZzpgY2xpcFBhdGhgLGF0dHJpYnV0ZXM6e2lkOl99LGNoaWxkcmVuOldoKHUpfSx2XX07cmV0dXJuIHQucHVzaCh5LHt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6cSh7ZmlsbDpgY3VycmVudENvbG9yYCwiY2xpcC1wYXRoIjpgdXJsKCMke199KWAsbWFzazpgdXJsKCMke2d9KWB9LEhoKX0pLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6bn19fX0se3Byb3ZpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSExO3F1Lm1hdGNoTWVkaWEmJih0PXF1Lm1hdGNoTWVkaWEoYChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpYCkubWF0Y2hlcyksZS5taXNzaW5nSWNvbkFic3RyYWN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sbj17ZmlsbDpgY3VycmVudENvbG9yYH0scj17YXR0cmlidXRlVHlwZTpgWE1MYCxyZXBlYXRDb3VudDpgaW5kZWZpbml0ZWAsZHVyOmAyc2B9O2UucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7ZDpgTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40emB9KX0pO3ZhciBpPXEocSh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgb3BhY2l0eWB9KSxhPXt0YWc6YGNpcmNsZWAsYXR0cmlidXRlczpxKHEoe30sbikse30se2N4OmAyNTZgLGN5OmAzNjRgLHI6YDI4YH0pLGNoaWxkcmVuOltdfTtyZXR1cm4gdHx8YS5jaGlsZHJlbi5wdXNoKHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6cShxKHt9LHIpLHt9LHthdHRyaWJ1dGVOYW1lOmByYCx2YWx1ZXM6YDI4OzE0OzI4OzI4OzE0OzI4O2B9KX0se3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpxKHEoe30saSkse30se3ZhbHVlczpgMTswOzE7MTswOzE7YH0pfSksZS5wdXNoKGEpLGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7b3BhY2l0eTpgMWAsZDpgTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyemB9KSxjaGlsZHJlbjp0P1tdOlt7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOnEocSh7fSxpKSx7fSx7dmFsdWVzOmAxOzA7MDswOzA7MTtgfSl9XX0pLHR8fGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOnEocSh7fSxuKSx7fSx7b3BhY2l0eTpgMGAsZDpgTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41emB9KSxjaGlsZHJlbjpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpxKHEoe30saSkse30se3ZhbHVlczpgMDswOzE7MTswOzA7YH0pfV19KSx7dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgbWlzc2luZ2B9LGNoaWxkcmVuOmV9fX19LHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtc3ltYm9sYCk7cmV0dXJuIGUuc3ltYm9sPW49PT1udWxsPyExOm49PT1gYHx8bixlfX19fV0se21peG91dHNUbzpDbX0pLENtLm5vQXV0byxDbS5jb25maWcsQ20ubGlicmFyeSxDbS5kb207dmFyIEdoPUNtLnBhcnNlO0NtLmZpbmRJY29uRGVmaW5pdGlvbixDbS50b0h0bWw7dmFyIEtoPUNtLmljb247Q20ubGF5ZXIsQ20udGV4dCxDbS5jb3VudGVyO2Z1bmN0aW9uIHFoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBKaChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBxaChlKX1mdW5jdGlvbiBZaChlLHQsbil7cmV0dXJuKHQ9aWcodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWGgoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIFpoKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFFoKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gJGgoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/UWgoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1loKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlFoKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBlZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPXRnKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiB0ZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIEpoKGUpfHxYaChlKXx8b2coZSl8fFpoKCl9ZnVuY3Rpb24gcmcoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBpZyhlKXt2YXIgdD1yZyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBhZyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBhZz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sYWcoZSl9ZnVuY3Rpb24gb2coZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIHFoKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9xaChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WWgoe30sZSx0KTp7fX1mdW5jdGlvbiBjZyhlKXt2YXIgdCxuPSh0PXsiZmEtc3BpbiI6ZS5zcGluLCJmYS1wdWxzZSI6ZS5wdWxzZSwiZmEtZnciOmUuZml4ZWRXaWR0aCwiZmEtYm9yZGVyIjplLmJvcmRlciwiZmEtbGkiOmUubGlzdEl0ZW0sImZhLWludmVyc2UiOmUuaW52ZXJzZSwiZmEtZmxpcCI6ZS5mbGlwPT09ITAsImZhLWZsaXAtaG9yaXpvbnRhbCI6ZS5mbGlwPT09YGhvcml6b250YWxgfHxlLmZsaXA9PT1gYm90aGAsImZhLWZsaXAtdmVydGljYWwiOmUuZmxpcD09PWB2ZXJ0aWNhbGB8fGUuZmxpcD09PWBib3RoYH0sWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgoWWgodCxgZmEtJHtlLnNpemV9YCxlLnNpemUhPT1udWxsKSxgZmEtcm90YXRlLSR7ZS5yb3RhdGlvbn1gLGUucm90YXRpb24hPT1udWxsKSxgZmEtcm90YXRlLWJ5YCxlLnJvdGF0ZUJ5KSxgZmEtcHVsbC0ke2UucHVsbH1gLGUucHVsbCE9PW51bGwpLGBmYS1zd2FwLW9wYWNpdHlgLGUuc3dhcE9wYWNpdHkpLGBmYS1ib3VuY2VgLGUuYm91bmNlKSxgZmEtc2hha2VgLGUuc2hha2UpLGBmYS1iZWF0YCxlLmJlYXQpLGBmYS1mYWRlYCxlLmZhZGUpLGBmYS1iZWF0LWZhZGVgLGUuYmVhdEZhZGUpLFloKFloKFloKFloKFloKFloKFloKFloKFloKFloKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFloKFloKFloKFloKFloKHQsYGZhLXNwaW4tc25hcGAsZS5zcGluU25hcCksYGZhLXNwaW4tc25hcC00YCxlLnNwaW5TbmFwNCksYGZhLXNwaW4tc25hcC04YCxlLnNwaW5TbmFwOCksYGZhLXN3aW5nYCxlLnN3aW5nKSxgZmEtd2FnYCxlLndhZykpO3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/ZTpudWxsfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9dmFyIGxnPXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30sdWc9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe2lmKCFsKHQpfHxkKHQpfHxmKHQpfHxwKHQpfHxjKHQpKXJldHVybiB0O3ZhciBpLGE9MCxvPTA7aWYodSh0KSlmb3IoaT1bXSxvPXQubGVuZ3RoO2E8bzthKyspaS5wdXNoKG4oZSx0W2FdLHIpKTtlbHNlIGZvcih2YXIgcyBpbiBpPXt9LHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihpW2UocyxyKV09bihlLHRbc10scikpO3JldHVybiBpfSxyPWZ1bmN0aW9uKGUsdCl7dHx8PXt9O3ZhciBuPXQuc2VwYXJhdG9yfHxgX2Ascj10LnNwbGl0fHwvKD89W0EtWl0pLztyZXR1cm4gZS5zcGxpdChyKS5qb2luKG4pfSxpPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP2U6KGU9ZS5yZXBsYWNlKC9bXC1fXHNdKyguKT8vZyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpgYH0pLGUuc3Vic3RyKDAsMSkudG9Mb3dlckNhc2UoKStlLnN1YnN0cigxKSl9LGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtyZXR1cm4gdC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0KS50b0xvd2VyQ2FzZSgpfSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmB9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1PYmplY3QoZSl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQXJyYXldYH0sZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGUpPT1gW29iamVjdCBEYXRlXWB9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgUmVnRXhwXWB9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQm9vbGVhbl1gfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLT0wLGU9PT1lfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmYHByb2Nlc3NgaW4gdD90LnByb2Nlc3M6dDtyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/ZnVuY3Rpb24odCxyKXtyZXR1cm4gbih0LGUscil9OmV9LGc9e2NhbWVsaXplOmksZGVjYW1lbGl6ZTpvLHBhc2NhbGl6ZTphLGRlcGFzY2FsaXplOm8sY2FtZWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChpLHQpLGUpfSxkZWNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgobyx0KSxlLHQpfSxwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChhLHQpLGUpfSxkZXBhc2NhbGl6ZUtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNhbWVsaXplS2V5cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtlLmV4cG9ydHM/ZS5leHBvcnRzPWc6dC5odW1wcz1nfSkobGcpfSkodWcpO3ZhciBkZz11Zy5leHBvcnRzLGZnPVtgZ3JhZGllbnRGaWxsYF0scGc9W2BjbGFzc2AsYHN0eWxlYF0sbWc9W2B0eXBlYCxgc3RvcHNgLGBpZGBdO2Z1bmN0aW9uIGhnKGUpe3JldHVybiBlLnNwbGl0KGA7YCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuaW5kZXhPZihgOmApLHI9ZGcuY2FtZWxpemUodC5zbGljZSgwLG4pKTtyZXR1cm4gZVtyXT10LnNsaWNlKG4rMSkudHJpbSgpLGV9LHt9KX1mdW5jdGlvbiBnZyhlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ITAsZX0se30pfWZ1bmN0aW9uIF9nKGUsdCl7cmV0dXJuIEcoYHN0b3BgLCRoKHtrZXk6YCR7dH0tJHtlLm9mZnNldH1gLG9mZnNldDplLm9mZnNldCwic3RvcC1jb2xvciI6ZS5jb2xvcn0sZS5vcGFjaXR5IT09dm9pZCAwJiZ7InN0b3Atb3BhY2l0eSI6ZS5vcGFjaXR5fSkpfWZ1bmN0aW9uIHZnKGUpe2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTt2YXIgdD0oZS5jaGlsZHJlbnx8W10pLm1hcCh2Zyk7cmV0dXJuIGUudGFnPT09YHBhdGhgJiZlLmF0dHJpYnV0ZXMmJmBmaWxsYGluIGUuYXR0cmlidXRlcz8kaCgkaCh7fSxlKSx7fSx7YXR0cmlidXRlczokaCgkaCh7fSxlLmF0dHJpYnV0ZXMpLHt9LHtmaWxsOnZvaWQgMH0pLGNoaWxkcmVuOnR9KTokaCgkaCh7fSxlKSx7fSx7Y2hpbGRyZW46dH0pfWZ1bmN0aW9uIHlnKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHI9dC5ncmFkaWVudEZpbGwsaT1yPT09dm9pZCAwP251bGw6cixhPWVnKHQsZmcpLG89aXx8YGZpbGxgaW4gbj92ZyhlKTplLHM9KG8uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHlnKGUse30se30pfSksYz1PYmplY3Qua2V5cyhvLmF0dHJpYnV0ZXN8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmF0dHJpYnV0ZXNbdF07c3dpdGNoKHQpe2Nhc2VgY2xhc3NgOmUuY2xhc3M9Z2cobik7YnJlYWs7Y2FzZWBzdHlsZWA6ZS5zdHlsZT1oZyhuKTticmVhaztkZWZhdWx0OmUuYXR0cnNbdF09bn1yZXR1cm4gZX0se2F0dHJzOnt9LGNsYXNzOnt9LHN0eWxlOnt9fSk7bi5jbGFzczt2YXIgbD1uLnN0eWxlLHU9bD09PXZvaWQgMD97fTpsLGQ9ZWcobixwZyk7aWYoaSYmaS5pZCYmKGkudHlwZT09PWBsaW5lYXJgfHxpLnR5cGU9PT1gcmFkaWFsYCkpe3ZhciBmPWkudHlwZSxwPWkuc3RvcHMsbT1wPT09dm9pZCAwP1tdOnAsaD1pLmlkLGc9ZWcoaSxtZyksXz1HKGY9PT1gbGluZWFyYD9gbGluZWFyR3JhZGllbnRgOmByYWRpYWxHcmFkaWVudGAsJGgoJGgoe30sZykse30se2lkOmh9KSxtLm1hcChfZykpO3JldHVybiBHKG8udGFnLCRoKCRoKCRoKCRoKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOiRoKCRoKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSx7fSx7ZmlsbDpgdXJsKCMke2h9KWB9KSxbX10uY29uY2F0KG5nKHMpKSl9cmV0dXJuIEcoZS50YWcsJGgoJGgoJGgoe30sYSkse30se2NsYXNzOmMuY2xhc3Msc3R5bGU6JGgoJGgoe30sYy5zdHlsZSksdSl9LGMuYXR0cnMpLGQpLHMpfXZhciBiZz0hMTt0cnl7Ymc9ITB9Y2F0Y2h7fWZ1bmN0aW9uIHhnKCl7aWYoIWJnJiZjb25zb2xlJiZ0eXBlb2YgY29uc29sZS5lcnJvcj09YGZ1bmN0aW9uYCl7dmFyIGU7KGU9Y29uc29sZSkuZXJyb3IuYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBTZyhlKXtpZihlJiZhZyhlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSYmZS5pY29uKXJldHVybiBlO2lmKEdoLmljb24pcmV0dXJuIEdoLmljb24oZSk7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoYWcoZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUpcmV0dXJuIGU7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg9PT0yKXJldHVybntwcmVmaXg6ZVswXSxpY29uTmFtZTplWzFdfTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJue3ByZWZpeDpgZmFzYCxpY29uTmFtZTplfX12YXIgQ2c9UCh7bmFtZTpgRm9udEF3ZXNvbWVJY29uYCxwcm9wczp7Ym9yZGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZml4ZWRXaWR0aDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsaXA6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bITAsITEsYGhvcml6b250YWxgLGB2ZXJ0aWNhbGAsYGJvdGhgXS5pbmRleE9mKGUpPi0xfX0saWNvbjp7dHlwZTpbT2JqZWN0LEFycmF5LFN0cmluZ10scmVxdWlyZWQ6ITB9LG1hc2s6e3R5cGU6W09iamVjdCxBcnJheSxTdHJpbmddLGRlZmF1bHQ6bnVsbH0sbWFza0lkOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LGxpc3RJdGVtOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scHVsbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYHJpZ2h0YCxgbGVmdGBdLmluZGV4T2YoZSk+LTF9fSxwdWxzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHJvdGF0aW9uOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybls5MCwxODAsMjcwXS5pbmRleE9mKE51bWJlci5wYXJzZUludChlLDEwKSk+LTF9fSxyb3RhdGVCeTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHN3YXBPcGFjaXR5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYDJ4c2AsYHhzYCxgc21gLGBsZ2AsYHhsYCxgMnhsYCxgMXhgLGAyeGAsYDN4YCxgNHhgLGA1eGAsYDZ4YCxgN3hgLGA4eGAsYDl4YCxgMTB4YF0uaW5kZXhPZihlKT4tMX19LHNwaW46e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx0cmFuc2Zvcm06e3R5cGU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHQ6bnVsbH0sc3ltYm9sOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sdGl0bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0sdGl0bGVJZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSxpbnZlcnNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYm91bmNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2hha2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxiZWF0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmFkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJlYXRGYWRlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxhc2g6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluUHVsc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluUmV2ZXJzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdpZHRoQXV0bzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNhbnZhc1NxdWFyZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNhbnZhc1Jvb215Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZ3JhZGllbnRGaWxsOnt0eXBlOk9iamVjdCxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZS5pZCE9YHN0cmluZ2B8fCFlLmlkPyhjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lSWNvbjogZ3JhZGllbnRGaWxsLmlkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCksITEpOmUudHlwZSE9PWBsaW5lYXJgJiZlLnR5cGUhPT1gcmFkaWFsYD8oY29uc29sZS53YXJuKGBGb250QXdlc29tZUljb246IGdyYWRpZW50RmlsbC50eXBlIG11c3QgYmUgImxpbmVhciIgb3IgInJhZGlhbCJgKSwhMSk6ITB9fSxmbGlwMzYwOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYnV6ejp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsb2F0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0samVsbG86e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwNDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwODp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHN3aW5nOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sd2FnOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LHNldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hdHRycyxyPVcoZnVuY3Rpb24oKXtyZXR1cm4gU2coZS5pY29uKX0pLGk9VyhmdW5jdGlvbigpe3JldHVybiBzZyhgY2xhc3Nlc2AsY2coZSkpfSksYT1XKGZ1bmN0aW9uKCl7cmV0dXJuIHNnKGB0cmFuc2Zvcm1gLHR5cGVvZiBlLnRyYW5zZm9ybT09YHN0cmluZ2A/R2gudHJhbnNmb3JtKGUudHJhbnNmb3JtKTplLnRyYW5zZm9ybSl9KSxvPVcoZnVuY3Rpb24oKXtyZXR1cm4gc2coYG1hc2tgLFNnKGUubWFzaykpfSkscz1XKGZ1bmN0aW9uKCl7dmFyIHQ9JGgoJGgoJGgoJGgoe30saS52YWx1ZSksYS52YWx1ZSksby52YWx1ZSkse30se3N5bWJvbDplLnN5bWJvbCxtYXNrSWQ6ZS5tYXNrSWR9KTtyZXR1cm4gdC50aXRsZT1lLnRpdGxlLHQudGl0bGVJZD1lLnRpdGxlSWQsS2goci52YWx1ZSx0KX0pO0RyKHMsZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHhnKGBDb3VsZCBub3QgZmluZCBvbmUgb3IgbW9yZSBpY29uKHMpYCxyLnZhbHVlLG8udmFsdWUpfSx7aW1tZWRpYXRlOiEwfSksZS5ncmFkaWVudEZpbGwmJmUuc3ltYm9sJiZ4ZyhgZ3JhZGllbnRGaWxsIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBzeW1ib2wgaXMgdHJ1ZSBhbmQgd2lsbCBiZSBpZ25vcmVkYCk7dmFyIGM9VyhmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlP3lnKHMudmFsdWUuYWJzdHJhY3RbMF0se2dyYWRpZW50RmlsbDplLnN5bWJvbD9udWxsOmUuZ3JhZGllbnRGaWxsfSxuKTpudWxsfSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMudmFsdWV9fX0pLHdnPXR5cGVvZiB3aW5kb3c8YHVgLFRnLEVnPWU9PlRnPWUsRGc9U3ltYm9sKCk7ZnVuY3Rpb24gT2coZSl7cmV0dXJuIGUmJnR5cGVvZiBlPT1gb2JqZWN0YCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWAmJnR5cGVvZiBlLnRvSlNPTiE9YGZ1bmN0aW9uYH12YXIga2c9dHlwZW9mIHdpbmRvdz09YG9iamVjdGAmJndpbmRvdy53aW5kb3c9PT13aW5kb3c/d2luZG93OnR5cGVvZiBzZWxmPT1gb2JqZWN0YCYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOnR5cGVvZiBnbG9iYWw9PWBvYmplY3RgJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsP2dsb2JhbDp0eXBlb2YgZ2xvYmFsVGhpcz09YG9iamVjdGA/Z2xvYmFsVGhpczp7SFRNTEVsZW1lbnQ6bnVsbH07ZnVuY3Rpb24gQWcoZSx7YXV0b0JvbTp0PSExfT17fSl7cmV0dXJuIHQmJi9eXHMqKD86dGV4dFwvXFMqfGFwcGxpY2F0aW9uXC94bWx8XFMqXC9cUypcK3htbClccyo7LipjaGFyc2V0XHMqPVxzKnV0Zi04L2kudGVzdChlLnR5cGUpP25ldyBCbG9iKFtg77u/YCxlXSx7dHlwZTplLnR5cGV9KTplfWZ1bmN0aW9uIGpnKGUsdCxuKXtsZXQgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7ci5vcGVuKGBHRVRgLGUpLHIucmVzcG9uc2VUeXBlPWBibG9iYCxyLm9ubG9hZD1mdW5jdGlvbigpe0lnKHIucmVzcG9uc2UsdCxuKX0sci5vbmVycm9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihgY291bGQgbm90IGRvd25sb2FkIGZpbGVgKX0sci5zZW5kKCl9ZnVuY3Rpb24gTWcoZSl7bGV0IHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3Qub3BlbihgSEVBRGAsZSwhMSk7dHJ5e3Quc2VuZCgpfWNhdGNoe31yZXR1cm4gdC5zdGF0dXM+PTIwMCYmdC5zdGF0dXM8PTI5OX1mdW5jdGlvbiBOZyhlKXt0cnl7ZS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KGBjbGlja2ApKX1jYXRjaHtsZXQgdD1uZXcgTW91c2VFdmVudChgY2xpY2tgLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsdmlldzp3aW5kb3csZGV0YWlsOjAsc2NyZWVuWDo4MCxzY3JlZW5ZOjIwLGNsaWVudFg6ODAsY2xpZW50WToyMCxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6bnVsbH0pO2UuZGlzcGF0Y2hFdmVudCh0KX19dmFyIFBnPXR5cGVvZiBuYXZpZ2F0b3I9PWBvYmplY3RgP25hdmlnYXRvcjp7dXNlckFnZW50OmBgfSxGZz0vTWFjaW50b3NoLy50ZXN0KFBnLnVzZXJBZ2VudCkmJi9BcHBsZVdlYktpdC8udGVzdChQZy51c2VyQWdlbnQpJiYhL1NhZmFyaS8udGVzdChQZy51c2VyQWdlbnQpLElnPXdnP3R5cGVvZiBIVE1MQW5jaG9yRWxlbWVudDxgdWAmJmBkb3dubG9hZGBpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFGZz9MZzpgbXNTYXZlT3JPcGVuQmxvYmBpbiBQZz9SZzp6ZzooKT0+e307ZnVuY3Rpb24gTGcoZSx0PWBkb3dubG9hZGAsbil7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3IuZG93bmxvYWQ9dCxyLnJlbD1gbm9vcGVuZXJgLHR5cGVvZiBlPT1gc3RyaW5nYD8oci5ocmVmPWUsci5vcmlnaW49PT1sb2NhdGlvbi5vcmlnaW4/Tmcocik6TWcoci5ocmVmKT9qZyhlLHQsbik6KHIudGFyZ2V0PWBfYmxhbmtgLE5nKHIpKSk6KHIuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHIuaHJlZil9LDRlNCksc2V0VGltZW91dChmdW5jdGlvbigpe05nKHIpfSwwKSl9ZnVuY3Rpb24gUmcoZSx0PWBkb3dubG9hZGAsbil7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtpZihNZyhlKSlqZyhlLHQsbik7ZWxzZXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7dC5ocmVmPWUsdC50YXJnZXQ9YF9ibGFua2Asc2V0VGltZW91dChmdW5jdGlvbigpe05nKHQpfSl9fWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoQWcoZSxuKSx0KX1mdW5jdGlvbiB6ZyhlLHQsbixyKXtpZihyfHw9b3BlbihgYCxgX2JsYW5rYCksciYmKHIuZG9jdW1lbnQudGl0bGU9ci5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1gZG93bmxvYWRpbmcuLi5gKSx0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGpnKGUsdCxuKTtsZXQgaT1lLnR5cGU9PT1gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCxhPS9jb25zdHJ1Y3Rvci9pLnRlc3QoU3RyaW5nKGtnLkhUTUxFbGVtZW50KSl8fGBzYWZhcmlgaW4ga2csbz0vQ3JpT1NcL1tcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChvfHxpJiZhfHxGZykmJnR5cGVvZiBGaWxlUmVhZGVyPGB1YCl7bGV0IHQ9bmV3IEZpbGVSZWFkZXI7dC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXtsZXQgZT10LnJlc3VsdDtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgcj1udWxsLEVycm9yKGBXcm9uZyByZWFkZXIucmVzdWx0IHR5cGVgKTtlPW8/ZTplLnJlcGxhY2UoL15kYXRhOlteO10qOy8sYGRhdGE6YXR0YWNobWVudC9maWxlO2ApLHI/ci5sb2NhdGlvbi5ocmVmPWU6bG9jYXRpb24uYXNzaWduKGUpLHI9bnVsbH0sdC5yZWFkQXNEYXRhVVJMKGUpfWVsc2V7bGV0IHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChlKTtyP3IubG9jYXRpb24uYXNzaWduKHQpOmxvY2F0aW9uLmhyZWY9dCxyPW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwodCl9LDRlNCl9fXZhcnthc3NpZ246Qmd9PU9iamVjdDtmdW5jdGlvbiBWZygpe2xldCBlPVBlKCEwKSx0PWUucnVuKCgpPT5qKHt9KSksbj1bXSxyPVtdLGk9c24oe2luc3RhbGwoZSl7RWcoaSksaS5fYT1lLGUucHJvdmlkZShEZyxpKSxlLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRwaW5pYT1pLHIuZm9yRWFjaChlPT5uLnB1c2goZSkpLHI9W119LHVzZShlKXtyZXR1cm4gdGhpcy5fYT9uLnB1c2goZSk6ci5wdXNoKGUpLHRoaXN9LF9wOm4sX2E6bnVsbCxfZTplLF9zOm5ldyBNYXAsc3RhdGU6dH0pO3JldHVybiBpfXZhciBIZz0oKT0+e307ZnVuY3Rpb24gVWcoZSx0LG4scj1IZyl7ZS5hZGQodCk7bGV0IGk9KCk9PntlLmRlbGV0ZSh0KSYmcigpfTtyZXR1cm4hbiYmRmUoKSYmSWUoaSksaX1mdW5jdGlvbiBXZyhlLC4uLnQpe2UuZm9yRWFjaChlPT57ZSguLi50KX0pfXZhciBHZz1lPT5lKCksS2c9U3ltYm9sKCkscWc9U3ltYm9sKCk7ZnVuY3Rpb24gSmcoZSx0KXtlIGluc3RhbmNlb2YgTWFwJiZ0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaCgodCxuKT0+ZS5zZXQobix0KSk6ZSBpbnN0YW5jZW9mIFNldCYmdCBpbnN0YW5jZW9mIFNldCYmdC5mb3JFYWNoKGUuYWRkLGUpO2ZvcihsZXQgbiBpbiB0KXtpZighT2JqZWN0Lmhhc093bih0LG4pKWNvbnRpbnVlO2xldCByPXRbbl0saT1lW25dO2Vbbl09T2coaSkmJk9nKHIpJiZPYmplY3QuaGFzT3duKGUsbikmJiF1bihyKSYmIW5uKHIpP0pnKGkscik6cn1yZXR1cm4gZX12YXIgWWc9U3ltYm9sKCk7ZnVuY3Rpb24gWGcoZSl7cmV0dXJuIWV8fHR5cGVvZiBlIT1gb2JqZWN0YHx8IU9iamVjdC5oYXNPd24oZSxZZyl9dmFye2Fzc2lnbjpaZ309T2JqZWN0O2Z1bmN0aW9uIFFnKGUpe3JldHVybiEhKHVuKGUpJiZlLmVmZmVjdCl9ZnVuY3Rpb24gJGcoZSx0LG4scil7bGV0e3N0YXRlOmksYWN0aW9uczphLGdldHRlcnM6b309dCxzPW4uc3RhdGUudmFsdWVbZV0sYztmdW5jdGlvbiBsKCl7cmV0dXJuIHN8fChuLnN0YXRlLnZhbHVlW2VdPWk/aSgpOnt9KSxaZyhibihuLnN0YXRlLnZhbHVlW2VdKSxhLE9iamVjdC5rZXlzKG98fHt9KS5yZWR1Y2UoKHQscik9Pih0W3JdPXNuKFcoKCk9PntFZyhuKTtsZXQgdD1uLl9zLmdldChlKTtyZXR1cm4gb1tyXS5jYWxsKHQsdCl9KSksdCkse30pKX1yZXR1cm4gYz1lXyhlLGwsdCxuLHIsITApLGN9ZnVuY3Rpb24gZV8oZSx0LG49e30scixpLGEpe2xldCBvLHM9Wmcoe2FjdGlvbnM6e319LG4pLGM9e2RlZXA6ITB9LGwsdSxkPW5ldyBTZXQsZj1uZXcgU2V0LHAsbT1yLnN0YXRlLnZhbHVlW2VdOyFhJiYhbSYmKHIuc3RhdGUudmFsdWVbZV09e30pO2xldCBoO2Z1bmN0aW9uIGcodCl7bGV0IG47bD11PSExLHR5cGVvZiB0PT1gZnVuY3Rpb25gPyh0KHIuc3RhdGUudmFsdWVbZV0pLG49e3R5cGU6YHBhdGNoIGZ1bmN0aW9uYCxzdG9yZUlkOmUsZXZlbnRzOnB9KTooSmcoci5zdGF0ZS52YWx1ZVtlXSx0KSxuPXt0eXBlOmBwYXRjaCBvYmplY3RgLHBheWxvYWQ6dCxzdG9yZUlkOmUsZXZlbnRzOnB9KTtsZXQgaT1oPVN5bWJvbCgpOyRuKCkudGhlbigoKT0+e2g9PT1pJiYobD0hMCl9KSx1PSEwLFdnKGQsbixyLnN0YXRlLnZhbHVlW2VdKX1sZXQgXz1hP2Z1bmN0aW9uKCl7bGV0e3N0YXRlOmV9PW4sdD1lP2UoKTp7fTt0aGlzLiRwYXRjaChlPT57WmcoZSx0KX0pfTpIZztmdW5jdGlvbiB2KCl7by5zdG9wKCksZC5jbGVhcigpLGYuY2xlYXIoKSxyLl9zLmRlbGV0ZShlKX1sZXQgeT0odCxuPWBgKT0+e2lmKEtnIGluIHQpcmV0dXJuIHRbcWddPW4sdDtsZXQgaT1mdW5jdGlvbigpe0VnKHIpO2xldCBuPUFycmF5LmZyb20oYXJndW1lbnRzKSxhPW5ldyBTZXQsbz1uZXcgU2V0O2Z1bmN0aW9uIHMoZSl7YS5hZGQoZSl9ZnVuY3Rpb24gYyhlKXtvLmFkZChlKX1XZyhmLHthcmdzOm4sbmFtZTppW3FnXSxzdG9yZTpiLGFmdGVyOnMsb25FcnJvcjpjfSk7bGV0IGw7dHJ5e2w9dC5hcHBseSh0aGlzJiZ0aGlzLiRpZD09PWU/dGhpczpiLG4pfWNhdGNoKGUpe3Rocm93IFdnKG8sZSksZX1yZXR1cm4gbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKGU9PihXZyhhLGUpLGUpKS5jYXRjaChlPT4oV2cobyxlKSxQcm9taXNlLnJlamVjdChlKSkpOihXZyhhLGwpLGwpfTtyZXR1cm4gaVtLZ109ITAsaVtxZ109bixpfSxiPVp0KHtfcDpyLCRpZDplLCRvbkFjdGlvbjpVZy5iaW5kKG51bGwsZiksJHBhdGNoOmcsJHJlc2V0Ol8sJHN1YnNjcmliZSh0LG49e30pe2lmKGQuaGFzKHQpKXJldHVybiBIZztsZXQgaT1VZyhkLHQsbi5kZXRhY2hlZCwoKT0+YSgpKSxhPW8ucnVuKCgpPT5EcigoKT0+ci5zdGF0ZS52YWx1ZVtlXSxyPT57KG4uZmx1c2g9PT1gc3luY2A/dTpsKSYmdCh7c3RvcmVJZDplLHR5cGU6YGRpcmVjdGAsZXZlbnRzOnB9LHIpfSxaZyh7fSxjLG4pKSk7cmV0dXJuIGl9LCRkaXNwb3NlOnZ9KTtyLl9zLnNldChlLGIpO2xldCB4PShyLl9hJiZyLl9hLnJ1bldpdGhDb250ZXh0fHxHZykoKCk9PnIuX2UucnVuKCgpPT4obz1QZSgpKS5ydW4oKCk9PnQoe2FjdGlvbjp5fSkpKSk7Zm9yKGxldCB0IGluIHgpe2xldCBuPXhbdF07dW4obikmJiFRZyhuKXx8bm4obik/YXx8KG0mJlhnKG4pJiYodW4obik/bi52YWx1ZT1tW3RdOigobiBpbnN0YW5jZW9mIFNldHx8biBpbnN0YW5jZW9mIE1hcCkmJm4uY2xlYXIoKSxKZyhuLG1bdF0pKSksci5zdGF0ZS52YWx1ZVtlXVt0XT1uKTp0eXBlb2Ygbj09YGZ1bmN0aW9uYCYmKHhbdF09eShuLHQpLHMuYWN0aW9uc1t0XT1uKX1yZXR1cm4gWmcoYix4KSxaZyhBKGIpLHgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCIkc3RhdGUiLHtnZXQ6KCk9PnIuc3RhdGUudmFsdWVbZV0sc2V0OmU9PntnKHQ9PntaZyh0LGUpfSl9fSksci5fcC5mb3JFYWNoKGU9PntsZXQgdD1vLnJ1bigoKT0+ZSh7c3RvcmU6YixhcHA6ci5fYSxwaW5pYTpyLG9wdGlvbnM6c30pKTtaZyhiLHQpfSksbSYmYSYmbi5oeWRyYXRlJiZuLmh5ZHJhdGUoYi4kc3RhdGUsbSksbD0hMCx1PSEwLGJ9ZnVuY3Rpb24gdF8oZSx0LG4pe2xldCByLGk9dHlwZW9mIHQ9PWBmdW5jdGlvbmA7cj1pP246dDtmdW5jdGlvbiBhKG4sYSl7bGV0IG89eHIoKTtyZXR1cm4gbnx8PW8/YnIoRGcsbnVsbCk6bnVsbCxuJiZFZyhuKSxuPVRnLG4uX3MuaGFzKGUpfHwoaT9lXyhlLHQscixuKTokZyhlLHIsbikpLG4uX3MuZ2V0KGUpfXJldHVybiBhLiRpZD1lLGF9ZnVuY3Rpb24gbl8oZSl7bGV0IHQ9QShlKSxuPXt9O2ZvcihsZXQgciBpbiB0KXtsZXQgaT10W3JdO2k/LmVmZmVjdD9uW3JdPVcoe2dldDooKT0+ZVtyXSxzZXQodCl7ZVtyXT10fX0pOih1bihpKXx8bm4oaSkpJiYobltyXT1DbihlLHIpKX1yZXR1cm4gbn12YXIgcl89e3ByZWZpeDpgZmFiYCxpY29uTmFtZTpgZ2l0aHViYCxpY29uOls1MTIsNTEyLFtdLGBmMDliYCxgTTIxNi41IDM2Mi41Yy02Ni04LTExMi41LTU1LjUtMTEyLjUtMTE3IDAtMjUgOS01MiAyNC03MC02LjUtMTYuNS01LjUtNTEuNSAyLTY2IDIwLTIuNSA0NyA4IDYzIDIyLjUgMTktNiAzOS05IDYzLjUtOXM0NC41IDMgNjIuNSA4LjVjMTUuNS0xNCA0My0yNC41IDYzLTIyIDcgMTMuNSA4IDQ4LjUgMS41IDY1LjUgMTYgMTkgMjQuNSA0NC41IDI0LjUgNzAuNSAwIDYxLjUtNDYuNSAxMDgtMTEzLjUgMTE2LjUgMTcgMTEgMjguNSAzNSAyOC41IDYyLjVsMCA1MkMzMjMgNDkxLjUgMzM1LjUgNTAwIDM1MC41IDQ5NCA0NDEgNDU5LjUgNTEyIDM2OSA1MTIgMjU3IDUxMiAxMTUuNSAzOTcgMCAyNTUuNSAwUzAgMTE1LjUgMCAyNTdjMCAxMTEgNzAuNSAyMDMgMTY1LjUgMjM3LjUgMTMuNSA1IDI2LjUtNCAyNi41LTE3LjVsMC00MGMtNyAzLTE2IDUtMjQgNS0zMyAwLTUyLjUtMTgtNjYuNS01MS41LTUuNS0xMy41LTExLjUtMjEuNS0yMy0yMy02LS41LTgtMy04LTYgMC02IDEwLTEwLjUgMjAtMTAuNSAxNC41IDAgMjcgOSA0MCAyNy41IDEwIDE0LjUgMjAuNSAyMSAzMyAyMXMyMC41LTQuNSAzMi0xNmM4LjUtOC41IDE1LTE2IDIxLTIxemBdfSxpXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBtYWduaWZ5aW5nLWdsYXNzYCxpY29uOls1MTIsNTEyLFsxMjgyNjksYHNlYXJjaGBdLGBmMDAyYCxgTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6YF19LGFfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGtleWAsaWNvbjpbNTEyLDUxMixbMTI4MjczXSxgZjA4NGAsYE0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwemBdfSxvXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0LXVwYCxpY29uOlszODQsNTEyLFtgc29ydC1hc2NgXSxgZjBkZWAsYE0zMiAyMjRjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTc4LjUgOS40IDE2OS40bDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzNjQuOSAyMjQgMzUyIDIyNEwzMiAyMjR6YF19LHNfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGV5ZWAsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSxgZjA2ZWAsYE0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6YF19LGNfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoZXZyb24tdXBgLGljb246WzQ0OCw1MTIsW10sYGYwNzdgLGBNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnpgXX0sbF89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLXhtYXJrYCxpY29uOls1MTIsNTEyLFs2MTUzMixgdGltZXMtY2lyY2xlYCxgeG1hcmstY2lyY2xlYF0sYGYwNTdgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6YF19LHVfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNpcmNsZS1leGNsYW1hdGlvbmAsaWNvbjpbNTEyLDUxMixbYGV4Y2xhbWF0aW9uLWNpcmNsZWBdLGBmMDZhYCxgTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6YF19LGRfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoYXJ0LWxpbmVgLGljb246WzUxMiw1MTIsW2BsaW5lLWNoYXJ0YF0sYGYyMDFgLGBNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDAwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZMNjQgNjR6bTQwNi42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzIwIDIxMC43IDI2Mi42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNzMuNC03My40IDU3LjQgNTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4emBdfSxmXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGVja2AsaWNvbjpbNDQ4LDUxMixbMTAwMDMsMTAwMDRdLGBmMDBjYCxgTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6YF19LHBfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNvcnRgLGljb246WzM4NCw1MTIsW2B1bnNvcnRlZGBdLGBmMGRjYCxgTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6YF19LG1fPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHhtYXJrYCxpY29uOlszODQsNTEyLFsxMjg0NzMsMTAwMDUsMTAwMDYsMTAwNjAsMjE1LGBjbG9zZWAsYG11bHRpcGx5YCxgcmVtb3ZlYCxgdGltZXNgXSxgZjAwZGAsYE01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40emBdfSxoXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtY2hlY2tgLGljb246WzUxMiw1MTIsWzYxNTMzLGBjaGVjay1jaXJjbGVgXSxgZjA1OGAsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXpgXX0sZ189e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1kb3duYCxpY29uOls0NDgsNTEyLFtdLGBmMDc4YCxgTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6YF19LF9fPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGZpbGUtY3N2YCxpY29uOls1NzYsNTEyLFtdLGBmNmRkYCxgTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODAgMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwxNzYgMCAwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek0yNjQgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptMTM2IDBjLTI4LjcgMC01MiAyMy4zLTUyIDUyczIzLjMgNTIgNTIgNTJjNi42IDAgMTIgNS40IDEyIDEycy01LjQgMTItMTIgMTJsLTMyIDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJzLTIzLjMtNTItNTItNTJjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMjQgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI0IDB6bTk2IDBjLTExIDAtMjAgOS0yMCAyMGwwIDMxLjZjMCAzNS41IDEwLjUgNzAuMyAzMC4yIDk5LjhsNS4xIDcuN2MzLjcgNS42IDEwIDguOSAxNi42IDguOXMxMi45LTMuMyAxNi42LTguOWw1LjEtNy43YzE5LjctMjkuNiAzMC4yLTY0LjMgMzAuMi05OS44bDAtMzEuNmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMS42YzAgMTkuNi00LjEgMzguOS0xMiA1Ni43LTcuOS0xNy44LTEyLTM3LjEtMTItNTYuN2wwLTMxLjZjMC0xMS05LTIwLTIwLTIwemBdfSx2Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmB0cmlhbmdsZS1leGNsYW1hdGlvbmAsaWNvbjpbNTEyLDUxMixbOTg4OCxgZXhjbGFtYXRpb24tdHJpYW5nbGVgLGB3YXJuaW5nYF0sYGYwNzFgLGBNMjU2IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41UzQ4Ni4xIDQ4MCA0NzIgNDgwTDQwIDQ4MGMtMTQuMSAwLTI3LjItNy40LTM0LjQtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwYzctMTIuOSAyMC41LTIxIDM1LjItMjF6bTAgMzUyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNSAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3pgXX0seV89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY29weWAsaWNvbjpbNDQ4LDUxMixbXSxgZjBjNWAsYE0xOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMDAuNmMwLTE3LjQtNy4xLTM0LjEtMTkuNy00Ni4yTDM3MC42IDE3LjhDMzU4LjcgNi40IDM0Mi44IDAgMzI2LjMgMEwxOTIgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTY0IDAgMCAxNi0xOTIgMCAwLTI1NiAxNiAwIDAtNjQtMTYgMHpgXX0sYl89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgZXllLXNsYXNoYCxpY29uOls1NzYsNTEyLFtdLGBmMDcwYCxgTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6YF19LHhfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNvcnQtZG93bmAsaWNvbjpbMzg0LDUxMixbYHNvcnQtZGVzY2BdLGBmMGRkYCxgTTMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzMzMuNSA5LjQgMzQyLjZsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OHpgXX07ZnVuY3Rpb24gU18oZSl7dmFyIHQsbixyPWBgO2lmKHR5cGVvZiBlPT1gc3RyaW5nYHx8dHlwZW9mIGU9PWBudW1iZXJgKXIrPWU7ZWxzZSBpZih0eXBlb2YgZT09YG9iamVjdGApe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBpPWUubGVuZ3RoO2Zvcih0PTA7dDxpO3QrKyllW3RdJiYobj1TXyhlW3RdKSkmJihyJiYocis9YCBgKSxyKz1uKX1lbHNlIGZvcihuIGluIGUpZVtuXSYmKHImJihyKz1gIGApLHIrPW4pfXJldHVybiByfWZ1bmN0aW9uIENfKCl7Zm9yKHZhciBlLHQsbj0wLHI9YGAsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspKGU9YXJndW1lbnRzW25dKSYmKHQ9U18oZSkpJiYociYmKHIrPWAgYCkscis9dCk7cmV0dXJuIHJ9dmFyIHdfPWU9PnR5cGVvZiBlPT1gYm9vbGVhbmA/YCR7ZX1gOmU9PT0wP2AwYDplLFRfPUNfLEVfPShlLHQpPT5uPT57aWYodD8udmFyaWFudHM9PW51bGwpcmV0dXJuIFRfKGUsbj8uY2xhc3Msbj8uY2xhc3NOYW1lKTtsZXR7dmFyaWFudHM6cixkZWZhdWx0VmFyaWFudHM6aX09dCxhPU9iamVjdC5rZXlzKHIpLm1hcChlPT57bGV0IHQ9bj8uW2VdLGE9aT8uW2VdO2lmKHQ9PT1udWxsKXJldHVybiBudWxsO2xldCBvPXdfKHQpfHx3XyhhKTtyZXR1cm4gcltlXVtvXX0pLG89biYmT2JqZWN0LmVudHJpZXMobikucmVkdWNlKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gcj09PXZvaWQgMHx8KGVbbl09ciksZX0se30pO3JldHVybiBUXyhlLGEsdD8uY29tcG91bmRWYXJpYW50cz8ucmVkdWNlKChlLHQpPT57bGV0e2NsYXNzOm4sY2xhc3NOYW1lOnIsLi4uYX09dDtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkuZXZlcnkoZT0+e2xldFt0LG5dPWU7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5pbmNsdWRlcyh7Li4uaSwuLi5vfVt0XSk6ey4uLmksLi4ub31bdF09PT1ufSk/Wy4uLmUsbixyXTplfSxbXSksbj8uY2xhc3Msbj8uY2xhc3NOYW1lKX0sRF89KGUsdCk9PntsZXQgbj1BcnJheShlLmxlbmd0aCt0Lmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspblt0XT1lW3RdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKW5bZS5sZW5ndGgrcl09dFtyXTtyZXR1cm4gbn0sT189KGUsdCk9Pih7Y2xhc3NHcm91cElkOmUsdmFsaWRhdG9yOnR9KSxrXz0oZT1uZXcgTWFwLHQ9bnVsbCxuKT0+KHtuZXh0UGFydDplLHZhbGlkYXRvcnM6dCxjbGFzc0dyb3VwSWQ6bn0pLEFfPWAtYCxqXz1bXSxNXz1gYXJiaXRyYXJ5Li5gLE5fPWU9PntsZXQgdD1JXyhlKSx7Y29uZmxpY3RpbmdDbGFzc0dyb3VwczpuLGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczpyfT1lO3JldHVybntnZXRDbGFzc0dyb3VwSWQ6ZT0+e2lmKGUuc3RhcnRzV2l0aChgW2ApJiZlLmVuZHNXaXRoKGBdYCkpcmV0dXJuIEZfKGUpO2xldCBuPWUuc3BsaXQoQV8pO3JldHVybiBQXyhuLCsoblswXT09PWBgJiZuLmxlbmd0aD4xKSx0KX0sZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOihlLHQpPT57aWYodCl7bGV0IHQ9cltlXSxpPW5bZV07cmV0dXJuIHQ/aT9EXyhpLHQpOnQ6aXx8al99cmV0dXJuIG5bZV18fGpffX19LFBfPShlLHQsbik9PntpZihlLmxlbmd0aC10PT09MClyZXR1cm4gbi5jbGFzc0dyb3VwSWQ7bGV0IHI9ZVt0XSxpPW4ubmV4dFBhcnQuZ2V0KHIpO2lmKGkpe2xldCBuPVBfKGUsdCsxLGkpO2lmKG4pcmV0dXJuIG59bGV0IGE9bi52YWxpZGF0b3JzO2lmKGE9PT1udWxsKXJldHVybjtsZXQgbz10PT09MD9lLmpvaW4oQV8pOmUuc2xpY2UodCkuam9pbihBXykscz1hLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKXtsZXQgdD1hW2VdO2lmKHQudmFsaWRhdG9yKG8pKXJldHVybiB0LmNsYXNzR3JvdXBJZH19LEZfPWU9PmUuc2xpY2UoMSwtMSkuaW5kZXhPZihgOmApPT09LTE/dm9pZCAwOigoKT0+e2xldCB0PWUuc2xpY2UoMSwtMSksbj10LmluZGV4T2YoYDpgKSxyPXQuc2xpY2UoMCxuKTtyZXR1cm4gcj9NXytyOnZvaWQgMH0pKCksSV89ZT0+e2xldHt0aGVtZTp0LGNsYXNzR3JvdXBzOm59PWU7cmV0dXJuIExfKG4sdCl9LExfPShlLHQpPT57bGV0IG49a18oKTtmb3IobGV0IHIgaW4gZSl7bGV0IGk9ZVtyXTtSXyhpLG4scix0KX1yZXR1cm4gbn0sUl89KGUsdCxuLHIpPT57bGV0IGk9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxpO2ErKyl7bGV0IGk9ZVthXTt6XyhpLHQsbixyKX19LHpfPShlLHQsbixyKT0+e2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7Ql8oZSx0LG4pO3JldHVybn1pZih0eXBlb2YgZT09YGZ1bmN0aW9uYCl7Vl8oZSx0LG4scik7cmV0dXJufUhfKGUsdCxuLHIpfSxCXz0oZSx0LG4pPT57bGV0IHI9ZT09PWBgP3Q6VV8odCxlKTtyLmNsYXNzR3JvdXBJZD1ufSxWXz0oZSx0LG4scik9PntpZihXXyhlKSl7Ul8oZShyKSx0LG4scik7cmV0dXJufXQudmFsaWRhdG9ycz09PW51bGwmJih0LnZhbGlkYXRvcnM9W10pLHQudmFsaWRhdG9ycy5wdXNoKE9fKG4sZSkpfSxIXz0oZSx0LG4scik9PntsZXQgaT1PYmplY3QuZW50cmllcyhlKSxhPWkubGVuZ3RoO2ZvcihsZXQgZT0wO2U8YTtlKyspe2xldFthLG9dPWlbZV07Ul8obyxVXyh0LGEpLG4scil9fSxVXz0oZSx0KT0+e2xldCBuPWUscj10LnNwbGl0KEFfKSxpPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8aTtlKyspe2xldCB0PXJbZV0saT1uLm5leHRQYXJ0LmdldCh0KTtpfHwoaT1rXygpLG4ubmV4dFBhcnQuc2V0KHQsaSkpLG49aX1yZXR1cm4gbn0sV189ZT0+YGlzVGhlbWVHZXR0ZXJgaW4gZSYmZS5pc1RoZW1lR2V0dGVyPT09ITAsR189ZT0+e2lmKGU8MSlyZXR1cm57Z2V0OigpPT52b2lkIDAsc2V0OigpPT57fX07bGV0IHQ9MCxuPU9iamVjdC5jcmVhdGUobnVsbCkscj1PYmplY3QuY3JlYXRlKG51bGwpLGk9KGksYSk9PntuW2ldPWEsdCsrLHQ+ZSYmKHQ9MCxyPW4sbj1PYmplY3QuY3JlYXRlKG51bGwpKX07cmV0dXJue2dldChlKXtsZXQgdD1uW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHQ7aWYoKHQ9cltlXSkhPT12b2lkIDApcmV0dXJuIGkoZSx0KSx0fSxzZXQoZSx0KXtlIGluIG4/bltlXT10OmkoZSx0KX19fSxLXz1gIWAscV89YDpgLEpfPVtdLFlfPShlLHQsbixyLGkpPT4oe21vZGlmaWVyczplLGhhc0ltcG9ydGFudE1vZGlmaWVyOnQsYmFzZUNsYXNzTmFtZTpuLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246cixpc0V4dGVybmFsOml9KSxYXz1lPT57bGV0e3ByZWZpeDp0LGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lOm59PWUscj1lPT57bGV0IHQ9W10sbj0wLHI9MCxpPTAsYSxvPWUubGVuZ3RoO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBvPWVbc107aWYobj09PTAmJnI9PT0wKXtpZihvPT09cV8pe3QucHVzaChlLnNsaWNlKGkscykpLGk9cysxO2NvbnRpbnVlfWlmKG89PT1gL2Ape2E9cztjb250aW51ZX19bz09PWBbYD9uKys6bz09PWBdYD9uLS06bz09PWAoYD9yKys6bz09PWApYCYmci0tfWxldCBzPXQubGVuZ3RoPT09MD9lOmUuc2xpY2UoaSksYz1zLGw9ITE7cy5lbmRzV2l0aChLXyk/KGM9cy5zbGljZSgwLC0xKSxsPSEwKTpzLnN0YXJ0c1dpdGgoS18pJiYoYz1zLnNsaWNlKDEpLGw9ITApO2xldCB1PWEmJmE+aT9hLWk6dm9pZCAwO3JldHVybiBZXyh0LGwsYyx1KX07aWYodCl7bGV0IGU9dCtxXyxuPXI7cj10PT50LnN0YXJ0c1dpdGgoZSk/bih0LnNsaWNlKGUubGVuZ3RoKSk6WV8oSl8sITEsdCx2b2lkIDAsITApfWlmKG4pe2xldCBlPXI7cj10PT5uKHtjbGFzc05hbWU6dCxwYXJzZUNsYXNzTmFtZTplfSl9cmV0dXJuIHJ9LFpfPWU9PntsZXQgdD1uZXcgTWFwO3JldHVybiBlLm9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzLmZvckVhY2goKGUsbik9Pnt0LnNldChlLDFlNituKX0pLGU9PntsZXQgbj1bXSxyPVtdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLG89YVswXT09PWBbYCxzPXQuaGFzKGEpO298fHM/KHIubGVuZ3RoPjAmJihyLnNvcnQoKSxuLnB1c2goLi4ucikscj1bXSksbi5wdXNoKGEpKTpyLnB1c2goYSl9cmV0dXJuIHIubGVuZ3RoPjAmJihyLnNvcnQoKSxuLnB1c2goLi4ucikpLG59fSxRXz1lPT4oe2NhY2hlOkdfKGUuY2FjaGVTaXplKSxwYXJzZUNsYXNzTmFtZTpYXyhlKSxzb3J0TW9kaWZpZXJzOlpfKGUpLHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwSWRzOiRfKGUpLC4uLk5fKGUpfSksJF89ZT0+e2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1lLnBvc3RmaXhMb29rdXBDbGFzc0dyb3VwcztpZihuKWZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXRbbltlXV09ITA7cmV0dXJuIHR9LGV2PS9ccysvLHR2PShlLHQpPT57bGV0e3BhcnNlQ2xhc3NOYW1lOm4sZ2V0Q2xhc3NHcm91cElkOnIsZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOmksc29ydE1vZGlmaWVyczphLHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwSWRzOm99PXQscz1bXSxjPWUudHJpbSgpLnNwbGl0KGV2KSxsPWBgO2ZvcihsZXQgZT1jLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgdD1jW2VdLHtpc0V4dGVybmFsOnUsbW9kaWZpZXJzOmQsaGFzSW1wb3J0YW50TW9kaWZpZXI6ZixiYXNlQ2xhc3NOYW1lOnAsbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjptfT1uKHQpO2lmKHUpe2w9dCsobC5sZW5ndGg+MD9gIGArbDpsKTtjb250aW51ZX1sZXQgaD0hIW0sZztpZihoKXtnPXIocC5zdWJzdHJpbmcoMCxtKSk7bGV0IGU9ZyYmb1tnXT9yKHApOnZvaWQgMDtlJiZlIT09ZyYmKGc9ZSxoPSExKX1lbHNlIGc9cihwKTtpZighZyl7aWYoIWgpe2w9dCsobC5sZW5ndGg+MD9gIGArbDpsKTtjb250aW51ZX1pZihnPXIocCksIWcpe2w9dCsobC5sZW5ndGg+MD9gIGArbDpsKTtjb250aW51ZX1oPSExfWxldCBfPWQubGVuZ3RoPT09MD9gYDpkLmxlbmd0aD09PTE/ZFswXTphKGQpLmpvaW4oYDpgKSx2PWY/XytLXzpfLHk9ditnO2lmKHMuaW5kZXhPZih5KT4tMSljb250aW51ZTtzLnB1c2goeSk7bGV0IGI9aShnLGgpO2ZvcihsZXQgZT0wO2U8Yi5sZW5ndGg7KytlKXtsZXQgdD1iW2VdO3MucHVzaCh2K3QpfWw9dCsobC5sZW5ndGg+MD9gIGArbDpsKX1yZXR1cm4gbH0sbnY9KC4uLmUpPT57bGV0IHQ9MCxuLHIsaT1gYDtmb3IoO3Q8ZS5sZW5ndGg7KShuPWVbdCsrXSkmJihyPXJ2KG4pKSYmKGkmJihpKz1gIGApLGkrPXIpO3JldHVybiBpfSxydj1lPT57aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBlO2xldCB0LG49YGA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspZVtyXSYmKHQ9cnYoZVtyXSkpJiYobiYmKG4rPWAgYCksbis9dCk7cmV0dXJuIG59LGl2PShlLC4uLnQpPT57bGV0IG4scixpLGEsbz1vPT4obj1RXyh0LnJlZHVjZSgoZSx0KT0+dChlKSxlKCkpKSxyPW4uY2FjaGUuZ2V0LGk9bi5jYWNoZS5zZXQsYT1zLHMobykpLHM9ZT0+e2xldCB0PXIoZSk7aWYodClyZXR1cm4gdDtsZXQgYT10dihlLG4pO3JldHVybiBpKGUsYSksYX07cmV0dXJuIGE9bywoLi4uZSk9PmEobnYoLi4uZSkpfSxhdj1bXSxvdj1lPT57bGV0IHQ9dD0+dFtlXXx8YXY7cmV0dXJuIHQuaXNUaGVtZUdldHRlcj0hMCx0fSxzdj0vXlxbKD86KFx3W1x3LV0qKTopPyguKylcXSQvaSxjdj0vXlwoKD86KFx3W1x3LV0qKTopPyguKylcKSQvaSxsdj0vXlxkKyg/OlwuXGQrKT9cL1xkKyg/OlwuXGQrKT8kLyx1dj0vXihcZCsoXC5cZCspPyk/KHhzfHNtfG1kfGxnfHhsKSQvLGR2PS9cZCsoJXxweHxyP2VtfFtzZGxdP3YoW2h3aWJdfG1pbnxtYXgpfHB0fHBjfGlufGNtfG1tfGNhcHxjaHxleHxyP2xofGNxKHd8aHxpfGJ8bWlufG1heCkpfFxiKGNhbGN8bWlufG1heHxjbGFtcClcKC4rXCl8XjAkLyxmdj0vXihyZ2JhP3xoc2xhP3xod2J8KG9rKT8obGFifGxjaCl8Y29sb3ItbWl4KVwoLitcKSQvLHB2PS9eKGluc2V0Xyk/LT8oKFxkKyk/XC4/KFxkKylbYS16XSt8MClfLT8oKFxkKyk/XC4/KFxkKylbYS16XSt8MCkvLG12PS9eKHVybHxpbWFnZXxpbWFnZS1zZXR8Y3Jvc3MtZmFkZXxlbGVtZW50fChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbHxjb25pYyktZ3JhZGllbnQpXCguK1wpJC8saHY9ZT0+bHYudGVzdChlKSxZPWU9PiEhZSYmIU51bWJlci5pc05hTihOdW1iZXIoZSkpLGd2PWU9PiEhZSYmTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIoZSkpLF92PWU9PmUuZW5kc1dpdGgoYCVgKSYmWShlLnNsaWNlKDAsLTEpKSx2dj1lPT51di50ZXN0KGUpLHl2PSgpPT4hMCxidj1lPT5kdi50ZXN0KGUpJiYhZnYudGVzdChlKSx4dj0oKT0+ITEsU3Y9ZT0+cHYudGVzdChlKSxDdj1lPT5tdi50ZXN0KGUpLHd2PWU9PiFYKGUpJiYhWihlKSxUdj1lPT5lLnN0YXJ0c1dpdGgoYEBjb250YWluZXJgKSYmKGVbMTBdPT09YC9gJiZlWzExXSE9PXZvaWQgMHx8ZVsxMV09PT1gc2AmJmVbMTZdIT09dm9pZCAwJiZlLnN0YXJ0c1dpdGgoYC1zaXplL2AsMTApfHxlWzExXT09PWBuYCYmZVsxOF0hPT12b2lkIDAmJmUuc3RhcnRzV2l0aChgLW5vcm1hbC9gLDEwKSksRXY9ZT0+VnYoZSxHdix4diksWD1lPT5zdi50ZXN0KGUpLER2PWU9PlZ2KGUsS3YsYnYpLE92PWU9PlZ2KGUscXYsWSksa3Y9ZT0+VnYoZSxZdix5diksQXY9ZT0+VnYoZSxKdix4diksanY9ZT0+VnYoZSxVdix4diksTXY9ZT0+VnYoZSxXdixDdiksTnY9ZT0+VnYoZSxYdixTdiksWj1lPT5jdi50ZXN0KGUpLFB2PWU9Pkh2KGUsS3YpLEZ2PWU9Pkh2KGUsSnYpLEl2PWU9Pkh2KGUsVXYpLEx2PWU9Pkh2KGUsR3YpLFJ2PWU9Pkh2KGUsV3YpLHp2PWU9Pkh2KGUsWHYsITApLEJ2PWU9Pkh2KGUsWXYsITApLFZ2PShlLHQsbik9PntsZXQgcj1zdi5leGVjKGUpO3JldHVybiByP3JbMV0/dChyWzFdKTpuKHJbMl0pOiExfSxIdj0oZSx0LG49ITEpPT57bGV0IHI9Y3YuZXhlYyhlKTtyZXR1cm4gcj9yWzFdP3QoclsxXSk6bjohMX0sVXY9ZT0+ZT09PWBwb3NpdGlvbmB8fGU9PT1gcGVyY2VudGFnZWAsV3Y9ZT0+ZT09PWBpbWFnZWB8fGU9PT1gdXJsYCxHdj1lPT5lPT09YGxlbmd0aGB8fGU9PT1gc2l6ZWB8fGU9PT1gYmctc2l6ZWAsS3Y9ZT0+ZT09PWBsZW5ndGhgLHF2PWU9PmU9PT1gbnVtYmVyYCxKdj1lPT5lPT09YGZhbWlseS1uYW1lYCxZdj1lPT5lPT09YG51bWJlcmB8fGU9PT1gd2VpZ2h0YCxYdj1lPT5lPT09YHNoYWRvd2AsWnY9aXYoKCk9PntsZXQgZT1vdihgY29sb3JgKSx0PW92KGBmb250YCksbj1vdihgdGV4dGApLHI9b3YoYGZvbnQtd2VpZ2h0YCksaT1vdihgdHJhY2tpbmdgKSxhPW92KGBsZWFkaW5nYCksbz1vdihgYnJlYWtwb2ludGApLHM9b3YoYGNvbnRhaW5lcmApLGM9b3YoYHNwYWNpbmdgKSxsPW92KGByYWRpdXNgKSx1PW92KGBzaGFkb3dgKSxkPW92KGBpbnNldC1zaGFkb3dgKSxmPW92KGB0ZXh0LXNoYWRvd2ApLHA9b3YoYGRyb3Atc2hhZG93YCksbT1vdihgYmx1cmApLGg9b3YoYHBlcnNwZWN0aXZlYCksZz1vdihgYXNwZWN0YCksXz1vdihgZWFzZWApLHY9b3YoYGFuaW1hdGVgKSx5PSgpPT5bYGF1dG9gLGBhdm9pZGAsYGFsbGAsYGF2b2lkLXBhZ2VgLGBwYWdlYCxgbGVmdGAsYHJpZ2h0YCxgY29sdW1uYF0sYj0oKT0+W2BjZW50ZXJgLGB0b3BgLGBib3R0b21gLGBsZWZ0YCxgcmlnaHRgLGB0b3AtbGVmdGAsYGxlZnQtdG9wYCxgdG9wLXJpZ2h0YCxgcmlnaHQtdG9wYCxgYm90dG9tLXJpZ2h0YCxgcmlnaHQtYm90dG9tYCxgYm90dG9tLWxlZnRgLGBsZWZ0LWJvdHRvbWBdLHg9KCk9PlsuLi5iKCksWixYXSxTPSgpPT5bYGF1dG9gLGBoaWRkZW5gLGBjbGlwYCxgdmlzaWJsZWAsYHNjcm9sbGBdLEM9KCk9PltgYXV0b2AsYGNvbnRhaW5gLGBub25lYF0sdz0oKT0+W1osWCxjXSxlZT0oKT0+W2h2LGBmdWxsYCxgYXV0b2AsLi4udygpXSx0ZT0oKT0+W2d2LGBub25lYCxgc3ViZ3JpZGAsWixYXSxUPSgpPT5bYGF1dG9gLHtzcGFuOltgZnVsbGAsZ3YsWixYXX0sZ3YsWixYXSxuZT0oKT0+W2d2LGBhdXRvYCxaLFhdLHJlPSgpPT5bYGF1dG9gLGBtaW5gLGBtYXhgLGBmcmAsWixYXSxpZT0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGJldHdlZW5gLGBhcm91bmRgLGBldmVubHlgLGBzdHJldGNoYCxgYmFzZWxpbmVgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0sRT0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYHN0cmV0Y2hgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0sYWU9KCk9PltgYXV0b2AsLi4udygpXSxvZT0oKT0+W2h2LGBhdXRvYCxgZnVsbGAsYGR2d2AsYGR2aGAsYGx2d2AsYGx2aGAsYHN2d2AsYHN2aGAsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxzZT0oKT0+W2h2LGBzY3JlZW5gLGBmdWxsYCxgZHZ3YCxgbHZ3YCxgc3Z3YCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLGNlPSgpPT5baHYsYHNjcmVlbmAsYGZ1bGxgLGBsaGAsYGR2aGAsYGx2aGAsYHN2aGAsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxEPSgpPT5bZSxaLFhdLGxlPSgpPT5bLi4uYigpLEl2LGp2LHtwb3NpdGlvbjpbWixYXX1dLHVlPSgpPT5bYG5vLXJlcGVhdGAse3JlcGVhdDpbYGAsYHhgLGB5YCxgc3BhY2VgLGByb3VuZGBdfV0sZGU9KCk9PltgYXV0b2AsYGNvdmVyYCxgY29udGFpbmAsTHYsRXYse3NpemU6W1osWF19XSxmZT0oKT0+W192LFB2LER2XSxwZT0oKT0+W2BgLGBub25lYCxgZnVsbGAsbCxaLFhdLG1lPSgpPT5bYGAsWSxQdixEdl0saGU9KCk9Pltgc29saWRgLGBkYXNoZWRgLGBkb3R0ZWRgLGBkb3VibGVgXSxnZT0oKT0+W2Bub3JtYWxgLGBtdWx0aXBseWAsYHNjcmVlbmAsYG92ZXJsYXlgLGBkYXJrZW5gLGBsaWdodGVuYCxgY29sb3ItZG9kZ2VgLGBjb2xvci1idXJuYCxgaGFyZC1saWdodGAsYHNvZnQtbGlnaHRgLGBkaWZmZXJlbmNlYCxgZXhjbHVzaW9uYCxgaHVlYCxgc2F0dXJhdGlvbmAsYGNvbG9yYCxgbHVtaW5vc2l0eWBdLF9lPSgpPT5bWSxfdixJdixqdl0sdmU9KCk9PltgYCxgbm9uZWAsbSxaLFhdLHllPSgpPT5bYG5vbmVgLFksWixYXSxiZT0oKT0+W2Bub25lYCxZLFosWF0sTz0oKT0+W1ksWixYXSx4ZT0oKT0+W2h2LGBmdWxsYCwuLi53KCldO3JldHVybntjYWNoZVNpemU6NTAwLHRoZW1lOnthbmltYXRlOltgc3BpbmAsYHBpbmdgLGBwdWxzZWAsYGJvdW5jZWBdLGFzcGVjdDpbYHZpZGVvYF0sYmx1cjpbdnZdLGJyZWFrcG9pbnQ6W3Z2XSxjb2xvcjpbeXZdLGNvbnRhaW5lcjpbdnZdLCJkcm9wLXNoYWRvdyI6W3Z2XSxlYXNlOltgaW5gLGBvdXRgLGBpbi1vdXRgXSxmb250Olt3dl0sImZvbnQtd2VpZ2h0IjpbYHRoaW5gLGBleHRyYWxpZ2h0YCxgbGlnaHRgLGBub3JtYWxgLGBtZWRpdW1gLGBzZW1pYm9sZGAsYGJvbGRgLGBleHRyYWJvbGRgLGBibGFja2BdLCJpbnNldC1zaGFkb3ciOlt2dl0sbGVhZGluZzpbYG5vbmVgLGB0aWdodGAsYHNudWdgLGBub3JtYWxgLGByZWxheGVkYCxgbG9vc2VgXSxwZXJzcGVjdGl2ZTpbYGRyYW1hdGljYCxgbmVhcmAsYG5vcm1hbGAsYG1pZHJhbmdlYCxgZGlzdGFudGAsYG5vbmVgXSxyYWRpdXM6W3Z2XSxzaGFkb3c6W3Z2XSxzcGFjaW5nOltgcHhgLFldLHRleHQ6W3Z2XSwidGV4dC1zaGFkb3ciOlt2dl0sdHJhY2tpbmc6W2B0aWdodGVyYCxgdGlnaHRgLGBub3JtYWxgLGB3aWRlYCxgd2lkZXJgLGB3aWRlc3RgXX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbYGF1dG9gLGBzcXVhcmVgLGh2LFgsWixnXX1dLGNvbnRhaW5lcjpbYGNvbnRhaW5lcmBdLCJjb250YWluZXItdHlwZSI6W3siQGNvbnRhaW5lciI6W2BgLGBub3JtYWxgLGBzaXplYCxaLFhdfV0sImNvbnRhaW5lci1uYW1lZCI6W1R2XSxjb2x1bW5zOlt7Y29sdW1uczpbWSxYLFosc119XSwiYnJlYWstYWZ0ZXIiOlt7ImJyZWFrLWFmdGVyIjp5KCl9XSwiYnJlYWstYmVmb3JlIjpbeyJicmVhay1iZWZvcmUiOnkoKX1dLCJicmVhay1pbnNpZGUiOlt7ImJyZWFrLWluc2lkZSI6W2BhdXRvYCxgYXZvaWRgLGBhdm9pZC1wYWdlYCxgYXZvaWQtY29sdW1uYF19XSwiYm94LWRlY29yYXRpb24iOlt7ImJveC1kZWNvcmF0aW9uIjpbYHNsaWNlYCxgY2xvbmVgXX1dLGJveDpbe2JveDpbYGJvcmRlcmAsYGNvbnRlbnRgXX1dLGRpc3BsYXk6W2BibG9ja2AsYGlubGluZS1ibG9ja2AsYGlubGluZWAsYGZsZXhgLGBpbmxpbmUtZmxleGAsYHRhYmxlYCxgaW5saW5lLXRhYmxlYCxgdGFibGUtY2FwdGlvbmAsYHRhYmxlLWNlbGxgLGB0YWJsZS1jb2x1bW5gLGB0YWJsZS1jb2x1bW4tZ3JvdXBgLGB0YWJsZS1mb290ZXItZ3JvdXBgLGB0YWJsZS1oZWFkZXItZ3JvdXBgLGB0YWJsZS1yb3ctZ3JvdXBgLGB0YWJsZS1yb3dgLGBmbG93LXJvb3RgLGBncmlkYCxgaW5saW5lLWdyaWRgLGBjb250ZW50c2AsYGxpc3QtaXRlbWAsYGhpZGRlbmBdLHNyOltgc3Itb25seWAsYG5vdC1zci1vbmx5YF0sZmxvYXQ6W3tmbG9hdDpbYHJpZ2h0YCxgbGVmdGAsYG5vbmVgLGBzdGFydGAsYGVuZGBdfV0sY2xlYXI6W3tjbGVhcjpbYGxlZnRgLGByaWdodGAsYGJvdGhgLGBub25lYCxgc3RhcnRgLGBlbmRgXX1dLGlzb2xhdGlvbjpbYGlzb2xhdGVgLGBpc29sYXRpb24tYXV0b2BdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbYGNvbnRhaW5gLGBjb3ZlcmAsYGZpbGxgLGBub25lYCxgc2NhbGUtZG93bmBdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6eCgpfV0sb3ZlcmZsb3c6W3tvdmVyZmxvdzpTKCl9XSwib3ZlcmZsb3cteCI6W3sib3ZlcmZsb3cteCI6UygpfV0sIm92ZXJmbG93LXkiOlt7Im92ZXJmbG93LXkiOlMoKX1dLG92ZXJzY3JvbGw6W3tvdmVyc2Nyb2xsOkMoKX1dLCJvdmVyc2Nyb2xsLXgiOlt7Im92ZXJzY3JvbGwteCI6QygpfV0sIm92ZXJzY3JvbGwteSI6W3sib3ZlcnNjcm9sbC15IjpDKCl9XSxwb3NpdGlvbjpbYHN0YXRpY2AsYGZpeGVkYCxgYWJzb2x1dGVgLGByZWxhdGl2ZWAsYHN0aWNreWBdLGluc2V0Olt7aW5zZXQ6ZWUoKX1dLCJpbnNldC14IjpbeyJpbnNldC14IjplZSgpfV0sImluc2V0LXkiOlt7Imluc2V0LXkiOmVlKCl9XSxzdGFydDpbeyJpbnNldC1zIjplZSgpLHN0YXJ0OmVlKCl9XSxlbmQ6W3siaW5zZXQtZSI6ZWUoKSxlbmQ6ZWUoKX1dLCJpbnNldC1icyI6W3siaW5zZXQtYnMiOmVlKCl9XSwiaW5zZXQtYmUiOlt7Imluc2V0LWJlIjplZSgpfV0sdG9wOlt7dG9wOmVlKCl9XSxyaWdodDpbe3JpZ2h0OmVlKCl9XSxib3R0b206W3tib3R0b206ZWUoKX1dLGxlZnQ6W3tsZWZ0OmVlKCl9XSx2aXNpYmlsaXR5OltgdmlzaWJsZWAsYGludmlzaWJsZWAsYGNvbGxhcHNlYF0sejpbe3o6W2d2LGBhdXRvYCxaLFhdfV0sYmFzaXM6W3tiYXNpczpbaHYsYGZ1bGxgLGBhdXRvYCxzLC4uLncoKV19XSwiZmxleC1kaXJlY3Rpb24iOlt7ZmxleDpbYHJvd2AsYHJvdy1yZXZlcnNlYCxgY29sYCxgY29sLXJldmVyc2VgXX1dLCJmbGV4LXdyYXAiOlt7ZmxleDpbYG5vd3JhcGAsYHdyYXBgLGB3cmFwLXJldmVyc2VgXX1dLGZsZXg6W3tmbGV4OltZLGh2LGBhdXRvYCxgaW5pdGlhbGAsYG5vbmVgLFhdfV0sZ3Jvdzpbe2dyb3c6W2BgLFksWixYXX1dLHNocmluazpbe3NocmluazpbYGAsWSxaLFhdfV0sb3JkZXI6W3tvcmRlcjpbZ3YsYGZpcnN0YCxgbGFzdGAsYG5vbmVgLFosWF19XSwiZ3JpZC1jb2xzIjpbeyJncmlkLWNvbHMiOnRlKCl9XSwiY29sLXN0YXJ0LWVuZCI6W3tjb2w6VCgpfV0sImNvbC1zdGFydCI6W3siY29sLXN0YXJ0IjpuZSgpfV0sImNvbC1lbmQiOlt7ImNvbC1lbmQiOm5lKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOnRlKCl9XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6VCgpfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjpuZSgpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOm5lKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOltgcm93YCxgY29sYCxgZGVuc2VgLGByb3ctZGVuc2VgLGBjb2wtZGVuc2VgXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6cmUoKX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6cmUoKX1dLGdhcDpbe2dhcDp3KCl9XSwiZ2FwLXgiOlt7ImdhcC14Ijp3KCl9XSwiZ2FwLXkiOlt7ImdhcC15Ijp3KCl9XSwianVzdGlmeS1jb250ZW50Ijpbe2p1c3RpZnk6Wy4uLmllKCksYG5vcm1hbGBdfV0sImp1c3RpZnktaXRlbXMiOlt7Imp1c3RpZnktaXRlbXMiOlsuLi5FKCksYG5vcm1hbGBdfV0sImp1c3RpZnktc2VsZiI6W3sianVzdGlmeS1zZWxmIjpbYGF1dG9gLC4uLkUoKV19XSwiYWxpZ24tY29udGVudCI6W3tjb250ZW50Oltgbm9ybWFsYCwuLi5pZSgpXX1dLCJhbGlnbi1pdGVtcyI6W3tpdGVtczpbLi4uRSgpLHtiYXNlbGluZTpbYGAsYGxhc3RgXX1dfV0sImFsaWduLXNlbGYiOlt7c2VsZjpbYGF1dG9gLC4uLkUoKSx7YmFzZWxpbmU6W2BgLGBsYXN0YF19XX1dLCJwbGFjZS1jb250ZW50IjpbeyJwbGFjZS1jb250ZW50IjppZSgpfV0sInBsYWNlLWl0ZW1zIjpbeyJwbGFjZS1pdGVtcyI6Wy4uLkUoKSxgYmFzZWxpbmVgXX1dLCJwbGFjZS1zZWxmIjpbeyJwbGFjZS1zZWxmIjpbYGF1dG9gLC4uLkUoKV19XSxwOlt7cDp3KCl9XSxweDpbe3B4OncoKX1dLHB5Olt7cHk6dygpfV0scHM6W3twczp3KCl9XSxwZTpbe3BlOncoKX1dLHBiczpbe3Biczp3KCl9XSxwYmU6W3twYmU6dygpfV0scHQ6W3twdDp3KCl9XSxwcjpbe3ByOncoKX1dLHBiOlt7cGI6dygpfV0scGw6W3twbDp3KCl9XSxtOlt7bTphZSgpfV0sbXg6W3tteDphZSgpfV0sbXk6W3tteTphZSgpfV0sbXM6W3ttczphZSgpfV0sbWU6W3ttZTphZSgpfV0sbWJzOlt7bWJzOmFlKCl9XSxtYmU6W3ttYmU6YWUoKX1dLG10Olt7bXQ6YWUoKX1dLG1yOlt7bXI6YWUoKX1dLG1iOlt7bWI6YWUoKX1dLG1sOlt7bWw6YWUoKX1dLCJzcGFjZS14IjpbeyJzcGFjZS14Ijp3KCl9XSwic3BhY2UteC1yZXZlcnNlIjpbYHNwYWNlLXgtcmV2ZXJzZWBdLCJzcGFjZS15IjpbeyJzcGFjZS15Ijp3KCl9XSwic3BhY2UteS1yZXZlcnNlIjpbYHNwYWNlLXktcmV2ZXJzZWBdLHNpemU6W3tzaXplOm9lKCl9XSwiaW5saW5lLXNpemUiOlt7aW5saW5lOltgYXV0b2AsLi4uc2UoKV19XSwibWluLWlubGluZS1zaXplIjpbeyJtaW4taW5saW5lIjpbYGF1dG9gLC4uLnNlKCldfV0sIm1heC1pbmxpbmUtc2l6ZSI6W3sibWF4LWlubGluZSI6W2Bub25lYCwuLi5zZSgpXX1dLCJibG9jay1zaXplIjpbe2Jsb2NrOltgYXV0b2AsLi4uY2UoKV19XSwibWluLWJsb2NrLXNpemUiOlt7Im1pbi1ibG9jayI6W2BhdXRvYCwuLi5jZSgpXX1dLCJtYXgtYmxvY2stc2l6ZSI6W3sibWF4LWJsb2NrIjpbYG5vbmVgLC4uLmNlKCldfV0sdzpbe3c6W3MsYHNjcmVlbmAsLi4ub2UoKV19XSwibWluLXciOlt7Im1pbi13Ijpbcyxgc2NyZWVuYCxgbm9uZWAsLi4ub2UoKV19XSwibWF4LXciOlt7Im1heC13Ijpbcyxgc2NyZWVuYCxgbm9uZWAsYHByb3NlYCx7c2NyZWVuOltvXX0sLi4ub2UoKV19XSxoOlt7aDpbYHNjcmVlbmAsYGxoYCwuLi5vZSgpXX1dLCJtaW4taCI6W3sibWluLWgiOltgc2NyZWVuYCxgbGhgLGBub25lYCwuLi5vZSgpXX1dLCJtYXgtaCI6W3sibWF4LWgiOltgc2NyZWVuYCxgbGhgLC4uLm9lKCldfV0sImZvbnQtc2l6ZSI6W3t0ZXh0OltgYmFzZWAsbixQdixEdl19XSwiZm9udC1zbW9vdGhpbmciOltgYW50aWFsaWFzZWRgLGBzdWJwaXhlbC1hbnRpYWxpYXNlZGBdLCJmb250LXN0eWxlIjpbYGl0YWxpY2AsYG5vdC1pdGFsaWNgXSwiZm9udC13ZWlnaHQiOlt7Zm9udDpbcixCdixrdl19XSwiZm9udC1zdHJldGNoIjpbeyJmb250LXN0cmV0Y2giOltgdWx0cmEtY29uZGVuc2VkYCxgZXh0cmEtY29uZGVuc2VkYCxgY29uZGVuc2VkYCxgc2VtaS1jb25kZW5zZWRgLGBub3JtYWxgLGBzZW1pLWV4cGFuZGVkYCxgZXhwYW5kZWRgLGBleHRyYS1leHBhbmRlZGAsYHVsdHJhLWV4cGFuZGVkYCxfdixYXX1dLCJmb250LWZhbWlseSI6W3tmb250OltGdixBdix0XX1dLCJmb250LWZlYXR1cmVzIjpbeyJmb250LWZlYXR1cmVzIjpbWF19XSwiZnZuLW5vcm1hbCI6W2Bub3JtYWwtbnVtc2BdLCJmdm4tb3JkaW5hbCI6W2BvcmRpbmFsYF0sImZ2bi1zbGFzaGVkLXplcm8iOltgc2xhc2hlZC16ZXJvYF0sImZ2bi1maWd1cmUiOltgbGluaW5nLW51bXNgLGBvbGRzdHlsZS1udW1zYF0sImZ2bi1zcGFjaW5nIjpbYHByb3BvcnRpb25hbC1udW1zYCxgdGFidWxhci1udW1zYF0sImZ2bi1mcmFjdGlvbiI6W2BkaWFnb25hbC1mcmFjdGlvbnNgLGBzdGFja2VkLWZyYWN0aW9uc2BdLHRyYWNraW5nOlt7dHJhY2tpbmc6W2ksWixYXX1dLCJsaW5lLWNsYW1wIjpbeyJsaW5lLWNsYW1wIjpbWSxgbm9uZWAsWixPdl19XSxsZWFkaW5nOlt7bGVhZGluZzpbYSwuLi53KCldfV0sImxpc3QtaW1hZ2UiOlt7Imxpc3QtaW1hZ2UiOltgbm9uZWAsWixYXX1dLCJsaXN0LXN0eWxlLXBvc2l0aW9uIjpbe2xpc3Q6W2BpbnNpZGVgLGBvdXRzaWRlYF19XSwibGlzdC1zdHlsZS10eXBlIjpbe2xpc3Q6W2BkaXNjYCxgZGVjaW1hbGAsYG5vbmVgLFosWF19XSwidGV4dC1hbGlnbm1lbnQiOlt7dGV4dDpbYGxlZnRgLGBjZW50ZXJgLGByaWdodGAsYGp1c3RpZnlgLGBzdGFydGAsYGVuZGBdfV0sInBsYWNlaG9sZGVyLWNvbG9yIjpbe3BsYWNlaG9sZGVyOkQoKX1dLCJ0ZXh0LWNvbG9yIjpbe3RleHQ6RCgpfV0sInRleHQtZGVjb3JhdGlvbiI6W2B1bmRlcmxpbmVgLGBvdmVybGluZWAsYGxpbmUtdGhyb3VnaGAsYG5vLXVuZGVybGluZWBdLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOlt7ZGVjb3JhdGlvbjpbLi4uaGUoKSxgd2F2eWBdfV0sInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiOlt7ZGVjb3JhdGlvbjpbWSxgZnJvbS1mb250YCxgYXV0b2AsWixEdl19XSwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIjpbe2RlY29yYXRpb246RCgpfV0sInVuZGVybGluZS1vZmZzZXQiOlt7InVuZGVybGluZS1vZmZzZXQiOltZLGBhdXRvYCxaLFhdfV0sInRleHQtdHJhbnNmb3JtIjpbYHVwcGVyY2FzZWAsYGxvd2VyY2FzZWAsYGNhcGl0YWxpemVgLGBub3JtYWwtY2FzZWBdLCJ0ZXh0LW92ZXJmbG93IjpbYHRydW5jYXRlYCxgdGV4dC1lbGxpcHNpc2AsYHRleHQtY2xpcGBdLCJ0ZXh0LXdyYXAiOlt7dGV4dDpbYHdyYXBgLGBub3dyYXBgLGBiYWxhbmNlYCxgcHJldHR5YF19XSxpbmRlbnQ6W3tpbmRlbnQ6dygpfV0sInRhYi1zaXplIjpbe3RhYjpbZ3YsWixYXX1dLCJ2ZXJ0aWNhbC1hbGlnbiI6W3thbGlnbjpbYGJhc2VsaW5lYCxgdG9wYCxgbWlkZGxlYCxgYm90dG9tYCxgdGV4dC10b3BgLGB0ZXh0LWJvdHRvbWAsYHN1YmAsYHN1cGVyYCxaLFhdfV0sd2hpdGVzcGFjZTpbe3doaXRlc3BhY2U6W2Bub3JtYWxgLGBub3dyYXBgLGBwcmVgLGBwcmUtbGluZWAsYHByZS13cmFwYCxgYnJlYWstc3BhY2VzYF19XSxicmVhazpbe2JyZWFrOltgbm9ybWFsYCxgd29yZHNgLGBhbGxgLGBrZWVwYF19XSx3cmFwOlt7d3JhcDpbYGJyZWFrLXdvcmRgLGBhbnl3aGVyZWAsYG5vcm1hbGBdfV0saHlwaGVuczpbe2h5cGhlbnM6W2Bub25lYCxgbWFudWFsYCxgYXV0b2BdfV0sY29udGVudDpbe2NvbnRlbnQ6W2Bub25lYCxaLFhdfV0sImJnLWF0dGFjaG1lbnQiOlt7Ymc6W2BmaXhlZGAsYGxvY2FsYCxgc2Nyb2xsYF19XSwiYmctY2xpcCI6W3siYmctY2xpcCI6W2Bib3JkZXJgLGBwYWRkaW5nYCxgY29udGVudGAsYHRleHRgXX1dLCJiZy1vcmlnaW4iOlt7ImJnLW9yaWdpbiI6W2Bib3JkZXJgLGBwYWRkaW5nYCxgY29udGVudGBdfV0sImJnLXBvc2l0aW9uIjpbe2JnOmxlKCl9XSwiYmctcmVwZWF0Ijpbe2JnOnVlKCl9XSwiYmctc2l6ZSI6W3tiZzpkZSgpfV0sImJnLWltYWdlIjpbe2JnOltgbm9uZWAse2xpbmVhcjpbe3RvOltgdGAsYHRyYCxgcmAsYGJyYCxgYmAsYGJsYCxgbGAsYHRsYF19LGd2LFosWF0scmFkaWFsOltgYCxaLFhdLGNvbmljOltndixaLFhdfSxSdixNdl19XSwiYmctY29sb3IiOlt7Ymc6RCgpfV0sImdyYWRpZW50LWZyb20tcG9zIjpbe2Zyb206ZmUoKX1dLCJncmFkaWVudC12aWEtcG9zIjpbe3ZpYTpmZSgpfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpmZSgpfV0sImdyYWRpZW50LWZyb20iOlt7ZnJvbTpEKCl9XSwiZ3JhZGllbnQtdmlhIjpbe3ZpYTpEKCl9XSwiZ3JhZGllbnQtdG8iOlt7dG86RCgpfV0scm91bmRlZDpbe3JvdW5kZWQ6cGUoKX1dLCJyb3VuZGVkLXMiOlt7InJvdW5kZWQtcyI6cGUoKX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6cGUoKX1dLCJyb3VuZGVkLXQiOlt7InJvdW5kZWQtdCI6cGUoKX1dLCJyb3VuZGVkLXIiOlt7InJvdW5kZWQtciI6cGUoKX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6cGUoKX1dLCJyb3VuZGVkLWwiOlt7InJvdW5kZWQtbCI6cGUoKX1dLCJyb3VuZGVkLXNzIjpbeyJyb3VuZGVkLXNzIjpwZSgpfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOnBlKCl9XSwicm91bmRlZC1lZSI6W3sicm91bmRlZC1lZSI6cGUoKX1dLCJyb3VuZGVkLWVzIjpbeyJyb3VuZGVkLWVzIjpwZSgpfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOnBlKCl9XSwicm91bmRlZC10ciI6W3sicm91bmRlZC10ciI6cGUoKX1dLCJyb3VuZGVkLWJyIjpbeyJyb3VuZGVkLWJyIjpwZSgpfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOnBlKCl9XSwiYm9yZGVyLXciOlt7Ym9yZGVyOm1lKCl9XSwiYm9yZGVyLXcteCI6W3siYm9yZGVyLXgiOm1lKCl9XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOm1lKCl9XSwiYm9yZGVyLXctcyI6W3siYm9yZGVyLXMiOm1lKCl9XSwiYm9yZGVyLXctZSI6W3siYm9yZGVyLWUiOm1lKCl9XSwiYm9yZGVyLXctYnMiOlt7ImJvcmRlci1icyI6bWUoKX1dLCJib3JkZXItdy1iZSI6W3siYm9yZGVyLWJlIjptZSgpfV0sImJvcmRlci13LXQiOlt7ImJvcmRlci10IjptZSgpfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjptZSgpfV0sImJvcmRlci13LWIiOlt7ImJvcmRlci1iIjptZSgpfV0sImJvcmRlci13LWwiOlt7ImJvcmRlci1sIjptZSgpfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6bWUoKX1dLCJkaXZpZGUteC1yZXZlcnNlIjpbYGRpdmlkZS14LXJldmVyc2VgXSwiZGl2aWRlLXkiOlt7ImRpdmlkZS15IjptZSgpfV0sImRpdmlkZS15LXJldmVyc2UiOltgZGl2aWRlLXktcmV2ZXJzZWBdLCJib3JkZXItc3R5bGUiOlt7Ym9yZGVyOlsuLi5oZSgpLGBoaWRkZW5gLGBub25lYF19XSwiZGl2aWRlLXN0eWxlIjpbe2RpdmlkZTpbLi4uaGUoKSxgaGlkZGVuYCxgbm9uZWBdfV0sImJvcmRlci1jb2xvciI6W3tib3JkZXI6RCgpfV0sImJvcmRlci1jb2xvci14IjpbeyJib3JkZXIteCI6RCgpfV0sImJvcmRlci1jb2xvci15IjpbeyJib3JkZXIteSI6RCgpfV0sImJvcmRlci1jb2xvci1zIjpbeyJib3JkZXItcyI6RCgpfV0sImJvcmRlci1jb2xvci1lIjpbeyJib3JkZXItZSI6RCgpfV0sImJvcmRlci1jb2xvci1icyI6W3siYm9yZGVyLWJzIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWJlIjpbeyJib3JkZXItYmUiOkQoKX1dLCJib3JkZXItY29sb3ItdCI6W3siYm9yZGVyLXQiOkQoKX1dLCJib3JkZXItY29sb3ItciI6W3siYm9yZGVyLXIiOkQoKX1dLCJib3JkZXItY29sb3ItYiI6W3siYm9yZGVyLWIiOkQoKX1dLCJib3JkZXItY29sb3ItbCI6W3siYm9yZGVyLWwiOkQoKX1dLCJkaXZpZGUtY29sb3IiOlt7ZGl2aWRlOkQoKX1dLCJvdXRsaW5lLXN0eWxlIjpbe291dGxpbmU6Wy4uLmhlKCksYG5vbmVgLGBoaWRkZW5gXX1dLCJvdXRsaW5lLW9mZnNldCI6W3sib3V0bGluZS1vZmZzZXQiOltZLFosWF19XSwib3V0bGluZS13Ijpbe291dGxpbmU6W2BgLFksUHYsRHZdfV0sIm91dGxpbmUtY29sb3IiOlt7b3V0bGluZTpEKCl9XSxzaGFkb3c6W3tzaGFkb3c6W2BgLGBub25lYCx1LHp2LE52XX1dLCJzaGFkb3ctY29sb3IiOlt7c2hhZG93OkQoKX1dLCJpbnNldC1zaGFkb3ciOlt7Imluc2V0LXNoYWRvdyI6W2Bub25lYCxkLHp2LE52XX1dLCJpbnNldC1zaGFkb3ctY29sb3IiOlt7Imluc2V0LXNoYWRvdyI6RCgpfV0sInJpbmctdyI6W3tyaW5nOm1lKCl9XSwicmluZy13LWluc2V0IjpbYHJpbmctaW5zZXRgXSwicmluZy1jb2xvciI6W3tyaW5nOkQoKX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W1ksRHZdfV0sInJpbmctb2Zmc2V0LWNvbG9yIjpbeyJyaW5nLW9mZnNldCI6RCgpfV0sImluc2V0LXJpbmctdyI6W3siaW5zZXQtcmluZyI6bWUoKX1dLCJpbnNldC1yaW5nLWNvbG9yIjpbeyJpbnNldC1yaW5nIjpEKCl9XSwidGV4dC1zaGFkb3ciOlt7InRleHQtc2hhZG93IjpbYG5vbmVgLGYsenYsTnZdfV0sInRleHQtc2hhZG93LWNvbG9yIjpbeyJ0ZXh0LXNoYWRvdyI6RCgpfV0sb3BhY2l0eTpbe29wYWNpdHk6W1ksWixYXX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6Wy4uLmdlKCksYHBsdXMtZGFya2VyYCxgcGx1cy1saWdodGVyYF19XSwiYmctYmxlbmQiOlt7ImJnLWJsZW5kIjpnZSgpfV0sIm1hc2stY2xpcCI6W3sibWFzay1jbGlwIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgZmlsbGAsYHN0cm9rZWAsYHZpZXdgXX0sYG1hc2stbm8tY2xpcGBdLCJtYXNrLWNvbXBvc2l0ZSI6W3ttYXNrOltgYWRkYCxgc3VidHJhY3RgLGBpbnRlcnNlY3RgLGBleGNsdWRlYF19XSwibWFzay1pbWFnZS1saW5lYXItcG9zIjpbeyJtYXNrLWxpbmVhciI6W1ldfV0sIm1hc2staW1hZ2UtbGluZWFyLWZyb20tcG9zIjpbeyJtYXNrLWxpbmVhci1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtbGluZWFyLXRvLXBvcyI6W3sibWFzay1saW5lYXItdG8iOl9lKCl9XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1jb2xvciI6W3sibWFzay1saW5lYXItZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtbGluZWFyLXRvLWNvbG9yIjpbeyJtYXNrLWxpbmVhci10byI6RCgpfV0sIm1hc2staW1hZ2UtdC1mcm9tLXBvcyI6W3sibWFzay10LWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS10LXRvLXBvcyI6W3sibWFzay10LXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtdC1mcm9tLWNvbG9yIjpbeyJtYXNrLXQtZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtdC10by1jb2xvciI6W3sibWFzay10LXRvIjpEKCl9XSwibWFzay1pbWFnZS1yLWZyb20tcG9zIjpbeyJtYXNrLXItZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXItdG8tcG9zIjpbeyJtYXNrLXItdG8iOl9lKCl9XSwibWFzay1pbWFnZS1yLWZyb20tY29sb3IiOlt7Im1hc2stci1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1yLXRvLWNvbG9yIjpbeyJtYXNrLXItdG8iOkQoKX1dLCJtYXNrLWltYWdlLWItZnJvbS1wb3MiOlt7Im1hc2stYi1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtYi10by1wb3MiOlt7Im1hc2stYi10byI6X2UoKX1dLCJtYXNrLWltYWdlLWItZnJvbS1jb2xvciI6W3sibWFzay1iLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLWItdG8tY29sb3IiOlt7Im1hc2stYi10byI6RCgpfV0sIm1hc2staW1hZ2UtbC1mcm9tLXBvcyI6W3sibWFzay1sLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1sLXRvLXBvcyI6W3sibWFzay1sLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtbC1mcm9tLWNvbG9yIjpbeyJtYXNrLWwtZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtbC10by1jb2xvciI6W3sibWFzay1sLXRvIjpEKCl9XSwibWFzay1pbWFnZS14LWZyb20tcG9zIjpbeyJtYXNrLXgtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXgtdG8tcG9zIjpbeyJtYXNrLXgtdG8iOl9lKCl9XSwibWFzay1pbWFnZS14LWZyb20tY29sb3IiOlt7Im1hc2steC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS14LXRvLWNvbG9yIjpbeyJtYXNrLXgtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXktZnJvbS1wb3MiOlt7Im1hc2steS1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UteS10by1wb3MiOlt7Im1hc2steS10byI6X2UoKX1dLCJtYXNrLWltYWdlLXktZnJvbS1jb2xvciI6W3sibWFzay15LWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXktdG8tY29sb3IiOlt7Im1hc2steS10byI6RCgpfV0sIm1hc2staW1hZ2UtcmFkaWFsIjpbeyJtYXNrLXJhZGlhbCI6W1osWF19XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1wb3MiOlt7Im1hc2stcmFkaWFsLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tcG9zIjpbeyJtYXNrLXJhZGlhbC10byI6X2UoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC1mcm9tLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtdG8tY29sb3IiOlt7Im1hc2stcmFkaWFsLXRvIjpEKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtc2hhcGUiOlt7Im1hc2stcmFkaWFsIjpbYGNpcmNsZWAsYGVsbGlwc2VgXX1dLCJtYXNrLWltYWdlLXJhZGlhbC1zaXplIjpbeyJtYXNrLXJhZGlhbCI6W3tjbG9zZXN0Oltgc2lkZWAsYGNvcm5lcmBdLGZhcnRoZXN0Oltgc2lkZWAsYGNvcm5lcmBdfV19XSwibWFzay1pbWFnZS1yYWRpYWwtcG9zIjpbeyJtYXNrLXJhZGlhbC1hdCI6YigpfV0sIm1hc2staW1hZ2UtY29uaWMtcG9zIjpbeyJtYXNrLWNvbmljIjpbWV19XSwibWFzay1pbWFnZS1jb25pYy1mcm9tLXBvcyI6W3sibWFzay1jb25pYy1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tcG9zIjpbeyJtYXNrLWNvbmljLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1jb2xvciI6W3sibWFzay1jb25pYy1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1jb25pYy10by1jb2xvciI6W3sibWFzay1jb25pYy10byI6RCgpfV0sIm1hc2stbW9kZSI6W3ttYXNrOltgYWxwaGFgLGBsdW1pbmFuY2VgLGBtYXRjaGBdfV0sIm1hc2stb3JpZ2luIjpbeyJtYXNrLW9yaWdpbiI6W2Bib3JkZXJgLGBwYWRkaW5nYCxgY29udGVudGAsYGZpbGxgLGBzdHJva2VgLGB2aWV3YF19XSwibWFzay1wb3NpdGlvbiI6W3ttYXNrOmxlKCl9XSwibWFzay1yZXBlYXQiOlt7bWFzazp1ZSgpfV0sIm1hc2stc2l6ZSI6W3ttYXNrOmRlKCl9XSwibWFzay10eXBlIjpbeyJtYXNrLXR5cGUiOltgYWxwaGFgLGBsdW1pbmFuY2VgXX1dLCJtYXNrLWltYWdlIjpbe21hc2s6W2Bub25lYCxaLFhdfV0sZmlsdGVyOlt7ZmlsdGVyOltgYCxgbm9uZWAsWixYXX1dLGJsdXI6W3tibHVyOnZlKCl9XSxicmlnaHRuZXNzOlt7YnJpZ2h0bmVzczpbWSxaLFhdfV0sY29udHJhc3Q6W3tjb250cmFzdDpbWSxaLFhdfV0sImRyb3Atc2hhZG93IjpbeyJkcm9wLXNoYWRvdyI6W2BgLGBub25lYCxwLHp2LE52XX1dLCJkcm9wLXNoYWRvdy1jb2xvciI6W3siZHJvcC1zaGFkb3ciOkQoKX1dLGdyYXlzY2FsZTpbe2dyYXlzY2FsZTpbYGAsWSxaLFhdfV0sImh1ZS1yb3RhdGUiOlt7Imh1ZS1yb3RhdGUiOltZLFosWF19XSxpbnZlcnQ6W3tpbnZlcnQ6W2BgLFksWixYXX1dLHNhdHVyYXRlOlt7c2F0dXJhdGU6W1ksWixYXX1dLHNlcGlhOlt7c2VwaWE6W2BgLFksWixYXX1dLCJiYWNrZHJvcC1maWx0ZXIiOlt7ImJhY2tkcm9wLWZpbHRlciI6W2BgLGBub25lYCxaLFhdfV0sImJhY2tkcm9wLWJsdXIiOlt7ImJhY2tkcm9wLWJsdXIiOnZlKCl9XSwiYmFja2Ryb3AtYnJpZ2h0bmVzcyI6W3siYmFja2Ryb3AtYnJpZ2h0bmVzcyI6W1ksWixYXX1dLCJiYWNrZHJvcC1jb250cmFzdCI6W3siYmFja2Ryb3AtY29udHJhc3QiOltZLFosWF19XSwiYmFja2Ryb3AtZ3JheXNjYWxlIjpbeyJiYWNrZHJvcC1ncmF5c2NhbGUiOltgYCxZLFosWF19XSwiYmFja2Ryb3AtaHVlLXJvdGF0ZSI6W3siYmFja2Ryb3AtaHVlLXJvdGF0ZSI6W1ksWixYXX1dLCJiYWNrZHJvcC1pbnZlcnQiOlt7ImJhY2tkcm9wLWludmVydCI6W2BgLFksWixYXX1dLCJiYWNrZHJvcC1vcGFjaXR5IjpbeyJiYWNrZHJvcC1vcGFjaXR5IjpbWSxaLFhdfV0sImJhY2tkcm9wLXNhdHVyYXRlIjpbeyJiYWNrZHJvcC1zYXR1cmF0ZSI6W1ksWixYXX1dLCJiYWNrZHJvcC1zZXBpYSI6W3siYmFja2Ryb3Atc2VwaWEiOltgYCxZLFosWF19XSwiYm9yZGVyLWNvbGxhcHNlIjpbe2JvcmRlcjpbYGNvbGxhcHNlYCxgc2VwYXJhdGVgXX1dLCJib3JkZXItc3BhY2luZyI6W3siYm9yZGVyLXNwYWNpbmciOncoKX1dLCJib3JkZXItc3BhY2luZy14IjpbeyJib3JkZXItc3BhY2luZy14Ijp3KCl9XSwiYm9yZGVyLXNwYWNpbmcteSI6W3siYm9yZGVyLXNwYWNpbmcteSI6dygpfV0sInRhYmxlLWxheW91dCI6W3t0YWJsZTpbYGF1dG9gLGBmaXhlZGBdfV0sY2FwdGlvbjpbe2NhcHRpb246W2B0b3BgLGBib3R0b21gXX1dLHRyYW5zaXRpb246W3t0cmFuc2l0aW9uOltgYCxgYWxsYCxgY29sb3JzYCxgb3BhY2l0eWAsYHNoYWRvd2AsYHRyYW5zZm9ybWAsYG5vbmVgLFosWF19XSwidHJhbnNpdGlvbi1iZWhhdmlvciI6W3t0cmFuc2l0aW9uOltgbm9ybWFsYCxgZGlzY3JldGVgXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246W1ksYGluaXRpYWxgLFosWF19XSxlYXNlOlt7ZWFzZTpbYGxpbmVhcmAsYGluaXRpYWxgLF8sWixYXX1dLGRlbGF5Olt7ZGVsYXk6W1ksWixYXX1dLGFuaW1hdGU6W3thbmltYXRlOltgbm9uZWAsdixaLFhdfV0sYmFja2ZhY2U6W3tiYWNrZmFjZTpbYGhpZGRlbmAsYHZpc2libGVgXX1dLHBlcnNwZWN0aXZlOlt7cGVyc3BlY3RpdmU6W2gsWixYXX1dLCJwZXJzcGVjdGl2ZS1vcmlnaW4iOlt7InBlcnNwZWN0aXZlLW9yaWdpbiI6eCgpfV0scm90YXRlOlt7cm90YXRlOnllKCl9XSwicm90YXRlLXgiOlt7InJvdGF0ZS14Ijp5ZSgpfV0sInJvdGF0ZS15IjpbeyJyb3RhdGUteSI6eWUoKX1dLCJyb3RhdGUteiI6W3sicm90YXRlLXoiOnllKCl9XSxzY2FsZTpbe3NjYWxlOmJlKCl9XSwic2NhbGUteCI6W3sic2NhbGUteCI6YmUoKX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjpiZSgpfV0sInNjYWxlLXoiOlt7InNjYWxlLXoiOmJlKCl9XSwic2NhbGUtM2QiOltgc2NhbGUtM2RgXSxza2V3Olt7c2tldzpPKCl9XSwic2tldy14IjpbeyJza2V3LXgiOk8oKX1dLCJza2V3LXkiOlt7InNrZXcteSI6TygpfV0sdHJhbnNmb3JtOlt7dHJhbnNmb3JtOltaLFgsYGAsYG5vbmVgLGBncHVgLGBjcHVgXX1dLCJ0cmFuc2Zvcm0tb3JpZ2luIjpbe29yaWdpbjp4KCl9XSwidHJhbnNmb3JtLXN0eWxlIjpbe3RyYW5zZm9ybTpbYDNkYCxgZmxhdGBdfV0sdHJhbnNsYXRlOlt7dHJhbnNsYXRlOnhlKCl9XSwidHJhbnNsYXRlLXgiOlt7InRyYW5zbGF0ZS14Ijp4ZSgpfV0sInRyYW5zbGF0ZS15IjpbeyJ0cmFuc2xhdGUteSI6eGUoKX1dLCJ0cmFuc2xhdGUteiI6W3sidHJhbnNsYXRlLXoiOnhlKCl9XSwidHJhbnNsYXRlLW5vbmUiOltgdHJhbnNsYXRlLW5vbmVgXSx6b29tOlt7em9vbTpbZ3YsWixYXX1dLGFjY2VudDpbe2FjY2VudDpEKCl9XSxhcHBlYXJhbmNlOlt7YXBwZWFyYW5jZTpbYG5vbmVgLGBhdXRvYF19XSwiY2FyZXQtY29sb3IiOlt7Y2FyZXQ6RCgpfV0sImNvbG9yLXNjaGVtZSI6W3tzY2hlbWU6W2Bub3JtYWxgLGBkYXJrYCxgbGlnaHRgLGBsaWdodC1kYXJrYCxgb25seS1kYXJrYCxgb25seS1saWdodGBdfV0sY3Vyc29yOlt7Y3Vyc29yOltgYXV0b2AsYGRlZmF1bHRgLGBwb2ludGVyYCxgd2FpdGAsYHRleHRgLGBtb3ZlYCxgaGVscGAsYG5vdC1hbGxvd2VkYCxgbm9uZWAsYGNvbnRleHQtbWVudWAsYHByb2dyZXNzYCxgY2VsbGAsYGNyb3NzaGFpcmAsYHZlcnRpY2FsLXRleHRgLGBhbGlhc2AsYGNvcHlgLGBuby1kcm9wYCxgZ3JhYmAsYGdyYWJiaW5nYCxgYWxsLXNjcm9sbGAsYGNvbC1yZXNpemVgLGByb3ctcmVzaXplYCxgbi1yZXNpemVgLGBlLXJlc2l6ZWAsYHMtcmVzaXplYCxgdy1yZXNpemVgLGBuZS1yZXNpemVgLGBudy1yZXNpemVgLGBzZS1yZXNpemVgLGBzdy1yZXNpemVgLGBldy1yZXNpemVgLGBucy1yZXNpemVgLGBuZXN3LXJlc2l6ZWAsYG53c2UtcmVzaXplYCxgem9vbS1pbmAsYHpvb20tb3V0YCxaLFhdfV0sImZpZWxkLXNpemluZyI6W3siZmllbGQtc2l6aW5nIjpbYGZpeGVkYCxgY29udGVudGBdfV0sInBvaW50ZXItZXZlbnRzIjpbeyJwb2ludGVyLWV2ZW50cyI6W2BhdXRvYCxgbm9uZWBdfV0scmVzaXplOlt7cmVzaXplOltgbm9uZWAsYGAsYHlgLGB4YF19XSwic2Nyb2xsLWJlaGF2aW9yIjpbe3Njcm9sbDpbYGF1dG9gLGBzbW9vdGhgXX1dLCJzY3JvbGxiYXItdGh1bWItY29sb3IiOlt7InNjcm9sbGJhci10aHVtYiI6RCgpfV0sInNjcm9sbGJhci10cmFjay1jb2xvciI6W3sic2Nyb2xsYmFyLXRyYWNrIjpEKCl9XSwic2Nyb2xsYmFyLWd1dHRlciI6W3sic2Nyb2xsYmFyLWd1dHRlciI6W2BhdXRvYCxgc3RhYmxlYCxgYm90aGBdfV0sInNjcm9sbGJhci13Ijpbe3Njcm9sbGJhcjpbYGF1dG9gLGB0aGluYCxgbm9uZWBdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6dygpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14Ijp3KCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOncoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6dygpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjp3KCl9XSwic2Nyb2xsLW1icyI6W3sic2Nyb2xsLW1icyI6dygpfV0sInNjcm9sbC1tYmUiOlt7InNjcm9sbC1tYmUiOncoKX1dLCJzY3JvbGwtbXQiOlt7InNjcm9sbC1tdCI6dygpfV0sInNjcm9sbC1tciI6W3sic2Nyb2xsLW1yIjp3KCl9XSwic2Nyb2xsLW1iIjpbeyJzY3JvbGwtbWIiOncoKX1dLCJzY3JvbGwtbWwiOlt7InNjcm9sbC1tbCI6dygpfV0sInNjcm9sbC1wIjpbeyJzY3JvbGwtcCI6dygpfV0sInNjcm9sbC1weCI6W3sic2Nyb2xsLXB4Ijp3KCl9XSwic2Nyb2xsLXB5IjpbeyJzY3JvbGwtcHkiOncoKX1dLCJzY3JvbGwtcHMiOlt7InNjcm9sbC1wcyI6dygpfV0sInNjcm9sbC1wZSI6W3sic2Nyb2xsLXBlIjp3KCl9XSwic2Nyb2xsLXBicyI6W3sic2Nyb2xsLXBicyI6dygpfV0sInNjcm9sbC1wYmUiOlt7InNjcm9sbC1wYmUiOncoKX1dLCJzY3JvbGwtcHQiOlt7InNjcm9sbC1wdCI6dygpfV0sInNjcm9sbC1wciI6W3sic2Nyb2xsLXByIjp3KCl9XSwic2Nyb2xsLXBiIjpbeyJzY3JvbGwtcGIiOncoKX1dLCJzY3JvbGwtcGwiOlt7InNjcm9sbC1wbCI6dygpfV0sInNuYXAtYWxpZ24iOlt7c25hcDpbYHN0YXJ0YCxgZW5kYCxgY2VudGVyYCxgYWxpZ24tbm9uZWBdfV0sInNuYXAtc3RvcCI6W3tzbmFwOltgbm9ybWFsYCxgYWx3YXlzYF19XSwic25hcC10eXBlIjpbe3NuYXA6W2Bub25lYCxgeGAsYHlgLGBib3RoYF19XSwic25hcC1zdHJpY3RuZXNzIjpbe3NuYXA6W2BtYW5kYXRvcnlgLGBwcm94aW1pdHlgXX1dLHRvdWNoOlt7dG91Y2g6W2BhdXRvYCxgbm9uZWAsYG1hbmlwdWxhdGlvbmBdfV0sInRvdWNoLXgiOlt7InRvdWNoLXBhbiI6W2B4YCxgbGVmdGAsYHJpZ2h0YF19XSwidG91Y2gteSI6W3sidG91Y2gtcGFuIjpbYHlgLGB1cGAsYGRvd25gXX1dLCJ0b3VjaC1weiI6W2B0b3VjaC1waW5jaC16b29tYF0sc2VsZWN0Olt7c2VsZWN0Oltgbm9uZWAsYHRleHRgLGBhbGxgLGBhdXRvYF19XSwid2lsbC1jaGFuZ2UiOlt7IndpbGwtY2hhbmdlIjpbYGF1dG9gLGBzY3JvbGxgLGBjb250ZW50c2AsYHRyYW5zZm9ybWAsWixYXX1dLGZpbGw6W3tmaWxsOltgbm9uZWAsLi4uRCgpXX1dLCJzdHJva2UtdyI6W3tzdHJva2U6W1ksUHYsRHYsT3ZdfV0sc3Ryb2tlOlt7c3Ryb2tlOltgbm9uZWAsLi4uRCgpXX1dLCJmb3JjZWQtY29sb3ItYWRqdXN0IjpbeyJmb3JjZWQtY29sb3ItYWRqdXN0IjpbYGF1dG9gLGBub25lYF19XX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7ImNvbnRhaW5lci1uYW1lZCI6W2Bjb250YWluZXItdHlwZWBdLG92ZXJmbG93Oltgb3ZlcmZsb3cteGAsYG92ZXJmbG93LXlgXSxvdmVyc2Nyb2xsOltgb3ZlcnNjcm9sbC14YCxgb3ZlcnNjcm9sbC15YF0saW5zZXQ6W2BpbnNldC14YCxgaW5zZXQteWAsYGluc2V0LWJzYCxgaW5zZXQtYmVgLGBzdGFydGAsYGVuZGAsYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdLCJpbnNldC14IjpbYHJpZ2h0YCxgbGVmdGBdLCJpbnNldC15IjpbYHRvcGAsYGJvdHRvbWBdLGZsZXg6W2BiYXNpc2AsYGdyb3dgLGBzaHJpbmtgXSxnYXA6W2BnYXAteGAsYGdhcC15YF0scDpbYHB4YCxgcHlgLGBwc2AsYHBlYCxgcGJzYCxgcGJlYCxgcHRgLGBwcmAsYHBiYCxgcGxgXSxweDpbYHByYCxgcGxgXSxweTpbYHB0YCxgcGJgXSxtOltgbXhgLGBteWAsYG1zYCxgbWVgLGBtYnNgLGBtYmVgLGBtdGAsYG1yYCxgbWJgLGBtbGBdLG14OltgbXJgLGBtbGBdLG15OltgbXRgLGBtYmBdLHNpemU6W2B3YCxgaGBdLCJmb250LXNpemUiOltgbGVhZGluZ2BdLCJmdm4tbm9ybWFsIjpbYGZ2bi1vcmRpbmFsYCxgZnZuLXNsYXNoZWQtemVyb2AsYGZ2bi1maWd1cmVgLGBmdm4tc3BhY2luZ2AsYGZ2bi1mcmFjdGlvbmBdLCJmdm4tb3JkaW5hbCI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1zbGFzaGVkLXplcm8iOltgZnZuLW5vcm1hbGBdLCJmdm4tZmlndXJlIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLXNwYWNpbmciOltgZnZuLW5vcm1hbGBdLCJmdm4tZnJhY3Rpb24iOltgZnZuLW5vcm1hbGBdLCJsaW5lLWNsYW1wIjpbYGRpc3BsYXlgLGBvdmVyZmxvd2BdLHJvdW5kZWQ6W2Byb3VuZGVkLXNgLGByb3VuZGVkLWVgLGByb3VuZGVkLXRgLGByb3VuZGVkLXJgLGByb3VuZGVkLWJgLGByb3VuZGVkLWxgLGByb3VuZGVkLXNzYCxgcm91bmRlZC1zZWAsYHJvdW5kZWQtZWVgLGByb3VuZGVkLWVzYCxgcm91bmRlZC10bGAsYHJvdW5kZWQtdHJgLGByb3VuZGVkLWJyYCxgcm91bmRlZC1ibGBdLCJyb3VuZGVkLXMiOltgcm91bmRlZC1zc2AsYHJvdW5kZWQtZXNgXSwicm91bmRlZC1lIjpbYHJvdW5kZWQtc2VgLGByb3VuZGVkLWVlYF0sInJvdW5kZWQtdCI6W2Byb3VuZGVkLXRsYCxgcm91bmRlZC10cmBdLCJyb3VuZGVkLXIiOltgcm91bmRlZC10cmAsYHJvdW5kZWQtYnJgXSwicm91bmRlZC1iIjpbYHJvdW5kZWQtYnJgLGByb3VuZGVkLWJsYF0sInJvdW5kZWQtbCI6W2Byb3VuZGVkLXRsYCxgcm91bmRlZC1ibGBdLCJib3JkZXItc3BhY2luZyI6W2Bib3JkZXItc3BhY2luZy14YCxgYm9yZGVyLXNwYWNpbmcteWBdLCJib3JkZXItdyI6W2Bib3JkZXItdy14YCxgYm9yZGVyLXcteWAsYGJvcmRlci13LXNgLGBib3JkZXItdy1lYCxgYm9yZGVyLXctYnNgLGBib3JkZXItdy1iZWAsYGJvcmRlci13LXRgLGBib3JkZXItdy1yYCxgYm9yZGVyLXctYmAsYGJvcmRlci13LWxgXSwiYm9yZGVyLXcteCI6W2Bib3JkZXItdy1yYCxgYm9yZGVyLXctbGBdLCJib3JkZXItdy15IjpbYGJvcmRlci13LXRgLGBib3JkZXItdy1iYF0sImJvcmRlci1jb2xvciI6W2Bib3JkZXItY29sb3IteGAsYGJvcmRlci1jb2xvci15YCxgYm9yZGVyLWNvbG9yLXNgLGBib3JkZXItY29sb3ItZWAsYGJvcmRlci1jb2xvci1ic2AsYGJvcmRlci1jb2xvci1iZWAsYGJvcmRlci1jb2xvci10YCxgYm9yZGVyLWNvbG9yLXJgLGBib3JkZXItY29sb3ItYmAsYGJvcmRlci1jb2xvci1sYF0sImJvcmRlci1jb2xvci14IjpbYGJvcmRlci1jb2xvci1yYCxgYm9yZGVyLWNvbG9yLWxgXSwiYm9yZGVyLWNvbG9yLXkiOltgYm9yZGVyLWNvbG9yLXRgLGBib3JkZXItY29sb3ItYmBdLHRyYW5zbGF0ZTpbYHRyYW5zbGF0ZS14YCxgdHJhbnNsYXRlLXlgLGB0cmFuc2xhdGUtbm9uZWBdLCJ0cmFuc2xhdGUtbm9uZSI6W2B0cmFuc2xhdGVgLGB0cmFuc2xhdGUteGAsYHRyYW5zbGF0ZS15YCxgdHJhbnNsYXRlLXpgXSwic2Nyb2xsLW0iOltgc2Nyb2xsLW14YCxgc2Nyb2xsLW15YCxgc2Nyb2xsLW1zYCxgc2Nyb2xsLW1lYCxgc2Nyb2xsLW1ic2AsYHNjcm9sbC1tYmVgLGBzY3JvbGwtbXRgLGBzY3JvbGwtbXJgLGBzY3JvbGwtbWJgLGBzY3JvbGwtbWxgXSwic2Nyb2xsLW14IjpbYHNjcm9sbC1tcmAsYHNjcm9sbC1tbGBdLCJzY3JvbGwtbXkiOltgc2Nyb2xsLW10YCxgc2Nyb2xsLW1iYF0sInNjcm9sbC1wIjpbYHNjcm9sbC1weGAsYHNjcm9sbC1weWAsYHNjcm9sbC1wc2AsYHNjcm9sbC1wZWAsYHNjcm9sbC1wYnNgLGBzY3JvbGwtcGJlYCxgc2Nyb2xsLXB0YCxgc2Nyb2xsLXByYCxgc2Nyb2xsLXBiYCxgc2Nyb2xsLXBsYF0sInNjcm9sbC1weCI6W2BzY3JvbGwtcHJgLGBzY3JvbGwtcGxgXSwic2Nyb2xsLXB5IjpbYHNjcm9sbC1wdGAsYHNjcm9sbC1wYmBdLHRvdWNoOltgdG91Y2gteGAsYHRvdWNoLXlgLGB0b3VjaC1wemBdLCJ0b3VjaC14IjpbYHRvdWNoYF0sInRvdWNoLXkiOltgdG91Y2hgXSwidG91Y2gtcHoiOltgdG91Y2hgXX0sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnsiZm9udC1zaXplIjpbYGxlYWRpbmdgXX0scG9zdGZpeExvb2t1cENsYXNzR3JvdXBzOltgY29udGFpbmVyLXR5cGVgXSxvcmRlclNlbnNpdGl2ZU1vZGlmaWVyczpbYCpgLGAqKmAsYGFmdGVyYCxgYmFja2Ryb3BgLGBiZWZvcmVgLGBkZXRhaWxzLWNvbnRlbnRgLGBmaWxlYCxgZmlyc3QtbGV0dGVyYCxgZmlyc3QtbGluZWAsYG1hcmtlcmAsYHBsYWNlaG9sZGVyYCxgc2VsZWN0aW9uYF19fSk7ZnVuY3Rpb24gUXYoLi4uZSl7cmV0dXJuIFp2KENfKGUpKX12YXIgJHY9UCh7X19uYW1lOmBBbGVydGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19LHZhcmlhbnQ6e319LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9PihMKCksUihgZGl2YCx7ImRhdGEtc2xvdCI6YGFsZXJ0YCxjbGFzczpPKE0oUXYpKE0obnkpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpKSxyb2xlOmBhbGVydGB9LFtGKG4uJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxleT1QKHtfX25hbWU6YEFsZXJ0RGVzY3JpcHRpb25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KEwoKSxSKGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTShRdikoYHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtIHRleHQtYmFsYW5jZSBtZDp0ZXh0LXByZXR0eSBbJl9wOm5vdCg6bGFzdC1jaGlsZCldOm1iLTQgWyZfYV06dW5kZXJsaW5lIFsmX2FdOnVuZGVybGluZS1vZmZzZXQtMyBbJl9hXTpob3Zlcjp0ZXh0LWZvcmVncm91bmRgLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLHR5PVAoe19fbmFtZTpgQWxlcnRUaXRsZWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLFIoYGRpdmAseyJkYXRhLXNsb3QiOmBhbGVydC10aXRsZWAsY2xhc3M6TyhNKFF2KShgZm9udC1tZWRpdW0gZ3JvdXAtaGFzLVs+c3ZnXS9hbGVydDpjb2wtc3RhcnQtMiBmb250LWhlYWRpbmcgWyZfYV06dW5kZXJsaW5lIFsmX2FdOnVuZGVybGluZS1vZmZzZXQtMyBbJl9hXTpob3Zlcjp0ZXh0LWZvcmVncm91bmRgLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLG55PUVfKGBncmlkIGdhcC0wLjUgcm91bmRlZC1sZyBib3JkZXIgcHgtMi41IHB5LTIgdGV4dC1sZWZ0IHRleHQtc20gaGFzLWRhdGEtW3Nsb3Q9YWxlcnQtYWN0aW9uXTpyZWxhdGl2ZSBoYXMtZGF0YS1bc2xvdD1hbGVydC1hY3Rpb25dOnByLTE4IGhhcy1bPnN2Z106Z3JpZC1jb2xzLVthdXRvXzFmcl0gaGFzLVs+c3ZnXTpnYXAteC0yICo6W3N2Z106cm93LXNwYW4tMiAqOltzdmddOnRyYW5zbGF0ZS15LTAuNSAqOltzdmddOnRleHQtY3VycmVudCAqOltzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00IGdyb3VwL2FsZXJ0IHJlbGF0aXZlIHctZnVsbGAse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OmBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kYCxkZXN0cnVjdGl2ZTpgdGV4dC1kZXN0cnVjdGl2ZSBiZy1jYXJkICo6ZGF0YS1bc2xvdD1hbGVydC1kZXNjcmlwdGlvbl06dGV4dC1kZXN0cnVjdGl2ZS85MCAqOltzdmddOnRleHQtY3VycmVudGAsd2FybjpgdGV4dC1zdGF0dXMtd2FybiBiZy1jYXJkICo6ZGF0YS1bc2xvdD1hbGVydC1kZXNjcmlwdGlvbl06dGV4dC1zdGF0dXMtd2Fybi85MCAqOltzdmddOnRleHQtY3VycmVudGB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2Z1bmN0aW9uIHJ5KGUpe3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/YCcke2V9J2A6bmV3IHN5KCkuc2VyaWFsaXplKGUpfXZhciBpeT1gIF8tLDs6IT8uJyIoKVtde31AKi9cXCYjJVxgXis8PT58fiQwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpgLGF5PShmdW5jdGlvbigpe2xldCBlPW5ldyBVaW50OEFycmF5KDEyOCk7Zm9yKGxldCB0PTA7dDw2OTt0KyspZVtpeS5jaGFyQ29kZUF0KHQpXT10KzE7Zm9yKGxldCB0PTY1O3Q8PTkwO3QrKyllW3RdPWVbdCszMl07cmV0dXJuIGV9KSgpO2Z1bmN0aW9uIG95KGUsdCl7aWYoZT09PXQpcmV0dXJuIDA7bGV0IG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLHI9MDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgbj1lLmNoYXJDb2RlQXQoaSksYT10LmNoYXJDb2RlQXQoaSk7aWYobj09PWEpY29udGludWU7bGV0IG89bjwxMjgmJmF5W25dP2F5W25dOm4rMTI4LHM9YTwxMjgmJmF5W2FdP2F5W2FdOmErMTI4O2lmKG8hPT1zKXJldHVybiBvPHM/LTE6MTtyPT09MCYmKHI9bj5hPy0xOjEpfXJldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoP3I6ZS5sZW5ndGg8dC5sZW5ndGg/LTE6MX12YXIgc3k9KGZ1bmN0aW9uKCl7Y2xhc3MgZXsjZT1uZXcgTWFwO2NvbXBhcmUoZSx0KXtsZXQgbj10eXBlb2YgZSxyPXR5cGVvZiB0O3JldHVybiBuPT09YHN0cmluZ2AmJnI9PT1gc3RyaW5nYD9veShlLHQpOm49PT1gbnVtYmVyYCYmcj09PWBudW1iZXJgP2UtdDpveSh0aGlzLnNlcmlhbGl6ZShlLCEwKSx0aGlzLnNlcmlhbGl6ZSh0LCEwKSl9c2VyaWFsaXplKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuYG51bGxgO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZWBzdHJpbmdgOnJldHVybiB0P2U6YCcke2V9J2A7Y2FzZWBiaWdpbnRgOnJldHVybmAke2V9bmA7Y2FzZWBvYmplY3RgOnJldHVybiB0aGlzLiRvYmplY3QoZSk7Y2FzZWBmdW5jdGlvbmA6cmV0dXJuIHRoaXMuJGZ1bmN0aW9uKGUpfXJldHVybiBTdHJpbmcoZSl9c2VyaWFsaXplT2JqZWN0KGUpe2xldCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtpZih0IT09YFtvYmplY3QgT2JqZWN0XWApcmV0dXJuIHRoaXMuc2VyaWFsaXplQnVpbHRJblR5cGUodC5sZW5ndGg8MTA/YHVua25vd246JHt0fWA6dC5zbGljZSg4LC0xKSxlKTtsZXQgbj1lLmNvbnN0cnVjdG9yLHI9bj09PU9iamVjdHx8bj09PXZvaWQgMD9gYDpuLm5hbWU7aWYociE9PWBgJiZnbG9iYWxUaGlzW3JdPT09bilyZXR1cm4gdGhpcy5zZXJpYWxpemVCdWlsdEluVHlwZShyLGUpO2lmKGB0b0pTT05gaW4gZSYmdHlwZW9mIGUudG9KU09OPT1gZnVuY3Rpb25gKXtsZXQgdD1lLnRvSlNPTigpO3JldHVybiByKyh0eXBlb2YgdD09YG9iamVjdGAmJnQ/dGhpcy4kb2JqZWN0KHQpOmAoJHt0aGlzLnNlcmlhbGl6ZSh0KX0pYCl9bGV0IGk9T2JqZWN0LmtleXMoZSkuc29ydChveSksYT1gJHtyfXtgO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKXtsZXQgbj1pW3RdO2ErPWAke259OiR7dGhpcy5zZXJpYWxpemUoZVtuXSl9YCx0PGkubGVuZ3RoLTEmJihhKz1gLGApfXJldHVybiBhK2B9YH1zZXJpYWxpemVCdWlsdEluVHlwZShlLHQpe2xldCBuPXRoaXNbYCRgK2VdO2lmKG4pcmV0dXJuIG4uY2FsbCh0aGlzLHQpO2lmKHR5cGVvZiB0LmVudHJpZXM9PWBmdW5jdGlvbmApcmV0dXJuIHRoaXMuc2VyaWFsaXplT2JqZWN0RW50cmllcyhlLHQuZW50cmllcygpKTt0aHJvdyBFcnJvcihgQ2Fubm90IHNlcmlhbGl6ZSAke2V9YCl9c2VyaWFsaXplT2JqZWN0RW50cmllcyhlLHQpe2xldCBuPUFycmF5LmZyb20odCkuc29ydCgoZSx0KT0+dGhpcy5jb21wYXJlKGVbMF0sdFswXSkpLHI9YCR7ZX17YDtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0W3QsaV09bltlXTtyKz1gJHt0aGlzLnNlcmlhbGl6ZSh0LCEwKX06JHt0aGlzLnNlcmlhbGl6ZShpKX1gLGU8bi5sZW5ndGgtMSYmKHIrPWAsYCl9cmV0dXJuIHIrYH1gfSRvYmplY3QoZSl7bGV0IHQ9dGhpcy4jZS5nZXQoZSk7cmV0dXJuIHQ9PT12b2lkIDAmJih0aGlzLiNlLnNldChlLGAjJHt0aGlzLiNlLnNpemV9YCksdD10aGlzLnNlcmlhbGl6ZU9iamVjdChlKSx0aGlzLiNlLnNldChlLHQpKSx0fSRmdW5jdGlvbihlKXtsZXQgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gdC5zbGljZSgtMTUpPT09YFtuYXRpdmUgY29kZV0gfWA/YCR7ZS5uYW1lfHxgYH0oKVtuYXRpdmVdYDpgJHtlLm5hbWV9KCR7ZS5sZW5ndGh9KSR7dC5yZXBsYWNlKC9ccypcblxzKi9nLGBgKX1gfSRBcnJheShlKXtsZXQgdD1gW2A7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdCs9dGhpcy5zZXJpYWxpemUoZVtuXSksbjxlLmxlbmd0aC0xJiYodCs9YCxgKTtyZXR1cm4gdCtgXWB9JERhdGUoZSl7dHJ5e3JldHVybmBEYXRlKCR7ZS50b0lTT1N0cmluZygpfSlgfWNhdGNoe3JldHVybmBEYXRlKG51bGwpYH19JEFycmF5QnVmZmVyKGUpe3JldHVybmBBcnJheUJ1ZmZlclske25ldyBVaW50OEFycmF5KGUpLmpvaW4oYCxgKX1dYH0kU2V0KGUpe3JldHVybmBTZXQke3RoaXMuJEFycmF5KEFycmF5LmZyb20oZSkuc29ydCgoZSx0KT0+dGhpcy5jb21wYXJlKGUsdCkpKX1gfSRNYXAoZSl7cmV0dXJuIHRoaXMuc2VyaWFsaXplT2JqZWN0RW50cmllcyhgTWFwYCxlLmVudHJpZXMoKSl9fWZvcihsZXQgdCBvZltgRXJyb3JgLGBSZWdFeHBgLGBVUkxgXSllLnByb3RvdHlwZVtgJGArdF09ZnVuY3Rpb24oZSl7cmV0dXJuYCR7dH0oJHtlfSlgfTtmb3IobGV0IHQgb2ZbYEludDhBcnJheWAsYFVpbnQ4QXJyYXlgLGBVaW50OENsYW1wZWRBcnJheWAsYEludDE2QXJyYXlgLGBVaW50MTZBcnJheWAsYEludDMyQXJyYXlgLGBVaW50MzJBcnJheWAsYEZsb2F0MzJBcnJheWAsYEZsb2F0NjRBcnJheWBdKWUucHJvdG90eXBlW2AkYCt0XT1mdW5jdGlvbihlKXtyZXR1cm5gJHt0fVske2Uuam9pbihgLGApfV1gfTtmb3IobGV0IHQgb2ZbYEJpZ0ludDY0QXJyYXlgLGBCaWdVaW50NjRBcnJheWBdKWUucHJvdG90eXBlW2AkYCt0XT1mdW5jdGlvbihlKXtyZXR1cm5gJHt0fVske2Uuam9pbihgbixgKX0ke2UubGVuZ3RoPjA/YG5gOmBgfV1gfTtyZXR1cm4gZX0pKCk7ZnVuY3Rpb24gY3koZSx0KXtyZXR1cm4gZT09PXR8fHJ5KGUpPT09cnkodCl9ZnVuY3Rpb24gbHkoZSx0PS0xLzAsbj0xLzApe3JldHVybiBNYXRoLm1pbihuLE1hdGgubWF4KHQsZSkpfWZ1bmN0aW9uIHV5KGUsdCl7bGV0IG49dHlwZW9mIGU9PWBzdHJpbmdgJiYhdD9gJHtlfUNvbnRleHRgOnQscj1TeW1ib2wobik7cmV0dXJuW3Q9PntsZXQgbj1icihyLHQpO2lmKG58fG49PT1udWxsKXJldHVybiBuO3Rocm93IEVycm9yKGBJbmplY3Rpb24gXGAke3IudG9TdHJpbmcoKX1cYCBub3QgZm91bmQuIENvbXBvbmVudCBtdXN0IGJlIHVzZWQgd2l0aGluICR7QXJyYXkuaXNBcnJheShlKT9gb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJHtlLmpvaW4oYCwgYCl9YDpgXGAke2V9XGBgfWApfSxlPT4oeXIocixlKSxlKV19ZnVuY3Rpb24gZHkoKXtsZXQgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKDtlIT1udWxsJiZlLnNoYWRvd1Jvb3QhPW51bGwmJmUuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50IT1udWxsOyllPWUuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiBlfWZ1bmN0aW9uIGZ5KGUsdCxuKXtsZXQgcj1uLm9yaWdpbmFsRXZlbnQudGFyZ2V0LGk9bmV3IEN1c3RvbUV2ZW50KGUse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMCxkZXRhaWw6bn0pO3QmJnIuYWRkRXZlbnRMaXN0ZW5lcihlLHQse29uY2U6ITB9KSxyLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gcHkoZSl7cmV0dXJuIGU9PW51bGx9ZnVuY3Rpb24gbXkoZSx0KXtyZXR1cm4gcHkoZSk/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoZT0+Y3koZSx0KSk6Y3koZSx0KX1mdW5jdGlvbiBoeShlLHQpe3JldHVybiBGZSgpPyhJZShlLHQpLCEwKTohMX1mdW5jdGlvbiBneShlKXtsZXQgdD0hMSxuLHI9UGUoITApO3JldHVybigoLi4uaSk9Pih0fHw9KG49ci5ydW4oKCk9PmUoLi4uaSkpLCEwKSxuKSl9dmFyIF95PXR5cGVvZiB3aW5kb3c8YHVgJiZ0eXBlb2YgZG9jdW1lbnQ8YHVgO3R5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTxgdWAmJmdsb2JhbFRoaXMgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTt2YXIgdnk9ZT0+ZSE9PXZvaWQgMCx5eT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGJ5PWU9Pnl5LmNhbGwoZSk9PT1gW29iamVjdCBPYmplY3RdYCx4eT1TeSgpO2Z1bmN0aW9uIFN5KCl7dmFyIGUsdDtyZXR1cm4gX3kmJiEhKChlPXdpbmRvdykhPW51bGwmJihlPWUubmF2aWdhdG9yKSE9bnVsbCYmZS51c2VyQWdlbnQpJiYoL2lQKD86YWR8aG9uZXxvZCkvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfHwoKHQ9d2luZG93KT09bnVsbHx8KHQ9dC5uYXZpZ2F0b3IpPT1udWxsP3ZvaWQgMDp0Lm1heFRvdWNoUG9pbnRzKT4yJiYvaVBhZHxNYWNpbnRvc2gvLnRlc3Qod2luZG93Py5uYXZpZ2F0b3IudXNlckFnZW50KSl9ZnVuY3Rpb24gQ3koZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19ZnVuY3Rpb24gd3koZSl7cmV0dXJuIGV8fEZzKCl9ZnVuY3Rpb24gVHkoZSl7aWYoIV95KXJldHVybiBlO2xldCB0PTAsbixyLGk9KCk9PnstLXQsciYmdDw9MCYmKHIuc3RvcCgpLG49dm9pZCAwLHI9dm9pZCAwKX07cmV0dXJuKCguLi5hKT0+KHQrPTEscnx8KHI9UGUoITApLG49ci5ydW4oKCk9PmUoLi4uYSkpKSxoeShpKSxuKSl9ZnVuY3Rpb24gRXkoZSl7cmV0dXJuIFp0KHVuKGUpP25ldyBQcm94eSh7fSx7Z2V0KHQsbixyKXtyZXR1cm4gTShSZWZsZWN0LmdldChlLnZhbHVlLG4scikpfSxzZXQodCxuLHIpe3JldHVybiB1bihlLnZhbHVlW25dKSYmIXVuKHIpP2UudmFsdWVbbl0udmFsdWU9cjplLnZhbHVlW25dPXIsITB9LGRlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZS52YWx1ZSxuKX0saGFzKHQsbil7cmV0dXJuIFJlZmxlY3QuaGFzKGUudmFsdWUsbil9LG93bktleXMoKXtyZXR1cm4gT2JqZWN0LmtleXMoZS52YWx1ZSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcigpe3JldHVybntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19fSk6ZSl9ZnVuY3Rpb24gRHkoZSl7cmV0dXJuIEV5KFcoZSkpfWZ1bmN0aW9uIE95KGUsLi4udCl7bGV0IG49dC5mbGF0KCkscj1uWzBdO3JldHVybiBEeSgoKT0+T2JqZWN0LmZyb21FbnRyaWVzKHR5cGVvZiByPT1gZnVuY3Rpb25gP09iamVjdC5lbnRyaWVzKGJuKGUpKS5maWx0ZXIoKFtlLHRdKT0+IXIoaG4odCksZSkpOk9iamVjdC5lbnRyaWVzKGJuKGUpKS5maWx0ZXIoZT0+IW4uaW5jbHVkZXMoZVswXSkpKSl9ZnVuY3Rpb24ga3koZSx0PTFlNCl7cmV0dXJuIHluKChuLHIpPT57bGV0IGk9aG4oZSksYSxvPSgpPT5zZXRUaW1lb3V0KCgpPT57aT1obihlKSxyKCl9LGhuKHQpKTtyZXR1cm4gaHkoKCk9PntjbGVhclRpbWVvdXQoYSl9KSx7Z2V0KCl7cmV0dXJuIG4oKSxpfSxzZXQoZSl7aT1lLHIoKSxjbGVhclRpbWVvdXQoYSksYT1vKCl9fX0pfWZ1bmN0aW9uIEF5KGUsdCl7d3kodCkmJnRhKGUsdCl9ZnVuY3Rpb24gankoZSx0LG4pe3JldHVybiBEcihlLHQsey4uLm4saW1tZWRpYXRlOiEwfSl9dmFyIE15PV95P3dpbmRvdzp2b2lkIDA7X3kmJndpbmRvdy5kb2N1bWVudCxfeSYmd2luZG93Lm5hdmlnYXRvcixfeSYmd2luZG93LmxvY2F0aW9uO2Z1bmN0aW9uIE55KGUpe2xldCB0PWhuKGUpO3JldHVybiB0Py4kZWw/P3R9ZnVuY3Rpb24gUHkoLi4uZSl7bGV0IHQ9KGUsdCxuLHIpPT4oZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKSwoKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixyKSksbj1XKCgpPT57bGV0IHQ9Q3koaG4oZVswXSkpLmZpbHRlcihlPT5lIT1udWxsKTtyZXR1cm4gdC5ldmVyeShlPT50eXBlb2YgZSE9YHN0cmluZ2ApP3Q6dm9pZCAwfSk7cmV0dXJuIGp5KCgpPT5bbi52YWx1ZT8ubWFwKGU9Pk55KGUpKT8/W015XS5maWx0ZXIoZT0+ZSE9bnVsbCksQ3koaG4obi52YWx1ZT9lWzFdOmVbMF0pKSxDeShNKG4udmFsdWU/ZVsyXTplWzFdKSksaG4obi52YWx1ZT9lWzNdOmVbMl0pXSwoW2UsbixyLGldLGEsbyk9PntpZighZT8ubGVuZ3RofHwhbj8ubGVuZ3RofHwhcj8ubGVuZ3RoKXJldHVybjtsZXQgcz1ieShpKT97Li4uaX06aSxjPWUuZmxhdE1hcChlPT5uLmZsYXRNYXAobj0+ci5tYXAocj0+dChlLG4scixzKSkpKTtvKCgpPT57Yy5mb3JFYWNoKGU9PmUoKSl9KX0se2ZsdXNoOmBwb3N0YH0pfWZ1bmN0aW9uIEZ5KCl7bGV0IGU9ZG4oITEpLHQ9RnMoKTtyZXR1cm4gdCYmUWkoKCk9PntlLnZhbHVlPSEwfSx0KSxlfWZ1bmN0aW9uIEl5KGUpe2xldCB0PUZ5KCk7cmV0dXJuIFcoKCk9Pih0LnZhbHVlLCEhZSgpKSl9ZnVuY3Rpb24gTHkoZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2U6dHlwZW9mIGU9PWBzdHJpbmdgP3Q9PnQua2V5PT09ZTpBcnJheS5pc0FycmF5KGUpP3Q9PmUuaW5jbHVkZXModC5rZXkpOigpPT4hMH1mdW5jdGlvbiBSeSguLi5lKXtsZXQgdCxuLHI9e307ZS5sZW5ndGg9PT0zPyh0PWVbMF0sbj1lWzFdLHI9ZVsyXSk6ZS5sZW5ndGg9PT0yP3R5cGVvZiBlWzFdPT1gb2JqZWN0YD8odD0hMCxuPWVbMF0scj1lWzFdKToodD1lWzBdLG49ZVsxXSk6KHQ9ITAsbj1lWzBdKTtsZXR7dGFyZ2V0Omk9TXksZXZlbnROYW1lOmE9YGtleWRvd25gLHBhc3NpdmU6bz0hMSxkZWR1cGU6cz0hMX09cixjPUx5KHQpO3JldHVybiBQeShpLGEsZT0+e2UucmVwZWF0JiZobihzKXx8YyhlKSYmbihlKX0sbyl9ZnVuY3Rpb24genkoZSl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIEJ5KGUsdCxuPXt9KXtsZXR7d2luZG93OnI9TXksLi4uaX09bixhLG89SXkoKCk9PnImJmBSZXNpemVPYnNlcnZlcmBpbiByKSxzPSgpPT57YSYmPShhLmRpc2Nvbm5lY3QoKSx2b2lkIDApfSxjPURyKFcoKCk9PntsZXQgdD1obihlKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcChlPT5OeShlKSk6W055KHQpXX0pLGU9PntpZihzKCksby52YWx1ZSYmcil7YT1uZXcgUmVzaXplT2JzZXJ2ZXIodCk7Zm9yKGxldCB0IG9mIGUpdCYmYS5vYnNlcnZlKHQsaSl9fSx7aW1tZWRpYXRlOiEwLGZsdXNoOmBwb3N0YH0pLGw9KCk9PntzKCksYygpfTtyZXR1cm4gaHkobCkse2lzU3VwcG9ydGVkOm8sc3RvcDpsfX1mdW5jdGlvbiBWeShlLHQsbixyPXt9KXt2YXIgaSxhO2xldHtjbG9uZTpvPSExLHBhc3NpdmU6cz0hMSxldmVudE5hbWU6YyxkZWVwOmw9ITEsZGVmYXVsdFZhbHVlOnUsc2hvdWxkRW1pdDpkfT1yLGY9RnMoKSxwPW58fGY/LmVtaXR8fChmPT1udWxsfHwoaT1mLiRlbWl0KT09bnVsbD92b2lkIDA6aS5iaW5kKGYpKXx8KGY9PW51bGx8fChhPWYucHJveHkpPT1udWxsfHwoYT1hLiRlbWl0KT09bnVsbD92b2lkIDA6YS5iaW5kKGY/LnByb3h5KSksbT1jO3R8fD1gbW9kZWxWYWx1ZWAsbXx8PWB1cGRhdGU6JHt0LnRvU3RyaW5nKCl9YDtsZXQgaD1lPT5vP3R5cGVvZiBvPT1gZnVuY3Rpb25gP28oZSk6enkoZSk6ZSxnPSgpPT52eShlW3RdKT9oKGVbdF0pOnUsXz1lPT57ZD9kKGUpJiZwKG0sZSk6cChtLGUpfTtpZihzKXtsZXQgbj1qKGcoKSkscj0hMTtyZXR1cm4gRHIoKCk9PmVbdF0sZT0+e3J8fChyPSEwLG4udmFsdWU9aChlKSwkbigoKT0+cj0hMSkpfSksRHIobixuPT57IXImJihuIT09ZVt0XXx8bCkmJl8obil9LHtkZWVwOmx9KSxufXJldHVybiBXKHtnZXQoKXtyZXR1cm4gZygpfSxzZXQoZSl7XyhlKX19KX1mdW5jdGlvbiBIeShlKXtyZXR1cm4gZT9lLmZsYXRNYXAoZT0+ZS50eXBlPT09ST9IeShlLmNoaWxkcmVuKTpbZV0pOltdfXZhciBVeT1bYElOUFVUYCxgVEVYVEFSRUFgXTtmdW5jdGlvbiBXeShlLHQsbixyPXt9KXtpZighdHx8ci5lbmFibGVJZ25vcmVkRWxlbWVudCYmVXkuaW5jbHVkZXModC5ub2RlTmFtZSkpcmV0dXJuIG51bGw7bGV0e2Fycm93S2V5T3B0aW9uczppPWBib3RoYCxhdHRyaWJ1dGVOYW1lOmE9YFtkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtXWAsaXRlbXNBcnJheTpvPVtdLGxvb3A6cz0hMCxkaXI6Yz1gbHRyYCxwcmV2ZW50U2Nyb2xsOmw9ITAsZm9jdXM6dT0hMX09cixbZCxmLHAsbSxoLGddPVtlLmtleT09PWBBcnJvd1JpZ2h0YCxlLmtleT09PWBBcnJvd0xlZnRgLGUua2V5PT09YEFycm93VXBgLGUua2V5PT09YEFycm93RG93bmAsZS5rZXk9PT1gSG9tZWAsZS5rZXk9PT1gRW5kYF0sXz1wfHxtLHY9ZHx8ZjtpZighaCYmIWcmJighXyYmIXZ8fGk9PT1gdmVydGljYWxgJiZ2fHxpPT09YGhvcml6b250YWxgJiZfKSlyZXR1cm4gbnVsbDtsZXQgeT1uP0FycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKGEpKTpvO2lmKCF5Lmxlbmd0aClyZXR1cm4gbnVsbDtsJiZlLnByZXZlbnREZWZhdWx0KCk7bGV0IGI9bnVsbDtyZXR1cm4gdnx8Xz9iPUd5KHksdCx7Z29Gb3J3YXJkOl8/bTpjPT09YGx0cmA/ZDpmLGxvb3A6c30pOmg/Yj15LmF0KDApfHxudWxsOmcmJihiPXkuYXQoLTEpfHxudWxsKSx1JiZiPy5mb2N1cygpLGJ9ZnVuY3Rpb24gR3koZSx0LG4scj1lLmluY2x1ZGVzKHQpP2UubGVuZ3RoOmUubGVuZ3RoKzEpe2lmKC0tcj09PTApcmV0dXJuIG51bGw7bGV0IGk9ZS5pbmRleE9mKHQpLGE7aWYoYT1pPT09LTE/bi5nb0ZvcndhcmQ/MDplLmxlbmd0aC0xOm4uZ29Gb3J3YXJkP2krMTppLTEsIW4ubG9vcCYmKGE8MHx8YT49ZS5sZW5ndGgpKXJldHVybiBudWxsO2xldCBvPWVbKGErZS5sZW5ndGgpJWUubGVuZ3RoXTtyZXR1cm4gbz9vLmhhc0F0dHJpYnV0ZShgZGlzYWJsZWRgKSYmby5nZXRBdHRyaWJ1dGUoYGRpc2FibGVkYCkhPT1gZmFsc2VgP0d5KGUsbyxuLHIpOm86bnVsbH12YXJbS3kscXldPXV5KGBDb25maWdQcm92aWRlcmApLEp5PVp0KHtsYXllcnNSb290Om5ldyBTZXQsbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6bmV3IFNldCxvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzOnZvaWQgMCxicmFuY2hlczpuZXcgU2V0fSk7ZnVuY3Rpb24gWXkoZSl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHQhPT1udWxsJiZ0IT09T2JqZWN0LnByb3RvdHlwZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09bnVsbHx8U3ltYm9sLml0ZXJhdG9yIGluIGU/ITE6U3ltYm9sLnRvU3RyaW5nVGFnIGluIGU/T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgTW9kdWxlXWA6ITB9ZnVuY3Rpb24gWHkoZSx0LG49YC5gLHIpe2lmKCFZeSh0KSlyZXR1cm4gWHkoZSx7fSxuLHIpO2xldCBpPXsuLi50fTtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXMoZSkpe2lmKHQ9PT1gX19wcm90b19fYHx8dD09PWBjb25zdHJ1Y3RvcmApY29udGludWU7bGV0IGE9ZVt0XTthIT1udWxsJiYociYmcihpLHQsYSxuKXx8KGlbdF09QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShpW3RdKT9bLi4uYSwuLi5pW3RdXTpZeShhKSYmWXkoaVt0XSk/WHkoYSxpW3RdLChuP2Ake259LmA6YGApK3QudG9TdHJpbmcoKSxyKTphKSl9cmV0dXJuIGl9ZnVuY3Rpb24gWnkoZSl7cmV0dXJuKC4uLnQpPT50LnJlZHVjZSgodCxuKT0+WHkodCxuLGBgLGUpLHt9KX12YXIgUXk9WnkoKSwkeT1UeSgoKT0+e2xldCBlPWoobmV3IE1hcCksdD1qKCksbj1XKCgpPT57Zm9yKGxldCB0IG9mIGUudmFsdWUudmFsdWVzKCkpaWYodClyZXR1cm4hMDtyZXR1cm4hMX0pLHI9S3koe3Njcm9sbEJvZHk6aighMCl9KSxpPW51bGwsYT0oKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWBgLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9YGAsSnkubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT09PTAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YGApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShgLS1zY3JvbGxiYXItd2lkdGhgKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PXQudmFsdWU/P2BgLHh5JiZpPy4oKSx0LnZhbHVlPXZvaWQgMH07cmV0dXJuIERyKG4sKGUsbyk9PntpZighX3kpcmV0dXJuO2lmKCFlKXtvJiZhKCk7cmV0dXJufXQudmFsdWU9PT12b2lkIDAmJih0LnZhbHVlPWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cpO2xldCBzPXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxjPXtwYWRkaW5nOnMsbWFyZ2luOjB9LGw9ci5zY3JvbGxCb2R5Py52YWx1ZT90eXBlb2Ygci5zY3JvbGxCb2R5LnZhbHVlPT1gb2JqZWN0YD9ReSh7cGFkZGluZzpyLnNjcm9sbEJvZHkudmFsdWUucGFkZGluZz09PSEwP3M6ci5zY3JvbGxCb2R5LnZhbHVlLnBhZGRpbmcsbWFyZ2luOnIuc2Nyb2xsQm9keS52YWx1ZS5tYXJnaW49PT0hMD9zOnIuc2Nyb2xsQm9keS52YWx1ZS5tYXJnaW59LGMpOmM6e3BhZGRpbmc6MCxtYXJnaW46MH07cz4wJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9dHlwZW9mIGwucGFkZGluZz09YG51bWJlcmA/YCR7bC5wYWRkaW5nfXB4YDpTdHJpbmcobC5wYWRkaW5nKSxkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpblJpZ2h0PXR5cGVvZiBsLm1hcmdpbj09YG51bWJlcmA/YCR7bC5tYXJnaW59cHhgOlN0cmluZyhsLm1hcmdpbiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGAtLXNjcm9sbGJhci13aWR0aGAsYCR7c31weGApLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9YGhpZGRlbmApLHh5JiYoaT1QeShkb2N1bWVudCxgdG91Y2htb3ZlYCxlPT5uYihlKSx7cGFzc2l2ZTohMX0pKSwkbigoKT0+e24udmFsdWUmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9YGhpZGRlbmApfSl9LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHN5bmNgfSksZX0pO2Z1bmN0aW9uIGViKGUpe2xldCB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDcpLG49JHkoKTtuLnZhbHVlLnNldCh0LGU/PyExKTtsZXQgcj1XKHtnZXQ6KCk9Pm4udmFsdWUuZ2V0KHQpPz8hMSxzZXQ6ZT0+bi52YWx1ZS5zZXQodCxlKX0pO3JldHVybiBBeSgoKT0+e24udmFsdWUuZGVsZXRlKHQpfSkscn1mdW5jdGlvbiB0YihlKXtsZXQgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTtpZih0Lm92ZXJmbG93WD09PWBzY3JvbGxgfHx0Lm92ZXJmbG93WT09PWBzY3JvbGxgfHx0Lm92ZXJmbG93WD09PWBhdXRvYCYmZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofHx0Lm92ZXJmbG93WT09PWBhdXRvYCYmZS5jbGllbnRIZWlnaHQ8ZS5zY3JvbGxIZWlnaHQpcmV0dXJuITA7e2xldCB0PWUucGFyZW50Tm9kZTtyZXR1cm4hKHQgaW5zdGFuY2VvZiBFbGVtZW50KXx8dC50YWdOYW1lPT09YEJPRFlgPyExOnRiKHQpfX1mdW5jdGlvbiBuYihlKXtsZXQgdD1lfHx3aW5kb3cuZXZlbnQsbj10LnRhcmdldDtyZXR1cm4gbiBpbnN0YW5jZW9mIEVsZW1lbnQmJnRiKG4pPyExOnQudG91Y2hlcy5sZW5ndGg+MXx8KHQucHJldmVudERlZmF1bHQmJnQuY2FuY2VsYWJsZSYmdC5wcmV2ZW50RGVmYXVsdCgpLCExKX1mdW5jdGlvbiByYihlKXtsZXQgdD1LeSh7ZGlyOmooYGx0cmApfSk7cmV0dXJuIFcoKCk9PmU/LnZhbHVlfHx0LmRpcj8udmFsdWV8fGBsdHJgKX1mdW5jdGlvbiBpYihlKXtsZXQgdD1GcygpLG49dD8udHlwZS5lbWl0cyxyPXt9O3JldHVybiBuPy5sZW5ndGh8fGNvbnNvbGUud2FybihgTm8gZW1pdHRlZCBldmVudCBmb3VuZC4gUGxlYXNlIGNoZWNrIGNvbXBvbmVudDogJHt0Py50eXBlLl9fbmFtZX1gKSxuPy5mb3JFYWNoKHQ9PntyW2NlKEUodCkpXT0oLi4ubik9PmUodCwuLi5uKX0pLHJ9dmFyIGFiPTA7ZnVuY3Rpb24gb2IoKXt3cihlPT57aWYoIV95KXJldHVybjtsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWZvY3VzLWd1YXJkXWApO2RvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGBhZnRlcmJlZ2luYCx0WzBdPz9zYigpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChgYmVmb3JlZW5kYCx0WzFdPz9zYigpKSxhYisrLGUoKCk9PnthYj09PTEmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtZm9jdXMtZ3VhcmRdYCkuZm9yRWFjaChlPT5lLnJlbW92ZSgpKSxhYi0tfSl9KX1mdW5jdGlvbiBzYigpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHNwYW5gKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoYGRhdGEtcmVrYS1mb2N1cy1ndWFyZGAsYGApLGUudGFiSW5kZXg9MCxlLnN0eWxlLm91dGxpbmU9YG5vbmVgLGUuc3R5bGUub3BhY2l0eT1gMGAsZS5zdHlsZS5wb3NpdGlvbj1gZml4ZWRgLGUuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWAsZX1mdW5jdGlvbiBjYihlKXtyZXR1cm4gVygoKT0+IWhuKGUpfHwhIU55KGUpPy5jbG9zZXN0KGBmb3JtYCkpfWZ1bmN0aW9uIGxiKCl7bGV0IGU9RnMoKSx0PWooKSxuPVcoKCk9PnIoKSk7ZWEoKCk9PntuLnZhbHVlIT09cigpJiZtbih0KX0pO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdC52YWx1ZSYmYCRlbGBpbiB0LnZhbHVlJiZbYCN0ZXh0YCxgI2NvbW1lbnRgXS5pbmNsdWRlcyh0LnZhbHVlLiRlbC5ub2RlTmFtZSk/dC52YWx1ZS4kZWwubmV4dEVsZW1lbnRTaWJsaW5nOk55KHQpfWxldCBpPU9iamVjdC5hc3NpZ24oe30sZS5leHBvc2VkKSxhPXt9O2ZvcihsZXQgdCBpbiBlLnByb3BzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+ZS5wcm9wc1t0XX0pO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wKWZvcihsZXQgZSBpbiBpKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+aVtlXX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCIkZWwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmUudm5vZGUuZWx9KSxlLmV4cG9zZWQ9YTtmdW5jdGlvbiBvKG4pe2lmKHQudmFsdWU9bixuJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIiRlbCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+biBpbnN0YW5jZW9mIEVsZW1lbnQ/bjpuLiRlbH0pLCEobiBpbnN0YW5jZW9mIEVsZW1lbnQpJiYhT2JqZWN0Lmhhc093bihuLGAkZWxgKSkpe2xldCB0PW4uJC5leHBvc2VkLHI9T2JqZWN0LmFzc2lnbih7fSxhKTtmb3IobGV0IGUgaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PnRbZV19KTtlLmV4cG9zZWQ9cn19cmV0dXJue2ZvcndhcmRSZWY6byxjdXJyZW50UmVmOnQsY3VycmVudEVsZW1lbnQ6bn19ZnVuY3Rpb24gdWIoZSl7bGV0IHQ9RnMoKSxuPU9iamVjdC5rZXlzKHQ/LnR5cGUucHJvcHM/P3t9KS5yZWR1Y2UoKGUsbik9PntsZXQgcj0odD8udHlwZS5wcm9wc1tuXSkuZGVmYXVsdDtyZXR1cm4gciE9PXZvaWQgMCYmKGVbbl09ciksZX0se30pLHI9Q24oZSk7cmV0dXJuIFcoKCk9PntsZXQgZT17fSxpPXQ/LnZub2RlLnByb3BzPz97fTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZm9yRWFjaCh0PT57ZVtFKHQpXT1pW3RdfSksT2JqZWN0LmtleXMoey4uLm4sLi4uZX0pLnJlZHVjZSgoZSx0KT0+KHIudmFsdWVbdF0hPT12b2lkIDAmJihlW3RdPXIudmFsdWVbdF0pLGUpLHt9KX0pfWZ1bmN0aW9uIGRiKGUsdCl7bGV0IG49dWIoZSkscj10P2liKHQpOnt9O3JldHVybiBXKCgpPT4oey4uLm4udmFsdWUsLi4ucn0pKX12YXIgZmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudD5gdWA/bnVsbDooQXJyYXkuaXNBcnJheShlKT9lWzBdOmUpLm93bmVyRG9jdW1lbnQuYm9keX0scGI9bmV3IFdlYWtNYXAsbWI9bmV3IFdlYWtNYXAsaGI9e30sZ2I9MCxfYj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmKGUuaG9zdHx8X2IoZS5wYXJlbnROb2RlKSl9LHZiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe2lmKGUuY29udGFpbnModCkpcmV0dXJuIHQ7dmFyIG49X2IodCk7cmV0dXJuIG4mJmUuY29udGFpbnMobik/bjooY29uc29sZS5lcnJvcihgYXJpYS1oaWRkZW5gLHQsYGluIG5vdCBjb250YWluZWQgaW5zaWRlYCxlLGAuIERvaW5nIG5vdGhpbmdgKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hIWV9KX0seWI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dmIodCxBcnJheS5pc0FycmF5KGUpP2U6W2VdKTtoYltuXXx8KGhiW25dPW5ldyBXZWFrTWFwKTt2YXIgYT1oYltuXSxvPVtdLHM9bmV3IFNldCxjPW5ldyBTZXQoaSksbD1mdW5jdGlvbihlKXshZXx8cy5oYXMoZSl8fChzLmFkZChlKSxsKGUucGFyZW50Tm9kZSkpfTtpLmZvckVhY2gobCk7dmFyIHU9ZnVuY3Rpb24oZSl7IWV8fGMuaGFzKGUpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUuY2hpbGRyZW4sZnVuY3Rpb24oZSl7aWYocy5oYXMoZSkpdShlKTtlbHNlIHRyeXt2YXIgdD1lLmdldEF0dHJpYnV0ZShyKSxpPXQhPT1udWxsJiZ0IT09YGZhbHNlYCxjPShwYi5nZXQoZSl8fDApKzEsbD0oYS5nZXQoZSl8fDApKzE7cGIuc2V0KGUsYyksYS5zZXQoZSxsKSxvLnB1c2goZSksYz09PTEmJmkmJm1iLnNldChlLCEwKSxsPT09MSYmZS5zZXRBdHRyaWJ1dGUobixgdHJ1ZWApLGl8fGUuc2V0QXR0cmlidXRlKHIsYHRydWVgKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKGBhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gYCxlLHQpfX0pfTtyZXR1cm4gdSh0KSxzLmNsZWFyKCksZ2IrKyxmdW5jdGlvbigpe28uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1wYi5nZXQoZSktMSxpPWEuZ2V0KGUpLTE7cGIuc2V0KGUsdCksYS5zZXQoZSxpKSx0fHwobWIuaGFzKGUpfHxlLnJlbW92ZUF0dHJpYnV0ZShyKSxtYi5kZWxldGUoZSkpLGl8fGUucmVtb3ZlQXR0cmlidXRlKG4pfSksZ2ItLSxnYnx8KHBiPW5ldyBXZWFrTWFwLHBiPW5ldyBXZWFrTWFwLG1iPW5ldyBXZWFrTWFwLGhiPXt9KX19LGJiPWZ1bmN0aW9uKGUsdCxuKXtuPT09dm9pZCAwJiYobj1gZGF0YS1hcmlhLWhpZGRlbmApO3ZhciByPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShlKT9lOltlXSksaT10fHxmYihlKTtyZXR1cm4gaT8oci5wdXNoLmFwcGx5KHIsQXJyYXkuZnJvbShpLnF1ZXJ5U2VsZWN0b3JBbGwoYFthcmlhLWxpdmVdLCBzY3JpcHRgKSkpLHliKHIsaSxuLGBhcmlhLWhpZGRlbmApKTpmdW5jdGlvbigpe3JldHVybiBudWxsfX07ZnVuY3Rpb24geGIoZSl7bGV0IHQ7RHIoKCk9Pk55KGUpLGU9PntsZXQgbj0hMTt0cnl7bj0hIWU/LmNsb3Nlc3QoYFtwb3BvdmVyXTpub3QoOnBvcG92ZXItb3BlbilgKX1jYXRjaHt9ZSYmIW4/dD1iYihlKTp0JiZ0KCl9KSxuYSgoKT0+e3QmJnQoKX0pfXZhciBTYj0wO2Z1bmN0aW9uIENiKGUsdD1gcmVrYWApe2lmKGUpcmV0dXJuIGU7bGV0IG4scj1LeSh7dXNlSWQ6dm9pZCAwfSk7cmV0dXJuIG49ci51c2VJZD9yLnVzZUlkKCk6YHVzZUlkYGluIGJ1P29pPy4oKTpgJHsrK1NifWAsdD9gJHt0fS0ke259YDpufWZ1bmN0aW9uIHdiKGUpe2xldCB0PWooKSxuPVcoKCk9PnQudmFsdWU/LndpZHRoPz8wKSxyPVcoKCk9PnQudmFsdWU/LmhlaWdodD8/MCksaTtyZXR1cm4gUWkoKCk9PntsZXQgbj1OeShlKTtuPyh0LnZhbHVlPXt3aWR0aDpuLm9mZnNldFdpZHRoLGhlaWdodDpuLm9mZnNldEhlaWdodH0saT1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuO2xldCByPWVbMF0saSxhO2lmKGBib3JkZXJCb3hTaXplYGluIHIpe2xldCBlPXIuYm9yZGVyQm94U2l6ZSx0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO2k9dC5pbmxpbmVTaXplLGE9dC5ibG9ja1NpemV9ZWxzZSBpPW4ub2Zmc2V0V2lkdGgsYT1uLm9mZnNldEhlaWdodDt0LnZhbHVlPXt3aWR0aDppLGhlaWdodDphfX0pLGkub2JzZXJ2ZShuLHtib3g6YGJvcmRlci1ib3hgfSkpOnQudmFsdWU9dm9pZCAwfSksbmEoKCk9PntpPy5kaXNjb25uZWN0KCksaT12b2lkIDB9KSx7d2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gVGIoZSx0KXtsZXQgbj1qKGUpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHRbbi52YWx1ZV1bZV0/P24udmFsdWV9cmV0dXJue3N0YXRlOm4sZGlzcGF0Y2g6ZT0+e24udmFsdWU9cihlKX19fWZ1bmN0aW9uIEViKGUpe2xldCB0PWt5KGBgLDFlMyk7cmV0dXJue3NlYXJjaDp0LGhhbmRsZVR5cGVhaGVhZFNlYXJjaDoobixyKT0+e2lmKHQudmFsdWUrPW4sZSllKG4pO2Vsc2V7bGV0IGU9ZHkoKSxuPXIubWFwKGU9Pih7Li4uZSx0ZXh0VmFsdWU6ZS52YWx1ZT8udGV4dFZhbHVlPz9lLnJlZi50ZXh0Q29udGVudD8udHJpbSgpPz9gYH0pKSxpPW4uZmluZCh0PT50LnJlZj09PWUpLGE9T2Iobi5tYXAoZT0+ZS50ZXh0VmFsdWUpLHQudmFsdWUsaT8udGV4dFZhbHVlKSxvPW4uZmluZChlPT5lLnRleHRWYWx1ZT09PWEpO3JldHVybiBvJiZvLnJlZi5mb2N1cygpLG8/LnJlZn19LHJlc2V0VHlwZWFoZWFkOigpPT57dC52YWx1ZT1gYH19fWZ1bmN0aW9uIERiKGUsdCl7cmV0dXJuIGUubWFwKChuLHIpPT5lWyh0K3IpJWUubGVuZ3RoXSl9ZnVuY3Rpb24gT2IoZSx0LG4pe2xldCByPXQubGVuZ3RoPjEmJkFycmF5LmZyb20odCkuZXZlcnkoZT0+ZT09PXRbMF0pP3RbMF06dCxpPW4/ZS5pbmRleE9mKG4pOi0xLGE9RGIoZSxNYXRoLm1heChpLDApKTtyLmxlbmd0aD09PTEmJihhPWEuZmlsdGVyKGU9PmUhPT1uKSk7bGV0IG89YS5maW5kKGU9PmUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHIudG9Mb3dlckNhc2UoKSkpO3JldHVybiBvPT09bj92b2lkIDA6b31mdW5jdGlvbiBrYihlLHQpe2xldCBuPWooe30pLHI9aihgbm9uZWApLGk9aihlKSxhPWUudmFsdWU/YG1vdW50ZWRgOmB1bm1vdW50ZWRgLG8scz10LnZhbHVlPy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz9NeSx7c3RhdGU6YyxkaXNwYXRjaDpsfT1UYihhLHttb3VudGVkOntVTk1PVU5UOmB1bm1vdW50ZWRgLEFOSU1BVElPTl9PVVQ6YHVubW91bnRTdXNwZW5kZWRgfSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDpgbW91bnRlZGAsQU5JTUFUSU9OX0VORDpgdW5tb3VudGVkYH0sdW5tb3VudGVkOntNT1VOVDpgbW91bnRlZGB9fSksdT1lPT57aWYoX3kpe2xldCBuPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KTt0LnZhbHVlPy5kaXNwYXRjaEV2ZW50KG4pfX07RHIoZSxhc3luYyhlLGkpPT57bGV0IGE9aSE9PWU7aWYoYXdhaXQgJG4oKSxhKXtsZXQgYT1yLnZhbHVlLG89QWIodC52YWx1ZSk7ZT8obChgTU9VTlRgKSx1KGBlbnRlcmApLG89PT1gbm9uZWAmJnUoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8obChgVU5NT1VOVGApLHUoYGxlYXZlYCksdShgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGwoYEFOSU1BVElPTl9PVVRgKSx1KGBsZWF2ZWApKToobChgVU5NT1VOVGApLHUoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBkPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPUFiKHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9Yy52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKHUoYGFmdGVyLSR7YX1gKSxsKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmbChgQU5JTUFUSU9OX0VORGApfSxmPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPUFiKHQudmFsdWUpKX0scD1Ecih0LChlLHQpPT57ZT8obi52YWx1ZT1nZXRDb21wdXRlZFN0eWxlKGUpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxkKSxlLmFkZEV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpOihsKGBBTklNQVRJT05fRU5EYCksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbnN0YXJ0YCxmKSx0Py5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpfSx7aW1tZWRpYXRlOiEwfSksbT1EcihjLCgpPT57bGV0IGU9QWIodC52YWx1ZSk7ci52YWx1ZT1jLnZhbHVlPT09YG1vdW50ZWRgP2U6YG5vbmVgfSk7cmV0dXJuIG5hKCgpPT57cCgpLG0oKSx0LnZhbHVlJiYodC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsZiksdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pfSkse2lzUHJlc2VudDpXKCgpPT5bYG1vdW50ZWRgLGB1bm1vdW50U3VzcGVuZGVkYF0uaW5jbHVkZXMoYy52YWx1ZSkpfX1mdW5jdGlvbiBBYihlKXtyZXR1cm4gZSYmZ2V0Q29tcHV0ZWRTdHlsZShlKS5hbmltYXRpb25OYW1lfHxgbm9uZWB9dmFyIGpiPVAoe25hbWU6YFByZXNlbmNlYCxwcm9wczp7cHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59fSxzbG90czp7fSxzZXR1cChlLHtzbG90czp0LGV4cG9zZTpufSl7bGV0e3ByZXNlbnQ6cixmb3JjZU1vdW50Oml9PWJuKGUpLGE9aigpLHtpc1ByZXNlbnQ6b309a2IocixhKTtuKHtwcmVzZW50Om99KTtsZXQgcz10LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pO3M9SHkoc3x8W10pO2xldCBjPUZzKCk7aWYocyYmcz8ubGVuZ3RoPjEpe2xldCBlPWM/LnBhcmVudD8udHlwZS5uYW1lP2A8JHtjLnBhcmVudC50eXBlLm5hbWV9IC8+YDpgY29tcG9uZW50YDt0aHJvdyBFcnJvcihbYERldGVjdGVkIGFuIGludmFsaWQgY2hpbGRyZW4gZm9yIFxgJHtlfVxgIGZvciAgXGBQcmVzZW5jZVxgIGNvbXBvbmVudC5gLGBgLCJOb3RlOiBQcmVzZW5jZSB3b3JrcyBzaW1pbGFybHkgdG8gYHYtaWZgIGRpcmVjdGx5LCBidXQgaXQgd2FpdHMgZm9yIGFuaW1hdGlvbi90cmFuc2l0aW9uIHRvIGZpbmlzaGVkIGJlZm9yZSB1bm1vdW50aW5nLiBTbyBpdCBleHBlY3Qgb25seSBvbmUgZGlyZWN0IGNoaWxkIG9mIHZhbGlkIFZOb2RlIHR5cGUuIixgWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6YCxbIlByb3ZpZGUgYSBzaW5nbGUgY2hpbGQgZWxlbWVudCBzbyB0aGF0IGBwcmVzZW5jZWAgZGlyZWN0aXZlIGF0dGFjaCBjb3JyZWN0bHkuIixgRW5zdXJlIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiBhY3R1YWwgZWxlbWVudCBpbnN0ZWFkIG9mIGEgcmF3IHRleHQgbm9kZSBvciBjb21tZW50IG5vZGUuYF0ubWFwKGU9PmAgIC0gJHtlfWApLmpvaW4oYApgKV0uam9pbihgCmApKX1yZXR1cm4oKT0+aS52YWx1ZXx8ci52YWx1ZXx8by52YWx1ZT9HKHQuZGVmYXVsdCh7cHJlc2VudDpvLnZhbHVlfSlbMF0se3JlZjplPT57bGV0IHQ9TnkoZSk7cmV0dXJuIHQ/Lmhhc0F0dHJpYnV0ZT09PXZvaWQgMHx8KHQ/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9hLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6YS52YWx1ZT10KSx0fX0pOm51bGx9fSksTWI9UCh7bmFtZTpgUHJpbWl0aXZlU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe3JldHVybigpPT57aWYoIW4uZGVmYXVsdClyZXR1cm4gbnVsbDtsZXQgZT1IeShuLmRlZmF1bHQoKSkscj1lLmZpbmRJbmRleChlPT5lLnR5cGUhPT1scyk7aWYocj09PS0xKXJldHVybiBlO2xldCBpPWVbcl07ZGVsZXRlIGkucHJvcHM/LnJlZjtsZXQgYT1pLnByb3BzP2tzKHQsaS5wcm9wcyk6dCxvPXdzKHsuLi5pLHByb3BzOnt9fSxhKTtyZXR1cm4gZS5sZW5ndGg9PT0xP286KGVbcl09byxlKX19fSksTmI9W2BhcmVhYCxgaW1nYCxgaW5wdXRgXSxQYj1QKHtuYW1lOmBQcmltaXRpdmVgLGluaGVyaXRBdHRyczohMSxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFzOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0OmBkaXZgfX0sc2V0dXAoZSx7YXR0cnM6dCxzbG90czpufSl7bGV0IHI9ZS5hc0NoaWxkP2B0ZW1wbGF0ZWA6ZS5hcztyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgJiZOYi5pbmNsdWRlcyhyKT8oKT0+RyhyLHQpOnI9PT1gdGVtcGxhdGVgPygpPT5HKE1iLHQse2RlZmF1bHQ6bi5kZWZhdWx0fSk6KCk9PkcoZS5hcyx0LHtkZWZhdWx0Om4uZGVmYXVsdH0pfX0pO2Z1bmN0aW9uIEZiKCl7bGV0IGU9aigpO3JldHVybntwcmltaXRpdmVFbGVtZW50OmUsY3VycmVudEVsZW1lbnQ6VygoKT0+W2AjdGV4dGAsYCNjb21tZW50YF0uaW5jbHVkZXMoZS52YWx1ZT8uJGVsLm5vZGVOYW1lKT9lLnZhbHVlPy4kZWwubmV4dEVsZW1lbnRTaWJsaW5nOk55KGUpKX19dmFyW0liLExiXT11eShgQ29sbGFwc2libGVSb290YCksUmI9UCh7X19uYW1lOmBDb2xsYXBzaWJsZVJvb3RgLHByb3BzOntkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LG9wZW46e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OnZvaWQgMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtleHBvc2U6dCxlbWl0Om59KXtsZXQgcj1lLGk9Vnkocixgb3BlbmAsbix7ZGVmYXVsdFZhbHVlOnIuZGVmYXVsdE9wZW4scGFzc2l2ZTpyLm9wZW49PT12b2lkIDB9KSx7ZGlzYWJsZWQ6YSx1bm1vdW50T25IaWRlOm99PWJuKHIpO3JldHVybiBMYih7Y29udGVudElkOmBgLGRpc2FibGVkOmEsb3BlbjppLHVubW91bnRPbkhpZGU6byxvbk9wZW5Ub2dnbGU6KCk9PnthLnZhbHVlfHwoaS52YWx1ZT0haS52YWx1ZSl9fSksdCh7b3BlbjppfSksbGIoKSwoZSx0KT0+KEwoKSx6KE0oUGIpLHthczplLmFzLCJhcy1jaGlsZCI6ci5hc0NoaWxkLCJkYXRhLXN0YXRlIjpNKGkpP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6TShhKT9gYDp2b2lkIDB9LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCx7b3BlbjpNKGkpfSldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLHpiPVAoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YENvbGxhcHNpYmxlQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Bjb250ZW50Rm91bmRgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPUliKCk7aS5jb250ZW50SWR8fD1DYih2b2lkIDAsYHJla2EtY29sbGFwc2libGUtY29udGVudGApO2xldCBhPWooKSx7Zm9yd2FyZFJlZjpvLGN1cnJlbnRFbGVtZW50OnN9PWxiKCksYz1qKDApLGw9aigwKSx1PVcoKCk9Pmkub3Blbi52YWx1ZSksZD1qKHUudmFsdWUpLGY9aigpO0RyKCgpPT5bdS52YWx1ZSxhLnZhbHVlPy5wcmVzZW50XSxhc3luYygpPT57YXdhaXQgJG4oKTtsZXQgZT1zLnZhbHVlO2lmKCFlKXJldHVybjtmLnZhbHVlPWYudmFsdWV8fHt0cmFuc2l0aW9uRHVyYXRpb246ZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24sYW5pbWF0aW9uTmFtZTplLnN0eWxlLmFuaW1hdGlvbk5hbWV9LGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZS5zdHlsZS5hbmltYXRpb25OYW1lPWBub25lYDtsZXQgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2wudmFsdWU9dC5oZWlnaHQsYy52YWx1ZT10LndpZHRoLGQudmFsdWV8fChlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1mLnZhbHVlLnRyYW5zaXRpb25EdXJhdGlvbixlLnN0eWxlLmFuaW1hdGlvbk5hbWU9Zi52YWx1ZS5hbmltYXRpb25OYW1lKX0se2ltbWVkaWF0ZTohMH0pO2xldCBwPVcoKCk9PmQudmFsdWUmJmkub3Blbi52YWx1ZSk7cmV0dXJuIFFpKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57ZC52YWx1ZT0hMX0pfSksUHkocyxgYmVmb3JlbWF0Y2hgLGU9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntpLm9uT3BlblRvZ2dsZSgpLHIoYGNvbnRlbnRGb3VuZGApfSl9KSwoZSx0KT0+KEwoKSx6KE0oamIpLHtyZWZfa2V5OmBwcmVzZW50UmVmYCxyZWY6YSxwcmVzZW50OmUuZm9yY2VNb3VudHx8TShpKS5vcGVuLnZhbHVlLCJmb3JjZS1tb3VudCI6ITB9LHtkZWZhdWx0Ok4oKHtwcmVzZW50OnR9KT0+W1YoTShQYiksa3MoZS4kYXR0cnMse2lkOk0oaSkuY29udGVudElkLHJlZjpNKG8pLCJhcy1jaGlsZCI6bi5hc0NoaWxkLGFzOmUuYXMsaGlkZGVuOnQ/dm9pZCAwOk0oaSkudW5tb3VudE9uSGlkZS52YWx1ZT9gYDpgdW50aWwtZm91bmRgLCJkYXRhLXN0YXRlIjpwLnZhbHVlP3ZvaWQgMDpNKGkpLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpNKGkpLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsc3R5bGU6eyItLXJla2EtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmAke2wudmFsdWV9cHhgLCItLXJla2EtY29sbGFwc2libGUtY29udGVudC13aWR0aCI6YCR7Yy52YWx1ZX1weGB9fSkse2RlZmF1bHQ6TigoKT0+WyFNKGkpLnVubW91bnRPbkhpZGUudmFsdWV8fHQ/RihlLiRzbG90cyxgZGVmYXVsdGAse2tleTowfSk6VShgdi1pZmAsITApXSksXzoyfSwxMDQwLFtgaWRgLGBhcy1jaGlsZGAsYGFzYCxgaGlkZGVuYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBzdHlsZWBdKV0pLF86M30sOCxbYHByZXNlbnRgXSkpfX0pLEJiPVAoe19fbmFtZTpgQ29sbGFwc2libGVUcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGJ1dHRvbmB9fSxzZXR1cChlKXtsZXQgdD1lO2xiKCk7bGV0IG49SWIoKTtyZXR1cm4oZSxyKT0+KEwoKSx6KE0oUGIpLHt0eXBlOmUuYXM9PT1gYnV0dG9uYD9gYnV0dG9uYDp2b2lkIDAsYXM6ZS5hcywiYXMtY2hpbGQiOnQuYXNDaGlsZCwiYXJpYS1jb250cm9scyI6TShuKS5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOk0obikub3Blbi52YWx1ZSwiZGF0YS1zdGF0ZSI6TShuKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6TShuKS5kaXNhYmxlZD8udmFsdWU/YGA6dm9pZCAwLGRpc2FibGVkOk0obikuZGlzYWJsZWQ/LnZhbHVlLG9uQ2xpY2s6TShuKS5vbk9wZW5Ub2dnbGV9LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0eXBlYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkaXNhYmxlZGAsYG9uQ2xpY2tgXSkpfX0pO2Z1bmN0aW9uIFZiKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl7bGV0IHI9bnx8dDtyZXR1cm4gbiE9PXZvaWQgMHx8dCE9PXZvaWQgMD9BcnJheS5pc0FycmF5KHIpP2BtdWx0aXBsZWA6YHNpbmdsZWA6ZT8/YHNpbmdsZWB9ZnVuY3Rpb24gSGIoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KXtyZXR1cm4gZXx8VmIoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KX1mdW5jdGlvbiBVYih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0fSl7cmV0dXJuIHQ9PT12b2lkIDA/ZT09PWBzaW5nbGVgP3ZvaWQgMDpbXTp0fWZ1bmN0aW9uIFdiKGUsdCl7bGV0IG49VygoKT0+SGIoZSkpLHI9VnkoZSxgbW9kZWxWYWx1ZWAsdCx7ZGVmYXVsdFZhbHVlOlViKGUpLHBhc3NpdmU6ZS5tb2RlbFZhbHVlPT09dm9pZCAwLGRlZXA6ITB9KTtmdW5jdGlvbiBpKGUpe2lmKG4udmFsdWU9PT1gc2luZ2xlYClyLnZhbHVlPWN5KGUsci52YWx1ZSk/dm9pZCAwOmU7ZWxzZXtsZXQgdD1BcnJheS5pc0FycmF5KHIudmFsdWUpP1suLi5yLnZhbHVlfHxbXV06W3IudmFsdWVdLmZpbHRlcihCb29sZWFuKTtpZihteSh0LGUpKXtsZXQgbj10LmZpbmRJbmRleCh0PT5jeSh0LGUpKTt0LnNwbGljZShuLDEpfWVsc2UgdC5wdXNoKGUpO3IudmFsdWU9dH19cmV0dXJue21vZGVsVmFsdWU6cixjaGFuZ2VNb2RlbFZhbHVlOmksaXNTaW5nbGU6VygoKT0+bi52YWx1ZT09PWBzaW5nbGVgKX19dmFyW0diLEtiXT11eShgQWNjb3JkaW9uUm9vdGApLHFiPVAoe19fbmFtZTpgQWNjb3JkaW9uUm9vdGAscHJvcHM6e2NvbGxhcHNpYmxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgdmVydGljYWxgfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSx0eXBlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7ZGlyOmksZGlzYWJsZWQ6YSx1bm1vdW50T25IaWRlOm99PWJuKG4pLHM9cmIoaSkse21vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmwsaXNTaW5nbGU6dX09V2IobixyKSx7Zm9yd2FyZFJlZjpkLGN1cnJlbnRFbGVtZW50OmZ9PWxiKCk7cmV0dXJuIEtiKHtkaXNhYmxlZDphLGRpcmVjdGlvbjpzLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24scGFyZW50RWxlbWVudDpmLGlzU2luZ2xlOnUsY29sbGFwc2libGU6bi5jb2xsYXBzaWJsZSxtb2RlbFZhbHVlOmMsY2hhbmdlTW9kZWxWYWx1ZTpsLHVubW91bnRPbkhpZGU6b30pLChlLHQpPT4oTCgpLHooTShQYikse3JlZjpNKGQpLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXN9LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCx7bW9kZWxWYWx1ZTpNKGMpfSldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYF0pKX19KSxKYj1mdW5jdGlvbihlKXtyZXR1cm4gZS5PcGVuPWBvcGVuYCxlLkNsb3NlZD1gY2xvc2VkYCxlfShKYnx8e30pLFtZYixYYl09dXkoYEFjY29yZGlvbkl0ZW1gKSxaYj1QKHtfX25hbWU6YEFjY29yZGlvbkl0ZW1gLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OnZvaWQgMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSx7ZXhwb3NlOnR9KXtsZXQgbj1lLHI9R2IoKSxpPVcoKCk9PnIuaXNTaW5nbGUudmFsdWU/bi52YWx1ZT09PXIubW9kZWxWYWx1ZS52YWx1ZTpBcnJheS5pc0FycmF5KHIubW9kZWxWYWx1ZS52YWx1ZSkmJnIubW9kZWxWYWx1ZS52YWx1ZS5pbmNsdWRlcyhuLnZhbHVlKSksYT1XKCgpPT5yLmRpc2FibGVkLnZhbHVlfHxuLmRpc2FibGVkKSxvPVcoKCk9PmEudmFsdWU/YGA6dm9pZCAwKSxzPVcoKCk9PmkudmFsdWU/SmIuT3BlbjpKYi5DbG9zZWQpO3Qoe29wZW46aSxkYXRhRGlzYWJsZWQ6b30pO2xldHtjdXJyZW50UmVmOmMsY3VycmVudEVsZW1lbnQ6bH09bGIoKTtYYih7b3BlbjppLGRhdGFTdGF0ZTpzLGRpc2FibGVkOmEsZGF0YURpc2FibGVkOm8sdHJpZ2dlcklkOmBgLGN1cnJlbnRSZWY6YyxjdXJyZW50RWxlbWVudDpsLHZhbHVlOlcoKCk9Pm4udmFsdWUpfSk7ZnVuY3Rpb24gdShlKXtsZXQgdD1lLnRhcmdldDtpZihBcnJheS5mcm9tKHIucGFyZW50RWxlbWVudC52YWx1ZT8ucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcmVrYS1jb2xsZWN0aW9uLWl0ZW1dYCk/P1tdKS5maW5kSW5kZXgoZT0+ZT09PXQpPT09LTEpcmV0dXJuIG51bGw7V3koZSx0LHIucGFyZW50RWxlbWVudC52YWx1ZSx7YXJyb3dLZXlPcHRpb25zOnIub3JpZW50YXRpb24sZGlyOnIuZGlyZWN0aW9uLnZhbHVlLGZvY3VzOiEwfSl9cmV0dXJuKGUsdCk9PihMKCkseihNKFJiKSx7ImRhdGEtb3JpZW50YXRpb24iOk0ocikub3JpZW50YXRpb24sImRhdGEtZGlzYWJsZWQiOm8udmFsdWUsImRhdGEtc3RhdGUiOnMudmFsdWUsZGlzYWJsZWQ6YS52YWx1ZSxvcGVuOmkudmFsdWUsYXM6bi5hcywiYXMtY2hpbGQiOm4uYXNDaGlsZCwidW5tb3VudC1vbi1oaWRlIjpuLnVubW91bnRPbkhpZGU/P00ocikudW5tb3VudE9uSGlkZS52YWx1ZSxvbktleWRvd246b3UodSxbYHVwYCxgZG93bmAsYGxlZnRgLGByaWdodGAsYGhvbWVgLGBlbmRgXSl9LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCx7b3BlbjppLnZhbHVlfSldKSxfOjN9LDgsW2BkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtc3RhdGVgLGBkaXNhYmxlZGAsYG9wZW5gLGBhc2AsYGFzLWNoaWxkYCxgdW5tb3VudC1vbi1oaWRlYF0pKX19KSxRYj1QKHtfX25hbWU6YEFjY29yZGlvbkNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1HYigpLHI9WWIoKTtyZXR1cm4gbGIoKSwoZSxpKT0+KEwoKSx6KE0oemIpLHtyb2xlOmByZWdpb25gLCJhcy1jaGlsZCI6dC5hc0NoaWxkLGFzOmUuYXMsImZvcmNlLW1vdW50Ijp0LmZvcmNlTW91bnQsImFyaWEtbGFiZWxsZWRieSI6TShyKS50cmlnZ2VySWQsImRhdGEtc3RhdGUiOk0ocikuZGF0YVN0YXRlLnZhbHVlLCJkYXRhLWRpc2FibGVkIjpNKHIpLmRhdGFEaXNhYmxlZC52YWx1ZSwiZGF0YS1vcmllbnRhdGlvbiI6TShuKS5vcmllbnRhdGlvbixzdHlsZTp7Ii0tcmVrYS1hY2NvcmRpb24tY29udGVudC13aWR0aCI6YHZhcigtLXJla2EtY29sbGFwc2libGUtY29udGVudC13aWR0aClgLCItLXJla2EtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0IjpgdmFyKC0tcmVrYS1jb2xsYXBzaWJsZS1jb250ZW50LWhlaWdodClgfSxvbkNvbnRlbnRGb3VuZDppWzBdfHw9ZT0+TShuKS5jaGFuZ2VNb2RlbFZhbHVlKE0ocikudmFsdWUudmFsdWUpfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYGZvcmNlLW1vdW50YCxgYXJpYS1sYWJlbGxlZGJ5YCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLW9yaWVudGF0aW9uYF0pKX19KSwkYj1QKHtfX25hbWU6YEFjY29yZGlvbkhlYWRlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBoM2B9fSxzZXR1cChlKXtsZXQgdD1lLG49R2IoKSxyPVliKCk7cmV0dXJuIGxiKCksKGUsaSk9PihMKCkseihNKFBiKSx7YXM6dC5hcywiYXMtY2hpbGQiOnQuYXNDaGlsZCwiZGF0YS1vcmllbnRhdGlvbiI6TShuKS5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6TShyKS5kYXRhU3RhdGUudmFsdWUsImRhdGEtZGlzYWJsZWQiOk0ocikuZGF0YURpc2FibGVkLnZhbHVlfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGBdKSl9fSksZXg9UCh7X19uYW1lOmBBY2NvcmRpb25UcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUdiKCkscj1ZYigpO3IudHJpZ2dlcklkfHw9Q2Iodm9pZCAwLGByZWthLWFjY29yZGlvbi10cmlnZ2VyYCk7ZnVuY3Rpb24gaSgpe2xldCBlPW4uaXNTaW5nbGUudmFsdWUmJnIub3Blbi52YWx1ZSYmIW4uY29sbGFwc2libGU7ci5kaXNhYmxlZC52YWx1ZXx8ZXx8bi5jaGFuZ2VNb2RlbFZhbHVlKHIudmFsdWUudmFsdWUpfXJldHVybihlLGEpPT4oTCgpLHooTShCYikse2lkOk0ocikudHJpZ2dlcklkLHJlZjpNKHIpLmN1cnJlbnRSZWYsImRhdGEtcmVrYS1jb2xsZWN0aW9uLWl0ZW0iOmBgLGFzOnQuYXMsImFzLWNoaWxkIjp0LmFzQ2hpbGQsImFyaWEtZGlzYWJsZWQiOk0ocikuZGlzYWJsZWQudmFsdWV8fHZvaWQgMCwiYXJpYS1leHBhbmRlZCI6TShyKS5vcGVuLnZhbHVlfHwhMSwiZGF0YS1kaXNhYmxlZCI6TShyKS5kYXRhRGlzYWJsZWQudmFsdWUsImRhdGEtb3JpZW50YXRpb24iOk0obikub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOk0ocikuZGF0YVN0YXRlLnZhbHVlLGRpc2FibGVkOk0ocikuZGlzYWJsZWQudmFsdWUsb25DbGljazppfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgaWRgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1kaXNhYmxlZGAsYGFyaWEtZXhwYW5kZWRgLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtc3RhdGVgLGBkaXNhYmxlZGBdKSl9fSksdHg9YGRpc21pc3NhYmxlTGF5ZXIucG9pbnRlckRvd25PdXRzaWRlYCxueD1gZGlzbWlzc2FibGVMYXllci5mb2N1c091dHNpZGVgO2Z1bmN0aW9uIHJ4KGUsdCl7aWYoISh0IGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuITE7bGV0IG49dC5jbG9zZXN0KGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSxyPWUuZGF0YXNldC5kaXNtaXNzYWJsZUxheWVyPT09YGA/ZTplLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApLGk9QXJyYXkuZnJvbShlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCkpO3JldHVybiEhKG4mJihyPT09bnx8aS5pbmRleE9mKHIpPGkuaW5kZXhPZihuKSkpfWZ1bmN0aW9uIGl4KGUsdCxuPSEwKXtsZXQgcj10Py52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcz8uZG9jdW1lbnQsaT1qKCExKSxhPWooKCk9Pnt9KTtyZXR1cm4gd3Iobz0+e2lmKCFfeXx8IWhuKG4pKXJldHVybjtsZXQgcz1hc3luYyBuPT57bGV0IG89bi50YXJnZXQ7aWYoISghdD8udmFsdWV8fCFvKSl7aWYocngodC52YWx1ZSxvKSl7aS52YWx1ZT0hMTtyZXR1cm59aWYobi50YXJnZXQmJiFpLnZhbHVlKXtsZXQgdD17b3JpZ2luYWxFdmVudDpufTtmdW5jdGlvbiBpKCl7ZnkodHgsZSx0KX1uLnBvaW50ZXJUeXBlPT09YHRvdWNoYD8oci5yZW1vdmVFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSksYS52YWx1ZT1pLHIuYWRkRXZlbnRMaXN0ZW5lcihgY2xpY2tgLGEudmFsdWUse29uY2U6ITB9KSk6aSgpfWVsc2Ugci5yZW1vdmVFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSk7aS52YWx1ZT0hMX19LGM9d2luZG93LnNldFRpbWVvdXQoKCk9PntyLmFkZEV2ZW50TGlzdGVuZXIoYHBvaW50ZXJkb3duYCxzKX0sMCk7bygoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoYyksci5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVyZG93bmAscyksci5yZW1vdmVFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSl9KX0pLHtvblBvaW50ZXJEb3duQ2FwdHVyZTooKT0+e2huKG4pJiYoaS52YWx1ZT0hMCl9fX1mdW5jdGlvbiBheChlLHQsbj0hMCl7bGV0IHI9dD8udmFsdWU/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXM/LmRvY3VtZW50LGk9aighMSk7cmV0dXJuIHdyKGE9PntpZighX3l8fCFobihuKSlyZXR1cm47bGV0IG89YXN5bmMgbj0+e2lmKCF0Py52YWx1ZSlyZXR1cm47YXdhaXQgJG4oKSxhd2FpdCAkbigpO2xldCByPW4udGFyZ2V0OyF0LnZhbHVlfHwhcnx8cngodC52YWx1ZSxyKXx8bi50YXJnZXQmJiFpLnZhbHVlJiZmeShueCxlLHtvcmlnaW5hbEV2ZW50Om59KX07ci5hZGRFdmVudExpc3RlbmVyKGBmb2N1c2luYCxvKSxhKCgpPT5yLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG8pKX0pLHtvbkZvY3VzQ2FwdHVyZTooKT0+e2huKG4pJiYoaS52YWx1ZT0hMCl9LG9uQmx1ckNhcHR1cmU6KCk9PntobihuKSYmKGkudmFsdWU9ITEpfX19dmFyIG94PVAoe19fbmFtZTpgRGlzbWlzc2FibGVMYXllcmAscHJvcHM6e2Rpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9fSxlbWl0czpbYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgLGBmb2N1c091dHNpZGVgLGBpbnRlcmFjdE91dHNpZGVgLGBkaXNtaXNzYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2ZvcndhcmRSZWY6aSxjdXJyZW50RWxlbWVudDphfT1sYigpLG89VygoKT0+YS52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcy5kb2N1bWVudCkscz1XKCgpPT5KeS5sYXllcnNSb290KSxjPVcoKCk9PmEudmFsdWU/QXJyYXkuZnJvbShzLnZhbHVlKS5pbmRleE9mKGEudmFsdWUpOi0xKSxsPVcoKCk9Pkp5LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU+MCksdT1XKCgpPT57bGV0IGU9QXJyYXkuZnJvbShzLnZhbHVlKSxbdF09Wy4uLkp5LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSksbj1lLmluZGV4T2YodCk7cmV0dXJuIGMudmFsdWU+PW59KSxkPWl4KGFzeW5jIGU9PntsZXQgdD1bLi4uSnkuYnJhbmNoZXNdLnNvbWUodD0+dD8uY29udGFpbnMoZS50YXJnZXQpKTshbi5wcmVzZW50fHwhdS52YWx1ZXx8dHx8KHIoYHBvaW50ZXJEb3duT3V0c2lkZWAsZSkscihgaW50ZXJhY3RPdXRzaWRlYCxlKSxhd2FpdCAkbigpLGUuZGVmYXVsdFByZXZlbnRlZHx8cihgZGlzbWlzc2ApKX0sYSksZj1heChlPT57bGV0IHQ9Wy4uLkp5LmJyYW5jaGVzXS5zb21lKHQ9PnQ/LmNvbnRhaW5zKGUudGFyZ2V0KSk7IW4ucHJlc2VudHx8dHx8KHIoYGZvY3VzT3V0c2lkZWAsZSkscihgaW50ZXJhY3RPdXRzaWRlYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fHIoYGRpc21pc3NgKSl9LGEpO3JldHVybiBSeShgRXNjYXBlYCxlPT57bi5wcmVzZW50JiZjLnZhbHVlPT09cy52YWx1ZS5zaXplLTEmJihyKGBlc2NhcGVLZXlEb3duYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fHIoYGRpc21pc3NgKSl9KSxEcihbYSwoKT0+bi5kaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHMsKCk9Pm4ucHJlc2VudF0sKFtlLHQsbl0scixpKT0+eyFlfHwhbnx8dCYmKEp5LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoSnkub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cz1vLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxvLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWApLEp5LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChlKSxpKCgpPT57SnkubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGUpLEp5LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYhcHkoSnkub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cykmJihvLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1KeS5vcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzKX0pKX0se2ltbWVkaWF0ZTohMH0pLERyKFthLCgpPT5uLnByZXNlbnRdLChbZSx0XSxuLHIpPT57IWV8fCF0fHwocy52YWx1ZS5hZGQoZSkscigoKT0+e3MudmFsdWUuZGVsZXRlKGUpfSkpfSx7aW1tZWRpYXRlOiEwfSksd3IoZT0+e2UoKCk9PnthLnZhbHVlJiYocy52YWx1ZS5kZWxldGUoYS52YWx1ZSksSnkubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGEudmFsdWUpKX0pfSksKGUsdCk9PihMKCkseihNKFBiKSx7cmVmOk0oaSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcywiZGF0YS1kaXNtaXNzYWJsZS1sYXllciI6YGAsc3R5bGU6Z2Uoe3BvaW50ZXJFdmVudHM6bC52YWx1ZT91LnZhbHVlP2BhdXRvYDpgbm9uZWA6dm9pZCAwfSksb25Gb2N1c0NhcHR1cmU6TShmKS5vbkZvY3VzQ2FwdHVyZSxvbkJsdXJDYXB0dXJlOk0oZikub25CbHVyQ2FwdHVyZSxvblBvaW50ZXJkb3duQ2FwdHVyZTpNKGQpLm9uUG9pbnRlckRvd25DYXB0dXJlfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYHN0eWxlYCxgb25Gb2N1c0NhcHR1cmVgLGBvbkJsdXJDYXB0dXJlYCxgb25Qb2ludGVyZG93bkNhcHR1cmVgXSkpfX0pLHN4PWd5KCgpPT5qKFtdKSk7ZnVuY3Rpb24gY3goKXtsZXQgZT1zeCgpO3JldHVybnthZGQodCl7bGV0IG49ZS52YWx1ZVswXTt0IT09biYmbj8ucGF1c2UoKSxlLnZhbHVlPWx4KGUudmFsdWUsdCksZS52YWx1ZS51bnNoaWZ0KHQpfSxyZW1vdmUodCl7ZS52YWx1ZT1seChlLnZhbHVlLHQpLGUudmFsdWVbMF0/LnJlc3VtZSgpfX19ZnVuY3Rpb24gbHgoZSx0KXtsZXQgbj1bLi4uZV0scj1uLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufXZhciB1eD1gZm9jdXNTY29wZS5hdXRvRm9jdXNPbk1vdW50YCxkeD1gZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnRgLGZ4PXtidWJibGVzOiExLGNhbmNlbGFibGU6ITB9O2Z1bmN0aW9uIHB4KGUse3NlbGVjdDp0PSExfT17fSl7bGV0IG49ZHkoKTtmb3IobGV0IHIgb2YgZSlpZih5eChyLHtzZWxlY3Q6dH0pLGR5KCkhPT1uKXJldHVybiEwfWZ1bmN0aW9uIG14KGUpe2xldCB0PWh4KGUpO3JldHVybltneCh0LGUpLGd4KHQucmV2ZXJzZSgpLGUpXX1mdW5jdGlvbiBoeChlKXtsZXQgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTplPT57bGV0IHQ9ZS50YWdOYW1lPT09YElOUFVUYCYmZS50eXBlPT09YGhpZGRlbmA7cmV0dXJuIGUuZGlzYWJsZWR8fGUuaGlkZGVufHx0P05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ZS50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspdC5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiB0fWZ1bmN0aW9uIGd4KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYoIV94KG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIF94KGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PWBoaWRkZW5gKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PWBub25lYClyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiB2eChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmBzZWxlY3RgaW4gZX1mdW5jdGlvbiB5eChlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2xldCBuPWR5KCk7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUhPT1uJiZ2eChlKSYmdCYmZS5zZWxlY3QoKX19dmFyIGJ4PVAoe19fbmFtZTpgRm9jdXNTY29wZWAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSx0cmFwcGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgbW91bnRBdXRvRm9jdXNgLGB1bm1vdW50QXV0b0ZvY3VzYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2N1cnJlbnRSZWY6aSxjdXJyZW50RWxlbWVudDphfT1sYigpLG89aihudWxsKSxzPWN4KCksYz1adCh7cGF1c2VkOiExLHBhdXNlKCl7dGhpcy5wYXVzZWQ9ITB9LHJlc3VtZSgpe3RoaXMucGF1c2VkPSExfX0pO3dyKGU9PntpZighX3kpcmV0dXJuO2xldCB0PWEudmFsdWU7aWYoIW4udHJhcHBlZClyZXR1cm47ZnVuY3Rpb24gcihlKXtpZihjLnBhdXNlZHx8IXQpcmV0dXJuO2xldCBuPWUudGFyZ2V0O3QuY29udGFpbnMobik/by52YWx1ZT1uOnl4KG8udmFsdWUse3NlbGVjdDohMH0pfWZ1bmN0aW9uIGkoZSl7aWYoYy5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQ7biE9PW51bGwmJih0LmNvbnRhaW5zKG4pfHx5eChvLnZhbHVlLHtzZWxlY3Q6ITB9KSl9ZnVuY3Rpb24gcyhlKXtsZXQgbj1vLnZhbHVlO24hPT1udWxsJiZlLnNvbWUoZT0+ZS5yZW1vdmVkTm9kZXMubGVuZ3RoPjApJiYodC5jb250YWlucyhuKXx8eXgodCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKTtsZXQgbD1uZXcgTXV0YXRpb25PYnNlcnZlcihzKTt0JiZsLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNvdXRgLGkpLGwuZGlzY29ubmVjdCgpfSl9KTtmdW5jdGlvbiBsKGUsdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KHV4LGZ4KSxpPWU9PnIoYG1vdW50QXV0b0ZvY3VzYCxlKTtlLmFkZEV2ZW50TGlzdGVuZXIodXgsaSksZS5kaXNwYXRjaEV2ZW50KG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih1eCxpKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChweChoeChlKSx7c2VsZWN0OiEwfSksZHkoKT09PXQmJnl4KGUpKX13cihhc3luYyBlPT57bGV0IHQ9YS52YWx1ZTtpZihhd2FpdCAkbigpLCF0KXJldHVybjtuLnByZXNlbnQhPT0hMSYmcy5hZGQoYyk7bGV0IGk9ZHkoKTshdC5jb250YWlucyhpKSYmbi5wcmVzZW50IT09ITEmJmwodCxpKSxlKCgpPT57bGV0IGU9bmV3IEN1c3RvbUV2ZW50KGR4LGZ4KSxuPWU9PntyKGB1bm1vdW50QXV0b0ZvY3VzYCxlKX07dC5hZGRFdmVudExpc3RlbmVyKGR4LG4pLHQuZGlzcGF0Y2hFdmVudChlKSx0LnNldEF0dHJpYnV0ZShgZGF0YS1mb2N1cy1zY29wZS11bm1vdW50aW5nYCxgYCksc2V0VGltZW91dCgoKT0+e2UuZGVmYXVsdFByZXZlbnRlZHx8eXgoaT8/ZG9jdW1lbnQuYm9keSx7c2VsZWN0OiEwfSksdC5yZW1vdmVFdmVudExpc3RlbmVyKGR4LG4pLHMucmVtb3ZlKGMpLHQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWZvY3VzLXNjb3BlLXVubW91bnRpbmdgKX0sMCl9KX0pLERyKCgpPT5uLnByZXNlbnQsYXN5bmMoZSx0KT0+e2lmKCFfeSlyZXR1cm47aWYoZT09PSExJiZ0PT09ITApe3MucmVtb3ZlKGMpO3JldHVybn1pZihlIT09ITB8fHQhPT0hMSlyZXR1cm47cy5hZGQoYyksYXdhaXQgJG4oKTtsZXQgbj1hLnZhbHVlO2lmKCFuKXJldHVybjtsZXQgcj1keSgpO24uY29udGFpbnMocil8fGwobixyKX0pO2Z1bmN0aW9uIHUoZSl7aWYoIW4ubG9vcCYmIW4udHJhcHBlZHx8Yy5wYXVzZWQpcmV0dXJuO2xldCB0PWUua2V5PT09YFRhYmAmJiFlLmFsdEtleSYmIWUuY3RybEtleSYmIWUubWV0YUtleSxyPWR5KCk7aWYodCYmcil7bGV0IHQ9ZS5jdXJyZW50VGFyZ2V0LFtpLGFdPW14KHQpO2kmJmE/IWUuc2hpZnRLZXkmJnI9PT1hPyhlLnByZXZlbnREZWZhdWx0KCksbi5sb29wJiZ5eChpLHtzZWxlY3Q6ITB9KSk6ZS5zaGlmdEtleSYmcj09PWkmJihlLnByZXZlbnREZWZhdWx0KCksbi5sb29wJiZ5eChhLHtzZWxlY3Q6ITB9KSk6cj09PXQmJmUucHJldmVudERlZmF1bHQoKX19cmV0dXJuKGUsdCk9PihMKCkseihNKFBiKSx7cmVmX2tleTpgY3VycmVudFJlZmAscmVmOmksdGFiaW5kZXg6YC0xYCwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLG9uS2V5ZG93bjp1fSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2BdKSl9fSkseHg9W2BFbnRlcmAsYCBgXSxTeD1bYEFycm93RG93bmAsYFBhZ2VVcGAsYEhvbWVgXSxDeD1bYEFycm93VXBgLGBQYWdlRG93bmAsYEVuZGBdO1suLi5TeCwuLi5DeF0sWy4uLnh4XSxbLi4ueHhdO2Z1bmN0aW9uIHd4KGUpe2xldCB0PWR5KCk7Zm9yKGxldCBuIG9mIGUpaWYobj09PXR8fChuLmZvY3VzKCksZHkoKSE9PXQpKXJldHVybn12YXIgVHg9UCh7X19uYW1lOmBUZWxlcG9ydGAscHJvcHM6e3RvOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmVyOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1LeSh7fSkscj1XKCgpPT50LnRvPz9uLnRlbGVwb3J0VG8/LnZhbHVlPz9gYm9keWApLGk9RnkoKTtyZXR1cm4oZSx0KT0+TShpKXx8ZS5mb3JjZU1vdW50PyhMKCkseihIcix7a2V5OjAsdG86ci52YWx1ZSxkaXNhYmxlZDplLmRpc2FibGVkLGRlZmVyOmUuZGVmZXJ9LFtGKGUuJHNsb3RzLGBkZWZhdWx0YCldLDgsW2B0b2AsYGRpc2FibGVkYCxgZGVmZXJgXSkpOlUoYHYtaWZgLCEwKX19KSxFeD1gZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbWA7ZnVuY3Rpb24gRHgoZT17fSl7bGV0e2tleTp0PWBgLGlzUHJvdmlkZXI6bj0hMX09ZSxyPWAke3R9Q29sbGVjdGlvblByb3ZpZGVyYCxpO24/KGk9e2NvbGxlY3Rpb25SZWY6aigpLGl0ZW1NYXA6aihuZXcgTWFwKX0seXIocixpKSk6aT1icihyKTtsZXQgYT0oZT0hMSk9PntsZXQgdD1pLmNvbGxlY3Rpb25SZWYudmFsdWU7aWYoIXQpcmV0dXJuW107bGV0IG49QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0V4fV1gKSkscj1uZXcgTWFwKG4ubWFwKChlLHQpPT5bZSx0XSkpLGE9QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpLnNvcnQoKGUsdCk9PihyLmdldChlLnJlZik/Py0xKS0oci5nZXQodC5yZWYpPz8tMSkpO3JldHVybiBlP2E6YS5maWx0ZXIoZT0+ZS5yZWYuZGF0YXNldC5kaXNhYmxlZCE9PWBgKX0sbz1QKHtuYW1lOmBDb2xsZWN0aW9uU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse3Nsb3RzOnQsYXR0cnM6bn0pe2xldHtwcmltaXRpdmVFbGVtZW50OnIsY3VycmVudEVsZW1lbnQ6YX09RmIoKTtyZXR1cm4gRHIoYSwoKT0+e2kuY29sbGVjdGlvblJlZi52YWx1ZT1hLnZhbHVlfSksKCk9PkcoTWIse3JlZjpyLC4uLm59LHQpfX0pLHM9UCh7bmFtZTpgQ29sbGVjdGlvbkl0ZW1gLGluaGVyaXRBdHRyczohMSxwcm9wczp7dmFsdWU6e3ZhbGlkYXRvcjooKT0+ITB9fSxzZXR1cChlLHtzbG90czp0LGF0dHJzOm59KXtsZXR7cHJpbWl0aXZlRWxlbWVudDpyLGN1cnJlbnRFbGVtZW50OmF9PUZiKCk7cmV0dXJuIHdyKHQ9PntpZihhLnZhbHVlKXtsZXQgbj1zbihhLnZhbHVlKTtpLml0ZW1NYXAudmFsdWUuc2V0KG4se3JlZjphLnZhbHVlLHZhbHVlOmUudmFsdWV9KSx0KCgpPT5pLml0ZW1NYXAudmFsdWUuZGVsZXRlKG4pKX19KSwoKT0+RyhNYix7Li4ubixbRXhdOmBgLHJlZjpyfSx0KX19KTtyZXR1cm57Z2V0SXRlbXM6YSxyZWFjdGl2ZUl0ZW1zOlcoKCk9PkFycmF5LmZyb20oaS5pdGVtTWFwLnZhbHVlLnZhbHVlcygpKSksaXRlbU1hcFNpemU6VygoKT0+aS5pdGVtTWFwLnZhbHVlLnNpemUpLENvbGxlY3Rpb25TbG90Om8sQ29sbGVjdGlvbkl0ZW06c319dmFyIE94PVAoe19fbmFtZTpgVmlzdWFsbHlIaWRkZW5gLHByb3BzOntmZWF0dXJlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBmb2N1c2FibGVgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KEwoKSx6KE0oUGIpLHthczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLWhpZGRlbiI6ZS5mZWF0dXJlPT09YGZvY3VzYWJsZWB8fGUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2B0cnVlYDp2b2lkIDAsImRhdGEtaGlkZGVuIjplLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gYDp2b2lkIDAsdGFiaW5kZXg6ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YC0xYDp2b2lkIDAsc3R5bGU6e3Bvc2l0aW9uOmBhYnNvbHV0ZWAsYm9yZGVyOjAsd2lkdGg6YDFweGAsaGVpZ2h0OmAxcHhgLHBhZGRpbmc6MCxtYXJnaW46YC0xcHhgLG92ZXJmbG93OmBoaWRkZW5gLGNsaXA6YHJlY3QoMCwgMCwgMCwgMClgLGNsaXBQYXRoOmBpbnNldCg1MCUpYCx3aGl0ZVNwYWNlOmBub3dyYXBgLHdvcmRXcmFwOmBub3JtYWxgLHRvcDpgLTFweGAsbGVmdDpgLTFweGB9fSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGFyaWEtaGlkZGVuYCxgZGF0YS1oaWRkZW5gLGB0YWJpbmRleGBdKSl9fSksa3g9YHJvdmluZ0ZvY3VzR3JvdXAub25FbnRyeUZvY3VzYCxBeD17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxqeD17QXJyb3dMZWZ0OmBwcmV2YCxBcnJvd1VwOmBwcmV2YCxBcnJvd1JpZ2h0OmBuZXh0YCxBcnJvd0Rvd246YG5leHRgLFBhZ2VVcDpgZmlyc3RgLEhvbWU6YGZpcnN0YCxQYWdlRG93bjpgbGFzdGAsRW5kOmBsYXN0YH07ZnVuY3Rpb24gTXgoZSx0KXtyZXR1cm4gdD09PWBydGxgP2U9PT1gQXJyb3dMZWZ0YD9gQXJyb3dSaWdodGA6ZT09PWBBcnJvd1JpZ2h0YD9gQXJyb3dMZWZ0YDplOmV9ZnVuY3Rpb24gTngoZSx0LG4pe2xldCByPU14KGUua2V5LG4pO2lmKCEodD09PWB2ZXJ0aWNhbGAmJltgQXJyb3dMZWZ0YCxgQXJyb3dSaWdodGBdLmluY2x1ZGVzKHIpKSYmISh0PT09YGhvcml6b250YWxgJiZbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhyKSkpcmV0dXJuIGp4W3JdfWZ1bmN0aW9uIFB4KGUsdD0hMSl7bGV0IG49ZHkoKTtmb3IobGV0IHIgb2YgZSlpZihyPT09bnx8KHIuZm9jdXMoe3ByZXZlbnRTY3JvbGw6dH0pLGR5KCkhPT1uKSlyZXR1cm59ZnVuY3Rpb24gRngoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbSXgsTHhdPXV5KGBQb3BwZXJSb290YCksUng9UCh7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyUm9vdGAsc2V0dXAoZSl7bGV0IHQ9aigpO3JldHVybiBMeCh7YW5jaG9yOnQsb25BbmNob3JDaGFuZ2U6ZT0+dC52YWx1ZT1lfSksKGUsdCk9PkYoZS4kc2xvdHMsYGRlZmF1bHRgKX19KSx6eD1QKHtfX25hbWU6YFBvcHBlckFuY2hvcmAscHJvcHM6e3JlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09bGIoKSxpPUl4KCk7cmV0dXJuIFRyKCgpPT57aS5vbkFuY2hvckNoYW5nZSh0LnJlZmVyZW5jZT8/ci52YWx1ZSl9KSwoZSx0KT0+KEwoKSx6KE0oUGIpLHtyZWY6TShuKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGBdKSl9fSk7ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUhPT1udWxsfWZ1bmN0aW9uIFZ4KGUpe3JldHVybntuYW1lOmB0cmFuc2Zvcm1PcmlnaW5gLG9wdGlvbnM6ZSxmbih0KXtsZXR7cGxhY2VtZW50Om4scmVjdHM6cixtaWRkbGV3YXJlRGF0YTppfT10LGE9aS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MCxvPWE/MDplLmFycm93V2lkdGgscz1hPzA6ZS5hcnJvd0hlaWdodCxbYyxsXT1IeChuKSx1PXtzdGFydDplLmRpcj09PWBydGxgP2AxMDAlYDpgMCVgLGNlbnRlcjpgNTAlYCxlbmQ6ZS5kaXI9PT1gcnRsYD9gMCVgOmAxMDAlYH1bbF0sZD17c3RhcnQ6YDAlYCxjZW50ZXI6YDUwJWAsZW5kOmAxMDAlYH1bbF0sZj0oaS5hcnJvdz8ueD8/MCkrby8yLHA9KGkuYXJyb3c/Lnk/PzApK3MvMixtPWBgLGg9YGA7cmV0dXJuIGM9PT1gYm90dG9tYD8obT1hP3U6YCR7Zn1weGAsaD1gJHstc31weGApOmM9PT1gdG9wYD8obT1hP3U6YCR7Zn1weGAsaD1gJHtyLmZsb2F0aW5nLmhlaWdodCtzfXB4YCk6Yz09PWByaWdodGA/KG09YCR7LXN9cHhgLGg9YT9kOmAke3B9cHhgKTpjPT09YGxlZnRgJiYobT1gJHtyLmZsb2F0aW5nLndpZHRoK3N9cHhgLGg9YT9kOmAke3B9cHhgKSx7ZGF0YTp7eDptLHk6aH19fX19ZnVuY3Rpb24gSHgoZSl7bGV0W3Qsbj1gY2VudGVyYF09ZS5zcGxpdChgLWApO3JldHVyblt0LG5dfXZhciBVeD1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdLFd4PU1hdGgubWluLEd4PU1hdGgubWF4LEt4PU1hdGgucm91bmQscXg9TWF0aC5mbG9vcixKeD1lPT4oe3g6ZSx5OmV9KSxZeD17bGVmdDpgcmlnaHRgLHJpZ2h0OmBsZWZ0YCxib3R0b206YHRvcGAsdG9wOmBib3R0b21gfTtmdW5jdGlvbiBYeChlLHQsbil7cmV0dXJuIEd4KGUsV3godCxuKSl9ZnVuY3Rpb24gWngoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0KTplfWZ1bmN0aW9uIFF4KGUpe3JldHVybiBlLnNwbGl0KGAtYClbMF19ZnVuY3Rpb24gJHgoZSl7cmV0dXJuIGUuc3BsaXQoYC1gKVsxXX1mdW5jdGlvbiBlUyhlKXtyZXR1cm4gZT09PWB4YD9geWA6YHhgfWZ1bmN0aW9uIHRTKGUpe3JldHVybiBlPT09YHlgP2BoZWlnaHRgOmB3aWR0aGB9ZnVuY3Rpb24gblMoZSl7bGV0IHQ9ZVswXTtyZXR1cm4gdD09PWB0YHx8dD09PWBiYD9geWA6YHhgfWZ1bmN0aW9uIHJTKGUpe3JldHVybiBlUyhuUyhlKSl9ZnVuY3Rpb24gaVMoZSx0LG4pe249PT12b2lkIDAmJihuPSExKTtsZXQgcj0keChlKSxpPXJTKGUpLGE9dFMoaSksbz1pPT09YHhgP3I9PT0obj9gZW5kYDpgc3RhcnRgKT9gcmlnaHRgOmBsZWZ0YDpyPT09YHN0YXJ0YD9gYm90dG9tYDpgdG9wYDtyZXR1cm4gdC5yZWZlcmVuY2VbYV0+dC5mbG9hdGluZ1thXSYmKG89cFMobykpLFtvLHBTKG8pXX1mdW5jdGlvbiBhUyhlKXtsZXQgdD1wUyhlKTtyZXR1cm5bb1MoZSksdCxvUyh0KV19ZnVuY3Rpb24gb1MoZSl7cmV0dXJuIGUuaW5jbHVkZXMoYHN0YXJ0YCk/ZS5yZXBsYWNlKGBzdGFydGAsYGVuZGApOmUucmVwbGFjZShgZW5kYCxgc3RhcnRgKX12YXIgc1M9W2BsZWZ0YCxgcmlnaHRgXSxjUz1bYHJpZ2h0YCxgbGVmdGBdLGxTPVtgdG9wYCxgYm90dG9tYF0sdVM9W2Bib3R0b21gLGB0b3BgXTtmdW5jdGlvbiBkUyhlLHQsbil7c3dpdGNoKGUpe2Nhc2VgdG9wYDpjYXNlYGJvdHRvbWA6cmV0dXJuIG4/dD9jUzpzUzp0P3NTOmNTO2Nhc2VgbGVmdGA6Y2FzZWByaWdodGA6cmV0dXJuIHQ/bFM6dVM7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gZlMoZSx0LG4scil7bGV0IGk9JHgoZSksYT1kUyhReChlKSxuPT09YHN0YXJ0YCxyKTtyZXR1cm4gaSYmKGE9YS5tYXAoZT0+ZStgLWAraSksdCYmKGE9YS5jb25jYXQoYS5tYXAob1MpKSkpLGF9ZnVuY3Rpb24gcFMoZSl7bGV0IHQ9UXgoZSk7cmV0dXJuIFl4W3RdK2Uuc2xpY2UodC5sZW5ndGgpfWZ1bmN0aW9uIG1TKGUpe3JldHVybnt0b3A6ZS50b3A/PzAscmlnaHQ6ZS5yaWdodD8/MCxib3R0b206ZS5ib3R0b20/PzAsbGVmdDplLmxlZnQ/PzB9fWZ1bmN0aW9uIGhTKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmA/e3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfTptUyhlKX1mdW5jdGlvbiBnUyhlKXtsZXR7eDp0LHk6bix3aWR0aDpyLGhlaWdodDppfT1lO3JldHVybnt3aWR0aDpyLGhlaWdodDppLHRvcDpuLGxlZnQ6dCxyaWdodDp0K3IsYm90dG9tOm4raSx4OnQseTpufX1mdW5jdGlvbiBfUyhlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOml9PWUsYT1uUyh0KSxvPXJTKHQpLHM9dFMobyksYz1ReCh0KSxsPWE9PT1geWAsdT1yLngrci53aWR0aC8yLWkud2lkdGgvMixkPXIueStyLmhlaWdodC8yLWkuaGVpZ2h0LzIsZj1yW3NdLzItaVtzXS8yLHA7c3dpdGNoKGMpe2Nhc2VgdG9wYDpwPXt4OnUseTpyLnktaS5oZWlnaHR9O2JyZWFrO2Nhc2VgYm90dG9tYDpwPXt4OnUseTpyLnkrci5oZWlnaHR9O2JyZWFrO2Nhc2VgcmlnaHRgOnA9e3g6ci54K3Iud2lkdGgseTpkfTticmVhaztjYXNlYGxlZnRgOnA9e3g6ci54LWkud2lkdGgseTpkfTticmVhaztkZWZhdWx0OnA9e3g6ci54LHk6ci55fX1sZXQgbT0keCh0KTtyZXR1cm4gbSYmKHBbb10rPWYqKG09PT1gZW5kYD8xOi0xKSoobiYmbD8tMToxKSkscH1hc3luYyBmdW5jdGlvbiB2UyhlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTtsZXR7eDpuLHk6cixwbGF0Zm9ybTppLHJlY3RzOmEsZWxlbWVudHM6byxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPWBjbGlwcGluZ0FuY2VzdG9yc2Ascm9vdEJvdW5kYXJ5Omw9YHZpZXdwb3J0YCxlbGVtZW50Q29udGV4dDp1PWBmbG9hdGluZ2AsYWx0Qm91bmRhcnk6ZD0hMSxwYWRkaW5nOmY9MH09WngodCxlKSxwPWhTKGYpLG09b1tkP3U9PT1gZmxvYXRpbmdgP2ByZWZlcmVuY2VgOmBmbG9hdGluZ2A6dV0saD1nUyhhd2FpdCBpLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDphd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQobSkpPz8hMD9tOm0uY29udGV4dEVsZW1lbnR8fGF3YWl0KGkuZ2V0RG9jdW1lbnRFbGVtZW50PT1udWxsP3ZvaWQgMDppLmdldERvY3VtZW50RWxlbWVudChvLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6bCxzdHJhdGVneTpzfSkpLGc9dT09PWBmbG9hdGluZ2A/e3g6bix5OnIsd2lkdGg6YS5mbG9hdGluZy53aWR0aCxoZWlnaHQ6YS5mbG9hdGluZy5oZWlnaHR9OmEucmVmZXJlbmNlLF89YXdhaXQoaS5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOmkuZ2V0T2Zmc2V0UGFyZW50KG8uZmxvYXRpbmcpKSx2PWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChfKSkmJmF3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoXykpfHx7eDoxLHk6MX0seT1nUyhpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0P2F3YWl0IGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe2VsZW1lbnRzOm8scmVjdDpnLG9mZnNldFBhcmVudDpfLHN0cmF0ZWd5OnN9KTpnKTtyZXR1cm57dG9wOihoLnRvcC15LnRvcCtwLnRvcCkvdi55LGJvdHRvbTooeS5ib3R0b20taC5ib3R0b20rcC5ib3R0b20pL3YueSxsZWZ0OihoLmxlZnQteS5sZWZ0K3AubGVmdCkvdi54LHJpZ2h0Oih5LnJpZ2h0LWgucmlnaHQrcC5yaWdodCkvdi54fX12YXIgeVM9NTAsYlM9YXN5bmMoZSx0LG4pPT57bGV0e3BsYWNlbWVudDpyPWBib3R0b21gLHN0cmF0ZWd5Omk9YGFic29sdXRlYCxtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06b309bixzPW8uZGV0ZWN0T3ZlcmZsb3c/bzp7Li4ubyxkZXRlY3RPdmVyZmxvdzp2U30sYz1hd2FpdChvLmlzUlRMPT1udWxsP3ZvaWQgMDpvLmlzUlRMKHQpKSxsPWF3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KSx7eDp1LHk6ZH09X1MobCxyLGMpLGY9cixwPTAsbT17fTtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGg9YVtuXTtpZighaCljb250aW51ZTtsZXR7bmFtZTpnLGZuOl99PWgse3g6dix5LGRhdGE6YixyZXNldDp4fT1hd2FpdCBfKHt4OnUseTpkLGluaXRpYWxQbGFjZW1lbnQ6cixwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm0scmVjdHM6bCxwbGF0Zm9ybTpzLGVsZW1lbnRzOntyZWZlcmVuY2U6ZSxmbG9hdGluZzp0fX0pO3U9dj8/dSxkPXk/P2QsbVtnXT17Li4ubVtnXSwuLi5ifSx4JiZwPHlTJiYocCsrLHR5cGVvZiB4PT1gb2JqZWN0YCYmKHgucGxhY2VtZW50JiYoZj14LnBsYWNlbWVudCkseC5yZWN0cyYmKGw9eC5yZWN0cz09PSEwP2F3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KTp4LnJlY3RzKSx7eDp1LHk6ZH09X1MobCxmLGMpKSxuPS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm19fSx4Uz1lPT4oe25hbWU6YGFycm93YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxwbGF0Zm9ybTpvLGVsZW1lbnRzOnMsbWlkZGxld2FyZURhdGE6Y309dCx7ZWxlbWVudDpsLHBhZGRpbmc6dT0wfT1aeChlLHQpfHx7fTtpZihsPT1udWxsKXJldHVybnt9O2xldCBkPWhTKHUpLGY9e3g6bix5OnJ9LHA9clMoaSksbT10UyhwKSxoPWF3YWl0IG8uZ2V0RGltZW5zaW9ucyhsKSxnPXA9PT1geWAsXz1nP2B0b3BgOmBsZWZ0YCx2PWc/YGJvdHRvbWA6YHJpZ2h0YCx5PWc/YGNsaWVudEhlaWdodGA6YGNsaWVudFdpZHRoYCxiPWEucmVmZXJlbmNlW21dK2EucmVmZXJlbmNlW3BdLWZbcF0tYS5mbG9hdGluZ1ttXSx4PWZbcF0tYS5yZWZlcmVuY2VbcF0sUz1hd2FpdChvLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6by5nZXRPZmZzZXRQYXJlbnQobCkpLEM9Uz9TW3ldOjA7KCFDfHwhYXdhaXQoby5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOm8uaXNFbGVtZW50KFMpKSkmJihDPXMuZmxvYXRpbmdbeV18fGEuZmxvYXRpbmdbbV0pO2xldCB3PWIvMi14LzIsZWU9Qy8yLWhbbV0vMi0xLHRlPVd4KGRbX10sZWUpLFQ9V3goZFt2XSxlZSksbmU9Qy1oW21dLVQscmU9Qy8yLWhbbV0vMit3LGllPVh4KHRlLHJlLG5lKSxFPSFjLmFycm93JiYkeChpKSE9bnVsbCYmcmUhPT1pZSYmYS5yZWZlcmVuY2VbbV0vMi0ocmU8dGU/dGU6VCktaFttXS8yPDAsYWU9RT9yZTx0ZT9yZS10ZTpyZS1uZTowO3JldHVybntbcF06ZltwXSthZSxkYXRhOntbcF06aWUsY2VudGVyT2Zmc2V0OnJlLWllLWFlLC4uLkUmJnthbGlnbm1lbnRPZmZzZXQ6YWV9fSxyZXNldDpFfX19KSxTUz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBmbGlwYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG47bGV0e3BsYWNlbWVudDpyLG1pZGRsZXdhcmVEYXRhOmkscmVjdHM6YSxpbml0aWFsUGxhY2VtZW50Om8scGxhdGZvcm06cyxlbGVtZW50czpjfT10LHttYWluQXhpczpsPSEwLGNyb3NzQXhpczp1PSEwLGZhbGxiYWNrUGxhY2VtZW50czpkLGZhbGxiYWNrU3RyYXRlZ3k6Zj1gYmVzdEZpdGAsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpwPWBub25lYCxmbGlwQWxpZ25tZW50Om09ITAsLi4uaH09WngoZSx0KTtpZigobj1pLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307bGV0IGc9UXgociksXz1uUyhvKSx2PVF4KG8pPT09byx5PWF3YWl0KHMuaXNSVEw9PW51bGw/dm9pZCAwOnMuaXNSVEwoYy5mbG9hdGluZykpLGI9ZHx8KHZ8fCFtP1twUyhvKV06YVMobykpLHg9cCE9PWBub25lYDshZCYmeCYmYi5wdXNoKC4uLmZTKG8sbSxwLHkpKTtsZXQgUz1bbywuLi5iXSxDPWF3YWl0IHMuZGV0ZWN0T3ZlcmZsb3codCxoKSx3PVtdLGVlPWkuZmxpcD8ub3ZlcmZsb3dzfHxbXTtpZihsJiZ3LnB1c2goQ1tnXSksdSl7bGV0IGU9aVMocixhLHkpO3cucHVzaChDW2VbMF1dLENbZVsxXV0pfWlmKGVlPVsuLi5lZSx7cGxhY2VtZW50OnIsb3ZlcmZsb3dzOnd9XSwhdy5ldmVyeShlPT5lPD0wKSl7bGV0IGU9KGkuZmxpcD8uaW5kZXh8fDApKzEsdD1TW2VdO2lmKHQmJih1IT09YGFsaWdubWVudGB8fF89PT1uUyh0KXx8ZWUuZXZlcnkoZT0+blMoZS5wbGFjZW1lbnQpIT09X3x8ZS5vdmVyZmxvd3NbMF0+MCkpKXJldHVybntkYXRhOntpbmRleDplLG92ZXJmbG93czplZX0scmVzZXQ6e3BsYWNlbWVudDp0fX07bGV0IG49ZWUuZmlsdGVyKGU9PmUub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KChlLHQpPT5lLm92ZXJmbG93c1sxXS10Lm92ZXJmbG93c1sxXSlbMF0/LnBsYWNlbWVudDtpZighbilzd2l0Y2goZil7Y2FzZWBiZXN0Rml0YDp7bGV0IGU9ZWUuZmlsdGVyKGU9PntpZih4KXtsZXQgdD1uUyhlLnBsYWNlbWVudCk7cmV0dXJuIHQ9PT1ffHx0PT09YHlgfXJldHVybiEwfSkubWFwKGU9PltlLnBsYWNlbWVudCxlLm92ZXJmbG93cy5maWx0ZXIoZT0+ZT4wKS5yZWR1Y2UoKGUsdCk9PmUrdCwwKV0pLnNvcnQoKGUsdCk9PmVbMV0tdFsxXSlbMF0/LlswXTtlJiYobj1lKTticmVha31jYXNlYGluaXRpYWxQbGFjZW1lbnRgOm49b31pZihyIT09bilyZXR1cm57cmVzZXQ6e3BsYWNlbWVudDpufX19cmV0dXJue319fX07ZnVuY3Rpb24gQ1MoZSx0KXtyZXR1cm57dG9wOmUudG9wLXQuaGVpZ2h0LHJpZ2h0OmUucmlnaHQtdC53aWR0aCxib3R0b206ZS5ib3R0b20tdC5oZWlnaHQsbGVmdDplLmxlZnQtdC53aWR0aH19ZnVuY3Rpb24gd1MoZSl7cmV0dXJuIFV4LnNvbWUodD0+ZVt0XT49MCl9dmFyIFRTPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YGhpZGVgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7cmVjdHM6bixwbGF0Zm9ybTpyfT10LHtzdHJhdGVneTppPWByZWZlcmVuY2VIaWRkZW5gLC4uLmF9PVp4KGUsdCk7c3dpdGNoKGkpe2Nhc2VgcmVmZXJlbmNlSGlkZGVuYDp7bGV0IGU9Q1MoYXdhaXQgci5kZXRlY3RPdmVyZmxvdyh0LHsuLi5hLGVsZW1lbnRDb250ZXh0OmByZWZlcmVuY2VgfSksbi5yZWZlcmVuY2UpO3JldHVybntkYXRhOntyZWZlcmVuY2VIaWRkZW5PZmZzZXRzOmUscmVmZXJlbmNlSGlkZGVuOndTKGUpfX19Y2FzZWBlc2NhcGVkYDp7bGV0IGU9Q1MoYXdhaXQgci5kZXRlY3RPdmVyZmxvdyh0LHsuLi5hLGFsdEJvdW5kYXJ5OiEwfSksbi5mbG9hdGluZyk7cmV0dXJue2RhdGE6e2VzY2FwZWRPZmZzZXRzOmUsZXNjYXBlZDp3UyhlKX19fWRlZmF1bHQ6cmV0dXJue319fX19LEVTPW5ldyBTZXQoW2BsZWZ0YCxgdG9wYF0pO2FzeW5jIGZ1bmN0aW9uIERTKGUsdCl7bGV0e3BsYWNlbWVudDpuLHBsYXRmb3JtOnIsZWxlbWVudHM6aX09ZSxhPWF3YWl0KHIuaXNSVEw9PW51bGw/dm9pZCAwOnIuaXNSVEwoaS5mbG9hdGluZykpLG89UXgobikscz0keChuKSxjPW5TKG4pPT09YHlgLGw9RVMuaGFzKG8pPy0xOjEsdT1hJiZjPy0xOjEsZD1aeCh0LGUpLHttYWluQXhpczpmLGNyb3NzQXhpczpwLGFsaWdubWVudEF4aXM6bX09dHlwZW9mIGQ9PWBudW1iZXJgP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmQubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmQuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6ZC5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gcyYmdHlwZW9mIG09PWBudW1iZXJgJiYocD1zPT09YGVuZGA/bSotMTptKSxjP3t4OnAqdSx5OmYqbH06e3g6ZipsLHk6cCp1fX12YXIgT1M9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLHtuYW1lOmBvZmZzZXRgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbjtsZXR7eDpyLHk6aSxwbGFjZW1lbnQ6YSxtaWRkbGV3YXJlRGF0YTpvfT10LHM9YXdhaXQgRFModCxlKTtyZXR1cm4gYT09PW8ub2Zmc2V0Py5wbGFjZW1lbnQmJihuPW8uYXJyb3cpIT1udWxsJiZuLmFsaWdubWVudE9mZnNldD97fTp7eDpyK3MueCx5Omkrcy55LGRhdGE6ey4uLnMscGxhY2VtZW50OmF9fX19fSxrUz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBzaGlmdGAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHt4Om4seTpyLHBsYWNlbWVudDppLHBsYXRmb3JtOmF9PXQse21haW5BeGlzOm89ITAsY3Jvc3NBeGlzOnM9ITEsbGltaXRlcjpjPXtmbjplPT57bGV0e3g6dCx5Om59PWU7cmV0dXJue3g6dCx5Om59fX0sLi4ubH09WngoZSx0KSx1PXt4Om4seTpyfSxkPWF3YWl0IGEuZGV0ZWN0T3ZlcmZsb3codCxsKSxmPW5TKGkpLHA9ZVMoZiksbT11W3BdLGg9dVtmXSxnPShlLHQpPT5YeCh0K2RbZT09PWB5YD9gdG9wYDpgbGVmdGBdLHQsdC1kW2U9PT1geWA/YGJvdHRvbWA6YHJpZ2h0YF0pO28mJihtPWcocCxtKSkscyYmKGg9ZyhmLGgpKTtsZXQgXz1jLmZuKHsuLi50LFtwXTptLFtmXTpofSk7cmV0dXJuey4uLl8sZGF0YTp7eDpfLngtbix5Ol8ueS1yLGVuYWJsZWQ6e1twXTpvLFtmXTpzfX19fX19LEFTPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse29wdGlvbnM6ZSxmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxyZWN0czphLG1pZGRsZXdhcmVEYXRhOm99PXQse29mZnNldDpzPTAsbWFpbkF4aXM6Yz0hMCxjcm9zc0F4aXM6bD0hMH09WngoZSx0KSx1PXt4Om4seTpyfSxkPW5TKGkpLGY9ZVMoZCkscD11W2ZdLG09dVtkXSxoPVp4KHMsdCksZz10eXBlb2YgaD09YG51bWJlcmA/e21haW5BeGlzOmgsY3Jvc3NBeGlzOjB9OnttYWluQXhpczpoLm1haW5BeGlzPz8wLGNyb3NzQXhpczpoLmNyb3NzQXhpcz8/MH07aWYoYyl7bGV0IGU9Zj09PWB5YD9gaGVpZ2h0YDpgd2lkdGhgLHQ9YS5yZWZlcmVuY2VbZl0tYS5mbG9hdGluZ1tlXStnLm1haW5BeGlzLG49YS5yZWZlcmVuY2VbZl0rYS5yZWZlcmVuY2VbZV0tZy5tYWluQXhpcztwPHQ/cD10OnA+biYmKHA9bil9aWYobCl7bGV0IGU9Zj09PWB5YD9gd2lkdGhgOmBoZWlnaHRgLHQ9RVMuaGFzKFF4KGkpKSxuPWEucmVmZXJlbmNlW2RdLWEuZmxvYXRpbmdbZV0rKHQmJm8ub2Zmc2V0Py5bZF18fDApKyh0PzA6Zy5jcm9zc0F4aXMpLHI9YS5yZWZlcmVuY2VbZF0rYS5yZWZlcmVuY2VbZV0rKHQ/MDpvLm9mZnNldD8uW2RdfHwwKS0odD9nLmNyb3NzQXhpczowKTttPG4/bT1uOm0+ciYmKG09cil9cmV0dXJue1tmXTpwLFtkXTptfX19fSxqUz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBzaXplYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3BsYWNlbWVudDpuLHJlY3RzOnIscGxhdGZvcm06aSxlbGVtZW50czphfT10LHthcHBseTpvPSgpPT57fSwuLi5zfT1aeChlLHQpLGM9YXdhaXQgaS5kZXRlY3RPdmVyZmxvdyh0LHMpLGw9UXgobiksdT0keChuKSxkPW5TKG4pPT09YHlgLHt3aWR0aDpmLGhlaWdodDpwfT1yLmZsb2F0aW5nLG0saDtsPT09YHRvcGB8fGw9PT1gYm90dG9tYD8obT1sLGg9dT09PShhd2FpdChpLmlzUlRMPT1udWxsP3ZvaWQgMDppLmlzUlRMKGEuZmxvYXRpbmcpKT9gc3RhcnRgOmBlbmRgKT9gbGVmdGA6YHJpZ2h0YCk6KGg9bCxtPXU9PT1gZW5kYD9gdG9wYDpgYm90dG9tYCk7bGV0IGc9cC1jLnRvcC1jLmJvdHRvbSxfPWYtYy5sZWZ0LWMucmlnaHQsdj1XeChwLWNbbV0sZykseT1XeChmLWNbaF0sXyksYj10Lm1pZGRsZXdhcmVEYXRhLnNoaWZ0LHg9IWIsUz12LEM9eTtiIT1udWxsJiZiLmVuYWJsZWQueCYmKEM9XyksYiE9bnVsbCYmYi5lbmFibGVkLnkmJihTPWcpLHgmJiF1JiYoZD9DPWYtMipHeChjLmxlZnQsYy5yaWdodCk6Uz1wLTIqR3goYy50b3AsYy5ib3R0b20pKSxhd2FpdCBvKHsuLi50LGF2YWlsYWJsZVdpZHRoOkMsYXZhaWxhYmxlSGVpZ2h0OlN9KTtsZXQgdz1hd2FpdCBpLmdldERpbWVuc2lvbnMoYS5mbG9hdGluZyk7cmV0dXJuIGYhPT13LndpZHRofHxwIT09dy5oZWlnaHQ/e3Jlc2V0OntyZWN0czohMH19Ont9fX19O2Z1bmN0aW9uIE1TKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8YHVgfWZ1bmN0aW9uIE5TKGUpe3JldHVybiBJUyhlKT8oZS5ub2RlTmFtZXx8YGApLnRvTG93ZXJDYXNlKCk6YCNkb2N1bWVudGB9ZnVuY3Rpb24gUFMoZSl7dmFyIHQ7cmV0dXJuKGU9PW51bGx8fCh0PWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9ZnVuY3Rpb24gRlMoZSl7cmV0dXJuKChJUyhlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk/LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBJUyhlKXtyZXR1cm4gTVMoKT9lIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIFBTKGUpLk5vZGU6ITF9ZnVuY3Rpb24gTFMoZSl7cmV0dXJuIE1TKCk/ZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBQUyhlKS5FbGVtZW50OiExfWZ1bmN0aW9uIFJTKGUpe3JldHVybiBNUygpP2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFBTKGUpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIHpTKGUpe3JldHVybiFNUygpfHx0eXBlb2YgU2hhZG93Um9vdD5gdWA/ITE6ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGUgaW5zdGFuY2VvZiBQUyhlKS5TaGFkb3dSb290fWZ1bmN0aW9uIEJTKGUpe2xldHtvdmVyZmxvdzp0LG92ZXJmbG93WDpuLG92ZXJmbG93WTpyLGRpc3BsYXk6aX09WlMoZSk7cmV0dXJuL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3QodCtyK24pJiZpIT09YGlubGluZWAmJmkhPT1gY29udGVudHNgfWZ1bmN0aW9uIFZTKGUpe3JldHVybi9eKHRhYmxlfHRkfHRoKSQvLnRlc3QoTlMoZSkpfWZ1bmN0aW9uIEhTKGUpe3RyeXtpZihlLm1hdGNoZXMoYDpwb3BvdmVyLW9wZW5gKSlyZXR1cm4hMH1jYXRjaHt9dHJ5e3JldHVybiBlLm1hdGNoZXMoYDptb2RhbGApfWNhdGNoe3JldHVybiExfX12YXIgVVM9L3RyYW5zZm9ybXx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHBlcnNwZWN0aXZlfGZpbHRlci8sV1M9L3BhaW50fGxheW91dHxzdHJpY3R8Y29udGVudC8sR1M9ZT0+ISFlJiZlIT09YG5vbmVgLEtTO2Z1bmN0aW9uIHFTKGUpe2xldCB0PUxTKGUpP1pTKGUpOmU7cmV0dXJuIEdTKHQudHJhbnNmb3JtKXx8R1ModC50cmFuc2xhdGUpfHxHUyh0LnNjYWxlKXx8R1ModC5yb3RhdGUpfHxHUyh0LnBlcnNwZWN0aXZlKXx8IVlTKCkmJihHUyh0LmJhY2tkcm9wRmlsdGVyKXx8R1ModC5maWx0ZXIpKXx8VVMudGVzdCh0LndpbGxDaGFuZ2V8fGBgKXx8V1MudGVzdCh0LmNvbnRhaW58fGBgKX1mdW5jdGlvbiBKUyhlKXtsZXQgdD0kUyhlKTtmb3IoO1JTKHQpJiYhWFModCk7KXtpZihxUyh0KSlyZXR1cm4gdDtpZihIUyh0KSlyZXR1cm4gbnVsbDt0PSRTKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIFlTKCl7cmV0dXJuIEtTPz89dHlwZW9mIENTUzxgdWAmJkNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKGAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcmAsYG5vbmVgKSxLU31mdW5jdGlvbiBYUyhlKXtyZXR1cm4vXihodG1sfGJvZHl8I2RvY3VtZW50KSQvLnRlc3QoTlMoZSkpfWZ1bmN0aW9uIFpTKGUpe3JldHVybiBQUyhlKS5nZXRDb21wdXRlZFN0eWxlKGUpfWZ1bmN0aW9uIFFTKGUpe3JldHVybiBMUyhlKT97c2Nyb2xsTGVmdDplLnNjcm9sbExlZnQsc2Nyb2xsVG9wOmUuc2Nyb2xsVG9wfTp7c2Nyb2xsTGVmdDplLnNjcm9sbFgsc2Nyb2xsVG9wOmUuc2Nyb2xsWX19ZnVuY3Rpb24gJFMoZSl7aWYoTlMoZSk9PT1gaHRtbGApcmV0dXJuIGU7bGV0IHQ9ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8elMoZSkmJmUuaG9zdHx8RlMoZSk7cmV0dXJuIHpTKHQpP3QuaG9zdDp0fWZ1bmN0aW9uIGVDKGUpe2xldCB0PSRTKGUpO3JldHVybiBYUyh0KT8oZS5vd25lckRvY3VtZW50fHxlKS5ib2R5OlJTKHQpJiZCUyh0KT90OmVDKHQpfWZ1bmN0aW9uIHRDKGUsdCxuKXt0PT09dm9pZCAwJiYodD1bXSksbj09PXZvaWQgMCYmKG49ITApO2xldCByPWVDKGUpLGk9cj09PWUub3duZXJEb2N1bWVudD8uYm9keSxhPVBTKHIpO2lmKGkpe2xldCBlPW5DKGEpO3JldHVybiB0LmNvbmNhdChhLGEudmlzdWFsVmlld3BvcnR8fFtdLEJTKHIpP3I6W10sZSYmbj90QyhlKTpbXSl9cmV0dXJuIHQuY29uY2F0KHIsdEMocixbXSxuKSl9ZnVuY3Rpb24gbkMoZSl7cmV0dXJuIGUucGFyZW50JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wYXJlbnQpP2UuZnJhbWVFbGVtZW50Om51bGx9ZnVuY3Rpb24gckMoZSl7bGV0IHQ9WlMoZSksbj1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLHI9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDAsaT1SUyhlKSxhPWk/ZS5vZmZzZXRXaWR0aDpuLG89aT9lLm9mZnNldEhlaWdodDpyLHM9S3gobikhPT1hfHxLeChyKSE9PW87cmV0dXJuIHMmJihuPWEscj1vKSx7d2lkdGg6bixoZWlnaHQ6ciwkOnN9fWZ1bmN0aW9uIGlDKGUpe3JldHVybiBMUyhlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gYUMoZSl7bGV0IHQ9aUMoZSk7aWYoIVJTKHQpKXJldHVybiBKeCgxKTtsZXQgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDppLCQ6YX09ckModCksbz0oYT9LeChuLndpZHRoKTpuLndpZHRoKS9yLHM9KGE/S3gobi5oZWlnaHQpOm4uaGVpZ2h0KS9pO3JldHVybighb3x8IU51bWJlci5pc0Zpbml0ZShvKSkmJihvPTEpLCghc3x8IU51bWJlci5pc0Zpbml0ZShzKSkmJihzPTEpLHt4Om8seTpzfX12YXIgb0M9SngoMCk7ZnVuY3Rpb24gc0MoZSl7bGV0IHQ9UFMoZSk7cmV0dXJuIVlTKCl8fCF0LnZpc3VhbFZpZXdwb3J0P29DOnt4OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfX1mdW5jdGlvbiBjQyhlLHQsbil7cmV0dXJuIHQ9PT12b2lkIDAmJih0PSExKSwhIW4mJnQmJm49PT1QUyhlKX1mdW5jdGlvbiBsQyhlLHQsbixyKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pQyhlKSxvPUp4KDEpO3QmJihyP0xTKHIpJiYobz1hQyhyKSk6bz1hQyhlKSk7bGV0IHM9Y0MoYSxuLHIpP3NDKGEpOkp4KDApLGM9KGkubGVmdCtzLngpL28ueCxsPShpLnRvcCtzLnkpL28ueSx1PWkud2lkdGgvby54LGQ9aS5oZWlnaHQvby55O2lmKGEmJnIpe2xldCBlPVBTKGEpLHQ9TFMocik/UFMocik6cixuPWUsaT1uQyhuKTtmb3IoO2kmJnQhPT1uOyl7bGV0IGU9YUMoaSksdD1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9WlMoaSksYT10LmxlZnQrKGkuY2xpZW50TGVmdCtwYXJzZUZsb2F0KHIucGFkZGluZ0xlZnQpKSplLngsbz10LnRvcCsoaS5jbGllbnRUb3ArcGFyc2VGbG9hdChyLnBhZGRpbmdUb3ApKSplLnk7Yyo9ZS54LGwqPWUueSx1Kj1lLngsZCo9ZS55LGMrPWEsbCs9byxuPVBTKGkpLGk9bkMobil9fXJldHVybiBnUyh7d2lkdGg6dSxoZWlnaHQ6ZCx4OmMseTpsfSl9ZnVuY3Rpb24gdUMoZSx0KXtsZXQgbj1RUyhlKS5zY3JvbGxMZWZ0O3JldHVybiB0P3QubGVmdCtuOmxDKEZTKGUpKS5sZWZ0K259ZnVuY3Rpb24gZEMoZSx0KXtsZXQgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4Om4ubGVmdCt0LnNjcm9sbExlZnQtdUMoZSxuKSx5Om4udG9wK3Quc2Nyb2xsVG9wfX1mdW5jdGlvbiBmQyhlKXtsZXR7ZWxlbWVudHM6dCxyZWN0Om4sb2Zmc2V0UGFyZW50OnIsc3RyYXRlZ3k6aX09ZSxhPWk9PT1gZml4ZWRgLG89RlMocikscz10P0hTKHQuZmxvYXRpbmcpOiExO2lmKHI9PT1vfHxzJiZhKXJldHVybiBuO2xldCBjPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGw9SngoMSksdT1KeCgwKSxkPVJTKHIpO2lmKChkfHwhYSkmJigoTlMocikhPT1gYm9keWB8fEJTKG8pKSYmKGM9UVMocikpLGQpKXtsZXQgZT1sQyhyKTtsPWFDKHIpLHUueD1lLngrci5jbGllbnRMZWZ0LHUueT1lLnkrci5jbGllbnRUb3B9bGV0IGY9byYmIWQmJiFhP2RDKG8sYyk6SngoMCk7cmV0dXJue3dpZHRoOm4ud2lkdGgqbC54LGhlaWdodDpuLmhlaWdodCpsLnkseDpuLngqbC54LWMuc2Nyb2xsTGVmdCpsLngrdS54K2YueCx5Om4ueSpsLnktYy5zY3JvbGxUb3AqbC55K3UueStmLnl9fWZ1bmN0aW9uIHBDKGUpe3JldHVybiBlLmdldENsaWVudFJlY3RzP0FycmF5LmZyb20oZS5nZXRDbGllbnRSZWN0cygpKTpbXX1mdW5jdGlvbiBtQyhlKXtsZXQgdD1RUyhlKSxuPWUub3duZXJEb2N1bWVudC5ib2R5LHI9R3goZS5zY3JvbGxXaWR0aCxlLmNsaWVudFdpZHRoLG4uc2Nyb2xsV2lkdGgsbi5jbGllbnRXaWR0aCksaT1HeChlLnNjcm9sbEhlaWdodCxlLmNsaWVudEhlaWdodCxuLnNjcm9sbEhlaWdodCxuLmNsaWVudEhlaWdodCksYT0tdC5zY3JvbGxMZWZ0K3VDKGUpLG89LXQuc2Nyb2xsVG9wO3JldHVybiBaUyhuKS5kaXJlY3Rpb249PT1gcnRsYCYmKGErPUd4KGUuY2xpZW50V2lkdGgsbi5jbGllbnRXaWR0aCktcikse3dpZHRoOnIsaGVpZ2h0OmkseDphLHk6b319dmFyIGhDPTI1O2Z1bmN0aW9uIGdDKGUsdCxuKXtuPT09dm9pZCAwJiYobj1gdmlld3BvcnRgKTtsZXQgcj1uPT09YGxheW91dFZpZXdwb3J0YCxpPVBTKGUpLGE9RlMoZSksbz1pLnZpc3VhbFZpZXdwb3J0LHM9YS5jbGllbnRXaWR0aCxjPWEuY2xpZW50SGVpZ2h0LGw9MCx1PTA7aWYobyl7bGV0IGU9IVlTKCl8fHQ9PT1gZml4ZWRgO3I/ZXx8KGw9LW8ub2Zmc2V0TGVmdCx1PS1vLm9mZnNldFRvcCk6KHM9by53aWR0aCxjPW8uaGVpZ2h0LGUmJihsPW8ub2Zmc2V0TGVmdCx1PW8ub2Zmc2V0VG9wKSl9aWYodUMoYSk8PTApe2xldCBlPWEub3duZXJEb2N1bWVudCx0PWUuYm9keSxuPWdldENvbXB1dGVkU3R5bGUodCkscj1lLmNvbXBhdE1vZGU9PT1gQ1NTMUNvbXBhdGAmJnBhcnNlRmxvYXQobi5tYXJnaW5MZWZ0KStwYXJzZUZsb2F0KG4ubWFyZ2luUmlnaHQpfHwwLGk9TWF0aC5hYnMoYS5jbGllbnRXaWR0aC10LmNsaWVudFdpZHRoLXIpLG89Z2V0Q29tcHV0ZWRTdHlsZShhKS5zY3JvbGxiYXJHdXR0ZXI9PT1gc3RhYmxlIGJvdGgtZWRnZXNgP2kvMjppO288PWhDJiYocy09byl9cmV0dXJue3dpZHRoOnMsaGVpZ2h0OmMseDpsLHk6dX19ZnVuY3Rpb24gX0MoZSx0KXtsZXQgbj1sQyhlLCEwLHQ9PT1gZml4ZWRgKSxyPW4udG9wK2UuY2xpZW50VG9wLGk9bi5sZWZ0K2UuY2xpZW50TGVmdCxhPWFDKGUpO3JldHVybnt3aWR0aDplLmNsaWVudFdpZHRoKmEueCxoZWlnaHQ6ZS5jbGllbnRIZWlnaHQqYS55LHg6aSphLngseTpyKmEueX19ZnVuY3Rpb24gdkMoZSx0LG4pe2xldCByO2lmKHQ9PT1gdmlld3BvcnRgfHx0PT09YGxheW91dFZpZXdwb3J0YClyPWdDKGUsbix0KTtlbHNlIGlmKHQ9PT1gZG9jdW1lbnRgKXI9bUMoRlMoZSkpO2Vsc2UgaWYoTFModCkpcj1fQyh0LG4pO2Vsc2V7bGV0IG49c0MoZSk7cj17eDp0Lngtbi54LHk6dC55LW4ueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIGdTKHIpfWZ1bmN0aW9uIHlDKGUsdCl7bGV0IG49dC5nZXQoZSk7aWYobilyZXR1cm4gbjtsZXQgcj10QyhlLFtdLCExKS5maWx0ZXIoZT0+TFMoZSkmJk5TKGUpIT09YGJvZHlgKSxpPW51bGwsYT1aUyhlKS5wb3NpdGlvbj09PWBmaXhlZGAsbz1hPyRTKGUpOmU7Zm9yKDtMUyhvKSYmIVhTKG8pOyl7bGV0IGU9WlMobyksdD1xUyhvKSxuPWk/aS5wb3NpdGlvbjphP2BmaXhlZGA6YGA7IXQmJihuPT09YGZpeGVkYHx8bj09PWBhYnNvbHV0ZWAmJmUucG9zaXRpb249PT1gc3RhdGljYCk/cj1yLmZpbHRlcihlPT5lIT09byk6aT1lLG89JFMobyl9cmV0dXJuIHQuc2V0KGUscikscn1mdW5jdGlvbiBiQyhlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6aX09ZSxhPVsuLi5uPT09YGNsaXBwaW5nQW5jZXN0b3JzYD9IUyh0KT9bXTp5Qyh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxvPXZDKHQsYVswXSxpKSxzPW8udG9wLGM9by5yaWdodCxsPW8uYm90dG9tLHU9by5sZWZ0O2ZvcihsZXQgZT0xO2U8YS5sZW5ndGg7ZSsrKXtsZXQgbj12Qyh0LGFbZV0saSk7cz1HeChuLnRvcCxzKSxjPVd4KG4ucmlnaHQsYyksbD1XeChuLmJvdHRvbSxsKSx1PUd4KG4ubGVmdCx1KX1yZXR1cm57d2lkdGg6Yy11LGhlaWdodDpsLXMseDp1LHk6c319ZnVuY3Rpb24geEMoZSl7bGV0e3dpZHRoOnQsaGVpZ2h0Om59PXJDKGUpO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBTQyhlLHQsbil7bGV0IHI9UlModCksaT1GUyh0KSxhPW49PT1gZml4ZWRgLG89bEMoZSwhMCxhLHQpLHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYz1KeCgwKTtpZigocnx8IWEpJiYoKE5TKHQpIT09YGJvZHlgfHxCUyhpKSkmJihzPVFTKHQpKSxyKSl7bGV0IGU9bEModCwhMCxhLHQpO2MueD1lLngrdC5jbGllbnRMZWZ0LGMueT1lLnkrdC5jbGllbnRUb3B9IXImJmkmJihjLng9dUMoaSkpO2xldCBsPWkmJiFyJiYhYT9kQyhpLHMpOkp4KDApO3JldHVybnt4Om8ubGVmdCtzLnNjcm9sbExlZnQtYy54LWwueCx5Om8udG9wK3Muc2Nyb2xsVG9wLWMueS1sLnksd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9fWZ1bmN0aW9uIENDKGUpe3JldHVybiBaUyhlKS5wb3NpdGlvbj09PWBzdGF0aWNgfWZ1bmN0aW9uIHdDKGUsdCl7aWYoIVJTKGUpfHxaUyhlKS5wb3NpdGlvbj09PWBmaXhlZGApcmV0dXJuIG51bGw7aWYodClyZXR1cm4gdChlKTtsZXQgbj1lLm9mZnNldFBhcmVudDtyZXR1cm4gRlMoZSk9PT1uJiYobj1uLm93bmVyRG9jdW1lbnQuYm9keSksbn1mdW5jdGlvbiBUQyhlLHQpe2xldCBuPVBTKGUpO2lmKEhTKGUpKXJldHVybiBuO2lmKCFSUyhlKSl7bGV0IHQ9JFMoZSk7Zm9yKDt0JiYhWFModCk7KXtpZihMUyh0KSYmIUNDKHQpKXJldHVybiB0O3Q9JFModCl9cmV0dXJuIG59bGV0IHI9d0MoZSx0KTtmb3IoO3ImJlZTKHIpJiZDQyhyKTspcj13QyhyLHQpO3JldHVybiByJiZYUyhyKSYmQ0MocikmJiFxUyhyKT9uOnJ8fEpTKGUpfHxufXZhciBFQz1hc3luYyBmdW5jdGlvbihlKXtsZXQgdD10aGlzLmdldE9mZnNldFBhcmVudHx8VEMsbj10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCBuKGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6U0MoZS5yZWZlcmVuY2UsYXdhaXQgdChlLmZsb2F0aW5nKSxlLnN0cmF0ZWd5KSxmbG9hdGluZzp7eDowLHk6MCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19fTtmdW5jdGlvbiBEQyhlKXtyZXR1cm4gWlMoZSkuZGlyZWN0aW9uPT09YHJ0bGB9dmFyIE9DPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpmQyxnZXREb2N1bWVudEVsZW1lbnQ6RlMsZ2V0Q2xpcHBpbmdSZWN0OmJDLGdldE9mZnNldFBhcmVudDpUQyxnZXRFbGVtZW50UmVjdHM6RUMsZ2V0Q2xpZW50UmVjdHM6cEMsZ2V0RGltZW5zaW9uczp4QyxnZXRTY2FsZTphQyxpc0VsZW1lbnQ6TFMsaXNSVEw6REN9O2Z1bmN0aW9uIGtDKGUsdCl7cmV0dXJuIGUueD09PXQueCYmZS55PT09dC55JiZlLndpZHRoPT09dC53aWR0aCYmZS5oZWlnaHQ9PT10LmhlaWdodH1mdW5jdGlvbiBBQyhlLHQsbil7bGV0IHI9bnVsbCxpLGE9RlMoZSk7ZnVuY3Rpb24gbygpe3ZhciBlO2NsZWFyVGltZW91dChpKSwoZT1yKT09bnVsbHx8ZS5kaXNjb25uZWN0KCkscj1udWxsfWZ1bmN0aW9uIHMobixjKXtuPT09dm9pZCAwJiYobj0hMSksYz09PXZvaWQgMCYmKGM9MSksbygpO2xldCBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6dSx0b3A6ZCx3aWR0aDpmLGhlaWdodDpwfT1sO2lmKG58fHQoKSwhZnx8IXApcmV0dXJuO2xldCBtPXF4KGQpLGg9cXgoYS5jbGllbnRXaWR0aC0odStmKSksZz1xeChhLmNsaWVudEhlaWdodC0oZCtwKSksXz1xeCh1KSx2PXtyb290TWFyZ2luOi1tK2BweCBgKy1oK2BweCBgKy1nK2BweCBgKy1fK2BweGAsdGhyZXNob2xkOkd4KDAsV3goMSxjKSl8fDF9LHk9ITA7ZnVuY3Rpb24gYih0KXtsZXQgbj10WzBdLmludGVyc2VjdGlvblJhdGlvO2lmKCFrQyhsLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKXJldHVybiBzKCk7aWYobiE9PWMpe2lmKCF5KXJldHVybiBzKCk7bj9zKCExLG4pOmk9c2V0VGltZW91dCgoKT0+e3MoITEsMWUtNyl9LDFlMyl9eT0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4udixyb290OmEub3duZXJEb2N1bWVudH0pfWNhdGNoe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsdil9ci5vYnNlcnZlKGUpfWxldCBjPVBTKGUpLGw9KCk9PnMobik7cmV0dXJuIGMuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxsKSxzKCEwKSwoKT0+e2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxsKSxvKCl9fWZ1bmN0aW9uIGpDKGUsdCxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7YW5jZXN0b3JTY3JvbGw6aT0hMCxhbmNlc3RvclJlc2l6ZTphPSEwLGVsZW1lbnRSZXNpemU6bz10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PWBmdW5jdGlvbmAsbGF5b3V0U2hpZnQ6cz10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PWBmdW5jdGlvbmAsYW5pbWF0aW9uRnJhbWU6Yz0hMX09cixsPWlDKGUpLHU9aXx8YT9bLi4ubD90QyhsKTpbXSwuLi50P3RDKHQpOltdXTpbXTt1LmZvckVhY2goZT0+e2kmJmUuYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxuKSxhJiZlLmFkZEV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbil9KTtsZXQgZD1sJiZzP0FDKGwsbixhKTpudWxsLGY9LTEscD1udWxsO28mJihwPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0W3JdPWU7ciYmci50YXJnZXQ9PT1sJiZwJiZ0JiYocC51bm9ic2VydmUodCksY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTsoZT1wKT09bnVsbHx8ZS5vYnNlcnZlKHQpfSkpLG4oKX0pLGwmJiFjJiZwLm9ic2VydmUobCksdCYmcC5vYnNlcnZlKHQpKTtsZXQgbSxoPWM/bEMoZSk6bnVsbDtjJiZnKCk7ZnVuY3Rpb24gZygpe2xldCB0PWxDKGUpO2gmJiFrQyhoLHQpJiZuKCksaD10LG09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGcpfXJldHVybiBuKCksKCk9Pnt2YXIgZTt1LmZvckVhY2goZT0+e2kmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxuKSxhJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbil9KSxkPy4oKSwoZT1wKT09bnVsbHx8ZS5kaXNjb25uZWN0KCkscD1udWxsLGMmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKG0pfX12YXIgTUM9T1MsTkM9a1MsUEM9U1MsRkM9alMsSUM9VFMsTEM9eFMsUkM9QVMsekM9KGUsdCxuKT0+e2xldCByPW5ldyBNYXAsaT1uPz97fSxhPXsuLi5PQywuLi5pLnBsYXRmb3JtLF9jOnJ9O3JldHVybiBiUyhlLHQsey4uLmkscGxhdGZvcm06YX0pfTtmdW5jdGlvbiBCQyhlKXtyZXR1cm4gdHlwZW9mIGU9PWBvYmplY3RgJiYhIWUmJmAkZWxgaW4gZX1mdW5jdGlvbiBWQyhlKXtpZihCQyhlKSl7bGV0IHQ9ZS4kZWw7cmV0dXJuIElTKHQpJiZOUyh0KT09PWAjY29tbWVudGA/bnVsbDp0fXJldHVybiBlfWZ1bmN0aW9uIEhDKGUpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lKCk6TShlKX1mdW5jdGlvbiBVQyhlKXtyZXR1cm57bmFtZTpgYXJyb3dgLG9wdGlvbnM6ZSxmbih0KXtsZXQgbj1WQyhIQyhlLmVsZW1lbnQpKTtyZXR1cm4gbj09bnVsbD97fTpMQyh7ZWxlbWVudDpuLHBhZGRpbmc6ZS5wYWRkaW5nfSkuZm4odCl9fX1mdW5jdGlvbiBXQyhlKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz5gdWA/MTooZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRldmljZVBpeGVsUmF0aW98fDF9ZnVuY3Rpb24gR0MoZSx0KXtsZXQgbj1XQyhlKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259ZnVuY3Rpb24gS0MoZSx0LG4pe249PT12b2lkIDAmJihuPXt9KTtsZXQgcj1uLndoaWxlRWxlbWVudHNNb3VudGVkLGk9VygoKT0+SEMobi5vcGVuKT8/ITApLGE9VygoKT0+SEMobi5taWRkbGV3YXJlKSksbz1XKCgpPT5IQyhuLnBsYWNlbWVudCk/P2Bib3R0b21gKSxzPVcoKCk9PkhDKG4uc3RyYXRlZ3kpPz9gYWJzb2x1dGVgKSxjPVcoKCk9PkhDKG4udHJhbnNmb3JtKT8/ITApLGw9VygoKT0+VkMoZS52YWx1ZSkpLHU9VygoKT0+VkModC52YWx1ZSkpLGQ9aigwKSxmPWooMCkscD1qKHMudmFsdWUpLG09aihvLnZhbHVlKSxoPWRuKHt9KSxnPWooITEpLF89VygoKT0+e2xldCBlPXtwb3NpdGlvbjpwLnZhbHVlLGxlZnQ6YDBgLHRvcDpgMGB9O2lmKCF1LnZhbHVlKXJldHVybiBlO2xldCB0PUdDKHUudmFsdWUsZC52YWx1ZSksbj1HQyh1LnZhbHVlLGYudmFsdWUpO3JldHVybiBjLnZhbHVlP3suLi5lLHRyYW5zZm9ybTpgdHJhbnNsYXRlKGArdCtgcHgsIGArbitgcHgpYCwuLi5XQyh1LnZhbHVlKT49MS41JiZ7d2lsbENoYW5nZTpgdHJhbnNmb3JtYH19Ontwb3NpdGlvbjpwLnZhbHVlLGxlZnQ6dCtgcHhgLHRvcDpuK2BweGB9fSksdjtmdW5jdGlvbiB5KCl7aWYobC52YWx1ZT09bnVsbHx8dS52YWx1ZT09bnVsbClyZXR1cm47bGV0IGU9aS52YWx1ZTt6QyhsLnZhbHVlLHUudmFsdWUse21pZGRsZXdhcmU6YS52YWx1ZSxwbGFjZW1lbnQ6by52YWx1ZSxzdHJhdGVneTpzLnZhbHVlfSkudGhlbih0PT57ZC52YWx1ZT10LngsZi52YWx1ZT10LnkscC52YWx1ZT10LnN0cmF0ZWd5LG0udmFsdWU9dC5wbGFjZW1lbnQsaC52YWx1ZT10Lm1pZGRsZXdhcmVEYXRhLGcudmFsdWU9ZSE9PSExfSl9ZnVuY3Rpb24gYigpe3R5cGVvZiB2PT1gZnVuY3Rpb25gJiYodigpLHY9dm9pZCAwKX1mdW5jdGlvbiB4KCl7aWYoYigpLHI9PT12b2lkIDApe3koKTtyZXR1cm59aWYobC52YWx1ZSE9bnVsbCYmdS52YWx1ZSE9bnVsbCl7dj1yKGwudmFsdWUsdS52YWx1ZSx5KTtyZXR1cm59fWZ1bmN0aW9uIFMoKXtpLnZhbHVlfHwoZy52YWx1ZT0hMSl9cmV0dXJuIERyKFthLG8scyxpXSx5LHtmbHVzaDpgc3luY2B9KSxEcihbbCx1XSx4LHtmbHVzaDpgc3luY2B9KSxEcihpLFMse2ZsdXNoOmBzeW5jYH0pLEZlKCkmJkllKGIpLHt4OmVuKGQpLHk6ZW4oZiksc3RyYXRlZ3k6ZW4ocCkscGxhY2VtZW50OmVuKG0pLG1pZGRsZXdhcmVEYXRhOmVuKGgpLGlzUG9zaXRpb25lZDplbihnKSxmbG9hdGluZ1N0eWxlczpfLHVwZGF0ZTp5fX12YXIgcUM9W2BkaXJgXSxKQz17c2lkZTpgYm90dG9tYCxzaWRlT2Zmc2V0OjAsc2lkZUZsaXA6ITAsYWxpZ246YGNlbnRlcmAsYWxpZ25PZmZzZXQ6MCxhbGlnbkZsaXA6ITAsYXJyb3dQYWRkaW5nOjAsaGlkZVNoaWZ0ZWRBcnJvdzohMCxhdm9pZENvbGxpc2lvbnM6ITAsY29sbGlzaW9uQm91bmRhcnk6KCk9PltdLGNvbGxpc2lvblBhZGRpbmc6MCxzdGlja3k6YHBhcnRpYWxgLGhpZGVXaGVuRGV0YWNoZWQ6ITEscG9zaXRpb25TdHJhdGVneTpgZml4ZWRgLHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6YG9wdGltaXplZGAscHJpb3JpdGl6ZVBvc2l0aW9uOiExfSxbWUMsWENdPXV5KGBQb3BwZXJDb250ZW50YCksWkM9UCh7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyQ29udGVudGAscHJvcHM6RmEoe21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFsaWduT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxjb2xsaXNpb25Cb3VuZGFyeTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxjb2xsaXNpb25QYWRkaW5nOnt0eXBlOltOdW1iZXIsT2JqZWN0XSxyZXF1aXJlZDohMX0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSx7Li4uSkN9KSxlbWl0czpbYHBsYWNlZGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9SXgoKSx7Zm9yd2FyZFJlZjphLGN1cnJlbnRFbGVtZW50Om99PWxiKCkscz1yYihXKCgpPT5uLmRpcikpLGM9aigpLGw9aigpLHt3aWR0aDp1LGhlaWdodDpkfT13YihsKSxmPVcoKCk9Pm4uc2lkZSsobi5hbGlnbj09PWBjZW50ZXJgP2BgOmAtJHtuLmFsaWdufWApKSxwPVcoKCk9PnR5cGVvZiBuLmNvbGxpc2lvblBhZGRpbmc9PWBudW1iZXJgP24uY29sbGlzaW9uUGFkZGluZzp7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjAsLi4ubi5jb2xsaXNpb25QYWRkaW5nfSksbT1XKCgpPT5BcnJheS5pc0FycmF5KG4uY29sbGlzaW9uQm91bmRhcnkpP24uY29sbGlzaW9uQm91bmRhcnk6W24uY29sbGlzaW9uQm91bmRhcnldKSxoPVcoKCk9Pih7cGFkZGluZzpwLnZhbHVlLGJvdW5kYXJ5Om0udmFsdWUuZmlsdGVyKEJ4KSxhbHRCb3VuZGFyeTptLnZhbHVlLmxlbmd0aD4wfSkpLGc9VygoKT0+KHttYWluQXhpczpuLnNpZGVGbGlwLGNyb3NzQXhpczpuLmFsaWduRmxpcH0pKSxfPVcoKCk9PltNQyh7bWFpbkF4aXM6bi5zaWRlT2Zmc2V0K2QudmFsdWUsYWxpZ25tZW50QXhpczpuLmFsaWduT2Zmc2V0fSksbi5wcmlvcml0aXplUG9zaXRpb24mJm4uYXZvaWRDb2xsaXNpb25zJiZQQyh7Li4uaC52YWx1ZSwuLi5nLnZhbHVlfSksbi5hdm9pZENvbGxpc2lvbnMmJk5DKHttYWluQXhpczohMCxjcm9zc0F4aXM6ISFuLnByaW9yaXRpemVQb3NpdGlvbixsaW1pdGVyOm4uc3RpY2t5PT09YHBhcnRpYWxgP1JDKCk6dm9pZCAwLC4uLmgudmFsdWV9KSwhbi5wcmlvcml0aXplUG9zaXRpb24mJm4uYXZvaWRDb2xsaXNpb25zJiZQQyh7Li4uaC52YWx1ZSwuLi5nLnZhbHVlfSksRkMoey4uLmgudmFsdWUsYXBwbHk6KHtlbGVtZW50czplLHJlY3RzOnQsYXZhaWxhYmxlV2lkdGg6bixhdmFpbGFibGVIZWlnaHQ6cn0pPT57bGV0e3dpZHRoOmksaGVpZ2h0OmF9PXQucmVmZXJlbmNlLG89ZS5mbG9hdGluZy5zdHlsZTtvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS13aWR0aGAsYCR7bn1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodGAsYCR7cn1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLXdpZHRoYCxgJHtpfXB4YCksby5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hbmNob3ItaGVpZ2h0YCxgJHthfXB4YCl9fSksbC52YWx1ZSYmVUMoe2VsZW1lbnQ6bC52YWx1ZSxwYWRkaW5nOm4uYXJyb3dQYWRkaW5nfSksVngoe2Fycm93V2lkdGg6dS52YWx1ZSxhcnJvd0hlaWdodDpkLnZhbHVlLGRpcjpzLnZhbHVlfSksbi5oaWRlV2hlbkRldGFjaGVkJiZJQyh7c3RyYXRlZ3k6YHJlZmVyZW5jZUhpZGRlbmAsLi4uaC52YWx1ZX0pXSkse2Zsb2F0aW5nU3R5bGVzOnYscGxhY2VtZW50OnksaXNQb3NpdGlvbmVkOmIsbWlkZGxld2FyZURhdGE6eCx1cGRhdGU6U309S0MoVygoKT0+bi5yZWZlcmVuY2U/P2kuYW5jaG9yLnZhbHVlKSxjLHtzdHJhdGVneTpuLnBvc2l0aW9uU3RyYXRlZ3kscGxhY2VtZW50OmYsd2hpbGVFbGVtZW50c01vdW50ZWQ6KC4uLmUpPT5qQyguLi5lLHtsYXlvdXRTaGlmdDohbi5kaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdCxhbmltYXRpb25GcmFtZTpuLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k9PT1gYWx3YXlzYH0pLG1pZGRsZXdhcmU6X30pLEM9VygoKT0+SHgoeS52YWx1ZSlbMF0pLHc9VygoKT0+SHgoeS52YWx1ZSlbMV0pO1RyKCgpPT57Yi52YWx1ZSYmcihgcGxhY2VkYCl9KTtsZXQgZWU9VygoKT0+e2xldCBlPXgudmFsdWUuYXJyb3c/LmNlbnRlck9mZnNldCE9PTA7cmV0dXJuIG4uaGlkZVNoaWZ0ZWRBcnJvdyYmZX0pLHRlPWooYGApO3JldHVybiB3cigoKT0+e28udmFsdWUmJih0ZS52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvLnZhbHVlKS56SW5kZXgpfSksWEMoe3BsYWNlZFNpZGU6QyxvbkFycm93Q2hhbmdlOmU9PmwudmFsdWU9ZSxhcnJvd1g6VygoKT0+eC52YWx1ZS5hcnJvdz8ueD8/MCksYXJyb3dZOlcoKCk9PngudmFsdWUuYXJyb3c/Lnk/PzApLHNob3VsZEhpZGVBcnJvdzplZX0pLChlLHQpPT4oTCgpLFIoYGRpdmAse3JlZl9rZXk6YGZsb2F0aW5nUmVmYCxyZWY6YywiZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXIiOmBgLGRpcjpNKHMpLHN0eWxlOmdlKHsuLi5NKHYpLHRyYW5zZm9ybTpNKGIpP00odikudHJhbnNmb3JtOmB0cmFuc2xhdGUoMCwgLTIwMCUpYCxtaW5XaWR0aDpgbWF4LWNvbnRlbnRgLHpJbmRleDp0ZS52YWx1ZSwiLS1yZWthLXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luIjpbTSh4KS50cmFuc2Zvcm1PcmlnaW4/LngsTSh4KS50cmFuc2Zvcm1PcmlnaW4/LnldLmpvaW4oYCBgKSwuLi5NKHgpLmhpZGU/LnJlZmVyZW5jZUhpZGRlbiYme3Zpc2liaWxpdHk6YGhpZGRlbmAscG9pbnRlckV2ZW50czpgbm9uZWB9fSl9LFtuLm1lbW9EZXBlbmRlbmNpZXM/bmMoW24uYXNDaGlsZCxuLmFzLEMudmFsdWUsdy52YWx1ZSxNKGIpLC4uLk9iamVjdC52YWx1ZXMoZS4kYXR0cnMpLC4uLm4ubWVtb0RlcGVuZGVuY2llc10sKCk9PihMKCkseihNKFBiKSxrcyh7a2V5OjAscmVmOk0oYSl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczpuLmFzLCJkYXRhLXNpZGUiOkMudmFsdWUsImRhdGEtYWxpZ24iOncudmFsdWUsc3R5bGU6e2FuaW1hdGlvbjpNKGIpP3ZvaWQgMDpgbm9uZWB9fSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2Bhcy1jaGlsZGAsYGFzYCxgZGF0YS1zaWRlYCxgZGF0YS1hbGlnbmAsYHN0eWxlYF0pKSx0LDApOihMKCkseihNKFBiKSxrcyh7a2V5OjEscmVmOk0oYSl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczpuLmFzLCJkYXRhLXNpZGUiOkMudmFsdWUsImRhdGEtYWxpZ24iOncudmFsdWUsZGlyOk0ocyksc3R5bGU6e2FuaW1hdGlvbjpNKGIpP3ZvaWQgMDpgbm9uZWB9fSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2Bhcy1jaGlsZGAsYGFzYCxgZGF0YS1zaWRlYCxgZGF0YS1hbGlnbmAsYGRpcmAsYHN0eWxlYF0pKV0sMTIscUMpKX19KTtmdW5jdGlvbiBRQyhlKXtsZXQgdD1LeSh7bm9uY2U6aigpfSk7cmV0dXJuIFcoKCk9PmU/LnZhbHVlfHx0Lm5vbmNlPy52YWx1ZSl9dmFyWyRDLGV3XT11eShgUm92aW5nRm9jdXNHcm91cGApLHR3PVAoe19fbmFtZTpgUm92aW5nRm9jdXNHcm91cGAscHJvcHM6e29yaWVudGF0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OnZvaWQgMH0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbG9vcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGN1cnJlbnRUYWJTdG9wSWQ6e3R5cGU6W1N0cmluZyxudWxsXSxyZXF1aXJlZDohMX0sZGVmYXVsdEN1cnJlbnRUYWJTdG9wSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxwcmV2ZW50U2Nyb2xsT25FbnRyeUZvY3VzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BlbnRyeUZvY3VzYCxgdXBkYXRlOmN1cnJlbnRUYWJTdG9wSWRgXSxzZXR1cChlLHtleHBvc2U6dCxlbWl0Om59KXtsZXQgcj1lLGk9bix7bG9vcDphLG9yaWVudGF0aW9uOm8sZGlyOnN9PWJuKHIpLGM9cmIocyksbD1WeShyLGBjdXJyZW50VGFiU3RvcElkYCxpLHtkZWZhdWx0VmFsdWU6ci5kZWZhdWx0Q3VycmVudFRhYlN0b3BJZCxwYXNzaXZlOnIuY3VycmVudFRhYlN0b3BJZD09PXZvaWQgMH0pLHU9aighMSksZD1qKCExKSxmPWooMCkse2dldEl0ZW1zOnAsQ29sbGVjdGlvblNsb3Q6bX09RHgoe2lzUHJvdmlkZXI6ITB9KTtmdW5jdGlvbiBoKGUpe2xldCB0PSFkLnZhbHVlO2lmKGUuY3VycmVudFRhcmdldCYmZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXQmJnQmJiF1LnZhbHVlKXtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoa3gsQXgpO2lmKGUuY3VycmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KHQpLGkoYGVudHJ5Rm9jdXNgLHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBlPXAoKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCk7UHgoW2UuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1hY3RpdmVgKT09PWBgKSxlLmZpbmQoZT0+ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtaGlnaGxpZ2h0ZWRgKT09PWBgKSxlLmZpbmQoZT0+ZS5pZD09PWwudmFsdWUpLC4uLmVdLmZpbHRlcihCb29sZWFuKSxyLnByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXMpfX1kLnZhbHVlPSExfWZ1bmN0aW9uIGcoKXtzZXRUaW1lb3V0KCgpPT57ZC52YWx1ZT0hMX0sMSl9cmV0dXJuIHQoe2dldEl0ZW1zOnB9KSxldyh7bG9vcDphLGRpcjpjLG9yaWVudGF0aW9uOm8sY3VycmVudFRhYlN0b3BJZDpsLG9uSXRlbUZvY3VzOmU9PntsLnZhbHVlPWV9LG9uSXRlbVNoaWZ0VGFiOigpPT57dS52YWx1ZT0hMH0sb25Gb2N1c2FibGVJdGVtQWRkOigpPT57Zi52YWx1ZSsrfSxvbkZvY3VzYWJsZUl0ZW1SZW1vdmU6KCk9PntmLnZhbHVlLS19fSksKGUsdCk9PihMKCkseihNKG0pLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShQYikse3RhYmluZGV4OnUudmFsdWV8fGYudmFsdWU9PT0wPy0xOjAsImRhdGEtb3JpZW50YXRpb24iOk0obyksYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCxkaXI6TShjKSxzdHlsZTp7b3V0bGluZTpgbm9uZWB9LG9uTW91c2Vkb3duOnRbMF18fD1lPT5kLnZhbHVlPSEwLG9uTW91c2V1cDpnLG9uRm9jdXM6aCxvbkJsdXI6dFsxXXx8PWU9PnUudmFsdWU9ITF9LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0YWJpbmRleGAsYGRhdGEtb3JpZW50YXRpb25gLGBhc2AsYGFzLWNoaWxkYCxgZGlyYF0pXSksXzozfSkpfX0pLG53PVAoe19fbmFtZTpgUm92aW5nRm9jdXNJdGVtYCxwcm9wczp7dGFiU3RvcElkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZm9jdXNhYmxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYWN0aXZlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsbG93U2hpZnRLZXk6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPSRDKCkscj1DYigpLGk9VygoKT0+dC50YWJTdG9wSWR8fHIpLGE9VygoKT0+bi5jdXJyZW50VGFiU3RvcElkLnZhbHVlPT09aS52YWx1ZSkse2dldEl0ZW1zOm8sQ29sbGVjdGlvbkl0ZW06c309RHgoKTtRaSgoKT0+e3QuZm9jdXNhYmxlJiZuLm9uRm9jdXNhYmxlSXRlbUFkZCgpfSksbmEoKCk9Pnt0LmZvY3VzYWJsZSYmbi5vbkZvY3VzYWJsZUl0ZW1SZW1vdmUoKX0pLERyKCgpPT50LmZvY3VzYWJsZSwoZSx0KT0+e2UhPT10JiYoZT9uLm9uRm9jdXNhYmxlSXRlbUFkZCgpOm4ub25Gb2N1c2FibGVJdGVtUmVtb3ZlKCkpfSk7ZnVuY3Rpb24gYyhlKXtpZihlLmtleT09PWBUYWJgJiZlLnNoaWZ0S2V5KXtuLm9uSXRlbVNoaWZ0VGFiKCk7cmV0dXJufWlmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0KXJldHVybjtsZXQgcj1OeChlLG4ub3JpZW50YXRpb24udmFsdWUsbi5kaXIudmFsdWUpO2lmKHIhPT12b2lkIDApe2lmKGUubWV0YUtleXx8ZS5jdHJsS2V5fHxlLmFsdEtleXx8IXQuYWxsb3dTaGlmdEtleSYmZS5zaGlmdEtleSlyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPVsuLi5vKCkubWFwKGU9PmUucmVmKS5maWx0ZXIoZT0+ZS5kYXRhc2V0LmRpc2FibGVkIT09YGApXTtpZihyPT09YGxhc3RgKWkucmV2ZXJzZSgpO2Vsc2UgaWYocj09PWBwcmV2YHx8cj09PWBuZXh0YCl7cj09PWBwcmV2YCYmaS5yZXZlcnNlKCk7bGV0IHQ9aS5pbmRleE9mKGUuY3VycmVudFRhcmdldCk7aT1uLmxvb3AudmFsdWU/RngoaSx0KzEpOmkuc2xpY2UodCsxKX0kbigoKT0+UHgoaSkpfX1yZXR1cm4oZSx0KT0+KEwoKSx6KE0ocyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFBiKSx7dGFiaW5kZXg6YS52YWx1ZT8wOi0xLCJkYXRhLW9yaWVudGF0aW9uIjpNKG4pLm9yaWVudGF0aW9uLnZhbHVlLCJkYXRhLWFjdGl2ZSI6ZS5hY3RpdmU/YGA6dm9pZCAwLCJkYXRhLWRpc2FibGVkIjplLmZvY3VzYWJsZT92b2lkIDA6YGAsYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCxvbk1vdXNlZG93bjp0WzBdfHw9dD0+e2UuZm9jdXNhYmxlP00obikub25JdGVtRm9jdXMoaS52YWx1ZSk6dC5wcmV2ZW50RGVmYXVsdCgpfSxvbkZvY3VzOnRbMV18fD1lPT5NKG4pLm9uSXRlbUZvY3VzKGkudmFsdWUpLG9uS2V5ZG93bjpjfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdGFiaW5kZXhgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1hY3RpdmVgLGBkYXRhLWRpc2FibGVkYCxgYXNgLGBhcy1jaGlsZGBdKV0pLF86M30pKX19KSxydz1bYCBgLGBFbnRlcmAsYEFycm93VXBgLGBBcnJvd0Rvd25gXSxpdz1bYCBgLGBFbnRlcmBdO2Z1bmN0aW9uIGF3KGUsdCxuKXtyZXR1cm4gZT09PXZvaWQgMD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShlPT5vdyhlLHQsbikpOm93KGUsdCxuKX1mdW5jdGlvbiBvdyhlLHQsbil7cmV0dXJuIGU9PT12b2lkIDB8fHQ9PT12b2lkIDA/ITE6dHlwZW9mIGU9PWBzdHJpbmdgP2U9PT10OnR5cGVvZiBuPT1gZnVuY3Rpb25gP24oZSx0KTp0eXBlb2Ygbj09YHN0cmluZ2A/ZT8uW25dPT09dD8uW25dOmN5KGUsdCl9ZnVuY3Rpb24gc3coZSl7cmV0dXJuIGU9PW51bGx8fGU9PT1gYHx8QXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg9PT0wfXZhciBjdz1bYHZhbHVlYF0sW2x3LHV3XT11eShgU2VsZWN0Um9vdGApLGR3PVAoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFJvb3RgLHByb3BzOntvcGVuOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGRlZmF1bHRPcGVuOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LG51bGxhYmxlVmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGB9LGJ5Ont0eXBlOltTdHJpbmcsRnVuY3Rpb25dLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxuYW1lOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgLGB1cGRhdGU6b3BlbmBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtyZXF1aXJlZDppLGRpc2FibGVkOmEsbXVsdGlwbGU6byxkaXI6c309Ym4obiksYz1WeShuLGBtb2RlbFZhbHVlYCxyLHtkZWZhdWx0VmFsdWU6bi5kZWZhdWx0VmFsdWU/PyhvLnZhbHVlP1tdOnZvaWQgMCkscGFzc2l2ZTpuLm1vZGVsVmFsdWU9PT12b2lkIDAsZGVlcDohMH0pLGw9Vnkobixgb3BlbmAscix7ZGVmYXVsdFZhbHVlOm4uZGVmYXVsdE9wZW4scGFzc2l2ZTpuLm9wZW49PT12b2lkIDB9KSx1PWooKSxkPWooKSxmPWooe3g6MCx5OjB9KSxwPVcoKCk9Pm8udmFsdWUmJkFycmF5LmlzQXJyYXkoYy52YWx1ZSk/Yy52YWx1ZT8ubGVuZ3RoPT09MDpweShjLnZhbHVlKSk7RHgoe2lzUHJvdmlkZXI6ITB9KTtsZXQgbT1yYihzKSxoPWNiKHUpLGc9aihuZXcgU2V0KSxfPVcoKCk9PkFycmF5LmZyb20oZy52YWx1ZSkubWFwKGU9PmUudmFsdWUpLmpvaW4oYDtgKSk7ZnVuY3Rpb24gdihlKXtpZihvLnZhbHVlKXtsZXQgdD1BcnJheS5pc0FycmF5KGMudmFsdWUpP1suLi5jLnZhbHVlXTpbXSxyPXQuZmluZEluZGV4KHQ9Pm93KHQsZSxuLmJ5KSk7cj09PS0xP3QucHVzaChlKTp0LnNwbGljZShyLDEpLGMudmFsdWU9Wy4uLnRdfWVsc2UgYy52YWx1ZT1lfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIEFycmF5LmZyb20oZy52YWx1ZSkuZmluZCh0PT5hdyhlLHQudmFsdWUsbi5ieSkpfXJldHVybiB1dyh7dHJpZ2dlckVsZW1lbnQ6dSxvblRyaWdnZXJDaGFuZ2U6ZT0+e3UudmFsdWU9ZX0sdmFsdWVFbGVtZW50OmQsb25WYWx1ZUVsZW1lbnRDaGFuZ2U6ZT0+e2QudmFsdWU9ZX0sY29udGVudElkOmBgLG1vZGVsVmFsdWU6YyxvblZhbHVlQ2hhbmdlOnYsYnk6bi5ieSxvcGVuOmwsbXVsdGlwbGU6byxyZXF1aXJlZDppLG9uT3BlbkNoYW5nZTplPT57bC52YWx1ZT1lfSxkaXI6bSx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6ZixkaXNhYmxlZDphLGlzRW1wdHlNb2RlbFZhbHVlOnAsb3B0aW9uc1NldDpnLG9uT3B0aW9uQWRkOmU9PntsZXQgdD15KGUudmFsdWUpO3QmJmcudmFsdWUuZGVsZXRlKHQpLGcudmFsdWUuYWRkKGUpfSxvbk9wdGlvblJlbW92ZTplPT57bGV0IHQ9eShlLnZhbHVlKTt0JiZnLnZhbHVlLmRlbGV0ZSh0KX19KSwoZSx0KT0+KEwoKSx6KE0oUngpLG51bGwse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk0oYyksb3BlbjpNKGwpfSksTShoKSYmZS5uYW1lPyhMKCkseihmdyx7a2V5Ol8udmFsdWUsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsdGFiaW5kZXg6YC0xYCxtdWx0aXBsZTpNKG8pLHJlcXVpcmVkOk0oaSksbmFtZTplLm5hbWUsYXV0b2NvbXBsZXRlOmUuYXV0b2NvbXBsZXRlLGRpc2FibGVkOk0oYSksdmFsdWU6TShjKX0se2RlZmF1bHQ6TigoKT0+W00ocHkpKE0oYykpPyhMKCksUihgb3B0aW9uYCx7a2V5OjAsdmFsdWU6ZS5udWxsYWJsZVZhbHVlfSxudWxsLDgsY3cpKTpVKGB2LWlmYCwhMCksKEwoITApLFIoSSxudWxsLGhhKEFycmF5LmZyb20oZy52YWx1ZSksZT0+KEwoKSxSKGBvcHRpb25gLGtzKHtrZXk6ZS52YWx1ZT8/YGB9LHtyZWZfZm9yOiEwfSxlKSxudWxsLDE2KSkpLDEyOCkpXSksXzoxfSw4LFtgbXVsdGlwbGVgLGByZXF1aXJlZGAsYG5hbWVgLGBhdXRvY29tcGxldGVgLGBkaXNhYmxlZGAsYHZhbHVlYF0pKTpVKGB2LWlmYCwhMCldKSxfOjN9KSl9fSksZnc9UCh7X19uYW1lOmBCdWJibGVTZWxlY3RgLHByb3BzOnthdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhdXRvZm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9ybTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LG5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzaXplOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sdmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1qKCkscj1sdygpO0RyKCgpPT50LnZhbHVlLChlLHQpPT57bGV0IHI9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixgdmFsdWVgKS5zZXQ7aWYoZSE9PXQmJmkmJm4udmFsdWUpe2xldCB0PW5ldyBFdmVudChgY2hhbmdlYCx7YnViYmxlczohMH0pO2kuY2FsbChuLnZhbHVlLGUpLG4udmFsdWUuZGlzcGF0Y2hFdmVudCh0KX19KTtmdW5jdGlvbiBpKGUpe3Iub25WYWx1ZUNoYW5nZShlLnRhcmdldC52YWx1ZSl9cmV0dXJuKGUscik9PihMKCkseihNKE94KSx7ImFzLWNoaWxkIjpgYH0se2RlZmF1bHQ6TigoKT0+W0IoYHNlbGVjdGAsa3Moe3JlZl9rZXk6YHNlbGVjdEVsZW1lbnRgLHJlZjpufSx0LHtvbklucHV0Oml9KSxbRihlLiRzbG90cyxgZGVmYXVsdGApXSwxNildKSxfOjN9KSl9fSkscHc9UCh7X19uYW1lOmBTZWxlY3RQb3BwZXJQb3NpdGlvbmAscHJvcHM6e21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3RhcnRgfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITEsZGVmYXVsdDoxMH0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD11YihlKTtyZXR1cm4oZSxuKT0+KEwoKSx6KE0oWkMpLGtzKE0odCkse3N0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbiI6YHZhcigtLXJla2EtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pYCwiLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS13aWR0aCI6YHZhcigtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS13aWR0aClgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYW5jaG9yLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3ItaGVpZ2h0KWB9fSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxtdz17b25WaWV3cG9ydENoYW5nZTooKT0+e30saXRlbVRleHRSZWZDYWxsYmFjazooKT0+e30saXRlbVJlZkNhbGxiYWNrOigpPT57fX0sW2h3LGd3XT11eShgU2VsZWN0Q29udGVudGApLF93PVAoe19fbmFtZTpgU2VsZWN0Q29udGVudEltcGxgLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaXRlbS1hbGlnbmVkYH0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxtZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHN0YXJ0YH0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH19LGVtaXRzOltgY2xvc2VBdXRvRm9jdXNgLGBlc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1sdygpO29iKCksZWIobi5ib2R5TG9jayk7bGV0e0NvbGxlY3Rpb25TbG90OmEsZ2V0SXRlbXM6b309RHgoKSxzPWooKTt4YihzKTtsZXR7c2VhcmNoOmMsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOmx9PUViKCksdT1qKCksZD1qKCksZj1qKCkscD1qKCExKSxtPWooITEpLGg9aighMSk7ZnVuY3Rpb24gZygpe2QudmFsdWUmJnMudmFsdWUmJnd4KFtkLnZhbHVlLHMudmFsdWVdKX1EcihwLCgpPT57ZygpfSk7bGV0e29uT3BlbkNoYW5nZTpfLHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjp2fT1pO3dyKGU9PntpZighcy52YWx1ZSlyZXR1cm47bGV0IHQ9e3g6MCx5OjB9LG49ZT0+e3Q9e3g6TWF0aC5hYnMoTWF0aC5yb3VuZChlLnBhZ2VYKS0odi52YWx1ZT8ueD8/MCkpLHk6TWF0aC5hYnMoTWF0aC5yb3VuZChlLnBhZ2VZKS0odi52YWx1ZT8ueT8/MCkpfX0scj1lPT57ZS5wb2ludGVyVHlwZSE9PWB0b3VjaGAmJih0Lng8PTEwJiZ0Lnk8PTEwP2UucHJldmVudERlZmF1bHQoKTpzLnZhbHVlPy5jb250YWlucyhlLnRhcmdldCl8fF8oITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJtb3ZlYCxuKSx2LnZhbHVlPW51bGwpfTt2LnZhbHVlIT09bnVsbCYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYHBvaW50ZXJtb3ZlYCxuKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBwb2ludGVydXBgLHIse2NhcHR1cmU6ITAsb25jZTohMH0pKSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcm1vdmVgLG4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJ1cGAscix7Y2FwdHVyZTohMH0pfSl9KTtmdW5jdGlvbiB5KGUpe2xldCB0PWUuY3RybEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleTtpZihlLmtleT09PWBUYWJgJiZlLnByZXZlbnREZWZhdWx0KCksIXQmJmUua2V5Lmxlbmd0aD09PTEmJmwoZS5rZXksbygpKSxbYEFycm93VXBgLGBBcnJvd0Rvd25gLGBIb21lYCxgRW5kYF0uaW5jbHVkZXMoZS5rZXkpKXtsZXQgdD1bLi4ubygpLm1hcChlPT5lLnJlZildO2lmKFtgQXJyb3dVcGAsYEVuZGBdLmluY2x1ZGVzKGUua2V5KSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSksW2BBcnJvd1VwYCxgQXJyb3dEb3duYF0uaW5jbHVkZXMoZS5rZXkpKXtsZXQgbj1lLnRhcmdldCxyPXQuaW5kZXhPZihuKTt0PXQuc2xpY2UocisxKX1zZXRUaW1lb3V0KCgpPT53eCh0KSksZS5wcmV2ZW50RGVmYXVsdCgpfX1sZXQgYj11YihXKCgpPT5uLnBvc2l0aW9uPT09YHBvcHBlcmA/bjp7fSkudmFsdWUpO3JldHVybiBndyh7Y29udGVudDpzLHZpZXdwb3J0OnUsb25WaWV3cG9ydENoYW5nZTplPT57dS52YWx1ZT1lfSxpdGVtUmVmQ2FsbGJhY2s6KGUsdCxuKT0+e2xldCByPSFtLnZhbHVlJiYhbixhPWF3KGkubW9kZWxWYWx1ZS52YWx1ZSx0LGkuYnkpO2lmKGkubXVsdGlwbGUudmFsdWUpe2lmKGgudmFsdWUpcmV0dXJuOyhhfHxyKSYmKGQudmFsdWU9ZSxhJiYoaC52YWx1ZT0hMCkpfWVsc2UoYXx8cikmJihkLnZhbHVlPWUpO3ImJihtLnZhbHVlPSEwKX0sc2VsZWN0ZWRJdGVtOmQsc2VsZWN0ZWRJdGVtVGV4dDpmLG9uSXRlbUxlYXZlOigpPT57cy52YWx1ZT8uZm9jdXMoKX0saXRlbVRleHRSZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IW0udmFsdWUmJiFuOyhhdyhpLm1vZGVsVmFsdWUudmFsdWUsdCxpLmJ5KXx8cikmJihmLnZhbHVlPWUpfSxmb2N1c1NlbGVjdGVkSXRlbTpnLHBvc2l0aW9uOm4ucG9zaXRpb24saXNQb3NpdGlvbmVkOnAsc2VhcmNoUmVmOmN9KSwoZSx0KT0+KEwoKSx6KE0oYSksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKGJ4KSx7ImFzLWNoaWxkIjpgYCxvbk1vdW50QXV0b0ZvY3VzOnRbNl18fD1pdSgoKT0+e30sW2BwcmV2ZW50YF0pLG9uVW5tb3VudEF1dG9Gb2N1czp0WzddfHw9ZT0+e3IoYGNsb3NlQXV0b0ZvY3VzYCxlKSwhZS5kZWZhdWx0UHJldmVudGVkJiYoTShpKS50cmlnZ2VyRWxlbWVudC52YWx1ZT8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxlLnByZXZlbnREZWZhdWx0KCkpfX0se2RlZmF1bHQ6TigoKT0+W1YoTShveCkseyJhcy1jaGlsZCI6YGAsImRpc2FibGUtb3V0c2lkZS1wb2ludGVyLWV2ZW50cyI6ZS5kaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHMsb25Gb2N1c091dHNpZGU6dFsyXXx8PWl1KCgpPT57fSxbYHByZXZlbnRgXSksb25EaXNtaXNzOnRbM118fD1lPT5NKGkpLm9uT3BlbkNoYW5nZSghMSksb25Fc2NhcGVLZXlEb3duOnRbNF18fD1lPT5yKGBlc2NhcGVLZXlEb3duYCxlKSxvblBvaW50ZXJEb3duT3V0c2lkZTp0WzVdfHw9ZT0+cihgcG9pbnRlckRvd25PdXRzaWRlYCxlKX0se2RlZmF1bHQ6TigoKT0+WyhMKCkseihkYShlLnBvc2l0aW9uPT09YHBvcHBlcmA/cHc6YncpLGtzKHsuLi5lLiRhdHRycywuLi5NKGIpfSx7aWQ6TShpKS5jb250ZW50SWQscmVmOmU9PntpZighZSlyZXR1cm47bGV0IHQ9TShOeSkoZSk7dD8uaGFzQXR0cmlidXRlKGBkYXRhLXJla2EtcG9wcGVyLWNvbnRlbnQtd3JhcHBlcmApP3MudmFsdWU9dC5maXJzdEVsZW1lbnRDaGlsZDpzLnZhbHVlPXR9LHJvbGU6YGxpc3Rib3hgLCJkYXRhLXN0YXRlIjpNKGkpLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLGRpcjpNKGkpLmRpci52YWx1ZSxzdHlsZTp7ZGlzcGxheTpgZmxleGAsZmxleERpcmVjdGlvbjpgY29sdW1uYCxvdXRsaW5lOmBub25lYH0sb25Db250ZXh0bWVudTp0WzBdfHw9aXUoKCk9Pnt9LFtgcHJldmVudGBdKSxvblBsYWNlZDp0WzFdfHw9ZT0+cC52YWx1ZT0hMCxvbktleWRvd246eX0pLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgLGBkYXRhLXN0YXRlYCxgZGlyYCxgb25LZXlkb3duYF0pKV0pLF86M30sOCxbYGRpc2FibGUtb3V0c2lkZS1wb2ludGVyLWV2ZW50c2BdKV0pLF86M30pXSksXzozfSkpfX0pLFt2dyx5d109dXkoYFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25gKSxidz1QKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BwbGFjZWRgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7Z2V0SXRlbXM6aX09RHgoKSxhPWx3KCksbz1odygpLHM9aighMSksYz1qKCEwKSxsPWooKSx7Zm9yd2FyZFJlZjp1LGN1cnJlbnRFbGVtZW50OmR9PWxiKCkse3ZpZXdwb3J0OmYsc2VsZWN0ZWRJdGVtOnAsc2VsZWN0ZWRJdGVtVGV4dDptLGZvY3VzU2VsZWN0ZWRJdGVtOmh9PW87ZnVuY3Rpb24gZygpe2lmKGEudHJpZ2dlckVsZW1lbnQudmFsdWUmJmEudmFsdWVFbGVtZW50LnZhbHVlJiZsLnZhbHVlJiZkLnZhbHVlJiZmPy52YWx1ZSYmcD8udmFsdWUmJm0/LnZhbHVlKXtsZXQgZT1hLnRyaWdnZXJFbGVtZW50LnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9ZC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWEudmFsdWVFbGVtZW50LnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89bS52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihhLmRpci52YWx1ZSE9PWBydGxgKXtsZXQgcj1vLmxlZnQtdC5sZWZ0LGk9bi5sZWZ0LXIsYT1lLmxlZnQtaSxzPWUud2lkdGgrYSxjPU1hdGgubWF4KHMsdC53aWR0aCksdT13aW5kb3cuaW5uZXJXaWR0aC0xMCxkPWx5KGksMTAsTWF0aC5tYXgoMTAsdS1jKSk7bC52YWx1ZS5zdHlsZS5taW5XaWR0aD1gJHtzfXB4YCxsLnZhbHVlLnN0eWxlLmxlZnQ9YCR7ZH1weGB9ZWxzZXtsZXQgcj10LnJpZ2h0LW8ucmlnaHQsaT13aW5kb3cuaW5uZXJXaWR0aC1uLnJpZ2h0LXIsYT13aW5kb3cuaW5uZXJXaWR0aC1lLnJpZ2h0LWkscz1lLndpZHRoK2EsYz1NYXRoLm1heChzLHQud2lkdGgpLHU9d2luZG93LmlubmVyV2lkdGgtMTAsZD1seShpLDEwLE1hdGgubWF4KDEwLHUtYykpO2wudmFsdWUuc3R5bGUubWluV2lkdGg9YCR7c31weGAsbC52YWx1ZS5zdHlsZS5yaWdodD1gJHtkfXB4YH1sZXQgYz1pKCkubWFwKGU9PmUucmVmKSx1PXdpbmRvdy5pbm5lckhlaWdodC0yMCxoPWYudmFsdWUuc2Nyb2xsSGVpZ2h0LGc9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZC52YWx1ZSksXz1OdW1iZXIucGFyc2VJbnQoZy5ib3JkZXJUb3BXaWR0aCwxMCksdj1OdW1iZXIucGFyc2VJbnQoZy5wYWRkaW5nVG9wLDEwKSx5PU51bWJlci5wYXJzZUludChnLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxiPU51bWJlci5wYXJzZUludChnLnBhZGRpbmdCb3R0b20sMTApLHg9Xyt2K2grYit5LFM9TWF0aC5taW4ocC52YWx1ZS5vZmZzZXRIZWlnaHQqNSx4KSxDPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYudmFsdWUpLHc9TnVtYmVyLnBhcnNlSW50KEMucGFkZGluZ1RvcCwxMCksZWU9TnVtYmVyLnBhcnNlSW50KEMucGFkZGluZ0JvdHRvbSwxMCksdGU9ZS50b3ArZS5oZWlnaHQvMi0xMCxUPXUtdGUsbmU9cC52YWx1ZS5vZmZzZXRIZWlnaHQvMixyZT1wLnZhbHVlLm9mZnNldFRvcCtuZSxpZT1fK3YrcmUsRT14LWllO2lmKGllPD10ZSl7bGV0IGU9cC52YWx1ZT09PWMuYXQoLTEpO2wudmFsdWUuc3R5bGUuYm90dG9tPWAwcHhgO2xldCB0PWQudmFsdWUuY2xpZW50SGVpZ2h0LWYudmFsdWUub2Zmc2V0VG9wLWYudmFsdWUub2Zmc2V0SGVpZ2h0LG49aWUrTWF0aC5tYXgoVCxuZSsoZT9lZTowKSt0K3kpO2wudmFsdWUuc3R5bGUuaGVpZ2h0PWAke259cHhgfWVsc2V7bGV0IGU9cC52YWx1ZT09PWNbMF07bC52YWx1ZS5zdHlsZS50b3A9YDBweGA7bGV0IHQ9TWF0aC5tYXgodGUsXytmLnZhbHVlLm9mZnNldFRvcCsoZT93OjApK25lKStFO2wudmFsdWUuc3R5bGUuaGVpZ2h0PWAke3R9cHhgLGYudmFsdWUuc2Nyb2xsVG9wPWllLXRlK2YudmFsdWUub2Zmc2V0VG9wfWwudmFsdWUuc3R5bGUubWFyZ2luPWAxMHB4IDBgLGwudmFsdWUuc3R5bGUubWluSGVpZ2h0PWAke1N9cHhgLGwudmFsdWUuc3R5bGUubWF4SGVpZ2h0PWAke3V9cHhgLHIoYHBsYWNlZGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cy52YWx1ZT0hMCl9fWxldCBfPWooYGApO1FpKGFzeW5jKCk9Pnthd2FpdCAkbigpLGcoKSxkLnZhbHVlJiYoXy52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkLnZhbHVlKS56SW5kZXgpfSk7ZnVuY3Rpb24gdihlKXtlJiZjLnZhbHVlPT09ITAmJihnKCksaD8uKCksYy52YWx1ZT0hMSl9cmV0dXJuIEJ5KGEudHJpZ2dlckVsZW1lbnQsKCk9PntnKCl9KSx5dyh7Y29udGVudFdyYXBwZXI6bCxzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpzLG9uU2Nyb2xsQnV0dG9uQ2hhbmdlOnZ9KSwoZSx0KT0+KEwoKSxSKGBkaXZgLHtyZWZfa2V5OmBjb250ZW50V3JhcHBlckVsZW1lbnRgLHJlZjpsLHN0eWxlOmdlKHtkaXNwbGF5OmBmbGV4YCxmbGV4RGlyZWN0aW9uOmBjb2x1bW5gLHBvc2l0aW9uOmBmaXhlZGAsekluZGV4Ol8udmFsdWV9KX0sW1YoTShQYiksa3Moe3JlZjpNKHUpLHN0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLG1heEhlaWdodDpgMTAwJWB9fSx7Li4uZS4kYXR0cnMsLi4ubn0pLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0sNCkpfX0pLHh3PVAoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFByb3ZpZGVyYCxwcm9wczp7Y29udGV4dDp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxzZXR1cChlKXtyZXR1cm4gdXcoZS5jb250ZXh0KSxndyhtdyksKGUsdCk9PkYoZS4kc2xvdHMsYGRlZmF1bHRgKX19KSxTdz17a2V5OjF9LEN3PVAoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj1kYihuLHQpLGk9bHcoKSxhPWooKTtRaSgoKT0+e2EudmFsdWU9bmV3IERvY3VtZW50RnJhZ21lbnR9KTtsZXQgbz1qKCkscz1XKCgpPT5uLmZvcmNlTW91bnR8fGkub3Blbi52YWx1ZSksYz1qKHMudmFsdWUpLGw7ZnVuY3Rpb24gdSgpe2wmJj0oY2xlYXJUaW1lb3V0KGwpLHZvaWQgMCl9cmV0dXJuIERyKHMsKGUsdCxuKT0+e3UoKSxsPXNldFRpbWVvdXQoKCk9PntjLnZhbHVlPXMudmFsdWUsbD12b2lkIDB9KSxuKHUpfSksbmEodSksKGUsdCk9PnMudmFsdWV8fGMudmFsdWV8fG8udmFsdWU/LnByZXNlbnQ/KEwoKSx6KE0oamIpLHtrZXk6MCxyZWZfa2V5OmBwcmVzZW5jZVJlZmAscmVmOm8scHJlc2VudDpzLnZhbHVlfSx7ZGVmYXVsdDpOKCgpPT5bVihfdyx4ZShDcyh7Li4uTShyKSwuLi5lLiRhdHRyc30pKSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNildKSxfOjN9LDgsW2BwcmVzZW50YF0pKTphLnZhbHVlPyhMKCksUihgZGl2YCxTdyxbKEwoKSx6KEhyLHt0bzphLnZhbHVlfSxbVih4dyx7Y29udGV4dDpNKGkpfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgY29udGV4dGBdKV0sOCxbYHRvYF0pKV0pKTpVKGB2LWlmYCwhMCl9fSksd3c9UCh7X19uYW1lOmBTZWxlY3RJY29uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7cmV0dXJuKGUsdCk9PihMKCkseihNKFBiKSx7ImFyaWEtaGlkZGVuIjpgdHJ1ZWAsYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZH0se2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bdFswXXx8PUgoYOKWvGApXSldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYF0pKX19KSxbVHcsRXddPXV5KGBTZWxlY3RJdGVtYCksRHc9UCh7X19uYW1lOmBTZWxlY3RJdGVtYCxwcm9wczp7dmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdGV4dFZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BzZWxlY3RgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7ZGlzYWJsZWQ6aX09Ym4obiksYT1sdygpLG89aHcoKSx7Zm9yd2FyZFJlZjpzLGN1cnJlbnRFbGVtZW50OmN9PWxiKCkse0NvbGxlY3Rpb25JdGVtOmx9PUR4KCksdT1XKCgpPT5hdyhhLm1vZGVsVmFsdWU/LnZhbHVlLG4udmFsdWUsYS5ieSkpLGQ9aighMSksZj1qKG4udGV4dFZhbHVlPz9gYCkscD1DYih2b2lkIDAsYHJla2Etc2VsZWN0LWl0ZW0tdGV4dGApO2FzeW5jIGZ1bmN0aW9uIG0oZSl7ZS5kZWZhdWx0UHJldmVudGVkfHxmeShgc2VsZWN0LnNlbGVjdGAsaCx7b3JpZ2luYWxFdmVudDplLHZhbHVlOm4udmFsdWV9KX1hc3luYyBmdW5jdGlvbiBoKGUpe2F3YWl0ICRuKCkscihgc2VsZWN0YCxlKSwhZS5kZWZhdWx0UHJldmVudGVkJiYoaS52YWx1ZXx8KGEub25WYWx1ZUNoYW5nZShuLnZhbHVlKSxhLm11bHRpcGxlLnZhbHVlfHxhLm9uT3BlbkNoYW5nZSghMSkpKX1hc3luYyBmdW5jdGlvbiBnKGUpe2F3YWl0ICRuKCksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGkudmFsdWU/by5vbkl0ZW1MZWF2ZT8uKCk6ZS5jdXJyZW50VGFyZ2V0Py5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pKX1hc3luYyBmdW5jdGlvbiBfKGUpe2F3YWl0ICRuKCksIWUuZGVmYXVsdFByZXZlbnRlZCYmZS5jdXJyZW50VGFyZ2V0PT09ZHkoKSYmby5vbkl0ZW1MZWF2ZT8uKCl9YXN5bmMgZnVuY3Rpb24gdihlKXthd2FpdCAkbigpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihvLnNlYXJjaFJlZj8udmFsdWU9PT1gYHx8ZS5rZXkhPT1gIGApJiYoaXcuaW5jbHVkZXMoZS5rZXkpJiZtKGUpLGUua2V5PT09YCBgJiZlLnByZXZlbnREZWZhdWx0KCkpfWlmKG4udmFsdWU9PT1gYCl0aHJvdyBFcnJvcihgQSA8U2VsZWN0SXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuYCk7cmV0dXJuIFFpKCgpPT57Yy52YWx1ZSYmby5pdGVtUmVmQ2FsbGJhY2soYy52YWx1ZSxuLnZhbHVlLG4uZGlzYWJsZWQpfSksRXcoe3ZhbHVlOm4udmFsdWUsZGlzYWJsZWQ6aSx0ZXh0SWQ6cCxpc1NlbGVjdGVkOnUsb25JdGVtVGV4dENoYW5nZTplPT57Zi52YWx1ZT0oKGYudmFsdWV8fGU/LnRleHRDb250ZW50KT8/YGApLnRyaW0oKX19KSwoZSx0KT0+KEwoKSx6KE0obCkse3ZhbHVlOnt0ZXh0VmFsdWU6Zi52YWx1ZX19LHtkZWZhdWx0Ok4oKCk9PltWKE0oUGIpLHtyZWY6TShzKSxyb2xlOmBvcHRpb25gLCJhcmlhLWxhYmVsbGVkYnkiOk0ocCksImRhdGEtaGlnaGxpZ2h0ZWQiOmQudmFsdWU/YGA6dm9pZCAwLCJhcmlhLXNlbGVjdGVkIjp1LnZhbHVlLCJkYXRhLXN0YXRlIjp1LnZhbHVlP2BjaGVja2VkYDpgdW5jaGVja2VkYCwiYXJpYS1kaXNhYmxlZCI6TShpKXx8dm9pZCAwLCJkYXRhLWRpc2FibGVkIjpNKGkpP2BgOnZvaWQgMCx0YWJpbmRleDpNKGkpP3ZvaWQgMDotMSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLG9uRm9jdXM6dFswXXx8PWU9PmQudmFsdWU9ITAsb25CbHVyOnRbMV18fD1lPT5kLnZhbHVlPSExLG9uUG9pbnRlcnVwOm0sb25Qb2ludGVyZG93bjp0WzJdfHw9ZT0+e2UuY3VycmVudFRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSxvblRvdWNoZW5kOnRbM118fD1pdSgoKT0+e30sW2BwcmV2ZW50YCxgc3RvcGBdKSxvblBvaW50ZXJtb3ZlOmcsb25Qb2ludGVybGVhdmU6XyxvbktleWRvd246dn0se2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFyaWEtbGFiZWxsZWRieWAsYGRhdGEtaGlnaGxpZ2h0ZWRgLGBhcmlhLXNlbGVjdGVkYCxgZGF0YS1zdGF0ZWAsYGFyaWEtZGlzYWJsZWRgLGBkYXRhLWRpc2FibGVkYCxgdGFiaW5kZXhgLGBhc2AsYGFzLWNoaWxkYF0pXSksXzozfSw4LFtgdmFsdWVgXSkpfX0pLE93PVAoe19fbmFtZTpgU2VsZWN0SXRlbUluZGljYXRvcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe2xldCB0PWUsbj1UdygpO3JldHVybihlLHIpPT5NKG4pLmlzU2VsZWN0ZWQudmFsdWU/KEwoKSx6KE0oUGIpLGtzKHtrZXk6MCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sdCkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKTpVKGB2LWlmYCwhMCl9fSksa3c9UCh7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0SXRlbVRleHRgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49bHcoKSxyPWh3KCksaT1UdygpLHtmb3J3YXJkUmVmOmEsY3VycmVudEVsZW1lbnQ6b309bGIoKSxzPVcoKCk9Pih7dmFsdWU6aS52YWx1ZSxkaXNhYmxlZDppLmRpc2FibGVkLnZhbHVlLHRleHRDb250ZW50Om8udmFsdWU/LnRleHRDb250ZW50Pz9pLnZhbHVlPy50b1N0cmluZygpPz9gYH0pKTtyZXR1cm4gUWkoKCk9PntvLnZhbHVlJiYoaS5vbkl0ZW1UZXh0Q2hhbmdlKG8udmFsdWUpLHIuaXRlbVRleHRSZWZDYWxsYmFjayhvLnZhbHVlLGkudmFsdWUsaS5kaXNhYmxlZC52YWx1ZSksbi5vbk9wdGlvbkFkZChzLnZhbHVlKSl9KSxuYSgoKT0+e24ub25PcHRpb25SZW1vdmUocy52YWx1ZSl9KSwoZSxuKT0+KEwoKSx6KE0oUGIpLGtzKHtpZDpNKGkpLnRleHRJZCxyZWY6TShhKX0sey4uLnQsLi4uZS4kYXR0cnN9KSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGlkYF0pKX19KSxBdz1QKHtfX25hbWU6YFNlbGVjdFBvcnRhbGAscHJvcHM6e3RvOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmVyOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihMKCkseihNKFR4KSx4ZShDcyh0KSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxqdz1QKHtfX25hbWU6YFNlbGVjdFNjcm9sbEJ1dHRvbkltcGxgLGVtaXRzOltgYXV0b1Njcm9sbGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPXQse2dldEl0ZW1zOnJ9PUR4KCksaT1odygpLGE9aihudWxsKTtmdW5jdGlvbiBvKCl7YS52YWx1ZSE9PW51bGwmJih3aW5kb3cuY2xlYXJJbnRlcnZhbChhLnZhbHVlKSxhLnZhbHVlPW51bGwpfXdyKCgpPT57cigpLm1hcChlPT5lLnJlZikuZmluZChlPT5lPT09ZHkoKSk/LnNjcm9sbEludG9WaWV3KHtibG9jazpgbmVhcmVzdGB9KX0pO2Z1bmN0aW9uIHMoKXthLnZhbHVlPT09bnVsbCYmKGEudmFsdWU9d2luZG93LnNldEludGVydmFsKCgpPT57bihgYXV0b1Njcm9sbGApfSw1MCkpfWZ1bmN0aW9uIGMoKXtpLm9uSXRlbUxlYXZlPy4oKSxhLnZhbHVlPT09bnVsbCYmKGEudmFsdWU9d2luZG93LnNldEludGVydmFsKCgpPT57bihgYXV0b1Njcm9sbGApfSw1MCkpfXJldHVybiB0YSgoKT0+bygpKSwoZSx0KT0+KEwoKSx6KE0oUGIpLGtzKHsiYXJpYS1oaWRkZW4iOmB0cnVlYCxzdHlsZTp7ZmxleFNocmluazowfX0sZS4kcGFyZW50Py4kcHJvcHMse29uUG9pbnRlcmRvd246cyxvblBvaW50ZXJtb3ZlOmMsb25Qb2ludGVybGVhdmU6dFswXXx8PSgpPT57bygpfX0pLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KSl9fSksTXc9UCh7X19uYW1lOmBTZWxlY3RTY3JvbGxEb3duQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9aHcoKSxuPXQucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD92dygpOnZvaWQgMCx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PWxiKCksYT1qKCExKTtyZXR1cm4gd3IoZT0+e2lmKHQudmlld3BvcnQ/LnZhbHVlJiZ0LmlzUG9zaXRpb25lZD8udmFsdWUpe2xldCBuPXQudmlld3BvcnQudmFsdWU7ZnVuY3Rpb24gcigpe2xldCBlPW4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0O2EudmFsdWU9TWF0aC5jZWlsKG4uc2Nyb2xsVG9wKTxlfXIoKSxuLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsciksZSgoKT0+bi5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpKX19KSxEcihpLCgpPT57aS52YWx1ZSYmbj8ub25TY3JvbGxCdXR0b25DaGFuZ2UoaS52YWx1ZSl9KSwoZSxuKT0+YS52YWx1ZT8oTCgpLHooancse2tleTowLHJlZjpNKHIpLG9uQXV0b1Njcm9sbDpuWzBdfHw9KCk9PntsZXR7dmlld3BvcnQ6ZSxzZWxlY3RlZEl0ZW06bn09TSh0KTtlPy52YWx1ZSYmbj8udmFsdWUmJihlLnZhbHVlLnNjcm9sbFRvcD1lLnZhbHVlLnNjcm9sbFRvcCtuLnZhbHVlLm9mZnNldEhlaWdodCl9fSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw1MTIpKTpVKGB2LWlmYCwhMCl9fSksTnc9UCh7X19uYW1lOmBTZWxlY3RTY3JvbGxVcEJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWh3KCksbj10LnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGA/dncoKTp2b2lkIDAse2ZvcndhcmRSZWY6cixjdXJyZW50RWxlbWVudDppfT1sYigpLGE9aighMSk7cmV0dXJuIHdyKGU9PntpZih0LnZpZXdwb3J0Py52YWx1ZSYmdC5pc1Bvc2l0aW9uZWQ/LnZhbHVlKXtsZXQgbj10LnZpZXdwb3J0LnZhbHVlO2Z1bmN0aW9uIHIoKXthLnZhbHVlPW4uc2Nyb2xsVG9wPjB9cigpLG4uYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSxlKCgpPT5uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAscikpfX0pLERyKGksKCk9PntpLnZhbHVlJiZuPy5vblNjcm9sbEJ1dHRvbkNoYW5nZShpLnZhbHVlKX0pLChlLG4pPT5hLnZhbHVlPyhMKCkseihqdyx7a2V5OjAscmVmOk0ociksb25BdXRvU2Nyb2xsOm5bMF18fD0oKT0+e2xldHt2aWV3cG9ydDplLHNlbGVjdGVkSXRlbTpufT1NKHQpO2U/LnZhbHVlJiZuPy52YWx1ZSYmKGUudmFsdWUuc2Nyb2xsVG9wPWUudmFsdWUuc2Nyb2xsVG9wLW4udmFsdWUub2Zmc2V0SGVpZ2h0KX19LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDUxMikpOlUoYHYtaWZgLCEwKX19KSxQdz1QKHtfX25hbWU6YFNlbGVjdFRyaWdnZXJgLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGJ1dHRvbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49bHcoKSx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PWxiKCksYT1XKCgpPT5uLmRpc2FibGVkPy52YWx1ZXx8dC5kaXNhYmxlZCk7bi5jb250ZW50SWR8fD1DYih2b2lkIDAsYHJla2Etc2VsZWN0LWNvbnRlbnRgKSxRaSgoKT0+e24ub25UcmlnZ2VyQ2hhbmdlKGkudmFsdWUpfSk7bGV0e2dldEl0ZW1zOm99PUR4KCkse3NlYXJjaDpzLGhhbmRsZVR5cGVhaGVhZFNlYXJjaDpjLHJlc2V0VHlwZWFoZWFkOmx9PUViKCk7ZnVuY3Rpb24gdSgpe2EudmFsdWV8fChuLm9uT3BlbkNoYW5nZSghMCksbCgpKX1mdW5jdGlvbiBkKGUpe3UoKSxuLnRyaWdnZXJQb2ludGVyRG93blBvc1JlZi52YWx1ZT17eDpNYXRoLnJvdW5kKGUucGFnZVgpLHk6TWF0aC5yb3VuZChlLnBhZ2VZKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS5idXR0b249PT0wJiZlLmN0cmxLZXk9PT0hMX1sZXQgcD0hMTtmdW5jdGlvbiBtKGUpe2lmKGUucG9pbnRlclR5cGU9PT1gdG91Y2hgKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7bGV0IHQ9ZS50YXJnZXQ7dC5oYXNQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCkmJnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSxmKGUpJiYoZChlKSxwPSEwKX1mdW5jdGlvbiBoKGUpe2YoZSkmJmUucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBnKGUpe3B8fGUuY3VycmVudFRhcmdldD8uZm9jdXMoKSxwPSExfXJldHVybihlLHQpPT4oTCgpLHooTSh6eCkseyJhcy1jaGlsZCI6YGAscmVmZXJlbmNlOmUucmVmZXJlbmNlfSx7ZGVmYXVsdDpOKCgpPT5bVihNKFBiKSx7cmVmOk0ocikscm9sZTpgY29tYm9ib3hgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCwiYXJpYS1jb250cm9scyI6TShuKS5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOk0obikub3Blbi52YWx1ZXx8ITEsImFyaWEtcmVxdWlyZWQiOk0obikucmVxdWlyZWQ/LnZhbHVlLCJhcmlhLWF1dG9jb21wbGV0ZSI6YG5vbmVgLGRpc2FibGVkOmEudmFsdWUsZGlyOk0obik/LmRpci52YWx1ZSwiZGF0YS1zdGF0ZSI6TShuKT8ub3Blbi52YWx1ZT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOmEudmFsdWU/YGA6dm9pZCAwLCJkYXRhLXBsYWNlaG9sZGVyIjpNKHN3KShNKG4pLm1vZGVsVmFsdWU/LnZhbHVlKT9gYDp2b2lkIDAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcyxvbkNsaWNrOmcsb25Qb2ludGVyZG93bjptLG9uTW91c2Vkb3duOmgsb25Qb2ludGVydXA6dFswXXx8PWl1KGU9PntlLnBvaW50ZXJUeXBlPT09YHRvdWNoYCYmZChlKX0sW2BwcmV2ZW50YF0pLG9uS2V5ZG93bjp0WzFdfHw9ZT0+e2xldCB0PU0ocykhPT1gYDshKGUuY3RybEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleSkmJmUua2V5Lmxlbmd0aD09PTEmJnQmJmUua2V5PT09YCBgfHwoTShjKShlLmtleSxNKG8pKCkpLE0ocncpLmluY2x1ZGVzKGUua2V5KSYmKHUoKSxlLnByZXZlbnREZWZhdWx0KCkpKX19LHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0eXBlYCxgYXJpYS1jb250cm9sc2AsYGFyaWEtZXhwYW5kZWRgLGBhcmlhLXJlcXVpcmVkYCxgZGlzYWJsZWRgLGBkaXJgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtcGxhY2Vob2xkZXJgLGBhcy1jaGlsZGAsYGFzYF0pXSksXzozfSw4LFtgcmVmZXJlbmNlYF0pKX19KSxGdz1QKHtfX25hbWU6YFNlbGVjdFZhbHVlYCxwcm9wczp7cGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bixjdXJyZW50RWxlbWVudDpyfT1sYigpLGk9bHcoKTtRaSgoKT0+e2kudmFsdWVFbGVtZW50PXJ9KTtsZXQgYT1XKCgpPT57bGV0IGU9W10sdD1BcnJheS5mcm9tKGkub3B0aW9uc1NldC52YWx1ZSksbj1lPT50LmZpbmQodD0+YXcoZSx0LnZhbHVlLGkuYnkpKTtyZXR1cm4gZT1BcnJheS5pc0FycmF5KGkubW9kZWxWYWx1ZS52YWx1ZSk/aS5tb2RlbFZhbHVlLnZhbHVlLm1hcChlPT5uKGUpPy50ZXh0Q29udGVudD8/YGApOltuKGkubW9kZWxWYWx1ZS52YWx1ZSk/LnRleHRDb250ZW50Pz9gYF0sZS5maWx0ZXIoQm9vbGVhbil9KSxvPVcoKCk9PmEudmFsdWUubGVuZ3RoP2EudmFsdWUuam9pbihgLCBgKTp0LnBsYWNlaG9sZGVyKTtyZXR1cm4oZSxyKT0+KEwoKSx6KE0oUGIpLHtyZWY6TShuKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLHN0eWxlOntwb2ludGVyRXZlbnRzOmBub25lYH0sImRhdGEtcGxhY2Vob2xkZXIiOmEudmFsdWUubGVuZ3RoP3ZvaWQgMDp0LnBsYWNlaG9sZGVyfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGAse3NlbGVjdGVkTGFiZWw6YS52YWx1ZSxtb2RlbFZhbHVlOk0oaSkubW9kZWxWYWx1ZS52YWx1ZX0sKCk9PltIKGsoby52YWx1ZSksMSldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLXBsYWNlaG9sZGVyYF0pKX19KSxJdz1QKHtfX25hbWU6YFNlbGVjdFZpZXdwb3J0YCxwcm9wczp7bm9uY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLHtub25jZTpufT1ibih0KSxyPVFDKG4pLGk9aHcoKSxhPWkucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD92dygpOnZvaWQgMCx7Zm9yd2FyZFJlZjpvLGN1cnJlbnRFbGVtZW50OnN9PWxiKCk7UWkoKCk9PntpPy5vblZpZXdwb3J0Q2hhbmdlKHMudmFsdWUpfSk7bGV0IGM9aigwKTtmdW5jdGlvbiBsKGUpe2xldCB0PWUuY3VycmVudFRhcmdldCx7c2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6bixjb250ZW50V3JhcHBlcjpyfT1hPz97fTtpZihuPy52YWx1ZSYmcj8udmFsdWUpe2xldCBlPU1hdGguYWJzKGMudmFsdWUtdC5zY3JvbGxUb3ApO2lmKGU+MCl7bGV0IG49d2luZG93LmlubmVySGVpZ2h0LTIwLGk9TnVtYmVyLnBhcnNlRmxvYXQoci52YWx1ZS5zdHlsZS5taW5IZWlnaHQpLGE9TnVtYmVyLnBhcnNlRmxvYXQoci52YWx1ZS5zdHlsZS5oZWlnaHQpLG89TWF0aC5tYXgoaSxhKTtpZihvPG4pe2xldCBpPW8rZSxhPU1hdGgubWluKG4saSkscz1pLWE7ci52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7YX1weGAsci52YWx1ZS5zdHlsZS5ib3R0b209PT1gMHB4YCYmKHQuc2Nyb2xsVG9wPXM+MD9zOjAsci52YWx1ZS5zdHlsZS5qdXN0aWZ5Q29udGVudD1gZmxleC1lbmRgKX19fWMudmFsdWU9dC5zY3JvbGxUb3B9cmV0dXJuKGUsbik9PihMKCksUihJLG51bGwsW1YoTShQYiksa3Moe3JlZjpNKG8pLCJkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0IjpgYCxyb2xlOmBwcmVzZW50YXRpb25gfSx7Li4uZS4kYXR0cnMsLi4udH0se3N0eWxlOntwb3NpdGlvbjpgcmVsYXRpdmVgLGZsZXg6MSxvdmVyZmxvdzpgaGlkZGVuIGF1dG9gfSxvblNjcm9sbDpsfSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpLFYoTShQYikse2FzOmBzdHlsZWAsbm9uY2U6TShyKX0se2RlZmF1bHQ6TigoKT0+blswXXx8PVtIKGAgLyogSGlkZSBzY3JvbGxiYXJzIGNyb3NzLWJyb3dzZXIgYW5kIGVuYWJsZSBtb21lbnR1bSBzY3JvbGwgZm9yIHRvdWNoIGRldmljZXMgKi8gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdIHsgc2Nyb2xsYmFyLXdpZHRoOm5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9IFtkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9IGApXSksXzoxLF9fOlswXX0sOCxbYG5vbmNlYF0pXSw2NCkpfX0pLFtMdyxSd109dXkoYFRhYnNSb290YCksenc9UCh7X19uYW1lOmBUYWJzUm9vdGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaG9yaXpvbnRhbGB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFjdGl2YXRpb25Nb2RlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBhdXRvbWF0aWNgfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse29yaWVudGF0aW9uOmksdW5tb3VudE9uSGlkZTphLGRpcjpvfT1ibihuKSxzPXJiKG8pO2xiKCk7bGV0IGM9VnkobixgbW9kZWxWYWx1ZWAscix7ZGVmYXVsdFZhbHVlOm4uZGVmYXVsdFZhbHVlLHBhc3NpdmU6bi5tb2RlbFZhbHVlPT09dm9pZCAwfSksbD1qKCksdT1kbihuZXcgU2V0KTtyZXR1cm4gUncoe21vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmU9PntjLnZhbHVlPWV9LG9yaWVudGF0aW9uOmksZGlyOnMsdW5tb3VudE9uSGlkZTphLGFjdGl2YXRpb25Nb2RlOm4uYWN0aXZhdGlvbk1vZGUsYmFzZUlkOkNiKHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6bCxjb250ZW50SWRzOnUscmVnaXN0ZXJDb250ZW50OmU9Pnt1LnZhbHVlPW5ldyBTZXQoWy4uLnUudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldCh1LnZhbHVlKTt0LmRlbGV0ZShlKSx1LnZhbHVlPXR9fSksKGUsdCk9PihMKCkseihNKFBiKSx7ZGlyOk0ocyksImRhdGEtb3JpZW50YXRpb24iOk0oaSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk0oYyl9KV0pLF86M30sOCxbYGRpcmAsYGRhdGEtb3JpZW50YXRpb25gLGBhcy1jaGlsZGAsYGFzYF0pKX19KTtmdW5jdGlvbiBCdyhlLHQpe3JldHVybmAke2V9LXRyaWdnZXItJHt0fWB9ZnVuY3Rpb24gVncoZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBIdz1QKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bn09bGIoKSxyPUx3KCksaT1XKCgpPT5CdyhyLmJhc2VJZCx0LnZhbHVlKSksYT1XKCgpPT5WdyhyLmJhc2VJZCx0LnZhbHVlKSksbz1XKCgpPT50LnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlKSxzPWooby52YWx1ZSk7cmV0dXJuIFFpKCgpPT57ci5yZWdpc3RlckNvbnRlbnQodC52YWx1ZSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cy52YWx1ZT0hMX0pfSksdGEoKCk9PntyLnVucmVnaXN0ZXJDb250ZW50KHQudmFsdWUpfSksKGUsdCk9PihMKCkseihNKGpiKSx7cHJlc2VudDplLmZvcmNlTW91bnR8fG8udmFsdWUsImZvcmNlLW1vdW50IjpgYH0se2RlZmF1bHQ6Tigoe3ByZXNlbnQ6dH0pPT5bVihNKFBiKSx7aWQ6YS52YWx1ZSxyZWY6TShuKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLHJvbGU6YHRhYnBhbmVsYCwiZGF0YS1zdGF0ZSI6by52YWx1ZT9gYWN0aXZlYDpgaW5hY3RpdmVgLCJkYXRhLW9yaWVudGF0aW9uIjpNKHIpLm9yaWVudGF0aW9uLnZhbHVlLCJhcmlhLWxhYmVsbGVkYnkiOmkudmFsdWUsaGlkZGVuOiF0LHRhYmluZGV4OmAwYCxzdHlsZTpnZSh7YW5pbWF0aW9uRHVyYXRpb246cy52YWx1ZT9gMHNgOnZvaWQgMH0pfSx7ZGVmYXVsdDpOKCgpPT5bIU0ocikudW5tb3VudE9uSGlkZS52YWx1ZXx8dD9GKGUuJHNsb3RzLGBkZWZhdWx0YCx7a2V5OjB9KTpVKGB2LWlmYCwhMCldKSxfOjJ9LDEwMzIsW2BpZGAsYGFzLWNoaWxkYCxgYXNgLGBkYXRhLXN0YXRlYCxgZGF0YS1vcmllbnRhdGlvbmAsYGFyaWEtbGFiZWxsZWRieWAsYGhpZGRlbmAsYHN0eWxlYF0pXSksXzozfSw4LFtgcHJlc2VudGBdKSl9fSksVXc9UCh7X19uYW1lOmBUYWJzTGlzdGAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXR7bG9vcDp0fT1ibihlKSx7Zm9yd2FyZFJlZjpuLGN1cnJlbnRFbGVtZW50OnJ9PWxiKCksaT1MdygpO3JldHVybiBpLnRhYnNMaXN0PXIsKGUscik9PihMKCkseihNKHR3KSx7ImFzLWNoaWxkIjpgYCxvcmllbnRhdGlvbjpNKGkpLm9yaWVudGF0aW9uLnZhbHVlLGRpcjpNKGkpLmRpci52YWx1ZSxsb29wOk0odCl9LHtkZWZhdWx0Ok4oKCk9PltWKE0oUGIpLHtyZWY6TShuKSxyb2xlOmB0YWJsaXN0YCwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLCJhcmlhLW9yaWVudGF0aW9uIjpNKGkpLm9yaWVudGF0aW9uLnZhbHVlfSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYGFyaWEtb3JpZW50YXRpb25gXSldKSxfOjN9LDgsW2BvcmllbnRhdGlvbmAsYGRpcmAsYGxvb3BgXSkpfX0pLFd3PVAoe19fbmFtZTpgVGFic1RyaWdnZXJgLHByb3BzOnt2YWx1ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0scmVxdWlyZWQ6ITB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGJ1dHRvbmB9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm59PWxiKCkscj1MdygpLGk9VygoKT0+Qncoci5iYXNlSWQsdC52YWx1ZSkpLGE9VygoKT0+ci5jb250ZW50SWRzLnZhbHVlLmhhcyh0LnZhbHVlKT9WdyhyLmJhc2VJZCx0LnZhbHVlKTp2b2lkIDApLG89VygoKT0+dC52YWx1ZT09PXIubW9kZWxWYWx1ZS52YWx1ZSk7cmV0dXJuKGUsdCk9PihMKCkseihNKG53KSx7ImFzLWNoaWxkIjpgYCxmb2N1c2FibGU6IWUuZGlzYWJsZWQsYWN0aXZlOm8udmFsdWV9LHtkZWZhdWx0Ok4oKCk9PltWKE0oUGIpLHtpZDppLnZhbHVlLHJlZjpNKG4pLHJvbGU6YHRhYmAsdHlwZTplLmFzPT09YGJ1dHRvbmA/YGJ1dHRvbmA6dm9pZCAwLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsImFyaWEtc2VsZWN0ZWQiOm8udmFsdWU/YHRydWVgOmBmYWxzZWAsImFyaWEtY29udHJvbHMiOmEudmFsdWUsImRhdGEtc3RhdGUiOm8udmFsdWU/YGFjdGl2ZWA6YGluYWN0aXZlYCxkaXNhYmxlZDplLmRpc2FibGVkLCJkYXRhLWRpc2FibGVkIjplLmRpc2FibGVkP2BgOnZvaWQgMCwiZGF0YS1vcmllbnRhdGlvbiI6TShyKS5vcmllbnRhdGlvbi52YWx1ZSxvbk1vdXNlZG93bjp0WzBdfHw9aXUodD0+eyFlLmRpc2FibGVkJiZ0LmN0cmxLZXk9PT0hMT9NKHIpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSk6dC5wcmV2ZW50RGVmYXVsdCgpfSxbYGxlZnRgXSksb25LZXlkb3duOnRbMV18fD1vdSh0PT5NKHIpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSksW2BlbnRlcmAsYHNwYWNlYF0pLG9uRm9jdXM6dFsyXXx8PSgpPT57bGV0IHQ9TShyKS5hY3RpdmF0aW9uTW9kZSE9PWBtYW51YWxgOyFvLnZhbHVlJiYhZS5kaXNhYmxlZCYmdCYmTShyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpfX0se2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGlkYCxgdHlwZWAsYGFzYCxgYXMtY2hpbGRgLGBhcmlhLXNlbGVjdGVkYCxgYXJpYS1jb250cm9sc2AsYGRhdGEtc3RhdGVgLGBkaXNhYmxlZGAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLW9yaWVudGF0aW9uYF0pXSksXzozfSw4LFtgZm9jdXNhYmxlYCxgYWN0aXZlYF0pKX19KSxHdz1QKHtfX25hbWU6YEJ1dHRvbmAscHJvcHM6e3ZhcmlhbnQ6e30sc2l6ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOntkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KEwoKSx6KE0oUGIpLHsiZGF0YS1zbG90IjpgYnV0dG9uYCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnQsImRhdGEtc2l6ZSI6ZS5zaXplLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsY2xhc3M6TyhNKFF2KShNKEt3KSh7dmFyaWFudDplLnZhcmlhbnQsc2l6ZTplLnNpemV9KSx0LmNsYXNzKSl9LHtkZWZhdWx0Ok4oKCk9PltGKG4uJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BkYXRhLXZhcmlhbnRgLGBkYXRhLXNpemVgLGBhc2AsYGFzLWNoaWxkYCxgY2xhc3NgXSkpfX0pLEt3PUVfKGBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IGJnLWNsaXAtcGFkZGluZyB0ZXh0LXNtIGZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgYWN0aXZlOm5vdC1hcmlhLVtoYXNwb3B1cF06dHJhbnNsYXRlLXktcHggWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9idXR0b24gaW5saW5lLWZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tYWxsIG91dGxpbmUtbm9uZSBzZWxlY3Qtbm9uZSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MGAsb3V0bGluZTpgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsc2Vjb25kYXJ5OmBiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAgYXJpYS1leHBhbmRlZDpiZy1zZWNvbmRhcnkgYXJpYS1leHBhbmRlZDp0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kYCxnaG9zdDpgaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctbXV0ZWQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIGhvdmVyOmJnLWRlc3RydWN0aXZlLzIwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzIwIHRleHQtZGVzdHJ1Y3RpdmUgZm9jdXMtdmlzaWJsZTpib3JkZXItZGVzdHJ1Y3RpdmUvNDAgZGFyazpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8zMGAsbGluazpgdGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVgfSxzaXplOntkZWZhdWx0OmBoLTggZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLHhzOmBoLTYgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIHB4LTIgdGV4dC14cyBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZyBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2Asc206YGgtNyBnYXAtMSByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMnB4KV0gcHgtMi41IHRleHQtWzAuOHJlbV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTMuNWAsbGc6YGgtOSBnYXAtMS41IHB4LTIuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0yIGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMmAsaWNvbjpgc2l6ZS04YCwiaWNvbi14cyI6YHNpemUtNiByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMHB4KV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2AsImljb24tc20iOmBzaXplLTcgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnYCwiaWNvbi1sZyI6YHNpemUtOWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgLHNpemU6YGRlZmF1bHRgfX0pLHF3PVtgZGF0YS1zaXplYF0sSnc9UCh7X19uYW1lOmBDYXJkYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oTCgpLFIoYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkYCwiZGF0YS1zaXplIjplLnNpemUsY2xhc3M6TyhNKFF2KShgcmluZy1mb3JlZ3JvdW5kLzEwIGJnLWNhcmQgdGV4dC1jYXJkLWZvcmVncm91bmQgZ2FwLTQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgcHktNCB0ZXh0LXNtIHJpbmctMSBoYXMtZGF0YS1bc2xvdD1jYXJkLWZvb3Rlcl06cGItMCBoYXMtWz5pbWc6Zmlyc3QtY2hpbGRdOnB0LTAgZGF0YS1bc2l6ZT1zbV06Z2FwLTMgZGF0YS1bc2l6ZT1zbV06cHktMyBkYXRhLVtzaXplPXNtXTpoYXMtZGF0YS1bc2xvdD1jYXJkLWZvb3Rlcl06cGItMCAqOltpbWc6Zmlyc3QtY2hpbGRdOnJvdW5kZWQtdC14bCAqOltpbWc6bGFzdC1jaGlsZF06cm91bmRlZC1iLXhsIGdyb3VwL2NhcmQgZmxleCBmbGV4LWNvbGAsdC5jbGFzcykpfSxbRihuLiRzbG90cyxgZGVmYXVsdGApXSwxMCxxdykpfX0pLFl3PVAoe19fbmFtZTpgQ2FyZENvbnRlbnRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KEwoKSxSKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1jb250ZW50YCxjbGFzczpPKE0oUXYpKGBweC00IGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6cHgtM2AsdC5jbGFzcykpfSxbRihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWHc9UCh7X19uYW1lOmBDYXJkRGVzY3JpcHRpb25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KEwoKSxSKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1kZXNjcmlwdGlvbmAsY2xhc3M6TyhNKFF2KShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc21gLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFp3PVAoe19fbmFtZTpgQ2FyZEhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLFIoYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLWhlYWRlcmAsY2xhc3M6TyhNKFF2KShgZ2FwLTEgcm91bmRlZC10LXhsIHB4LTQgZ3JvdXAtZGF0YS1bc2l6ZT1zbV0vY2FyZDpweC0zIFsuYm9yZGVyLWJdOnBiLTQgZ3JvdXAtZGF0YS1bc2l6ZT1zbV0vY2FyZDpbLmJvcmRlci1iXTpwYi0zIGdyb3VwL2NhcmQtaGVhZGVyIEBjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGl0ZW1zLXN0YXJ0IGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXSBoYXMtZGF0YS1bc2xvdD1jYXJkLWRlc2NyaXB0aW9uXTpncmlkLXJvd3MtW2F1dG9fYXV0b11gLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFF3PVAoe19fbmFtZTpgQ2FyZFRpdGxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihMKCksUihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtdGl0bGVgLGNsYXNzOk8oTShRdikoYHRleHQtYmFzZSBsZWFkaW5nLXNudWcgZm9udC1tZWRpdW0gZ3JvdXAtZGF0YS1bc2l6ZT1zbV0vY2FyZDp0ZXh0LXNtIGZvbnQtaGVhZGluZ2AsdC5jbGFzcykpfSxbRihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksJHc9UCh7X19uYW1lOmBJbnB1dGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxtb2RlbFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPVZ5KG4sYG1vZGVsVmFsdWVgLHQse3Bhc3NpdmU6ITAsZGVmYXVsdFZhbHVlOm4uZGVmYXVsdFZhbHVlfSk7cmV0dXJuKGUsdCk9Pl9yKChMKCksUihgaW5wdXRgLHsib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9PnVuKHIpP3IudmFsdWU9ZTpudWxsLCJkYXRhLXNsb3QiOmBpbnB1dGAsY2xhc3M6TyhNKFF2KShgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGRpc2FibGVkOmJnLWlucHV0LzUwIGRhcms6ZGlzYWJsZWQ6YmctaW5wdXQvODAgaC04IHJvdW5kZWQtbGcgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBweS0xIHRleHQtYmFzZSB0cmFuc2l0aW9uLWNvbG9ycyBmaWxlOmgtNiBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIG1kOnRleHQtc20gdy1mdWxsIG1pbi13LTAgb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwYCxuLmNsYXNzKSl9LG51bGwsMikpLFtbV2wsTShyKV1dKX19KSxlVD1gbGxtZ3dBZG1pbktleWA7ZnVuY3Rpb24gdFQoKXt0cnl7cmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZVQpPz9gYH1jYXRjaHtyZXR1cm5gYH19ZnVuY3Rpb24gblQoZSl7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZVQsZSl9Y2F0Y2h7fX1mdW5jdGlvbiByVCgpe3RyeXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGVUKX1jYXRjaHt9fXZhciBpVD10XyhgYXV0aGAse3N0YXRlOigpPT4oe2FwaUtleTp0VCgpLGVycm9yOmBgfSksZ2V0dGVyczp7aXNBdXRoZW50aWNhdGVkOmU9PmUuYXBpS2V5IT09YGB9LGFjdGlvbnM6e3N1Ym1pdChlKXtlJiYodGhpcy5hcGlLZXk9ZSx0aGlzLmVycm9yPWBgLG5UKGUpKX0scmVqZWN0KGUpe3RoaXMuYXBpS2V5PWBgLHRoaXMuZXJyb3I9ZSxyVCgpfX19KSxhVD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXR1cztjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLHRoaXMubmFtZT1gQWRtaW5BcGlFcnJvcmAsdGhpcy5zdGF0dXM9dH19O2FzeW5jIGZ1bmN0aW9uIG9UKGUsdCl7bGV0IG49YCR7dH06IEhUVFAgJHtlLnN0YXR1c31gO3RyeXtyZXR1cm4oYXdhaXQgZS5qc29uKCkpLmVycm9yPy5tZXNzYWdlfHxufWNhdGNoe3JldHVybiBufX1hc3luYyBmdW5jdGlvbiBzVChlKXtsZXQgdD1pVCgpLG49dC5hcGlLZXkscj1hd2FpdCBmZXRjaChlLHtjcmVkZW50aWFsczpgc2FtZS1vcmlnaW5gLGhlYWRlcnM6bj97IngtYXBpLWtleSI6bn06e319KTtpZighci5vayl7bGV0IGk9YXdhaXQgb1QocixlKTt0aHJvdyhyLnN0YXR1cz09PTQwMXx8ci5zdGF0dXM9PT00MDMpJiZ0LmFwaUtleT09PW4mJnQucmVqZWN0KGBpbnZhbGlkIGtleSwgb3Igbm90IGFuIGFkbWluYCksbmV3IGFUKGksci5zdGF0dXMpfXJldHVybiBhd2FpdCByLmpzb24oKX1mdW5jdGlvbiBjVChlKXtyZXR1cm4gZXx8KHR5cGVvZiBkb2N1bWVudD5gdWA/dm9pZCAwOmRvY3VtZW50KX1mdW5jdGlvbiBsVCh7aW50ZXJ2YWxNczplLHRpY2s6dCxkb2M6bn0pe2xldCByPWNUKG4pLGksYT0hMTtmdW5jdGlvbiBvKCl7aSE9PXZvaWQgMCYmKGNsZWFySW50ZXJ2YWwoaSksaT12b2lkIDApfWZ1bmN0aW9uIHMoKXtvKCksaT1zZXRJbnRlcnZhbCh0LGUpfWZ1bmN0aW9uIGMoKXtyJiYoci5oaWRkZW4/bygpOih0KCkscygpKSl9ZnVuY3Rpb24gbCgpe2F8fChhPSEwLHI/LmhpZGRlbnx8KHQoKSxzKCkpLHI/LmFkZEV2ZW50TGlzdGVuZXIoYHZpc2liaWxpdHljaGFuZ2VgLGMpKX1mdW5jdGlvbiB1KCl7YT0hMSxvKCkscj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdmlzaWJpbGl0eWNoYW5nZWAsYyl9cmV0dXJue3N0YXJ0Omwsc3RvcDp1fX12YXIgdVQ9NWUzLGRUPXRfKGBkYXNoYm9hcmRgLHtzdGF0ZTooKT0+KHtvdmVydmlldzpudWxsLHVzYWdlOm51bGwsdGFyZ2V0czpudWxsLGxhc3RVcGRhdGVkOm51bGwsZXJyb3I6YGAscG9sbGVyOnZvaWQgMCxyZWZyZXNoaW5nOiExfSksYWN0aW9uczp7YXN5bmMgcmVmcmVzaCgpe2lmKGlUKCkuaXNBdXRoZW50aWNhdGVkJiYhdGhpcy5yZWZyZXNoaW5nKXt0aGlzLnJlZnJlc2hpbmc9ITA7dHJ5e2F3YWl0IHRoaXMuZG9SZWZyZXNoKCl9ZmluYWxseXt0aGlzLnJlZnJlc2hpbmc9ITF9fX0sYXN5bmMgZG9SZWZyZXNoKCl7bGV0W2UsdCxuXT1hd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3NUKGAvYWRtaW4vYXBpL292ZXJ2aWV3YCksc1QoYC9hZG1pbi9hcGkvdXNhZ2VgKSxzVChgL2FkbWluL2FwaS90YXJnZXRzYCldKTtlLnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy5vdmVydmlldz1lLnZhbHVlKSx0LnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy51c2FnZT10LnZhbHVlKSxuLnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy50YXJnZXRzPW4udmFsdWUpO2xldCByPVtdO2lmKGUuc3RhdHVzPT09YHJlamVjdGVkYCYmci5wdXNoKHtsYWJlbDpgb3ZlcnZpZXdgLHJlYXNvbjplLnJlYXNvbn0pLHQuc3RhdHVzPT09YHJlamVjdGVkYCYmci5wdXNoKHtsYWJlbDpgdXNhZ2VgLHJlYXNvbjp0LnJlYXNvbn0pLG4uc3RhdHVzPT09YHJlamVjdGVkYCYmci5wdXNoKHtsYWJlbDpgdGFyZ2V0c2AscmVhc29uOm4ucmVhc29ufSksci5sZW5ndGg9PT0wKXt0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGA7cmV0dXJufXIuc29tZSgoe3JlYXNvbjplfSk9PmUgaW5zdGFuY2VvZiBhVCYmKGUuc3RhdHVzPT09NDAxfHxlLnN0YXR1cz09PTQwMykpfHwoci5sZW5ndGg8MyYmKHRoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUpLHRoaXMuZXJyb3I9ci5tYXAoKHtsYWJlbDplLHJlYXNvbjp0fSk9PmAke2V9OiAke3QgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6U3RyaW5nKHQpfWApLmpvaW4oYDsgYCkpfSxzdGFydFBvbGxpbmcoKXt0aGlzLnBvbGxlcnx8KHRoaXMucG9sbGVyPWxUKHtpbnRlcnZhbE1zOnVULHRpY2s6KCk9PnZvaWQgdGhpcy5yZWZyZXNoKCl9KSx0aGlzLnBvbGxlci5zdGFydCgpKX19fSksZlQ9e2NsYXNzOmBteC1hdXRvIGZsZXggbWluLWgtWzcwdmhdIG1heC13LW1kIGZsZXgtY29sIGp1c3RpZnktY2VudGVyIHB4LTRgfSxwVD17Y2xhc3M6YGZsZXggc2l6ZS0xMiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLXByaW1hcnkvMTAgdGV4dC1wcmltYXJ5YH0sbVQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMWB9LGhUPXsiYXJpYS1sYWJlbGxlZGJ5IjpgYXV0aGdhdGUtc2VjdXJpdHktaGVhZGluZ2AsY2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEuNSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGdUPXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0sX1Q9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSx2VD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LHlUPXtjbGFzczpgcmVsYXRpdmVgfSxiVD0oKGUsdCk9PntsZXQgbj1lLl9fdmNjT3B0c3x8ZTtmb3IobGV0W2Uscl1vZiB0KW5bZV09cjtyZXR1cm4gbn0pKFAoe19fbmFtZTpgQXV0aEdhdGVgLHNldHVwKGUpe2xldCB0PWlUKCksbj1kVCgpLHI9aihgYCksaT1qKCExKSxhPWoobnVsbCksbz1XKCgpPT5yLnZhbHVlLnRyaW0oKSE9PWBgKTtmdW5jdGlvbiBzKCl7bGV0IGU9ci52YWx1ZTtyLnZhbHVlPWBgLHQuc3VibWl0KGUpLG4ucmVmcmVzaCgpfWZ1bmN0aW9uIGMoKXskbigoKT0+YS52YWx1ZT8uJGVsPy5mb2N1cygpKX1yZXR1cm4gUWkoYyksRHIoKCk9PnQuZXJyb3IsZT0+e2UmJmMoKX0pLChlLG4pPT57bGV0IGM9bGEoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBMKCksUihgZGl2YCxmVCxbVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXJgfSx7ZGVmYXVsdDpOKCgpPT5bQihgZGl2YCxwVCxbVihjLHtpY29uOk0oYV8pLGNsYXNzOmBzaXplLTVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksQihgZGl2YCxtVCxbblszXXx8PUIoYHNwYW5gLHtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTExNIEdhdGV3YXlgLC0xKSxWKE0oUXcpLHtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkYH0se2RlZmF1bHQ6TigoKT0+Wy4uLm5bMl18fD1bSChgQWRtaW4ga2V5IHJlcXVpcmVkYCwtMSldXSksXzoxfSldKSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLm5bNF18fD1bSChgRW50ZXIgYW4gYWRtaW4gQVBJIGtleSB0byBjb250aW51ZS5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLFYoTShZdykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0se2RlZmF1bHQ6TigoKT0+W25bMTBdfHw9QihgaDJgLHtpZDpgYXV0aGdhdGUtc2VjdXJpdHktaGVhZGluZ2AsY2xhc3M6YHNyLW9ubHlgfSxgIEhvdyB0aGlzIGtleSBpcyBoYW5kbGVkIGAsLTEpLEIoYHVsYCxoVCxbQihgbGlgLGdULFtWKGMse2ljb246TShmXyksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bNV18fD1CKGBzcGFuYCxudWxsLGBLZXB0IG9ubHkgaW4gdGhpcyB0YWIncyBzZXNzaW9uIHN0b3JhZ2VgLC0xKV0pLEIoYGxpYCxfVCxbVihjLHtpY29uOk0oZl8pLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzZdfHw9Qihgc3BhbmAsbnVsbCxgTmV2ZXIgd3JpdHRlbiB0byBkaXNrYCwtMSldKSxCKGBsaWAsdlQsW1YoYyx7aWNvbjpNKGZfKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls3XXx8PUIoYHNwYW5gLG51bGwsYFNlbnQgb25seSB0byB0aGlzIHBhZ2UncyBvd24gL2FkbWluL2FwaS8qIHJlcXVlc3RzYCwtMSldKV0pLEIoYGZvcm1gLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2Asb25TdWJtaXQ6aXUocyxbYHByZXZlbnRgXSl9LFtCKGBkaXZgLHlULFtWKE0oJHcpLHtyZWZfa2V5OmBrZXlJbnB1dEVsYCxyZWY6YSxtb2RlbFZhbHVlOnIudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm5bMF18fD1lPT5yLnZhbHVlPWUsdHlwZTppLnZhbHVlP2B0ZXh0YDpgcGFzc3dvcmRgLGF1dG9jb21wbGV0ZTpgb2ZmYCxwbGFjZWhvbGRlcjpgQVBJIGtleWAsImFyaWEtbGFiZWwiOmBBZG1pbiBBUEkga2V5YCwiYXJpYS1pbnZhbGlkIjohIU0odCkuZXJyb3IsImFyaWEtZGVzY3JpYmVkYnkiOk0odCkuZXJyb3I/YGF1dGhnYXRlLWVycm9yYDp2b2lkIDAsY2xhc3M6TyhbYGgtMTAgcHItMTBgLHsiYXV0aGdhdGUtc2hha2UiOk0odCkuZXJyb3J9XSl9LG51bGwsOCxbYG1vZGVsVmFsdWVgLGB0eXBlYCxgYXJpYS1pbnZhbGlkYCxgYXJpYS1kZXNjcmliZWRieWAsYGNsYXNzYF0pLFYoTShHdykse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb24teHNgLGNsYXNzOmBhYnNvbHV0ZSB0b3AtMS8yIHJpZ2h0LTEuNSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgLCJhcmlhLWxhYmVsIjppLnZhbHVlP2BIaWRlIGtleWA6YFNob3cga2V5YCxvbkNsaWNrOm5bMV18fD1lPT5pLnZhbHVlPSFpLnZhbHVlfSx7ZGVmYXVsdDpOKCgpPT5bVihjLHtpY29uOmkudmFsdWU/TShiXyk6TShzXyksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGFyaWEtbGFiZWxgXSldKSxWKE0oR3cpLHt0eXBlOmBzdWJtaXRgLGNsYXNzOmB3LWZ1bGxgLGRpc2FibGVkOiFvLnZhbHVlfSx7ZGVmYXVsdDpOKCgpPT5bLi4ubls4XXx8PVtIKGAgQ29udGludWUgYCwtMSldXSksXzoxfSw4LFtgZGlzYWJsZWRgXSldLDMyKSxNKHQpLmVycm9yPyhMKCkseihNKCR2KSx7a2V5OjAsaWQ6YGF1dGhnYXRlLWVycm9yYCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0Ok4oKCk9PltWKE0odHkpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLm5bOV18fD1bSChgQXV0aGVudGljYXRpb24gZmFpbGVkYCwtMSldXSksXzoxfSksVihNKGV5KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltIKGsoTSh0KS5lcnJvciksMSldKSxfOjF9KV0pLF86MX0pKTpVKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKX19fSksW1tgX19zY29wZUlkYCxgZGF0YS12LTRiZTZiYzA5YF1dKSx4VD17Y2xhc3M6YG10LTEgbGlzdC1kaXNjIHNwYWNlLXktMC41IHBsLTQgZm9udC1tb25vIHRleHQteHNgfSxTVD17a2V5OjAsY2xhc3M6YG10LTEgdGV4dC14c2B9LENUPVAoe19fbmFtZTpgQ29uZmlnV2FybmluZ3NCYW5uZXJgLHByb3BzOnt3YXJuaW5nczp7fSx3YXJuaW5nc0Ryb3BwZWQ6e319LHNldHVwKGUpe2xldCB0PWUsbj1qKCExKTtmdW5jdGlvbiByKCl7bi52YWx1ZT0hbi52YWx1ZX1yZXR1cm4oZSxpKT0+e2xldCBhPWxhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gdC53YXJuaW5ncy5sZW5ndGg+MD8oTCgpLHooTSgkdikse2tleTowLHZhcmlhbnQ6YHdhcm5gfSx7ZGVmYXVsdDpOKCgpPT5bVihhLHtpY29uOk0odl8pLGNsYXNzOmBzaXplLTRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLFYoTSh0eSkse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSx7ZGVmYXVsdDpOKCgpPT5bQihgc3BhbmAsbnVsbCxrKHQud2FybmluZ3MubGVuZ3RoKStgIGNvbmZpZ3VyYXRpb24gYCtrKHQud2FybmluZ3MubGVuZ3RoPT09MT9gd2FybmluZ2A6YHdhcm5pbmdzYCksMSksVihNKEd3KSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgeHNgLCJhcmlhLWV4cGFuZGVkIjpuLnZhbHVlLCJhcmlhLWxhYmVsIjpgJHtuLnZhbHVlP2BIaWRlYDpgU2hvd2B9IGNvbmZpZ3VyYXRpb24gd2FybmluZyBkZXRhaWxzYCxvbkNsaWNrOnJ9LHtkZWZhdWx0Ok4oKCk9PltIKGsobi52YWx1ZT9gSGlkZWA6YFNob3dgKSwxKV0pLF86MX0sOCxbYGFyaWEtZXhwYW5kZWRgLGBhcmlhLWxhYmVsYF0pXSksXzoxfSksbi52YWx1ZT8oTCgpLHooTShleSkse2tleTowfSx7ZGVmYXVsdDpOKCgpPT5bQihgdWxgLHhULFsoTCghMCksUihJLG51bGwsaGEodC53YXJuaW5ncywoZSx0KT0+KEwoKSxSKGBsaWAse2tleTp0fSxrKGUpLDEpKSksMTI4KSldKSx0Lndhcm5pbmdzRHJvcHBlZD8oTCgpLFIoYHBgLFNULGBhbmQgYCtrKHQud2FybmluZ3NEcm9wcGVkKStgIG1vcmUgd2VyZSBub3Qga2VwdGAsMSkpOlUoYGAsITApXSksXzoxfSkpOlUoYGAsITApXSksXzoxfSkpOlUoYGAsITApfX19KTtmdW5jdGlvbiB3VChlLHQpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQpOmV9ZnVuY3Rpb24gVFQoZSx0KXtyZXR1cm4gbj0+e3Quc2V0U3RhdGUodD0+KHsuLi50LFtlXTp3VChuLHRbZV0pfSkpfX1mdW5jdGlvbiBFVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufWZ1bmN0aW9uIERUKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KGU9PnR5cGVvZiBlPT1gbnVtYmVyYCl9ZnVuY3Rpb24gT1QoZSx0KXtsZXQgbj1bXSxyPWU9PntlLmZvckVhY2goZT0+e24ucHVzaChlKTtsZXQgaT10KGUpO2khPW51bGwmJmkubGVuZ3RoJiZyKGkpfSl9O3JldHVybiByKGUpLG59ZnVuY3Rpb24gUShlLHQsbil7bGV0IHI9W10saTtyZXR1cm4gYT0+e2xldCBvO24ua2V5JiZuLmRlYnVnJiYobz1EYXRlLm5vdygpKTtsZXQgcz1lKGEpO2lmKCEocy5sZW5ndGghPT1yLmxlbmd0aHx8cy5zb21lKChlLHQpPT5yW3RdIT09ZSkpKXJldHVybiBpO3I9cztsZXQgYztpZihuLmtleSYmbi5kZWJ1ZyYmKGM9RGF0ZS5ub3coKSksaT10KC4uLnMpLG49PW51bGx8fG4ub25DaGFuZ2U9PW51bGx8fG4ub25DaGFuZ2UoaSksbi5rZXkmJm4uZGVidWcmJm4hPW51bGwmJm4uZGVidWcoKSl7bGV0IGU9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1vKSoxMDApLzEwMCx0PU1hdGgucm91bmQoKERhdGUubm93KCktYykqMTAwKS8xMDAscj10LzE2LGk9KGUsdCk9Pntmb3IoZT1TdHJpbmcoZSk7ZS5sZW5ndGg8dDspZT1gIGArZTtyZXR1cm4gZX07Y29uc29sZS5pbmZvKGAlY+KPsSAke2kodCw1KX0gLyR7aShlLDUpfSBtc2AsYAogICAgICAgICAgICBmb250LXNpemU6IC42cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgY29sb3I6IGhzbCgke01hdGgubWF4KDAsTWF0aC5taW4oMTIwLTEyMCpyLDEyMCkpfWRlZyAxMDAlIDMxJSk7YCxuPy5rZXkpfXJldHVybiBpfX1mdW5jdGlvbiAkKGUsdCxuLHIpe3JldHVybntkZWJ1ZzooKT0+ZT8uZGVidWdBbGw/P2VbdF0sa2V5OiExLG9uQ2hhbmdlOnJ9fWZ1bmN0aW9uIGtUKGUsdCxuLHIpe2xldCBpPXtpZDpgJHt0LmlkfV8ke24uaWR9YCxyb3c6dCxjb2x1bW46bixnZXRWYWx1ZTooKT0+dC5nZXRWYWx1ZShyKSxyZW5kZXJWYWx1ZTooKT0+aS5nZXRWYWx1ZSgpPz9lLm9wdGlvbnMucmVuZGVyRmFsbGJhY2tWYWx1ZSxnZXRDb250ZXh0OlEoKCk9PltlLG4sdCxpXSwoZSx0LG4scik9Pih7dGFibGU6ZSxjb2x1bW46dCxyb3c6bixjZWxsOnIsZ2V0VmFsdWU6ci5nZXRWYWx1ZSxyZW5kZXJWYWx1ZTpyLnJlbmRlclZhbHVlfSksJChlLm9wdGlvbnMsYGRlYnVnQ2VsbHNgLGBjZWxsLmdldENvbnRleHRgKSl9O3JldHVybiBlLl9mZWF0dXJlcy5mb3JFYWNoKHI9PntyLmNyZWF0ZUNlbGw9PW51bGx8fHIuY3JlYXRlQ2VsbChpLG4sdCxlKX0se30pLGl9ZnVuY3Rpb24gQVQoZSx0LG4scil7bGV0IGk9ey4uLmUuX2dldERlZmF1bHRDb2x1bW5EZWYoKSwuLi50fSxhPWkuYWNjZXNzb3JLZXksbz1pLmlkPz8oYT90eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsPT1gZnVuY3Rpb25gP2EucmVwbGFjZUFsbChgLmAsYF9gKTphLnJlcGxhY2UoL1wuL2csYF9gKTp2b2lkIDApPz8odHlwZW9mIGkuaGVhZGVyPT1gc3RyaW5nYD9pLmhlYWRlcjp2b2lkIDApLHM7aWYoaS5hY2Nlc3NvckZuP3M9aS5hY2Nlc3NvckZuOmEmJihzPWEuaW5jbHVkZXMoYC5gKT9lPT57bGV0IHQ9ZTtmb3IobGV0IGUgb2YgYS5zcGxpdChgLmApKXQ9dD8uW2VdO3JldHVybiB0fTplPT5lW2kuYWNjZXNzb3JLZXldKSwhbyl0aHJvdyBFcnJvcigpO2xldCBjPXtpZDpgJHtTdHJpbmcobyl9YCxhY2Nlc3NvckZuOnMscGFyZW50OnIsZGVwdGg6bixjb2x1bW5EZWY6aSxjb2x1bW5zOltdLGdldEZsYXRDb2x1bW5zOlEoKCk9PlshMF0sKCk9PltjLC4uLmMuY29sdW1ucz8uZmxhdE1hcChlPT5lLmdldEZsYXRDb2x1bW5zKCkpXSwkKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgY29sdW1uLmdldEZsYXRDb2x1bW5zYCkpLGdldExlYWZDb2x1bW5zOlEoKCk9PltlLl9nZXRPcmRlckNvbHVtbnNGbigpXSxlPT57dmFyIHQ7cmV0dXJuKHQ9Yy5jb2x1bW5zKSE9bnVsbCYmdC5sZW5ndGg/ZShjLmNvbHVtbnMuZmxhdE1hcChlPT5lLmdldExlYWZDb2x1bW5zKCkpKTpbY119LCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0TGVhZkNvbHVtbnNgKSl9O2ZvcihsZXQgdCBvZiBlLl9mZWF0dXJlcyl0LmNyZWF0ZUNvbHVtbj09bnVsbHx8dC5jcmVhdGVDb2x1bW4oYyxlKTtyZXR1cm4gY312YXIgalQ9YGRlYnVnSGVhZGVyc2A7ZnVuY3Rpb24gTVQoZSx0LG4pe2xldCByPXtpZDpuLmlkPz90LmlkLGNvbHVtbjp0LGluZGV4Om4uaW5kZXgsaXNQbGFjZWhvbGRlcjohIW4uaXNQbGFjZWhvbGRlcixwbGFjZWhvbGRlcklkOm4ucGxhY2Vob2xkZXJJZCxkZXB0aDpuLmRlcHRoLHN1YkhlYWRlcnM6W10sY29sU3BhbjowLHJvd1NwYW46MCxoZWFkZXJHcm91cDpudWxsLGdldExlYWZIZWFkZXJzOigpPT57bGV0IGU9W10sdD1uPT57bi5zdWJIZWFkZXJzJiZuLnN1YkhlYWRlcnMubGVuZ3RoJiZuLnN1YkhlYWRlcnMubWFwKHQpLGUucHVzaChuKX07cmV0dXJuIHQociksZX0sZ2V0Q29udGV4dDooKT0+KHt0YWJsZTplLGhlYWRlcjpyLGNvbHVtbjp0fSl9O3JldHVybiBlLl9mZWF0dXJlcy5mb3JFYWNoKHQ9Pnt0LmNyZWF0ZUhlYWRlcj09bnVsbHx8dC5jcmVhdGVIZWFkZXIocixlKX0pLHJ9dmFyIE5UPXtjcmVhdGVUYWJsZTplPT57ZS5nZXRIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKHQsbixyLGkpPT57bGV0IGE9cj8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10sbz1pPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxzPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpO3JldHVybiBQVCh0LFsuLi5hLC4uLnMsLi4ub10sZSl9LCQoZS5vcHRpb25zLGpULGBnZXRIZWFkZXJHcm91cHNgKSksZS5nZXRDZW50ZXJIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKHQsbixyLGkpPT4obj1uLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZS5pZCkpJiYhKGkhPW51bGwmJmkuaW5jbHVkZXMoZS5pZCkpKSxQVCh0LG4sZSxgY2VudGVyYCkpLCQoZS5vcHRpb25zLGpULGBnZXRDZW50ZXJIZWFkZXJHcm91cHNgKSksZS5nZXRMZWZ0SGVhZGVyR3JvdXBzPVEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLCh0LG4scik9PlBUKHQscj8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10sZSxgbGVmdGApLCQoZS5vcHRpb25zLGpULGBnZXRMZWZ0SGVhZGVyR3JvdXBzYCkpLGUuZ2V0UmlnaHRIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLCh0LG4scik9PlBUKHQscj8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10sZSxgcmlnaHRgKSwkKGUub3B0aW9ucyxqVCxgZ2V0UmlnaHRIZWFkZXJHcm91cHNgKSksZS5nZXRGb290ZXJHcm91cHM9USgoKT0+W2UuZ2V0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsalQsYGdldEZvb3Rlckdyb3Vwc2ApKSxlLmdldExlZnRGb290ZXJHcm91cHM9USgoKT0+W2UuZ2V0TGVmdEhlYWRlckdyb3VwcygpXSxlPT5bLi4uZV0ucmV2ZXJzZSgpLCQoZS5vcHRpb25zLGpULGBnZXRMZWZ0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0Q2VudGVyRm9vdGVyR3JvdXBzPVEoKCk9PltlLmdldENlbnRlckhlYWRlckdyb3VwcygpXSxlPT5bLi4uZV0ucmV2ZXJzZSgpLCQoZS5vcHRpb25zLGpULGBnZXRDZW50ZXJGb290ZXJHcm91cHNgKSksZS5nZXRSaWdodEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRSaWdodEhlYWRlckdyb3VwcygpXSxlPT5bLi4uZV0ucmV2ZXJzZSgpLCQoZS5vcHRpb25zLGpULGBnZXRSaWdodEZvb3Rlckdyb3Vwc2ApKSxlLmdldEZsYXRIZWFkZXJzPVEoKCk9PltlLmdldEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSwkKGUub3B0aW9ucyxqVCxgZ2V0RmxhdEhlYWRlcnNgKSksZS5nZXRMZWZ0RmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0TGVmdEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSwkKGUub3B0aW9ucyxqVCxgZ2V0TGVmdEZsYXRIZWFkZXJzYCkpLGUuZ2V0Q2VudGVyRmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0Q2VudGVySGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLGpULGBnZXRDZW50ZXJGbGF0SGVhZGVyc2ApKSxlLmdldFJpZ2h0RmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0UmlnaHRIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksJChlLm9wdGlvbnMsalQsYGdldFJpZ2h0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJMZWFmSGVhZGVycz1RKCgpPT5bZS5nZXRDZW50ZXJGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSwkKGUub3B0aW9ucyxqVCxgZ2V0Q2VudGVyTGVhZkhlYWRlcnNgKSksZS5nZXRMZWZ0TGVhZkhlYWRlcnM9USgoKT0+W2UuZ2V0TGVmdEZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLCQoZS5vcHRpb25zLGpULGBnZXRMZWZ0TGVhZkhlYWRlcnNgKSksZS5nZXRSaWdodExlYWZIZWFkZXJzPVEoKCk9PltlLmdldFJpZ2h0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksJChlLm9wdGlvbnMsalQsYGdldFJpZ2h0TGVhZkhlYWRlcnNgKSksZS5nZXRMZWFmSGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCksZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKSxlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLChlLHQsbik9PlsuLi5lWzBdPy5oZWFkZXJzPz9bXSwuLi50WzBdPy5oZWFkZXJzPz9bXSwuLi5uWzBdPy5oZWFkZXJzPz9bXV0ubWFwKGU9PmUuZ2V0TGVhZkhlYWRlcnMoKSkuZmxhdCgpLCQoZS5vcHRpb25zLGpULGBnZXRMZWFmSGVhZGVyc2ApKX19O2Z1bmN0aW9uIFBUKGUsdCxuLHIpe2xldCBpPTAsYT1mdW5jdGlvbihlLHQpe3Q9PT12b2lkIDAmJih0PTEpLGk9TWF0aC5tYXgoaSx0KSxlLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5mb3JFYWNoKGU9Pnt2YXIgbjsobj1lLmNvbHVtbnMpIT1udWxsJiZuLmxlbmd0aCYmYShlLmNvbHVtbnMsdCsxKX0sMCl9O2EoZSk7bGV0IG89W10scz0oZSx0KT0+e2xldCBpPXtkZXB0aDp0LGlkOltyLGAke3R9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oYF9gKSxoZWFkZXJzOltdfSxhPVtdO2UuZm9yRWFjaChlPT57bGV0IG89Wy4uLmFdLnJldmVyc2UoKVswXSxzPWUuY29sdW1uLmRlcHRoPT09aS5kZXB0aCxjLGw9ITE7aWYocyYmZS5jb2x1bW4ucGFyZW50P2M9ZS5jb2x1bW4ucGFyZW50OihjPWUuY29sdW1uLGw9ITApLG8mJm8/LmNvbHVtbj09PWMpby5zdWJIZWFkZXJzLnB1c2goZSk7ZWxzZXtsZXQgaT1NVChuLGMse2lkOltyLHQsYy5pZCxlPy5pZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oYF9gKSxpc1BsYWNlaG9sZGVyOmwscGxhY2Vob2xkZXJJZDpsP2Ake2EuZmlsdGVyKGU9PmUuY29sdW1uPT09YykubGVuZ3RofWA6dm9pZCAwLGRlcHRoOnQsaW5kZXg6YS5sZW5ndGh9KTtpLnN1YkhlYWRlcnMucHVzaChlKSxhLnB1c2goaSl9aS5oZWFkZXJzLnB1c2goZSksZS5oZWFkZXJHcm91cD1pfSksby5wdXNoKGkpLHQ+MCYmcyhhLHQtMSl9O3ModC5tYXAoKGUsdCk9Pk1UKG4sZSx7ZGVwdGg6aSxpbmRleDp0fSkpLGktMSksby5yZXZlcnNlKCk7bGV0IGM9ZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLm1hcChlPT57bGV0IHQ9MCxuPTAscj1bMF07ZS5zdWJIZWFkZXJzJiZlLnN1YkhlYWRlcnMubGVuZ3RoPyhyPVtdLGMoZS5zdWJIZWFkZXJzKS5mb3JFYWNoKGU9PntsZXR7Y29sU3BhbjpuLHJvd1NwYW46aX09ZTt0Kz1uLHIucHVzaChpKX0pKTp0PTE7bGV0IGk9TWF0aC5taW4oLi4ucik7cmV0dXJuIG4rPWksZS5jb2xTcGFuPXQsZS5yb3dTcGFuPW4se2NvbFNwYW46dCxyb3dTcGFuOm59fSk7cmV0dXJuIGMob1swXT8uaGVhZGVycz8/W10pLG99dmFyIEZUPShlLHQsbixyLGksYSxvKT0+e2xldCBzPXtpZDp0LGluZGV4OnIsb3JpZ2luYWw6bixkZXB0aDppLHBhcmVudElkOm8sX3ZhbHVlc0NhY2hlOnt9LF91bmlxdWVWYWx1ZXNDYWNoZTp7fSxnZXRWYWx1ZTp0PT57aWYocy5fdmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHMuX3ZhbHVlc0NhY2hlW3RdO2xldCBuPWUuZ2V0Q29sdW1uKHQpO2lmKG4hPW51bGwmJm4uYWNjZXNzb3JGbilyZXR1cm4gcy5fdmFsdWVzQ2FjaGVbdF09bi5hY2Nlc3NvckZuKHMub3JpZ2luYWwscikscy5fdmFsdWVzQ2FjaGVbdF19LGdldFVuaXF1ZVZhbHVlczp0PT57aWYocy5fdW5pcXVlVmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdO2xldCBuPWUuZ2V0Q29sdW1uKHQpO2lmKG4hPW51bGwmJm4uYWNjZXNzb3JGbilyZXR1cm4gbi5jb2x1bW5EZWYuZ2V0VW5pcXVlVmFsdWVzPyhzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XT1uLmNvbHVtbkRlZi5nZXRVbmlxdWVWYWx1ZXMocy5vcmlnaW5hbCxyKSxzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XSk6KHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdPVtzLmdldFZhbHVlKHQpXSxzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XSl9LHJlbmRlclZhbHVlOnQ9PnMuZ2V0VmFsdWUodCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLHN1YlJvd3M6YT8/W10sZ2V0TGVhZlJvd3M6KCk9Pk9UKHMuc3ViUm93cyxlPT5lLnN1YlJvd3MpLGdldFBhcmVudFJvdzooKT0+cy5wYXJlbnRJZD9lLmdldFJvdyhzLnBhcmVudElkLCEwKTp2b2lkIDAsZ2V0UGFyZW50Um93czooKT0+e2xldCBlPVtdLHQ9cztmb3IoOzspe2xldCBuPXQuZ2V0UGFyZW50Um93KCk7aWYoIW4pYnJlYWs7ZS5wdXNoKG4pLHQ9bn1yZXR1cm4gZS5yZXZlcnNlKCl9LGdldEFsbENlbGxzOlEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCldLHQ9PnQubWFwKHQ9PmtUKGUscyx0LHQuaWQpKSwkKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0QWxsQ2VsbHNgKSksX2dldEFsbENlbGxzQnlDb2x1bW5JZDpRKCgpPT5bcy5nZXRBbGxDZWxscygpXSxlPT5lLnJlZHVjZSgoZSx0KT0+KGVbdC5jb2x1bW4uaWRdPXQsZSkse30pLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRBbGxDZWxsc0J5Q29sdW1uSWRgKSl9O2ZvcihsZXQgdD0wO3Q8ZS5fZmVhdHVyZXMubGVuZ3RoO3QrKyl7bGV0IG49ZS5fZmVhdHVyZXNbdF07bj09bnVsbHx8bi5jcmVhdGVSb3c9PW51bGx8fG4uY3JlYXRlUm93KHMsZSl9cmV0dXJuIHN9LElUPXtjcmVhdGVDb2x1bW46KGUsdCk9PntlLl9nZXRGYWNldGVkUm93TW9kZWw9dC5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbCYmdC5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbCh0LGUuaWQpLGUuZ2V0RmFjZXRlZFJvd01vZGVsPSgpPT5lLl9nZXRGYWNldGVkUm93TW9kZWw/ZS5fZ2V0RmFjZXRlZFJvd01vZGVsKCk6dC5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCksZS5fZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz10Lm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyYmdC5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXModCxlLmlkKSxlLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXM9KCk9PmUuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXM/ZS5fZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcygpOm5ldyBNYXAsZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcz10Lm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyYmdC5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXModCxlLmlkKSxlLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXM9KCk9PntpZihlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzKXJldHVybiBlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzKCl9fX0sTFQ9KGUsdCxuKT0+e3ZhciByLGk7bGV0IGE9bj09bnVsbHx8KHI9bi50b1N0cmluZygpKT09bnVsbD92b2lkIDA6ci50b0xvd2VyQ2FzZSgpO3JldHVybiEhKChpPWUuZ2V0VmFsdWUodCkpIT1udWxsJiYoaT1pLnRvU3RyaW5nKCkpIT1udWxsJiYoaT1pLnRvTG93ZXJDYXNlKCkpIT1udWxsJiZpLmluY2x1ZGVzKGEpKX07TFQuYXV0b1JlbW92ZT1lPT5xVChlKTt2YXIgUlQ9KGUsdCxuKT0+e3ZhciByO3JldHVybiEhKChyPWUuZ2V0VmFsdWUodCkpIT1udWxsJiYocj1yLnRvU3RyaW5nKCkpIT1udWxsJiZyLmluY2x1ZGVzKG4pKX07UlQuYXV0b1JlbW92ZT1lPT5xVChlKTt2YXIgelQ9KGUsdCxuKT0+e3ZhciByO3JldHVybigocj1lLmdldFZhbHVlKHQpKT09bnVsbHx8KHI9ci50b1N0cmluZygpKT09bnVsbD92b2lkIDA6ci50b0xvd2VyQ2FzZSgpKT09PW4/LnRvTG93ZXJDYXNlKCl9O3pULmF1dG9SZW1vdmU9ZT0+cVQoZSk7dmFyIEJUPShlLHQsbik9PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pO0JULmF1dG9SZW1vdmU9ZT0+cVQoZSk7dmFyIFZUPShlLHQsbik9PiFuLnNvbWUobj0+e3ZhciByO3JldHVybiEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJnIuaW5jbHVkZXMobikpfSk7VlQuYXV0b1JlbW92ZT1lPT5xVChlKXx8IShlIT1udWxsJiZlLmxlbmd0aCk7dmFyIEhUPShlLHQsbik9Pm4uc29tZShuPT5lLmdldFZhbHVlKHQpPy5pbmNsdWRlcyhuKSk7SFQuYXV0b1JlbW92ZT1lPT5xVChlKXx8IShlIT1udWxsJiZlLmxlbmd0aCk7dmFyIFVUPShlLHQsbik9PmUuZ2V0VmFsdWUodCk9PT1uO1VULmF1dG9SZW1vdmU9ZT0+cVQoZSk7dmFyIFdUPShlLHQsbik9PmUuZ2V0VmFsdWUodCk9PW47V1QuYXV0b1JlbW92ZT1lPT5xVChlKTt2YXIgR1Q9KGUsdCxuKT0+e2xldFtyLGldPW4sYT1lLmdldFZhbHVlKHQpO3JldHVybiBhPj1yJiZhPD1pfTtHVC5yZXNvbHZlRmlsdGVyVmFsdWU9ZT0+e2xldFt0LG5dPWUscj10eXBlb2YgdD09YG51bWJlcmA/dDpwYXJzZUZsb2F0KHQpLGk9dHlwZW9mIG49PWBudW1iZXJgP246cGFyc2VGbG9hdChuKSxhPXQ9PT1udWxsfHxOdW1iZXIuaXNOYU4ocik/LTEvMDpyLG89bj09PW51bGx8fE51bWJlci5pc05hTihpKT8xLzA6aTtpZihhPm8pe2xldCBlPWE7YT1vLG89ZX1yZXR1cm5bYSxvXX0sR1QuYXV0b1JlbW92ZT1lPT5xVChlKXx8cVQoZVswXSkmJnFUKGVbMV0pO3ZhciBLVD17aW5jbHVkZXNTdHJpbmc6TFQsaW5jbHVkZXNTdHJpbmdTZW5zaXRpdmU6UlQsZXF1YWxzU3RyaW5nOnpULGFyckluY2x1ZGVzOkJULGFyckluY2x1ZGVzQWxsOlZULGFyckluY2x1ZGVzU29tZTpIVCxlcXVhbHM6VVQsd2Vha0VxdWFsczpXVCxpbk51bWJlclJhbmdlOkdUfTtmdW5jdGlvbiBxVChlKXtyZXR1cm4gZT09bnVsbHx8ZT09PWBgfXZhciBKVD17Z2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHtmaWx0ZXJGbjpgYXV0b2B9KSxnZXRJbml0aWFsU3RhdGU6ZT0+KHtjb2x1bW5GaWx0ZXJzOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uRmlsdGVyc0NoYW5nZTpUVChgY29sdW1uRmlsdGVyc2AsZSksZmlsdGVyRnJvbUxlYWZSb3dzOiExLG1heExlYWZSb3dGaWx0ZXJEZXB0aDoxMDB9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEF1dG9GaWx0ZXJGbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO3JldHVybiB0eXBlb2Ygbj09YHN0cmluZ2A/S1QuaW5jbHVkZXNTdHJpbmc6dHlwZW9mIG49PWBudW1iZXJgP0tULmluTnVtYmVyUmFuZ2U6dHlwZW9mIG49PWBib29sZWFuYHx8dHlwZW9mIG49PWBvYmplY3RgJiZuP0tULmVxdWFsczpBcnJheS5pc0FycmF5KG4pP0tULmFyckluY2x1ZGVzOktULndlYWtFcXVhbHN9LGUuZ2V0RmlsdGVyRm49KCk9PkVUKGUuY29sdW1uRGVmLmZpbHRlckZuKT9lLmNvbHVtbkRlZi5maWx0ZXJGbjplLmNvbHVtbkRlZi5maWx0ZXJGbj09PWBhdXRvYD9lLmdldEF1dG9GaWx0ZXJGbigpOnQub3B0aW9ucy5maWx0ZXJGbnM/LltlLmNvbHVtbkRlZi5maWx0ZXJGbl0/P0tUW2UuY29sdW1uRGVmLmZpbHRlckZuXSxlLmdldENhbkZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUNvbHVtbkZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtbkZpbHRlcnM/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJiEhZS5hY2Nlc3NvckZuLGUuZ2V0SXNGaWx0ZXJlZD0oKT0+ZS5nZXRGaWx0ZXJJbmRleCgpPi0xLGUuZ2V0RmlsdGVyVmFsdWU9KCk9Pnt2YXIgbjtyZXR1cm4obj10LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycyk9PW51bGx8fChuPW4uZmluZCh0PT50LmlkPT09ZS5pZCkpPT1udWxsP3ZvaWQgMDpuLnZhbHVlfSxlLmdldEZpbHRlckluZGV4PSgpPT50LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5zZXRGaWx0ZXJWYWx1ZT1uPT57dC5zZXRDb2x1bW5GaWx0ZXJzKHQ9PntsZXQgcj1lLmdldEZpbHRlckZuKCksaT10Py5maW5kKHQ9PnQuaWQ9PT1lLmlkKSxhPXdUKG4saT9pLnZhbHVlOnZvaWQgMCk7aWYoWVQocixhLGUpKXJldHVybiB0Py5maWx0ZXIodD0+dC5pZCE9PWUuaWQpPz9bXTtsZXQgbz17aWQ6ZS5pZCx2YWx1ZTphfTtyZXR1cm4gaT90Py5tYXAodD0+dC5pZD09PWUuaWQ/bzp0KT8/W106dCE9bnVsbCYmdC5sZW5ndGg/Wy4uLnQsb106W29dfSl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLmNvbHVtbkZpbHRlcnM9e30sZS5jb2x1bW5GaWx0ZXJzTWV0YT17fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uRmlsdGVycz10PT57bGV0IG49ZS5nZXRBbGxMZWFmQ29sdW1ucygpO2Uub3B0aW9ucy5vbkNvbHVtbkZpbHRlcnNDaGFuZ2U9PW51bGx8fGUub3B0aW9ucy5vbkNvbHVtbkZpbHRlcnNDaGFuZ2UoZT0+d1QodCxlKT8uZmlsdGVyKGU9PntsZXQgdD1uLmZpbmQodD0+dC5pZD09PWUuaWQpO3JldHVybiEodCYmWVQodC5nZXRGaWx0ZXJGbigpLGUudmFsdWUsdCkpfSkpfSxlLnJlc2V0Q29sdW1uRmlsdGVycz10PT57ZS5zZXRDb2x1bW5GaWx0ZXJzKHQ/W106ZS5pbml0aWFsU3RhdGU/LmNvbHVtbkZpbHRlcnM/P1tdKX0sZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsPSgpPT5lLmdldENvcmVSb3dNb2RlbCgpLGUuZ2V0RmlsdGVyZWRSb3dNb2RlbD0oKT0+KCFlLl9nZXRGaWx0ZXJlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0RmlsdGVyZWRSb3dNb2RlbCYmKGUuX2dldEZpbHRlcmVkUm93TW9kZWw9ZS5vcHRpb25zLmdldEZpbHRlcmVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxGaWx0ZXJpbmd8fCFlLl9nZXRGaWx0ZXJlZFJvd01vZGVsP2UuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpOmUuX2dldEZpbHRlcmVkUm93TW9kZWwoKSl9fTtmdW5jdGlvbiBZVChlLHQsbil7cmV0dXJuKGUmJmUuYXV0b1JlbW92ZT9lLmF1dG9SZW1vdmUodCxuKTohMSl8fHQ9PT12b2lkIDB8fHR5cGVvZiB0PT1gc3RyaW5nYCYmIXR9dmFyIFhUPXtzdW06KGUsdCxuKT0+bi5yZWR1Y2UoKHQsbik9PntsZXQgcj1uLmdldFZhbHVlKGUpO3JldHVybiB0Kyh0eXBlb2Ygcj09YG51bWJlcmA/cjowKX0sMCksbWluOihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LG1heDooZSx0LG4pPT57bGV0IHI7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocjxufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bil9KSxyfSxleHRlbnQ6KGUsdCxuKT0+e2xldCByLGk7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocj09PXZvaWQgMD9uPj1uJiYocj1pPW4pOihyPm4mJihyPW4pLGk8biYmKGk9bikpKX0pLFtyLGldfSxtZWFuOihlLHQpPT57bGV0IG49MCxyPTA7aWYodC5mb3JFYWNoKHQ9PntsZXQgaT10LmdldFZhbHVlKGUpO2khPW51bGwmJihpPStpKT49aSYmKCsrbixyKz1pKX0pLG4pcmV0dXJuIHIvbn0sbWVkaWFuOihlLHQpPT57aWYoIXQubGVuZ3RoKXJldHVybjtsZXQgbj10Lm1hcCh0PT50LmdldFZhbHVlKGUpKTtpZighRFQobikpcmV0dXJuO2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gblswXTtsZXQgcj1NYXRoLmZsb29yKG4ubGVuZ3RoLzIpLGk9bi5zb3J0KChlLHQpPT5lLXQpO3JldHVybiBuLmxlbmd0aCUyPT0wPyhpW3ItMV0raVtyXSkvMjppW3JdfSx1bmlxdWU6KGUsdCk9PkFycmF5LmZyb20obmV3IFNldCh0Lm1hcCh0PT50LmdldFZhbHVlKGUpKSkudmFsdWVzKCkpLHVuaXF1ZUNvdW50OihlLHQpPT5uZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS5zaXplLGNvdW50OihlLHQpPT50Lmxlbmd0aH0sWlQ9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Pih7YWdncmVnYXRlZENlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLmdldFZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSxhZ2dyZWdhdGlvbkZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2dyb3VwaW5nOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uR3JvdXBpbmdDaGFuZ2U6VFQoYGdyb3VwaW5nYCxlKSxncm91cGVkQ29sdW1uTW9kZTpgcmVvcmRlcmB9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLnRvZ2dsZUdyb3VwaW5nPSgpPT57dC5zZXRHcm91cGluZyh0PT50IT1udWxsJiZ0LmluY2x1ZGVzKGUuaWQpP3QuZmlsdGVyKHQ9PnQhPT1lLmlkKTpbLi4udD8/W10sZS5pZF0pfSxlLmdldENhbkdyb3VwPSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlR3JvdXBpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVHcm91cGluZz8/ITApJiYoISFlLmFjY2Vzc29yRm58fCEhZS5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZSksZS5nZXRJc0dyb3VwZWQ9KCk9PnQuZ2V0U3RhdGUoKS5ncm91cGluZz8uaW5jbHVkZXMoZS5pZCksZS5nZXRHcm91cGVkSW5kZXg9KCk9PnQuZ2V0U3RhdGUoKS5ncm91cGluZz8uaW5kZXhPZihlLmlkKSxlLmdldFRvZ2dsZUdyb3VwaW5nSGFuZGxlcj0oKT0+e2xldCB0PWUuZ2V0Q2FuR3JvdXAoKTtyZXR1cm4oKT0+e3QmJmUudG9nZ2xlR3JvdXBpbmcoKX19LGUuZ2V0QXV0b0FnZ3JlZ2F0aW9uRm49KCk9PntsZXQgbj10LmdldENvcmVSb3dNb2RlbCgpLmZsYXRSb3dzWzBdPy5nZXRWYWx1ZShlLmlkKTtpZih0eXBlb2Ygbj09YG51bWJlcmApcmV0dXJuIFhULnN1bTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1gW29iamVjdCBEYXRlXWApcmV0dXJuIFhULmV4dGVudH0sZS5nZXRBZ2dyZWdhdGlvbkZuPSgpPT57aWYoIWUpdGhyb3cgRXJyb3IoKTtyZXR1cm4gRVQoZS5jb2x1bW5EZWYuYWdncmVnYXRpb25Gbik/ZS5jb2x1bW5EZWYuYWdncmVnYXRpb25GbjplLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuPT09YGF1dG9gP2UuZ2V0QXV0b0FnZ3JlZ2F0aW9uRm4oKTp0Lm9wdGlvbnMuYWdncmVnYXRpb25GbnM/LltlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXT8/WFRbZS5jb2x1bW5EZWYuYWdncmVnYXRpb25Gbl19fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRHcm91cGluZz10PT5lLm9wdGlvbnMub25Hcm91cGluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uR3JvdXBpbmdDaGFuZ2UodCksZS5yZXNldEdyb3VwaW5nPXQ9PntlLnNldEdyb3VwaW5nKHQ/W106ZS5pbml0aWFsU3RhdGU/Lmdyb3VwaW5nPz9bXSl9LGUuZ2V0UHJlR3JvdXBlZFJvd01vZGVsPSgpPT5lLmdldEZpbHRlcmVkUm93TW9kZWwoKSxlLmdldEdyb3VwZWRSb3dNb2RlbD0oKT0+KCFlLl9nZXRHcm91cGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRHcm91cGVkUm93TW9kZWwmJihlLl9nZXRHcm91cGVkUm93TW9kZWw9ZS5vcHRpb25zLmdldEdyb3VwZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEdyb3VwaW5nfHwhZS5fZ2V0R3JvdXBlZFJvd01vZGVsP2UuZ2V0UHJlR3JvdXBlZFJvd01vZGVsKCk6ZS5fZ2V0R3JvdXBlZFJvd01vZGVsKCkpfSxjcmVhdGVSb3c6KGUsdCk9PntlLmdldElzR3JvdXBlZD0oKT0+ISFlLmdyb3VwaW5nQ29sdW1uSWQsZS5nZXRHcm91cGluZ1ZhbHVlPW49PntpZihlLl9ncm91cGluZ1ZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KG4pKXJldHVybiBlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW25dO2xldCByPXQuZ2V0Q29sdW1uKG4pO3JldHVybiByIT1udWxsJiZyLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlPyhlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW25dPXIuY29sdW1uRGVmLmdldEdyb3VwaW5nVmFsdWUoZS5vcmlnaW5hbCksZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZVtuXSk6ZS5nZXRWYWx1ZShuKX0sZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZT17fX0sY3JlYXRlQ2VsbDooZSx0LG4scik9PntlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRJc0dyb3VwZWQoKSYmdC5pZD09PW4uZ3JvdXBpbmdDb2x1bW5JZCxlLmdldElzUGxhY2Vob2xkZXI9KCk9PiFlLmdldElzR3JvdXBlZCgpJiZ0LmdldElzR3JvdXBlZCgpLGUuZ2V0SXNBZ2dyZWdhdGVkPSgpPT57dmFyIHQ7cmV0dXJuIWUuZ2V0SXNHcm91cGVkKCkmJiFlLmdldElzUGxhY2Vob2xkZXIoKSYmISEoKHQ9bi5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgpfX19O2Z1bmN0aW9uIFFUKGUsdCxuKXtpZighKHQhPW51bGwmJnQubGVuZ3RoKXx8IW4pcmV0dXJuIGU7bGV0IHI9ZS5maWx0ZXIoZT0+IXQuaW5jbHVkZXMoZS5pZCkpO3JldHVybiBuPT09YHJlbW92ZWA/cjpbLi4udC5tYXAodD0+ZS5maW5kKGU9PmUuaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLC4uLnJdfXZhciAkVD17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uT3JkZXI6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5PcmRlckNoYW5nZTpUVChgY29sdW1uT3JkZXJgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRJbmRleD1RKGU9Plt1RSh0LGUpXSx0PT50LmZpbmRJbmRleCh0PT50LmlkPT09ZS5pZCksJCh0Lm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldEluZGV4YCkpLGUuZ2V0SXNGaXJzdENvbHVtbj1uPT51RSh0LG4pWzBdPy5pZD09PWUuaWQsZS5nZXRJc0xhc3RDb2x1bW49bj0+e2xldCByPXVFKHQsbik7cmV0dXJuIHJbci5sZW5ndGgtMV0/LmlkPT09ZS5pZH19LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtbk9yZGVyPXQ9PmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5PcmRlckNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uT3JkZXI9dD0+e2Uuc2V0Q29sdW1uT3JkZXIodD9bXTplLmluaXRpYWxTdGF0ZS5jb2x1bW5PcmRlcj8/W10pfSxlLl9nZXRPcmRlckNvbHVtbnNGbj1RKCgpPT5bZS5nZXRTdGF0ZSgpLmNvbHVtbk9yZGVyLGUuZ2V0U3RhdGUoKS5ncm91cGluZyxlLm9wdGlvbnMuZ3JvdXBlZENvbHVtbk1vZGVdLChlLHQsbik9PnI9PntsZXQgaT1bXTtpZighKGUhPW51bGwmJmUubGVuZ3RoKSlpPXI7ZWxzZXtsZXQgdD1bLi4uZV0sbj1bLi4ucl07Zm9yKDtuLmxlbmd0aCYmdC5sZW5ndGg7KXtsZXQgZT10LnNoaWZ0KCkscj1uLmZpbmRJbmRleCh0PT50LmlkPT09ZSk7cj4tMSYmaS5wdXNoKG4uc3BsaWNlKHIsMSlbMF0pfWk9Wy4uLmksLi4ubl19cmV0dXJuIFFUKGksdCxuKX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBfZ2V0T3JkZXJDb2x1bW5zRm5gKSl9fSxlRT0oKT0+KHtsZWZ0OltdLHJpZ2h0OltdfSksdEU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblBpbm5pbmc6ZUUoKSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtblBpbm5pbmdDaGFuZ2U6VFQoYGNvbHVtblBpbm5pbmdgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5waW49bj0+e2xldCByPWUuZ2V0TGVhZkNvbHVtbnMoKS5tYXAoZT0+ZS5pZCkuZmlsdGVyKEJvb2xlYW4pO3Quc2V0Q29sdW1uUGlubmluZyhlPT5uPT09YHJpZ2h0YD97bGVmdDooZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSxyaWdodDpbLi4uKGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdfTpuPT09YGxlZnRgP3tsZWZ0OlsuLi4oZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSwuLi5yXSxyaWdodDooZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSl9OntsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX0pfSxlLmdldENhblBpbj0oKT0+ZS5nZXRMZWFmQ29sdW1ucygpLnNvbWUoZT0+KGUuY29sdW1uRGVmLmVuYWJsZVBpbm5pbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVDb2x1bW5QaW5uaW5nPz90Lm9wdGlvbnMuZW5hYmxlUGlubmluZz8/ITApKSxlLmdldElzUGlubmVkPSgpPT57bGV0IG49ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKSx7bGVmdDpyLHJpZ2h0Oml9PXQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YGxlZnRgOm8/YHJpZ2h0YDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e3ZhciBuO2xldCByPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gcj8oKG49dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcpPT1udWxsfHwobj1uW3JdKT09bnVsbD92b2lkIDA6bi5pbmRleE9mKGUuaWQpKT8/LTE6MH19LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0Q2VudGVyVmlzaWJsZUNlbGxzPVEoKCk9PltlLl9nZXRBbGxWaXNpYmxlQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0LG4pPT57bGV0IHI9Wy4uLnQ/P1tdLC4uLm4/P1tdXTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaW5jbHVkZXMoZS5jb2x1bW4uaWQpKX0sJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclZpc2libGVDZWxsc2ApKSxlLmdldExlZnRWaXNpYmxlQ2VsbHM9USgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YGxlZnRgfSkpLCQodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRMZWZ0VmlzaWJsZUNlbGxzYCkpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHM9USgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuY29sdW1uLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOmByaWdodGB9KSksJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFJpZ2h0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5QaW5uaW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2UodCksZS5yZXNldENvbHVtblBpbm5pbmc9dD0+ZS5zZXRDb2x1bW5QaW5uaW5nKHQ/ZUUoKTplLmluaXRpYWxTdGF0ZT8uY29sdW1uUGlubmluZz8/ZUUoKSksZS5nZXRJc1NvbWVDb2x1bW5zUGlubmVkPXQ9PntsZXQgbj1lLmdldFN0YXRlKCkuY29sdW1uUGlubmluZztyZXR1cm4gdD8hIW5bdF0/Lmxlbmd0aDohIShuLmxlZnQ/Lmxlbmd0aHx8bi5yaWdodD8ubGVuZ3RoKX0sZS5nZXRMZWZ0TGVhZkNvbHVtbnM9USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRMZWZ0TGVhZkNvbHVtbnNgKSksZS5nZXRSaWdodExlYWZDb2x1bW5zPVEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldFJpZ2h0TGVhZkNvbHVtbnNgKSksZS5nZXRDZW50ZXJMZWFmQ29sdW1ucz1RKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQsbik9PntsZXQgcj1bLi4udD8/W10sLi4ubj8/W11dO3JldHVybiBlLmZpbHRlcihlPT4hci5pbmNsdWRlcyhlLmlkKSl9LCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRDZW50ZXJMZWFmQ29sdW1uc2ApKX19O2Z1bmN0aW9uIG5FKGUpe3JldHVybiBlfHwodHlwZW9mIGRvY3VtZW50PGB1YD9kb2N1bWVudDpudWxsKX12YXIgckU9e3NpemU6MTUwLG1pblNpemU6MjAsbWF4U2l6ZToyKio1My0xfSxpRT0oKT0+KHtzdGFydE9mZnNldDpudWxsLHN0YXJ0U2l6ZTpudWxsLGRlbHRhT2Zmc2V0Om51bGwsZGVsdGFQZXJjZW50YWdlOm51bGwsaXNSZXNpemluZ0NvbHVtbjohMSxjb2x1bW5TaXppbmdTdGFydDpbXX0pLGFFPXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT5yRSxnZXRJbml0aWFsU3RhdGU6ZT0+KHtjb2x1bW5TaXppbmc6e30sY29sdW1uU2l6aW5nSW5mbzppRSgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe2NvbHVtblJlc2l6ZU1vZGU6YG9uRW5kYCxjb2x1bW5SZXNpemVEaXJlY3Rpb246YGx0cmAsb25Db2x1bW5TaXppbmdDaGFuZ2U6VFQoYGNvbHVtblNpemluZ2AsZSksb25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlOlRUKGBjb2x1bW5TaXppbmdJbmZvYCxlKX0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UuZ2V0U2l6ZT0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdbZS5pZF07cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGUuY29sdW1uRGVmLm1pblNpemU/P3JFLm1pblNpemUsbj8/ZS5jb2x1bW5EZWYuc2l6ZT8/ckUuc2l6ZSksZS5jb2x1bW5EZWYubWF4U2l6ZT8/ckUubWF4U2l6ZSl9LGUuZ2V0U3RhcnQ9UShlPT5bZSx1RSh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKDAsZS5nZXRJbmRleCh0KSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLCQodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRTdGFydGApKSxlLmdldEFmdGVyPVEoZT0+W2UsdUUodCxlKSx0LmdldFN0YXRlKCkuY29sdW1uU2l6aW5nXSwodCxuKT0+bi5zbGljZShlLmdldEluZGV4KHQpKzEpLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKSwkKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0QWZ0ZXJgKSksZS5yZXNldFNpemU9KCk9Pnt0LnNldENvbHVtblNpemluZyh0PT57bGV0e1tlLmlkXTpuLC4uLnJ9PXQ7cmV0dXJuIHJ9KX0sZS5nZXRDYW5SZXNpemU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVSZXNpemluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtblJlc2l6aW5nPz8hMCksZS5nZXRJc1Jlc2l6aW5nPSgpPT50LmdldFN0YXRlKCkuY29sdW1uU2l6aW5nSW5mby5pc1Jlc2l6aW5nQ29sdW1uPT09ZS5pZH0sY3JlYXRlSGVhZGVyOihlLHQpPT57ZS5nZXRTaXplPSgpPT57bGV0IHQ9MCxuPWU9PntlLnN1YkhlYWRlcnMubGVuZ3RoP2Uuc3ViSGVhZGVycy5mb3JFYWNoKG4pOnQrPWUuY29sdW1uLmdldFNpemUoKT8/MH07cmV0dXJuIG4oZSksdH0sZS5nZXRTdGFydD0oKT0+e2lmKGUuaW5kZXg+MCl7bGV0IHQ9ZS5oZWFkZXJHcm91cC5oZWFkZXJzW2UuaW5kZXgtMV07cmV0dXJuIHQuZ2V0U3RhcnQoKSt0LmdldFNpemUoKX1yZXR1cm4gMH0sZS5nZXRSZXNpemVIYW5kbGVyPW49PntsZXQgcj10LmdldENvbHVtbihlLmNvbHVtbi5pZCksaT1yPy5nZXRDYW5SZXNpemUoKTtyZXR1cm4gYT0+e2lmKCFyfHwhaXx8KGEucGVyc2lzdD09bnVsbHx8YS5wZXJzaXN0KCksY0UoYSkmJmEudG91Y2hlcyYmYS50b3VjaGVzLmxlbmd0aD4xKSlyZXR1cm47bGV0IG89ZS5nZXRTaXplKCkscz1lP2UuZ2V0TGVhZkhlYWRlcnMoKS5tYXAoZT0+W2UuY29sdW1uLmlkLGUuY29sdW1uLmdldFNpemUoKV0pOltbci5pZCxyLmdldFNpemUoKV1dLGM9Y0UoYSk/TWF0aC5yb3VuZChhLnRvdWNoZXNbMF0uY2xpZW50WCk6YS5jbGllbnRYLGw9e30sdT0oZSxuKT0+e3R5cGVvZiBuPT1gbnVtYmVyYCYmKHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT57bGV0IHI9dC5vcHRpb25zLmNvbHVtblJlc2l6ZURpcmVjdGlvbj09PWBydGxgPy0xOjEsaT0obi0oZT8uc3RhcnRPZmZzZXQ/PzApKSpyLGE9TWF0aC5tYXgoaS8oZT8uc3RhcnRTaXplPz8wKSwtLjk5OTk5OSk7cmV0dXJuIGUuY29sdW1uU2l6aW5nU3RhcnQuZm9yRWFjaChlPT57bGV0W3Qsbl09ZTtsW3RdPU1hdGgucm91bmQoTWF0aC5tYXgobituKmEsMCkqMTAwKS8xMDB9KSx7Li4uZSxkZWx0YU9mZnNldDppLGRlbHRhUGVyY2VudGFnZTphfX0pLCh0Lm9wdGlvbnMuY29sdW1uUmVzaXplTW9kZT09PWBvbkNoYW5nZWB8fGU9PT1gZW5kYCkmJnQuc2V0Q29sdW1uU2l6aW5nKGU9Pih7Li4uZSwuLi5sfSkpKX0sZD1lPT51KGBtb3ZlYCxlKSxmPWU9Pnt1KGBlbmRgLGUpLHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT4oey4uLmUsaXNSZXNpemluZ0NvbHVtbjohMSxzdGFydE9mZnNldDpudWxsLHN0YXJ0U2l6ZTpudWxsLGRlbHRhT2Zmc2V0Om51bGwsZGVsdGFQZXJjZW50YWdlOm51bGwsY29sdW1uU2l6aW5nU3RhcnQ6W119KSl9LHA9bkUobiksbT17bW92ZUhhbmRsZXI6ZT0+ZChlLmNsaWVudFgpLHVwSGFuZGxlcjplPT57cD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbW91c2Vtb3ZlYCxtLm1vdmVIYW5kbGVyKSxwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlciksZihlLmNsaWVudFgpfX0saD17bW92ZUhhbmRsZXI6ZT0+KGUuY2FuY2VsYWJsZSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSxkKGUudG91Y2hlc1swXS5jbGllbnRYKSwhMSksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGB0b3VjaG1vdmVgLGgubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlciksZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGYoZS50b3VjaGVzWzBdPy5jbGllbnRYKX19LGc9c0UoKT97cGFzc2l2ZTohMX06ITE7Y0UoYSk/KHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNobW92ZWAsaC5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGB0b3VjaGVuZGAsaC51cEhhbmRsZXIsZykpOihwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZW1vdmVgLG0ubW92ZUhhbmRsZXIsZykscD8uYWRkRXZlbnRMaXN0ZW5lcihgbW91c2V1cGAsbS51cEhhbmRsZXIsZykpLHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT4oey4uLmUsc3RhcnRPZmZzZXQ6YyxzdGFydFNpemU6byxkZWx0YU9mZnNldDowLGRlbHRhUGVyY2VudGFnZTowLGNvbHVtblNpemluZ1N0YXJ0OnMsaXNSZXNpemluZ0NvbHVtbjpyLmlkfSkpfX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtblNpemluZz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZSh0KSxlLnNldENvbHVtblNpemluZ0luZm89dD0+ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nSW5mb0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nSW5mb0NoYW5nZSh0KSxlLnJlc2V0Q29sdW1uU2l6aW5nPXQ9PntlLnNldENvbHVtblNpemluZyh0P3t9OmUuaW5pdGlhbFN0YXRlLmNvbHVtblNpemluZz8/e30pfSxlLnJlc2V0SGVhZGVyU2l6ZUluZm89dD0+e2Uuc2V0Q29sdW1uU2l6aW5nSW5mbyh0P2lFKCk6ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nSW5mbz8/aUUoKSl9LGUuZ2V0VG90YWxTaXplPSgpPT5lLmdldEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldExlZnRUb3RhbFNpemU9KCk9PmUuZ2V0TGVmdEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldENlbnRlclRvdGFsU2l6ZT0oKT0+ZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKVswXT8uaGVhZGVycy5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCk/PzAsZS5nZXRSaWdodFRvdGFsU2l6ZT0oKT0+ZS5nZXRSaWdodEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MH19LG9FPW51bGw7ZnVuY3Rpb24gc0UoKXtpZih0eXBlb2Ygb0U9PWBib29sZWFuYClyZXR1cm4gb0U7bGV0IGU9ITE7dHJ5e2xldCB0PXtnZXQgcGFzc2l2ZSgpe3JldHVybiBlPSEwLCExfX0sbj0oKT0+e307d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG4sdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG4pfWNhdGNoe2U9ITF9cmV0dXJuIG9FPWUsb0V9ZnVuY3Rpb24gY0UoZSl7cmV0dXJuIGUudHlwZT09PWB0b3VjaHN0YXJ0YH12YXIgbEU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblZpc2liaWxpdHk6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlOlRUKGBjb2x1bW5WaXNpYmlsaXR5YCxlKX0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlVmlzaWJpbGl0eT1uPT57ZS5nZXRDYW5IaWRlKCkmJnQuc2V0Q29sdW1uVmlzaWJpbGl0eSh0PT4oey4uLnQsW2UuaWRdOm4/PyFlLmdldElzVmlzaWJsZSgpfSkpfSxlLmdldElzVmlzaWJsZT0oKT0+e2xldCBuPWUuY29sdW1ucztyZXR1cm4obi5sZW5ndGg/bi5zb21lKGU9PmUuZ2V0SXNWaXNpYmxlKCkpOnQuZ2V0U3RhdGUoKS5jb2x1bW5WaXNpYmlsaXR5Py5bZS5pZF0pPz8hMH0sZS5nZXRDYW5IaWRlPSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlSGlkaW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlSGlkaW5nPz8hMCksZS5nZXRUb2dnbGVWaXNpYmlsaXR5SGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlVmlzaWJpbGl0eT09bnVsbHx8ZS50b2dnbGVWaXNpYmlsaXR5KHQudGFyZ2V0LmNoZWNrZWQpfX0sY3JlYXRlUm93OihlLHQpPT57ZS5fZ2V0QWxsVmlzaWJsZUNlbGxzPVEoKCk9PltlLmdldEFsbENlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHldLGU9PmUuZmlsdGVyKGU9PmUuY29sdW1uLmdldElzVmlzaWJsZSgpKSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgX2dldEFsbFZpc2libGVDZWxsc2ApKSxlLmdldFZpc2libGVDZWxscz1RKCgpPT5bZS5nZXRMZWZ0VmlzaWJsZUNlbGxzKCksZS5nZXRDZW50ZXJWaXNpYmxlQ2VsbHMoKSxlLmdldFJpZ2h0VmlzaWJsZUNlbGxzKCldLChlLHQsbik9PlsuLi5lLC4uLnQsLi4ubl0sJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFZpc2libGVDZWxsc2ApKX0sY3JlYXRlVGFibGU6ZT0+e2xldCB0PSh0LG4pPT5RKCgpPT5bbigpLG4oKS5maWx0ZXIoZT0+ZS5nZXRJc1Zpc2libGUoKSkubWFwKGU9PmUuaWQpLmpvaW4oYF9gKV0sZT0+ZS5maWx0ZXIoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLHQpKTtlLmdldFZpc2libGVGbGF0Q29sdW1ucz10KGBnZXRWaXNpYmxlRmxhdENvbHVtbnNgLCgpPT5lLmdldEFsbEZsYXRDb2x1bW5zKCkpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zPXQoYGdldFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0QWxsTGVhZkNvbHVtbnMoKSksZS5nZXRMZWZ0VmlzaWJsZUxlYWZDb2x1bW5zPXQoYGdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldExlZnRMZWFmQ29sdW1ucygpKSxlLmdldFJpZ2h0VmlzaWJsZUxlYWZDb2x1bW5zPXQoYGdldFJpZ2h0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRSaWdodExlYWZDb2x1bW5zKCkpLGUuZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zPXQoYGdldENlbnRlclZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0Q2VudGVyTGVhZkNvbHVtbnMoKSksZS5zZXRDb2x1bW5WaXNpYmlsaXR5PXQ9PmUub3B0aW9ucy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UodCksZS5yZXNldENvbHVtblZpc2liaWxpdHk9dD0+e2Uuc2V0Q29sdW1uVmlzaWJpbGl0eSh0P3t9OmUuaW5pdGlhbFN0YXRlLmNvbHVtblZpc2liaWxpdHk/P3t9KX0sZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZT10PT57dD8/PSFlLmdldElzQWxsQ29sdW1uc1Zpc2libGUoKSxlLnNldENvbHVtblZpc2liaWxpdHkoZS5nZXRBbGxMZWFmQ29sdW1ucygpLnJlZHVjZSgoZSxuKT0+KHsuLi5lLFtuLmlkXTp0fHwhKG4uZ2V0Q2FuSGlkZSE9bnVsbCYmbi5nZXRDYW5IaWRlKCkpfSkse30pKX0sZS5nZXRJc0FsbENvbHVtbnNWaXNpYmxlPSgpPT4hZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+IShlLmdldElzVmlzaWJsZSE9bnVsbCYmZS5nZXRJc1Zpc2libGUoKSkpLGUuZ2V0SXNTb21lQ29sdW1uc1Zpc2libGU9KCk9PmUuZ2V0QWxsTGVhZkNvbHVtbnMoKS5zb21lKGU9PmUuZ2V0SXNWaXNpYmxlPT1udWxsP3ZvaWQgMDplLmdldElzVmlzaWJsZSgpKSxlLmdldFRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5SGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsQ29sdW1uc1Zpc2libGUodC50YXJnZXQ/LmNoZWNrZWQpfX19O2Z1bmN0aW9uIHVFKGUsdCl7cmV0dXJuIHQ/dD09PWBjZW50ZXJgP2UuZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zKCk6dD09PWBsZWZ0YD9lLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnMoKTplLmdldFJpZ2h0VmlzaWJsZUxlYWZDb2x1bW5zKCk6ZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKX12YXIgZEU9e2NyZWF0ZVRhYmxlOmU9PntlLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWw9ZS5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbChlLGBfX2dsb2JhbF9fYCksZS5nZXRHbG9iYWxGYWNldGVkUm93TW9kZWw9KCk9PmUub3B0aW9ucy5tYW51YWxGaWx0ZXJpbmd8fCFlLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWw/ZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCk6ZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsKCksZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcz1lLm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyYmZS5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMoZSxgX19nbG9iYWxfX2ApLGUuZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcz0oKT0+ZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcz9lLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzKCk6bmV3IE1hcCxlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzPWUub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyhlLGBfX2dsb2JhbF9fYCksZS5nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzPSgpPT57aWYoZS5fZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcylyZXR1cm4gZS5fZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcygpfX19LGZFPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtnbG9iYWxGaWx0ZXI6dm9pZCAwLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uR2xvYmFsRmlsdGVyQ2hhbmdlOlRUKGBnbG9iYWxGaWx0ZXJgLGUpLGdsb2JhbEZpbHRlckZuOmBhdXRvYCxnZXRDb2x1bW5DYW5HbG9iYWxGaWx0ZXI6dD0+e3ZhciBuO2xldCByPShuPWUuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0pPT1udWxsfHwobj1uLl9nZXRBbGxDZWxsc0J5Q29sdW1uSWQoKVt0LmlkXSk9PW51bGw/dm9pZCAwOm4uZ2V0VmFsdWUoKTtyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgfHx0eXBlb2Ygcj09YG51bWJlcmB9fSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRDYW5HbG9iYWxGaWx0ZXI9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJigodC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcj09bnVsbD92b2lkIDA6dC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcihlKSk/PyEwKSYmISFlLmFjY2Vzc29yRm59LGNyZWF0ZVRhYmxlOmU9PntlLmdldEdsb2JhbEF1dG9GaWx0ZXJGbj0oKT0+S1QuaW5jbHVkZXNTdHJpbmcsZS5nZXRHbG9iYWxGaWx0ZXJGbj0oKT0+e2xldHtnbG9iYWxGaWx0ZXJGbjp0fT1lLm9wdGlvbnM7cmV0dXJuIEVUKHQpP3Q6dD09PWBhdXRvYD9lLmdldEdsb2JhbEF1dG9GaWx0ZXJGbigpOmUub3B0aW9ucy5maWx0ZXJGbnM/Llt0XT8/S1RbdF19LGUuc2V0R2xvYmFsRmlsdGVyPXQ9PntlLm9wdGlvbnMub25HbG9iYWxGaWx0ZXJDaGFuZ2U9PW51bGx8fGUub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZSh0KX0sZS5yZXNldEdsb2JhbEZpbHRlcj10PT57ZS5zZXRHbG9iYWxGaWx0ZXIodD92b2lkIDA6ZS5pbml0aWFsU3RhdGUuZ2xvYmFsRmlsdGVyKX19fSxwRT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7ZXhwYW5kZWQ6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25FeHBhbmRlZENoYW5nZTpUVChgZXhwYW5kZWRgLGUpLHBhZ2luYXRlRXhwYW5kZWRSb3dzOiEwfSksY3JlYXRlVGFibGU6ZT0+e2xldCB0PSExLG49ITE7ZS5fYXV0b1Jlc2V0RXhwYW5kZWQ9KCk9PntpZighdCl7ZS5fcXVldWUoKCk9Pnt0PSEwfSk7cmV0dXJufWlmKGUub3B0aW9ucy5hdXRvUmVzZXRBbGw/P2Uub3B0aW9ucy5hdXRvUmVzZXRFeHBhbmRlZD8/IWUub3B0aW9ucy5tYW51YWxFeHBhbmRpbmcpe2lmKG4pcmV0dXJuO249ITAsZS5fcXVldWUoKCk9PntlLnJlc2V0RXhwYW5kZWQoKSxuPSExfSl9fSxlLnNldEV4cGFuZGVkPXQ9PmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25FeHBhbmRlZENoYW5nZSh0KSxlLnRvZ2dsZUFsbFJvd3NFeHBhbmRlZD10PT57dD8/IWUuZ2V0SXNBbGxSb3dzRXhwYW5kZWQoKT9lLnNldEV4cGFuZGVkKCEwKTplLnNldEV4cGFuZGVkKHt9KX0sZS5yZXNldEV4cGFuZGVkPXQ9PntlLnNldEV4cGFuZGVkKHQ/e306ZS5pbml0aWFsU3RhdGU/LmV4cGFuZGVkPz97fSl9LGUuZ2V0Q2FuU29tZVJvd3NFeHBhbmQ9KCk9PmUuZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsKCkuZmxhdFJvd3Muc29tZShlPT5lLmdldENhbkV4cGFuZCgpKSxlLmdldFRvZ2dsZUFsbFJvd3NFeHBhbmRlZEhhbmRsZXI9KCk9PnQ9Pnt0LnBlcnNpc3Q9PW51bGx8fHQucGVyc2lzdCgpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkKCl9LGUuZ2V0SXNTb21lUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0PT09ITB8fE9iamVjdC52YWx1ZXModCkuc29tZShCb29sZWFuKX0sZS5nZXRJc0FsbFJvd3NFeHBhbmRlZD0oKT0+e2xldCB0PWUuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4gdHlwZW9mIHQ9PWBib29sZWFuYD90PT09ITA6ISghT2JqZWN0LmtleXModCkubGVuZ3RofHxlLmdldFJvd01vZGVsKCkuZmxhdFJvd3Muc29tZShlPT4hZS5nZXRJc0V4cGFuZGVkKCkpKX0sZS5nZXRFeHBhbmRlZERlcHRoPSgpPT57bGV0IHQ9MDtyZXR1cm4oZS5nZXRTdGF0ZSgpLmV4cGFuZGVkPT09ITA/T2JqZWN0LmtleXMoZS5nZXRSb3dNb2RlbCgpLnJvd3NCeUlkKTpPYmplY3Qua2V5cyhlLmdldFN0YXRlKCkuZXhwYW5kZWQpKS5mb3JFYWNoKGU9PntsZXQgbj1lLnNwbGl0KGAuYCk7dD1NYXRoLm1heCh0LG4ubGVuZ3RoKX0pLHR9LGUuZ2V0UHJlRXhwYW5kZWRSb3dNb2RlbD0oKT0+ZS5nZXRTb3J0ZWRSb3dNb2RlbCgpLGUuZ2V0RXhwYW5kZWRSb3dNb2RlbD0oKT0+KCFlLl9nZXRFeHBhbmRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbCYmKGUuX2dldEV4cGFuZGVkUm93TW9kZWw9ZS5vcHRpb25zLmdldEV4cGFuZGVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxFeHBhbmRpbmd8fCFlLl9nZXRFeHBhbmRlZFJvd01vZGVsP2UuZ2V0UHJlRXhwYW5kZWRSb3dNb2RlbCgpOmUuX2dldEV4cGFuZGVkUm93TW9kZWwoKSl9LGNyZWF0ZVJvdzooZSx0KT0+e2UudG9nZ2xlRXhwYW5kZWQ9bj0+e3Quc2V0RXhwYW5kZWQocj0+e2xldCBpPXI9PT0hMHx8ISEociE9bnVsbCYmcltlLmlkXSksYT17fTtpZihyPT09ITA/T2JqZWN0LmtleXModC5nZXRSb3dNb2RlbCgpLnJvd3NCeUlkKS5mb3JFYWNoKGU9PnthW2VdPSEwfSk6YT1yLG4/Pz0haSwhaSYmbilyZXR1cm57Li4uYSxbZS5pZF06ITB9O2lmKGkmJiFuKXtsZXR7W2UuaWRdOnQsLi4ubn09YTtyZXR1cm4gbn1yZXR1cm4gcn0pfSxlLmdldElzRXhwYW5kZWQ9KCk9PntsZXQgbj10LmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuISEoKHQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkPT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuZ2V0SXNSb3dFeHBhbmRlZChlKSk/PyhuPT09ITB8fG4/LltlLmlkXSkpfSxlLmdldENhbkV4cGFuZD0oKT0+e3ZhciBuO3JldHVybih0Lm9wdGlvbnMuZ2V0Um93Q2FuRXhwYW5kPT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuZ2V0Um93Q2FuRXhwYW5kKGUpKT8/KCh0Lm9wdGlvbnMuZW5hYmxlRXhwYW5kaW5nPz8hMCkmJiEhKChuPWUuc3ViUm93cykhPW51bGwmJm4ubGVuZ3RoKSl9LGUuZ2V0SXNBbGxQYXJlbnRzRXhwYW5kZWQ9KCk9PntsZXQgbj0hMCxyPWU7Zm9yKDtuJiZyLnBhcmVudElkOylyPXQuZ2V0Um93KHIucGFyZW50SWQsITApLG49ci5nZXRJc0V4cGFuZGVkKCk7cmV0dXJuIG59LGUuZ2V0VG9nZ2xlRXhwYW5kZWRIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5FeHBhbmQoKTtyZXR1cm4oKT0+e3QmJmUudG9nZ2xlRXhwYW5kZWQoKX19fX0sbUU9MCxoRT0xMCxnRT0oKT0+KHtwYWdlSW5kZXg6bUUscGFnZVNpemU6aEV9KSxfRT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Li4uZSxwYWdpbmF0aW9uOnsuLi5nRSgpLC4uLmU/LnBhZ2luYXRpb259fSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvblBhZ2luYXRpb25DaGFuZ2U6VFQoYHBhZ2luYXRpb25gLGUpfSksY3JlYXRlVGFibGU6ZT0+e2xldCB0PSExLG49ITE7ZS5fYXV0b1Jlc2V0UGFnZUluZGV4PSgpPT57aWYoIXQpe2UuX3F1ZXVlKCgpPT57dD0hMH0pO3JldHVybn1pZihlLm9wdGlvbnMuYXV0b1Jlc2V0QWxsPz9lLm9wdGlvbnMuYXV0b1Jlc2V0UGFnZUluZGV4Pz8hZS5vcHRpb25zLm1hbnVhbFBhZ2luYXRpb24pe2lmKG4pcmV0dXJuO249ITAsZS5fcXVldWUoKCk9PntlLnJlc2V0UGFnZUluZGV4KCksbj0hMX0pfX0sZS5zZXRQYWdpbmF0aW9uPXQ9PmUub3B0aW9ucy5vblBhZ2luYXRpb25DaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vblBhZ2luYXRpb25DaGFuZ2UoZT0+d1QodCxlKSksZS5yZXNldFBhZ2luYXRpb249dD0+e2Uuc2V0UGFnaW5hdGlvbih0P2dFKCk6ZS5pbml0aWFsU3RhdGUucGFnaW5hdGlvbj8/Z0UoKSl9LGUuc2V0UGFnZUluZGV4PXQ9PntlLnNldFBhZ2luYXRpb24obj0+e2xldCByPXdUKHQsbi5wYWdlSW5kZXgpLGk9ZS5vcHRpb25zLnBhZ2VDb3VudD09PXZvaWQgMHx8ZS5vcHRpb25zLnBhZ2VDb3VudD09PS0xPzIqKjUzLTE6ZS5vcHRpb25zLnBhZ2VDb3VudC0xO3JldHVybiByPU1hdGgubWF4KDAsTWF0aC5taW4ocixpKSksey4uLm4scGFnZUluZGV4OnJ9fSl9LGUucmVzZXRQYWdlSW5kZXg9dD0+e3ZhciBuO2Uuc2V0UGFnZUluZGV4KHQ/bUU6KChuPWUuaW5pdGlhbFN0YXRlKT09bnVsbHx8KG49bi5wYWdpbmF0aW9uKT09bnVsbD92b2lkIDA6bi5wYWdlSW5kZXgpPz9tRSl9LGUucmVzZXRQYWdlU2l6ZT10PT57dmFyIG47ZS5zZXRQYWdlU2l6ZSh0P2hFOigobj1lLmluaXRpYWxTdGF0ZSk9PW51bGx8fChuPW4ucGFnaW5hdGlvbik9PW51bGw/dm9pZCAwOm4ucGFnZVNpemUpPz9oRSl9LGUuc2V0UGFnZVNpemU9dD0+e2Uuc2V0UGFnaW5hdGlvbihlPT57bGV0IG49TWF0aC5tYXgoMSx3VCh0LGUucGFnZVNpemUpKSxyPWUucGFnZVNpemUqZS5wYWdlSW5kZXgsaT1NYXRoLmZsb29yKHIvbik7cmV0dXJuey4uLmUscGFnZUluZGV4OmkscGFnZVNpemU6bn19KX0sZS5zZXRQYWdlQ291bnQ9dD0+ZS5zZXRQYWdpbmF0aW9uKG49PntsZXQgcj13VCh0LGUub3B0aW9ucy5wYWdlQ291bnQ/Py0xKTtyZXR1cm4gdHlwZW9mIHI9PWBudW1iZXJgJiYocj1NYXRoLm1heCgtMSxyKSksey4uLm4scGFnZUNvdW50OnJ9fSksZS5nZXRQYWdlT3B0aW9ucz1RKCgpPT5bZS5nZXRQYWdlQ291bnQoKV0sZT0+e2xldCB0PVtdO3JldHVybiBlJiZlPjAmJih0PVsuLi5BcnJheShlKV0uZmlsbChudWxsKS5tYXAoKGUsdCk9PnQpKSx0fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFBhZ2VPcHRpb25zYCkpLGUuZ2V0Q2FuUHJldmlvdXNQYWdlPSgpPT5lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXg+MCxlLmdldENhbk5leHRQYWdlPSgpPT57bGV0e3BhZ2VJbmRleDp0fT1lLmdldFN0YXRlKCkucGFnaW5hdGlvbixuPWUuZ2V0UGFnZUNvdW50KCk7cmV0dXJuIG49PT0tMXx8biE9PTAmJnQ8bi0xfSxlLnByZXZpb3VzUGFnZT0oKT0+ZS5zZXRQYWdlSW5kZXgoZT0+ZS0xKSxlLm5leHRQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lKzEpLGUuZmlyc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleCgwKSxlLmxhc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlLmdldFBhZ2VDb3VudCgpLTEpLGUuZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsPSgpPT5lLmdldEV4cGFuZGVkUm93TW9kZWwoKSxlLmdldFBhZ2luYXRpb25Sb3dNb2RlbD0oKT0+KCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwmJmUub3B0aW9ucy5nZXRQYWdpbmF0aW9uUm93TW9kZWwmJihlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw9ZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFBhZ2luYXRpb258fCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTplLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwoKSksZS5nZXRQYWdlQ291bnQ9KCk9PmUub3B0aW9ucy5wYWdlQ291bnQ/P01hdGguY2VpbChlLmdldFJvd0NvdW50KCkvZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb24ucGFnZVNpemUpLGUuZ2V0Um93Q291bnQ9KCk9PmUub3B0aW9ucy5yb3dDb3VudD8/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5yb3dzLmxlbmd0aH19LHZFPSgpPT4oe3RvcDpbXSxib3R0b206W119KSx5RT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93UGlubmluZzp2RSgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93UGlubmluZ0NoYW5nZTpUVChgcm93UGlubmluZ2AsZSl9KSxjcmVhdGVSb3c6KGUsdCk9PntlLnBpbj0obixyLGkpPT57bGV0IGE9cj9lLmdldExlYWZSb3dzKCkubWFwKGU9PntsZXR7aWQ6dH09ZTtyZXR1cm4gdH0pOltdLG89aT9lLmdldFBhcmVudFJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10scz1uZXcgU2V0KFsuLi5vLGUuaWQsLi4uYV0pO3Quc2V0Um93UGlubmluZyhlPT5uPT09YGJvdHRvbWA/e3RvcDooZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSxib3R0b206Wy4uLihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLC4uLkFycmF5LmZyb20ocyldfTpuPT09YHRvcGA/e3RvcDpbLi4uKGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV0sYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfTp7dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTooZT8uYm90dG9tPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKX0pfSxlLmdldENhblBpbj0oKT0+e2xldHtlbmFibGVSb3dQaW5uaW5nOm4sZW5hYmxlUGlubmluZzpyfT10Lm9wdGlvbnM7cmV0dXJuIHR5cGVvZiBuPT1gZnVuY3Rpb25gP24oZSk6bj8/cj8/ITB9LGUuZ2V0SXNQaW5uZWQ9KCk9PntsZXQgbj1bZS5pZF0se3RvcDpyLGJvdHRvbTppfT10LmdldFN0YXRlKCkucm93UGlubmluZyxhPW4uc29tZShlPT5yPy5pbmNsdWRlcyhlKSksbz1uLnNvbWUoZT0+aT8uaW5jbHVkZXMoZSkpO3JldHVybiBhP2B0b3BgOm8/YGJvdHRvbWA6ITF9LGUuZ2V0UGlubmVkSW5kZXg9KCk9PntsZXQgbj1lLmdldElzUGlubmVkKCk7cmV0dXJuIG4/KChuPT09YHRvcGA/dC5nZXRUb3BSb3dzKCk6dC5nZXRCb3R0b21Sb3dzKCkpPy5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSkpPy5pbmRleE9mKGUuaWQpPz8tMTotMX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldFJvd1Bpbm5pbmc9dD0+ZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZSh0KSxlLnJlc2V0Um93UGlubmluZz10PT5lLnNldFJvd1Bpbm5pbmcodD92RSgpOmUuaW5pdGlhbFN0YXRlPy5yb3dQaW5uaW5nPz92RSgpKSxlLmdldElzU29tZVJvd3NQaW5uZWQ9dD0+e2xldCBuPWUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nO3JldHVybiB0PyEhblt0XT8ubGVuZ3RoOiEhKG4udG9wPy5sZW5ndGh8fG4uYm90dG9tPy5sZW5ndGgpfSxlLl9nZXRQaW5uZWRSb3dzPSh0LG4scik9PihlLm9wdGlvbnMua2VlcFBpbm5lZFJvd3M/PyEwPyhuPz9bXSkubWFwKHQ9PntsZXQgbj1lLmdldFJvdyh0LCEwKTtyZXR1cm4gbi5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZCgpP246bnVsbH0pOihuPz9bXSkubWFwKGU9PnQuZmluZCh0PT50LmlkPT09ZSkpKS5maWx0ZXIoQm9vbGVhbikubWFwKGU9Pih7Li4uZSxwb3NpdGlvbjpyfSkpLGUuZ2V0VG9wUm93cz1RKCgpPT5bZS5nZXRSb3dNb2RlbCgpLnJvd3MsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcudG9wXSwodCxuKT0+ZS5fZ2V0UGlubmVkUm93cyh0LG4sYHRvcGApLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRUb3BSb3dzYCkpLGUuZ2V0Qm90dG9tUm93cz1RKCgpPT5bZS5nZXRSb3dNb2RlbCgpLnJvd3MsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwodCxuKT0+ZS5fZ2V0UGlubmVkUm93cyh0LG4sYGJvdHRvbWApLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRCb3R0b21Sb3dzYCkpLGUuZ2V0Q2VudGVyUm93cz1RKCgpPT5bZS5nZXRSb3dNb2RlbCgpLnJvd3MsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcudG9wLGUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLmJvdHRvbV0sKGUsdCxuKT0+e2xldCByPW5ldyBTZXQoWy4uLnQ/P1tdLC4uLm4/P1tdXSk7cmV0dXJuIGUuZmlsdGVyKGU9PiFyLmhhcyhlLmlkKSl9LCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRDZW50ZXJSb3dzYCkpfX0sYkU9e2dldEluaXRpYWxTdGF0ZTplPT4oe3Jvd1NlbGVjdGlvbjp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvblJvd1NlbGVjdGlvbkNoYW5nZTpUVChgcm93U2VsZWN0aW9uYCxlKSxlbmFibGVSb3dTZWxlY3Rpb246ITAsZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb246ITAsZW5hYmxlU3ViUm93U2VsZWN0aW9uOiEwfSksY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93U2VsZWN0aW9uPXQ9PmUub3B0aW9ucy5vblJvd1NlbGVjdGlvbkNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlKHQpLGUucmVzZXRSb3dTZWxlY3Rpb249dD0+ZS5zZXRSb3dTZWxlY3Rpb24odD97fTplLmluaXRpYWxTdGF0ZS5yb3dTZWxlY3Rpb24/P3t9KSxlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZD10PT57ZS5zZXRSb3dTZWxlY3Rpb24obj0+e3Q9dD09PXZvaWQgMD8hZS5nZXRJc0FsbFJvd3NTZWxlY3RlZCgpOnQ7bGV0IHI9ey4uLm59LGk9ZS5nZXRQcmVHcm91cGVkUm93TW9kZWwoKS5mbGF0Um93cztyZXR1cm4gdD9pLmZvckVhY2goZT0+e2UuZ2V0Q2FuU2VsZWN0KCkmJihyW2UuaWRdPSEwKX0pOmkuZm9yRWFjaChlPT57ZGVsZXRlIHJbZS5pZF19KSxyfSl9LGUudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZD10PT5lLnNldFJvd1NlbGVjdGlvbihuPT57bGV0IHI9dD09PXZvaWQgMD8hZS5nZXRJc0FsbFBhZ2VSb3dzU2VsZWN0ZWQoKTp0LGk9ey4uLm59O3JldHVybiBlLmdldFJvd01vZGVsKCkucm93cy5mb3JFYWNoKHQ9Pnt4RShpLHQuaWQsciwhMCxlKX0pLGl9KSxlLmdldFByZVNlbGVjdGVkUm93TW9kZWw9KCk9PmUuZ2V0Q29yZVJvd01vZGVsKCksZS5nZXRTZWxlY3RlZFJvd01vZGVsPVEoKCk9PltlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLGUuZ2V0Q29yZVJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/U0UoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRTZWxlY3RlZFJvd01vZGVsYCkpLGUuZ2V0RmlsdGVyZWRTZWxlY3RlZFJvd01vZGVsPVEoKCk9PltlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLGUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpXSwodCxuKT0+T2JqZWN0LmtleXModCkubGVuZ3RoP1NFKGUsbik6e3Jvd3M6W10sZmxhdFJvd3M6W10scm93c0J5SWQ6e319LCQoZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0RmlsdGVyZWRTZWxlY3RlZFJvd01vZGVsYCkpLGUuZ2V0R3JvdXBlZFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRTb3J0ZWRSb3dNb2RlbCgpXSwodCxuKT0+T2JqZWN0LmtleXModCkubGVuZ3RoP1NFKGUsbik6e3Jvd3M6W10sZmxhdFJvd3M6W10scm93c0J5SWQ6e319LCQoZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0R3JvdXBlZFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRJc0FsbFJvd3NTZWxlY3RlZD0oKT0+e2xldCB0PWUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLmZsYXRSb3dzLHtyb3dTZWxlY3Rpb246bn09ZS5nZXRTdGF0ZSgpLHI9ISEodC5sZW5ndGgmJk9iamVjdC5rZXlzKG4pLmxlbmd0aCk7cmV0dXJuIHImJnQuc29tZShlPT5lLmdldENhblNlbGVjdCgpJiYhbltlLmlkXSkmJihyPSExKSxyfSxlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZD0oKT0+e2xldCB0PWUuZ2V0UGFnaW5hdGlvblJvd01vZGVsKCkuZmxhdFJvd3MuZmlsdGVyKGU9PmUuZ2V0Q2FuU2VsZWN0KCkpLHtyb3dTZWxlY3Rpb246bn09ZS5nZXRTdGF0ZSgpLHI9ISF0Lmxlbmd0aDtyZXR1cm4gciYmdC5zb21lKGU9PiFuW2UuaWRdKSYmKHI9ITEpLHJ9LGUuZ2V0SXNTb21lUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9T2JqZWN0LmtleXMoZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbj8/e30pLmxlbmd0aDtyZXR1cm4gdD4wJiZ0PGUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLmZsYXRSb3dzLmxlbmd0aH0sZS5nZXRJc1NvbWVQYWdlUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cztyZXR1cm4hZS5nZXRJc0FsbFBhZ2VSb3dzU2VsZWN0ZWQoKSYmdC5maWx0ZXIoZT0+ZS5nZXRDYW5TZWxlY3QoKSkuc29tZShlPT5lLmdldElzU2VsZWN0ZWQoKXx8ZS5nZXRJc1NvbWVTZWxlY3RlZCgpKX0sZS5nZXRUb2dnbGVBbGxSb3dzU2VsZWN0ZWRIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxSb3dzU2VsZWN0ZWQodC50YXJnZXQuY2hlY2tlZCl9LGUuZ2V0VG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZEhhbmRsZXI9KCk9PnQ9PntlLnRvZ2dsZUFsbFBhZ2VSb3dzU2VsZWN0ZWQodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLnRvZ2dsZVNlbGVjdGVkPShuLHIpPT57bGV0IGk9ZS5nZXRJc1NlbGVjdGVkKCk7dC5zZXRSb3dTZWxlY3Rpb24oYT0+e2lmKG49bj09PXZvaWQgMD8haTpuLGUuZ2V0Q2FuU2VsZWN0KCkmJmk9PT1uKXJldHVybiBhO2xldCBvPXsuLi5hfTtyZXR1cm4geEUobyxlLmlkLG4scj8uc2VsZWN0Q2hpbGRyZW4/PyEwLHQpLG99KX0sZS5nZXRJc1NlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIENFKGUsbil9LGUuZ2V0SXNTb21lU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gd0UoZSxuKT09PWBzb21lYH0sZS5nZXRJc0FsbFN1YlJvd3NTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiB3RShlLG4pPT09YGFsbGB9LGUuZ2V0Q2FuU2VsZWN0PSgpPT50eXBlb2YgdC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb24/PyEwLGUuZ2V0Q2FuU2VsZWN0U3ViUm93cz0oKT0+dHlwZW9mIHQub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbihlKTp0Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uPz8hMCxlLmdldENhbk11bHRpU2VsZWN0PSgpPT50eXBlb2YgdC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbihlKTp0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb24/PyEwLGUuZ2V0VG9nZ2xlU2VsZWN0ZWRIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5TZWxlY3QoKTtyZXR1cm4gbj0+e3QmJmUudG9nZ2xlU2VsZWN0ZWQobi50YXJnZXQ/LmNoZWNrZWQpfX19fSx4RT0oZSx0LG4scixpKT0+e3ZhciBhO2xldCBvPWkuZ2V0Um93KHQsITApO24/KG8uZ2V0Q2FuTXVsdGlTZWxlY3QoKXx8T2JqZWN0LmtleXMoZSkuZm9yRWFjaCh0PT5kZWxldGUgZVt0XSksby5nZXRDYW5TZWxlY3QoKSYmKGVbdF09ITApKTpkZWxldGUgZVt0XSxyJiYoYT1vLnN1YlJvd3MpIT1udWxsJiZhLmxlbmd0aCYmby5nZXRDYW5TZWxlY3RTdWJSb3dzKCkmJm8uc3ViUm93cy5mb3JFYWNoKHQ9PnhFKGUsdC5pZCxuLHIsaSkpfTtmdW5jdGlvbiBTRShlLHQpe2xldCBuPWUuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24scj1bXSxpPXt9LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZT0+e3ZhciB0O2xldCBvPUNFKGUsbik7aWYobyYmKHIucHVzaChlKSxpW2UuaWRdPWUpLCh0PWUuc3ViUm93cykhPW51bGwmJnQubGVuZ3RoJiYoZT17Li4uZSxzdWJSb3dzOmEoZS5zdWJSb3dzKX0pLG8pcmV0dXJuIGV9KS5maWx0ZXIoQm9vbGVhbil9O3JldHVybntyb3dzOmEodC5yb3dzKSxmbGF0Um93czpyLHJvd3NCeUlkOml9fWZ1bmN0aW9uIENFKGUsdCl7cmV0dXJuIHRbZS5pZF0/PyExfWZ1bmN0aW9uIHdFKGUsdCxuKXt2YXIgcjtpZighKChyPWUuc3ViUm93cykhPW51bGwmJnIubGVuZ3RoKSlyZXR1cm4hMTtsZXQgaT0hMCxhPSExO3JldHVybiBlLnN1YlJvd3MuZm9yRWFjaChlPT57aWYoIShhJiYhaSkmJihlLmdldENhblNlbGVjdCgpJiYoQ0UoZSx0KT9hPSEwOmk9ITEpLGUuc3ViUm93cyYmZS5zdWJSb3dzLmxlbmd0aCkpe2xldCBuPXdFKGUsdCk7bj09PWBhbGxgP2E9ITA6KG49PT1gc29tZWAmJihhPSEwKSxpPSExKX19KSxpP2BhbGxgOmE/YHNvbWVgOiExfXZhciBURT0vKFswLTldKykvZ20sRUU9KGUsdCxuKT0+UEUoTkUoZS5nZXRWYWx1ZShuKSkudG9Mb3dlckNhc2UoKSxORSh0LmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpKSxERT0oZSx0LG4pPT5QRShORShlLmdldFZhbHVlKG4pKSxORSh0LmdldFZhbHVlKG4pKSksT0U9KGUsdCxuKT0+TUUoTkUoZS5nZXRWYWx1ZShuKSkudG9Mb3dlckNhc2UoKSxORSh0LmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpKSxrRT0oZSx0LG4pPT5NRShORShlLmdldFZhbHVlKG4pKSxORSh0LmdldFZhbHVlKG4pKSksQUU9KGUsdCxuKT0+e2xldCByPWUuZ2V0VmFsdWUobiksaT10LmdldFZhbHVlKG4pO3JldHVybiByPmk/MTpyPGk/LTE6MH0sakU9KGUsdCxuKT0+TUUoZS5nZXRWYWx1ZShuKSx0LmdldFZhbHVlKG4pKTtmdW5jdGlvbiBNRShlLHQpe3JldHVybiBlPT09dD8wOmU+dD8xOi0xfWZ1bmN0aW9uIE5FKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmA/aXNOYU4oZSl8fGU9PT0xLzB8fGU9PT0tMS8wP2BgOlN0cmluZyhlKTp0eXBlb2YgZT09YHN0cmluZ2A/ZTpgYH1mdW5jdGlvbiBQRShlLHQpe2xldCBuPWUuc3BsaXQoVEUpLmZpbHRlcihCb29sZWFuKSxyPXQuc3BsaXQoVEUpLmZpbHRlcihCb29sZWFuKTtmb3IoO24ubGVuZ3RoJiZyLmxlbmd0aDspe2xldCBlPW4uc2hpZnQoKSx0PXIuc2hpZnQoKSxpPXBhcnNlSW50KGUsMTApLGE9cGFyc2VJbnQodCwxMCksbz1baSxhXS5zb3J0KCk7aWYoaXNOYU4ob1swXSkpe2lmKGU+dClyZXR1cm4gMTtpZih0PmUpcmV0dXJuLTE7Y29udGludWV9aWYoaXNOYU4ob1sxXSkpcmV0dXJuIGlzTmFOKGkpPy0xOjE7aWYoaT5hKXJldHVybiAxO2lmKGE+aSlyZXR1cm4tMX1yZXR1cm4gbi5sZW5ndGgtci5sZW5ndGh9dmFyIEZFPXthbHBoYW51bWVyaWM6RUUsYWxwaGFudW1lcmljQ2FzZVNlbnNpdGl2ZTpERSx0ZXh0Ok9FLHRleHRDYXNlU2Vuc2l0aXZlOmtFLGRhdGV0aW1lOkFFLGJhc2ljOmpFfSxJRT1bTlQsbEUsJFQsdEUsSVQsSlQsZEUsZkUse2dldEluaXRpYWxTdGF0ZTplPT4oe3NvcnRpbmc6W10sLi4uZX0pLGdldERlZmF1bHRDb2x1bW5EZWY6KCk9Pih7c29ydGluZ0ZuOmBhdXRvYCxzb3J0VW5kZWZpbmVkOjF9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uU29ydGluZ0NoYW5nZTpUVChgc29ydGluZ2AsZSksaXNNdWx0aVNvcnRFdmVudDplPT5lLnNoaWZ0S2V5fSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRBdXRvU29ydGluZ0ZuPSgpPT57bGV0IG49dC5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Muc2xpY2UoMTApLHI9ITE7Zm9yKGxldCB0IG9mIG4pe2xldCBuPXQ/LmdldFZhbHVlKGUuaWQpO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PWBbb2JqZWN0IERhdGVdYClyZXR1cm4gRkUuZGF0ZXRpbWU7aWYodHlwZW9mIG49PWBzdHJpbmdgJiYocj0hMCxuLnNwbGl0KFRFKS5sZW5ndGg+MSkpcmV0dXJuIEZFLmFscGhhbnVtZXJpY31yZXR1cm4gcj9GRS50ZXh0OkZFLmJhc2ljfSxlLmdldEF1dG9Tb3J0RGlyPSgpPT50eXBlb2YgdC5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpPT1gc3RyaW5nYD9gYXNjYDpgZGVzY2AsZS5nZXRTb3J0aW5nRm49KCk9PntpZighZSl0aHJvdyBFcnJvcigpO3JldHVybiBFVChlLmNvbHVtbkRlZi5zb3J0aW5nRm4pP2UuY29sdW1uRGVmLnNvcnRpbmdGbjplLmNvbHVtbkRlZi5zb3J0aW5nRm49PT1gYXV0b2A/ZS5nZXRBdXRvU29ydGluZ0ZuKCk6dC5vcHRpb25zLnNvcnRpbmdGbnM/LltlLmNvbHVtbkRlZi5zb3J0aW5nRm5dPz9GRVtlLmNvbHVtbkRlZi5zb3J0aW5nRm5dfSxlLnRvZ2dsZVNvcnRpbmc9KG4scik9PntsZXQgaT1lLmdldE5leHRTb3J0aW5nT3JkZXIoKSxhPW4hPW51bGw7dC5zZXRTb3J0aW5nKG89PntsZXQgcz1vPy5maW5kKHQ9PnQuaWQ9PT1lLmlkKSxjPW8/LmZpbmRJbmRleCh0PT50LmlkPT09ZS5pZCksbD1bXSx1LGQ9YT9uOmk9PT1gZGVzY2A7cmV0dXJuIHU9byE9bnVsbCYmby5sZW5ndGgmJmUuZ2V0Q2FuTXVsdGlTb3J0KCkmJnI/cz9gdG9nZ2xlYDpgYWRkYDpvIT1udWxsJiZvLmxlbmd0aCYmYyE9PW8ubGVuZ3RoLTE/YHJlcGxhY2VgOnM/YHRvZ2dsZWA6YHJlcGxhY2VgLHU9PT1gdG9nZ2xlYCYmKGF8fGl8fCh1PWByZW1vdmVgKSksdT09PWBhZGRgPyhsPVsuLi5vLHtpZDplLmlkLGRlc2M6ZH1dLGwuc3BsaWNlKDAsbC5sZW5ndGgtKHQub3B0aW9ucy5tYXhNdWx0aVNvcnRDb2xDb3VudD8/MioqNTMtMSkpKTpsPXU9PT1gdG9nZ2xlYD9vLm1hcCh0PT50LmlkPT09ZS5pZD97Li4udCxkZXNjOmR9OnQpOnU9PT1gcmVtb3ZlYD9vLmZpbHRlcih0PT50LmlkIT09ZS5pZCk6W3tpZDplLmlkLGRlc2M6ZH1dLGx9KX0sZS5nZXRGaXJzdFNvcnREaXI9KCk9PmUuY29sdW1uRGVmLnNvcnREZXNjRmlyc3Q/P3Qub3B0aW9ucy5zb3J0RGVzY0ZpcnN0Pz9lLmdldEF1dG9Tb3J0RGlyKCk9PT1gZGVzY2A/YGRlc2NgOmBhc2NgLGUuZ2V0TmV4dFNvcnRpbmdPcmRlcj1uPT57bGV0IHI9ZS5nZXRGaXJzdFNvcnREaXIoKSxpPWUuZ2V0SXNTb3J0ZWQoKTtyZXR1cm4gaT9pIT09ciYmKHQub3B0aW9ucy5lbmFibGVTb3J0aW5nUmVtb3ZhbD8/ITApJiYoIW58fCh0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSZW1vdmU/PyEwKSk/ITE6aT09PWBkZXNjYD9gYXNjYDpgZGVzY2A6cn0sZS5nZXRDYW5Tb3J0PSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlU29ydGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZVNvcnRpbmc/PyEwKSYmISFlLmFjY2Vzc29yRm4sZS5nZXRDYW5NdWx0aVNvcnQ9KCk9PmUuY29sdW1uRGVmLmVuYWJsZU11bHRpU29ydD8/dC5vcHRpb25zLmVuYWJsZU11bHRpU29ydD8/ISFlLmFjY2Vzc29yRm4sZS5nZXRJc1NvcnRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5zb3J0aW5nPy5maW5kKHQ9PnQuaWQ9PT1lLmlkKTtyZXR1cm4gbj9uLmRlc2M/YGRlc2NgOmBhc2NgOiExfSxlLmdldFNvcnRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLnNvcnRpbmc/LmZpbmRJbmRleCh0PT50LmlkPT09ZS5pZCk/Py0xLGUuY2xlYXJTb3J0aW5nPSgpPT57dC5zZXRTb3J0aW5nKHQ9PnQhPW51bGwmJnQubGVuZ3RoP3QuZmlsdGVyKHQ9PnQuaWQhPT1lLmlkKTpbXSl9LGUuZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXI9KCk9PntsZXQgbj1lLmdldENhblNvcnQoKTtyZXR1cm4gcj0+e24mJihyLnBlcnNpc3Q9PW51bGx8fHIucGVyc2lzdCgpLGUudG9nZ2xlU29ydGluZz09bnVsbHx8ZS50b2dnbGVTb3J0aW5nKHZvaWQgMCxlLmdldENhbk11bHRpU29ydCgpP3Qub3B0aW9ucy5pc011bHRpU29ydEV2ZW50PT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuaXNNdWx0aVNvcnRFdmVudChyKTohMSkpfX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldFNvcnRpbmc9dD0+ZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZSh0KSxlLnJlc2V0U29ydGluZz10PT57ZS5zZXRTb3J0aW5nKHQ/W106ZS5pbml0aWFsU3RhdGU/LnNvcnRpbmc/P1tdKX0sZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRHcm91cGVkUm93TW9kZWwoKSxlLmdldFNvcnRlZFJvd01vZGVsPSgpPT4oIWUuX2dldFNvcnRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0U29ydGVkUm93TW9kZWwmJihlLl9nZXRTb3J0ZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0U29ydGVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxTb3J0aW5nfHwhZS5fZ2V0U29ydGVkUm93TW9kZWw/ZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpOmUuX2dldFNvcnRlZFJvd01vZGVsKCkpfX0sWlQscEUsX0UseUUsYkUsYUVdO2Z1bmN0aW9uIExFKGUpe2xldCB0PVsuLi5JRSwuLi5lLl9mZWF0dXJlcz8/W11dLG49e19mZWF0dXJlczp0fSxyPW4uX2ZlYXR1cmVzLnJlZHVjZSgoZSx0KT0+T2JqZWN0LmFzc2lnbihlLHQuZ2V0RGVmYXVsdE9wdGlvbnM9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdE9wdGlvbnMobikpLHt9KSxpPWU9Pm4ub3B0aW9ucy5tZXJnZU9wdGlvbnM/bi5vcHRpb25zLm1lcmdlT3B0aW9ucyhyLGUpOnsuLi5yLC4uLmV9LGE9ey4uLmUuaW5pdGlhbFN0YXRlPz97fX07bi5fZmVhdHVyZXMuZm9yRWFjaChlPT57YT0oZS5nZXRJbml0aWFsU3RhdGU9PW51bGw/dm9pZCAwOmUuZ2V0SW5pdGlhbFN0YXRlKGEpKT8/YX0pO2xldCBvPVtdLHM9ITEsYz17X2ZlYXR1cmVzOnQsb3B0aW9uczp7Li4uciwuLi5lfSxpbml0aWFsU3RhdGU6YSxfcXVldWU6ZT0+e28ucHVzaChlKSxzfHwocz0hMCxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57Zm9yKDtvLmxlbmd0aDspby5zaGlmdCgpKCk7cz0hMX0pLmNhdGNoKGU9PnNldFRpbWVvdXQoKCk9Pnt0aHJvdyBlfSkpKX0scmVzZXQ6KCk9PntuLnNldFN0YXRlKG4uaW5pdGlhbFN0YXRlKX0sc2V0T3B0aW9uczplPT57bGV0IHQ9d1QoZSxuLm9wdGlvbnMpO24ub3B0aW9ucz1pKHQpfSxnZXRTdGF0ZTooKT0+bi5vcHRpb25zLnN0YXRlLHNldFN0YXRlOmU9PntuLm9wdGlvbnMub25TdGF0ZUNoYW5nZT09bnVsbHx8bi5vcHRpb25zLm9uU3RhdGVDaGFuZ2UoZSl9LF9nZXRSb3dJZDooZSx0LHIpPT4obi5vcHRpb25zLmdldFJvd0lkPT1udWxsP3ZvaWQgMDpuLm9wdGlvbnMuZ2V0Um93SWQoZSx0LHIpKT8/YCR7cj9bci5pZCx0XS5qb2luKGAuYCk6dH1gLGdldENvcmVSb3dNb2RlbDooKT0+KG4uX2dldENvcmVSb3dNb2RlbHx8PW4ub3B0aW9ucy5nZXRDb3JlUm93TW9kZWwobiksbi5fZ2V0Q29yZVJvd01vZGVsKCkpLGdldFJvd01vZGVsOigpPT5uLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLGdldFJvdzooZSx0KT0+e2xldCByPSh0P24uZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsKCk6bi5nZXRSb3dNb2RlbCgpKS5yb3dzQnlJZFtlXTtpZighciYmKHI9bi5nZXRDb3JlUm93TW9kZWwoKS5yb3dzQnlJZFtlXSwhcikpdGhyb3cgRXJyb3IoKTtyZXR1cm4gcn0sX2dldERlZmF1bHRDb2x1bW5EZWY6USgoKT0+W24ub3B0aW9ucy5kZWZhdWx0Q29sdW1uXSxlPT4oZT8/PXt9LHtoZWFkZXI6ZT0+e2xldCB0PWUuaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWY7cmV0dXJuIHQuYWNjZXNzb3JLZXk/dC5hY2Nlc3NvcktleTp0LmFjY2Vzc29yRm4/dC5pZDpudWxsfSxjZWxsOmU9Pnt2YXIgdDtyZXR1cm4oKHQ9ZS5yZW5kZXJWYWx1ZSgpKT09bnVsbHx8dC50b1N0cmluZz09bnVsbD92b2lkIDA6dC50b1N0cmluZygpKT8/bnVsbH0sLi4ubi5fZmVhdHVyZXMucmVkdWNlKChlLHQpPT5PYmplY3QuYXNzaWduKGUsdC5nZXREZWZhdWx0Q29sdW1uRGVmPT1udWxsP3ZvaWQgMDp0LmdldERlZmF1bHRDb2x1bW5EZWYoKSkse30pLC4uLmV9KSwkKGUsYGRlYnVnQ29sdW1uc2AsYF9nZXREZWZhdWx0Q29sdW1uRGVmYCkpLF9nZXRDb2x1bW5EZWZzOigpPT5uLm9wdGlvbnMuY29sdW1ucyxnZXRBbGxDb2x1bW5zOlEoKCk9PltuLl9nZXRDb2x1bW5EZWZzKCldLGU9PntsZXQgdD1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPTApLGUubWFwKGU9PntsZXQgYT1BVChuLGUsaSxyKSxvPWU7cmV0dXJuIGEuY29sdW1ucz1vLmNvbHVtbnM/dChvLmNvbHVtbnMsYSxpKzEpOltdLGF9KX07cmV0dXJuIHQoZSl9LCQoZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsQ29sdW1uc2ApKSxnZXRBbGxGbGF0Q29sdW1uczpRKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCldLGU9PmUuZmxhdE1hcChlPT5lLmdldEZsYXRDb2x1bW5zKCkpLCQoZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsRmxhdENvbHVtbnNgKSksX2dldEFsbEZsYXRDb2x1bW5zQnlJZDpRKCgpPT5bbi5nZXRBbGxGbGF0Q29sdW1ucygpXSxlPT5lLnJlZHVjZSgoZSx0KT0+KGVbdC5pZF09dCxlKSx7fSksJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc0J5SWRgKSksZ2V0QWxsTGVhZkNvbHVtbnM6USgoKT0+W24uZ2V0QWxsQ29sdW1ucygpLG4uX2dldE9yZGVyQ29sdW1uc0ZuKCldLChlLHQpPT50KGUuZmxhdE1hcChlPT5lLmdldExlYWZDb2x1bW5zKCkpKSwkKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbExlYWZDb2x1bW5zYCkpLGdldENvbHVtbjplPT5uLl9nZXRBbGxGbGF0Q29sdW1uc0J5SWQoKVtlXX07T2JqZWN0LmFzc2lnbihuLGMpO2ZvcihsZXQgZT0wO2U8bi5fZmVhdHVyZXMubGVuZ3RoO2UrKyl7bGV0IHQ9bi5fZmVhdHVyZXNbZV07dD09bnVsbHx8dC5jcmVhdGVUYWJsZT09bnVsbHx8dC5jcmVhdGVUYWJsZShuKX1yZXR1cm4gbn1mdW5jdGlvbiBSRSgpe3JldHVybiBlPT5RKCgpPT5bZS5vcHRpb25zLmRhdGFdLHQ9PntsZXQgbj17cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0scj1mdW5jdGlvbih0LGksYSl7aT09PXZvaWQgMCYmKGk9MCk7bGV0IG89W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKyspe2xldCBsPUZUKGUsZS5fZ2V0Um93SWQodFtjXSxjLGEpLHRbY10sYyxpLHZvaWQgMCxhPy5pZCk7aWYobi5mbGF0Um93cy5wdXNoKGwpLG4ucm93c0J5SWRbbC5pZF09bCxvLnB1c2gobCksZS5vcHRpb25zLmdldFN1YlJvd3Mpe3ZhciBzO2wub3JpZ2luYWxTdWJSb3dzPWUub3B0aW9ucy5nZXRTdWJSb3dzKHRbY10sYyksKHM9bC5vcmlnaW5hbFN1YlJvd3MpIT1udWxsJiZzLmxlbmd0aCYmKGwuc3ViUm93cz1yKGwub3JpZ2luYWxTdWJSb3dzLGkrMSxsKSl9fXJldHVybiBvfTtyZXR1cm4gbi5yb3dzPXIodCksbn0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRSb3dNb2RlbGAsKCk9PmUuX2F1dG9SZXNldFBhZ2VJbmRleCgpKSl9ZnVuY3Rpb24gekUoKXtyZXR1cm4gZT0+USgoKT0+W2UuZ2V0U3RhdGUoKS5zb3J0aW5nLGUuZ2V0UHJlU29ydGVkUm93TW9kZWwoKV0sKHQsbik9PntpZighbi5yb3dzLmxlbmd0aHx8ISh0IT1udWxsJiZ0Lmxlbmd0aCkpcmV0dXJuIG47bGV0IHI9ZS5nZXRTdGF0ZSgpLnNvcnRpbmcsaT1bXSxhPXIuZmlsdGVyKHQ9PmUuZ2V0Q29sdW1uKHQuaWQpPy5nZXRDYW5Tb3J0KCkpLG89e307YS5mb3JFYWNoKHQ9PntsZXQgbj1lLmdldENvbHVtbih0LmlkKTtuJiYob1t0LmlkXT17c29ydFVuZGVmaW5lZDpuLmNvbHVtbkRlZi5zb3J0VW5kZWZpbmVkLGludmVydFNvcnRpbmc6bi5jb2x1bW5EZWYuaW52ZXJ0U29ydGluZyxzb3J0aW5nRm46bi5nZXRTb3J0aW5nRm4oKX0pfSk7bGV0IHM9ZT0+e2xldCB0PWUubWFwKGU9Pih7Li4uZX0pKTtyZXR1cm4gdC5zb3J0KChlLHQpPT57Zm9yKGxldCBuPTA7bjxhLmxlbmd0aDtuKz0xKXtsZXQgcj1hW25dLGk9b1tyLmlkXSxzPWkuc29ydFVuZGVmaW5lZCxjPXI/LmRlc2M/PyExLGw9MDtpZihzKXtsZXQgbj1lLmdldFZhbHVlKHIuaWQpLGk9dC5nZXRWYWx1ZShyLmlkKSxhPW49PT12b2lkIDAsbz1pPT09dm9pZCAwO2lmKGF8fG8pe2lmKHM9PT1gZmlyc3RgKXJldHVybiBhPy0xOjE7aWYocz09PWBsYXN0YClyZXR1cm4gYT8xOi0xO2w9YSYmbz8wOmE/czotc319aWYobD09PTAmJihsPWkuc29ydGluZ0ZuKGUsdCxyLmlkKSksbCE9PTApcmV0dXJuIGMmJihsKj0tMSksaS5pbnZlcnRTb3J0aW5nJiYobCo9LTEpLGx9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0pLHQuZm9yRWFjaChlPT57dmFyIHQ7aS5wdXNoKGUpLCh0PWUuc3ViUm93cykhPW51bGwmJnQubGVuZ3RoJiYoZS5zdWJSb3dzPXMoZS5zdWJSb3dzKSl9KSx0fTtyZXR1cm57cm93czpzKG4ucm93cyksZmxhdFJvd3M6aSxyb3dzQnlJZDpuLnJvd3NCeUlkfX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRTb3J0ZWRSb3dNb2RlbGAsKCk9PmUuX2F1dG9SZXNldFBhZ2VJbmRleCgpKSl9ZnVuY3Rpb24gQkUoKXtyZXR1cm4hMH12YXIgVkU9U3ltYm9sKGBtZXJnZS1wcm94eWApLEhFPXtnZXQoZSx0LG4pe3JldHVybiB0PT09VkU/bjplLmdldCh0KX0saGFzKGUsdCl7cmV0dXJuIGUuaGFzKHQpfSxzZXQ6QkUsZGVsZXRlUHJvcGVydHk6QkUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl7cmV0dXJue2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBlLmdldCh0KX0sc2V0OkJFLGRlbGV0ZVByb3BlcnR5OkJFfX0sb3duS2V5cyhlKXtyZXR1cm4gZS5rZXlzKCl9fTtmdW5jdGlvbiBVRShlKXtyZXR1cm5gdmFsdWVgaW4gZT9lLnZhbHVlOmV9ZnVuY3Rpb24gV0UoKXt2YXIgZT1bLi4uYXJndW1lbnRzXTtyZXR1cm4gbmV3IFByb3h5KHtnZXQodCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCByPVVFKGVbbl0pW3RdO2lmKHIhPT12b2lkIDApcmV0dXJuIHJ9fSxoYXModCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYodCBpbiBVRShlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX0sa2V5cygpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQucHVzaCguLi5PYmplY3Qua2V5cyhVRShlW25dKSkpO3JldHVyblsuLi5BcnJheS5mcm9tKG5ldyBTZXQodCkpXX19LEhFKX12YXIgR0U9UCh7cHJvcHM6W2ByZW5kZXJgLGBwcm9wc2BdLHNldHVwOmU9PigpPT50eXBlb2YgZS5yZW5kZXI9PWBmdW5jdGlvbmB8fHR5cGVvZiBlLnJlbmRlcj09YG9iamVjdGA/RyhlLnJlbmRlcixlLnByb3BzKTplLnJlbmRlcn0pO2Z1bmN0aW9uIEtFKGUpe3JldHVybiBXRShlLHtkYXRhOk0oZS5kYXRhKX0pfWZ1bmN0aW9uIHFFKGUpe2xldCB0PXVuKGUuZGF0YSksbj1MRShXRSh7c3RhdGU6e30sb25TdGF0ZUNoYW5nZTooKT0+e30scmVuZGVyRmFsbGJhY2tWYWx1ZTpudWxsLG1lcmdlT3B0aW9ucyhlLG4pe3JldHVybiB0P3suLi5lLC4uLm59OldFKGUsbil9fSx0P0tFKGUpOmUpKTtpZih0KXtsZXQgdD1kbihlLmRhdGEpO0RyKHQsKCk9PntuLnNldFN0YXRlKGU9Pih7Li4uZSxkYXRhOnQudmFsdWV9KSl9LHtpbW1lZGlhdGU6ITB9KX1sZXQgcj1qKG4uaW5pdGlhbFN0YXRlKTtyZXR1cm4gd3IoKCk9PntuLnNldE9wdGlvbnMobj0+e2xldCBpPW5ldyBQcm94eSh7fSx7Z2V0OihlLHQpPT5yLnZhbHVlW3RdfSk7cmV0dXJuIFdFKG4sdD9LRShlKTplLHtzdGF0ZTpXRShpLGUuc3RhdGU/P3t9KSxvblN0YXRlQ2hhbmdlOnQ9Pnt0IGluc3RhbmNlb2YgRnVuY3Rpb24/ci52YWx1ZT10KHIudmFsdWUpOnIudmFsdWU9dCxlLm9uU3RhdGVDaGFuZ2U9PW51bGx8fGUub25TdGF0ZUNoYW5nZSh0KX19KX0pfSksbn12YXIgSkU9W2BhcmlhLWxhYmVsYF0sWUU9UCh7X19uYW1lOmBTb3J0SGVhZGVyQnV0dG9uYCxwcm9wczp7aGVhZGVyOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49VygoKT0+dC5oZWFkZXIuY29sdW1uLmdldElzU29ydGVkKCkpLHI9VygoKT0+bi52YWx1ZT09PWBhc2NgP29fOm4udmFsdWU9PT1gZGVzY2A/eF86cF8pLGk9VygoKT0+e2xldCBlPXQuaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyO3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/ZTp0LmhlYWRlci5jb2x1bW4uaWR9KSxhPVcoKCk9PntsZXQgZT1uLnZhbHVlPT09YGFzY2A/YGFzY2VuZGluZ2A6bi52YWx1ZT09PWBkZXNjYD9gZGVzY2VuZGluZ2A6YG5vbmVgO3JldHVybmBTb3J0IGJ5ICR7aS52YWx1ZX0sIGN1cnJlbnRseSAke2V9YH0pO2Z1bmN0aW9uIG8oKXt0LmhlYWRlci5jb2x1bW4udG9nZ2xlU29ydGluZyhuLnZhbHVlPT09YGFzY2ApfXJldHVybih0LGkpPT57bGV0IHM9bGEoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBMKCksUihgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCwiYXJpYS1sYWJlbCI6YS52YWx1ZSxjbGFzczpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQgcHgtMS41IHB5LTAuNSBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmdgLG9uQ2xpY2s6b30sW2UuaGVhZGVyLmlzUGxhY2Vob2xkZXI/VShgYCwhMCk6KEwoKSx6KE0oR0UpLHtrZXk6MCxyZW5kZXI6ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIscHJvcHM6ZS5oZWFkZXIuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKSksVihzLHtpY29uOnIudmFsdWUsY2xhc3M6TyhbYHNpemUtMyBzaHJpbmstMGAsbi52YWx1ZT9gdGV4dC1mb3JlZ3JvdW5kYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwYF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSldLDgsSkUpfX19KSxYRT17ImRhdGEtc2xvdCI6YHRhYmxlLWNvbnRhaW5lcmAsY2xhc3M6YHJlbGF0aXZlIHctZnVsbCBvdmVyZmxvdy14LWF1dG9gfSxaRT1QKHtfX25hbWU6YFRhYmxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihMKCksUihgZGl2YCxYRSxbQihgdGFibGVgLHsiZGF0YS1zbG90IjpgdGFibGVgLGNsYXNzOk8oTShRdikoYHctZnVsbCBjYXB0aW9uLWJvdHRvbSB0ZXh0LXNtYCx0LmNsYXNzKSl9LFtGKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpXSkpfX0pLFFFPVAoe19fbmFtZTpgVGFibGVCb2R5YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihMKCksUihgdGJvZHlgLHsiZGF0YS1zbG90IjpgdGFibGUtYm9keWAsY2xhc3M6TyhNKFF2KShgWyZfdHI6bGFzdC1jaGlsZF06Ym9yZGVyLTBgLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLCRFPVAoe19fbmFtZTpgVGFibGVDZWxsYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihMKCksUihgdGRgLHsiZGF0YS1zbG90IjpgdGFibGUtY2VsbGAsY2xhc3M6TyhNKFF2KShgcC0yIGFsaWduLW1pZGRsZSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbRihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksZUQ9UCh7X19uYW1lOmBUYWJsZVJvd2AscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLFIoYHRyYCx7ImRhdGEtc2xvdCI6YHRhYmxlLXJvd2AsY2xhc3M6TyhNKFF2KShgaG92ZXI6YmctbXV0ZWQvNTAgZGF0YS1bc3RhdGU9c2VsZWN0ZWRdOmJnLW11dGVkIGJvcmRlci1iIHRyYW5zaXRpb24tY29sb3JzIGhhcy1hcmlhLWV4cGFuZGVkOmJnLW11dGVkLzUwYCx0LmNsYXNzKSl9LFtGKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSx0RD17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEwYH0sbkQ9UCh7X19uYW1lOmBUYWJsZUVtcHR5YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sY29sc3Bhbjp7ZGVmYXVsdDoxfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPU95KHQsYGNsYXNzYCk7cmV0dXJuKGUscik9PihMKCkseihlRCxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKCRFLGtzKHtjbGFzczpNKFF2KShgcC00IHdoaXRlc3BhY2Utbm93cmFwIGFsaWduLW1pZGRsZSB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcyl9LE0obikpLHtkZWZhdWx0Ok4oKCk9PltCKGBkaXZgLHRELFtGKGUuJHNsb3RzLGBkZWZhdWx0YCldKV0pLF86M30sMTYsW2BjbGFzc2BdKV0pLF86M30pKX19KSxyRD1QKHtfX25hbWU6YFRhYmxlSGVhZGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLFIoYHRoYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWhlYWRgLGNsYXNzOk8oTShRdikoYHRleHQtZm9yZWdyb3VuZCBoLTEwIHB4LTIgdGV4dC1sZWZ0IGFsaWduLW1pZGRsZSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbRihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksaUQ9UCh7X19uYW1lOmBUYWJsZUhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLFIoYHRoZWFkYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWhlYWRlcmAsY2xhc3M6TyhNKFF2KShgWyZfdHJdOmJvcmRlci1iYCx0LmNsYXNzKSl9LFtGKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KTtmdW5jdGlvbiBhRChlLHQpe3QudmFsdWU9dHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0LnZhbHVlKTplfXZhciBvRD1QKHtfX25hbWU6YERhdGFUYWJsZWAscHJvcHM6e2NvbHVtbnM6e30sZGF0YTp7fSxyb3dDbGFzczp7dHlwZTpGdW5jdGlvbn0sZW1wdHlNZXNzYWdlOnt9LHNvcnRpbmc6e319LGVtaXRzOltgdXBkYXRlOnNvcnRpbmdgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPWooW10pLGE9cUUoe2dldCBkYXRhKCl7cmV0dXJuIG4uZGF0YX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gbi5jb2x1bW5zfSxnZXRDb3JlUm93TW9kZWw6UkUoKSxnZXRTb3J0ZWRSb3dNb2RlbDp6RSgpLG9uU29ydGluZ0NoYW5nZTplPT57bGV0IHQ9bi5zb3J0aW5nPz9pLnZhbHVlLGE9dHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0KTplO24uc29ydGluZz09PXZvaWQgMD9pLnZhbHVlPWE6cihgdXBkYXRlOnNvcnRpbmdgLGEpfSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gbi5zb3J0aW5nPz9pLnZhbHVlfX19KTtmdW5jdGlvbiBvKGUpe2lmKGU9PT1gYXNjYClyZXR1cm5gYXNjZW5kaW5nYDtpZihlPT09YGRlc2NgKXJldHVybmBkZXNjZW5kaW5nYH1yZXR1cm4odCxuKT0+KEwoKSx6KE0oWkUpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShpRCksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bKEwoITApLFIoSSxudWxsLGhhKE0oYSkuZ2V0SGVhZGVyR3JvdXBzKCksZT0+KEwoKSx6KE0oZUQpLHtrZXk6ZS5pZH0se2RlZmF1bHQ6TigoKT0+WyhMKCEwKSxSKEksbnVsbCxoYShlLmhlYWRlcnMsZT0+KEwoKSx6KE0ockQpLHtrZXk6ZS5pZCxjbGFzczpPKGUuY29sdW1uLmNvbHVtbkRlZi5tZXRhPy5hbGlnbj09PWByaWdodGA/YHRleHQtcmlnaHRgOnZvaWQgMCksImFyaWEtc29ydCI6ZS5jb2x1bW4uZ2V0Q2FuU29ydCgpP28oZS5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSk/P2Bub25lYDp2b2lkIDB9LHtkZWZhdWx0Ok4oKCk9PltlLmNvbHVtbi5nZXRDYW5Tb3J0KCk/KEwoKSx6KFlFLHtrZXk6MCxoZWFkZXI6ZSxjbGFzczpgLW14LTEuNWB9LG51bGwsOCxbYGhlYWRlcmBdKSk6ZS5pc1BsYWNlaG9sZGVyP1UoYGAsITApOihMKCkseihNKEdFKSx7a2V5OjEscmVuZGVyOmUuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIscHJvcHM6ZS5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pKV0pLF86Mn0sMTAzMixbYGNsYXNzYCxgYXJpYS1zb3J0YF0pKSksMTI4KSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KSxWKE0oUUUpLG51bGwse2RlZmF1bHQ6TigoKT0+W00oYSkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aD09PTA/KEwoKSx6KE0obkQpLHtrZXk6MCxjb2xzcGFuOmUuY29sdW1ucy5sZW5ndGgsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0Ok4oKCk9PltIKGsoZS5lbXB0eU1lc3NhZ2U/P2Bub25lYCksMSldKSxfOjF9LDgsW2Bjb2xzcGFuYF0pKTpVKGBgLCEwKSwoTCghMCksUihJLG51bGwsaGEoTShhKS5nZXRSb3dNb2RlbCgpLnJvd3MsdD0+KEwoKSx6KE0oZUQpLHtrZXk6dC5pZCxjbGFzczpPKGUucm93Q2xhc3M/Lih0Lm9yaWdpbmFsKSl9LHtkZWZhdWx0Ok4oKCk9PlsoTCghMCksUihJLG51bGwsaGEodC5nZXRWaXNpYmxlQ2VsbHMoKSxlPT4oTCgpLHooTSgkRSkse2tleTplLmlkLGNsYXNzOk8oZS5jb2x1bW4uY29sdW1uRGVmLm1ldGE/LmFsaWduPT09YHJpZ2h0YD9gdGV4dC1yaWdodCB0YWJ1bGFyLW51bXNgOnZvaWQgMCl9LHtkZWZhdWx0Ok4oKCk9PltWKE0oR0UpLHtyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmNlbGwscHJvcHM6ZS5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pXSksXzoyfSwxMDMyLFtgY2xhc3NgXSkpKSwxMjgpKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KSxzRD1QKHtfX25hbWU6YFNlYXJjaElucHV0YCxwcm9wczp7bW9kZWxWYWx1ZTp7fSxwbGFjZWhvbGRlcjp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9VygoKT0+bi5tb2RlbFZhbHVlLmxlbmd0aD4wKTtmdW5jdGlvbiBhKGUpe3IoYHVwZGF0ZTptb2RlbFZhbHVlYCxTdHJpbmcoZSkpfWZ1bmN0aW9uIG8oKXtyKGB1cGRhdGU6bW9kZWxWYWx1ZWAsYGApfXJldHVybih0LHIpPT57bGV0IHM9bGEoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBMKCksUihgZGl2YCx7Y2xhc3M6TyhNKFF2KShgcmVsYXRpdmVgLG4uY2xhc3MpKX0sW1Yocyx7aWNvbjpNKGlfKSxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMi41IHNpemUtMy41IC10cmFuc2xhdGUteS0xLzIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxWKE0oJHcpLHsibW9kZWwtdmFsdWUiOmUubW9kZWxWYWx1ZSx0eXBlOmB0ZXh0YCxwbGFjZWhvbGRlcjplLnBsYWNlaG9sZGVyLCJhcmlhLWxhYmVsIjplLnBsYWNlaG9sZGVyLGNsYXNzOmBwci04IHBsLThgLCJvblVwZGF0ZTptb2RlbFZhbHVlIjphfSxudWxsLDgsW2Btb2RlbC12YWx1ZWAsYHBsYWNlaG9sZGVyYCxgYXJpYS1sYWJlbGBdKSxpLnZhbHVlPyhMKCkseihNKEd3KSx7a2V5OjAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbi14c2AsImFyaWEtbGFiZWwiOmBDbGVhciBzZWFyY2hgLGNsYXNzOmBhYnNvbHV0ZSB0b3AtMS8yIHJpZ2h0LTEgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCxvbkNsaWNrOm99LHtkZWZhdWx0Ok4oKCk9PltWKHMse2ljb246TShtXyksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pKTpVKGBgLCEwKV0sMil9fX0pLGNEPVAoe19fbmFtZTpgU2VsZWN0YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxudWxsYWJsZVZhbHVlOnt9LGJ5Ont0eXBlOltTdHJpbmcsRnVuY3Rpb25dfSxkaXI6e30sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbn0sYXV0b2NvbXBsZXRlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LG5hbWU6e30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgLGB1cGRhdGU6b3BlbmBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWRiKGUsdCk7cmV0dXJuKGUsdCk9PihMKCkseihNKGR3KSxrcyh7ImRhdGEtc2xvdCI6YHNlbGVjdGB9LE0obikpLHtkZWZhdWx0Ok4odD0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHhlKENzKHQpKSldKSxfOjN9LDE2KSl9fSksbEQ9UCh7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0Q29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb246e2RlZmF1bHQ6YGl0ZW0tYWxpZ25lZGB9LGJvZHlMb2NrOnt0eXBlOkJvb2xlYW59LG1lbW9EZXBlbmRlbmNpZXM6e30sc2lkZTp7fSxzaWRlT2Zmc2V0Ont9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW59LGFsaWduOntkZWZhdWx0OmBjZW50ZXJgfSxhbGlnbk9mZnNldDp7fSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbn0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW59LGNvbGxpc2lvbkJvdW5kYXJ5Ont9LGNvbGxpc2lvblBhZGRpbmc6e30sYXJyb3dQYWRkaW5nOnt9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbn0sc3RpY2t5Ont9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25TdHJhdGVneTp7fSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW59LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFufSxyZWZlcmVuY2U6e30sZGlyOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW59LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9ZGIoT3kobixgY2xhc3NgKSxyKTtyZXR1cm4odCxyKT0+KEwoKSx6KE0oQXcpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShDdyksa3MoeyJkYXRhLXNsb3QiOmBzZWxlY3QtY29udGVudGAsImRhdGEtYWxpZ24tdHJpZ2dlciI6ZS5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgfSx7Li4udC4kYXR0cnMsLi4uTShpKX0se2NsYXNzOk0oUXYpKGBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtb3BlbjphbmltYXRlLWluIGRhdGEtY2xvc2VkOmFuaW1hdGUtb3V0IGRhdGEtY2xvc2VkOmZhZGUtb3V0LTAgZGF0YS1vcGVuOmZhZGUtaW4tMCBkYXRhLWNsb3NlZDp6b29tLW91dC05NSBkYXRhLW9wZW46em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByaW5nLWZvcmVncm91bmQvMTAgbWluLXctMzYgcm91bmRlZC1sZyBzaGFkb3ctbWQgcmluZy0xIGR1cmF0aW9uLTEwMCBkYXRhLVtzaWRlPWlubGluZS1zdGFydF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9aW5saW5lLWVuZF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgY24tbWVudS10cmFuc2x1Y2VudCByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgb3JpZ2luLSgtLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIGRhdGEtW2FsaWduLXRyaWdnZXI9dHJ1ZV06YW5pbWF0ZS1ub25lYCxlLnBvc2l0aW9uPT09YHBvcHBlcmAmJmBkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xYCxuLmNsYXNzKX0pLHtkZWZhdWx0Ok4oKCk9PltWKE0ocEQpKSxWKE0oSXcpLHsiZGF0YS1wb3NpdGlvbiI6ZS5wb3NpdGlvbixjbGFzczpPKE0oUXYpKGBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOmgtKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06dy1mdWxsIGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06bWluLXctKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci13aWR0aClgKSl9LHtkZWZhdWx0Ok4oKCk9PltGKHQuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BkYXRhLXBvc2l0aW9uYCxgY2xhc3NgXSksVihNKGZEKSldKSxfOjN9LDE2LFtgZGF0YS1hbGlnbi10cmlnZ2VyYCxgY2xhc3NgXSldKSxfOjN9KSl9fSksdUQ9e2NsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyYH0sZEQ9UCh7X19uYW1lOmBTZWxlY3RJdGVtYCxwcm9wczp7dmFsdWU6e30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdGV4dFZhbHVlOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj11YihPeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KEwoKSx6KE0oRHcpLGtzKHsiZGF0YS1zbG90Ijpgc2VsZWN0LWl0ZW1gfSxNKG4pLHtjbGFzczpNKFF2KShgZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgbm90LWRhdGEtW3ZhcmlhbnQ9ZGVzdHJ1Y3RpdmVdOmZvY3VzOioqOnRleHQtYWNjZW50LWZvcmVncm91bmQgZ2FwLTEuNSByb3VuZGVkLW1kIHB5LTEgcHItOCBwbC0xLjUgdGV4dC1zbSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpOKCgpPT5bQihgc3BhbmAsdUQsW1YoTShPdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgaW5kaWNhdG9yLWljb25gLHt9LCgpPT5bVihNKENnKSx7aWNvbjpNKGZfKSxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBzaXplLTMuNWB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30pXSksVihNKGt3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9KV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksZkQ9UCh7X19uYW1lOmBTZWxlY3RTY3JvbGxEb3duQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXViKE95KHQsYGNsYXNzYCkpO3JldHVybihlLHIpPT4oTCgpLHooTShNdyksa3MoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uYH0sTShuKSx7Y2xhc3M6TShRdikoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bVihNKENnKSx7aWNvbjpNKGdfKSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxwRD1QKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXViKE95KHQsYGNsYXNzYCkpO3JldHVybihlLHIpPT4oTCgpLHooTShOdyksa3MoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvbmB9LE0obikse2NsYXNzOk0oUXYpKGBiZy1wb3BvdmVyIHotMTAgZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00YCx0LmNsYXNzKX0pLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W1YoTShDZykse2ljb246TShjXyksY2xhc3M6YHNpemUtNGB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksbUQ9UCh7X19uYW1lOmBTZWxlY3RUcmlnZ2VyYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0scmVmZXJlbmNlOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lLG49dWIoT3kodCxgY2xhc3NgLGBzaXplYCkpO3JldHVybihyLGkpPT4oTCgpLHooTShQdyksa3MoeyJkYXRhLXNsb3QiOmBzZWxlY3QtdHJpZ2dlcmAsImRhdGEtc2l6ZSI6ZS5zaXplfSxNKG4pLHtjbGFzczpNKFF2KShgYm9yZGVyLWlucHV0IGRhdGEtcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZ2FwLTEuNSByb3VuZGVkLWxnIGJvcmRlciBiZy10cmFuc3BhcmVudCBweS0yIHByLTIgcGwtMi41IHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTMgYXJpYS1pbnZhbGlkOnJpbmctMyBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOCBkYXRhLVtzaXplPXNtXTpoLTcgZGF0YS1bc2l6ZT1zbV06cm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gd2hpdGVzcGFjZS1ub3dyYXAgb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpOKCgpPT5bRihyLiRzbG90cyxgZGVmYXVsdGApLFYoTSh3dykseyJhcy1jaGlsZCI6YGB9LHtkZWZhdWx0Ok4oKCk9PltWKE0oQ2cpLHtpY29uOk0oZ18pLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2l6ZS00IHBvaW50ZXItZXZlbnRzLW5vbmVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxfOjN9LDE2LFtgZGF0YS1zaXplYCxgY2xhc3NgXSkpfX0pLGhEPVAoe19fbmFtZTpgU2VsZWN0VmFsdWVgLHByb3BzOntwbGFjZWhvbGRlcjp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oTCgpLHooTShGdyksa3MoeyJkYXRhLXNsb3QiOmBzZWxlY3QtdmFsdWVgfSx0KSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pO2Z1bmN0aW9uIGdEKGUpe2xldCB0PWU/P2ooYGApLG49VygoKT0+dC52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7cmV0dXJue3F1ZXJ5OnQsbm9ybWFsaXplZDpuLGhhc1F1ZXJ5OlcoKCk9Pm4udmFsdWUubGVuZ3RoPjApfX12YXIgX0Q9UCh7X19uYW1lOmBCYWRnZWAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sdmFyaWFudDp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPU95KHQsYGNsYXNzYCk7cmV0dXJuKHIsaSk9PihMKCkseihNKFBiKSxrcyh7ImRhdGEtc2xvdCI6YGJhZGdlYCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnQsY2xhc3M6TShRdikoTSh2RCkoe3ZhcmlhbnQ6ZS52YXJpYW50fSksdC5jbGFzcyl9LE0obikpLHtkZWZhdWx0Ok4oKCk9PltGKHIuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgZGF0YS12YXJpYW50YCxgY2xhc3NgXSkpfX0pLHZEPUVfKGBoLTUgZ2FwLTEgcm91bmRlZC00eGwgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0yIHB5LTAuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEuNSBbJj5zdmddOnNpemUtMyEgZ3JvdXAvYmFkZ2UgaW5saW5lLWZsZXggdy1maXQgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBbJj5zdmddOnBvaW50ZXItZXZlbnRzLW5vbmVgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MGAsc2Vjb25kYXJ5OmBiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6Ymctc2Vjb25kYXJ5LzgwYCxkZXN0cnVjdGl2ZTpgYmctZGVzdHJ1Y3RpdmUvMTAgW2FdOmhvdmVyOmJnLWRlc3RydWN0aXZlLzIwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCB0ZXh0LWRlc3RydWN0aXZlIGRhcms6YmctZGVzdHJ1Y3RpdmUvMjBgLG91dGxpbmU6YGJvcmRlci1ib3JkZXIgdGV4dC1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1tdXRlZCBbYV06aG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxnaG9zdDpgaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctbXV0ZWQvNTBgLGxpbms6YHRleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lYH19LGRlZmF1bHRWYXJpYW50czp7dmFyaWFudDpgZGVmYXVsdGB9fSkseUQ9e3JhdGVfbGltaXQ6YFJhdGUgbGltaXRgLGJ1ZGdldDpgQnVkZ2V0YCxzdG9yZV9kb3duOmBTdG9yZSBkb3duYCx1cHN0cmVhbTpgVXBzdHJlYW0gZXJyb3JgLHRpbWVvdXQ6YFRpbWVvdXRgLHVucHJpY2VkOmBVbnByaWNlZCBtb2RlbGAsY2FwYWNpdHk6YENhcGFjaXR5YH0sYkQ9T2JqZWN0LmtleXMoeUQpO2Z1bmN0aW9uIHhEKGUpe3N3aXRjaChlKXtjYXNlYHJhdGVfbGltaXRgOmNhc2VgYnVkZ2V0YDpjYXNlYGNhcGFjaXR5YDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2Vgc3RvcmVfZG93bmA6Y2FzZWB1cHN0cmVhbWA6Y2FzZWB0aW1lb3V0YDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybmBvdXRsaW5lYH19ZnVuY3Rpb24gU0QoZSx0KXtsZXQgbj10LmtpbmQscj10LnVzZXIudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUuZmlsdGVyKGU9PntpZihuJiZlLmtpbmQhPT1uKXJldHVybiExO2lmKCFyKXJldHVybiEwO2xldCB0PWUudXNlcj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyKT8/ITEsaT1lLmdyb3VwPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHIpPz8hMTtyZXR1cm4gdHx8aX0pfWZ1bmN0aW9uIENEKGUsdCl7cmV0dXJuYCR7ZX0vJHt0fWB9ZnVuY3Rpb24gd0QoZSl7cmV0dXJuYCQkeyhlLzFlNikudG9GaXhlZCg0KX1gfWZ1bmN0aW9uIFREKGUpe3JldHVybiBlLnRvTG9jYWxlU3RyaW5nKGBlbi1VU2ApfWZ1bmN0aW9uIEVEKGUpe2xldCB0PU1hdGguYWJzKGUpO2lmKHQ8MWU0KXJldHVybiBURChlKTtsZXQgbj1lPDA/YC1gOmBgLFtyLGldPXQ8MWU2P1sxZTMsYGtgXTp0PDFlOT9bMWU2LGBNYF06WzFlOSxgQmBdLGE9dC9yLG89My0oTWF0aC5mbG9vcihhKT49MTAwPzM6TWF0aC5mbG9vcihhKT49MTA/MjoxKSxzPTEwKipvLGM9KE1hdGguZmxvb3IodCpzL3IpL3MpLnRvRml4ZWQobyk7cmV0dXJuIG8+MCYmKGM9Yy5yZXBsYWNlKC8wKyQvLGBgKS5yZXBsYWNlKC9cLiQvLGBgKSksYCR7bn0ke2N9JHtpfWB9ZnVuY3Rpb24gREQoZSl7cmV0dXJuIGU+MCYmIShlJmUtMSl9ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGU8MTAyND9gJHtlfWA6REQoZSk/ZTwxMDQ4NTc2P2Ake01hdGgucm91bmQoZS8xMDI0KX1rYDpgJHtNYXRoLnJvdW5kKGUvMTA0ODU3Nil9TWA6ZTwxZTY/YCR7TWF0aC5yb3VuZChlLzFlMyl9a2A6YCR7TWF0aC5yb3VuZChlLzFlNil9TWB9ZnVuY3Rpb24ga0QoZSl7cmV0dXJuYCQke2UudG9GaXhlZCgyKX1gfWZ1bmN0aW9uIEFEKGUsdCl7cmV0dXJuIGU9PT0wJiZ0PT09MD9gZnJlZWA6YGluICR7a0QoZSl9IC8gb3V0ICR7a0QodCl9IHBlciBNVG9rYH1mdW5jdGlvbiBqRChlKXtyZXR1cm4gZTwxZTM/YCR7TWF0aC5yb3VuZChlKX1tc2A6YCR7KGUvMWUzKS50b0ZpeGVkKDEpfXNgfWZ1bmN0aW9uIE1EKGUsdCl7aWYoIWV8fGU9PT1gMDAwMS0wMS0wMVQwMDowMDowMFpgKXJldHVybiBudWxsO2xldCBuPW5ldyBEYXRlKGUpLmdldFRpbWUoKTtyZXR1cm4gTnVtYmVyLmlzTmFOKG4pP251bGw6TWF0aC5tYXgoMCxNYXRoLnJvdW5kKCh0LW4pLzFlMykpfWZ1bmN0aW9uIE5EKGUpe2xldCB0PU1EKGUsRGF0ZS5ub3coKSk7cmV0dXJuIHQ9PT1udWxsP2BgOmAgKCR7dH1zIGFnbylgfWZ1bmN0aW9uIFBEKGUsdD1EYXRlLm5vdygpKXtsZXQgbj1NRChlLHQpO3JldHVybiBuPT09bnVsbD9gYDpgJHtufXMgYWdvYH1mdW5jdGlvbiBGRChlKXtpZighZXx8ZT09PWAwMDAxLTAxLTAxVDAwOjAwOjAwWmApcmV0dXJuYGA7bGV0IHQ9bmV3IERhdGUoZSkuZ2V0VGltZSgpO2lmKE51bWJlci5pc05hTih0KSlyZXR1cm5gYDtsZXQgbj1NYXRoLnJvdW5kKCh0LURhdGUubm93KCkpLzFlMyk7cmV0dXJuIG48PTA/YGA6YGluICR7bn1zYH1mdW5jdGlvbiBJRChlKXtpZighZXx8ZT09PWAwMDAxLTAxLTAxVDAwOjAwOjAwWmApcmV0dXJuYG5ldmVyYDtsZXQgdD1uZXcgRGF0ZShlKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVTdHJpbmcoKX1mdW5jdGlvbiBMRChlLHQpe3JldHVybiBlP05EKHQpP2ByZWZyZXNoZWRgOmBwZW5kaW5nYDpgb2ZmYH1mdW5jdGlvbiBSRChlLHQpe3N3aXRjaChMRChlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm5gcmVmcmVzaGVkJHtORCh0KX1gfX1mdW5jdGlvbiB6RChlLHQpe3N3aXRjaChMRChlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm4gSUQodCl9fWZ1bmN0aW9uIEJEKGUpe2lmKCFlKXJldHVybmBub25lYDtsZXQgdD1bXTtyZXR1cm4gZS5yZXF1ZXN0c1Blck1pbnV0ZSYmdC5wdXNoKGByZXEvbWluICR7ZS5yZXF1ZXN0c1Blck1pbnV0ZX1gKSxlLnJlcXVlc3RzUGVyRGF5JiZ0LnB1c2goYHJlcS9kYXkgJHtlLnJlcXVlc3RzUGVyRGF5fWApLGUudG9rZW5zUGVyRGF5JiZ0LnB1c2goYHRvay9kYXkgJHtlLnRva2Vuc1BlckRheX1gKSxlLnRva2Vuc1Blck1vbnRoJiZ0LnB1c2goYHRvay9tb250aCAke2UudG9rZW5zUGVyTW9udGh9YCksZS5jb3N0UGVyRGF5VVNEJiZ0LnB1c2goYGNvc3QvZGF5ICQke2UuY29zdFBlckRheVVTRH1gKSxlLmNvc3RQZXJNb250aFVTRCYmdC5wdXNoKGBjb3N0L21vbnRoICQke2UuY29zdFBlck1vbnRoVVNEfWApLHQubGVuZ3RoP3Quam9pbihgLCBgKTpgbm9uZWB9ZnVuY3Rpb24gVkQoZSx0KXtzd2l0Y2godCl7Y2FzZWBob3VyYDpyZXR1cm5gJHtlLnNsaWNlKDgsMTApfTowMCBVVENgO2Nhc2VgZGF5YDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKSxyPU51bWJlcihlLnNsaWNlKDYsOCkpO3JldHVybiBuZXcgRGF0ZSh0LG4tMSxyKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDpgc2hvcnRgLGRheTpgbnVtZXJpY2B9KX1jYXNlYG1vbnRoYDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEsMSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCx5ZWFyOmBudW1lcmljYH0pfX19ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIHlEW2VdPz9lfWZ1bmN0aW9uIFVEKGUpe3JldHVybiBlLnVzZXI/YHVzZXI6JHtlLnVzZXJ9YDplLmdyb3VwP2Bncm91cDoke2UuZ3JvdXB9YDpg4oCUYH1mdW5jdGlvbiBXRChlKXtsZXQgdD1bZS5tb2RlbCxlLnByb3ZpZGVyXS5maWx0ZXIoZT0+ISFlKTtyZXR1cm4gdC5sZW5ndGg/dC5qb2luKGAg4oaSIGApOmDigJRgfWZ1bmN0aW9uIEdEKCl7cmV0dXJuW3tpZDpgdGltZWAsaGVhZGVyOmBUaW1lYCxhY2Nlc3NvckZuOmU9PmUudGltZSxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sSUQoZS5vcmlnaW5hbC50aW1lKSl9LHtpZDpga2luZGAsaGVhZGVyOmBLaW5kYCxhY2Nlc3NvckZuOmU9PmUua2luZCxjZWxsOih7cm93OmV9KT0+RyhfRCx7YXM6YHNwYW5gLHZhcmlhbnQ6eEQoZS5vcmlnaW5hbC5raW5kKSxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+SEQoZS5vcmlnaW5hbC5raW5kKSl9LHtpZDpgcm91dGVgLGhlYWRlcjpgUm91dGVgLGFjY2Vzc29yRm46ZT0+ZS5yb3V0ZSxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LGUub3JpZ2luYWwucm91dGUpfSx7aWQ6YHNjb3BlYCxoZWFkZXI6YFVzZXIgLyBncm91cGAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmUudXNlcj8/ZS5ncm91cD8/YGAsY2VsbDooe3JvdzplfSk9PntsZXQgdD1VRChlLm9yaWdpbmFsKTtyZXR1cm4gRyhgc3BhbmAse2NsYXNzOnQ9PT1g4oCUYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDp2b2lkIDB9LHQpfX0se2lkOmB0YXJnZXRgLGhlYWRlcjpgTW9kZWwgLyBwcm92aWRlcmAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmAke2UubW9kZWw/P2BgfSAke2UucHJvdmlkZXI/P2BgfWAsY2VsbDooe3JvdzplfSk9PntsZXQgdD1XRChlLm9yaWdpbmFsKTtyZXR1cm4gRyhgc3BhbmAse2NsYXNzOnQ9PT1g4oCUYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDpgZm9udC1tb25vIHRleHQteHNgfSx0KX19LHtpZDpgcmVwbGljYWAsaGVhZGVyOmBSZXBsaWNhYCxhY2Nlc3NvckZuOmU9PmUucmVwbGljYSxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxlLm9yaWdpbmFsLnJlcGxpY2EpfSx7aWQ6YHN0YXR1c2AsaGVhZGVyOmBTdGF0dXNgLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46ZT0+ZS5zdGF0dXM/PzAsY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgdGFidWxhci1udW1zYH0sZS5vcmlnaW5hbC5zdGF0dXM9PT12b2lkIDA/YOKAlGA6U3RyaW5nKGUub3JpZ2luYWwuc3RhdHVzKSl9LHtpZDpgbWVzc2FnZWAsaGVhZGVyOmBNZXNzYWdlYCxlbmFibGVTb3J0aW5nOiExLGFjY2Vzc29yRm46ZT0+ZS5tZXNzYWdlLGNlbGw6KHtyb3c6ZX0pPT5HKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGUub3JpZ2luYWwubWVzc2FnZSl9XX12YXIgS0Q9NWUzLHFEPTIwMCxKRD10XyhgZXZlbnRzYCx7c3RhdGU6KCk9Pih7ZXZlbnRzOltdLHNvdXJjZTpgcmVwbGljYWAscmVwbGljYTpgYCxjYXBhY2l0eTowLGRlZ3JhZGVkOiExLGxhc3RVcGRhdGVkOm51bGwsZXJyb3I6YGAsa2luZEZpbHRlcjpgYCx1c2VyRmlsdGVyOmBgLHBvbGxlcjp2b2lkIDAscmVmcmVzaGluZzohMX0pLGFjdGlvbnM6e2FzeW5jIHJlZnJlc2goKXtpZihpVCgpLmlzQXV0aGVudGljYXRlZCYmIXRoaXMucmVmcmVzaGluZyl7dGhpcy5yZWZyZXNoaW5nPSEwO3RyeXtsZXQgZT1hd2FpdCBzVChgL2FkbWluL2FwaS9ldmVudHM/bGltaXQ9JHtxRH1gKTt0aGlzLmV2ZW50cz1lLmV2ZW50cyx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLnJlcGxpY2E9ZS5yZXBsaWNhLHRoaXMuY2FwYWNpdHk9ZS5jYXBhY2l0eSx0aGlzLmRlZ3JhZGVkPWUuZGVncmFkZWQ/PyExLHRoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUsdGhpcy5lcnJvcj1gYH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYVQmJihlLnN0YXR1cz09PTQwMXx8ZS5zdGF0dXM9PT00MDMpKXJldHVybjt0aGlzLmVycm9yPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6U3RyaW5nKGUpfWZpbmFsbHl7dGhpcy5yZWZyZXNoaW5nPSExfX19LHNldEtpbmRGaWx0ZXIoZSl7dGhpcy5raW5kRmlsdGVyPWV9LHNldFVzZXJGaWx0ZXIoZSl7dGhpcy51c2VyRmlsdGVyPWV9LHN0YXJ0UG9sbGluZygpe3RoaXMucG9sbGVyfHwodGhpcy5wb2xsZXI9bFQoe2ludGVydmFsTXM6S0QsdGljazooKT0+dm9pZCB0aGlzLnJlZnJlc2goKX0pLHRoaXMucG9sbGVyLnN0YXJ0KCkpfSxzdG9wUG9sbGluZygpe3RoaXMucG9sbGVyPy5zdG9wKCksdGhpcy5wb2xsZXI9dm9pZCAwfX19KSxZRD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxYRD17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtM2B9LFpEPXtrZXk6MCxjbGFzczpgbWItMyB0ZXh0LXNtIHRleHQtZGVzdHJ1Y3RpdmVgfSxRRD1gYWxsYCwkRD1QKHtfX25hbWU6YEV2ZW50c1ZpZXdgLHNldHVwKGUpe2xldCB0PUpEKCkse2tpbmRGaWx0ZXI6bix1c2VyRmlsdGVyOnJ9PW5fKHQpLHtub3JtYWxpemVkOml9PWdEKHIpLGE9VygoKT0+bi52YWx1ZT09PWBgP1FEOm4udmFsdWUpLG89VygoKT0+U0QodC5ldmVudHMse2tpbmQ6bi52YWx1ZSx1c2VyOmkudmFsdWV9KSk7ZnVuY3Rpb24gcyhlKXt0eXBlb2YgZT09YHN0cmluZ2AmJnQuc2V0S2luZEZpbHRlcihlPT09UUQ/YGA6ZSl9bGV0IGM9R0QoKSxsPVcoKCk9PnQubGFzdFVwZGF0ZWQ/dC5ldmVudHMubGVuZ3RoPT09MD9gbm8gZXZlbnRzIHJlY29yZGVkYDpuLnZhbHVlIT09YGB8fGkudmFsdWU/YG5vIGV2ZW50cyBtYXRjaCB0aGUgY3VycmVudCBmaWx0ZXJgOmBub25lYDpgbG9hZGluZ+KApmApLHU9VygoKT0+dC5sYXN0VXBkYXRlZD90LnNvdXJjZT09PWByZWRpc2A/YEZsZWV0LXdpZGUsIGFjcm9zcyBldmVyeSByZXBsaWNhYDpgVGhpcyByZXBsaWNhIG9ubHkgKCR7dC5yZXBsaWNhfHxgdW5rbm93bmB9KSDigJQgUmVkaXMgaXMgdW5yZWFjaGFibGUgb3IgdW5jb25maWd1cmVkYDpgbG9hZGluZ+KApmApO3JldHVybiBRaSgoKT0+e3Quc3RhcnRQb2xsaW5nKCl9KSxuYSgoKT0+e3Quc3RvcFBvbGxpbmcoKX0pLChlLG4pPT57bGV0IGk9bGEoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBMKCksUihgZGl2YCxZRCxbTSh0KS5kZWdyYWRlZD8oTCgpLHooTSgkdikse2tleTowLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6TigoKT0+W1YoaSx7aWNvbjpNKHZfKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxWKE0odHkpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLm5bMV18fD1bSChgRmxlZXQtd2lkZSBldmVudCBsb2cgdW5hdmFpbGFibGVgLC0xKV1dKSxfOjF9KSxWKE0oZXkpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLm5bMl18fD1bSChgIFJlZGlzIGlzIGNvbmZpZ3VyZWQgYnV0IGNvdWxkIG5vdCBiZSByZWFkIOKAlCBzaG93aW5nIHRoaXMgcmVwbGljYSdzIG93biBpbi1tZW1vcnkgZXZlbnRzIG9ubHksIHdoaWNoIG1heSBtaXNzIGV2ZW50cyByZWNvcmRlZCBieSBvdGhlciByZXBsaWNhcy4gYCwtMSldXSksXzoxfSldKSxfOjF9KSk6VShgYCwhMCksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgc206anVzdGlmeS1iZXR3ZWVuYH0se2RlZmF1bHQ6TigoKT0+W0IoYGRpdmAsbnVsbCxbVihNKFF3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PlsuLi5uWzNdfHw9W0goYEV2ZW50c2AsLTEpXV0pLF86MX0pLE0odCkubGFzdFVwZGF0ZWQ/KEwoKSx6KE0oWHcpLHtrZXk6MX0se2RlZmF1bHQ6TigoKT0+W0goayh1LnZhbHVlKStgIOKAlCByYXRlIGxpbWl0LCBidWRnZXQsIGFuZCB1cHN0cmVhbSBldmVudHMsIG5ld2VzdCBmaXJzdCAoY2FwYWNpdHkgYCtrKE0odCkuY2FwYWNpdHkpK2ApLiBgLDEpXSksXzoxfSkpOihMKCkseihNKFh3KSx7a2V5OjB9LHtkZWZhdWx0Ok4oKCk9PlsuLi5uWzRdfHw9W0goYExvYWRpbmfigKZgLC0xKV1dKSxfOjF9KSldKSxCKGBkaXZgLFhELFtWKHNELHttb2RlbFZhbHVlOk0ociksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm5bMF18fD1lPT51bihyKT9yLnZhbHVlPWU6bnVsbCxwbGFjZWhvbGRlcjpgRmlsdGVyIGJ5IHVzZXIgb3IgZ3JvdXBgLGNsYXNzOmB3LTU2YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKSxWKE0oY0QpLHsibW9kZWwtdmFsdWUiOmEudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnN9LHtkZWZhdWx0Ok4oKCk9PltWKE0obUQpLHtjbGFzczpgdy00NGAsImFyaWEtbGFiZWwiOmBGaWx0ZXIgYnkga2luZGB9LHtkZWZhdWx0Ok4oKCk9PltWKE0oaEQpLHtwbGFjZWhvbGRlcjpgS2luZGB9KV0pLF86MX0pLFYoTShsRCksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKGREKSx7dmFsdWU6UUR9LHtkZWZhdWx0Ok4oKCk9PlsuLi5uWzVdfHw9W0goYEFsbCBraW5kc2AsLTEpXV0pLF86MX0pLChMKCEwKSxSKEksbnVsbCxoYShNKGJEKSxlPT4oTCgpLHooTShkRCkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0Ok4oKCk9PltIKGsoTSh5RClbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKV0pLF86MX0pLFYoTShZdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bTSh0KS5lcnJvcj8oTCgpLFIoYHBgLFpELGsoTSh0KS5lcnJvciksMSkpOlUoYGAsITApLFYob0Qse2NvbHVtbnM6TShjKSxkYXRhOm8udmFsdWUsImVtcHR5LW1lc3NhZ2UiOmwudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSldKX19fSk7YXN5bmMgZnVuY3Rpb24gZU8oZSx0KXtpZihuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpdHJ5e3JldHVybiBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChlKSxgY29waWVkYH1jYXRjaHt9aWYoIXQpcmV0dXJuYGZhaWxlZGA7bGV0IG49ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtuLnNlbGVjdE5vZGVDb250ZW50cyh0KTtsZXQgcj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIHI/KHIucmVtb3ZlQWxsUmFuZ2VzKCksci5hZGRSYW5nZShuKSxgc2VsZWN0ZWRgKTpgZmFpbGVkYH12YXIgdE89UCh7X19uYW1lOmBNb2RlbENoaXBgLHByb3BzOntpZDp7fSxjb250ZXh0VG9rZW5zOnt9LGlucHV0UGVyTVRva1VzZDp7fSxvdXRwdXRQZXJNVG9rVXNkOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49Y2koYGxhYmVsYCkscj1qKGBpZGxlYCksaTtmdW5jdGlvbiBhKCl7Y2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoKT0+e3IudmFsdWU9YGlkbGVgfSwxNTAwKX1hc3luYyBmdW5jdGlvbiBvKCl7bGV0IGU9YXdhaXQgZU8odC5pZCxuLnZhbHVlPz92b2lkIDApO3IudmFsdWU9ZSxhKCl9bGV0IHM9e2lkbGU6eV8sY29waWVkOmZfLHNlbGVjdGVkOmZfLGZhaWxlZDp2X30sYz1XKCgpPT4oe2lkbGU6YENvcHkgJHt0LmlkfWAsY29waWVkOmBDb3BpZWRgLHNlbGVjdGVkOmBTZWxlY3RlZCDigJQgcHJlc3MgQ3RybC9DbWQrQ2AsZmFpbGVkOmBDb3B5IGZhaWxlZGB9KSksbD1XKCgpPT57bGV0IGU9W107cmV0dXJuIHQuaW5wdXRQZXJNVG9rVXNkIT09dm9pZCAwJiZ0Lm91dHB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJmUucHVzaChBRCh0LmlucHV0UGVyTVRva1VzZCx0Lm91dHB1dFBlck1Ub2tVc2QpKSx0LmNvbnRleHRUb2tlbnMhPT12b2lkIDAmJmUucHVzaChgJHtPRCh0LmNvbnRleHRUb2tlbnMpfSBjb250ZXh0YCksZS5qb2luKGAgwrcgYCl9KSx1PVcoKCk9PntsZXQgZT1jLnZhbHVlW3IudmFsdWVdO3JldHVybiBsLnZhbHVlP2Ake2V9IMK3ICR7bC52YWx1ZX1gOmV9KTtyZXR1cm4gbmEoKCk9PntjbGVhclRpbWVvdXQoaSl9KSwodCxuKT0+e2xldCBpPWxhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gTCgpLHooTShfRCkse2FzOmBidXR0b25gLHR5cGU6YGJ1dHRvbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpPKFtgY3Vyc29yLXBvaW50ZXIgZ2FwLTEgZm9udC1tb25vIHRleHQteHMgZm9udC1ub3JtYWwgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmRgLHIudmFsdWU9PT1gZmFpbGVkYD9gdGV4dC1kZXN0cnVjdGl2ZWA6YGBdKSx0aXRsZTp1LnZhbHVlLCJhcmlhLWxhYmVsIjp1LnZhbHVlLG9uQ2xpY2s6b30se2RlZmF1bHQ6TigoKT0+W0IoYHNwYW5gLHtyZWY6YGxhYmVsYCxjbGFzczpgc2VsZWN0LXRleHRgfSxrKGUuaWQpLDUxMyksVihpLHtpY29uOnNbci52YWx1ZV0sY2xhc3M6YHNpemUtMi41IHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGNsYXNzYCxgdGl0bGVgLGBhcmlhLWxhYmVsYF0pfX19KTtmdW5jdGlvbiBuTyhlLHQpe3JldHVybiFOdW1iZXIuaXNGaW5pdGUoZSl8fGU8PTA/bnVsbDooZS0oTnVtYmVyLmlzRmluaXRlKHQpP3Q6MCkpL2V9ZnVuY3Rpb24gck8oZSl7cmV0dXJuIGU9PT1udWxsP2Buby10cmFmZmljYDplPC45P2BzZXZlcmVgOmU8Ljk5P2BkZWdyYWRlZGA6YGhlYWx0aHlgfWZ1bmN0aW9uIGlPKGUsdCl7bGV0IG49bk8oZSx0KTtyZXR1cm4gbiE9PW51bGwmJm48Ljk5fWZ1bmN0aW9uIGFPKGUpe3JldHVybiBlPj0xP2AxMDAlYDpgJHtNYXRoLmZsb29yKGUqMTAwKX0lYH1mdW5jdGlvbiBvTyhlLHQsbil7cmV0dXJuIGU9PT0xP3Q6bn1mdW5jdGlvbiBzTyhlLHQpe2lmKGU8PTApcmV0dXJuYG5vIHRyYWZmaWMgaW4gdGhlIGxhc3QgbWludXRlYDtsZXQgbj1uTyhlLHQpLHI9bj09PW51bGw/YGA6YCAoJHthTyhuKX0pYDtyZXR1cm5gJHtlfSAke29PKGUsYGF0dGVtcHRgLGBhdHRlbXB0c2ApfSwgJHt0fSAke29PKHQsYGZhaWx1cmVgLGBmYWlsdXJlc2ApfSBpbiB0aGUgbGFzdCBtaW51dGUke3J9YH1mdW5jdGlvbiBjTyhlLHQpe2lmKGU8PTApcmV0dXJuYG5vIHRyYWZmaWMgdG9kYXlgO2xldCBuPW5PKGUsdCkscj1uPT09bnVsbD9gYDpgICgke2FPKG4pfSlgO3JldHVybmAke2V9ICR7b08oZSxgYXR0ZW1wdGAsYGF0dGVtcHRzYCl9LCAke3R9ICR7b08odCxgZmFpbHVyZWAsYGZhaWx1cmVzYCl9IHRvZGF5JHtyfWB9dmFyIGxPPXsiYXJpYS1oaWRkZW4iOmB0cnVlYH0sdU89e2NsYXNzOmBzci1vbmx5YH0sZE89UCh7X19uYW1lOmBQcm92aWRlclJhdGVCYWRnZWAscHJvcHM6e2F0dGVtcHRzRGF5Ont9LGZhaWx1cmVzRGF5Ont9LGF0dGVtcHRzTWludXRlOnt9LGZhaWx1cmVzTWludXRlOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49VygoKT0+bk8odC5hdHRlbXB0c0RheSx0LmZhaWx1cmVzRGF5KSkscj1XKCgpPT5yTyhuLnZhbHVlKSksaT1XKCgpPT5yLnZhbHVlPT09YG5vLXRyYWZmaWNgP2BubyB0cmFmZmljYDphTyhuLnZhbHVlKSksYT1XKCgpPT50LmF0dGVtcHRzTWludXRlPT09dm9pZCAwfHx0LmZhaWx1cmVzTWludXRlPT09dm9pZCAwP2NPKHQuYXR0ZW1wdHNEYXksdC5mYWlsdXJlc0RheSk6c08odC5hdHRlbXB0c01pbnV0ZSx0LmZhaWx1cmVzTWludXRlKSksbz1XKCgpPT5yLnZhbHVlPT09YHNldmVyZWA/YGRlc3RydWN0aXZlYDpyLnZhbHVlPT09YGhlYWx0aHlgP2BzZWNvbmRhcnlgOmBvdXRsaW5lYCkscz1XKCgpPT5yLnZhbHVlPT09YGRlZ3JhZGVkYD9gYm9yZGVyLXN0YXR1cy13YXJuLzQwIHRleHQtc3RhdHVzLXdhcm5gOnIudmFsdWU9PT1gbm8tdHJhZmZpY2A/YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGA6YGApO3JldHVybihlLHQpPT4oTCgpLHooTShfRCkse2FzOmBzcGFuYCx2YXJpYW50Om8udmFsdWUsY2xhc3M6Tyhbcy52YWx1ZSxgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYF0pLHRpdGxlOmEudmFsdWV9LHtkZWZhdWx0Ok4oKCk9PltCKGBzcGFuYCxsTyxrKGkudmFsdWUpLDEpLEIoYHNwYW5gLHVPLGsoYS52YWx1ZSksMSldKSxfOjF9LDgsW2B2YXJpYW50YCxgY2xhc3NgLGB0aXRsZWBdKSl9fSksZk89e2Nvc3Q6YENvc3RgLHJlcTpgUmVxdWVzdHNgLHRva2luOmBUb2tlbnMgaW5gLHRva291dDpgVG9rZW5zIG91dGB9LHBPPTEwMCxtTz0zZTQsaE89e2hvdXI6MjQsZGF5OjMwLG1vbnRoOjEyfSxnTz17aG91cjpgMjRoYCxkYXk6YDMwZGAsbW9udGg6YDEybW9gfTtmdW5jdGlvbiBfTyhlKXtzd2l0Y2goZSl7Y2FzZWByZXF1ZXN0c2A6cmV0dXJuW2ByZXFgXTtjYXNlYHRva2Vuc2A6cmV0dXJuW2B0b2tpbmAsYHRva291dGBdO2Nhc2VgY29zdGA6cmV0dXJuW2Bjb3N0YF07Y2FzZWBtb2RlbHNgOnJldHVybltdfX12YXIgdk89dF8oYGhpc3RvcnlgLHtzdGF0ZTooKT0+KHtzY29wZTpgdG90YWxgLHdpbmRvdzpgaG91cmAsdGFiOmByZXF1ZXN0c2AsbW9kZWxNZXRyaWM6YGNvc3RgLHNlcmllc0J5TWV0cmljOnt9LG1vZGVsUmFua2luZzpbXSxtb2RlbE9wdGlvbnM6W10sbW9kZWxGaWx0ZXI6YGAsbG9hZGluZzohMSxsb2FkZWQ6ITEsZXJyb3I6YGAscG9sbGVyOnZvaWQgMCxzZXJpZXNSZXFJZDowLG9wdGlvbnNSZXFJZDowfSksYWN0aW9uczp7c2V0U2NvcGUoZSl7ZSE9PXRoaXMuc2NvcGUmJih0aGlzLnNjb3BlPWUsdGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpKX0sc2V0V2luZG93KGUpe2UhPT10aGlzLndpbmRvdyYmKHRoaXMud2luZG93PWUsdGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLm1vZGVsUmFua2luZz1bXSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpLHRoaXMuZmV0Y2hNb2RlbE9wdGlvbnMoKSl9LHNldFRhYihlKXtlIT09dGhpcy50YWImJih0aGlzLnRhYj1lLHRoaXMuc2VyaWVzQnlNZXRyaWM9e30sdGhpcy5tb2RlbFJhbmtpbmc9W10sdGhpcy5tb2RlbEZpbHRlcj1gYCx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpKX0sc2V0TW9kZWxGaWx0ZXIoZSl7ZSE9PXRoaXMubW9kZWxGaWx0ZXImJih0aGlzLm1vZGVsRmlsdGVyPWUsdGhpcy50YWI9PT1gbW9kZWxzYCYmKHRoaXMubW9kZWxSYW5raW5nPVtdLHRoaXMuZXJyb3I9YGAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZWZyZXNoKCkpKX0sc2V0U2VsZWN0aW9uKGUpe2xldCB0PSExLG49ITE7ZS53aW5kb3chPT12b2lkIDAmJmUud2luZG93IT09dGhpcy53aW5kb3cmJih0aGlzLndpbmRvdz1lLndpbmRvdyx0PSEwLG49ITApLGUudGFiIT09dm9pZCAwJiZlLnRhYiE9PXRoaXMudGFiJiYodGhpcy50YWI9ZS50YWIsdGhpcy5tb2RlbEZpbHRlcj1gYCx0PSEwKSxlLnNjb3BlIT09dm9pZCAwJiZlLnNjb3BlIT09dGhpcy5zY29wZSYmKHRoaXMuc2NvcGU9ZS5zY29wZSx0PSEwKSxlLm1vZGVsTWV0cmljIT09dm9pZCAwJiZlLm1vZGVsTWV0cmljIT09dGhpcy5tb2RlbE1ldHJpYyYmKHRoaXMubW9kZWxNZXRyaWM9ZS5tb2RlbE1ldHJpYyx0PSEwKSxlLm1vZGVsRmlsdGVyIT09dm9pZCAwJiZlLm1vZGVsRmlsdGVyIT09dGhpcy5tb2RlbEZpbHRlciYmKHRoaXMubW9kZWxGaWx0ZXI9ZS5tb2RlbEZpbHRlcix0PSEwKSx0JiYodGhpcy5zZXJpZXNCeU1ldHJpYz17fSx0aGlzLm1vZGVsUmFua2luZz1bXSx0aGlzLmVycm9yPWBgLHRoaXMubG9hZGVkPSExLHRoaXMucmVmcmVzaCgpLG4mJnRoaXMuZmV0Y2hNb2RlbE9wdGlvbnMoKSl9LHNldE1vZGVsTWV0cmljKGUpe2UhPT10aGlzLm1vZGVsTWV0cmljJiYodGhpcy5tb2RlbE1ldHJpYz1lLHRoaXMubW9kZWxSYW5raW5nPVtdLHRoaXMuZXJyb3I9YGAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZWZyZXNoKCkpfSxhc3luYyByZWZyZXNoKCl7YXdhaXQodGhpcy50YWI9PT1gbW9kZWxzYD90aGlzLmZldGNoTW9kZWxSYW5raW5nKCk6dGhpcy5mZXRjaFNlcmllcygpKX0sYXN5bmMgZmV0Y2hTZXJpZXMoKXtpZighaVQoKS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldCBlPSsrdGhpcy5zZXJpZXNSZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCB0PWhPW3RoaXMud2luZG93XSxuPV9PKHRoaXMudGFiKSxyPWF3YWl0IFByb21pc2UuYWxsKG4ubWFwKGU9PnNUKGAvYWRtaW4vYXBpL3VzYWdlL2hpc3Rvcnk/c2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zY29wZSl9Jm1ldHJpYz0ke2V9JndpbmRvdz0ke3RoaXMud2luZG93fSZzcGFuPSR7dH1gKSkpO2lmKGUhPT10aGlzLnNlcmllc1JlcUlkKXJldHVybjtsZXQgaT17fTtuLmZvckVhY2goKGUsdCk9PntpW2VdPXJbdF0ucG9pbnRzfSksdGhpcy5zZXJpZXNCeU1ldHJpYz1pLHRoaXMubG9hZGVkPSEwLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWR8fHQgaW5zdGFuY2VvZiBhVCYmKHQuc3RhdHVzPT09NDAxfHx0LnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9ZmluYWxseXtlPT09dGhpcy5zZXJpZXNSZXFJZCYmKHRoaXMubG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaE1vZGVsUmFua2luZygpe2lmKCFpVCgpLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Kyt0aGlzLnNlcmllc1JlcUlkO3RoaXMubG9hZGluZz0hMDt0cnl7bGV0IHQ9aE9bdGhpcy53aW5kb3ddLG49dGhpcy5tb2RlbEZpbHRlcj9gJnByZWZpeD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLm1vZGVsRmlsdGVyKX1gOmBgLHI9YXdhaXQgc1QoYC9hZG1pbi9hcGkvdXNhZ2UvbW9kZWxzP21ldHJpYz0ke3RoaXMubW9kZWxNZXRyaWN9JndpbmRvdz0ke3RoaXMud2luZG93fSZsaW1pdD0yMCZzcGFuPSR7dH0ke259YCk7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWQpcmV0dXJuO3RoaXMubW9kZWxSYW5raW5nPXIubW9kZWxzLHRoaXMubG9hZGVkPSEwLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYoZSE9PXRoaXMuc2VyaWVzUmVxSWR8fHQgaW5zdGFuY2VvZiBhVCYmKHQuc3RhdHVzPT09NDAxfHx0LnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9ZmluYWxseXtlPT09dGhpcy5zZXJpZXNSZXFJZCYmKHRoaXMubG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaE1vZGVsT3B0aW9ucygpe2lmKCFpVCgpLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Kyt0aGlzLm9wdGlvbnNSZXFJZDt0cnl7bGV0IHQ9aE9bdGhpcy53aW5kb3ddLG49YXdhaXQgc1QoYC9hZG1pbi9hcGkvdXNhZ2UvbW9kZWxzP21ldHJpYz1yZXEmd2luZG93PSR7dGhpcy53aW5kb3d9JmxpbWl0PSR7cE99JnNwYW49JHt0fWApO2lmKGUhPT10aGlzLm9wdGlvbnNSZXFJZClyZXR1cm47dGhpcy5tb2RlbE9wdGlvbnM9bi5tb2RlbHN9Y2F0Y2h7fX0sc3RhcnRBdXRvUmVmcmVzaCgpe3RoaXMucG9sbGVyfHwodGhpcy5wb2xsZXI9bFQoe2ludGVydmFsTXM6bU8sdGljazooKT0+e3RoaXMubG9hZGluZ3x8dGhpcy5yZWZyZXNoKCl9fSksdGhpcy5wb2xsZXIuc3RhcnQoKSl9LHN0b3BBdXRvUmVmcmVzaCgpe3RoaXMucG9sbGVyPy5zdG9wKCksdGhpcy5wb2xsZXI9dm9pZCAwfX19KSx5Tz10XyhgbmF2YCx7c3RhdGU6KCk9Pih7YWN0aXZlVGFiOmBwcm92aWRlcnNgLHVzYWdlUXVlcnk6YGB9KSxhY3Rpb25zOntnb1RvQ2hhcnRzKGUpe2xldCB0PXZPKCk7dC5zZXRTZWxlY3Rpb24odC50YWI9PT1gbW9kZWxzYD97dGFiOmByZXF1ZXN0c2Asc2NvcGU6ZX06e3Njb3BlOmV9KSx0aGlzLmFjdGl2ZVRhYj1gY2hhcnRzYH0sZ29Ub01vZGVscyhlKXt2TygpLnNldFNlbGVjdGlvbih7dGFiOmBtb2RlbHNgLG1vZGVsRmlsdGVyOmV9KSx0aGlzLmFjdGl2ZVRhYj1gY2hhcnRzYH19fSksYk89W2BhcmlhLWxhYmVsYCxgdGl0bGVgXSx4Tz1QKHtfX25hbWU6YFNjb3BlTGlua2AscHJvcHM6e2xhYmVsOnt9LHNjb3BlOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49eU8oKTtmdW5jdGlvbiByKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksbi5nb1RvQ2hhcnRzKHQuc2NvcGUpfXJldHVybih0LG4pPT57bGV0IGk9bGEoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBMKCksUihgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHtlLmxhYmVsfSBpbiBDaGFydHNgLHRpdGxlOmBWaWV3ICR7ZS5sYWJlbH0gaW4gQ2hhcnRzYCxjbGFzczpgaW5saW5lLWZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gdGV4dC1pbmhlcml0IGhvdmVyOnRleHQtcHJpbWFyeSBob3Zlcjp1bmRlcmxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgLG9uQ2xpY2s6cn0sW0IoYHNwYW5gLG51bGwsayhlLmxhYmVsKSwxKSxWKGkse2ljb246TShkXyksY2xhc3M6YHNpemUtM2AsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldLDgsYk8pfX19KSxTTz1QKHtfX25hbWU6YEFjY29yZGlvbmAscHJvcHM6e2NvbGxhcHNpYmxlOnt0eXBlOkJvb2xlYW59LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LGRpcjp7fSxvcmllbnRhdGlvbjp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sdHlwZTp7fSxtb2RlbFZhbHVlOnt9LGRlZmF1bHRWYWx1ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9ZGIoT3kobixgY2xhc3NgKSxyKTtyZXR1cm4oZSx0KT0+KEwoKSx6KE0ocWIpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uYH0sTShpKSx7Y2xhc3M6TShRdikoYGZsZXggdy1mdWxsIGZsZXgtY29sYCxuLmNsYXNzKX0pLHtkZWZhdWx0Ok4odD0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHhlKENzKHQpKSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLENPPVAoe19fbmFtZTpgQWNjb3JkaW9uQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPU95KHQsYGNsYXNzYCk7cmV0dXJuKGUscik9PihMKCkseihNKFFiKSxrcyh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1jb250ZW50YH0sTShuKSx7Y2xhc3M6YGRhdGEtb3BlbjphbmltYXRlLWFjY29yZGlvbi1kb3duIGRhdGEtY2xvc2VkOmFuaW1hdGUtYWNjb3JkaW9uLXVwIHRleHQtc20gb3ZlcmZsb3ctaGlkZGVuYH0pLHtkZWZhdWx0Ok4oKCk9PltCKGBkaXZgLHtjbGFzczpPKE0oUXYpKGBwdC0wIHBiLTIuNSBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9wOm5vdCg6bGFzdC1jaGlsZCldOm1iLTRgLHQuY2xhc3MpKX0sW0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSxfOjN9LDE2KSl9fSksd089UCh7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdmFsdWU6e30sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49dWIoT3kodCxgY2xhc3NgKSk7cmV0dXJuKGUscik9PihMKCkseihNKFpiKSxrcyh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1pdGVtYH0sTShuKSx7Y2xhc3M6TShRdikoYG5vdC1sYXN0OmJvcmRlci1iYCx0LmNsYXNzKX0pLHtkZWZhdWx0Ok4odD0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHhlKENzKHQpKSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLFRPPVAoe19fbmFtZTpgQWNjb3JkaW9uVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0saGVhZGVyQ2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1PeSh0LGBjbGFzc2AsYGhlYWRlckNsYXNzYCk7cmV0dXJuKGUscik9PntsZXQgaT1sYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIEwoKSx6KE0oJGIpLHtjbGFzczpPKE0oUXYpKGBmbGV4YCx0LmhlYWRlckNsYXNzKSl9LHtkZWZhdWx0Ok4oKCk9PltWKE0oZXgpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXJgfSxNKG4pLHtjbGFzczpNKFF2KShgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOmFmdGVyOmJvcmRlci1yaW5nICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbGcgcHktMi41IHRleHQtbGVmdCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBmb2N1cy12aXNpYmxlOnJpbmctMyAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOm1sLWF1dG8gKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTpzaXplLTQgZ3JvdXAvYWNjb3JkaW9uLXRyaWdnZXIgcmVsYXRpdmUgZmxleCBmbGV4LTEgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1hbGwgb3V0bGluZS1ub25lIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpOKCgpPT5bRihlLiRzbG90cyxgZGVmYXVsdGApLEYoZS4kc2xvdHMsYGljb25gLHt9LCgpPT5bVihpLHtpY29uOk0oZ18pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBzaHJpbmstMCBncm91cC1hcmlhLWV4cGFuZGVkL2FjY29yZGlvbi10cmlnZ2VyOmhpZGRlbmB9LG51bGwsOCxbYGljb25gXSksVihpLHtpY29uOk0oY18pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBoaWRkZW4gc2hyaW5rLTAgZ3JvdXAtYXJpYS1leHBhbmRlZC9hY2NvcmRpb24tdHJpZ2dlcjppbmxpbmVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9LDgsW2BjbGFzc2BdKX19fSk7ZnVuY3Rpb24gRU8oZSx0LG4pe2lmKCF0KXJldHVybiBuZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7bGV0IHI9bmV3IFNldChlLm1hbnVhbGx5RXhwYW5kZWQpO2ZvcihsZXQgdCBvZiBuKWUubWFudWFsbHlDb2xsYXBzZWQuaGFzKHQpfHxyLmFkZCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBETyhlLHQsbil7bj8oZS5tYW51YWxseUV4cGFuZGVkLmRlbGV0ZSh0KSxlLm1hbnVhbGx5Q29sbGFwc2VkLmFkZCh0KSk6KGUubWFudWFsbHlDb2xsYXBzZWQuZGVsZXRlKHQpLGUubWFudWFsbHlFeHBhbmRlZC5hZGQodCkpfWZ1bmN0aW9uIE9PKGUpe2UubWFudWFsbHlDb2xsYXBzZWQuY2xlYXIoKX12YXIga089e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sQU89e2NsYXNzOmBncmlkIGdhcC00IHNtOmdyaWQtY29scy0zYH0sak89e2NsYXNzOmBmb250LW1lZGl1bWB9LE1PPXtrZXk6MCxjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41IHRleHQtZGVzdHJ1Y3RpdmVgfSxOTz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sUE89e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxGTz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sSU89e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxMTz17a2V5OjAsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxSTz17a2V5OjEsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx6Tz17Y2xhc3M6YG1iLTIgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxCTz17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yYH0sVk89W2BhcmlhLWxhYmVsYCxgdGl0bGVgLGBvbkNsaWNrYF0sSE89e2NsYXNzOmBzci1vbmx5YH0sVU89e2NsYXNzOmBmbGV4IGZsZXgtMSBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC14LTMgZ2FwLXktMSBwci0yIHRleHQtbGVmdGB9LFdPPXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sR089e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEtPPXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTNgfSxxTz17Y2xhc3M6YGJyZWFrLWFsbGB9LEpPPXtrZXk6MH0sWU89e2tleToxfSxYTz17Y2xhc3M6YHRleHQtZGVzdHJ1Y3RpdmVgfSxaTz17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxRTz17a2V5OjAsdGl0bGU6YGNvbnRleHQgd2luZG93YCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sJE89e2tleToxLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGVrPXtrZXk6MCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx0az1QKHtfX25hbWU6YFByb3ZpZGVyc1ZpZXdgLHNldHVwKGUpe2xldCB0PWRUKCksbj1XKCgpPT50Lm92ZXJ2aWV3KSxyPXlPKCk7ZnVuY3Rpb24gaShlKXtyLmdvVG9Nb2RlbHMoYCR7ZX0vYCl9bGV0IGE9WnQoe21hbnVhbGx5RXhwYW5kZWQ6bmV3IFNldCxtYW51YWxseUNvbGxhcHNlZDpuZXcgU2V0fSkse3F1ZXJ5Om8sbm9ybWFsaXplZDpzLGhhc1F1ZXJ5OmN9PWdEKCk7ZnVuY3Rpb24gbChlLHQpe3JldHVybiBDRChlLHQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocy52YWx1ZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5tb2RlbHMuc29tZSh0PT5sKGUubmFtZSx0KSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5hbGlhcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMudmFsdWUpfHxlLnRhcmdldC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMudmFsdWUpfWxldCBmPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5wcm92aWRlcnM/P1tdO3JldHVybiBjLnZhbHVlP2UuZmlsdGVyKHUpOmV9KSxwPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hbGlhc2VzPz9bXTtyZXR1cm4gYy52YWx1ZT9lLmZpbHRlcihkKTplfSksbT1XKCgpPT5FTyhhLGMudmFsdWUsZi52YWx1ZS5tYXAoZT0+ZS5uYW1lKSkpO2Z1bmN0aW9uIGgoZSl7RE8oYSxlLG0udmFsdWUuaGFzKGUpKX1sZXQgZz1XKHtnZXQ6KCk9PkFycmF5LmZyb20obS52YWx1ZSksc2V0OmU9PntsZXQgdD1uZXcgU2V0KGUpO2ZvcihsZXQgZSBvZiBtLnZhbHVlKXQuaGFzKGUpfHxoKGUpO2ZvcihsZXQgZSBvZiB0KW0udmFsdWUuaGFzKGUpfHxoKGUpfX0pO0RyKG8sZT0+e2UudHJpbSgpPT09YGAmJk9PKGEpfSk7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gYy52YWx1ZT9lLm1vZGVscy5maWx0ZXIodD0+bChlLm5hbWUsdCkpOmUubW9kZWxzfWxldCB2PXthdHRlbXB0c0RheTowLGZhaWx1cmVzRGF5OjB9O2Z1bmN0aW9uIHkoZSx0KXtyZXR1cm4gZS5tb2RlbFJhdGVzPy5bdF0/P3Z9ZnVuY3Rpb24gYihlLHQpe2xldCBuPXkoZSx0KTtyZXR1cm4gaU8obi5hdHRlbXB0c0RheSxuLmZhaWx1cmVzRGF5KX1sZXQgeD17fTtmdW5jdGlvbiBTKGUsdCl7cmV0dXJuIGUubW9kZWxNZXRhPy5bdF0/P3h9ZnVuY3Rpb24gQyhlKXtzd2l0Y2goZSl7Y2FzZWBvcGVuYDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2VgaGFsZi1vcGVuYDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gdyhlKXtsZXQgdD1GRChlLm9wZW5VbnRpbCk7cmV0dXJuIHQ/YCR7ZS5oZWFsdGhTdGF0ZX0gKCR7dH0pYDplLmhlYWx0aFN0YXRlfWZ1bmN0aW9uIGVlKGUpe3JldHVybiBlPT09YG9wZW5gP2B0ZXh0LWRlc3RydWN0aXZlYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH1mdW5jdGlvbiB0ZShlKXtyZXR1cm4gZS5sYXRlbmN5Py5zdHJlYW1pbmd9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5sYXRlbmN5Py5bYG5vbi1zdHJlYW1pbmdgXX1mdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5jb3VudD09PXZvaWQgMD9gbm8gb2JzZXJ2YXRpb25zIGNvdW50ZWRgOmAke2UuY291bnR9ICR7ZS5jb3VudD09PTE/YG9ic2VydmF0aW9uYDpgb2JzZXJ2YXRpb25zYH0gb24gdGhpcyByZXBsaWNhYH1mdW5jdGlvbiByZSgpe2xldCBlPW4udmFsdWU/LnJlcGxpY2E7cmV0dXJuYFBlci1yZXBsaWNhICgke2U/YHJlcGxpY2EgJHtlfWA6YHRoaXMgcmVwbGljYWB9KSwgaW4tcHJvY2VzcyBvbmx5IOKAlCBub3QgYSBmbGVldC13aWRlIGF2ZXJhZ2UgYWNyb3NzIHRoaXMgZGVwbG95bWVudOKAmXMgcmVwbGljYXMuYH1mdW5jdGlvbiBpZShlKXtyZXR1cm5gQXZlcmFnZSB0aW1lIHRvIGZpcnN0IGJ5dGUsIHRoZSBsb2FkLXNlbnNpdGl2ZSByZWFkaW5nIGZvciBzdHJlYW1pbmcgdHJhZmZpYy4gJHtuZShlKX0uICR7cmUoKX1gfWZ1bmN0aW9uIEUoZSl7cmV0dXJuYEF2ZXJhZ2UgdG90YWwgcmVzcG9uc2UgdGltZSwgaW5jbHVkaW5nIGdlbmVyYXRpb24g4oCUIG5vdCBhIGxvYWQtc2Vuc2l0aXZlIHNpZ25hbCBsaWtlIHN0cmVhbWluZyB0dGZiLCBzaW5jZSB0aGlzIHByb3ZpZGVyIGJ1ZmZlcnMgdGhlIHdob2xlIGNvbXBsZXRpb24gYmVmb3JlIHNlbmRpbmcgYW55dGhpbmcuICR7bmUoZSl9LiAke3JlKCl9YH1mdW5jdGlvbiBhZShlKXtyZXR1cm4gZS5wcm92ZW5hbmNlPy5lc3RpbWF0ZWR9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIGUucHJvdmVuYW5jZT8udW5iaWxsZWR9ZnVuY3Rpb24gc2UoZSl7bGV0IHQ9ZS5yZXF1ZXN0cz09PTE/YGA6YHNgO3JldHVybmAke2UucmVxdWVzdHN9IG5vbi1zdHJlYW1pbmcgcmVzcG9uc2Uke3R9IGNhcnJpZWQgbm8gdXNhZ2UgZnJvbSB0aGUgcHJvdmlkZXIg4oCUIHByb21wdCB0b2tlbnMgd2VyZSBlc3RpbWF0ZWQgZnJvbSByZXF1ZXN0IGJvZHkgc2l6ZSBpbnN0ZWFkICgke2UudG9rZW5zfSB0b2tlbnMgYmlsbGVkIGZyb20gdGhlIGVzdGltYXRlKSwgY29tcGxldGlvbiBiaWxsZWQgYXMgemVyby4gJHtyZSgpfWB9ZnVuY3Rpb24gY2UoZSl7bGV0IHQ9ZS5yZXF1ZXN0cz09PTE/YGA6YHNgO3JldHVybmAke2UucmVxdWVzdHN9IHN0cmVhbWluZyByZXNwb25zZSR7dH0gY2FycmllZCBubyB1c2FnZSBmcm9tIHRoZSBwcm92aWRlciDigJQgdGhlIHJlcXVlc3Qgd2FzIGNvdW50ZWQgYnV0IHplcm8gdG9rZW5zIHdlcmUgYmlsbGVkLiBJZiB0aGlzIGtlZXBzIGhhcHBlbmluZywgdGhpcyBwcm92aWRlciBtYXkgYmUgc2VydmluZyBjb21wbGV0aW9ucyBlbnRpcmVseSBmcmVlIGFnYWluc3QgZXZlcnkgYnVkZ2V0LiAke3JlKCl9YH1sZXQgRD1be2lkOmBhbGlhc2AsaGVhZGVyOmBBbGlhc2AsYWNjZXNzb3JGbjplPT5lLmFsaWFzLGNlbGw6KHtyb3c6ZX0pPT5HKHRPLHtpZDplLm9yaWdpbmFsLmFsaWFzLGNvbnRleHRUb2tlbnM6ZS5vcmlnaW5hbC5tb2RlbE1ldGE/LmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwubW9kZWxNZXRhPy5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm9yaWdpbmFsLm1vZGVsTWV0YT8ub3V0cHV0UGVyTVRva1VzZH0pfSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+ZS50YXJnZXQsY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZS5vcmlnaW5hbC50YXJnZXQpfV0sbGU9VygoKT0+bi52YWx1ZT8uYWxpYXNlcy5sZW5ndGg/Yy52YWx1ZT9gbm8gYWxpYXNlcyBtYXRjaCAiJHtvLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCk7cmV0dXJuKGUsdCk9PntsZXQgcj1sYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIEwoKSxSKGBkaXZgLGtPLFtCKGBkaXZgLEFPLFtWKE0oSncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShadyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFF3KSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6TigoKT0+W1Yocix7aWNvbjpuLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP00oaF8pOk0obF8pLGNsYXNzOk8oW24udmFsdWU/LnJlZGlzLmNvbmZpZ3VyZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLHRbMl18fD1IKGAgUmVkaXMgYCwtMSldKSxfOjF9KV0pLF86MX0pLFYoTShZdykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHRleHQtc21gfSx7ZGVmYXVsdDpOKCgpPT5bQihgcGAsak8sayhuLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2BDb25maWd1cmVkYDpgTm90IGNvbmZpZ3VyZWRgKSwxKSxuLnZhbHVlPy5yZWRpcy5sYXN0RXJyPyhMKCksUihgcGAsTU8sW1Yocix7aWNvbjpNKHZfKSxjbGFzczpgbXQtMC41IHNpemUtMy41IHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxCKGBzcGFuYCxudWxsLGsobi52YWx1ZS5yZWRpcy5sYXN0RXJyKStrKE0oTkQpKG4udmFsdWUucmVkaXMubGFzdEVyckF0KSksMSldKSk6VShgYCwhMCldKSxfOjF9KV0pLF86MX0pLFYoTShKdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oUXcpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpOKCgpPT5bVihyLHtpY29uOm4udmFsdWU/LmNhY2hlLmVuYWJsZWQ/TShoXyk6TShsXyksY2xhc3M6Tyhbbi52YWx1ZT8uY2FjaGUuZW5hYmxlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksdFszXXx8PUgoYCBSZXNwb25zZSBjYWNoZSBgLC0xKV0pLF86MX0pXSksXzoxfSksVihNKFl3KSx7Y2xhc3M6YHRleHQtc21gfSx7ZGVmYXVsdDpOKCgpPT5bQihgcGAsTk8sayhuLnZhbHVlPy5jYWNoZS5lbmFibGVkP2BFbmFibGVkYDpgRGlzYWJsZWRgKSwxKSxuLnZhbHVlPy5jYWNoZS5lbmFibGVkPyhMKCksUihgcGAsUE8sYHR0bCBgK2sobi52YWx1ZS5jYWNoZS50dGwpLDEpKTpVKGBgLCEwKV0pLF86MX0pXSksXzoxfSksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShRdykse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0Ok4oKCk9PltWKHIse2ljb246bi52YWx1ZT8ucmV0cnkuZW5hYmxlZD9NKGhfKTpNKGxfKSxjbGFzczpPKFtuLnZhbHVlPy5yZXRyeS5lbmFibGVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSx0WzRdfHw9SChgIFJldHJ5IGAsLTEpXSksXzoxfSldKSxfOjF9KSxWKE0oWXcpLHtjbGFzczpgdGV4dC1zbWB9LHtkZWZhdWx0Ok4oKCk9PltCKGBwYCxGTyxrKG4udmFsdWU/LnJldHJ5LmVuYWJsZWQ/YEVuYWJsZWRgOmBEaXNhYmxlZGApLDEpLG4udmFsdWU/LnJldHJ5LmVuYWJsZWQ/KEwoKSxSKGBwYCxJTyxgIGF0dGVtcHRzIGArayhuLnZhbHVlLnJldHJ5LmF0dGVtcHRzKStgLCBiYWNrb2ZmIGArayhuLnZhbHVlLnJldHJ5LmJhY2tvZmYpLDEpKTpVKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKSxWKE0oSncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShadyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFF3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PlsuLi50WzVdfHw9W0goYFByb3ZpZGVyc2AsLTEpXV0pLF86MX0pLFYoTShYdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bLi4udFs2XXx8PVtIKGAgRXZlcnkgY29uZmlndXJlZCB1cHN0cmVhbSBhbmQgaXRzIGxhc3QgZGlzY292ZXJ5IHJlZnJlc2guIFNlYXJjaCBmaWx0ZXJzIHByb3ZpZGVycyBhbmQgYWxpYXNlcyBieSBtb2RlbCBpZC4gYCwtMSldXSksXzoxfSksVihzRCx7bW9kZWxWYWx1ZTpNKG8pLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+dW4obyk/by52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YFNlYXJjaCBtb2RlbHMgb3IgYWxpYXNlcy4uLmAsY2xhc3M6YG10LTIgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksXzoxfSksVihNKFl3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltuLnZhbHVlPy5wcm92aWRlcnMubGVuZ3RoP00oYykmJmYudmFsdWUubGVuZ3RoPT09MD8oTCgpLFIoYHBgLFJPLGAgbm8gcHJvdmlkZXJzIG1hdGNoICJgK2soTShvKSkrYCIgYCwxKSk6KEwoKSxSKEkse2tleToyfSxbQihgcGAsek8sayhyZSgpKSwxKSxWKE0oU08pLHttb2RlbFZhbHVlOmcudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMV18fD1lPT5nLnZhbHVlPWUsdHlwZTpgbXVsdGlwbGVgLGNsYXNzOmByb3VuZGVkLW1kIGJvcmRlciBweC0zYH0se2RlZmF1bHQ6TigoKT0+WyhMKCEwKSxSKEksbnVsbCxoYShmLnZhbHVlLGU9PihMKCkseihNKHdPKSx7a2V5OmUubmFtZSx2YWx1ZTplLm5hbWV9LHtkZWZhdWx0Ok4oKCk9PltCKGBkaXZgLEJPLFtCKGBidXR0b25gLHt0eXBlOmBidXR0b25gLGNsYXNzOmBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkLXNtIHB5LTIuNSBmb250LW1lZGl1bSBob3Zlcjp0ZXh0LXByaW1hcnkgaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHtlLm5hbWV9J3MgbW9kZWxzIGluIENoYXJ0c2AsdGl0bGU6YFZpZXcgJHtlLm5hbWV9J3MgbW9kZWxzIGluIENoYXJ0c2Asb25DbGljazp0PT5pKGUubmFtZSl9LGsoZS5uYW1lKSw5LFZPKSxWKE0oVE8pLHsiaGVhZGVyLWNsYXNzIjpgZmxleC0xYH0se2RlZmF1bHQ6TigoKT0+W0IoYHNwYW5gLEhPLGBQcm92aWRlciBgK2soZS5uYW1lKStgIGRldGFpbHNgLDEpLEIoYHNwYW5gLFVPLFtWKE0oX0QpLHthczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpOKCgpPT5bSChrKGUudHlwZSksMSldKSxfOjJ9LDEwMjQpLEIoYHNwYW5gLFdPLGsoZS5tb2RlbENvdW50KStgIG1vZGVsc2AsMSksVihkTyx7ImF0dGVtcHRzLWRheSI6ZS5hdHRlbXB0c0RheSwiZmFpbHVyZXMtZGF5IjplLmZhaWx1cmVzRGF5LCJhdHRlbXB0cy1taW51dGUiOmUuYXR0ZW1wdHNNaW51dGUsImZhaWx1cmVzLW1pbnV0ZSI6ZS5mYWlsdXJlc01pbnV0ZX0sbnVsbCw4LFtgYXR0ZW1wdHMtZGF5YCxgZmFpbHVyZXMtZGF5YCxgYXR0ZW1wdHMtbWludXRlYCxgZmFpbHVyZXMtbWludXRlYF0pLGUuaGVhbHRoU3RhdGU9PT1gY2xvc2VkYD9VKGBgLCEwKTooTCgpLHooTShfRCkse2tleTowLGFzOmBzcGFuYCx2YXJpYW50OkMoZS5oZWFsdGhTdGF0ZSksY2xhc3M6YGZvbnQtbm9ybWFsYCx0aXRsZTplLmhlYWx0aFN0YXRlPT09YG9wZW5gP2BkaXNjb3ZlcnkgaXMgYmFja2luZyBvZmYgYWZ0ZXIgcmVwZWF0ZWQgZmFpbHVyZXNgOmBhIGRpc2NvdmVyeSBwcm9iZSBpcyBkZWNpZGluZyB3aGV0aGVyIHRvIHJlY292ZXJgfSx7ZGVmYXVsdDpOKCgpPT5bSChrKHcoZSkpLDEpXSksXzoyfSwxMDMyLFtgdmFyaWFudGAsYHRpdGxlYF0pKSx0ZShlKT8uYXZnVHRmYk1zPT09dm9pZCAwP1UoYGAsITApOihMKCkseihNKF9EKSx7a2V5OjEsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOmllKHRlKGUpKX0se2RlZmF1bHQ6TigoKT0+W0goYCBzdHJlYW1pbmcgdHRmYiBgK2soTShqRCkodGUoZSkuYXZnVHRmYk1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksVChlKT8uYXZnRHVyYXRpb25Ncz09PXZvaWQgMD9VKGBgLCEwKTooTCgpLHooTShfRCkse2tleToyLGFzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTpFKFQoZSkpfSx7ZGVmYXVsdDpOKCgpPT5bSChgIG5vbi1zdHJlYW1pbmcgYXZnIGArayhNKGpEKShUKGUpLmF2Z0R1cmF0aW9uTXMpKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKSxhZShlKT8oTCgpLHooTShfRCkse2tleTozLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOnNlKGFlKGUpKX0se2RlZmF1bHQ6TigoKT0+W0goYCBlc3RpbWF0ZWQgYCtrKGFlKGUpLnJlcXVlc3RzKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTpVKGBgLCEwKSxvZShlKT8oTCgpLHooTShfRCkse2tleTo0LGFzOmBzcGFuYCx2YXJpYW50OmBkZXN0cnVjdGl2ZWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6Y2Uob2UoZSkpfSx7ZGVmYXVsdDpOKCgpPT5bSChgIHVuYmlsbGVkIGArayhvZShlKS5yZXF1ZXN0cyksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSk6VShgYCwhMCksZS5sYXN0RXJyPyhMKCkseihyLHtrZXk6NSxpY29uOk0odl8pLGNsYXNzOmBzaXplLTMuNSBzaHJpbmstMCB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSk6VShgYCwhMCksQihgc3BhbmAsR08sayhNKFJEKShlLmRpc2NvdmVyeUVuYWJsZWQsZS5sYXN0UmVmcmVzaCkpLDEpXSldKSxfOjJ9LDEwMjQpXSksVihNKENPKSxudWxsLHtkZWZhdWx0Ok4oKCk9PltCKGBkbGAsS08sW0IoYGRpdmAsbnVsbCxbdFs3XXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEJhc2UgVVJMYCwtMSksQihgZGRgLHFPLGsoZS5iYXNlVXJsKSwxKV0pLEIoYGRpdmAsbnVsbCxbdFs4XXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExhc3QgcmVmcmVzaGAsLTEpLEIoYGRkYCxudWxsLGsoTSh6RCkoZS5kaXNjb3ZlcnlFbmFibGVkLGUubGFzdFJlZnJlc2gpKSwxKV0pLGUuaGVhbHRoU3RhdGU9PT1gY2xvc2VkYD9VKGBgLCEwKTooTCgpLFIoYGRpdmAsSk8sW3RbOV18fD1CKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBEaXNjb3ZlcnkgaGVhbHRoYCwtMSksQihgZGRgLHtjbGFzczpPKGVlKGUuaGVhbHRoU3RhdGUpKX0sayh3KGUpKSwzKV0pKSxlLmxhc3RFcnI/KEwoKSxSKGBkaXZgLFlPLFt0WzEwXXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExhc3QgZXJyb3JgLC0xKSxCKGBkZGAsWE8sayhlLmxhc3RFcnIpLDEpXSkpOlUoYGAsITApXSksXyhlKS5sZW5ndGg/KEwoKSxSKGBkaXZgLFpPLFsoTCghMCksUihJLG51bGwsaGEoXyhlKSx0PT4oTCgpLFIoYHNwYW5gLHtrZXk6dCxjbGFzczpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xYH0sW1YodE8se2lkOk0oQ0QpKGUubmFtZSx0KSwiY29udGV4dC10b2tlbnMiOlMoZSx0KS5jb250ZXh0VG9rZW5zLCJpbnB1dC1wZXItbS10b2stdXNkIjpTKGUsdCkuaW5wdXRQZXJNVG9rVXNkLCJvdXRwdXQtcGVyLW0tdG9rLXVzZCI6UyhlLHQpLm91dHB1dFBlck1Ub2tVc2R9LG51bGwsOCxbYGlkYCxgY29udGV4dC10b2tlbnNgLGBpbnB1dC1wZXItbS10b2stdXNkYCxgb3V0cHV0LXBlci1tLXRvay11c2RgXSksVih4Tyx7bGFiZWw6TShDRCkoZS5uYW1lLHQpLHNjb3BlOmBtb2RlbDoke00oQ0QpKGUubmFtZSx0KX1gfSxudWxsLDgsW2BsYWJlbGAsYHNjb3BlYF0pLFMoZSx0KS5jb250ZXh0VG9rZW5zPT09dm9pZCAwP1UoYGAsITApOihMKCksUihgc3BhbmAsUU8sayhNKE9EKShTKGUsdCkuY29udGV4dFRva2VucykpLDEpKSxiKGUsdCk/KEwoKSx6KGRPLHtrZXk6MSwiYXR0ZW1wdHMtZGF5Ijp5KGUsdCkuYXR0ZW1wdHNEYXksImZhaWx1cmVzLWRheSI6eShlLHQpLmZhaWx1cmVzRGF5fSxudWxsLDgsW2BhdHRlbXB0cy1kYXlgLGBmYWlsdXJlcy1kYXlgXSkpOlUoYGAsITApXSkpKSwxMjgpKV0pKTooTCgpLFIoYHBgLCRPLGBubyBtb2RlbHMga25vd24geWV0YCkpXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pXSw2NCkpOihMKCksUihgcGAsTE8sYG5vbmVgKSldKSxfOjF9KV0pLF86MX0pLFYoTShKdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oUXcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbMTFdfHw9W0goYE1vZGVsIGFsaWFzZXNgLC0xKV1dKSxfOjF9KSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbMTJdfHw9W0goYE9wZXJhdG9yLWRlZmluZWQgYWxpYXMg4oaSIHRhcmdldCBtb2RlbCBtYXBwaW5ncy5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLFYoTShZdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihvRCx7Y29sdW1uczpELGRhdGE6cC52YWx1ZSwiZW1wdHktbWVzc2FnZSI6bGUudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBlbXB0eS1tZXNzYWdlYF0pXSksXzoxfSldKSxfOjF9KSxuLnZhbHVlPy52ZXJzaW9uPyhMKCksUihgcGAsZWssYFZlcnNpb246IGArayhuLnZhbHVlLnZlcnNpb24pLDEpKTpVKGBgLCEwKV0pfX19KSxuaz1bYHRpdGxlYF0scms9eyJhcmlhLWhpZGRlbiI6YHRydWVgfSxpaz17Y2xhc3M6YHNyLW9ubHlgfSxhaz1QKHtfX25hbWU6YENvbXBhY3ROdW1iZXJgLHByb3BzOnt2YWx1ZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PkVEKHQudmFsdWUpKSxyPVcoKCk9PlREKHQudmFsdWUpKTtyZXR1cm4oZSx0KT0+KEwoKSxSKGBzcGFuYCx7dGl0bGU6ci52YWx1ZX0sW0IoYHNwYW5gLHJrLGsobi52YWx1ZSksMSksQihgc3BhbmAsaWssayhyLnZhbHVlKSwxKV0sOCxuaykpfX0pO2Z1bmN0aW9uIG9rKGUsdCxuKXtyZXR1cm57aWQ6ZSxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sbWV0YTp7YWxpZ246YHJpZ2h0YH0sY2VsbDooe3JvdzplfSk9PkcoYWsse3ZhbHVlOm4oZS5vcmlnaW5hbCl9KX19dmFyIHNrPWBub3Qgb2JzZXJ2ZWQgeWV0IOKAlCBubyB0cmFmZmljIGFuZCBwcm9iZXMgZGlzYWJsZWQgb3Igbm90IHlldCBydW5gO2Z1bmN0aW9uIGNrKGUpe2xldCB0PVBEKGUubGFzdENoZWNrKTtyZXR1cm4gdD9gdW5oZWFsdGh5ICgke3R9KWA6YHVuaGVhbHRoeWB9ZnVuY3Rpb24gbGsoZSl7bGV0IHQ9ZS5jb25zZWN1dGl2ZUZhaWx1cmVzPT09MT9gZmFpbHVyZWA6YGZhaWx1cmVzYCxuPWUuc291cmNlP2AgdmlhICR7ZS5zb3VyY2V9YDpgYCxyPWAke2UuY29uc2VjdXRpdmVGYWlsdXJlc30gY29uc2VjdXRpdmUgJHt0fSR7bn1gO3JldHVybiBlLmxhc3RFcnJvcj9gJHtyfTogJHtlLmxhc3RFcnJvcn1gOnJ9ZnVuY3Rpb24gdWsoZSl7bGV0IHQ9UEQoZS5sYXN0Q2hlY2spO3JldHVybiB0P2Uuc291cmNlP2Ake3R9IHZpYSAke2Uuc291cmNlfWA6dDplLnNvdXJjZT9gdmlhICR7ZS5zb3VyY2V9YDpgYH1mdW5jdGlvbiBkayhlKXtpZihlLmNvbnNlY3V0aXZlRmFpbHVyZXM8PTAmJiFlLmxhc3RFcnJvcilyZXR1cm4gc2s7bGV0IHQ9ZS5jb25zZWN1dGl2ZUZhaWx1cmVzPT09MT9gZmFpbHVyZWA6YGZhaWx1cmVzYCxuPWUuc291cmNlP2AgdmlhICR7ZS5zb3VyY2V9YDpgYCxyPWAke2UuY29uc2VjdXRpdmVGYWlsdXJlc30gJHt0fSBzbyBmYXIke259YDtyZXR1cm4gZS5sYXN0RXJyb3I/YCR7cn06ICR7ZS5sYXN0RXJyb3J9YDpyfWZ1bmN0aW9uIGZrKGUpe2lmKGUuc3RhdGU9PT1gdW5oZWFsdGh5YClyZXR1cm4gRyhfRCx7YXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmxrKGUpfSwoKT0+Y2soZSkpO2lmKGUuc3RhdGU9PT1gaGVhbHRoeWApe2xldCB0PWUubGF0ZW5jeU1zPT09dm9pZCAwP2BgOmAgwrcgJHtqRChlLmxhdGVuY3lNcyl9YDtyZXR1cm4gRyhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOnVrKGUpfSxgaGVhbHRoeSR7dH1gKX1yZXR1cm4gRyhfRCx7YXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6ZGsoZSl9LCgpPT5gdW5rbm93bmApfWZ1bmN0aW9uIHBrKCl7cmV0dXJuW3tpZDpgbmFtZWAsaGVhZGVyOmBOYW1lYCxhY2Nlc3NvckZuOmU9PmUubmFtZSxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmBmb250LW1lZGl1bWB9LGUub3JpZ2luYWwubmFtZSl9LHtpZDpgdXJsYCxoZWFkZXI6YFVSTGAsYWNjZXNzb3JGbjplPT5lLnVybCxjZWxsOih7cm93OmV9KT0+Ryhgc3BhbmAse2NsYXNzOmBibG9jayBtYXgtdy14cyB0cnVuY2F0ZSB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOmUub3JpZ2luYWwudXJsfSxlLm9yaWdpbmFsLnVybCl9LHtpZDpgaGVhbHRoYCxoZWFkZXI6YEhlYWx0aGAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmUuaGVhbHRoLnN0YXRlLGNlbGw6KHtyb3c6ZX0pPT5mayhlLm9yaWdpbmFsLmhlYWx0aCl9LHtpZDpgYWNjZXNzYCxoZWFkZXI6YEFjY2Vzc2AsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PihlLmFjY2Vzcz8/W10pLmpvaW4oYCwgYCksY2VsbDooe3JvdzplfSk9PntsZXQgdD1lLm9yaWdpbmFsLmFjY2VzcztyZXR1cm4gdD09bnVsbD9HKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBBbGwgZ3JvdXBzYCk6dC5sZW5ndGg9PT0wP0coYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE5vIGdyb3Vwc2ApOkcoYGRpdmAse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sdC5tYXAoZT0+RyhfRCx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbW9ubyBmb250LW5vcm1hbGB9LCgpPT5lKSkpfX0sb2soYHJlcU1pbmAsYHJlcS9taW5gLGU9PmUuY291bnRlcnMucmVxdWVzdHNQZXJNaW51dGUpLG9rKGByZXFEYXlgLGByZXEvZGF5YCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyRGF5KSxvayhgcmVxTW9udGhgLGByZXEvbW9udGhgLGU9PmUuY291bnRlcnMucmVxdWVzdHNQZXJNb250aCldfXZhciBtaz17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxoaz1QKHtfX25hbWU6YFRhcmdldHNWaWV3YCxzZXR1cChlKXtsZXQgdD1kVCgpLG49VygoKT0+dC50YXJnZXRzKSx7cXVlcnk6cixub3JtYWxpemVkOmksaGFzUXVlcnk6YX09Z0QoKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpLnZhbHVlKX1sZXQgcz1XKCgpPT57bGV0IGU9bi52YWx1ZT8ubWNwU2VydmVycz8/W107cmV0dXJuIGEudmFsdWU/ZS5maWx0ZXIobyk6ZX0pLGM9VygoKT0+e2xldCBlPW4udmFsdWU/LmFnZW50cz8/W107cmV0dXJuIGEudmFsdWU/ZS5maWx0ZXIobyk6ZX0pO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT9hLnZhbHVlJiZ0PT09MD9gbm8gdGFyZ2V0cyBtYXRjaCAiJHtyLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYH1sZXQgdT1XKCgpPT5sKG4udmFsdWU/Lm1jcFNlcnZlcnMubGVuZ3RoPz8wLHMudmFsdWUubGVuZ3RoKSksZD1XKCgpPT5sKG4udmFsdWU/LmFnZW50cy5sZW5ndGg/PzAsYy52YWx1ZS5sZW5ndGgpKSxmPXBrKCk7cmV0dXJuKGUsdCk9PihMKCksUihgZGl2YCxtayxbVihzRCx7bW9kZWxWYWx1ZTpNKHIpLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+dW4ocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBNQ1Agc2VydmVycyBvciBhZ2VudHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShRdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bLi4udFsxXXx8PVtIKGBNQ1Agc2VydmVyc2AsLTEpXV0pLF86MX0pLFYoTShYdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bLi4udFsyXXx8PVtIKGBDb25maWd1cmVkIE1DUCBwcm94eSB0YXJnZXRzLCB0aGUgZ3JvdXBzIGFsbG93ZWQgdG8gcmVhY2ggdGhlbSwgYW5kIHRoZWlyIHJlcXVlc3QgY291bnRlcnMuYCwtMSldXSksXzoxfSldKSxfOjF9KSxWKE0oWXcpLG51bGwse2RlZmF1bHQ6TigoKT0+W1Yob0Qse2NvbHVtbnM6TShmKSxkYXRhOnMudmFsdWUsImVtcHR5LW1lc3NhZ2UiOnUudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShRdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bLi4udFszXXx8PVtIKGBBZ2VudHNgLC0xKV1dKSxfOjF9KSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbNF18fD1bSChgQ29uZmlndXJlZCBBMkEgYWdlbnQgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLmAsLTEpXV0pLF86MX0pXSksXzoxfSksVihNKFl3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKG9ELHtjb2x1bW5zOk0oZiksZGF0YTpjLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpkLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLGdrPVAoe19fbmFtZTpgVGFic2AscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxvcmllbnRhdGlvbjp7fSxkaXI6e30sYWN0aXZhdGlvbk1vZGU6e30sbW9kZWxWYWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPWRiKE95KG4sYGNsYXNzYCkscik7cmV0dXJuKGUsdCk9PihMKCkseihNKHp3KSxrcyh7ImRhdGEtc2xvdCI6YHRhYnNgLCJkYXRhLW9yaWVudGF0aW9uIjpNKGkpLm9yaWVudGF0aW9ufHxgaG9yaXpvbnRhbGB9LE0oaSkse2NsYXNzOk0oUXYpKGBnYXAtMiBncm91cC90YWJzIGZsZXggZGF0YS1ob3Jpem9udGFsOmZsZXgtY29sYCxuLmNsYXNzKX0pLHtkZWZhdWx0Ok4odD0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgLHhlKENzKHQpKSldKSxfOjN9LDE2LFtgZGF0YS1vcmllbnRhdGlvbmAsYGNsYXNzYF0pKX19KSxfaz1QKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e30sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49T3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KEwoKSx6KE0oSHcpLGtzKHsiZGF0YS1zbG90IjpgdGFicy1jb250ZW50YCxjbGFzczpNKFF2KShgdGV4dC1zbSBmbGV4LTEgb3V0bGluZS1ub25lYCx0LmNsYXNzKX0sTShuKSkse2RlZmF1bHQ6TigoKT0+W0YoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksdms9UCh7X19uYW1lOmBUYWJzTGlzdGAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50OntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1PeSh0LGBjbGFzc2AsYHZhcmlhbnRgKTtyZXR1cm4ocixpKT0+KEwoKSx6KE0oVXcpLGtzKHsiZGF0YS1zbG90IjpgdGFicy1saXN0YCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnR9LE0obikse2NsYXNzOk0oUXYpKE0oYmspKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSkse2RlZmF1bHQ6TigoKT0+W0Yoci4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSkseWs9UCh7X19uYW1lOmBUYWJzVHJpZ2dlcmAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj11YihPeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KEwoKSx6KE0oV3cpLGtzKHsiZGF0YS1zbG90IjpgdGFicy10cmlnZ2VyYCxjbGFzczpNKFF2KShgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9ZGVmYXVsdF0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1zbSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpzaGFkb3ctbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xIHJlbGF0aXZlIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZm9yZWdyb3VuZC82MCB0cmFuc2l0aW9uLWFsbCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6dy1mdWxsIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczpqdXN0aWZ5LXN0YXJ0IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXJrOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsYGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmJnLXRyYW5zcGFyZW50IGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJnLXRyYW5zcGFyZW50IGRhcms6Z3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6Ym9yZGVyLXRyYW5zcGFyZW50IGRhcms6Z3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YmctdHJhbnNwYXJlbnRgLGBkYXRhLWFjdGl2ZTpiZy1iYWNrZ3JvdW5kIGRhdGEtYWN0aXZlOnRleHQtZm9yZWdyb3VuZCBkYXJrOmRhdGEtYWN0aXZlOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtYWN0aXZlOmJnLWlucHV0LzMwIGRhcms6ZGF0YS1hY3RpdmU6dGV4dC1mb3JlZ3JvdW5kYCxgYWZ0ZXI6YWJzb2x1dGUgYWZ0ZXI6YmctZm9yZWdyb3VuZCBhZnRlcjpvcGFjaXR5LTAgYWZ0ZXI6dHJhbnNpdGlvbi1vcGFjaXR5IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmluc2V0LXgtMCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjpib3R0b20tWy01cHhdIGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmgtMC41IGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjppbnNldC15LTAgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOi1yaWdodC0xIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjp3LTAuNSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTphZnRlcjpvcGFjaXR5LTEwMGAsdC5jbGFzcyl9LE0obikpLHtkZWZhdWx0Ok4oKCk9PltGKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLGJrPUVfKGByb3VuZGVkLWxnIHAtMC43NSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpoLTggZGF0YS1bdmFyaWFudD1saW5lXTpyb3VuZGVkLW5vbmUgZ3JvdXAvdGFicy1saXN0IGlubGluZS1mbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmgtZml0IGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczpmbGV4LWNvbGAse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OmBiZy1tdXRlZGAsbGluZTpgZ2FwLTEgYmctdHJhbnNwYXJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiB4ayhlKXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKGUpfHxlPC44P2Bub3JtYWxgOmU8MT9gYW1iZXJgOmByZWRgfXZhciBTaz0xZTYsQ2s9e3JlcU1pbjpgcmVxL21pbmAscmVxRGF5OmByZXEvZGF5YCx0b2tEYXk6YHRva2VucyAoaW4rb3V0KS9kYXlgLHRva01vbnRoOmB0b2tlbnMgKGluK291dCkvbW9udGhgLGNvc3REYXk6YGNvc3QvZGF5YCxjb3N0TW9udGg6YGNvc3QvbW9udGhgfTtmdW5jdGlvbiB3ayhlLHQsbil7cmV0dXJue2lkOmUsdXNlZDp0LGxpbWl0Om4scmF0aW86dC9ufX1mdW5jdGlvbiBUayhlKXtsZXQgdD1lLmxpbWl0cztpZighdHx8ZS5zdG9yZURvd24pcmV0dXJuW107bGV0IG49W107aWYodC5yZXF1ZXN0c1Blck1pbnV0ZSYmbi5wdXNoKHdrKGByZXFNaW5gLGUucmVxdWVzdHNQZXJNaW51dGUsdC5yZXF1ZXN0c1Blck1pbnV0ZSkpLHQucmVxdWVzdHNQZXJEYXkmJm4ucHVzaCh3ayhgcmVxRGF5YCxlLnJlcXVlc3RzUGVyRGF5LHQucmVxdWVzdHNQZXJEYXkpKSx0LnRva2Vuc1BlckRheSYmbi5wdXNoKHdrKGB0b2tEYXlgLGUudG9rZW5zSW5QZXJEYXkrZS50b2tlbnNPdXRQZXJEYXksdC50b2tlbnNQZXJEYXkpKSx0LnRva2Vuc1Blck1vbnRoJiZuLnB1c2god2soYHRva01vbnRoYCxlLnRva2Vuc0luUGVyTW9udGgrZS50b2tlbnNPdXRQZXJNb250aCx0LnRva2Vuc1Blck1vbnRoKSksdC5jb3N0UGVyRGF5VVNEKXtsZXQgcj1NYXRoLnJvdW5kKHQuY29zdFBlckRheVVTRCpTayk7cj4wJiZuLnB1c2god2soYGNvc3REYXlgLGUuY29zdFBlckRheU1pY3JvVXNkLHIpKX1pZih0LmNvc3RQZXJNb250aFVTRCl7bGV0IHI9TWF0aC5yb3VuZCh0LmNvc3RQZXJNb250aFVTRCpTayk7cj4wJiZuLnB1c2god2soYGNvc3RNb250aGAsZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxyKSl9cmV0dXJuIG59ZnVuY3Rpb24gRWsoZSl7bGV0IHQ9ZS5nZXRVVENGdWxsWWVhcigpLG49ZS5nZXRVVENNb250aCgpLHI9RGF0ZS5VVEModCxuLDEpLGk9RGF0ZS5VVEModCxuKzEsMSk7cmV0dXJuKGUuZ2V0VGltZSgpLXIpLyhpLXIpfWZ1bmN0aW9uIERrKGUsdCl7cmV0dXJuIHQ8LjAyP251bGw6TWF0aC5yb3VuZChlL3QpfWZ1bmN0aW9uIE9rKGUsdCl7aWYoZT09PW51bGx8fHQ9PT12b2lkIDB8fHQ8PTApcmV0dXJue2xpbWl0TWljcm9zOm51bGwscmVtYWluaW5nTWljcm9zOm51bGwsd2lsbEV4Y2VlZDohMX07bGV0IG49TWF0aC5yb3VuZCh0KlNrKSxyPW4tZTtyZXR1cm57bGltaXRNaWNyb3M6bixyZW1haW5pbmdNaWNyb3M6cix3aWxsRXhjZWVkOnI8MH19dmFyIGtrPXtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2B9LEFrPXtrZXk6MCxjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxqaz1bYHRpdGxlYF0sTWs9e2tleTowfSxOaz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxQaz1QKHtfX25hbWU6YENvc3RGb3JlY2FzdENhcmRgLHByb3BzOnttdGRNaWNyb3M6e30sbGltaXRzOnt9LG5vdzp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PkVrKHQubm93KSkscj1XKCgpPT5Eayh0Lm10ZE1pY3JvcyxuLnZhbHVlKSksaT1XKCgpPT5PayhyLnZhbHVlLHQubGltaXRzPy5jb3N0UGVyTW9udGhVU0QpKTtyZXR1cm4odCxuKT0+KEwoKSx6KE0oSncpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTShadyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bVihNKFF3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PlsuLi5uWzBdfHw9W0goYENvc3QgZm9yZWNhc3RgLC0xKV1dKSxfOjF9KSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLm5bMV18fD1bSChgUHJvamVjdGVkIG1vbnRoLWVuZCBzcGVuZCwgZXh0cmFwb2xhdGVkIGZyb20gbW9udGgtdG8tZGF0ZSB1c2FnZSAoVVRDIGNhbGVuZGFyIG1vbnRoKS5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLFYoTShZdykse2NsYXNzOmBncmlkIGdyaWQtY29scy0yIGdhcC00IHRleHQtc20gc206Z3JpZC1jb2xzLTNgfSx7ZGVmYXVsdDpOKCgpPT5bQihgZGl2YCxudWxsLFtuWzJdfHw9QihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTW9udGggdG8gZGF0ZWAsLTEpLEIoYHBgLGtrLGsoTSh3RCkoZS5tdGRNaWNyb3MpKSwxKV0pLEIoYGRpdmAsbnVsbCxbblszXXx8PUIoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFByb2plY3RlZCBtb250aC1lbmRgLC0xKSxyLnZhbHVlPT09bnVsbD8oTCgpLFIoYHBgLEFrLGBub3QgZW5vdWdoIGRhdGEgeWV0YCkpOihMKCksUihgcGAse2tleToxLGNsYXNzOk8oW2B0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYCxpLnZhbHVlLndpbGxFeGNlZWQ/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMF0pLHRpdGxlOmkudmFsdWUud2lsbEV4Y2VlZD9gUHJvamVjdGVkIHRvIGV4Y2VlZCB0aGUgY29uZmlndXJlZCBjb3N0L21vbnRoIGxpbWl0YDp2b2lkIDB9LGsoTSh3RCkoci52YWx1ZSkpLDExLGprKSldKSxpLnZhbHVlLmxpbWl0TWljcm9zPT09bnVsbD9VKGBgLCEwKTooTCgpLFIoYGRpdmAsTWssW25bNF18fD1CKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMaW1pdGAsLTEpLEIoYHBgLE5rLGsoTSh3RCkoaS52YWx1ZS5saW1pdE1pY3JvcykpLDEpXSkpXSksXzoxfSldKSxfOjF9KSl9fSksRms9YHRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7YCxJaz0xZTM7YXN5bmMgZnVuY3Rpb24gTGsoZSx0LG49Rmspe2lmKHR5cGVvZiBkb2N1bWVudD5gdWApcmV0dXJuYGZhaWxlZGA7dHJ5e2xldCByPW5ldyBCbG9iKFt0XSx7dHlwZTpufSksaT1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3JldHVybiBhLmhyZWY9aSxhLmRvd25sb2FkPWUsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksYS5yZW1vdmUoKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKGkpLElrKSxgZG93bmxvYWRlZGB9Y2F0Y2h7cmV0dXJuIGVPKHQpfX12YXIgUms9MjUwMCx6az1QKHtfX25hbWU6YENzdkV4cG9ydEJ1dHRvbmAscHJvcHM6e2ZpbGVuYW1lOnt9LGJ1aWxkOnt0eXBlOkZ1bmN0aW9ufX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPWooITEpLHI9aihudWxsKSxpLGE9e2Rvd25sb2FkZWQ6YERvd25sb2FkZWRgLGNvcGllZDpgQ29waWVkYCxzZWxlY3RlZDpgU2VsZWN0ZWQg4oCUIHByZXNzIOKMmC9DdHJsK0NgLGZhaWxlZDpgRXhwb3J0IGZhaWxlZGB9LG89VygoKT0+ci52YWx1ZT9hW3IudmFsdWVdOmBFeHBvcnQgQ1NWYCkscz1XKCgpPT5yLnZhbHVlPT09YGZhaWxlZGApO2Z1bmN0aW9uIGMoKXtpIT09dm9pZCAwJiZjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ci52YWx1ZT1udWxsLGk9dm9pZCAwfSxSayl9YXN5bmMgZnVuY3Rpb24gbCgpe2lmKCFuLnZhbHVlKXtuLnZhbHVlPSEwO3RyeXtyLnZhbHVlPWF3YWl0IExrKHQuZmlsZW5hbWUsdC5idWlsZCgpKSxjKCl9ZmluYWxseXtuLnZhbHVlPSExfX19cmV0dXJuIHRhKCgpPT57aSE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGkpfSksKGUsdCk9PntsZXQgaT1sYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIEwoKSx6KE0oR3cpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YG91dGxpbmVgLHNpemU6YHNtYCxkaXNhYmxlZDpuLnZhbHVlLG9uQ2xpY2s6bH0se2RlZmF1bHQ6TigoKT0+W3IudmFsdWU9PT1gZmFpbGVkYD8oTCgpLHooaSx7a2V5OjAsaWNvbjpNKGxfKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOnIudmFsdWU/KEwoKSx6KGkse2tleToxLGljb246TShoXyksY2xhc3M6YHNpemUtMy41IHRleHQtY2hhcnQtcmVxdWVzdHNgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pKTooTCgpLHooaSx7a2V5OjIsaWNvbjpNKF9fKSxjbGFzczpgc2l6ZS0zLjVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pKSxCKGBzcGFuYCx7Y2xhc3M6TyhzLnZhbHVlP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDApfSxrKG8udmFsdWUpLDMpXSksXzoxfSw4LFtgZGlzYWJsZWRgXSl9fX0pLEJrPVtgYXJpYS1sYWJlbGAsYGFyaWEtdmFsdWVub3dgLGBhcmlhLXZhbHVldGV4dGAsYHRpdGxlYF0sVms9UCh7X19uYW1lOmBVc2FnZUJhcmAscHJvcHM6e3JhdGlvOnt9LGxhYmVsOnt9LHZhbHVlVGV4dDp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PnhrKHQucmF0aW8pKSxyPVcoKCk9Pk1hdGgubWluKDEwMCxNYXRoLm1heCgwLHQucmF0aW8qMTAwKSkpLGk9VygoKT0+TWF0aC5yb3VuZChyLnZhbHVlKSksYT17bm9ybWFsOmBiZy1wcmltYXJ5YCxhbWJlcjpgYmctYmFyLWFtYmVyYCxyZWQ6YGJnLWRlc3RydWN0aXZlYH07cmV0dXJuKG8scyk9PihMKCksUihgc3BhbmAse3JvbGU6YG1ldGVyYCwiYXJpYS1sYWJlbCI6ZS5sYWJlbCwiYXJpYS12YWx1ZW5vdyI6aS52YWx1ZSwiYXJpYS12YWx1ZW1pbiI6YDBgLCJhcmlhLXZhbHVlbWF4IjpgMTAwYCwiYXJpYS12YWx1ZXRleHQiOmUudmFsdWVUZXh0LHRpdGxlOmUudmFsdWVUZXh0LGNsYXNzOk8oTShRdikoYHJlbGF0aXZlIGlubGluZS1ibG9jayBoLTEuNSB3LTE0IHNocmluay0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctbXV0ZWQgYWxpZ24tbWlkZGxlYCx0LmNsYXNzKSl9LFtCKGBzcGFuYCx7Y2xhc3M6TyhbYGFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgcm91bmRlZC1mdWxsYCxhW24udmFsdWVdXSksc3R5bGU6Z2Uoe3dpZHRoOmAke3IudmFsdWV9JWB9KX0sbnVsbCw2KV0sMTAsQmspKX19KTtmdW5jdGlvbiBIayhlLHQsbixyPVN0cmluZyxpPSEwLGEpe3JldHVybntpZDplLGhlYWRlcjp0LGFjY2Vzc29yRm46bixtZXRhOnthbGlnbjpgcmlnaHRgfSxjZWxsOih7cm93OmV9KT0+e2lmKGUub3JpZ2luYWwuc3RvcmVEb3duKXJldHVybmA/YDtsZXQgbz1uKGUub3JpZ2luYWwpLHM9aT9HKGFrLHt2YWx1ZTpvfSk6cihvKTtpZighYSlyZXR1cm4gcztsZXQgYz1UayhlLm9yaWdpbmFsKS5maW5kKGU9PmUuaWQ9PT1hKTtpZighYylyZXR1cm4gcztsZXQgbD1pP2Ake1REKGMudXNlZCl9IC8gJHtURChjLmxpbWl0KX1gOmAke3IoYy51c2VkKX0gLyAke3IoYy5saW1pdCl9YDtyZXR1cm4gRyhgc3BhbmAse2NsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEuNWB9LFtzLEcoVmsse3JhdGlvOmMucmF0aW8sbGFiZWw6Q2tbYV0/P3QsdmFsdWVUZXh0Omx9KV0pfX19ZnVuY3Rpb24gVWsoKXtyZXR1cm57aWQ6YHJlakRheWAsaGVhZGVyOmByZWplY3RlZC9kYXlgLGFjY2Vzc29yRm46ZT0+ZS5yZWplY3Rpb25zUGVyRGF5LG1ldGE6e2FsaWduOmByaWdodGB9LGNlbGw6KHtyb3c6ZX0pPT57aWYoZS5vcmlnaW5hbC5zdG9yZURvd24pcmV0dXJuYD9gO2xldCB0PWUub3JpZ2luYWwucmVqZWN0aW9uc1BlckRheTtyZXR1cm4gRyhhayx7dmFsdWU6dCxjbGFzczp0PjA/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMH0pfX19ZnVuY3Rpb24gV2soZSl7cmV0dXJue2lkOmBjb3N0TW9udGhQcm9qYCxoZWFkZXI6YGNvc3QvbW9udGggKHByb2ouKWAsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjp0PT5Eayh0LmNvc3RQZXJNb250aE1pY3JvVXNkLGUpPz8wLGNlbGw6KHtyb3c6dH0pPT57aWYodC5vcmlnaW5hbC5zdG9yZURvd24pcmV0dXJuYD9gO2xldCBuPURrKHQub3JpZ2luYWwuY29zdFBlck1vbnRoTWljcm9Vc2QsZSk7aWYobj09PW51bGwpcmV0dXJuIEcoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYG5vdCBlbm91Z2ggZGF0YSB5ZXRgKTtsZXQgcj1PayhuLHQub3JpZ2luYWwubGltaXRzPy5jb3N0UGVyTW9udGhVU0QpO3JldHVybiBHKGBzcGFuYCx7Y2xhc3M6ci53aWxsRXhjZWVkP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDAsdGl0bGU6ci53aWxsRXhjZWVkP2BQcm9qZWN0ZWQgdG8gZXhjZWVkIHRoZSBjb25maWd1cmVkIGNvc3QvbW9udGggbGltaXRgOnZvaWQgMH0sd0QobikpfX19ZnVuY3Rpb24gR2soZSx0LG4scj1uZXcgRGF0ZSl7bGV0IGk9RWsocik7cmV0dXJuW3tpZDpgaWRgLGhlYWRlcjplLGFjY2Vzc29yRm46ZT0+ZS5pZCxjZWxsOih7cm93OmV9KT0+Ryh4Tyx7Y2xhc3M6YGZvbnQtbWVkaXVtYCxsYWJlbDplLm9yaWdpbmFsLmlkLHNjb3BlOmAke2Uub3JpZ2luYWwua2luZH06JHtlLm9yaWdpbmFsLmlkfWB9KX0se2lkOmBzZWNvbmRhcnlgLGhlYWRlcjp0LGFjY2Vzc29yRm46bixzb3J0aW5nRm46YGFscGhhbnVtZXJpY2AsY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sbihlLm9yaWdpbmFsKSl9LHtpZDpgbGltaXRzYCxoZWFkZXI6YExpbWl0c2AsYWNjZXNzb3JGbjplPT5CRChlLmxpbWl0cyksY2VsbDooe3JvdzplfSk9PkcoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sQkQoZS5vcmlnaW5hbC5saW1pdHMpKX0sSGsoYHJlcU1pbmAsYHJlcS9taW5gLGU9PmUucmVxdWVzdHNQZXJNaW51dGUsU3RyaW5nLCEwLGByZXFNaW5gKSxIayhgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5yZXF1ZXN0c1BlckRheSxTdHJpbmcsITAsYHJlcURheWApLFVrKCksSGsoYHRva0luRGF5YCxgdG9rSW4vZGF5YCxlPT5lLnRva2Vuc0luUGVyRGF5LFN0cmluZywhMCxgdG9rRGF5YCksSGsoYHRva091dERheWAsYHRva091dC9kYXlgLGU9PmUudG9rZW5zT3V0UGVyRGF5LFN0cmluZywhMCxgdG9rRGF5YCksSGsoYHRva0luTW9udGhgLGB0b2tJbi9tb250aGAsZT0+ZS50b2tlbnNJblBlck1vbnRoLFN0cmluZywhMCxgdG9rTW9udGhgKSxIayhgdG9rT3V0TW9udGhgLGB0b2tPdXQvbW9udGhgLGU9PmUudG9rZW5zT3V0UGVyTW9udGgsU3RyaW5nLCEwLGB0b2tNb250aGApLEhrKGBjb3N0RGF5YCxgY29zdC9kYXlgLGU9PmUuY29zdFBlckRheU1pY3JvVXNkLHdELCExLGBjb3N0RGF5YCksSGsoYGNvc3RNb250aGAsYGNvc3QvbW9udGhgLGU9PmUuY29zdFBlck1vbnRoTWljcm9Vc2Qsd0QsITEsYGNvc3RNb250aGApLFdrKGkpXX12YXIgS2s9UCh7X19uYW1lOmBVc2FnZVRhYmxlYCxwcm9wczp7aWRMYWJlbDp7fSxlbnRyaWVzOnt9LHNlY29uZGFyeUNvbHVtbkxhYmVsOnt9LHNlY29uZGFyeVZhbHVlOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e30sbm93Ont9LHNvcnRpbmc6e319LGVtaXRzOltgdXBkYXRlOnNvcnRpbmdgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPVcoKCk9PkdrKG4uaWRMYWJlbCxuLnNlY29uZGFyeUNvbHVtbkxhYmVsLG4uc2Vjb25kYXJ5VmFsdWUsbi5ub3cpKTtyZXR1cm4odCxuKT0+KEwoKSx6KG9ELHtjb2x1bW5zOmkudmFsdWUsZGF0YTplLmVudHJpZXMsImVtcHR5LW1lc3NhZ2UiOmUuZW1wdHlNZXNzYWdlLCJyb3ctY2xhc3MiOmU9PmUuc3RvcmVEb3duP2BiZy1kZXN0cnVjdGl2ZS8xMGA6dm9pZCAwLHNvcnRpbmc6ZS5zb3J0aW5nLCJvblVwZGF0ZTpzb3J0aW5nIjpuWzBdfHw9ZT0+cihgdXBkYXRlOnNvcnRpbmdgLGUpfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgLGByb3ctY2xhc3NgLGBzb3J0aW5nYF0pKX19KSxxaz02ZTQ7ZnVuY3Rpb24gSmsoZT1xayl7bGV0IHQ9aihuZXcgRGF0ZSksbjtmdW5jdGlvbiByKCl7bnx8KG49bFQoe2ludGVydmFsTXM6ZSx0aWNrOigpPT57dC52YWx1ZT1uZXcgRGF0ZX19KSxuLnN0YXJ0KCkpfWZ1bmN0aW9uIGkoKXtuPy5zdG9wKCksbj12b2lkIDB9cmV0dXJue25vdzp0LHN0YXJ0OnIsc3RvcDppfX12YXIgWWs9YFxyCmAsWGs9L1siLFxyXG5dLyxaaz0vXls9K1wtQFx0XHJdLztmdW5jdGlvbiBRayhlKXtsZXQgdD1lPT1udWxsP2BgOlN0cmluZyhlKTtyZXR1cm4gWmsudGVzdCh0KSYmKHQ9YCcke3R9YCksWGsudGVzdCh0KT9gIiR7dC5yZXBsYWNlKC8iL2csYCIiYCl9ImA6dH1mdW5jdGlvbiAkayhlLHQpe3JldHVybltlLC4uLnRdLm1hcChlPT5lLm1hcChRaykuam9pbihgLGApKS5qb2luKFlrKStZa312YXIgZUE9e3VzZXJzOmBHcm91cGAsZ3JvdXBzOmBNZW1iZXJzYH07ZnVuY3Rpb24gdEEoZSl7cmV0dXJuKGUvU2spLnRvRml4ZWQoNil9ZnVuY3Rpb24gbkEoZSx0LG4scj1uZXcgRGF0ZSl7bGV0IGk9RWsocik7cmV0dXJuICRrKFtgTmFtZWAsZUFbdF0sYExpbWl0c2AsYHJlcS9taW5gLGByZXEvZGF5YCxgcmVqZWN0ZWQvZGF5YCxgdG9rSW4vZGF5YCxgdG9rT3V0L2RheWAsYHRva0luL21vbnRoYCxgdG9rT3V0L21vbnRoYCxgY29zdC9kYXkgKFVTRClgLGBjb3N0L21vbnRoIChVU0QpYCxgY29zdC9tb250aCAocHJvai4sIFVTRClgXSxlLm1hcChlPT57bGV0IHQ9ZS5zdG9yZURvd24scj10P251bGw6RGsoZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxpKTtyZXR1cm5bZS5pZCxuKGUpLEJEKGUubGltaXRzKSx0P2A/YDplLnJlcXVlc3RzUGVyTWludXRlLHQ/YD9gOmUucmVxdWVzdHNQZXJEYXksdD9gP2A6ZS5yZWplY3Rpb25zUGVyRGF5LHQ/YD9gOmUudG9rZW5zSW5QZXJEYXksdD9gP2A6ZS50b2tlbnNPdXRQZXJEYXksdD9gP2A6ZS50b2tlbnNJblBlck1vbnRoLHQ/YD9gOmUudG9rZW5zT3V0UGVyTW9udGgsdD9gP2A6dEEoZS5jb3N0UGVyRGF5TWljcm9Vc2QpLHQ/YD9gOnRBKGUuY29zdFBlck1vbnRoTWljcm9Vc2QpLHQ/YD9gOnI9PT1udWxsP2Bub3QgZW5vdWdoIGRhdGEgeWV0YDp0QShyKV19KSl9ZnVuY3Rpb24gckEoZSx0LG4scixpPSExKXtyZXR1cm4gJGsoW2BNb2RlbGAsYCR7dH0ke2k/YCAoVVNEKWA6YGB9ICgke259LCBzcGFuICR7cn0pYF0sZS5tYXAoZT0+W2UuaWQsaT90QShlLnZhbHVlKTplLnZhbHVlXSkpfWZ1bmN0aW9uIGlBKGUsdCl7cmV0dXJuIGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX1mdW5jdGlvbiBhQShlLHQpe3JldHVybiBlLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModCl9ZnVuY3Rpb24gb0EoZSx0KXtyZXR1cm4gdC5maWx0ZXIodD0+KHQuZ3JvdXBzPz9bdC5ncm91cE5hbWVdKS5pbmNsdWRlcyhlLmlkKSl9ZnVuY3Rpb24gc0EoZSx0LG4pe3JldHVybiBvQShlLHQpLmZpbHRlcihlPT5pQShlLG4pKX1mdW5jdGlvbiBjQShlLHQsbil7cmV0dXJuIGFBKGUsbil8fHNBKGUsdCxuKS5sZW5ndGg+MH12YXIgbEE9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sdUE9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sZEE9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sZkE9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0scEE9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sbUE9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMmB9LGhBPXtrZXk6MCxjbGFzczpgbWItMyBmbGV4IGZsZXgtd3JhcCBnYXAteC00IGdhcC15LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxnQT17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yYH0sX0E9e2NsYXNzOmBzci1vbmx5YH0sdkE9e2NsYXNzOmBmbGV4IGZsZXgtMSBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC14LTQgZ2FwLXktMSBwci0yIHRleHQtbGVmdGB9LHlBPXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sYkE9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSx4QT17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LFNBPXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTRgfSxDQT17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSx3QT17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFRBPXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LEVBPXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sREE9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sT0E9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxrQT17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxBQT17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGpBPXtjbGFzczpgbWItMyBncmlkIGdyaWQtY29scy0yIGdhcC14LTYgZ2FwLXktMS41IHRleHQtc20gc206Z3JpZC1jb2xzLTRgfSxNQT17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LE5BPXtjbGFzczpgdGFidWxhci1udW1zYH0sUEE9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxGQT17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LElBPXtjbGFzczpgdGFidWxhci1udW1zYH0sTEE9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxSQT1bYHRpdGxlYF0sekE9e2tleTowLGNsYXNzOmBtYi0zIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC00IGdhcC15LTEuNWB9LEJBPXtrZXk6MixjbGFzczpgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFZBPXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSxIQT1gR2xvYiBwYXR0ZXJuIOKAlCBtYXRjaGVzIGxpa2UgYSBzaGVsbCB3aWxkY2FyZCAoKiwgPywgWy4uLl0pYCxVQT1QKHtfX25hbWU6YFVzYWdlVmlld2Asc2V0dXAoZSl7bGV0IHQ9ZFQoKSxuPVcoKCk9PnQudXNhZ2UpLHtub3c6cixzdGFydDppLHN0b3A6YX09SmsoKTtRaShpKSxuYShhKTtsZXQgbz1XKCgpPT57bGV0IGU9e307Zm9yKGxldCBuIG9mIHQub3ZlcnZpZXc/Lmdyb3Vwcz8/W10pZVtuLm5hbWVdPW4ubWVtYmVyQ291bnQ7cmV0dXJuIGV9KTtmdW5jdGlvbiBzKGUpe3JldHVybihlLmdyb3Vwcz8/KGUuZ3JvdXBOYW1lPT09dm9pZCAwP1tdOltlLmdyb3VwTmFtZV0pKS5qb2luKGAsIGApfWZ1bmN0aW9uIGMoZSl7bGV0IHQ9by52YWx1ZVtlLmlkXTtyZXR1cm4gdD09PXZvaWQgMD9gYDpTdHJpbmcodCl9bGV0e3VzYWdlUXVlcnk6bH09bl8oeU8oKSkse3F1ZXJ5OnUsbm9ybWFsaXplZDpkLGhhc1F1ZXJ5OmZ9PWdEKGwpLHA9VygoKT0+e2xldCBlPW4udmFsdWU/Lmdyb3Vwcz8/W107aWYoIWYudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiBlLmZpbHRlcihlPT5jQShlLHQsZC52YWx1ZSkpfSksbT1XKCgpPT5mLnZhbHVlP3AudmFsdWUuZmlsdGVyKGU9PiFhQShlLGQudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIGgoZSl7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiFmLnZhbHVlfHxhQShlLGQudmFsdWUpP29BKGUsdCk6c0EoZSx0LGQudmFsdWUpfWxldCBnPVcoKCk9Pm4udmFsdWU/Lmdyb3Vwcy5sZW5ndGg/Zi52YWx1ZT9gbm8gZ3JvdXBzIG1hdGNoICIke3UudmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKSxfPVcoKCk9PntsZXQgZT1uLnZhbHVlPy51c2Vycz8/W107aWYoIWYudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8uZ3JvdXBzPz9bXSxyPW5ldyBTZXQodC5maWx0ZXIoZT0+YUEoZSxkLnZhbHVlKSkubWFwKGU9PmUuaWQpKTtyZXR1cm4gZS5maWx0ZXIoZT0+aUEoZSxkLnZhbHVlKXx8KGUuZ3JvdXBzPz9bZS5ncm91cE5hbWVdKS5zb21lKGU9PmUhPT12b2lkIDAmJnIuaGFzKGUpKSl9KSx2PVcoKCk9Pm4udmFsdWU/LnVzZXJzLmxlbmd0aD9mLnZhbHVlP2BubyB1c2VycyBtYXRjaCAiJHt1LnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCkseT1XKCgpPT5HayhgTmFtZWAsYE1lbWJlcnNgLGMsci52YWx1ZSkpLGI9aihbXSkseD1xRSh7Z2V0IGRhdGEoKXtyZXR1cm4gcC52YWx1ZX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4geS52YWx1ZX0sZ2V0Q29yZVJvd01vZGVsOlJFKCksZ2V0U29ydGVkUm93TW9kZWw6ekUoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+YUQoZSxiKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gYi52YWx1ZX19fSksUz1XKCgpPT54LmdldFJvd01vZGVsKCkucm93cyksQz1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLHc9VygoKT0+eC5nZXRIZWFkZXJHcm91cHMoKVswXS5oZWFkZXJzLmZpbHRlcihlPT5DLmhhcyhlLmNvbHVtbi5pZCkpKSxlZT1adCh7bWFudWFsbHlFeHBhbmRlZDpuZXcgU2V0LG1hbnVhbGx5Q29sbGFwc2VkOm5ldyBTZXR9KSx0ZT1XKCgpPT5FTyhlZSxmLnZhbHVlLG0udmFsdWUpKTtmdW5jdGlvbiBUKGUpe0RPKGVlLGUsdGUudmFsdWUuaGFzKGUpKX1sZXQgbmU9Vyh7Z2V0OigpPT5BcnJheS5mcm9tKHRlLnZhbHVlKSxzZXQ6ZT0+e2xldCB0PW5ldyBTZXQoZSk7Zm9yKGxldCBlIG9mIHRlLnZhbHVlKXQuaGFzKGUpfHxUKGUpO2ZvcihsZXQgZSBvZiB0KXRlLnZhbHVlLmhhcyhlKXx8VChlKX19KTtEcih1LGU9PntlLnRyaW0oKT09PWBgJiZPTyhlZSl9KTtmdW5jdGlvbiByZShlKXtyZXR1cm4vWyo/W10vLnRlc3QoZSl9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIGUuaWQuc3RhcnRzV2l0aChgY29zdGApP2Ake3dEKGUudXNlZCl9IC8gJHt3RChlLmxpbWl0KX1gOmAke1REKGUudXNlZCl9IC8gJHtURChlLmxpbWl0KX1gfWZ1bmN0aW9uIEUoZSx0KXtsZXQgbj1Fayh0KSxyPURrKGUuY29zdFBlck1vbnRoTWljcm9Vc2Qsbik7cmV0dXJuIHI9PT1udWxsP3t0ZXh0OmBub3QgZW5vdWdoIGRhdGEgeWV0YCx3aWxsRXhjZWVkOiExfTp7dGV4dDp3RChyKSx3aWxsRXhjZWVkOk9rKHIsZS5saW1pdHM/LmNvc3RQZXJNb250aFVTRCkud2lsbEV4Y2VlZH19bGV0IGFlPVcoKCk9PkdrKGBOYW1lYCxgR3JvdXBgLHMsci52YWx1ZSkpLG9lPWooW10pLHNlPXFFKHtnZXQgZGF0YSgpe3JldHVybiBfLnZhbHVlfSxnZXQgY29sdW1ucygpe3JldHVybiBhZS52YWx1ZX0sZ2V0Q29yZVJvd01vZGVsOlJFKCksZ2V0U29ydGVkUm93TW9kZWw6ekUoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+YUQoZSxvZSksc3RhdGU6e2dldCBzb3J0aW5nKCl7cmV0dXJuIG9lLnZhbHVlfX19KTtmdW5jdGlvbiBjZSgpe3JldHVybiBuQShzZS5nZXRSb3dNb2RlbCgpLnJvd3MubWFwKGU9PmUub3JpZ2luYWwpLGB1c2Vyc2AscyxyLnZhbHVlKX1mdW5jdGlvbiBEKCl7cmV0dXJuIG5BKFMudmFsdWUubWFwKGU9PmUub3JpZ2luYWwpLGBncm91cHNgLGMsci52YWx1ZSl9cmV0dXJuKGUsdCk9PihMKCksUihgZGl2YCxsQSxbVihzRCx7bW9kZWxWYWx1ZTpNKHUpLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+dW4odSk/dS52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciB1c2VycyBvciBncm91cHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksbi52YWx1ZT8oTCgpLHooTShKdykse2tleTowfSx7ZGVmYXVsdDpOKCgpPT5bVihNKFp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oUXcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbM118fD1bSChgVG90YWxgLC0xKV1dKSxfOjF9KSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbNF18fD1bSChgVXNhZ2Ugc3VtbWVkIGFjcm9zcyBldmVyeSB1c2VyIGFuZCBncm91cCBjb21iaW5lZC5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLFYoTShZdykse2NsYXNzOmBncmlkIGdyaWQtY29scy0yIGdhcC00IHRleHQtc20gc206Z3JpZC1jb2xzLTVgfSx7ZGVmYXVsdDpOKCgpPT5bQihgZGl2YCxudWxsLFt0WzVdfHw9QihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUmVxdWVzdHMvZGF5YCwtMSksQihgcGAsdUEsW1YoYWsse3ZhbHVlOm4udmFsdWUudG90YWwucmVxdWVzdHNQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxCKGBkaXZgLG51bGwsW3RbNl18fD1CKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBSZWplY3RlZC9kYXlgLC0xKSxCKGBwYCx7Y2xhc3M6TyhbYHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgLG4udmFsdWUudG90YWwucmVqZWN0aW9uc1BlckRheT4wP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKX0sW1YoYWsse3ZhbHVlOm4udmFsdWUudG90YWwucmVqZWN0aW9uc1BlckRheX0sbnVsbCw4LFtgdmFsdWVgXSldLDIpXSksQihgZGl2YCxudWxsLFt0WzddfHw9QihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIGluL2RheWAsLTEpLEIoYHBgLGRBLFtWKGFrLHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnRva2Vuc0luUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksQihgZGl2YCxudWxsLFt0WzhdfHw9QihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIG91dC9kYXlgLC0xKSxCKGBwYCxmQSxbVihhayx7dmFsdWU6bi52YWx1ZS50b3RhbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxCKGBkaXZgLG51bGwsW3RbOV18fD1CKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBDb3N0L2RheWAsLTEpLEIoYHBgLHBBLGsoTSh3RCkobi52YWx1ZS50b3RhbC5jb3N0UGVyRGF5TWljcm9Vc2QpKSwxKV0pXSksXzoxfSldKSxfOjF9KSk6VShgYCwhMCksbi52YWx1ZT8oTCgpLHooUGsse2tleToxLCJtdGQtbWljcm9zIjpuLnZhbHVlLnRvdGFsLmNvc3RQZXJNb250aE1pY3JvVXNkLGxpbWl0czpuLnZhbHVlLnRvdGFsLmxpbWl0cyxub3c6TShyKX0sbnVsbCw4LFtgbXRkLW1pY3Jvc2AsYGxpbWl0c2AsYG5vd2BdKSk6VShgYCwhMCksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLG51bGwse2RlZmF1bHQ6TigoKT0+W0IoYGRpdmAsbUEsW0IoYGRpdmAsbnVsbCxbVihNKFF3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PlsuLi50WzEwXXx8PVtIKGBHcm91cHNgLC0xKV1dKSxfOjF9KSxWKE0oWHcpLG51bGwse2RlZmF1bHQ6TigoKT0+Wy4uLnRbMTFdfHw9W0goYEV4cGFuZCBhIGdyb3VwIHRvIHNlZSBpdHMgbWVtYmVyIHVzZXJzJyBvd24gdXNhZ2UuYCwtMSldXSksXzoxfSldKSxWKHprLHtmaWxlbmFtZTpgdXNhZ2UtZ3JvdXBzLmNzdmAsYnVpbGQ6RH0pXSldKSxfOjF9KSxWKE0oWXcpLG51bGwse2RlZmF1bHQ6TigoKT0+W1MudmFsdWUubGVuZ3RoPyhMKCksUihgZGl2YCxoQSxbKEwoITApLFIoSSxudWxsLGhhKHcudmFsdWUsZT0+KEwoKSx6KFlFLHtrZXk6ZS5pZCxoZWFkZXI6ZX0sbnVsbCw4LFtgaGVhZGVyYF0pKSksMTI4KSldKSk6VShgYCwhMCksUy52YWx1ZS5sZW5ndGg/KEwoKSx6KE0oU08pLHtrZXk6MSxtb2RlbFZhbHVlOm5lLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+bmUudmFsdWU9ZSx0eXBlOmBtdWx0aXBsZWAsY2xhc3M6YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTNgfSx7ZGVmYXVsdDpOKCgpPT5bKEwoITApLFIoSSxudWxsLGhhKFMudmFsdWUsZT0+KEwoKSx6KE0od08pLHtrZXk6ZS5vcmlnaW5hbC5pZCx2YWx1ZTplLm9yaWdpbmFsLmlkfSx7ZGVmYXVsdDpOKCgpPT5bQihgZGl2YCxnQSxbVih4Tyx7Y2xhc3M6YHNocmluay0wIHB5LTIuNSBmb250LW1lZGl1bWAsbGFiZWw6ZS5vcmlnaW5hbC5pZCxzY29wZTpgZ3JvdXA6JHtlLm9yaWdpbmFsLmlkfWB9LG51bGwsOCxbYGxhYmVsYCxgc2NvcGVgXSksVihNKFRPKSx7ImhlYWRlci1jbGFzcyI6YGZsZXgtMWB9LHtkZWZhdWx0Ok4oKCk9PltCKGBzcGFuYCxfQSxgR3JvdXAgYCtrKGUub3JpZ2luYWwuaWQpK2AgZGV0YWlsc2AsMSksQihgc3BhbmAsdkEsW0IoYHNwYW5gLHlBLGsoYyhlLm9yaWdpbmFsKXx8YDBgKStgIG1lbWJlcnNgLDEpLEIoYHNwYW5gLGJBLFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oTCgpLFIoSSx7a2V5OjB9LFtIKGA/YCldLDY0KSk6KEwoKSx6KGFrLHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSksdFsxMl18fD1IKGAgcmVxL2RheSBgLC0xKV0pLEIoYHNwYW5gLHhBLGsoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOk0od0QpKGUub3JpZ2luYWwuY29zdFBlckRheU1pY3JvVXNkKSkrYC9kYXkgYCwxKV0pXSksXzoyfSwxMDI0KV0pLFYoTShDTyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bQihgZGxgLFNBLFtCKGBkaXZgLG51bGwsW0IoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpIQX0sYFByb3ZpZGVyc2ApLEIoYGRkYCxudWxsLFtlLm9yaWdpbmFsLnByb3ZpZGVycz8ubGVuZ3RoPyhMKCksUihgZGl2YCxDQSxbKEwoITApLFIoSSxudWxsLGhhKGUub3JpZ2luYWwucHJvdmlkZXJzLGU9PihMKCkseihNKF9EKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbW9ubyBmb250LW5vcm1hbGB9LHtkZWZhdWx0Ok4oKCk9PltIKGsoZSksMSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSk6KEwoKSxSKGBzcGFuYCx3QSxgQWxsIHByb3ZpZGVyc2ApKV0pXSksQihgZGl2YCxudWxsLFtCKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6SEF9LGBNb2RlbHNgKSxCKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5tb2RlbHM/Lmxlbmd0aD8oTCgpLFIoYGRpdmAsVEEsWyhMKCEwKSxSKEksbnVsbCxoYShlLm9yaWdpbmFsLm1vZGVscyxlPT4oTCgpLFIoSSx7a2V5OmV9LFtyZShlKT8oTCgpLHooTShfRCkse2tleToxLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpOKCgpPT5bSChrKGUpLDEpXSksXzoyfSwxMDI0KSk6KEwoKSx6KHRPLHtrZXk6MCxpZDplfSxudWxsLDgsW2BpZGBdKSldLDY0KSkpLDEyOCkpXSkpOihMKCksUihgc3BhbmAsRUEsYEFsbCBtb2RlbHNgKSldKV0pLEIoYGRpdmAsbnVsbCxbQihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOkhBfSxgTUNQIHNlcnZlcnNgKSxCKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5tY3BTZXJ2ZXJzPy5sZW5ndGg/KEwoKSxSKGBkaXZgLERBLFsoTCghMCksUihJLG51bGwsaGEoZS5vcmlnaW5hbC5tY3BTZXJ2ZXJzLGU9PihMKCkseihNKF9EKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbW9ubyBmb250LW5vcm1hbGB9LHtkZWZhdWx0Ok4oKCk9PltIKGsoZSksMSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSk6KEwoKSxSKGBzcGFuYCxPQSxgQWxsIE1DUCBzZXJ2ZXJzYCkpXSldKSxCKGBkaXZgLG51bGwsW0IoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpIQX0sYEFnZW50c2ApLEIoYGRkYCxudWxsLFtlLm9yaWdpbmFsLmFnZW50cz8ubGVuZ3RoPyhMKCksUihgZGl2YCxrQSxbKEwoITApLFIoSSxudWxsLGhhKGUub3JpZ2luYWwuYWdlbnRzLGU9PihMKCkseihNKF9EKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbW9ubyBmb250LW5vcm1hbGB9LHtkZWZhdWx0Ok4oKCk9PltIKGsoZSksMSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSk6KEwoKSxSKGBzcGFuYCxBQSxgQWxsIGFnZW50c2ApKV0pXSldKSxCKGBkbGAsakEsW0IoYGRpdmAsbnVsbCxbdFsxM118fD1CKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMaW1pdHNgLC0xKSxCKGBkZGAsbnVsbCxrKE0oQkQpKGUub3JpZ2luYWwubGltaXRzKSksMSldKSxCKGBkaXZgLG51bGwsW3RbMTRdfHw9QihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgcmVxL21pbmAsLTEpLEIoYGRkYCxNQSxbZS5vcmlnaW5hbC5zdG9yZURvd24/KEwoKSxSKEkse2tleTowfSxbSChgP2ApXSw2NCkpOihMKCkseihhayx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZXF1ZXN0c1Blck1pbnV0ZX0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxCKGBkaXZgLG51bGwsW3RbMTVdfHw9QihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgcmVqZWN0ZWQvZGF5YCwtMSksQihgZGRgLHtjbGFzczpPKFtgdGFidWxhci1udW1zYCwhZS5vcmlnaW5hbC5zdG9yZURvd24mJmUub3JpZ2luYWwucmVqZWN0aW9uc1BlckRheT4wP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKX0sW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhMKCksUihJLHtrZXk6MH0sW0goYD9gKV0sNjQpKTooTCgpLHooYWsse2tleToxLHZhbHVlOmUub3JpZ2luYWwucmVqZWN0aW9uc1BlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpXSwyKV0pLEIoYGRpdmAsbnVsbCxbdFsxNl18fD1CKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGB0b2tJbi9kYXlgLC0xKSxCKGBkZGAsTkEsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhMKCksUihJLHtrZXk6MH0sW0goYD9gKV0sNjQpKTooTCgpLHooYWsse2tleToxLHZhbHVlOmUub3JpZ2luYWwudG9rZW5zSW5QZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksQihgZGl2YCxudWxsLFt0WzE3XXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva091dC9kYXlgLC0xKSxCKGBkZGAsUEEsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhMKCksUihJLHtrZXk6MH0sW0goYD9gKV0sNjQpKTooTCgpLHooYWsse2tleToxLHZhbHVlOmUub3JpZ2luYWwudG9rZW5zT3V0UGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSldKV0pLEIoYGRpdmAsbnVsbCxbdFsxOF18fD1CKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGB0b2tJbi9tb250aGAsLTEpLEIoYGRkYCxGQSxbZS5vcmlnaW5hbC5zdG9yZURvd24/KEwoKSxSKEkse2tleTowfSxbSChgP2ApXSw2NCkpOihMKCkseihhayx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJblBlck1vbnRofSxudWxsLDgsW2B2YWx1ZWBdKSldKV0pLEIoYGRpdmAsbnVsbCxbdFsxOV18fD1CKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGB0b2tPdXQvbW9udGhgLC0xKSxCKGBkZGAsSUEsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhMKCksUihJLHtrZXk6MH0sW0goYD9gKV0sNjQpKTooTCgpLHooYWsse2tleToxLHZhbHVlOmUub3JpZ2luYWwudG9rZW5zT3V0UGVyTW9udGh9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksQihgZGl2YCxudWxsLFt0WzIwXXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYGNvc3QvbW9udGhgLC0xKSxCKGBkZGAsTEEsayhlLm9yaWdpbmFsLnN0b3JlRG93bj9gP2A6TSh3RCkoZS5vcmlnaW5hbC5jb3N0UGVyTW9udGhNaWNyb1VzZCkpLDEpXSksQihgZGl2YCxudWxsLFt0WzIxXXx8PUIoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYGNvc3QvbW9udGggKHByb2ouKWAsLTEpLEIoYGRkYCx7Y2xhc3M6TyhbYHRhYnVsYXItbnVtc2AsIWUub3JpZ2luYWwuc3RvcmVEb3duJiZFKGUub3JpZ2luYWwsTShyKSkud2lsbEV4Y2VlZD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwXSksdGl0bGU6IWUub3JpZ2luYWwuc3RvcmVEb3duJiZFKGUub3JpZ2luYWwsTShyKSkud2lsbEV4Y2VlZD9gUHJvamVjdGVkIHRvIGV4Y2VlZCB0aGUgY29uZmlndXJlZCBjb3N0L21vbnRoIGxpbWl0YDp2b2lkIDB9LGsoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOkUoZS5vcmlnaW5hbCxNKHIpKS50ZXh0KSwxMSxSQSldKV0pLE0oVGspKGUub3JpZ2luYWwpLmxlbmd0aD8oTCgpLFIoYGRpdmAsekEsWyhMKCEwKSxSKEksbnVsbCxoYShNKFRrKShlLm9yaWdpbmFsKSxlPT4oTCgpLFIoYHNwYW5gLHtrZXk6ZS5pZCxjbGFzczpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxbSChrKE0oQ2spW2UuaWRdKStgIGAsMSksVihWayx7cmF0aW86ZS5yYXRpbyxsYWJlbDpNKENrKVtlLmlkXSwidmFsdWUtdGV4dCI6aWUoZSl9LG51bGwsOCxbYHJhdGlvYCxgbGFiZWxgLGB2YWx1ZS10ZXh0YF0pXSkpKSwxMjgpKV0pKTpVKGBgLCEwKSx0WzIyXXx8PUIoYHBgLHtjbGFzczpgbWItMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE1lbWJlcnNgLC0xKSxWKEtrLHsiaWQtbGFiZWwiOmBOYW1lYCwic2Vjb25kYXJ5LWNvbHVtbi1sYWJlbCI6YEdyb3VwYCxlbnRyaWVzOmgoZS5vcmlnaW5hbCksInNlY29uZGFyeS12YWx1ZSI6cyxub3c6TShyKX0sbnVsbCw4LFtgZW50cmllc2AsYG5vd2BdKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKSk6KEwoKSxSKGBwYCxCQSxrKGcudmFsdWUpLDEpKV0pLF86MX0pXSksXzoxfSksVihNKEp3KSxudWxsLHtkZWZhdWx0Ok4oKCk9PltWKE0oWncpLG51bGwse2RlZmF1bHQ6TigoKT0+W0IoYGRpdmAsVkEsW1YoTShRdyksbnVsbCx7ZGVmYXVsdDpOKCgpPT5bLi4udFsyM118fD1bSChgVXNlcnNgLC0xKV1dKSxfOjF9KSxWKHprLHtmaWxlbmFtZTpgdXNhZ2UtdXNlcnMuY3N2YCxidWlsZDpjZX0pXSldKSxfOjF9KSxWKE0oWXcpLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoS2sseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6Xy52YWx1ZSwic2Vjb25kYXJ5LXZhbHVlIjpzLCJlbXB0eS1tZXNzYWdlIjp2LnZhbHVlLG5vdzpNKHIpLHNvcnRpbmc6b2UudmFsdWUsIm9uVXBkYXRlOnNvcnRpbmciOnRbMl18fD1lPT5vZS52YWx1ZT1lfSxudWxsLDgsW2BlbnRyaWVzYCxgZW1wdHktbWVzc2FnZWAsYG5vd2AsYHNvcnRpbmdgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLFdBPVtgcHJvdmlkZXJzYCxgdXNhZ2VgLGBjaGFydHNgLGB0YXJnZXRzYCxgZXZlbnRzYF07ZnVuY3Rpb24gR0EoZSx0LG4pe2xldCByPWUuc3RhcnRzV2l0aChgI2ApP2Uuc2xpY2UoMSk6ZTtyZXR1cm4gdC5pbmNsdWRlcyhyKT9yOm59ZnVuY3Rpb24gS0EoZSl7cmV0dXJuYCMke2V9YH12YXIgcUE9YHByb3ZpZGVyc2A7ZnVuY3Rpb24gSkEoZSl7bGV0IHQ9ZS5zdGFydHNXaXRoKGAjYCk/ZS5zbGljZSgxKTplLG49dC5pbmRleE9mKGA/YCkscj1uPT09LTE/dDp0LnNsaWNlKDAsbiksaT1uPT09LTE/YGA6dC5zbGljZShuKzEpO3JldHVybnt0YWI6R0EocixXQSxxQSkscXVlcnk6bmV3IFVSTFNlYXJjaFBhcmFtcyhpKX19ZnVuY3Rpb24gWUEoZSx0KXtsZXQgbj1PYmplY3QuZW50cmllcyh0KS5maWx0ZXIoKFssZV0pPT5lIT09YGApO3JldHVybiBuLmxlbmd0aD09PTA/S0EoZSk6YCR7S0EoZSl9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhuKS50b1N0cmluZygpfWB9dmFyIFhBPVtgaG91cmAsYGRheWAsYG1vbnRoYF0sWkE9W2ByZXF1ZXN0c2AsYHRva2Vuc2AsYGNvc3RgLGBtb2RlbHNgXSxRQT1bYHJlcWAsYHRva2luYCxgdG9rb3V0YCxgY29zdGBdLCRBPS9eKHRvdGFsfHVzZXI6Lit8Z3JvdXA6Lit8bW9kZWw6LispJC87ZnVuY3Rpb24gZWooZSl7bGV0IHQ9e30sbj1lLmdldChgd2luZG93YCk7biYmWEEuaW5jbHVkZXMobikmJih0LndpbmRvdz1uKTtsZXQgcj1lLmdldChgdGFiYCk7ciYmWkEuaW5jbHVkZXMocikmJih0LnRhYj1yKTtsZXQgaT1lLmdldChgbWV0cmljYCk7aSYmUUEuaW5jbHVkZXMoaSkmJih0Lm1ldHJpYz1pKTtsZXQgYT1lLmdldChgc2NvcGVgKTthJiYkQS50ZXN0KGEpJiYodC5zY29wZT1hKTtsZXQgbz1lLmdldChgZmlsdGVyYCk7cmV0dXJuIG8mJih0LmZpbHRlcj1vKSx0fWZ1bmN0aW9uIHRqKGUpe2xldCB0PWUuZ2V0KGBxYCk7cmV0dXJuIHQ/e3E6dH06e319ZnVuY3Rpb24gbmooZSl7bGV0IHQ9e30sbj1lLmdldChga2luZGApLHI9ZS5nZXQoYHVzZXJgKTtyZXR1cm4gbiYmKHQua2luZD1uKSxyJiYodC51c2VyPXIpLHR9dmFyIHJqPWBob3VyYCxpaj1gcmVxdWVzdHNgLGFqPWBjb3N0YCxvaj1gdG90YWxgLHNqPWBgO2Z1bmN0aW9uIGNqKCl7bGV0IGU9eU8oKSx0PXZPKCksbj1KRCgpO2Z1bmN0aW9uIHIocil7bGV0e3RhYjppLHF1ZXJ5OmF9PUpBKHIpO2lmKGUuYWN0aXZlVGFiPWksaT09PWBjaGFydHNgKXtsZXQgZT1laihhKTt0LnNldFNlbGVjdGlvbih7d2luZG93OmUud2luZG93Pz9yaix0YWI6ZS50YWI/P2lqLG1vZGVsTWV0cmljOmUubWV0cmljPz9haixzY29wZTplLnNjb3BlPz9vaixtb2RlbEZpbHRlcjplLmZpbHRlcj8/c2p9KX1lbHNlIGlmKGk9PT1gdXNhZ2VgKXtsZXQgdD10aihhKTtlLnVzYWdlUXVlcnk9dC5xPz9gYH1lbHNlIGlmKGk9PT1gZXZlbnRzYCl7bGV0IGU9bmooYSk7bi5zZXRLaW5kRmlsdGVyKGUua2luZD8/YGApLG4uc2V0VXNlckZpbHRlcihlLnVzZXI/P2BgKX19bGV0IGk9dHlwZW9mIHdpbmRvdzxgdWA7aSYmcih3aW5kb3cubG9jYXRpb24uaGFzaCksRHIoVygoKT0+e2lmKGUuYWN0aXZlVGFiPT09YGNoYXJ0c2Ape2xldCBuPXt9O3JldHVybiB0LndpbmRvdyE9PXJqJiYobi53aW5kb3c9dC53aW5kb3cpLHQudGFiIT09aWomJihuLnRhYj10LnRhYiksdC5tb2RlbE1ldHJpYyE9PWFqJiYobi5tZXRyaWM9dC5tb2RlbE1ldHJpYyksdC5zY29wZSE9PW9qJiYobi5zY29wZT10LnNjb3BlKSx0Lm1vZGVsRmlsdGVyIT09c2omJihuLmZpbHRlcj10Lm1vZGVsRmlsdGVyKSxZQShlLmFjdGl2ZVRhYixuKX1pZihlLmFjdGl2ZVRhYj09PWB1c2FnZWApcmV0dXJuIFlBKGUuYWN0aXZlVGFiLGUudXNhZ2VRdWVyeT97cTplLnVzYWdlUXVlcnl9Ont9KTtpZihlLmFjdGl2ZVRhYj09PWBldmVudHNgKXtsZXQgdD17fTtyZXR1cm4gbi5raW5kRmlsdGVyJiYodC5raW5kPW4ua2luZEZpbHRlciksbi51c2VyRmlsdGVyJiYodC51c2VyPW4udXNlckZpbHRlciksWUEoZS5hY3RpdmVUYWIsdCl9cmV0dXJuIFlBKGUuYWN0aXZlVGFiLHt9KX0pLGU9PntpJiZ3aW5kb3cubG9jYXRpb24uaGFzaCE9PWUmJndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLGBgLGUpfSk7ZnVuY3Rpb24gYSgpe3Iod2luZG93LmxvY2F0aW9uLmhhc2gpfWkmJihRaSgoKT0+d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYGhhc2hjaGFuZ2VgLGEpKSxuYSgoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGhhc2hjaGFuZ2VgLGEpKSl9dmFyIGxqPShmdW5jdGlvbigpe2xldCBlPXR5cGVvZiBkb2N1bWVudDxgdWAmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKS5yZWxMaXN0O3JldHVybiBlJiZlLnN1cHBvcnRzJiZlLnN1cHBvcnRzKGBtb2R1bGVwcmVsb2FkYCk/YG1vZHVsZXByZWxvYWRgOmBwcmVsb2FkYH0pKCksdWo9ZnVuY3Rpb24oZSl7cmV0dXJuYC9hZG1pbi9gK2V9LGRqPXt9LGZqPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1Qcm9taXNlLnJlc29sdmUoKTtpZih0JiZ0Lmxlbmd0aD4wKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShgbGlua2ApLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtwcm9wZXJ0eT1jc3Atbm9uY2VdYCksYT1pPy5ub25jZXx8aT8uZ2V0QXR0cmlidXRlKGBub25jZWApO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKGU9PlByb21pc2UucmVzb2x2ZShlKS50aGVuKGU9Pih7c3RhdHVzOmBmdWxmaWxsZWRgLHZhbHVlOmV9KSxlPT4oe3N0YXR1czpgcmVqZWN0ZWRgLHJlYXNvbjplfSkpKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZT9pbXBvcnQubWV0YS5yZXNvbHZlKGUpOm5ldyBVUkwoZSxpbXBvcnQubWV0YS51cmwpLmhyZWZ9cj1vKHQubWFwKHQ9PntpZih0PXVqKHQsbiksdD1zKHQpLHQgaW4gZGopcmV0dXJuO2RqW3RdPSEwO2xldCByPXQuZW5kc1dpdGgoYC5jc3NgKTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpZihpLmhyZWY9PT10JiYoIXJ8fGkucmVsPT09YHN0eWxlc2hlZXRgKSlyZXR1cm59bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApO2lmKGkucmVsPXI/YHN0eWxlc2hlZXRgOmxqLHJ8fChpLmFzPWBzY3JpcHRgKSxpLmNyb3NzT3JpZ2luPWBgLGkuaHJlZj10LGEmJmkuc2V0QXR0cmlidXRlKGBub25jZWAsYSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSxyKXJldHVybiBuZXcgUHJvbWlzZSgoZSxuKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsZSksaS5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsKCk9Pm4oRXJyb3IoYFVuYWJsZSB0byBwcmVsb2FkIENTUyBmb3IgJHt0fWApKSl9KX0pKX1mdW5jdGlvbiBpKGUpe2xldCB0PW5ldyBFdmVudChgdml0ZTpwcmVsb2FkRXJyb3JgLHtjYW5jZWxhYmxlOiEwfSk7aWYodC5wYXlsb2FkPWUsd2luZG93LmRpc3BhdGNoRXZlbnQodCksIXQuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBlfXJldHVybiByLnRoZW4odD0+e2ZvcihsZXQgZSBvZiB0fHxbXSllLnN0YXR1cz09PWByZWplY3RlZGAmJmkoZS5yZWFzb24pO3JldHVybiBlKCkuY2F0Y2goaSl9KX0scGo9e2NsYXNzOmBmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNiBweC00IHB5LTggc206cHgtNiBsZzpweC04YH0sbWo9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0saGo9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSxnaj17a2V5OjAsY2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxfaj1gaHR0cHM6Ly9naXRodWIuY29tL2x1a2FzenJhY3p5bG8vdHJhZWZpay1sbG1nYXRld2F5YCx2aj1tdShQKHtfX25hbWU6YEFwcGAsc2V0dXAoZSl7bGV0IHQ9UmkoKCk9PmZqKCgpPT5pbXBvcnQoYC4vQ2hhcnRzVmlldy1CVkxmT1puUy5qc2ApLFtdKSksbj1pVCgpLHI9ZFQoKSxpPXlPKCk7Y2ooKTtsZXQgYT1XKCgpPT57aWYoci5lcnJvcilyZXR1cm5gcmVmcmVzaCBmYWlsZWQ6ICR7ci5lcnJvcn1gO2lmKHIubGFzdFVwZGF0ZWQpe2xldCBlPXIub3ZlcnZpZXc/LnJlcGxpY2E7cmV0dXJuYGxhc3QgdXBkYXRlZCAke3IubGFzdFVwZGF0ZWQudG9Mb2NhbGVUaW1lU3RyaW5nKCl9JHtlP2AgwrcgcmVwbGljYSAke2V9YDpgYH1gfXJldHVybmBsb2FkaW5nLi4uYH0pO3JldHVybiBRaSgoKT0+e3Iuc3RhcnRQb2xsaW5nKCl9KSwoZSxvKT0+e2xldCBzPWxhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gTCgpLFIoYGRpdmAscGosW0IoYGhlYWRlcmAsbWosW0IoYGRpdmAsaGosW29bMV18fD1CKGBoMWAse2NsYXNzOmB0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRgfSxgTExNIEdhdGV3YXkg4oCUIEFkbWluYCwtMSksVihNKEd3KSx7YXM6YGFgLGhyZWY6X2osdGFyZ2V0OmBfYmxhbmtgLHJlbDpgbm9vcGVuZXIgbm9yZWZlcnJlcmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb25gLCJhcmlhLWxhYmVsIjpgR2l0SHViIHJlcG9zaXRvcnlgLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6TigoKT0+W1Yocyx7aWNvbjpNKHJfKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pXSksTShuKS5pc0F1dGhlbnRpY2F0ZWQ/KEwoKSxSKGBwYCxnaixbTShyKS5lcnJvcj8oTCgpLHoocyx7a2V5OjAsaWNvbjpNKHVfKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOlUoYGAsITApLEIoYHNwYW5gLHtjbGFzczpPKE0ocikuZXJyb3I/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMCl9LGsoYS52YWx1ZSksMyldKSk6VShgYCwhMCldKSxNKG4pLmlzQXV0aGVudGljYXRlZD8oTCgpLHooQ1Qse2tleTowLHdhcm5pbmdzOk0ocikub3ZlcnZpZXc/Lndhcm5pbmdzPz9bXSwid2FybmluZ3MtZHJvcHBlZCI6TShyKS5vdmVydmlldz8ud2FybmluZ3NEcm9wcGVkfSxudWxsLDgsW2B3YXJuaW5nc2AsYHdhcm5pbmdzLWRyb3BwZWRgXSkpOlUoYGAsITApLE0obikuaXNBdXRoZW50aWNhdGVkPyhMKCkseihNKGdrKSx7a2V5OjIsbW9kZWxWYWx1ZTpNKGkpLmFjdGl2ZVRhYiwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b1swXXx8PWU9Pk0oaSkuYWN0aXZlVGFiPWV9LHtkZWZhdWx0Ok4oKCk9PltWKE0odmspLG51bGwse2RlZmF1bHQ6TigoKT0+W1YoTSh5aykse3ZhbHVlOmBwcm92aWRlcnNgfSx7ZGVmYXVsdDpOKCgpPT5bLi4ub1syXXx8PVtIKGBQcm92aWRlcnNgLC0xKV1dKSxfOjF9KSxWKE0oeWspLHt2YWx1ZTpgdXNhZ2VgfSx7ZGVmYXVsdDpOKCgpPT5bLi4ub1szXXx8PVtIKGBVc2FnZWAsLTEpXV0pLF86MX0pLFYoTSh5aykse3ZhbHVlOmBjaGFydHNgfSx7ZGVmYXVsdDpOKCgpPT5bLi4ub1s0XXx8PVtIKGBDaGFydHNgLC0xKV1dKSxfOjF9KSxWKE0oeWspLHt2YWx1ZTpgdGFyZ2V0c2B9LHtkZWZhdWx0Ok4oKCk9PlsuLi5vWzVdfHw9W0goYE1DUCAmIEFnZW50c2AsLTEpXV0pLF86MX0pLFYoTSh5aykse3ZhbHVlOmBldmVudHNgfSx7ZGVmYXVsdDpOKCgpPT5bLi4ub1s2XXx8PVtIKGBFdmVudHNgLC0xKV1dKSxfOjF9KV0pLF86MX0pLFYoTShfaykse3ZhbHVlOmBwcm92aWRlcnNgfSx7ZGVmYXVsdDpOKCgpPT5bVih0ayldKSxfOjF9KSxWKE0oX2spLHt2YWx1ZTpgdXNhZ2VgfSx7ZGVmYXVsdDpOKCgpPT5bVihVQSldKSxfOjF9KSxWKE0oX2spLHt2YWx1ZTpgY2hhcnRzYH0se2RlZmF1bHQ6TigoKT0+W1YoTSh0KSldKSxfOjF9KSxWKE0oX2spLHt2YWx1ZTpgdGFyZ2V0c2B9LHtkZWZhdWx0Ok4oKCk9PltWKGhrKV0pLF86MX0pLFYoTShfaykse3ZhbHVlOmBldmVudHNgfSx7ZGVmYXVsdDpOKCgpPT5bVigkRCldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsVmFsdWVgXSkpOihMKCkseihiVCx7a2V5OjF9KSldKX19fSkpO3ZqLnVzZShWZygpKSx2ai5jb21wb25lbnQoYEZvbnRBd2Vzb21lSWNvbmAsQ2cpLHZqLm1vdW50KGAjYXBwYCk7ZXhwb3J0e2RuIGFzICQsSSBhcyBBLCRuIGFzIEIsZFQgYXMgQyxKdyBhcyBELFl3IGFzIEUsUiBhcyBGLGhhIGFzIEcsUWkgYXMgSCxIIGFzIEksRHIgYXMgSixsYSBhcyBLLFYgYXMgTCxCIGFzIE0seiBhcyBOLEd3IGFzIE8sVSBhcyBQLGogYXMgUSxQIGFzIFIsc0QgYXMgUyxadyBhcyBULG5hIGFzIFUsdGEgYXMgVixMIGFzIFcsb24gYXMgWCxOIGFzIFksdW4gYXMgWixoRCBhcyBfLHlrIGFzIGEsbEQgYXMgYixmTyBhcyBjLHZPIGFzIGQsQSBhcyBldCxWRCBhcyBmLGdEIGFzIGcsVEQgYXMgaCx6ayBhcyBpLFcgYXMgaixtXyBhcyBrLGdPIGFzIGwsd0QgYXMgbSxpQSBhcyBuLGdlIGFzIG50LHZrIGFzIG8sRUQgYXMgcCxpYyBhcyBxLHJBIGFzIHIsayBhcyBydCxnayBhcyBzLGNBIGFzIHQsTSBhcyB0dCxoTyBhcyB1LG1EIGFzIHYsUXcgYXMgdyxjRCBhcyB4LGREIGFzIHksRyBhcyB6fTs=", ), }, - "index-rr_vDx6S.css": { + "index-BSsefi4h.css": { contentType: "text/css; charset=utf-8", body: decodeAdminAsset( - "QGtleWZyYW1lcyBhdXRoZ2F0ZS1zaGFrZS00YmU2YmMwOXsxMCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTFweCl9MjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDJweCl9MzAlLDUwJSw3MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNHB4KX00MCUsNjAle3RyYW5zZm9ybTp0cmFuc2xhdGUoNHB4KX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey5hdXRoZ2F0ZS1zaGFrZVtkYXRhLXYtNGJlNmJjMDlde2FuaW1hdGlvbjouNHMgZWFzZS1pbi1vdXQgYXV0aGdhdGUtc2hha2UtNGJlNmJjMDl9fUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKCgtd2Via2l0LWh5cGhlbnM6bm9uZSkpIGFuZCAobm90IChtYXJnaW4tdHJpbTppbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDppbmxpbmUpIGFuZCAobm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpezpyb290LDpob3N0ey0tc2hpbW1lci1hbmdsZToyMGRlZ30qLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWNvbnRlbnQ6IiI7LS10dy1hbmltYXRpb24tZGVsYXk6MHM7LS10dy1hbmltYXRpb24tZGlyZWN0aW9uOm5vcm1hbDstLXR3LWFuaW1hdGlvbi1kdXJhdGlvbjppbml0aWFsOy0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZTpub25lOy0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDoxOy0tdHctZW50ZXItYmx1cjowOy0tdHctZW50ZXItb3BhY2l0eToxOy0tdHctZW50ZXItcm90YXRlOjA7LS10dy1lbnRlci1zY2FsZToxOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6MDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OjA7LS10dy1leGl0LWJsdXI6MDstLXR3LWV4aXQtb3BhY2l0eToxOy0tdHctZXhpdC1yb3RhdGU6MDstLXR3LWV4aXQtc2NhbGU6MTstLXR3LWV4aXQtdHJhbnNsYXRlLXg6MDstLXR3LWV4aXQtdHJhbnNsYXRlLXk6MDstLXNjcm9sbC1mYWRlLXQ6MDstLXNjcm9sbC1mYWRlLWI6MDstLXNjcm9sbC1mYWRlLXM6MDstLXNjcm9sbC1mYWRlLWU6MDstLXNjcm9sbC1mYWRlLW1hc2s6aW5pdGlhbDstLXNoaW1tZXItaW1hZ2U6aW5pdGlhbDstLXNoaW1tZXItdGV4dC1maWxsOmluaXRpYWx9fX1AbGF5ZXIgdGhlbWV7OnJvb3QsOmhvc3R7LS1mb250LXNhbnM6dWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmOy0tc3BhY2luZzouMjVyZW07LS1jb250YWluZXIteHM6MjByZW07LS1jb250YWluZXItc206MjRyZW07LS1jb250YWluZXItbWQ6MjhyZW07LS10ZXh0LXhzOi43NXJlbTstLXRleHQteHMtLWxpbmUtaGVpZ2h0OmNhbGMoMSAvIC43NSk7LS10ZXh0LXNtOi44NzVyZW07LS10ZXh0LXNtLS1saW5lLWhlaWdodDpjYWxjKDEuMjUgLyAuODc1KTstLXRleHQtYmFzZToxcmVtOy0tdGV4dC1iYXNlLS1saW5lLWhlaWdodDpjYWxjKDEuNSAvIDEpOy0tdGV4dC1sZzoxLjEyNXJlbTstLXRleHQtbGctLWxpbmUtaGVpZ2h0OmNhbGMoMS43NSAvIDEuMTI1KTstLXRleHQteGw6MS4yNXJlbTstLXRleHQteGwtLWxpbmUtaGVpZ2h0OmNhbGMoMS43NSAvIDEuMjUpOy0tZm9udC13ZWlnaHQtbm9ybWFsOjQwMDstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy10aWdodDotLjAyNWVtOy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLW1kOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7LS1yYWRpdXMtNHhsOjJyZW07LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LCAwLCAuMiwgMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZjstLWRlZmF1bHQtbW9uby1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgIkNhc2NhZGlhIENvZGUiLCAiUm9ib3RvIE1vbm8iLCBDb25zb2xhcywgbW9ub3NwYWNlfX1AbGF5ZXIgYmFzZXsqLDphZnRlciw6YmVmb3JlLDo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9aHRtbCw6aG9zdHstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0YWItc2l6ZTo0O2xpbmUtaGVpZ2h0OjEuNTtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LWZvbnQtZmFtaWx5LC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCAiTm90byBTYW5zIiwgQXJpYWwsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZzp3aGVyZSg6bm90KGlmcmFtZSkpe291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6YmxvY2t9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnttYXJnaW4taW5saW5lLWVuZDo0cHh9OjpwbGFjZWhvbGRlcntvcGFjaXR5OjF9QHN1cHBvcnRzIChub3QgKCgtd2Via2l0LWFwcGVhcmFuY2U6LWFwcGxlLXBheS1idXR0b24pKSkgb3IgKGNvbnRhaW4taW50cmluc2ljLXNpemU6MXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIGN1cnJlbnRjb2xvciA1MCUsIHRyYW5zcGFyZW50KX19fXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWRhdGUtYW5kLXRpbWUtdmFsdWV7bWluLWhlaWdodDoxbGg7dGV4dC1hbGlnbjppbmhlcml0fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2Rpc3BsYXk6aW5saW5lLWZsZXh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZmllbGRzLXdyYXBwZXJ7cGFkZGluZzowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntsaW5lLWhlaWdodDoxfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfWJ1dHRvbixpbnB1dDp3aGVyZShbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdKXthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Kntib3JkZXItY29sb3I6dmFyKC0tYm9yZGVyKTtvdXRsaW5lLWNvbG9yOnZhcigtLXJpbmcpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsqe291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1yaW5nKSA1MCUsIHRyYW5zcGFyZW50KX19Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWZvcmVncm91bmQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtcztmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmfX1AbGF5ZXIgY29tcG9uZW50cztAbGF5ZXIgdXRpbGl0aWVzey5cQGNvbnRhaW5lclwvY2FyZC1oZWFkZXJ7Y29udGFpbmVyOmNhcmQtaGVhZGVyL2lubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbGxhcHNle3Zpc2liaWxpdHk6Y29sbGFwc2V9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LnNyLW9ubHl7Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW59LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0YXRpY3twb3NpdGlvbjpzdGF0aWN9LnRvcC0xXC8ye3RvcDo1MCV9LnJpZ2h0LTF7cmlnaHQ6dmFyKC0tc3BhY2luZyl9LnJpZ2h0LTFcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnJpZ2h0LTJ7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0uei0xMHt6LWluZGV4OjEwfS56LTUwe3otaW5kZXg6NTB9Li1teC0xXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xLjUpfS5teC1hdXRve21hcmdpbi1pbmxpbmU6YXV0b30ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lm1iLTFcLjV7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ubWItM3ttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uYmxvY2t7ZGlzcGxheTpibG9ja30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LnRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsfS50YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3d9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnNpemUtM3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9LnNpemUtNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNik7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uc2l6ZS03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA3KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5zaXplLTh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA5KX0uc2l6ZS0xMnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA1KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0uaC05e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOSl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxMCl9LmgtNzJ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3Mil9LmgtXFtjYWxjXCgxMDBcJS0xcHhcKVxde2hlaWdodDpjYWxjKDEwMCUgLSAxcHgpfS5tYXgtaC1cKC0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0XCl7bWF4LWhlaWdodDp2YXIoLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpfS5taW4taC1cWzcwdmhcXXttaW4taGVpZ2h0Ojcwdmh9LnctNDB7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQwKX0udy01Nnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNTYpfS53LWZpdHt3aWR0aDpmaXQtY29udGVudH0udy1mdWxse3dpZHRoOjEwMCV9Lm1heC13LW1ke21heC13aWR0aDp2YXIoLS1jb250YWluZXItbWQpfS5tYXgtdy1zbXttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLXNtKX0ubWF4LXcteHN7bWF4LXdpZHRoOnZhcigtLWNvbnRhaW5lci14cyl9Lm1pbi13LTB7bWluLXdpZHRoOjB9Lm1pbi13LTM2e21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMzYpfS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS5jYXB0aW9uLWJvdHRvbXtjYXB0aW9uLXNpZGU6Ym90dG9tfS5vcmlnaW4tXCgtLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpblwpe3RyYW5zZm9ybS1vcmlnaW46dmFyKC0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMSAvIDIgKiAxMDAlKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpIHZhcigtLXR3LXJvdGF0ZS15LCkgdmFyKC0tdHctcm90YXRlLXosKSB2YXIoLS10dy1za2V3LXgsKSB2YXIoLS10dy1za2V3LXksKX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5hdXRvLXJvd3MtbWlue2dyaWQtYXV0by1yb3dzOm1pbi1jb250ZW50fS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5nYXAtMXtnYXA6dmFyKC0tc3BhY2luZyl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ2FwLTR7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ2FwLTZ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ2FwLXgtNHtjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ2FwLXgtNntjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZ2FwLXktMXtyb3ctZ2FwOnZhcigtLXNwYWNpbmcpfS5nYXAteS0xXC41e3Jvdy1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnRydW5jYXRle3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteC1hdXRve292ZXJmbG93LXg6YXV0b30ub3ZlcmZsb3cteC1oaWRkZW57b3ZlcmZsb3cteDpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtNHhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLTR4bCl9LnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTBweFwpXF17Ym9yZGVyLXJhZGl1czptaW4odmFyKC0tcmFkaXVzLW1kKSwgMTBweCl9LnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTJweFwpXF17Ym9yZGVyLXJhZGl1czptaW4odmFyKC0tcmFkaXVzLW1kKSwgMTJweCl9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjIxNDc0ODM2NDdweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5yb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KX0ucm91bmRlZC10LXhse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLWJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjp2YXIoLS1ib3JkZXIpfS5ib3JkZXItaW5wdXR7Ym9yZGVyLWNvbG9yOnZhcigtLWlucHV0KX0uYm9yZGVyLXN0YXR1cy13YXJuXC80MHtib3JkZXItY29sb3I6dmFyKC0tc3RhdHVzLXdhcm4pfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXN0YXR1cy13YXJuXC80MHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1zdGF0dXMtd2FybikgNDAlLCB0cmFuc3BhcmVudCl9fS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOiMwMDAwfS5iZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tYmFja2dyb3VuZCl9LmJnLWNhcmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jYXJkKX0uYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMTAlLCB0cmFuc3BhcmVudCl9fS5iZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX0uYmctcG9wb3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXBvcG92ZXIpfS5iZy1wcmltYXJ5LC5iZy1wcmltYXJ5XC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXByaW1hcnkpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctcHJpbWFyeVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXByaW1hcnkpIDEwJSwgdHJhbnNwYXJlbnQpfX0uYmctc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctY2xpcC1wYWRkaW5ne2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ucC0wXC43NXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAuNzUpfS5wLTJ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnAtNHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnB4LTJcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5weC00e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9LnB5LTF7cGFkZGluZy1ibG9jazp2YXIoLS1zcGFjaW5nKX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5weS04e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5weS0xMHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxMCl9LnB0LTB7cGFkZGluZy10b3A6MH0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHItOHtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0ucHItMTB7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5wYi0yXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5wbC0xXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnBsLTh7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uYWxpZ24tbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9udC1oZWFkaW5ne2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyl9LmZvbnQtbW9ub3tmb250LWZhbWlseTp1aS1tb25vc3BhY2UsU0YgTW9ubyxDYXNjYWRpYSBDb2RlLFJvYm90byBNb25vLENvbnNvbGFzLG1vbm9zcGFjZX0udGV4dC1iYXNle2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWJhc2UpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1iYXNlLS1saW5lLWhlaWdodCkpfS50ZXh0LWxne2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWxnKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtbGctLWxpbmUtaGVpZ2h0KSl9LnRleHQtc217Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0udGV4dC14bHtmb250LXNpemU6dmFyKC0tdGV4dC14bCk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXhsLS1saW5lLWhlaWdodCkpfS50ZXh0LXhze2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXhzKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQteHMtLWxpbmUtaGVpZ2h0KSl9LnRleHQtXFswXC44cmVtXF17Zm9udC1zaXplOi44cmVtfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctdGlnaHR7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy10aWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctdGlnaHQpfS50ZXh0LWJhbGFuY2V7dGV4dC13cmFwOmJhbGFuY2V9LmJyZWFrLWFsbHt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS50ZXh0LWNhcmQtZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1jYXJkLWZvcmVncm91bmQpfS50ZXh0LWNoYXJ0LXJlcXVlc3Rze2NvbG9yOnZhcigtLWNoYXJ0LXJlcXVlc3RzKX0udGV4dC1kZXN0cnVjdGl2ZXtjb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9LnRleHQtZm9yZWdyb3VuZCwudGV4dC1mb3JlZ3JvdW5kXC82MHtjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtZm9yZWdyb3VuZFwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1mb3JlZ3JvdW5kKSA2MCUsIHRyYW5zcGFyZW50KX19LnRleHQtbXV0ZWQtZm9yZWdyb3VuZCwudGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC82MHtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSA2MCUsIHRyYW5zcGFyZW50KX19LnRleHQtcG9wb3Zlci1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLXBvcG92ZXItZm9yZWdyb3VuZCl9LnRleHQtcHJpbWFyeXtjb2xvcjp2YXIoLS1wcmltYXJ5KX0udGV4dC1wcmltYXJ5LWZvcmVncm91bmR7Y29sb3I6dmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKX0udGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCl9LnRleHQtc3RhdHVzLXdhcm57Y29sb3I6dmFyKC0tc3RhdHVzLXdhcm4pfS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKSB2YXIoLS10dy1zbGFzaGVkLXplcm8sKSB2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpIHZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpIHZhcigtLXR3LW51bWVyaWMtZnJhY3Rpb24sKX0udW5kZXJsaW5lLW9mZnNldC00e3RleHQtdW5kZXJsaW5lLW9mZnNldDo0cHh9LnNoYWRvdy1tZHstLXR3LXNoYWRvdzowIDRweCA2cHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwgMCAycHggNHB4IC0ycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0ucmluZy1mb3JlZ3JvdW5kXC8xMHstLXR3LXJpbmctY29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLWZvcmVncm91bmRcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWZvcmVncm91bmQpIDEwJSwgdHJhbnNwYXJlbnQpfX0ub3V0bGluZS1oaWRkZW57LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfUBtZWRpYSAoZm9yY2VkLWNvbG9yczphY3RpdmUpey5vdXRsaW5lLWhpZGRlbntvdXRsaW5lLW9mZnNldDoycHg7b3V0bGluZToycHggc29saWQgIzAwMDB9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpIHZhcigtLXR3LWJyaWdodG5lc3MsKSB2YXIoLS10dy1jb250cmFzdCwpIHZhcigtLXR3LWdyYXlzY2FsZSwpIHZhcigtLXR3LWh1ZS1yb3RhdGUsKSB2YXIoLS10dy1pbnZlcnQsKSB2YXIoLS10dy1zYXR1cmF0ZSwpIHZhcigtLXR3LXNlcGlhLCkgdmFyKC0tdHctZHJvcC1zaGFkb3csKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xMDB7LS10dy1kdXJhdGlvbjouMXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMXN9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0ucnVubmluZ3thbmltYXRpb24tcGxheS1zdGF0ZTpydW5uaW5nfS5ub3QtbGFzdFw6Ym9yZGVyLWI6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9Lmdyb3VwLWhhcy1cW1w+c3ZnXF1cL2FsZXJ0XDpjb2wtc3RhcnQtMjppcyg6d2hlcmUoLmdyb3VwXC9hbGVydCk6aGFzKD5zdmcpICope2dyaWQtY29sdW1uLXN0YXJ0OjJ9Lmdyb3VwLWFyaWEtZXhwYW5kZWRcL2FjY29yZGlvbi10cmlnZ2VyXDpoaWRkZW46aXMoOndoZXJlKC5ncm91cFwvYWNjb3JkaW9uLXRyaWdnZXIpW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gKil7ZGlzcGxheTpub25lfS5ncm91cC1hcmlhLWV4cGFuZGVkXC9hY2NvcmRpb24tdHJpZ2dlclw6aW5saW5lOmlzKDp3aGVyZSguZ3JvdXBcL2FjY29yZGlvbi10cmlnZ2VyKVthcmlhLWV4cGFuZGVkPXRydWVdICope2Rpc3BsYXk6aW5saW5lfS5ncm91cC1kYXRhLVxbc2l6ZVw9c21cXVwvY2FyZFw6cHgtMzppcyg6d2hlcmUoLmdyb3VwXC9jYXJkKVtkYXRhLXNpemU9c21dICope3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOnRleHQtc206aXMoOndoZXJlKC5ncm91cFwvY2FyZClbZGF0YS1zaXplPXNtXSAqKXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmJnLXRyYW5zcGFyZW50OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICope2JhY2tncm91bmQtY29sb3I6IzAwMDB9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6aC04OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDpoLWZpdDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICope2hlaWdodDpmaXQtY29udGVudH0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6dy1mdWxsOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKil7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6ZmxleC1jb2w6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmp1c3RpZnktc3RhcnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmlsZVw6aW5saW5lLWZsZXg6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXh9LmZpbGVcOmgtNjo6ZmlsZS1zZWxlY3Rvci1idXR0b257aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZmlsZVw6Ym9yZGVyLTA6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9uey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5maWxlXDp0ZXh0LWZvcmVncm91bmQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX0uYWZ0ZXJcOmFic29sdXRlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7cG9zaXRpb246YWJzb2x1dGV9LmFmdGVyXDpiZy1mb3JlZ3JvdW5kOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uYWZ0ZXJcOm9wYWNpdHktMDphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO29wYWNpdHk6MH0uYWZ0ZXJcOnRyYW5zaXRpb24tb3BhY2l0eTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5ncm91cC1kYXRhLWhvcml6b250YWxcL3RhYnNcOmFmdGVyXDppbnNldC14LTA6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7aW5zZXQtaW5saW5lOjB9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6YWZ0ZXJcOmJvdHRvbS1cWy01cHhcXTppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtib3R0b206LTVweH0uZ3JvdXAtZGF0YS1ob3Jpem9udGFsXC90YWJzXDphZnRlclw6aC0wXC41OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDphZnRlclw6aW5zZXQteS0wOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtpbnNldC1ibG9jazowfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDphZnRlclw6LXJpZ2h0LTE6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAtMSl9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmFmdGVyXDp3LTBcLjU6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1hY2NlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hY2NlbnQpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLW11dGVkOmhvdmVyLC5ob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjp2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9LmhvdmVyXDp1bmRlcmxpbmU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfX0uZm9jdXNcOmJnLWFjY2VudDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFjY2VudCl9LmZvY3VzXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmZvY3VzLDppcygubm90LWRhdGEtXFt2YXJpYW50XD1kZXN0cnVjdGl2ZVxdXDpmb2N1c1w6XCpcKlw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpub3QoW2RhdGEtdmFyaWFudD1kZXN0cnVjdGl2ZV0pOmZvY3VzICope2NvbG9yOnZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxle2JvcmRlci1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzQwOmZvY3VzLXZpc2libGV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLXJpbmc6Zm9jdXMtdmlzaWJsZXtib3JkZXItY29sb3I6dmFyKC0tcmluZyl9LmZvY3VzLXZpc2libGVcOnJpbmctMzpmb2N1cy12aXNpYmxley0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoM3B4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0uZm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvMjA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvMjA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMjAlLCB0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpyaW5nLXJpbmdcLzUwOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLWNvbG9yOnZhcigtLXJpbmcpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6cmluZy1yaW5nXC81MDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXJpbmcpIDUwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0xOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1yaW5nOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjp2YXIoLS1yaW5nKX0uZm9jdXMtdmlzaWJsZVw6YWZ0ZXJcOmJvcmRlci1yaW5nOmZvY3VzLXZpc2libGU6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtib3JkZXItY29sb3I6dmFyKC0tcmluZyl9LmFjdGl2ZVw6bm90LWFyaWEtXFtoYXNwb3B1cFxdXDp0cmFuc2xhdGUteS1weDphY3RpdmU6bm90KFthcmlhLWhhc3BvcHVwXSl7LS10dy10cmFuc2xhdGUteToxcHg7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6YmctaW5wdXRcLzUwOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOmJnLWlucHV0XC81MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX06d2hlcmUoW2RhdGEtc2xvdD1idXR0b24tZ3JvdXBdKSAuaW4tZGF0YS1cW3Nsb3RcPWJ1dHRvbi1ncm91cFxdXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uaGFzLWFyaWEtZXhwYW5kZWRcOmJnLW11dGVkXC81MDpoYXMoW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0pe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaGFzLWFyaWEtZXhwYW5kZWRcOmJnLW11dGVkXC81MDpoYXMoW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0pe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZCkgNTAlLCB0cmFuc3BhcmVudCl9fS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1lbmRcXVw6cHItMTpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtZW5kXSl7cGFkZGluZy1yaWdodDp2YXIoLS1zcGFjaW5nKX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtZW5kXF1cOnByLTFcLjU6aGFzKFtkYXRhLWljb249aW5saW5lLWVuZF0pe3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLWVuZFxdXDpwci0yOmhhcyhbZGF0YS1pY29uPWlubGluZS1lbmRdKXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtc3RhcnRcXVw6cGwtMTpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtc3RhcnRdKXtwYWRkaW5nLWxlZnQ6dmFyKC0tc3BhY2luZyl9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLXN0YXJ0XF1cOnBsLTFcLjU6aGFzKFtkYXRhLWljb249aW5saW5lLXN0YXJ0XSl7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1zdGFydFxdXDpwbC0yOmhhcyhbZGF0YS1pY29uPWlubGluZS1zdGFydF0pe3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lmhhcy1kYXRhLVxbc2xvdFw9YWxlcnQtYWN0aW9uXF1cOnJlbGF0aXZlOmhhcyhbZGF0YS1zbG90PWFsZXJ0LWFjdGlvbl0pe3Bvc2l0aW9uOnJlbGF0aXZlfS5oYXMtZGF0YS1cW3Nsb3RcPWFsZXJ0LWFjdGlvblxdXDpwci0xODpoYXMoW2RhdGEtc2xvdD1hbGVydC1hY3Rpb25dKXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxOCl9Lmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1hY3Rpb25cXVw6Z3JpZC1jb2xzLVxbMWZyX2F1dG9cXTpoYXMoW2RhdGEtc2xvdD1jYXJkLWFjdGlvbl0pe2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0b30uaGFzLWRhdGEtXFtzbG90XD1jYXJkLWRlc2NyaXB0aW9uXF1cOmdyaWQtcm93cy1cW2F1dG9fYXV0b1xdOmhhcyhbZGF0YS1zbG90PWNhcmQtZGVzY3JpcHRpb25dKXtncmlkLXRlbXBsYXRlLXJvd3M6YXV0byBhdXRvfS5oYXMtZGF0YS1cW3Nsb3RcPWNhcmQtZm9vdGVyXF1cOnBiLTA6aGFzKFtkYXRhLXNsb3Q9Y2FyZC1mb290ZXJdKXtwYWRkaW5nLWJvdHRvbTowfS5oYXMtXFtcPmltZ1w6Zmlyc3QtY2hpbGRcXVw6cHQtMDpoYXMoPmltZzpmaXJzdC1jaGlsZCl7cGFkZGluZy10b3A6MH0uaGFzLVxbXD5zdmdcXVw6Z3JpZC1jb2xzLVxbYXV0b18xZnJcXTpoYXMoPnN2Zyl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyfS5oYXMtXFtcPnN2Z1xdXDpnYXAteC0yOmhhcyg+c3ZnKXtjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uYXJpYS1leHBhbmRlZFw6YmctbXV0ZWRbYXJpYS1leHBhbmRlZD10cnVlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX0uYXJpYS1leHBhbmRlZFw6Ymctc2Vjb25kYXJ5W2FyaWEtZXhwYW5kZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfS5hcmlhLWV4cGFuZGVkXDp0ZXh0LWZvcmVncm91bmRbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uYXJpYS1leHBhbmRlZFw6dGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZFthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOnZhcigtLXNlY29uZGFyeS1mb3JlZ3JvdW5kKX0uYXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVbYXJpYS1pbnZhbGlkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9LmFyaWEtaW52YWxpZFw6cmluZy0zW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKSAwIDAgMCBjYWxjKDNweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9LmFyaWEtaW52YWxpZFw6cmluZy1kZXN0cnVjdGl2ZVwvMjBbYXJpYS1pbnZhbGlkPXRydWVdey0tdHctcmluZy1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5hcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMjAlLCB0cmFuc3BhcmVudCl9fS5kYXRhLXBsYWNlaG9sZGVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmRbZGF0YS1wbGFjZWhvbGRlcl17Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9LmRhdGEtXFthbGlnbi10cmlnZ2VyXD10cnVlXF1cOmFuaW1hdGUtbm9uZVtkYXRhLWFsaWduLXRyaWdnZXI9dHJ1ZV17YW5pbWF0aW9uOm5vbmV9LmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtwb3NpdGlvblw9cG9wcGVyXF1cOmgtXCgtLXJla2Etc2VsZWN0LXRyaWdnZXItaGVpZ2h0XClbZGF0YS1wb3NpdGlvbj1wb3BwZXJde2hlaWdodDp2YXIoLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmRhdGEtXFtwb3NpdGlvblw9cG9wcGVyXF1cOnctZnVsbFtkYXRhLXBvc2l0aW9uPXBvcHBlcl17d2lkdGg6MTAwJX0uZGF0YS1cW3Bvc2l0aW9uXD1wb3BwZXJcXVw6bWluLXctXCgtLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGhcKVtkYXRhLXBvc2l0aW9uPXBvcHBlcl17bWluLXdpZHRoOnZhcigtLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgpfS5kYXRhLVxbc2lkZVw9Ym90dG9tXF1cOnRyYW5zbGF0ZS15LTFbZGF0YS1zaWRlPWJvdHRvbV17LS10dy10cmFuc2xhdGUteTp2YXIoLS1zcGFjaW5nKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDpzbGlkZS1pbi1mcm9tLXRvcC0yW2RhdGEtc2lkZT1ib3R0b21dey0tdHctZW50ZXItdHJhbnNsYXRlLXk6Y2FsYygyKnZhcigtLXNwYWNpbmcpKi0xKX0uZGF0YS1cW3NpZGVcPWlubGluZS1lbmRcXVw6c2xpZGUtaW4tZnJvbS1sZWZ0LTJbZGF0YS1zaWRlPWlubGluZS1lbmRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6Y2FsYygyKnZhcigtLXNwYWNpbmcpKi0xKX0uZGF0YS1cW3NpZGVcPWlubGluZS1zdGFydFxdXDpzbGlkZS1pbi1mcm9tLXJpZ2h0LTJbZGF0YS1zaWRlPWlubGluZS1zdGFydF17LS10dy1lbnRlci10cmFuc2xhdGUteDpjYWxjKDIqdmFyKC0tc3BhY2luZykpfS5kYXRhLVxbc2lkZVw9bGVmdFxdXDotdHJhbnNsYXRlLXgtMVtkYXRhLXNpZGU9bGVmdF17LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kYXRhLVxbc2lkZVw9bGVmdFxdXDpzbGlkZS1pbi1mcm9tLXJpZ2h0LTJbZGF0YS1zaWRlPWxlZnRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpZGVcPXJpZ2h0XF1cOnRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPXJpZ2h0XXstLXR3LXRyYW5zbGF0ZS14OnZhcigtLXNwYWNpbmcpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kYXRhLVxbc2lkZVw9cmlnaHRcXVw6c2xpZGUtaW4tZnJvbS1sZWZ0LTJbZGF0YS1zaWRlPXJpZ2h0XXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD10b3BcXVw6LXRyYW5zbGF0ZS15LTFbZGF0YS1zaWRlPXRvcF17LS10dy10cmFuc2xhdGUteTpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOnNsaWRlLWluLWZyb20tYm90dG9tLTJbZGF0YS1zaWRlPXRvcF17LS10dy1lbnRlci10cmFuc2xhdGUteTpjYWxjKDIqdmFyKC0tc3BhY2luZykpfS5kYXRhLVxbc2l6ZVw9ZGVmYXVsdFxdXDpoLThbZGF0YS1zaXplPWRlZmF1bHRde2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LmRhdGEtXFtzaXplXD1zbVxdXDpoLTdbZGF0YS1zaXplPXNtXXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5kYXRhLVxbc2l6ZVw9c21cXVw6Z2FwLTNbZGF0YS1zaXplPXNtXXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5kYXRhLVxbc2l6ZVw9c21cXVw6cm91bmRlZC1cW21pblwodmFyXCgtLXJhZGl1cy1tZFwpXCwxMHB4XClcXVtkYXRhLXNpemU9c21de2JvcmRlci1yYWRpdXM6bWluKHZhcigtLXJhZGl1cy1tZCksIDEwcHgpfS5kYXRhLVxbc2l6ZVw9c21cXVw6cHktM1tkYXRhLXNpemU9c21de3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5kYXRhLVxbc2l6ZVw9c21cXVw6aGFzLWRhdGEtXFtzbG90XD1jYXJkLWZvb3RlclxdXDpwYi0wW2RhdGEtc2l6ZT1zbV06aGFzKFtkYXRhLXNsb3Q9Y2FyZC1mb290ZXJdKXtwYWRkaW5nLWJvdHRvbTowfTppcyguXCpcKlw6ZGF0YS1cW3Nsb3RcPWFjY29yZGlvbi10cmlnZ2VyLWljb25cXVw6bWwtYXV0byAqKVtkYXRhLXNsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl17bWFyZ2luLWxlZnQ6YXV0b306aXMoLlwqXCpcOmRhdGEtXFtzbG90XD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXF1cOnNpemUtNCAqKVtkYXRhLXNsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl17d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9OmlzKC5cKlwqXDpkYXRhLVxbc2xvdFw9YWNjb3JkaW9uLXRyaWdnZXItaWNvblxdXDp0ZXh0LW11dGVkLWZvcmVncm91bmQgKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfTppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LWRlc3RydWN0aXZlXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPWFsZXJ0LWRlc2NyaXB0aW9uXF1cOnRleHQtZGVzdHJ1Y3RpdmVcLzkwPiopW2RhdGEtc2xvdD1hbGVydC1kZXNjcmlwdGlvbl17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgOTAlLCB0cmFuc3BhcmVudCl9fTppcyguXCpcOmRhdGEtXFtzbG90XD1zZWxlY3QtdmFsdWVcXVw6bGluZS1jbGFtcC0xPiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVdey13ZWJraXQtbGluZS1jbGFtcDoxOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtkaXNwbGF5Oi13ZWJraXQtYm94O292ZXJmbG93OmhpZGRlbn06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOmZsZXg+KilbZGF0YS1zbG90PXNlbGVjdC12YWx1ZV17ZGlzcGxheTpmbGV4fTppcyguXCpcOmRhdGEtXFtzbG90XD1zZWxlY3QtdmFsdWVcXVw6aXRlbXMtY2VudGVyPiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVde2FsaWduLWl0ZW1zOmNlbnRlcn06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOmdhcC0xXC41PiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVde2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uZGF0YS1cW3N0YXRlXD1zZWxlY3RlZFxdXDpiZy1tdXRlZFtkYXRhLXN0YXRlPXNlbGVjdGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX0uZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVw6cm91bmRlZC1ub25lW2RhdGEtdmFyaWFudD1saW5lXXtib3JkZXItcmFkaXVzOjB9QG1lZGlhICh3aWR0aD49NDByZW0pey5zbVw6Z3JpZC1jb2xzLTN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLG1pbm1heCgwLDFmcikpfS5zbVw6Z3JpZC1jb2xzLTR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LG1pbm1heCgwLDFmcikpfS5zbVw6ZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5zbVw6aXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uc21cOmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uc21cOnB4LTZ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfX1AbWVkaWEgKHdpZHRoPj00OHJlbSl7Lm1kXDp0ZXh0LXNte2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXNtKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtc20tLWxpbmUtaGVpZ2h0KSl9Lm1kXDp0ZXh0LXByZXR0eXt0ZXh0LXdyYXA6cHJldHR5fX1AbWVkaWEgKHdpZHRoPj02NHJlbSl7LmxnXDpweC04e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA4KX19QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXsuZGFya1w6Ym9yZGVyLWlucHV0e2JvcmRlci1jb2xvcjp2YXIoLS1pbnB1dCl9LmRhcmtcOmJnLWRlc3RydWN0aXZlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmJnLWRlc3RydWN0aXZlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6YmctaW5wdXRcLzMwe2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YmctaW5wdXRcLzMwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1pbnB1dCkgMzAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDp0ZXh0LW11dGVkLWZvcmVncm91bmR7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9QG1lZGlhIChob3Zlcjpob3Zlcil7LmRhcmtcOmhvdmVyXDpiZy1kZXN0cnVjdGl2ZVwvMzA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzMwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMzAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpob3Zlclw6YmctaW5wdXRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6aG92ZXJcOmJnLWlucHV0XC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6aG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmhvdmVyXDpiZy1tdXRlZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLW11dGVkKSA1MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmhvdmVyXDp0ZXh0LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9fS5kYXJrXDpmb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpmb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSA0MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmRpc2FibGVkXDpiZy1pbnB1dFwvODA6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpkaXNhYmxlZFw6YmctaW5wdXRcLzgwOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1pbnB1dCkgODAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDphcmlhLWludmFsaWRcOmJvcmRlci1kZXN0cnVjdGl2ZVwvNTBbYXJpYS1pbnZhbGlkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDphcmlhLWludmFsaWRcOmJvcmRlci1kZXN0cnVjdGl2ZVwvNTBbYXJpYS1pbnZhbGlkPXRydWVde2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSA1MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmFyaWEtaW52YWxpZFw6cmluZy1kZXN0cnVjdGl2ZVwvNDBbYXJpYS1pbnZhbGlkPXRydWVdey0tdHctcmluZy1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDphcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzQwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNDAlLCB0cmFuc3BhcmVudCl9fX0uZGF0YS1vcGVuXDphbmltYXRlLWFjY29yZGlvbi1kb3duOndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDphbmltYXRlLWFjY29yZGlvbi1kb3duOndoZXJlKFtkYXRhLW9wZW5dOm5vdChbZGF0YS1vcGVuPWZhbHNlXSkpe2FuaW1hdGlvbjphY2NvcmRpb24tZG93biB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjJzKSl2YXIoLS10dy1lYXNlLGVhc2Utb3V0KXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1vcGVuXDphbmltYXRlLWluOndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDphbmltYXRlLWluOndoZXJlKFtkYXRhLW9wZW5dOm5vdChbZGF0YS1vcGVuPWZhbHNlXSkpe2FuaW1hdGlvbjplbnRlciB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjE1cykpdmFyKC0tdHctZWFzZSxlYXNlKXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1vcGVuXDpmYWRlLWluLTA6d2hlcmUoW2RhdGEtc3RhdGU9b3Blbl0pLC5kYXRhLW9wZW5cOmZhZGUtaW4tMDp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXstLXR3LWVudGVyLW9wYWNpdHk6MH0uZGF0YS1vcGVuXDp6b29tLWluLTk1OndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDp6b29tLWluLTk1OndoZXJlKFtkYXRhLW9wZW5dOm5vdChbZGF0YS1vcGVuPWZhbHNlXSkpey0tdHctZW50ZXItc2NhbGU6Ljk1fS5kYXRhLWNsb3NlZFw6YW5pbWF0ZS1hY2NvcmRpb24tdXA6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDphbmltYXRlLWFjY29yZGlvbi11cDp3aGVyZShbZGF0YS1jbG9zZWRdOm5vdChbZGF0YS1jbG9zZWQ9ZmFsc2VdKSl7YW5pbWF0aW9uOmFjY29yZGlvbi11cCB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjJzKSl2YXIoLS10dy1lYXNlLGVhc2Utb3V0KXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1jbG9zZWRcOmFuaW1hdGUtb3V0OndoZXJlKFtkYXRhLXN0YXRlPWNsb3NlZF0pLC5kYXRhLWNsb3NlZFw6YW5pbWF0ZS1vdXQ6d2hlcmUoW2RhdGEtY2xvc2VkXTpub3QoW2RhdGEtY2xvc2VkPWZhbHNlXSkpe2FuaW1hdGlvbjpleGl0IHZhcigtLXR3LWFuaW1hdGlvbi1kdXJhdGlvbix2YXIoLS10dy1kdXJhdGlvbiwuMTVzKSl2YXIoLS10dy1lYXNlLGVhc2UpdmFyKC0tdHctYW5pbWF0aW9uLWRlbGF5LDBzKXZhcigtLXR3LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsMSl2YXIoLS10dy1hbmltYXRpb24tZGlyZWN0aW9uLG5vcm1hbCl2YXIoLS10dy1hbmltYXRpb24tZmlsbC1tb2RlLG5vbmUpfS5kYXRhLWNsb3NlZFw6ZmFkZS1vdXQtMDp3aGVyZShbZGF0YS1zdGF0ZT1jbG9zZWRdKSwuZGF0YS1jbG9zZWRcOmZhZGUtb3V0LTA6d2hlcmUoW2RhdGEtY2xvc2VkXTpub3QoW2RhdGEtY2xvc2VkPWZhbHNlXSkpey0tdHctZXhpdC1vcGFjaXR5OjB9LmRhdGEtY2xvc2VkXDp6b29tLW91dC05NTp3aGVyZShbZGF0YS1zdGF0ZT1jbG9zZWRdKSwuZGF0YS1jbG9zZWRcOnpvb20tb3V0LTk1OndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXstLXR3LWV4aXQtc2NhbGU6Ljk1fS5kYXRhLWFjdGl2ZVw6YmctYmFja2dyb3VuZDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGF0YS1hY3RpdmVcOmJnLWJhY2tncm91bmQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6dmFyKC0tYmFja2dyb3VuZCl9LmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9ZGVmYXVsdFxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctc206aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9ZGVmYXVsdF0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1kZWZhdWx0XF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOnNoYWRvdy1zbTppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1kZWZhdWx0XSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksIDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9Lmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJnLXRyYW5zcGFyZW50OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6c2hhZG93LW5vbmU6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOnNoYWRvdy1ub25lOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXstLXR3LXNoYWRvdzowIDAgIzAwMDA7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX06aXMoLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmFmdGVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YWZ0ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKSk6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtvcGFjaXR5OjF9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXsuZGFya1w6ZGF0YS1hY3RpdmVcOmJvcmRlci1pbnB1dDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOmJvcmRlci1pbnB1dDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7Ym9yZGVyLWNvbG9yOnZhcigtLWlucHV0KX0uZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpkYXRhLWFjdGl2ZVw6YmctaW5wdXRcLzMwOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5kYXJrXDpkYXRhLWFjdGl2ZVw6YmctaW5wdXRcLzMwOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6ZGF0YS1hY3RpdmVcOnRleHQtZm9yZWdyb3VuZDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOnRleHQtZm9yZWdyb3VuZDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmRhcmtcOmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJvcmRlci10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6Z3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6Ym9yZGVyLXRyYW5zcGFyZW50OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtib3JkZXItY29sb3I6IzAwMDB9LmRhcmtcOmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJnLXRyYW5zcGFyZW50OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjojMDAwMH19LmRhdGEtaG9yaXpvbnRhbFw6ZmxleC1jb2w6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uXFtcJl9hXF1cOnVuZGVybGluZSBhe3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uXFtcJl9hXF1cOnVuZGVybGluZS1vZmZzZXQtMyBhe3RleHQtdW5kZXJsaW5lLW9mZnNldDozcHh9QG1lZGlhIChob3Zlcjpob3Zlcil7LlxbXCZfYVxdXDpob3Zlclw6dGV4dC1mb3JlZ3JvdW5kIGE6aG92ZXJ7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9fS5cW1wmX3BcOm5vdFwoXDpsYXN0LWNoaWxkXClcXVw6bWItNCBwOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZfc3ZnXF1cOnBvaW50ZXItZXZlbnRzLW5vbmUgc3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LlxbXCZfc3ZnXF1cOnNocmluay0wIHN2Z3tmbGV4LXNocmluazowfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTMgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LlxbXCZfc3ZnXDpub3RcKFxbY2xhc3NcKlw9c2l6ZS1cXVwpXF1cOnNpemUtM1wuNSBzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSl9LlxbXCZfc3ZnXDpub3RcKFxbY2xhc3NcKlw9c2l6ZS1cXVwpXF1cOnNpemUtNCBzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uXFtcJl90clxdXDpib3JkZXItYiB0cntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LlxbXCZfdHJcOmxhc3QtY2hpbGRcXVw6Ym9yZGVyLTAgdHI6bGFzdC1jaGlsZHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uXFtcJlw6aGFzXChcW3JvbGVcPWNoZWNrYm94XF1cKVxdXDpwci0wOmhhcyhbcm9sZT1jaGVja2JveF0pe3BhZGRpbmctcmlnaHQ6MH0uXFtcLmJvcmRlci1iXF1cOnBiLTQuYm9yZGVyLWJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5ncm91cC1kYXRhLVxbc2l6ZVw9c21cXVwvY2FyZFw6XFtcLmJvcmRlci1iXF1cOnBiLTM6aXMoOndoZXJlKC5ncm91cFwvY2FyZClbZGF0YS1zaXplPXNtXSAqKS5ib3JkZXItYntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9QG1lZGlhIChob3Zlcjpob3Zlcil7LlxbYVxdXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFthXF1cOmhvdmVyXDpiZy1kZXN0cnVjdGl2ZVwvMjA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LlxbYVxdXDpob3Zlclw6YmctbXV0ZWQ6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LlxbYVxdXDpob3Zlclw6YmctcHJpbWFyeVwvODA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wcmltYXJ5KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYVxdXDpob3Zlclw6YmctcHJpbWFyeVwvODA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXByaW1hcnkpIDgwJSwgdHJhbnNwYXJlbnQpfX0uXFthXF1cOmhvdmVyXDpiZy1zZWNvbmRhcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYVxdXDpob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tc2Vjb25kYXJ5KSA4MCUsIHRyYW5zcGFyZW50KX19LlxbYVxdXDpob3Zlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOmlzKGEpOmhvdmVye2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfX06aXMoLlwqXDpcW2ltZ1w6Zmlyc3QtY2hpbGRcXVw6cm91bmRlZC10LXhsPiopOmlzKGltZzpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9OmlzKC5cKlw6XFtpbWdcOmxhc3QtY2hpbGRcXVw6cm91bmRlZC1iLXhsPiopOmlzKGltZzpsYXN0LWNoaWxkKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KX06aXMoLlwqXDpcW3NwYW5cXVw6bGFzdFw6ZmxleD4qKTppcyhzcGFuKTpsYXN0LWNoaWxke2Rpc3BsYXk6ZmxleH06aXMoLlwqXDpcW3NwYW5cXVw6bGFzdFw6aXRlbXMtY2VudGVyPiopOmlzKHNwYW4pOmxhc3QtY2hpbGR7YWxpZ24taXRlbXM6Y2VudGVyfTppcyguXCpcOlxbc3BhblxdXDpsYXN0XDpnYXAtMj4qKTppcyhzcGFuKTpsYXN0LWNoaWxke2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9OmlzKC5cKlw6XFtzdmdcXVw6cm93LXNwYW4tMj4qKTppcyhzdmcpe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9OmlzKC5cKlw6XFtzdmdcXVw6dHJhbnNsYXRlLXktMFwuNT4qKTppcyhzdmcpey0tdHctdHJhbnNsYXRlLXk6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX06aXMoLlwqXDpcW3N2Z1xdXDp0ZXh0LWN1cnJlbnQ+Kik6aXMoc3ZnKXtjb2xvcjpjdXJyZW50Q29sb3J9OmlzKC5cKlw6XFtzdmdcOm5vdFwoXFtjbGFzc1wqXD1zaXplLVxdXClcXVw6c2l6ZS00PiopOmlzKHN2Zzpub3QoW2NsYXNzKj1zaXplLV0pKXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uXFtcJlw+c3ZnXF1cOnBvaW50ZXItZXZlbnRzLW5vbmU+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LlxbXCZcPnN2Z1xdXDpzaXplLTNcIT5zdmd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpIWltcG9ydGFudDtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpIWltcG9ydGFudH19QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWRlbGF5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowc31AcHJvcGVydHkgLS10dy1hbmltYXRpb24tZGlyZWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpub3JtYWx9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6bm9uZX1AcHJvcGVydHkgLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWVudGVyLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZW50ZXItb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1lbnRlci1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZW50ZXItc2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZW50ZXItdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZW50ZXItdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZXhpdC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1leGl0LXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1leGl0LXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWV4aXQtdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZXhpdC10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS10e3N5bnRheDoiPGxlbmd0aC1wZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLWJ7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtc3tzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1le3N5bnRheDoiPGxlbmd0aC1wZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLW1hc2t7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS1zaGltbWVyLWFuZ2xle3N5bnRheDoiPGFuZ2xlPiI7aW5oZXJpdHM6dHJ1ZTtpbml0aWFsLXZhbHVlOjIwZGVnfUBwcm9wZXJ0eSAtLXNoaW1tZXItaW1hZ2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS1zaGltbWVyLXRleHQtZmlsbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5zaGltbWVyey13ZWJraXQtdGV4dC1maWxsLWNvbG9yOmN1cnJlbnRDb2xvcjtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YW5pbWF0aW9uOm5vbmV9fTpyb290ey0tYmFja2dyb3VuZDpva2xjaCg5OSUgLjAwNCA3NSk7LS1mb3JlZ3JvdW5kOm9rbGNoKDE5JSAuMDEyIDc1KTstLWNhcmQ6b2tsY2goOTkuNSUgLjAwMyA3NSk7LS1jYXJkLWZvcmVncm91bmQ6b2tsY2goMTklIC4wMTIgNzUpOy0tcG9wb3Zlcjpva2xjaCg5OS41JSAuMDAzIDc1KTstLXBvcG92ZXItZm9yZWdyb3VuZDpva2xjaCgxOSUgLjAxMiA3NSk7LS1wcmltYXJ5Om9rbGNoKDQ2JSAuMDkgMjAwKTstLXByaW1hcnktZm9yZWdyb3VuZDpva2xjaCg5OCUgLjAwNiAyMDApOy0tc2Vjb25kYXJ5Om9rbGNoKDk1JSAuMDA2IDc1KTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOm9rbGNoKDIyJSAuMDEgNzUpOy0tbXV0ZWQ6b2tsY2goOTUlIC4wMDYgNzUpOy0tbXV0ZWQtZm9yZWdyb3VuZDpva2xjaCg0OCUgLjAxMiA3NSk7LS1hY2NlbnQ6b2tsY2goOTMlIC4wMiAyMDApOy0tYWNjZW50LWZvcmVncm91bmQ6b2tsY2goMjglIC4wNSAyMDApOy0tZGVzdHJ1Y3RpdmU6b2tsY2goNTUlIC4yIDI1KTstLWJvcmRlcjpva2xjaCg5MCUgLjAwNyA3NSk7LS1pbnB1dDpva2xjaCg5MCUgLjAwNyA3NSk7LS1yaW5nOm9rbGNoKDU1JSAuMDkgMjAwKTstLXJhZGl1czouMzc1cmVtOy0tY2hhcnQtcmVxdWVzdHM6IzAwOWU3MzstLWNoYXJ0LXRva2Vucy1pbjojMDA3MmIyOy0tY2hhcnQtdG9rZW5zLW91dDojZTY5ZjAwOy0tY2hhcnQtY29zdDojZDU1ZTAwOy0tc3RhdHVzLXdhcm46I2EzNWMwMH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezpyb290ey0tYmFja2dyb3VuZDpva2xjaCgxNyUgLjAwNyA3NSk7LS1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLWNhcmQ6b2tsY2goMjElIC4wMDkgNzUpOy0tY2FyZC1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLXBvcG92ZXI6b2tsY2goMjElIC4wMDkgNzUpOy0tcG9wb3Zlci1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLXByaW1hcnk6b2tsY2goNzQlIC4xMSAyMDApOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOm9rbGNoKDE2JSAuMDEyIDIwMCk7LS1zZWNvbmRhcnk6b2tsY2goMjclIC4wMTEgNzUpOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6b2tsY2goOTMlIC4wMDUgNzUpOy0tbXV0ZWQ6b2tsY2goMjclIC4wMTEgNzUpOy0tbXV0ZWQtZm9yZWdyb3VuZDpva2xjaCg2OCUgLjAxMiA3NSk7LS1hY2NlbnQ6b2tsY2goMzIlIC4wMzUgMjAwKTstLWFjY2VudC1mb3JlZ3JvdW5kOm9rbGNoKDkxJSAuMDMgMjAwKTstLWRlc3RydWN0aXZlOm9rbGNoKDY4JSAuMTkgMjUpOy0tYm9yZGVyOm9rbGNoKDEwMCUgMCAwLy4xMik7LS1pbnB1dDpva2xjaCgxMDAlIDAgMC8uMTYpOy0tcmluZzpva2xjaCg2MiUgLjEgMjAwKTstLWNoYXJ0LXJlcXVlc3RzOiMxNmI4OTE7LS1jaGFydC10b2tlbnMtaW46IzQwOThkNzstLWNoYXJ0LXRva2Vucy1vdXQ6I2YwYWMxZjstLWNoYXJ0LWNvc3Q6I2U4NzYzYTstLXN0YXR1cy13YXJuOiNmMGFjMWZ9fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udGVudHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6IiJ9QGtleWZyYW1lcyBlbnRlcnswJXtvcGFjaXR5OnZhcigtLXR3LWVudGVyLW9wYWNpdHksMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS15LDApLDApc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSlyb3RhdGUodmFyKC0tdHctZW50ZXItcm90YXRlLDApKTtmaWx0ZXI6Ymx1cih2YXIoLS10dy1lbnRlci1ibHVyLDApKX19QGtleWZyYW1lcyBleGl0e3Rve29wYWNpdHk6dmFyKC0tdHctZXhpdC1vcGFjaXR5LDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWV4aXQtdHJhbnNsYXRlLXksMCksMClzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsMSksdmFyKC0tdHctZXhpdC1zY2FsZSwxKSx2YXIoLS10dy1leGl0LXNjYWxlLDEpKXJvdGF0ZSh2YXIoLS10dy1leGl0LXJvdGF0ZSwwKSk7ZmlsdGVyOmJsdXIodmFyKC0tdHctZXhpdC1ibHVyLDApKX19QGtleWZyYW1lcyBhY2NvcmRpb24tZG93bnswJXtoZWlnaHQ6MH10b3toZWlnaHQ6dmFyKC0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQsdmFyKC0tYWNjb3JkaW9uLXBhbmVsLWhlaWdodCxhdXRvKSl9fUBrZXlmcmFtZXMgYWNjb3JkaW9uLXVwezAle2hlaWdodDp2YXIoLS1yZWthLWFjY29yZGlvbi1jb250ZW50LWhlaWdodCx2YXIoLS1hY2NvcmRpb24tcGFuZWwtaGVpZ2h0LGF1dG8pKX10b3toZWlnaHQ6MH19Cg==", + "QGtleWZyYW1lcyBhdXRoZ2F0ZS1zaGFrZS00YmU2YmMwOXsxMCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTFweCl9MjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDJweCl9MzAlLDUwJSw3MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNHB4KX00MCUsNjAle3RyYW5zZm9ybTp0cmFuc2xhdGUoNHB4KX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey5hdXRoZ2F0ZS1zaGFrZVtkYXRhLXYtNGJlNmJjMDlde2FuaW1hdGlvbjouNHMgZWFzZS1pbi1vdXQgYXV0aGdhdGUtc2hha2UtNGJlNmJjMDl9fUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKCgtd2Via2l0LWh5cGhlbnM6bm9uZSkpIGFuZCAobm90IChtYXJnaW4tdHJpbTppbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDppbmxpbmUpIGFuZCAobm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpezpyb290LDpob3N0ey0tc2hpbW1lci1hbmdsZToyMGRlZ30qLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctc3BhY2UteS1yZXZlcnNlOjA7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctY29udGVudDoiIjstLXR3LWFuaW1hdGlvbi1kZWxheTowczstLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb246bm9ybWFsOy0tdHctYW5pbWF0aW9uLWR1cmF0aW9uOmluaXRpYWw7LS10dy1hbmltYXRpb24tZmlsbC1tb2RlOm5vbmU7LS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OjE7LS10dy1lbnRlci1ibHVyOjA7LS10dy1lbnRlci1vcGFjaXR5OjE7LS10dy1lbnRlci1yb3RhdGU6MDstLXR3LWVudGVyLXNjYWxlOjE7LS10dy1lbnRlci10cmFuc2xhdGUteDowOy0tdHctZW50ZXItdHJhbnNsYXRlLXk6MDstLXR3LWV4aXQtYmx1cjowOy0tdHctZXhpdC1vcGFjaXR5OjE7LS10dy1leGl0LXJvdGF0ZTowOy0tdHctZXhpdC1zY2FsZToxOy0tdHctZXhpdC10cmFuc2xhdGUteDowOy0tdHctZXhpdC10cmFuc2xhdGUteTowOy0tc2Nyb2xsLWZhZGUtdDowOy0tc2Nyb2xsLWZhZGUtYjowOy0tc2Nyb2xsLWZhZGUtczowOy0tc2Nyb2xsLWZhZGUtZTowOy0tc2Nyb2xsLWZhZGUtbWFzazppbml0aWFsOy0tc2hpbW1lci1pbWFnZTppbml0aWFsOy0tc2hpbW1lci10ZXh0LWZpbGw6aW5pdGlhbH19fUBsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1zcGFjaW5nOi4yNXJlbTstLWNvbnRhaW5lci14czoyMHJlbTstLWNvbnRhaW5lci1zbToyNHJlbTstLWNvbnRhaW5lci1tZDoyOHJlbTstLXRleHQteHM6Ljc1cmVtOy0tdGV4dC14cy0tbGluZS1oZWlnaHQ6Y2FsYygxIC8gLjc1KTstLXRleHQtc206Ljg3NXJlbTstLXRleHQtc20tLWxpbmUtaGVpZ2h0OmNhbGMoMS4yNSAvIC44NzUpOy0tdGV4dC1iYXNlOjFyZW07LS10ZXh0LWJhc2UtLWxpbmUtaGVpZ2h0OmNhbGMoMS41IC8gMSk7LS10ZXh0LWxnOjEuMTI1cmVtOy0tdGV4dC1sZy0tbGluZS1oZWlnaHQ6Y2FsYygxLjc1IC8gMS4xMjUpOy0tdGV4dC14bDoxLjI1cmVtOy0tdGV4dC14bC0tbGluZS1oZWlnaHQ6Y2FsYygxLjc1IC8gMS4yNSk7LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXRpZ2h0Oi0uMDI1ZW07LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMtbWQ6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTstLXJhZGl1cy00eGw6MnJlbTstLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzOy0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsIDAsIC4yLCAxKTstLWRlZmF1bHQtZm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCAiQ2FzY2FkaWEgQ29kZSIsICJSb2JvdG8gTW9ubyIsIENvbnNvbGFzLCBtb25vc3BhY2V9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmUsOjpiYWNrZHJvcHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsICJOb3RvIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZiwgIkFwcGxlIENvbG9yIEVtb2ppIiwgIlNlZ29lIFVJIEVtb2ppIiwgIlNlZ29lIFVJIFN5bWJvbCIsICJOb3RvIENvbG9yIEVtb2ppIik7Zm9udC1mZWF0dXJlLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH1ocntoZWlnaHQ6MDtjb2xvcjppbmhlcml0O2JvcmRlci10b3Atd2lkdGg6MXB4fWFiYnI6d2hlcmUoW3RpdGxlXSl7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWF7Y29sb3I6aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0fWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGRlcn1jb2RlLGtiZCxzYW1wLHByZXtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHksdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICJMaWJlcmF0aW9uIE1vbm8iLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5nOndoZXJlKDpub3QoaWZyYW1lKSl7b3V0bGluZTphdXRvfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmV9aW1nLHN2Zyx2aWRlbyxjYW52YXMsYXVkaW8saWZyYW1lLGVtYmVkLG9iamVjdHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTpibG9ja31pbWcsdmlkZW97bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99YnV0dG9uLGlucHV0LHNlbGVjdCxvcHRncm91cCx0ZXh0YXJlYXtmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKG5vdCAoKC13ZWJraXQtYXBwZWFyYW5jZTotYXBwbGUtcGF5LWJ1dHRvbikpKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZToxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXs6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgY3VycmVudGNvbG9yIDUwJSwgdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXttaW4taGVpZ2h0OjFsaDt0ZXh0LWFsaWduOmluaGVyaXR9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXllYXItZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9uLGlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6ZmlsZS1zZWxlY3Rvci1idXR0b257YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31baGlkZGVuXTp3aGVyZSg6bm90KFtoaWRkZW49dW50aWwtZm91bmRdKSl7ZGlzcGxheTpub25lIWltcG9ydGFudH0qe2JvcmRlci1jb2xvcjp2YXIoLS1ib3JkZXIpO291dGxpbmUtY29sb3I6dmFyKC0tcmluZyl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpeyp7b3V0bGluZS1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXJpbmcpIDUwJSwgdHJhbnNwYXJlbnQpfX1ib2R5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYmFja2dyb3VuZCk7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWZ9fUBsYXllciBjb21wb25lbnRzO0BsYXllciB1dGlsaXRpZXN7LlxAY29udGFpbmVyXC9jYXJkLWhlYWRlcntjb250YWluZXI6Y2FyZC1oZWFkZXIvaW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtjbGlwLXBhdGg6aW5zZXQoNTAlKTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLXdpZHRoOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbn0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uaW5zZXQteS0we2luc2V0LWJsb2NrOjB9LnRvcC0xXC8ye3RvcDo1MCV9LnJpZ2h0LTF7cmlnaHQ6dmFyKC0tc3BhY2luZyl9LnJpZ2h0LTFcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnJpZ2h0LTJ7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5sZWZ0LTB7bGVmdDowfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0uei0xMHt6LWluZGV4OjEwfS56LTUwe3otaW5kZXg6NTB9Li1teC0xXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xLjUpfS5teC1hdXRve21hcmdpbi1pbmxpbmU6YXV0b30ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9Lm10LTF7bWFyZ2luLXRvcDp2YXIoLS1zcGFjaW5nKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ubWItMVwuNXttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5tYi0ye21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5tYi0ze21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS50YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbH0udGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93fS5zaXplLTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5zaXplLTN7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LnNpemUtM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUpfS5zaXplLTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LnNpemUtN3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNyk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uc2l6ZS04e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA4KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5zaXplLTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOSl9LnNpemUtMTJ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKX0uaC0xXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LmgtOXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDkpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5oLTcye2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNzIpfS5oLVxbY2FsY1woMTAwXCUtMXB4XClcXXtoZWlnaHQ6Y2FsYygxMDAlIC0gMXB4KX0ubWF4LWgtXCgtLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodFwpe21heC1oZWlnaHQ6dmFyKC0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KX0ubWluLWgtXFs3MHZoXF17bWluLWhlaWdodDo3MHZofS53LTE0e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAxNCl9LnctNDB7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQwKX0udy00NHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNDQpfS53LTU2e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA1Nil9LnctZml0e3dpZHRoOmZpdC1jb250ZW50fS53LWZ1bGx7d2lkdGg6MTAwJX0ubWF4LXctbWR7bWF4LXdpZHRoOnZhcigtLWNvbnRhaW5lci1tZCl9Lm1heC13LXNte21heC13aWR0aDp2YXIoLS1jb250YWluZXItc20pfS5tYXgtdy14c3ttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLXhzKX0ubWluLXctMHttaW4td2lkdGg6MH0ubWluLXctMzZ7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzNil9LmZsZXgtMXtmbGV4OjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9LmNhcHRpb24tYm90dG9te2NhcHRpb24tc2lkZTpib3R0b219Lm9yaWdpbi1cKC0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luXCl7dHJhbnNmb3JtLW9yaWdpbjp2YXIoLS1yZWthLXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxIC8gMiAqIDEwMCUpICogLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCkgdmFyKC0tdHctcm90YXRlLXksKSB2YXIoLS10dy1yb3RhdGUteiwpIHZhcigtLXR3LXNrZXcteCwpIHZhcigtLXR3LXNrZXcteSwpfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9Lmxpc3QtZGlzY3tsaXN0LXN0eWxlLXR5cGU6ZGlzY30uYXV0by1yb3dzLW1pbntncmlkLWF1dG8tcm93czptaW4tY29udGVudH0uZ3JpZC1jb2xzLTJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLG1pbm1heCgwLDFmcikpfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtd3JhcHtmbGV4LXdyYXA6d3JhcH0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uaXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5nYXAtMXtnYXA6dmFyKC0tc3BhY2luZyl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ2FwLTR7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ2FwLTZ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX06d2hlcmUoLnNwYWNlLXktMFwuNT46bm90KDpsYXN0LWNoaWxkKSl7LS10dy1zcGFjZS15LXJldmVyc2U6MDttYXJnaW4tYmxvY2stc3RhcnQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSk7bWFyZ2luLWJsb2NrLWVuZDpjYWxjKGNhbGModmFyKC0tc3BhY2luZykgKiAuNSkgKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSl9LmdhcC14LTN7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LmdhcC14LTR7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LmdhcC14LTZ7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LmdhcC15LTF7cm93LWdhcDp2YXIoLS1zcGFjaW5nKX0uZ2FwLXktMVwuNXtyb3ctZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS50cnVuY2F0ZXt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXgtYXV0b3tvdmVyZmxvdy14OmF1dG99Lm92ZXJmbG93LXgtaGlkZGVue292ZXJmbG93LXg6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLTR4bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy00eGwpfS5yb3VuZGVkLVxbbWluXCh2YXJcKC0tcmFkaXVzLW1kXClcLDEwcHhcKVxde2JvcmRlci1yYWRpdXM6bWluKHZhcigtLXJhZGl1cy1tZCksIDEwcHgpfS5yb3VuZGVkLVxbbWluXCh2YXJcKC0tcmFkaXVzLW1kXClcLDEycHhcKVxde2JvcmRlci1yYWRpdXM6bWluKHZhcigtLXJhZGl1cy1tZCksIDEycHgpfS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czoyMTQ3NDgzNjQ3cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0ucm91bmRlZC1zbXtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCl9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfS5yb3VuZGVkLXQteGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmJvcmRlci1ib3JkZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWJvcmRlcil9LmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6dmFyKC0taW5wdXQpfS5ib3JkZXItc3RhdHVzLXdhcm5cLzQwe2JvcmRlci1jb2xvcjp2YXIoLS1zdGF0dXMtd2Fybil9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItc3RhdHVzLXdhcm5cLzQwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXN0YXR1cy13YXJuKSA0MCUsIHRyYW5zcGFyZW50KX19LmJvcmRlci10cmFuc3BhcmVudHtib3JkZXItY29sb3I6IzAwMDB9LmJnLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1iYWNrZ3JvdW5kKX0uYmctYmFyLWFtYmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYmFyLWFtYmVyKX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNhcmQpfS5iZy1kZXN0cnVjdGl2ZSwuYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMTAlLCB0cmFuc3BhcmVudCl9fS5iZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX0uYmctcG9wb3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXBvcG92ZXIpfS5iZy1wcmltYXJ5LC5iZy1wcmltYXJ5XC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXByaW1hcnkpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctcHJpbWFyeVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXByaW1hcnkpIDEwJSwgdHJhbnNwYXJlbnQpfX0uYmctc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctY2xpcC1wYWRkaW5ne2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ucC0wXC43NXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAuNzUpfS5wLTJ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnAtNHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnB4LTJcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5weC00e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9LnB5LTF7cGFkZGluZy1ibG9jazp2YXIoLS1zcGFjaW5nKX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5weS04e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5weS0xMHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxMCl9LnB0LTB7cGFkZGluZy10b3A6MH0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHItOHtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0ucHItMTB7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5wYi0yXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5wbC0xXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnBsLTR7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucGwtOHtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb250LWhlYWRpbmd7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zYW5zKX0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRiBNb25vLENhc2NhZGlhIENvZGUsUm9ib3RvIE1vbm8sQ29uc29sYXMsbW9ub3NwYWNlfS50ZXh0LWJhc2V7Zm9udC1zaXplOnZhcigtLXRleHQtYmFzZSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LWJhc2UtLWxpbmUtaGVpZ2h0KSl9LnRleHQtbGd7Zm9udC1zaXplOnZhcigtLXRleHQtbGcpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1sZy0tbGluZS1oZWlnaHQpKX0udGV4dC1zbXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS50ZXh0LXhse2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXhsKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQteGwtLWxpbmUtaGVpZ2h0KSl9LnRleHQteHN7Zm9udC1zaXplOnZhcigtLXRleHQteHMpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC14cy0tbGluZS1oZWlnaHQpKX0udGV4dC1cWzBcLjhyZW1cXXtmb250LXNpemU6LjhyZW19LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1ub3JtYWx7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy10aWdodHstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXRpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy10aWdodCl9LnRleHQtYmFsYW5jZXt0ZXh0LXdyYXA6YmFsYW5jZX0uYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRleHQtY2FyZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLWNhcmQtZm9yZWdyb3VuZCl9LnRleHQtY2hhcnQtcmVxdWVzdHN7Y29sb3I6dmFyKC0tY2hhcnQtcmVxdWVzdHMpfS50ZXh0LWRlc3RydWN0aXZle2NvbG9yOnZhcigtLWRlc3RydWN0aXZlKX0udGV4dC1mb3JlZ3JvdW5kLC50ZXh0LWZvcmVncm91bmRcLzYwe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1mb3JlZ3JvdW5kXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWZvcmVncm91bmQpIDYwJSwgdHJhbnNwYXJlbnQpfX0udGV4dC1pbmhlcml0e2NvbG9yOmluaGVyaXR9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZCwudGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC82MHtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSA2MCUsIHRyYW5zcGFyZW50KX19LnRleHQtcG9wb3Zlci1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLXBvcG92ZXItZm9yZWdyb3VuZCl9LnRleHQtcHJpbWFyeXtjb2xvcjp2YXIoLS1wcmltYXJ5KX0udGV4dC1wcmltYXJ5LWZvcmVncm91bmR7Y29sb3I6dmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKX0udGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCl9LnRleHQtc3RhdHVzLXdhcm57Y29sb3I6dmFyKC0tc3RhdHVzLXdhcm4pfS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKSB2YXIoLS10dy1zbGFzaGVkLXplcm8sKSB2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpIHZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpIHZhcigtLXR3LW51bWVyaWMtZnJhY3Rpb24sKX0udW5kZXJsaW5lLW9mZnNldC00e3RleHQtdW5kZXJsaW5lLW9mZnNldDo0cHh9LnNoYWRvdy1tZHstLXR3LXNoYWRvdzowIDRweCA2cHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwgMCAycHggNHB4IC0ycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0ucmluZy1mb3JlZ3JvdW5kXC8xMHstLXR3LXJpbmctY29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLWZvcmVncm91bmRcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWZvcmVncm91bmQpIDEwJSwgdHJhbnNwYXJlbnQpfX0ub3V0bGluZS1oaWRkZW57LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfUBtZWRpYSAoZm9yY2VkLWNvbG9yczphY3RpdmUpey5vdXRsaW5lLWhpZGRlbntvdXRsaW5lLW9mZnNldDoycHg7b3V0bGluZToycHggc29saWQgIzAwMDB9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpIHZhcigtLXR3LWJyaWdodG5lc3MsKSB2YXIoLS10dy1jb250cmFzdCwpIHZhcigtLXR3LWdyYXlzY2FsZSwpIHZhcigtLXR3LWh1ZS1yb3RhdGUsKSB2YXIoLS10dy1pbnZlcnQsKSB2YXIoLS10dy1zYXR1cmF0ZSwpIHZhcigtLXR3LXNlcGlhLCkgdmFyKC0tdHctZHJvcC1zaGFkb3csKX0udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xMDB7LS10dy1kdXJhdGlvbjouMXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMXN9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0ucnVubmluZ3thbmltYXRpb24tcGxheS1zdGF0ZTpydW5uaW5nfS5ub3QtbGFzdFw6Ym9yZGVyLWI6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9Lmdyb3VwLWhhcy1cW1w+c3ZnXF1cL2FsZXJ0XDpjb2wtc3RhcnQtMjppcyg6d2hlcmUoLmdyb3VwXC9hbGVydCk6aGFzKD5zdmcpICope2dyaWQtY29sdW1uLXN0YXJ0OjJ9Lmdyb3VwLWFyaWEtZXhwYW5kZWRcL2FjY29yZGlvbi10cmlnZ2VyXDpoaWRkZW46aXMoOndoZXJlKC5ncm91cFwvYWNjb3JkaW9uLXRyaWdnZXIpW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gKil7ZGlzcGxheTpub25lfS5ncm91cC1hcmlhLWV4cGFuZGVkXC9hY2NvcmRpb24tdHJpZ2dlclw6aW5saW5lOmlzKDp3aGVyZSguZ3JvdXBcL2FjY29yZGlvbi10cmlnZ2VyKVthcmlhLWV4cGFuZGVkPXRydWVdICope2Rpc3BsYXk6aW5saW5lfS5ncm91cC1kYXRhLVxbc2l6ZVw9c21cXVwvY2FyZFw6cHgtMzppcyg6d2hlcmUoLmdyb3VwXC9jYXJkKVtkYXRhLXNpemU9c21dICope3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOnRleHQtc206aXMoOndoZXJlKC5ncm91cFwvY2FyZClbZGF0YS1zaXplPXNtXSAqKXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmJnLXRyYW5zcGFyZW50OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICope2JhY2tncm91bmQtY29sb3I6IzAwMDB9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6aC04OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDpoLWZpdDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICope2hlaWdodDpmaXQtY29udGVudH0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6dy1mdWxsOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKil7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6ZmxleC1jb2w6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmp1c3RpZnktc3RhcnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmlsZVw6aW5saW5lLWZsZXg6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXh9LmZpbGVcOmgtNjo6ZmlsZS1zZWxlY3Rvci1idXR0b257aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZmlsZVw6Ym9yZGVyLTA6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9uey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5maWxlXDp0ZXh0LWZvcmVncm91bmQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX0uYWZ0ZXJcOmFic29sdXRlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7cG9zaXRpb246YWJzb2x1dGV9LmFmdGVyXDpiZy1mb3JlZ3JvdW5kOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uYWZ0ZXJcOm9wYWNpdHktMDphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO29wYWNpdHk6MH0uYWZ0ZXJcOnRyYW5zaXRpb24tb3BhY2l0eTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5ncm91cC1kYXRhLWhvcml6b250YWxcL3RhYnNcOmFmdGVyXDppbnNldC14LTA6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7aW5zZXQtaW5saW5lOjB9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6YWZ0ZXJcOmJvdHRvbS1cWy01cHhcXTppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtib3R0b206LTVweH0uZ3JvdXAtZGF0YS1ob3Jpem9udGFsXC90YWJzXDphZnRlclw6aC0wXC41OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDphZnRlclw6aW5zZXQteS0wOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtpbnNldC1ibG9jazowfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDphZnRlclw6LXJpZ2h0LTE6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAtMSl9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmFmdGVyXDp3LTBcLjU6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1hY2NlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hY2NlbnQpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLW11dGVkOmhvdmVyLC5ob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjp2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LXByaW1hcnk6aG92ZXJ7Y29sb3I6dmFyKC0tcHJpbWFyeSl9LmhvdmVyXDp1bmRlcmxpbmU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfX0uZm9jdXNcOmJnLWFjY2VudDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFjY2VudCl9LmZvY3VzXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmZvY3VzLDppcygubm90LWRhdGEtXFt2YXJpYW50XD1kZXN0cnVjdGl2ZVxdXDpmb2N1c1w6XCpcKlw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpub3QoW2RhdGEtdmFyaWFudD1kZXN0cnVjdGl2ZV0pOmZvY3VzICope2NvbG9yOnZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxle2JvcmRlci1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzQwOmZvY3VzLXZpc2libGV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLXJpbmc6Zm9jdXMtdmlzaWJsZXtib3JkZXItY29sb3I6dmFyKC0tcmluZyl9LmZvY3VzLXZpc2libGVcOnJpbmctMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0uZm9jdXMtdmlzaWJsZVw6cmluZy0zOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygzcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5mb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC8yMDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC8yMDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOnJpbmctcmluZ1wvNTA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tcmluZyl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpyaW5nLXJpbmdcLzUwOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tcmluZykgNTAlLCB0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXJpbmc6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOnZhcigtLXJpbmcpfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW5vbmU6Zm9jdXMtdmlzaWJsZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmFmdGVyXDpib3JkZXItcmluZzpmb2N1cy12aXNpYmxlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7Ym9yZGVyLWNvbG9yOnZhcigtLXJpbmcpfS5hY3RpdmVcOm5vdC1hcmlhLVxbaGFzcG9wdXBcXVw6dHJhbnNsYXRlLXktcHg6YWN0aXZlOm5vdChbYXJpYS1oYXNwb3B1cF0pey0tdHctdHJhbnNsYXRlLXk6MXB4O3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kaXNhYmxlZFw6cG9pbnRlci1ldmVudHMtbm9uZTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOmJnLWlucHV0XC81MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDpiZy1pbnB1dFwvNTA6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9OndoZXJlKFtkYXRhLXNsb3Q9YnV0dG9uLWdyb3VwXSkgLmluLWRhdGEtXFtzbG90XD1idXR0b24tZ3JvdXBcXVw6cm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtZW5kXF1cOnByLTE6aGFzKFtkYXRhLWljb249aW5saW5lLWVuZF0pe3BhZGRpbmctcmlnaHQ6dmFyKC0tc3BhY2luZyl9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLWVuZFxdXDpwci0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1lbmRdKXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1lbmRcXVw6cHItMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtZW5kXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLXN0YXJ0XF1cOnBsLTE6aGFzKFtkYXRhLWljb249aW5saW5lLXN0YXJ0XSl7cGFkZGluZy1sZWZ0OnZhcigtLXNwYWNpbmcpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1zdGFydFxdXDpwbC0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1zdGFydF0pe3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtc3RhcnRcXVw6cGwtMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtc3RhcnRdKXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5oYXMtZGF0YS1cW3Nsb3RcPWFsZXJ0LWFjdGlvblxdXDpyZWxhdGl2ZTpoYXMoW2RhdGEtc2xvdD1hbGVydC1hY3Rpb25dKXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFzLWRhdGEtXFtzbG90XD1hbGVydC1hY3Rpb25cXVw6cHItMTg6aGFzKFtkYXRhLXNsb3Q9YWxlcnQtYWN0aW9uXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTgpfS5oYXMtZGF0YS1cW3Nsb3RcPWNhcmQtYWN0aW9uXF1cOmdyaWQtY29scy1cWzFmcl9hdXRvXF06aGFzKFtkYXRhLXNsb3Q9Y2FyZC1hY3Rpb25dKXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG99Lmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1kZXNjcmlwdGlvblxdXDpncmlkLXJvd3MtXFthdXRvX2F1dG9cXTpoYXMoW2RhdGEtc2xvdD1jYXJkLWRlc2NyaXB0aW9uXSl7Z3JpZC10ZW1wbGF0ZS1yb3dzOmF1dG8gYXV0b30uaGFzLWRhdGEtXFtzbG90XD1jYXJkLWZvb3RlclxdXDpwYi0wOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH0uaGFzLVxbXD5pbWdcOmZpcnN0LWNoaWxkXF1cOnB0LTA6aGFzKD5pbWc6Zmlyc3QtY2hpbGQpe3BhZGRpbmctdG9wOjB9Lmhhcy1cW1w+c3ZnXF1cOmdyaWQtY29scy1cW2F1dG9fMWZyXF06aGFzKD5zdmcpe2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmcn0uaGFzLVxbXD5zdmdcXVw6Z2FwLXgtMjpoYXMoPnN2Zyl7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LmFyaWEtZXhwYW5kZWRcOmJnLW11dGVkW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmFyaWEtZXhwYW5kZWRcOmJnLXNlY29uZGFyeVthcmlhLWV4cGFuZGVkPXRydWVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX0uYXJpYS1leHBhbmRlZFw6dGV4dC1mb3JlZ3JvdW5kW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmFyaWEtZXhwYW5kZWRcOnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmRbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjp2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCl9LmFyaWEtaW52YWxpZFw6Ym9yZGVyLWRlc3RydWN0aXZlW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfS5hcmlhLWludmFsaWRcOnJpbmctM1thcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygzcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5hcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC8yMFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uZGF0YS1wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kW2RhdGEtcGxhY2Vob2xkZXJde2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfS5kYXRhLVxbYWxpZ24tdHJpZ2dlclw9dHJ1ZVxdXDphbmltYXRlLW5vbmVbZGF0YS1hbGlnbi10cmlnZ2VyPXRydWVde2FuaW1hdGlvbjpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6cG9pbnRlci1ldmVudHMtbm9uZVtkYXRhLWRpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6b3BhY2l0eS01MFtkYXRhLWRpc2FibGVkXXtvcGFjaXR5Oi41fS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDpoLVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpW2RhdGEtcG9zaXRpb249cG9wcGVyXXtoZWlnaHQ6dmFyKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpfS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDp3LWZ1bGxbZGF0YS1wb3NpdGlvbj1wb3BwZXJde3dpZHRoOjEwMCV9LmRhdGEtXFtwb3NpdGlvblw9cG9wcGVyXF1cOm1pbi13LVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoXClbZGF0YS1wb3NpdGlvbj1wb3BwZXJde21pbi13aWR0aDp2YXIoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoKX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDp0cmFuc2xhdGUteS0xW2RhdGEtc2lkZT1ib3R0b21dey0tdHctdHJhbnNsYXRlLXk6dmFyKC0tc3BhY2luZyk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtZW5kXF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1pbmxpbmUtZW5kXXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtc3RhcnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1pbmxpbmUtc3RhcnRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6LXRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPWxlZnRdey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1sZWZ0XXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSl9LmRhdGEtXFtzaWRlXD1yaWdodFxdXDp0cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1yaWdodF17LS10dy10cmFuc2xhdGUteDp2YXIoLS1zcGFjaW5nKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXJpZ2h0XF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1yaWdodF17LS10dy1lbnRlci10cmFuc2xhdGUteDpjYWxjKDIqdmFyKC0tc3BhY2luZykqLTEpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOi10cmFuc2xhdGUteS0xW2RhdGEtc2lkZT10b3Bdey0tdHctdHJhbnNsYXRlLXk6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpemVcPWRlZmF1bHRcXVw6aC04W2RhdGEtc2l6ZT1kZWZhdWx0XXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5kYXRhLVxbc2l6ZVw9c21cXVw6aC03W2RhdGEtc2l6ZT1zbV17aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uZGF0YS1cW3NpemVcPXNtXF1cOmdhcC0zW2RhdGEtc2l6ZT1zbV17Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTBweFwpXF1bZGF0YS1zaXplPXNtXXtib3JkZXItcmFkaXVzOm1pbih2YXIoLS1yYWRpdXMtbWQpLCAxMHB4KX0uZGF0YS1cW3NpemVcPXNtXF1cOnB5LTNbZGF0YS1zaXplPXNtXXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1mb290ZXJcXVw6cGItMFtkYXRhLXNpemU9c21dOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH06aXMoLlwqXCpcOmRhdGEtXFtzbG90XD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXF1cOm1sLWF1dG8gKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de21hcmdpbi1sZWZ0OmF1dG99OmlzKC5cKlwqXDpkYXRhLVxbc2xvdFw9YWNjb3JkaW9uLXRyaWdnZXItaWNvblxdXDpzaXplLTQgKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfTppcyguXCpcKlw6ZGF0YS1cW3Nsb3RcPWFjY29yZGlvbi10cmlnZ2VyLWljb25cXVw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kICopW2RhdGEtc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXXtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9YWxlcnQtZGVzY3JpcHRpb25cXVw6dGV4dC1kZXN0cnVjdGl2ZVwvOTA+KilbZGF0YS1zbG90PWFsZXJ0LWRlc2NyaXB0aW9uXXtjb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LWRlc3RydWN0aXZlXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDkwJSwgdHJhbnNwYXJlbnQpfX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9YWxlcnQtZGVzY3JpcHRpb25cXVw6dGV4dC1zdGF0dXMtd2FyblwvOTA+KilbZGF0YS1zbG90PWFsZXJ0LWRlc2NyaXB0aW9uXXtjb2xvcjp2YXIoLS1zdGF0dXMtd2Fybil9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LXN0YXR1cy13YXJuXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tc3RhdHVzLXdhcm4pIDkwJSwgdHJhbnNwYXJlbnQpfX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOmxpbmUtY2xhbXAtMT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXstd2Via2l0LWxpbmUtY2xhbXA6MTstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7ZGlzcGxheTotd2Via2l0LWJveDtvdmVyZmxvdzpoaWRkZW59OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpmbGV4PiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVde2Rpc3BsYXk6ZmxleH06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOml0ZW1zLWNlbnRlcj4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXthbGlnbi1pdGVtczpjZW50ZXJ9OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpnYXAtMVwuNT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmRhdGEtXFtzdGF0ZVw9c2VsZWN0ZWRcXVw6YmctbXV0ZWRbZGF0YS1zdGF0ZT1zZWxlY3RlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmRhdGEtXFt2YXJpYW50XD1saW5lXF1cOnJvdW5kZWQtbm9uZVtkYXRhLXZhcmlhbnQ9bGluZV17Ym9yZGVyLXJhZGl1czowfUBtZWRpYSAod2lkdGg+PTQwcmVtKXsuc21cOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy00e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy01e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNSxtaW5tYXgoMCwxZnIpKX0uc21cOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uc21cOml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LnNtXDpqdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnNtXDpweC02e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX19QG1lZGlhICh3aWR0aD49NDhyZW0pey5tZFw6dGV4dC1zbXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5tZFw6dGV4dC1wcmV0dHl7dGV4dC13cmFwOnByZXR0eX19QG1lZGlhICh3aWR0aD49NjRyZW0pey5sZ1w6cHgtOHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6dmFyKC0taW5wdXQpfS5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6dGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5kYXJrXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzMwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8zMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6aG92ZXJcOmJnLWlucHV0XC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmhvdmVyXDpiZy1pbnB1dFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmhvdmVyXDpiZy1tdXRlZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZCkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNDAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpkaXNhYmxlZFw6YmctaW5wdXRcLzgwOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGlzYWJsZWRcOmJnLWlucHV0XC84MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDgwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDphcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzQwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC80MFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX19LmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246ZW50ZXIgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4xNXMpKXZhcigtLXR3LWVhc2UsZWFzZSl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6ZmFkZS1pbi0wOndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDpmYWRlLWluLTA6d2hlcmUoW2RhdGEtb3Blbl06bm90KFtkYXRhLW9wZW49ZmFsc2VdKSl7LS10dy1lbnRlci1vcGFjaXR5OjB9LmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXstLXR3LWVudGVyLXNjYWxlOi45NX0uZGF0YS1jbG9zZWRcOmFuaW1hdGUtYWNjb3JkaW9uLXVwOndoZXJlKFtkYXRhLXN0YXRlPWNsb3NlZF0pLC5kYXRhLWNsb3NlZFw6YW5pbWF0ZS1hY2NvcmRpb24tdXA6d2hlcmUoW2RhdGEtY2xvc2VkXTpub3QoW2RhdGEtY2xvc2VkPWZhbHNlXSkpe2FuaW1hdGlvbjphY2NvcmRpb24tdXAgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtY2xvc2VkXDphbmltYXRlLW91dDp3aGVyZShbZGF0YS1zdGF0ZT1jbG9zZWRdKSwuZGF0YS1jbG9zZWRcOmFuaW1hdGUtb3V0OndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXthbmltYXRpb246ZXhpdCB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjE1cykpdmFyKC0tdHctZWFzZSxlYXNlKXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1jbG9zZWRcOmZhZGUtb3V0LTA6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDpmYWRlLW91dC0wOndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXstLXR3LWV4aXQtb3BhY2l0eTowfS5kYXRhLWNsb3NlZFw6em9vbS1vdXQtOTU6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDp6b29tLW91dC05NTp3aGVyZShbZGF0YS1jbG9zZWRdOm5vdChbZGF0YS1jbG9zZWQ9ZmFsc2VdKSl7LS10dy1leGl0LXNjYWxlOi45NX0uZGF0YS1hY3RpdmVcOmJnLWJhY2tncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhdGEtYWN0aXZlXDpiZy1iYWNrZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpfS5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWRlZmF1bHRcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6c2hhZG93LXNtOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWRlZmF1bHRdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9ZGVmYXVsdFxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctc206aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9ZGVmYXVsdF0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9Lmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOnNoYWRvdy1ub25lOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctbm9uZTppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7LS10dy1zaGFkb3c6MCAwICMwMDAwO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9OmlzKC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDphZnRlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmFmdGVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSkpOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7b3BhY2l0eToxfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JvcmRlci1jb2xvcjp2YXIoLS1pbnB1dCl9LmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSAzMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpib3JkZXItdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJvcmRlci10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7Ym9yZGVyLWNvbG9yOiMwMDAwfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6Z3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9fS5kYXRhLWhvcml6b250YWxcOmZsZXgtY29sOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LlxbXCZfYVxdXDp1bmRlcmxpbmUgYXt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LlxbXCZfYVxdXDp1bmRlcmxpbmUtb2Zmc2V0LTMgYXt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6M3B4fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW1wmX2FcXVw6aG92ZXJcOnRleHQtZm9yZWdyb3VuZCBhOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uXFtcJl9wXDpub3RcKFw6bGFzdC1jaGlsZFwpXF1cOm1iLTQgcDpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5cW1wmX3N2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lIHN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmX3N2Z1xdXDpzaHJpbmstMCBzdmd7ZmxleC1zaHJpbms6MH0uXFtcJl9zdmdcOm5vdFwoXFtjbGFzc1wqXD1zaXplLVxdXClcXVw6c2l6ZS0zIHN2Zzpub3QoW2NsYXNzKj1zaXplLV0pe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTNcLjUgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTQgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZfdHJcXVw6Ym9yZGVyLWIgdHJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5cW1wmX3RyXDpsYXN0LWNoaWxkXF1cOmJvcmRlci0wIHRyOmxhc3QtY2hpbGR7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LlxbXCZcOmhhc1woXFtyb2xlXD1jaGVja2JveFxdXClcXVw6cHItMDpoYXMoW3JvbGU9Y2hlY2tib3hdKXtwYWRkaW5nLXJpZ2h0OjB9LlxbXC5ib3JkZXItYlxdXDpwYi00LmJvcmRlci1ie3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOlxbXC5ib3JkZXItYlxdXDpwYi0zOmlzKDp3aGVyZSguZ3JvdXBcL2NhcmQpW2RhdGEtc2l6ZT1zbV0gKikuYm9yZGVyLWJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW2FcXVw6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYVxdXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMjAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOmJnLW11dGVkOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfS5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcHJpbWFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1wcmltYXJ5KSA4MCUsIHRyYW5zcGFyZW50KX19LlxbYVxdXDpob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNlY29uZGFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDppcyhhKTpob3Zlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX19OmlzKC5cKlw6XFtpbWdcOmZpcnN0LWNoaWxkXF1cOnJvdW5kZWQtdC14bD4qKTppcyhpbWc6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfTppcyguXCpcOlxbaW1nXDpsYXN0LWNoaWxkXF1cOnJvdW5kZWQtYi14bD4qKTppcyhpbWc6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOmZsZXg+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtkaXNwbGF5OmZsZXh9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOml0ZW1zLWNlbnRlcj4qKTppcyhzcGFuKTpsYXN0LWNoaWxke2FsaWduLWl0ZW1zOmNlbnRlcn06aXMoLlwqXDpcW3NwYW5cXVw6bGFzdFw6Z2FwLTI+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfTppcyguXCpcOlxbc3ZnXF1cOnJvdy1zcGFuLTI+Kik6aXMoc3ZnKXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyfTppcyguXCpcOlxbc3ZnXF1cOnRyYW5zbGF0ZS15LTBcLjU+Kik6aXMoc3ZnKXstLXR3LXRyYW5zbGF0ZS15OmNhbGModmFyKC0tc3BhY2luZykgKiAuNSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9OmlzKC5cKlw6XFtzdmdcXVw6dGV4dC1jdXJyZW50PiopOmlzKHN2Zyl7Y29sb3I6Y3VycmVudENvbG9yfTppcyguXCpcOlxbc3ZnXDpub3RcKFxbY2xhc3NcKlw9c2l6ZS1cXVwpXF1cOnNpemUtND4qKTppcyhzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZcPnN2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lPnN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmXD5zdmdcXVw6c2l6ZS0zXCE+c3Zne3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnQ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnR9fUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1kZWxheXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MHN9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6bm9ybWFsfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOm5vbmV9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1lbnRlci1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZW50ZXItcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1leGl0LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZXhpdC1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZXhpdC1zY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1leGl0LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtdHtzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1ie3N5bnRheDoiPGxlbmd0aC1wZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLXN7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtZXtzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1tYXNre3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tc2hpbW1lci1hbmdsZXtzeW50YXg6IjxhbmdsZT4iO2luaGVyaXRzOnRydWU7aW5pdGlhbC12YWx1ZToyMGRlZ31AcHJvcGVydHkgLS1zaGltbWVyLWltYWdle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tc2hpbW1lci10ZXh0LWZpbGx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuc2hpbW1lcnstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpjdXJyZW50Q29sb3I7YmFja2dyb3VuZC1pbWFnZTpub25lO2FuaW1hdGlvbjpub25lfX06cm9vdHstLWJhY2tncm91bmQ6b2tsY2goOTklIC4wMDQgNzUpOy0tZm9yZWdyb3VuZDpva2xjaCgxOSUgLjAxMiA3NSk7LS1jYXJkOm9rbGNoKDk5LjUlIC4wMDMgNzUpOy0tY2FyZC1mb3JlZ3JvdW5kOm9rbGNoKDE5JSAuMDEyIDc1KTstLXBvcG92ZXI6b2tsY2goOTkuNSUgLjAwMyA3NSk7LS1wb3BvdmVyLWZvcmVncm91bmQ6b2tsY2goMTklIC4wMTIgNzUpOy0tcHJpbWFyeTpva2xjaCg0NiUgLjA5IDIwMCk7LS1wcmltYXJ5LWZvcmVncm91bmQ6b2tsY2goOTglIC4wMDYgMjAwKTstLXNlY29uZGFyeTpva2xjaCg5NSUgLjAwNiA3NSk7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDpva2xjaCgyMiUgLjAxIDc1KTstLW11dGVkOm9rbGNoKDk1JSAuMDA2IDc1KTstLW11dGVkLWZvcmVncm91bmQ6b2tsY2goNDglIC4wMTIgNzUpOy0tYWNjZW50Om9rbGNoKDkzJSAuMDIgMjAwKTstLWFjY2VudC1mb3JlZ3JvdW5kOm9rbGNoKDI4JSAuMDUgMjAwKTstLWRlc3RydWN0aXZlOm9rbGNoKDU1JSAuMiAyNSk7LS1ib3JkZXI6b2tsY2goOTAlIC4wMDcgNzUpOy0taW5wdXQ6b2tsY2goOTAlIC4wMDcgNzUpOy0tcmluZzpva2xjaCg1NSUgLjA5IDIwMCk7LS1yYWRpdXM6LjM3NXJlbTstLWNoYXJ0LXJlcXVlc3RzOiMwMDllNzM7LS1jaGFydC10b2tlbnMtaW46IzAwNzJiMjstLWNoYXJ0LXRva2Vucy1vdXQ6I2U2OWYwMDstLWNoYXJ0LWNvc3Q6I2Q1NWUwMDstLXN0YXR1cy13YXJuOiNhMzVjMDA7LS1iYXItYW1iZXI6I2EzNWMwMH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezpyb290ey0tYmFja2dyb3VuZDpva2xjaCgxNyUgLjAwNyA3NSk7LS1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLWNhcmQ6b2tsY2goMjElIC4wMDkgNzUpOy0tY2FyZC1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLXBvcG92ZXI6b2tsY2goMjElIC4wMDkgNzUpOy0tcG9wb3Zlci1mb3JlZ3JvdW5kOm9rbGNoKDk1JSAuMDA1IDc1KTstLXByaW1hcnk6b2tsY2goNzQlIC4xMSAyMDApOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOm9rbGNoKDE2JSAuMDEyIDIwMCk7LS1zZWNvbmRhcnk6b2tsY2goMjclIC4wMTEgNzUpOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6b2tsY2goOTMlIC4wMDUgNzUpOy0tbXV0ZWQ6b2tsY2goMjclIC4wMTEgNzUpOy0tbXV0ZWQtZm9yZWdyb3VuZDpva2xjaCg2OCUgLjAxMiA3NSk7LS1hY2NlbnQ6b2tsY2goMzIlIC4wMzUgMjAwKTstLWFjY2VudC1mb3JlZ3JvdW5kOm9rbGNoKDkxJSAuMDMgMjAwKTstLWRlc3RydWN0aXZlOm9rbGNoKDY4JSAuMTkgMjUpOy0tYm9yZGVyOm9rbGNoKDEwMCUgMCAwLy4xMik7LS1pbnB1dDpva2xjaCgxMDAlIDAgMC8uMTYpOy0tcmluZzpva2xjaCg2MiUgLjEgMjAwKTstLWNoYXJ0LXJlcXVlc3RzOiMxNmI4OTE7LS1jaGFydC10b2tlbnMtaW46IzQwOThkNzstLWNoYXJ0LXRva2Vucy1vdXQ6I2YwYWMxZjstLWNoYXJ0LWNvc3Q6I2U4NzYzYTstLXN0YXR1cy13YXJuOiNmMGFjMWY7LS1iYXItYW1iZXI6I2YwYWMxZn19QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc3BhY2UteS1yZXZlcnNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udGVudHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6IiJ9QGtleWZyYW1lcyBlbnRlcnswJXtvcGFjaXR5OnZhcigtLXR3LWVudGVyLW9wYWNpdHksMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS15LDApLDApc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSlyb3RhdGUodmFyKC0tdHctZW50ZXItcm90YXRlLDApKTtmaWx0ZXI6Ymx1cih2YXIoLS10dy1lbnRlci1ibHVyLDApKX19QGtleWZyYW1lcyBleGl0e3Rve29wYWNpdHk6dmFyKC0tdHctZXhpdC1vcGFjaXR5LDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWV4aXQtdHJhbnNsYXRlLXksMCksMClzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsMSksdmFyKC0tdHctZXhpdC1zY2FsZSwxKSx2YXIoLS10dy1leGl0LXNjYWxlLDEpKXJvdGF0ZSh2YXIoLS10dy1leGl0LXJvdGF0ZSwwKSk7ZmlsdGVyOmJsdXIodmFyKC0tdHctZXhpdC1ibHVyLDApKX19QGtleWZyYW1lcyBhY2NvcmRpb24tZG93bnswJXtoZWlnaHQ6MH10b3toZWlnaHQ6dmFyKC0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQsdmFyKC0tYWNjb3JkaW9uLXBhbmVsLWhlaWdodCxhdXRvKSl9fUBrZXlmcmFtZXMgYWNjb3JkaW9uLXVwezAle2hlaWdodDp2YXIoLS1yZWthLWFjY29yZGlvbi1jb250ZW50LWhlaWdodCx2YXIoLS1hY2NvcmRpb24tcGFuZWwtaGVpZ2h0LGF1dG8pKX10b3toZWlnaHQ6MH19Cg==", ), }, } diff --git a/webui/src/App.vue b/webui/src/App.vue index 317c525..3da0c22 100644 --- a/webui/src/App.vue +++ b/webui/src/App.vue @@ -4,14 +4,17 @@ import { faCircleExclamation } from '@fortawesome/free-solid-svg-icons' import { computed, defineAsyncComponent, onMounted } from 'vue' import AuthGate from '@/components/AuthGate.vue' +import ConfigWarningsBanner from '@/components/ConfigWarningsBanner.vue' +import EventsView from '@/components/EventsView.vue' import ProvidersView from '@/components/ProvidersView.vue' import TargetsView from '@/components/TargetsView.vue' import { Button } from '@/components/ui/button' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import UsageView from '@/components/UsageView.vue' -import { useTabHash } from '@/composables/useTabHash' +import { useHashState } from '@/composables/useHashState' import { useAuthStore } from '@/stores/auth' import { useDashboardStore } from '@/stores/dashboard' +import { useNavStore } from '@/stores/nav' // Lazy: Chart.js (UsageChart.vue's dependency, pulled in transitively) is // the single largest piece of this bundle, and most admin sessions open on @@ -25,21 +28,24 @@ const GITHUB_REPO_URL = 'https://github.com/lukaszraczylo/traefik-llmgateway' const auth = useAuthStore() const dashboard = useDashboardStore() +const nav = useNavStore() -// The tab is labeled "Providers" (operator rename); the backend endpoint it -// fetches from, GET /admin/api/overview, and the store's own `overview` -// field (AdminOverviewResponse) keep their original names unchanged — the -// rename is UI-only, not an API surface change. -const TAB_VALUES = ['providers', 'usage', 'charts', 'targets'] as const -type TabValue = (typeof TAB_VALUES)[number] +// The "Providers" tab is labeled that way (operator rename); the backend +// endpoint it fetches from, GET /admin/api/overview, and the store's own +// `overview` field (AdminOverviewResponse) keep their original names +// unchanged — the rename is UI-only, not an API surface change. -// Feature C (v0.22): activeView is now hash-backed (composables/ -// useTabHash.ts) instead of a bare ref — same v-model contract Tabs -// already expects, so nothing else about this template changes. AuthGate's -// own flow is untouched: it never reads or writes the hash, so whatever -// tab the URL named survives straight through the unauthenticated -> -// authenticated transition with no extra wiring here. -const activeView = useTabHash({ validTabs: TAB_VALUES, defaultTab: 'providers' }) +// F9 (dashboard-plan.md) supersedes Feature C (v0.22)'s useTabHash() +// composable: the Tabs v-model now binds nav.activeTab (stores/nav.ts) +// directly, and useHashState() keeps that field — plus history.ts's +// scope/window/tab/modelMetric, events.ts's kindFilter/userFilter, and +// nav.usageQuery — synced with a single "#?" URL hash +// (lib/hash-state.ts), both on load and on every change. MUST be created +// here, before the `v-if="!auth.isAuthenticated"` branch below (Risks, +// dashboard-plan.md: "load-with-hash-then-authenticate") — every store +// action it calls is safe to run before a key is stored, so the hash's +// selection is already restored by the time the reader authenticates. +useHashState() // statusText reads dashboard.error/lastUpdated unconditionally — it is // correct only while the template's own `v-if="auth.isAuthenticated"` below @@ -47,9 +53,18 @@ const activeView = useTabHash({ validTabs: TAB_VALUES, defaultTab: 'pr // before touching error/lastUpdated) left the PRIOR "last updated ..." or // "refresh failed: ..." line showing right under the auth gate, and a first // load with no stored key showed "loading..." forever (review finding). +// F4 (dashboard-plan.md): appended only on a genuinely successful poll — +// dashboard.overview.replica reflects WHICH replica answered that poll, +// so it must never be shown alongside a stale value during a failed or +// still-loading refresh (a prior successful poll's overview object can +// still be sitting there while `error` is set, and showing its replica +// next to "refresh failed" would misattribute the failure to it). const statusText = computed(() => { if (dashboard.error) return `refresh failed: ${dashboard.error}` - if (dashboard.lastUpdated) return `last updated ${dashboard.lastUpdated.toLocaleTimeString()}` + if (dashboard.lastUpdated) { + const replica = dashboard.overview?.replica + return `last updated ${dashboard.lastUpdated.toLocaleTimeString()}${replica ? ` · replica ${replica}` : ''}` + } return 'loading...' }) @@ -77,19 +92,27 @@ onMounted(() => {

- +

+ + + - + Providers Usage Charts MCP & Agents + Events @@ -103,6 +126,9 @@ onMounted(() => { + + + diff --git a/webui/src/assets/main.css b/webui/src/assets/main.css index b7f21fc..5acc396 100644 --- a/webui/src/assets/main.css +++ b/webui/src/assets/main.css @@ -54,6 +54,7 @@ --color-chart-tokens-out: var(--chart-tokens-out); --color-chart-cost: var(--chart-cost); --color-status-warn: var(--status-warn); + --color-bar-amber: var(--bar-amber); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); @@ -109,6 +110,27 @@ * light --card measures ~5.06:1. */ --status-warn: #a35c00; + + /* + * --bar-amber: F1 (usage-vs-limit bars, UsageBar.vue) — the filled + * amber segment of a budget bar at BAR_AMBER_THRESHOLD (lib/usage- + * bars.ts). The track it fills against is --muted (UsageBar.vue's + * `bg-muted` on the bar's own background span) — WCAG 1.4.11 non-text + * contrast requires 3:1 against that ADJACENT color. + * + * P8 review fix: this used to match --chart-tokens-out's hue/value + * (#e69f00) on the reasoning that it was "already proven legible at + * small UI sizes on both --card and --muted" — that reasoning was + * never actually checked against --muted specifically, and #e69f00 + * measures (WCAG relative-luminance formula, oklch(0.95 0.006 75) + * --muted as the track) 1.95:1 there, well under the 3:1 this comment + * itself claimed. Reusing --status-warn's own light-mode value + * (#a35c00) instead measures 4.44:1 against --muted — comfortably + * clears 3:1, and keeps every semantic amber in this panel visually + * consistent (same value already used for the "degraded" badge tier, + * ProviderRateBadge.vue) rather than adding a third amber shade. + */ + --bar-amber: #a35c00; } @media (prefers-color-scheme: dark) { @@ -147,6 +169,9 @@ reader auditing this block sees every semantic-color token's dark value in one place. */ --status-warn: #f0ac1f; + + /* Same reasoning as --chart-tokens-out's own dark-mode comment above — legible as-is, redefined here anyway so every semantic-color token's dark value lives in one place. */ + --bar-amber: #f0ac1f; } } diff --git a/webui/src/components/ChartsView.vue b/webui/src/components/ChartsView.vue index 76b91d1..9079127 100644 --- a/webui/src/components/ChartsView.vue +++ b/webui/src/components/ChartsView.vue @@ -1,7 +1,9 @@ + + diff --git a/webui/src/components/CostForecastCard.vue b/webui/src/components/CostForecastCard.vue new file mode 100644 index 0000000..a4f8215 --- /dev/null +++ b/webui/src/components/CostForecastCard.vue @@ -0,0 +1,75 @@ + + + diff --git a/webui/src/components/CsvExportButton.vue b/webui/src/components/CsvExportButton.vue new file mode 100644 index 0000000..dd5a11a --- /dev/null +++ b/webui/src/components/CsvExportButton.vue @@ -0,0 +1,87 @@ + + + diff --git a/webui/src/components/DataTable.vue b/webui/src/components/DataTable.vue index 8538732..b4e16d7 100644 --- a/webui/src/components/DataTable.vue +++ b/webui/src/components/DataTable.vue @@ -12,7 +12,6 @@ import { TableHead, TableHeader, TableRow, - valueUpdater, } from '@/components/ui/table' /** @@ -39,9 +38,24 @@ const props = defineProps<{ rowClass?: (row: TData) => string | undefined /** Shown in the empty-state row when data is empty. */ emptyMessage?: string + /** + * Optional CONTROLLED sort state (P6, `v-model:sorting`). Omitted (the + * default) keeps every existing call site's original UNCONTROLLED + * behavior unchanged — this component owns `internalSorting` itself and + * a caller has no way to read the current sort. Passed, a caller (e.g. + * UsageView.vue's Users export, which needs to export rows in the + * table's own current sort order — the plan's own "exports + * filtered+sorted rows" requirement) instead owns the ref: every header + * click emits `update:sorting` with the new state rather than mutating + * anything locally here. + */ + sorting?: SortingState }>() -const sorting = ref([]) +const emit = defineEmits<{ 'update:sorting': [value: SortingState] }>() + +/** internalSorting is read only when props.sorting is undefined (uncontrolled mode) — see the `sorting` prop's own doc comment above. */ +const internalSorting = ref([]) const table = useVueTable({ get data() { @@ -52,10 +66,15 @@ const table = useVueTable({ }, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), - onSortingChange: (updater) => valueUpdater(updater, sorting), + onSortingChange: (updater) => { + const current = props.sorting ?? internalSorting.value + const next = typeof updater === 'function' ? updater(current) : updater + if (props.sorting !== undefined) emit('update:sorting', next) + else internalSorting.value = next + }, state: { get sorting() { - return sorting.value + return props.sorting ?? internalSorting.value }, }, }) diff --git a/webui/src/components/EventsView.vue b/webui/src/components/EventsView.vue new file mode 100644 index 0000000..d44ba24 --- /dev/null +++ b/webui/src/components/EventsView.vue @@ -0,0 +1,137 @@ + + + diff --git a/webui/src/components/ProvidersView.vue b/webui/src/components/ProvidersView.vue index 0484164..a106023 100644 --- a/webui/src/components/ProvidersView.vue +++ b/webui/src/components/ProvidersView.vue @@ -10,6 +10,7 @@ import { computed, h, reactive, watch } from 'vue' import DataTable from '@/components/DataTable.vue' import ModelChip from '@/components/ModelChip.vue' import ProviderRateBadge from '@/components/ProviderRateBadge.vue' +import ScopeLink from '@/components/ScopeLink.vue' import SearchInput from '@/components/SearchInput.vue' import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion' import { Badge } from '@/components/ui/badge' @@ -25,6 +26,7 @@ import { formatAgo, formatContextWindow, formatLatencyMs, formatUntil, refreshDe import { isModelDegraded } from '@/lib/provider-rate' import { type ExpandState, clearExpandOverrides, computeExpandedItems, toggleItemExpand } from '@/lib/search-expand' import { useDashboardStore } from '@/stores/dashboard' +import { useNavStore } from '@/stores/nav' import type { AdminAliasView, AdminLatencyView, AdminModelMetaView, AdminModelRateView, AdminProvenanceView, AdminProviderView } from '@/types/api' // This component backs the "Providers" tab (App.vue) — a UI-label rename @@ -34,6 +36,31 @@ import type { AdminAliasView, AdminLatencyView, AdminModelMetaView, AdminModelRa // API surface. const dashboard = useDashboardStore() const overview = computed(() => dashboard.overview) +const nav = useNavStore() + +/** + * goToProviderModels navigates to the Charts Models ranking, pre-filtered + * to this provider's own models (F6, dashboard-plan.md: `nav.goToModels`). + * + * P2 review fix: this used to back a `` + * nested INSIDE AccordionTrigger's own real `