diff --git a/admin_assets_gen.go b/admin_assets_gen.go index 99b1079..e3e2d57 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 8156f01d10f1eec5. +// Source: webui/dist/ (vite build output), digest c2f0f0252c9f3f4d. // Regenerate via `make admin-ui` after any webui/ source change. // // Every asset body below is base64-encoded and decoded once at package-var @@ -34,22 +34,16 @@ 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+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LUI3alBuNHM2LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9pbmRleC1EZS1WMGpQdC5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgaWQ9ImFwcCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==", + "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPCEtLSBJbmxpbmUgZGF0YTogVVJJLCBub3QgYSBmaWxlIHVuZGVyIHB1YmxpYy86IGFkbWluLmdvJ3MgYXNzZXQgbWFwIG9ubHkKICAgICAgICAgZXZlciBob2xkcyBjb250ZW50LWhhc2hlZCBmaWxlcyB1bmRlciAvYWRtaW4vYXNzZXRzLyosIGFuZCB0aGUgYWRtaW4KICAgICAgICAgQ1NQJ3MgaW1nLXNyYyBhbGxvd3MgJ3NlbGYnIHBsdXMgZGF0YTogZm9yIGV4YWN0bHkgdGhpcyByZWFzb24g4oCUIG5vCiAgICAgICAgIGV4dHJhIHVuaGFzaGVkLWFzc2V0IHJvdXRlIGlzIG5lZWRlZCBmb3Igb25lIHNtYWxsIGljb24uIC0tPgogICAgPGxpbmsKICAgICAgcmVsPSJpY29uIgogICAgICB0eXBlPSJpbWFnZS9zdmcreG1sIgogICAgICBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyUzRSUzQ3JlY3Qgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyByeD0nNScgZmlsbD0nJTIzMDA3MmIyJy8lM0UlM0NwYXRoIGQ9J002IDE2LjUgMTAgOGwzIDYgMi0zLjUgMyA2JyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLXdpZHRoPScyJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiCiAgICAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+TExNIEdhdGV3YXkgLSBBZG1pbjwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LWVqS1RaWmR4LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9pbmRleC1EZS1WMGpQdC5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgaWQ9ImFwcCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==", ) // adminAssets maps each hashed filename under /admin/assets/ (admin.go's // serveAdminAsset) to its content. var adminAssets = map[string]adminAsset{ - "ChartsView-yli_MCH8.js": { + "ChartsView-Ba11Ah5Q.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0eyQgYXMgZSxBIGFzIHQsQXQgYXMgbixCIGFzIHIsQnQgYXMgaSxDIGFzIGEsQ3QgYXMgbyxEIGFzIHMsRHQgYXMgYyxFIGFzIGwsRXQgYXMgdSxGIGFzIGQsRnQgYXMgZixHIGFzIHAsSCBhcyBtLEkgYXMgaCxJdCBhcyBnLEogYXMgXyxLIGFzIHYsTCBhcyB5LEx0IGFzIGIsTSBhcyB4LE10IGFzIFMsTiBhcyBDLE50IGFzIHcsTyBhcyBULE90IGFzIEUsUCBhcyBELFB0IGFzIE8sUSBhcyBrLFIgYXMgQSxSdCBhcyBlZSxTIGFzIHRlLFN0IGFzIG5lLFQgYXMgcmUsVHQgYXMgaWUsVSBhcyBhZSxWIGFzIG9lLFZ0IGFzIHNlLFcgYXMgY2UsWCBhcyBsZSxZIGFzIHVlLFogYXMgZGUsXyBhcyBmZSxfdCBhcyBwZSxhIGFzIG1lLGF0IGFzIGhlLGIgYXMgaixjIGFzIGdlLGN0IGFzIF9lLGQgYXMgdmUsZHQgYXMgTSxldCBhcyBOLGYgYXMgeWUsZnQgYXMgYmUsZyBhcyB4ZSxndCBhcyBQLGggYXMgU2UsaHQgYXMgQ2UsaSBhcyB3ZSxpdCBhcyBUZSxqIGFzIEVlLGp0IGFzIEYsayBhcyBEZSxrdCBhcyBPZSxsIGFzIGtlLGx0IGFzIEFlLG0gYXMgamUsbXQgYXMgTWUsbiBhcyBOZSxudCBhcyBJLG8gYXMgUGUsb3QgYXMgTCxwIGFzIEZlLHB0IGFzIEllLHEgYXMgTGUsciBhcyBSZSxydCBhcyB6ZSxzIGFzIEJlLHN0IGFzIFIsdCBhcyBWZSx0dCBhcyBIZSx1IGFzIFVlLHV0IGFzIFdlLHYgYXMgR2UsdnQgYXMgeix3IGFzIEtlLHd0IGFzIEIseCBhcyBxZSx4dCBhcyBWLHkgYXMgSmUseXQgYXMgWWUseiBhcyBYZSx6dCBhcyBaZX1mcm9tIi4vaW5kZXgtQjdqUG40czYuanMiO2Z1bmN0aW9uIFFlKGUsdD0tMS8wLG49MS8wKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heCh0LGUpKX1mdW5jdGlvbiAkZShlLHQsbil7bGV0IHI9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxpPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTt0JiZyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LHtvbmNlOiEwfSksci5kaXNwYXRjaEV2ZW50KGkpfXZhciBIPW4oe2xheWVyc1Jvb3Q6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LG9yaWdpbmFsQm9keVBvaW50ZXJFdmVudHM6dm9pZCAwLGJyYW5jaGVzOm5ldyBTZXR9KTtmdW5jdGlvbiBldChlKXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiExO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdCE9PW51bGwmJnQhPT1PYmplY3QucHJvdG90eXBlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1udWxsfHxTeW1ib2wuaXRlcmF0b3IgaW4gZT8hMTpTeW1ib2wudG9TdHJpbmdUYWcgaW4gZT9PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBNb2R1bGVdYDohMH1mdW5jdGlvbiB0dChlLHQsbj1gLmAscil7aWYoIWV0KHQpKXJldHVybiB0dChlLHt9LG4scik7bGV0IGk9ey4uLnR9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyhlKSl7aWYodD09PWBfX3Byb3RvX19gfHx0PT09YGNvbnN0cnVjdG9yYCljb250aW51ZTtsZXQgYT1lW3RdO2EhPW51bGwmJihyJiZyKGksdCxhLG4pfHwoaVt0XT1BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGlbdF0pP1suLi5hLC4uLmlbdF1dOmV0KGEpJiZldChpW3RdKT90dChhLGlbdF0sKG4/YCR7bn0uYDpgYCkrdC50b1N0cmluZygpLHIpOmEpKX1yZXR1cm4gaX1mdW5jdGlvbiBudChlKXtyZXR1cm4oLi4udCk9PnQucmVkdWNlKCh0LG4pPT50dCh0LG4sYGAsZSkse30pfXZhciBydD1udCgpLGl0PWQoKCk9PntsZXQgZT1GKG5ldyBNYXApLG49RigpLHI9TigoKT0+e2ZvcihsZXQgdCBvZiBlLnZhbHVlLnZhbHVlcygpKWlmKHQpcmV0dXJuITA7cmV0dXJuITF9KSxpPXMoe3Njcm9sbEJvZHk6RighMCl9KSxhPW51bGwsbz0oKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWBgLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9YGAsSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gYCksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGAtLXNjcm9sbGJhci13aWR0aGApLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9bi52YWx1ZT8/YGAseSYmYT8uKCksbi52YWx1ZT12b2lkIDB9O3JldHVybiBWKHIsKGUscyk9PntpZighaClyZXR1cm47aWYoIWUpe3MmJm8oKTtyZXR1cm59bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyk7bGV0IGM9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9e3BhZGRpbmc6YyxtYXJnaW46MH0sdT1pLnNjcm9sbEJvZHk/LnZhbHVlP3R5cGVvZiBpLnNjcm9sbEJvZHkudmFsdWU9PWBvYmplY3RgP3J0KHtwYWRkaW5nOmkuc2Nyb2xsQm9keS52YWx1ZS5wYWRkaW5nPT09ITA/YzppLnNjcm9sbEJvZHkudmFsdWUucGFkZGluZyxtYXJnaW46aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbj09PSEwP2M6aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbn0sbCk6bDp7cGFkZGluZzowLG1hcmdpbjowfTtjPjAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10eXBlb2YgdS5wYWRkaW5nPT1gbnVtYmVyYD9gJHt1LnBhZGRpbmd9cHhgOlN0cmluZyh1LnBhZGRpbmcpLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9dHlwZW9mIHUubWFyZ2luPT1gbnVtYmVyYD9gJHt1Lm1hcmdpbn1weGA6U3RyaW5nKHUubWFyZ2luKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCxgJHtjfXB4YCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1gaGlkZGVuYCkseSYmKGE9dChkb2N1bWVudCxgdG91Y2htb3ZlYCxlPT5zdChlKSx7cGFzc2l2ZTohMX0pKSxiZSgoKT0+e3IudmFsdWUmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9YGhpZGRlbmApfSl9LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHN5bmNgfSksZX0pO2Z1bmN0aW9uIGF0KGUpe2xldCB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDcpLG49aXQoKTtuLnZhbHVlLnNldCh0LGU/PyExKTtsZXQgaT1OKHtnZXQ6KCk9Pm4udmFsdWUuZ2V0KHQpPz8hMSxzZXQ6ZT0+bi52YWx1ZS5zZXQodCxlKX0pO3JldHVybiByKCgpPT57bi52YWx1ZS5kZWxldGUodCl9KSxpfWZ1bmN0aW9uIG90KGUpe2xldCB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO2lmKHQub3ZlcmZsb3dYPT09YHNjcm9sbGB8fHQub3ZlcmZsb3dZPT09YHNjcm9sbGB8fHQub3ZlcmZsb3dYPT09YGF1dG9gJiZlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGh8fHQub3ZlcmZsb3dZPT09YGF1dG9gJiZlLmNsaWVudEhlaWdodDxlLnNjcm9sbEhlaWdodClyZXR1cm4hMDt7bGV0IHQ9ZS5wYXJlbnROb2RlO3JldHVybiEodCBpbnN0YW5jZW9mIEVsZW1lbnQpfHx0LnRhZ05hbWU9PT1gQk9EWWA/ITE6b3QodCl9fWZ1bmN0aW9uIHN0KGUpe2xldCB0PWV8fHdpbmRvdy5ldmVudCxuPXQudGFyZ2V0O3JldHVybiBuIGluc3RhbmNlb2YgRWxlbWVudCYmb3Qobik/ITE6dC50b3VjaGVzLmxlbmd0aD4xfHwodC5wcmV2ZW50RGVmYXVsdCYmdC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCksITEpfXZhciBjdD0wO2Z1bmN0aW9uIGx0KCl7bmUoZT0+e2lmKCFoKXJldHVybjtsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWZvY3VzLWd1YXJkXWApO2RvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGBhZnRlcmJlZ2luYCx0WzBdPz91dCgpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChgYmVmb3JlZW5kYCx0WzFdPz91dCgpKSxjdCsrLGUoKCk9PntjdD09PTEmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtZm9jdXMtZ3VhcmRdYCkuZm9yRWFjaChlPT5lLnJlbW92ZSgpKSxjdC0tfSl9KX1mdW5jdGlvbiB1dCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHNwYW5gKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoYGRhdGEtcmVrYS1mb2N1cy1ndWFyZGAsYGApLGUudGFiSW5kZXg9MCxlLnN0eWxlLm91dGxpbmU9YG5vbmVgLGUuc3R5bGUub3BhY2l0eT1gMGAsZS5zdHlsZS5wb3NpdGlvbj1gZml4ZWRgLGUuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWAsZX1mdW5jdGlvbiBkdChlKXtyZXR1cm4gTigoKT0+IWcoZSl8fCEhRGUoZSk/LmNsb3Nlc3QoYGZvcm1gKSl9dmFyIGZ0PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+YHVgP251bGw6KEFycmF5LmlzQXJyYXkoZSk/ZVswXTplKS5vd25lckRvY3VtZW50LmJvZHl9LHB0PW5ldyBXZWFrTWFwLG10PW5ldyBXZWFrTWFwLGh0PXt9LGd0PTAsX3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihlLmhvc3R8fF90KGUucGFyZW50Tm9kZSkpfSx2dD1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtpZihlLmNvbnRhaW5zKHQpKXJldHVybiB0O3ZhciBuPV90KHQpO3JldHVybiBuJiZlLmNvbnRhaW5zKG4pP246KGNvbnNvbGUuZXJyb3IoYGFyaWEtaGlkZGVuYCx0LGBpbiBub3QgY29udGFpbmVkIGluc2lkZWAsZSxgLiBEb2luZyBub3RoaW5nYCksbnVsbCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSl9LHl0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXZ0KHQsQXJyYXkuaXNBcnJheShlKT9lOltlXSk7aHRbbl18fChodFtuXT1uZXcgV2Vha01hcCk7dmFyIGE9aHRbbl0sbz1bXSxzPW5ldyBTZXQsYz1uZXcgU2V0KGkpLGw9ZnVuY3Rpb24oZSl7IWV8fHMuaGFzKGUpfHwocy5hZGQoZSksbChlLnBhcmVudE5vZGUpKX07aS5mb3JFYWNoKGwpO3ZhciB1PWZ1bmN0aW9uKGUpeyFlfHxjLmhhcyhlKXx8QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUpe2lmKHMuaGFzKGUpKXUoZSk7ZWxzZSB0cnl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUociksaT10IT09bnVsbCYmdCE9PWBmYWxzZWAsYz0ocHQuZ2V0KGUpfHwwKSsxLGw9KGEuZ2V0KGUpfHwwKSsxO3B0LnNldChlLGMpLGEuc2V0KGUsbCksby5wdXNoKGUpLGM9PT0xJiZpJiZtdC5zZXQoZSwhMCksbD09PTEmJmUuc2V0QXR0cmlidXRlKG4sYHRydWVgKSxpfHxlLnNldEF0dHJpYnV0ZShyLGB0cnVlYCl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcihgYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uIGAsZSx0KX19KX07cmV0dXJuIHUodCkscy5jbGVhcigpLGd0KyssZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cHQuZ2V0KGUpLTEsaT1hLmdldChlKS0xO3B0LnNldChlLHQpLGEuc2V0KGUsaSksdHx8KG10LmhhcyhlKXx8ZS5yZW1vdmVBdHRyaWJ1dGUociksbXQuZGVsZXRlKGUpKSxpfHxlLnJlbW92ZUF0dHJpYnV0ZShuKX0pLGd0LS0sZ3R8fChwdD1uZXcgV2Vha01hcCxwdD1uZXcgV2Vha01hcCxtdD1uZXcgV2Vha01hcCxodD17fSl9fSxidD1mdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49YGRhdGEtYXJpYS1oaWRkZW5gKTt2YXIgcj1BcnJheS5mcm9tKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGk9dHx8ZnQoZSk7cmV0dXJuIGk/KHIucHVzaC5hcHBseShyLEFycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpYS1saXZlXSwgc2NyaXB0YCkpKSx5dChyLGksbixgYXJpYS1oaWRkZW5gKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIHh0KGUpe2xldCB0O1YoKCk9PkRlKGUpLGU9PntsZXQgbj0hMTt0cnl7bj0hIWU/LmNsb3Nlc3QoYFtwb3BvdmVyXTpub3QoOnBvcG92ZXItb3BlbilgKX1jYXRjaHt9ZSYmIW4/dD1idChlKTp0JiZ0KCl9KSxDZSgoKT0+e3QmJnQoKX0pfWZ1bmN0aW9uIFN0KGUpe2xldCB0PUYoKSxuPU4oKCk9PnQudmFsdWU/LndpZHRoPz8wKSxyPU4oKCk9PnQudmFsdWU/LmhlaWdodD8/MCksaTtyZXR1cm4gTWUoKCk9PntsZXQgbj1EZShlKTtuPyh0LnZhbHVlPXt3aWR0aDpuLm9mZnNldFdpZHRoLGhlaWdodDpuLm9mZnNldEhlaWdodH0saT1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuO2xldCByPWVbMF0saSxhO2lmKGBib3JkZXJCb3hTaXplYGluIHIpe2xldCBlPXIuYm9yZGVyQm94U2l6ZSx0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO2k9dC5pbmxpbmVTaXplLGE9dC5ibG9ja1NpemV9ZWxzZSBpPW4ub2Zmc2V0V2lkdGgsYT1uLm9mZnNldEhlaWdodDt0LnZhbHVlPXt3aWR0aDppLGhlaWdodDphfX0pLGkub2JzZXJ2ZShuLHtib3g6YGJvcmRlci1ib3hgfSkpOnQudmFsdWU9dm9pZCAwfSksQ2UoKCk9PntpPy5kaXNjb25uZWN0KCksaT12b2lkIDB9KSx7d2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gQ3QoZSl7bGV0IHQ9WGUoYGAsMWUzKTtyZXR1cm57c2VhcmNoOnQsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOihuLHIpPT57aWYodC52YWx1ZSs9bixlKWUobik7ZWxzZXtsZXQgZT1tKCksbj1yLm1hcChlPT4oey4uLmUsdGV4dFZhbHVlOmUudmFsdWU/LnRleHRWYWx1ZT8/ZS5yZWYudGV4dENvbnRlbnQ/LnRyaW0oKT8/YGB9KSksaT1uLmZpbmQodD0+dC5yZWY9PT1lKSxhPVR0KG4ubWFwKGU9PmUudGV4dFZhbHVlKSx0LnZhbHVlLGk/LnRleHRWYWx1ZSksbz1uLmZpbmQoZT0+ZS50ZXh0VmFsdWU9PT1hKTtyZXR1cm4gbyYmby5yZWYuZm9jdXMoKSxvPy5yZWZ9fSxyZXNldFR5cGVhaGVhZDooKT0+e3QudmFsdWU9YGB9fX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWZ1bmN0aW9uIFR0KGUsdCxuKXtsZXQgcj10Lmxlbmd0aD4xJiZBcnJheS5mcm9tKHQpLmV2ZXJ5KGU9PmU9PT10WzBdKT90WzBdOnQsaT1uP2UuaW5kZXhPZihuKTotMSxhPXd0KGUsTWF0aC5tYXgoaSwwKSk7ci5sZW5ndGg9PT0xJiYoYT1hLmZpbHRlcihlPT5lIT09bikpO2xldCBvPWEuZmluZChlPT5lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChyLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gbz09PW4/dm9pZCAwOm99dmFyIEV0PWBkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZWAsRHQ9YGRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlYDtmdW5jdGlvbiBPdChlLHQpe2lmKCEodCBpbnN0YW5jZW9mIEVsZW1lbnQpKXJldHVybiExO2xldCBuPXQuY2xvc2VzdChgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCkscj1lLmRhdGFzZXQuZGlzbWlzc2FibGVMYXllcj09PWBgP2U6ZS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSxpPUFycmF5LmZyb20oZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApKTtyZXR1cm4hIShuJiYocj09PW58fGkuaW5kZXhPZihyKTxpLmluZGV4T2YobikpKX1mdW5jdGlvbiBrdChlLHQsbj0hMCl7bGV0IHI9dD8udmFsdWU/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXM/LmRvY3VtZW50LGk9RighMSksYT1GKCgpPT57fSk7cmV0dXJuIG5lKG89PntpZighaHx8IWcobikpcmV0dXJuO2xldCBzPWFzeW5jIG49PntsZXQgbz1uLnRhcmdldDtpZighKCF0Py52YWx1ZXx8IW8pKXtpZihPdCh0LnZhbHVlLG8pKXtpLnZhbHVlPSExO3JldHVybn1pZihuLnRhcmdldCYmIWkudmFsdWUpe2xldCB0PXtvcmlnaW5hbEV2ZW50Om59O2Z1bmN0aW9uIGkoKXskZShFdCxlLHQpfW4ucG9pbnRlclR5cGU9PT1gdG91Y2hgPyhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKSxhLnZhbHVlPWksci5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSx7b25jZTohMH0pKTppKCl9ZWxzZSByLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKTtpLnZhbHVlPSExfX0sYz13aW5kb3cuc2V0VGltZW91dCgoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcmRvd25gLHMpfSwwKTtvKCgpPT57d2luZG93LmNsZWFyVGltZW91dChjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJkb3duYCxzKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKX0pfSkse29uUG9pbnRlckRvd25DYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITApfX19ZnVuY3Rpb24gQXQoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUYoITEpO3JldHVybiBuZShhPT57aWYoIWh8fCFnKG4pKXJldHVybjtsZXQgbz1hc3luYyBuPT57aWYoIXQ/LnZhbHVlKXJldHVybjthd2FpdCBiZSgpLGF3YWl0IGJlKCk7bGV0IHI9bi50YXJnZXQ7IXQudmFsdWV8fCFyfHxPdCh0LnZhbHVlLHIpfHxuLnRhcmdldCYmIWkudmFsdWUmJiRlKER0LGUse29yaWdpbmFsRXZlbnQ6bn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG8pLGEoKCk9PnIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbykpfSkse29uRm9jdXNDYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITApfSxvbkJsdXJDYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITEpfX19dmFyIGp0PVIoe19fbmFtZTpgRGlzbWlzc2FibGVMYXllcmAscHJvcHM6e2Rpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9fSxlbWl0czpbYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgLGBmb2N1c091dHNpZGVgLGBpbnRlcmFjdE91dHNpZGVgLGBkaXNtaXNzYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2ZvcndhcmRSZWY6YSxjdXJyZW50RWxlbWVudDpvfT1yZSgpLHM9TigoKT0+by52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcy5kb2N1bWVudCksYz1OKCgpPT5ILmxheWVyc1Jvb3QpLGw9TigoKT0+by52YWx1ZT9BcnJheS5mcm9tKGMudmFsdWUpLmluZGV4T2Yoby52YWx1ZSk6LTEpLHU9TigoKT0+SC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPjApLGQ9TigoKT0+e2xldCBlPUFycmF5LmZyb20oYy52YWx1ZSksW3RdPVsuLi5ILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSksbj1lLmluZGV4T2YodCk7cmV0dXJuIGwudmFsdWU+PW59KSxmPWt0KGFzeW5jIGU9PntsZXQgdD1bLi4uSC5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFuLnByZXNlbnR8fCFkLnZhbHVlfHx0fHwocihgcG9pbnRlckRvd25PdXRzaWRlYCxlKSxyKGBpbnRlcmFjdE91dHNpZGVgLGUpLGF3YWl0IGJlKCksZS5kZWZhdWx0UHJldmVudGVkfHxyKGBkaXNtaXNzYCkpfSxvKSxwPUF0KGU9PntsZXQgdD1bLi4uSC5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFuLnByZXNlbnR8fHR8fChyKGBmb2N1c091dHNpZGVgLGUpLHIoYGludGVyYWN0T3V0c2lkZWAsZSksZS5kZWZhdWx0UHJldmVudGVkfHxyKGBkaXNtaXNzYCkpfSxvKTtyZXR1cm4gVChgRXNjYXBlYCxlPT57bi5wcmVzZW50JiZsLnZhbHVlPT09Yy52YWx1ZS5zaXplLTEmJihyKGBlc2NhcGVLZXlEb3duYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fHIoYGRpc21pc3NgKSl9KSxWKFtvLCgpPT5uLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cywoKT0+bi5wcmVzZW50XSwoW2UsdCxuXSxyLGkpPT57IWV8fCFufHx0JiYoSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKEgub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cz1zLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxzLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWApLEgubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuYWRkKGUpLGkoKCk9PntILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShlKSxILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYhb2UoSC5vcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzKSYmKHMudmFsdWUuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUgub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cyl9KSl9LHtpbW1lZGlhdGU6ITB9KSxWKFtvLCgpPT5uLnByZXNlbnRdLChbZSx0XSxuLHIpPT57IWV8fCF0fHwoYy52YWx1ZS5hZGQoZSkscigoKT0+e2MudmFsdWUuZGVsZXRlKGUpfSkpfSx7aW1tZWRpYXRlOiEwfSksbmUoZT0+e2UoKCk9PntvLnZhbHVlJiYoYy52YWx1ZS5kZWxldGUoby52YWx1ZSksSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoby52YWx1ZSkpfSl9KSwoZSx0KT0+KFAoKSxJKGIoaikse3JlZjpiKGEpLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImRhdGEtZGlzbWlzc2FibGUtbGF5ZXIiOmBgLHN0eWxlOmkoe3BvaW50ZXJFdmVudHM6dS52YWx1ZT9kLnZhbHVlP2BhdXRvYDpgbm9uZWA6dm9pZCAwfSksb25Gb2N1c0NhcHR1cmU6YihwKS5vbkZvY3VzQ2FwdHVyZSxvbkJsdXJDYXB0dXJlOmIocCkub25CbHVyQ2FwdHVyZSxvblBvaW50ZXJkb3duQ2FwdHVyZTpiKGYpLm9uUG9pbnRlckRvd25DYXB0dXJlfSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYHN0eWxlYCxgb25Gb2N1c0NhcHR1cmVgLGBvbkJsdXJDYXB0dXJlYCxgb25Qb2ludGVyZG93bkNhcHR1cmVgXSkpfX0pLE10PUQoKCk9PkYoW10pKTtmdW5jdGlvbiBOdCgpe2xldCBlPU10KCk7cmV0dXJue2FkZCh0KXtsZXQgbj1lLnZhbHVlWzBdO3QhPT1uJiZuPy5wYXVzZSgpLGUudmFsdWU9UHQoZS52YWx1ZSx0KSxlLnZhbHVlLnVuc2hpZnQodCl9LHJlbW92ZSh0KXtlLnZhbHVlPVB0KGUudmFsdWUsdCksZS52YWx1ZVswXT8ucmVzdW1lKCl9fX1mdW5jdGlvbiBQdChlLHQpe2xldCBuPVsuLi5lXSxyPW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiZuLnNwbGljZShyLDEpLG59dmFyIEZ0PWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnRgLEl0PWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudGAsTHQ9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH07ZnVuY3Rpb24gUnQoZSx7c2VsZWN0OnQ9ITF9PXt9KXtsZXQgbj1tKCk7Zm9yKGxldCByIG9mIGUpaWYoV3Qocix7c2VsZWN0OnR9KSxtKCkhPT1uKXJldHVybiEwfWZ1bmN0aW9uIHp0KGUpe2xldCB0PUJ0KGUpO3JldHVybltWdCh0LGUpLFZ0KHQucmV2ZXJzZSgpLGUpXX1mdW5jdGlvbiBCdChlKXtsZXQgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTplPT57bGV0IHQ9ZS50YWdOYW1lPT09YElOUFVUYCYmZS50eXBlPT09YGhpZGRlbmA7cmV0dXJuIGUuZGlzYWJsZWR8fGUuaGlkZGVufHx0P05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ZS50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspdC5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiB0fWZ1bmN0aW9uIFZ0KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYoIUh0KG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIEh0KGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PWBoaWRkZW5gKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PWBub25lYClyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmBzZWxlY3RgaW4gZX1mdW5jdGlvbiBXdChlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2xldCBuPW0oKTtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZSE9PW4mJlV0KGUpJiZ0JiZlLnNlbGVjdCgpfX12YXIgR3Q9Uih7X19uYW1lOmBGb2N1c1Njb3BlYCxwcm9wczp7bG9vcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LHRyYXBwZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxwcmVzZW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Btb3VudEF1dG9Gb2N1c2AsYHVubW91bnRBdXRvRm9jdXNgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgcj1lLGk9dCx7Y3VycmVudFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXJlKCkscz1GKG51bGwpLGM9TnQoKSxsPW4oe3BhdXNlZDohMSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX19KTtuZShlPT57aWYoIWgpcmV0dXJuO2xldCB0PW8udmFsdWU7aWYoIXIudHJhcHBlZClyZXR1cm47ZnVuY3Rpb24gbihlKXtpZihsLnBhdXNlZHx8IXQpcmV0dXJuO2xldCBuPWUudGFyZ2V0O3QuY29udGFpbnMobik/cy52YWx1ZT1uOld0KHMudmFsdWUse3NlbGVjdDohMH0pfWZ1bmN0aW9uIGkoZSl7aWYobC5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQ7biE9PW51bGwmJih0LmNvbnRhaW5zKG4pfHxXdChzLnZhbHVlLHtzZWxlY3Q6ITB9KSl9ZnVuY3Rpb24gYShlKXtsZXQgbj1zLnZhbHVlO24hPT1udWxsJiZlLnNvbWUoZT0+ZS5yZW1vdmVkTm9kZXMubGVuZ3RoPjApJiYodC5jb250YWlucyhuKXx8V3QodCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKTtsZXQgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihhKTt0JiZjLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNvdXRgLGkpLGMuZGlzY29ubmVjdCgpfSl9KTtmdW5jdGlvbiB1KGUsdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KEZ0LEx0KSxyPWU9PmkoYG1vdW50QXV0b0ZvY3VzYCxlKTtlLmFkZEV2ZW50TGlzdGVuZXIoRnQsciksZS5kaXNwYXRjaEV2ZW50KG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihGdCxyKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChSdChCdChlKSx7c2VsZWN0OiEwfSksbSgpPT09dCYmV3QoZSkpfW5lKGFzeW5jIGU9PntsZXQgdD1vLnZhbHVlO2lmKGF3YWl0IGJlKCksIXQpcmV0dXJuO3IucHJlc2VudCE9PSExJiZjLmFkZChsKTtsZXQgbj1tKCk7IXQuY29udGFpbnMobikmJnIucHJlc2VudCE9PSExJiZ1KHQsbiksZSgoKT0+e2xldCBlPW5ldyBDdXN0b21FdmVudChJdCxMdCkscj1lPT57aShgdW5tb3VudEF1dG9Gb2N1c2AsZSl9O3QuYWRkRXZlbnRMaXN0ZW5lcihJdCxyKSx0LmRpc3BhdGNoRXZlbnQoZSksdC5zZXRBdHRyaWJ1dGUoYGRhdGEtZm9jdXMtc2NvcGUtdW5tb3VudGluZ2AsYGApLHNldFRpbWVvdXQoKCk9PntlLmRlZmF1bHRQcmV2ZW50ZWR8fFd0KG4/P2RvY3VtZW50LmJvZHkse3NlbGVjdDohMH0pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihJdCxyKSxjLnJlbW92ZShsKSx0LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1mb2N1cy1zY29wZS11bm1vdW50aW5nYCl9LDApfSl9KSxWKCgpPT5yLnByZXNlbnQsYXN5bmMoZSx0KT0+e2lmKCFoKXJldHVybjtpZihlPT09ITEmJnQ9PT0hMCl7Yy5yZW1vdmUobCk7cmV0dXJufWlmKGUhPT0hMHx8dCE9PSExKXJldHVybjtjLmFkZChsKSxhd2FpdCBiZSgpO2xldCBuPW8udmFsdWU7aWYoIW4pcmV0dXJuO2xldCByPW0oKTtuLmNvbnRhaW5zKHIpfHx1KG4scil9KTtmdW5jdGlvbiBkKGUpe2lmKCFyLmxvb3AmJiFyLnRyYXBwZWR8fGwucGF1c2VkKXJldHVybjtsZXQgdD1lLmtleT09PWBUYWJgJiYhZS5hbHRLZXkmJiFlLmN0cmxLZXkmJiFlLm1ldGFLZXksbj1tKCk7aWYodCYmbil7bGV0IHQ9ZS5jdXJyZW50VGFyZ2V0LFtpLGFdPXp0KHQpO2kmJmE/IWUuc2hpZnRLZXkmJm49PT1hPyhlLnByZXZlbnREZWZhdWx0KCksci5sb29wJiZXdChpLHtzZWxlY3Q6ITB9KSk6ZS5zaGlmdEtleSYmbj09PWkmJihlLnByZXZlbnREZWZhdWx0KCksci5sb29wJiZXdChhLHtzZWxlY3Q6ITB9KSk6bj09PXQmJmUucHJldmVudERlZmF1bHQoKX19cmV0dXJuKGUsdCk9PihQKCksSShiKGopLHtyZWZfa2V5OmBjdXJyZW50UmVmYCxyZWY6YSx0YWJpbmRleDpgLTFgLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25LZXlkb3duOmR9LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYF0pKX19KSxLdD1bYEVudGVyYCxgIGBdLHF0PVtgQXJyb3dEb3duYCxgUGFnZVVwYCxgSG9tZWBdLEp0PVtgQXJyb3dVcGAsYFBhZ2VEb3duYCxgRW5kYF07Wy4uLnF0LC4uLkp0XSxbLi4uS3RdLFsuLi5LdF07ZnVuY3Rpb24gWXQoZSl7bGV0IHQ9bSgpO2ZvcihsZXQgbiBvZiBlKWlmKG49PT10fHwobi5mb2N1cygpLG0oKSE9PXQpKXJldHVybn12YXIgWHQ9Uih7X19uYW1lOmBUZWxlcG9ydGAscHJvcHM6e3RvOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmVyOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LHNldHVwKHQpe2xldCBuPXQscj1zKHt9KSxpPU4oKCk9Pm4udG8/P3IudGVsZXBvcnRUbz8udmFsdWU/P2Bib2R5YCksYT1FZSgpO3JldHVybih0LG4pPT5iKGEpfHx0LmZvcmNlTW91bnQ/KFAoKSxJKGUse2tleTowLHRvOmkudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZCxkZWZlcjp0LmRlZmVyfSxbeih0LiRzbG90cyxgZGVmYXVsdGApXSw4LFtgdG9gLGBkaXNhYmxlZGAsYGRlZmVyYF0pKTp6ZShgdi1pZmAsITApfX0pLFp0PVIoe19fbmFtZTpgVmlzdWFsbHlIaWRkZW5gLHByb3BzOntmZWF0dXJlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBmb2N1c2FibGVgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KFAoKSxJKGIoaikse2FzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsImFyaWEtaGlkZGVuIjplLmZlYXR1cmU9PT1gZm9jdXNhYmxlYHx8ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YHRydWVgOnZvaWQgMCwiZGF0YS1oaWRkZW4iOmUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2BgOnZvaWQgMCx0YWJpbmRleDplLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gLTFgOnZvaWQgMCxzdHlsZTp7cG9zaXRpb246YGFic29sdXRlYCxib3JkZXI6MCx3aWR0aDpgMXB4YCxoZWlnaHQ6YDFweGAscGFkZGluZzowLG1hcmdpbjpgLTFweGAsb3ZlcmZsb3c6YGhpZGRlbmAsY2xpcDpgcmVjdCgwLCAwLCAwLCAwKWAsY2xpcFBhdGg6YGluc2V0KDUwJSlgLHdoaXRlU3BhY2U6YG5vd3JhcGAsd29yZFdyYXA6YG5vcm1hbGAsdG9wOmAtMXB4YCxsZWZ0OmAtMXB4YH19LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgYXJpYS1oaWRkZW5gLGBkYXRhLWhpZGRlbmAsYHRhYmluZGV4YF0pKX19KSxbUXQsJHRdPWFlKGBQb3BwZXJSb290YCksZW49Uih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyUm9vdGAsc2V0dXAoZSl7bGV0IHQ9RigpO3JldHVybiAkdCh7YW5jaG9yOnQsb25BbmNob3JDaGFuZ2U6ZT0+dC52YWx1ZT1lfSksKGUsdCk9PnooZS4kc2xvdHMsYGRlZmF1bHRgKX19KSx0bj1SKHtfX25hbWU6YFBvcHBlckFuY2hvcmAscHJvcHM6e3JlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09cmUoKSxpPVF0KCk7cmV0dXJuIG8oKCk9PntpLm9uQW5jaG9yQ2hhbmdlKHQucmVmZXJlbmNlPz9yLnZhbHVlKX0pLChlLHQpPT4oUCgpLEkoYihqKSx7cmVmOmIobiksYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZH0se2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pO2Z1bmN0aW9uIG5uKGUpe3JldHVybiBlIT09bnVsbH1mdW5jdGlvbiBybihlKXtyZXR1cm57bmFtZTpgdHJhbnNmb3JtT3JpZ2luYCxvcHRpb25zOmUsZm4odCl7bGV0e3BsYWNlbWVudDpuLHJlY3RzOnIsbWlkZGxld2FyZURhdGE6aX09dCxhPWkuYXJyb3c/LmNlbnRlck9mZnNldCE9PTAsbz1hPzA6ZS5hcnJvd1dpZHRoLHM9YT8wOmUuYXJyb3dIZWlnaHQsW2MsbF09YW4obiksdT17c3RhcnQ6ZS5kaXI9PT1gcnRsYD9gMTAwJWA6YDAlYCxjZW50ZXI6YDUwJWAsZW5kOmUuZGlyPT09YHJ0bGA/YDAlYDpgMTAwJWB9W2xdLGQ9e3N0YXJ0OmAwJWAsY2VudGVyOmA1MCVgLGVuZDpgMTAwJWB9W2xdLGY9KGkuYXJyb3c/Lng/PzApK28vMixwPShpLmFycm93Py55Pz8wKStzLzIsbT1gYCxoPWBgO3JldHVybiBjPT09YGJvdHRvbWA/KG09YT91OmAke2Z9cHhgLGg9YCR7LXN9cHhgKTpjPT09YHRvcGA/KG09YT91OmAke2Z9cHhgLGg9YCR7ci5mbG9hdGluZy5oZWlnaHQrc31weGApOmM9PT1gcmlnaHRgPyhtPWAkey1zfXB4YCxoPWE/ZDpgJHtwfXB4YCk6Yz09PWBsZWZ0YCYmKG09YCR7ci5mbG9hdGluZy53aWR0aCtzfXB4YCxoPWE/ZDpgJHtwfXB4YCkse2RhdGE6e3g6bSx5Omh9fX19fWZ1bmN0aW9uIGFuKGUpe2xldFt0LG49YGNlbnRlcmBdPWUuc3BsaXQoYC1gKTtyZXR1cm5bdCxuXX12YXIgb249W2B0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXSxzbj1NYXRoLm1pbixjbj1NYXRoLm1heCxsbj1NYXRoLnJvdW5kLHVuPU1hdGguZmxvb3IsZG49ZT0+KHt4OmUseTplfSksZm49e2xlZnQ6YHJpZ2h0YCxyaWdodDpgbGVmdGAsYm90dG9tOmB0b3BgLHRvcDpgYm90dG9tYH07ZnVuY3Rpb24gcG4oZSx0LG4pe3JldHVybiBjbihlLHNuKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiBobihlKXtyZXR1cm4gZS5zcGxpdChgLWApWzBdfWZ1bmN0aW9uIGduKGUpe3JldHVybiBlLnNwbGl0KGAtYClbMV19ZnVuY3Rpb24gX24oZSl7cmV0dXJuIGU9PT1geGA/YHlgOmB4YH1mdW5jdGlvbiB2bihlKXtyZXR1cm4gZT09PWB5YD9gaGVpZ2h0YDpgd2lkdGhgfWZ1bmN0aW9uIHluKGUpe2xldCB0PWVbMF07cmV0dXJuIHQ9PT1gdGB8fHQ9PT1gYmA/YHlgOmB4YH1mdW5jdGlvbiBibihlKXtyZXR1cm4gX24oeW4oZSkpfWZ1bmN0aW9uIHhuKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7bGV0IHI9Z24oZSksaT1ibihlKSxhPXZuKGkpLG89aT09PWB4YD9yPT09KG4/YGVuZGA6YHN0YXJ0YCk/YHJpZ2h0YDpgbGVmdGA6cj09PWBzdGFydGA/YGJvdHRvbWA6YHRvcGA7cmV0dXJuIHQucmVmZXJlbmNlW2FdPnQuZmxvYXRpbmdbYV0mJihvPUFuKG8pKSxbbyxBbihvKV19ZnVuY3Rpb24gU24oZSl7bGV0IHQ9QW4oZSk7cmV0dXJuW0NuKGUpLHQsQ24odCldfWZ1bmN0aW9uIENuKGUpe3JldHVybiBlLmluY2x1ZGVzKGBzdGFydGApP2UucmVwbGFjZShgc3RhcnRgLGBlbmRgKTplLnJlcGxhY2UoYGVuZGAsYHN0YXJ0YCl9dmFyIHduPVtgbGVmdGAsYHJpZ2h0YF0sVG49W2ByaWdodGAsYGxlZnRgXSxFbj1bYHRvcGAsYGJvdHRvbWBdLERuPVtgYm90dG9tYCxgdG9wYF07ZnVuY3Rpb24gT24oZSx0LG4pe3N3aXRjaChlKXtjYXNlYHRvcGA6Y2FzZWBib3R0b21gOnJldHVybiBuP3Q/VG46d246dD93bjpUbjtjYXNlYGxlZnRgOmNhc2VgcmlnaHRgOnJldHVybiB0P0VuOkRuO2RlZmF1bHQ6cmV0dXJuW119fWZ1bmN0aW9uIGtuKGUsdCxuLHIpe2xldCBpPWduKGUpLGE9T24oaG4oZSksbj09PWBzdGFydGAscik7cmV0dXJuIGkmJihhPWEubWFwKGU9PmUrYC1gK2kpLHQmJihhPWEuY29uY2F0KGEubWFwKENuKSkpKSxhfWZ1bmN0aW9uIEFuKGUpe2xldCB0PWhuKGUpO3JldHVybiBmblt0XStlLnNsaWNlKHQubGVuZ3RoKX1mdW5jdGlvbiBqbihlKXtyZXR1cm57dG9wOmUudG9wPz8wLHJpZ2h0OmUucmlnaHQ/PzAsYm90dG9tOmUuYm90dG9tPz8wLGxlZnQ6ZS5sZWZ0Pz8wfX1mdW5jdGlvbiBNbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBudW1iZXJgP3t0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX06am4oZSl9ZnVuY3Rpb24gTm4oZSl7bGV0e3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6aX09ZTtyZXR1cm57d2lkdGg6cixoZWlnaHQ6aSx0b3A6bixsZWZ0OnQscmlnaHQ6dCtyLGJvdHRvbTpuK2kseDp0LHk6bn19ZnVuY3Rpb24gUG4oZSx0LG4pe2xldHtyZWZlcmVuY2U6cixmbG9hdGluZzppfT1lLGE9eW4odCksbz1ibih0KSxzPXZuKG8pLGM9aG4odCksbD1hPT09YHlgLHU9ci54K3Iud2lkdGgvMi1pLndpZHRoLzIsZD1yLnkrci5oZWlnaHQvMi1pLmhlaWdodC8yLGY9cltzXS8yLWlbc10vMixwO3N3aXRjaChjKXtjYXNlYHRvcGA6cD17eDp1LHk6ci55LWkuaGVpZ2h0fTticmVhaztjYXNlYGJvdHRvbWA6cD17eDp1LHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlYHJpZ2h0YDpwPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZWBsZWZ0YDpwPXt4OnIueC1pLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpwPXt4OnIueCx5OnIueX19bGV0IG09Z24odCk7cmV0dXJuIG0mJihwW29dKz1mKihtPT09YGVuZGA/MTotMSkqKG4mJmw/LTE6MSkpLHB9YXN5bmMgZnVuY3Rpb24gRm4oZSx0KXt0PT09dm9pZCAwJiYodD17fSk7bGV0e3g6bix5OnIscGxhdGZvcm06aSxyZWN0czphLGVsZW1lbnRzOm8sc3RyYXRlZ3k6c309ZSx7Ym91bmRhcnk6Yz1gY2xpcHBpbmdBbmNlc3RvcnNgLHJvb3RCb3VuZGFyeTpsPWB2aWV3cG9ydGAsZWxlbWVudENvbnRleHQ6dT1gZmxvYXRpbmdgLGFsdEJvdW5kYXJ5OmQ9ITEscGFkZGluZzpmPTB9PW1uKHQsZSkscD1NbihmKSxtPW9bZD91PT09YGZsb2F0aW5nYD9gcmVmZXJlbmNlYDpgZmxvYXRpbmdgOnVdLGg9Tm4oYXdhaXQgaS5nZXRDbGlwcGluZ1JlY3Qoe2VsZW1lbnQ6YXdhaXQoaS5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmkuaXNFbGVtZW50KG0pKT8/ITA/bTptLmNvbnRleHRFbGVtZW50fHxhd2FpdChpLmdldERvY3VtZW50RWxlbWVudD09bnVsbD92b2lkIDA6aS5nZXREb2N1bWVudEVsZW1lbnQoby5mbG9hdGluZykpLGJvdW5kYXJ5OmMscm9vdEJvdW5kYXJ5Omwsc3RyYXRlZ3k6c30pKSxnPXU9PT1gZmxvYXRpbmdgP3t4Om4seTpyLHdpZHRoOmEuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmEuZmxvYXRpbmcuaGVpZ2h0fTphLnJlZmVyZW5jZSxfPWF3YWl0KGkuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChvLmZsb2F0aW5nKSksdj1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQoXykpJiZhd2FpdChpLmdldFNjYWxlPT1udWxsP3ZvaWQgMDppLmdldFNjYWxlKF8pKXx8e3g6MSx5OjF9LHk9Tm4oaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpvLHJlY3Q6ZyxvZmZzZXRQYXJlbnQ6XyxzdHJhdGVneTpzfSk6Zyk7cmV0dXJue3RvcDooaC50b3AteS50b3ArcC50b3ApL3YueSxib3R0b206KHkuYm90dG9tLWguYm90dG9tK3AuYm90dG9tKS92LnksbGVmdDooaC5sZWZ0LXkubGVmdCtwLmxlZnQpL3YueCxyaWdodDooeS5yaWdodC1oLnJpZ2h0K3AucmlnaHQpL3YueH19dmFyIEluPTUwLExuPWFzeW5jKGUsdCxuKT0+e2xldHtwbGFjZW1lbnQ6cj1gYm90dG9tYCxzdHJhdGVneTppPWBhYnNvbHV0ZWAsbWlkZGxld2FyZTphPVtdLHBsYXRmb3JtOm99PW4scz1vLmRldGVjdE92ZXJmbG93P286ey4uLm8sZGV0ZWN0T3ZlcmZsb3c6Rm59LGM9YXdhaXQoby5pc1JUTD09bnVsbD92b2lkIDA6by5pc1JUTCh0KSksbD1hd2FpdCBvLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dCxzdHJhdGVneTppfSkse3g6dSx5OmR9PVBuKGwscixjKSxmPXIscD0wLG09e307Zm9yKGxldCBuPTA7bjxhLmxlbmd0aDtuKyspe2xldCBoPWFbbl07aWYoIWgpY29udGludWU7bGV0e25hbWU6ZyxmbjpffT1oLHt4OnYseSxkYXRhOmIscmVzZXQ6eH09YXdhaXQgXyh7eDp1LHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTptLHJlY3RzOmwscGxhdGZvcm06cyxlbGVtZW50czp7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dH19KTt1PXY/P3UsZD15Pz9kLG1bZ109ey4uLm1bZ10sLi4uYn0seCYmcDxJbiYmKHArKyx0eXBlb2YgeD09YG9iamVjdGAmJih4LnBsYWNlbWVudCYmKGY9eC5wbGFjZW1lbnQpLHgucmVjdHMmJihsPXgucmVjdHM9PT0hMD9hd2FpdCBvLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dCxzdHJhdGVneTppfSk6eC5yZWN0cykse3g6dSx5OmR9PVBuKGwsZixjKSksbj0tMSl9cmV0dXJue3g6dSx5OmQscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTptfX0sUm49ZT0+KHtuYW1lOmBhcnJvd2Asb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOmEscGxhdGZvcm06byxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmN9PXQse2VsZW1lbnQ6bCxwYWRkaW5nOnU9MH09bW4oZSx0KXx8e307aWYobD09bnVsbClyZXR1cm57fTtsZXQgZD1Nbih1KSxmPXt4Om4seTpyfSxwPWJuKGkpLG09dm4ocCksaD1hd2FpdCBvLmdldERpbWVuc2lvbnMobCksZz1wPT09YHlgLF89Zz9gdG9wYDpgbGVmdGAsdj1nP2Bib3R0b21gOmByaWdodGAseT1nP2BjbGllbnRIZWlnaHRgOmBjbGllbnRXaWR0aGAsYj1hLnJlZmVyZW5jZVttXSthLnJlZmVyZW5jZVtwXS1mW3BdLWEuZmxvYXRpbmdbbV0seD1mW3BdLWEucmVmZXJlbmNlW3BdLFM9YXdhaXQoby5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOm8uZ2V0T2Zmc2V0UGFyZW50KGwpKSxDPVM/U1t5XTowOyghQ3x8IWF3YWl0KG8uaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpvLmlzRWxlbWVudChTKSkpJiYoQz1zLmZsb2F0aW5nW3ldfHxhLmZsb2F0aW5nW21dKTtsZXQgdz1iLzIteC8yLFQ9Qy8yLWhbbV0vMi0xLEU9c24oZFtfXSxUKSxEPXNuKGRbdl0sVCksTz1DLWhbbV0tRCxrPUMvMi1oW21dLzIrdyxBPXBuKEUsayxPKSxlZT0hYy5hcnJvdyYmZ24oaSkhPW51bGwmJmshPT1BJiZhLnJlZmVyZW5jZVttXS8yLShrPEU/RTpEKS1oW21dLzI8MCx0ZT1lZT9rPEU/ay1FOmstTzowO3JldHVybntbcF06ZltwXSt0ZSxkYXRhOntbcF06QSxjZW50ZXJPZmZzZXQ6ay1BLXRlLC4uLmVlJiZ7YWxpZ25tZW50T2Zmc2V0OnRlfX0scmVzZXQ6ZWV9fX0pLHpuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YGZsaXBgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbjtsZXR7cGxhY2VtZW50OnIsbWlkZGxld2FyZURhdGE6aSxyZWN0czphLGluaXRpYWxQbGFjZW1lbnQ6byxwbGF0Zm9ybTpzLGVsZW1lbnRzOmN9PXQse21haW5BeGlzOmw9ITAsY3Jvc3NBeGlzOnU9ITAsZmFsbGJhY2tQbGFjZW1lbnRzOmQsZmFsbGJhY2tTdHJhdGVneTpmPWBiZXN0Rml0YCxmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uOnA9YG5vbmVgLGZsaXBBbGlnbm1lbnQ6bT0hMCwuLi5ofT1tbihlLHQpO2lmKChuPWkuYXJyb3cpIT1udWxsJiZuLmFsaWdubWVudE9mZnNldClyZXR1cm57fTtsZXQgZz1obihyKSxfPXluKG8pLHY9aG4obyk9PT1vLHk9YXdhaXQocy5pc1JUTD09bnVsbD92b2lkIDA6cy5pc1JUTChjLmZsb2F0aW5nKSksYj1kfHwodnx8IW0/W0FuKG8pXTpTbihvKSkseD1wIT09YG5vbmVgOyFkJiZ4JiZiLnB1c2goLi4ua24obyxtLHAseSkpO2xldCBTPVtvLC4uLmJdLEM9YXdhaXQgcy5kZXRlY3RPdmVyZmxvdyh0LGgpLHc9W10sVD1pLmZsaXA/Lm92ZXJmbG93c3x8W107aWYobCYmdy5wdXNoKENbZ10pLHUpe2xldCBlPXhuKHIsYSx5KTt3LnB1c2goQ1tlWzBdXSxDW2VbMV1dKX1pZihUPVsuLi5ULHtwbGFjZW1lbnQ6cixvdmVyZmxvd3M6d31dLCF3LmV2ZXJ5KGU9PmU8PTApKXtsZXQgZT0oaS5mbGlwPy5pbmRleHx8MCkrMSx0PVNbZV07aWYodCYmKHUhPT1gYWxpZ25tZW50YHx8Xz09PXluKHQpfHxULmV2ZXJ5KGU9PnluKGUucGxhY2VtZW50KSE9PV98fGUub3ZlcmZsb3dzWzBdPjApKSlyZXR1cm57ZGF0YTp7aW5kZXg6ZSxvdmVyZmxvd3M6VH0scmVzZXQ6e3BsYWNlbWVudDp0fX07bGV0IG49VC5maWx0ZXIoZT0+ZS5vdmVyZmxvd3NbMF08PTApLnNvcnQoKGUsdCk9PmUub3ZlcmZsb3dzWzFdLXQub3ZlcmZsb3dzWzFdKVswXT8ucGxhY2VtZW50O2lmKCFuKXN3aXRjaChmKXtjYXNlYGJlc3RGaXRgOntsZXQgZT1ULmZpbHRlcihlPT57aWYoeCl7bGV0IHQ9eW4oZS5wbGFjZW1lbnQpO3JldHVybiB0PT09X3x8dD09PWB5YH1yZXR1cm4hMH0pLm1hcChlPT5bZS5wbGFjZW1lbnQsZS5vdmVyZmxvd3MuZmlsdGVyKGU9PmU+MCkucmVkdWNlKChlLHQpPT5lK3QsMCldKS5zb3J0KChlLHQpPT5lWzFdLXRbMV0pWzBdPy5bMF07ZSYmKG49ZSk7YnJlYWt9Y2FzZWBpbml0aWFsUGxhY2VtZW50YDpuPW99aWYociE9PW4pcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6bn19fXJldHVybnt9fX19O2Z1bmN0aW9uIEJuKGUsdCl7cmV0dXJue3RvcDplLnRvcC10LmhlaWdodCxyaWdodDplLnJpZ2h0LXQud2lkdGgsYm90dG9tOmUuYm90dG9tLXQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LXQud2lkdGh9fWZ1bmN0aW9uIFZuKGUpe3JldHVybiBvbi5zb21lKHQ9PmVbdF0+PTApfXZhciBIbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBoaWRlYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3JlY3RzOm4scGxhdGZvcm06cn09dCx7c3RyYXRlZ3k6aT1gcmVmZXJlbmNlSGlkZGVuYCwuLi5hfT1tbihlLHQpO3N3aXRjaChpKXtjYXNlYHJlZmVyZW5jZUhpZGRlbmA6e2xldCBlPUJuKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxlbGVtZW50Q29udGV4dDpgcmVmZXJlbmNlYH0pLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czplLHJlZmVyZW5jZUhpZGRlbjpWbihlKX19fWNhc2VgZXNjYXBlZGA6e2xldCBlPUJuKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxhbHRCb3VuZGFyeTohMH0pLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czplLGVzY2FwZWQ6Vm4oZSl9fX1kZWZhdWx0OnJldHVybnt9fX19fSxVbj1uZXcgU2V0KFtgbGVmdGAsYHRvcGBdKTthc3luYyBmdW5jdGlvbiBXbihlLHQpe2xldHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PWUsYT1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKSxvPWhuKG4pLHM9Z24obiksYz15bihuKT09PWB5YCxsPVVuLmhhcyhvKT8tMToxLHU9YSYmYz8tMToxLGQ9bW4odCxlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOm19PXR5cGVvZiBkPT1gbnVtYmVyYD97bWFpbkF4aXM6ZCxjcm9zc0F4aXM6MCxhbGlnbm1lbnRBeGlzOm51bGx9OnttYWluQXhpczpkLm1haW5BeGlzfHwwLGNyb3NzQXhpczpkLmNyb3NzQXhpc3x8MCxhbGlnbm1lbnRBeGlzOmQuYWxpZ25tZW50QXhpc307cmV0dXJuIHMmJnR5cGVvZiBtPT1gbnVtYmVyYCYmKHA9cz09PWBlbmRgP20qLTE6bSksYz97eDpwKnUseTpmKmx9Ont4OmYqbCx5OnAqdX19dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSx7bmFtZTpgb2Zmc2V0YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG47bGV0e3g6cix5OmkscGxhY2VtZW50OmEsbWlkZGxld2FyZURhdGE6b309dCxzPWF3YWl0IFduKHQsZSk7cmV0dXJuIGE9PT1vLm9mZnNldD8ucGxhY2VtZW50JiYobj1vLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQ/e306e3g6citzLngseTppK3MueSxkYXRhOnsuLi5zLHBsYWNlbWVudDphfX19fX0sS249ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2hpZnRgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxwbGF0Zm9ybTphfT10LHttYWluQXhpczpvPSEwLGNyb3NzQXhpczpzPSExLGxpbWl0ZXI6Yz17Zm46ZT0+e2xldHt4OnQseTpufT1lO3JldHVybnt4OnQseTpufX19LC4uLmx9PW1uKGUsdCksdT17eDpuLHk6cn0sZD1hd2FpdCBhLmRldGVjdE92ZXJmbG93KHQsbCksZj15bihpKSxwPV9uKGYpLG09dVtwXSxoPXVbZl0sZz0oZSx0KT0+cG4odCtkW2U9PT1geWA/YHRvcGA6YGxlZnRgXSx0LHQtZFtlPT09YHlgP2Bib3R0b21gOmByaWdodGBdKTtvJiYobT1nKHAsbSkpLHMmJihoPWcoZixoKSk7bGV0IF89Yy5mbih7Li4udCxbcF06bSxbZl06aH0pO3JldHVybnsuLi5fLGRhdGE6e3g6Xy54LW4seTpfLnktcixlbmFibGVkOntbcF06byxbZl06c319fX19fSxxbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtvcHRpb25zOmUsZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxtaWRkbGV3YXJlRGF0YTpvfT10LHtvZmZzZXQ6cz0wLG1haW5BeGlzOmM9ITAsY3Jvc3NBeGlzOmw9ITB9PW1uKGUsdCksdT17eDpuLHk6cn0sZD15bihpKSxmPV9uKGQpLHA9dVtmXSxtPXVbZF0saD1tbihzLHQpLGc9dHlwZW9mIGg9PWBudW1iZXJgP3ttYWluQXhpczpoLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6aC5tYWluQXhpcz8/MCxjcm9zc0F4aXM6aC5jcm9zc0F4aXM/PzB9O2lmKGMpe2xldCBlPWY9PT1geWA/YGhlaWdodGA6YHdpZHRoYCx0PWEucmVmZXJlbmNlW2ZdLWEuZmxvYXRpbmdbZV0rZy5tYWluQXhpcyxuPWEucmVmZXJlbmNlW2ZdK2EucmVmZXJlbmNlW2VdLWcubWFpbkF4aXM7cDx0P3A9dDpwPm4mJihwPW4pfWlmKGwpe2xldCBlPWY9PT1geWA/YHdpZHRoYDpgaGVpZ2h0YCx0PVVuLmhhcyhobihpKSksbj1hLnJlZmVyZW5jZVtkXS1hLmZsb2F0aW5nW2VdKyh0JiZvLm9mZnNldD8uW2RdfHwwKSsodD8wOmcuY3Jvc3NBeGlzKSxyPWEucmVmZXJlbmNlW2RdK2EucmVmZXJlbmNlW2VdKyh0PzA6by5vZmZzZXQ/LltkXXx8MCktKHQ/Zy5jcm9zc0F4aXM6MCk7bTxuP209bjptPnImJihtPXIpfXJldHVybntbZl06cCxbZF06bX19fX0sSm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2l6ZWAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOmksZWxlbWVudHM6YX09dCx7YXBwbHk6bz0oKT0+e30sLi4uc309bW4oZSx0KSxjPWF3YWl0IGkuZGV0ZWN0T3ZlcmZsb3codCxzKSxsPWhuKG4pLHU9Z24obiksZD15bihuKT09PWB5YCx7d2lkdGg6ZixoZWlnaHQ6cH09ci5mbG9hdGluZyxtLGg7bD09PWB0b3BgfHxsPT09YGJvdHRvbWA/KG09bCxoPXU9PT0oYXdhaXQoaS5pc1JUTD09bnVsbD92b2lkIDA6aS5pc1JUTChhLmZsb2F0aW5nKSk/YHN0YXJ0YDpgZW5kYCk/YGxlZnRgOmByaWdodGApOihoPWwsbT11PT09YGVuZGA/YHRvcGA6YGJvdHRvbWApO2xldCBnPXAtYy50b3AtYy5ib3R0b20sXz1mLWMubGVmdC1jLnJpZ2h0LHY9c24ocC1jW21dLGcpLHk9c24oZi1jW2hdLF8pLGI9dC5taWRkbGV3YXJlRGF0YS5zaGlmdCx4PSFiLFM9dixDPXk7YiE9bnVsbCYmYi5lbmFibGVkLngmJihDPV8pLGIhPW51bGwmJmIuZW5hYmxlZC55JiYoUz1nKSx4JiYhdSYmKGQ/Qz1mLTIqY24oYy5sZWZ0LGMucmlnaHQpOlM9cC0yKmNuKGMudG9wLGMuYm90dG9tKSksYXdhaXQgbyh7Li4udCxhdmFpbGFibGVXaWR0aDpDLGF2YWlsYWJsZUhlaWdodDpTfSk7bGV0IHc9YXdhaXQgaS5nZXREaW1lbnNpb25zKGEuZmxvYXRpbmcpO3JldHVybiBmIT09dy53aWR0aHx8cCE9PXcuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiBZbigpe3JldHVybiB0eXBlb2Ygd2luZG93PGB1YH1mdW5jdGlvbiBYbihlKXtyZXR1cm4gJG4oZSk/KGUubm9kZU5hbWV8fGBgKS50b0xvd2VyQ2FzZSgpOmAjZG9jdW1lbnRgfWZ1bmN0aW9uIFpuKGUpe3ZhciB0O3JldHVybihlPT1udWxsfHwodD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIFFuKGUpe3JldHVybigoJG4oZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPy5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIFluKCk/ZSBpbnN0YW5jZW9mIE5vZGV8fGUgaW5zdGFuY2VvZiBabihlKS5Ob2RlOiExfWZ1bmN0aW9uIGVyKGUpe3JldHVybiBZbigpP2UgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2YgWm4oZSkuRWxlbWVudDohMX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gWW4oKT9lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBabihlKS5IVE1MRWxlbWVudDohMX1mdW5jdGlvbiBucihlKXtyZXR1cm4hWW4oKXx8dHlwZW9mIFNoYWRvd1Jvb3Q+YHVgPyExOmUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgWm4oZSkuU2hhZG93Um9vdH1mdW5jdGlvbiBycihlKXtsZXR7b3ZlcmZsb3c6dCxvdmVyZmxvd1g6bixvdmVyZmxvd1k6cixkaXNwbGF5Oml9PW1yKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KHQrcituKSYmaSE9PWBpbmxpbmVgJiZpIT09YGNvbnRlbnRzYH1mdW5jdGlvbiBpcihlKXtyZXR1cm4vXih0YWJsZXx0ZHx0aCkkLy50ZXN0KFhuKGUpKX1mdW5jdGlvbiBhcihlKXt0cnl7aWYoZS5tYXRjaGVzKGA6cG9wb3Zlci1vcGVuYCkpcmV0dXJuITB9Y2F0Y2h7fXRyeXtyZXR1cm4gZS5tYXRjaGVzKGA6bW9kYWxgKX1jYXRjaHtyZXR1cm4hMX19dmFyIG9yPS90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvLHNyPS9wYWludHxsYXlvdXR8c3RyaWN0fGNvbnRlbnQvLGNyPWU9PiEhZSYmZSE9PWBub25lYCxscjtmdW5jdGlvbiB1cihlKXtsZXQgdD1lcihlKT9tcihlKTplO3JldHVybiBjcih0LnRyYW5zZm9ybSl8fGNyKHQudHJhbnNsYXRlKXx8Y3IodC5zY2FsZSl8fGNyKHQucm90YXRlKXx8Y3IodC5wZXJzcGVjdGl2ZSl8fCFmcigpJiYoY3IodC5iYWNrZHJvcEZpbHRlcil8fGNyKHQuZmlsdGVyKSl8fG9yLnRlc3QodC53aWxsQ2hhbmdlfHxgYCl8fHNyLnRlc3QodC5jb250YWlufHxgYCl9ZnVuY3Rpb24gZHIoZSl7bGV0IHQ9Z3IoZSk7Zm9yKDt0cih0KSYmIXByKHQpOyl7aWYodXIodCkpcmV0dXJuIHQ7aWYoYXIodCkpcmV0dXJuIG51bGw7dD1ncih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmcigpe3JldHVybiBscj8/PXR5cGVvZiBDU1M8YHVgJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cyhgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJgLGBub25lYCksbHJ9ZnVuY3Rpb24gcHIoZSl7cmV0dXJuL14oaHRtbHxib2R5fCNkb2N1bWVudCkkLy50ZXN0KFhuKGUpKX1mdW5jdGlvbiBtcihlKXtyZXR1cm4gWm4oZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBocihlKXtyZXR1cm4gZXIoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIGdyKGUpe2lmKFhuKGUpPT09YGh0bWxgKXJldHVybiBlO2xldCB0PWUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGV8fG5yKGUpJiZlLmhvc3R8fFFuKGUpO3JldHVybiBucih0KT90Lmhvc3Q6dH1mdW5jdGlvbiBfcihlKXtsZXQgdD1ncihlKTtyZXR1cm4gcHIodCk/KGUub3duZXJEb2N1bWVudHx8ZSkuYm9keTp0cih0KSYmcnIodCk/dDpfcih0KX1mdW5jdGlvbiB2cihlLHQsbil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPSEwKTtsZXQgcj1fcihlKSxpPXI9PT1lLm93bmVyRG9jdW1lbnQ/LmJvZHksYT1abihyKTtpZihpKXtsZXQgZT15cihhKTtyZXR1cm4gdC5jb25jYXQoYSxhLnZpc3VhbFZpZXdwb3J0fHxbXSxycihyKT9yOltdLGUmJm4/dnIoZSk6W10pfXJldHVybiB0LmNvbmNhdChyLHZyKHIsW10sbikpfWZ1bmN0aW9uIHlyKGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWZ1bmN0aW9uIGJyKGUpe2xldCB0PW1yKGUpLG49cGFyc2VGbG9hdCh0LndpZHRoKXx8MCxyPXBhcnNlRmxvYXQodC5oZWlnaHQpfHwwLGk9dHIoZSksYT1pP2Uub2Zmc2V0V2lkdGg6bixvPWk/ZS5vZmZzZXRIZWlnaHQ6cixzPWxuKG4pIT09YXx8bG4ocikhPT1vO3JldHVybiBzJiYobj1hLHI9bykse3dpZHRoOm4saGVpZ2h0OnIsJDpzfX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZXIoZSk/ZTplLmNvbnRleHRFbGVtZW50fWZ1bmN0aW9uIFNyKGUpe2xldCB0PXhyKGUpO2lmKCF0cih0KSlyZXR1cm4gZG4oMSk7bGV0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6aSwkOmF9PWJyKHQpLG89KGE/bG4obi53aWR0aCk6bi53aWR0aCkvcixzPShhP2xuKG4uaGVpZ2h0KTpuLmhlaWdodCkvaTtyZXR1cm4oIW98fCFOdW1iZXIuaXNGaW5pdGUobykpJiYobz0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpvLHk6c319dmFyIENyPWRuKDApO2Z1bmN0aW9uIHdyKGUpe2xldCB0PVpuKGUpO3JldHVybiFmcigpfHwhdC52aXN1YWxWaWV3cG9ydD9Dcjp7eDp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQseTp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcH19ZnVuY3Rpb24gVHIoZSx0LG4pe3JldHVybiB0PT09dm9pZCAwJiYodD0hMSksISFuJiZ0JiZuPT09Wm4oZSl9ZnVuY3Rpb24gRXIoZSx0LG4scil7dD09PXZvaWQgMCYmKHQ9ITEpLG49PT12b2lkIDAmJihuPSExKTtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9eHIoZSksbz1kbigxKTt0JiYocj9lcihyKSYmKG89U3IocikpOm89U3IoZSkpO2xldCBzPVRyKGEsbixyKT93cihhKTpkbigwKSxjPShpLmxlZnQrcy54KS9vLngsbD0oaS50b3Arcy55KS9vLnksdT1pLndpZHRoL28ueCxkPWkuaGVpZ2h0L28ueTtpZihhJiZyKXtsZXQgZT1abihhKSx0PWVyKHIpP1puKHIpOnIsbj1lLGk9eXIobik7Zm9yKDtpJiZ0IT09bjspe2xldCBlPVNyKGkpLHQ9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPW1yKGkpLGE9dC5sZWZ0KyhpLmNsaWVudExlZnQrcGFyc2VGbG9hdChyLnBhZGRpbmdMZWZ0KSkqZS54LG89dC50b3ArKGkuY2xpZW50VG9wK3BhcnNlRmxvYXQoci5wYWRkaW5nVG9wKSkqZS55O2MqPWUueCxsKj1lLnksdSo9ZS54LGQqPWUueSxjKz1hLGwrPW8sbj1abihpKSxpPXlyKG4pfX1yZXR1cm4gTm4oe3dpZHRoOnUsaGVpZ2h0OmQseDpjLHk6bH0pfWZ1bmN0aW9uIERyKGUsdCl7bGV0IG49aHIoZSkuc2Nyb2xsTGVmdDtyZXR1cm4gdD90LmxlZnQrbjpFcihRbihlKSkubGVmdCtufWZ1bmN0aW9uIE9yKGUsdCl7bGV0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDpuLmxlZnQrdC5zY3JvbGxMZWZ0LURyKGUsbikseTpuLnRvcCt0LnNjcm9sbFRvcH19ZnVuY3Rpb24ga3IoZSl7bGV0e2VsZW1lbnRzOnQscmVjdDpuLG9mZnNldFBhcmVudDpyLHN0cmF0ZWd5Oml9PWUsYT1pPT09YGZpeGVkYCxvPVFuKHIpLHM9dD9hcih0LmZsb2F0aW5nKTohMTtpZihyPT09b3x8cyYmYSlyZXR1cm4gbjtsZXQgYz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxsPWRuKDEpLHU9ZG4oMCksZD10cihyKTtpZigoZHx8IWEpJiYoKFhuKHIpIT09YGJvZHlgfHxycihvKSkmJihjPWhyKHIpKSxkKSl7bGV0IGU9RXIocik7bD1TcihyKSx1Lng9ZS54K3IuY2xpZW50TGVmdCx1Lnk9ZS55K3IuY2xpZW50VG9wfWxldCBmPW8mJiFkJiYhYT9PcihvLGMpOmRuKDApO3JldHVybnt3aWR0aDpuLndpZHRoKmwueCxoZWlnaHQ6bi5oZWlnaHQqbC55LHg6bi54KmwueC1jLnNjcm9sbExlZnQqbC54K3UueCtmLngseTpuLnkqbC55LWMuc2Nyb2xsVG9wKmwueSt1LnkrZi55fX1mdW5jdGlvbiBBcihlKXtyZXR1cm4gZS5nZXRDbGllbnRSZWN0cz9BcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSk6W119ZnVuY3Rpb24ganIoZSl7bGV0IHQ9aHIoZSksbj1lLm93bmVyRG9jdW1lbnQuYm9keSxyPWNuKGUuc2Nyb2xsV2lkdGgsZS5jbGllbnRXaWR0aCxuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgpLGk9Y24oZS5zY3JvbGxIZWlnaHQsZS5jbGllbnRIZWlnaHQsbi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQpLGE9LXQuc2Nyb2xsTGVmdCtEcihlKSxvPS10LnNjcm9sbFRvcDtyZXR1cm4gbXIobikuZGlyZWN0aW9uPT09YHJ0bGAmJihhKz1jbihlLmNsaWVudFdpZHRoLG4uY2xpZW50V2lkdGgpLXIpLHt3aWR0aDpyLGhlaWdodDppLHg6YSx5Om99fXZhciBNcj0yNTtmdW5jdGlvbiBOcihlLHQsbil7bj09PXZvaWQgMCYmKG49YHZpZXdwb3J0YCk7bGV0IHI9bj09PWBsYXlvdXRWaWV3cG9ydGAsaT1abihlKSxhPVFuKGUpLG89aS52aXN1YWxWaWV3cG9ydCxzPWEuY2xpZW50V2lkdGgsYz1hLmNsaWVudEhlaWdodCxsPTAsdT0wO2lmKG8pe2xldCBlPSFmcigpfHx0PT09YGZpeGVkYDtyP2V8fChsPS1vLm9mZnNldExlZnQsdT0tby5vZmZzZXRUb3ApOihzPW8ud2lkdGgsYz1vLmhlaWdodCxlJiYobD1vLm9mZnNldExlZnQsdT1vLm9mZnNldFRvcCkpfWlmKERyKGEpPD0wKXtsZXQgZT1hLm93bmVyRG9jdW1lbnQsdD1lLmJvZHksbj1nZXRDb21wdXRlZFN0eWxlKHQpLHI9ZS5jb21wYXRNb2RlPT09YENTUzFDb21wYXRgJiZwYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KXx8MCxpPU1hdGguYWJzKGEuY2xpZW50V2lkdGgtdC5jbGllbnRXaWR0aC1yKSxvPWdldENvbXB1dGVkU3R5bGUoYSkuc2Nyb2xsYmFyR3V0dGVyPT09YHN0YWJsZSBib3RoLWVkZ2VzYD9pLzI6aTtvPD1NciYmKHMtPW8pfXJldHVybnt3aWR0aDpzLGhlaWdodDpjLHg6bCx5OnV9fWZ1bmN0aW9uIFByKGUsdCl7bGV0IG49RXIoZSwhMCx0PT09YGZpeGVkYCkscj1uLnRvcCtlLmNsaWVudFRvcCxpPW4ubGVmdCtlLmNsaWVudExlZnQsYT1TcihlKTtyZXR1cm57d2lkdGg6ZS5jbGllbnRXaWR0aCphLngsaGVpZ2h0OmUuY2xpZW50SGVpZ2h0KmEueSx4OmkqYS54LHk6ciphLnl9fWZ1bmN0aW9uIEZyKGUsdCxuKXtsZXQgcjtpZih0PT09YHZpZXdwb3J0YHx8dD09PWBsYXlvdXRWaWV3cG9ydGApcj1OcihlLG4sdCk7ZWxzZSBpZih0PT09YGRvY3VtZW50YClyPWpyKFFuKGUpKTtlbHNlIGlmKGVyKHQpKXI9UHIodCxuKTtlbHNle2xldCBuPXdyKGUpO3I9e3g6dC54LW4ueCx5OnQueS1uLnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fXJldHVybiBObihyKX1mdW5jdGlvbiBJcihlLHQpe2xldCBuPXQuZ2V0KGUpO2lmKG4pcmV0dXJuIG47bGV0IHI9dnIoZSxbXSwhMSkuZmlsdGVyKGU9PmVyKGUpJiZYbihlKSE9PWBib2R5YCksaT1udWxsLGE9bXIoZSkucG9zaXRpb249PT1gZml4ZWRgLG89YT9ncihlKTplO2Zvcig7ZXIobykmJiFwcihvKTspe2xldCBlPW1yKG8pLHQ9dXIobyksbj1pP2kucG9zaXRpb246YT9gZml4ZWRgOmBgOyF0JiYobj09PWBmaXhlZGB8fG49PT1gYWJzb2x1dGVgJiZlLnBvc2l0aW9uPT09YHN0YXRpY2ApP3I9ci5maWx0ZXIoZT0+ZSE9PW8pOmk9ZSxvPWdyKG8pfXJldHVybiB0LnNldChlLHIpLHJ9ZnVuY3Rpb24gTHIoZSl7bGV0e2VsZW1lbnQ6dCxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Oml9PWUsYT1bLi4ubj09PWBjbGlwcGluZ0FuY2VzdG9yc2A/YXIodCk/W106SXIodCx0aGlzLl9jKTpbXS5jb25jYXQobikscl0sbz1Gcih0LGFbMF0saSkscz1vLnRvcCxjPW8ucmlnaHQsbD1vLmJvdHRvbSx1PW8ubGVmdDtmb3IobGV0IGU9MTtlPGEubGVuZ3RoO2UrKyl7bGV0IG49RnIodCxhW2VdLGkpO3M9Y24obi50b3AscyksYz1zbihuLnJpZ2h0LGMpLGw9c24obi5ib3R0b20sbCksdT1jbihuLmxlZnQsdSl9cmV0dXJue3dpZHRoOmMtdSxoZWlnaHQ6bC1zLHg6dSx5OnN9fWZ1bmN0aW9uIFJyKGUpe2xldHt3aWR0aDp0LGhlaWdodDpufT1icihlKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6bn19ZnVuY3Rpb24genIoZSx0LG4pe2xldCByPXRyKHQpLGk9UW4odCksYT1uPT09YGZpeGVkYCxvPUVyKGUsITAsYSx0KSxzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGM9ZG4oMCk7aWYoKHJ8fCFhKSYmKChYbih0KSE9PWBib2R5YHx8cnIoaSkpJiYocz1ocih0KSkscikpe2xldCBlPUVyKHQsITAsYSx0KTtjLng9ZS54K3QuY2xpZW50TGVmdCxjLnk9ZS55K3QuY2xpZW50VG9wfSFyJiZpJiYoYy54PURyKGkpKTtsZXQgbD1pJiYhciYmIWE/T3IoaSxzKTpkbigwKTtyZXR1cm57eDpvLmxlZnQrcy5zY3JvbGxMZWZ0LWMueC1sLngseTpvLnRvcCtzLnNjcm9sbFRvcC1jLnktbC55LHdpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0fX1mdW5jdGlvbiBCcihlKXtyZXR1cm4gbXIoZSkucG9zaXRpb249PT1gc3RhdGljYH1mdW5jdGlvbiBWcihlLHQpe2lmKCF0cihlKXx8bXIoZSkucG9zaXRpb249PT1gZml4ZWRgKXJldHVybiBudWxsO2lmKHQpcmV0dXJuIHQoZSk7bGV0IG49ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIFFuKGUpPT09biYmKG49bi5vd25lckRvY3VtZW50LmJvZHkpLG59ZnVuY3Rpb24gSHIoZSx0KXtsZXQgbj1abihlKTtpZihhcihlKSlyZXR1cm4gbjtpZighdHIoZSkpe2xldCB0PWdyKGUpO2Zvcig7dCYmIXByKHQpOyl7aWYoZXIodCkmJiFCcih0KSlyZXR1cm4gdDt0PWdyKHQpfXJldHVybiBufWxldCByPVZyKGUsdCk7Zm9yKDtyJiZpcihyKSYmQnIocik7KXI9VnIocix0KTtyZXR1cm4gciYmcHIocikmJkJyKHIpJiYhdXIocik/bjpyfHxkcihlKXx8bn12YXIgVXI9YXN5bmMgZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5nZXRPZmZzZXRQYXJlbnR8fEhyLG49dGhpcy5nZXREaW1lbnNpb25zLHI9YXdhaXQgbihlLmZsb2F0aW5nKTtyZXR1cm57cmVmZXJlbmNlOnpyKGUucmVmZXJlbmNlLGF3YWl0IHQoZS5mbG9hdGluZyksZS5zdHJhdGVneSksZmxvYXRpbmc6e3g6MCx5OjAsd2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9fX07ZnVuY3Rpb24gV3IoZSl7cmV0dXJuIG1yKGUpLmRpcmVjdGlvbj09PWBydGxgfXZhciBHcj17Y29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q6a3IsZ2V0RG9jdW1lbnRFbGVtZW50OlFuLGdldENsaXBwaW5nUmVjdDpMcixnZXRPZmZzZXRQYXJlbnQ6SHIsZ2V0RWxlbWVudFJlY3RzOlVyLGdldENsaWVudFJlY3RzOkFyLGdldERpbWVuc2lvbnM6UnIsZ2V0U2NhbGU6U3IsaXNFbGVtZW50OmVyLGlzUlRMOldyfTtmdW5jdGlvbiBLcihlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueSYmZS53aWR0aD09PXQud2lkdGgmJmUuaGVpZ2h0PT09dC5oZWlnaHR9ZnVuY3Rpb24gcXIoZSx0LG4pe2xldCByPW51bGwsaSxhPVFuKGUpO2Z1bmN0aW9uIG8oKXt2YXIgZTtjbGVhclRpbWVvdXQoaSksKGU9cik9PW51bGx8fGUuZGlzY29ubmVjdCgpLHI9bnVsbH1mdW5jdGlvbiBzKG4sYyl7bj09PXZvaWQgMCYmKG49ITEpLGM9PT12b2lkIDAmJihjPTEpLG8oKTtsZXQgbD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtsZWZ0OnUsdG9wOmQsd2lkdGg6ZixoZWlnaHQ6cH09bDtpZihufHx0KCksIWZ8fCFwKXJldHVybjtsZXQgbT11bihkKSxoPXVuKGEuY2xpZW50V2lkdGgtKHUrZikpLGc9dW4oYS5jbGllbnRIZWlnaHQtKGQrcCkpLF89dW4odSksdj17cm9vdE1hcmdpbjotbStgcHggYCstaCtgcHggYCstZytgcHggYCstXytgcHhgLHRocmVzaG9sZDpjbigwLHNuKDEsYykpfHwxfSx5PSEwO2Z1bmN0aW9uIGIodCl7bGV0IG49dFswXS5pbnRlcnNlY3Rpb25SYXRpbztpZighS3IobCxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSlyZXR1cm4gcygpO2lmKG4hPT1jKXtpZigheSlyZXR1cm4gcygpO24/cyghMSxuKTppPXNldFRpbWVvdXQoKCk9PntzKCExLDFlLTcpfSwxZTMpfXk9ITF9dHJ5e3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsey4uLnYscm9vdDphLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihiLHYpfXIub2JzZXJ2ZShlKX1sZXQgYz1abihlKSxsPSgpPT5zKG4pO3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCkscyghMCksKCk9PntjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCksbygpfX1mdW5jdGlvbiBKcihlLHQsbixyKXtyPT09dm9pZCAwJiYocj17fSk7bGV0e2FuY2VzdG9yU2Nyb2xsOmk9ITAsYW5jZXN0b3JSZXNpemU6YT0hMCxlbGVtZW50UmVzaXplOm89dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT1gZnVuY3Rpb25gLGxheW91dFNoaWZ0OnM9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT1gZnVuY3Rpb25gLGFuaW1hdGlvbkZyYW1lOmM9ITF9PXIsbD14cihlKSx1PWl8fGE/Wy4uLmw/dnIobCk6W10sLi4udD92cih0KTpbXV06W107dS5mb3JFYWNoKGU9PntpJiZlLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSk7bGV0IGQ9bCYmcz9xcihsLG4sYSk6bnVsbCxmPS0xLHA9bnVsbDtvJiYocD1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2xldFtyXT1lO3ImJnIudGFyZ2V0PT09bCYmcCYmdCYmKHAudW5vYnNlcnZlKHQpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpLGY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGU7KGU9cCk9PW51bGx8fGUub2JzZXJ2ZSh0KX0pKSxuKCl9KSxsJiYhYyYmcC5vYnNlcnZlKGwpLHQmJnAub2JzZXJ2ZSh0KSk7bGV0IG0saD1jP0VyKGUpOm51bGw7YyYmZygpO2Z1bmN0aW9uIGcoKXtsZXQgdD1FcihlKTtoJiYhS3IoaCx0KSYmbigpLGg9dCxtPXJlcXVlc3RBbmltYXRpb25GcmFtZShnKX1yZXR1cm4gbigpLCgpPT57dmFyIGU7dS5mb3JFYWNoKGU9PntpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSksZD8uKCksKGU9cCk9PW51bGx8fGUuZGlzY29ubmVjdCgpLHA9bnVsbCxjJiZjYW5jZWxBbmltYXRpb25GcmFtZShtKX19dmFyIFlyPUduLFhyPUtuLFpyPXpuLFFyPUpuLCRyPUhuLGVpPVJuLHRpPXFuLG5pPShlLHQsbik9PntsZXQgcj1uZXcgTWFwLGk9bj8/e30sYT17Li4uR3IsLi4uaS5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gTG4oZSx0LHsuLi5pLHBsYXRmb3JtOmF9KX07ZnVuY3Rpb24gcmkoZSl7cmV0dXJuIHR5cGVvZiBlPT1gb2JqZWN0YCYmISFlJiZgJGVsYGluIGV9ZnVuY3Rpb24gaWkoZSl7aWYocmkoZSkpe2xldCB0PWUuJGVsO3JldHVybiAkbih0KSYmWG4odCk9PT1gI2NvbW1lbnRgP251bGw6dH1yZXR1cm4gZX1mdW5jdGlvbiBhaShlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSgpOmIoZSl9ZnVuY3Rpb24gb2koZSl7cmV0dXJue25hbWU6YGFycm93YCxvcHRpb25zOmUsZm4odCl7bGV0IG49aWkoYWkoZS5lbGVtZW50KSk7cmV0dXJuIG49PW51bGw/e306ZWkoe2VsZW1lbnQ6bixwYWRkaW5nOmUucGFkZGluZ30pLmZuKHQpfX19ZnVuY3Rpb24gc2koZSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+YHVgPzE6KGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIGNpKGUsdCl7bGV0IG49c2koZSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufWZ1bmN0aW9uIGxpKGUsdCxuKXtuPT09dm9pZCAwJiYobj17fSk7bGV0IHI9bi53aGlsZUVsZW1lbnRzTW91bnRlZCxpPU4oKCk9PmFpKG4ub3Blbik/PyEwKSxhPU4oKCk9PmFpKG4ubWlkZGxld2FyZSkpLG89TigoKT0+YWkobi5wbGFjZW1lbnQpPz9gYm90dG9tYCkscz1OKCgpPT5haShuLnN0cmF0ZWd5KT8/YGFic29sdXRlYCksYz1OKCgpPT5haShuLnRyYW5zZm9ybSk/PyEwKSxsPU4oKCk9PmlpKGUudmFsdWUpKSxkPU4oKCk9PmlpKHQudmFsdWUpKSxmPUYoMCkscD1GKDApLG09RihzLnZhbHVlKSxoPUYoby52YWx1ZSksZz13KHt9KSxfPUYoITEpLHY9TigoKT0+e2xldCBlPXtwb3NpdGlvbjptLnZhbHVlLGxlZnQ6YDBgLHRvcDpgMGB9O2lmKCFkLnZhbHVlKXJldHVybiBlO2xldCB0PWNpKGQudmFsdWUsZi52YWx1ZSksbj1jaShkLnZhbHVlLHAudmFsdWUpO3JldHVybiBjLnZhbHVlP3suLi5lLHRyYW5zZm9ybTpgdHJhbnNsYXRlKGArdCtgcHgsIGArbitgcHgpYCwuLi5zaShkLnZhbHVlKT49MS41JiZ7d2lsbENoYW5nZTpgdHJhbnNmb3JtYH19Ontwb3NpdGlvbjptLnZhbHVlLGxlZnQ6dCtgcHhgLHRvcDpuK2BweGB9fSkseTtmdW5jdGlvbiBiKCl7aWYobC52YWx1ZT09bnVsbHx8ZC52YWx1ZT09bnVsbClyZXR1cm47bGV0IGU9aS52YWx1ZTtuaShsLnZhbHVlLGQudmFsdWUse21pZGRsZXdhcmU6YS52YWx1ZSxwbGFjZW1lbnQ6by52YWx1ZSxzdHJhdGVneTpzLnZhbHVlfSkudGhlbih0PT57Zi52YWx1ZT10LngscC52YWx1ZT10LnksbS52YWx1ZT10LnN0cmF0ZWd5LGgudmFsdWU9dC5wbGFjZW1lbnQsZy52YWx1ZT10Lm1pZGRsZXdhcmVEYXRhLF8udmFsdWU9ZSE9PSExfSl9ZnVuY3Rpb24geCgpe3R5cGVvZiB5PT1gZnVuY3Rpb25gJiYoeSgpLHk9dm9pZCAwKX1mdW5jdGlvbiBDKCl7aWYoeCgpLHI9PT12b2lkIDApe2IoKTtyZXR1cm59aWYobC52YWx1ZSE9bnVsbCYmZC52YWx1ZSE9bnVsbCl7eT1yKGwudmFsdWUsZC52YWx1ZSxiKTtyZXR1cm59fWZ1bmN0aW9uIFQoKXtpLnZhbHVlfHwoXy52YWx1ZT0hMSl9cmV0dXJuIFYoW2EsbyxzLGldLGIse2ZsdXNoOmBzeW5jYH0pLFYoW2wsZF0sQyx7Zmx1c2g6YHN5bmNgfSksVihpLFQse2ZsdXNoOmBzeW5jYH0pLHUoKSYmT2UoeCkse3g6UyhmKSx5OlMocCksc3RyYXRlZ3k6UyhtKSxwbGFjZW1lbnQ6UyhoKSxtaWRkbGV3YXJlRGF0YTpTKGcpLGlzUG9zaXRpb25lZDpTKF8pLGZsb2F0aW5nU3R5bGVzOnYsdXBkYXRlOmJ9fXZhciB1aT1bYGRpcmBdLGRpPXtzaWRlOmBib3R0b21gLHNpZGVPZmZzZXQ6MCxzaWRlRmxpcDohMCxhbGlnbjpgY2VudGVyYCxhbGlnbk9mZnNldDowLGFsaWduRmxpcDohMCxhcnJvd1BhZGRpbmc6MCxoaWRlU2hpZnRlZEFycm93OiEwLGF2b2lkQ29sbGlzaW9uczohMCxjb2xsaXNpb25Cb3VuZGFyeTooKT0+W10sY29sbGlzaW9uUGFkZGluZzowLHN0aWNreTpgcGFydGlhbGAsaGlkZVdoZW5EZXRhY2hlZDohMSxwb3NpdGlvblN0cmF0ZWd5OmBmaXhlZGAsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpgb3B0aW1pemVkYCxwcmlvcml0aXplUG9zaXRpb246ITF9LFtmaSxwaV09YWUoYFBvcHBlckNvbnRlbnRgKSxtaT1SKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBQb3BwZXJDb250ZW50YCxwcm9wczpXZSh7bWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHsuLi5kaX0pLGVtaXRzOltgcGxhY2VkYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsYT1RdCgpLHtmb3J3YXJkUmVmOnMsY3VycmVudEVsZW1lbnQ6Y309cmUoKSx1PWwoTigoKT0+bi5kaXIpKSxkPUYoKSxmPUYoKSx7d2lkdGg6cCxoZWlnaHQ6bX09U3QoZiksaD1OKCgpPT5uLnNpZGUrKG4uYWxpZ249PT1gY2VudGVyYD9gYDpgLSR7bi5hbGlnbn1gKSksZz1OKCgpPT50eXBlb2Ygbi5jb2xsaXNpb25QYWRkaW5nPT1gbnVtYmVyYD9uLmNvbGxpc2lvblBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLm4uY29sbGlzaW9uUGFkZGluZ30pLF89TigoKT0+QXJyYXkuaXNBcnJheShuLmNvbGxpc2lvbkJvdW5kYXJ5KT9uLmNvbGxpc2lvbkJvdW5kYXJ5OltuLmNvbGxpc2lvbkJvdW5kYXJ5XSksdj1OKCgpPT4oe3BhZGRpbmc6Zy52YWx1ZSxib3VuZGFyeTpfLnZhbHVlLmZpbHRlcihubiksYWx0Qm91bmRhcnk6Xy52YWx1ZS5sZW5ndGg+MH0pKSx5PU4oKCk9Pih7bWFpbkF4aXM6bi5zaWRlRmxpcCxjcm9zc0F4aXM6bi5hbGlnbkZsaXB9KSkseD1OKCgpPT5bWXIoe21haW5BeGlzOm4uc2lkZU9mZnNldCttLnZhbHVlLGFsaWdubWVudEF4aXM6bi5hbGlnbk9mZnNldH0pLG4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmWnIoey4uLnYudmFsdWUsLi4ueS52YWx1ZX0pLG4uYXZvaWRDb2xsaXNpb25zJiZYcih7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiEhbi5wcmlvcml0aXplUG9zaXRpb24sbGltaXRlcjpuLnN0aWNreT09PWBwYXJ0aWFsYD90aSgpOnZvaWQgMCwuLi52LnZhbHVlfSksIW4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmWnIoey4uLnYudmFsdWUsLi4ueS52YWx1ZX0pLFFyKHsuLi52LnZhbHVlLGFwcGx5Oih7ZWxlbWVudHM6ZSxyZWN0czp0LGF2YWlsYWJsZVdpZHRoOm4sYXZhaWxhYmxlSGVpZ2h0OnJ9KT0+e2xldHt3aWR0aDppLGhlaWdodDphfT10LnJlZmVyZW5jZSxvPWUuZmxvYXRpbmcuc3R5bGU7by5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hdmFpbGFibGUtd2lkdGhgLGAke259cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHRgLGAke3J9cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWFuY2hvci13aWR0aGAsYCR7aX1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLWhlaWdodGAsYCR7YX1weGApfX0pLGYudmFsdWUmJm9pKHtlbGVtZW50OmYudmFsdWUscGFkZGluZzpuLmFycm93UGFkZGluZ30pLHJuKHthcnJvd1dpZHRoOnAudmFsdWUsYXJyb3dIZWlnaHQ6bS52YWx1ZSxkaXI6dS52YWx1ZX0pLG4uaGlkZVdoZW5EZXRhY2hlZCYmJHIoe3N0cmF0ZWd5OmByZWZlcmVuY2VIaWRkZW5gLC4uLnYudmFsdWV9KV0pLHtmbG9hdGluZ1N0eWxlczpTLHBsYWNlbWVudDpDLGlzUG9zaXRpb25lZDp3LG1pZGRsZXdhcmVEYXRhOlQsdXBkYXRlOkV9PWxpKE4oKCk9Pm4ucmVmZXJlbmNlPz9hLmFuY2hvci52YWx1ZSksZCx7c3RyYXRlZ3k6bi5wb3NpdGlvblN0cmF0ZWd5LHBsYWNlbWVudDpoLHdoaWxlRWxlbWVudHNNb3VudGVkOiguLi5lKT0+SnIoLi4uZSx7bGF5b3V0U2hpZnQ6IW4uZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQsYW5pbWF0aW9uRnJhbWU6bi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5PT09YGFsd2F5c2B9KSxtaWRkbGV3YXJlOnh9KSxEPU4oKCk9PmFuKEMudmFsdWUpWzBdKSxPPU4oKCk9PmFuKEMudmFsdWUpWzFdKTtvKCgpPT57dy52YWx1ZSYmcihgcGxhY2VkYCl9KTtsZXQgaz1OKCgpPT57bGV0IGU9VC52YWx1ZS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MDtyZXR1cm4gbi5oaWRlU2hpZnRlZEFycm93JiZlfSksQT1GKGBgKTtyZXR1cm4gbmUoKCk9PntjLnZhbHVlJiYoQS52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjLnZhbHVlKS56SW5kZXgpfSkscGkoe3BsYWNlZFNpZGU6RCxvbkFycm93Q2hhbmdlOmU9PmYudmFsdWU9ZSxhcnJvd1g6TigoKT0+VC52YWx1ZS5hcnJvdz8ueD8/MCksYXJyb3dZOk4oKCk9PlQudmFsdWUuYXJyb3c/Lnk/PzApLHNob3VsZEhpZGVBcnJvdzprfSksKGUsdCk9PihQKCksVGUoYGRpdmAse3JlZl9rZXk6YGZsb2F0aW5nUmVmYCxyZWY6ZCwiZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXIiOmBgLGRpcjpiKHUpLHN0eWxlOmkoey4uLmIoUyksdHJhbnNmb3JtOmIodyk/YihTKS50cmFuc2Zvcm06YHRyYW5zbGF0ZSgwLCAtMjAwJSlgLG1pbldpZHRoOmBtYXgtY29udGVudGAsekluZGV4OkEudmFsdWUsIi0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6W2IoVCkudHJhbnNmb3JtT3JpZ2luPy54LGIoVCkudHJhbnNmb3JtT3JpZ2luPy55XS5qb2luKGAgYCksLi4uYihUKS5oaWRlPy5yZWZlcmVuY2VIaWRkZW4mJnt2aXNpYmlsaXR5OmBoaWRkZW5gLHBvaW50ZXJFdmVudHM6YG5vbmVgfX0pfSxbbi5tZW1vRGVwZW5kZW5jaWVzP2llKFtuLmFzQ2hpbGQsbi5hcyxELnZhbHVlLE8udmFsdWUsYih3KSwuLi5PYmplY3QudmFsdWVzKGUuJGF0dHJzKSwuLi5uLm1lbW9EZXBlbmRlbmNpZXNdLCgpPT4oUCgpLEkoYihqKSxNKHtrZXk6MCxyZWY6YihzKX0sZS4kYXR0cnMseyJhcy1jaGlsZCI6bi5hc0NoaWxkLGFzOm4uYXMsImRhdGEtc2lkZSI6RC52YWx1ZSwiZGF0YS1hbGlnbiI6Ty52YWx1ZSxzdHlsZTp7YW5pbWF0aW9uOmIodyk/dm9pZCAwOmBub25lYH19KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGFzLWNoaWxkYCxgYXNgLGBkYXRhLXNpZGVgLGBkYXRhLWFsaWduYCxgc3R5bGVgXSkpLHQsMCk6KFAoKSxJKGIoaiksTSh7a2V5OjEscmVmOmIocyl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczpuLmFzLCJkYXRhLXNpZGUiOkQudmFsdWUsImRhdGEtYWxpZ24iOk8udmFsdWUsZGlyOmIodSksc3R5bGU6e2FuaW1hdGlvbjpiKHcpP3ZvaWQgMDpgbm9uZWB9fSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2Bhcy1jaGlsZGAsYGFzYCxgZGF0YS1zaWRlYCxgZGF0YS1hbGlnbmAsYGRpcmAsYHN0eWxlYF0pKV0sMTIsdWkpKX19KTtmdW5jdGlvbiBoaShlKXtsZXQgdD1zKHtub25jZTpGKCl9KTtyZXR1cm4gTigoKT0+ZT8udmFsdWV8fHQubm9uY2U/LnZhbHVlKX12YXIgZ2k9W2AgYCxgRW50ZXJgLGBBcnJvd1VwYCxgQXJyb3dEb3duYF0sX2k9W2AgYCxgRW50ZXJgXTtmdW5jdGlvbiB2aShlLHQsbil7cmV0dXJuIGU9PT12b2lkIDA/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoZT0+eWkoZSx0LG4pKTp5aShlLHQsbil9ZnVuY3Rpb24geWkoZSx0LG4pe3JldHVybiBlPT09dm9pZCAwfHx0PT09dm9pZCAwPyExOnR5cGVvZiBlPT1gc3RyaW5nYD9lPT09dDp0eXBlb2Ygbj09YGZ1bmN0aW9uYD9uKGUsdCk6dHlwZW9mIG49PWBzdHJpbmdgP2U/LltuXT09PXQ/LltuXTpjZShlLHQpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB8fEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MH12YXIgeGk9W2B2YWx1ZWBdLFtTaSxDaV09YWUoYFNlbGVjdFJvb3RgKSx3aT1SKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RSb290YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxudWxsYWJsZVZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXSxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7cmVxdWlyZWQ6aSxkaXNhYmxlZDphLG11bHRpcGxlOm8sZGlyOnN9PWYobiksYz1DKG4sYG1vZGVsVmFsdWVgLHIse2RlZmF1bHRWYWx1ZTpuLmRlZmF1bHRWYWx1ZT8/KG8udmFsdWU/W106dm9pZCAwKSxwYXNzaXZlOm4ubW9kZWxWYWx1ZT09PXZvaWQgMCxkZWVwOiEwfSksdT1DKG4sYG9wZW5gLHIse2RlZmF1bHRWYWx1ZTpuLmRlZmF1bHRPcGVuLHBhc3NpdmU6bi5vcGVuPT09dm9pZCAwfSksZD1GKCkscD1GKCksbT1GKHt4OjAseTowfSksaD1OKCgpPT5vLnZhbHVlJiZBcnJheS5pc0FycmF5KGMudmFsdWUpP2MudmFsdWU/Lmxlbmd0aD09PTA6b2UoYy52YWx1ZSkpO0plKHtpc1Byb3ZpZGVyOiEwfSk7bGV0IGc9bChzKSxfPWR0KGQpLHY9RihuZXcgU2V0KSx5PU4oKCk9PkFycmF5LmZyb20odi52YWx1ZSkubWFwKGU9PmUudmFsdWUpLmpvaW4oYDtgKSk7ZnVuY3Rpb24geChlKXtpZihvLnZhbHVlKXtsZXQgdD1BcnJheS5pc0FycmF5KGMudmFsdWUpP1suLi5jLnZhbHVlXTpbXSxyPXQuZmluZEluZGV4KHQ9PnlpKHQsZSxuLmJ5KSk7cj09PS0xP3QucHVzaChlKTp0LnNwbGljZShyLDEpLGMudmFsdWU9Wy4uLnRdfWVsc2UgYy52YWx1ZT1lfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIEFycmF5LmZyb20odi52YWx1ZSkuZmluZCh0PT52aShlLHQudmFsdWUsbi5ieSkpfXJldHVybiBDaSh7dHJpZ2dlckVsZW1lbnQ6ZCxvblRyaWdnZXJDaGFuZ2U6ZT0+e2QudmFsdWU9ZX0sdmFsdWVFbGVtZW50OnAsb25WYWx1ZUVsZW1lbnRDaGFuZ2U6ZT0+e3AudmFsdWU9ZX0sY29udGVudElkOmBgLG1vZGVsVmFsdWU6YyxvblZhbHVlQ2hhbmdlOngsYnk6bi5ieSxvcGVuOnUsbXVsdGlwbGU6byxyZXF1aXJlZDppLG9uT3BlbkNoYW5nZTplPT57dS52YWx1ZT1lfSxkaXI6Zyx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6bSxkaXNhYmxlZDphLGlzRW1wdHlNb2RlbFZhbHVlOmgsb3B0aW9uc1NldDp2LG9uT3B0aW9uQWRkOmU9PntsZXQgdD1TKGUudmFsdWUpO3QmJnYudmFsdWUuZGVsZXRlKHQpLHYudmFsdWUuYWRkKGUpfSxvbk9wdGlvblJlbW92ZTplPT57bGV0IHQ9UyhlLnZhbHVlKTt0JiZ2LnZhbHVlLmRlbGV0ZSh0KX19KSwoZSx0KT0+KFAoKSxJKGIoZW4pLG51bGwse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOmIoYyksb3BlbjpiKHUpfSksYihfKSYmZS5uYW1lPyhQKCksSShUaSx7a2V5OnkudmFsdWUsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsdGFiaW5kZXg6YC0xYCxtdWx0aXBsZTpiKG8pLHJlcXVpcmVkOmIoaSksbmFtZTplLm5hbWUsYXV0b2NvbXBsZXRlOmUuYXV0b2NvbXBsZXRlLGRpc2FibGVkOmIoYSksdmFsdWU6YihjKX0se2RlZmF1bHQ6QigoKT0+W2Iob2UpKGIoYykpPyhQKCksVGUoYG9wdGlvbmAse2tleTowLHZhbHVlOmUubnVsbGFibGVWYWx1ZX0sbnVsbCw4LHhpKSk6emUoYHYtaWZgLCEwKSwoUCghMCksVGUoayxudWxsLHBlKEFycmF5LmZyb20odi52YWx1ZSksZT0+KFAoKSxUZShgb3B0aW9uYCxNKHtrZXk6ZS52YWx1ZT8/YGB9LHtyZWZfZm9yOiEwfSxlKSxudWxsLDE2KSkpLDEyOCkpXSksXzoxfSw4LFtgbXVsdGlwbGVgLGByZXF1aXJlZGAsYG5hbWVgLGBhdXRvY29tcGxldGVgLGBkaXNhYmxlZGAsYHZhbHVlYF0pKTp6ZShgdi1pZmAsITApXSksXzozfSkpfX0pLFRpPVIoe19fbmFtZTpgQnViYmxlU2VsZWN0YCxwcm9wczp7YXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcm06e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxuYW1lOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc2l6ZTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49RigpLHI9U2koKTtWKCgpPT50LnZhbHVlLChlLHQpPT57bGV0IHI9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixgdmFsdWVgKS5zZXQ7aWYoZSE9PXQmJmkmJm4udmFsdWUpe2xldCB0PW5ldyBFdmVudChgY2hhbmdlYCx7YnViYmxlczohMH0pO2kuY2FsbChuLnZhbHVlLGUpLG4udmFsdWUuZGlzcGF0Y2hFdmVudCh0KX19KTtmdW5jdGlvbiBpKGUpe3Iub25WYWx1ZUNoYW5nZShlLnRhcmdldC52YWx1ZSl9cmV0dXJuKGUscik9PihQKCksSShiKFp0KSx7ImFzLWNoaWxkIjpgYH0se2RlZmF1bHQ6QigoKT0+W0hlKGBzZWxlY3RgLE0oe3JlZl9rZXk6YHNlbGVjdEVsZW1lbnRgLHJlZjpufSx0LHtvbklucHV0Oml9KSxbeihlLiRzbG90cyxgZGVmYXVsdGApXSwxNildKSxfOjN9KSl9fSksRWk9Uih7X19uYW1lOmBTZWxlY3RQb3BwZXJQb3NpdGlvbmAscHJvcHM6e21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3RhcnRgfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITEsZGVmYXVsdDoxMH0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1LZShlKTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIobWkpLE0oYih0KSx7c3R5bGU6e2JveFNpemluZzpgYm9yZGVyLWJveGAsIi0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjpgdmFyKC0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClgLCItLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3Itd2lkdGgpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWFuY2hvci1oZWlnaHQpYH19KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLERpPXtvblZpZXdwb3J0Q2hhbmdlOigpPT57fSxpdGVtVGV4dFJlZkNhbGxiYWNrOigpPT57fSxpdGVtUmVmQ2FsbGJhY2s6KCk9Pnt9fSxbT2ksa2ldPWFlKGBTZWxlY3RDb250ZW50YCksQWk9Uih7X19uYW1lOmBTZWxlY3RDb250ZW50SW1wbGAscHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBpdGVtLWFsaWduZWRgfSxib2R5TG9jazp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LG1lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3RhcnRgfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITF9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfX0sZW1pdHM6W2BjbG9zZUF1dG9Gb2N1c2AsYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPVNpKCk7bHQoKSxhdChuLmJvZHlMb2NrKTtsZXR7Q29sbGVjdGlvblNsb3Q6YSxnZXRJdGVtczpvfT1KZSgpLHM9RigpO3h0KHMpO2xldHtzZWFyY2g6YyxoYW5kbGVUeXBlYWhlYWRTZWFyY2g6bH09Q3QoKSx1PUYoKSxkPUYoKSxmPUYoKSxwPUYoITEpLG09RighMSksaD1GKCExKTtmdW5jdGlvbiBnKCl7ZC52YWx1ZSYmcy52YWx1ZSYmWXQoW2QudmFsdWUscy52YWx1ZV0pfVYocCwoKT0+e2coKX0pO2xldHtvbk9wZW5DaGFuZ2U6Xyx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6dn09aTtuZShlPT57aWYoIXMudmFsdWUpcmV0dXJuO2xldCB0PXt4OjAseTowfSxuPWU9Pnt0PXt4Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWCktKHYudmFsdWU/Lng/PzApKSx5Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWSktKHYudmFsdWU/Lnk/PzApKX19LHI9ZT0+e2UucG9pbnRlclR5cGUhPT1gdG91Y2hgJiYodC54PD0xMCYmdC55PD0xMD9lLnByZXZlbnREZWZhdWx0KCk6cy52YWx1ZT8uY29udGFpbnMoZS50YXJnZXQpfHxfKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksdi52YWx1ZT1udWxsKX07di52YWx1ZSE9PW51bGwmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcnVwYCxyLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksZSgoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJtb3ZlYCxuKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVydXBgLHIse2NhcHR1cmU6ITB9KX0pfSk7ZnVuY3Rpb24geShlKXtsZXQgdD1lLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXk7aWYoZS5rZXk9PT1gVGFiYCYmZS5wcmV2ZW50RGVmYXVsdCgpLCF0JiZlLmtleS5sZW5ndGg9PT0xJiZsKGUua2V5LG8oKSksW2BBcnJvd1VwYCxgQXJyb3dEb3duYCxgSG9tZWAsYEVuZGBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IHQ9Wy4uLm8oKS5tYXAoZT0+ZS5yZWYpXTtpZihbYEFycm93VXBgLGBFbmRgXS5pbmNsdWRlcyhlLmtleSkmJih0PXQuc2xpY2UoKS5yZXZlcnNlKCkpLFtgQXJyb3dVcGAsYEFycm93RG93bmBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IG49ZS50YXJnZXQscj10LmluZGV4T2Yobik7dD10LnNsaWNlKHIrMSl9c2V0VGltZW91dCgoKT0+WXQodCkpLGUucHJldmVudERlZmF1bHQoKX19bGV0IHg9TigoKT0+bi5wb3NpdGlvbj09PWBwb3BwZXJgP246e30pLFM9S2UoeC52YWx1ZSk7cmV0dXJuIGtpKHtjb250ZW50OnMsdmlld3BvcnQ6dSxvblZpZXdwb3J0Q2hhbmdlOmU9Pnt1LnZhbHVlPWV9LGl0ZW1SZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IW0udmFsdWUmJiFuLGE9dmkoaS5tb2RlbFZhbHVlLnZhbHVlLHQsaS5ieSk7aWYoaS5tdWx0aXBsZS52YWx1ZSl7aWYoaC52YWx1ZSlyZXR1cm47KGF8fHIpJiYoZC52YWx1ZT1lLGEmJihoLnZhbHVlPSEwKSl9ZWxzZShhfHxyKSYmKGQudmFsdWU9ZSk7ciYmKG0udmFsdWU9ITApfSxzZWxlY3RlZEl0ZW06ZCxzZWxlY3RlZEl0ZW1UZXh0OmYsb25JdGVtTGVhdmU6KCk9PntzLnZhbHVlPy5mb2N1cygpfSxpdGVtVGV4dFJlZkNhbGxiYWNrOihlLHQsbik9PntsZXQgcj0hbS52YWx1ZSYmIW47KHZpKGkubW9kZWxWYWx1ZS52YWx1ZSx0LGkuYnkpfHxyKSYmKGYudmFsdWU9ZSl9LGZvY3VzU2VsZWN0ZWRJdGVtOmcscG9zaXRpb246bi5wb3NpdGlvbixpc1Bvc2l0aW9uZWQ6cCxzZWFyY2hSZWY6Y30pLChlLHQpPT4oUCgpLEkoYihhKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoR3QpLHsiYXMtY2hpbGQiOmBgLG9uTW91bnRBdXRvRm9jdXM6dFs2XXx8PWRlKCgpPT57fSxbYHByZXZlbnRgXSksb25Vbm1vdW50QXV0b0ZvY3VzOnRbN118fD1lPT57cihgY2xvc2VBdXRvRm9jdXNgLGUpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihiKGkpLnRyaWdnZXJFbGVtZW50LnZhbHVlPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUucHJldmVudERlZmF1bHQoKSl9fSx7ZGVmYXVsdDpCKCgpPT5bTChiKGp0KSx7ImFzLWNoaWxkIjpgYCwiZGlzYWJsZS1vdXRzaWRlLXBvaW50ZXItZXZlbnRzIjplLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cyxvbkZvY3VzT3V0c2lkZTp0WzJdfHw9ZGUoKCk9Pnt9LFtgcHJldmVudGBdKSxvbkRpc21pc3M6dFszXXx8PWU9PmIoaSkub25PcGVuQ2hhbmdlKCExKSxvbkVzY2FwZUtleURvd246dFs0XXx8PWU9PnIoYGVzY2FwZUtleURvd25gLGUpLG9uUG9pbnRlckRvd25PdXRzaWRlOnRbNV18fD1lPT5yKGBwb2ludGVyRG93bk91dHNpZGVgLGUpfSx7ZGVmYXVsdDpCKCgpPT5bKFAoKSxJKFllKGUucG9zaXRpb249PT1gcG9wcGVyYD9FaTpOaSksTSh7Li4uZS4kYXR0cnMsLi4uYihTKX0se2lkOmIoaSkuY29udGVudElkLHJlZjplPT57aWYoIWUpcmV0dXJuO2xldCB0PWIoRGUpKGUpO3Q/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9zLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6cy52YWx1ZT10fSxyb2xlOmBsaXN0Ym94YCwiZGF0YS1zdGF0ZSI6YihpKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCxkaXI6YihpKS5kaXIudmFsdWUsc3R5bGU6e2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAsb3V0bGluZTpgbm9uZWB9LG9uQ29udGV4dG1lbnU6dFswXXx8PWRlKCgpPT57fSxbYHByZXZlbnRgXSksb25QbGFjZWQ6dFsxXXx8PWU9PnAudmFsdWU9ITAsb25LZXlkb3duOnl9KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGlkYCxgZGF0YS1zdGF0ZWAsYGRpcmAsYG9uS2V5ZG93bmBdKSldKSxfOjN9LDgsW2BkaXNhYmxlLW91dHNpZGUtcG9pbnRlci1ldmVudHNgXSldKSxfOjN9KV0pLF86M30pKX19KSxbamksTWldPWFlKGBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uYCksTmk9Uih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0SXRlbUFsaWduZWRQb3NpdGlvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgcGxhY2VkYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2dldEl0ZW1zOmF9PUplKCksbz1TaSgpLHM9T2koKSxjPUYoITEpLGw9RighMCksdT1GKCkse2ZvcndhcmRSZWY6ZCxjdXJyZW50RWxlbWVudDpmfT1yZSgpLHt2aWV3cG9ydDpwLHNlbGVjdGVkSXRlbTptLHNlbGVjdGVkSXRlbVRleHQ6aCxmb2N1c1NlbGVjdGVkSXRlbTpnfT1zO2Z1bmN0aW9uIF8oKXtpZihvLnRyaWdnZXJFbGVtZW50LnZhbHVlJiZvLnZhbHVlRWxlbWVudC52YWx1ZSYmdS52YWx1ZSYmZi52YWx1ZSYmcD8udmFsdWUmJm0/LnZhbHVlJiZoPy52YWx1ZSl7bGV0IGU9by50cmlnZ2VyRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PWYudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1vLnZhbHVlRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWgudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoby5kaXIudmFsdWUhPT1gcnRsYCl7bGV0IHI9aS5sZWZ0LXQubGVmdCxhPW4ubGVmdC1yLG89ZS5sZWZ0LWEscz1lLndpZHRoK28sYz1NYXRoLm1heChzLHQud2lkdGgpLGw9d2luZG93LmlubmVyV2lkdGgtMTAsZD1RZShhLDEwLE1hdGgubWF4KDEwLGwtYykpO3UudmFsdWUuc3R5bGUubWluV2lkdGg9YCR7c31weGAsdS52YWx1ZS5zdHlsZS5sZWZ0PWAke2R9cHhgfWVsc2V7bGV0IHI9dC5yaWdodC1pLnJpZ2h0LGE9d2luZG93LmlubmVyV2lkdGgtbi5yaWdodC1yLG89d2luZG93LmlubmVyV2lkdGgtZS5yaWdodC1hLHM9ZS53aWR0aCtvLGM9TWF0aC5tYXgocyx0LndpZHRoKSxsPXdpbmRvdy5pbm5lcldpZHRoLTEwLGQ9UWUoYSwxMCxNYXRoLm1heCgxMCxsLWMpKTt1LnZhbHVlLnN0eWxlLm1pbldpZHRoPWAke3N9cHhgLHUudmFsdWUuc3R5bGUucmlnaHQ9YCR7ZH1weGB9bGV0IHM9YSgpLm1hcChlPT5lLnJlZiksbD13aW5kb3cuaW5uZXJIZWlnaHQtMjAsZD1wLnZhbHVlLnNjcm9sbEhlaWdodCxnPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYudmFsdWUpLF89TnVtYmVyLnBhcnNlSW50KGcuYm9yZGVyVG9wV2lkdGgsMTApLHY9TnVtYmVyLnBhcnNlSW50KGcucGFkZGluZ1RvcCwxMCkseT1OdW1iZXIucGFyc2VJbnQoZy5ib3JkZXJCb3R0b21XaWR0aCwxMCksYj1OdW1iZXIucGFyc2VJbnQoZy5wYWRkaW5nQm90dG9tLDEwKSx4PV8rditkK2IreSxTPU1hdGgubWluKG0udmFsdWUub2Zmc2V0SGVpZ2h0KjUseCksQz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwLnZhbHVlKSx3PU51bWJlci5wYXJzZUludChDLnBhZGRpbmdUb3AsMTApLFQ9TnVtYmVyLnBhcnNlSW50KEMucGFkZGluZ0JvdHRvbSwxMCksRT1lLnRvcCtlLmhlaWdodC8yLTEwLEQ9bC1FLE89bS52YWx1ZS5vZmZzZXRIZWlnaHQvMixrPW0udmFsdWUub2Zmc2V0VG9wK08sQT1fK3YrayxlZT14LUE7aWYoQTw9RSl7bGV0IGU9bS52YWx1ZT09PXMuYXQoLTEpO3UudmFsdWUuc3R5bGUuYm90dG9tPWAwcHhgO2xldCB0PWYudmFsdWUuY2xpZW50SGVpZ2h0LXAudmFsdWUub2Zmc2V0VG9wLXAudmFsdWUub2Zmc2V0SGVpZ2h0LG49QStNYXRoLm1heChELE8rKGU/VDowKSt0K3kpO3UudmFsdWUuc3R5bGUuaGVpZ2h0PWAke259cHhgfWVsc2V7bGV0IGU9bS52YWx1ZT09PXNbMF07dS52YWx1ZS5zdHlsZS50b3A9YDBweGA7bGV0IHQ9TWF0aC5tYXgoRSxfK3AudmFsdWUub2Zmc2V0VG9wKyhlP3c6MCkrTykrZWU7dS52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7dH1weGAscC52YWx1ZS5zY3JvbGxUb3A9QS1FK3AudmFsdWUub2Zmc2V0VG9wfXUudmFsdWUuc3R5bGUubWFyZ2luPWAxMHB4IDBgLHUudmFsdWUuc3R5bGUubWluSGVpZ2h0PWAke1N9cHhgLHUudmFsdWUuc3R5bGUubWF4SGVpZ2h0PWAke2x9cHhgLHIoYHBsYWNlZGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+Yy52YWx1ZT0hMCl9fWxldCB2PUYoYGApO01lKGFzeW5jKCk9Pnthd2FpdCBiZSgpLF8oKSxmLnZhbHVlJiYodi52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnZhbHVlKS56SW5kZXgpfSk7ZnVuY3Rpb24geShlKXtlJiZsLnZhbHVlPT09ITAmJihfKCksZz8uKCksbC52YWx1ZT0hMSl9cmV0dXJuIHgoby50cmlnZ2VyRWxlbWVudCwoKT0+e18oKX0pLE1pKHtjb250ZW50V3JhcHBlcjp1LHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOmMsb25TY3JvbGxCdXR0b25DaGFuZ2U6eX0pLChlLHQpPT4oUCgpLFRlKGBkaXZgLHtyZWZfa2V5OmBjb250ZW50V3JhcHBlckVsZW1lbnRgLHJlZjp1LHN0eWxlOmkoe2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAscG9zaXRpb246YGZpeGVkYCx6SW5kZXg6di52YWx1ZX0pfSxbTChiKGopLE0oe3JlZjpiKGQpLHN0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLG1heEhlaWdodDpgMTAwJWB9fSx7Li4uZS4kYXR0cnMsLi4ubn0pLHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0sNCkpfX0pLFBpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFByb3ZpZGVyYCxwcm9wczp7Y29udGV4dDp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxzZXR1cChlKXtyZXR1cm4gQ2koZS5jb250ZXh0KSxraShEaSksKGUsdCk9PnooZS4kc2xvdHMsYGRlZmF1bHRgKX19KSxGaT17a2V5OjF9LElpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKHQse2VtaXQ6bn0pe2xldCByPXQsaT1hKHIsbiksbz1TaSgpLHM9RigpO01lKCgpPT57cy52YWx1ZT1uZXcgRG9jdW1lbnRGcmFnbWVudH0pO2xldCBjPUYoKSxsPU4oKCk9PnIuZm9yY2VNb3VudHx8by5vcGVuLnZhbHVlKSx1PUYobC52YWx1ZSksZDtmdW5jdGlvbiBmKCl7ZCYmPShjbGVhclRpbWVvdXQoZCksdm9pZCAwKX1yZXR1cm4gVihsLChlLHQsbik9PntmKCksZD1zZXRUaW1lb3V0KCgpPT57dS52YWx1ZT1sLnZhbHVlLGQ9dm9pZCAwfSksbihmKX0pLENlKGYpLCh0LG4pPT5sLnZhbHVlfHx1LnZhbHVlfHxjLnZhbHVlPy5wcmVzZW50PyhQKCksSShiKHFlKSx7a2V5OjAscmVmX2tleTpgcHJlc2VuY2VSZWZgLHJlZjpjLHByZXNlbnQ6bC52YWx1ZX0se2RlZmF1bHQ6QigoKT0+W0woQWksWmUoX2Uoey4uLmIoaSksLi4udC4kYXR0cnN9KSkse2RlZmF1bHQ6QigoKT0+W3oodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpXSksXzozfSw4LFtgcHJlc2VudGBdKSk6cy52YWx1ZT8oUCgpLFRlKGBkaXZgLEZpLFsoUCgpLEkoZSx7dG86cy52YWx1ZX0sW0woUGkse2NvbnRleHQ6YihvKX0se2RlZmF1bHQ6QigoKT0+W3oodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGNvbnRleHRgXSldLDgsW2B0b2BdKSldKSk6emUoYHYtaWZgLCEwKX19KSxMaT1SKHtfX25hbWU6YFNlbGVjdEljb25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KFAoKSxJKGIoaikseyJhcmlhLWhpZGRlbiI6YHRydWVgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGR9LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W3RbMF18fD1oZShg4pa8YCldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pLFtSaSx6aV09YWUoYFNlbGVjdEl0ZW1gKSxCaT1SKHtfX25hbWU6YFNlbGVjdEl0ZW1gLHByb3BzOnt2YWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSx0ZXh0VmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHNlbGVjdGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtkaXNhYmxlZDppfT1mKG4pLGE9U2koKSxvPU9pKCkse2ZvcndhcmRSZWY6cyxjdXJyZW50RWxlbWVudDpjfT1yZSgpLHtDb2xsZWN0aW9uSXRlbTpsfT1KZSgpLHU9TigoKT0+dmkoYS5tb2RlbFZhbHVlPy52YWx1ZSxuLnZhbHVlLGEuYnkpKSxkPUYoITEpLHA9RihuLnRleHRWYWx1ZT8/YGApLGg9dGUodm9pZCAwLGByZWthLXNlbGVjdC1pdGVtLXRleHRgKTthc3luYyBmdW5jdGlvbiBnKGUpe2UuZGVmYXVsdFByZXZlbnRlZHx8JGUoYHNlbGVjdC5zZWxlY3RgLF8se29yaWdpbmFsRXZlbnQ6ZSx2YWx1ZTpuLnZhbHVlfSl9YXN5bmMgZnVuY3Rpb24gXyhlKXthd2FpdCBiZSgpLHIoYHNlbGVjdGAsZSksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGkudmFsdWV8fChhLm9uVmFsdWVDaGFuZ2Uobi52YWx1ZSksYS5tdWx0aXBsZS52YWx1ZXx8YS5vbk9wZW5DaGFuZ2UoITEpKSl9YXN5bmMgZnVuY3Rpb24gdihlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihpLnZhbHVlP28ub25JdGVtTGVhdmU/LigpOmUuY3VycmVudFRhcmdldD8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSl9YXN5bmMgZnVuY3Rpb24geShlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJmUuY3VycmVudFRhcmdldD09PW0oKSYmby5vbkl0ZW1MZWF2ZT8uKCl9YXN5bmMgZnVuY3Rpb24geChlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihvLnNlYXJjaFJlZj8udmFsdWU9PT1gYHx8ZS5rZXkhPT1gIGApJiYoX2kuaW5jbHVkZXMoZS5rZXkpJiZnKGUpLGUua2V5PT09YCBgJiZlLnByZXZlbnREZWZhdWx0KCkpfWlmKG4udmFsdWU9PT1gYCl0aHJvdyBFcnJvcihgQSA8U2VsZWN0SXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuYCk7cmV0dXJuIE1lKCgpPT57Yy52YWx1ZSYmby5pdGVtUmVmQ2FsbGJhY2soYy52YWx1ZSxuLnZhbHVlLG4uZGlzYWJsZWQpfSksemkoe3ZhbHVlOm4udmFsdWUsZGlzYWJsZWQ6aSx0ZXh0SWQ6aCxpc1NlbGVjdGVkOnUsb25JdGVtVGV4dENoYW5nZTplPT57cC52YWx1ZT0oKHAudmFsdWV8fGU/LnRleHRDb250ZW50KT8/YGApLnRyaW0oKX19KSwoZSx0KT0+KFAoKSxJKGIobCkse3ZhbHVlOnt0ZXh0VmFsdWU6cC52YWx1ZX19LHtkZWZhdWx0OkIoKCk9PltMKGIoaikse3JlZjpiKHMpLHJvbGU6YG9wdGlvbmAsImFyaWEtbGFiZWxsZWRieSI6YihoKSwiZGF0YS1oaWdobGlnaHRlZCI6ZC52YWx1ZT9gYDp2b2lkIDAsImFyaWEtc2VsZWN0ZWQiOnUudmFsdWUsImRhdGEtc3RhdGUiOnUudmFsdWU/YGNoZWNrZWRgOmB1bmNoZWNrZWRgLCJhcmlhLWRpc2FibGVkIjpiKGkpfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmIoaSk/YGA6dm9pZCAwLHRhYmluZGV4OmIoaSk/dm9pZCAwOi0xLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsb25Gb2N1czp0WzBdfHw9ZT0+ZC52YWx1ZT0hMCxvbkJsdXI6dFsxXXx8PWU9PmQudmFsdWU9ITEsb25Qb2ludGVydXA6ZyxvblBvaW50ZXJkb3duOnRbMl18fD1lPT57ZS5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG9uVG91Y2hlbmQ6dFszXXx8PWRlKCgpPT57fSxbYHByZXZlbnRgLGBzdG9wYF0pLG9uUG9pbnRlcm1vdmU6dixvblBvaW50ZXJsZWF2ZTp5LG9uS2V5ZG93bjp4fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXJpYS1sYWJlbGxlZGJ5YCxgZGF0YS1oaWdobGlnaHRlZGAsYGFyaWEtc2VsZWN0ZWRgLGBkYXRhLXN0YXRlYCxgYXJpYS1kaXNhYmxlZGAsYGRhdGEtZGlzYWJsZWRgLGB0YWJpbmRleGAsYGFzYCxgYXMtY2hpbGRgXSldKSxfOjN9LDgsW2B2YWx1ZWBdKSl9fSksVmk9Uih7X19uYW1lOmBTZWxlY3RJdGVtSW5kaWNhdG9yYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVJpKCk7cmV0dXJuKGUscik9PmIobikuaXNTZWxlY3RlZC52YWx1ZT8oUCgpLEkoYihqKSxNKHtrZXk6MCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sdCkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKTp6ZShgdi1pZmAsITApfX0pLEhpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdEl0ZW1UZXh0YCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNpKCkscj1PaSgpLGk9UmkoKSx7Zm9yd2FyZFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXJlKCkscz1OKCgpPT4oe3ZhbHVlOmkudmFsdWUsZGlzYWJsZWQ6aS5kaXNhYmxlZC52YWx1ZSx0ZXh0Q29udGVudDpvLnZhbHVlPy50ZXh0Q29udGVudD8/aS52YWx1ZT8udG9TdHJpbmcoKT8/YGB9KSk7cmV0dXJuIE1lKCgpPT57by52YWx1ZSYmKGkub25JdGVtVGV4dENoYW5nZShvLnZhbHVlKSxyLml0ZW1UZXh0UmVmQ2FsbGJhY2soby52YWx1ZSxpLnZhbHVlLGkuZGlzYWJsZWQudmFsdWUpLG4ub25PcHRpb25BZGQocy52YWx1ZSkpfSksQ2UoKCk9PntuLm9uT3B0aW9uUmVtb3ZlKHMudmFsdWUpfSksKGUsbik9PihQKCksSShiKGopLE0oe2lkOmIoaSkudGV4dElkLHJlZjpiKGEpfSx7Li4udCwuLi5lLiRhdHRyc30pLHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgXSkpfX0pLFVpPVIoe19fbmFtZTpgU2VsZWN0UG9ydGFsYCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIoWHQpLFplKF9lKHQpKSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLFdpPVIoe19fbmFtZTpgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbGAsZW1pdHM6W2BhdXRvU2Nyb2xsYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49dCx7Z2V0SXRlbXM6cn09SmUoKSxpPU9pKCksYT1GKG51bGwpO2Z1bmN0aW9uIG8oKXthLnZhbHVlIT09bnVsbCYmKHdpbmRvdy5jbGVhckludGVydmFsKGEudmFsdWUpLGEudmFsdWU9bnVsbCl9bmUoKCk9PntyKCkubWFwKGU9PmUucmVmKS5maW5kKGU9PmU9PT1tKCkpPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6YG5lYXJlc3RgfSl9KTtmdW5jdGlvbiBzKCl7YS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1mdW5jdGlvbiBjKCl7aS5vbkl0ZW1MZWF2ZT8uKCksYS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1yZXR1cm4gSWUoKCk9Pm8oKSksKGUsdCk9PihQKCksSShiKGopLE0oeyJhcmlhLWhpZGRlbiI6YHRydWVgLHN0eWxlOntmbGV4U2hyaW5rOjB9fSxlLiRwYXJlbnQ/LiRwcm9wcyx7b25Qb2ludGVyZG93bjpzLG9uUG9pbnRlcm1vdmU6YyxvblBvaW50ZXJsZWF2ZTp0WzBdfHw9KCk9PntvKCl9fSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxHaT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1PaSgpLG49dC5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP2ppKCk6dm9pZCAwLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09cmUoKSxhPUYoITEpO3JldHVybiBuZShlPT57aWYodC52aWV3cG9ydD8udmFsdWUmJnQuaXNQb3NpdGlvbmVkPy52YWx1ZSl7bGV0IG49dC52aWV3cG9ydC52YWx1ZTtmdW5jdGlvbiByKCl7bGV0IGU9bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQ7YS52YWx1ZT1NYXRoLmNlaWwobi5zY3JvbGxUb3ApPGV9cigpLG4uYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSxlKCgpPT5uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAscikpfX0pLFYoaSwoKT0+e2kudmFsdWUmJm4/Lm9uU2Nyb2xsQnV0dG9uQ2hhbmdlKGkudmFsdWUpfSksKGUsbik9PmEudmFsdWU/KFAoKSxJKFdpLHtrZXk6MCxyZWY6YihyKSxvbkF1dG9TY3JvbGw6blswXXx8PSgpPT57bGV0e3ZpZXdwb3J0OmUsc2VsZWN0ZWRJdGVtOm59PWIodCk7ZT8udmFsdWUmJm4/LnZhbHVlJiYoZS52YWx1ZS5zY3JvbGxUb3A9ZS52YWx1ZS5zY3JvbGxUb3Arbi52YWx1ZS5vZmZzZXRIZWlnaHQpfX0se2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sNTEyKSk6emUoYHYtaWZgLCEwKX19KSxLaT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9T2koKSxuPXQucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD9qaSgpOnZvaWQgMCx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PXJlKCksYT1GKCExKTtyZXR1cm4gbmUoZT0+e2lmKHQudmlld3BvcnQ/LnZhbHVlJiZ0LmlzUG9zaXRpb25lZD8udmFsdWUpe2xldCBuPXQudmlld3BvcnQudmFsdWU7ZnVuY3Rpb24gcigpe2EudmFsdWU9bi5zY3JvbGxUb3A+MH1yKCksbi5hZGRFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpLGUoKCk9Pm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSl9fSksVihpLCgpPT57aS52YWx1ZSYmbj8ub25TY3JvbGxCdXR0b25DaGFuZ2UoaS52YWx1ZSl9KSwoZSxuKT0+YS52YWx1ZT8oUCgpLEkoV2kse2tleTowLHJlZjpiKHIpLG9uQXV0b1Njcm9sbDpuWzBdfHw9KCk9PntsZXR7dmlld3BvcnQ6ZSxzZWxlY3RlZEl0ZW06bn09Yih0KTtlPy52YWx1ZSYmbj8udmFsdWUmJihlLnZhbHVlLnNjcm9sbFRvcD1lLnZhbHVlLnNjcm9sbFRvcC1uLnZhbHVlLm9mZnNldEhlaWdodCl9fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw1MTIpKTp6ZShgdi1pZmAsITApfX0pLHFpPVIoe19fbmFtZTpgU2VsZWN0VHJpZ2dlcmAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWUsbj1TaSgpLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09cmUoKSxhPU4oKCk9Pm4uZGlzYWJsZWQ/LnZhbHVlfHx0LmRpc2FibGVkKTtuLmNvbnRlbnRJZHx8PXRlKHZvaWQgMCxgcmVrYS1zZWxlY3QtY29udGVudGApLE1lKCgpPT57bi5vblRyaWdnZXJDaGFuZ2UoaS52YWx1ZSl9KTtsZXR7Z2V0SXRlbXM6b309SmUoKSx7c2VhcmNoOnMsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOmMscmVzZXRUeXBlYWhlYWQ6bH09Q3QoKTtmdW5jdGlvbiB1KCl7YS52YWx1ZXx8KG4ub25PcGVuQ2hhbmdlKCEwKSxsKCkpfWZ1bmN0aW9uIGQoZSl7dSgpLG4udHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLnZhbHVlPXt4Ok1hdGgucm91bmQoZS5wYWdlWCkseTpNYXRoLnJvdW5kKGUucGFnZVkpfX1mdW5jdGlvbiBmKGUpe3JldHVybiBlLmJ1dHRvbj09PTAmJmUuY3RybEtleT09PSExfWxldCBwPSExO2Z1bmN0aW9uIG0oZSl7aWYoZS5wb2ludGVyVHlwZT09PWB0b3VjaGApcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtsZXQgdD1lLnRhcmdldDt0Lmhhc1BvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSYmdC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpLGYoZSkmJihkKGUpLHA9ITApfWZ1bmN0aW9uIGgoZSl7ZihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIGcoZSl7cHx8ZS5jdXJyZW50VGFyZ2V0Py5mb2N1cygpLHA9ITF9cmV0dXJuKGUsdCk9PihQKCksSShiKHRuKSx7ImFzLWNoaWxkIjpgYCxyZWZlcmVuY2U6ZS5yZWZlcmVuY2V9LHtkZWZhdWx0OkIoKCk9PltMKGIoaikse3JlZjpiKHIpLHJvbGU6YGNvbWJvYm94YCx0eXBlOmUuYXM9PT1gYnV0dG9uYD9gYnV0dG9uYDp2b2lkIDAsImFyaWEtY29udHJvbHMiOmIobikuY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpiKG4pLm9wZW4udmFsdWV8fCExLCJhcmlhLXJlcXVpcmVkIjpiKG4pLnJlcXVpcmVkPy52YWx1ZSwiYXJpYS1hdXRvY29tcGxldGUiOmBub25lYCxkaXNhYmxlZDphLnZhbHVlLGRpcjpiKG4pPy5kaXIudmFsdWUsImRhdGEtc3RhdGUiOmIobik/Lm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjphLnZhbHVlP2BgOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6YihiaSkoYihuKS5tb2RlbFZhbHVlPy52YWx1ZSk/YGA6dm9pZCAwLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25DbGljazpnLG9uUG9pbnRlcmRvd246bSxvbk1vdXNlZG93bjpoLG9uUG9pbnRlcnVwOnRbMF18fD1kZShlPT57ZS5wb2ludGVyVHlwZT09PWB0b3VjaGAmJmQoZSl9LFtgcHJldmVudGBdKSxvbktleWRvd246dFsxXXx8PWU9PntsZXQgdD1iKHMpIT09YGA7IShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiZlLmtleS5sZW5ndGg9PT0xJiZ0JiZlLmtleT09PWAgYHx8KGIoYykoZS5rZXksYihvKSgpKSxiKGdpKS5pbmNsdWRlcyhlLmtleSkmJih1KCksZS5wcmV2ZW50RGVmYXVsdCgpKSl9fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgYXJpYS1yZXF1aXJlZGAsYGRpc2FibGVkYCxgZGlyYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLXBsYWNlaG9sZGVyYCxgYXMtY2hpbGRgLGBhc2BdKV0pLF86M30sOCxbYHJlZmVyZW5jZWBdKSl9fSksSmk9Uih7X19uYW1lOmBTZWxlY3RWYWx1ZWAscHJvcHM6e3BsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09cmUoKSxpPVNpKCk7TWUoKCk9PntpLnZhbHVlRWxlbWVudD1yfSk7bGV0IGE9TigoKT0+e2xldCBlPVtdLHQ9QXJyYXkuZnJvbShpLm9wdGlvbnNTZXQudmFsdWUpLG49ZT0+dC5maW5kKHQ9PnZpKGUsdC52YWx1ZSxpLmJ5KSk7cmV0dXJuIGU9QXJyYXkuaXNBcnJheShpLm1vZGVsVmFsdWUudmFsdWUpP2kubW9kZWxWYWx1ZS52YWx1ZS5tYXAoZT0+bihlKT8udGV4dENvbnRlbnQ/P2BgKTpbbihpLm1vZGVsVmFsdWUudmFsdWUpPy50ZXh0Q29udGVudD8/YGBdLGUuZmlsdGVyKEJvb2xlYW4pfSksbz1OKCgpPT5hLnZhbHVlLmxlbmd0aD9hLnZhbHVlLmpvaW4oYCwgYCk6dC5wbGFjZWhvbGRlcik7cmV0dXJuKGUscik9PihQKCksSShiKGopLHtyZWY6YihuKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLHN0eWxlOntwb2ludGVyRXZlbnRzOmBub25lYH0sImRhdGEtcGxhY2Vob2xkZXIiOmEudmFsdWUubGVuZ3RoP3ZvaWQgMDp0LnBsYWNlaG9sZGVyfSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGAse3NlbGVjdGVkTGFiZWw6YS52YWx1ZSxtb2RlbFZhbHVlOmIoaSkubW9kZWxWYWx1ZS52YWx1ZX0sKCk9PltoZShzZShvLnZhbHVlKSwxKV0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtcGxhY2Vob2xkZXJgXSkpfX0pLFlpPVIoe19fbmFtZTpgU2VsZWN0Vmlld3BvcnRgLHByb3BzOntub25jZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse25vbmNlOm59PWYodCkscj1oaShuKSxpPU9pKCksYT1pLnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGA/amkoKTp2b2lkIDAse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT1yZSgpO01lKCgpPT57aT8ub25WaWV3cG9ydENoYW5nZShzLnZhbHVlKX0pO2xldCBjPUYoMCk7ZnVuY3Rpb24gbChlKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQse3Nob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOm4sY29udGVudFdyYXBwZXI6cn09YT8/e307aWYobj8udmFsdWUmJnI/LnZhbHVlKXtsZXQgZT1NYXRoLmFicyhjLnZhbHVlLXQuc2Nyb2xsVG9wKTtpZihlPjApe2xldCBuPXdpbmRvdy5pbm5lckhlaWdodC0yMCxpPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUubWluSGVpZ2h0KSxhPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUuaGVpZ2h0KSxvPU1hdGgubWF4KGksYSk7aWYobzxuKXtsZXQgaT1vK2UsYT1NYXRoLm1pbihuLGkpLHM9aS1hO3IudmFsdWUuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLHIudmFsdWUuc3R5bGUuYm90dG9tPT09YDBweGAmJih0LnNjcm9sbFRvcD1zPjA/czowLHIudmFsdWUuc3R5bGUuanVzdGlmeUNvbnRlbnQ9YGZsZXgtZW5kYCl9fX1jLnZhbHVlPXQuc2Nyb2xsVG9wfXJldHVybihlLG4pPT4oUCgpLFRlKGssbnVsbCxbTChiKGopLE0oe3JlZjpiKG8pLCJkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0IjpgYCxyb2xlOmBwcmVzZW50YXRpb25gfSx7Li4uZS4kYXR0cnMsLi4udH0se3N0eWxlOntwb3NpdGlvbjpgcmVsYXRpdmVgLGZsZXg6MSxvdmVyZmxvdzpgaGlkZGVuIGF1dG9gfSxvblNjcm9sbDpsfSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpLEwoYihqKSx7YXM6YHN0eWxlYCxub25jZTpiKHIpfSx7ZGVmYXVsdDpCKCgpPT5uWzBdfHw9W2hlKGAgLyogSGlkZSBzY3JvbGxiYXJzIGNyb3NzLWJyb3dzZXIgYW5kIGVuYWJsZSBtb21lbnR1bSBzY3JvbGwgZm9yIHRvdWNoIGRldmljZXMgKi8gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdIHsgc2Nyb2xsYmFyLXdpZHRoOm5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9IFtkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9IGApXSksXzoxLF9fOlswXX0sOCxbYG5vbmNlYF0pXSw2NCkpfX0pLFhpPVIoe19fbmFtZTpgU2VsZWN0YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxudWxsYWJsZVZhbHVlOnt9LGJ5Ont0eXBlOltTdHJpbmcsRnVuY3Rpb25dfSxkaXI6e30sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbn0sYXV0b2NvbXBsZXRlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LG5hbWU6e30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgLGB1cGRhdGU6b3BlbmBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWEoZSx0KTtyZXR1cm4oZSx0KT0+KFAoKSxJKGIod2kpLE0oeyJkYXRhLXNsb3QiOmBzZWxlY3RgfSxiKG4pKSx7ZGVmYXVsdDpCKHQ9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCxaZShfZSh0KSkpXSksXzozfSwxNikpfX0pLFppPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LHBvc2l0aW9uOntkZWZhdWx0OmBpdGVtLWFsaWduZWRgfSxib2R5TG9jazp7dHlwZTpCb29sZWFufSxtZW1vRGVwZW5kZW5jaWVzOnt9LHNpZGU6e30sc2lkZU9mZnNldDp7fSxzaWRlRmxpcDp7dHlwZTpCb29sZWFufSxhbGlnbjp7ZGVmYXVsdDpgY2VudGVyYH0sYWxpZ25PZmZzZXQ6e30sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW59LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFufSxjb2xsaXNpb25Cb3VuZGFyeTp7fSxjb2xsaXNpb25QYWRkaW5nOnt9LGFycm93UGFkZGluZzp7fSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW59LHN0aWNreTp7fSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW59LHBvc2l0aW9uU3RyYXRlZ3k6e30sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7fSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFufSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbn0scmVmZXJlbmNlOnt9LGRpcjp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFufSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2BjbG9zZUF1dG9Gb2N1c2AsYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPUEobixgY2xhc3NgKSxvPWEoaSxyKTtyZXR1cm4odCxyKT0+KFAoKSxJKGIoVWkpLG51bGwse2RlZmF1bHQ6QigoKT0+W0woYihJaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC1jb250ZW50YCwiZGF0YS1hbGlnbi10cmlnZ2VyIjplLnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGB9LHsuLi50LiRhdHRycywuLi5iKG8pfSx7Y2xhc3M6YihwKShgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLW9wZW46YW5pbWF0ZS1pbiBkYXRhLWNsb3NlZDphbmltYXRlLW91dCBkYXRhLWNsb3NlZDpmYWRlLW91dC0wIGRhdGEtb3BlbjpmYWRlLWluLTAgZGF0YS1jbG9zZWQ6em9vbS1vdXQtOTUgZGF0YS1vcGVuOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmluZy1mb3JlZ3JvdW5kLzEwIG1pbi13LTM2IHJvdW5kZWQtbGcgc2hhZG93LW1kIHJpbmctMSBkdXJhdGlvbi0xMDAgZGF0YS1bc2lkZT1pbmxpbmUtc3RhcnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPWlubGluZS1lbmRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGNuLW1lbnUtdHJhbnNsdWNlbnQgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG9yaWdpbi0oLS1yZWthLXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byBkYXRhLVthbGlnbi10cmlnZ2VyPXRydWVdOmFuaW1hdGUtbm9uZWAsZS5wb3NpdGlvbj09PWBwb3BwZXJgJiZgZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMWAsbi5jbGFzcyl9KSx7ZGVmYXVsdDpCKCgpPT5bTChiKHRhKSksTChiKFlpKSx7ImRhdGEtcG9zaXRpb24iOmUucG9zaXRpb24sY2xhc3M6ZWUoYihwKShgZGF0YS1bcG9zaXRpb249cG9wcGVyXTpoLSgtLXJla2Etc2VsZWN0LXRyaWdnZXItaGVpZ2h0KSBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOnctZnVsbCBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOm1pbi13LSgtLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgpYCkpfSx7ZGVmYXVsdDpCKCgpPT5beih0LiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgZGF0YS1wb3NpdGlvbmAsYGNsYXNzYF0pLEwoYihlYSkpXSksXzozfSwxNixbYGRhdGEtYWxpZ24tdHJpZ2dlcmAsYGNsYXNzYF0pXSksXzozfSkpfX0pLFFpPXtjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcmB9LCRpPVIoe19fbmFtZTpgU2VsZWN0SXRlbWAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LHRleHRWYWx1ZTp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2ApLHI9S2Uobik7cmV0dXJuKGUsbik9PihQKCksSShiKEJpKSxNKHsiZGF0YS1zbG90Ijpgc2VsZWN0LWl0ZW1gfSxiKHIpLHtjbGFzczpiKHApKGBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBub3QtZGF0YS1bdmFyaWFudD1kZXN0cnVjdGl2ZV06Zm9jdXM6Kio6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBnYXAtMS41IHJvdW5kZWQtbWQgcHktMSBwci04IHBsLTEuNSB0ZXh0LXNtIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTIgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCx0LmNsYXNzKX0pLHtkZWZhdWx0OkIoKCk9PltIZShgc3BhbmAsUWksW0woYihWaSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgaW5kaWNhdG9yLWljb25gLHt9LCgpPT5bTChiKGxlKSx7aWNvbjpiKHYpLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIHNpemUtMy41YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSldKSxMKGIoSGkpLG51bGwse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxlYT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2ApLHI9S2Uobik7cmV0dXJuKGUsbik9PihQKCksSShiKEdpKSxNKHsiZGF0YS1zbG90Ijpgc2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvbmB9LGIocikse2NsYXNzOmIocCkoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bTChiKGxlKSx7aWNvbjpiKExlKSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSx0YT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUEodCxgY2xhc3NgKSxyPUtlKG4pO3JldHVybihlLG4pPT4oUCgpLEkoYihLaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uYH0sYihyKSx7Y2xhc3M6YihwKShgYmctcG9wb3ZlciB6LTEwIGZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGAse30sKCk9PltMKGIobGUpLHtpY29uOmIoXyksY2xhc3M6YHNpemUtNGB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksbmE9Uih7X19uYW1lOmBTZWxlY3RUcmlnZ2VyYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0scmVmZXJlbmNlOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2AsYHNpemVgKSxyPUtlKG4pO3JldHVybihuLGkpPT4oUCgpLEkoYihxaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC10cmlnZ2VyYCwiZGF0YS1zaXplIjplLnNpemV9LGIocikse2NsYXNzOmIocCkoYGJvcmRlci1pbnB1dCBkYXRhLXBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGdhcC0xLjUgcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHktMiBwci0yIHBsLTIuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTggZGF0YS1bc2l6ZT1zbV06aC03IGRhdGEtW3NpemU9c21dOnJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHdoaXRlc3BhY2Utbm93cmFwIG91dGxpbmUtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6QigoKT0+W3oobi4kc2xvdHMsYGRlZmF1bHRgKSxMKGIoTGkpLHsiYXMtY2hpbGQiOmBgfSx7ZGVmYXVsdDpCKCgpPT5bTChiKGxlKSx7aWNvbjpiKExlKSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHNpemUtNCBwb2ludGVyLWV2ZW50cy1ub25lYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pXSksXzozfSwxNixbYGRhdGEtc2l6ZWAsYGNsYXNzYF0pKX19KSxyYT1SKHtfX25hbWU6YFNlbGVjdFZhbHVlYCxwcm9wczp7cGxhY2Vob2xkZXI6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIoSmkpLE0oeyJkYXRhLXNsb3QiOmBzZWxlY3QtdmFsdWVgfSx0KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pO2Z1bmN0aW9uIGlhKGUpe3JldHVybiBlKy41fDB9dmFyIGFhPShlLHQsbik9Pk1hdGgubWF4KE1hdGgubWluKGUsbiksdCk7ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGFhKGlhKGUqMi41NSksMCwyNTUpfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBhYShpYShlKjI1NSksMCwyNTUpfWZ1bmN0aW9uIGNhKGUpe3JldHVybiBhYShpYShlLzIuNTUpLzEwMCwwLDEpfWZ1bmN0aW9uIGxhKGUpe3JldHVybiBhYShpYShlKjEwMCksMCwxMDApfXZhciB1YT17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LEE6MTAsQjoxMSxDOjEyLEQ6MTMsRToxNCxGOjE1LGE6MTAsYjoxMSxjOjEyLGQ6MTMsZToxNCxmOjE1fSxkYT1bLi4uYDAxMjM0NTY3ODlBQkNERUZgXSxmYT1lPT5kYVtlJjE1XSxwYT1lPT5kYVsoZSYyNDApPj40XStkYVtlJjE1XSxtYT1lPT4oZSYyNDApPj40PT0oZSYxNSksaGE9ZT0+bWEoZS5yKSYmbWEoZS5nKSYmbWEoZS5iKSYmbWEoZS5hKTtmdW5jdGlvbiBnYShlKXt2YXIgdD1lLmxlbmd0aCxuO3JldHVybiBlWzBdPT09YCNgJiYodD09PTR8fHQ9PT01P249e3I6MjU1JnVhW2VbMV1dKjE3LGc6MjU1JnVhW2VbMl1dKjE3LGI6MjU1JnVhW2VbM11dKjE3LGE6dD09PTU/dWFbZVs0XV0qMTc6MjU1fToodD09PTd8fHQ9PT05KSYmKG49e3I6dWFbZVsxXV08PDR8dWFbZVsyXV0sZzp1YVtlWzNdXTw8NHx1YVtlWzRdXSxiOnVhW2VbNV1dPDw0fHVhW2VbNl1dLGE6dD09PTk/dWFbZVs3XV08PDR8dWFbZVs4XV06MjU1fSkpLG59dmFyIF9hPShlLHQpPT5lPDI1NT90KGUpOmBgO2Z1bmN0aW9uIHZhKGUpe3ZhciB0PWhhKGUpP2ZhOnBhO3JldHVybiBlP2AjYCt0KGUucikrdChlLmcpK3QoZS5iKStfYShlLmEsdCk6dm9pZCAwfXZhciB5YT0vXihoc2xhP3xod2J8aHN2KVwoXHMqKFstKy5lXGRdKykoPzpkZWcpP1tccyxdKyhbLSsuZVxkXSspJVtccyxdKyhbLSsuZVxkXSspJSg/OltccyxdKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiBiYShlLHQsbil7bGV0IHI9dCpNYXRoLm1pbihuLDEtbiksaT0odCxpPSh0K2UvMzApJTEyKT0+bi1yKk1hdGgubWF4KE1hdGgubWluKGktMyw5LWksMSksLTEpO3JldHVybltpKDApLGkoOCksaSg0KV19ZnVuY3Rpb24geGEoZSx0LG4pe2xldCByPShyLGk9KHIrZS82MCklNik9Pm4tbip0Kk1hdGgubWF4KE1hdGgubWluKGksNC1pLDEpLDApO3JldHVybltyKDUpLHIoMykscigxKV19ZnVuY3Rpb24gU2EoZSx0LG4pe2xldCByPWJhKGUsMSwuNSksaTtmb3IodCtuPjEmJihpPTEvKHQrbiksdCo9aSxuKj1pKSxpPTA7aTwzO2krKylyW2ldKj0xLXQtbixyW2ldKz10O3JldHVybiByfWZ1bmN0aW9uIENhKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT1pPyh0LW4pL3IrKHQ8bj82OjApOnQ9PT1pPyhuLWUpL3IrMjooZS10KS9yKzR9ZnVuY3Rpb24gd2EoZSl7bGV0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9TWF0aC5tYXgodCxuLHIpLGE9TWF0aC5taW4odCxuLHIpLG89KGkrYSkvMixzLGMsbDtyZXR1cm4gaSE9PWEmJihsPWktYSxjPW8+LjU/bC8oMi1pLWEpOmwvKGkrYSkscz1DYSh0LG4scixsLGkpLHM9cyo2MCsuNSksW3N8MCxjfHwwLG9dfWZ1bmN0aW9uIFRhKGUsdCxuLHIpe3JldHVybihBcnJheS5pc0FycmF5KHQpP2UodFswXSx0WzFdLHRbMl0pOmUodCxuLHIpKS5tYXAoc2EpfWZ1bmN0aW9uIEVhKGUsdCxuKXtyZXR1cm4gVGEoYmEsZSx0LG4pfWZ1bmN0aW9uIERhKGUsdCxuKXtyZXR1cm4gVGEoU2EsZSx0LG4pfWZ1bmN0aW9uIE9hKGUsdCxuKXtyZXR1cm4gVGEoeGEsZSx0LG4pfWZ1bmN0aW9uIGthKGUpe3JldHVybihlJTM2MCszNjApJTM2MH1mdW5jdGlvbiBBYShlKXtsZXQgdD15YS5leGVjKGUpLG49MjU1LHI7aWYoIXQpcmV0dXJuO3RbNV0hPT1yJiYobj10WzZdP29hKCt0WzVdKTpzYSgrdFs1XSkpO2xldCBpPWthKCt0WzJdKSxhPXRbM10vMTAwLG89dFs0XS8xMDA7cmV0dXJuIHI9dFsxXT09PWBod2JgP0RhKGksYSxvKTp0WzFdPT09YGhzdmA/T2EoaSxhLG8pOkVhKGksYSxvKSx7cjpyWzBdLGc6clsxXSxiOnJbMl0sYTpufX1mdW5jdGlvbiBqYShlLHQpe3ZhciBuPXdhKGUpO25bMF09a2EoblswXSt0KSxuPUVhKG4pLGUucj1uWzBdLGUuZz1uWzFdLGUuYj1uWzJdfWZ1bmN0aW9uIE1hKGUpe2lmKCFlKXJldHVybjtsZXQgdD13YShlKSxuPXRbMF0scj1sYSh0WzFdKSxpPWxhKHRbMl0pO3JldHVybiBlLmE8MjU1P2Boc2xhKCR7bn0sICR7cn0lLCAke2l9JSwgJHtjYShlLmEpfSlgOmBoc2woJHtufSwgJHtyfSUsICR7aX0lKWB9dmFyIE5hPXt4OmBkYXJrYCxaOmBsaWdodGAsWTpgcmVgLFg6YGJsdWAsVzpgZ3JgLFY6YG1lZGl1bWAsVTpgc2xhdGVgLEE6YGVlYCxUOmBvbGAsUzpgb3JgLEI6YHJhYCxDOmBsYXRlZ2AsRDpgaWdodHNgLFI6YGluYCxROmB0dXJxdW9pc2AsRTpgaGlgLFA6YHJvYCxPOmBhbGAsTjpgbGVgLE06YGRlYCxMOmB5ZWxsb2AsRjpgZW5gLEs6YGNoYCxHOmBhcmtzYCxIOmBlYWAsSTpgaWdodGdgLEo6YHdoYH0sUGE9e09pY2VYZTpgZjBmOGZmYCxhbnRpcXVld0V0ZTpgZmFlYmQ3YCxhcXVhOmBmZmZmYCxhcXVhbWFyUmU6YDdmZmZkNGAsYXp1WTpgZjBmZmZmYCxiZWlnZTpgZjVmNWRjYCxiaXNxdWU6YGZmZTRjNGAsYmxhY2s6YDBgLGJsYW5LZWRPbW9uZDpgZmZlYmNkYCxYZTpgZmZgLFhldmlUZXQ6YDhhMmJlMmAsYlB3bjpgYTUyYTJhYCxidXJseXdvb2Q6YGRlYjg4N2AsY2FNdFhlOmA1ZjllYTBgLEthcnRZdXNlOmA3ZmZmMDBgLEtvY1RhdGU6YGQyNjkxZWAsY1NPOmBmZjdmNTBgLGNTbmZsb3dlclhlOmA2NDk1ZWRgLGNTbnNpbGs6YGZmZjhkY2AsY3JpbXNvbjpgZGMxNDNjYCxjeWFuOmBmZmZmYCx4WGU6YDhiYCx4Y3lhbjpgOGI4YmAseGdUTW5QZDpgYjg4NjBiYCx4V2F5OmBhOWE5YTlgLHhnWUY6YDY0MDBgLHhnWXk6YGE5YTlhOWAseGtoYWtpOmBiZGI3NmJgLHhtYWdGdGE6YDhiMDA4YmAseFRpdmVnWUY6YDU1NmIyZmAseFNhbmdlOmBmZjhjMDBgLHhTY0VkOmA5OTMyY2NgLHhZZDpgOGIwMDAwYCx4c09tb246YGU5OTY3YWAseHNIZ1lGOmA4ZmJjOGZgLHhVWGU6YDQ4M2Q4YmAseFVXYXk6YDJmNGY0ZmAseFVnWXk6YDJmNGY0ZmAseFFlOmBjZWQxYCx4dmlUZXQ6YDk0MDBkM2AsZEFwcFJrOmBmZjE0OTNgLGRBcHNreVhlOmBiZmZmYCxkaW1XYXk6YDY5Njk2OWAsZGltZ1l5OmA2OTY5NjlgLGRvZGdlclhlOmAxZTkwZmZgLGZpWWJyaWNrOmBiMjIyMjJgLGZsU093RXRlOmBmZmZhZjBgLGZvWXN0V0FuOmAyMjhiMjJgLGZ1S3NpYTpgZmYwMGZmYCxnYVJzYlNvOmBkY2RjZGNgLGdob3N0d0V0ZTpgZjhmOGZmYCxnVGQ6YGZmZDcwMGAsZ1RNblBkOmBkYWE1MjBgLFdheTpgODA4MDgwYCxnWUY6YDgwMDBgLGdZRkx3OmBhZGZmMmZgLGdZeTpgODA4MDgwYCxob25leU13OmBmMGZmZjBgLGhvdHBSazpgZmY2OWI0YCxSZGlhbllkOmBjZDVjNWNgLFJkaWdvOmA0YjAwODJgLGl2U3k6YGZmZmZmMGAsa2hha2k6YGYwZTY4Y2AsbGF2Rk1yOmBlNmU2ZmFgLGxhdkZNclhzaDpgZmZmMGY1YCxsYXduZ1lGOmA3Y2ZjMDBgLE5tb25jRWZmb246YGZmZmFjZGAsWlhlOmBhZGQ4ZTZgLFpjU086YGYwODA4MGAsWmN5YW46YGUwZmZmZmAsWmdUTW5QZEx3OmBmYWZhZDJgLFpXYXk6YGQzZDNkM2AsWmdZRjpgOTBlZTkwYCxaZ1l5OmBkM2QzZDNgLFpwUms6YGZmYjZjMWAsWnNPbW9uOmBmZmEwN2FgLFpzSGdZRjpgMjBiMmFhYCxac2t5WGU6YDg3Y2VmYWAsWlVXYXk6YDc3ODg5OWAsWlVnWXk6YDc3ODg5OWAsWnN0QWxYZTpgYjBjNGRlYCxaTHc6YGZmZmZlMGAsbGltZTpgZmYwMGAsbGltZWdZRjpgMzJjZDMyYCxsUkY6YGZhZjBlNmAsbWFnRnRhOmBmZjAwZmZgLG1hUG9uOmA4MDAwMDBgLFZhcXVhbWFyUmU6YDY2Y2RhYWAsVlhlOmBjZGAsVlNjRWQ6YGJhNTVkM2AsVnB1cnBOOmA5MzcwZGJgLFZzSGdZRjpgM2NiMzcxYCxWVVhlOmA3YjY4ZWVgLFZzcHJSZ2dZRjpgZmE5YWAsVlFlOmA0OGQxY2NgLFZ2aVRldFlkOmBjNzE1ODVgLG1pZG5pZ2h0WGU6YDE5MTk3MGAsbVJ0Y1lhbTpgZjVmZmZhYCxtaXN0eVBzZTpgZmZlNGUxYCxtb2NjYXNSOmBmZmU0YjVgLG5hdmFqb3dFdGU6YGZmZGVhZGAsbmF2eTpgODBgLFRkbGFjZTpgZmRmNWU2YCxUaXZlOmA4MDgwMDBgLFRpdmVkQmI6YDZiOGUyM2AsU2FuZ2U6YGZmYTUwMGAsU2FuZ2VZZDpgZmY0NTAwYCxTY0VkOmBkYTcwZDZgLHBPZWdUTW5QZDpgZWVlOGFhYCxwT2VnWUY6YDk4ZmI5OGAscE9lUWU6YGFmZWVlZWAscE9ldmlUZXRZZDpgZGI3MDkzYCxwYXBheWF3RXA6YGZmZWZkNWAscEhLcHVmZjpgZmZkYWI5YCxwZXJ1OmBjZDg1M2ZgLHBSazpgZmZjMGNiYCxwbHVtOmBkZGEwZGRgLHBvd01yWGU6YGIwZTBlNmAscHVycE46YDgwMDA4MGAsWWJlY2NhcHVycE46YDY2MzM5OWAsWWQ6YGZmMDAwMGAsUHN5YnJvd246YGJjOGY4ZmAsUHlPWGU6YDQxNjllMWAsc2FkZE5iUHduOmA4YjQ1MTNgLHNPbW9uOmBmYTgwNzJgLHNhbmR5YlB3bjpgZjRhNDYwYCxzSGdZRjpgMmU4YjU3YCxzSHNoZWxsOmBmZmY1ZWVgLHNpRm5hOmBhMDUyMmRgLHNpbHZlcjpgYzBjMGMwYCxza3lYZTpgODdjZWViYCxVWGU6YDZhNWFjZGAsVVdheTpgNzA4MDkwYCxVZ1l5OmA3MDgwOTBgLHNub3c6YGZmZmFmYWAsc3ByUmdnWUY6YGZmN2ZgLHN0QWxYZTpgNDY4MmI0YCx0YW46YGQyYjQ4Y2AsdGVPOmA4MDgwYCx0RXN0TjpgZDhiZmQ4YCx0b21hdG86YGZmNjM0N2AsUWU6YDQwZTBkMGAsdmlUZXQ6YGVlODJlZWAsSkh0OmBmNWRlYjNgLHdFdGU6YGZmZmZmZmAsd0V0ZXNtb2tlOmBmNWY1ZjVgLEx3OmBmZmZmMDBgLEx3Z1lGOmA5YWNkMzJgfTtmdW5jdGlvbiBGYSgpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoUGEpLG49T2JqZWN0LmtleXMoTmEpLHIsaSxhLG8scztmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3Iobz1zPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWE9bltpXSxzPXMucmVwbGFjZShhLE5hW2FdKTthPXBhcnNlSW50KFBhW29dLDE2KSxlW3NdPVthPj4xNiYyNTUsYT4+OCYyNTUsYSYyNTVdfXJldHVybiBlfXZhciBJYTtmdW5jdGlvbiBMYShlKXtJYXx8KElhPUZhKCksSWEudHJhbnNwYXJlbnQ9WzAsMCwwLDBdKTtsZXQgdD1JYVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB0JiZ7cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0Lmxlbmd0aD09PTQ/dFszXToyNTV9fXZhciBSYT0vXnJnYmE/XChccyooWy0rLlxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpPyg/OltccywvXSsoWy0rLmVcZF0rKSglKT8pP1xzKlwpJC87ZnVuY3Rpb24gemEoZSl7bGV0IHQ9UmEuZXhlYyhlKSxuPTI1NSxyLGksYTtpZih0KXtpZih0WzddIT09cil7bGV0IGU9K3RbN107bj10WzhdP29hKGUpOmFhKGUqMjU1LDAsMjU1KX1yZXR1cm4gcj0rdFsxXSxpPSt0WzNdLGE9K3RbNV0scj0yNTUmKHRbMl0/b2Eocik6YWEociwwLDI1NSkpLGk9MjU1Jih0WzRdP29hKGkpOmFhKGksMCwyNTUpKSxhPTI1NSYodFs2XT9vYShhKTphYShhLDAsMjU1KSkse3IsZzppLGI6YSxhOm59fX1mdW5jdGlvbiBCYShlKXtyZXR1cm4gZSYmKGUuYTwyNTU/YHJnYmEoJHtlLnJ9LCAke2UuZ30sICR7ZS5ifSwgJHtjYShlLmEpfSlgOmByZ2IoJHtlLnJ9LCAke2UuZ30sICR7ZS5ifSlgKX12YXIgVmE9ZT0+ZTw9LjAwMzEzMDg/ZSoxMi45MjplKiooMS8yLjQpKjEuMDU1LS4wNTUsSGE9ZT0+ZTw9LjA0MDQ1P2UvMTIuOTI6KChlKy4wNTUpLzEuMDU1KSoqMi40O2Z1bmN0aW9uIFVhKGUsdCxuKXtsZXQgcj1IYShjYShlLnIpKSxpPUhhKGNhKGUuZykpLGE9SGEoY2EoZS5iKSk7cmV0dXJue3I6c2EoVmEocituKihIYShjYSh0LnIpKS1yKSkpLGc6c2EoVmEoaStuKihIYShjYSh0LmcpKS1pKSkpLGI6c2EoVmEoYStuKihIYShjYSh0LmIpKS1hKSkpLGE6ZS5hK24qKHQuYS1lLmEpfX1mdW5jdGlvbiBXYShlLHQsbil7aWYoZSl7bGV0IHI9d2EoZSk7clt0XT1NYXRoLm1heCgwLE1hdGgubWluKHJbdF0rclt0XSpuLHQ9PT0wPzM2MDoxKSkscj1FYShyKSxlLnI9clswXSxlLmc9clsxXSxlLmI9clsyXX19ZnVuY3Rpb24gR2EoZSx0KXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbih0fHx7fSxlKX1mdW5jdGlvbiBLYShlKXt2YXIgdD17cjowLGc6MCxiOjAsYToyNTV9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoPj0zJiYodD17cjplWzBdLGc6ZVsxXSxiOmVbMl0sYToyNTV9LGUubGVuZ3RoPjMmJih0LmE9c2EoZVszXSkpKToodD1HYShlLHtyOjAsZzowLGI6MCxhOjF9KSx0LmE9c2EodC5hKSksdH1mdW5jdGlvbiBxYShlKXtyZXR1cm4gZS5jaGFyQXQoMCk9PT1gcmA/emEoZSk6QWEoZSl9dmFyIEphPWNsYXNzIGV7Y29uc3RydWN0b3IodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7bGV0IG49dHlwZW9mIHQscjtuPT09YG9iamVjdGA/cj1LYSh0KTpuPT09YHN0cmluZ2AmJihyPWdhKHQpfHxMYSh0KXx8cWEodCkpLHRoaXMuX3JnYj1yLHRoaXMuX3ZhbGlkPSEhcn1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5fdmFsaWR9Z2V0IHJnYigpe3ZhciBlPUdhKHRoaXMuX3JnYik7cmV0dXJuIGUmJihlLmE9Y2EoZS5hKSksZX1zZXQgcmdiKGUpe3RoaXMuX3JnYj1LYShlKX1yZ2JTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/QmEodGhpcy5fcmdiKTp2b2lkIDB9aGV4U3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP3ZhKHRoaXMuX3JnYik6dm9pZCAwfWhzbFN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9NYSh0aGlzLl9yZ2IpOnZvaWQgMH1taXgoZSx0KXtpZihlKXtsZXQgbj10aGlzLnJnYixyPWUucmdiLGksYT10PT09aT8uNTp0LG89MiphLTEscz1uLmEtci5hLGM9KChvKnM9PT0tMT9vOihvK3MpLygxK28qcykpKzEpLzI7aT0xLWMsbi5yPTI1NSZjKm4ucitpKnIucisuNSxuLmc9MjU1JmMqbi5nK2kqci5nKy41LG4uYj0yNTUmYypuLmIraSpyLmIrLjUsbi5hPWEqbi5hKygxLWEpKnIuYSx0aGlzLnJnYj1ufXJldHVybiB0aGlzfWludGVycG9sYXRlKGUsdCl7cmV0dXJuIGUmJih0aGlzLl9yZ2I9VWEodGhpcy5fcmdiLGUuX3JnYix0KSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLnJnYil9YWxwaGEoZSl7cmV0dXJuIHRoaXMuX3JnYi5hPXNhKGUpLHRoaXN9Y2xlYXJlcihlKXtsZXQgdD10aGlzLl9yZ2I7cmV0dXJuIHQuYSo9MS1lLHRoaXN9Z3JleXNjYWxlKCl7bGV0IGU9dGhpcy5fcmdiO3JldHVybiBlLnI9ZS5nPWUuYj1pYShlLnIqLjMrZS5nKi41OStlLmIqLjExKSx0aGlzfW9wYXF1ZXIoZSl7bGV0IHQ9dGhpcy5fcmdiO3JldHVybiB0LmEqPTErZSx0aGlzfW5lZ2F0ZSgpe2xldCBlPXRoaXMuX3JnYjtyZXR1cm4gZS5yPTI1NS1lLnIsZS5nPTI1NS1lLmcsZS5iPTI1NS1lLmIsdGhpc31saWdodGVuKGUpe3JldHVybiBXYSh0aGlzLl9yZ2IsMixlKSx0aGlzfWRhcmtlbihlKXtyZXR1cm4gV2EodGhpcy5fcmdiLDIsLWUpLHRoaXN9c2F0dXJhdGUoZSl7cmV0dXJuIFdhKHRoaXMuX3JnYiwxLGUpLHRoaXN9ZGVzYXR1cmF0ZShlKXtyZXR1cm4gV2EodGhpcy5fcmdiLDEsLWUpLHRoaXN9cm90YXRlKGUpe3JldHVybiBqYSh0aGlzLl9yZ2IsZSksdGhpc319O2Z1bmN0aW9uIFlhKCl7fXZhciBYYT0oKCk9PntsZXQgZT0wO3JldHVybigpPT5lKyt9KSgpO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIGU9PW51bGx9ZnVuY3Rpb24gVyhlKXtpZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2xldCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gdC5zbGljZSgwLDcpPT09YFtvYmplY3RgJiZ0LnNsaWNlKC02KT09PWBBcnJheV1gfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUhPT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBPYmplY3RdYH1mdW5jdGlvbiBLKGUpe3JldHVybih0eXBlb2YgZT09YG51bWJlcmB8fGUgaW5zdGFuY2VvZiBOdW1iZXIpJiZpc0Zpbml0ZSgrZSl9ZnVuY3Rpb24gWmEoZSx0KXtyZXR1cm4gSyhlKT9lOnR9ZnVuY3Rpb24gcShlLHQpe3JldHVybiBlPT09dm9pZCAwP3Q6ZX12YXIgUWE9KGUsdCk9PnR5cGVvZiBlPT1gc3RyaW5nYCYmZS5lbmRzV2l0aChgJWApP3BhcnNlRmxvYXQoZSkvMTAwKnQ6K2U7ZnVuY3Rpb24gSihlLHQsbil7aWYoZSYmdHlwZW9mIGUuY2FsbD09YGZ1bmN0aW9uYClyZXR1cm4gZS5hcHBseShuLHQpfWZ1bmN0aW9uIFkoZSx0LG4scil7bGV0IGksYSxvO2lmKFcoZSkpe2lmKGE9ZS5sZW5ndGgscilmb3IoaT1hLTE7aT49MDtpLS0pdC5jYWxsKG4sZVtpXSxpKTtlbHNlIGZvcihpPTA7aTxhO2krKyl0LmNhbGwobixlW2ldLGkpfWVsc2UgaWYoRyhlKSlmb3Iobz1PYmplY3Qua2V5cyhlKSxhPW8ubGVuZ3RoLGk9MDtpPGE7aSsrKXQuY2FsbChuLGVbb1tpXV0sb1tpXSl9ZnVuY3Rpb24gJGEoZSx0KXtsZXQgbixyLGksYTtpZighZXx8IXR8fGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24paWYoaT1lW25dLGE9dFtuXSxpLmRhdGFzZXRJbmRleCE9PWEuZGF0YXNldEluZGV4fHxpLmluZGV4IT09YS5pbmRleClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlbyhlKXtpZihXKGUpKXJldHVybiBlLm1hcChlbyk7aWYoRyhlKSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPU9iamVjdC5rZXlzKGUpLHI9bi5sZW5ndGgsaT0wO2Zvcig7aTxyOysraSl0W25baV1dPWVvKGVbbltpXV0pO3JldHVybiB0fXJldHVybiBlfWZ1bmN0aW9uIHRvKGUpe3JldHVybltgX19wcm90b19fYCxgcHJvdG90eXBlYCxgY29uc3RydWN0b3JgXS5pbmRleE9mKGUpPT09LTF9ZnVuY3Rpb24gbm8oZSx0LG4scil7aWYoIXRvKGUpKXJldHVybjtsZXQgaT10W2VdLGE9bltlXTtHKGkpJiZHKGEpP3JvKGksYSxyKTp0W2VdPWVvKGEpfWZ1bmN0aW9uIHJvKGUsdCxuKXtsZXQgcj1XKHQpP3Q6W3RdLGk9ci5sZW5ndGg7aWYoIUcoZSkpcmV0dXJuIGU7bnx8PXt9O2xldCBhPW4ubWVyZ2VyfHxubyxvO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2lmKG89clt0XSwhRyhvKSljb250aW51ZTtsZXQgaT1PYmplY3Qua2V5cyhvKTtmb3IobGV0IHQ9MCxyPWkubGVuZ3RoO3Q8cjsrK3QpYShpW3RdLGUsbyxuKX1yZXR1cm4gZX1mdW5jdGlvbiBpbyhlLHQpe3JldHVybiBybyhlLHQse21lcmdlcjphb30pfWZ1bmN0aW9uIGFvKGUsdCxuKXtpZighdG8oZSkpcmV0dXJuO2xldCByPXRbZV0saT1uW2VdO0cocikmJkcoaSk/aW8ocixpKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKXx8KHRbZV09ZW8oaSkpfXZhciBvbz17IiI6ZT0+ZSx4OmU9PmUueCx5OmU9PmUueX07ZnVuY3Rpb24gc28oZSl7bGV0IHQ9ZS5zcGxpdChgLmApLG49W10scj1gYDtmb3IobGV0IGUgb2YgdClyKz1lLHIuZW5kc1dpdGgoYFxcYCk/cj1yLnNsaWNlKDAsLTEpK2AuYDoobi5wdXNoKHIpLHI9YGApO3JldHVybiBufWZ1bmN0aW9uIGNvKGUpe2xldCB0PXNvKGUpO3JldHVybiBlPT57Zm9yKGxldCBuIG9mIHQpe2lmKG49PT1gYClicmVhaztlJiY9ZVtuXX1yZXR1cm4gZX19ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4ob29bdF18fChvb1t0XT1jbyh0KSkpKGUpfWZ1bmN0aW9uIHVvKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9dmFyIGZvPWU9PmUhPT12b2lkIDAscG89ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAsbW89KGUsdCk9PntpZihlLnNpemUhPT10LnNpemUpcmV0dXJuITE7Zm9yKGxldCBuIG9mIGUpaWYoIXQuaGFzKG4pKXJldHVybiExO3JldHVybiEwfTtmdW5jdGlvbiBobyhlKXtyZXR1cm4gZS50eXBlPT09YG1vdXNldXBgfHxlLnR5cGU9PT1gY2xpY2tgfHxlLnR5cGU9PT1gY29udGV4dG1lbnVgfXZhciBYPU1hdGguUEksZ289MipYO2dvK1g7dmFyIF9vPTEvMCx2bz1YLzE4MCx5bz1YLzIsYm89WC80LHhvPVgqMi8zLFNvPU1hdGgubG9nMTAsQ289TWF0aC5zaWduO2Z1bmN0aW9uIHdvKGUsdCxuKXtyZXR1cm4gTWF0aC5hYnMoZS10KTxufWZ1bmN0aW9uIFRvKGUpe2xldCB0PU1hdGgucm91bmQoZSk7ZT13byhlLHQsZS8xZTMpP3Q6ZTtsZXQgbj0xMCoqTWF0aC5mbG9vcihTbyhlKSkscj1lL247cmV0dXJuKHI8PTE/MTpyPD0yPzI6cjw9NT81OjEwKSpufWZ1bmN0aW9uIEVvKGUpe2xldCB0PVtdLG49TWF0aC5zcXJ0KGUpLHI7Zm9yKHI9MTtyPG47cisrKWUlcj09PTAmJih0LnB1c2gociksdC5wdXNoKGUvcikpO3JldHVybiBuPT09KG58MCkmJnQucHVzaChuKSx0LnNvcnQoKGUsdCk9PmUtdCkucG9wKCksdH1mdW5jdGlvbiBEbyhlKXtyZXR1cm4gdHlwZW9mIGU9PWBzeW1ib2xgfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIShTeW1ib2wudG9QcmltaXRpdmUgaW4gZXx8YHRvU3RyaW5nYGluIGV8fGB2YWx1ZU9mYGluIGUpfWZ1bmN0aW9uIE9vKGUpe3JldHVybiFEbyhlKSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBrbyhlLHQpe2xldCBuPU1hdGgucm91bmQoZSk7cmV0dXJuIG4tdDw9ZSYmbit0Pj1lfWZ1bmN0aW9uIEFvKGUsdCxuKXtsZXQgcixpLGE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYT1lW3JdW25dLGlzTmFOKGEpfHwodC5taW49TWF0aC5taW4odC5taW4sYSksdC5tYXg9TWF0aC5tYXgodC5tYXgsYSkpfWZ1bmN0aW9uIGpvKGUpe3JldHVybiBYLzE4MCplfWZ1bmN0aW9uIE1vKGUpe3JldHVybiAxODAvWCplfWZ1bmN0aW9uIE5vKGUpe2lmKCFLKGUpKXJldHVybjtsZXQgdD0xLG49MDtmb3IoO01hdGgucm91bmQoZSp0KS90IT09ZTspdCo9MTAsbisrO3JldHVybiBufWZ1bmN0aW9uIFBvKGUsdCl7bGV0IG49dC54LWUueCxyPXQueS1lLnksaT1NYXRoLnNxcnQobipuK3IqciksYT1NYXRoLmF0YW4yKHIsbik7cmV0dXJuIGE8LS41KlgmJihhKz1nbykse2FuZ2xlOmEsZGlzdGFuY2U6aX19ZnVuY3Rpb24gRm8oZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KCh0LngtZS54KSoqMisodC55LWUueSkqKjIpfWZ1bmN0aW9uIElvKGUpe3JldHVybihlJWdvK2dvKSVnb31mdW5jdGlvbiBMbyhlLHQsbixyKXtsZXQgaT1JbyhlKSxhPUlvKHQpLG89SW8obikscz1JbyhhLWkpLGM9SW8oby1pKSxsPUlvKGktYSksdT1JbyhpLW8pO3JldHVybiBpPT09YXx8aT09PW98fHImJmE9PT1vfHxzPmMmJmw8dX1mdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4obixlKSl9ZnVuY3Rpb24gem8oZSl7cmV0dXJuIFJvKGUsLTMyNzY4LDMyNzY3KX1mdW5jdGlvbiBCbyhlLHQsbixyPTFlLTYpe3JldHVybiBlPj1NYXRoLm1pbih0LG4pLXImJmU8PU1hdGgubWF4KHQsbikrcn1mdW5jdGlvbiBWbyhlLHQsbil7bnx8PShuPT5lW25dPHQpO2xldCByPWUubGVuZ3RoLTEsaT0wLGE7Zm9yKDtyLWk+MTspYT1pK3I+PjEsbihhKT9pPWE6cj1hO3JldHVybntsbzppLGhpOnJ9fXZhciBIbz0oZSx0LG4scik9PlZvKGUsbixyP3I9PntsZXQgaT1lW3JdW3RdO3JldHVybiBpPG58fGk9PT1uJiZlW3IrMV1bdF09PT1ufTpyPT5lW3JdW3RdPG4pLFVvPShlLHQsbik9PlZvKGUsbixyPT5lW3JdW3RdPj1uKTtmdW5jdGlvbiBXbyhlLHQsbil7bGV0IHI9MCxpPWUubGVuZ3RoO2Zvcig7cjxpJiZlW3JdPHQ7KXIrKztmb3IoO2k+ciYmZVtpLTFdPm47KWktLTtyZXR1cm4gcj4wfHxpPGUubGVuZ3RoP2Uuc2xpY2UocixpKTplfXZhciBHbz1bYHB1c2hgLGBwb3BgLGBzaGlmdGAsYHNwbGljZWAsYHVuc2hpZnRgXTtmdW5jdGlvbiBLbyhlLHQpe2lmKGUuX2NoYXJ0anMpe2UuX2NoYXJ0anMubGlzdGVuZXJzLnB1c2godCk7cmV0dXJufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2hhcnRqcyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOntsaXN0ZW5lcnM6W3RdfX0pLEdvLmZvckVhY2godD0+e2xldCBuPWBfb25EYXRhYCt1byh0KSxyPWVbdF07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWUoLi4udCl7bGV0IGk9ci5hcHBseSh0aGlzLHQpO3JldHVybiBlLl9jaGFydGpzLmxpc3RlbmVycy5mb3JFYWNoKGU9Pnt0eXBlb2YgZVtuXT09YGZ1bmN0aW9uYCYmZVtuXSguLi50KX0pLGl9fSl9KX1mdW5jdGlvbiBxbyhlLHQpe2xldCBuPWUuX2NoYXJ0anM7aWYoIW4pcmV0dXJuO2xldCByPW4ubGlzdGVuZXJzLGk9ci5pbmRleE9mKHQpO2khPT0tMSYmci5zcGxpY2UoaSwxKSwhKHIubGVuZ3RoPjApJiYoR28uZm9yRWFjaCh0PT57ZGVsZXRlIGVbdF19KSxkZWxldGUgZS5fY2hhcnRqcyl9ZnVuY3Rpb24gSm8oZSl7bGV0IHQ9bmV3IFNldChlKTtyZXR1cm4gdC5zaXplPT09ZS5sZW5ndGg/ZTpBcnJheS5mcm9tKHQpfXZhciBZbz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PmB1YD9mdW5jdGlvbihlKXtyZXR1cm4gZSgpfTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfSgpO2Z1bmN0aW9uIFhvKGUsdCl7bGV0IG49W10scj0hMTtyZXR1cm4gZnVuY3Rpb24oLi4uaSl7bj1pLHJ8fChyPSEwLFlvLmNhbGwod2luZG93LCgpPT57cj0hMSxlLmFwcGx5KHQsbil9KSl9fWZ1bmN0aW9uIFpvKGUsdCl7bGV0IG47cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3JldHVybiB0PyhjbGVhclRpbWVvdXQobiksbj1zZXRUaW1lb3V0KGUsdCxyKSk6ZS5hcHBseSh0aGlzLHIpLHR9fXZhciBRbz1lPT5lPT09YHN0YXJ0YD9gbGVmdGA6ZT09PWBlbmRgP2ByaWdodGA6YGNlbnRlcmAsJG89KGUsdCxuKT0+ZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjoodCtuKS8yLGVzPShlLHQsbixyKT0+ZT09PShyP2BsZWZ0YDpgcmlnaHRgKT9uOmU9PT1gY2VudGVyYD8odCtuKS8yOnQsdHM9ZT0+ZT09PTB8fGU9PT0xLG5zPShlLHQsbik9Pi0oMioqKDEwKi0tZSkqTWF0aC5zaW4oKGUtdCkqZ28vbikpLHJzPShlLHQsbik9PjIqKigtMTAqZSkqTWF0aC5zaW4oKGUtdCkqZ28vbikrMSxpcz17bGluZWFyOmU9PmUsZWFzZUluUXVhZDplPT5lKmUsZWFzZU91dFF1YWQ6ZT0+LWUqKGUtMiksZWFzZUluT3V0UXVhZDplPT4oZS89LjUpPDE/LjUqZSplOi0uNSooLS1lKihlLTIpLTEpLGVhc2VJbkN1YmljOmU9PmUqZSplLGVhc2VPdXRDdWJpYzplPT4tLWUqZSplKzEsZWFzZUluT3V0Q3ViaWM6ZT0+KGUvPS41KTwxPy41KmUqZSplOi41KigoZS09MikqZSplKzIpLGVhc2VJblF1YXJ0OmU9PmUqZSplKmUsZWFzZU91dFF1YXJ0OmU9Pi0oLS1lKmUqZSplLTEpLGVhc2VJbk91dFF1YXJ0OmU9PihlLz0uNSk8MT8uNSplKmUqZSplOi0uNSooKGUtPTIpKmUqZSplLTIpLGVhc2VJblF1aW50OmU9PmUqZSplKmUqZSxlYXNlT3V0UXVpbnQ6ZT0+LS1lKmUqZSplKmUrMSxlYXNlSW5PdXRRdWludDplPT4oZS89LjUpPDE/LjUqZSplKmUqZSplOi41KigoZS09MikqZSplKmUqZSsyKSxlYXNlSW5TaW5lOmU9Pi1NYXRoLmNvcyhlKnlvKSsxLGVhc2VPdXRTaW5lOmU9Pk1hdGguc2luKGUqeW8pLGVhc2VJbk91dFNpbmU6ZT0+LS41KihNYXRoLmNvcyhYKmUpLTEpLGVhc2VJbkV4cG86ZT0+ZT09PTA/MDoyKiooMTAqKGUtMSkpLGVhc2VPdXRFeHBvOmU9PmU9PT0xPzE6LSgyKiooLTEwKmUpKSsxLGVhc2VJbk91dEV4cG86ZT0+dHMoZSk/ZTplPC41Py41KjIqKigxMCooZSoyLTEpKTouNSooLSgyKiooLTEwKihlKjItMSkpKSsyKSxlYXNlSW5DaXJjOmU9PmU+PTE/ZTotKE1hdGguc3FydCgxLWUqZSktMSksZWFzZU91dENpcmM6ZT0+TWF0aC5zcXJ0KDEtIC0tZSplKSxlYXNlSW5PdXRDaXJjOmU9PihlLz0uNSk8MT8tLjUqKE1hdGguc3FydCgxLWUqZSktMSk6LjUqKE1hdGguc3FydCgxLShlLT0yKSplKSsxKSxlYXNlSW5FbGFzdGljOmU9PnRzKGUpP2U6bnMoZSwuMDc1LC4zKSxlYXNlT3V0RWxhc3RpYzplPT50cyhlKT9lOnJzKGUsLjA3NSwuMyksZWFzZUluT3V0RWxhc3RpYyhlKXtsZXQgdD0uMTEyNSxuPS40NTtyZXR1cm4gdHMoZSk/ZTplPC41Py41Km5zKGUqMix0LG4pOi41Ky41KnJzKGUqMi0xLHQsbil9LGVhc2VJbkJhY2soZSl7cmV0dXJuIGUqZSooMi43MDE1OCplLTEuNzAxNTgpfSxlYXNlT3V0QmFjayhlKXtyZXR1cm4tLWUqZSooMi43MDE1OCplKzEuNzAxNTgpKzF9LGVhc2VJbk91dEJhY2soZSl7bGV0IHQ9MS43MDE1ODtyZXR1cm4oZS89LjUpPDE/LjUqKGUqZSooKCh0Kj0xLjUyNSkrMSkqZS10KSk6LjUqKChlLT0yKSplKigoKHQqPTEuNTI1KSsxKSplK3QpKzIpfSxlYXNlSW5Cb3VuY2U6ZT0+MS1pcy5lYXNlT3V0Qm91bmNlKDEtZSksZWFzZU91dEJvdW5jZShlKXtsZXQgdD03LjU2MjUsbj0yLjc1O3JldHVybiBlPDEvbj90KmUqZTplPDIvbj90KihlLT0xLjUvbikqZSsuNzU6ZTwyLjUvbj90KihlLT0yLjI1L24pKmUrLjkzNzU6dCooZS09Mi42MjUvbikqZSsuOTg0Mzc1fSxlYXNlSW5PdXRCb3VuY2U6ZT0+ZTwuNT9pcy5lYXNlSW5Cb3VuY2UoZSoyKSouNTppcy5lYXNlT3V0Qm91bmNlKGUqMi0xKSouNSsuNX07ZnVuY3Rpb24gYXMoZSl7aWYoZSYmdHlwZW9mIGU9PWBvYmplY3RgKXtsZXQgdD1lLnRvU3RyaW5nKCk7cmV0dXJuIHQ9PT1gW29iamVjdCBDYW52YXNQYXR0ZXJuXWB8fHQ9PT1gW29iamVjdCBDYW52YXNHcmFkaWVudF1gfXJldHVybiExfWZ1bmN0aW9uIG9zKGUpe3JldHVybiBhcyhlKT9lOm5ldyBKYShlKX1mdW5jdGlvbiBzcyhlKXtyZXR1cm4gYXMoZSk/ZTpuZXcgSmEoZSkuc2F0dXJhdGUoLjUpLmRhcmtlbiguMSkuaGV4U3RyaW5nKCl9dmFyIGNzPVtgeGAsYHlgLGBib3JkZXJXaWR0aGAsYHJhZGl1c2AsYHRlbnNpb25gXSxscz1bYGNvbG9yYCxgYm9yZGVyQ29sb3JgLGBiYWNrZ3JvdW5kQ29sb3JgXTtmdW5jdGlvbiB1cyhlKXtlLnNldChgYW5pbWF0aW9uYCx7ZGVsYXk6dm9pZCAwLGR1cmF0aW9uOjFlMyxlYXNpbmc6YGVhc2VPdXRRdWFydGAsZm46dm9pZCAwLGZyb206dm9pZCAwLGxvb3A6dm9pZCAwLHRvOnZvaWQgMCx0eXBlOnZvaWQgMH0pLGUuZGVzY3JpYmUoYGFuaW1hdGlvbmAse19mYWxsYmFjazohMSxfaW5kZXhhYmxlOiExLF9zY3JpcHRhYmxlOmU9PmUhPT1gb25Qcm9ncmVzc2AmJmUhPT1gb25Db21wbGV0ZWAmJmUhPT1gZm5gfSksZS5zZXQoYGFuaW1hdGlvbnNgLHtjb2xvcnM6e3R5cGU6YGNvbG9yYCxwcm9wZXJ0aWVzOmxzfSxudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6Y3N9fSksZS5kZXNjcmliZShgYW5pbWF0aW9uc2Ase19mYWxsYmFjazpgYW5pbWF0aW9uYH0pLGUuc2V0KGB0cmFuc2l0aW9uc2Ase2FjdGl2ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjo0MDB9fSxyZXNpemU6e2FuaW1hdGlvbjp7ZHVyYXRpb246MH19LHNob3c6e2FuaW1hdGlvbnM6e2NvbG9yczp7ZnJvbTpgdHJhbnNwYXJlbnRgfSx2aXNpYmxlOnt0eXBlOmBib29sZWFuYCxkdXJhdGlvbjowfX19LGhpZGU6e2FuaW1hdGlvbnM6e2NvbG9yczp7dG86YHRyYW5zcGFyZW50YH0sdmlzaWJsZTp7dHlwZTpgYm9vbGVhbmAsZWFzaW5nOmBsaW5lYXJgLGZuOmU9PmV8MH19fX0pfWZ1bmN0aW9uIGRzKGUpe2Uuc2V0KGBsYXlvdXRgLHthdXRvUGFkZGluZzohMCxwYWRkaW5nOnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH19KX12YXIgZnM9bmV3IE1hcDtmdW5jdGlvbiBwcyhlLHQpe3R8fD17fTtsZXQgbj1lK0pTT04uc3RyaW5naWZ5KHQpLHI9ZnMuZ2V0KG4pO3JldHVybiByfHwocj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx0KSxmcy5zZXQobixyKSkscn1mdW5jdGlvbiBtcyhlLHQsbil7cmV0dXJuIHBzKHQsbikuZm9ybWF0KGUpfXZhciBocz17dmFsdWVzKGUpe3JldHVybiBXKGUpP2U6YGArZX0sbnVtZXJpYyhlLHQsbil7aWYoZT09PTApcmV0dXJuYDBgO2xldCByPXRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsaSxhPWU7aWYobi5sZW5ndGg+MSl7bGV0IHQ9TWF0aC5tYXgoTWF0aC5hYnMoblswXS52YWx1ZSksTWF0aC5hYnMobltuLmxlbmd0aC0xXS52YWx1ZSkpOyh0PDFlLTR8fHQ+MHgzOGQ3ZWE0YzY4MDAwKSYmKGk9YHNjaWVudGlmaWNgKSxhPWdzKGUsbil9bGV0IG89U28oTWF0aC5hYnMoYSkpLHM9aXNOYU4obyk/MTpNYXRoLm1heChNYXRoLm1pbigtMSpNYXRoLmZsb29yKG8pLDIwKSwwKSxjPXtub3RhdGlvbjppLG1pbmltdW1GcmFjdGlvbkRpZ2l0czpzLG1heGltdW1GcmFjdGlvbkRpZ2l0czpzfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihjLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpLG1zKGUscixjKX0sbG9nYXJpdGhtaWMoZSx0LG4pe2lmKGU9PT0wKXJldHVybmAwYDtsZXQgcj1uW3RdLnNpZ25pZmljYW5kfHxlLzEwKipNYXRoLmZsb29yKFNvKGUpKTtyZXR1cm5bMSwyLDMsNSwxMCwxNV0uaW5jbHVkZXMocil8fHQ+Ljgqbi5sZW5ndGg/aHMubnVtZXJpYy5jYWxsKHRoaXMsZSx0LG4pOmBgfX07ZnVuY3Rpb24gZ3MoZSx0KXtsZXQgbj10Lmxlbmd0aD4zP3RbMl0udmFsdWUtdFsxXS52YWx1ZTp0WzFdLnZhbHVlLXRbMF0udmFsdWU7cmV0dXJuIE1hdGguYWJzKG4pPj0xJiZlIT09TWF0aC5mbG9vcihlKSYmKG49ZS1NYXRoLmZsb29yKGUpKSxufXZhciBfcz17Zm9ybWF0dGVyczpoc307ZnVuY3Rpb24gdnMoZSl7ZS5zZXQoYHNjYWxlYCx7ZGlzcGxheTohMCxvZmZzZXQ6ITEscmV2ZXJzZTohMSxiZWdpbkF0WmVybzohMSxib3VuZHM6YHRpY2tzYCxjbGlwOiEwLGdyYWNlOjAsZ3JpZDp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxkcmF3T25DaGFydEFyZWE6ITAsZHJhd1RpY2tzOiEwLHRpY2tMZW5ndGg6OCx0aWNrV2lkdGg6KGUsdCk9PnQubGluZVdpZHRoLHRpY2tDb2xvcjooZSx0KT0+dC5jb2xvcixvZmZzZXQ6ITF9LGJvcmRlcjp7ZGlzcGxheTohMCxkYXNoOltdLGRhc2hPZmZzZXQ6MCx3aWR0aDoxfSx0aXRsZTp7ZGlzcGxheTohMSx0ZXh0OmBgLHBhZGRpbmc6e3RvcDo0LGJvdHRvbTo0fX0sdGlja3M6e21pblJvdGF0aW9uOjAsbWF4Um90YXRpb246NTAsbWlycm9yOiExLHRleHRTdHJva2VXaWR0aDowLHRleHRTdHJva2VDb2xvcjpgYCxwYWRkaW5nOjMsZGlzcGxheTohMCxhdXRvU2tpcDohMCxhdXRvU2tpcFBhZGRpbmc6MyxsYWJlbE9mZnNldDowLGNhbGxiYWNrOl9zLmZvcm1hdHRlcnMudmFsdWVzLG1pbm9yOnt9LG1ham9yOnt9LGFsaWduOmBjZW50ZXJgLGNyb3NzQWxpZ246YG5lYXJgLHNob3dMYWJlbEJhY2tkcm9wOiExLGJhY2tkcm9wQ29sb3I6YHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSlgLGJhY2tkcm9wUGFkZGluZzoyfX0pLGUucm91dGUoYHNjYWxlLnRpY2tzYCxgY29sb3JgLGBgLGBjb2xvcmApLGUucm91dGUoYHNjYWxlLmdyaWRgLGBjb2xvcmAsYGAsYGJvcmRlckNvbG9yYCksZS5yb3V0ZShgc2NhbGUuYm9yZGVyYCxgY29sb3JgLGBgLGBib3JkZXJDb2xvcmApLGUucm91dGUoYHNjYWxlLnRpdGxlYCxgY29sb3JgLGBgLGBjb2xvcmApLGUuZGVzY3JpYmUoYHNjYWxlYCx7X2ZhbGxiYWNrOiExLF9zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYGJlZm9yZWApJiYhZS5zdGFydHNXaXRoKGBhZnRlcmApJiZlIT09YGNhbGxiYWNrYCYmZSE9PWBwYXJzZXJgLF9pbmRleGFibGU6ZT0+ZSE9PWBib3JkZXJEYXNoYCYmZSE9PWB0aWNrQm9yZGVyRGFzaGAmJmUhPT1gZGFzaGB9KSxlLmRlc2NyaWJlKGBzY2FsZXNgLHtfZmFsbGJhY2s6YHNjYWxlYH0pLGUuZGVzY3JpYmUoYHNjYWxlLnRpY2tzYCx7X3NjcmlwdGFibGU6ZT0+ZSE9PWBiYWNrZHJvcFBhZGRpbmdgJiZlIT09YGNhbGxiYWNrYCxfaW5kZXhhYmxlOmU9PmUhPT1gYmFja2Ryb3BQYWRkaW5nYH0pfXZhciB5cz1PYmplY3QuY3JlYXRlKG51bGwpLGJzPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24geHMoZSx0KXtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGAuYCk7Zm9yKGxldCB0PTAscj1uLmxlbmd0aDt0PHI7Kyt0KXtsZXQgcj1uW3RdO2U9ZVtyXXx8KGVbcl09T2JqZWN0LmNyZWF0ZShudWxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gU3MoZSx0LG4pe3JldHVybiB0eXBlb2YgdD09YHN0cmluZ2A/cm8oeHMoZSx0KSxuKTpybyh4cyhlLGBgKSx0KX12YXIgWj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmFuaW1hdGlvbj12b2lkIDAsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9YHJnYmEoMCwwLDAsMC4xKWAsdGhpcy5ib3JkZXJDb2xvcj1gcmdiYSgwLDAsMCwwLjEpYCx0aGlzLmNvbG9yPWAjNjY2YCx0aGlzLmRhdGFzZXRzPXt9LHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1lPT5lLmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKSx0aGlzLmVsZW1lbnRzPXt9LHRoaXMuZXZlbnRzPVtgbW91c2Vtb3ZlYCxgbW91c2VvdXRgLGBjbGlja2AsYHRvdWNoc3RhcnRgLGB0b3VjaG1vdmVgXSx0aGlzLmZvbnQ9e2ZhbWlseTpgJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZgLHNpemU6MTIsc3R5bGU6YG5vcm1hbGAsbGluZUhlaWdodDoxLjIsd2VpZ2h0Om51bGx9LHRoaXMuaG92ZXI9e30sdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvcj0oZSx0KT0+c3ModC5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuaG92ZXJCb3JkZXJDb2xvcj0oZSx0KT0+c3ModC5ib3JkZXJDb2xvciksdGhpcy5ob3ZlckNvbG9yPShlLHQpPT5zcyh0LmNvbG9yKSx0aGlzLmluZGV4QXhpcz1geGAsdGhpcy5pbnRlcmFjdGlvbj17bW9kZTpgbmVhcmVzdGAsaW50ZXJzZWN0OiEwLGluY2x1ZGVJbnZpc2libGU6ITF9LHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpbz0hMCx0aGlzLm9uSG92ZXI9bnVsbCx0aGlzLm9uQ2xpY2s9bnVsbCx0aGlzLnBhcnNpbmc9ITAsdGhpcy5wbHVnaW5zPXt9LHRoaXMucmVzcG9uc2l2ZT0hMCx0aGlzLnNjYWxlPXZvaWQgMCx0aGlzLnNjYWxlcz17fSx0aGlzLnNob3dMaW5lPSEwLHRoaXMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3A9ITAsdGhpcy5kZXNjcmliZShlKSx0aGlzLmFwcGx5KHQpfXNldChlLHQpe3JldHVybiBTcyh0aGlzLGUsdCl9Z2V0KGUpe3JldHVybiB4cyh0aGlzLGUpfWRlc2NyaWJlKGUsdCl7cmV0dXJuIFNzKGJzLGUsdCl9b3ZlcnJpZGUoZSx0KXtyZXR1cm4gU3MoeXMsZSx0KX1yb3V0ZShlLHQsbixyKXtsZXQgaT14cyh0aGlzLGUpLGE9eHModGhpcyxuKSxvPWBfYCt0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkse1tvXTp7dmFsdWU6aVt0XSx3cml0YWJsZTohMH0sW3RdOntlbnVtZXJhYmxlOiEwLGdldCgpe2xldCBlPXRoaXNbb10sdD1hW3JdO3JldHVybiBHKGUpP09iamVjdC5hc3NpZ24oe30sdCxlKTpxKGUsdCl9LHNldChlKXt0aGlzW29dPWV9fX0pfWFwcGx5KGUpe2UuZm9yRWFjaChlPT5lKHRoaXMpKX19KHtfc2NyaXB0YWJsZTplPT4hZS5zdGFydHNXaXRoKGBvbmApLF9pbmRleGFibGU6ZT0+ZSE9PWBldmVudHNgLGhvdmVyOntfZmFsbGJhY2s6YGludGVyYWN0aW9uYH0saW50ZXJhY3Rpb246e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9fSxbdXMsZHMsdnNdKTtmdW5jdGlvbiBDcyhlKXtyZXR1cm4hZXx8VShlLnNpemUpfHxVKGUuZmFtaWx5KT9udWxsOihlLnN0eWxlP2Uuc3R5bGUrYCBgOmBgKSsoZS53ZWlnaHQ/ZS53ZWlnaHQrYCBgOmBgKStlLnNpemUrYHB4IGArZS5mYW1pbHl9ZnVuY3Rpb24gd3MoZSx0LG4scixpKXtsZXQgYT10W2ldO3JldHVybiBhfHwoYT10W2ldPWUubWVhc3VyZVRleHQoaSkud2lkdGgsbi5wdXNoKGkpKSxhPnImJihyPWEpLHJ9ZnVuY3Rpb24gVHMoZSx0LG4scil7cnx8PXt9O2xldCBpPXIuZGF0YT1yLmRhdGF8fHt9LGE9ci5nYXJiYWdlQ29sbGVjdD1yLmdhcmJhZ2VDb2xsZWN0fHxbXTtyLmZvbnQhPT10JiYoaT1yLmRhdGE9e30sYT1yLmdhcmJhZ2VDb2xsZWN0PVtdLHIuZm9udD10KSxlLnNhdmUoKSxlLmZvbnQ9dDtsZXQgbz0wLHM9bi5sZW5ndGgsYyxsLHUsZCxmO2ZvcihjPTA7YzxzO2MrKylpZihkPW5bY10sZCE9bnVsbCYmIVcoZCkpbz13cyhlLGksYSxvLGQpO2Vsc2UgaWYoVyhkKSlmb3IobD0wLHU9ZC5sZW5ndGg7bDx1O2wrKylmPWRbbF0sZiE9bnVsbCYmIVcoZikmJihvPXdzKGUsaSxhLG8sZikpO2UucmVzdG9yZSgpO2xldCBwPWEubGVuZ3RoLzI7aWYocD5uLmxlbmd0aCl7Zm9yKGM9MDtjPHA7YysrKWRlbGV0ZSBpW2FbY11dO2Euc3BsaWNlKDAscCl9cmV0dXJuIG99ZnVuY3Rpb24gRXMoZSx0LG4pe2xldCByPWUuY3VycmVudERldmljZVBpeGVsUmF0aW8saT1uPT09MD8wOk1hdGgubWF4KG4vMiwuNSk7cmV0dXJuIE1hdGgucm91bmQoKHQtaSkqcikvcitpfWZ1bmN0aW9uIERzKGUsdCl7IXQmJiFlfHwodHx8PWUuZ2V0Q29udGV4dChgMmRgKSx0LnNhdmUoKSx0LnJlc2V0VHJhbnNmb3JtKCksdC5jbGVhclJlY3QoMCwwLGUud2lkdGgsZS5oZWlnaHQpLHQucmVzdG9yZSgpKX1mdW5jdGlvbiBPcyhlLHQsbixyKXtrcyhlLHQsbixyLG51bGwpfWZ1bmN0aW9uIGtzKGUsdCxuLHIsaSl7bGV0IGEsbyxzLGMsbCx1LGQsZixwPXQucG9pbnRTdHlsZSxtPXQucm90YXRpb24saD10LnJhZGl1cyxnPShtfHwwKSp2bztpZihwJiZ0eXBlb2YgcD09YG9iamVjdGAmJihhPXAudG9TdHJpbmcoKSxhPT09YFtvYmplY3QgSFRNTEltYWdlRWxlbWVudF1gfHxhPT09YFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdYCkpe2Uuc2F2ZSgpLGUudHJhbnNsYXRlKG4sciksZS5yb3RhdGUoZyksZS5kcmF3SW1hZ2UocCwtcC53aWR0aC8yLC1wLmhlaWdodC8yLHAud2lkdGgscC5oZWlnaHQpLGUucmVzdG9yZSgpO3JldHVybn1pZighKGlzTmFOKGgpfHxoPD0wKSl7c3dpdGNoKGUuYmVnaW5QYXRoKCkscCl7ZGVmYXVsdDppP2UuZWxsaXBzZShuLHIsaS8yLGgsMCwwLGdvKTplLmFyYyhuLHIsaCwwLGdvKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgdHJpYW5nbGVgOnU9aT9pLzI6aCxlLm1vdmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz14byxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz14byxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdFJvdW5kZWRgOmw9aCouNTE2LGM9aC1sLG89TWF0aC5jb3MoZytibykqYyxkPU1hdGguY29zKGcrYm8pKihpP2kvMi1sOmMpLHM9TWF0aC5zaW4oZytibykqYyxmPU1hdGguc2luKGcrYm8pKihpP2kvMi1sOmMpLGUuYXJjKG4tZCxyLXMsbCxnLVgsZy15byksZS5hcmMobitmLHItbyxsLGcteW8sZyksZS5hcmMobitkLHIrcyxsLGcsZyt5byksZS5hcmMobi1mLHIrbyxsLGcreW8sZytYKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdGA6aWYoIW0pe2M9TWF0aC5TUVJUMV8yKmgsdT1pP2kvMjpjLGUucmVjdChuLXUsci1jLDIqdSwyKmMpO2JyZWFrfWcrPWJvO2Nhc2VgcmVjdFJvdGA6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuK2QscitzKSxlLmxpbmVUbyhuLWYscitvKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgY3Jvc3NSb3RgOmcrPWJvO2Nhc2VgY3Jvc3NgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBzdGFyYDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZCxyK3MpLGUubW92ZVRvKG4rZixyLW8pLGUubGluZVRvKG4tZixyK28pLGcrPWJvLGQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBsaW5lYDpvPWk/aS8yOk1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGUubW92ZVRvKG4tbyxyLXMpLGUubGluZVRvKG4rbyxyK3MpO2JyZWFrO2Nhc2VgZGFzaGA6ZS5tb3ZlVG8obixyKSxlLmxpbmVUbyhuK01hdGguY29zKGcpKihpP2kvMjpoKSxyK01hdGguc2luKGcpKmgpO2JyZWFrO2Nhc2UhMTplLmNsb3NlUGF0aCgpfWUuZmlsbCgpLHQuYm9yZGVyV2lkdGg+MCYmZS5zdHJva2UoKX19ZnVuY3Rpb24gQXMoZSx0LG4pe3JldHVybiBufHw9LjUsIXR8fGUmJmUueD50LmxlZnQtbiYmZS54PHQucmlnaHQrbiYmZS55PnQudG9wLW4mJmUueTx0LmJvdHRvbStufWZ1bmN0aW9uIGpzKGUsdCl7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSxlLnJlY3QodC5sZWZ0LHQudG9wLHQucmlnaHQtdC5sZWZ0LHQuYm90dG9tLXQudG9wKSxlLmNsaXAoKX1mdW5jdGlvbiBNcyhlKXtlLnJlc3RvcmUoKX1mdW5jdGlvbiBOcyhlLHQpe3QudHJhbnNsYXRpb24mJmUudHJhbnNsYXRlKHQudHJhbnNsYXRpb25bMF0sdC50cmFuc2xhdGlvblsxXSksVSh0LnJvdGF0aW9uKXx8ZS5yb3RhdGUodC5yb3RhdGlvbiksdC5jb2xvciYmKGUuZmlsbFN0eWxlPXQuY29sb3IpLHQudGV4dEFsaWduJiYoZS50ZXh0QWxpZ249dC50ZXh0QWxpZ24pLHQudGV4dEJhc2VsaW5lJiYoZS50ZXh0QmFzZWxpbmU9dC50ZXh0QmFzZWxpbmUpfWZ1bmN0aW9uIFBzKGUsdCxuLHIsaSl7aWYoaS5zdHJpa2V0aHJvdWdofHxpLnVuZGVybGluZSl7bGV0IGE9ZS5tZWFzdXJlVGV4dChyKSxvPXQtYS5hY3R1YWxCb3VuZGluZ0JveExlZnQscz10K2EuYWN0dWFsQm91bmRpbmdCb3hSaWdodCxjPW4tYS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCxsPW4rYS5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQsdT1pLnN0cmlrZXRocm91Z2g/KGMrbCkvMjpsO2Uuc3Ryb2tlU3R5bGU9ZS5maWxsU3R5bGUsZS5iZWdpblBhdGgoKSxlLmxpbmVXaWR0aD1pLmRlY29yYXRpb25XaWR0aHx8MixlLm1vdmVUbyhvLHUpLGUubGluZVRvKHMsdSksZS5zdHJva2UoKX19ZnVuY3Rpb24gRnMoZSx0KXtsZXQgbj1lLmZpbGxTdHlsZTtlLmZpbGxTdHlsZT10LmNvbG9yLGUuZmlsbFJlY3QodC5sZWZ0LHQudG9wLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPW59ZnVuY3Rpb24gSXMoZSx0LG4scixpLGE9e30pe2xldCBvPVcodCk/dDpbdF0scz1hLnN0cm9rZVdpZHRoPjAmJmEuc3Ryb2tlQ29sb3IhPT1gYCxjLGw7Zm9yKGUuc2F2ZSgpLGUuZm9udD1pLnN0cmluZyxOcyhlLGEpLGM9MDtjPG8ubGVuZ3RoOysrYylsPW9bY10sYS5iYWNrZHJvcCYmRnMoZSxhLmJhY2tkcm9wKSxzJiYoYS5zdHJva2VDb2xvciYmKGUuc3Ryb2tlU3R5bGU9YS5zdHJva2VDb2xvciksVShhLnN0cm9rZVdpZHRoKXx8KGUubGluZVdpZHRoPWEuc3Ryb2tlV2lkdGgpLGUuc3Ryb2tlVGV4dChsLG4scixhLm1heFdpZHRoKSksZS5maWxsVGV4dChsLG4scixhLm1heFdpZHRoKSxQcyhlLG4scixsLGEpLHIrPU51bWJlcihpLmxpbmVIZWlnaHQpO2UucmVzdG9yZSgpfWZ1bmN0aW9uIExzKGUsdCl7bGV0e3g6bix5OnIsdzppLGg6YSxyYWRpdXM6b309dDtlLmFyYyhuK28udG9wTGVmdCxyK28udG9wTGVmdCxvLnRvcExlZnQsMS41KlgsWCwhMCksZS5saW5lVG8obixyK2Etby5ib3R0b21MZWZ0KSxlLmFyYyhuK28uYm90dG9tTGVmdCxyK2Etby5ib3R0b21MZWZ0LG8uYm90dG9tTGVmdCxYLHlvLCEwKSxlLmxpbmVUbyhuK2ktby5ib3R0b21SaWdodCxyK2EpLGUuYXJjKG4raS1vLmJvdHRvbVJpZ2h0LHIrYS1vLmJvdHRvbVJpZ2h0LG8uYm90dG9tUmlnaHQseW8sMCwhMCksZS5saW5lVG8obitpLHIrby50b3BSaWdodCksZS5hcmMobitpLW8udG9wUmlnaHQscitvLnRvcFJpZ2h0LG8udG9wUmlnaHQsMCwteW8sITApLGUubGluZVRvKG4rby50b3BMZWZ0LHIpfXZhciBScz0vXihub3JtYWx8KFxkKyg/OlwuXGQrKT8pKHB4fGVtfCUpPykkLyx6cz0vXihub3JtYWx8aXRhbGljfGluaXRpYWx8aW5oZXJpdHx1bnNldHwob2JsaXF1ZSggLT9bMC05XT9bMC05XWRlZyk/KSkkLztmdW5jdGlvbiBCcyhlLHQpe2xldCBuPShgYCtlKS5tYXRjaChScyk7aWYoIW58fG5bMV09PT1gbm9ybWFsYClyZXR1cm4gdCoxLjI7c3dpdGNoKGU9K25bMl0sblszXSl7Y2FzZWBweGA6cmV0dXJuIGU7Y2FzZWAlYDplLz0xMDB9cmV0dXJuIHQqZX12YXIgVnM9ZT0+K2V8fDA7ZnVuY3Rpb24gSHMoZSx0KXtsZXQgbj17fSxyPUcodCksaT1yP09iamVjdC5rZXlzKHQpOnQsYT1HKGUpP3I/bj0+cShlW25dLGVbdFtuXV0pOnQ9PmVbdF06KCk9PmU7Zm9yKGxldCBlIG9mIGkpbltlXT1WcyhhKGUpKTtyZXR1cm4gbn1mdW5jdGlvbiBVcyhlKXtyZXR1cm4gSHMoZSx7dG9wOmB5YCxyaWdodDpgeGAsYm90dG9tOmB5YCxsZWZ0OmB4YH0pfWZ1bmN0aW9uIFdzKGUpe3JldHVybiBIcyhlLFtgdG9wTGVmdGAsYHRvcFJpZ2h0YCxgYm90dG9tTGVmdGAsYGJvdHRvbVJpZ2h0YF0pfWZ1bmN0aW9uIFEoZSl7bGV0IHQ9VXMoZSk7cmV0dXJuIHQud2lkdGg9dC5sZWZ0K3QucmlnaHQsdC5oZWlnaHQ9dC50b3ArdC5ib3R0b20sdH1mdW5jdGlvbiAkKGUsdCl7ZXx8PXt9LHR8fD1aLmZvbnQ7bGV0IG49cShlLnNpemUsdC5zaXplKTt0eXBlb2Ygbj09YHN0cmluZ2AmJihuPXBhcnNlSW50KG4sMTApKTtsZXQgcj1xKGUuc3R5bGUsdC5zdHlsZSk7ciYmIShgYCtyKS5tYXRjaCh6cykmJihjb25zb2xlLndhcm4oYEludmFsaWQgZm9udCBzdHlsZSBzcGVjaWZpZWQ6ICJgK3IrYCJgKSxyPXZvaWQgMCk7bGV0IGk9e2ZhbWlseTpxKGUuZmFtaWx5LHQuZmFtaWx5KSxsaW5lSGVpZ2h0OkJzKHEoZS5saW5lSGVpZ2h0LHQubGluZUhlaWdodCksbiksc2l6ZTpuLHN0eWxlOnIsd2VpZ2h0OnEoZS53ZWlnaHQsdC53ZWlnaHQpLHN0cmluZzpgYH07cmV0dXJuIGkuc3RyaW5nPUNzKGkpLGl9ZnVuY3Rpb24gR3MoZSx0LG4scil7bGV0IGk9ITAsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpaWYocz1lW2FdLHMhPT12b2lkIDAmJih0IT09dm9pZCAwJiZ0eXBlb2Ygcz09YGZ1bmN0aW9uYCYmKHM9cyh0KSxpPSExKSxuIT09dm9pZCAwJiZXKHMpJiYocz1zW24lcy5sZW5ndGhdLGk9ITEpLHMhPT12b2lkIDApKXJldHVybiByJiYhaSYmKHIuY2FjaGVhYmxlPSExKSxzfWZ1bmN0aW9uIEtzKGUsdCxuKXtsZXR7bWluOnIsbWF4Oml9PWUsYT1RYSh0LChpLXIpLzIpLG89KGUsdCk9Pm4mJmU9PT0wPzA6ZSt0O3JldHVybnttaW46byhyLC1NYXRoLmFicyhhKSksbWF4Om8oaSxhKX19ZnVuY3Rpb24gcXMoZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGUpLHQpfWZ1bmN0aW9uIEpzKGUsdD1bYGBdLG4scixpPSgpPT5lWzBdKXtsZXQgYT1ufHxlO3JldHVybiByPT09dm9pZCAwJiYocj11YyhgX2ZhbGxiYWNrYCxlKSksbmV3IFByb3h5KHtbU3ltYm9sLnRvU3RyaW5nVGFnXTpgT2JqZWN0YCxfY2FjaGVhYmxlOiEwLF9zY29wZXM6ZSxfcm9vdFNjb3BlczphLF9mYWxsYmFjazpyLF9nZXRUYXJnZXQ6aSxvdmVycmlkZTpuPT5KcyhbbiwuLi5lXSx0LGEscil9LHtkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBkZWxldGUgdFtuXSxkZWxldGUgdC5fa2V5cyxkZWxldGUgZVswXVtuXSwhMH0sZ2V0KG4scil7cmV0dXJuICRzKG4sciwoKT0+bGMocix0LGUsbikpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5fc2NvcGVzWzBdLHQpfSxnZXRQcm90b3R5cGVPZigpe3JldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGVbMF0pfSxoYXMoZSx0KXtyZXR1cm4gZGMoZSkuaW5jbHVkZXModCl9LG93bktleXMoZSl7cmV0dXJuIGRjKGUpfSxzZXQoZSx0LG4pe2xldCByPWUuX3N0b3JhZ2V8fD1pKCk7cmV0dXJuIGVbdF09clt0XT1uLGRlbGV0ZSBlLl9rZXlzLCEwfX0pfWZ1bmN0aW9uIFlzKGUsdCxuLHIpe2xldCBpPXtfY2FjaGVhYmxlOiExLF9wcm94eTplLF9jb250ZXh0OnQsX3N1YlByb3h5Om4sX3N0YWNrOm5ldyBTZXQsX2Rlc2NyaXB0b3JzOlhzKGUsciksc2V0Q29udGV4dDp0PT5ZcyhlLHQsbixyKSxvdmVycmlkZTppPT5ZcyhlLm92ZXJyaWRlKGkpLHQsbixyKX07cmV0dXJuIG5ldyBQcm94eShpLHtkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBkZWxldGUgdFtuXSxkZWxldGUgZVtuXSwhMH0sZ2V0KGUsdCxuKXtyZXR1cm4gJHMoZSx0LCgpPT5lYyhlLHQsbikpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKXtyZXR1cm4gdC5fZGVzY3JpcHRvcnMuYWxsS2V5cz9SZWZsZWN0LmhhcyhlLG4pP3tlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH06dm9pZCAwOlJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbil9LGdldFByb3RvdHlwZU9mKCl7cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGhhcyh0LG4pe3JldHVybiBSZWZsZWN0LmhhcyhlLG4pfSxvd25LZXlzKCl7cmV0dXJuIFJlZmxlY3Qub3duS2V5cyhlKX0sc2V0KHQsbixyKXtyZXR1cm4gZVtuXT1yLGRlbGV0ZSB0W25dLCEwfX0pfWZ1bmN0aW9uIFhzKGUsdD17c2NyaXB0YWJsZTohMCxpbmRleGFibGU6ITB9KXtsZXR7X3NjcmlwdGFibGU6bj10LnNjcmlwdGFibGUsX2luZGV4YWJsZTpyPXQuaW5kZXhhYmxlLF9hbGxLZXlzOmk9dC5hbGxLZXlzfT1lO3JldHVybnthbGxLZXlzOmksc2NyaXB0YWJsZTpuLGluZGV4YWJsZTpyLGlzU2NyaXB0YWJsZTpwbyhuKT9uOigpPT5uLGlzSW5kZXhhYmxlOnBvKHIpP3I6KCk9PnJ9fXZhciBacz0oZSx0KT0+ZT9lK3VvKHQpOnQsUXM9KGUsdCk9PkcodCkmJmUhPT1gYWRhcHRlcnNgJiYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbHx8dC5jb25zdHJ1Y3Rvcj09PU9iamVjdCk7ZnVuY3Rpb24gJHMoZSx0LG4pe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHx0PT09YGNvbnN0cnVjdG9yYClyZXR1cm4gZVt0XTtsZXQgcj1uKCk7cmV0dXJuIGVbdF09cixyfWZ1bmN0aW9uIGVjKGUsdCxuKXtsZXR7X3Byb3h5OnIsX2NvbnRleHQ6aSxfc3ViUHJveHk6YSxfZGVzY3JpcHRvcnM6b309ZSxzPXJbdF07cmV0dXJuIHBvKHMpJiZvLmlzU2NyaXB0YWJsZSh0KSYmKHM9dGModCxzLGUsbikpLFcocykmJnMubGVuZ3RoJiYocz1uYyh0LHMsZSxvLmlzSW5kZXhhYmxlKSksUXModCxzKSYmKHM9WXMocyxpLGEmJmFbdF0sbykpLHN9ZnVuY3Rpb24gdGMoZSx0LG4scil7bGV0e19wcm94eTppLF9jb250ZXh0OmEsX3N1YlByb3h5Om8sX3N0YWNrOnN9PW47aWYocy5oYXMoZSkpdGhyb3cgRXJyb3IoYFJlY3Vyc2lvbiBkZXRlY3RlZDogYCtBcnJheS5mcm9tKHMpLmpvaW4oYC0+YCkrYC0+YCtlKTtzLmFkZChlKTtsZXQgYz10KGEsb3x8cik7cmV0dXJuIHMuZGVsZXRlKGUpLFFzKGUsYykmJihjPW9jKGkuX3Njb3BlcyxpLGUsYykpLGN9ZnVuY3Rpb24gbmMoZSx0LG4scil7bGV0e19wcm94eTppLF9jb250ZXh0OmEsX3N1YlByb3h5Om8sX2Rlc2NyaXB0b3JzOnN9PW47aWYoYS5pbmRleCE9PXZvaWQgMCYmcihlKSlyZXR1cm4gdFthLmluZGV4JXQubGVuZ3RoXTtpZihHKHRbMF0pKXtsZXQgbj10LHI9aS5fc2NvcGVzLmZpbHRlcihlPT5lIT09bik7dD1bXTtmb3IobGV0IGMgb2Ygbil7bGV0IG49b2MocixpLGUsYyk7dC5wdXNoKFlzKG4sYSxvJiZvW2VdLHMpKX19cmV0dXJuIHR9ZnVuY3Rpb24gcmMoZSx0LG4pe3JldHVybiBwbyhlKT9lKHQsbik6ZX12YXIgaWM9KGUsdCk9PmU9PT0hMD90OnR5cGVvZiBlPT1gc3RyaW5nYD9sbyh0LGUpOnZvaWQgMDtmdW5jdGlvbiBhYyhlLHQsbixyLGkpe2ZvcihsZXQgYSBvZiB0KXtsZXQgdD1pYyhuLGEpO2lmKHQpe2UuYWRkKHQpO2xldCBhPXJjKHQuX2ZhbGxiYWNrLG4saSk7aWYoYSE9PXZvaWQgMCYmYSE9PW4mJmEhPT1yKXJldHVybiBhfWVsc2UgaWYodD09PSExJiZyIT09dm9pZCAwJiZuIT09cilyZXR1cm4gbnVsbH1yZXR1cm4hMX1mdW5jdGlvbiBvYyhlLHQsbixyKXtsZXQgaT10Ll9yb290U2NvcGVzLGE9cmModC5fZmFsbGJhY2ssbixyKSxvPVsuLi5lLC4uLmldLHM9bmV3IFNldDtzLmFkZChyKTtsZXQgYz1zYyhzLG8sbixhfHxuLHIpO3JldHVybiBjPT09bnVsbHx8YSE9PXZvaWQgMCYmYSE9PW4mJihjPXNjKHMsbyxhLGMsciksYz09PW51bGwpPyExOkpzKEFycmF5LmZyb20ocyksW2BgXSxpLGEsKCk9PmNjKHQsbixyKSl9ZnVuY3Rpb24gc2MoZSx0LG4scixpKXtmb3IoO247KW49YWMoZSx0LG4scixpKTtyZXR1cm4gbn1mdW5jdGlvbiBjYyhlLHQsbil7bGV0IHI9ZS5fZ2V0VGFyZ2V0KCk7dCBpbiByfHwoclt0XT17fSk7bGV0IGk9clt0XTtyZXR1cm4gVyhpKSYmRyhuKT9uOml8fHt9fWZ1bmN0aW9uIGxjKGUsdCxuLHIpe2xldCBpO2ZvcihsZXQgYSBvZiB0KWlmKGk9dWMoWnMoYSxlKSxuKSxpIT09dm9pZCAwKXJldHVybiBRcyhlLGkpP29jKG4scixlLGkpOml9ZnVuY3Rpb24gdWMoZSx0KXtmb3IobGV0IG4gb2YgdCl7aWYoIW4pY29udGludWU7bGV0IHQ9bltlXTtpZih0IT09dm9pZCAwKXJldHVybiB0fX1mdW5jdGlvbiBkYyhlKXtsZXQgdD1lLl9rZXlzO3JldHVybiB0fHw9ZS5fa2V5cz1mYyhlLl9zY29wZXMpLHR9ZnVuY3Rpb24gZmMoZSl7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSlmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoYF9gKSkpdC5hZGQoZSk7cmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gcGMoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzxgdWAmJnR5cGVvZiBkb2N1bWVudDxgdWB9ZnVuY3Rpb24gbWMoZSl7bGV0IHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnRvU3RyaW5nKCk9PT1gW29iamVjdCBTaGFkb3dSb290XWAmJih0PXQuaG9zdCksdH1mdW5jdGlvbiBoYyhlLHQsbil7bGV0IHI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD8ocj1wYXJzZUludChlLDEwKSxlLmluZGV4T2YoYCVgKSE9PS0xJiYocj1yLzEwMCp0LnBhcmVudE5vZGVbbl0pKTpyPWUscn12YXIgZ2M9ZT0+ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtmdW5jdGlvbiBfYyhlLHQpe3JldHVybiBnYyhlKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB2Yz1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdO2Z1bmN0aW9uIHljKGUsdCxuKXtsZXQgcj17fTtuPW4/YC1gK246YGA7Zm9yKGxldCBpPTA7aTw0O2krKyl7bGV0IGE9dmNbaV07clthXT1wYXJzZUZsb2F0KGVbdCtgLWArYStuXSl8fDB9cmV0dXJuIHIud2lkdGg9ci5sZWZ0K3IucmlnaHQsci5oZWlnaHQ9ci50b3Arci5ib3R0b20scn12YXIgYmM9KGUsdCxuKT0+KGU+MHx8dD4wKSYmKCFufHwhbi5zaGFkb3dSb290KTtmdW5jdGlvbiB4YyhlLHQpe2xldCBuPWUudG91Y2hlcyxyPW4mJm4ubGVuZ3RoP25bMF06ZSx7b2Zmc2V0WDppLG9mZnNldFk6YX09cixvPSExLHMsYztpZihiYyhpLGEsZS50YXJnZXQpKXM9aSxjPWE7ZWxzZXtsZXQgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3M9ci5jbGllbnRYLWUubGVmdCxjPXIuY2xpZW50WS1lLnRvcCxvPSEwfXJldHVybnt4OnMseTpjLGJveDpvfX1mdW5jdGlvbiBTYyhlLHQpe2lmKGBuYXRpdmVgaW4gZSlyZXR1cm4gZTtsZXR7Y2FudmFzOm4sY3VycmVudERldmljZVBpeGVsUmF0aW86cn09dCxpPWdjKG4pLGE9aS5ib3hTaXppbmc9PT1gYm9yZGVyLWJveGAsbz15YyhpLGBwYWRkaW5nYCkscz15YyhpLGBib3JkZXJgLGB3aWR0aGApLHt4OmMseTpsLGJveDp1fT14YyhlLG4pLGQ9by5sZWZ0Kyh1JiZzLmxlZnQpLGY9by50b3ArKHUmJnMudG9wKSx7d2lkdGg6cCxoZWlnaHQ6bX09dDtyZXR1cm4gYSYmKHAtPW8ud2lkdGgrcy53aWR0aCxtLT1vLmhlaWdodCtzLmhlaWdodCkse3g6TWF0aC5yb3VuZCgoYy1kKS9wKm4ud2lkdGgvcikseTpNYXRoLnJvdW5kKChsLWYpL20qbi5oZWlnaHQvcil9fWZ1bmN0aW9uIENjKGUsdCxuKXtsZXQgcixpO2lmKHQ9PT12b2lkIDB8fG49PT12b2lkIDApe2xldCBhPWUmJm1jKGUpO2lmKCFhKXQ9ZS5jbGllbnRXaWR0aCxuPWUuY2xpZW50SGVpZ2h0O2Vsc2V7bGV0IGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWdjKGEpLHM9eWMobyxgYm9yZGVyYCxgd2lkdGhgKSxjPXljKG8sYHBhZGRpbmdgKTt0PWUud2lkdGgtYy53aWR0aC1zLndpZHRoLG49ZS5oZWlnaHQtYy5oZWlnaHQtcy5oZWlnaHQscj1oYyhvLm1heFdpZHRoLGEsYGNsaWVudFdpZHRoYCksaT1oYyhvLm1heEhlaWdodCxhLGBjbGllbnRIZWlnaHRgKX19cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om4sbWF4V2lkdGg6cnx8X28sbWF4SGVpZ2h0Oml8fF9vfX12YXIgd2M9ZT0+TWF0aC5yb3VuZChlKjEwKS8xMDtmdW5jdGlvbiBUYyhlLHQsbixyKXtsZXQgaT1nYyhlKSxhPXljKGksYG1hcmdpbmApLG89aGMoaS5tYXhXaWR0aCxlLGBjbGllbnRXaWR0aGApfHxfbyxzPWhjKGkubWF4SGVpZ2h0LGUsYGNsaWVudEhlaWdodGApfHxfbyxjPUNjKGUsdCxuKSx7d2lkdGg6bCxoZWlnaHQ6dX09YztpZihpLmJveFNpemluZz09PWBjb250ZW50LWJveGApe2xldCBlPXljKGksYGJvcmRlcmAsYHdpZHRoYCksdD15YyhpLGBwYWRkaW5nYCk7bC09dC53aWR0aCtlLndpZHRoLHUtPXQuaGVpZ2h0K2UuaGVpZ2h0fXJldHVybiBsPU1hdGgubWF4KDAsbC1hLndpZHRoKSx1PU1hdGgubWF4KDAscj9sL3I6dS1hLmhlaWdodCksbD13YyhNYXRoLm1pbihsLG8sYy5tYXhXaWR0aCkpLHU9d2MoTWF0aC5taW4odSxzLGMubWF4SGVpZ2h0KSksbCYmIXUmJih1PXdjKGwvMikpLCh0IT09dm9pZCAwfHxuIT09dm9pZCAwKSYmciYmYy5oZWlnaHQmJnU+Yy5oZWlnaHQmJih1PWMuaGVpZ2h0LGw9d2MoTWF0aC5mbG9vcih1KnIpKSkse3dpZHRoOmwsaGVpZ2h0OnV9fWZ1bmN0aW9uIEVjKGUsdCxuKXtsZXQgcj10fHwxLGk9d2MoZS5oZWlnaHQqciksYT13YyhlLndpZHRoKnIpO2UuaGVpZ2h0PXdjKGUuaGVpZ2h0KSxlLndpZHRoPXdjKGUud2lkdGgpO2xldCBvPWUuY2FudmFzO3JldHVybiBvLnN0eWxlJiYobnx8IW8uc3R5bGUuaGVpZ2h0JiYhby5zdHlsZS53aWR0aCkmJihvLnN0eWxlLmhlaWdodD1gJHtlLmhlaWdodH1weGAsby5zdHlsZS53aWR0aD1gJHtlLndpZHRofXB4YCksZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PXJ8fG8uaGVpZ2h0IT09aXx8by53aWR0aCE9PWE/KGUuY3VycmVudERldmljZVBpeGVsUmF0aW89cixvLmhlaWdodD1pLG8ud2lkdGg9YSxlLmN0eC5zZXRUcmFuc2Zvcm0ociwwLDAsciwwLDApLCEwKTohMX12YXIgRGM9ZnVuY3Rpb24oKXtsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fTtwYygpJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCkpfWNhdGNoe31yZXR1cm4gZX0oKTtmdW5jdGlvbiBPYyhlLHQpe2xldCBuPV9jKGUsdCkscj1uJiZuLm1hdGNoKC9eKFxkKykoXC5cZCspP3B4JC8pO3JldHVybiByPytyWzFdOnZvaWQgMH12YXIga2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm57eChuKXtyZXR1cm4gZStlK3Qtbn0sc2V0V2lkdGgoZSl7dD1lfSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGU9PT1gY2VudGVyYD9lOmU9PT1gcmlnaHRgP2BsZWZ0YDpgcmlnaHRgfSx4UGx1cyhlLHQpe3JldHVybiBlLXR9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZS10fX19LEFjPWZ1bmN0aW9uKCl7cmV0dXJue3goZSl7cmV0dXJuIGV9LHNldFdpZHRoKGUpe30sdGV4dEFsaWduKGUpe3JldHVybiBlfSx4UGx1cyhlLHQpe3JldHVybiBlK3R9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZX19fTtmdW5jdGlvbiBqYyhlLHQsbil7cmV0dXJuIGU/a2ModCxuKTpBYygpfWZ1bmN0aW9uIE1jKGUsdCl7bGV0IG4scjsodD09PWBsdHJgfHx0PT09YHJ0bGApJiYobj1lLmNhbnZhcy5zdHlsZSxyPVtuLmdldFByb3BlcnR5VmFsdWUoYGRpcmVjdGlvbmApLG4uZ2V0UHJvcGVydHlQcmlvcml0eShgZGlyZWN0aW9uYCldLG4uc2V0UHJvcGVydHkoYGRpcmVjdGlvbmAsdCxgaW1wb3J0YW50YCksZS5wcmV2VGV4dERpcmVjdGlvbj1yKX1mdW5jdGlvbiBOYyhlLHQpe3QhPT12b2lkIDAmJihkZWxldGUgZS5wcmV2VGV4dERpcmVjdGlvbixlLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0WzBdLHRbMV0pKX1mdW5jdGlvbiBQYyhlLHQsbil7cmV0dXJuIGUub3B0aW9ucy5jbGlwP2Vbbl06dFtuXX1mdW5jdGlvbiBGYyhlLHQpe2xldHt4U2NhbGU6bix5U2NhbGU6cn09ZTtyZXR1cm4gbiYmcj97bGVmdDpQYyhuLHQsYGxlZnRgKSxyaWdodDpQYyhuLHQsYHJpZ2h0YCksdG9wOlBjKHIsdCxgdG9wYCksYm90dG9tOlBjKHIsdCxgYm90dG9tYCl9OnR9ZnVuY3Rpb24gSWMoZSx0KXtsZXQgbj10Ll9jbGlwO2lmKG4uZGlzYWJsZWQpcmV0dXJuITE7bGV0IHI9RmModCxlLmNoYXJ0QXJlYSk7cmV0dXJue2xlZnQ6bi5sZWZ0PT09ITE/MDpyLmxlZnQtKG4ubGVmdD09PSEwPzA6bi5sZWZ0KSxyaWdodDpuLnJpZ2h0PT09ITE/ZS53aWR0aDpyLnJpZ2h0KyhuLnJpZ2h0PT09ITA/MDpuLnJpZ2h0KSx0b3A6bi50b3A9PT0hMT8wOnIudG9wLShuLnRvcD09PSEwPzA6bi50b3ApLGJvdHRvbTpuLmJvdHRvbT09PSExP2UuaGVpZ2h0OnIuYm90dG9tKyhuLmJvdHRvbT09PSEwPzA6bi5ib3R0b20pfX12YXIgTGM9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX2NoYXJ0cz1uZXcgTWFwLHRoaXMuX3J1bm5pbmc9ITEsdGhpcy5fbGFzdERhdGU9dm9pZCAwfV9ub3RpZnkoZSx0LG4scil7bGV0IGk9dC5saXN0ZW5lcnNbcl0sYT10LmR1cmF0aW9uO2kuZm9yRWFjaChyPT5yKHtjaGFydDplLGluaXRpYWw6dC5pbml0aWFsLG51bVN0ZXBzOmEsY3VycmVudFN0ZXA6TWF0aC5taW4obi10LnN0YXJ0LGEpfSkpfV9yZWZyZXNoKCl7dGhpcy5fcmVxdWVzdHx8PSh0aGlzLl9ydW5uaW5nPSEwLFlvLmNhbGwod2luZG93LCgpPT57dGhpcy5fdXBkYXRlKCksdGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX3J1bm5pbmcmJnRoaXMuX3JlZnJlc2goKX0pKX1fdXBkYXRlKGU9RGF0ZS5ub3coKSl7bGV0IHQ9MDt0aGlzLl9jaGFydHMuZm9yRWFjaCgobixyKT0+e2lmKCFuLnJ1bm5pbmd8fCFuLml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IGk9bi5pdGVtcyxhPWkubGVuZ3RoLTEsbz0hMSxzO2Zvcig7YT49MDstLWEpcz1pW2FdLHMuX2FjdGl2ZT8ocy5fdG90YWw+bi5kdXJhdGlvbiYmKG4uZHVyYXRpb249cy5fdG90YWwpLHMudGljayhlKSxvPSEwKTooaVthXT1pW2kubGVuZ3RoLTFdLGkucG9wKCkpO28mJihyLmRyYXcoKSx0aGlzLl9ub3RpZnkocixuLGUsYHByb2dyZXNzYCkpLGkubGVuZ3RofHwobi5ydW5uaW5nPSExLHRoaXMuX25vdGlmeShyLG4sZSxgY29tcGxldGVgKSxuLmluaXRpYWw9ITEpLHQrPWkubGVuZ3RofSksdGhpcy5fbGFzdERhdGU9ZSx0PT09MCYmKHRoaXMuX3J1bm5pbmc9ITEpfV9nZXRBbmltcyhlKXtsZXQgdD10aGlzLl9jaGFydHMsbj10LmdldChlKTtyZXR1cm4gbnx8KG49e3J1bm5pbmc6ITEsaW5pdGlhbDohMCxpdGVtczpbXSxsaXN0ZW5lcnM6e2NvbXBsZXRlOltdLHByb2dyZXNzOltdfX0sdC5zZXQoZSxuKSksbn1saXN0ZW4oZSx0LG4pe3RoaXMuX2dldEFuaW1zKGUpLmxpc3RlbmVyc1t0XS5wdXNoKG4pfWFkZChlLHQpeyF0fHwhdC5sZW5ndGh8fHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLnB1c2goLi4udCl9aGFzKGUpe3JldHVybiB0aGlzLl9nZXRBbmltcyhlKS5pdGVtcy5sZW5ndGg+MH1zdGFydChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3QmJih0LnJ1bm5pbmc9ITAsdC5zdGFydD1EYXRlLm5vdygpLHQuZHVyYXRpb249dC5pdGVtcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5fZHVyYXRpb24pLDApLHRoaXMuX3JlZnJlc2goKSl9cnVubmluZyhlKXtpZighdGhpcy5fcnVubmluZylyZXR1cm4hMTtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3JldHVybiEoIXR8fCF0LnJ1bm5pbmd8fCF0Lml0ZW1zLmxlbmd0aCl9c3RvcChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO2lmKCF0fHwhdC5pdGVtcy5sZW5ndGgpcmV0dXJuO2xldCBuPXQuaXRlbXMscj1uLmxlbmd0aC0xO2Zvcig7cj49MDstLXIpbltyXS5jYW5jZWwoKTt0Lml0ZW1zPVtdLHRoaXMuX25vdGlmeShlLHQsRGF0ZS5ub3coKSxgY29tcGxldGVgKX1yZW1vdmUoZSl7cmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoZSl9fSxSYz1gdHJhbnNwYXJlbnRgLHpjPXtib29sZWFuKGUsdCxuKXtyZXR1cm4gbj4uNT90OmV9LGNvbG9yKGUsdCxuKXtsZXQgcj1vcyhlfHxSYyksaT1yLnZhbGlkJiZvcyh0fHxSYyk7cmV0dXJuIGkmJmkudmFsaWQ/aS5taXgocixuKS5oZXhTdHJpbmcoKTp0fSxudW1iZXIoZSx0LG4pe3JldHVybiBlKyh0LWUpKm59fSxCYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyKXtsZXQgaT10W25dO3I9R3MoW2UudG8scixpLGUuZnJvbV0pO2xldCBhPUdzKFtlLmZyb20saSxyXSk7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX2ZuPWUuZm58fHpjW2UudHlwZXx8dHlwZW9mIGFdLHRoaXMuX2Vhc2luZz1pc1tlLmVhc2luZ118fGlzLmxpbmVhcix0aGlzLl9zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCkrKGUuZGVsYXl8fDApKSx0aGlzLl9kdXJhdGlvbj10aGlzLl90b3RhbD1NYXRoLmZsb29yKGUuZHVyYXRpb24pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdGFyZ2V0PXQsdGhpcy5fcHJvcD1uLHRoaXMuX2Zyb209YSx0aGlzLl90bz1yLHRoaXMuX3Byb21pc2VzPXZvaWQgMH1hY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXVwZGF0ZShlLHQsbil7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9ub3RpZnkoITEpO2xldCByPXRoaXMuX3RhcmdldFt0aGlzLl9wcm9wXSxpPW4tdGhpcy5fc3RhcnQsYT10aGlzLl9kdXJhdGlvbi1pO3RoaXMuX3N0YXJ0PW4sdGhpcy5fZHVyYXRpb249TWF0aC5mbG9vcihNYXRoLm1heChhLGUuZHVyYXRpb24pKSx0aGlzLl90b3RhbCs9aSx0aGlzLl9sb29wPSEhZS5sb29wLHRoaXMuX3RvPUdzKFtlLnRvLHQscixlLmZyb21dKSx0aGlzLl9mcm9tPUdzKFtlLmZyb20scix0XSl9fWNhbmNlbCgpe3RoaXMuX2FjdGl2ZSYmKHRoaXMudGljayhEYXRlLm5vdygpKSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbm90aWZ5KCExKSl9dGljayhlKXtsZXQgdD1lLXRoaXMuX3N0YXJ0LG49dGhpcy5fZHVyYXRpb24scj10aGlzLl9wcm9wLGk9dGhpcy5fZnJvbSxhPXRoaXMuX2xvb3Asbz10aGlzLl90byxzO2lmKHRoaXMuX2FjdGl2ZT1pIT09byYmKGF8fHQ8biksIXRoaXMuX2FjdGl2ZSl7dGhpcy5fdGFyZ2V0W3JdPW8sdGhpcy5fbm90aWZ5KCEwKTtyZXR1cm59aWYodDwwKXt0aGlzLl90YXJnZXRbcl09aTtyZXR1cm59cz10L24lMixzPWEmJnM+MT8yLXM6cyxzPXRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLE1hdGgubWF4KDAscykpKSx0aGlzLl90YXJnZXRbcl09dGhpcy5fZm4oaSxvLHMpfXdhaXQoKXtsZXQgZT10aGlzLl9wcm9taXNlc3x8PVtdO3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2UucHVzaCh7cmVzOnQscmVqOm59KX0pfV9ub3RpZnkoZSl7bGV0IHQ9ZT9gcmVzYDpgcmVqYCxuPXRoaXMuX3Byb21pc2VzfHxbXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdW3RdKCl9fSxWYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2NoYXJ0PWUsdGhpcy5fcHJvcGVydGllcz1uZXcgTWFwLHRoaXMuY29uZmlndXJlKHQpfWNvbmZpZ3VyZShlKXtpZighRyhlKSlyZXR1cm47bGV0IHQ9T2JqZWN0LmtleXMoWi5hbmltYXRpb24pLG49dGhpcy5fcHJvcGVydGllcztPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKHI9PntsZXQgaT1lW3JdO2lmKCFHKGkpKXJldHVybjtsZXQgYT17fTtmb3IobGV0IGUgb2YgdClhW2VdPWlbZV07KFcoaS5wcm9wZXJ0aWVzKSYmaS5wcm9wZXJ0aWVzfHxbcl0pLmZvckVhY2goZT0+eyhlPT09cnx8IW4uaGFzKGUpKSYmbi5zZXQoZSxhKX0pfSl9X2FuaW1hdGVPcHRpb25zKGUsdCl7bGV0IG49dC5vcHRpb25zLHI9VWMoZSxuKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9jcmVhdGVBbmltYXRpb25zKHIsbik7cmV0dXJuIG4uJHNoYXJlZCYmSGMoZS5vcHRpb25zLiRhbmltYXRpb25zLG4pLnRoZW4oKCk9PntlLm9wdGlvbnM9bn0sKCk9Pnt9KSxpfV9jcmVhdGVBbmltYXRpb25zKGUsdCl7bGV0IG49dGhpcy5fcHJvcGVydGllcyxyPVtdLGk9ZS4kYW5pbWF0aW9uc3x8PXt9LGE9T2JqZWN0LmtleXModCksbz1EYXRlLm5vdygpLHM7Zm9yKHM9YS5sZW5ndGgtMTtzPj0wOy0tcyl7bGV0IGM9YVtzXTtpZihjLmNoYXJBdCgwKT09PWAkYCljb250aW51ZTtpZihjPT09YG9wdGlvbnNgKXtyLnB1c2goLi4udGhpcy5fYW5pbWF0ZU9wdGlvbnMoZSx0KSk7Y29udGludWV9bGV0IGw9dFtjXSx1PWlbY10sZD1uLmdldChjKTtpZih1KXtpZihkJiZ1LmFjdGl2ZSgpKXt1LnVwZGF0ZShkLGwsbyk7Y29udGludWV9dS5jYW5jZWwoKX1pZighZHx8IWQuZHVyYXRpb24pe2VbY109bDtjb250aW51ZX1pW2NdPXU9bmV3IEJjKGQsZSxjLGwpLHIucHVzaCh1KX1yZXR1cm4gcn11cGRhdGUoZSx0KXtpZih0aGlzLl9wcm9wZXJ0aWVzLnNpemU9PT0wKXtPYmplY3QuYXNzaWduKGUsdCk7cmV0dXJufWxldCBuPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMoZSx0KTtpZihuLmxlbmd0aClyZXR1cm4gTGMuYWRkKHRoaXMuX2NoYXJ0LG4pLCEwfX07ZnVuY3Rpb24gSGMoZSx0KXtsZXQgbj1bXSxyPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtsZXQgaT1lW3JbdF1dO2kmJmkuYWN0aXZlKCkmJm4ucHVzaChpLndhaXQoKSl9cmV0dXJuIFByb21pc2UuYWxsKG4pfWZ1bmN0aW9uIFVjKGUsdCl7aWYoIXQpcmV0dXJuO2xldCBuPWUub3B0aW9ucztpZighbil7ZS5vcHRpb25zPXQ7cmV0dXJufXJldHVybiBuLiRzaGFyZWQmJihlLm9wdGlvbnM9bj1PYmplY3QuYXNzaWduKHt9LG4seyRzaGFyZWQ6ITEsJGFuaW1hdGlvbnM6e319KSksbn1mdW5jdGlvbiBXYyhlLHQpe2xldCBuPWUmJmUub3B0aW9uc3x8e30scj1uLnJldmVyc2UsaT1uLm1pbj09PXZvaWQgMD90OjAsYT1uLm1heD09PXZvaWQgMD90OjA7cmV0dXJue3N0YXJ0OnI/YTppLGVuZDpyP2k6YX19ZnVuY3Rpb24gR2MoZSx0LG4pe2lmKG49PT0hMSlyZXR1cm4hMTtsZXQgcj1XYyhlLG4pLGk9V2ModCxuKTtyZXR1cm57dG9wOmkuZW5kLHJpZ2h0OnIuZW5kLGJvdHRvbTppLnN0YXJ0LGxlZnQ6ci5zdGFydH19ZnVuY3Rpb24gS2MoZSl7bGV0IHQsbixyLGk7cmV0dXJuIEcoZSk/KHQ9ZS50b3Asbj1lLnJpZ2h0LHI9ZS5ib3R0b20saT1lLmxlZnQpOnQ9bj1yPWk9ZSx7dG9wOnQscmlnaHQ6bixib3R0b206cixsZWZ0OmksZGlzYWJsZWQ6ZT09PSExfX1mdW5jdGlvbiBxYyhlLHQpe2xldCBuPVtdLHI9ZS5fZ2V0U29ydGVkRGF0YXNldE1ldGFzKHQpLGksYTtmb3IoaT0wLGE9ci5sZW5ndGg7aTxhOysraSluLnB1c2gocltpXS5pbmRleCk7cmV0dXJuIG59ZnVuY3Rpb24gSmMoZSx0LG4scj17fSl7bGV0IGk9ZS5rZXlzLGE9ci5tb2RlPT09YHNpbmdsZWAsbyxzLGMsbDtpZih0PT09bnVsbClyZXR1cm47bGV0IHU9ITE7Zm9yKG89MCxzPWkubGVuZ3RoO288czsrK28pe2lmKGM9K2lbb10sYz09PW4pe2lmKHU9ITAsci5hbGwpY29udGludWU7YnJlYWt9bD1lLnZhbHVlc1tjXSxLKGwpJiYoYXx8dD09PTB8fENvKHQpPT09Q28obCkpJiYodCs9bCl9cmV0dXJuIXUmJiFyLmFsbD8wOnR9ZnVuY3Rpb24gWWMoZSx0KXtsZXR7aVNjYWxlOm4sdlNjYWxlOnJ9PXQsaT1uLmF4aXM9PT1geGA/YHhgOmB5YCxhPXIuYXhpcz09PWB4YD9geGA6YHlgLG89T2JqZWN0LmtleXMoZSkscz1BcnJheShvLmxlbmd0aCksYyxsLHU7Zm9yKGM9MCxsPW8ubGVuZ3RoO2M8bDsrK2MpdT1vW2NdLHNbY109e1tpXTp1LFthXTplW3VdfTtyZXR1cm4gc31mdW5jdGlvbiBYYyhlLHQpe2xldCBuPWUmJmUub3B0aW9ucy5zdGFja2VkO3JldHVybiBufHxuPT09dm9pZCAwJiZ0LnN0YWNrIT09dm9pZCAwfWZ1bmN0aW9uIFpjKGUsdCxuKXtyZXR1cm5gJHtlLmlkfS4ke3QuaWR9LiR7bi5zdGFja3x8bi50eXBlfWB9ZnVuY3Rpb24gUWMoZSl7bGV0e21pbjp0LG1heDpuLG1pbkRlZmluZWQ6cixtYXhEZWZpbmVkOml9PWUuZ2V0VXNlckJvdW5kcygpO3JldHVybnttaW46cj90Oi0xLzAsbWF4Omk/bjoxLzB9fWZ1bmN0aW9uICRjKGUsdCxuKXtsZXQgcj1lW3RdfHwoZVt0XT17fSk7cmV0dXJuIHJbbl18fChyW25dPXt9KX1mdW5jdGlvbiBlbChlLHQsbixyKXtmb3IobGV0IGkgb2YgdC5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyhyKS5yZXZlcnNlKCkpe2xldCB0PWVbaS5pbmRleF07aWYobiYmdD4wfHwhbiYmdDwwKXJldHVybiBpLmluZGV4fXJldHVybiBudWxsfWZ1bmN0aW9uIHRsKGUsdCl7bGV0e2NoYXJ0Om4sX2NhY2hlZE1ldGE6cn09ZSxpPW4uX3N0YWNrc3x8PXt9LHtpU2NhbGU6YSx2U2NhbGU6byxpbmRleDpzfT1yLGM9YS5heGlzLGw9by5heGlzLHU9WmMoYSxvLHIpLGQ9dC5sZW5ndGgsZjtmb3IobGV0IGU9MDtlPGQ7KytlKXtsZXQgbj10W2VdLHtbY106YSxbbF06ZH09bixwPW4uX3N0YWNrc3x8PXt9O2Y9cFtsXT0kYyhpLHUsYSksZltzXT1kLGYuX3RvcD1lbChmLG8sITAsci50eXBlKSxmLl9ib3R0b209ZWwoZixvLCExLHIudHlwZSk7bGV0IG09Zi5fdmlzdWFsVmFsdWVzfHwoZi5fdmlzdWFsVmFsdWVzPXt9KTttW3NdPWR9fWZ1bmN0aW9uIG5sKGUsdCl7bGV0IG49ZS5zY2FsZXM7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT5uW2VdLmF4aXM9PT10KS5zaGlmdCgpfWZ1bmN0aW9uIHJsKGUsdCl7cmV0dXJuIHFzKGUse2FjdGl2ZTohMSxkYXRhc2V0OnZvaWQgMCxkYXRhc2V0SW5kZXg6dCxpbmRleDp0LG1vZGU6YGRlZmF1bHRgLHR5cGU6YGRhdGFzZXRgfSl9ZnVuY3Rpb24gaWwoZSx0LG4pe3JldHVybiBxcyhlLHthY3RpdmU6ITEsZGF0YUluZGV4OnQscGFyc2VkOnZvaWQgMCxyYXc6dm9pZCAwLGVsZW1lbnQ6bixpbmRleDp0LG1vZGU6YGRlZmF1bHRgLHR5cGU6YGRhdGFgfSl9ZnVuY3Rpb24gYWwoZSx0KXtsZXQgbj1lLmNvbnRyb2xsZXIuaW5kZXgscj1lLnZTY2FsZSYmZS52U2NhbGUuYXhpcztpZihyKXt0fHw9ZS5fcGFyc2VkO2ZvcihsZXQgZSBvZiB0KXtsZXQgdD1lLl9zdGFja3M7aWYoIXR8fHRbcl09PT12b2lkIDB8fHRbcl1bbl09PT12b2lkIDApcmV0dXJuO2RlbGV0ZSB0W3JdW25dLHRbcl0uX3Zpc3VhbFZhbHVlcyE9PXZvaWQgMCYmdFtyXS5fdmlzdWFsVmFsdWVzW25dIT09dm9pZCAwJiZkZWxldGUgdFtyXS5fdmlzdWFsVmFsdWVzW25dfX19dmFyIG9sPWU9PmU9PT1gcmVzZXRgfHxlPT09YG5vbmVgLHNsPShlLHQpPT50P2U6T2JqZWN0LmFzc2lnbih7fSxlKSxjbD0oZSx0LG4pPT5lJiYhdC5oaWRkZW4mJnQuX3N0YWNrZWQmJntrZXlzOnFjKG4sITApLHZhbHVlczpudWxsfSxsbD1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9e307c3RhdGljIGRhdGFzZXRFbGVtZW50VHlwZT1udWxsO3N0YXRpYyBkYXRhRWxlbWVudFR5cGU9bnVsbDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY2hhcnQ9ZSx0aGlzLl9jdHg9ZS5jdHgsdGhpcy5pbmRleD10LHRoaXMuX2NhY2hlZERhdGFPcHRzPXt9LHRoaXMuX2NhY2hlZE1ldGE9dGhpcy5nZXRNZXRhKCksdGhpcy5fdHlwZT10aGlzLl9jYWNoZWRNZXRhLnR5cGUsdGhpcy5vcHRpb25zPXZvaWQgMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuX2RhdGE9dm9pZCAwLHRoaXMuX29iamVjdERhdGE9dm9pZCAwLHRoaXMuX3NoYXJlZE9wdGlvbnM9dm9pZCAwLHRoaXMuX2RyYXdTdGFydD12b2lkIDAsdGhpcy5fZHJhd0NvdW50PXZvaWQgMCx0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmc9ITEsdGhpcy5zdXBwb3J0c0RlY2ltYXRpb249ITEsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5fc3luY0xpc3Q9W10sdGhpcy5kYXRhc2V0RWxlbWVudFR5cGU9bmV3LnRhcmdldC5kYXRhc2V0RWxlbWVudFR5cGUsdGhpcy5kYXRhRWxlbWVudFR5cGU9bmV3LnRhcmdldC5kYXRhRWxlbWVudFR5cGUsdGhpcy5pbml0aWFsaXplKCl9aW5pdGlhbGl6ZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5jb25maWd1cmUoKSx0aGlzLmxpbmtTY2FsZXMoKSxlLl9zdGFja2VkPVhjKGUudlNjYWxlLGUpLHRoaXMuYWRkRWxlbWVudHMoKSx0aGlzLm9wdGlvbnMuZmlsbCYmIXRoaXMuY2hhcnQuaXNQbHVnaW5FbmFibGVkKGBmaWxsZXJgKSYmY29uc29sZS53YXJuKGBUcmllZCB0byB1c2UgdGhlICdmaWxsJyBvcHRpb24gd2l0aG91dCB0aGUgJ0ZpbGxlcicgcGx1Z2luIGVuYWJsZWQuIFBsZWFzZSBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZSAnRmlsbGVyJyBwbHVnaW4gYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgZGlzYWJsZWQgaW4gdGhlIG9wdGlvbnNgKX11cGRhdGVJbmRleChlKXt0aGlzLmluZGV4IT09ZSYmYWwodGhpcy5fY2FjaGVkTWV0YSksdGhpcy5pbmRleD1lfWxpbmtTY2FsZXMoKXtsZXQgZT10aGlzLmNoYXJ0LHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXRoaXMuZ2V0RGF0YXNldCgpLHI9KGUsdCxuLHIpPT5lPT09YHhgP3Q6ZT09PWByYD9yOm4saT10LnhBeGlzSUQ9cShuLnhBeGlzSUQsbmwoZSxgeGApKSxhPXQueUF4aXNJRD1xKG4ueUF4aXNJRCxubChlLGB5YCkpLG89dC5yQXhpc0lEPXEobi5yQXhpc0lELG5sKGUsYHJgKSkscz10LmluZGV4QXhpcyxjPXQuaUF4aXNJRD1yKHMsaSxhLG8pLGw9dC52QXhpc0lEPXIocyxhLGksbyk7dC54U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGkpLHQueVNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChhKSx0LnJTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQobyksdC5pU2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGMpLHQudlNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChsKX1nZXREYXRhc2V0KCl7cmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEodGhpcy5pbmRleCl9Z2V0U2NhbGVGb3JJZChlKXtyZXR1cm4gdGhpcy5jaGFydC5zY2FsZXNbZV19X2dldE90aGVyU2NhbGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTtyZXR1cm4gZT09PXQuaVNjYWxlP3QudlNjYWxlOnQuaVNjYWxlfXJlc2V0KCl7dGhpcy5fdXBkYXRlKGByZXNldGApfV9kZXN0cm95KCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhJiZxbyh0aGlzLl9kYXRhLHRoaXMpLGUuX3N0YWNrZWQmJmFsKGUpfV9kYXRhQ2hlY2soKXtsZXQgZT10aGlzLmdldERhdGFzZXQoKSx0PWUuZGF0YXx8PVtdLG49dGhpcy5fZGF0YTtpZihHKHQpKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGE9WWModCxlKX1lbHNlIGlmKG4hPT10KXtpZihuKXtxbyhuLHRoaXMpO2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7YWwoZSksZS5fcGFyc2VkPVtdfXQmJk9iamVjdC5pc0V4dGVuc2libGUodCkmJktvKHQsdGhpcyksdGhpcy5fc3luY0xpc3Q9W10sdGhpcy5fZGF0YT10fX1hZGRFbGVtZW50cygpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YUNoZWNrKCksdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUmJihlLmRhdGFzZXQ9bmV3IHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKX1idWlsZE9yVXBkYXRlRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXRoaXMuZ2V0RGF0YXNldCgpLHI9ITE7dGhpcy5fZGF0YUNoZWNrKCk7bGV0IGk9dC5fc3RhY2tlZDt0Ll9zdGFja2VkPVhjKHQudlNjYWxlLHQpLHQuc3RhY2shPT1uLnN0YWNrJiYocj0hMCxhbCh0KSx0LnN0YWNrPW4uc3RhY2spLHRoaXMuX3Jlc3luY0VsZW1lbnRzKGUpLChyfHxpIT09dC5fc3RhY2tlZCkmJih0bCh0aGlzLHQuX3BhcnNlZCksdC5fc3RhY2tlZD1YYyh0LnZTY2FsZSx0KSl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5jaGFydC5jb25maWcsdD1lLmRhdGFzZXRTY29wZUtleXModGhpcy5fdHlwZSksbj1lLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSx0LCEwKTt0aGlzLm9wdGlvbnM9ZS5jcmVhdGVSZXNvbHZlcihuLHRoaXMuZ2V0Q29udGV4dCgpKSx0aGlzLl9wYXJzaW5nPXRoaXMub3B0aW9ucy5wYXJzaW5nLHRoaXMuX2NhY2hlZERhdGFPcHRzPXt9fXBhcnNlKGUsdCl7bGV0e19jYWNoZWRNZXRhOm4sX2RhdGE6cn09dGhpcyx7aVNjYWxlOmksX3N0YWNrZWQ6YX09bixvPWkuYXhpcyxzPWU9PT0wJiZ0PT09ci5sZW5ndGh8fG4uX3NvcnRlZCxjPWU+MCYmbi5fcGFyc2VkW2UtMV0sbCx1LGQ7aWYodGhpcy5fcGFyc2luZz09PSExKW4uX3BhcnNlZD1yLG4uX3NvcnRlZD0hMCxkPXI7ZWxzZXtkPVcocltlXSk/dGhpcy5wYXJzZUFycmF5RGF0YShuLHIsZSx0KTpHKHJbZV0pP3RoaXMucGFyc2VPYmplY3REYXRhKG4scixlLHQpOnRoaXMucGFyc2VQcmltaXRpdmVEYXRhKG4scixlLHQpO2xldCBpPSgpPT51W29dPT09bnVsbHx8YyYmdVtvXTxjW29dO2ZvcihsPTA7bDx0OysrbCluLl9wYXJzZWRbbCtlXT11PWRbbF0scyYmKGkoKSYmKHM9ITEpLGM9dSk7bi5fc29ydGVkPXN9YSYmdGwodGhpcyxkKX1wYXJzZVByaW1pdGl2ZURhdGEoZSx0LG4scil7bGV0e2lTY2FsZTppLHZTY2FsZTphfT1lLG89aS5heGlzLHM9YS5heGlzLGM9aS5nZXRMYWJlbHMoKSxsPWk9PT1hLHU9QXJyYXkociksZCxmLHA7Zm9yKGQ9MCxmPXI7ZDxmOysrZClwPWQrbix1W2RdPXtbb106bHx8aS5wYXJzZShjW3BdLHApLFtzXTphLnBhcnNlKHRbcF0scCl9O3JldHVybiB1fXBhcnNlQXJyYXlEYXRhKGUsdCxuLHIpe2xldHt4U2NhbGU6aSx5U2NhbGU6YX09ZSxvPUFycmF5KHIpLHMsYyxsLHU7Zm9yKHM9MCxjPXI7czxjOysrcylsPXMrbix1PXRbbF0sb1tzXT17eDppLnBhcnNlKHVbMF0sbCkseTphLnBhcnNlKHVbMV0sbCl9O3JldHVybiBvfXBhcnNlT2JqZWN0RGF0YShlLHQsbixyKXtsZXR7eFNjYWxlOmkseVNjYWxlOmF9PWUse3hBeGlzS2V5Om89YHhgLHlBeGlzS2V5OnM9YHlgfT10aGlzLl9wYXJzaW5nLGM9QXJyYXkociksbCx1LGQsZjtmb3IobD0wLHU9cjtsPHU7KytsKWQ9bCtuLGY9dFtkXSxjW2xdPXt4OmkucGFyc2UobG8oZixvKSxkKSx5OmEucGFyc2UobG8oZixzKSxkKX07cmV0dXJuIGN9Z2V0UGFyc2VkKGUpe3JldHVybiB0aGlzLl9jYWNoZWRNZXRhLl9wYXJzZWRbZV19Z2V0RGF0YUVsZW1lbnQoZSl7cmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuZGF0YVtlXX1hcHBseVN0YWNrKGUsdCxuKXtsZXQgcj10aGlzLmNoYXJ0LGk9dGhpcy5fY2FjaGVkTWV0YSxhPXRbZS5heGlzXTtyZXR1cm4gSmMoe2tleXM6cWMociwhMCksdmFsdWVzOnQuX3N0YWNrc1tlLmF4aXNdLl92aXN1YWxWYWx1ZXN9LGEsaS5pbmRleCx7bW9kZTpufSl9dXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGUsdCxuLHIpe2xldCBpPW5bdC5heGlzXSxhPWk9PT1udWxsP05hTjppLG89ciYmbi5fc3RhY2tzW3QuYXhpc107ciYmbyYmKHIudmFsdWVzPW8sYT1KYyhyLGksdGhpcy5fY2FjaGVkTWV0YS5pbmRleCkpLGUubWluPU1hdGgubWluKGUubWluLGEpLGUubWF4PU1hdGgubWF4KGUubWF4LGEpfWdldE1pbk1heChlLHQpe2xldCBuPXRoaXMuX2NhY2hlZE1ldGEscj1uLl9wYXJzZWQsaT1uLl9zb3J0ZWQmJmU9PT1uLmlTY2FsZSxhPXIubGVuZ3RoLG89dGhpcy5fZ2V0T3RoZXJTY2FsZShlKSxzPWNsKHQsbix0aGlzLmNoYXJ0KSxjPXttaW46MS8wLG1heDotMS8wfSx7bWluOmwsbWF4OnV9PVFjKG8pLGQsZjtmdW5jdGlvbiBwKCl7Zj1yW2RdO2xldCB0PWZbby5heGlzXTtyZXR1cm4hSyhmW2UuYXhpc10pfHxsPnR8fHU8dH1mb3IoZD0wO2Q8YSYmISghcCgpJiYodGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQoYyxlLGYscyksaSkpOysrZCk7aWYoaSl7Zm9yKGQ9YS0xO2Q+PTA7LS1kKWlmKCFwKCkpe3RoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGMsZSxmLHMpO2JyZWFrfX1yZXR1cm4gY31nZXRBbGxQYXJzZWRWYWx1ZXMoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkLG49W10scixpLGE7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpYT10W3JdW2UuYXhpc10sSyhhKSYmbi5wdXNoKGEpO3JldHVybiBufWdldE1heE92ZXJmbG93KCl7cmV0dXJuITF9Z2V0TGFiZWxBbmRWYWx1ZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLG49dC5pU2NhbGUscj10LnZTY2FsZSxpPXRoaXMuZ2V0UGFyc2VkKGUpO3JldHVybntsYWJlbDpuP2BgK24uZ2V0TGFiZWxGb3JWYWx1ZShpW24uYXhpc10pOmBgLHZhbHVlOnI/YGArci5nZXRMYWJlbEZvclZhbHVlKGlbci5heGlzXSk6YGB9fV91cGRhdGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLnVwZGF0ZShlfHxgZGVmYXVsdGApLHQuX2NsaXA9S2MocSh0aGlzLm9wdGlvbnMuY2xpcCxHYyh0LnhTY2FsZSx0LnlTY2FsZSx0aGlzLmdldE1heE92ZXJmbG93KCkpKSl9dXBkYXRlKGUpe31kcmF3KCl7bGV0IGU9dGhpcy5fY3R4LHQ9dGhpcy5jaGFydCxuPXRoaXMuX2NhY2hlZE1ldGEscj1uLmRhdGF8fFtdLGk9dC5jaGFydEFyZWEsYT1bXSxvPXRoaXMuX2RyYXdTdGFydHx8MCxzPXRoaXMuX2RyYXdDb3VudHx8ci5sZW5ndGgtbyxjPXRoaXMub3B0aW9ucy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcCxsO2ZvcihuLmRhdGFzZXQmJm4uZGF0YXNldC5kcmF3KGUsaSxvLHMpLGw9bztsPG8rczsrK2wpe2xldCB0PXJbbF07dC5oaWRkZW58fCh0LmFjdGl2ZSYmYz9hLnB1c2godCk6dC5kcmF3KGUsaSkpfWZvcihsPTA7bDxhLmxlbmd0aDsrK2wpYVtsXS5kcmF3KGUsaSl9Z2V0U3R5bGUoZSx0KXtsZXQgbj10P2BhY3RpdmVgOmBkZWZhdWx0YDtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0P3RoaXMucmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhuKTp0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZXx8MCxuKX1nZXRDb250ZXh0KGUsdCxuKXtsZXQgcj10aGlzLmdldERhdGFzZXQoKSxpO2lmKGU+PTAmJmU8dGhpcy5fY2FjaGVkTWV0YS5kYXRhLmxlbmd0aCl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YS5kYXRhW2VdO2k9dC4kY29udGV4dHx8PWlsKHRoaXMuZ2V0Q29udGV4dCgpLGUsdCksaS5wYXJzZWQ9dGhpcy5nZXRQYXJzZWQoZSksaS5yYXc9ci5kYXRhW2VdLGkuaW5kZXg9aS5kYXRhSW5kZXg9ZX1lbHNlIGk9dGhpcy4kY29udGV4dHx8PXJsKHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLHRoaXMuaW5kZXgpLGkuZGF0YXNldD1yLGkuaW5kZXg9aS5kYXRhc2V0SW5kZXg9dGhpcy5pbmRleDtyZXR1cm4gaS5hY3RpdmU9ISF0LGkubW9kZT1uLGl9cmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlLmlkLGUpfXJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZSx0KXtyZXR1cm4gdGhpcy5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHRoaXMuZGF0YUVsZW1lbnRUeXBlLmlkLHQsZSl9X3Jlc29sdmVFbGVtZW50T3B0aW9ucyhlLHQ9YGRlZmF1bHRgLG4pe2xldCByPXQ9PT1gYWN0aXZlYCxpPXRoaXMuX2NhY2hlZERhdGFPcHRzLGE9ZStgLWArdCxvPWlbYV0scz10aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcmJmZvKG4pO2lmKG8pcmV0dXJuIHNsKG8scyk7bGV0IGM9dGhpcy5jaGFydC5jb25maWcsbD1jLmRhdGFzZXRFbGVtZW50U2NvcGVLZXlzKHRoaXMuX3R5cGUsZSksdT1yP1tgJHtlfUhvdmVyYCxgaG92ZXJgLGUsYGBdOltlLGBgXSxkPWMuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLGwpLGY9T2JqZWN0LmtleXMoWi5lbGVtZW50c1tlXSkscD1jLnJlc29sdmVOYW1lZE9wdGlvbnMoZCxmLCgpPT50aGlzLmdldENvbnRleHQobixyLHQpLHUpO3JldHVybiBwLiRzaGFyZWQmJihwLiRzaGFyZWQ9cyxpW2FdPU9iamVjdC5mcmVlemUoc2wocCxzKSkpLHB9X3Jlc29sdmVBbmltYXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLmNoYXJ0LGk9dGhpcy5fY2FjaGVkRGF0YU9wdHMsYT1gYW5pbWF0aW9uLSR7dH1gLG89aVthXTtpZihvKXJldHVybiBvO2xldCBzO2lmKHIub3B0aW9ucy5hbmltYXRpb24hPT0hMSl7bGV0IHI9dGhpcy5jaGFydC5jb25maWcsaT1yLmRhdGFzZXRBbmltYXRpb25TY29wZUtleXModGhpcy5fdHlwZSx0KSxhPXIuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLGkpO3M9ci5jcmVhdGVSZXNvbHZlcihhLHRoaXMuZ2V0Q29udGV4dChlLG4sdCkpfWxldCBjPW5ldyBWYyhyLHMmJnMuYW5pbWF0aW9ucyk7cmV0dXJuIHMmJnMuX2NhY2hlYWJsZSYmKGlbYV09T2JqZWN0LmZyZWV6ZShjKSksY31nZXRTaGFyZWRPcHRpb25zKGUpe2lmKGUuJHNoYXJlZClyZXR1cm4gdGhpcy5fc2hhcmVkT3B0aW9uc3x8PU9iamVjdC5hc3NpZ24oe30sZSl9aW5jbHVkZU9wdGlvbnMoZSx0KXtyZXR1cm4hdHx8b2woZSl8fHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZH1fZ2V0U2hhcmVkT3B0aW9ucyhlLHQpe2xldCBuPXRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlLHQpLHI9dGhpcy5fc2hhcmVkT3B0aW9ucyxpPXRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhuKSxhPXRoaXMuaW5jbHVkZU9wdGlvbnModCxpKXx8aSE9PXI7cmV0dXJuIHRoaXMudXBkYXRlU2hhcmVkT3B0aW9ucyhpLHQsbikse3NoYXJlZE9wdGlvbnM6aSxpbmNsdWRlT3B0aW9uczphfX11cGRhdGVFbGVtZW50KGUsdCxuLHIpe29sKHIpP09iamVjdC5hc3NpZ24oZSxuKTp0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh0LHIpLnVwZGF0ZShlLG4pfXVwZGF0ZVNoYXJlZE9wdGlvbnMoZSx0LG4pe2UmJiFvbCh0KSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnModm9pZCAwLHQpLnVwZGF0ZShlLG4pfV9zZXRTdHlsZShlLHQsbixyKXtlLmFjdGl2ZT1yO2xldCBpPXRoaXMuZ2V0U3R5bGUodCxyKTt0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh0LG4scikudXBkYXRlKGUse29wdGlvbnM6IXImJnRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhpKXx8aX0pfXJlbW92ZUhvdmVyU3R5bGUoZSx0LG4pe3RoaXMuX3NldFN0eWxlKGUsbixgYWN0aXZlYCwhMSl9c2V0SG92ZXJTdHlsZShlLHQsbil7dGhpcy5fc2V0U3R5bGUoZSxuLGBhY3RpdmVgLCEwKX1fcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7ZSYmdGhpcy5fc2V0U3R5bGUoZSx2b2lkIDAsYGFjdGl2ZWAsITEpfV9zZXREYXRhc2V0SG92ZXJTdHlsZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldDtlJiZ0aGlzLl9zZXRTdHlsZShlLHZvaWQgMCxgYWN0aXZlYCwhMCl9X3Jlc3luY0VsZW1lbnRzKGUpe2xldCB0PXRoaXMuX2RhdGEsbj10aGlzLl9jYWNoZWRNZXRhLmRhdGE7Zm9yKGxldFtlLHQsbl1vZiB0aGlzLl9zeW5jTGlzdCl0aGlzW2VdKHQsbik7dGhpcy5fc3luY0xpc3Q9W107bGV0IHI9bi5sZW5ndGgsaT10Lmxlbmd0aCxhPU1hdGgubWluKGkscik7YSYmdGhpcy5wYXJzZSgwLGEpLGk+cj90aGlzLl9pbnNlcnRFbGVtZW50cyhyLGktcixlKTppPHImJnRoaXMuX3JlbW92ZUVsZW1lbnRzKGksci1pKX1faW5zZXJ0RWxlbWVudHMoZSx0LG49ITApe2xldCByPXRoaXMuX2NhY2hlZE1ldGEsaT1yLmRhdGEsYT1lK3QsbyxzPWU9Pntmb3IoZS5sZW5ndGgrPXQsbz1lLmxlbmd0aC0xO28+PWE7by0tKWVbb109ZVtvLXRdfTtmb3IocyhpKSxvPWU7bzxhOysrbylpW29dPW5ldyB0aGlzLmRhdGFFbGVtZW50VHlwZTt0aGlzLl9wYXJzaW5nJiZzKHIuX3BhcnNlZCksdGhpcy5wYXJzZShlLHQpLG4mJnRoaXMudXBkYXRlRWxlbWVudHMoaSxlLHQsYHJlc2V0YCl9dXBkYXRlRWxlbWVudHMoZSx0LG4scil7fV9yZW1vdmVFbGVtZW50cyhlLHQpe2xldCBuPXRoaXMuX2NhY2hlZE1ldGE7aWYodGhpcy5fcGFyc2luZyl7bGV0IHI9bi5fcGFyc2VkLnNwbGljZShlLHQpO24uX3N0YWNrZWQmJmFsKG4scil9bi5kYXRhLnNwbGljZShlLHQpfV9zeW5jKGUpe2lmKHRoaXMuX3BhcnNpbmcpdGhpcy5fc3luY0xpc3QucHVzaChlKTtlbHNle2xldFt0LG4scl09ZTt0aGlzW3RdKG4scil9dGhpcy5jaGFydC5fZGF0YUNoYW5nZXMucHVzaChbdGhpcy5pbmRleCwuLi5lXSl9X29uRGF0YVB1c2goKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoO3RoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLHRoaXMuZ2V0RGF0YXNldCgpLmRhdGEubGVuZ3RoLWUsZV0pfV9vbkRhdGFQb3AoKXt0aGlzLl9zeW5jKFtgX3JlbW92ZUVsZW1lbnRzYCx0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoLTEsMV0pfV9vbkRhdGFTaGlmdCgpe3RoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLDAsMV0pfV9vbkRhdGFTcGxpY2UoZSx0KXt0JiZ0aGlzLl9zeW5jKFtgX3JlbW92ZUVsZW1lbnRzYCxlLHRdKTtsZXQgbj1hcmd1bWVudHMubGVuZ3RoLTI7biYmdGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsZSxuXSl9X29uRGF0YVVuc2hpZnQoKXt0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCwwLGFyZ3VtZW50cy5sZW5ndGhdKX19O2Z1bmN0aW9uIHVsKGUsdCl7aWYoIWUuX2NhY2hlLiRiYXIpe2xldCBuPWUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModCkscj1bXTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspcj1yLmNvbmNhdChuW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKGUpKTtlLl9jYWNoZS4kYmFyPUpvKHIuc29ydCgoZSx0KT0+ZS10KSl9cmV0dXJuIGUuX2NhY2hlLiRiYXJ9ZnVuY3Rpb24gZGwoZSl7bGV0IHQ9ZS5pU2NhbGUsbj11bCh0LGUudHlwZSkscj10Ll9sZW5ndGgsaSxhLG8scyxjPSgpPT57byE9PTMyNzY3JiZvIT09LTMyNzY4JiYoZm8ocykmJihyPU1hdGgubWluKHIsTWF0aC5hYnMoby1zKXx8cikpLHM9byl9O2ZvcihpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW89dC5nZXRQaXhlbEZvclZhbHVlKG5baV0pLGMoKTtmb3Iocz12b2lkIDAsaT0wLGE9dC50aWNrcy5sZW5ndGg7aTxhOysraSlvPXQuZ2V0UGl4ZWxGb3JUaWNrKGkpLGMoKTtyZXR1cm4gcn1mdW5jdGlvbiBmbChlLHQsbixyKXtsZXQgaT1uLmJhclRoaWNrbmVzcyxhLG87cmV0dXJuIFUoaSk/KGE9dC5taW4qbi5jYXRlZ29yeVBlcmNlbnRhZ2Usbz1uLmJhclBlcmNlbnRhZ2UpOihhPWkqcixvPTEpLHtjaHVuazphL3IscmF0aW86byxzdGFydDp0LnBpeGVsc1tlXS1hLzJ9fWZ1bmN0aW9uIHBsKGUsdCxuLHIpe2xldCBpPXQucGl4ZWxzLGE9aVtlXSxvPWU+MD9pW2UtMV06bnVsbCxzPWU8aS5sZW5ndGgtMT9pW2UrMV06bnVsbCxjPW4uY2F0ZWdvcnlQZXJjZW50YWdlO289PT1udWxsJiYobz1hLShzPT09bnVsbD90LmVuZC10LnN0YXJ0OnMtYSkpLHM9PT1udWxsJiYocz1hK2Etbyk7bGV0IGw9YS0oYS1NYXRoLm1pbihvLHMpKS8yKmM7cmV0dXJue2NodW5rOk1hdGguYWJzKHMtbykvMipjL3IscmF0aW86bi5iYXJQZXJjZW50YWdlLHN0YXJ0Omx9fWZ1bmN0aW9uIG1sKGUsdCxuLHIpe2xldCBpPW4ucGFyc2UoZVswXSxyKSxhPW4ucGFyc2UoZVsxXSxyKSxvPU1hdGgubWluKGksYSkscz1NYXRoLm1heChpLGEpLGM9byxsPXM7TWF0aC5hYnMobyk+TWF0aC5hYnMocykmJihjPXMsbD1vKSx0W24uYXhpc109bCx0Ll9jdXN0b209e2JhclN0YXJ0OmMsYmFyRW5kOmwsc3RhcnQ6aSxlbmQ6YSxtaW46byxtYXg6c319ZnVuY3Rpb24gaGwoZSx0LG4scil7cmV0dXJuIFcoZSk/bWwoZSx0LG4scik6dFtuLmF4aXNdPW4ucGFyc2UoZSxyKSx0fWZ1bmN0aW9uIGdsKGUsdCxuLHIpe2xldCBpPWUuaVNjYWxlLGE9ZS52U2NhbGUsbz1pLmdldExhYmVscygpLHM9aT09PWEsYz1bXSxsLHUsZCxmO2ZvcihsPW4sdT1uK3I7bDx1OysrbClmPXRbbF0sZD17fSxkW2kuYXhpc109c3x8aS5wYXJzZShvW2xdLGwpLGMucHVzaChobChmLGQsYSxsKSk7cmV0dXJuIGN9ZnVuY3Rpb24gX2woZSl7cmV0dXJuIGUmJmUuYmFyU3RhcnQhPT12b2lkIDAmJmUuYmFyRW5kIT09dm9pZCAwfWZ1bmN0aW9uIHZsKGUsdCxuKXtyZXR1cm4gZT09PTA/KHQuaXNIb3Jpem9udGFsKCk/MTotMSkqKHQubWluPj1uPzE6LTEpOkNvKGUpfWZ1bmN0aW9uIHlsKGUpe2xldCB0LG4scixpLGE7cmV0dXJuIGUuaG9yaXpvbnRhbD8odD1lLmJhc2U+ZS54LG49YGxlZnRgLHI9YHJpZ2h0YCk6KHQ9ZS5iYXNlPGUueSxuPWBib3R0b21gLHI9YHRvcGApLHQ/KGk9YGVuZGAsYT1gc3RhcnRgKTooaT1gc3RhcnRgLGE9YGVuZGApLHtzdGFydDpuLGVuZDpyLHJldmVyc2U6dCx0b3A6aSxib3R0b206YX19ZnVuY3Rpb24gYmwoZSx0LG4scil7bGV0IGk9dC5ib3JkZXJTa2lwcGVkLGE9e307aWYoIWkpe2UuYm9yZGVyU2tpcHBlZD1hO3JldHVybn1pZihpPT09ITApe2UuYm9yZGVyU2tpcHBlZD17dG9wOiEwLHJpZ2h0OiEwLGJvdHRvbTohMCxsZWZ0OiEwfTtyZXR1cm59bGV0e3N0YXJ0Om8sZW5kOnMscmV2ZXJzZTpjLHRvcDpsLGJvdHRvbTp1fT15bChlKTtpPT09YG1pZGRsZWAmJm4mJihlLmVuYWJsZUJvcmRlclJhZGl1cz0hMCwobi5fdG9wfHwwKT09PXI/aT1sOihuLl9ib3R0b218fDApPT09cj9pPXU6KGFbeGwodSxvLHMsYyldPSEwLGk9bCkpLGFbeGwoaSxvLHMsYyldPSEwLGUuYm9yZGVyU2tpcHBlZD1hfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe3JldHVybiByPyhlPVNsKGUsdCxuKSxlPUNsKGUsbix0KSk6ZT1DbChlLHQsbiksZX1mdW5jdGlvbiBTbChlLHQsbil7cmV0dXJuIGU9PT10P246ZT09PW4/dDplfWZ1bmN0aW9uIENsKGUsdCxuKXtyZXR1cm4gZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjplfWZ1bmN0aW9uIHdsKGUse2luZmxhdGVBbW91bnQ6dH0sbil7ZS5pbmZsYXRlQW1vdW50PXQ9PT1gYXV0b2A/bj09PTE/LjMzOjA6dH12YXIgVGw9Y2xhc3MgZXh0ZW5kcyBsbHtzdGF0aWMgaWQ9YGJhcmA7c3RhdGljIGRlZmF1bHRzPXtkYXRhc2V0RWxlbWVudFR5cGU6ITEsZGF0YUVsZW1lbnRUeXBlOmBiYXJgLGNhdGVnb3J5UGVyY2VudGFnZTouOCxiYXJQZXJjZW50YWdlOi45LGdyb3VwZWQ6ITAsYW5pbWF0aW9uczp7bnVtYmVyczp7dHlwZTpgbnVtYmVyYCxwcm9wZXJ0aWVzOltgeGAsYHlgLGBiYXNlYCxgd2lkdGhgLGBoZWlnaHRgXX19fTtzdGF0aWMgb3ZlcnJpZGVzPXtzY2FsZXM6e19pbmRleF86e3R5cGU6YGNhdGVnb3J5YCxvZmZzZXQ6ITAsZ3JpZDp7b2Zmc2V0OiEwfX0sX3ZhbHVlXzp7dHlwZTpgbGluZWFyYCxiZWdpbkF0WmVybzohMH19fTtwYXJzZVByaW1pdGl2ZURhdGEoZSx0LG4scil7cmV0dXJuIGdsKGUsdCxuLHIpfXBhcnNlQXJyYXlEYXRhKGUsdCxuLHIpe3JldHVybiBnbChlLHQsbixyKX1wYXJzZU9iamVjdERhdGEoZSx0LG4scil7bGV0e2lTY2FsZTppLHZTY2FsZTphfT1lLHt4QXhpc0tleTpvPWB4YCx5QXhpc0tleTpzPWB5YH09dGhpcy5fcGFyc2luZyxjPWkuYXhpcz09PWB4YD9vOnMsbD1hLmF4aXM9PT1geGA/bzpzLHU9W10sZCxmLHAsbTtmb3IoZD1uLGY9bityO2Q8ZjsrK2QpbT10W2RdLHA9e30scFtpLmF4aXNdPWkucGFyc2UobG8obSxjKSxkKSx1LnB1c2goaGwobG8obSxsKSxwLGEsZCkpO3JldHVybiB1fXVwZGF0ZVJhbmdlRnJvbVBhcnNlZChlLHQsbixyKXtzdXBlci51cGRhdGVSYW5nZUZyb21QYXJzZWQoZSx0LG4scik7bGV0IGk9bi5fY3VzdG9tO2kmJnQ9PT10aGlzLl9jYWNoZWRNZXRhLnZTY2FsZSYmKGUubWluPU1hdGgubWluKGUubWluLGkubWluKSxlLm1heD1NYXRoLm1heChlLm1heCxpLm1heCkpfWdldE1heE92ZXJmbG93KCl7cmV0dXJuIDB9Z2V0TGFiZWxBbmRWYWx1ZShlKXtsZXR7aVNjYWxlOnQsdlNjYWxlOm59PXRoaXMuX2NhY2hlZE1ldGEscj10aGlzLmdldFBhcnNlZChlKSxpPXIuX2N1c3RvbSxhPV9sKGkpP2BbYCtpLnN0YXJ0K2AsIGAraS5lbmQrYF1gOmBgK24uZ2V0TGFiZWxGb3JWYWx1ZShyW24uYXhpc10pO3JldHVybntsYWJlbDpgYCt0LmdldExhYmVsRm9yVmFsdWUoclt0LmF4aXNdKSx2YWx1ZTphfX1pbml0aWFsaXplKCl7dGhpcy5lbmFibGVPcHRpb25TaGFyaW5nPSEwLHN1cGVyLmluaXRpYWxpemUoKTtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO2Uuc3RhY2s9dGhpcy5nZXREYXRhc2V0KCkuc3RhY2t9dXBkYXRlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGE7dGhpcy51cGRhdGVFbGVtZW50cyh0LmRhdGEsMCx0LmRhdGEubGVuZ3RoLGUpfXVwZGF0ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXI9PT1gcmVzZXRgLHtpbmRleDphLF9jYWNoZWRNZXRhOnt2U2NhbGU6b319PXRoaXMscz1vLmdldEJhc2VQaXhlbCgpLGM9by5pc0hvcml6b250YWwoKSxsPXRoaXMuX2dldFJ1bGVyKCkse3NoYXJlZE9wdGlvbnM6dSxpbmNsdWRlT3B0aW9uczpkfT10aGlzLl9nZXRTaGFyZWRPcHRpb25zKHQscik7Zm9yKGxldCBmPXQ7Zjx0K247ZisrKXtsZXQgdD10aGlzLmdldFBhcnNlZChmKSxuPWl8fFUodFtvLmF4aXNdKT97YmFzZTpzLGhlYWQ6c306dGhpcy5fY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoZikscD10aGlzLl9jYWxjdWxhdGVCYXJJbmRleFBpeGVscyhmLGwpLG09KHQuX3N0YWNrc3x8e30pW28uYXhpc10saD17aG9yaXpvbnRhbDpjLGJhc2U6bi5iYXNlLGVuYWJsZUJvcmRlclJhZGl1czohbXx8X2wodC5fY3VzdG9tKXx8YT09PW0uX3RvcHx8YT09PW0uX2JvdHRvbSx4OmM/bi5oZWFkOnAuY2VudGVyLHk6Yz9wLmNlbnRlcjpuLmhlYWQsaGVpZ2h0OmM/cC5zaXplOk1hdGguYWJzKG4uc2l6ZSksd2lkdGg6Yz9NYXRoLmFicyhuLnNpemUpOnAuc2l6ZX07ZCYmKGgub3B0aW9ucz11fHx0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZixlW2ZdLmFjdGl2ZT9gYWN0aXZlYDpyKSk7bGV0IGc9aC5vcHRpb25zfHxlW2ZdLm9wdGlvbnM7YmwoaCxnLG0sYSksd2woaCxnLGwucmF0aW8pLHRoaXMudXBkYXRlRWxlbWVudChlW2ZdLGYsaCxyKX19X2dldFN0YWNrcyhlLHQpe2xldHtpU2NhbGU6bn09dGhpcy5fY2FjaGVkTWV0YSxyPW4uZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModGhpcy5fdHlwZSkuZmlsdGVyKGU9PmUuY29udHJvbGxlci5vcHRpb25zLmdyb3VwZWQpLGk9bi5vcHRpb25zLnN0YWNrZWQsYT1bXSxvPXRoaXMuX2NhY2hlZE1ldGEuY29udHJvbGxlci5nZXRQYXJzZWQodCkscz1vJiZvW24uYXhpc10sYz1lPT57bGV0IHQ9ZS5fcGFyc2VkLmZpbmQoZT0+ZVtuLmF4aXNdPT09cykscj10JiZ0W2UudlNjYWxlLmF4aXNdO2lmKFUocil8fGlzTmFOKHIpKXJldHVybiEwfTtmb3IobGV0IG4gb2YgcilpZighKHQhPT12b2lkIDAmJmMobikpJiYoKGk9PT0hMXx8YS5pbmRleE9mKG4uc3RhY2spPT09LTF8fGk9PT12b2lkIDAmJm4uc3RhY2s9PT12b2lkIDApJiZhLnB1c2gobi5zdGFjayksbi5pbmRleD09PWUpKWJyZWFrO3JldHVybiBhLmxlbmd0aHx8YS5wdXNoKHZvaWQgMCksYX1fZ2V0U3RhY2tDb3VudChlKXtyZXR1cm4gdGhpcy5fZ2V0U3RhY2tzKHZvaWQgMCxlKS5sZW5ndGh9X2dldEF4aXNDb3VudCgpe3JldHVybiB0aGlzLl9nZXRBeGlzKCkubGVuZ3RofWdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpe2xldCBlPXRoaXMuY2hhcnQuc2NhbGVzLHQ9dGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcztyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKG49PmVbbl0uYXhpcz09PXQpLnNoaWZ0KCl9X2dldEF4aXMoKXtsZXQgZT17fSx0PXRoaXMuZ2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzKCk7Zm9yKGxldCBuIG9mIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyllW3EodGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcz09PWB4YD9uLnhBeGlzSUQ6bi55QXhpc0lELHQpXT0hMDtyZXR1cm4gT2JqZWN0LmtleXMoZSl9X2dldFN0YWNrSW5kZXgoZSx0LG4pe2xldCByPXRoaXMuX2dldFN0YWNrcyhlLG4pLGk9dD09PXZvaWQgMD8tMTpyLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9yLmxlbmd0aC0xOml9X2dldFJ1bGVyKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXQuaVNjYWxlLHI9W10saSxhO2ZvcihpPTAsYT10LmRhdGEubGVuZ3RoO2k8YTsrK2kpci5wdXNoKG4uZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpKVtuLmF4aXNdLGkpKTtsZXQgbz1lLmJhclRoaWNrbmVzcztyZXR1cm57bWluOm98fGRsKHQpLHBpeGVsczpyLHN0YXJ0Om4uX3N0YXJ0UGl4ZWwsZW5kOm4uX2VuZFBpeGVsLHN0YWNrQ291bnQ6dGhpcy5fZ2V0U3RhY2tDb3VudCgpLHNjYWxlOm4sZ3JvdXBlZDplLmdyb3VwZWQscmF0aW86bz8xOmUuY2F0ZWdvcnlQZXJjZW50YWdlKmUuYmFyUGVyY2VudGFnZX19X2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGUpe2xldHtfY2FjaGVkTWV0YTp7dlNjYWxlOnQsX3N0YWNrZWQ6bixpbmRleDpyfSxvcHRpb25zOntiYXNlOmksbWluQmFyTGVuZ3RoOmF9fT10aGlzLG89aXx8MCxzPXRoaXMuZ2V0UGFyc2VkKGUpLGM9cy5fY3VzdG9tLGw9X2woYyksdT1zW3QuYXhpc10sZD0wLGY9bj90aGlzLmFwcGx5U3RhY2sodCxzLG4pOnUscCxtO2YhPT11JiYoZD1mLXUsZj11KSxsJiYodT1jLmJhclN0YXJ0LGY9Yy5iYXJFbmQtYy5iYXJTdGFydCx1IT09MCYmQ28odSkhPT1DbyhjLmJhckVuZCkmJihkPTApLGQrPXUpO2xldCBoPSFVKGkpJiYhbD9pOmQsZz10LmdldFBpeGVsRm9yVmFsdWUoaCk7aWYocD10aGlzLmNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGUpP3QuZ2V0UGl4ZWxGb3JWYWx1ZShkK2YpOmcsbT1wLWcsTWF0aC5hYnMobSk8YSl7bT12bChtLHQsbykqYSx1PT09byYmKGctPW0vMik7bGV0IGU9dC5nZXRQaXhlbEZvckRlY2ltYWwoMCksaT10LmdldFBpeGVsRm9yRGVjaW1hbCgxKTtnPU1hdGgubWF4KE1hdGgubWluKGcsTWF0aC5tYXgoZSxpKSksTWF0aC5taW4oZSxpKSkscD1nK20sbiYmIWwmJihzLl9zdGFja3NbdC5heGlzXS5fdmlzdWFsVmFsdWVzW3JdPXQuZ2V0VmFsdWVGb3JQaXhlbChwKS10LmdldFZhbHVlRm9yUGl4ZWwoZykpfWlmKGc9PT10LmdldFBpeGVsRm9yVmFsdWUobykpe2xldCBlPUNvKG0pKnQuZ2V0TGluZVdpZHRoRm9yVmFsdWUobykvMjtnKz1lLG0tPWV9cmV0dXJue3NpemU6bSxiYXNlOmcsaGVhZDpwLGNlbnRlcjpwK20vMn19X2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGUsdCl7bGV0IG49dC5zY2FsZSxyPXRoaXMub3B0aW9ucyxpPXIuc2tpcE51bGwsYT1xKHIubWF4QmFyVGhpY2tuZXNzLDEvMCksbyxzLGM9dGhpcy5fZ2V0QXhpc0NvdW50KCk7aWYodC5ncm91cGVkKXtsZXQgbj1pP3RoaXMuX2dldFN0YWNrQ291bnQoZSk6dC5zdGFja0NvdW50LGw9ci5iYXJUaGlja25lc3M9PT1gZmxleGA/cGwoZSx0LHIsbipjKTpmbChlLHQscixuKmMpLHU9dGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcz09PWB4YD90aGlzLmdldERhdGFzZXQoKS54QXhpc0lEOnRoaXMuZ2V0RGF0YXNldCgpLnlBeGlzSUQsZD10aGlzLl9nZXRBeGlzKCkuaW5kZXhPZihxKHUsdGhpcy5nZXRGaXJzdFNjYWxlSWRGb3JJbmRleEF4aXMoKSkpLGY9dGhpcy5fZ2V0U3RhY2tJbmRleCh0aGlzLmluZGV4LHRoaXMuX2NhY2hlZE1ldGEuc3RhY2ssaT9lOnZvaWQgMCkrZDtvPWwuc3RhcnQrbC5jaHVuaypmK2wuY2h1bmsvMixzPU1hdGgubWluKGEsbC5jaHVuaypsLnJhdGlvKX1lbHNlIG89bi5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGUpW24uYXhpc10sZSkscz1NYXRoLm1pbihhLHQubWluKnQucmF0aW8pO3JldHVybntiYXNlOm8tcy8yLGhlYWQ6bytzLzIsY2VudGVyOm8sc2l6ZTpzfX1kcmF3KCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YSx0PWUudlNjYWxlLG49ZS5kYXRhLHI9bi5sZW5ndGgsaT0wO2Zvcig7aTxyOysraSl0aGlzLmdldFBhcnNlZChpKVt0LmF4aXNdIT09bnVsbCYmIW5baV0uaGlkZGVuJiZuW2ldLmRyYXcodGhpcy5fY3R4KX19O2Z1bmN0aW9uIEVsKCl7dGhyb3cgRXJyb3IoYFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC5gKX12YXIgRGw9e19kYXRlOmNsYXNzIGV7c3RhdGljIG92ZXJyaWRlKHQpe09iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9b3B0aW9ucztjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8e319aW5pdCgpe31mb3JtYXRzKCl7cmV0dXJuIEVsKCl9cGFyc2UoKXtyZXR1cm4gRWwoKX1mb3JtYXQoKXtyZXR1cm4gRWwoKX1hZGQoKXtyZXR1cm4gRWwoKX1kaWZmKCl7cmV0dXJuIEVsKCl9c3RhcnRPZigpe3JldHVybiBFbCgpfWVuZE9mKCl7cmV0dXJuIEVsKCl9fX07ZnVuY3Rpb24gT2woZSx0LG4scil7bGV0e2NvbnRyb2xsZXI6aSxkYXRhOmEsX3NvcnRlZDpvfT1lLHM9aS5fY2FjaGVkTWV0YS5pU2NhbGUsYz1lLmRhdGFzZXQmJmUuZGF0YXNldC5vcHRpb25zP2UuZGF0YXNldC5vcHRpb25zLnNwYW5HYXBzOm51bGw7aWYocyYmdD09PXMuYXhpcyYmdCE9PWByYCYmbyYmYS5sZW5ndGgpe2xldCBvPXMuX3JldmVyc2VQaXhlbHM/VW86SG87aWYoIXIpe2xldCByPW8oYSx0LG4pO2lmKGMpe2xldHt2U2NhbGU6dH09aS5fY2FjaGVkTWV0YSx7X3BhcnNlZDpufT1lLGE9bi5zbGljZSgwLHIubG8rMSkucmV2ZXJzZSgpLmZpbmRJbmRleChlPT4hVShlW3QuYXhpc10pKTtyLmxvLT1NYXRoLm1heCgwLGEpO2xldCBvPW4uc2xpY2Uoci5oaSkuZmluZEluZGV4KGU9PiFVKGVbdC5heGlzXSkpO3IuaGkrPU1hdGgubWF4KDAsbyl9cmV0dXJuIHJ9aWYoaS5fc2hhcmVkT3B0aW9ucyl7bGV0IGU9YVswXSxyPXR5cGVvZiBlLmdldFJhbmdlPT1gZnVuY3Rpb25gJiZlLmdldFJhbmdlKHQpO2lmKHIpe2xldCBlPW8oYSx0LG4tciksaT1vKGEsdCxuK3IpO3JldHVybntsbzplLmxvLGhpOmkuaGl9fX19cmV0dXJue2xvOjAsaGk6YS5sZW5ndGgtMX19ZnVuY3Rpb24ga2woZSx0LG4scixpKXtsZXQgYT1lLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxvPW5bdF07Zm9yKGxldCBlPTAsbj1hLmxlbmd0aDtlPG47KytlKXtsZXR7aW5kZXg6bixkYXRhOnN9PWFbZV0se2xvOmMsaGk6bH09T2woYVtlXSx0LG8saSk7Zm9yKGxldCBlPWM7ZTw9bDsrK2Upe2xldCB0PXNbZV07dC5za2lwfHxyKHQsbixlKX19fWZ1bmN0aW9uIEFsKGUpe2xldCB0PWUuaW5kZXhPZihgeGApIT09LTEsbj1lLmluZGV4T2YoYHlgKSE9PS0xO3JldHVybiBmdW5jdGlvbihlLHIpe2xldCBpPXQ/TWF0aC5hYnMoZS54LXIueCk6MCxhPW4/TWF0aC5hYnMoZS55LXIueSk6MDtyZXR1cm4gTWF0aC5zcXJ0KGkqKjIrYSoqMil9fWZ1bmN0aW9uIGpsKGUsdCxuLHIsaSl7bGV0IGE9W107cmV0dXJuIWkmJiFlLmlzUG9pbnRJbkFyZWEodCl8fGtsKGUsbix0LGZ1bmN0aW9uKG4sbyxzKXshaSYmIUFzKG4sZS5jaGFydEFyZWEsMCl8fG4uaW5SYW5nZSh0LngsdC55LHIpJiZhLnB1c2goe2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6byxpbmRleDpzfSl9LCEwKSxhfWZ1bmN0aW9uIE1sKGUsdCxuLHIpe2xldCBpPVtdO2Z1bmN0aW9uIGEoZSxuLGEpe2xldHtzdGFydEFuZ2xlOm8sZW5kQW5nbGU6c309ZS5nZXRQcm9wcyhbYHN0YXJ0QW5nbGVgLGBlbmRBbmdsZWBdLHIpLHthbmdsZTpjfT1QbyhlLHt4OnQueCx5OnQueX0pO0xvKGMsbyxzKSYmaS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4Om4saW5kZXg6YX0pfXJldHVybiBrbChlLG4sdCxhKSxpfWZ1bmN0aW9uIE5sKGUsdCxuLHIsaSxhKXtsZXQgbz1bXSxzPUFsKG4pLGM9MS8wO2Z1bmN0aW9uIGwobixsLHUpe2xldCBkPW4uaW5SYW5nZSh0LngsdC55LGkpO2lmKHImJiFkKXJldHVybjtsZXQgZj1uLmdldENlbnRlclBvaW50KGkpO2lmKCEoYXx8ZS5pc1BvaW50SW5BcmVhKGYpKSYmIWQpcmV0dXJuO2xldCBwPXModCxmKTtwPGM/KG89W3tlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX1dLGM9cCk6cD09PWMmJm8ucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpsLGluZGV4OnV9KX1yZXR1cm4ga2woZSxuLHQsbCksb31mdW5jdGlvbiBQbChlLHQsbixyLGksYSl7cmV0dXJuIWEmJiFlLmlzUG9pbnRJbkFyZWEodCk/W106bj09PWByYCYmIXI/TWwoZSx0LG4saSk6TmwoZSx0LG4scixpLGEpfWZ1bmN0aW9uIEZsKGUsdCxuLHIsaSl7bGV0IGE9W10sbz1uPT09YHhgP2BpblhSYW5nZWA6YGluWVJhbmdlYCxzPSExO3JldHVybiBrbChlLG4sdCwoZSxyLGMpPT57ZVtvXSYmZVtvXSh0W25dLGkpJiYoYS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4OnIsaW5kZXg6Y30pLHN8fD1lLmluUmFuZ2UodC54LHQueSxpKSl9KSxyJiYhcz9bXTphfXZhciBJbD17ZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zOmtsLG1vZGVzOntpbmRleChlLHQsbixyKXtsZXQgaT1TYyh0LGUpLGE9bi5heGlzfHxgeGAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/amwoZSxpLGEscixvKTpQbChlLGksYSwhMSxyLG8pLGM9W107cmV0dXJuIHMubGVuZ3RoPyhlLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKS5mb3JFYWNoKGU9PntsZXQgdD1zWzBdLmluZGV4LG49ZS5kYXRhW3RdO24mJiFuLnNraXAmJmMucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDplLmluZGV4LGluZGV4OnR9KX0pLGMpOltdfSxkYXRhc2V0KGUsdCxuLHIpe2xldCBpPVNjKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/amwoZSxpLGEscixvKTpQbChlLGksYSwhMSxyLG8pO2lmKHMubGVuZ3RoPjApe2xldCB0PXNbMF0uZGF0YXNldEluZGV4LG49ZS5nZXREYXRhc2V0TWV0YSh0KS5kYXRhO3M9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDsrK2Upcy5wdXNoKHtlbGVtZW50Om5bZV0sZGF0YXNldEluZGV4OnQsaW5kZXg6ZX0pfXJldHVybiBzfSxwb2ludChlLHQsbixyKXtyZXR1cm4gamwoZSxTYyh0LGUpLG4uYXhpc3x8YHh5YCxyLG4uaW5jbHVkZUludmlzaWJsZXx8ITEpfSxuZWFyZXN0KGUsdCxuLHIpe2xldCBpPVNjKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExO3JldHVybiBQbChlLGksYSxuLmludGVyc2VjdCxyLG8pfSx4KGUsdCxuLHIpe3JldHVybiBGbChlLFNjKHQsZSksYHhgLG4uaW50ZXJzZWN0LHIpfSx5KGUsdCxuLHIpe3JldHVybiBGbChlLFNjKHQsZSksYHlgLG4uaW50ZXJzZWN0LHIpfX19LExsPVtgbGVmdGAsYHRvcGAsYHJpZ2h0YCxgYm90dG9tYF07ZnVuY3Rpb24gUmwoZSx0KXtyZXR1cm4gZS5maWx0ZXIoZT0+ZS5wb3M9PT10KX1mdW5jdGlvbiB6bChlLHQpe3JldHVybiBlLmZpbHRlcihlPT5MbC5pbmRleE9mKGUucG9zKT09PS0xJiZlLmJveC5heGlzPT09dCl9ZnVuY3Rpb24gQmwoZSx0KXtyZXR1cm4gZS5zb3J0KChlLG4pPT57bGV0IHI9dD9uOmUsaT10P2U6bjtyZXR1cm4gci53ZWlnaHQ9PT1pLndlaWdodD9yLmluZGV4LWkuaW5kZXg6ci53ZWlnaHQtaS53ZWlnaHR9KX1mdW5jdGlvbiBWbChlKXtsZXQgdD1bXSxuLHIsaSxhLG8scztmb3Iobj0wLHI9KGV8fFtdKS5sZW5ndGg7bjxyOysrbilpPWVbbl0se3Bvc2l0aW9uOmEsb3B0aW9uczp7c3RhY2s6byxzdGFja1dlaWdodDpzPTF9fT1pLHQucHVzaCh7aW5kZXg6bixib3g6aSxwb3M6YSxob3Jpem9udGFsOmkuaXNIb3Jpem9udGFsKCksd2VpZ2h0Omkud2VpZ2h0LHN0YWNrOm8mJmErbyxzdGFja1dlaWdodDpzfSk7cmV0dXJuIHR9ZnVuY3Rpb24gSGwoZSl7bGV0IHQ9e307Zm9yKGxldCBuIG9mIGUpe2xldHtzdGFjazplLHBvczpyLHN0YWNrV2VpZ2h0Oml9PW47aWYoIWV8fCFMbC5pbmNsdWRlcyhyKSljb250aW51ZTtsZXQgYT10W2VdfHwodFtlXT17Y291bnQ6MCxwbGFjZWQ6MCx3ZWlnaHQ6MCxzaXplOjB9KTthLmNvdW50KyssYS53ZWlnaHQrPWl9cmV0dXJuIHR9ZnVuY3Rpb24gVWwoZSx0KXtsZXQgbj1IbChlKSx7dkJveE1heFdpZHRoOnIsaEJveE1heEhlaWdodDppfT10LGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtzPWVbYV07bGV0e2Z1bGxTaXplOm99PXMuYm94LGM9bltzLnN0YWNrXSxsPWMmJnMuc3RhY2tXZWlnaHQvYy53ZWlnaHQ7cy5ob3Jpem9udGFsPyhzLndpZHRoPWw/bCpyOm8mJnQuYXZhaWxhYmxlV2lkdGgscy5oZWlnaHQ9aSk6KHMud2lkdGg9cixzLmhlaWdodD1sP2wqaTpvJiZ0LmF2YWlsYWJsZUhlaWdodCl9cmV0dXJuIG59ZnVuY3Rpb24gV2woZSl7bGV0IHQ9VmwoZSksbj1CbCh0LmZpbHRlcihlPT5lLmJveC5mdWxsU2l6ZSksITApLHI9QmwoUmwodCxgbGVmdGApLCEwKSxpPUJsKFJsKHQsYHJpZ2h0YCkpLGE9QmwoUmwodCxgdG9wYCksITApLG89QmwoUmwodCxgYm90dG9tYCkpLHM9emwodCxgeGApLGM9emwodCxgeWApO3JldHVybntmdWxsU2l6ZTpuLGxlZnRBbmRUb3A6ci5jb25jYXQoYSkscmlnaHRBbmRCb3R0b206aS5jb25jYXQoYykuY29uY2F0KG8pLmNvbmNhdChzKSxjaGFydEFyZWE6UmwodCxgY2hhcnRBcmVhYCksdmVydGljYWw6ci5jb25jYXQoaSkuY29uY2F0KGMpLGhvcml6b250YWw6YS5jb25jYXQobykuY29uY2F0KHMpfX1mdW5jdGlvbiBHbChlLHQsbixyKXtyZXR1cm4gTWF0aC5tYXgoZVtuXSx0W25dKStNYXRoLm1heChlW3JdLHRbcl0pfWZ1bmN0aW9uIEtsKGUsdCl7ZS50b3A9TWF0aC5tYXgoZS50b3AsdC50b3ApLGUubGVmdD1NYXRoLm1heChlLmxlZnQsdC5sZWZ0KSxlLmJvdHRvbT1NYXRoLm1heChlLmJvdHRvbSx0LmJvdHRvbSksZS5yaWdodD1NYXRoLm1heChlLnJpZ2h0LHQucmlnaHQpfWZ1bmN0aW9uIHFsKGUsdCxuLHIpe2xldHtwb3M6aSxib3g6YX09bixvPWUubWF4UGFkZGluZztpZighRyhpKSl7bi5zaXplJiYoZVtpXS09bi5zaXplKTtsZXQgdD1yW24uc3RhY2tdfHx7c2l6ZTowLGNvdW50OjF9O3Quc2l6ZT1NYXRoLm1heCh0LnNpemUsbi5ob3Jpem9udGFsP2EuaGVpZ2h0OmEud2lkdGgpLG4uc2l6ZT10LnNpemUvdC5jb3VudCxlW2ldKz1uLnNpemV9YS5nZXRQYWRkaW5nJiZLbChvLGEuZ2V0UGFkZGluZygpKTtsZXQgcz1NYXRoLm1heCgwLHQub3V0ZXJXaWR0aC1HbChvLGUsYGxlZnRgLGByaWdodGApKSxjPU1hdGgubWF4KDAsdC5vdXRlckhlaWdodC1HbChvLGUsYHRvcGAsYGJvdHRvbWApKSxsPXMhPT1lLncsdT1jIT09ZS5oO3JldHVybiBlLnc9cyxlLmg9YyxuLmhvcml6b250YWw/e3NhbWU6bCxvdGhlcjp1fTp7c2FtZTp1LG90aGVyOmx9fWZ1bmN0aW9uIEpsKGUpe2xldCB0PWUubWF4UGFkZGluZztmdW5jdGlvbiBuKG4pe2xldCByPU1hdGgubWF4KHRbbl0tZVtuXSwwKTtyZXR1cm4gZVtuXSs9cixyfWUueSs9bihgdG9wYCksZS54Kz1uKGBsZWZ0YCksbihgcmlnaHRgKSxuKGBib3R0b21gKX1mdW5jdGlvbiBZbChlLHQpe2xldCBuPXQubWF4UGFkZGluZztmdW5jdGlvbiByKGUpe2xldCByPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH07cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1NYXRoLm1heCh0W2VdLG5bZV0pfSkscn1yZXR1cm4gcihlP1tgbGVmdGAsYHJpZ2h0YF06W2B0b3BgLGBib3R0b21gXSl9ZnVuY3Rpb24gWGwoZSx0LG4scil7bGV0IGk9W10sYSxvLHMsYyxsLHU7Zm9yKGE9MCxvPWUubGVuZ3RoLGw9MDthPG87KythKXtzPWVbYV0sYz1zLmJveCxjLnVwZGF0ZShzLndpZHRofHx0Lncscy5oZWlnaHR8fHQuaCxZbChzLmhvcml6b250YWwsdCkpO2xldHtzYW1lOm8sb3RoZXI6ZH09cWwodCxuLHMscik7bHw9byYmaS5sZW5ndGgsdXx8PWQsYy5mdWxsU2l6ZXx8aS5wdXNoKHMpfXJldHVybiBsJiZYbChpLHQsbixyKXx8dX1mdW5jdGlvbiBabChlLHQsbixyLGkpe2UudG9wPW4sZS5sZWZ0PXQsZS5yaWdodD10K3IsZS5ib3R0b209bitpLGUud2lkdGg9cixlLmhlaWdodD1pfWZ1bmN0aW9uIFFsKGUsdCxuLHIpe2xldCBpPW4ucGFkZGluZyx7eDphLHk6b309dDtmb3IobGV0IHMgb2YgZSl7bGV0IGU9cy5ib3gsYz1yW3Muc3RhY2tdfHx7Y291bnQ6MSxwbGFjZWQ6MCx3ZWlnaHQ6MX0sbD1zLnN0YWNrV2VpZ2h0L2Mud2VpZ2h0fHwxO2lmKHMuaG9yaXpvbnRhbCl7bGV0IHI9dC53KmwsYT1jLnNpemV8fGUuaGVpZ2h0O2ZvKGMuc3RhcnQpJiYobz1jLnN0YXJ0KSxlLmZ1bGxTaXplP1psKGUsaS5sZWZ0LG8sbi5vdXRlcldpZHRoLWkucmlnaHQtaS5sZWZ0LGEpOlpsKGUsdC5sZWZ0K2MucGxhY2VkLG8scixhKSxjLnN0YXJ0PW8sYy5wbGFjZWQrPXIsbz1lLmJvdHRvbX1lbHNle2xldCByPXQuaCpsLG89Yy5zaXplfHxlLndpZHRoO2ZvKGMuc3RhcnQpJiYoYT1jLnN0YXJ0KSxlLmZ1bGxTaXplP1psKGUsYSxpLnRvcCxvLG4ub3V0ZXJIZWlnaHQtaS5ib3R0b20taS50b3ApOlpsKGUsYSx0LnRvcCtjLnBsYWNlZCxvLHIpLGMuc3RhcnQ9YSxjLnBsYWNlZCs9cixhPWUucmlnaHR9fXQueD1hLHQueT1vfXZhciAkbD17YWRkQm94KGUsdCl7ZS5ib3hlc3x8PVtdLHQuZnVsbFNpemU9dC5mdWxsU2l6ZXx8ITEsdC5wb3NpdGlvbj10LnBvc2l0aW9ufHxgdG9wYCx0LndlaWdodD10LndlaWdodHx8MCx0Ll9sYXllcnM9dC5fbGF5ZXJzfHxmdW5jdGlvbigpe3JldHVyblt7ejowLGRyYXcoZSl7dC5kcmF3KGUpfX1dfSxlLmJveGVzLnB1c2godCl9LHJlbW92ZUJveChlLHQpe2xldCBuPWUuYm94ZXM/ZS5ib3hlcy5pbmRleE9mKHQpOi0xO24hPT0tMSYmZS5ib3hlcy5zcGxpY2UobiwxKX0sY29uZmlndXJlKGUsdCxuKXt0LmZ1bGxTaXplPW4uZnVsbFNpemUsdC5wb3NpdGlvbj1uLnBvc2l0aW9uLHQud2VpZ2h0PW4ud2VpZ2h0fSx1cGRhdGUoZSx0LG4scil7aWYoIWUpcmV0dXJuO2xldCBpPVEoZS5vcHRpb25zLmxheW91dC5wYWRkaW5nKSxhPU1hdGgubWF4KHQtaS53aWR0aCwwKSxvPU1hdGgubWF4KG4taS5oZWlnaHQsMCkscz1XbChlLmJveGVzKSxjPXMudmVydGljYWwsbD1zLmhvcml6b250YWw7WShlLmJveGVzLGU9Pnt0eXBlb2YgZS5iZWZvcmVMYXlvdXQ9PWBmdW5jdGlvbmAmJmUuYmVmb3JlTGF5b3V0KCl9KTtsZXQgdT1jLnJlZHVjZSgoZSx0KT0+dC5ib3gub3B0aW9ucyYmdC5ib3gub3B0aW9ucy5kaXNwbGF5PT09ITE/ZTplKzEsMCl8fDEsZD1PYmplY3QuZnJlZXplKHtvdXRlcldpZHRoOnQsb3V0ZXJIZWlnaHQ6bixwYWRkaW5nOmksYXZhaWxhYmxlV2lkdGg6YSxhdmFpbGFibGVIZWlnaHQ6byx2Qm94TWF4V2lkdGg6YS8yL3UsaEJveE1heEhlaWdodDpvLzJ9KSxmPU9iamVjdC5hc3NpZ24oe30saSk7S2woZixRKHIpKTtsZXQgcD1PYmplY3QuYXNzaWduKHttYXhQYWRkaW5nOmYsdzphLGg6byx4OmkubGVmdCx5OmkudG9wfSxpKSxtPVVsKGMuY29uY2F0KGwpLGQpO1hsKHMuZnVsbFNpemUscCxkLG0pLFhsKGMscCxkLG0pLFhsKGwscCxkLG0pJiZYbChjLHAsZCxtKSxKbChwKSxRbChzLmxlZnRBbmRUb3AscCxkLG0pLHAueCs9cC53LHAueSs9cC5oLFFsKHMucmlnaHRBbmRCb3R0b20scCxkLG0pLGUuY2hhcnRBcmVhPXtsZWZ0OnAubGVmdCx0b3A6cC50b3AscmlnaHQ6cC5sZWZ0K3Audyxib3R0b206cC50b3ArcC5oLGhlaWdodDpwLmgsd2lkdGg6cC53fSxZKHMuY2hhcnRBcmVhLHQ9PntsZXQgbj10LmJveDtPYmplY3QuYXNzaWduKG4sZS5jaGFydEFyZWEpLG4udXBkYXRlKHAudyxwLmgse2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfSl9KX19LGV1PWNsYXNze2FjcXVpcmVDb250ZXh0KGUsdCl7fXJlbGVhc2VDb250ZXh0KGUpe3JldHVybiExfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe31yZW1vdmVFdmVudExpc3RlbmVyKGUsdCxuKXt9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiAxfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiB0PU1hdGgubWF4KDAsdHx8ZS53aWR0aCksbnx8PWUuaGVpZ2h0LHt3aWR0aDp0LGhlaWdodDpNYXRoLm1heCgwLHI/TWF0aC5mbG9vcih0L3IpOm4pfX1pc0F0dGFjaGVkKGUpe3JldHVybiEwfXVwZGF0ZUNvbmZpZyhlKXt9fSx0dT1jbGFzcyBleHRlbmRzIGV1e2FjcXVpcmVDb250ZXh0KGUpe3JldHVybiBlJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKXx8bnVsbH11cGRhdGVDb25maWcoZSl7ZS5vcHRpb25zLmFuaW1hdGlvbj0hMX19LG51PWAkY2hhcnRqc2AscnU9e3RvdWNoc3RhcnQ6YG1vdXNlZG93bmAsdG91Y2htb3ZlOmBtb3VzZW1vdmVgLHRvdWNoZW5kOmBtb3VzZXVwYCxwb2ludGVyZW50ZXI6YG1vdXNlZW50ZXJgLHBvaW50ZXJkb3duOmBtb3VzZWRvd25gLHBvaW50ZXJtb3ZlOmBtb3VzZW1vdmVgLHBvaW50ZXJ1cDpgbW91c2V1cGAscG9pbnRlcmxlYXZlOmBtb3VzZW91dGAscG9pbnRlcm91dDpgbW91c2VvdXRgfSxpdT1lPT5lPT09bnVsbHx8ZT09PWBgO2Z1bmN0aW9uIGF1KGUsdCl7bGV0IG49ZS5zdHlsZSxyPWUuZ2V0QXR0cmlidXRlKGBoZWlnaHRgKSxpPWUuZ2V0QXR0cmlidXRlKGB3aWR0aGApO2lmKGVbbnVdPXtpbml0aWFsOntoZWlnaHQ6cix3aWR0aDppLHN0eWxlOntkaXNwbGF5Om4uZGlzcGxheSxoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aH19fSxuLmRpc3BsYXk9bi5kaXNwbGF5fHxgYmxvY2tgLG4uYm94U2l6aW5nPW4uYm94U2l6aW5nfHxgYm9yZGVyLWJveGAsaXUoaSkpe2xldCB0PU9jKGUsYHdpZHRoYCk7dCE9PXZvaWQgMCYmKGUud2lkdGg9dCl9aWYoaXUocikpe2lmKGUuc3R5bGUuaGVpZ2h0PT09YGApZS5oZWlnaHQ9ZS53aWR0aC8odHx8Mik7ZWxzZXtsZXQgdD1PYyhlLGBoZWlnaHRgKTt0IT09dm9pZCAwJiYoZS5oZWlnaHQ9dCl9fXJldHVybiBlfXZhciBvdT1EYz97cGFzc2l2ZTohMH06ITE7ZnVuY3Rpb24gc3UoZSx0LG4pe2UmJmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sb3UpfWZ1bmN0aW9uIGN1KGUsdCxuKXtlJiZlLmNhbnZhcyYmZS5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sb3UpfWZ1bmN0aW9uIGx1KGUsdCl7bGV0IG49cnVbZS50eXBlXXx8ZS50eXBlLHt4OnIseTppfT1TYyhlLHQpO3JldHVybnt0eXBlOm4sY2hhcnQ6dCxuYXRpdmU6ZSx4OnI9PT12b2lkIDA/bnVsbDpyLHk6aT09PXZvaWQgMD9udWxsOml9fWZ1bmN0aW9uIHV1KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYobj09PXR8fG4uY29udGFpbnModCkpcmV0dXJuITB9ZnVuY3Rpb24gZHUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD11dShuLmFkZGVkTm9kZXMsciksdCYmPSF1dShuLnJlbW92ZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9ZnVuY3Rpb24gZnUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD11dShuLnJlbW92ZWROb2RlcyxyKSx0JiY9IXV1KG4uYWRkZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9dmFyIHB1PW5ldyBNYXAsbXU9MDtmdW5jdGlvbiBodSgpe2xldCBlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO2UhPT1tdSYmKG11PWUscHUuZm9yRWFjaCgodCxuKT0+e24uY3VycmVudERldmljZVBpeGVsUmF0aW8hPT1lJiZ0KCl9KSl9ZnVuY3Rpb24gZ3UoZSx0KXtwdS5zaXplfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxodSkscHUuc2V0KGUsdCl9ZnVuY3Rpb24gX3UoZSl7cHUuZGVsZXRlKGUpLHB1LnNpemV8fHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLGh1KX1mdW5jdGlvbiB2dShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1yJiZtYyhyKTtpZighaSlyZXR1cm47bGV0IGE9WG8oKGUsdCk9PntsZXQgcj1pLmNsaWVudFdpZHRoO24oZSx0KSxyPGkuY2xpZW50V2lkdGgmJm4oKX0sd2luZG93KSxvPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0IHQ9ZVswXSxuPXQuY29udGVudFJlY3Qud2lkdGgscj10LmNvbnRlbnRSZWN0LmhlaWdodDsobiE9PTB8fHIhPT0wKSYmYShuLHIpfSk7cmV0dXJuIG8ub2JzZXJ2ZShpKSxndShlLGEpLG99ZnVuY3Rpb24geXUoZSx0LG4pe24mJm4uZGlzY29ubmVjdCgpLHQ9PT1gcmVzaXplYCYmX3UoZSl9ZnVuY3Rpb24gYnUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9WG8odD0+e2UuY3R4IT09bnVsbCYmbihsdSh0LGUpKX0sZSk7cmV0dXJuIHN1KHIsdCxpKSxpfXZhciB4dT1jbGFzcyBleHRlbmRzIGV1e2FjcXVpcmVDb250ZXh0KGUsdCl7bGV0IG49ZSYmZS5nZXRDb250ZXh0JiZlLmdldENvbnRleHQoYDJkYCk7cmV0dXJuIG4mJm4uY2FudmFzPT09ZT8oYXUoZSx0KSxuKTpudWxsfXJlbGVhc2VDb250ZXh0KGUpe2xldCB0PWUuY2FudmFzO2lmKCF0W251XSlyZXR1cm4hMTtsZXQgbj10W251XS5pbml0aWFsO1tgaGVpZ2h0YCxgd2lkdGhgXS5mb3JFYWNoKGU9PntsZXQgcj1uW2VdO1Uocik/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6dC5zZXRBdHRyaWJ1dGUoZSxyKX0pO2xldCByPW4uc3R5bGV8fHt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGU9Pnt0LnN0eWxlW2VdPXJbZV19KSx0LndpZHRoPXQud2lkdGgsZGVsZXRlIHRbbnVdLCEwfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpO2xldCByPWUuJHByb3hpZXN8fD17fTtyW3RdPSh7YXR0YWNoOmR1LGRldGFjaDpmdSxyZXNpemU6dnV9W3RdfHxidSkoZSx0LG4pfXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KXtsZXQgbj1lLiRwcm94aWVzfHw9e30scj1uW3RdO3ImJigoe2F0dGFjaDp5dSxkZXRhY2g6eXUscmVzaXplOnl1fVt0XXx8Y3UpKGUsdCxyKSxuW3RdPXZvaWQgMCl9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb31nZXRNYXhpbXVtU2l6ZShlLHQsbixyKXtyZXR1cm4gVGMoZSx0LG4scil9aXNBdHRhY2hlZChlKXtsZXQgdD1lJiZtYyhlKTtyZXR1cm4hISh0JiZ0LmlzQ29ubmVjdGVkKX19O2Z1bmN0aW9uIFN1KGUpe3JldHVybiFwYygpfHx0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPGB1YCYmZSBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcz90dTp4dX12YXIgQ3U9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPXt9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXZvaWQgMDt4O3k7YWN0aXZlPSExO29wdGlvbnM7JGFuaW1hdGlvbnM7dG9vbHRpcFBvc2l0aW9uKGUpe2xldHt4OnQseTpufT10aGlzLmdldFByb3BzKFtgeGAsYHlgXSxlKTtyZXR1cm57eDp0LHk6bn19aGFzVmFsdWUoKXtyZXR1cm4gT28odGhpcy54KSYmT28odGhpcy55KX1nZXRQcm9wcyhlLHQpe2xldCBuPXRoaXMuJGFuaW1hdGlvbnM7aWYoIXR8fCFuKXJldHVybiB0aGlzO2xldCByPXt9O3JldHVybiBlLmZvckVhY2goZT0+e3JbZV09bltlXSYmbltlXS5hY3RpdmUoKT9uW2VdLl90bzp0aGlzW2VdfSkscn19O2Z1bmN0aW9uIHd1KGUsdCl7bGV0IG49ZS5vcHRpb25zLnRpY2tzLHI9VHUoZSksaT1NYXRoLm1pbihuLm1heFRpY2tzTGltaXR8fHIsciksYT1uLm1ham9yLmVuYWJsZWQ/RHUodCk6W10sbz1hLmxlbmd0aCxzPWFbMF0sYz1hW28tMV0sbD1bXTtpZihvPmkpcmV0dXJuIE91KHQsbCxhLG8vaSksbDtsZXQgdT1FdShhLHQsaSk7aWYobz4wKXtsZXQgZSxuLHI9bz4xP01hdGgucm91bmQoKGMtcykvKG8tMSkpOm51bGw7Zm9yKGt1KHQsbCx1LFUocik/MDpzLXIscyksZT0wLG49by0xO2U8bjtlKyspa3UodCxsLHUsYVtlXSxhW2UrMV0pO3JldHVybiBrdSh0LGwsdSxjLFUocik/dC5sZW5ndGg6YytyKSxsfXJldHVybiBrdSh0LGwsdSksbH1mdW5jdGlvbiBUdShlKXtsZXQgdD1lLm9wdGlvbnMub2Zmc2V0LG49ZS5fdGlja1NpemUoKSxyPWUuX2xlbmd0aC9uKyArIXQsaT1lLl9tYXhMZW5ndGgvbjtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1pbihyLGkpKX1mdW5jdGlvbiBFdShlLHQsbil7bGV0IHI9QXUoZSksaT10Lmxlbmd0aC9uO2lmKCFyKXJldHVybiBNYXRoLm1heChpLDEpO2xldCBhPUVvKHIpO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGgtMTtlPHQ7ZSsrKXtsZXQgdD1hW2VdO2lmKHQ+aSlyZXR1cm4gdH1yZXR1cm4gTWF0aC5tYXgoaSwxKX1mdW5jdGlvbiBEdShlKXtsZXQgdD1bXSxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXS5tYWpvciYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIE91KGUsdCxuLHIpe2xldCBpPTAsYT1uWzBdLG87Zm9yKHI9TWF0aC5jZWlsKHIpLG89MDtvPGUubGVuZ3RoO28rKylvPT09YSYmKHQucHVzaChlW29dKSxpKyssYT1uW2kqcl0pfWZ1bmN0aW9uIGt1KGUsdCxuLHIsaSl7bGV0IGE9cShyLDApLG89TWF0aC5taW4ocShpLGUubGVuZ3RoKSxlLmxlbmd0aCkscz0wLGMsbCx1O2ZvcihuPU1hdGguY2VpbChuKSxpJiYoYz1pLXIsbj1jL01hdGguZmxvb3IoYy9uKSksdT1hO3U8MDspcysrLHU9TWF0aC5yb3VuZChhK3Mqbik7Zm9yKGw9TWF0aC5tYXgoYSwwKTtsPG87bCsrKWw9PT11JiYodC5wdXNoKGVbbF0pLHMrKyx1PU1hdGgucm91bmQoYStzKm4pKX1mdW5jdGlvbiBBdShlKXtsZXQgdD1lLmxlbmd0aCxuLHI7aWYodDwyKXJldHVybiExO2ZvcihyPWVbMF0sbj0xO248dDsrK24paWYoZVtuXS1lW24tMV0hPT1yKXJldHVybiExO3JldHVybiByfXZhciBqdT1lPT5lPT09YGxlZnRgP2ByaWdodGA6ZT09PWByaWdodGA/YGxlZnRgOmUsTXU9KGUsdCxuKT0+dD09PWB0b3BgfHx0PT09YGxlZnRgP2VbdF0rbjplW3RdLW4sTnU9KGUsdCk9Pk1hdGgubWluKHR8fGUsZSk7ZnVuY3Rpb24gUHUoZSx0KXtsZXQgbj1bXSxyPWUubGVuZ3RoL3QsaT1lLmxlbmd0aCxhPTA7Zm9yKDthPGk7YSs9ciluLnB1c2goZVtNYXRoLmZsb29yKGEpXSk7cmV0dXJuIG59ZnVuY3Rpb24gRnUoZSx0LG4pe2xldCByPWUudGlja3MubGVuZ3RoLGk9TWF0aC5taW4odCxyLTEpLGE9ZS5fc3RhcnRQaXhlbCxvPWUuX2VuZFBpeGVsLHM9MWUtNixjPWUuZ2V0UGl4ZWxGb3JUaWNrKGkpLGw7aWYoIShuJiYobD1yPT09MT9NYXRoLm1heChjLWEsby1jKTp0PT09MD8oZS5nZXRQaXhlbEZvclRpY2soMSktYykvMjooYy1lLmdldFBpeGVsRm9yVGljayhpLTEpKS8yLGMrPWk8dD9sOi1sLGM8YS1zfHxjPm8rcykpKXJldHVybiBjfWZ1bmN0aW9uIEl1KGUsdCl7WShlLGU9PntsZXQgbj1lLmdjLHI9bi5sZW5ndGgvMixpO2lmKHI+dCl7Zm9yKGk9MDtpPHI7KytpKWRlbGV0ZSBlLmRhdGFbbltpXV07bi5zcGxpY2UoMCxyKX19KX1mdW5jdGlvbiBMdShlKXtyZXR1cm4gZS5kcmF3VGlja3M/ZS50aWNrTGVuZ3RoOjB9ZnVuY3Rpb24gUnUoZSx0KXtpZighZS5kaXNwbGF5KXJldHVybiAwO2xldCBuPSQoZS5mb250LHQpLHI9UShlLnBhZGRpbmcpO3JldHVybihXKGUudGV4dCk/ZS50ZXh0Lmxlbmd0aDoxKSpuLmxpbmVIZWlnaHQrci5oZWlnaHR9ZnVuY3Rpb24genUoZSx0KXtyZXR1cm4gcXMoZSx7c2NhbGU6dCx0eXBlOmBzY2FsZWB9KX1mdW5jdGlvbiBCdShlLHQsbil7cmV0dXJuIHFzKGUse3RpY2s6bixpbmRleDp0LHR5cGU6YHRpY2tgfSl9ZnVuY3Rpb24gVnUoZSx0LG4pe2xldCByPVFvKGUpO3JldHVybihuJiZ0IT09YHJpZ2h0YHx8IW4mJnQ9PT1gcmlnaHRgKSYmKHI9anUocikpLHJ9ZnVuY3Rpb24gSHUoZSx0LG4scil7bGV0e3RvcDppLGxlZnQ6YSxib3R0b206byxyaWdodDpzLGNoYXJ0OmN9PWUse2NoYXJ0QXJlYTpsLHNjYWxlczp1fT1jLGQ9MCxmLHAsbSxoPW8taSxnPXMtYTtpZihlLmlzSG9yaXpvbnRhbCgpKXtpZihwPSRvKHIsYSxzKSxHKG4pKXtsZXQgZT1PYmplY3Qua2V5cyhuKVswXSxyPW5bZV07bT11W2VdLmdldFBpeGVsRm9yVmFsdWUocikraC10fWVsc2UgbT1uPT09YGNlbnRlcmA/KGwuYm90dG9tK2wudG9wKS8yK2gtdDpNdShlLG4sdCk7Zj1zLWF9ZWxzZXtpZihHKG4pKXtsZXQgZT1PYmplY3Qua2V5cyhuKVswXSxyPW5bZV07cD11W2VdLmdldFBpeGVsRm9yVmFsdWUociktZyt0fWVsc2UgcD1uPT09YGNlbnRlcmA/KGwubGVmdCtsLnJpZ2h0KS8yLWcrdDpNdShlLG4sdCk7bT0kbyhyLG8saSksZD1uPT09YGxlZnRgPy15bzp5b31yZXR1cm57dGl0bGVYOnAsdGl0bGVZOm0sbWF4V2lkdGg6Zixyb3RhdGlvbjpkfX12YXIgVXU9Y2xhc3MgZSBleHRlbmRzIEN1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pZD1lLmlkLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5vcHRpb25zPXZvaWQgMCx0aGlzLmN0eD1lLmN0eCx0aGlzLmNoYXJ0PWUuY2hhcnQsdGhpcy50b3A9dm9pZCAwLHRoaXMuYm90dG9tPXZvaWQgMCx0aGlzLmxlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLl9tYXJnaW5zPXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sdGhpcy5tYXhXaWR0aD12b2lkIDAsdGhpcy5tYXhIZWlnaHQ9dm9pZCAwLHRoaXMucGFkZGluZ1RvcD12b2lkIDAsdGhpcy5wYWRkaW5nQm90dG9tPXZvaWQgMCx0aGlzLnBhZGRpbmdMZWZ0PXZvaWQgMCx0aGlzLnBhZGRpbmdSaWdodD12b2lkIDAsdGhpcy5heGlzPXZvaWQgMCx0aGlzLmxhYmVsUm90YXRpb249dm9pZCAwLHRoaXMubWluPXZvaWQgMCx0aGlzLm1heD12b2lkIDAsdGhpcy5fcmFuZ2U9dm9pZCAwLHRoaXMudGlja3M9W10sdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4TGVuZ3RoPTAsdGhpcy5fbG9uZ2VzdFRleHRDYWNoZT17fSx0aGlzLl9zdGFydFBpeGVsPXZvaWQgMCx0aGlzLl9lbmRQaXhlbD12b2lkIDAsdGhpcy5fcmV2ZXJzZVBpeGVscz0hMSx0aGlzLl91c2VyTWF4PXZvaWQgMCx0aGlzLl91c2VyTWluPXZvaWQgMCx0aGlzLl9zdWdnZXN0ZWRNYXg9dm9pZCAwLHRoaXMuX3N1Z2dlc3RlZE1pbj12b2lkIDAsdGhpcy5fdGlja3NMZW5ndGg9MCx0aGlzLl9ib3JkZXJWYWx1ZT0wLHRoaXMuX2NhY2hlPXt9LHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQ9ITEsdGhpcy4kY29udGV4dD12b2lkIDB9aW5pdChlKXt0aGlzLm9wdGlvbnM9ZS5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSx0aGlzLmF4aXM9ZS5heGlzLHRoaXMuX3VzZXJNaW49dGhpcy5wYXJzZShlLm1pbiksdGhpcy5fdXNlck1heD10aGlzLnBhcnNlKGUubWF4KSx0aGlzLl9zdWdnZXN0ZWRNaW49dGhpcy5wYXJzZShlLnN1Z2dlc3RlZE1pbiksdGhpcy5fc3VnZ2VzdGVkTWF4PXRoaXMucGFyc2UoZS5zdWdnZXN0ZWRNYXgpfXBhcnNlKGUsdCl7cmV0dXJuIGV9Z2V0VXNlckJvdW5kcygpe2xldHtfdXNlck1pbjplLF91c2VyTWF4OnQsX3N1Z2dlc3RlZE1pbjpuLF9zdWdnZXN0ZWRNYXg6cn09dGhpcztyZXR1cm4gZT1aYShlLDEvMCksdD1aYSh0LC0xLzApLG49WmEobiwxLzApLHI9WmEociwtMS8wKSx7bWluOlphKGUsbiksbWF4OlphKHQsciksbWluRGVmaW5lZDpLKGUpLG1heERlZmluZWQ6Syh0KX19Z2V0TWluTWF4KGUpe2xldHttaW46dCxtYXg6bixtaW5EZWZpbmVkOnIsbWF4RGVmaW5lZDppfT10aGlzLmdldFVzZXJCb3VuZHMoKSxhO2lmKHImJmkpcmV0dXJue21pbjp0LG1heDpufTtsZXQgbz10aGlzLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCk7Zm9yKGxldCBzPTAsYz1vLmxlbmd0aDtzPGM7KytzKWE9b1tzXS5jb250cm9sbGVyLmdldE1pbk1heCh0aGlzLGUpLHJ8fCh0PU1hdGgubWluKHQsYS5taW4pKSxpfHwobj1NYXRoLm1heChuLGEubWF4KSk7cmV0dXJuIHQ9aSYmdD5uP246dCxuPXImJnQ+bj90Om4se21pbjpaYSh0LFphKG4sdCkpLG1heDpaYShuLFphKHQsbikpfX1nZXRQYWRkaW5nKCl7cmV0dXJue2xlZnQ6dGhpcy5wYWRkaW5nTGVmdHx8MCx0b3A6dGhpcy5wYWRkaW5nVG9wfHwwLHJpZ2h0OnRoaXMucGFkZGluZ1JpZ2h0fHwwLGJvdHRvbTp0aGlzLnBhZGRpbmdCb3R0b218fDB9fWdldFRpY2tzKCl7cmV0dXJuIHRoaXMudGlja3N9Z2V0TGFiZWxzKCl7bGV0IGU9dGhpcy5jaGFydC5kYXRhO3JldHVybiB0aGlzLm9wdGlvbnMubGFiZWxzfHwodGhpcy5pc0hvcml6b250YWwoKT9lLnhMYWJlbHM6ZS55TGFiZWxzKXx8ZS5sYWJlbHN8fFtdfWdldExhYmVsSXRlbXMoZT10aGlzLmNoYXJ0LmNoYXJ0QXJlYSl7cmV0dXJuIHRoaXMuX2xhYmVsSXRlbXN8fD10aGlzLl9jb21wdXRlTGFiZWxJdGVtcyhlKX1iZWZvcmVMYXlvdXQoKXt0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExfWJlZm9yZVVwZGF0ZSgpe0oodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSxbdGhpc10pfXVwZGF0ZShlLHQsbil7bGV0e2JlZ2luQXRaZXJvOnIsZ3JhY2U6aSx0aWNrczphfT10aGlzLm9wdGlvbnMsbz1hLnNhbXBsZVNpemU7dGhpcy5iZWZvcmVVcGRhdGUoKSx0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW49T2JqZWN0LmFzc2lnbih7bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LG4pLHRoaXMudGlja3M9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLmJlZm9yZVNldERpbWVuc2lvbnMoKSx0aGlzLnNldERpbWVuc2lvbnMoKSx0aGlzLmFmdGVyU2V0RGltZW5zaW9ucygpLHRoaXMuX21heExlbmd0aD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgrbi5sZWZ0K24ucmlnaHQ6dGhpcy5oZWlnaHQrbi50b3Arbi5ib3R0b20sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZHx8PSh0aGlzLmJlZm9yZURhdGFMaW1pdHMoKSx0aGlzLmRldGVybWluZURhdGFMaW1pdHMoKSx0aGlzLmFmdGVyRGF0YUxpbWl0cygpLHRoaXMuX3JhbmdlPUtzKHRoaXMsaSxyKSwhMCksdGhpcy5iZWZvcmVCdWlsZFRpY2tzKCksdGhpcy50aWNrcz10aGlzLmJ1aWxkVGlja3MoKXx8W10sdGhpcy5hZnRlckJ1aWxkVGlja3MoKTtsZXQgcz1vPHRoaXMudGlja3MubGVuZ3RoO3RoaXMuX2NvbnZlcnRUaWNrc1RvTGFiZWxzKHM/UHUodGhpcy50aWNrcyxvKTp0aGlzLnRpY2tzKSx0aGlzLmNvbmZpZ3VyZSgpLHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuY2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksYS5kaXNwbGF5JiYoYS5hdXRvU2tpcHx8YS5zb3VyY2U9PT1gYXV0b2ApJiYodGhpcy50aWNrcz13dSh0aGlzLHRoaXMudGlja3MpLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLmFmdGVyQXV0b1NraXAoKSkscyYmdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHModGhpcy50aWNrcyksdGhpcy5iZWZvcmVGaXQoKSx0aGlzLmZpdCgpLHRoaXMuYWZ0ZXJGaXQoKSx0aGlzLmFmdGVyVXBkYXRlKCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5vcHRpb25zLnJldmVyc2UsdCxuO3RoaXMuaXNIb3Jpem9udGFsKCk/KHQ9dGhpcy5sZWZ0LG49dGhpcy5yaWdodCk6KHQ9dGhpcy50b3Asbj10aGlzLmJvdHRvbSxlPSFlKSx0aGlzLl9zdGFydFBpeGVsPXQsdGhpcy5fZW5kUGl4ZWw9bix0aGlzLl9yZXZlcnNlUGl4ZWxzPWUsdGhpcy5fbGVuZ3RoPW4tdCx0aGlzLl9hbGlnblRvUGl4ZWxzPXRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzfWFmdGVyVXBkYXRlKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsW3RoaXNdKX1iZWZvcmVTZXREaW1lbnNpb25zKCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucyxbdGhpc10pfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PTAsdGhpcy5yaWdodD10aGlzLndpZHRoKToodGhpcy5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsdGhpcy50b3A9MCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCksdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1RvcD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTB9YWZ0ZXJTZXREaW1lbnNpb25zKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLFt0aGlzXSl9X2NhbGxIb29rcyhlKXt0aGlzLmNoYXJ0Lm5vdGlmeVBsdWdpbnMoZSx0aGlzLmdldENvbnRleHQoKSksSih0aGlzLm9wdGlvbnNbZV0sW3RoaXNdKX1iZWZvcmVEYXRhTGltaXRzKCl7dGhpcy5fY2FsbEhvb2tzKGBiZWZvcmVEYXRhTGltaXRzYCl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe31hZnRlckRhdGFMaW1pdHMoKXt0aGlzLl9jYWxsSG9va3MoYGFmdGVyRGF0YUxpbWl0c2ApfWJlZm9yZUJ1aWxkVGlja3MoKXt0aGlzLl9jYWxsSG9va3MoYGJlZm9yZUJ1aWxkVGlja3NgKX1idWlsZFRpY2tzKCl7cmV0dXJuW119YWZ0ZXJCdWlsZFRpY2tzKCl7dGhpcy5fY2FsbEhvb2tzKGBhZnRlckJ1aWxkVGlja3NgKX1iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKXtKKHRoaXMub3B0aW9ucy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLG4scixpO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWk9ZVtuXSxpLmxhYmVsPUoodC5jYWxsYmFjayxbaS52YWx1ZSxuLGVdLHRoaXMpfWFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49TnUodGhpcy50aWNrcy5sZW5ndGgsZS50aWNrcy5tYXhUaWNrc0xpbWl0KSxyPXQubWluUm90YXRpb258fDAsaT10Lm1heFJvdGF0aW9uLGE9cixvLHMsYztpZighdGhpcy5faXNWaXNpYmxlKCl8fCF0LmRpc3BsYXl8fHI+PWl8fG48PTF8fCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt0aGlzLmxhYmVsUm90YXRpb249cjtyZXR1cm59bGV0IGw9dGhpcy5fZ2V0TGFiZWxTaXplcygpLHU9bC53aWRlc3Qud2lkdGgsZD1sLmhpZ2hlc3QuaGVpZ2h0LGY9Um8odGhpcy5jaGFydC53aWR0aC11LDAsdGhpcy5tYXhXaWR0aCk7bz1lLm9mZnNldD90aGlzLm1heFdpZHRoL246Zi8obi0xKSx1KzY+byYmKG89Zi8obi0oZS5vZmZzZXQ/LjU6MSkpLHM9dGhpcy5tYXhIZWlnaHQtTHUoZS5ncmlkKS10LnBhZGRpbmctUnUoZS50aXRsZSx0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCksYz1NYXRoLnNxcnQodSp1K2QqZCksYT1NbyhNYXRoLm1pbihNYXRoLmFzaW4oUm8oKGwuaGlnaGVzdC5oZWlnaHQrNikvbywtMSwxKSksTWF0aC5hc2luKFJvKHMvYywtMSwxKSktTWF0aC5hc2luKFJvKGQvYywtMSwxKSkpKSxhPU1hdGgubWF4KHIsTWF0aC5taW4oaSxhKSkpLHRoaXMubGFiZWxSb3RhdGlvbj1hfWFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpe0oodGhpcy5vcHRpb25zLmFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWFmdGVyQXV0b1NraXAoKXt9YmVmb3JlRml0KCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlRml0LFt0aGlzXSl9Zml0KCl7bGV0IGU9e3dpZHRoOjAsaGVpZ2h0OjB9LHtjaGFydDp0LG9wdGlvbnM6e3RpY2tzOm4sdGl0bGU6cixncmlkOml9fT10aGlzLGE9dGhpcy5faXNWaXNpYmxlKCksbz10aGlzLmlzSG9yaXpvbnRhbCgpO2lmKGEpe2xldCBhPVJ1KHIsdC5vcHRpb25zLmZvbnQpO2lmKG8/KGUud2lkdGg9dGhpcy5tYXhXaWR0aCxlLmhlaWdodD1MdShpKSthKTooZS5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsZS53aWR0aD1MdShpKSthKSxuLmRpc3BsYXkmJnRoaXMudGlja3MubGVuZ3RoKXtsZXR7Zmlyc3Q6dCxsYXN0OnIsd2lkZXN0OmksaGlnaGVzdDphfT10aGlzLl9nZXRMYWJlbFNpemVzKCkscz1uLnBhZGRpbmcqMixjPWpvKHRoaXMubGFiZWxSb3RhdGlvbiksbD1NYXRoLmNvcyhjKSx1PU1hdGguc2luKGMpO2lmKG8pe2xldCB0PW4ubWlycm9yPzA6dSppLndpZHRoK2wqYS5oZWlnaHQ7ZS5oZWlnaHQ9TWF0aC5taW4odGhpcy5tYXhIZWlnaHQsZS5oZWlnaHQrdCtzKX1lbHNle2xldCB0PW4ubWlycm9yPzA6bCppLndpZHRoK3UqYS5oZWlnaHQ7ZS53aWR0aD1NYXRoLm1pbih0aGlzLm1heFdpZHRoLGUud2lkdGgrdCtzKX10aGlzLl9jYWxjdWxhdGVQYWRkaW5nKHQscix1LGwpfX10aGlzLl9oYW5kbGVNYXJnaW5zKCksbz8odGhpcy53aWR0aD10aGlzLl9sZW5ndGg9dC53aWR0aC10aGlzLl9tYXJnaW5zLmxlZnQtdGhpcy5fbWFyZ2lucy5yaWdodCx0aGlzLmhlaWdodD1lLmhlaWdodCk6KHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD10aGlzLl9sZW5ndGg9dC5oZWlnaHQtdGhpcy5fbWFyZ2lucy50b3AtdGhpcy5fbWFyZ2lucy5ib3R0b20pfV9jYWxjdWxhdGVQYWRkaW5nKGUsdCxuLHIpe2xldHt0aWNrczp7YWxpZ246aSxwYWRkaW5nOmF9LHBvc2l0aW9uOm99PXRoaXMub3B0aW9ucyxzPXRoaXMubGFiZWxSb3RhdGlvbiE9PTAsYz1vIT09YHRvcGAmJnRoaXMuYXhpcz09PWB4YDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgbz10aGlzLmdldFBpeGVsRm9yVGljaygwKS10aGlzLmxlZnQsbD10aGlzLnJpZ2h0LXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKHRoaXMudGlja3MubGVuZ3RoLTEpLHU9MCxkPTA7cz9jPyh1PXIqZS53aWR0aCxkPW4qdC5oZWlnaHQpOih1PW4qZS5oZWlnaHQsZD1yKnQud2lkdGgpOmk9PT1gc3RhcnRgP2Q9dC53aWR0aDppPT09YGVuZGA/dT1lLndpZHRoOmkhPT1gaW5uZXJgJiYodT1lLndpZHRoLzIsZD10LndpZHRoLzIpLHRoaXMucGFkZGluZ0xlZnQ9TWF0aC5tYXgoKHUtbythKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLW8pLDApLHRoaXMucGFkZGluZ1JpZ2h0PU1hdGgubWF4KChkLWwrYSkqdGhpcy53aWR0aC8odGhpcy53aWR0aC1sKSwwKX1lbHNle2xldCBuPXQuaGVpZ2h0LzIscj1lLmhlaWdodC8yO2k9PT1gc3RhcnRgPyhuPTAscj1lLmhlaWdodCk6aT09PWBlbmRgJiYobj10LmhlaWdodCxyPTApLHRoaXMucGFkZGluZ1RvcD1uK2EsdGhpcy5wYWRkaW5nQm90dG9tPXIrYX19X2hhbmRsZU1hcmdpbnMoKXt0aGlzLl9tYXJnaW5zJiYodGhpcy5fbWFyZ2lucy5sZWZ0PU1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsdGhpcy5fbWFyZ2lucy5sZWZ0KSx0aGlzLl9tYXJnaW5zLnRvcD1NYXRoLm1heCh0aGlzLnBhZGRpbmdUb3AsdGhpcy5fbWFyZ2lucy50b3ApLHRoaXMuX21hcmdpbnMucmlnaHQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nUmlnaHQsdGhpcy5fbWFyZ2lucy5yaWdodCksdGhpcy5fbWFyZ2lucy5ib3R0b209TWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLHRoaXMuX21hcmdpbnMuYm90dG9tKSl9YWZ0ZXJGaXQoKXtKKHRoaXMub3B0aW9ucy5hZnRlckZpdCxbdGhpc10pfWlzSG9yaXpvbnRhbCgpe2xldHtheGlzOmUscG9zaXRpb246dH09dGhpcy5vcHRpb25zO3JldHVybiB0PT09YHRvcGB8fHQ9PT1gYm90dG9tYHx8ZT09PWB4YH1pc0Z1bGxTaXplKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5mdWxsU2l6ZX1fY29udmVydFRpY2tzVG9MYWJlbHMoZSl7dGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKSx0aGlzLmdlbmVyYXRlVGlja0xhYmVscyhlKTtsZXQgdCxuO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKVUoZVt0XS5sYWJlbCkmJihlLnNwbGljZSh0LDEpLG4tLSx0LS0pO3RoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKX1fZ2V0TGFiZWxTaXplcygpe2xldCBlPXRoaXMuX2xhYmVsU2l6ZXM7aWYoIWUpe2xldCB0PXRoaXMub3B0aW9ucy50aWNrcy5zYW1wbGVTaXplLG49dGhpcy50aWNrczt0PG4ubGVuZ3RoJiYobj1QdShuLHQpKSx0aGlzLl9sYWJlbFNpemVzPWU9dGhpcy5fY29tcHV0ZUxhYmVsU2l6ZXMobixuLmxlbmd0aCx0aGlzLm9wdGlvbnMudGlja3MubWF4VGlja3NMaW1pdCl9cmV0dXJuIGV9X2NvbXB1dGVMYWJlbFNpemVzKGUsdCxuKXtsZXR7Y3R4OnIsX2xvbmdlc3RUZXh0Q2FjaGU6aX09dGhpcyxhPVtdLG89W10scz1NYXRoLmZsb29yKHQvTnUodCxuKSksYz0wLGw9MCx1LGQsZixwLG0saCxnLF8sdix5LGI7Zm9yKHU9MDt1PHQ7dSs9cyl7aWYocD1lW3VdLmxhYmVsLG09dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyh1KSxyLmZvbnQ9aD1tLnN0cmluZyxnPWlbaF09aVtoXXx8e2RhdGE6e30sZ2M6W119LF89bS5saW5lSGVpZ2h0LHY9eT0wLCFVKHApJiYhVyhwKSl2PXdzKHIsZy5kYXRhLGcuZ2MsdixwKSx5PV87ZWxzZSBpZihXKHApKWZvcihkPTAsZj1wLmxlbmd0aDtkPGY7KytkKWI9cFtkXSwhVShiKSYmIVcoYikmJih2PXdzKHIsZy5kYXRhLGcuZ2MsdixiKSx5Kz1fKTthLnB1c2godiksby5wdXNoKHkpLGM9TWF0aC5tYXgodixjKSxsPU1hdGgubWF4KHksbCl9SXUoaSx0KTtsZXQgeD1hLmluZGV4T2YoYyksUz1vLmluZGV4T2YobCksQz1lPT4oe3dpZHRoOmFbZV18fDAsaGVpZ2h0Om9bZV18fDB9KTtyZXR1cm57Zmlyc3Q6QygwKSxsYXN0OkModC0xKSx3aWRlc3Q6Qyh4KSxoaWdoZXN0OkMoUyksd2lkdGhzOmEsaGVpZ2h0czpvfX1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBlfWdldFBpeGVsRm9yVmFsdWUoZSx0KXtyZXR1cm4gTmFOfWdldFZhbHVlRm9yUGl4ZWwoZSl7fWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRQaXhlbEZvckRlY2ltYWwoZSl7dGhpcy5fcmV2ZXJzZVBpeGVscyYmKGU9MS1lKTtsZXQgdD10aGlzLl9zdGFydFBpeGVsK2UqdGhpcy5fbGVuZ3RoO3JldHVybiB6byh0aGlzLl9hbGlnblRvUGl4ZWxzP0VzKHRoaXMuY2hhcnQsdCwwKTp0KX1nZXREZWNpbWFsRm9yUGl4ZWwoZSl7bGV0IHQ9KGUtdGhpcy5fc3RhcnRQaXhlbCkvdGhpcy5fbGVuZ3RoO3JldHVybiB0aGlzLl9yZXZlcnNlUGl4ZWxzPzEtdDp0fWdldEJhc2VQaXhlbCgpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0QmFzZVZhbHVlKCl7bGV0e21pbjplLG1heDp0fT10aGlzO3JldHVybiBlPDAmJnQ8MD90OmU+MCYmdD4wP2U6MH1nZXRDb250ZXh0KGUpe2xldCB0PXRoaXMudGlja3N8fFtdO2lmKGU+PTAmJmU8dC5sZW5ndGgpe2xldCBuPXRbZV07cmV0dXJuIG4uJGNvbnRleHR8fD1CdSh0aGlzLmdldENvbnRleHQoKSxlLG4pfXJldHVybiB0aGlzLiRjb250ZXh0fHw9enUodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcyl9X3RpY2tTaXplKCl7bGV0IGU9dGhpcy5vcHRpb25zLnRpY2tzLHQ9am8odGhpcy5sYWJlbFJvdGF0aW9uKSxuPU1hdGguYWJzKE1hdGguY29zKHQpKSxyPU1hdGguYWJzKE1hdGguc2luKHQpKSxpPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxhPWUuYXV0b1NraXBQYWRkaW5nfHwwLG89aT9pLndpZGVzdC53aWR0aCthOjAscz1pP2kuaGlnaGVzdC5oZWlnaHQrYTowO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3Mqbj5vKnI/by9uOnMvcjpzKnI8bypuP3MvbjpvL3J9X2lzVmlzaWJsZSgpe2xldCBlPXRoaXMub3B0aW9ucy5kaXNwbGF5O3JldHVybiBlPT09YGF1dG9gP3RoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGg+MDohIWV9X2NvbXB1dGVHcmlkTGluZUl0ZW1zKGUpe2xldCB0PXRoaXMuYXhpcyxuPXRoaXMuY2hhcnQscj10aGlzLm9wdGlvbnMse2dyaWQ6aSxwb3NpdGlvbjphLGJvcmRlcjpvfT1yLHM9aS5vZmZzZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpLGw9dGhpcy50aWNrcy5sZW5ndGgrICshIXMsdT1MdShpKSxkPVtdLGY9by5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxwPWYuZGlzcGxheT9mLndpZHRoOjAsbT1wLzIsaD1mdW5jdGlvbihlKXtyZXR1cm4gRXMobixlLHApfSxnLF8sdix5LGIseCxTLEMsdyxULEUsRDtpZihhPT09YHRvcGApZz1oKHRoaXMuYm90dG9tKSx4PXRoaXMuYm90dG9tLXUsQz1nLW0sVD1oKGUudG9wKSttLEQ9ZS5ib3R0b207ZWxzZSBpZihhPT09YGJvdHRvbWApZz1oKHRoaXMudG9wKSxUPWUudG9wLEQ9aChlLmJvdHRvbSktbSx4PWcrbSxDPXRoaXMudG9wK3U7ZWxzZSBpZihhPT09YGxlZnRgKWc9aCh0aGlzLnJpZ2h0KSxiPXRoaXMucmlnaHQtdSxTPWctbSx3PWgoZS5sZWZ0KSttLEU9ZS5yaWdodDtlbHNlIGlmKGE9PT1gcmlnaHRgKWc9aCh0aGlzLmxlZnQpLHc9ZS5sZWZ0LEU9aChlLnJpZ2h0KS1tLGI9ZyttLFM9dGhpcy5sZWZ0K3U7ZWxzZSBpZih0PT09YHhgKXtpZihhPT09YGNlbnRlcmApZz1oKChlLnRvcCtlLmJvdHRvbSkvMisuNSk7ZWxzZSBpZihHKGEpKXtsZXQgZT1PYmplY3Qua2V5cyhhKVswXSx0PWFbZV07Zz1oKHRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkpfVQ9ZS50b3AsRD1lLmJvdHRvbSx4PWcrbSxDPXgrdX1lbHNlIGlmKHQ9PT1geWApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUubGVmdCtlLnJpZ2h0KS8yKTtlbHNlIGlmKEcoYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9Yj1nLW0sUz1iLXUsdz1lLmxlZnQsRT1lLnJpZ2h0fWxldCBPPXEoci50aWNrcy5tYXhUaWNrc0xpbWl0LGwpLGs9TWF0aC5tYXgoMSxNYXRoLmNlaWwobC9PKSk7Zm9yKF89MDtfPGw7Xys9ayl7bGV0IGU9dGhpcy5nZXRDb250ZXh0KF8pLHQ9aS5zZXRDb250ZXh0KGUpLHI9by5zZXRDb250ZXh0KGUpLGE9dC5saW5lV2lkdGgsbD10LmNvbG9yLHU9ci5kYXNofHxbXSxmPXIuZGFzaE9mZnNldCxwPXQudGlja1dpZHRoLG09dC50aWNrQ29sb3IsaD10LnRpY2tCb3JkZXJEYXNofHxbXSxnPXQudGlja0JvcmRlckRhc2hPZmZzZXQ7dj1GdSh0aGlzLF8scyksdiE9PXZvaWQgMCYmKHk9RXMobix2LGEpLGM/Yj1TPXc9RT15Ong9Qz1UPUQ9eSxkLnB1c2goe3R4MTpiLHR5MTp4LHR4MjpTLHR5MjpDLHgxOncseTE6VCx4MjpFLHkyOkQsd2lkdGg6YSxjb2xvcjpsLGJvcmRlckRhc2g6dSxib3JkZXJEYXNoT2Zmc2V0OmYsdGlja1dpZHRoOnAsdGlja0NvbG9yOm0sdGlja0JvcmRlckRhc2g6aCx0aWNrQm9yZGVyRGFzaE9mZnNldDpnfSkpfXJldHVybiB0aGlzLl90aWNrc0xlbmd0aD1sLHRoaXMuX2JvcmRlclZhbHVlPWcsZH1fY29tcHV0ZUxhYmVsSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5vcHRpb25zLHtwb3NpdGlvbjpyLHRpY2tzOml9PW4sYT10aGlzLmlzSG9yaXpvbnRhbCgpLG89dGhpcy50aWNrcyx7YWxpZ246cyxjcm9zc0FsaWduOmMscGFkZGluZzpsLG1pcnJvcjp1fT1pLGQ9THUobi5ncmlkKSxmPWQrbCxwPXU/LWw6ZixtPS1qbyh0aGlzLmxhYmVsUm90YXRpb24pLGg9W10sZyxfLHYseSxiLHgsUyxDLHcsVCxFLEQsTz1gbWlkZGxlYDtpZihyPT09YHRvcGApeD10aGlzLmJvdHRvbS1wLFM9dGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO2Vsc2UgaWYocj09PWBib3R0b21gKXg9dGhpcy50b3ArcCxTPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtlbHNlIGlmKHI9PT1gbGVmdGApe2xldCBlPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCk7Uz1lLnRleHRBbGlnbixiPWUueH1lbHNlIGlmKHI9PT1gcmlnaHRgKXtsZXQgZT10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpO1M9ZS50ZXh0QWxpZ24sYj1lLnh9ZWxzZSBpZih0PT09YHhgKXtpZihyPT09YGNlbnRlcmApeD0oZS50b3ArZS5ib3R0b20pLzIrZjtlbHNlIGlmKEcocikpe2xldCBlPU9iamVjdC5rZXlzKHIpWzBdLHQ9cltlXTt4PXRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkrZn1TPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKX1lbHNlIGlmKHQ9PT1geWApe2lmKHI9PT1gY2VudGVyYCliPShlLmxlZnQrZS5yaWdodCkvMi1mO2Vsc2UgaWYoRyhyKSl7bGV0IGU9T2JqZWN0LmtleXMocilbMF0sdD1yW2VdO2I9dGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KX1TPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCkudGV4dEFsaWdufXQ9PT1geWAmJihzPT09YHN0YXJ0YD9PPWB0b3BgOnM9PT1gZW5kYCYmKE89YGJvdHRvbWApKTtsZXQgaz10aGlzLl9nZXRMYWJlbFNpemVzKCk7Zm9yKGc9MCxfPW8ubGVuZ3RoO2c8XzsrK2cpe3Y9b1tnXSx5PXYubGFiZWw7bGV0IGU9aS5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChnKSk7Qz10aGlzLmdldFBpeGVsRm9yVGljayhnKStpLmxhYmVsT2Zmc2V0LHc9dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhnKSxUPXcubGluZUhlaWdodCxFPVcoeSk/eS5sZW5ndGg6MTtsZXQgdD1FLzIsbj1lLmNvbG9yLHM9ZS50ZXh0U3Ryb2tlQ29sb3IsbD1lLnRleHRTdHJva2VXaWR0aCxkPVM7YT8oYj1DLFM9PT1gaW5uZXJgJiYoZD1nPT09Xy0xP3RoaXMub3B0aW9ucy5yZXZlcnNlP2BsZWZ0YDpgcmlnaHRgOmc9PT0wP3RoaXMub3B0aW9ucy5yZXZlcnNlP2ByaWdodGA6YGxlZnRgOmBjZW50ZXJgKSxEPXI9PT1gdG9wYD9jPT09YG5lYXJgfHxtIT09MD8tRSpUK1QvMjpjPT09YGNlbnRlcmA/LWsuaGlnaGVzdC5oZWlnaHQvMi10KlQrVDotay5oaWdoZXN0LmhlaWdodCtULzI6Yz09PWBuZWFyYHx8bSE9PTA/VC8yOmM9PT1gY2VudGVyYD9rLmhpZ2hlc3QuaGVpZ2h0LzItdCpUOmsuaGlnaGVzdC5oZWlnaHQtRSpULHUmJihEKj0tMSksbSE9PTAmJiFlLnNob3dMYWJlbEJhY2tkcm9wJiYoYis9VC8yKk1hdGguc2luKG0pKSk6KHg9QyxEPSgxLUUpKlQvMik7bGV0IGY7aWYoZS5zaG93TGFiZWxCYWNrZHJvcCl7bGV0IHQ9UShlLmJhY2tkcm9wUGFkZGluZyksbj1rLmhlaWdodHNbZ10scj1rLndpZHRoc1tnXSxpPUQtdC50b3AsYT0wLXQubGVmdDtzd2l0Y2goTyl7Y2FzZWBtaWRkbGVgOmktPW4vMjticmVhaztjYXNlYGJvdHRvbWA6aS09bn1zd2l0Y2goUyl7Y2FzZWBjZW50ZXJgOmEtPXIvMjticmVhaztjYXNlYHJpZ2h0YDphLT1yO2JyZWFrO2Nhc2VgaW5uZXJgOmc9PT1fLTE/YS09cjpnPjAmJihhLT1yLzIpfWY9e2xlZnQ6YSx0b3A6aSx3aWR0aDpyK3Qud2lkdGgsaGVpZ2h0Om4rdC5oZWlnaHQsY29sb3I6ZS5iYWNrZHJvcENvbG9yfX1oLnB1c2goe2xhYmVsOnksZm9udDp3LHRleHRPZmZzZXQ6RCxvcHRpb25zOntyb3RhdGlvbjptLGNvbG9yOm4sc3Ryb2tlQ29sb3I6cyxzdHJva2VXaWR0aDpsLHRleHRBbGlnbjpkLHRleHRCYXNlbGluZTpPLHRyYW5zbGF0aW9uOltiLHhdLGJhY2tkcm9wOmZ9fSl9cmV0dXJuIGh9X2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKXtsZXR7cG9zaXRpb246ZSx0aWNrczp0fT10aGlzLm9wdGlvbnM7aWYoLWpvKHRoaXMubGFiZWxSb3RhdGlvbikpcmV0dXJuIGU9PT1gdG9wYD9gbGVmdGA6YHJpZ2h0YDtsZXQgbj1gY2VudGVyYDtyZXR1cm4gdC5hbGlnbj09PWBzdGFydGA/bj1gbGVmdGA6dC5hbGlnbj09PWBlbmRgP249YHJpZ2h0YDp0LmFsaWduPT09YGlubmVyYCYmKG49YGlubmVyYCksbn1fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChlKXtsZXR7cG9zaXRpb246dCx0aWNrczp7Y3Jvc3NBbGlnbjpuLG1pcnJvcjpyLHBhZGRpbmc6aX19PXRoaXMub3B0aW9ucyxhPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxvPWUraSxzPWEud2lkZXN0LndpZHRoLGMsbDtyZXR1cm4gdD09PWBsZWZ0YD9yPyhsPXRoaXMucmlnaHQraSxuPT09YG5lYXJgP2M9YGxlZnRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsKz1zLzIpOihjPWByaWdodGAsbCs9cykpOihsPXRoaXMucmlnaHQtbyxuPT09YG5lYXJgP2M9YHJpZ2h0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbC09cy8yKTooYz1gbGVmdGAsbD10aGlzLmxlZnQpKTp0PT09YHJpZ2h0YD9yPyhsPXRoaXMubGVmdCtpLG49PT1gbmVhcmA/Yz1gcmlnaHRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsLT1zLzIpOihjPWBsZWZ0YCxsLT1zKSk6KGw9dGhpcy5sZWZ0K28sbj09PWBuZWFyYD9jPWBsZWZ0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbCs9cy8yKTooYz1gcmlnaHRgLGw9dGhpcy5yaWdodCkpOmM9YHJpZ2h0YCx7dGV4dEFsaWduOmMseDpsfX1fY29tcHV0ZUxhYmVsQXJlYSgpe2lmKHRoaXMub3B0aW9ucy50aWNrcy5taXJyb3IpcmV0dXJuO2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLm9wdGlvbnMucG9zaXRpb247aWYodD09PWBsZWZ0YHx8dD09PWByaWdodGApcmV0dXJue3RvcDowLGxlZnQ6dGhpcy5sZWZ0LGJvdHRvbTplLmhlaWdodCxyaWdodDp0aGlzLnJpZ2h0fTtpZih0PT09YHRvcGB8fHQ9PT1gYm90dG9tYClyZXR1cm57dG9wOnRoaXMudG9wLGxlZnQ6MCxib3R0b206dGhpcy5ib3R0b20scmlnaHQ6ZS53aWR0aH19ZHJhd0JhY2tncm91bmQoKXtsZXR7Y3R4OmUsb3B0aW9uczp7YmFja2dyb3VuZENvbG9yOnR9LGxlZnQ6bix0b3A6cix3aWR0aDppLGhlaWdodDphfT10aGlzO3QmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT10LGUuZmlsbFJlY3QobixyLGksYSksZS5yZXN0b3JlKCkpfWdldExpbmVXaWR0aEZvclZhbHVlKGUpe2xldCB0PXRoaXMub3B0aW9ucy5ncmlkO2lmKCF0aGlzLl9pc1Zpc2libGUoKXx8IXQuZGlzcGxheSlyZXR1cm4gMDtsZXQgbj10aGlzLnRpY2tzLmZpbmRJbmRleCh0PT50LnZhbHVlPT09ZSk7cmV0dXJuIG4+PTA/dC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChuKSkubGluZVdpZHRoOjB9ZHJhd0dyaWQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLmdyaWQsbj10aGlzLmN0eCxyPXRoaXMuX2dyaWRMaW5lSXRlbXN8fD10aGlzLl9jb21wdXRlR3JpZExpbmVJdGVtcyhlKSxpLGEsbz0oZSx0LHIpPT57IXIud2lkdGh8fCFyLmNvbG9yfHwobi5zYXZlKCksbi5saW5lV2lkdGg9ci53aWR0aCxuLnN0cm9rZVN0eWxlPXIuY29sb3Isbi5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2h8fFtdKSxuLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxuLmJlZ2luUGF0aCgpLG4ubW92ZVRvKGUueCxlLnkpLG4ubGluZVRvKHQueCx0LnkpLG4uc3Ryb2tlKCksbi5yZXN0b3JlKCkpfTtpZih0LmRpc3BsYXkpZm9yKGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe2xldCBlPXJbaV07dC5kcmF3T25DaGFydEFyZWEmJm8oe3g6ZS54MSx5OmUueTF9LHt4OmUueDIseTplLnkyfSxlKSx0LmRyYXdUaWNrcyYmbyh7eDplLnR4MSx5OmUudHkxfSx7eDplLnR4Mix5OmUudHkyfSx7Y29sb3I6ZS50aWNrQ29sb3Isd2lkdGg6ZS50aWNrV2lkdGgsYm9yZGVyRGFzaDplLnRpY2tCb3JkZXJEYXNoLGJvcmRlckRhc2hPZmZzZXQ6ZS50aWNrQm9yZGVyRGFzaE9mZnNldH0pfX1kcmF3Qm9yZGVyKCl7bGV0e2NoYXJ0OmUsY3R4OnQsb3B0aW9uczp7Ym9yZGVyOm4sZ3JpZDpyfX09dGhpcyxpPW4uc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSksYT1uLmRpc3BsYXk/aS53aWR0aDowO2lmKCFhKXJldHVybjtsZXQgbz1yLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGgscz10aGlzLl9ib3JkZXJWYWx1ZSxjLGwsdSxkO3RoaXMuaXNIb3Jpem9udGFsKCk/KGM9RXMoZSx0aGlzLmxlZnQsYSktYS8yLGw9RXMoZSx0aGlzLnJpZ2h0LG8pK28vMix1PWQ9cyk6KHU9RXMoZSx0aGlzLnRvcCxhKS1hLzIsZD1FcyhlLHRoaXMuYm90dG9tLG8pK28vMixjPWw9cyksdC5zYXZlKCksdC5saW5lV2lkdGg9aS53aWR0aCx0LnN0cm9rZVN0eWxlPWkuY29sb3IsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhjLHUpLHQubGluZVRvKGwsZCksdC5zdHJva2UoKSx0LnJlc3RvcmUoKX1kcmF3TGFiZWxzKGUpe2lmKCF0aGlzLm9wdGlvbnMudGlja3MuZGlzcGxheSlyZXR1cm47bGV0IHQ9dGhpcy5jdHgsbj10aGlzLl9jb21wdXRlTGFiZWxBcmVhKCk7biYmanModCxuKTtsZXQgcj10aGlzLmdldExhYmVsSXRlbXMoZSk7Zm9yKGxldCBlIG9mIHIpe2xldCBuPWUub3B0aW9ucyxyPWUuZm9udCxpPWUubGFiZWwsYT1lLnRleHRPZmZzZXQ7SXModCxpLDAsYSxyLG4pfW4mJk1zKHQpfWRyYXdUaXRsZSgpe2xldHtjdHg6ZSxvcHRpb25zOntwb3NpdGlvbjp0LHRpdGxlOm4scmV2ZXJzZTpyfX09dGhpcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgaT0kKG4uZm9udCksYT1RKG4ucGFkZGluZyksbz1uLmFsaWduLHM9aS5saW5lSGVpZ2h0LzI7dD09PWBib3R0b21gfHx0PT09YGNlbnRlcmB8fEcodCk/KHMrPWEuYm90dG9tLFcobi50ZXh0KSYmKHMrPWkubGluZUhlaWdodCoobi50ZXh0Lmxlbmd0aC0xKSkpOnMrPWEudG9wO2xldHt0aXRsZVg6Yyx0aXRsZVk6bCxtYXhXaWR0aDp1LHJvdGF0aW9uOmR9PUh1KHRoaXMscyx0LG8pO0lzKGUsbi50ZXh0LDAsMCxpLHtjb2xvcjpuLmNvbG9yLG1heFdpZHRoOnUscm90YXRpb246ZCx0ZXh0QWxpZ246VnUobyx0LHIpLHRleHRCYXNlbGluZTpgbWlkZGxlYCx0cmFuc2xhdGlvbjpbYyxsXX0pfWRyYXcoZSl7dGhpcy5faXNWaXNpYmxlKCkmJih0aGlzLmRyYXdCYWNrZ3JvdW5kKCksdGhpcy5kcmF3R3JpZChlKSx0aGlzLmRyYXdCb3JkZXIoKSx0aGlzLmRyYXdUaXRsZSgpLHRoaXMuZHJhd0xhYmVscyhlKSl9X2xheWVycygpe2xldCB0PXRoaXMub3B0aW9ucyxuPXQudGlja3MmJnQudGlja3Muenx8MCxyPXEodC5ncmlkJiZ0LmdyaWQueiwtMSksaT1xKHQuYm9yZGVyJiZ0LmJvcmRlci56LDApO3JldHVybiF0aGlzLl9pc1Zpc2libGUoKXx8dGhpcy5kcmF3IT09ZS5wcm90b3R5cGUuZHJhdz9be3o6bixkcmF3OmU9Pnt0aGlzLmRyYXcoZSl9fV06W3t6OnIsZHJhdzplPT57dGhpcy5kcmF3QmFja2dyb3VuZCgpLHRoaXMuZHJhd0dyaWQoZSksdGhpcy5kcmF3VGl0bGUoKX19LHt6OmksZHJhdzooKT0+e3RoaXMuZHJhd0JvcmRlcigpfX0se3o6bixkcmF3OmU9Pnt0aGlzLmRyYXdMYWJlbHMoZSl9fV19Z2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoZSl7bGV0IHQ9dGhpcy5jaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCksbj10aGlzLmF4aXMrYEF4aXNJRGAscj1bXSxpLGE7Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpe2xldCBhPXRbaV07YVtuXT09PXRoaXMuaWQmJighZXx8YS50eXBlPT09ZSkmJnIucHVzaChhKX1yZXR1cm4gcn1fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhlKXtyZXR1cm4gJCh0aGlzLm9wdGlvbnMudGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoZSkpLmZvbnQpfV9tYXhEaWdpdHMoKXtsZXQgZT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7cmV0dXJuKHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aDp0aGlzLmhlaWdodCkvZX19LFd1PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnR5cGU9ZSx0aGlzLnNjb3BlPXQsdGhpcy5vdmVycmlkZT1uLHRoaXMuaXRlbXM9T2JqZWN0LmNyZWF0ZShudWxsKX1pc0ZvclR5cGUoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsZS5wcm90b3R5cGUpfXJlZ2lzdGVyKGUpe2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxuO3F1KHQpJiYobj10aGlzLnJlZ2lzdGVyKHQpKTtsZXQgcj10aGlzLml0ZW1zLGk9ZS5pZCxhPXRoaXMuc2NvcGUrYC5gK2k7aWYoIWkpdGhyb3cgRXJyb3IoYGNsYXNzIGRvZXMgbm90IGhhdmUgaWQ6IGArZSk7cmV0dXJuIGkgaW4gcj9hOihyW2ldPWUsR3UoZSxhLG4pLHRoaXMub3ZlcnJpZGUmJloub3ZlcnJpZGUoZS5pZCxlLm92ZXJyaWRlcyksYSl9Z2V0KGUpe3JldHVybiB0aGlzLml0ZW1zW2VdfXVucmVnaXN0ZXIoZSl7bGV0IHQ9dGhpcy5pdGVtcyxuPWUuaWQscj10aGlzLnNjb3BlO24gaW4gdCYmZGVsZXRlIHRbbl0sciYmbiBpbiBaW3JdJiYoZGVsZXRlIFpbcl1bbl0sdGhpcy5vdmVycmlkZSYmZGVsZXRlIHlzW25dKX19O2Z1bmN0aW9uIEd1KGUsdCxuKXtsZXQgcj1ybyhPYmplY3QuY3JlYXRlKG51bGwpLFtuP1ouZ2V0KG4pOnt9LFouZ2V0KHQpLGUuZGVmYXVsdHNdKTtaLnNldCh0LHIpLGUuZGVmYXVsdFJvdXRlcyYmS3UodCxlLmRlZmF1bHRSb3V0ZXMpLGUuZGVzY3JpcHRvcnMmJlouZGVzY3JpYmUodCxlLmRlc2NyaXB0b3JzKX1mdW5jdGlvbiBLdShlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2xldCByPW4uc3BsaXQoYC5gKSxpPXIucG9wKCksYT1bZV0uY29uY2F0KHIpLmpvaW4oYC5gKSxvPXRbbl0uc3BsaXQoYC5gKSxzPW8ucG9wKCksYz1vLmpvaW4oYC5gKTtaLnJvdXRlKGEsaSxjLHMpfSl9ZnVuY3Rpb24gcXUoZSl7cmV0dXJuYGlkYGluIGUmJmBkZWZhdWx0c2BpbiBlfXZhciBKdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRyb2xsZXJzPW5ldyBXdShsbCxgZGF0YXNldHNgLCEwKSx0aGlzLmVsZW1lbnRzPW5ldyBXdShDdSxgZWxlbWVudHNgKSx0aGlzLnBsdWdpbnM9bmV3IFd1KE9iamVjdCxgcGx1Z2luc2ApLHRoaXMuc2NhbGVzPW5ldyBXdShVdSxgc2NhbGVzYCksdGhpcy5fdHlwZWRSZWdpc3RyaWVzPVt0aGlzLmNvbnRyb2xsZXJzLHRoaXMuc2NhbGVzLHRoaXMuZWxlbWVudHNdfWFkZCguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSl9cmVtb3ZlKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUpfWFkZENvbnRyb2xsZXJzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfWFkZEVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuZWxlbWVudHMpfWFkZFBsdWdpbnMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5wbHVnaW5zKX1hZGRTY2FsZXMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfWdldENvbnRyb2xsZXIoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuY29udHJvbGxlcnMsYGNvbnRyb2xsZXJgKX1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLmVsZW1lbnRzLGBlbGVtZW50YCl9Z2V0UGx1Z2luKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnBsdWdpbnMsYHBsdWdpbmApfWdldFNjYWxlKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnNjYWxlcyxgc2NhbGVgKX1yZW1vdmVDb250cm9sbGVycyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfXJlbW92ZUVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5lbGVtZW50cyl9cmVtb3ZlUGx1Z2lucyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMucGx1Z2lucyl9cmVtb3ZlU2NhbGVzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfV9lYWNoKGUsdCxuKXtbLi4udF0uZm9yRWFjaCh0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO258fHIuaXNGb3JUeXBlKHQpfHxyPT09dGhpcy5wbHVnaW5zJiZ0LmlkP3RoaXMuX2V4ZWMoZSxyLHQpOlkodCx0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO3RoaXMuX2V4ZWMoZSxyLHQpfSl9KX1fZXhlYyhlLHQsbil7bGV0IHI9dW8oZSk7SihuW2BiZWZvcmVgK3JdLFtdLG4pLHRbZV0obiksSihuW2BhZnRlcmArcl0sW10sbil9X2dldFJlZ2lzdHJ5Rm9yVHlwZShlKXtmb3IobGV0IHQ9MDt0PHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7dCsrKXtsZXQgbj10aGlzLl90eXBlZFJlZ2lzdHJpZXNbdF07aWYobi5pc0ZvclR5cGUoZSkpcmV0dXJuIG59cmV0dXJuIHRoaXMucGx1Z2luc31fZ2V0KGUsdCxuKXtsZXQgcj10LmdldChlKTtpZihyPT09dm9pZCAwKXRocm93IEVycm9yKGAiYCtlK2AiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgYCtuK2AuYCk7cmV0dXJuIHJ9fSxZdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2luaXQ9dm9pZCAwfW5vdGlmeShlLHQsbixyKXtpZih0PT09YGJlZm9yZUluaXRgJiYodGhpcy5faW5pdD10aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhlLCEwKSx0aGlzLl9ub3RpZnkodGhpcy5faW5pdCxlLGBpbnN0YWxsYCkpLHRoaXMuX2luaXQ9PT12b2lkIDApcmV0dXJuO2xldCBpPXI/dGhpcy5fZGVzY3JpcHRvcnMoZSkuZmlsdGVyKHIpOnRoaXMuX2Rlc2NyaXB0b3JzKGUpLGE9dGhpcy5fbm90aWZ5KGksZSx0LG4pO3JldHVybiB0PT09YGFmdGVyRGVzdHJveWAmJih0aGlzLl9ub3RpZnkoaSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsZSxgdW5pbnN0YWxsYCksdGhpcy5faW5pdD12b2lkIDApLGF9X25vdGlmeShlLHQsbixyKXtyfHw9e307Zm9yKGxldCBpIG9mIGUpe2xldCBlPWkucGx1Z2luLGE9ZVtuXTtpZihKKGEsW3QscixpLm9wdGlvbnNdLGUpPT09ITEmJnIuY2FuY2VsYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH1pbnZhbGlkYXRlKCl7VSh0aGlzLl9jYWNoZSl8fCh0aGlzLl9vbGRDYWNoZT10aGlzLl9jYWNoZSx0aGlzLl9jYWNoZT12b2lkIDApfV9kZXNjcmlwdG9ycyhlKXtpZih0aGlzLl9jYWNoZSlyZXR1cm4gdGhpcy5fY2FjaGU7bGV0IHQ9dGhpcy5fY2FjaGU9dGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoZSk7cmV0dXJuIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhlKSx0fV9jcmVhdGVEZXNjcmlwdG9ycyhlLHQpe2xldCBuPWUmJmUuY29uZmlnLHI9cShuLm9wdGlvbnMmJm4ub3B0aW9ucy5wbHVnaW5zLHt9KSxpPVh1KG4pO3JldHVybiByPT09ITEmJiF0P1tdOlF1KGUsaSxyLHQpfV9ub3RpZnlTdGF0ZUNoYW5nZXMoZSl7bGV0IHQ9dGhpcy5fb2xkQ2FjaGV8fFtdLG49dGhpcy5fY2FjaGUscj0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLnBsdWdpbi5pZD09PXQucGx1Z2luLmlkKSk7dGhpcy5fbm90aWZ5KHIodCxuKSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHIobix0KSxlLGBzdGFydGApfX07ZnVuY3Rpb24gWHUoZSl7bGV0IHQ9e30sbj1bXSxyPU9iamVjdC5rZXlzKEp1LnBsdWdpbnMuaXRlbXMpO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaChKdS5nZXRQbHVnaW4ocltlXSkpO2xldCBpPWUucGx1Z2luc3x8W107Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPWlbZV07bi5pbmRleE9mKHIpPT09LTEmJihuLnB1c2gociksdFtyLmlkXT0hMCl9cmV0dXJue3BsdWdpbnM6bixsb2NhbElkczp0fX1mdW5jdGlvbiBadShlLHQpe3JldHVybiF0JiZlPT09ITE/bnVsbDplPT09ITA/e306ZX1mdW5jdGlvbiBRdShlLHtwbHVnaW5zOnQsbG9jYWxJZHM6bn0scixpKXtsZXQgYT1bXSxvPWUuZ2V0Q29udGV4dCgpO2ZvcihsZXQgcyBvZiB0KXtsZXQgdD1zLmlkLGM9WnUoclt0XSxpKTtjIT09bnVsbCYmYS5wdXNoKHtwbHVnaW46cyxvcHRpb25zOiR1KGUuY29uZmlnLHtwbHVnaW46cyxsb2NhbDpuW3RdfSxjLG8pfSl9cmV0dXJuIGF9ZnVuY3Rpb24gJHUoZSx7cGx1Z2luOnQsbG9jYWw6bn0scixpKXtsZXQgYT1lLnBsdWdpblNjb3BlS2V5cyh0KSxvPWUuZ2V0T3B0aW9uU2NvcGVzKHIsYSk7cmV0dXJuIG4mJnQuZGVmYXVsdHMmJm8ucHVzaCh0LmRlZmF1bHRzKSxlLmNyZWF0ZVJlc29sdmVyKG8saSxbYGBdLHtzY3JpcHRhYmxlOiExLGluZGV4YWJsZTohMSxhbGxLZXlzOiEwfSl9ZnVuY3Rpb24gZWQoZSx0KXtsZXQgbj1aLmRhdGFzZXRzW2VdfHx7fTtyZXR1cm4oKHQuZGF0YXNldHN8fHt9KVtlXXx8e30pLmluZGV4QXhpc3x8dC5pbmRleEF4aXN8fG4uaW5kZXhBeGlzfHxgeGB9ZnVuY3Rpb24gdGQoZSx0KXtsZXQgbj1lO3JldHVybiBlPT09YF9pbmRleF9gP249dDplPT09YF92YWx1ZV9gJiYobj10PT09YHhgP2B5YDpgeGApLG59ZnVuY3Rpb24gbmQoZSx0KXtyZXR1cm4gZT09PXQ/YF9pbmRleF9gOmBfdmFsdWVfYH1mdW5jdGlvbiByZChlKXtpZihlPT09YHhgfHxlPT09YHlgfHxlPT09YHJgKXJldHVybiBlfWZ1bmN0aW9uIGlkKGUpe2lmKGU9PT1gdG9wYHx8ZT09PWBib3R0b21gKXJldHVybmB4YDtpZihlPT09YGxlZnRgfHxlPT09YHJpZ2h0YClyZXR1cm5geWB9ZnVuY3Rpb24gYWQoZSwuLi50KXtpZihyZChlKSlyZXR1cm4gZTtmb3IobGV0IG4gb2YgdCl7bGV0IHQ9bi5heGlzfHxpZChuLnBvc2l0aW9uKXx8ZS5sZW5ndGg+MSYmcmQoZVswXS50b0xvd2VyQ2FzZSgpKTtpZih0KXJldHVybiB0fXRocm93IEVycm9yKGBDYW5ub3QgZGV0ZXJtaW5lIHR5cGUgb2YgJyR7ZX0nIGF4aXMuIFBsZWFzZSBwcm92aWRlICdheGlzJyBvciAncG9zaXRpb24nIG9wdGlvbi5gKX1mdW5jdGlvbiBvZChlLHQsbil7aWYoblt0K2BBeGlzSURgXT09PWUpcmV0dXJue2F4aXM6dH19ZnVuY3Rpb24gc2QoZSx0KXtpZih0LmRhdGEmJnQuZGF0YS5kYXRhc2V0cyl7bGV0IG49dC5kYXRhLmRhdGFzZXRzLmZpbHRlcih0PT50LnhBeGlzSUQ9PT1lfHx0LnlBeGlzSUQ9PT1lKTtpZihuLmxlbmd0aClyZXR1cm4gb2QoZSxgeGAsblswXSl8fG9kKGUsYHlgLG5bMF0pfXJldHVybnt9fWZ1bmN0aW9uIGNkKGUsdCl7bGV0IG49eXNbZS50eXBlXXx8e3NjYWxlczp7fX0scj10LnNjYWxlc3x8e30saT1lZChlLnR5cGUsdCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQ9PntsZXQgbz1yW3RdO2lmKCFHKG8pKXJldHVybiBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHNjYWxlIGNvbmZpZ3VyYXRpb24gZm9yIHNjYWxlOiAke3R9YCk7aWYoby5fcHJveHkpcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke3R9YCk7bGV0IHM9YWQodCxvLHNkKHQsZSksWi5zY2FsZXNbby50eXBlXSksYz1uZChzLGkpLGw9bi5zY2FsZXN8fHt9O2FbdF09aW8oT2JqZWN0LmNyZWF0ZShudWxsKSxbe2F4aXM6c30sbyxsW3NdLGxbY11dKX0pLGUuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKG49PntsZXQgaT1uLnR5cGV8fGUudHlwZSxvPW4uaW5kZXhBeGlzfHxlZChpLHQpLHM9KHlzW2ldfHx7fSkuc2NhbGVzfHx7fTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGU9PntsZXQgdD10ZChlLG8pLGk9blt0K2BBeGlzSURgXXx8dDthW2ldPWFbaV18fE9iamVjdC5jcmVhdGUobnVsbCksaW8oYVtpXSxbe2F4aXM6dH0scltpXSxzW2VdXSl9KX0pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZT0+e2xldCB0PWFbZV07aW8odCxbWi5zY2FsZXNbdC50eXBlXSxaLnNjYWxlXSl9KSxhfWZ1bmN0aW9uIGxkKGUpe2xldCB0PWUub3B0aW9uc3x8PXt9O3QucGx1Z2lucz1xKHQucGx1Z2lucyx7fSksdC5zY2FsZXM9Y2QoZSx0KX1mdW5jdGlvbiB1ZChlKXtyZXR1cm4gZXx8PXt9LGUuZGF0YXNldHM9ZS5kYXRhc2V0c3x8W10sZS5sYWJlbHM9ZS5sYWJlbHN8fFtdLGV9ZnVuY3Rpb24gZGQoZSl7cmV0dXJuIGV8fD17fSxlLmRhdGE9dWQoZS5kYXRhKSxsZChlKSxlfXZhciBmZD1uZXcgTWFwLHBkPW5ldyBTZXQ7ZnVuY3Rpb24gbWQoZSx0KXtsZXQgbj1mZC5nZXQoZSk7cmV0dXJuIG58fChuPXQoKSxmZC5zZXQoZSxuKSxwZC5hZGQobikpLG59dmFyIGhkPShlLHQsbik9PntsZXQgcj1sbyh0LG4pO3IhPT12b2lkIDAmJmUuYWRkKHIpfSxnZD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9jb25maWc9ZGQoZSksdGhpcy5fc2NvcGVDYWNoZT1uZXcgTWFwLHRoaXMuX3Jlc29sdmVyQ2FjaGU9bmV3IE1hcH1nZXQgcGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5fY29uZmlnLnBsYXRmb3JtfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy50eXBlfXNldCB0eXBlKGUpe3RoaXMuX2NvbmZpZy50eXBlPWV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fY29uZmlnLmRhdGF9c2V0IGRhdGEoZSl7dGhpcy5fY29uZmlnLmRhdGE9dWQoZSl9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fY29uZmlnLm9wdGlvbnN9c2V0IG9wdGlvbnMoZSl7dGhpcy5fY29uZmlnLm9wdGlvbnM9ZX1nZXQgcGx1Z2lucygpe3JldHVybiB0aGlzLl9jb25maWcucGx1Z2luc311cGRhdGUoKXtsZXQgZT10aGlzLl9jb25maWc7dGhpcy5jbGVhckNhY2hlKCksbGQoZSl9Y2xlYXJDYWNoZSgpe3RoaXMuX3Njb3BlQ2FjaGUuY2xlYXIoKSx0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCl9ZGF0YXNldFNjb3BlS2V5cyhlKXtyZXR1cm4gbWQoZSwoKT0+W1tgZGF0YXNldHMuJHtlfWAsYGBdXSl9ZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyhlLHQpe3JldHVybiBtZChgJHtlfS50cmFuc2l0aW9uLiR7dH1gLCgpPT5bW2BkYXRhc2V0cy4ke2V9LnRyYW5zaXRpb25zLiR7dH1gLGB0cmFuc2l0aW9ucy4ke3R9YF0sW2BkYXRhc2V0cy4ke2V9YCxgYF1dKX1kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyhlLHQpe3JldHVybiBtZChgJHtlfS0ke3R9YCwoKT0+W1tgZGF0YXNldHMuJHtlfS5lbGVtZW50cy4ke3R9YCxgZGF0YXNldHMuJHtlfWAsYGVsZW1lbnRzLiR7dH1gLGBgXV0pfXBsdWdpblNjb3BlS2V5cyhlKXtsZXQgdD1lLmlkLG49dGhpcy50eXBlO3JldHVybiBtZChgJHtufS1wbHVnaW4tJHt0fWAsKCk9PltbYHBsdWdpbnMuJHt0fWAsLi4uZS5hZGRpdGlvbmFsT3B0aW9uU2NvcGVzfHxbXV1dKX1fY2FjaGVkU2NvcGVzKGUsdCl7bGV0IG49dGhpcy5fc2NvcGVDYWNoZSxyPW4uZ2V0KGUpO3JldHVybighcnx8dCkmJihyPW5ldyBNYXAsbi5zZXQoZSxyKSkscn1nZXRPcHRpb25TY29wZXMoZSx0LG4pe2xldHtvcHRpb25zOnIsdHlwZTppfT10aGlzLGE9dGhpcy5fY2FjaGVkU2NvcGVzKGUsbiksbz1hLmdldCh0KTtpZihvKXJldHVybiBvO2xldCBzPW5ldyBTZXQ7dC5mb3JFYWNoKHQ9PntlJiYocy5hZGQoZSksdC5mb3JFYWNoKHQ9PmhkKHMsZSx0KSkpLHQuZm9yRWFjaChlPT5oZChzLHIsZSkpLHQuZm9yRWFjaChlPT5oZChzLHlzW2ldfHx7fSxlKSksdC5mb3JFYWNoKGU9PmhkKHMsWixlKSksdC5mb3JFYWNoKGU9PmhkKHMsYnMsZSkpfSk7bGV0IGM9QXJyYXkuZnJvbShzKTtyZXR1cm4gYy5sZW5ndGg9PT0wJiZjLnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSkscGQuaGFzKHQpJiZhLnNldCh0LGMpLGN9Y2hhcnRPcHRpb25TY29wZXMoKXtsZXR7b3B0aW9uczplLHR5cGU6dH09dGhpcztyZXR1cm5bZSx5c1t0XXx8e30sWi5kYXRhc2V0c1t0XXx8e30se3R5cGU6dH0sWixic119cmVzb2x2ZU5hbWVkT3B0aW9ucyhlLHQsbixyPVtgYF0pe2xldCBpPXskc2hhcmVkOiEwfSx7cmVzb2x2ZXI6YSxzdWJQcmVmaXhlczpvfT1fZCh0aGlzLl9yZXNvbHZlckNhY2hlLGUscikscz1hO2lmKHlkKGEsdCkpe2kuJHNoYXJlZD0hMSxuPXBvKG4pP24oKTpuO2xldCB0PXRoaXMuY3JlYXRlUmVzb2x2ZXIoZSxuLG8pO3M9WXMoYSxuLHQpfWZvcihsZXQgZSBvZiB0KWlbZV09c1tlXTtyZXR1cm4gaX1jcmVhdGVSZXNvbHZlcihlLHQsbj1bYGBdLHIpe2xldHtyZXNvbHZlcjppfT1fZCh0aGlzLl9yZXNvbHZlckNhY2hlLGUsbik7cmV0dXJuIEcodCk/WXMoaSx0LHZvaWQgMCxyKTppfX07ZnVuY3Rpb24gX2QoZSx0LG4pe2xldCByPWUuZ2V0KHQpO3J8fChyPW5ldyBNYXAsZS5zZXQodCxyKSk7bGV0IGk9bi5qb2luKCksYT1yLmdldChpKTtyZXR1cm4gYXx8KGE9e3Jlc29sdmVyOkpzKHQsbiksc3ViUHJlZml4ZXM6bi5maWx0ZXIoZT0+IWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhgaG92ZXJgKSl9LHIuc2V0KGksYSkpLGF9dmFyIHZkPWU9PkcoZSkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLnNvbWUodD0+cG8oZVt0XSkpO2Z1bmN0aW9uIHlkKGUsdCl7bGV0e2lzU2NyaXB0YWJsZTpuLGlzSW5kZXhhYmxlOnJ9PVhzKGUpO2ZvcihsZXQgaSBvZiB0KXtsZXQgdD1uKGkpLGE9cihpKSxvPShhfHx0KSYmZVtpXTtpZih0JiYocG8obyl8fHZkKG8pKXx8YSYmVyhvKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgYmQ9YDQuNS4xYCx4ZD1bYHRvcGAsYGJvdHRvbWAsYGxlZnRgLGByaWdodGAsYGNoYXJ0QXJlYWBdO2Z1bmN0aW9uIFNkKGUsdCl7cmV0dXJuIGU9PT1gdG9wYHx8ZT09PWBib3R0b21gfHx4ZC5pbmRleE9mKGUpPT09LTEmJnQ9PT1geGB9ZnVuY3Rpb24gQ2QoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gbltlXT09PXJbZV0/blt0XS1yW3RdOm5bZV0tcltlXX19ZnVuY3Rpb24gd2QoZSl7bGV0IHQ9ZS5jaGFydCxuPXQub3B0aW9ucy5hbmltYXRpb247dC5ub3RpZnlQbHVnaW5zKGBhZnRlclJlbmRlcmApLEoobiYmbi5vbkNvbXBsZXRlLFtlXSx0KX1mdW5jdGlvbiBUZChlKXtsZXQgdD1lLmNoYXJ0LG49dC5vcHRpb25zLmFuaW1hdGlvbjtKKG4mJm4ub25Qcm9ncmVzcyxbZV0sdCl9ZnVuY3Rpb24gRWQoZSl7cmV0dXJuIHBjKCkmJnR5cGVvZiBlPT1gc3RyaW5nYD9lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpOmUmJmUubGVuZ3RoJiYoZT1lWzBdKSxlJiZlLmNhbnZhcyYmKGU9ZS5jYW52YXMpLGV9dmFyIERkPXt9LE9kPWU9PntsZXQgdD1FZChlKTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhEZCkuZmlsdGVyKGU9PmUuY2FudmFzPT09dCkucG9wKCl9O2Z1bmN0aW9uIGtkKGUsdCxuKXtsZXQgcj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IGkgb2Ygcil7bGV0IHI9K2k7aWYocj49dCl7bGV0IGE9ZVtpXTtkZWxldGUgZVtpXSwobj4wfHxyPnQpJiYoZVtyK25dPWEpfX19ZnVuY3Rpb24gQWQoZSx0LG4scil7cmV0dXJuIW58fGUudHlwZT09PWBtb3VzZW91dGA/bnVsbDpyP3Q6ZX12YXIgamQ9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPVo7c3RhdGljIGluc3RhbmNlcz1EZDtzdGF0aWMgb3ZlcnJpZGVzPXlzO3N0YXRpYyByZWdpc3RyeT1KdTtzdGF0aWMgdmVyc2lvbj1iZDtzdGF0aWMgZ2V0Q2hhcnQ9T2Q7c3RhdGljIHJlZ2lzdGVyKC4uLmUpe0p1LmFkZCguLi5lKSxNZCgpfXN0YXRpYyB1bnJlZ2lzdGVyKC4uLmUpe0p1LnJlbW92ZSguLi5lKSxNZCgpfWNvbnN0cnVjdG9yKGUsdCl7bGV0IG49dGhpcy5jb25maWc9bmV3IGdkKHQpLHI9RWQoZSksaT1PZChyKTtpZihpKXRocm93IEVycm9yKGBDYW52YXMgaXMgYWxyZWFkeSBpbiB1c2UuIENoYXJ0IHdpdGggSUQgJ2AraS5pZCtgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEICdgK2kuY2FudmFzLmlkK2AnIGNhbiBiZSByZXVzZWQuYCk7bGV0IGE9bi5jcmVhdGVSZXNvbHZlcihuLmNoYXJ0T3B0aW9uU2NvcGVzKCksdGhpcy5nZXRDb250ZXh0KCkpO3RoaXMucGxhdGZvcm09bmV3KG4ucGxhdGZvcm18fChTdShyKSkpLHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKG4pO2xldCBvPXRoaXMucGxhdGZvcm0uYWNxdWlyZUNvbnRleHQocixhLmFzcGVjdFJhdGlvKSxzPW8mJm8uY2FudmFzLGM9cyYmcy5oZWlnaHQsbD1zJiZzLndpZHRoO2lmKHRoaXMuaWQ9WGEoKSx0aGlzLmN0eD1vLHRoaXMuY2FudmFzPXMsdGhpcy53aWR0aD1sLHRoaXMuaGVpZ2h0PWMsdGhpcy5fb3B0aW9ucz1hLHRoaXMuX2FzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX21ldGFzZXRzPVtdLHRoaXMuX3N0YWNrcz12b2lkIDAsdGhpcy5ib3hlcz1bXSx0aGlzLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXZvaWQgMCx0aGlzLmNoYXJ0QXJlYT12b2lkIDAsdGhpcy5fYWN0aXZlPVtdLHRoaXMuX2xhc3RFdmVudD12b2lkIDAsdGhpcy5fbGlzdGVuZXJzPXt9LHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwLHRoaXMuX3NvcnRlZE1ldGFzZXRzPVtdLHRoaXMuc2NhbGVzPXt9LHRoaXMuX3BsdWdpbnM9bmV3IFl1LHRoaXMuJHByb3hpZXM9e30sdGhpcy5faGlkZGVuSW5kaWNlcz17fSx0aGlzLmF0dGFjaGVkPSExLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5fZG9SZXNpemU9Wm8oZT0+dGhpcy51cGRhdGUoZSksYS5yZXNpemVEZWxheXx8MCksdGhpcy5fZGF0YUNoYW5nZXM9W10sRGRbdGhpcy5pZF09dGhpcywhb3x8IXMpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtYCk7cmV0dXJufUxjLmxpc3Rlbih0aGlzLGBjb21wbGV0ZWAsd2QpLExjLmxpc3Rlbih0aGlzLGBwcm9ncmVzc2AsVGQpLHRoaXMuX2luaXRpYWxpemUoKSx0aGlzLmF0dGFjaGVkJiZ0aGlzLnVwZGF0ZSgpfWdldCBhc3BlY3RSYXRpbygpe2xldHtvcHRpb25zOnthc3BlY3RSYXRpbzplLG1haW50YWluQXNwZWN0UmF0aW86dH0sd2lkdGg6bixoZWlnaHQ6cixfYXNwZWN0UmF0aW86aX09dGhpcztyZXR1cm4gVShlKT90JiZpP2k6cj9uL3I6bnVsbDplfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuY29uZmlnLmRhdGF9c2V0IGRhdGEoZSl7dGhpcy5jb25maWcuZGF0YT1lfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX29wdGlvbnN9c2V0IG9wdGlvbnMoZSl7dGhpcy5jb25maWcub3B0aW9ucz1lfWdldCByZWdpc3RyeSgpe3JldHVybiBKdX1faW5pdGlhbGl6ZSgpe3JldHVybiB0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUluaXRgKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLnJlc2l6ZSgpOkVjKHRoaXMsdGhpcy5vcHRpb25zLmRldmljZVBpeGVsUmF0aW8pLHRoaXMuYmluZEV2ZW50cygpLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJJbml0YCksdGhpc31jbGVhcigpe3JldHVybiBEcyh0aGlzLmNhbnZhcyx0aGlzLmN0eCksdGhpc31zdG9wKCl7cmV0dXJuIExjLnN0b3AodGhpcyksdGhpc31yZXNpemUoZSx0KXtMYy5ydW5uaW5nKHRoaXMpP3RoaXMuX3Jlc2l6ZUJlZm9yZURyYXc9e3dpZHRoOmUsaGVpZ2h0OnR9OnRoaXMuX3Jlc2l6ZShlLHQpfV9yZXNpemUoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMscj10aGlzLmNhbnZhcyxpPW4ubWFpbnRhaW5Bc3BlY3RSYXRpbyYmdGhpcy5hc3BlY3RSYXRpbyxhPXRoaXMucGxhdGZvcm0uZ2V0TWF4aW11bVNpemUocixlLHQsaSksbz1uLmRldmljZVBpeGVsUmF0aW98fHRoaXMucGxhdGZvcm0uZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLHM9dGhpcy53aWR0aD9gcmVzaXplYDpgYXR0YWNoYDt0aGlzLndpZHRoPWEud2lkdGgsdGhpcy5oZWlnaHQ9YS5oZWlnaHQsdGhpcy5fYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxFYyh0aGlzLG8sITApJiYodGhpcy5ub3RpZnlQbHVnaW5zKGByZXNpemVgLHtzaXplOmF9KSxKKG4ub25SZXNpemUsW3RoaXMsYV0sdGhpcyksdGhpcy5hdHRhY2hlZCYmdGhpcy5fZG9SZXNpemUocykmJnRoaXMucmVuZGVyKCkpfWVuc3VyZVNjYWxlc0hhdmVJRHMoKXtZKHRoaXMub3B0aW9ucy5zY2FsZXN8fHt9LChlLHQpPT57ZS5pZD10fSl9YnVpbGRPclVwZGF0ZVNjYWxlcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PWUuc2NhbGVzLG49dGhpcy5zY2FsZXMscj1PYmplY3Qua2V5cyhuKS5yZWR1Y2UoKGUsdCk9PihlW3RdPSExLGUpLHt9KSxpPVtdO3QmJihpPWkuY29uY2F0KE9iamVjdC5rZXlzKHQpLm1hcChlPT57bGV0IG49dFtlXSxyPWFkKGUsbiksaT1yPT09YHJgLGE9cj09PWB4YDtyZXR1cm57b3B0aW9uczpuLGRwb3NpdGlvbjppP2BjaGFydEFyZWFgOmE/YGJvdHRvbWA6YGxlZnRgLGR0eXBlOmk/YHJhZGlhbExpbmVhcmA6YT9gY2F0ZWdvcnlgOmBsaW5lYXJgfX0pKSksWShpLHQ9PntsZXQgaT10Lm9wdGlvbnMsYT1pLmlkLG89YWQoYSxpKSxzPXEoaS50eXBlLHQuZHR5cGUpOyhpLnBvc2l0aW9uPT09dm9pZCAwfHxTZChpLnBvc2l0aW9uLG8pIT09U2QodC5kcG9zaXRpb24pKSYmKGkucG9zaXRpb249dC5kcG9zaXRpb24pLHJbYV09ITA7bGV0IGM9bnVsbDthIGluIG4mJm5bYV0udHlwZT09PXM/Yz1uW2FdOihjPW5ldyhKdS5nZXRTY2FsZShzKSkoe2lkOmEsdHlwZTpzLGN0eDp0aGlzLmN0eCxjaGFydDp0aGlzfSksbltjLmlkXT1jKSxjLmluaXQoaSxlKX0pLFkociwoZSx0KT0+e2V8fGRlbGV0ZSBuW3RdfSksWShuLGU9PnskbC5jb25maWd1cmUodGhpcyxlLGUub3B0aW9ucyksJGwuYWRkQm94KHRoaXMsZSl9KX1fdXBkYXRlTWV0YXNldHMoKXtsZXQgZT10aGlzLl9tZXRhc2V0cyx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj1lLmxlbmd0aDtpZihlLnNvcnQoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCksbj50KXtmb3IobGV0IGU9dDtlPG47KytlKXRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShlKTtlLnNwbGljZSh0LG4tdCl9dGhpcy5fc29ydGVkTWV0YXNldHM9ZS5zbGljZSgwKS5zb3J0KENkKGBvcmRlcmAsYGluZGV4YCkpfV9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpe2xldHtfbWV0YXNldHM6ZSxkYXRhOntkYXRhc2V0czp0fX09dGhpcztlLmxlbmd0aD50Lmxlbmd0aCYmZGVsZXRlIHRoaXMuX3N0YWNrcyxlLmZvckVhY2goKGUsbik9Pnt0LmZpbHRlcih0PT50PT09ZS5fZGF0YXNldCkubGVuZ3RoPT09MCYmdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKG4pfSl9YnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCl7bGV0IGU9W10sdD10aGlzLmRhdGEuZGF0YXNldHMsbixyO2Zvcih0aGlzLl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpLG49MCxyPXQubGVuZ3RoO248cjtuKyspe2xldCByPXRbbl0saT10aGlzLmdldERhdGFzZXRNZXRhKG4pLGE9ci50eXBlfHx0aGlzLmNvbmZpZy50eXBlO2lmKGkudHlwZSYmaS50eXBlIT09YSYmKHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShuKSxpPXRoaXMuZ2V0RGF0YXNldE1ldGEobikpLGkudHlwZT1hLGkuaW5kZXhBeGlzPXIuaW5kZXhBeGlzfHxlZChhLHRoaXMub3B0aW9ucyksaS5vcmRlcj1yLm9yZGVyfHwwLGkuaW5kZXg9bixpLmxhYmVsPWBgK3IubGFiZWwsaS52aXNpYmxlPXRoaXMuaXNEYXRhc2V0VmlzaWJsZShuKSxpLmNvbnRyb2xsZXIpaS5jb250cm9sbGVyLnVwZGF0ZUluZGV4KG4pLGkuY29udHJvbGxlci5saW5rU2NhbGVzKCk7ZWxzZXtsZXQgdD1KdS5nZXRDb250cm9sbGVyKGEpLHtkYXRhc2V0RWxlbWVudFR5cGU6cixkYXRhRWxlbWVudFR5cGU6b309Wi5kYXRhc2V0c1thXTtPYmplY3QuYXNzaWduKHQse2RhdGFFbGVtZW50VHlwZTpKdS5nZXRFbGVtZW50KG8pLGRhdGFzZXRFbGVtZW50VHlwZTpyJiZKdS5nZXRFbGVtZW50KHIpfSksaS5jb250cm9sbGVyPW5ldyB0KHRoaXMsbiksZS5wdXNoKGkuY29udHJvbGxlcil9fXJldHVybiB0aGlzLl91cGRhdGVNZXRhc2V0cygpLGV9X3Jlc2V0RWxlbWVudHMoKXtZKHRoaXMuZGF0YS5kYXRhc2V0cywoZSx0KT0+e3RoaXMuZ2V0RGF0YXNldE1ldGEodCkuY29udHJvbGxlci5yZXNldCgpfSx0aGlzKX1yZXNldCgpe3RoaXMuX3Jlc2V0RWxlbWVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2V0YCl9dXBkYXRlKGUpe2xldCB0PXRoaXMuY29uZmlnO3QudXBkYXRlKCk7bGV0IG49dGhpcy5fb3B0aW9ucz10LmNyZWF0ZVJlc29sdmVyKHQuY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9IW4uYW5pbWF0aW9uO2lmKHRoaXMuX3VwZGF0ZVNjYWxlcygpLHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpLHRoaXMuX3VwZGF0ZUhpZGRlbkluZGljZXMoKSx0aGlzLl9wbHVnaW5zLmludmFsaWRhdGUoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVVwZGF0ZWAse21vZGU6ZSxjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IGk9dGhpcy5idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUVsZW1lbnRzVXBkYXRlYCk7bGV0IGE9MDtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0O2UrKyl7bGV0e2NvbnRyb2xsZXI6dH09dGhpcy5nZXREYXRhc2V0TWV0YShlKSxuPSFyJiZpLmluZGV4T2YodCk9PT0tMTt0LmJ1aWxkT3JVcGRhdGVFbGVtZW50cyhuKSxhPU1hdGgubWF4KCt0LmdldE1heE92ZXJmbG93KCksYSl9YT10aGlzLl9taW5QYWRkaW5nPW4ubGF5b3V0LmF1dG9QYWRkaW5nP2E6MCx0aGlzLl91cGRhdGVMYXlvdXQoYSkscnx8WShpLGU9PntlLnJlc2V0KCl9KSx0aGlzLl91cGRhdGVEYXRhc2V0cyhlKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyVXBkYXRlYCx7bW9kZTplfSksdGhpcy5fbGF5ZXJzLnNvcnQoQ2QoYHpgLGBfaWR4YCkpO2xldHtfYWN0aXZlOm8sX2xhc3RFdmVudDpzfT10aGlzO3M/dGhpcy5fZXZlbnRIYW5kbGVyKHMsITApOm8ubGVuZ3RoJiZ0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhvLG8sITApLHRoaXMucmVuZGVyKCl9X3VwZGF0ZVNjYWxlcygpe1kodGhpcy5zY2FsZXMsZT0+eyRsLnJlbW92ZUJveCh0aGlzLGUpfSksdGhpcy5lbnN1cmVTY2FsZXNIYXZlSURzKCksdGhpcy5idWlsZE9yVXBkYXRlU2NhbGVzKCl9X2NoZWNrRXZlbnRCaW5kaW5ncygpe2xldCBlPXRoaXMub3B0aW9uczsoIW1vKG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKSksbmV3IFNldChlLmV2ZW50cykpfHwhIXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMhPT1lLnJlc3BvbnNpdmUpJiYodGhpcy51bmJpbmRFdmVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSl9X3VwZGF0ZUhpZGRlbkluZGljZXMoKXtsZXR7X2hpZGRlbkluZGljZXM6ZX09dGhpcyx0PXRoaXMuX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpfHxbXTtmb3IobGV0e21ldGhvZDpuLHN0YXJ0OnIsY291bnQ6aX1vZiB0KWtkKGUscixuPT09YF9yZW1vdmVFbGVtZW50c2A/LWk6aSl9X2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpe2xldCBlPXRoaXMuX2RhdGFDaGFuZ2VzO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuO3RoaXMuX2RhdGFDaGFuZ2VzPVtdO2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj10PT5uZXcgU2V0KGUuZmlsdGVyKGU9PmVbMF09PT10KS5tYXAoKGUsdCk9PnQrYCxgK2Uuc3BsaWNlKDEpLmpvaW4oYCxgKSkpLHI9bigwKTtmb3IobGV0IGU9MTtlPHQ7ZSsrKWlmKCFtbyhyLG4oZSkpKXJldHVybjtyZXR1cm4gQXJyYXkuZnJvbShyKS5tYXAoZT0+ZS5zcGxpdChgLGApKS5tYXAoZT0+KHttZXRob2Q6ZVsxXSxzdGFydDorZVsyXSxjb3VudDorZVszXX0pKX1fdXBkYXRlTGF5b3V0KGUpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlTGF5b3V0YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuOyRsLnVwZGF0ZSh0aGlzLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZSk7bGV0IHQ9dGhpcy5jaGFydEFyZWEsbj10LndpZHRoPD0wfHx0LmhlaWdodDw9MDt0aGlzLl9sYXllcnM9W10sWSh0aGlzLmJveGVzLGU9PntuJiZlLnBvc2l0aW9uPT09YGNoYXJ0QXJlYWB8fChlLmNvbmZpZ3VyZSYmZS5jb25maWd1cmUoKSx0aGlzLl9sYXllcnMucHVzaCguLi5lLl9sYXllcnMoKSkpfSx0aGlzKSx0aGlzLl9sYXllcnMuZm9yRWFjaCgoZSx0KT0+e2UuX2lkeD10fSksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckxheW91dGApfV91cGRhdGVEYXRhc2V0cyhlKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzVXBkYXRlYCx7bW9kZTplLGNhbmNlbGFibGU6ITB9KSE9PSExKXtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIuY29uZmlndXJlKCk7Zm9yKGxldCB0PTAsbj10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8bjsrK3QpdGhpcy5fdXBkYXRlRGF0YXNldCh0LHBvKGUpP2Uoe2RhdGFzZXRJbmRleDp0fSk6ZSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRzVXBkYXRlYCx7bW9kZTplfSl9fV91cGRhdGVEYXRhc2V0KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKSxyPXttZXRhOm4saW5kZXg6ZSxtb2RlOnQsY2FuY2VsYWJsZTohMH07dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0VXBkYXRlYCxyKSE9PSExJiYobi5jb250cm9sbGVyLl91cGRhdGUodCksci5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0VXBkYXRlYCxyKSl9cmVuZGVyKCl7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVSZW5kZXJgLHtjYW5jZWxhYmxlOiEwfSkhPT0hMSYmKExjLmhhcyh0aGlzKT90aGlzLmF0dGFjaGVkJiYhTGMucnVubmluZyh0aGlzKSYmTGMuc3RhcnQodGhpcyk6KHRoaXMuZHJhdygpLHdkKHtjaGFydDp0aGlzfSkpKX1kcmF3KCl7bGV0IGU7aWYodGhpcy5fcmVzaXplQmVmb3JlRHJhdyl7bGV0e3dpZHRoOmUsaGVpZ2h0OnR9PXRoaXMuX3Jlc2l6ZUJlZm9yZURyYXc7dGhpcy5fcmVzaXplQmVmb3JlRHJhdz1udWxsLHRoaXMuX3Jlc2l6ZShlLHQpfWlmKHRoaXMuY2xlYXIoKSx0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MHx8dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEcmF3YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCB0PXRoaXMuX2xheWVycztmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uejw9MDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTtmb3IodGhpcy5fZHJhd0RhdGFzZXRzKCk7ZTx0Lmxlbmd0aDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRHJhd2ApfV9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZSl7bGV0IHQ9dGhpcy5fc29ydGVkTWV0YXNldHMsbj1bXSxyLGk7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3Ipe2xldCBpPXRbcl07KCFlfHxpLnZpc2libGUpJiZuLnB1c2goaSl9cmV0dXJuIG59Z2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpe3JldHVybiB0aGlzLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoITApfV9kcmF3RGF0YXNldHMoKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzRHJhd2Ase2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgZT10aGlzLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLl9kcmF3RGF0YXNldChlW3RdKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldHNEcmF3YCl9X2RyYXdEYXRhc2V0KGUpe2xldCB0PXRoaXMuY3R4LG49e21ldGE6ZSxpbmRleDplLmluZGV4LGNhbmNlbGFibGU6ITB9LHI9SWModGhpcyxlKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXREcmF3YCxuKSE9PSExJiYociYmanModCxyKSxlLmNvbnRyb2xsZXIuZHJhdygpLHImJk1zKHQpLG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldERyYXdgLG4pKX1pc1BvaW50SW5BcmVhKGUpe3JldHVybiBBcyhlLHRoaXMuY2hhcnRBcmVhLHRoaXMuX21pblBhZGRpbmcpfWdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSx0LG4scil7bGV0IGk9SWwubW9kZXNbdF07cmV0dXJuIHR5cGVvZiBpPT1gZnVuY3Rpb25gP2kodGhpcyxlLG4scik6W119Z2V0RGF0YXNldE1ldGEoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdLG49dGhpcy5fbWV0YXNldHMscj1uLmZpbHRlcihlPT5lJiZlLl9kYXRhc2V0PT09dCkucG9wKCk7cmV0dXJuIHJ8fChyPXt0eXBlOm51bGwsZGF0YTpbXSxkYXRhc2V0Om51bGwsY29udHJvbGxlcjpudWxsLGhpZGRlbjpudWxsLHhBeGlzSUQ6bnVsbCx5QXhpc0lEOm51bGwsb3JkZXI6dCYmdC5vcmRlcnx8MCxpbmRleDplLF9kYXRhc2V0OnQsX3BhcnNlZDpbXSxfc29ydGVkOiExfSxuLnB1c2gocikpLHJ9Z2V0Q29udGV4dCgpe3JldHVybiB0aGlzLiRjb250ZXh0fHw9cXMobnVsbCx7Y2hhcnQ6dGhpcyx0eXBlOmBjaGFydGB9KX1nZXRWaXNpYmxlRGF0YXNldENvdW50KCl7cmV0dXJuIHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmxlbmd0aH1pc0RhdGFzZXRWaXNpYmxlKGUpe2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0c1tlXTtpZighdClyZXR1cm4hMTtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO3JldHVybiB0eXBlb2Ygbi5oaWRkZW49PWBib29sZWFuYD8hbi5oaWRkZW46IXQuaGlkZGVufXNldERhdGFzZXRWaXNpYmlsaXR5KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKTtuLmhpZGRlbj0hdH10b2dnbGVEYXRhVmlzaWJpbGl0eShlKXt0aGlzLl9oaWRkZW5JbmRpY2VzW2VdPSF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfWdldERhdGFWaXNpYmlsaXR5KGUpe3JldHVybiF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfV91cGRhdGVWaXNpYmlsaXR5KGUsdCxuKXtsZXQgcj1uP2BzaG93YDpgaGlkZWAsaT10aGlzLmdldERhdGFzZXRNZXRhKGUpLGE9aS5jb250cm9sbGVyLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAscik7Zm8odCk/KGkuZGF0YVt0XS5oaWRkZW49IW4sdGhpcy51cGRhdGUoKSk6KHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZSxuKSxhLnVwZGF0ZShpLHt2aXNpYmxlOm59KSx0aGlzLnVwZGF0ZSh0PT50LmRhdGFzZXRJbmRleD09PWU/cjp2b2lkIDApKX1oaWRlKGUsdCl7dGhpcy5fdXBkYXRlVmlzaWJpbGl0eShlLHQsITEpfXNob3coZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMCl9X2Rlc3Ryb3lEYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLl9tZXRhc2V0c1tlXTt0JiZ0LmNvbnRyb2xsZXImJnQuY29udHJvbGxlci5fZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tlXX1fc3RvcCgpe2xldCBlLHQ7Zm9yKHRoaXMuc3RvcCgpLExjLnJlbW92ZSh0aGlzKSxlPTAsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO2U8dDsrK2UpdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGUpfWRlc3Ryb3koKXt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURlc3Ryb3lgKTtsZXR7Y2FudmFzOmUsY3R4OnR9PXRoaXM7dGhpcy5fc3RvcCgpLHRoaXMuY29uZmlnLmNsZWFyQ2FjaGUoKSxlJiYodGhpcy51bmJpbmRFdmVudHMoKSxEcyhlLHQpLHRoaXMucGxhdGZvcm0ucmVsZWFzZUNvbnRleHQodCksdGhpcy5jYW52YXM9bnVsbCx0aGlzLmN0eD1udWxsKSxkZWxldGUgRGRbdGhpcy5pZF0sdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRlc3Ryb3lgKX10b0Jhc2U2NEltYWdlKC4uLmUpe3JldHVybiB0aGlzLmNhbnZhcy50b0RhdGFVUkwoLi4uZSl9YmluZEV2ZW50cygpe3RoaXMuYmluZFVzZXJFdmVudHMoKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLmJpbmRSZXNwb25zaXZlRXZlbnRzKCk6dGhpcy5hdHRhY2hlZD0hMH1iaW5kVXNlckV2ZW50cygpe2xldCBlPXRoaXMuX2xpc3RlbmVycyx0PXRoaXMucGxhdGZvcm0sbj0obixyKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZVtuXT1yfSxyPShlLHQsbik9PntlLm9mZnNldFg9dCxlLm9mZnNldFk9bix0aGlzLl9ldmVudEhhbmRsZXIoZSl9O1kodGhpcy5vcHRpb25zLmV2ZW50cyxlPT5uKGUscikpfWJpbmRSZXNwb25zaXZlRXZlbnRzKCl7dGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVyc3x8PXt9O2xldCBlPXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsdD10aGlzLnBsYXRmb3JtLG49KG4scik9Pnt0LmFkZEV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGVbbl09cn0scj0obixyKT0+e2Vbbl0mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGRlbGV0ZSBlW25dKX0saT0oZSx0KT0+e3RoaXMuY2FudmFzJiZ0aGlzLnJlc2l6ZShlLHQpfSxhLG89KCk9PntyKGBhdHRhY2hgLG8pLHRoaXMuYXR0YWNoZWQ9ITAsdGhpcy5yZXNpemUoKSxuKGByZXNpemVgLGkpLG4oYGRldGFjaGAsYSl9O2E9KCk9Pnt0aGlzLmF0dGFjaGVkPSExLHIoYHJlc2l6ZWAsaSksdGhpcy5fc3RvcCgpLHRoaXMuX3Jlc2l6ZSgwLDApLG4oYGF0dGFjaGAsbyl9LHQuaXNBdHRhY2hlZCh0aGlzLmNhbnZhcyk/bygpOmEoKX11bmJpbmRFdmVudHMoKXtZKHRoaXMuX2xpc3RlbmVycywoZSx0KT0+e3RoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLHQsZSl9KSx0aGlzLl9saXN0ZW5lcnM9e30sWSh0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzLChlLHQpPT57dGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsdCxlKX0pLHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwfXVwZGF0ZUhvdmVyU3R5bGUoZSx0LG4pe2xldCByPW4/YHNldGA6YHJlbW92ZWAsaSxhLG8scztmb3IodD09PWBkYXRhc2V0YCYmKGk9dGhpcy5nZXREYXRhc2V0TWV0YShlWzBdLmRhdGFzZXRJbmRleCksaS5jb250cm9sbGVyW2BfYCtyK2BEYXRhc2V0SG92ZXJTdHlsZWBdKCkpLG89MCxzPWUubGVuZ3RoO288czsrK28pe2E9ZVtvXTtsZXQgdD1hJiZ0aGlzLmdldERhdGFzZXRNZXRhKGEuZGF0YXNldEluZGV4KS5jb250cm9sbGVyO3QmJnRbcitgSG92ZXJTdHlsZWBdKGEuZWxlbWVudCxhLmRhdGFzZXRJbmRleCxhLmluZGV4KX19Z2V0QWN0aXZlRWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfHxbXX1zZXRBY3RpdmVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9hY3RpdmV8fFtdLG49ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBObyBkYXRhc2V0IGZvdW5kIGF0IGluZGV4IGArZSk7cmV0dXJue2RhdGFzZXRJbmRleDplLGVsZW1lbnQ6bi5kYXRhW3RdLGluZGV4OnR9fSk7JGEobix0KXx8KHRoaXMuX2FjdGl2ZT1uLHRoaXMuX2xhc3RFdmVudD1udWxsLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG4sdCkpfW5vdGlmeVBsdWdpbnMoZSx0LG4pe3JldHVybiB0aGlzLl9wbHVnaW5zLm5vdGlmeSh0aGlzLGUsdCxuKX1pc1BsdWdpbkVuYWJsZWQoZSl7cmV0dXJuIHRoaXMuX3BsdWdpbnMuX2NhY2hlLmZpbHRlcih0PT50LnBsdWdpbi5pZD09PWUpLmxlbmd0aD09PTF9X3VwZGF0ZUhvdmVyU3R5bGVzKGUsdCxuKXtsZXQgcj10aGlzLm9wdGlvbnMuaG92ZXIsaT0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCkpLGE9aSh0LGUpLG89bj9lOmkoZSx0KTthLmxlbmd0aCYmdGhpcy51cGRhdGVIb3ZlclN0eWxlKGEsci5tb2RlLCExKSxvLmxlbmd0aCYmci5tb2RlJiZ0aGlzLnVwZGF0ZUhvdmVyU3R5bGUobyxyLm1vZGUsITApfV9ldmVudEhhbmRsZXIoZSx0KXtsZXQgbj17ZXZlbnQ6ZSxyZXBsYXk6dCxjYW5jZWxhYmxlOiEwLGluQ2hhcnRBcmVhOnRoaXMuaXNQb2ludEluQXJlYShlKX0scj10PT4odC5vcHRpb25zLmV2ZW50c3x8dGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVFdmVudGAsbixyKT09PSExKXJldHVybjtsZXQgaT10aGlzLl9oYW5kbGVFdmVudChlLHQsbi5pbkNoYXJ0QXJlYSk7cmV0dXJuIG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRXZlbnRgLG4sciksKGl8fG4uY2hhbmdlZCkmJnRoaXMucmVuZGVyKCksdGhpc31faGFuZGxlRXZlbnQoZSx0LG4pe2xldHtfYWN0aXZlOnI9W10sb3B0aW9uczppfT10aGlzLGE9dCxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUscixuLGEpLHM9aG8oZSksYz1BZChlLHRoaXMuX2xhc3RFdmVudCxuLHMpO24mJih0aGlzLl9sYXN0RXZlbnQ9bnVsbCxKKGkub25Ib3ZlcixbZSxvLHRoaXNdLHRoaXMpLHMmJkooaS5vbkNsaWNrLFtlLG8sdGhpc10sdGhpcykpO2xldCBsPSEkYShvLHIpO3JldHVybihsfHx0KSYmKHRoaXMuX2FjdGl2ZT1vLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG8scix0KSksdGhpcy5fbGFzdEV2ZW50PWMsbH1fZ2V0QWN0aXZlRWxlbWVudHMoZSx0LG4scil7aWYoZS50eXBlPT09YG1vdXNlb3V0YClyZXR1cm5bXTtpZighbilyZXR1cm4gdDtsZXQgaT10aGlzLm9wdGlvbnMuaG92ZXI7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLGkubW9kZSxpLHIpfX07ZnVuY3Rpb24gTWQoKXtyZXR1cm4gWShqZC5pbnN0YW5jZXMsZT0+ZS5fcGx1Z2lucy5pbnZhbGlkYXRlKCkpfWZ1bmN0aW9uIE5kKGUsdCl7bGV0e3g6bix5OnIsYmFzZTppLHdpZHRoOmEsaGVpZ2h0Om99PWUuZ2V0UHJvcHMoW2B4YCxgeWAsYGJhc2VgLGB3aWR0aGAsYGhlaWdodGBdLHQpLHMsYyxsLHUsZDtyZXR1cm4gZS5ob3Jpem9udGFsPyhkPW8vMixzPU1hdGgubWluKG4saSksYz1NYXRoLm1heChuLGkpLGw9ci1kLHU9citkKTooZD1hLzIscz1uLWQsYz1uK2QsbD1NYXRoLm1pbihyLGkpLHU9TWF0aC5tYXgocixpKSkse2xlZnQ6cyx0b3A6bCxyaWdodDpjLGJvdHRvbTp1fX1mdW5jdGlvbiBQZChlLHQsbixyKXtyZXR1cm4gZT8wOlJvKHQsbixyKX1mdW5jdGlvbiBGZChlLHQsbil7bGV0IHI9ZS5vcHRpb25zLmJvcmRlcldpZHRoLGk9ZS5ib3JkZXJTa2lwcGVkLGE9VXMocik7cmV0dXJue3Q6UGQoaS50b3AsYS50b3AsMCxuKSxyOlBkKGkucmlnaHQsYS5yaWdodCwwLHQpLGI6UGQoaS5ib3R0b20sYS5ib3R0b20sMCxuKSxsOlBkKGkubGVmdCxhLmxlZnQsMCx0KX19ZnVuY3Rpb24gSWQoZSx0LG4pe2xldHtlbmFibGVCb3JkZXJSYWRpdXM6cn09ZS5nZXRQcm9wcyhbYGVuYWJsZUJvcmRlclJhZGl1c2BdKSxpPWUub3B0aW9ucy5ib3JkZXJSYWRpdXMsYT1XcyhpKSxvPU1hdGgubWluKHQsbikscz1lLmJvcmRlclNraXBwZWQsYz1yfHxHKGkpO3JldHVybnt0b3BMZWZ0OlBkKCFjfHxzLnRvcHx8cy5sZWZ0LGEudG9wTGVmdCwwLG8pLHRvcFJpZ2h0OlBkKCFjfHxzLnRvcHx8cy5yaWdodCxhLnRvcFJpZ2h0LDAsbyksYm90dG9tTGVmdDpQZCghY3x8cy5ib3R0b218fHMubGVmdCxhLmJvdHRvbUxlZnQsMCxvKSxib3R0b21SaWdodDpQZCghY3x8cy5ib3R0b218fHMucmlnaHQsYS5ib3R0b21SaWdodCwwLG8pfX1mdW5jdGlvbiBMZChlKXtsZXQgdD1OZChlKSxuPXQucmlnaHQtdC5sZWZ0LHI9dC5ib3R0b20tdC50b3AsaT1GZChlLG4vMixyLzIpLGE9SWQoZSxuLzIsci8yKTtyZXR1cm57b3V0ZXI6e3g6dC5sZWZ0LHk6dC50b3AsdzpuLGg6cixyYWRpdXM6YX0saW5uZXI6e3g6dC5sZWZ0K2kubCx5OnQudG9wK2kudCx3Om4taS5sLWkucixoOnItaS50LWkuYixyYWRpdXM6e3RvcExlZnQ6TWF0aC5tYXgoMCxhLnRvcExlZnQtTWF0aC5tYXgoaS50LGkubCkpLHRvcFJpZ2h0Ok1hdGgubWF4KDAsYS50b3BSaWdodC1NYXRoLm1heChpLnQsaS5yKSksYm90dG9tTGVmdDpNYXRoLm1heCgwLGEuYm90dG9tTGVmdC1NYXRoLm1heChpLmIsaS5sKSksYm90dG9tUmlnaHQ6TWF0aC5tYXgoMCxhLmJvdHRvbVJpZ2h0LU1hdGgubWF4KGkuYixpLnIpKX19fX1mdW5jdGlvbiBSZChlLHQsbixyKXtsZXQgaT10PT09bnVsbCxhPW49PT1udWxsLG89ZSYmIShpJiZhKSYmTmQoZSxyKTtyZXR1cm4gbyYmKGl8fEJvKHQsby5sZWZ0LG8ucmlnaHQpKSYmKGF8fEJvKG4sby50b3Asby5ib3R0b20pKX1mdW5jdGlvbiB6ZChlKXtyZXR1cm4gZS50b3BMZWZ0fHxlLnRvcFJpZ2h0fHxlLmJvdHRvbUxlZnR8fGUuYm90dG9tUmlnaHR9ZnVuY3Rpb24gQmQoZSx0KXtlLnJlY3QodC54LHQueSx0LncsdC5oKX1mdW5jdGlvbiBWZChlLHQsbj17fSl7bGV0IHI9ZS54PT09bi54PzA6LXQsaT1lLnk9PT1uLnk/MDotdCxhPShlLngrZS53PT09bi54K24udz8wOnQpLXIsbz0oZS55K2UuaD09PW4ueStuLmg/MDp0KS1pO3JldHVybnt4OmUueCtyLHk6ZS55K2ksdzplLncrYSxoOmUuaCtvLHJhZGl1czplLnJhZGl1c319dmFyIEhkPWNsYXNzIGV4dGVuZHMgQ3V7c3RhdGljIGlkPWBiYXJgO3N0YXRpYyBkZWZhdWx0cz17Ym9yZGVyU2tpcHBlZDpgc3RhcnRgLGJvcmRlcldpZHRoOjAsYm9yZGVyUmFkaXVzOjAsaW5mbGF0ZUFtb3VudDpgYXV0b2AscG9pbnRTdHlsZTp2b2lkIDB9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXtiYWNrZ3JvdW5kQ29sb3I6YGJhY2tncm91bmRDb2xvcmAsYm9yZGVyQ29sb3I6YGJvcmRlckNvbG9yYH07Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuaG9yaXpvbnRhbD12b2lkIDAsdGhpcy5iYXNlPXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5pbmZsYXRlQW1vdW50PXZvaWQgMCxlJiZPYmplY3QuYXNzaWduKHRoaXMsZSl9ZHJhdyhlKXtsZXR7aW5mbGF0ZUFtb3VudDp0LG9wdGlvbnM6e2JvcmRlckNvbG9yOm4sYmFja2dyb3VuZENvbG9yOnJ9fT10aGlzLHtpbm5lcjppLG91dGVyOmF9PUxkKHRoaXMpLG89emQoYS5yYWRpdXMpP0xzOkJkO2Uuc2F2ZSgpLChhLnchPT1pLnd8fGEuaCE9PWkuaCkmJihlLmJlZ2luUGF0aCgpLG8oZSxWZChhLHQsaSkpLGUuY2xpcCgpLG8oZSxWZChpLC10LGEpKSxlLmZpbGxTdHlsZT1uLGUuZmlsbChgZXZlbm9kZGApKSxlLmJlZ2luUGF0aCgpLG8oZSxWZChpLHQpKSxlLmZpbGxTdHlsZT1yLGUuZmlsbCgpLGUucmVzdG9yZSgpfWluUmFuZ2UoZSx0LG4pe3JldHVybiBSZCh0aGlzLGUsdCxuKX1pblhSYW5nZShlLHQpe3JldHVybiBSZCh0aGlzLGUsbnVsbCx0KX1pbllSYW5nZShlLHQpe3JldHVybiBSZCh0aGlzLG51bGwsZSx0KX1nZXRDZW50ZXJQb2ludChlKXtsZXR7eDp0LHk6bixiYXNlOnIsaG9yaXpvbnRhbDppfT10aGlzLmdldFByb3BzKFtgeGAsYHlgLGBiYXNlYCxgaG9yaXpvbnRhbGBdLGUpO3JldHVybnt4Omk/KHQrcikvMjp0LHk6aT9uOihuK3IpLzJ9fWdldFJhbmdlKGUpe3JldHVybiBlPT09YHhgP3RoaXMud2lkdGgvMjp0aGlzLmhlaWdodC8yfX0sVWQ9KGUsdCk9PntsZXR7Ym94SGVpZ2h0Om49dCxib3hXaWR0aDpyPXR9PWU7cmV0dXJuIGUudXNlUG9pbnRTdHlsZSYmKG49TWF0aC5taW4obix0KSxyPWUucG9pbnRTdHlsZVdpZHRofHxNYXRoLm1pbihyLHQpKSx7Ym94V2lkdGg6cixib3hIZWlnaHQ6bixpdGVtSGVpZ2h0Ok1hdGgubWF4KHQsbil9fSxXZD0oZSx0KT0+ZSE9PW51bGwmJnQhPT1udWxsJiZlLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCxHZD1jbGFzcyBleHRlbmRzIEN1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fYWRkZWQ9ITEsdGhpcy5sZWdlbmRIaXRCb3hlcz1bXSx0aGlzLl9ob3ZlcmVkSXRlbT1udWxsLHRoaXMuZG91Z2hudXRNb2RlPSExLHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLm9wdGlvbnM9ZS5vcHRpb25zLHRoaXMuY3R4PWUuY3R4LHRoaXMubGVnZW5kSXRlbXM9dm9pZCAwLHRoaXMuY29sdW1uU2l6ZXM9dm9pZCAwLHRoaXMubGluZVdpZHRocz12b2lkIDAsdGhpcy5tYXhIZWlnaHQ9dm9pZCAwLHRoaXMubWF4V2lkdGg9dm9pZCAwLHRoaXMudG9wPXZvaWQgMCx0aGlzLmJvdHRvbT12b2lkIDAsdGhpcy5sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5fbWFyZ2lucz12b2lkIDAsdGhpcy5wb3NpdGlvbj12b2lkIDAsdGhpcy53ZWlnaHQ9dm9pZCAwLHRoaXMuZnVsbFNpemU9dm9pZCAwfXVwZGF0ZShlLHQsbil7dGhpcy5tYXhXaWR0aD1lLHRoaXMubWF4SGVpZ2h0PXQsdGhpcy5fbWFyZ2lucz1uLHRoaXMuc2V0RGltZW5zaW9ucygpLHRoaXMuYnVpbGRMYWJlbHMoKSx0aGlzLmZpdCgpfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PXRoaXMuX21hcmdpbnMubGVmdCx0aGlzLnJpZ2h0PXRoaXMud2lkdGgpOih0aGlzLmhlaWdodD10aGlzLm1heEhlaWdodCx0aGlzLnRvcD10aGlzLl9tYXJnaW5zLnRvcCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCl9YnVpbGRMYWJlbHMoKXtsZXQgZT10aGlzLm9wdGlvbnMubGFiZWxzfHx7fSx0PUooZS5nZW5lcmF0ZUxhYmVscyxbdGhpcy5jaGFydF0sdGhpcyl8fFtdO2UuZmlsdGVyJiYodD10LmZpbHRlcih0PT5lLmZpbHRlcih0LHRoaXMuY2hhcnQuZGF0YSkpKSxlLnNvcnQmJih0PXQuc29ydCgodCxuKT0+ZS5zb3J0KHQsbix0aGlzLmNoYXJ0LmRhdGEpKSksdGhpcy5vcHRpb25zLnJldmVyc2UmJnQucmV2ZXJzZSgpLHRoaXMubGVnZW5kSXRlbXM9dH1maXQoKXtsZXR7b3B0aW9uczplLGN0eDp0fT10aGlzO2lmKCFlLmRpc3BsYXkpe3RoaXMud2lkdGg9dGhpcy5oZWlnaHQ9MDtyZXR1cm59bGV0IG49ZS5sYWJlbHMscj0kKG4uZm9udCksaT1yLnNpemUsYT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7Ym94V2lkdGg6byxpdGVtSGVpZ2h0OnN9PVVkKG4saSksYyxsO3QuZm9udD1yLnN0cmluZyx0aGlzLmlzSG9yaXpvbnRhbCgpPyhjPXRoaXMubWF4V2lkdGgsbD10aGlzLl9maXRSb3dzKGEsaSxvLHMpKzEwKToobD10aGlzLm1heEhlaWdodCxjPXRoaXMuX2ZpdENvbHMoYSxyLG8scykrMTApLHRoaXMud2lkdGg9TWF0aC5taW4oYyxlLm1heFdpZHRofHx0aGlzLm1heFdpZHRoKSx0aGlzLmhlaWdodD1NYXRoLm1pbihsLGUubWF4SGVpZ2h0fHx0aGlzLm1heEhlaWdodCl9X2ZpdFJvd3MoZSx0LG4scil7bGV0e2N0eDppLG1heFdpZHRoOmEsb3B0aW9uczp7bGFiZWxzOntwYWRkaW5nOm99fX09dGhpcyxzPXRoaXMubGVnZW5kSGl0Qm94ZXM9W10sYz10aGlzLmxpbmVXaWR0aHM9WzBdLGw9citvLHU9ZTtpLnRleHRBbGlnbj1gbGVmdGAsaS50ZXh0QmFzZWxpbmU9YG1pZGRsZWA7bGV0IGQ9LTEsZj0tbDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLHApPT57bGV0IG09bit0LzIraS5tZWFzdXJlVGV4dChlLnRleHQpLndpZHRoOyhwPT09MHx8Y1tjLmxlbmd0aC0xXSttKzIqbz5hKSYmKHUrPWwsY1tjLmxlbmd0aC0ocD4wPzA6MSldPTAsZis9bCxkKyspLHNbcF09e2xlZnQ6MCx0b3A6Zixyb3c6ZCx3aWR0aDptLGhlaWdodDpyfSxjW2MubGVuZ3RoLTFdKz1tK299KSx1fV9maXRDb2xzKGUsdCxuLHIpe2xldHtjdHg6aSxtYXhIZWlnaHQ6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMuY29sdW1uU2l6ZXM9W10sbD1hLWUsdT1vLGQ9MCxmPTAscD0wLG09MDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLGEpPT57bGV0e2l0ZW1XaWR0aDpoLGl0ZW1IZWlnaHQ6Z309S2Qobix0LGksZSxyKTthPjAmJmYrZysyKm8+bCYmKHUrPWQrbyxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSxwKz1kK28sbSsrLGQ9Zj0wKSxzW2FdPXtsZWZ0OnAsdG9wOmYsY29sOm0sd2lkdGg6aCxoZWlnaHQ6Z30sZD1NYXRoLm1heChkLGgpLGYrPWcrb30pLHUrPWQsYy5wdXNoKHt3aWR0aDpkLGhlaWdodDpmfSksdX1hZGp1c3RIaXRCb3hlcygpe2lmKCF0aGlzLm9wdGlvbnMuZGlzcGxheSlyZXR1cm47bGV0IGU9dGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCkse2xlZ2VuZEhpdEJveGVzOnQsb3B0aW9uczp7YWxpZ246bixsYWJlbHM6e3BhZGRpbmc6cn0scnRsOml9fT10aGlzLGE9amMoaSx0aGlzLmxlZnQsdGhpcy53aWR0aCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7bGV0IGk9MCxvPSRvKG4sdGhpcy5sZWZ0K3IsdGhpcy5yaWdodC10aGlzLmxpbmVXaWR0aHNbaV0pO2ZvcihsZXQgcyBvZiB0KWkhPT1zLnJvdyYmKGk9cy5yb3csbz0kbyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKSkscy50b3ArPXRoaXMudG9wK2UrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChvKSxzLndpZHRoKSxvKz1zLndpZHRoK3J9ZWxzZXtsZXQgaT0wLG89JG8obix0aGlzLnRvcCtlK3IsdGhpcy5ib3R0b20tdGhpcy5jb2x1bW5TaXplc1tpXS5oZWlnaHQpO2ZvcihsZXQgcyBvZiB0KXMuY29sIT09aSYmKGk9cy5jb2wsbz0kbyhuLHRoaXMudG9wK2Urcix0aGlzLmJvdHRvbS10aGlzLmNvbHVtblNpemVzW2ldLmhlaWdodCkpLHMudG9wPW8scy5sZWZ0Kz10aGlzLmxlZnQrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChzLmxlZnQpLHMud2lkdGgpLG8rPXMuaGVpZ2h0K3J9fWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb249PT1gdG9wYHx8dGhpcy5vcHRpb25zLnBvc2l0aW9uPT09YGJvdHRvbWB9ZHJhdygpe2lmKHRoaXMub3B0aW9ucy5kaXNwbGF5KXtsZXQgZT10aGlzLmN0eDtqcyhlLHRoaXMpLHRoaXMuX2RyYXcoKSxNcyhlKX19X2RyYXcoKXtsZXR7b3B0aW9uczplLGNvbHVtblNpemVzOnQsbGluZVdpZHRoczpuLGN0eDpyfT10aGlzLHthbGlnbjppLGxhYmVsczphfT1lLG89Wi5jb2xvcixzPWpjKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxjPSQoYS5mb250KSx7cGFkZGluZzpsfT1hLHU9Yy5zaXplLGQ9dS8yLGY7dGhpcy5kcmF3VGl0bGUoKSxyLnRleHRBbGlnbj1zLnRleHRBbGlnbihgbGVmdGApLHIudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHIubGluZVdpZHRoPS41LHIuZm9udD1jLnN0cmluZztsZXR7Ym94V2lkdGg6cCxib3hIZWlnaHQ6bSxpdGVtSGVpZ2h0Omh9PVVkKGEsdSksZz1mdW5jdGlvbihlLHQsbil7aWYoaXNOYU4ocCl8fHA8PTB8fGlzTmFOKG0pfHxtPDApcmV0dXJuO3Iuc2F2ZSgpO2xldCBpPXEobi5saW5lV2lkdGgsMSk7aWYoci5maWxsU3R5bGU9cShuLmZpbGxTdHlsZSxvKSxyLmxpbmVDYXA9cShuLmxpbmVDYXAsYGJ1dHRgKSxyLmxpbmVEYXNoT2Zmc2V0PXEobi5saW5lRGFzaE9mZnNldCwwKSxyLmxpbmVKb2luPXEobi5saW5lSm9pbixgbWl0ZXJgKSxyLmxpbmVXaWR0aD1pLHIuc3Ryb2tlU3R5bGU9cShuLnN0cm9rZVN0eWxlLG8pLHIuc2V0TGluZURhc2gocShuLmxpbmVEYXNoLFtdKSksYS51c2VQb2ludFN0eWxlKXtsZXQgbz17cmFkaXVzOm0qTWF0aC5TUVJUMi8yLHBvaW50U3R5bGU6bi5wb2ludFN0eWxlLHJvdGF0aW9uOm4ucm90YXRpb24sYm9yZGVyV2lkdGg6aX0sYz1zLnhQbHVzKGUscC8yKSxsPXQrZDtrcyhyLG8sYyxsLGEucG9pbnRTdHlsZVdpZHRoJiZwKX1lbHNle2xldCBhPXQrTWF0aC5tYXgoKHUtbSkvMiwwKSxvPXMubGVmdEZvckx0cihlLHApLGM9V3Mobi5ib3JkZXJSYWRpdXMpO3IuYmVnaW5QYXRoKCksT2JqZWN0LnZhbHVlcyhjKS5zb21lKGU9PmUhPT0wKT9McyhyLHt4Om8seTphLHc6cCxoOm0scmFkaXVzOmN9KTpyLnJlY3QobyxhLHAsbSksci5maWxsKCksaSE9PTAmJnIuc3Ryb2tlKCl9ci5yZXN0b3JlKCl9LF89ZnVuY3Rpb24oZSx0LG4pe0lzKHIsbi50ZXh0LGUsdCtoLzIsYyx7c3RyaWtldGhyb3VnaDpuLmhpZGRlbix0ZXh0QWxpZ246cy50ZXh0QWxpZ24obi50ZXh0QWxpZ24pfSl9LHY9dGhpcy5pc0hvcml6b250YWwoKSx5PXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO2Y9dj97eDokbyhpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtblswXSkseTp0aGlzLnRvcCtsK3ksbGluZTowfTp7eDp0aGlzLmxlZnQrbCx5OiRvKGksdGhpcy50b3AreStsLHRoaXMuYm90dG9tLXRbMF0uaGVpZ2h0KSxsaW5lOjB9LE1jKHRoaXMuY3R4LGUudGV4dERpcmVjdGlvbik7bGV0IGI9aCtsO3RoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobyx1KT0+e3Iuc3Ryb2tlU3R5bGU9by5mb250Q29sb3Isci5maWxsU3R5bGU9by5mb250Q29sb3I7bGV0IG09ci5tZWFzdXJlVGV4dChvLnRleHQpLndpZHRoLGg9cy50ZXh0QWxpZ24oby50ZXh0QWxpZ258fD1hLnRleHRBbGlnbikseD1wK2QrbSxTPWYueCxDPWYueTtzLnNldFdpZHRoKHRoaXMud2lkdGgpLHY/dT4wJiZTK3grbD50aGlzLnJpZ2h0JiYoQz1mLnkrPWIsZi5saW5lKyssUz1mLng9JG8oaSx0aGlzLmxlZnQrbCx0aGlzLnJpZ2h0LW5bZi5saW5lXSkpOnU+MCYmQytiPnRoaXMuYm90dG9tJiYoUz1mLng9Uyt0W2YubGluZV0ud2lkdGgrbCxmLmxpbmUrKyxDPWYueT0kbyhpLHRoaXMudG9wK3krbCx0aGlzLmJvdHRvbS10W2YubGluZV0uaGVpZ2h0KSk7bGV0IHc9cy54KFMpO2lmKGcodyxDLG8pLFM9ZXMoaCxTK3ArZCx2P1MreDp0aGlzLnJpZ2h0LGUucnRsKSxfKHMueChTKSxDLG8pLHYpZi54Kz14K2w7ZWxzZSBpZih0eXBlb2Ygby50ZXh0IT1gc3RyaW5nYCl7bGV0IGU9Yy5saW5lSGVpZ2h0O2YueSs9WWQobyxlKStsfWVsc2UgZi55Kz1ifSksTmModGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKX1kcmF3VGl0bGUoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpdGxlLG49JCh0LmZvbnQpLHI9USh0LnBhZGRpbmcpO2lmKCF0LmRpc3BsYXkpcmV0dXJuO2xldCBpPWpjKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxhPXRoaXMuY3R4LG89dC5wb3NpdGlvbixzPW4uc2l6ZS8yLGM9ci50b3ArcyxsLHU9dGhpcy5sZWZ0LGQ9dGhpcy53aWR0aDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKWQ9TWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKSxsPXRoaXMudG9wK2MsdT0kbyhlLmFsaWduLHUsdGhpcy5yaWdodC1kKTtlbHNle2xldCB0PXRoaXMuY29sdW1uU2l6ZXMucmVkdWNlKChlLHQpPT5NYXRoLm1heChlLHQuaGVpZ2h0KSwwKTtsPWMrJG8oZS5hbGlnbix0aGlzLnRvcCx0aGlzLmJvdHRvbS10LWUubGFiZWxzLnBhZGRpbmctdGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCkpfWxldCBmPSRvKG8sdSx1K2QpO2EudGV4dEFsaWduPWkudGV4dEFsaWduKFFvKG8pKSxhLnRleHRCYXNlbGluZT1gbWlkZGxlYCxhLnN0cm9rZVN0eWxlPXQuY29sb3IsYS5maWxsU3R5bGU9dC5jb2xvcixhLmZvbnQ9bi5zdHJpbmcsSXMoYSx0LnRleHQsZixsLG4pfV9jb21wdXRlVGl0bGVIZWlnaHQoKXtsZXQgZT10aGlzLm9wdGlvbnMudGl0bGUsdD0kKGUuZm9udCksbj1RKGUucGFkZGluZyk7cmV0dXJuIGUuZGlzcGxheT90LmxpbmVIZWlnaHQrbi5oZWlnaHQ6MH1fZ2V0TGVnZW5kSXRlbUF0KGUsdCl7bGV0IG4scixpO2lmKEJvKGUsdGhpcy5sZWZ0LHRoaXMucmlnaHQpJiZCbyh0LHRoaXMudG9wLHRoaXMuYm90dG9tKSl7Zm9yKGk9dGhpcy5sZWdlbmRIaXRCb3hlcyxuPTA7bjxpLmxlbmd0aDsrK24paWYocj1pW25dLEJvKGUsci5sZWZ0LHIubGVmdCtyLndpZHRoKSYmQm8odCxyLnRvcCxyLnRvcCtyLmhlaWdodCkpcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbbl19cmV0dXJuIG51bGx9aGFuZGxlRXZlbnQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zO2lmKCFYZChlLnR5cGUsdCkpcmV0dXJuO2xldCBuPXRoaXMuX2dldExlZ2VuZEl0ZW1BdChlLngsZS55KTtpZihlLnR5cGU9PT1gbW91c2Vtb3ZlYHx8ZS50eXBlPT09YG1vdXNlb3V0YCl7bGV0IHI9dGhpcy5faG92ZXJlZEl0ZW0saT1XZChyLG4pO3ImJiFpJiZKKHQub25MZWF2ZSxbZSxyLHRoaXNdLHRoaXMpLHRoaXMuX2hvdmVyZWRJdGVtPW4sbiYmIWkmJkoodC5vbkhvdmVyLFtlLG4sdGhpc10sdGhpcyl9ZWxzZSBuJiZKKHQub25DbGljayxbZSxuLHRoaXNdLHRoaXMpfX07ZnVuY3Rpb24gS2QoZSx0LG4scixpKXtyZXR1cm57aXRlbVdpZHRoOnFkKHIsZSx0LG4pLGl0ZW1IZWlnaHQ6SmQoaSxyLHQubGluZUhlaWdodCl9fWZ1bmN0aW9uIHFkKGUsdCxuLHIpe2xldCBpPWUudGV4dDtyZXR1cm4gaSYmdHlwZW9mIGkhPWBzdHJpbmdgJiYoaT1pLnJlZHVjZSgoZSx0KT0+ZS5sZW5ndGg+dC5sZW5ndGg/ZTp0KSksdCtuLnNpemUvMityLm1lYXN1cmVUZXh0KGkpLndpZHRofWZ1bmN0aW9uIEpkKGUsdCxuKXtsZXQgcj1lO3JldHVybiB0eXBlb2YgdC50ZXh0IT1gc3RyaW5nYCYmKHI9WWQodCxuKSkscn1mdW5jdGlvbiBZZChlLHQpe3JldHVybiB0KihlLnRleHQ/ZS50ZXh0Lmxlbmd0aDowKX1mdW5jdGlvbiBYZChlLHQpe3JldHVybiEhKChlPT09YG1vdXNlbW92ZWB8fGU9PT1gbW91c2VvdXRgKSYmKHQub25Ib3Zlcnx8dC5vbkxlYXZlKXx8dC5vbkNsaWNrJiYoZT09PWBjbGlja2B8fGU9PT1gbW91c2V1cGApKX12YXIgWmQ9e2lkOmBsZWdlbmRgLF9lbGVtZW50OkdkLHN0YXJ0KGUsdCxuKXtsZXQgcj1lLmxlZ2VuZD1uZXcgR2Qoe2N0eDplLmN0eCxvcHRpb25zOm4sY2hhcnQ6ZX0pOyRsLmNvbmZpZ3VyZShlLHIsbiksJGwuYWRkQm94KGUscil9LHN0b3AoZSl7JGwucmVtb3ZlQm94KGUsZS5sZWdlbmQpLGRlbGV0ZSBlLmxlZ2VuZH0sYmVmb3JlVXBkYXRlKGUsdCxuKXtsZXQgcj1lLmxlZ2VuZDskbC5jb25maWd1cmUoZSxyLG4pLHIub3B0aW9ucz1ufSxhZnRlclVwZGF0ZShlKXtsZXQgdD1lLmxlZ2VuZDt0LmJ1aWxkTGFiZWxzKCksdC5hZGp1c3RIaXRCb3hlcygpfSxhZnRlckV2ZW50KGUsdCl7dC5yZXBsYXl8fGUubGVnZW5kLmhhbmRsZUV2ZW50KHQuZXZlbnQpfSxkZWZhdWx0czp7ZGlzcGxheTohMCxwb3NpdGlvbjpgdG9wYCxhbGlnbjpgY2VudGVyYCxmdWxsU2l6ZTohMCxyZXZlcnNlOiExLHdlaWdodDoxZTMsb25DbGljayhlLHQsbil7bGV0IHI9dC5kYXRhc2V0SW5kZXgsaT1uLmNoYXJ0O2kuaXNEYXRhc2V0VmlzaWJsZShyKT8oaS5oaWRlKHIpLHQuaGlkZGVuPSEwKTooaS5zaG93KHIpLHQuaGlkZGVuPSExKX0sb25Ib3ZlcjpudWxsLG9uTGVhdmU6bnVsbCxsYWJlbHM6e2NvbG9yOmU9PmUuY2hhcnQub3B0aW9ucy5jb2xvcixib3hXaWR0aDo0MCxwYWRkaW5nOjEwLGdlbmVyYXRlTGFiZWxzKGUpe2xldCB0PWUuZGF0YS5kYXRhc2V0cyx7bGFiZWxzOnt1c2VQb2ludFN0eWxlOm4scG9pbnRTdHlsZTpyLHRleHRBbGlnbjppLGNvbG9yOmEsdXNlQm9yZGVyUmFkaXVzOm8sYm9yZGVyUmFkaXVzOnN9fT1lLmxlZ2VuZC5vcHRpb25zO3JldHVybiBlLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoKS5tYXAoZT0+e2xldCBjPWUuY29udHJvbGxlci5nZXRTdHlsZShuPzA6dm9pZCAwKSxsPVEoYy5ib3JkZXJXaWR0aCk7cmV0dXJue3RleHQ6dFtlLmluZGV4XS5sYWJlbCxmaWxsU3R5bGU6Yy5iYWNrZ3JvdW5kQ29sb3IsZm9udENvbG9yOmEsaGlkZGVuOiFlLnZpc2libGUsbGluZUNhcDpjLmJvcmRlckNhcFN0eWxlLGxpbmVEYXNoOmMuYm9yZGVyRGFzaCxsaW5lRGFzaE9mZnNldDpjLmJvcmRlckRhc2hPZmZzZXQsbGluZUpvaW46Yy5ib3JkZXJKb2luU3R5bGUsbGluZVdpZHRoOihsLndpZHRoK2wuaGVpZ2h0KS80LHN0cm9rZVN0eWxlOmMuYm9yZGVyQ29sb3IscG9pbnRTdHlsZTpyfHxjLnBvaW50U3R5bGUscm90YXRpb246Yy5yb3RhdGlvbix0ZXh0QWxpZ246aXx8Yy50ZXh0QWxpZ24sYm9yZGVyUmFkaXVzOm8mJihzfHxjLmJvcmRlclJhZGl1cyksZGF0YXNldEluZGV4OmUuaW5kZXh9fSx0aGlzKX19LHRpdGxlOntjb2xvcjplPT5lLmNoYXJ0Lm9wdGlvbnMuY29sb3IsZGlzcGxheTohMSxwb3NpdGlvbjpgY2VudGVyYCx0ZXh0OmBgfX0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksbGFiZWxzOntfc2NyaXB0YWJsZTplPT4hW2BnZW5lcmF0ZUxhYmVsc2AsYGZpbHRlcmAsYHNvcnRgXS5pbmNsdWRlcyhlKX19fSxRZD17YXZlcmFnZShlKXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IHQsbixyPW5ldyBTZXQsaT0wLGE9MDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuOysrdCl7bGV0IG49ZVt0XS5lbGVtZW50O2lmKG4mJm4uaGFzVmFsdWUoKSl7bGV0IGU9bi50b29sdGlwUG9zaXRpb24oKTtyLmFkZChlLngpLGkrPWUueSwrK2F9fXJldHVybiBhPT09MHx8ci5zaXplPT09MD8hMTp7eDpbLi4ucl0ucmVkdWNlKChlLHQpPT5lK3QpL3Iuc2l6ZSx5OmkvYX19LG5lYXJlc3QoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IG49dC54LHI9dC55LGk9MS8wLGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtsZXQgbj1lW2FdLmVsZW1lbnQ7aWYobiYmbi5oYXNWYWx1ZSgpKXtsZXQgZT1Gbyh0LG4uZ2V0Q2VudGVyUG9pbnQoKSk7ZTxpJiYoaT1lLHM9bil9fWlmKHMpe2xldCBlPXMudG9vbHRpcFBvc2l0aW9uKCk7bj1lLngscj1lLnl9cmV0dXJue3g6bix5OnJ9fX07ZnVuY3Rpb24gJGQoZSx0KXtyZXR1cm4gdCYmKFcodCk/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSx0KTplLnB1c2godCkpLGV9ZnVuY3Rpb24gZWYoZSl7cmV0dXJuKHR5cGVvZiBlPT1gc3RyaW5nYHx8ZSBpbnN0YW5jZW9mIFN0cmluZykmJmUuaW5kZXhPZihgCmApPi0xP2Uuc3BsaXQoYApgKTplfWZ1bmN0aW9uIHRmKGUsdCl7bGV0e2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6cixpbmRleDppfT10LGE9ZS5nZXREYXRhc2V0TWV0YShyKS5jb250cm9sbGVyLHtsYWJlbDpvLHZhbHVlOnN9PWEuZ2V0TGFiZWxBbmRWYWx1ZShpKTtyZXR1cm57Y2hhcnQ6ZSxsYWJlbDpvLHBhcnNlZDphLmdldFBhcnNlZChpKSxyYXc6ZS5kYXRhLmRhdGFzZXRzW3JdLmRhdGFbaV0sZm9ybWF0dGVkVmFsdWU6cyxkYXRhc2V0OmEuZ2V0RGF0YXNldCgpLGRhdGFJbmRleDppLGRhdGFzZXRJbmRleDpyLGVsZW1lbnQ6bn19ZnVuY3Rpb24gbmYoZSx0KXtsZXQgbj1lLmNoYXJ0LmN0eCx7Ym9keTpyLGZvb3RlcjppLHRpdGxlOmF9PWUse2JveFdpZHRoOm8sYm94SGVpZ2h0OnN9PXQsYz0kKHQuYm9keUZvbnQpLGw9JCh0LnRpdGxlRm9udCksdT0kKHQuZm9vdGVyRm9udCksZD1hLmxlbmd0aCxmPWkubGVuZ3RoLHA9ci5sZW5ndGgsbT1RKHQucGFkZGluZyksaD1tLmhlaWdodCxnPTAsXz1yLnJlZHVjZSgoZSx0KT0+ZSt0LmJlZm9yZS5sZW5ndGgrdC5saW5lcy5sZW5ndGgrdC5hZnRlci5sZW5ndGgsMCk7aWYoXys9ZS5iZWZvcmVCb2R5Lmxlbmd0aCtlLmFmdGVyQm9keS5sZW5ndGgsZCYmKGgrPWQqbC5saW5lSGVpZ2h0KyhkLTEpKnQudGl0bGVTcGFjaW5nK3QudGl0bGVNYXJnaW5Cb3R0b20pLF8pe2xldCBlPXQuZGlzcGxheUNvbG9ycz9NYXRoLm1heChzLGMubGluZUhlaWdodCk6Yy5saW5lSGVpZ2h0O2grPXAqZSsoXy1wKSpjLmxpbmVIZWlnaHQrKF8tMSkqdC5ib2R5U3BhY2luZ31mJiYoaCs9dC5mb290ZXJNYXJnaW5Ub3ArZip1LmxpbmVIZWlnaHQrKGYtMSkqdC5mb290ZXJTcGFjaW5nKTtsZXQgdj0wLHk9ZnVuY3Rpb24oZSl7Zz1NYXRoLm1heChnLG4ubWVhc3VyZVRleHQoZSkud2lkdGgrdil9O3JldHVybiBuLnNhdmUoKSxuLmZvbnQ9bC5zdHJpbmcsWShlLnRpdGxlLHkpLG4uZm9udD1jLnN0cmluZyxZKGUuYmVmb3JlQm9keS5jb25jYXQoZS5hZnRlckJvZHkpLHkpLHY9dC5kaXNwbGF5Q29sb3JzP28rMit0LmJveFBhZGRpbmc6MCxZKHIsZT0+e1koZS5iZWZvcmUseSksWShlLmxpbmVzLHkpLFkoZS5hZnRlcix5KX0pLHY9MCxuLmZvbnQ9dS5zdHJpbmcsWShlLmZvb3Rlcix5KSxuLnJlc3RvcmUoKSxnKz1tLndpZHRoLHt3aWR0aDpnLGhlaWdodDpofX1mdW5jdGlvbiByZihlLHQpe2xldHt5Om4saGVpZ2h0OnJ9PXQ7cmV0dXJuIG48ci8yP2B0b3BgOm4+ZS5oZWlnaHQtci8yP2Bib3R0b21gOmBjZW50ZXJgfWZ1bmN0aW9uIGFmKGUsdCxuLHIpe2xldHt4Omksd2lkdGg6YX09cixvPW4uY2FyZXRTaXplK24uY2FyZXRQYWRkaW5nO2lmKGU9PT1gbGVmdGAmJmkrYStvPnQud2lkdGh8fGU9PT1gcmlnaHRgJiZpLWEtbzwwKXJldHVybiEwfWZ1bmN0aW9uIG9mKGUsdCxuLHIpe2xldHt4Omksd2lkdGg6YX09bix7d2lkdGg6byxjaGFydEFyZWE6e2xlZnQ6cyxyaWdodDpjfX09ZSxsPWBjZW50ZXJgO3JldHVybiByPT09YGNlbnRlcmA/bD1pPD0ocytjKS8yP2BsZWZ0YDpgcmlnaHRgOmk8PWEvMj9sPWBsZWZ0YDppPj1vLWEvMiYmKGw9YHJpZ2h0YCksYWYobCxlLHQsbikmJihsPWBjZW50ZXJgKSxsfWZ1bmN0aW9uIHNmKGUsdCxuKXtsZXQgcj1uLnlBbGlnbnx8dC55QWxpZ258fHJmKGUsbik7cmV0dXJue3hBbGlnbjpuLnhBbGlnbnx8dC54QWxpZ258fG9mKGUsdCxuLHIpLHlBbGlnbjpyfX1mdW5jdGlvbiBjZihlLHQpe2xldHt4Om4sd2lkdGg6cn09ZTtyZXR1cm4gdD09PWByaWdodGA/bi09cjp0PT09YGNlbnRlcmAmJihuLT1yLzIpLG59ZnVuY3Rpb24gbGYoZSx0LG4pe2xldHt5OnIsaGVpZ2h0Oml9PWU7cmV0dXJuIHQ9PT1gdG9wYD9yKz1uOnItPXQ9PT1gYm90dG9tYD9pK246aS8yLHJ9ZnVuY3Rpb24gdWYoZSx0LG4scil7bGV0e2NhcmV0U2l6ZTppLGNhcmV0UGFkZGluZzphLGNvcm5lclJhZGl1czpvfT1lLHt4QWxpZ246cyx5QWxpZ246Y309bixsPWkrYSx7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PVdzKG8pLG09Y2YodCxzKSxoPWxmKHQsYyxsKTtyZXR1cm4gYz09PWBjZW50ZXJgP3M9PT1gbGVmdGA/bSs9bDpzPT09YHJpZ2h0YCYmKG0tPWwpOnM9PT1gbGVmdGA/bS09TWF0aC5tYXgodSxmKStpOnM9PT1gcmlnaHRgJiYobSs9TWF0aC5tYXgoZCxwKStpKSx7eDpSbyhtLDAsci53aWR0aC10LndpZHRoKSx5OlJvKGgsMCxyLmhlaWdodC10LmhlaWdodCl9fWZ1bmN0aW9uIGRmKGUsdCxuKXtsZXQgcj1RKG4ucGFkZGluZyk7cmV0dXJuIHQ9PT1gY2VudGVyYD9lLngrZS53aWR0aC8yOnQ9PT1gcmlnaHRgP2UueCtlLndpZHRoLXIucmlnaHQ6ZS54K3IubGVmdH1mdW5jdGlvbiBmZihlKXtyZXR1cm4gJGQoW10sZWYoZSkpfWZ1bmN0aW9uIHBmKGUsdCxuKXtyZXR1cm4gcXMoZSx7dG9vbHRpcDp0LHRvb2x0aXBJdGVtczpuLHR5cGU6YHRvb2x0aXBgfSl9ZnVuY3Rpb24gbWYoZSx0KXtsZXQgbj10JiZ0LmRhdGFzZXQmJnQuZGF0YXNldC50b29sdGlwJiZ0LmRhdGFzZXQudG9vbHRpcC5jYWxsYmFja3M7cmV0dXJuIG4/ZS5vdmVycmlkZShuKTplfXZhciBoZj17YmVmb3JlVGl0bGU6WWEsdGl0bGUoZSl7aWYoZS5sZW5ndGg+MCl7bGV0IHQ9ZVswXSxuPXQuY2hhcnQuZGF0YS5sYWJlbHMscj1uP24ubGVuZ3RoOjA7aWYodGhpcyYmdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubW9kZT09PWBkYXRhc2V0YClyZXR1cm4gdC5kYXRhc2V0LmxhYmVsfHxgYDtpZih0LmxhYmVsKXJldHVybiB0LmxhYmVsO2lmKHI+MCYmdC5kYXRhSW5kZXg8cilyZXR1cm4gblt0LmRhdGFJbmRleF19cmV0dXJuYGB9LGFmdGVyVGl0bGU6WWEsYmVmb3JlQm9keTpZYSxiZWZvcmVMYWJlbDpZYSxsYWJlbChlKXtpZih0aGlzJiZ0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5tb2RlPT09YGRhdGFzZXRgKXJldHVybiBlLmxhYmVsK2A6IGArZS5mb3JtYXR0ZWRWYWx1ZXx8ZS5mb3JtYXR0ZWRWYWx1ZTtsZXQgdD1lLmRhdGFzZXQubGFiZWx8fGBgO3QmJih0Kz1gOiBgKTtsZXQgbj1lLmZvcm1hdHRlZFZhbHVlO3JldHVybiBVKG4pfHwodCs9biksdH0sbGFiZWxDb2xvcihlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57Ym9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixiYWNrZ3JvdW5kQ29sb3I6dC5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyV2lkdGg6dC5ib3JkZXJXaWR0aCxib3JkZXJEYXNoOnQuYm9yZGVyRGFzaCxib3JkZXJEYXNoT2Zmc2V0OnQuYm9yZGVyRGFzaE9mZnNldCxib3JkZXJSYWRpdXM6MH19LGxhYmVsVGV4dENvbG9yKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5ib2R5Q29sb3J9LGxhYmVsUG9pbnRTdHlsZShlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57cG9pbnRTdHlsZTp0LnBvaW50U3R5bGUscm90YXRpb246dC5yb3RhdGlvbn19LGFmdGVyTGFiZWw6WWEsYWZ0ZXJCb2R5OllhLGJlZm9yZUZvb3RlcjpZYSxmb290ZXI6WWEsYWZ0ZXJGb290ZXI6WWF9O2Z1bmN0aW9uIGdmKGUsdCxuLHIpe2xldCBpPWVbdF0uY2FsbChuLHIpO3JldHVybiBpPT09dm9pZCAwP2hmW3RdLmNhbGwobixyKTppfXZhciBfZj1jbGFzcyBleHRlbmRzIEN1e3N0YXRpYyBwb3NpdGlvbmVycz1RZDtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3BhY2l0eT0wLHRoaXMuX2FjdGl2ZT1bXSx0aGlzLl9ldmVudFBvc2l0aW9uPXZvaWQgMCx0aGlzLl9zaXplPXZvaWQgMCx0aGlzLl9jYWNoZWRBbmltYXRpb25zPXZvaWQgMCx0aGlzLl90b29sdGlwSXRlbXM9W10sdGhpcy4kYW5pbWF0aW9ucz12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5kYXRhUG9pbnRzPXZvaWQgMCx0aGlzLnRpdGxlPXZvaWQgMCx0aGlzLmJlZm9yZUJvZHk9dm9pZCAwLHRoaXMuYm9keT12b2lkIDAsdGhpcy5hZnRlckJvZHk9dm9pZCAwLHRoaXMuZm9vdGVyPXZvaWQgMCx0aGlzLnhBbGlnbj12b2lkIDAsdGhpcy55QWxpZ249dm9pZCAwLHRoaXMueD12b2lkIDAsdGhpcy55PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5jYXJldFg9dm9pZCAwLHRoaXMuY2FyZXRZPXZvaWQgMCx0aGlzLmxhYmVsQ29sb3JzPXZvaWQgMCx0aGlzLmxhYmVsUG9pbnRTdHlsZXM9dm9pZCAwLHRoaXMubGFiZWxUZXh0Q29sb3JzPXZvaWQgMH1pbml0aWFsaXplKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwfV9yZXNvbHZlQW5pbWF0aW9ucygpe2xldCBlPXRoaXMuX2NhY2hlZEFuaW1hdGlvbnM7aWYoZSlyZXR1cm4gZTtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHI9bi5lbmFibGVkJiZ0Lm9wdGlvbnMuYW5pbWF0aW9uJiZuLmFuaW1hdGlvbnMsaT1uZXcgVmModGhpcy5jaGFydCxyKTtyZXR1cm4gci5fY2FjaGVhYmxlJiYodGhpcy5fY2FjaGVkQW5pbWF0aW9ucz1PYmplY3QuZnJlZXplKGkpKSxpfWdldENvbnRleHQoKXtyZXR1cm4gdGhpcy4kY29udGV4dHx8PXBmKHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLHRoaXMsdGhpcy5fdG9vbHRpcEl0ZW1zKX1nZXRUaXRsZShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPWdmKG4sYGJlZm9yZVRpdGxlYCx0aGlzLGUpLGk9Z2YobixgdGl0bGVgLHRoaXMsZSksYT1nZihuLGBhZnRlclRpdGxlYCx0aGlzLGUpLG89W107cmV0dXJuIG89JGQobyxlZihyKSksbz0kZChvLGVmKGkpKSxvPSRkKG8sZWYoYSkpLG99Z2V0QmVmb3JlQm9keShlLHQpe3JldHVybiBmZihnZih0LmNhbGxiYWNrcyxgYmVmb3JlQm9keWAsdGhpcyxlKSl9Z2V0Qm9keShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPVtdO3JldHVybiBZKGUsZT0+e2xldCB0PXtiZWZvcmU6W10sbGluZXM6W10sYWZ0ZXI6W119LGk9bWYobixlKTskZCh0LmJlZm9yZSxlZihnZihpLGBiZWZvcmVMYWJlbGAsdGhpcyxlKSkpLCRkKHQubGluZXMsZ2YoaSxgbGFiZWxgLHRoaXMsZSkpLCRkKHQuYWZ0ZXIsZWYoZ2YoaSxgYWZ0ZXJMYWJlbGAsdGhpcyxlKSkpLHIucHVzaCh0KX0pLHJ9Z2V0QWZ0ZXJCb2R5KGUsdCl7cmV0dXJuIGZmKGdmKHQuY2FsbGJhY2tzLGBhZnRlckJvZHlgLHRoaXMsZSkpfWdldEZvb3RlcihlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPWdmKG4sYGJlZm9yZUZvb3RlcmAsdGhpcyxlKSxpPWdmKG4sYGZvb3RlcmAsdGhpcyxlKSxhPWdmKG4sYGFmdGVyRm9vdGVyYCx0aGlzLGUpLG89W107cmV0dXJuIG89JGQobyxlZihyKSksbz0kZChvLGVmKGkpKSxvPSRkKG8sZWYoYSkpLG99X2NyZWF0ZUl0ZW1zKGUpe2xldCB0PXRoaXMuX2FjdGl2ZSxuPXRoaXMuY2hhcnQuZGF0YSxyPVtdLGk9W10sYT1bXSxvPVtdLHMsYztmb3Iocz0wLGM9dC5sZW5ndGg7czxjOysrcylvLnB1c2godGYodGhpcy5jaGFydCx0W3NdKSk7cmV0dXJuIGUuZmlsdGVyJiYobz1vLmZpbHRlcigodCxyLGkpPT5lLmZpbHRlcih0LHIsaSxuKSkpLGUuaXRlbVNvcnQmJihvPW8uc29ydCgodCxyKT0+ZS5pdGVtU29ydCh0LHIsbikpKSxZKG8sdD0+e2xldCBuPW1mKGUuY2FsbGJhY2tzLHQpO3IucHVzaChnZihuLGBsYWJlbENvbG9yYCx0aGlzLHQpKSxpLnB1c2goZ2YobixgbGFiZWxQb2ludFN0eWxlYCx0aGlzLHQpKSxhLnB1c2goZ2YobixgbGFiZWxUZXh0Q29sb3JgLHRoaXMsdCkpfSksdGhpcy5sYWJlbENvbG9ycz1yLHRoaXMubGFiZWxQb2ludFN0eWxlcz1pLHRoaXMubGFiZWxUZXh0Q29sb3JzPWEsdGhpcy5kYXRhUG9pbnRzPW8sb311cGRhdGUoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hY3RpdmUsaSxhPVtdO2lmKCFyLmxlbmd0aCl0aGlzLm9wYWNpdHkhPT0wJiYoaT17b3BhY2l0eTowfSk7ZWxzZXtsZXQgZT1RZFtuLnBvc2l0aW9uXS5jYWxsKHRoaXMscix0aGlzLl9ldmVudFBvc2l0aW9uKTthPXRoaXMuX2NyZWF0ZUl0ZW1zKG4pLHRoaXMudGl0bGU9dGhpcy5nZXRUaXRsZShhLG4pLHRoaXMuYmVmb3JlQm9keT10aGlzLmdldEJlZm9yZUJvZHkoYSxuKSx0aGlzLmJvZHk9dGhpcy5nZXRCb2R5KGEsbiksdGhpcy5hZnRlckJvZHk9dGhpcy5nZXRBZnRlckJvZHkoYSxuKSx0aGlzLmZvb3Rlcj10aGlzLmdldEZvb3RlcihhLG4pO2xldCB0PXRoaXMuX3NpemU9bmYodGhpcyxuKSxvPU9iamVjdC5hc3NpZ24oe30sZSx0KSxzPXNmKHRoaXMuY2hhcnQsbixvKSxjPXVmKG4sbyxzLHRoaXMuY2hhcnQpO3RoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLGk9e29wYWNpdHk6MSx4OmMueCx5OmMueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCxjYXJldFg6ZS54LGNhcmV0WTplLnl9fXRoaXMuX3Rvb2x0aXBJdGVtcz1hLHRoaXMuJGNvbnRleHQ9dm9pZCAwLGkmJnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsaSksZSYmbi5leHRlcm5hbCYmbi5leHRlcm5hbC5jYWxsKHRoaXMse2NoYXJ0OnRoaXMuY2hhcnQsdG9vbHRpcDp0aGlzLHJlcGxheTp0fSl9ZHJhd0NhcmV0KGUsdCxuLHIpe2xldCBpPXRoaXMuZ2V0Q2FyZXRQb3NpdGlvbihlLG4scik7dC5saW5lVG8oaS54MSxpLnkxKSx0LmxpbmVUbyhpLngyLGkueTIpLHQubGluZVRvKGkueDMsaS55Myl9Z2V0Q2FyZXRQb3NpdGlvbihlLHQsbil7bGV0e3hBbGlnbjpyLHlBbGlnbjppfT10aGlzLHtjYXJldFNpemU6YSxjb3JuZXJSYWRpdXM6b309bix7dG9wTGVmdDpzLHRvcFJpZ2h0OmMsYm90dG9tTGVmdDpsLGJvdHRvbVJpZ2h0OnV9PVdzKG8pLHt4OmQseTpmfT1lLHt3aWR0aDpwLGhlaWdodDptfT10LGgsZyxfLHYseSxiO3JldHVybiBpPT09YGNlbnRlcmA/KHk9ZittLzIscj09PWBsZWZ0YD8oaD1kLGc9aC1hLHY9eSthLGI9eS1hKTooaD1kK3AsZz1oK2Esdj15LWEsYj15K2EpLF89aCk6KGc9cj09PWBsZWZ0YD9kK01hdGgubWF4KHMsbCkrYTpyPT09YHJpZ2h0YD9kK3AtTWF0aC5tYXgoYyx1KS1hOnRoaXMuY2FyZXRYLGk9PT1gdG9wYD8odj1mLHk9di1hLGg9Zy1hLF89ZythKToodj1mK20seT12K2EsaD1nK2EsXz1nLWEpLGI9dikse3gxOmgseDI6Zyx4MzpfLHkxOnYseTI6eSx5MzpifX1kcmF3VGl0bGUoZSx0LG4pe2xldCByPXRoaXMudGl0bGUsaT1yLmxlbmd0aCxhLG8scztpZihpKXtsZXQgYz1qYyhuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1kZih0aGlzLG4udGl0bGVBbGlnbixuKSx0LnRleHRBbGlnbj1jLnRleHRBbGlnbihuLnRpdGxlQWxpZ24pLHQudGV4dEJhc2VsaW5lPWBtaWRkbGVgLGE9JChuLnRpdGxlRm9udCksbz1uLnRpdGxlU3BhY2luZyx0LmZpbGxTdHlsZT1uLnRpdGxlQ29sb3IsdC5mb250PWEuc3RyaW5nLHM9MDtzPGk7KytzKXQuZmlsbFRleHQocltzXSxjLngoZS54KSxlLnkrYS5saW5lSGVpZ2h0LzIpLGUueSs9YS5saW5lSGVpZ2h0K28scysxPT09aSYmKGUueSs9bi50aXRsZU1hcmdpbkJvdHRvbS1vKX19X2RyYXdDb2xvckJveChlLHQsbixyLGkpe2xldCBhPXRoaXMubGFiZWxDb2xvcnNbbl0sbz10aGlzLmxhYmVsUG9pbnRTdHlsZXNbbl0se2JveEhlaWdodDpzLGJveFdpZHRoOmN9PWksbD0kKGkuYm9keUZvbnQpLHU9ZGYodGhpcyxgbGVmdGAsaSksZD1yLngodSksZj1zPGwubGluZUhlaWdodD8obC5saW5lSGVpZ2h0LXMpLzI6MCxwPXQueStmO2lmKGkudXNlUG9pbnRTdHlsZSl7bGV0IHQ9e3JhZGl1czpNYXRoLm1pbihjLHMpLzIscG9pbnRTdHlsZTpvLnBvaW50U3R5bGUscm90YXRpb246by5yb3RhdGlvbixib3JkZXJXaWR0aDoxfSxuPXIubGVmdEZvckx0cihkLGMpK2MvMixsPXArcy8yO2Uuc3Ryb2tlU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsT3MoZSx0LG4sbCksZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLE9zKGUsdCxuLGwpfWVsc2V7ZS5saW5lV2lkdGg9RyhhLmJvcmRlcldpZHRoKT9NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGEuYm9yZGVyV2lkdGgpKTphLmJvcmRlcldpZHRofHwxLGUuc3Ryb2tlU3R5bGU9YS5ib3JkZXJDb2xvcixlLnNldExpbmVEYXNoKGEuYm9yZGVyRGFzaHx8W10pLGUubGluZURhc2hPZmZzZXQ9YS5ib3JkZXJEYXNoT2Zmc2V0fHwwO2xldCB0PXIubGVmdEZvckx0cihkLGMpLG49ci5sZWZ0Rm9yTHRyKHIueFBsdXMoZCwxKSxjLTIpLG89V3MoYS5ib3JkZXJSYWRpdXMpO09iamVjdC52YWx1ZXMobykuc29tZShlPT5lIT09MCk/KGUuYmVnaW5QYXRoKCksZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsTHMoZSx7eDp0LHk6cCx3OmMsaDpzLHJhZGl1czpvfSksZS5maWxsKCksZS5zdHJva2UoKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmJlZ2luUGF0aCgpLExzKGUse3g6bix5OnArMSx3OmMtMixoOnMtMixyYWRpdXM6b30pLGUuZmlsbCgpKTooZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsZS5maWxsUmVjdCh0LHAsYyxzKSxlLnN0cm9rZVJlY3QodCxwLGMscyksZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3IsZS5maWxsUmVjdChuLHArMSxjLTIscy0yKSl9ZS5maWxsU3R5bGU9dGhpcy5sYWJlbFRleHRDb2xvcnNbbl19ZHJhd0JvZHkoZSx0LG4pe2xldHtib2R5OnJ9PXRoaXMse2JvZHlTcGFjaW5nOmksYm9keUFsaWduOmEsZGlzcGxheUNvbG9yczpvLGJveEhlaWdodDpzLGJveFdpZHRoOmMsYm94UGFkZGluZzpsfT1uLHU9JChuLmJvZHlGb250KSxkPXUubGluZUhlaWdodCxmPTAscD1qYyhuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCksbT1mdW5jdGlvbihuKXt0LmZpbGxUZXh0KG4scC54KGUueCtmKSxlLnkrZC8yKSxlLnkrPWQraX0saD1wLnRleHRBbGlnbihhKSxnLF8sdix5LGIseCxTO2Zvcih0LnRleHRBbGlnbj1hLHQudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHQuZm9udD11LnN0cmluZyxlLng9ZGYodGhpcyxoLG4pLHQuZmlsbFN0eWxlPW4uYm9keUNvbG9yLFkodGhpcy5iZWZvcmVCb2R5LG0pLGY9byYmaCE9PWByaWdodGA/YT09PWBjZW50ZXJgP2MvMitsOmMrMitsOjAseT0wLHg9ci5sZW5ndGg7eTx4OysreSl7Zm9yKGc9clt5XSxfPXRoaXMubGFiZWxUZXh0Q29sb3JzW3ldLHQuZmlsbFN0eWxlPV8sWShnLmJlZm9yZSxtKSx2PWcubGluZXMsbyYmdi5sZW5ndGgmJih0aGlzLl9kcmF3Q29sb3JCb3godCxlLHkscCxuKSxkPU1hdGgubWF4KHUubGluZUhlaWdodCxzKSksYj0wLFM9di5sZW5ndGg7YjxTOysrYiltKHZbYl0pLGQ9dS5saW5lSGVpZ2h0O1koZy5hZnRlcixtKX1mPTAsZD11LmxpbmVIZWlnaHQsWSh0aGlzLmFmdGVyQm9keSxtKSxlLnktPWl9ZHJhd0Zvb3RlcihlLHQsbil7bGV0IHI9dGhpcy5mb290ZXIsaT1yLmxlbmd0aCxhLG87aWYoaSl7bGV0IHM9amMobi5ydGwsdGhpcy54LHRoaXMud2lkdGgpO2ZvcihlLng9ZGYodGhpcyxuLmZvb3RlckFsaWduLG4pLGUueSs9bi5mb290ZXJNYXJnaW5Ub3AsdC50ZXh0QWxpZ249cy50ZXh0QWxpZ24obi5mb290ZXJBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT0kKG4uZm9vdGVyRm9udCksdC5maWxsU3R5bGU9bi5mb290ZXJDb2xvcix0LmZvbnQ9YS5zdHJpbmcsbz0wO288aTsrK28pdC5maWxsVGV4dChyW29dLHMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbi5mb290ZXJTcGFjaW5nfX1kcmF3QmFja2dyb3VuZChlLHQsbixyKXtsZXR7eEFsaWduOmkseUFsaWduOmF9PXRoaXMse3g6byx5OnN9PWUse3dpZHRoOmMsaGVpZ2h0Omx9PW4se3RvcExlZnQ6dSx0b3BSaWdodDpkLGJvdHRvbUxlZnQ6Zixib3R0b21SaWdodDpwfT1XcyhyLmNvcm5lclJhZGl1cyk7dC5maWxsU3R5bGU9ci5iYWNrZ3JvdW5kQ29sb3IsdC5zdHJva2VTdHlsZT1yLmJvcmRlckNvbG9yLHQubGluZVdpZHRoPXIuYm9yZGVyV2lkdGgsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhvK3UscyksYT09PWB0b3BgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MtZCxzKSx0LnF1YWRyYXRpY0N1cnZlVG8obytjLHMsbytjLHMrZCksYT09PWBjZW50ZXJgJiZpPT09YHJpZ2h0YCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obytjLHMrbC1wKSx0LnF1YWRyYXRpY0N1cnZlVG8obytjLHMrbCxvK2MtcCxzK2wpLGE9PT1gYm90dG9tYCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obytmLHMrbCksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scytsLG8scytsLWYpLGE9PT1gY2VudGVyYCYmaT09PWBsZWZ0YCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obyxzK3UpLHQucXVhZHJhdGljQ3VydmVUbyhvLHMsbyt1LHMpLHQuY2xvc2VQYXRoKCksdC5maWxsKCksci5ib3JkZXJXaWR0aD4wJiZ0LnN0cm9rZSgpfV91cGRhdGVBbmltYXRpb25UYXJnZXQoZSl7bGV0IHQ9dGhpcy5jaGFydCxuPXRoaXMuJGFuaW1hdGlvbnMscj1uJiZuLngsaT1uJiZuLnk7aWYocnx8aSl7bGV0IG49UWRbZS5wb3NpdGlvbl0uY2FsbCh0aGlzLHRoaXMuX2FjdGl2ZSx0aGlzLl9ldmVudFBvc2l0aW9uKTtpZighbilyZXR1cm47bGV0IGE9dGhpcy5fc2l6ZT1uZih0aGlzLGUpLG89T2JqZWN0LmFzc2lnbih7fSxuLHRoaXMuX3NpemUpLHM9c2YodCxlLG8pLGM9dWYoZSxvLHMsdCk7KHIuX3RvIT09Yy54fHxpLl90byE9PWMueSkmJih0aGlzLnhBbGlnbj1zLnhBbGlnbix0aGlzLnlBbGlnbj1zLnlBbGlnbix0aGlzLndpZHRoPWEud2lkdGgsdGhpcy5oZWlnaHQ9YS5oZWlnaHQsdGhpcy5jYXJldFg9bi54LHRoaXMuY2FyZXRZPW4ueSx0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucygpLnVwZGF0ZSh0aGlzLGMpKX19X3dpbGxSZW5kZXIoKXtyZXR1cm4hIXRoaXMub3BhY2l0eX1kcmF3KGUpe2xldCB0PXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxuPXRoaXMub3BhY2l0eTtpZighbilyZXR1cm47dGhpcy5fdXBkYXRlQW5pbWF0aW9uVGFyZ2V0KHQpO2xldCByPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0saT17eDp0aGlzLngseTp0aGlzLnl9O249TWF0aC5hYnMobik8LjAwMT8wOm47bGV0IGE9USh0LnBhZGRpbmcpLG89dGhpcy50aXRsZS5sZW5ndGh8fHRoaXMuYmVmb3JlQm9keS5sZW5ndGh8fHRoaXMuYm9keS5sZW5ndGh8fHRoaXMuYWZ0ZXJCb2R5Lmxlbmd0aHx8dGhpcy5mb290ZXIubGVuZ3RoO3QuZW5hYmxlZCYmbyYmKGUuc2F2ZSgpLGUuZ2xvYmFsQWxwaGE9bix0aGlzLmRyYXdCYWNrZ3JvdW5kKGksZSxyLHQpLE1jKGUsdC50ZXh0RGlyZWN0aW9uKSxpLnkrPWEudG9wLHRoaXMuZHJhd1RpdGxlKGksZSx0KSx0aGlzLmRyYXdCb2R5KGksZSx0KSx0aGlzLmRyYXdGb290ZXIoaSxlLHQpLE5jKGUsdC50ZXh0RGlyZWN0aW9uKSxlLnJlc3RvcmUoKSl9Z2V0QWN0aXZlRWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfHxbXX1zZXRBY3RpdmVFbGVtZW50cyhlLHQpe2xldCBuPXRoaXMuX2FjdGl2ZSxyPWUubWFwKCh7ZGF0YXNldEluZGV4OmUsaW5kZXg6dH0pPT57bGV0IG49dGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShlKTtpZighbil0aHJvdyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkYXRhc2V0IGF0IGluZGV4IGArZSk7cmV0dXJue2RhdGFzZXRJbmRleDplLGVsZW1lbnQ6bi5kYXRhW3RdLGluZGV4OnR9fSksaT0hJGEobixyKSxhPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChyLHQpOyhpfHxhKSYmKHRoaXMuX2FjdGl2ZT1yLHRoaXMuX2V2ZW50UG9zaXRpb249dCx0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHM9ITAsdGhpcy51cGRhdGUoITApKX1oYW5kbGVFdmVudChlLHQsbj0hMCl7aWYodCYmdGhpcy5faWdub3JlUmVwbGF5RXZlbnRzKXJldHVybiExO3RoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMTtsZXQgcj10aGlzLm9wdGlvbnMsaT10aGlzLl9hY3RpdmV8fFtdLGE9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudHMoZSxpLHQsbiksbz10aGlzLl9wb3NpdGlvbkNoYW5nZWQoYSxlKSxzPXR8fCEkYShhLGkpfHxvO3JldHVybiBzJiYodGhpcy5fYWN0aXZlPWEsKHIuZW5hYmxlZHx8ci5leHRlcm5hbCkmJih0aGlzLl9ldmVudFBvc2l0aW9uPXt4OmUueCx5OmUueX0sdGhpcy51cGRhdGUoITAsdCkpKSxzfV9nZXRBY3RpdmVFbGVtZW50cyhlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnM7aWYoZS50eXBlPT09YG1vdXNlb3V0YClyZXR1cm5bXTtpZighcilyZXR1cm4gdC5maWx0ZXIoZT0+dGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2UuZGF0YXNldEluZGV4XSYmdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRQYXJzZWQoZS5pbmRleCkhPT12b2lkIDApO2xldCBhPXRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLGkubW9kZSxpLG4pO3JldHVybiBpLnJldmVyc2UmJmEucmV2ZXJzZSgpLGF9X3Bvc2l0aW9uQ2hhbmdlZChlLHQpe2xldHtjYXJldFg6bixjYXJldFk6cixvcHRpb25zOml9PXRoaXMsYT1RZFtpLnBvc2l0aW9uXS5jYWxsKHRoaXMsZSx0KTtyZXR1cm4gYSE9PSExJiYobiE9PWEueHx8ciE9PWEueSl9fSx2Zj17aWQ6YHRvb2x0aXBgLF9lbGVtZW50Ol9mLHBvc2l0aW9uZXJzOlFkLGFmdGVySW5pdChlLHQsbil7biYmKGUudG9vbHRpcD1uZXcgX2Yoe2NoYXJ0OmUsb3B0aW9uczpufSkpfSxiZWZvcmVVcGRhdGUoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LHJlc2V0KGUsdCxuKXtlLnRvb2x0aXAmJmUudG9vbHRpcC5pbml0aWFsaXplKG4pfSxhZnRlckRyYXcoZSl7bGV0IHQ9ZS50b29sdGlwO2lmKHQmJnQuX3dpbGxSZW5kZXIoKSl7bGV0IG49e3Rvb2x0aXA6dH07aWYoZS5ub3RpZnlQbHVnaW5zKGBiZWZvcmVUb29sdGlwRHJhd2Asey4uLm4sY2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO3QuZHJhdyhlLmN0eCksZS5ub3RpZnlQbHVnaW5zKGBhZnRlclRvb2x0aXBEcmF3YCxuKX19LGFmdGVyRXZlbnQoZSx0KXtpZihlLnRvb2x0aXApe2xldCBuPXQucmVwbGF5O2UudG9vbHRpcC5oYW5kbGVFdmVudCh0LmV2ZW50LG4sdC5pbkNoYXJ0QXJlYSkmJih0LmNoYW5nZWQ9ITApfX0sZGVmYXVsdHM6e2VuYWJsZWQ6ITAsZXh0ZXJuYWw6bnVsbCxwb3NpdGlvbjpgYXZlcmFnZWAsYmFja2dyb3VuZENvbG9yOmByZ2JhKDAsMCwwLDAuOClgLHRpdGxlQ29sb3I6YCNmZmZgLHRpdGxlRm9udDp7d2VpZ2h0OmBib2xkYH0sdGl0bGVTcGFjaW5nOjIsdGl0bGVNYXJnaW5Cb3R0b206Nix0aXRsZUFsaWduOmBsZWZ0YCxib2R5Q29sb3I6YCNmZmZgLGJvZHlTcGFjaW5nOjIsYm9keUZvbnQ6e30sYm9keUFsaWduOmBsZWZ0YCxmb290ZXJDb2xvcjpgI2ZmZmAsZm9vdGVyU3BhY2luZzoyLGZvb3Rlck1hcmdpblRvcDo2LGZvb3RlckZvbnQ6e3dlaWdodDpgYm9sZGB9LGZvb3RlckFsaWduOmBsZWZ0YCxwYWRkaW5nOjYsY2FyZXRQYWRkaW5nOjIsY2FyZXRTaXplOjUsY29ybmVyUmFkaXVzOjYsYm94SGVpZ2h0OihlLHQpPT50LmJvZHlGb250LnNpemUsYm94V2lkdGg6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxtdWx0aUtleUJhY2tncm91bmQ6YCNmZmZgLGRpc3BsYXlDb2xvcnM6ITAsYm94UGFkZGluZzowLGJvcmRlckNvbG9yOmByZ2JhKDAsMCwwLDApYCxib3JkZXJXaWR0aDowLGFuaW1hdGlvbjp7ZHVyYXRpb246NDAwLGVhc2luZzpgZWFzZU91dFF1YXJ0YH0sYW5pbWF0aW9uczp7bnVtYmVyczp7dHlwZTpgbnVtYmVyYCxwcm9wZXJ0aWVzOltgeGAsYHlgLGB3aWR0aGAsYGhlaWdodGAsYGNhcmV0WGAsYGNhcmV0WWBdfSxvcGFjaXR5OntlYXNpbmc6YGxpbmVhcmAsZHVyYXRpb246MjAwfX0sY2FsbGJhY2tzOmhmfSxkZWZhdWx0Um91dGVzOntib2R5Rm9udDpgZm9udGAsZm9vdGVyRm9udDpgZm9udGAsdGl0bGVGb250OmBmb250YH0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PmUhPT1gZmlsdGVyYCYmZSE9PWBpdGVtU29ydGAmJmUhPT1gZXh0ZXJuYWxgLF9pbmRleGFibGU6ITEsY2FsbGJhY2tzOntfc2NyaXB0YWJsZTohMSxfaW5kZXhhYmxlOiExfSxhbmltYXRpb246e19mYWxsYmFjazohMX0sYW5pbWF0aW9uczp7X2ZhbGxiYWNrOmBhbmltYXRpb25gfX0sYWRkaXRpb25hbE9wdGlvblNjb3BlczpbYGludGVyYWN0aW9uYF19LHlmPShlLHQsbixyKT0+KHR5cGVvZiB0PT1gc3RyaW5nYD8obj1lLnB1c2godCktMSxyLnVuc2hpZnQoe2luZGV4Om4sbGFiZWw6dH0pKTppc05hTih0KSYmKG49bnVsbCksbik7ZnVuY3Rpb24gYmYoZSx0LG4scil7bGV0IGk9ZS5pbmRleE9mKHQpO3JldHVybiBpPT09LTE/eWYoZSx0LG4scik6aT09PWUubGFzdEluZGV4T2YodCk/aTpufXZhciB4Zj0oZSx0KT0+ZT09PW51bGw/bnVsbDpSbyhNYXRoLnJvdW5kKGUpLDAsdCk7ZnVuY3Rpb24gU2YoZSl7bGV0IHQ9dGhpcy5nZXRMYWJlbHMoKTtyZXR1cm4gZT49MCYmZTx0Lmxlbmd0aD90W2VdOmV9dmFyIENmPWNsYXNzIGV4dGVuZHMgVXV7c3RhdGljIGlkPWBjYXRlZ29yeWA7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6U2Z9fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl92YWx1ZVJhbmdlPTAsdGhpcy5fYWRkZWRMYWJlbHM9W119aW5pdChlKXtsZXQgdD10aGlzLl9hZGRlZExhYmVscztpZih0Lmxlbmd0aCl7bGV0IGU9dGhpcy5nZXRMYWJlbHMoKTtmb3IobGV0e2luZGV4Om4sbGFiZWw6cn1vZiB0KWVbbl09PT1yJiZlLnNwbGljZShuLDEpO3RoaXMuX2FkZGVkTGFiZWxzPVtdfXN1cGVyLmluaXQoZSl9cGFyc2UoZSx0KXtpZihVKGUpKXJldHVybiBudWxsO2xldCBuPXRoaXMuZ2V0TGFiZWxzKCk7cmV0dXJuIHQ9aXNGaW5pdGUodCkmJm5bdF09PT1lP3Q6YmYobixlLHEodCxlKSx0aGlzLl9hZGRlZExhYmVscykseGYodCxuLmxlbmd0aC0xKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbkRlZmluZWQ6ZSxtYXhEZWZpbmVkOnR9PXRoaXMuZ2V0VXNlckJvdW5kcygpLHttaW46bixtYXg6cn09dGhpcy5nZXRNaW5NYXgoITApO3RoaXMub3B0aW9ucy5ib3VuZHM9PT1gdGlja3NgJiYoZXx8KG49MCksdHx8KHI9dGhpcy5nZXRMYWJlbHMoKS5sZW5ndGgtMSkpLHRoaXMubWluPW4sdGhpcy5tYXg9cn1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5taW4sdD10aGlzLm1heCxuPXRoaXMub3B0aW9ucy5vZmZzZXQscj1bXSxpPXRoaXMuZ2V0TGFiZWxzKCk7aT1lPT09MCYmdD09PWkubGVuZ3RoLTE/aTppLnNsaWNlKGUsdCsxKSx0aGlzLl92YWx1ZVJhbmdlPU1hdGgubWF4KGkubGVuZ3RoLSshbiwxKSx0aGlzLl9zdGFydFZhbHVlPXRoaXMubWluLShuPy41OjApO2ZvcihsZXQgbj1lO248PXQ7bisrKXIucHVzaCh7dmFsdWU6bn0pO3JldHVybiByfWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIFNmLmNhbGwodGhpcyxlKX1jb25maWd1cmUoKXtzdXBlci5jb25maWd1cmUoKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHwodGhpcy5fcmV2ZXJzZVBpeGVscz0hdGhpcy5fcmV2ZXJzZVBpeGVscyl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4gdHlwZW9mIGUhPWBudW1iZXJgJiYoZT10aGlzLnBhcnNlKGUpKSxlPT09bnVsbD9OYU46dGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKGUtdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0UGl4ZWxGb3JUaWNrKGUpe2xldCB0PXRoaXMudGlja3M7cmV0dXJuIGU8MHx8ZT50Lmxlbmd0aC0xP251bGw6dGhpcy5nZXRQaXhlbEZvclZhbHVlKHRbZV0udmFsdWUpfWdldFZhbHVlRm9yUGl4ZWwoZSl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5fc3RhcnRWYWx1ZSt0aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKSp0aGlzLl92YWx1ZVJhbmdlKX1nZXRCYXNlUGl4ZWwoKXtyZXR1cm4gdGhpcy5ib3R0b219fTtmdW5jdGlvbiB3ZihlLHQpe2xldCBuPVtdLHtib3VuZHM6cixzdGVwOmksbWluOmEsbWF4Om8scHJlY2lzaW9uOnMsY291bnQ6YyxtYXhUaWNrczpsLG1heERpZ2l0czp1LGluY2x1ZGVCb3VuZHM6ZH09ZSxmPWl8fDEscD1sLTEse21pbjptLG1heDpofT10LGc9IVUoYSksXz0hVShvKSx2PSFVKGMpLHk9KGgtbSkvKHUrMSksYj1UbygoaC1tKS9wL2YpKmYseCxTLEMsdztpZihiPDFlLTE0JiYhZyYmIV8pcmV0dXJuW3t2YWx1ZTptfSx7dmFsdWU6aH1dO3c9TWF0aC5jZWlsKGgvYiktTWF0aC5mbG9vcihtL2IpLHc+cCYmKGI9VG8odypiL3AvZikqZiksVShzKXx8KHg9MTAqKnMsYj1NYXRoLmNlaWwoYip4KS94KSxyPT09YHRpY2tzYD8oUz1NYXRoLmZsb29yKG0vYikqYixDPU1hdGguY2VpbChoL2IpKmIpOihTPW0sQz1oKSxnJiZfJiZpJiZrbygoby1hKS9pLGIvMWUzKT8odz1NYXRoLnJvdW5kKE1hdGgubWluKChvLWEpL2IsbCkpLGI9KG8tYSkvdyxTPWEsQz1vKTp2PyhTPWc/YTpTLEM9Xz9vOkMsdz1jLTEsYj0oQy1TKS93KToodz0oQy1TKS9iLHc9d28odyxNYXRoLnJvdW5kKHcpLGIvMWUzKT9NYXRoLnJvdW5kKHcpOk1hdGguY2VpbCh3KSk7bGV0IFQ9TWF0aC5tYXgoTm8oYiksTm8oUykpO3g9MTAqKihVKHMpP1Q6cyksUz1NYXRoLnJvdW5kKFMqeCkveCxDPU1hdGgucm91bmQoQyp4KS94O2xldCBFPTA7Zm9yKGcmJihkJiZTIT09YT8obi5wdXNoKHt2YWx1ZTphfSksUzxhJiZFKyssd28oTWF0aC5yb3VuZCgoUytFKmIpKngpL3gsYSxUZihhLHksZSkpJiZFKyspOlM8YSYmRSsrKTtFPHc7KytFKXtsZXQgZT1NYXRoLnJvdW5kKChTK0UqYikqeCkveDtpZihfJiZlPm8pYnJlYWs7bi5wdXNoKHt2YWx1ZTplfSl9cmV0dXJuIF8mJmQmJkMhPT1vP24ubGVuZ3RoJiZ3byhuW24ubGVuZ3RoLTFdLnZhbHVlLG8sVGYobyx5LGUpKT9uW24ubGVuZ3RoLTFdLnZhbHVlPW86bi5wdXNoKHt2YWx1ZTpvfSk6KCFffHxDPT09bykmJm4ucHVzaCh7dmFsdWU6Q30pLG59ZnVuY3Rpb24gVGYoZSx0LHtob3Jpem9udGFsOm4sbWluUm90YXRpb246cn0pe2xldCBpPWpvKHIpLGE9KG4/TWF0aC5zaW4oaSk6TWF0aC5jb3MoaSkpfHwuMDAxLG89Ljc1KnQqKGBgK2UpLmxlbmd0aDtyZXR1cm4gTWF0aC5taW4odC9hLG8pfXZhciBFZj1jbGFzcyBleHRlbmRzIFV1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuc3RhcnQ9dm9pZCAwLHRoaXMuZW5kPXZvaWQgMCx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl9lbmRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wfXBhcnNlKGUsdCl7cmV0dXJuIFUoZSl8fCh0eXBlb2YgZT09YG51bWJlcmB8fGUgaW5zdGFuY2VvZiBOdW1iZXIpJiYhaXNGaW5pdGUoK2UpP251bGw6K2V9aGFuZGxlVGlja1JhbmdlT3B0aW9ucygpe2xldHtiZWdpbkF0WmVybzplfT10aGlzLm9wdGlvbnMse21pbkRlZmluZWQ6dCxtYXhEZWZpbmVkOm59PXRoaXMuZ2V0VXNlckJvdW5kcygpLHttaW46cixtYXg6aX09dGhpcyxhPWU9PnI9dD9yOmUsbz1lPT5pPW4/aTplO2lmKGUpe2xldCBlPUNvKHIpLHQ9Q28oaSk7ZTwwJiZ0PDA/bygwKTplPjAmJnQ+MCYmYSgwKX1pZihyPT09aSl7bGV0IHQ9aT09PTA/MTpNYXRoLmFicyhpKi4wNSk7byhpK3QpLGV8fGEoci10KX10aGlzLm1pbj1yLHRoaXMubWF4PWl9Z2V0VGlja0xpbWl0KCl7bGV0e21heFRpY2tzTGltaXQ6ZSxzdGVwU2l6ZTp0fT10aGlzLm9wdGlvbnMudGlja3MsbjtyZXR1cm4gdD8obj1NYXRoLmNlaWwodGhpcy5tYXgvdCktTWF0aC5mbG9vcih0aGlzLm1pbi90KSsxLG4+MWUzJiYoY29uc29sZS53YXJuKGBzY2FsZXMuJHt0aGlzLmlkfS50aWNrcy5zdGVwU2l6ZTogJHt0fSB3b3VsZCByZXN1bHQgZ2VuZXJhdGluZyB1cCB0byAke259IHRpY2tzLiBMaW1pdGluZyB0byAxMDAwLmApLG49MWUzKSk6KG49dGhpcy5jb21wdXRlVGlja0xpbWl0KCksZXx8PTExKSxlJiYobj1NYXRoLm1pbihlLG4pKSxufWNvbXB1dGVUaWNrTGltaXQoKXtyZXR1cm4gMS8wfWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49dGhpcy5nZXRUaWNrTGltaXQoKTtuPU1hdGgubWF4KDIsbik7bGV0IHI9d2Yoe21heFRpY2tzOm4sYm91bmRzOmUuYm91bmRzLG1pbjplLm1pbixtYXg6ZS5tYXgscHJlY2lzaW9uOnQucHJlY2lzaW9uLHN0ZXA6dC5zdGVwU2l6ZSxjb3VudDp0LmNvdW50LG1heERpZ2l0czp0aGlzLl9tYXhEaWdpdHMoKSxob3Jpem9udGFsOnRoaXMuaXNIb3Jpem9udGFsKCksbWluUm90YXRpb246dC5taW5Sb3RhdGlvbnx8MCxpbmNsdWRlQm91bmRzOnQuaW5jbHVkZUJvdW5kcyE9PSExfSx0aGlzLl9yYW5nZXx8dGhpcyk7cmV0dXJuIGUuYm91bmRzPT09YHRpY2tzYCYmQW8ocix0aGlzLGB2YWx1ZWApLGUucmV2ZXJzZT8oci5yZXZlcnNlKCksdGhpcy5zdGFydD10aGlzLm1heCx0aGlzLmVuZD10aGlzLm1pbik6KHRoaXMuc3RhcnQ9dGhpcy5taW4sdGhpcy5lbmQ9dGhpcy5tYXgpLHJ9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy50aWNrcyx0PXRoaXMubWluLG49dGhpcy5tYXg7aWYoc3VwZXIuY29uZmlndXJlKCksdGhpcy5vcHRpb25zLm9mZnNldCYmZS5sZW5ndGgpe2xldCByPShuLXQpL01hdGgubWF4KGUubGVuZ3RoLTEsMSkvMjt0LT1yLG4rPXJ9dGhpcy5fc3RhcnRWYWx1ZT10LHRoaXMuX2VuZFZhbHVlPW4sdGhpcy5fdmFsdWVSYW5nZT1uLXR9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gbXMoZSx0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpfX0sRGY9Y2xhc3MgZXh0ZW5kcyBFZntzdGF0aWMgaWQ9YGxpbmVhcmA7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6X3MuZm9ybWF0dGVycy5udW1lcmljfX07ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW46ZSxtYXg6dH09dGhpcy5nZXRNaW5NYXgoITApO3RoaXMubWluPUsoZSk/ZTowLHRoaXMubWF4PUsodCk/dDoxLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWNvbXB1dGVUaWNrTGltaXQoKXtsZXQgZT10aGlzLmlzSG9yaXpvbnRhbCgpLHQ9ZT90aGlzLndpZHRoOnRoaXMuaGVpZ2h0LG49am8odGhpcy5vcHRpb25zLnRpY2tzLm1pblJvdGF0aW9uKSxyPShlP01hdGguc2luKG4pOk1hdGguY29zKG4pKXx8LjAwMSxpPXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoMCk7cmV0dXJuIE1hdGguY2VpbCh0L01hdGgubWluKDQwLGkubGluZUhlaWdodC9yKSl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PW51bGw/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKChlLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFZhbHVlRm9yUGl4ZWwoZSl7cmV0dXJuIHRoaXMuX3N0YXJ0VmFsdWUrdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkqdGhpcy5fdmFsdWVSYW5nZX19LE9mPWU9Pk1hdGguZmxvb3IoU28oZSkpLGtmPShlLHQpPT4xMCoqKE9mKGUpK3QpO2Z1bmN0aW9uIEFmKGUpe3JldHVybiBlLzEwKipPZihlKT09MX1mdW5jdGlvbiBqZihlLHQsbil7bGV0IHI9MTAqKm4saT1NYXRoLmZsb29yKGUvcik7cmV0dXJuIE1hdGguY2VpbCh0L3IpLWl9ZnVuY3Rpb24gTWYoZSx0KXtsZXQgbj1PZih0LWUpO2Zvcig7amYoZSx0LG4pPjEwOyluKys7Zm9yKDtqZihlLHQsbik8MTA7KW4tLTtyZXR1cm4gTWF0aC5taW4obixPZihlKSl9ZnVuY3Rpb24gTmYoZSx7bWluOnQsbWF4Om59KXt0PVphKGUubWluLHQpO2xldCByPVtdLGk9T2YodCksYT1NZih0LG4pLG89YTwwPzEwKipNYXRoLmFicyhhKToxLHM9MTAqKmEsYz1pPmE/MTAqKmk6MCxsPU1hdGgucm91bmQoKHQtYykqbykvbyx1PU1hdGguZmxvb3IoKHQtYykvcy8xMCkqcyoxMCxkPU1hdGguZmxvb3IoKGwtdSkvMTAqKmEpLGY9WmEoZS5taW4sTWF0aC5yb3VuZCgoYyt1K2QqMTAqKmEpKm8pL28pO2Zvcig7ZjxuOylyLnB1c2goe3ZhbHVlOmYsbWFqb3I6QWYoZiksc2lnbmlmaWNhbmQ6ZH0pLGQ+PTEwP2Q9ZDwxNT8xNToyMDpkKyssZD49MjAmJihhKyssZD0yLG89YT49MD8xOm8pLGY9TWF0aC5yb3VuZCgoYyt1K2QqMTAqKmEpKm8pL287bGV0IHA9WmEoZS5tYXgsZik7cmV0dXJuIHIucHVzaCh7dmFsdWU6cCxtYWpvcjpBZihwKSxzaWduaWZpY2FuZDpkfSkscn0oY2xhc3MgZXh0ZW5kcyBVdXtzdGF0aWMgaWQ9YGxvZ2FyaXRobWljYDtzdGF0aWMgZGVmYXVsdHM9e3RpY2tzOntjYWxsYmFjazpfcy5mb3JtYXR0ZXJzLmxvZ2FyaXRobWljLG1ham9yOntlbmFibGVkOiEwfX19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuc3RhcnQ9dm9pZCAwLHRoaXMuZW5kPXZvaWQgMCx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl92YWx1ZVJhbmdlPTB9cGFyc2UoZSx0KXtsZXQgbj1FZi5wcm90b3R5cGUucGFyc2UuYXBwbHkodGhpcyxbZSx0XSk7aWYobj09PTApe3RoaXMuX3plcm89ITA7cmV0dXJufXJldHVybiBLKG4pJiZuPjA/bjpudWxsfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm1pbj1LKGUpP01hdGgubWF4KDAsZSk6bnVsbCx0aGlzLm1heD1LKHQpP01hdGgubWF4KDAsdCk6bnVsbCx0aGlzLm9wdGlvbnMuYmVnaW5BdFplcm8mJih0aGlzLl96ZXJvPSEwKSx0aGlzLl96ZXJvJiZ0aGlzLm1pbiE9PXRoaXMuX3N1Z2dlc3RlZE1pbiYmIUsodGhpcy5fdXNlck1pbikmJih0aGlzLm1pbj1lPT09a2YodGhpcy5taW4sMCk/a2YodGhpcy5taW4sLTEpOmtmKHRoaXMubWluLDApKSx0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKX1oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl7bGV0e21pbkRlZmluZWQ6ZSxtYXhEZWZpbmVkOnR9PXRoaXMuZ2V0VXNlckJvdW5kcygpLG49dGhpcy5taW4scj10aGlzLm1heCxpPXQ9Pm49ZT9uOnQsYT1lPT5yPXQ/cjplO249PT1yJiYobjw9MD8oaSgxKSxhKDEwKSk6KGkoa2YobiwtMSkpLGEoa2YociwxKSkpKSxuPD0wJiZpKGtmKHIsLTEpKSxyPD0wJiZhKGtmKG4sMSkpLHRoaXMubWluPW4sdGhpcy5tYXg9cn1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9TmYoe21pbjp0aGlzLl91c2VyTWluLG1heDp0aGlzLl91c2VyTWF4fSx0aGlzKTtyZXR1cm4gZS5ib3VuZHM9PT1gdGlja3NgJiZBbyh0LHRoaXMsYHZhbHVlYCksZS5yZXZlcnNlPyh0LnJldmVyc2UoKSx0aGlzLnN0YXJ0PXRoaXMubWF4LHRoaXMuZW5kPXRoaXMubWluKToodGhpcy5zdGFydD10aGlzLm1pbix0aGlzLmVuZD10aGlzLm1heCksdH1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBlPT09dm9pZCAwP2AwYDptcyhlLHRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5taW47c3VwZXIuY29uZmlndXJlKCksdGhpcy5fc3RhcnRWYWx1ZT1TbyhlKSx0aGlzLl92YWx1ZVJhbmdlPVNvKHRoaXMubWF4KS1TbyhlKX1nZXRQaXhlbEZvclZhbHVlKGUpe3JldHVybihlPT09dm9pZCAwfHxlPT09MCkmJihlPXRoaXMubWluKSxlPT09bnVsbHx8aXNOYU4oZSk/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKGU9PT10aGlzLm1pbj8wOihTbyhlKS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe2xldCB0PXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpO3JldHVybiAxMCoqKHRoaXMuX3N0YXJ0VmFsdWUrdCp0aGlzLl92YWx1ZVJhbmdlKX19KTtmdW5jdGlvbiBQZihlKXtsZXQgdD1lLnRpY2tzO2lmKHQuZGlzcGxheSYmZS5kaXNwbGF5KXtsZXQgZT1RKHQuYmFja2Ryb3BQYWRkaW5nKTtyZXR1cm4gcSh0LmZvbnQmJnQuZm9udC5zaXplLFouZm9udC5zaXplKStlLmhlaWdodH1yZXR1cm4gMH1mdW5jdGlvbiBGZihlLHQsbil7cmV0dXJuIG49VyhuKT9uOltuXSx7dzpUcyhlLHQuc3RyaW5nLG4pLGg6bi5sZW5ndGgqdC5saW5lSGVpZ2h0fX1mdW5jdGlvbiBJZihlLHQsbixyLGkpe3JldHVybiBlPT09cnx8ZT09PWk/e3N0YXJ0OnQtbi8yLGVuZDp0K24vMn06ZTxyfHxlPmk/e3N0YXJ0OnQtbixlbmQ6dH06e3N0YXJ0OnQsZW5kOnQrbn19ZnVuY3Rpb24gTGYoZSl7bGV0IHQ9e2w6ZS5sZWZ0K2UuX3BhZGRpbmcubGVmdCxyOmUucmlnaHQtZS5fcGFkZGluZy5yaWdodCx0OmUudG9wK2UuX3BhZGRpbmcudG9wLGI6ZS5ib3R0b20tZS5fcGFkZGluZy5ib3R0b219LG49T2JqZWN0LmFzc2lnbih7fSx0KSxyPVtdLGk9W10sYT1lLl9wb2ludExhYmVscy5sZW5ndGgsbz1lLm9wdGlvbnMucG9pbnRMYWJlbHMscz1vLmNlbnRlclBvaW50TGFiZWxzP1gvYTowO2ZvcihsZXQgYz0wO2M8YTtjKyspe2xldCBhPW8uc2V0Q29udGV4dChlLmdldFBvaW50TGFiZWxDb250ZXh0KGMpKTtpW2NdPWEucGFkZGluZztsZXQgbD1lLmdldFBvaW50UG9zaXRpb24oYyxlLmRyYXdpbmdBcmVhK2lbY10scyksdT0kKGEuZm9udCksZD1GZihlLmN0eCx1LGUuX3BvaW50TGFiZWxzW2NdKTtyW2NdPWQ7bGV0IGY9SW8oZS5nZXRJbmRleEFuZ2xlKGMpK3MpLHA9TWF0aC5yb3VuZChNbyhmKSk7UmYobix0LGYsSWYocCxsLngsZC53LDAsMTgwKSxJZihwLGwueSxkLmgsOTAsMjcwKSl9ZS5zZXRDZW50ZXJQb2ludCh0Lmwtbi5sLG4uci10LnIsdC50LW4udCxuLmItdC5iKSxlLl9wb2ludExhYmVsSXRlbXM9VmYoZSxyLGkpfWZ1bmN0aW9uIFJmKGUsdCxuLHIsaSl7bGV0IGE9TWF0aC5hYnMoTWF0aC5zaW4obikpLG89TWF0aC5hYnMoTWF0aC5jb3MobikpLHM9MCxjPTA7ci5zdGFydDx0Lmw/KHM9KHQubC1yLnN0YXJ0KS9hLGUubD1NYXRoLm1pbihlLmwsdC5sLXMpKTpyLmVuZD50LnImJihzPShyLmVuZC10LnIpL2EsZS5yPU1hdGgubWF4KGUucix0LnIrcykpLGkuc3RhcnQ8dC50PyhjPSh0LnQtaS5zdGFydCkvbyxlLnQ9TWF0aC5taW4oZS50LHQudC1jKSk6aS5lbmQ+dC5iJiYoYz0oaS5lbmQtdC5iKS9vLGUuYj1NYXRoLm1heChlLmIsdC5iK2MpKX1mdW5jdGlvbiB6ZihlLHQsbil7bGV0IHI9ZS5kcmF3aW5nQXJlYSx7ZXh0cmE6aSxhZGRpdGlvbmFsQW5nbGU6YSxwYWRkaW5nOm8sc2l6ZTpzfT1uLGM9ZS5nZXRQb2ludFBvc2l0aW9uKHQscitpK28sYSksbD1NYXRoLnJvdW5kKE1vKElvKGMuYW5nbGUreW8pKSksdT1XZihjLnkscy5oLGwpLGQ9SGYobCksZj1VZihjLngscy53LGQpO3JldHVybnt2aXNpYmxlOiEwLHg6Yy54LHk6dSx0ZXh0QWxpZ246ZCxsZWZ0OmYsdG9wOnUscmlnaHQ6ZitzLncsYm90dG9tOnUrcy5ofX1mdW5jdGlvbiBCZihlLHQpe2lmKCF0KXJldHVybiEwO2xldHtsZWZ0Om4sdG9wOnIscmlnaHQ6aSxib3R0b206YX09ZTtyZXR1cm4hKEFzKHt4Om4seTpyfSx0KXx8QXMoe3g6bix5OmF9LHQpfHxBcyh7eDppLHk6cn0sdCl8fEFzKHt4OmkseTphfSx0KSl9ZnVuY3Rpb24gVmYoZSx0LG4pe2xldCByPVtdLGk9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLGE9ZS5vcHRpb25zLHtjZW50ZXJQb2ludExhYmVsczpvLGRpc3BsYXk6c309YS5wb2ludExhYmVscyxjPXtleHRyYTpQZihhKS8yLGFkZGl0aW9uYWxBbmdsZTpvP1gvaTowfSxsO2ZvcihsZXQgYT0wO2E8aTthKyspe2MucGFkZGluZz1uW2FdLGMuc2l6ZT10W2FdO2xldCBpPXpmKGUsYSxjKTtyLnB1c2goaSkscz09PWBhdXRvYCYmKGkudmlzaWJsZT1CZihpLGwpLGkudmlzaWJsZSYmKGw9aSkpfXJldHVybiByfWZ1bmN0aW9uIEhmKGUpe3JldHVybiBlPT09MHx8ZT09PTE4MD9gY2VudGVyYDplPDE4MD9gbGVmdGA6YHJpZ2h0YH1mdW5jdGlvbiBVZihlLHQsbil7cmV0dXJuIG49PT1gcmlnaHRgP2UtPXQ6bj09PWBjZW50ZXJgJiYoZS09dC8yKSxlfWZ1bmN0aW9uIFdmKGUsdCxuKXtyZXR1cm4gbj09PTkwfHxuPT09MjcwP2UtPXQvMjoobj4yNzB8fG48OTApJiYoZS09dCksZX1mdW5jdGlvbiBHZihlLHQsbil7bGV0e2xlZnQ6cix0b3A6aSxyaWdodDphLGJvdHRvbTpvfT1uLHtiYWNrZHJvcENvbG9yOnN9PXQ7aWYoIVUocykpe2xldCBuPVdzKHQuYm9yZGVyUmFkaXVzKSxjPVEodC5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFN0eWxlPXM7bGV0IGw9ci1jLmxlZnQsdT1pLWMudG9wLGQ9YS1yK2Mud2lkdGgsZj1vLWkrYy5oZWlnaHQ7T2JqZWN0LnZhbHVlcyhuKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxMcyhlLHt4OmwseTp1LHc6ZCxoOmYscmFkaXVzOm59KSxlLmZpbGwoKSk6ZS5maWxsUmVjdChsLHUsZCxmKX19ZnVuY3Rpb24gS2YoZSx0KXtsZXR7Y3R4Om4sb3B0aW9uczp7cG9pbnRMYWJlbHM6cn19PWU7Zm9yKGxldCBpPXQtMTtpPj0wO2ktLSl7bGV0IHQ9ZS5fcG9pbnRMYWJlbEl0ZW1zW2ldO2lmKCF0LnZpc2libGUpY29udGludWU7bGV0IGE9ci5zZXRDb250ZXh0KGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO0dmKG4sYSx0KTtsZXQgbz0kKGEuZm9udCkse3g6cyx5OmMsdGV4dEFsaWduOmx9PXQ7SXMobixlLl9wb2ludExhYmVsc1tpXSxzLGMrby5saW5lSGVpZ2h0LzIsbyx7Y29sb3I6YS5jb2xvcix0ZXh0QWxpZ246bCx0ZXh0QmFzZWxpbmU6YG1pZGRsZWB9KX19ZnVuY3Rpb24gcWYoZSx0LG4scil7bGV0e2N0eDppfT1lO2lmKG4paS5hcmMoZS54Q2VudGVyLGUueUNlbnRlcix0LDAsZ28pO2Vsc2V7bGV0IG49ZS5nZXRQb2ludFBvc2l0aW9uKDAsdCk7aS5tb3ZlVG8obi54LG4ueSk7Zm9yKGxldCBhPTE7YTxyO2ErKyluPWUuZ2V0UG9pbnRQb3NpdGlvbihhLHQpLGkubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBKZihlLHQsbixyLGkpe2xldCBhPWUuY3R4LG89dC5jaXJjdWxhcix7Y29sb3I6cyxsaW5lV2lkdGg6Y309dDshbyYmIXJ8fCFzfHwhY3x8bjwwfHwoYS5zYXZlKCksYS5zdHJva2VTdHlsZT1zLGEubGluZVdpZHRoPWMsYS5zZXRMaW5lRGFzaChpLmRhc2h8fFtdKSxhLmxpbmVEYXNoT2Zmc2V0PWkuZGFzaE9mZnNldCxhLmJlZ2luUGF0aCgpLHFmKGUsbixvLHIpLGEuY2xvc2VQYXRoKCksYS5zdHJva2UoKSxhLnJlc3RvcmUoKSl9ZnVuY3Rpb24gWWYoZSx0LG4pe3JldHVybiBxcyhlLHtsYWJlbDpuLGluZGV4OnQsdHlwZTpgcG9pbnRMYWJlbGB9KX0oY2xhc3MgZXh0ZW5kcyBFZntzdGF0aWMgaWQ9YHJhZGlhbExpbmVhcmA7c3RhdGljIGRlZmF1bHRzPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246YGNoYXJ0QXJlYWAsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZDp7Y2lyY3VsYXI6ITF9LHN0YXJ0QW5nbGU6MCx0aWNrczp7c2hvd0xhYmVsQmFja2Ryb3A6ITAsY2FsbGJhY2s6X3MuZm9ybWF0dGVycy5udW1lcmljfSxwb2ludExhYmVsczp7YmFja2Ryb3BDb2xvcjp2b2lkIDAsYmFja2Ryb3BQYWRkaW5nOjIsZGlzcGxheTohMCxmb250OntzaXplOjEwfSxjYWxsYmFjayhlKXtyZXR1cm4gZX0scGFkZGluZzo1LGNlbnRlclBvaW50TGFiZWxzOiExfX07c3RhdGljIGRlZmF1bHRSb3V0ZXM9eyJhbmdsZUxpbmVzLmNvbG9yIjpgYm9yZGVyQ29sb3JgLCJwb2ludExhYmVscy5jb2xvciI6YGNvbG9yYCwidGlja3MuY29sb3IiOmBjb2xvcmB9O3N0YXRpYyBkZXNjcmlwdG9ycz17YW5nbGVMaW5lczp7X2ZhbGxiYWNrOmBncmlkYH19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMueENlbnRlcj12b2lkIDAsdGhpcy55Q2VudGVyPXZvaWQgMCx0aGlzLmRyYXdpbmdBcmVhPXZvaWQgMCx0aGlzLl9wb2ludExhYmVscz1bXSx0aGlzLl9wb2ludExhYmVsSXRlbXM9W119c2V0RGltZW5zaW9ucygpe2xldCBlPXRoaXMuX3BhZGRpbmc9UShQZih0aGlzLm9wdGlvbnMpLzIpLHQ9dGhpcy53aWR0aD10aGlzLm1heFdpZHRoLWUud2lkdGgsbj10aGlzLmhlaWdodD10aGlzLm1heEhlaWdodC1lLmhlaWdodDt0aGlzLnhDZW50ZXI9TWF0aC5mbG9vcih0aGlzLmxlZnQrdC8yK2UubGVmdCksdGhpcy55Q2VudGVyPU1hdGguZmxvb3IodGhpcy50b3Arbi8yK2UudG9wKSx0aGlzLmRyYXdpbmdBcmVhPU1hdGguZmxvb3IoTWF0aC5taW4odCxuKS8yKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMSk7dGhpcy5taW49SyhlKSYmIWlzTmFOKGUpP2U6MCx0aGlzLm1heD1LKHQpJiYhaXNOYU4odCk/dDowLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWNvbXB1dGVUaWNrTGltaXQoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuZHJhd2luZ0FyZWEvUGYodGhpcy5vcHRpb25zKSl9Z2VuZXJhdGVUaWNrTGFiZWxzKGUpe0VmLnByb3RvdHlwZS5nZW5lcmF0ZVRpY2tMYWJlbHMuY2FsbCh0aGlzLGUpLHRoaXMuX3BvaW50TGFiZWxzPXRoaXMuZ2V0TGFiZWxzKCkubWFwKChlLHQpPT57bGV0IG49Sih0aGlzLm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssW2UsdF0sdGhpcyk7cmV0dXJuIG58fG49PT0wP246YGB9KS5maWx0ZXIoKGUsdCk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkodCkpfWZpdCgpe2xldCBlPXRoaXMub3B0aW9ucztlLmRpc3BsYXkmJmUucG9pbnRMYWJlbHMuZGlzcGxheT9MZih0aGlzKTp0aGlzLnNldENlbnRlclBvaW50KDAsMCwwLDApfXNldENlbnRlclBvaW50KGUsdCxuLHIpe3RoaXMueENlbnRlcis9TWF0aC5mbG9vcigoZS10KS8yKSx0aGlzLnlDZW50ZXIrPU1hdGguZmxvb3IoKG4tcikvMiksdGhpcy5kcmF3aW5nQXJlYS09TWF0aC5taW4odGhpcy5kcmF3aW5nQXJlYS8yLE1hdGgubWF4KGUsdCxuLHIpKX1nZXRJbmRleEFuZ2xlKGUpe2xldCB0PWdvLyh0aGlzLl9wb2ludExhYmVscy5sZW5ndGh8fDEpLG49dGhpcy5vcHRpb25zLnN0YXJ0QW5nbGV8fDA7cmV0dXJuIElvKGUqdCtqbyhuKSl9Z2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoZSl7aWYoVShlKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2U/KHRoaXMubWF4LWUpKnQ6KGUtdGhpcy5taW4pKnR9Z2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZSl7aWYoVShlKSlyZXR1cm4gTmFOO2xldCB0PWUvKHRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKSk7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXZlcnNlP3RoaXMubWF4LXQ6dGhpcy5taW4rdH1nZXRQb2ludExhYmVsQ29udGV4dChlKXtsZXQgdD10aGlzLl9wb2ludExhYmVsc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gWWYodGhpcy5nZXRDb250ZXh0KCksZSxuKX19Z2V0UG9pbnRQb3NpdGlvbihlLHQsbj0wKXtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoZSkteW8rbjtyZXR1cm57eDpNYXRoLmNvcyhyKSp0K3RoaXMueENlbnRlcix5Ok1hdGguc2luKHIpKnQrdGhpcy55Q2VudGVyLGFuZ2xlOnJ9fWdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShlLHQpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24oZSx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQpKX1nZXRCYXNlUG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGV8fDAsdGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0UG9pbnRMYWJlbFBvc2l0aW9uKGUpe2xldHtsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX09dGhpcy5fcG9pbnRMYWJlbEl0ZW1zW2VdO3JldHVybntsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX19ZHJhd0JhY2tncm91bmQoKXtsZXR7YmFja2dyb3VuZENvbG9yOmUsZ3JpZDp7Y2lyY3VsYXI6dH19PXRoaXMub3B0aW9ucztpZihlKXtsZXQgbj10aGlzLmN0eDtuLnNhdmUoKSxuLmJlZ2luUGF0aCgpLHFmKHRoaXMsdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksdCx0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpLG4uY2xvc2VQYXRoKCksbi5maWxsU3R5bGU9ZSxuLmZpbGwoKSxuLnJlc3RvcmUoKX19ZHJhd0dyaWQoKXtsZXQgZT10aGlzLmN0eCx0PXRoaXMub3B0aW9ucyx7YW5nbGVMaW5lczpuLGdyaWQ6cixib3JkZXI6aX09dCxhPXRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCxvLHMsYztpZih0LnBvaW50TGFiZWxzLmRpc3BsYXkmJktmKHRoaXMsYSksci5kaXNwbGF5JiZ0aGlzLnRpY2tzLmZvckVhY2goKGUsdCk9PntpZih0IT09MHx8dD09PTAmJnRoaXMubWluPDApe3M9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShlLnZhbHVlKTtsZXQgbj10aGlzLmdldENvbnRleHQodCksbz1yLnNldENvbnRleHQobiksYz1pLnNldENvbnRleHQobik7SmYodGhpcyxvLHMsYSxjKX19KSxuLmRpc3BsYXkpe2ZvcihlLnNhdmUoKSxvPWEtMTtvPj0wO28tLSl7bGV0IHI9bi5zZXRDb250ZXh0KHRoaXMuZ2V0UG9pbnRMYWJlbENvbnRleHQobykpLHtjb2xvcjppLGxpbmVXaWR0aDphfT1yOyFhfHwhaXx8KGUubGluZVdpZHRoPWEsZS5zdHJva2VTdHlsZT1pLGUuc2V0TGluZURhc2goci5ib3JkZXJEYXNoKSxlLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxzPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodC5yZXZlcnNlP3RoaXMubWluOnRoaXMubWF4KSxjPXRoaXMuZ2V0UG9pbnRQb3NpdGlvbihvLHMpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5saW5lVG8oYy54LGMueSksZS5zdHJva2UoKSl9ZS5yZXN0b3JlKCl9fWRyYXdCb3JkZXIoKXt9ZHJhd0xhYmVscygpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLG49dC50aWNrcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoMCksaSxhO2Uuc2F2ZSgpLGUudHJhbnNsYXRlKHRoaXMueENlbnRlcix0aGlzLnlDZW50ZXIpLGUucm90YXRlKHIpLGUudGV4dEFsaWduPWBjZW50ZXJgLGUudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHRoaXMudGlja3MuZm9yRWFjaCgocixvKT0+e2lmKG89PT0wJiZ0aGlzLm1pbj49MCYmIXQucmV2ZXJzZSlyZXR1cm47bGV0IHM9bi5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChvKSksYz0kKHMuZm9udCk7aWYoaT10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMudGlja3Nbb10udmFsdWUpLHMuc2hvd0xhYmVsQmFja2Ryb3Ape2UuZm9udD1jLnN0cmluZyxhPWUubWVhc3VyZVRleHQoci5sYWJlbCkud2lkdGgsZS5maWxsU3R5bGU9cy5iYWNrZHJvcENvbG9yO2xldCB0PVEocy5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFJlY3QoLWEvMi10LmxlZnQsLWktYy5zaXplLzItdC50b3AsYSt0LndpZHRoLGMuc2l6ZSt0LmhlaWdodCl9SXMoZSxyLmxhYmVsLDAsLWksYyx7Y29sb3I6cy5jb2xvcixzdHJva2VDb2xvcjpzLnRleHRTdHJva2VDb2xvcixzdHJva2VXaWR0aDpzLnRleHRTdHJva2VXaWR0aH0pfSksZS5yZXN0b3JlKCl9ZHJhd1RpdGxlKCl7fX0pO3ZhciBYZj17bWlsbGlzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjEsc3RlcHM6MWUzfSxzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjFlMyxzdGVwczo2MH0sbWludXRlOntjb21tb246ITAsc2l6ZTo2ZTQsc3RlcHM6NjB9LGhvdXI6e2NvbW1vbjohMCxzaXplOjM2ZTUsc3RlcHM6MjR9LGRheTp7Y29tbW9uOiEwLHNpemU6ODY0ZTUsc3RlcHM6MzB9LHdlZWs6e2NvbW1vbjohMSxzaXplOjYwNDhlNSxzdGVwczo0fSxtb250aDp7Y29tbW9uOiEwLHNpemU6MjYyOGU2LHN0ZXBzOjEyfSxxdWFydGVyOntjb21tb246ITEsc2l6ZTo3ODg0ZTYsc3RlcHM6NH0seWVhcjp7Y29tbW9uOiEwLHNpemU6MzE1NGU3fX0sWmY9T2JqZWN0LmtleXMoWGYpO2Z1bmN0aW9uIFFmKGUsdCl7cmV0dXJuIGUtdH1mdW5jdGlvbiAkZihlLHQpe2lmKFUodCkpcmV0dXJuIG51bGw7bGV0IG49ZS5fYWRhcHRlcix7cGFyc2VyOnIscm91bmQ6aSxpc29XZWVrZGF5OmF9PWUuX3BhcnNlT3B0cyxvPXQ7cmV0dXJuIHR5cGVvZiByPT1gZnVuY3Rpb25gJiYobz1yKG8pKSxLKG8pfHwobz10eXBlb2Ygcj09YHN0cmluZ2A/bi5wYXJzZShvLHIpOm4ucGFyc2UobykpLG89PT1udWxsP251bGw6KGkmJihvPWk9PT1gd2Vla2AmJihPbyhhKXx8YT09PSEwKT9uLnN0YXJ0T2YobyxgaXNvV2Vla2AsYSk6bi5zdGFydE9mKG8saSkpLCtvKX1mdW5jdGlvbiBlcChlLHQsbixyKXtsZXQgaT1aZi5sZW5ndGg7Zm9yKGxldCBhPVpmLmluZGV4T2YoZSk7YTxpLTE7KythKXtsZXQgZT1YZltaZlthXV0saT1lLnN0ZXBzP2Uuc3RlcHM6MioqNTMtMTtpZihlLmNvbW1vbiYmTWF0aC5jZWlsKChuLXQpLyhpKmUuc2l6ZSkpPD1yKXJldHVybiBaZlthXX1yZXR1cm4gWmZbaS0xXX1mdW5jdGlvbiB0cChlLHQsbixyLGkpe2ZvcihsZXQgYT1aZi5sZW5ndGgtMTthPj1aZi5pbmRleE9mKG4pO2EtLSl7bGV0IG49WmZbYV07aWYoWGZbbl0uY29tbW9uJiZlLl9hZGFwdGVyLmRpZmYoaSxyLG4pPj10LTEpcmV0dXJuIG59cmV0dXJuIFpmW24/WmYuaW5kZXhPZihuKTowXX1mdW5jdGlvbiBucChlKXtmb3IobGV0IHQ9WmYuaW5kZXhPZihlKSsxLG49WmYubGVuZ3RoO3Q8bjsrK3QpaWYoWGZbWmZbdF1dLmNvbW1vbilyZXR1cm4gWmZbdF19ZnVuY3Rpb24gcnAoZSx0LG4pe2lmKCFuKWVbdF09ITA7ZWxzZSBpZihuLmxlbmd0aCl7bGV0e2xvOnIsaGk6aX09Vm8obix0KSxhPW5bcl0+PXQ/bltyXTpuW2ldO2VbYV09ITB9fWZ1bmN0aW9uIGlwKGUsdCxuLHIpe2xldCBpPWUuX2FkYXB0ZXIsYT0raS5zdGFydE9mKHRbMF0udmFsdWUsciksbz10W3QubGVuZ3RoLTFdLnZhbHVlLHMsYztmb3Iocz1hO3M8PW87cz0raS5hZGQocywxLHIpKWM9bltzXSxjPj0wJiYodFtjXS5tYWpvcj0hMCk7cmV0dXJuIHR9ZnVuY3Rpb24gYXAoZSx0LG4pe2xldCByPVtdLGk9e30sYT10Lmxlbmd0aCxvLHM7Zm9yKG89MDtvPGE7KytvKXM9dFtvXSxpW3NdPW8sci5wdXNoKHt2YWx1ZTpzLG1ham9yOiExfSk7cmV0dXJuIGE9PT0wfHwhbj9yOmlwKGUscixpLG4pfXZhciBvcD1jbGFzcyBleHRlbmRzIFV1e3N0YXRpYyBpZD1gdGltZWA7c3RhdGljIGRlZmF1bHRzPXtib3VuZHM6YGRhdGFgLGFkYXB0ZXJzOnt9LHRpbWU6e3BhcnNlcjohMSx1bml0OiExLHJvdW5kOiExLGlzb1dlZWtkYXk6ITEsbWluVW5pdDpgbWlsbGlzZWNvbmRgLGRpc3BsYXlGb3JtYXRzOnt9fSx0aWNrczp7c291cmNlOmBhdXRvYCxjYWxsYmFjazohMSxtYWpvcjp7ZW5hYmxlZDohMX19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfSx0aGlzLl91bml0PWBkYXlgLHRoaXMuX21ham9yVW5pdD12b2lkIDAsdGhpcy5fb2Zmc2V0cz17fSx0aGlzLl9ub3JtYWxpemVkPSExLHRoaXMuX3BhcnNlT3B0cz12b2lkIDB9aW5pdChlLHQ9e30pe2xldCBuPWUudGltZXx8PXt9LHI9dGhpcy5fYWRhcHRlcj1uZXcgRGwuX2RhdGUoZS5hZGFwdGVycy5kYXRlKTtyLmluaXQodCksaW8obi5kaXNwbGF5Rm9ybWF0cyxyLmZvcm1hdHMoKSksdGhpcy5fcGFyc2VPcHRzPXtwYXJzZXI6bi5wYXJzZXIscm91bmQ6bi5yb3VuZCxpc29XZWVrZGF5Om4uaXNvV2Vla2RheX0sc3VwZXIuaW5pdChlKSx0aGlzLl9ub3JtYWxpemVkPXQubm9ybWFsaXplZH1wYXJzZShlLHQpe3JldHVybiBlPT09dm9pZCAwP251bGw6JGYodGhpcyxlKX1iZWZvcmVMYXlvdXQoKXtzdXBlci5iZWZvcmVMYXlvdXQoKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9dGhpcy5fYWRhcHRlcixuPWUudGltZS51bml0fHxgZGF5YCx7bWluOnIsbWF4OmksbWluRGVmaW5lZDphLG1heERlZmluZWQ6b309dGhpcy5nZXRVc2VyQm91bmRzKCk7ZnVuY3Rpb24gcyhlKXshYSYmIWlzTmFOKGUubWluKSYmKHI9TWF0aC5taW4ocixlLm1pbikpLCFvJiYhaXNOYU4oZS5tYXgpJiYoaT1NYXRoLm1heChpLGUubWF4KSl9KCFhfHwhbykmJihzKHRoaXMuX2dldExhYmVsQm91bmRzKCkpLChlLmJvdW5kcyE9PWB0aWNrc2B8fGUudGlja3Muc291cmNlIT09YGxhYmVsc2ApJiZzKHRoaXMuZ2V0TWluTWF4KCExKSkpLHI9SyhyKSYmIWlzTmFOKHIpP3I6K3Quc3RhcnRPZihEYXRlLm5vdygpLG4pLGk9SyhpKSYmIWlzTmFOKGkpP2k6K3QuZW5kT2YoRGF0ZS5ub3coKSxuKSsxLHRoaXMubWluPU1hdGgubWluKHIsaS0xKSx0aGlzLm1heD1NYXRoLm1heChyKzEsaSl9X2dldExhYmVsQm91bmRzKCl7bGV0IGU9dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKSx0PTEvMCxuPS0xLzA7cmV0dXJuIGUubGVuZ3RoJiYodD1lWzBdLG49ZVtlLmxlbmd0aC0xXSkse21pbjp0LG1heDpufX1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aW1lLG49ZS50aWNrcyxyPW4uc291cmNlPT09YGxhYmVsc2A/dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTp0aGlzLl9nZW5lcmF0ZSgpO2UuYm91bmRzPT09YHRpY2tzYCYmci5sZW5ndGgmJih0aGlzLm1pbj10aGlzLl91c2VyTWlufHxyWzBdLHRoaXMubWF4PXRoaXMuX3VzZXJNYXh8fHJbci5sZW5ndGgtMV0pO2xldCBpPXRoaXMubWluLGE9dGhpcy5tYXgsbz1XbyhyLGksYSk7cmV0dXJuIHRoaXMuX3VuaXQ9dC51bml0fHwobi5hdXRvU2tpcD9lcCh0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShpKSk6dHAodGhpcyxvLmxlbmd0aCx0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgpKSx0aGlzLl9tYWpvclVuaXQ9IW4ubWFqb3IuZW5hYmxlZHx8dGhpcy5fdW5pdD09PWB5ZWFyYD92b2lkIDA6bnAodGhpcy5fdW5pdCksdGhpcy5pbml0T2Zmc2V0cyhyKSxlLnJldmVyc2UmJm8ucmV2ZXJzZSgpLGFwKHRoaXMsbyx0aGlzLl9tYWpvclVuaXQpfWFmdGVyQXV0b1NraXAoKXt0aGlzLm9wdGlvbnMub2Zmc2V0QWZ0ZXJBdXRvc2tpcCYmdGhpcy5pbml0T2Zmc2V0cyh0aGlzLnRpY2tzLm1hcChlPT4rZS52YWx1ZSkpfWluaXRPZmZzZXRzKGU9W10pe2xldCB0PTAsbj0wLHIsaTt0aGlzLm9wdGlvbnMub2Zmc2V0JiZlLmxlbmd0aCYmKHI9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVswXSksdD1lLmxlbmd0aD09PTE/MS1yOih0aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzFdKS1yKS8yLGk9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVtlLmxlbmd0aC0xXSksbj1lLmxlbmd0aD09PTE/aTooaS10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTJdKSkvMik7bGV0IGE9ZS5sZW5ndGg8Mz8uNTouMjU7dD1Sbyh0LDAsYSksbj1SbyhuLDAsYSksdGhpcy5fb2Zmc2V0cz17c3RhcnQ6dCxlbmQ6bixmYWN0b3I6MS8odCsxK24pfX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLl9hZGFwdGVyLHQ9dGhpcy5taW4sbj10aGlzLm1heCxyPXRoaXMub3B0aW9ucyxpPXIudGltZSxhPWkudW5pdHx8ZXAoaS5taW5Vbml0LHQsbix0aGlzLl9nZXRMYWJlbENhcGFjaXR5KHQpKSxvPXEoci50aWNrcy5zdGVwU2l6ZSwxKSxzPWE9PT1gd2Vla2AmJmkuaXNvV2Vla2RheSxjPU9vKHMpfHxzPT09ITAsbD17fSx1PXQsZCxmO2lmKGMmJih1PStlLnN0YXJ0T2YodSxgaXNvV2Vla2AscykpLHU9K2Uuc3RhcnRPZih1LGM/YGRheWA6YSksZS5kaWZmKG4sdCxhKT4xZTUqbyl0aHJvdyBFcnJvcih0K2AgYW5kIGArbitgIGFyZSB0b28gZmFyIGFwYXJ0IHdpdGggc3RlcFNpemUgb2YgYCtvK2AgYCthKTtsZXQgcD1yLnRpY2tzLnNvdXJjZT09PWBkYXRhYCYmdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO2ZvcihkPXUsZj0wO2Q8bjtkPStlLmFkZChkLG8sYSksZisrKXJwKGwsZCxwKTtyZXR1cm4oZD09PW58fHIuYm91bmRzPT09YHRpY2tzYHx8Zj09PTEpJiZycChsLGQscCksT2JqZWN0LmtleXMobCkuc29ydChRZikubWFwKGU9PitlKX1nZXRMYWJlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX2FkYXB0ZXIsbj10aGlzLm9wdGlvbnMudGltZTtyZXR1cm4gbi50b29sdGlwRm9ybWF0P3QuZm9ybWF0KGUsbi50b29sdGlwRm9ybWF0KTp0LmZvcm1hdChlLG4uZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpfWZvcm1hdChlLHQpe2xldCBuPXRoaXMub3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzLHI9dGhpcy5fdW5pdCxpPXR8fG5bcl07cmV0dXJuIHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGUsaSl9X3RpY2tGb3JtYXRGdW5jdGlvbihlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnMsYT1pLnRpY2tzLmNhbGxiYWNrO2lmKGEpcmV0dXJuIEooYSxbZSx0LG5dLHRoaXMpO2xldCBvPWkudGltZS5kaXNwbGF5Rm9ybWF0cyxzPXRoaXMuX3VuaXQsYz10aGlzLl9tYWpvclVuaXQsbD1zJiZvW3NdLHU9YyYmb1tjXSxkPW5bdF0sZj1jJiZ1JiZkJiZkLm1ham9yO3JldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdChlLHJ8fChmP3U6bCkpfWdlbmVyYXRlVGlja0xhYmVscyhlKXtsZXQgdCxuLHI7Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpcj1lW3RdLHIubGFiZWw9dGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKHIudmFsdWUsdCxlKX1nZXREZWNpbWFsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjooZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX1nZXRQaXhlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlKTtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHQuc3RhcnQrbikqdC5mYWN0b3IpfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpL3QuZmFjdG9yLXQuZW5kO3JldHVybiB0aGlzLm1pbituKih0aGlzLm1heC10aGlzLm1pbil9X2dldExhYmVsU2l6ZShlKXtsZXQgdD10aGlzLm9wdGlvbnMudGlja3Msbj10aGlzLmN0eC5tZWFzdXJlVGV4dChlKS53aWR0aCxyPWpvKHRoaXMuaXNIb3Jpem9udGFsKCk/dC5tYXhSb3RhdGlvbjp0Lm1pblJvdGF0aW9uKSxpPU1hdGguY29zKHIpLGE9TWF0aC5zaW4ociksbz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLnNpemU7cmV0dXJue3c6bippK28qYSxoOm4qYStvKml9fV9nZXRMYWJlbENhcGFjaXR5KGUpe2xldCB0PXRoaXMub3B0aW9ucy50aW1lLG49dC5kaXNwbGF5Rm9ybWF0cyxyPW5bdC51bml0XXx8bi5taWxsaXNlY29uZCxpPXRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbihlLDAsYXAodGhpcyxbZV0sdGhpcy5fbWFqb3JVbml0KSxyKSxhPXRoaXMuX2dldExhYmVsU2l6ZShpKSxvPU1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoL2Eudzp0aGlzLmhlaWdodC9hLmgpLTE7cmV0dXJuIG8+MD9vOjF9Z2V0RGF0YVRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5kYXRhfHxbXSx0LG47aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2lmKHRoaXMuX25vcm1hbGl6ZWQmJnIubGVuZ3RoKXJldHVybiB0aGlzLl9jYWNoZS5kYXRhPXJbMF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcyk7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpZT1lLmNvbmNhdChyW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpKTtyZXR1cm4gdGhpcy5fY2FjaGUuZGF0YT10aGlzLm5vcm1hbGl6ZShlKX1nZXRMYWJlbFRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5sYWJlbHN8fFtdLHQsbjtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgcj10aGlzLmdldExhYmVscygpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWUucHVzaCgkZih0aGlzLHJbdF0pKTtyZXR1cm4gdGhpcy5fY2FjaGUubGFiZWxzPXRoaXMuX25vcm1hbGl6ZWQ/ZTp0aGlzLm5vcm1hbGl6ZShlKX1ub3JtYWxpemUoZSl7cmV0dXJuIEpvKGUuc29ydChRZikpfX07ZnVuY3Rpb24gc3AoZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aC0xLGEsbyxzLGM7bj8odD49ZVtyXS5wb3MmJnQ8PWVbaV0ucG9zJiYoe2xvOnIsaGk6aX09SG8oZSxgcG9zYCx0KSkse3BvczphLHRpbWU6c309ZVtyXSx7cG9zOm8sdGltZTpjfT1lW2ldKToodD49ZVtyXS50aW1lJiZ0PD1lW2ldLnRpbWUmJih7bG86cixoaTppfT1IbyhlLGB0aW1lYCx0KSkse3RpbWU6YSxwb3M6c309ZVtyXSx7dGltZTpvLHBvczpjfT1lW2ldKTtsZXQgbD1vLWE7cmV0dXJuIGw/cysoYy1zKSoodC1hKS9sOnN9KGNsYXNzIGV4dGVuZHMgb3B7c3RhdGljIGlkPWB0aW1lc2VyaWVzYDtzdGF0aWMgZGVmYXVsdHM9b3AuZGVmYXVsdHM7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fdGFibGU9W10sdGhpcy5fbWluUG9zPXZvaWQgMCx0aGlzLl90YWJsZVJhbmdlPXZvaWQgMH1pbml0T2Zmc2V0cygpe2xldCBlPXRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpLHQ9dGhpcy5fdGFibGU9dGhpcy5idWlsZExvb2t1cFRhYmxlKGUpO3RoaXMuX21pblBvcz1zcCh0LHRoaXMubWluKSx0aGlzLl90YWJsZVJhbmdlPXNwKHQsdGhpcy5tYXgpLXRoaXMuX21pblBvcyxzdXBlci5pbml0T2Zmc2V0cyhlKX1idWlsZExvb2t1cFRhYmxlKGUpe2xldHttaW46dCxtYXg6bn09dGhpcyxyPVtdLGk9W10sYSxvLHMsYyxsO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKWM9ZVthXSxjPj10JiZjPD1uJiZyLnB1c2goYyk7aWYoci5sZW5ndGg8MilyZXR1cm5be3RpbWU6dCxwb3M6MH0se3RpbWU6bixwb3M6MX1dO2ZvcihhPTAsbz1yLmxlbmd0aDthPG87KythKWw9clthKzFdLHM9clthLTFdLGM9clthXSxNYXRoLnJvdW5kKChsK3MpLzIpIT09YyYmaS5wdXNoKHt0aW1lOmMscG9zOmEvKG8tMSl9KTtyZXR1cm4gaX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLm1pbix0PXRoaXMubWF4LG49c3VwZXIuZ2V0RGF0YVRpbWVzdGFtcHMoKTtyZXR1cm4oIW4uaW5jbHVkZXMoZSl8fCFuLmxlbmd0aCkmJm4uc3BsaWNlKDAsMCxlKSwoIW4uaW5jbHVkZXModCl8fG4ubGVuZ3RoPT09MSkmJm4ucHVzaCh0KSxuLnNvcnQoKGUsdCk9PmUtdCl9X2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpe2xldCBlPXRoaXMuX2NhY2hlLmFsbHx8W107aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHQ9dGhpcy5nZXREYXRhVGltZXN0YW1wcygpLG49dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtyZXR1cm4gZT10Lmxlbmd0aCYmbi5sZW5ndGg/dGhpcy5ub3JtYWxpemUodC5jb25jYXQobikpOnQubGVuZ3RoP3Q6bixlPXRoaXMuX2NhY2hlLmFsbD1lLGV9Z2V0RGVjaW1hbEZvclZhbHVlKGUpe3JldHVybihzcCh0aGlzLl90YWJsZSxlKS10aGlzLl9taW5Qb3MpL3RoaXMuX3RhYmxlUmFuZ2V9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkvdC5mYWN0b3ItdC5lbmQ7cmV0dXJuIHNwKHRoaXMuX3RhYmxlLG4qdGhpcy5fdGFibGVSYW5nZSt0aGlzLl9taW5Qb3MsITApfX0pO3ZhciBjcD17ZGF0YTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LG9wdGlvbnM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6KCk9Pih7fSl9LHBsdWdpbnM6e3R5cGU6QXJyYXksZGVmYXVsdDooKT0+W119LGRhdGFzZXRJZEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpgbGFiZWxgfSx1cGRhdGVNb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH19LGxwPXthcmlhTGFiZWw6e3R5cGU6U3RyaW5nfSxhcmlhRGVzY3JpYmVkYnk6e3R5cGU6U3RyaW5nfX0sdXA9e3R5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxkZXN0cm95RGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sLi4uY3AsLi4ubHB9LGRwPShlLHQpPT5PYmplY3QuYXNzaWduKGUsdCk7ZnVuY3Rpb24gZnAoZSl7cmV0dXJuIGMoZSk/TyhlKTplfWZ1bmN0aW9uIHBwKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTplO3JldHVybiBjKHQpP25ldyBQcm94eShlLHt9KTplfWZ1bmN0aW9uIG1wKGUsdCl7bGV0IG49ZS5vcHRpb25zO24mJnQmJk9iamVjdC5hc3NpZ24obix0KX1mdW5jdGlvbiBocChlLHQpe2UubGFiZWxzPXR9ZnVuY3Rpb24gZ3AoZSx0LG4pe2xldCByPVtdO2UuZGF0YXNldHM9dC5tYXAodD0+e2xldCBpPWUuZGF0YXNldHMuZmluZChlPT5lW25dPT09dFtuXSk7cmV0dXJuIWl8fCF0LmRhdGF8fHIuaW5jbHVkZXMoaSk/ey4uLnR9OihyLnB1c2goaSksT2JqZWN0LmFzc2lnbihpLHQpLGkpfSl9ZnVuY3Rpb24gX3AoZSx0KXtsZXQgbj17bGFiZWxzOltdLGRhdGFzZXRzOltdfTtyZXR1cm4gaHAobixlLmxhYmVscyksZ3AobixlLmRhdGFzZXRzLHQpLG59dmFyIHZwPVIoe3Byb3BzOnVwLHNldHVwKGUsdCl7bGV0e2V4cG9zZTpuLHNsb3RzOnJ9PXQsaT1GKG51bGwpLGE9dyhudWxsKTtuKHtjaGFydDphfSk7bGV0IG89KCk9PntpZighaS52YWx1ZSlyZXR1cm47bGV0e3R5cGU6dCxkYXRhOm4sb3B0aW9uczpyLHBsdWdpbnM6byxkYXRhc2V0SWRLZXk6c309ZSxjPXBwKF9wKG4scyksbik7YS52YWx1ZT1uZXcgamQoaS52YWx1ZSx7dHlwZTp0LGRhdGE6YyxvcHRpb25zOnsuLi5yfSxwbHVnaW5zOm99KX0scz0oKT0+e2xldCB0PU8oYS52YWx1ZSk7dCYmKGUuZGVzdHJveURlbGF5PjA/c2V0VGltZW91dCgoKT0+e3QuZGVzdHJveSgpLGEudmFsdWU9bnVsbH0sZS5kZXN0cm95RGVsYXkpOih0LmRlc3Ryb3koKSxhLnZhbHVlPW51bGwpKX0sYz10PT57dC51cGRhdGUoZS51cGRhdGVNb2RlKX07cmV0dXJuIE1lKG8pLENlKHMpLFYoWygpPT5lLm9wdGlvbnMsKCk9PmUuZGF0YV0sKHQsbik9PntsZXRbcixpXT10LFtvLHNdPW4sbD1PKGEudmFsdWUpO2lmKCFsKXJldHVybjtsZXQgdT0hMTtpZihyKXtsZXQgZT1mcChyKSx0PWZwKG8pO2UmJmUhPT10JiYobXAobCxlKSx1PSEwKX1pZihpKXtsZXQgdD1mcChpLmxhYmVscyksbj1mcChzLmxhYmVscykscj1mcChpLmRhdGFzZXRzKSxhPWZwKHMuZGF0YXNldHMpO3QhPT1uJiYoaHAobC5jb25maWcuZGF0YSx0KSx1PSEwKSxyJiZyIT09YSYmKGdwKGwuY29uZmlnLmRhdGEscixlLmRhdGFzZXRJZEtleSksdT0hMCl9dSYmYmUoKCk9PntjKGwpfSl9LHtkZWVwOiEwfSksKCk9PkFlKGBjYW52YXNgLHtyb2xlOmBpbWdgLCJhcmlhLWxhYmVsIjplLmFyaWFMYWJlbCwiYXJpYS1kZXNjcmliZWRieSI6ZS5hcmlhRGVzY3JpYmVkYnkscmVmOml9LFtBZShgcGAse30sW3IuZGVmYXVsdD9yLmRlZmF1bHQoKTpgYF0pXSl9fSk7ZnVuY3Rpb24geXAoZSx0KXtyZXR1cm4gamQucmVnaXN0ZXIodCksUih7cHJvcHM6Y3Asc2V0dXAodCxuKXtsZXR7ZXhwb3NlOnJ9PW4saT13KG51bGwpLGE9dyhudWxsKTtWKCgpPT5hLnZhbHVlPy5jaGFydD8/bnVsbCxlPT57aS52YWx1ZT1lfSx7Zmx1c2g6YHN5bmNgfSkscih7Y2hhcnQ6aX0pO2xldCBvPWU9PnthLnZhbHVlPWV9O3JldHVybigpPT5BZSh2cCxkcCh7cmVmOm99LHt0eXBlOmUsLi4udH0pKX19KX12YXIgYnA9eXAoYGJhcmAsVGwpO2pkLnJlZ2lzdGVyKFRsLEhkLENmLERmLFpkLHZmKTtmdW5jdGlvbiB4cCgpe2xldCBlPUYoYGApLHQ9RihgYCksbj1GKGBgKTtmdW5jdGlvbiByKCl7bGV0IHI9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2UudmFsdWU9ci5nZXRQcm9wZXJ0eVZhbHVlKGAtLWZvcmVncm91bmRgKS50cmltKCksdC52YWx1ZT1yLmdldFByb3BlcnR5VmFsdWUoYC0tbXV0ZWQtZm9yZWdyb3VuZGApLnRyaW0oKSxuLnZhbHVlPXIuZ2V0UHJvcGVydHlWYWx1ZShgLS1ib3JkZXJgKS50cmltKCl9bGV0IGk7cmV0dXJuIE1lKCgpPT57cigpLGk9d2luZG93Lm1hdGNoTWVkaWEoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylgKSxpLmFkZEV2ZW50TGlzdGVuZXIoYGNoYW5nZWAscil9KSxJZSgoKT0+e2k/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNoYW5nZWAscil9KSx7Zm9yZWdyb3VuZDplLG11dGVkRm9yZWdyb3VuZDp0LGJvcmRlcjpufX12YXIgU3A9e2NsYXNzOmBoLTcyIHctZnVsbGB9LENwPVIoe19fbmFtZTpgVXNhZ2VDaGFydGAscHJvcHM6e3RhYjp7fSx3aW5kb3c6e30sc2VyaWVzQnlNZXRyaWM6e319LHNldHVwKGUpe2xldCB0PWUse2ZvcmVncm91bmQ6bixtdXRlZEZvcmVncm91bmQ6cixib3JkZXI6aX09eHAoKSxhPXtyZXF1ZXN0czpbe21ldHJpYzpgcmVxYCxsYWJlbDpgUmVxdWVzdHNgLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH1dLHRva2Vuczpbe21ldHJpYzpgdG9raW5gLGxhYmVsOmBUb2tlbnMgaW5gLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1pbmB9LHttZXRyaWM6YHRva291dGAsbGFiZWw6YFRva2VucyBvdXRgLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1vdXRgfV0sY29zdDpbe21ldHJpYzpgY29zdGAsbGFiZWw6YENvc3QgKFVTRClgLGNvbG9yOmAtLWNoYXJ0LWNvc3RgfV19O2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZT09PWBjb3N0YD90LzFlNjp0fWxldCBzPU4oKCk9PntsZXQgZT1hW3QudGFiXSxuPW5ldyBTZXQ7Zm9yKGxldCByIG9mIGUpZm9yKGxldCBlIG9mIHQuc2VyaWVzQnlNZXRyaWNbci5tZXRyaWNdPz9bXSluLmFkZChlLmJ1Y2tldCk7cmV0dXJuIEFycmF5LmZyb20obikuc29ydCgpfSksYz1OKCgpPT5zLnZhbHVlLm1hcChlPT5nZShlLHQud2luZG93KSkpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGUpLnRyaW0oKX1sZXQgdT1OKCgpPT57bi52YWx1ZTtsZXQgZT1zLnZhbHVlO3JldHVybntsYWJlbHM6Yy52YWx1ZSxkYXRhc2V0czphW3QudGFiXS5tYXAobj0+e2xldCByPW5ldyBNYXAoKHQuc2VyaWVzQnlNZXRyaWNbbi5tZXRyaWNdPz9bXSkubWFwKGU9PltlLmJ1Y2tldCxlLnZhbHVlXSkpO3JldHVybntsYWJlbDpuLmxhYmVsLGJhY2tncm91bmRDb2xvcjpsKG4uY29sb3IpLGRhdGE6ZS5tYXAoZT0+byhuLm1ldHJpYyxyLmdldChlKT8/MCkpfX0pfX0pLGQ9TigoKT0+YVt0LnRhYl0ubGVuZ3RoPjEpLGY9TigoKT0+KHtyZXNwb25zaXZlOiEwLG1haW50YWluQXNwZWN0UmF0aW86ITEsYW5pbWF0aW9uOiExLHNjYWxlczp7eDp7c3RhY2tlZDpkLnZhbHVlLGdyaWQ6e2NvbG9yOmkudmFsdWUsZGlzcGxheTohMX0sdGlja3M6e2NvbG9yOnIudmFsdWV9fSx5OntzdGFja2VkOmQudmFsdWUsYmVnaW5BdFplcm86ITAsZ3JpZDp7Y29sb3I6aS52YWx1ZX0sdGlja3M6e2NvbG9yOnIudmFsdWUsY2FsbGJhY2s6ZT0+dC50YWI9PT1gY29zdGA/YCQke2V9YDprZShOdW1iZXIoZSkpfX19LHBsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTpkLnZhbHVlLGxhYmVsczp7Y29sb3I6bi52YWx1ZX19LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6ZT0+e2xldCBuPWUucGFyc2VkLnk/PzA7cmV0dXJuIHQudGFiPT09YGNvc3RgP2Ake2UuZGF0YXNldC5sYWJlbH06ICQke24udG9GaXhlZCg0KX1gOmAke2UuZGF0YXNldC5sYWJlbH06ICR7a2Uobil9ICgke1VlKG4pfSlgfX19fX0pKTtyZXR1cm4oZSx0KT0+KFAoKSxUZShgZGl2YCxTcCxbTChiKGJwKSx7ZGF0YTp1LnZhbHVlLG9wdGlvbnM6Zi52YWx1ZX0sbnVsbCw4LFtgZGF0YWAsYG9wdGlvbnNgXSldKSl9fSksd3A9M2U0LFRwPXtob3VyOjI0LGRheTozMCxtb250aDoxMn0sRXA9e2hvdXI6YDI0aGAsZGF5OmAzMGRgLG1vbnRoOmAxMm1vYH07ZnVuY3Rpb24gRHAoZSl7c3dpdGNoKGUpe2Nhc2VgcmVxdWVzdHNgOnJldHVybltgcmVxYF07Y2FzZWB0b2tlbnNgOnJldHVybltgdG9raW5gLGB0b2tvdXRgXTtjYXNlYGNvc3RgOnJldHVybltgY29zdGBdfX12YXIgT3A9dWUoYGhpc3RvcnlgLHtzdGF0ZTooKT0+KHtzY29wZTpgdG90YWxgLHdpbmRvdzpgaG91cmAsdGFiOmByZXF1ZXN0c2Asc2VyaWVzQnlNZXRyaWM6e30sbG9hZGluZzohMSxlcnJvcjpgYCx0aW1lcjp2b2lkIDB9KSxhY3Rpb25zOntzZXRTY29wZShlKXtlIT09dGhpcy5zY29wZSYmKHRoaXMuc2NvcGU9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxzZXRXaW5kb3coZSl7ZSE9PXRoaXMud2luZG93JiYodGhpcy53aW5kb3c9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxzZXRUYWIoZSl7ZSE9PXRoaXMudGFiJiYodGhpcy50YWI9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxhc3luYyBmZXRjaFNlcmllcygpe2lmKGplKCkuaXNBdXRoZW50aWNhdGVkKXt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBlPVRwW3RoaXMud2luZG93XSx0PURwKHRoaXMudGFiKSxuPWF3YWl0IFByb21pc2UuYWxsKHQubWFwKHQ9PkZlKGAvYWRtaW4vYXBpL3VzYWdlL2hpc3Rvcnk/c2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zY29wZSl9Jm1ldHJpYz0ke3R9JndpbmRvdz0ke3RoaXMud2luZG93fSZzcGFuPSR7ZX1gKSkpLHI9e307dC5mb3JFYWNoKChlLHQpPT57cltlXT1uW3RdLnBvaW50c30pLHRoaXMuc2VyaWVzQnlNZXRyaWM9cix0aGlzLmVycm9yPWBgfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiB5ZSYmKGUuc3RhdHVzPT09NDAxfHxlLnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpTdHJpbmcoZSl9ZmluYWxseXt0aGlzLmxvYWRpbmc9ITF9fX0sc3RhcnRBdXRvUmVmcmVzaCgpe3RoaXMudGltZXI9PT12b2lkIDAmJih0aGlzLnRpbWVyPXNldEludGVydmFsKCgpPT52b2lkIHRoaXMuZmV0Y2hTZXJpZXMoKSx3cCkpfSxzdG9wQXV0b1JlZnJlc2goKXt0aGlzLnRpbWVyIT09dm9pZCAwJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXZvaWQgMCl9fX0pLGtwPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zYH0sQXA9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtZGVzdHJ1Y3RpdmVgfSxqcD1SKHtfX25hbWU6YENoYXJ0c1ZpZXdgLHNldHVwKGUpe2xldCB0PXZlKCksbj1PcCgpLHtxdWVyeTpyLG5vcm1hbGl6ZWQ6aSxoYXNRdWVyeTphfT1QZSgpLG89TigoKT0+e2xldCBlPXQudXNhZ2U/LnVzZXJzPz9bXSxyPXQudXNhZ2U/Lmdyb3Vwcz8/W10sbz1lLmZpbHRlcihlPT4hYS52YWx1ZXx8TmUoZSxpLnZhbHVlKXx8YHVzZXI6JHtlLmlkfWA9PT1uLnNjb3BlKS5tYXAoZT0+KHt2YWx1ZTpgdXNlcjoke2UuaWR9YCxsYWJlbDplLmlkfSkpO3JldHVyblt7dmFsdWU6YHRvdGFsYCxsYWJlbDpgVG90YWwgKGFsbCB0cmFmZmljKWB9LC4uLnIuZmlsdGVyKHQ9PiFhLnZhbHVlfHxWZSh0LGUsaS52YWx1ZSl8fGBncm91cDoke3QuaWR9YD09PW4uc2NvcGUpLm1hcChlPT4oe3ZhbHVlOmBncm91cDoke2UuaWR9YCxsYWJlbDplLmlkfSkpLC4uLm9dfSkscz1bYGhvdXJgLGBkYXlgLGBtb250aGBdO2Z1bmN0aW9uIGMoZSl7bi5zZXRUYWIoZSl9ZnVuY3Rpb24gbChlKXt0eXBlb2YgZT09YHN0cmluZ2AmJm4uc2V0U2NvcGUoZSl9cmV0dXJuIE1lKCgpPT57bi5mZXRjaFNlcmllcygpLG4uc3RhcnRBdXRvUmVmcmVzaCgpfSksQ2UoKCk9PntuLnN0b3BBdXRvUmVmcmVzaCgpfSksVihvLGU9PntlLnNvbWUoZT0+ZS52YWx1ZT09PW4uc2NvcGUpfHxuLnNldFNjb3BlKGB0b3RhbGApfSksKGUsdCk9PihQKCksSShiKEdlKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoeGUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgc206anVzdGlmeS1iZXR3ZWVuYH0se2RlZmF1bHQ6QigoKT0+W0woYihTZSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5bLi4udFsyXXx8PVtoZShgVXNhZ2UgY2hhcnRzYCwtMSldXSksXzoxfSksSGUoYGRpdmAsa3AsW0woQmUse21vZGVsVmFsdWU6YihyKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9PkUocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciB1c2VycyBvciBncm91cHNgLGNsYXNzOmB3LTU2YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKSxMKGIoWGkpLHsibW9kZWwtdmFsdWUiOmIobikuc2NvcGUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmx9LHtkZWZhdWx0OkIoKCk9PltMKGIobmEpLHtjbGFzczpgdy01NmB9LHtkZWZhdWx0OkIoKCk9PltMKGIocmEpLHtwbGFjZWhvbGRlcjpgU2NvcGVgfSldKSxfOjF9KSxMKGIoWmkpLG51bGwse2RlZmF1bHQ6QigoKT0+WyhQKCEwKSxUZShrLG51bGwscGUoby52YWx1ZSxlPT4oUCgpLEkoYigkaSkse2tleTplLnZhbHVlLHZhbHVlOmUudmFsdWV9LHtkZWZhdWx0OkIoKCk9PltoZShzZShlLmxhYmVsKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pLEwoYihtZSkseyJtb2RlbC12YWx1ZSI6YihuKS53aW5kb3csIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMV18fD1lPT5iKG4pLnNldFdpbmRvdyhlKX0se2RlZmF1bHQ6QigoKT0+W0woYih3ZSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5bKFAoKSxUZShrLG51bGwscGUocyxlPT5MKGIoUmUpLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpCKCgpPT5baGUoc2UoYihFcClbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpLDY0KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSldKSxfOjF9KSxMKGIoZmUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OkIoKCk9PltMKGIobWUpLHsibW9kZWwtdmFsdWUiOmIobikudGFiLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpjfSx7ZGVmYXVsdDpCKCgpPT5bTChiKHdlKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoUmUpLHt2YWx1ZTpgcmVxdWVzdHNgfSx7ZGVmYXVsdDpCKCgpPT5bLi4udFszXXx8PVtoZShgUmVxdWVzdHNgLC0xKV1dKSxfOjF9KSxMKGIoUmUpLHt2YWx1ZTpgdG9rZW5zYH0se2RlZmF1bHQ6QigoKT0+Wy4uLnRbNF18fD1baGUoYFRva2Vuc2AsLTEpXV0pLF86MX0pLEwoYihSZSkse3ZhbHVlOmBjb3N0YH0se2RlZmF1bHQ6QigoKT0+Wy4uLnRbNV18fD1baGUoYENvc3RgLC0xKV1dKSxfOjF9KV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSksYihuKS5lcnJvcj8oUCgpLFRlKGBwYCxBcCxzZShiKG4pLmVycm9yKSwxKSk6emUoYGAsITApLEwoQ3Ase3RhYjpiKG4pLnRhYix3aW5kb3c6YihuKS53aW5kb3csInNlcmllcy1ieS1tZXRyaWMiOmIobikuc2VyaWVzQnlNZXRyaWN9LG51bGwsOCxbYHRhYmAsYHdpbmRvd2AsYHNlcmllcy1ieS1tZXRyaWNgXSldKSxfOjF9KV0pLF86MX0pKX19KTtleHBvcnR7anAgYXMgZGVmYXVsdH07", - ), - }, - "index-B7jPn4s6.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/e30pKTp0fWZ1bmN0aW9uIFFhKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0dXJuIGU7bGV0IG49bChPYmplY3QuY3JlYXRlKG51bGwpLGUpO2ZvcihsZXQgciBpbiB0KW5bcl09WWEoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiAkYSgpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOm8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIGVvPTA7ZnVuY3Rpb24gdG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyPW51bGwpe3Yobil8fChuPWwoe30sbikpLHIhPW51bGwmJiF4KHIpJiYocj1udWxsKTtsZXQgaT0kYSgpLGE9bmV3IFdlYWtTZXQsbz1bXSxzPSExLGM9aS5hcHA9e191aWQ6ZW8rKyxfY29tcG9uZW50Om4sX3Byb3BzOnIsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjphYyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmlnKGUpe30sdXNlKGUsLi4udCl7cmV0dXJuIGEuaGFzKGUpfHwoZSYmdihlLmluc3RhbGwpPyhhLmFkZChlKSxlLmluc3RhbGwoYywuLi50KSk6dihlKSYmKGEuYWRkKGUpLGUoYywuLi50KSkpLGN9LG1peGluKGUpe3JldHVybiBpLm1peGlucy5pbmNsdWRlcyhlKXx8aS5taXhpbnMucHVzaChlKSxjfSxjb21wb25lbnQoZSx0KXtyZXR1cm4gdD8oaS5jb21wb25lbnRzW2VdPXQsYyk6aS5jb21wb25lbnRzW2VdfSxkaXJlY3RpdmUoZSx0KXtyZXR1cm4gdD8oaS5kaXJlY3RpdmVzW2VdPXQsYyk6aS5kaXJlY3RpdmVzW2VdfSxtb3VudChhLG8sbCl7aWYoIXMpe2xldCB1PWMuX2NlVk5vZGV8fEgobixyKTtyZXR1cm4gdS5hcHBDb250ZXh0PWksbD09PSEwP2w9YHN2Z2A6bD09PSExJiYobD12b2lkIDApLG8mJnQ/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+VG4oZSx0LFZzKTtmdW5jdGlvbiB0YyhlLHQsbil7dHJ5e21zKC0xKTtsZXQgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPT09Mj94KHQpJiYhcCh0KT9ncyh0KT9IKGUsbnVsbCxbdF0pOkgoZSx0KTpIKGUsbnVsbCx0KToocj4zP249QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOnI9PT0zJiZncyhuKSYmKG49W25dKSxIKGUsdCxuKSl9ZmluYWxseXttcygxKX19ZnVuY3Rpb24gbmMoKXt9ZnVuY3Rpb24gcmMoZSx0LG4scil7bGV0IGk9bltyXTtpZihpJiZpYyhpLGUpKXJldHVybiBpO2xldCBhPXQoKTtyZXR1cm4gYS5tZW1vPWUuc2xpY2UoKSxhLmNhY2hlSW5kZXg9cixuW3JdPWF9ZnVuY3Rpb24gaWMoZSx0KXtsZXQgbj1lLm1lbW87aWYobi5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKEQobltlXSx0W2VdKSlyZXR1cm4hMTtyZXR1cm4gcHM+MCYmZHMmJmRzLnB1c2goZSksITB9dmFyIGFjPWAzLjUuNDFgLG9jPWEsc2M9Qm4sY2M9c3IsbGM9bHIsdWM9e2NyZWF0ZUNvbXBvbmVudEluc3RhbmNlOk5zLHNldHVwQ29tcG9uZW50OkhzLHJlbmRlckNvbXBvbmVudFJvb3Q6bG8sc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlOmZyLGlzVk5vZGU6Z3Msbm9ybWFsaXplVk5vZGU6RXMsZ2V0Q29tcG9uZW50UHVibGljSW5zdGFuY2U6UXMsZW5zdXJlVmFsaWRWTm9kZTpnYSxwdXNoV2FybmluZ0NvbnRleHQ6SW4scG9wV2FybmluZ0NvbnRleHQ6TG59LGRjPXZvaWQgMCxmYz10eXBlb2Ygd2luZG93PGB1YCYmd2luZG93LnRydXN0ZWRUeXBlcztpZihmYyl0cnl7ZGM9ZmMuY3JlYXRlUG9saWN5KGB2dWVgLHtjcmVhdGVIVE1MOmU9PmV9KX1jYXRjaHt9dmFyIHBjPWRjP2U9PmRjLmNyZWF0ZUhUTUwoZSk6ZT0+ZSxtYz1gaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLGhjPWBodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MYCxnYz10eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwsX2M9Z2MmJmdjLmNyZWF0ZUVsZW1lbnQoYHRlbXBsYXRlYCksdmM9e2luc2VydDooZSx0LG4pPT57dC5pbnNlcnRCZWZvcmUoZSxufHxudWxsKX0scmVtb3ZlOmU9PntsZXQgdD1lLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZChlKX0sY3JlYXRlRWxlbWVudDooZSx0LG4scik9PntsZXQgaT10PT09YHN2Z2A/Z2MuY3JlYXRlRWxlbWVudE5TKG1jLGUpOnQ9PT1gbWF0aG1sYD9nYy5jcmVhdGVFbGVtZW50TlMoaGMsZSk6bj9nYy5jcmVhdGVFbGVtZW50KGUse2lzOm59KTpnYy5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT09YHNlbGVjdGAmJnImJnIubXVsdGlwbGUhPW51bGwmJmkuc2V0QXR0cmlidXRlKGBtdWx0aXBsZWAsci5tdWx0aXBsZSksaX0sY3JlYXRlVGV4dDplPT5nYy5jcmVhdGVUZXh0Tm9kZShlKSxjcmVhdGVDb21tZW50OmU9PmdjLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSx0KT0+e2Uubm9kZVZhbHVlPXR9LHNldEVsZW1lbnRUZXh0OihlLHQpPT57ZS50ZXh0Q29udGVudD10fSxwYXJlbnROb2RlOmU9PmUucGFyZW50Tm9kZSxuZXh0U2libGluZzplPT5lLm5leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+Z2MucXVlcnlTZWxlY3RvcihlKSxzZXRTY29wZUlkKGUsdCl7ZS5zZXRBdHRyaWJ1dGUodCxgYCl9LGluc2VydFN0YXRpY0NvbnRlbnQoZSx0LG4scixpLGEpe2xldCBvPW4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGQ7aWYoaSYmKGk9PT1hfHxpLm5leHRTaWJsaW5nKSlmb3IoO3QuaW5zZXJ0QmVmb3JlKGkuY2xvbmVOb2RlKCEwKSxuKSwhKGk9PT1hfHwhKGk9aS5uZXh0U2libGluZykpOyk7ZWxzZXtfYy5pbm5lckhUTUw9cGMocj09PWBzdmdgP2A8c3ZnPiR7ZX08L3N2Zz5gOnI9PT1gbWF0aG1sYD9gPG1hdGg+JHtlfTwvbWF0aD5gOmUpO2xldCBpPV9jLmNvbnRlbnQ7aWYocj09PWBzdmdgfHxyPT09YG1hdGhtbGApe2xldCBlPWkuZmlyc3RDaGlsZDtmb3IoO2UuZmlyc3RDaGlsZDspaS5hcHBlbmRDaGlsZChlLmZpcnN0Q2hpbGQpO2kucmVtb3ZlQ2hpbGQoZSl9dC5pbnNlcnRCZWZvcmUoaSxuKX1yZXR1cm5bbz9vLm5leHRTaWJsaW5nOnQuZmlyc3RDaGlsZCxuP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkXX19LHljPWB0cmFuc2l0aW9uYCxiYz1gYW5pbWF0aW9uYCx4Yz1TeW1ib2woYF92dGNgKSxTYz17bmFtZTpTdHJpbmcsdHlwZTpTdHJpbmcsY3NzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sZHVyYXRpb246W1N0cmluZyxOdW1iZXIsT2JqZWN0XSxlbnRlckZyb21DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsZW50ZXJUb0NsYXNzOlN0cmluZyxhcHBlYXJGcm9tQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxsZWF2ZUZyb21DbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZ30sQ2M9bCh7fSxKcixTYyksd2M9KGU9PihlLmRpc3BsYXlOYW1lPWBUcmFuc2l0aW9uYCxlLnByb3BzPUNjLGUpKSgoZSx7c2xvdHM6dH0pPT50YyhRcixEYyhlKSx0KSksVGM9KGUsdD1bXSk9PntwKGUpP2UuZm9yRWFjaChlPT5lKC4uLnQpKTplJiZlKC4uLnQpfSxFYz1lPT5lP3AoZSk/ZS5zb21lKGU9PmUubGVuZ3RoPjEpOmUubGVuZ3RoPjE6ITE7ZnVuY3Rpb24gRGMoZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGUpbiBpbiBTY3x8KHRbbl09ZVtuXSk7aWYoZS5jc3M9PT0hMSlyZXR1cm4gdDtsZXR7bmFtZTpuPWB2YCx0eXBlOnIsZHVyYXRpb246aSxlbnRlckZyb21DbGFzczphPWAke259LWVudGVyLWZyb21gLGVudGVyQWN0aXZlQ2xhc3M6bz1gJHtufS1lbnRlci1hY3RpdmVgLGVudGVyVG9DbGFzczpzPWAke259LWVudGVyLXRvYCxhcHBlYXJGcm9tQ2xhc3M6Yz1hLGFwcGVhckFjdGl2ZUNsYXNzOnU9byxhcHBlYXJUb0NsYXNzOmQ9cyxsZWF2ZUZyb21DbGFzczpmPWAke259LWxlYXZlLWZyb21gLGxlYXZlQWN0aXZlQ2xhc3M6cD1gJHtufS1sZWF2ZS1hY3RpdmVgLGxlYXZlVG9DbGFzczptPWAke259LWxlYXZlLXRvYH09ZSxoPU9jKGkpLGc9aCYmaFswXSxfPWgmJmhbMV0se29uQmVmb3JlRW50ZXI6dixvbkVudGVyOnksb25FbnRlckNhbmNlbGxlZDpiLG9uTGVhdmU6eCxvbkxlYXZlQ2FuY2VsbGVkOlMsb25CZWZvcmVBcHBlYXI6Qz12LG9uQXBwZWFyOnc9eSxvbkFwcGVhckNhbmNlbGxlZDplZT1ifT10LHRlPShlLHQsbixyKT0+e2UuX2VudGVyQ2FuY2VsbGVkPXIsamMoZSx0P2Q6cyksamMoZSx0P3U6byksbiYmbigpfSxUPShlLHQpPT57ZS5faXNMZWF2aW5nPSExLGpjKGUsZiksamMoZSxtKSxqYyhlLHApLHQmJnQoKX0sbmU9ZT0+KHQsbik9PntsZXQgaT1lP3c6eSxvPSgpPT50ZSh0LGUsbik7VGMoaSxbdCxvXSksTWMoKCk9PntqYyh0LGU/YzphKSxBYyh0LGU/ZDpzKSxFYyhpKXx8UGModCxyLGcsbyl9KX07cmV0dXJuIGwodCx7b25CZWZvcmVFbnRlcihlKXtUYyh2LFtlXSksQWMoZSxhKSxBYyhlLG8pfSxvbkJlZm9yZUFwcGVhcihlKXtUYyhDLFtlXSksQWMoZSxjKSxBYyhlLHUpfSxvbkVudGVyOm5lKCExKSxvbkFwcGVhcjpuZSghMCksb25MZWF2ZShlLHQpe2UuX2lzTGVhdmluZz0hMDtsZXQgbj0oKT0+VChlLHQpO0FjKGUsZiksZS5fZW50ZXJDYW5jZWxsZWQ/KEFjKGUscCksUmMoZSkpOihSYyhlKSxBYyhlLHApKSxNYygoKT0+e2UuX2lzTGVhdmluZyYmKGpjKGUsZiksQWMoZSxtKSxFYyh4KXx8UGMoZSxyLF8sbikpfSksVGMoeCxbZSxuXSl9LG9uRW50ZXJDYW5jZWxsZWQoZSl7dGUoZSwhMSx2b2lkIDAsITApLFRjKGIsW2VdKX0sb25BcHBlYXJDYW5jZWxsZWQoZSl7dGUoZSwhMCx2b2lkIDAsITApLFRjKGVlLFtlXSl9LG9uTGVhdmVDYW5jZWxsZWQoZSl7VChlKSxUYyhTLFtlXSl9fSl9ZnVuY3Rpb24gT2MoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih4KGUpKXJldHVybltrYyhlLmVudGVyKSxrYyhlLmxlYXZlKV07e2xldCB0PWtjKGUpO3JldHVyblt0LHRdfX1mdW5jdGlvbiBrYyhlKXtyZXR1cm4gZmUoZSl9ZnVuY3Rpb24gQWMoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LmFkZCh0KSksKGVbeGNdfHwoZVt4Y109bmV3IFNldCkpLmFkZCh0KX1mdW5jdGlvbiBqYyhlLHQpe3Quc3BsaXQoL1xzKy8pLmZvckVhY2godD0+dCYmZS5jbGFzc0xpc3QucmVtb3ZlKHQpKTtsZXQgbj1lW3hjXTtuJiYobi5kZWxldGUodCksbi5zaXplfHwoZVt4Y109dm9pZCAwKSl9ZnVuY3Rpb24gTWMoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfSl9dmFyIE5jPTA7ZnVuY3Rpb24gUGMoZSx0LG4scil7bGV0IGk9ZS5fZW5kSWQ9KytOYyxhPSgpPT57aT09PWUuX2VuZElkJiZyKCl9O2lmKG4hPW51bGwpcmV0dXJuIHNldFRpbWVvdXQoYSxuKTtsZXR7dHlwZTpvLHRpbWVvdXQ6cyxwcm9wQ291bnQ6Y309RmMoZSx0KTtpZighbylyZXR1cm4gcigpO2xldCBsPW8rYGVuZGAsdT0wLGQ9KCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxmKSxhKCl9LGY9dD0+e3QudGFyZ2V0PT09ZSYmKyt1Pj1jJiZkKCl9O3NldFRpbWVvdXQoKCk9Pnt1PGMmJmQoKX0scysxKSxlLmFkZEV2ZW50TGlzdGVuZXIobCxmKX1mdW5jdGlvbiBGYyhlLHQpe2xldCBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLHI9ZT0+KG5bZV18fGBgKS5zcGxpdChgLCBgKSxpPXIoYCR7eWN9RGVsYXlgKSxhPXIoYCR7eWN9RHVyYXRpb25gKSxvPUljKGksYSkscz1yKGAke2JjfURlbGF5YCksYz1yKGAke2JjfUR1cmF0aW9uYCksbD1JYyhzLGMpLHU9bnVsbCxkPTAsZj0wO3Q9PT15Yz9vPjAmJih1PXljLGQ9byxmPWEubGVuZ3RoKTp0PT09YmM/bD4wJiYodT1iYyxkPWwsZj1jLmxlbmd0aCk6KGQ9TWF0aC5tYXgobyxsKSx1PWQ+MD9vPmw/eWM6YmM6bnVsbCxmPXU/dT09PXljP2EubGVuZ3RoOmMubGVuZ3RoOjApO2xldCBwPXU9PT15YyYmL1xiKD86dHJhbnNmb3JtfGFsbCkoPzosfCQpLy50ZXN0KHIoYCR7eWN9UHJvcGVydHlgKS50b1N0cmluZygpKTtyZXR1cm57dHlwZTp1LHRpbWVvdXQ6ZCxwcm9wQ291bnQ6ZixoYXNUcmFuc2Zvcm06cH19ZnVuY3Rpb24gSWMoZSx0KXtmb3IoO2UubGVuZ3RoPHQubGVuZ3RoOyllPWUuY29uY2F0KGUpO3JldHVybiBNYXRoLm1heCguLi50Lm1hcCgodCxuKT0+TGModCkrTGMoZVtuXSkpKX1mdW5jdGlvbiBMYyhlKXtyZXR1cm4gZT09PWBhdXRvYD8wOk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoYCxgLGAuYCkpKjFlM31mdW5jdGlvbiBSYyhlKXtyZXR1cm4oZT9lLm93bmVyRG9jdW1lbnQ6ZG9jdW1lbnQpLmJvZHkub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIHpjKGUsdCxuKXtsZXQgcj1lW3hjXTtyJiYodD0odD9bdCwuLi5yXTpbLi4ucl0pLmpvaW4oYCBgKSksdD09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZShgY2xhc3NgKTpuP2Uuc2V0QXR0cmlidXRlKGBjbGFzc2AsdCk6ZS5jbGFzc05hbWU9dH12YXIgQmM9U3ltYm9sKGBfdm9kYCksVmM9U3ltYm9sKGBfdnNoYCksSGM9e25hbWU6YHNob3dgLGJlZm9yZU1vdW50KGUse3ZhbHVlOnR9LHt0cmFuc2l0aW9uOm59KXtlW0JjXT1lLnN0eWxlLmRpc3BsYXk9PT1gbm9uZWA/YGA6ZS5zdHlsZS5kaXNwbGF5LG4mJnQ/bi5iZWZvcmVFbnRlcihlKTpVYyhlLHQpfSxtb3VudGVkKGUse3ZhbHVlOnR9LHt0cmFuc2l0aW9uOm59KXtuJiZ0JiZuLmVudGVyKGUpfSx1cGRhdGVkKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0se3RyYW5zaXRpb246cn0peyF0IT0hbiYmKHI/dD8oci5iZWZvcmVFbnRlcihlKSxVYyhlLCEwKSxyLmVudGVyKGUpKTpyLmxlYXZlKGUsKCk9PntVYyhlLCExKX0pOlVjKGUsdCkpfSxiZWZvcmVVbm1vdW50KGUse3ZhbHVlOnR9KXtVYyhlLHQpfX07ZnVuY3Rpb24gVWMoZSx0KXtlLnN0eWxlLmRpc3BsYXk9dD9lW0JjXTpgbm9uZWAsZVtWY109IXR9ZnVuY3Rpb24gV2MoKXtIYy5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9KT0+e2lmKCFlKXJldHVybntzdHlsZTp7ZGlzcGxheTpgbm9uZWB9fX19dmFyIEdjPVN5bWJvbChgYCk7ZnVuY3Rpb24gS2MoZSl7bGV0IHQ9RnMoKTtpZighdClyZXR1cm47bGV0IG49dC51dD0obj1lKHQucHJveHkpKT0+e0FycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj0iJHt0LnVpZH0iXWApKS5mb3JFYWNoKGU9PkpjKGUsbikpfSxyPSgpPT57bGV0IHI9ZSh0LnByb3h5KTt0LmNlP0pjKHQuY2Uscik6cWModC5zdWJUcmVlLHIpLG4ocil9O1FpKCgpPT57bnIocil9KSxaaSgoKT0+e0VyKHIsYSx7Zmx1c2g6YHBvc3RgfSk7bGV0IGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocik7ZS5vYnNlcnZlKHQuc3ViVHJlZS5lbC5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSx0YSgoKT0+ZS5kaXNjb25uZWN0KCkpfSl9ZnVuY3Rpb24gcWMoZSx0KXtpZihlLnNoYXBlRmxhZyYxMjgpe2xldCBuPWUuc3VzcGVuc2U7ZT1uLmFjdGl2ZUJyYW5jaCxuLnBlbmRpbmdCcmFuY2gmJiFuLmlzSHlkcmF0aW5nJiZuLmVmZmVjdHMucHVzaCgoKT0+e3FjKG4uYWN0aXZlQnJhbmNoLHQpfSl9Zm9yKDtlLmNvbXBvbmVudDspZT1lLmNvbXBvbmVudC5zdWJUcmVlO2lmKGUuc2hhcGVGbGFnJjEmJmUuZWwpSmMoZS5lbCx0KTtlbHNlIGlmKGUudHlwZT09PUwpZS5jaGlsZHJlbi5mb3JFYWNoKGU9PnFjKGUsdCkpO2Vsc2UgaWYoZS50eXBlPT09bHMpe2xldHtlbDpuLGFuY2hvcjpyfT1lO2Zvcig7biYmKEpjKG4sdCksbiE9PXIpOyluPW4ubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIEpjKGUsdCl7aWYoZS5ub2RlVHlwZT09PTEpe2xldCBuPWUuc3R5bGUscj1gYDtmb3IobGV0IGUgaW4gdCl7bGV0IGk9amUodFtlXSk7bi5zZXRQcm9wZXJ0eShgLS0ke2V9YCxpKSxyKz1gLS0ke2V9OiAke2l9O2B9bltHY109cn19dmFyIFljPS8oPzpefDspXHMqZGlzcGxheVxzKjovO2Z1bmN0aW9uIFhjKGUsdCxuKXtsZXQgcj1lLnN0eWxlLGk9eShuKSxhPSExO2lmKG4mJiFpKXtpZih0KXtpZih5KHQpKWZvcihsZXQgZSBvZiB0LnNwbGl0KGA7YCkpe2xldCB0PWUuc2xpY2UoMCxlLmluZGV4T2YoYDpgKSkudHJpbSgpO25bdF0/P1FjKHIsdCxgYCl9ZWxzZSBmb3IobGV0IGUgaW4gdCluW2VdPz9RYyhyLGUsYGApfWZvcihsZXQgaSBpbiBuKXtpPT09YGRpc3BsYXlgJiYoYT0hMCk7bGV0IG89bltpXTtvPT1udWxsP1FjKHIsaSxgYCk6bmwoZSxpLCF5KHQpJiZ0P3RbaV06dm9pZCAwLG8pfHxRYyhyLGksbyl9fWVsc2UgaWYoaSl7aWYodCE9PW4pe2xldCBlPXJbR2NdO2UmJihuKz1gO2ArZSksci5jc3NUZXh0PW4sYT1ZYy50ZXN0KG4pfX1lbHNlIHQmJmUucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApO0JjIGluIGUmJihlW0JjXT1hP3IuZGlzcGxheTpgYCxlW1ZjXSYmKHIuZGlzcGxheT1gbm9uZWApKX12YXIgWmM9L1xzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBRYyhlLHQsbil7aWYocChuKSluLmZvckVhY2gobj0+UWMoZSx0LG4pKTtlbHNlIGlmKG4/Pz1gYCx0LnN0YXJ0c1dpdGgoYC0tYCkpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7bGV0IHI9dGwoZSx0KTtaYy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkob2Uociksbi5yZXBsYWNlKFpjLGBgKSxgaW1wb3J0YW50YCk6ZVtyXT1ufX12YXIgJGM9W2BXZWJraXRgLGBNb3pgLGBtc2BdLGVsPXt9O2Z1bmN0aW9uIHRsKGUsdCl7bGV0IG49ZWxbdF07aWYobilyZXR1cm4gbjtsZXQgcj1FKHQpO2lmKHIhPT1gZmlsdGVyYCYmciBpbiBlKXJldHVybiBlbFt0XT1yO3I9c2Uocik7Zm9yKGxldCBuPTA7bjwkYy5sZW5ndGg7bisrKXtsZXQgaT0kY1tuXStyO2lmKGkgaW4gZSlyZXR1cm4gZWxbdF09aX1yZXR1cm4gdH1mdW5jdGlvbiBubChlLHQsbixyKXtyZXR1cm4gZS50YWdOYW1lPT09YFRFWFRBUkVBYCYmKHQ9PT1gd2lkdGhgfHx0PT09YGhlaWdodGApJiZ5KHIpJiZuPT09cn12YXIgcmw9YGh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtgO2Z1bmN0aW9uIGlsKGUsdCxuLHIsaSxhPUNlKHQpKXtyJiZ0LnN0YXJ0c1dpdGgoYHhsaW5rOmApP249PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGVOUyhybCx0LnNsaWNlKDYsdC5sZW5ndGgpKTplLnNldEF0dHJpYnV0ZU5TKHJsLHQsbik6bj09bnVsbHx8YSYmIXdlKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsYT9gYDpiKG4pP1N0cmluZyhuKTpuKX1mdW5jdGlvbiBhbChlLHQsbixyLGkpe2lmKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGApe24hPW51bGwmJihlW3RdPXQ9PT1gaW5uZXJIVE1MYD9wYyhuKTpuKTtyZXR1cm59bGV0IGE9ZS50YWdOYW1lO2lmKHQ9PT1gdmFsdWVgJiZhIT09YFBST0dSRVNTYCYmIWEuaW5jbHVkZXMoYC1gKSl7bGV0IHI9YT09PWBPUFRJT05gP2UuZ2V0QXR0cmlidXRlKGB2YWx1ZWApfHxgYDplLnZhbHVlLGk9bj09bnVsbD9lLnR5cGU9PT1gY2hlY2tib3hgP2BvbmA6YGA6U3RyaW5nKG4pOyhyIT09aXx8IShgX3ZhbHVlYGluIGUpKSYmKGUudmFsdWU9aSksbj8/ZS5yZW1vdmVBdHRyaWJ1dGUodCksZS5fdmFsdWU9bjtyZXR1cm59bGV0IG89ITE7aWYobj09PWBgfHxuPT1udWxsKXtsZXQgcj10eXBlb2YgZVt0XTtyPT09YGJvb2xlYW5gP249d2Uobik6bj09bnVsbCYmcj09PWBzdHJpbmdgPyhuPWBgLG89ITApOnI9PT1gbnVtYmVyYCYmKG49MCxvPSEwKX10cnl7ZVt0XT1ufWNhdGNoe31vJiZlLnJlbW92ZUF0dHJpYnV0ZShpfHx0KX1mdW5jdGlvbiBvbChlLHQsbixyKXtlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpfWZ1bmN0aW9uIHNsKGUsdCxuLHIpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9dmFyIGNsPVN5bWJvbChgX3ZlaWApO2Z1bmN0aW9uIGxsKGUsdCxuLHIsaT1udWxsKXtsZXQgYT1lW2NsXXx8KGVbY2xdPXt9KSxvPWFbdF07aWYociYmbylvLnZhbHVlPXI7ZWxzZXtsZXRbbixzXT1mbCh0KTtyP29sKGUsbixhW3RdPWdsKHIsaSkscyk6byYmKHNsKGUsbixvLHMpLGFbdF09dm9pZCAwKX19dmFyIHVsPS8oT25jZXxQYXNzaXZlfENhcHR1cmUpJC8sZGw9L15vbjo/KD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gZmwoZSl7bGV0IHQsbjtmb3IoOyhuPWUubWF0Y2godWwpKSYmIWRsLnRlc3QoZSk7KXR8fD17fSxlPWUuc2xpY2UoMCxlLmxlbmd0aC1uWzFdLmxlbmd0aCksdFtuWzFdLnRvTG93ZXJDYXNlKCldPSEwO3JldHVybltlWzJdPT09YDpgP2Uuc2xpY2UoMyk6b2UoZS5zbGljZSgyKSksdF19dmFyIHBsPTAsbWw9UHJvbWlzZS5yZXNvbHZlKCksaGw9KCk9PnBsfHw9KG1sLnRoZW4oKCk9PnBsPTApLERhdGUubm93KCkpO2Z1bmN0aW9uIGdsKGUsdCl7bGV0IG49ZT0+e2lmKCFlLl92dHMpZS5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihlLl92dHM8PW4uYXR0YWNoZWQpcmV0dXJuO2xldCByPW4udmFsdWU7aWYocChyKSl7bGV0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH07bGV0IGk9ci5zbGljZSgpLGE9W2VdO2ZvcihsZXQgbj0wO248aS5sZW5ndGgmJiFlLl9zdG9wcGVkO24rKyl7bGV0IGU9aVtuXTtlJiZIbihlLHQsNSxhKX19ZWxzZSBIbihyLHQsNSxbZV0pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0YWNoZWQ9aGwoKSxufXZhciBfbD1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8MTIzLHZsPShlLHQsbixyLGksYSk9PntsZXQgbz1pPT09YHN2Z2A7dD09PWBjbGFzc2A/emMoZSxyLG8pOnQ9PT1gc3R5bGVgP1hjKGUsbixyKTpzKHQpP2ModCl8fGxsKGUsdCxuLHIsYSk6KHRbMF09PT1gLmA/KHQ9dC5zbGljZSgxKSwhMCk6dFswXT09PWBeYD8odD10LnNsaWNlKDEpLCExKTp5bChlLHQscixvKSk/KGFsKGUsdCxyKSwhZS50YWdOYW1lLmluY2x1ZGVzKGAtYCkmJih0PT09YHZhbHVlYHx8dD09PWBjaGVja2VkYHx8dD09PWBzZWxlY3RlZGApJiZpbChlLHQscixvLGEsdCE9PWB2YWx1ZWApKTplLl9pc1Z1ZUNFJiYoYmwoZSx0KXx8ZS5fZGVmLl9fYXN5bmNMb2FkZXImJigvW0EtWl0vLnRlc3QodCl8fCF5KHIpKSk/YWwoZSxFKHQpLHIsYSx0KToodD09PWB0cnVlLXZhbHVlYD9lLl90cnVlVmFsdWU9cjp0PT09YGZhbHNlLXZhbHVlYCYmKGUuX2ZhbHNlVmFsdWU9ciksaWwoZSx0LHIsbykpfTtmdW5jdGlvbiB5bChlLHQsbixyKXtpZihyKXJldHVybiEhKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGB8fHQgaW4gZSYmX2wodCkmJnYobikpO2lmKHQ9PT1gc3BlbGxjaGVja2B8fHQ9PT1gZHJhZ2dhYmxlYHx8dD09PWB0cmFuc2xhdGVgfHx0PT09YGF1dG9jb3JyZWN0YHx8dD09PWBzYW5kYm94YCYmZS50YWdOYW1lPT09YElGUkFNRWB8fHQ9PT1gZm9ybWB8fHQ9PT1gbGlzdGAmJmUudGFnTmFtZT09PWBJTlBVVGB8fHQ9PT1gdHlwZWAmJmUudGFnTmFtZT09PWBURVhUQVJFQWApcmV0dXJuITE7aWYodD09PWB3aWR0aGB8fHQ9PT1gaGVpZ2h0YCl7bGV0IHQ9ZS50YWdOYW1lO2lmKHQ9PT1gSU1HYHx8dD09PWBWSURFT2B8fHQ9PT1gQ0FOVkFTYHx8dD09PWBTT1VSQ0VgKXJldHVybiExfXJldHVybiBfbCh0KSYmeShuKT8hMTp0IGluIGV9ZnVuY3Rpb24gYmwoZSx0KXtsZXQgbj1lLl9kZWYucHJvcHM7aWYoIW4pcmV0dXJuITE7bGV0IHI9RSh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLnNvbWUoZT0+RShlKT09PXIpOk9iamVjdC5rZXlzKG4pLnNvbWUoZT0+RShlKT09PXIpfXZhciB4bD17fTtmdW5jdGlvbiBTbChlLHQsbil7bGV0IHI9RihlLHQpO3RlKHIpJiYocj1sKHt9LHIsdCkpO2NsYXNzIGkgZXh0ZW5kcyBUbHtjb25zdHJ1Y3RvcihlKXtzdXBlcihyLGUsbil9fXJldHVybiBpLmRlZj1yLGl9dmFyIENsPSgoZSx0KT0+U2woZSx0LGd1KSksd2w9dHlwZW9mIEhUTUxFbGVtZW50PGB1YD9IVE1MRWxlbWVudDpjbGFzc3t9LFRsPWNsYXNzIGUgZXh0ZW5kcyB3bHtjb25zdHJ1Y3RvcihlLHQ9e30sbj1odSl7c3VwZXIoKSx0aGlzLl9kZWY9ZSx0aGlzLl9wcm9wcz10LHRoaXMuX2NyZWF0ZUFwcD1uLHRoaXMuX2lzVnVlQ0U9ITAsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9hcHA9bnVsbCx0aGlzLl9ub25jZT10aGlzLl9kZWYubm9uY2UsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3Jlc29sdmVkPSExLHRoaXMuX3BhdGNoaW5nPSExLHRoaXMuX2RpcnR5PSExLHRoaXMuX251bWJlclByb3BzPW51bGwsdGhpcy5fc3R5bGVDaGlsZHJlbj1uZXcgV2Vha1NldCx0aGlzLl9zdHlsZUFuY2hvcnM9bmV3IFdlYWtNYXAsdGhpcy5fb2I9bnVsbCx0aGlzLnNoYWRvd1Jvb3QmJm4hPT1odT90aGlzLl9yb290PXRoaXMuc2hhZG93Um9vdDplLnNoYWRvd1Jvb3Q9PT0hMT90aGlzLl9yb290PXRoaXM6KHRoaXMuYXR0YWNoU2hhZG93KGwoe30sZS5zaGFkb3dSb290T3B0aW9ucyx7bW9kZTpgb3BlbmB9KSksdGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3QpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoIXRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuOyF0aGlzLnNoYWRvd1Jvb3QmJiF0aGlzLl9yZXNvbHZlZCYmdGhpcy5fcGFyc2VTbG90cygpLHRoaXMuX2Nvbm5lY3RlZD0hMDtsZXQgdD10aGlzO2Zvcig7dCYmPXQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGV8fHQuaG9zdDspaWYodCBpbnN0YW5jZW9mIGUpe3RoaXMuX3BhcmVudD10O2JyZWFrfXRoaXMuX2luc3RhbmNlfHwodGhpcy5fcmVzb2x2ZWQ/dGhpcy5fbW91bnQodGhpcy5fZGVmKTp0JiZ0Ll9wZW5kaW5nUmVzb2x2ZT90aGlzLl9wZW5kaW5nUmVzb2x2ZT10Ll9wZW5kaW5nUmVzb2x2ZS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ1Jlc29sdmU9dm9pZCAwLHRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuIHRoaXMuX3Jlc29sdmVEZWYoKX0pOnRoaXMuX3Jlc29sdmVEZWYoKSl9X3NldFBhcmVudChlPXRoaXMuX3BhcmVudCl7ZSYmKHRoaXMuX2luc3RhbmNlLnBhcmVudD1lLl9pbnN0YW5jZSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dChlKSl9X2luaGVyaXRQYXJlbnRDb250ZXh0KGU9dGhpcy5fcGFyZW50KXtlJiZ0aGlzLl9hcHAmJk9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLl9hcHAuX2NvbnRleHQucHJvdmlkZXMsZS5faW5zdGFuY2UucHJvdmlkZXMpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fY29ubmVjdGVkPSExLFFuKCgpPT57dGhpcy5fY29ubmVjdGVkfHwodGhpcy5fb2ImJj0odGhpcy5fb2IuZGlzY29ubmVjdCgpLG51bGwpLHRoaXMuX2FwcCYmdGhpcy5fYXBwLnVubW91bnQoKSx0aGlzLl9pbnN0YW5jZSYmKHRoaXMuX2luc3RhbmNlLmNlPXZvaWQgMCksdGhpcy5fYXBwPXRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fdGVsZXBvcnRUYXJnZXRzJiY9KHRoaXMuX3RlbGVwb3J0VGFyZ2V0cy5jbGVhcigpLHZvaWQgMCkpfSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7Zm9yKGxldCB0IG9mIGUpdGhpcy5fc2V0QXR0cih0LmF0dHJpYnV0ZU5hbWUpfV9yZXNvbHZlRGVmKCl7aWYodGhpcy5fcGVuZGluZ1Jlc29sdmUpcmV0dXJuIHRoaXMuX3BlbmRpbmdSZXNvbHZlO2ZvcihsZXQgZT0wO2U8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtlKyspdGhpcy5fc2V0QXR0cih0aGlzLmF0dHJpYnV0ZXNbZV0ubmFtZSk7dGhpcy5fb2I9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fcHJvY2Vzc011dGF0aW9ucy5iaW5kKHRoaXMpKSx0aGlzLl9vYi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KTtsZXQgZT0oZSx0PSExKT0+e3RoaXMuX3Jlc29sdmVkPSEwLHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMDtsZXR7cHJvcHM6bixzdHlsZXM6cn09ZSxpO2lmKG4mJiFwKG4pKWZvcihsZXQgZSBpbiBuKXtsZXQgdD1uW2VdOyh0PT09TnVtYmVyfHx0JiZ0LnR5cGU9PT1OdW1iZXIpJiYoZSBpbiB0aGlzLl9wcm9wcyYmKHRoaXMuX3Byb3BzW2VdPWZlKHRoaXMuX3Byb3BzW2VdKSksKGl8fD1PYmplY3QuY3JlYXRlKG51bGwpKVtFKGUpXT0hMCl9dGhpcy5fbnVtYmVyUHJvcHM9aSx0aGlzLl9yZXNvbHZlUHJvcHMoZSksdGhpcy5zaGFkb3dSb290JiZ0aGlzLl9hcHBseVN0eWxlcyhyKSx0aGlzLl9tb3VudChlKX0sdD10aGlzLl9kZWYuX19hc3luY0xvYWRlcjtpZih0KXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZT10KCkudGhlbih0PT57dC5jb25maWd1cmVBcHA9dGhpcy5fZGVmLmNvbmZpZ3VyZUFwcCxlKHRoaXMuX2RlZj10LCEwKX0pLHRoaXMuX3BlbmRpbmdSZXNvbHZlO2UodGhpcy5fZGVmKX1fbW91bnQoZSl7dGhpcy5fYXBwPXRoaXMuX2NyZWF0ZUFwcChlKSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dCgpLGUuY29uZmlndXJlQXBwJiZlLmNvbmZpZ3VyZUFwcCh0aGlzLl9hcHApLHRoaXMuX2FwcC5fY2VWTm9kZT10aGlzLl9jcmVhdGVWTm9kZSgpLHRoaXMuX2FwcC5tb3VudCh0aGlzLl9yb290KTtsZXQgdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuZXhwb3NlZDtpZih0KWZvcihsZXQgZSBpbiB0KWYodGhpcyxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0OigpPT5OKHRbZV0pfSl9X3Jlc29sdmVQcm9wcyhlKXtsZXR7cHJvcHM6dH09ZSxuPXAodCk/dDpPYmplY3Qua2V5cyh0fHx7fSk7Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKHRoaXMpKWVbMF0hPT1gX2AmJm4uaW5jbHVkZXMoZSkmJnRoaXMuX3NldFByb3AoZSx0aGlzW2VdKTtmb3IobGV0IGUgb2Ygbi5tYXAoRSkpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0KCl7cmV0dXJuIHRoaXMuX2dldFByb3AoZSl9LHNldCh0KXt0aGlzLl9zZXRQcm9wKGUsdCwhMCwhdGhpcy5fcGF0Y2hpbmcpfX0pfV9zZXRBdHRyKGUpe2lmKGUuc3RhcnRzV2l0aChgZGF0YS12LWApKXJldHVybjtsZXQgdD10aGlzLmhhc0F0dHJpYnV0ZShlKSxuPXQ/dGhpcy5nZXRBdHRyaWJ1dGUoZSk6eGwscj1FKGUpO3QmJnRoaXMuX251bWJlclByb3BzJiZ0aGlzLl9udW1iZXJQcm9wc1tyXSYmKG49ZmUobikpLHRoaXMuX3NldFByb3AocixuLCExLCEwKX1fZ2V0UHJvcChlKXtyZXR1cm4gdGhpcy5fcHJvcHNbZV19X3NldFByb3AoZSx0LG49ITAscj0hMSl7aWYodCE9PXRoaXMuX3Byb3BzW2VdJiYodGhpcy5fZGlydHk9ITAsdD09PXhsP2RlbGV0ZSB0aGlzLl9wcm9wc1tlXToodGhpcy5fcHJvcHNbZV09dCxlPT09YGtleWAmJnRoaXMuX2FwcCYmKHRoaXMuX2FwcC5fY2VWTm9kZS5rZXk9dCkpLHImJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKSxuKSl7bGV0IG49dGhpcy5fb2I7biYmKHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMobi50YWtlUmVjb3JkcygpKSxuLmRpc2Nvbm5lY3QoKSksdD09PSEwP3RoaXMuc2V0QXR0cmlidXRlKG9lKGUpLGBgKTp0eXBlb2YgdD09YHN0cmluZ2B8fHR5cGVvZiB0PT1gbnVtYmVyYD90aGlzLnNldEF0dHJpYnV0ZShvZShlKSx0K2BgKTp0fHx0aGlzLnJlbW92ZUF0dHJpYnV0ZShvZShlKSksbiYmbi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KX19X3VwZGF0ZSgpe2xldCBlPXRoaXMuX2NyZWF0ZVZOb2RlKCk7dGhpcy5fYXBwJiYoZS5hcHBDb250ZXh0PXRoaXMuX2FwcC5fY29udGV4dCkscHUoZSx0aGlzLl9yb290KX1fY3JlYXRlVk5vZGUoKXtsZXQgZT17fTt0aGlzLnNoYWRvd1Jvb3R8fChlLm9uVm5vZGVNb3VudGVkPWUub25Wbm9kZVVwZGF0ZWQ9dGhpcy5fcmVuZGVyU2xvdHMuYmluZCh0aGlzKSk7bGV0IHQ9SCh0aGlzLl9kZWYsbChlLHRoaXMuX3Byb3BzKSk7cmV0dXJuIHRoaXMuX2luc3RhbmNlfHwodC5jZT1lPT57dGhpcy5faW5zdGFuY2U9ZSxlLmNlPXRoaXMsZS5pc0NFPSEwO2xldCB0PShlLHQpPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChlLHRlKHRbMF0pP2woe2RldGFpbDp0fSx0WzBdKTp7ZGV0YWlsOnR9KSl9O2UuZW1pdD0oZSwuLi5uKT0+e3QoZSxuKSxvZShlKSE9PWUmJnQob2UoZSksbil9LHRoaXMuX3NldFBhcmVudCgpfSksdH1fYXBwbHlTdHlsZXMoZSx0LG4pe2lmKCFlKXJldHVybjtpZih0KXtpZih0PT09dGhpcy5fZGVmfHx0aGlzLl9zdHlsZUNoaWxkcmVuLmhhcyh0KSlyZXR1cm47dGhpcy5fc3R5bGVDaGlsZHJlbi5hZGQodCl9bGV0IHI9dGhpcy5fbm9uY2UsaT10aGlzLnNoYWRvd1Jvb3QsYT1uP3RoaXMuX2dldFN0eWxlQW5jaG9yKG4pfHx0aGlzLl9nZXRTdHlsZUFuY2hvcih0aGlzLl9kZWYpOnRoaXMuX2dldFJvb3RTdHlsZUluc2VydGlvbkFuY2hvcihpKSxvPW51bGw7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDtzLS0pe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7ciYmYy5zZXRBdHRyaWJ1dGUoYG5vbmNlYCxyKSxjLnRleHRDb250ZW50PWVbc10saS5pbnNlcnRCZWZvcmUoYyxvfHxhKSxvPWMscz09PTAmJihufHx0aGlzLl9zdHlsZUFuY2hvcnMuc2V0KHRoaXMuX2RlZixjKSx0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuc2V0KHQsYykpfX1fZ2V0U3R5bGVBbmNob3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5fc3R5bGVBbmNob3JzLmdldChlKTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlPT09dGhpcy5zaGFkb3dSb290P3Q6KHQmJnRoaXMuX3N0eWxlQW5jaG9ycy5kZWxldGUoZSksbnVsbCl9X2dldFJvb3RTdHlsZUluc2VydGlvbkFuY2hvcihlKXtmb3IobGV0IHQ9MDt0PGUuY2hpbGROb2Rlcy5sZW5ndGg7dCsrKXtsZXQgbj1lLmNoaWxkTm9kZXNbdF07aWYoIShuIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkpcmV0dXJuIG59cmV0dXJuIG51bGx9X3BhcnNlU2xvdHMoKXtsZXQgZT10aGlzLl9zbG90cz17fSx0O2Zvcig7dD10aGlzLmZpcnN0Q2hpbGQ7KXtsZXQgbj10Lm5vZGVUeXBlPT09MSYmdC5nZXRBdHRyaWJ1dGUoYHNsb3RgKXx8YGRlZmF1bHRgOyhlW25dfHwoZVtuXT1bXSkpLnB1c2godCksdGhpcy5yZW1vdmVDaGlsZCh0KX19X3JlbmRlclNsb3RzKCl7bGV0IGU9dGhpcy5fZ2V0U2xvdHMoKSx0PXRoaXMuX2luc3RhbmNlLnR5cGUuX19zY29wZUlkO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dLGk9ci5nZXRBdHRyaWJ1dGUoYG5hbWVgKXx8YGRlZmF1bHRgLGE9dGhpcy5fc2xvdHNbaV0sbz1yLnBhcmVudE5vZGU7aWYoYSlmb3IobGV0IGUgb2YgYSl7aWYodCYmZS5ub2RlVHlwZT09PTEpe2xldCBuPXQrYC1zYCxyPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSwxKTtlLnNldEF0dHJpYnV0ZShuLGBgKTtsZXQgaTtmb3IoO2k9ci5uZXh0Tm9kZSgpOylpLnNldEF0dHJpYnV0ZShuLGBgKX1vLmluc2VydEJlZm9yZShlLHIpfWVsc2UgZm9yKDtyLmZpcnN0Q2hpbGQ7KW8uaW5zZXJ0QmVmb3JlKHIuZmlyc3RDaGlsZCxyKTtvLnJlbW92ZUNoaWxkKHIpfX1fZ2V0U2xvdHMoKXtsZXQgZT1bdGhpc107dGhpcy5fdGVsZXBvcnRUYXJnZXRzJiZlLnB1c2goLi4udGhpcy5fdGVsZXBvcnRUYXJnZXRzKTtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKXtsZXQgZT1uLnF1ZXJ5U2VsZWN0b3JBbGwoYHNsb3RgKTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LmFkZChlW25dKX1yZXR1cm4gQXJyYXkuZnJvbSh0KX1faW5qZWN0Q2hpbGRTdHlsZShlLHQpe3RoaXMuX2FwcGx5U3R5bGVzKGUuc3R5bGVzLGUsdCl9X2JlZ2luUGF0Y2goKXt0aGlzLl9wYXRjaGluZz0hMCx0aGlzLl9kaXJ0eT0hMX1fZW5kUGF0Y2goKXt0aGlzLl9wYXRjaGluZz0hMSx0aGlzLl9kaXJ0eSYmdGhpcy5faW5zdGFuY2UmJnRoaXMuX3VwZGF0ZSgpfV9oYXNTaGFkb3dSb290KCl7cmV0dXJuIHRoaXMuX2RlZi5zaGFkb3dSb290IT09ITF9X3JlbW92ZUNoaWxkU3R5bGUoZSl7fX07ZnVuY3Rpb24gRWwoZSl7bGV0IHQ9RnMoKTtyZXR1cm4gdCYmdC5jZXx8bnVsbH1mdW5jdGlvbiBEbCgpe2xldCBlPUVsKCk7cmV0dXJuIGUmJmUuc2hhZG93Um9vdH1mdW5jdGlvbiBPbChlPWAkc3R5bGVgKXt7bGV0IHQ9RnMoKTtpZighdClyZXR1cm4gcjtsZXQgbj10LnR5cGUuX19jc3NNb2R1bGVzO3JldHVybiBuJiZuW2VdfHxyfX12YXIga2w9bmV3IFdlYWtNYXAsQWw9bmV3IFdlYWtNYXAsamw9U3ltYm9sKGBfbW92ZUNiYCksTWw9U3ltYm9sKGBfZW50ZXJDYmApLE5sPShlPT4oZGVsZXRlIGUucHJvcHMubW9kZSxlKSkoe25hbWU6YFRyYW5zaXRpb25Hcm91cGAscHJvcHM6bCh7fSxDYyx7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSksc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPUZzKCkscj1LcigpLGksYTtyZXR1cm4gJGkoKCk9PntpZighaS5sZW5ndGgpcmV0dXJuO2xldCB0PWUubW92ZUNsYXNzfHxgJHtlLm5hbWV8fGB2YH0tbW92ZWA7aWYoIVJsKGlbMF0uZWwsbi52bm9kZS5lbCx0KSl7aT1bXTtyZXR1cm59aS5mb3JFYWNoKFBsKSxpLmZvckVhY2goRmwpO2xldCByPWkuZmlsdGVyKElsKTtSYyhuLnZub2RlLmVsKSxyLmZvckVhY2goZT0+e2xldCBuPWUuZWwscj1uLnN0eWxlO0FjKG4sdCksci50cmFuc2Zvcm09ci53ZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249YGA7bGV0IGk9bltqbF09ZT0+e2UmJmUudGFyZ2V0IT09bnx8KCFlfHxlLnByb3BlcnR5TmFtZS5lbmRzV2l0aChgdHJhbnNmb3JtYCkpJiYobi5yZW1vdmVFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKSxuW2psXT1udWxsLGpjKG4sdCkpfTtuLmFkZEV2ZW50TGlzdGVuZXIoYHRyYW5zaXRpb25lbmRgLGkpfSksaT1bXX0pLCgpPT57bGV0IG89QShlKSxzPURjKG8pLGM9by50YWd8fEw7aWYoaT1bXSxhKWZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3QuZWwmJnQuZWwgaW5zdGFuY2VvZiBFbGVtZW50JiYhdC5lbFtWY10mJihpLnB1c2godCkscmkodCxlaSh0LHMscixuKSksa2wuc2V0KHQsTGwodC5lbCkpKX1hPXQuZGVmYXVsdD9paSh0LmRlZmF1bHQoKSk6W107Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKyspe2xldCB0PWFbZV07dC5rZXkhPW51bGwmJnJpKHQsZWkodCxzLHIsbikpfXJldHVybiBIKGMsbnVsbCxhKX19fSk7ZnVuY3Rpb24gUGwoZSl7bGV0IHQ9ZS5lbDt0W2psXSYmdFtqbF0oKSx0W01sXSYmdFtNbF0oKX1mdW5jdGlvbiBGbChlKXtBbC5zZXQoZSxMbChlLmVsKSl9ZnVuY3Rpb24gSWwoZSl7bGV0IHQ9a2wuZ2V0KGUpLG49QWwuZ2V0KGUpLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2xldCB0PWUuZWwsbj10LnN0eWxlLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPTEscz0xO3JldHVybiB0Lm9mZnNldFdpZHRoJiYobz1hLndpZHRoL3Qub2Zmc2V0V2lkdGgpLHQub2Zmc2V0SGVpZ2h0JiYocz1hLmhlaWdodC90Lm9mZnNldEhlaWdodCksKCFOdW1iZXIuaXNGaW5pdGUobyl8fG89PT0wKSYmKG89MSksKCFOdW1iZXIuaXNGaW5pdGUocyl8fHM9PT0wKSYmKHM9MSksTWF0aC5hYnMoby0xKTwuMDEmJihvPTEpLE1hdGguYWJzKHMtMSk8LjAxJiYocz0xKSxuLnRyYW5zZm9ybT1uLndlYmtpdFRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7ci9vfXB4LCR7aS9zfXB4KWAsbi50cmFuc2l0aW9uRHVyYXRpb249YDBzYCxlfX1mdW5jdGlvbiBMbChlKXtsZXQgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntsZWZ0OnQubGVmdCx0b3A6dC50b3B9fWZ1bmN0aW9uIFJsKGUsdCxuKXtsZXQgcj1lLmNsb25lTm9kZSgpLGk9ZVt4Y107aSYmaS5mb3JFYWNoKGU9PntlLnNwbGl0KC9ccysvKS5mb3JFYWNoKGU9PmUmJnIuY2xhc3NMaXN0LnJlbW92ZShlKSl9KSxuLnNwbGl0KC9ccysvKS5mb3JFYWNoKGU9PmUmJnIuY2xhc3NMaXN0LmFkZChlKSksci5zdHlsZS5kaXNwbGF5PWBub25lYDtsZXQgYT10Lm5vZGVUeXBlPT09MT90OnQucGFyZW50Tm9kZTthLmFwcGVuZENoaWxkKHIpO2xldHtoYXNUcmFuc2Zvcm06b309RmMocik7cmV0dXJuIGEucmVtb3ZlQ2hpbGQociksb312YXIgemw9ZT0+e2xldCB0PWUucHJvcHNbYG9uVXBkYXRlOm1vZGVsVmFsdWVgXXx8ITE7cmV0dXJuIHAodCk/ZT0+bGUodCxlKTp0fTtmdW5jdGlvbiBCbChlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gVmwoZSl7bGV0IHQ9ZS50YXJnZXQ7dC5jb21wb3NpbmcmJih0LmNvbXBvc2luZz0hMSx0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGBpbnB1dGApKSl9dmFyIEhsPVN5bWJvbChgX2Fzc2lnbmApLFVsPVN5bWJvbChgX2luaXRpYWxWYWx1ZWApO2Z1bmN0aW9uIFdsKGUsdCxuKXtyZXR1cm4gdCYmKGU9ZS50cmltKCkpLG4mJihlPWRlKGUpKSxlfXZhciBHbD17Y3JlYXRlZChlLHttb2RpZmllcnM6e2xhenk6dCx0cmltOm4sbnVtYmVyOnJ9fSxpKXtlLnBhcmVudE5vZGUmJihlLnR5cGU9PT1gdGV4dGA/ZVtVbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvW1xyXG5dL2csYGApOmUudHlwZT09PWB0ZXh0YXJlYWAmJihlW1VsXT1lLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC9cclxuPy9nLGAKYCkpKSxlW0hsXT16bChpKTtsZXQgYT1yfHxpLnByb3BzJiZpLnByb3BzLnR5cGU9PT1gbnVtYmVyYDtvbChlLHQ/YGNoYW5nZWA6YGlucHV0YCx0PT57dC50YXJnZXQuY29tcG9zaW5nfHxlW0hsXShXbChlLnZhbHVlLG4sYSkpfSksKG58fGEpJiZvbChlLGBjaGFuZ2VgLCgpPT57ZS52YWx1ZT1XbChlLnZhbHVlLG4sYSl9KSx0fHwob2woZSxgY29tcG9zaXRpb25zdGFydGAsQmwpLG9sKGUsYGNvbXBvc2l0aW9uZW5kYCxWbCksb2woZSxgY2hhbmdlYCxWbCkpfSxtb3VudGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOnt0cmltOm4sbnVtYmVyOnJ9fSl7bGV0IGk9dD8/YGAsYT1lW1VsXTtkZWxldGUgZVtVbF0sYSE9PXZvaWQgMCYmKGUudHlwZT09PWB0ZXh0YHx8ZS50eXBlPT09YHRleHRhcmVhYCkmJmUudmFsdWUhPT1hP2VbSGxdKFdsKGUudmFsdWUsbixyKSk6ZS52YWx1ZT1pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpuLG1vZGlmaWVyczp7bGF6eTpyLHRyaW06aSxudW1iZXI6YX19LG8pe2lmKGVbSGxdPXpsKG8pLGUuY29tcG9zaW5nKXJldHVybjtsZXQgcz0oYXx8ZS50eXBlPT09YG51bWJlcmApJiYhL14wXGQvLnRlc3QoZS52YWx1ZSk/ZGUoZS52YWx1ZSk6ZS52YWx1ZSxjPXQ/P2BgO2lmKHM9PT1jKXJldHVybjtsZXQgbD1lLmdldFJvb3ROb2RlKCk7KGwgaW5zdGFuY2VvZiBEb2N1bWVudHx8bCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpJiZsLmFjdGl2ZUVsZW1lbnQ9PT1lJiZlLnR5cGUhPT1gcmFuZ2VgJiYociYmdD09PW58fGkmJmUudmFsdWUudHJpbSgpPT09Yyl8fChlLnZhbHVlPWMpfX0sS2w9e2RlZXA6ITAsY3JlYXRlZChlLHQsbil7ZVtIbF09emwobiksb2woZSxgY2hhbmdlYCwoKT0+e2xldCB0PWUuX21vZGVsVmFsdWUsbj1abChlKSxyPWUuY2hlY2tlZCxpPWVbSGxdO2lmKHAodCkpe2xldCBlPURlKHQsbiksYT1lIT09LTE7aWYociYmIWEpaSh0LmNvbmNhdChuKSk7ZWxzZSBpZighciYmYSl7bGV0IG49Wy4uLnRdO24uc3BsaWNlKGUsMSksaShuKX19ZWxzZSBpZihoKHQpKXtsZXQgZT1uZXcgU2V0KHQpO3I/ZS5hZGQobik6ZS5kZWxldGUobiksaShlKX1lbHNlIGkoUWwoZSxyKSl9KX0sbW91bnRlZDpxbCxiZWZvcmVVcGRhdGUoZSx0LG4pe2VbSGxdPXpsKG4pLHFsKGUsdCxuKX19O2Z1bmN0aW9uIHFsKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZS5fbW9kZWxWYWx1ZT10O2xldCBpO2lmKHAodCkpaT1EZSh0LHIucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYoaCh0KSlpPXQuaGFzKHIucHJvcHMudmFsdWUpO2Vsc2V7aWYodD09PW4pcmV0dXJuO2k9RWUodCxRbChlLCEwKSl9ZS5jaGVja2VkIT09aSYmKGUuY2hlY2tlZD1pKX12YXIgSmw9e2NyZWF0ZWQoZSx7dmFsdWU6dH0sbil7ZS5jaGVja2VkPUVlKHQsbi5wcm9wcy52YWx1ZSksZVtIbF09emwobiksb2woZSxgY2hhbmdlYCwoKT0+e2VbSGxdKFpsKGUpKX0pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpufSxyKXtlW0hsXT16bChyKSx0IT09biYmKGUuY2hlY2tlZD1FZSh0LHIucHJvcHMudmFsdWUpKX19LFlsPXtkZWVwOiEwLGNyZWF0ZWQoZSx7dmFsdWU6dCxtb2RpZmllcnM6e251bWJlcjpufX0scil7ZS5fbW9kZWxWYWx1ZT10LG9sKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZS5vcHRpb25zLGU9PmUuc2VsZWN0ZWQpLm1hcChlPT5uP2RlKFpsKGUpKTpabChlKSk7ZVtIbF0oZS5tdWx0aXBsZT9oKGUuX21vZGVsVmFsdWUpP25ldyBTZXQodCk6dDp0WzBdKSxlLl9hc3NpZ25pbmc9ITAsUW4oKCk9PntlLl9hc3NpZ25pbmc9ITF9KX0pLGVbSGxdPXpsKHIpfSxtb3VudGVkKGUse3ZhbHVlOnR9KXtYbChlLHQpfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dH0sbil7ZS5fbW9kZWxWYWx1ZT10LGVbSGxdPXpsKG4pfSx1cGRhdGVkKGUse3ZhbHVlOnR9KXtlLl9hc3NpZ25pbmd8fFhsKGUsdCl9fTtmdW5jdGlvbiBYbChlLHQpe2xldCBuPWUubXVsdGlwbGUscj1wKHQpO2lmKCEobiYmIXImJiFoKHQpKSl7Zm9yKGxldCBpPTAsYT1lLm9wdGlvbnMubGVuZ3RoO2k8YTtpKyspe2xldCBhPWUub3B0aW9uc1tpXSxvPVpsKGEpO2lmKG4pe2lmKHIpe2xldCBlPXR5cGVvZiBvO2Euc2VsZWN0ZWQ9ZT09PWBzdHJpbmdgfHxlPT09YG51bWJlcmA/dC5zb21lKGU9PlN0cmluZyhlKT09PVN0cmluZyhvKSk6RGUodCxvKT4tMX1lbHNlIGEuc2VsZWN0ZWQ9dC5oYXMobyl9ZWxzZSBpZihFZShabChhKSx0KSl7ZS5zZWxlY3RlZEluZGV4IT09aSYmKGUuc2VsZWN0ZWRJbmRleD1pKTtyZXR1cm59fSFuJiZlLnNlbGVjdGVkSW5kZXghPT0tMSYmKGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIFpsKGUpe3JldHVybmBfdmFsdWVgaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIFFsKGUsdCl7bGV0IG49dD9gX3RydWVWYWx1ZWA6YF9mYWxzZVZhbHVlYDtyZXR1cm4gbiBpbiBlP2Vbbl06dH12YXIgJGw9e2NyZWF0ZWQoZSx0LG4pe3R1KGUsdCxuLG51bGwsYGNyZWF0ZWRgKX0sbW91bnRlZChlLHQsbil7dHUoZSx0LG4sbnVsbCxgbW91bnRlZGApfSxiZWZvcmVVcGRhdGUoZSx0LG4scil7dHUoZSx0LG4scixgYmVmb3JlVXBkYXRlYCl9LHVwZGF0ZWQoZSx0LG4scil7dHUoZSx0LG4scixgdXBkYXRlZGApfX07ZnVuY3Rpb24gZXUoZSx0KXtzd2l0Y2goZSl7Y2FzZWBTRUxFQ1RgOnJldHVybiBZbDtjYXNlYFRFWFRBUkVBYDpyZXR1cm4gR2w7ZGVmYXVsdDpzd2l0Y2godCl7Y2FzZWBjaGVja2JveGA6cmV0dXJuIEtsO2Nhc2VgcmFkaW9gOnJldHVybiBKbDtkZWZhdWx0OnJldHVybiBHbH19fWZ1bmN0aW9uIHR1KGUsdCxuLHIsaSl7bGV0IGE9ZXUoZS50YWdOYW1lLG4ucHJvcHMmJm4ucHJvcHMudHlwZSlbaV07YSYmYShlLHQsbixyKX1mdW5jdGlvbiBudSgpe0dsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0pPT4oe3ZhbHVlOmV9KSxKbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYodC5wcm9wcyYmRWUodC5wcm9wcy52YWx1ZSxlKSlyZXR1cm57Y2hlY2tlZDohMH19LEtsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0sdCk9PntpZihwKGUpKXtpZih0LnByb3BzJiZEZShlLHQucHJvcHMudmFsdWUpPi0xKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGgoZSkpe2lmKHQucHJvcHMmJmUuaGFzKHQucHJvcHMudmFsdWUpKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGUpcmV0dXJue2NoZWNrZWQ6ITB9fSwkbC5nZXRTU1JQcm9wcz0oZSx0KT0+e2lmKHR5cGVvZiB0LnR5cGUhPWBzdHJpbmdgKXJldHVybjtsZXQgbj1ldSh0LnR5cGUudG9VcHBlckNhc2UoKSx0LnByb3BzJiZ0LnByb3BzLnR5cGUpO2lmKG4uZ2V0U1NSUHJvcHMpcmV0dXJuIG4uZ2V0U1NSUHJvcHMoZSx0KX19dmFyIHJ1PVtgY3RybGAsYHNoaWZ0YCxgYWx0YCxgbWV0YWBdLGl1PXtzdG9wOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDplPT5lLnByZXZlbnREZWZhdWx0KCksc2VsZjplPT5lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldCxjdHJsOmU9PiFlLmN0cmxLZXksc2hpZnQ6ZT0+IWUuc2hpZnRLZXksYWx0OmU9PiFlLmFsdEtleSxtZXRhOmU9PiFlLm1ldGFLZXksbGVmdDplPT5gYnV0dG9uYGluIGUmJmUuYnV0dG9uIT09MCxtaWRkbGU6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTEscmlnaHQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTIsZXhhY3Q6KGUsdCk9PnJ1LnNvbWUobj0+ZVtgJHtufUtleWBdJiYhdC5pbmNsdWRlcyhuKSl9LGF1PShlLHQpPT57aWYoIWUpcmV0dXJuIGU7bGV0IG49ZS5fd2l0aE1vZHN8fD17fSxyPXQuam9pbihgLmApO3JldHVybiBuW3JdfHwobltyXT0oKG4sLi4ucik9Pntmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9aXVbdFtlXV07aWYociYmcihuLHQpKXJldHVybn1yZXR1cm4gZShuLC4uLnIpfSkpfSxvdT17ZXNjOmBlc2NhcGVgLHNwYWNlOmAgYCx1cDpgYXJyb3ctdXBgLGxlZnQ6YGFycm93LWxlZnRgLHJpZ2h0OmBhcnJvdy1yaWdodGAsZG93bjpgYXJyb3ctZG93bmAsZGVsZXRlOmBiYWNrc3BhY2VgfSxzdT0oZSx0KT0+e2xldCBuPWUuX3dpdGhLZXlzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KG49PntpZighKGBrZXlgaW4gbikpcmV0dXJuO2xldCByPW9lKG4ua2V5KTtpZih0LnNvbWUoZT0+ZT09PXJ8fG91W2VdPT09cikpcmV0dXJuIGUobil9KSl9LGN1PWwoe3BhdGNoUHJvcDp2bH0sdmMpLGx1LHV1PSExO2Z1bmN0aW9uIGR1KCl7cmV0dXJuIGx1fHw9TG8oY3UpfWZ1bmN0aW9uIGZ1KCl7cmV0dXJuIGx1PXV1P2x1OlJvKGN1KSx1dT0hMCxsdX12YXIgcHU9KCguLi5lKT0+e2R1KCkucmVuZGVyKC4uLmUpfSksbXU9KCguLi5lKT0+e2Z1KCkuaHlkcmF0ZSguLi5lKX0pLGh1PSgoLi4uZSk9PntsZXQgdD1kdSgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gdC5tb3VudD1lPT57bGV0IHI9dnUoZSk7aWYoIXIpcmV0dXJuO2xldCBpPXQuX2NvbXBvbmVudDshdihpKSYmIWkucmVuZGVyJiYhaS50ZW1wbGF0ZSYmKGkudGVtcGxhdGU9ci5pbm5lckhUTUwpLHIubm9kZVR5cGU9PT0xJiYoci50ZXh0Q29udGVudD1gYCk7bGV0IGE9bihyLCExLF91KHIpKTtyZXR1cm4gciBpbnN0YW5jZW9mIEVsZW1lbnQmJihyLnJlbW92ZUF0dHJpYnV0ZShgdi1jbG9ha2ApLHIuc2V0QXR0cmlidXRlKGBkYXRhLXYtYXBwYCxgYCkpLGF9LHR9KSxndT0oKC4uLmUpPT57bGV0IHQ9ZnUoKS5jcmVhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9ZT0+e2xldCB0PXZ1KGUpO2lmKHQpcmV0dXJuIG4odCwhMCxfdSh0KSl9LHR9KTtmdW5jdGlvbiBfdShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm5gc3ZnYDtpZih0eXBlb2YgTWF0aE1MRWxlbWVudD09YGZ1bmN0aW9uYCYmZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQpcmV0dXJuYG1hdGhtbGB9ZnVuY3Rpb24gdnUoZSl7cmV0dXJuIHkoZSk/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTplfXZhciB5dT0hMSxidT0oKT0+e3l1fHwoeXU9ITAsbnUoKSxXYygpKX0seHU9dCh7QmFzZVRyYW5zaXRpb246KCk9PlFyLEJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzOigpPT5KcixDb21tZW50OigpPT5jcyxEZXByZWNhdGlvblR5cGVzOigpPT5udWxsLEVmZmVjdFNjb3BlOigpPT5OZSxFcnJvckNvZGVzOigpPT56bixFcnJvclR5cGVTdHJpbmdzOigpPT5zYyxGcmFnbWVudDooKT0+TCxLZWVwQWxpdmU6KCk9PkJpLFJlYWN0aXZlRWZmZWN0OigpPT56ZSxTdGF0aWM6KCk9PmxzLFN1c3BlbnNlOigpPT5YbyxUZWxlcG9ydDooKT0+VnIsVGV4dDooKT0+c3MsVHJhY2tPcFR5cGVzOigpPT5FbixUcmFuc2l0aW9uOigpPT53YyxUcmFuc2l0aW9uR3JvdXA6KCk9Pk5sLFRyaWdnZXJPcFR5cGVzOigpPT5EbixWdWVFbGVtZW50OigpPT5UbCxhc3NlcnROdW1iZXI6KCk9PlJuLGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nOigpPT5IbixjYWxsV2l0aEVycm9ySGFuZGxpbmc6KCk9PlZuLGNhbWVsaXplOigpPT5FLGNhcGl0YWxpemU6KCk9PnNlLGNsb25lVk5vZGU6KCk9PkNzLGNvbXBhdFV0aWxzOigpPT5udWxsLGNvbXBpbGU6KCk9PlN1LGNvbXB1dGVkOigpPT5XLGNyZWF0ZUFwcDooKT0+aHUsY3JlYXRlQmxvY2s6KCk9PkIsY3JlYXRlQ29tbWVudFZOb2RlOigpPT5UcyxjcmVhdGVFbGVtZW50QmxvY2s6KCk9PnosY3JlYXRlRWxlbWVudFZOb2RlOigpPT5WLGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyOigpPT5SbyxjcmVhdGVQcm9wc1Jlc3RQcm94eTooKT0+SWEsY3JlYXRlUmVuZGVyZXI6KCk9PkxvLGNyZWF0ZVNTUkFwcDooKT0+Z3UsY3JlYXRlU2xvdHM6KCk9PmhhLGNyZWF0ZVN0YXRpY1ZOb2RlOigpPT53cyxjcmVhdGVUZXh0Vk5vZGU6KCk9PlUsY3JlYXRlVk5vZGU6KCk9PkgsY3VzdG9tUmVmOigpPT52bixkZWZpbmVBc3luY0NvbXBvbmVudDooKT0+TGksZGVmaW5lQ29tcG9uZW50OigpPT5GLGRlZmluZUN1c3RvbUVsZW1lbnQ6KCk9PlNsLGRlZmluZUVtaXRzOigpPT53YSxkZWZpbmVFeHBvc2U6KCk9PlRhLGRlZmluZU1vZGVsOigpPT5PYSxkZWZpbmVPcHRpb25zOigpPT5FYSxkZWZpbmVQcm9wczooKT0+Q2EsZGVmaW5lU1NSQ3VzdG9tRWxlbWVudDooKT0+Q2wsZGVmaW5lU2xvdHM6KCk9PkRhLGRldnRvb2xzOigpPT5jYyxlZmZlY3Q6KCk9PlFlLGVmZmVjdFNjb3BlOigpPT5QZSxnZXRDdXJyZW50SW5zdGFuY2U6KCk9PkZzLGdldEN1cnJlbnRTY29wZTooKT0+RmUsZ2V0Q3VycmVudFdhdGNoZXI6KCk9PmpuLGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbjooKT0+aWksZ3VhcmRSZWFjdGl2ZVByb3BzOigpPT5TcyxoOigpPT50YyxoYW5kbGVFcnJvcjooKT0+VW4saGFzSW5qZWN0aW9uQ29udGV4dDooKT0+YnIsaHlkcmF0ZTooKT0+bXUsaHlkcmF0ZU9uSWRsZTooKT0+QWksaHlkcmF0ZU9uSW50ZXJhY3Rpb246KCk9PlBpLGh5ZHJhdGVPbk1lZGlhUXVlcnk6KCk9Pk5pLGh5ZHJhdGVPblZpc2libGU6KCk9Pk1pLGluaXRDdXN0b21Gb3JtYXR0ZXI6KCk9Pm5jLGluaXREaXJlY3RpdmVzRm9yU1NSOigpPT5idSxpbmplY3Q6KCk9PnlyLGlzTWVtb1NhbWU6KCk9PmljLGlzUHJveHk6KCk9Pm9uLGlzUmVhY3RpdmU6KCk9Pm5uLGlzUmVhZG9ubHk6KCk9PnJuLGlzUmVmOigpPT5qLGlzUnVudGltZU9ubHk6KCk9PkpzLGlzU2hhbGxvdzooKT0+YW4saXNWTm9kZTooKT0+Z3MsbWFya1JhdzooKT0+c24sbWVyZ2VEZWZhdWx0czooKT0+UGEsbWVyZ2VNb2RlbHM6KCk9PkZhLG1lcmdlUHJvcHM6KCk9PmtzLG5leHRUaWNrOigpPT5Rbixub2RlT3BzOigpPT52Yyxub3JtYWxpemVDbGFzczooKT0+Tyxub3JtYWxpemVQcm9wczooKT0+eGUsbm9ybWFsaXplU3R5bGU6KCk9PmdlLG9uQWN0aXZhdGVkOigpPT5IaSxvbkJlZm9yZU1vdW50OigpPT5YaSxvbkJlZm9yZVVubW91bnQ6KCk9PmVhLG9uQmVmb3JlVXBkYXRlOigpPT5RaSxvbkRlYWN0aXZhdGVkOigpPT5VaSxvbkVycm9yQ2FwdHVyZWQ6KCk9PmFhLG9uTW91bnRlZDooKT0+Wmksb25SZW5kZXJUcmFja2VkOigpPT5pYSxvblJlbmRlclRyaWdnZXJlZDooKT0+cmEsb25TY29wZURpc3Bvc2U6KCk9PkllLG9uU2VydmVyUHJlZmV0Y2g6KCk9Pm5hLG9uVW5tb3VudGVkOigpPT50YSxvblVwZGF0ZWQ6KCk9PiRpLG9uV2F0Y2hlckNsZWFudXA6KCk9Pk1uLG9wZW5CbG9jazooKT0+UixwYXRjaFByb3A6KCk9PnZsLHBvcFNjb3BlSWQ6KCk9Pm1yLHByb3ZpZGU6KCk9PnZyLHByb3h5UmVmczooKT0+Z24scHVzaFNjb3BlSWQ6KCk9PnByLHF1ZXVlUG9zdEZsdXNoQ2I6KCk9Pm5yLHJlYWN0aXZlOigpPT5adCxyZWFkb25seTooKT0+JHQscmVmOigpPT5NLHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyOigpPT5xcyxyZW5kZXI6KCk9PnB1LHJlbmRlckxpc3Q6KCk9Pm1hLHJlbmRlclNsb3Q6KCk9PkkscmVzb2x2ZUNvbXBvbmVudDooKT0+Y2EscmVzb2x2ZURpcmVjdGl2ZTooKT0+ZGEscmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ6KCk9PnVhLHJlc29sdmVGaWx0ZXI6KCk9Pm51bGwscmVzb2x2ZVRyYW5zaXRpb25Ib29rczooKT0+ZWksc2V0QmxvY2tUcmFja2luZzooKT0+bXMsc2V0RGV2dG9vbHNIb29rOigpPT5sYyxzZXRUcmFuc2l0aW9uSG9va3M6KCk9PnJpLHNoYWxsb3dSZWFjdGl2ZTooKT0+UXQsc2hhbGxvd1JlYWRvbmx5OigpPT5lbixzaGFsbG93UmVmOigpPT51bixzc3JDb250ZXh0S2V5OigpPT54cixzc3JVdGlsczooKT0+dWMsc3RvcDooKT0+JGUsdG9EaXNwbGF5U3RyaW5nOigpPT5rLHRvSGFuZGxlcktleTooKT0+Y2UsdG9IYW5kbGVyczooKT0+X2EsdG9SYXc6KCk9PkEsdG9SZWY6KCk9PlNuLHRvUmVmczooKT0+eW4sdG9WYWx1ZTooKT0+bW4sdHJhbnNmb3JtVk5vZGVBcmdzOigpPT52cyx0cmlnZ2VyUmVmOigpPT5wbix1bnJlZjooKT0+Tix1c2VBdHRyczooKT0+amEsdXNlQ3NzTW9kdWxlOigpPT5PbCx1c2VDc3NWYXJzOigpPT5LYyx1c2VIb3N0OigpPT5FbCx1c2VJZDooKT0+YWksdXNlTW9kZWw6KCk9PnJvLHVzZVNTUkNvbnRleHQ6KCk9PlNyLHVzZVNoYWRvd1Jvb3Q6KCk9PkRsLHVzZVNsb3RzOigpPT5BYSx1c2VUZW1wbGF0ZVJlZjooKT0+c2ksdXNlVHJhbnNpdGlvblN0YXRlOigpPT5Lcix2TW9kZWxDaGVja2JveDooKT0+S2wsdk1vZGVsRHluYW1pYzooKT0+JGwsdk1vZGVsUmFkaW86KCk9PkpsLHZNb2RlbFNlbGVjdDooKT0+WWwsdk1vZGVsVGV4dDooKT0+R2wsdlNob3c6KCk9PkhjLHZlcnNpb246KCk9PmFjLHdhcm46KCk9Pm9jLHdhdGNoOigpPT5Fcix3YXRjaEVmZmVjdDooKT0+Q3Isd2F0Y2hQb3N0RWZmZWN0OigpPT53cix3YXRjaFN5bmNFZmZlY3Q6KCk9PlRyLHdpdGhBc3luY0NvbnRleHQ6KCk9PkxhLHdpdGhDdHg6KCk9PlAsd2l0aERlZmF1bHRzOigpPT5rYSx3aXRoRGlyZWN0aXZlczooKT0+Z3Isd2l0aEtleXM6KCk9PnN1LHdpdGhNZW1vOigpPT5yYyx3aXRoTW9kaWZpZXJzOigpPT5hdSx3aXRoU2NvcGVJZDooKT0+aHJ9KSxTdT0oKT0+e307ZnVuY3Rpb24gQ3UoZSx0KXsodD09bnVsbHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHd1KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gVHUoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQ3UoZSl9ZnVuY3Rpb24gRXUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbmApfWZ1bmN0aW9uIER1KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsYHZhbHVlYGluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxSdShyLmtleSkscil9fWZ1bmN0aW9uIE91KGUsdCxuKXtyZXR1cm4gdCYmRHUoZS5wcm90b3R5cGUsdCksbiYmRHUoZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGt1KGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj1CdShlKSl8fHQmJmUmJnR5cGVvZiBlLmxlbmd0aD09YG51bWJlcmApe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW4ubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsYT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG4ucmV0dXJuPT1udWxsfHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybih0PVJ1KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEF1KGUpe2lmKHR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbYEBAaXRlcmF0b3JgXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBqdShlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KHI9YS5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbi5yZXR1cm4hPW51bGwmJihvPW4ucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319ZnVuY3Rpb24gTXUoKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBOdSgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBQdShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEsoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/UHUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0coZSx0LG5bdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UHUoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pfXJldHVybiBlfWZ1bmN0aW9uIEZ1KGUsdCl7cmV0dXJuIHd1KGUpfHxqdShlLHQpfHxCdShlLHQpfHxNdSgpfWZ1bmN0aW9uIEl1KGUpe3JldHVybiBUdShlKXx8QXUoZSl8fEJ1KGUpfHxOdSgpfWZ1bmN0aW9uIEx1KGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8YGRlZmF1bHRgKTtpZih0eXBlb2YgciE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybih0PT09YHN0cmluZ2A/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gUnUoZSl7dmFyIHQ9THUoZSxgc3RyaW5nYCk7cmV0dXJuIHR5cGVvZiB0PT1gc3ltYm9sYD90OnQrYGB9ZnVuY3Rpb24genUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4genU9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LHp1KGUpfWZ1bmN0aW9uIEJ1KGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBDdShlLHQpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIG49PT1gT2JqZWN0YCYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09YE1hcGB8fG49PT1gU2V0YD9BcnJheS5mcm9tKGUpOm49PT1gQXJndW1lbnRzYHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Q3UoZSx0KTp2b2lkIDB9fXZhciBWdT1mdW5jdGlvbigpe30sSHU9e30sVXU9e30sV3U9bnVsbCxHdT17bWFyazpWdSxtZWFzdXJlOlZ1fTt0cnl7dHlwZW9mIHdpbmRvdzxgdWAmJihIdT13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDxgdWAmJihVdT1kb2N1bWVudCksdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8YHVgJiYoV3U9TXV0YXRpb25PYnNlcnZlciksdHlwZW9mIHBlcmZvcm1hbmNlPGB1YCYmKEd1PXBlcmZvcm1hbmNlKX1jYXRjaHt9dmFyIEt1PShIdS5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQscXU9S3U9PT12b2lkIDA/YGA6S3UsSnU9SHUsWXU9VXUsWHU9V3UsWnU9R3U7SnUuZG9jdW1lbnQ7dmFyIFF1PSEhWXUuZG9jdW1lbnRFbGVtZW50JiYhIVl1LmhlYWQmJnR5cGVvZiBZdS5hZGRFdmVudExpc3RlbmVyPT1gZnVuY3Rpb25gJiZ0eXBlb2YgWXUuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCwkdT1+cXUuaW5kZXhPZihgTVNJRWApfHx+cXUuaW5kZXhPZihgVHJpZGVudC9gKSxlZCx0ZD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyxuZD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2kscmQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LGlkPXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0sYWQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sb2Q9YGNsYXNzaWNgLHNkPWBkdW90b25lYCxjZD1gc2hhcnBgLGxkPWBzaGFycC1kdW90b25lYCx1ZD1gY2hpc2VsYCxkZD1gZXRjaGAsZmQ9YGdyYXBoaXRlYCxwZD1gamVsbHlgLG1kPWBqZWxseS1kdW9gLGhkPWBqZWxseS1maWxsYCxnZD1gbW9zYWljYCxfZD1gbm90ZG9nYCx2ZD1gbm90ZG9nLWR1b2AseWQ9YHBpeGVsYCxiZD1gc2xhYmAseGQ9YHNsYWItZHVvYCxTZD1gc2xhYi1wcmVzc2AsQ2Q9YHNsYWItcHJlc3MtZHVvYCx3ZD1gdGh1bWJwcmludGAsVGQ9YHV0aWxpdHlgLEVkPWB1dGlsaXR5LWR1b2AsRGQ9YHV0aWxpdHktZmlsbGAsT2Q9YHZlbGx1bWAsa2Q9YHdoaXRlYm9hcmRgLEFkPWBDbGFzc2ljYCxqZD1gRHVvdG9uZWAsTWQ9YFNoYXJwYCxOZD1gU2hhcnAgRHVvdG9uZWAsUGQ9YENoaXNlbGAsRmQ9YEV0Y2hgLElkPWBHcmFwaGl0ZWAsTGQ9YEplbGx5YCxSZD1gSmVsbHkgRHVvYCx6ZD1gSmVsbHkgRmlsbGAsQmQ9YE1vc2FpY2AsVmQ9YE5vdGRvZ2AsSGQ9YE5vdGRvZyBEdW9gLFVkPWBQaXhlbGAsV2Q9YFNsYWJgLEdkPWBTbGFiIER1b2AsS2Q9YFNsYWIgUHJlc3NgLHFkPWBTbGFiIFByZXNzIER1b2AsSmQ9YFRodW1icHJpbnRgLFlkPWBVdGlsaXR5YCxYZD1gVXRpbGl0eSBEdW9gLFpkPWBVdGlsaXR5IEZpbGxgLFFkPWBWZWxsdW1gLCRkPWBXaGl0ZWJvYXJkYCxlZj1bb2Qsc2QsY2QsbGQsdWQsZGQsZmQscGQsbWQsaGQsZ2QsX2QsdmQseWQsYmQseGQsU2QsQ2Qsd2QsVGQsRWQsRGQsT2Qsa2RdO2VkPXt9LEcoRyhHKEcoRyhHKEcoRyhHKEcoZWQsb2QsQWQpLHNkLGpkKSxjZCxNZCksbGQsTmQpLHVkLFBkKSxkZCxGZCksZmQsSWQpLHBkLExkKSxtZCxSZCksaGQsemQpLEcoRyhHKEcoRyhHKEcoRyhHKEcoZWQsZ2QsQmQpLF9kLFZkKSx2ZCxIZCkseWQsVWQpLGJkLFdkKSx4ZCxHZCksU2QsS2QpLENkLHFkKSx3ZCxKZCksVGQsWWQpLEcoRyhHKEcoZWQsRWQsWGQpLERkLFpkKSxPZCxRZCksa2QsJGQpO3ZhciB0Zj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LG5mPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0scmY9bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSksYWY9e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxvZj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLHNmPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LGNmPVtga2l0YF07RyhHKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciBsZj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSx1Zj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sZGY9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSxmZj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0scGYsbWY9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxoZj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtwZj17fSxHKEcoRyhHKEcoRyhHKEcoRyhHKHBmLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksRyhHKEcoRyhHKEcoRyhHKEcoRyhwZixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLEcoRyhHKEcocGYsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLEcoRyh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgZ2Y9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sX2Y9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LHZmPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSx5Zj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQoaGYsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSksYmY9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSx4Zj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLFNmPXhmLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxDZj1bXS5jb25jYXQoSXUoT2JqZWN0LmtleXMoX2YpKSxiZixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLG1mLkdST1VQLG1mLlNXQVBfT1BBQ0lUWSxtZi5QUklNQVJZLG1mLlNFQ09OREFSWV0seGYubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSxTZi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSksd2Y9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0sVGY9YF9fX0ZPTlRfQVdFU09NRV9fX2AsRWY9MTYsRGY9YGZhYCxPZj1gc3ZnLWlubGluZS0tZmFgLGtmPWBkYXRhLWZhLWkyc3ZnYCxBZj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAsamY9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AsTWY9YGRhdGEtcHJlZml4YCxOZj1gZGF0YS1pY29uYCxQZj1gZm9udGF3ZXNvbWUtaTJzdmdgLEZmPWBhc3luY2AsSWY9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sTGY9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sUmY9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIHpmKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbb2RdfX0pfXZhciBCZj1LKHt9LHJkKTtCZltvZF09SyhLKEsoSyh7fSx7ImZhLWR1b3RvbmUiOmBkdW90b25lYH0pLHJkW29kXSksc2Yua2l0KSxzZltga2l0LWR1b3RvbmVgXSk7dmFyIFZmPXpmKEJmKSxIZj1LKHt9LGFmKTtIZltvZF09SyhLKEsoSyh7fSx7ZHVvdG9uZTpgZmFkYH0pLEhmW29kXSksZmYua2l0KSxmZltga2l0LWR1b3RvbmVgXSk7dmFyIFVmPXpmKEhmKSxXZj1LKHt9LHZmKTtXZltvZF09SyhLKHt9LFdmW29kXSksZGYua2l0KTt2YXIgR2Y9emYoV2YpLEtmPUsoe30sZ2YpO0tmW29kXT1LKEsoe30sS2Zbb2RdKSxsZi5raXQpLHpmKEtmKTt2YXIgcWY9dGQsSmY9YGZhLWxheWVycy10ZXh0YCxZZj1uZDt6ZihLKHt9LHRmKSk7dmFyIFhmPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sWmY9aWQsUWY9W10uY29uY2F0KEl1KGNmKSxJdShDZikpLCRmPUp1LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiBlcChlKXt2YXIgdD1ZdS5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbYCtlK2BdYCk7aWYodClyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gdHAoZSl7cmV0dXJuIGU9PT1gYD8hMDplPT09YGZhbHNlYD8hMTplPT09YHRydWVgfHxlfVl1JiZ0eXBlb2YgWXUucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PUZ1KGUsMiksbj10WzBdLHI9dFsxXSxpPXRwKGVwKG4pKTtpIT1udWxsJiYoJGZbcl09aSl9KTt2YXIgbnA9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6b2QsY3NzUHJlZml4OkRmLHJlcGxhY2VtZW50Q2xhc3M6T2YsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDpgYXN5bmNgLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07JGYuZmFtaWx5UHJlZml4JiYoJGYuY3NzUHJlZml4PSRmLmZhbWlseVByZWZpeCk7dmFyIHJwPUsoSyh7fSxucCksJGYpO3JwLmF1dG9SZXBsYWNlU3ZnfHwocnAub2JzZXJ2ZU11dGF0aW9ucz0hMSk7dmFyIHE9e307T2JqZWN0LmtleXMobnApLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsZSx7ZW51bWVyYWJsZTohMCxzZXQ6ZnVuY3Rpb24odCl7cnBbZV09dCxpcC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHEpfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBycFtlXX19KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtycC5jc3NQcmVmaXg9ZSxpcC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHEpfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBycC5jc3NQcmVmaXh9fSksSnUuRm9udEF3ZXNvbWVDb25maWc9cTt2YXIgaXA9W107ZnVuY3Rpb24gYXAoZSl7cmV0dXJuIGlwLnB1c2goZSksZnVuY3Rpb24oKXtpcC5zcGxpY2UoaXAuaW5kZXhPZihlKSwxKX19dmFyIG9wPUVmLHNwPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIGNwKGUpe2lmKCEoIWV8fCFRdSkpe3ZhciB0PVl1LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7dC5zZXRBdHRyaWJ1dGUoYHR5cGVgLGB0ZXh0L2Nzc2ApLHQuaW5uZXJIVE1MPWU7Zm9yKHZhciBuPVl1LmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gWXUuaGVhZC5pbnNlcnRCZWZvcmUodCxyKSxlfX12YXIgbHA9YDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYDtmdW5jdGlvbiB1cCgpe2Zvcih2YXIgZT0xMix0PWBgO2UtLT4wOyl0Kz1scFtNYXRoLnJhbmRvbSgpKjYyfDBdO3JldHVybiB0fWZ1bmN0aW9uIGRwKGUpe2Zvcih2YXIgdD1bXSxuPShlfHxbXSkubGVuZ3RoPj4+MDtuLS07KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBmcChlKXtyZXR1cm4gZS5jbGFzc0xpc3Q/ZHAoZS5jbGFzc0xpc3QpOihlLmdldEF0dHJpYnV0ZShgY2xhc3NgKXx8YGApLnNwbGl0KGAgYCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9ZnVuY3Rpb24gcHAoZSl7cmV0dXJuYCR7ZX1gLnJlcGxhY2UoLyYvZyxgJmFtcDtgKS5yZXBsYWNlKC8iL2csYCZxdW90O2ApLnJlcGxhY2UoLycvZyxgJiMzOTtgKS5yZXBsYWNlKC88L2csYCZsdDtgKS5yZXBsYWNlKC8+L2csYCZndDtgKX1mdW5jdGlvbiBtcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259PSIke3BwKGVbbl0pfSIgYH0sYGApLnRyaW0oKX1mdW5jdGlvbiBocChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259OiAke2Vbbl0udHJpbSgpfTtgfSxgYCl9ZnVuY3Rpb24gZ3AoZSl7cmV0dXJuIGUuc2l6ZSE9PXNwLnNpemV8fGUueCE9PXNwLnh8fGUueSE9PXNwLnl8fGUucm90YXRlIT09c3Aucm90YXRlfHxlLmZsaXBYfHxlLmZsaXBZfWZ1bmN0aW9uIF9wKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS5jb250YWluZXJXaWR0aCxyPWUuaWNvbldpZHRoO3JldHVybntvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtuLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHt0LngqMzJ9LCAke3QueSozMn0pIGB9ICR7YHNjYWxlKCR7dC5zaXplLzE2Kih0LmZsaXBYPy0xOjEpfSwgJHt0LnNpemUvMTYqKHQuZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHt0LnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzIqLTF9IC0yNTYpYH19fWZ1bmN0aW9uIHZwKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS53aWR0aCxyPW49PT12b2lkIDA/RWY6bixpPWUuaGVpZ2h0LGE9aT09PXZvaWQgMD9FZjppLG89ZS5zdGFydENlbnRlcmVkLHM9byE9PXZvaWQgMCYmbyxjPWBgO3JldHVybiBjKz1zJiYkdT9gdHJhbnNsYXRlKCR7dC54L29wLXIvMn1lbSwgJHt0Lnkvb3AtYS8yfWVtKSBgOnM/YHRyYW5zbGF0ZShjYWxjKC01MCUgKyAke3QueC9vcH1lbSksIGNhbGMoLTUwJSArICR7dC55L29wfWVtKSkgYDpgdHJhbnNsYXRlKCR7dC54L29wfWVtLCAke3QueS9vcH1lbSkgYCxjKz1gc2NhbGUoJHt0LnNpemUvb3AqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS9vcCoodC5mbGlwWT8tMToxKX0pIGAsYys9YHJvdGF0ZSgke3Qucm90YXRlfWRlZykgYCxjfXZhciB5cD1gOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJzsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBCcmFuZHMnOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWInOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MnOwogIC0tZmEtZm9udC1zbGFiLWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTbGFiIER1byc7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MgRHVvJzsKICAtLWZhLWZvbnQtcGl4ZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUGl4ZWwnOwogIC0tZmEtZm9udC1tb3NhaWMtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE1vc2FpYyc7CiAgLS1mYS1mb250LXZlbGx1bS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVmVsbHVtJzsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCc7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQnOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyc7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8nOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBFdGNoJzsKICAtLWZhLWZvbnQtZ3JhcGhpdGUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUnOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSc7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCc7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8nOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgQ2hpc2VsJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSc7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byc7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsJzsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtY2FudmFzLXNxdWFyZSB7CiAgcGFkZGluZy1ibG9jazogMC4xMjVlbTsKICBtYXJnaW4tYmxvY2stZW5kOiAtMC4xMjVlbTsKfQoKLmZhLWNhbnZhcy1yb29teSB7CiAgcGFkZGluZy1ibG9jazogMC4yNWVtOwogIHBhZGRpbmctaW5saW5lOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjI1ZW07CiAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5mYS11bCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLWxpLW1hcmdpbiwgMi41ZW0pOwogIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0Owp9CgovKiBIZWFkcyBVcDogQm9yZGVyZWQgSWNvbnMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUhCiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhCiAgLSBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCBpbiB0aGlzIHZlcnNpb24gKnY3KSwgYnV0IGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBGb250IEF3ZXNvbWUgdjguCiovCi8qIE5vdGVzOgoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItd2lkdGggPSAxLzE2IGJ5IGRlZmF1bHQgKHRvIHJlbmRlciBhcyB+MXB4IGJhc2VkIG9uIGEgMTZweCBkZWZhdWx0IGZvbnQtc2l6ZSkKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXBhZGRpbmcgPQogICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KQogICoqIDQvMTYgZm9yIGhvcml6b250YWwgcGFkZGluZyAodG8gZ2l2ZSB+NHB4IG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbikKKi8KLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA2MjVlbSk7CiAgYm94LXNpemluZzogdmFyKC0tZmEtYm9yZGVyLWJveC1zaXppbmcsIGNvbnRlbnQtYm94KTsKICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCwKLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1wdWxsLXJpZ2h0LAouZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1iZWF0IHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpOwp9CgouZmEtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxLjVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcC0zNjAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwLTM2MDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNzVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc3BpbiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7Cn0KCi5mYS1zcGluLXNuYXAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluLXNuYXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtNCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC00OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMi40cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtOCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC04OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgNHMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtYnV6eiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJ1eno7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjZzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXdhZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXdhZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjsKfQoKLmZhLWZsb2F0IHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxvYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwp9CgouZmEtc3dpbmcgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zd2luZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjsKfQoKLmZhLWplbGxvIHsKICBhbmltYXRpb24tbmFtZTogZmEtamVsbG87CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjlzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1vdXQpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtZmxpcC0zNjAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSwKICAuZmEtYnV6eiwKICAuZmEtZmxvYXQsCiAgLmZhLWplbGxvLAogIC5mYS1zcGluLXNuYXAsCiAgLmZhLXNwaW4tc25hcC00LAogIC5mYS1zcGluLXNuYXAtOCwKICAuZmEtc3dpbmcsCiAgLmZhLXdhZyB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA0NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjIgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjIyKSkpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcpOwogIH0KICAxNCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4wNiksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjk0KSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtYW50aWNpcGF0aW9uLCAzcHgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45NCksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMTIpKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgNTIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0tZmEtYm91bmNlLWhlaWdodCwgMC41ZW0pICogMS4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41LCAwLCAxLCAwLjUpOwogIH0KICA3MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45MikpIHRyYW5zbGF0ZVkoMCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC4zMywgMC42NiwgMSk7CiAgfQogIDg1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgsIDEuMDQpIHRyYW5zbGF0ZVkoY2FsYygtMnB4ICogdmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIDEpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgNDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgMjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ1JSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICBvcGFjaXR5OiBjYWxjKHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpICsgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjI4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIDAuNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA5MiUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiB2YXIoLS1mYS1mbGlwLW92ZXJzaG9vdCwgMS4wNCkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAtMzYwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpIHRyYW5zbGF0ZVgoLTFweCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA3OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTNkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxNi42NyUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDI4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDMzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDYyJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDY2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDc4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDgzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDk1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtNCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtOCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEyLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAyMS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAzNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAzNy41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ2LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNTklIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA3MS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDg0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDg3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYnV6eiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjEsIDAsIDAuOSwgMSk7CiAgfQogIDUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC41ZGVnKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC41ZGVnKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC4zZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC4zZGVnKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjcpKSByb3RhdGUoMC4yZGVnKTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgtMC4yZGVnKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjQpKSByb3RhdGUoMC4xZGVnKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS13YWcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNiwgMSk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpICogMC44NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbG9hdCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjQgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKHZhcigtLWZhLWZsb2F0LWRyaWZ0LCAxcHgpKSByb3RhdGUodmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpIHNjYWxlKDEsIDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXgsIDAuOTgpLCB2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXksIDEuMDMpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMCk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC45MiAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgwLjk5NSwgMS4wMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMC4zMyk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC4zICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LXRpbHQsIDFkZWcpKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygwLjA1ICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3dpbmcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAxOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC42NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuNjUsIDEpOwogIH0KICAzOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjQ1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGMoLTEgKiB2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtamVsbG8gewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSwgY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMiAtIHZhcigtLWZhLWplbGxvLXNjYWxlLXksIDEuMTIpKSwgdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpLCBjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSAtIDEpICogMC41KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpLCBjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMiwgMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA2OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gO2Z1bmN0aW9uIGJwKCl7dmFyIGU9RGYsdD1PZixuPXEuY3NzUHJlZml4LHI9cS5yZXBsYWNlbWVudENsYXNzLGk9eXA7aWYobiE9PWV8fHIhPT10KXt2YXIgYT1SZWdFeHAoYFxcLiR7ZX1cXC1gLGBnYCksbz1SZWdFeHAoYFxcLS0ke2V9XFwtYCxgZ2ApLHM9UmVnRXhwKGBcXC4ke3R9YCxgZ2ApO2k9aS5yZXBsYWNlKGEsYC4ke259LWApLnJlcGxhY2UobyxgLS0ke259LWApLnJlcGxhY2UocyxgLiR7cn1gKX1yZXR1cm4gaX12YXIgeHA9ITE7ZnVuY3Rpb24gU3AoKXtxLmF1dG9BZGRDc3MmJiF4cCYmKGNwKGJwKCkpLHhwPSEwKX12YXIgQ3A9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e2NzczpicCxpbnNlcnRDc3M6U3B9fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57YmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOmZ1bmN0aW9uKCl7U3AoKX0sYmVmb3JlSTJzdmc6ZnVuY3Rpb24oKXtTcCgpfX19fSx3cD1KdXx8e307d3BbVGZdfHwod3BbVGZdPXt9KSx3cFtUZl0uc3R5bGVzfHwod3BbVGZdLnN0eWxlcz17fSksd3BbVGZdLmhvb2tzfHwod3BbVGZdLmhvb2tzPXt9KSx3cFtUZl0uc2hpbXN8fCh3cFtUZl0uc2hpbXM9W10pO3ZhciBUcD13cFtUZl0sRXA9W10sRHA9ZnVuY3Rpb24oKXtZdS5yZW1vdmVFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCxEcCksT3A9MSxFcC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxPcD0hMTtRdSYmKE9wPShZdS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChZdS5yZWFkeVN0YXRlKSxPcHx8WXUuYWRkRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsRHApKTtmdW5jdGlvbiBrcChlKXtRdSYmKE9wP3NldFRpbWVvdXQoZSwwKTpFcC5wdXNoKGUpKX1mdW5jdGlvbiBBcChlKXt2YXIgdD1lLnRhZyxuPWUuYXR0cmlidXRlcyxyPW49PT12b2lkIDA/e306bixpPWUuY2hpbGRyZW4sYT1pPT09dm9pZCAwP1tdOmk7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9wcChlKTpgPCR7dH0gJHttcChyKX0+JHthLm1hcChBcCkuam9pbihgYCl9PC8ke3R9PmB9ZnVuY3Rpb24ganAoZSx0LG4pe2lmKGUmJmVbdF0mJmVbdF1bbl0pcmV0dXJue3ByZWZpeDp0LGljb25OYW1lOm4saWNvbjplW3RdW25dfX12YXIgTXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfX0sTnA9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmtleXMoZSksYT1pLmxlbmd0aCxvPXI9PT12b2lkIDA/dDpNcCh0LHIpLHMsYyxsO2ZvcihuPT09dm9pZCAwPyhzPTEsbD1lW2lbMF1dKToocz0wLGw9bik7czxhO3MrKyljPWlbc10sbD1vKGwsZVtjXSxjLGUpO3JldHVybiBsfTtmdW5jdGlvbiBQcChlKXtyZXR1cm4gSXUoZSkubGVuZ3RoPT09MT9lLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTpudWxsfWZ1bmN0aW9uIEZwKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj1lW25dO3JldHVybiByLmljb24/dFtyLmljb25OYW1lXT1yLmljb246dFtuXT1yLHR9LHt9KX1mdW5jdGlvbiBJcChlLHQpe3ZhciBuPShhcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30pLnNraXBIb29rcyxyPW4hPT12b2lkIDAmJm4saT1GcCh0KTt0eXBlb2YgVHAuaG9va3MuYWRkUGFjaz09YGZ1bmN0aW9uYCYmIXI/VHAuaG9va3MuYWRkUGFjayhlLEZwKHQpKTpUcC5zdHlsZXNbZV09SyhLKHt9LFRwLnN0eWxlc1tlXXx8e30pLGkpLGU9PT1gZmFzYCYmSXAoYGZhYCx0KX12YXIgTHA9VHAuc3R5bGVzLFJwPVRwLnNoaW1zLHpwPU9iamVjdC5rZXlzKEdmKSxCcD16cC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1PYmplY3Qua2V5cyhHZlt0XSksZX0se30pLFZwPW51bGwsSHA9e30sVXA9e30sV3A9e30sR3A9e30sS3A9e307ZnVuY3Rpb24gcXAoZSl7cmV0dXJuflFmLmluZGV4T2YoZSl9ZnVuY3Rpb24gSnAoZSx0KXt2YXIgbj10LnNwbGl0KGAtYCkscj1uWzBdLGk9bi5zbGljZSgxKS5qb2luKGAtYCk7cmV0dXJuIHI9PT1lJiZpIT09YGAmJiFxcChpKT9pOm51bGx9dmFyIFlwPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5wKExwLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtyXT1OcChuLGUse30pLHR9LHt9KX07SHA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRbM10mJihlW3RbM11dPW4pLHRbMl0mJnRbMl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmB9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC50b1N0cmluZygxNildPW59KSxlfSksVXA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbbl09bix0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSksS3A9ZShmdW5jdGlvbihlLHQsbil7dmFyIHI9dFsyXTtyZXR1cm4gZVtuXT1uLHIuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSk7dmFyIHQ9YGZhcmBpbiBMcHx8cS5hdXRvRmV0Y2hTdmcsbj1OcChScCxmdW5jdGlvbihlLG4pe3ZhciByPW5bMF0saT1uWzFdLGE9blsyXTtyZXR1cm4gaT09PWBmYXJgJiYhdCYmKGk9YGZhc2ApLHR5cGVvZiByPT1gc3RyaW5nYCYmKGUubmFtZXNbcl09e3ByZWZpeDppLGljb25OYW1lOmF9KSx0eXBlb2Ygcj09YG51bWJlcmAmJihlLnVuaWNvZGVzW3IudG9TdHJpbmcoMTYpXT17cHJlZml4OmksaWNvbk5hbWU6YX0pLGV9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO1dwPW4ubmFtZXMsR3A9bi51bmljb2RlcyxWcD1pbShxLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OnEuZmFtaWx5RGVmYXVsdH0pfTthcChmdW5jdGlvbihlKXtWcD1pbShlLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OnEuZmFtaWx5RGVmYXVsdH0pfSksWXAoKTtmdW5jdGlvbiBYcChlLHQpe3JldHVybihIcFtlXXx8e30pW3RdfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuKFVwW2VdfHx7fSlbdF19ZnVuY3Rpb24gUXAoZSx0KXtyZXR1cm4oS3BbZV18fHt9KVt0XX1mdW5jdGlvbiAkcChlKXtyZXR1cm4gV3BbZV18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiBlbShlKXt2YXIgdD1HcFtlXSxuPVhwKGBmYXNgLGUpO3JldHVybiB0fHwobj97cHJlZml4OmBmYXNgLGljb25OYW1lOm59Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gdG0oKXtyZXR1cm4gVnB9dmFyIG5tPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O2Z1bmN0aW9uIHJtKGUpe3ZhciB0PW9kLG49enAucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7cS5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gZWYuZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBCcFtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIGltKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/b2Q6dCxyPVZmW25dW2VdO2lmKG49PT1zZCYmIWUpcmV0dXJuYGZhZGA7dmFyIGk9VWZbbl1bZV18fFVmW25dW3JdLGE9ZSBpbiBUcC5zdHlsZXM/ZTpudWxsO3JldHVybiBpfHxhfHxudWxsfWZ1bmN0aW9uIGFtKGUpe3ZhciB0PVtdLG49bnVsbDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPUpwKHEuY3NzUHJlZml4LGUpO3I/bj1yOmUmJnQucHVzaChlKX0pLHtpY29uTmFtZTpuLHJlc3Q6dH19ZnVuY3Rpb24gb20oZSl7cmV0dXJuIGUuc29ydCgpLmZpbHRlcihmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uaW5kZXhPZihlKT09PXR9KX12YXIgc209eWYuY29uY2F0KG9mKTtmdW5jdGlvbiBjbShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5za2lwTG9va3VwcyxuPXQhPT12b2lkIDAmJnQscj1udWxsLGk9b20oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHNtLmluY2x1ZGVzKGUpfSkpLGE9b20oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXNtLmluY2x1ZGVzKGUpfSkpLG89RnUoaS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSwhYWQuaW5jbHVkZXMoZSl9KSwxKVswXSxzPW89PT12b2lkIDA/bnVsbDpvLGM9cm0oaSksbD1LKEsoe30sYW0oYSkpLHt9LHtwcmVmaXg6aW0ocyx7ZmFtaWx5OmN9KX0pO3JldHVybiBLKEsoSyh7fSxsKSxmbSh7dmFsdWVzOmUsZmFtaWx5OmMsc3R5bGVzOkxwLGNvbmZpZzpxLGNhbm9uaWNhbDpsLGdpdmVuUHJlZml4OnJ9KSksbG0obixyLGwpKX1mdW5jdGlvbiBsbShlLHQsbil7dmFyIHI9bi5wcmVmaXgsaT1uLmljb25OYW1lO2lmKGV8fCFyfHwhaSlyZXR1cm57cHJlZml4OnIsaWNvbk5hbWU6aX07dmFyIGE9dD09PWBmYWA/JHAoaSk6e30sbz1RcChyLGkpO3JldHVybiBpPWEuaWNvbk5hbWV8fG98fGkscj1hLnByZWZpeHx8cixyPT09YGZhcmAmJiFMcC5mYXImJkxwLmZhcyYmIXEuYXV0b0ZldGNoU3ZnJiYocj1gZmFzYCkse3ByZWZpeDpyLGljb25OYW1lOml9fXZhciB1bT1lZi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1vZHx8ZSE9PXNkfSksZG09T2JqZWN0LmtleXModmYpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PW9kfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyh2ZltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gZm0oZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09c2QsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJnVtLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZG0uaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9cmYuZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9UXAoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PXRtKCl8fGBmYXNgKSxyfXZhciBwbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtFdSh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIE91KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPUsoSyh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksSXAobix0W25dKTt2YXIgcj1HZltvZF1bbl07ciYmSXAocix0W25dKSxZcCgpfSl9fSx7a2V5OmByZXNldGAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb25zPXt9fX0se2tleTpgX3B1bGxEZWZpbml0aW9uc2AsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnByZWZpeCYmdC5pY29uTmFtZSYmdC5pY29uP3swOnR9OnQ7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGk9ci5wcmVmaXgsYT1yLmljb25OYW1lLG89ci5pY29uLHM9b1syXTtlW2ldfHwoZVtpXT17fSkscy5sZW5ndGg+MCYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT1gc3RyaW5nYCYmKGVbaV1bdF09byl9KSxlW2ldW2FdPW99KSxlfX1dKX0oKSxtbT1bXSxobT17fSxnbT17fSxfbT1PYmplY3Qua2V5cyhnbSk7ZnVuY3Rpb24gdm0oZSx0KXt2YXIgbj10Lm1peG91dHNUbztyZXR1cm4gbW09ZSxobT17fSxPYmplY3Qua2V5cyhnbSkuZm9yRWFjaChmdW5jdGlvbihlKXtfbS5pbmRleE9mKGUpPT09LTEmJmRlbGV0ZSBnbVtlXX0pLG1tLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taXhvdXQ/ZS5taXhvdXQoKTp7fTtpZihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3R5cGVvZiB0W2VdPT1gZnVuY3Rpb25gJiYobltlXT10W2VdKSx6dSh0W2VdKT09PWBvYmplY3RgJiZPYmplY3Qua2V5cyh0W2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe25bZV18fChuW2VdPXt9KSxuW2VdW3JdPXRbZV1bcl19KX0pLGUuaG9va3Mpe3ZhciByPWUuaG9va3MoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2htW2VdfHwoaG1bZV09W10pLGhtW2VdLnB1c2gocltlXSl9KX1lLnByb3ZpZGVzJiZlLnByb3ZpZGVzKGdtKX0pLG59ZnVuY3Rpb24geW0oZSx0KXt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgyKTtyZXR1cm4oaG1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9ZS5hcHBseShudWxsLFt0XS5jb25jYXQobikpfSksdH1mdW5jdGlvbiBibShlKXt2YXIgdD1bLi4uYXJndW1lbnRzXS5zbGljZSgxKTsoaG1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYXBwbHkobnVsbCx0KX0pfWZ1bmN0aW9uIHhtKCl7dmFyIGU9YXJndW1lbnRzWzBdLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBnbVtlXT9nbVtlXS5hcHBseShudWxsLHQpOnZvaWQgMH1mdW5jdGlvbiBTbShlKXtlLnByZWZpeD09PWBmYWAmJihlLnByZWZpeD1gZmFzYCk7dmFyIHQ9ZS5pY29uTmFtZSxuPWUucHJlZml4fHx0bSgpO2lmKHQpcmV0dXJuIHQ9UXAobix0KXx8dCxqcChDbS5kZWZpbml0aW9ucyxuLHQpfHxqcChUcC5zdHlsZXMsbix0KX12YXIgQ209bmV3IHBtLHdtPXtub0F1dG86ZnVuY3Rpb24oKXtxLmF1dG9SZXBsYWNlU3ZnPSExLHEub2JzZXJ2ZU11dGF0aW9ucz0hMSxibShgbm9BdXRvYCl9LGNvbmZpZzpxLGRvbTp7aTJzdmc6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307cmV0dXJuIFF1PyhibShgYmVmb3JlSTJzdmdgLGUpLHhtKGBwc2V1ZG9FbGVtZW50czJzdmdgLGUpLHhtKGBpMnN2Z2AsZSkpOlByb21pc2UucmVqZWN0KEVycm9yKGBPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLmApKX0sd2F0Y2g6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sdD1lLmF1dG9SZXBsYWNlU3ZnUm9vdDtxLmF1dG9SZXBsYWNlU3ZnPT09ITEmJihxLmF1dG9SZXBsYWNlU3ZnPSEwKSxxLm9ic2VydmVNdXRhdGlvbnM9ITAsa3AoZnVuY3Rpb24oKXtUbSh7YXV0b1JlcGxhY2VTdmdSb290OnR9KSxibShgd2F0Y2hgLGUpfSl9fSxwYXJzZTp7aWNvbjpmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZih6dShlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm57cHJlZml4OmUucHJlZml4LGljb25OYW1lOlFwKGUucHJlZml4LGUuaWNvbk5hbWUpfHxlLmljb25OYW1lfTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpe3ZhciB0PWVbMV0uaW5kZXhPZihgZmEtYCk9PT0wP2VbMV0uc2xpY2UoMyk6ZVsxXSxuPWltKGVbMF0pO3JldHVybntwcmVmaXg6bixpY29uTmFtZTpRcChuLHQpfHx0fX1pZih0eXBlb2YgZT09YHN0cmluZ2AmJihlLmluZGV4T2YoYCR7cS5jc3NQcmVmaXh9LWApPi0xfHxlLm1hdGNoKHFmKSkpe3ZhciByPWNtKGUuc3BsaXQoYCBgKSx7c2tpcExvb2t1cHM6ITB9KTtyZXR1cm57cHJlZml4OnIucHJlZml4fHx0bSgpLGljb25OYW1lOlFwKHIucHJlZml4LHIuaWNvbk5hbWUpfHxyLmljb25OYW1lfX1pZih0eXBlb2YgZT09YHN0cmluZ2Ape3ZhciBpPXRtKCk7cmV0dXJue3ByZWZpeDppLGljb25OYW1lOlFwKGksZSl8fGV9fX19LGxpYnJhcnk6Q20sZmluZEljb25EZWZpbml0aW9uOlNtLHRvSHRtbDpBcH0sVG09ZnVuY3Rpb24oKXt2YXIgZT0oYXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9KS5hdXRvUmVwbGFjZVN2Z1Jvb3QsdD1lPT09dm9pZCAwP1l1OmU7KE9iamVjdC5rZXlzKFRwLnN0eWxlcykubGVuZ3RoPjB8fHEuYXV0b0ZldGNoU3ZnKSYmUXUmJnEuYXV0b1JlcGxhY2VTdmcmJndtLmRvbS5pMnN2Zyh7bm9kZTp0fSl9O2Z1bmN0aW9uIEVtKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhYnN0cmFjdCIse2dldDp0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImh0bWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hYnN0cmFjdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEFwKGUpfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZihRdSl7dmFyIHQ9WXUuY3JlYXRlRWxlbWVudChgZGl2YCk7cmV0dXJuIHQuaW5uZXJIVE1MPWUuaHRtbCx0LmNoaWxkcmVufX19KSxlfWZ1bmN0aW9uIERtKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLm1haW4scj1lLm1hc2ssaT1lLmF0dHJpYnV0ZXMsYT1lLnN0eWxlcyxvPWUudHJhbnNmb3JtO2lmKGdwKG8pJiZuLmZvdW5kJiYhci5mb3VuZCl7dmFyIHM9e3g6bi53aWR0aC9uLmhlaWdodC8yLHk6LjV9O2kuc3R5bGU9aHAoSyhLKHt9LGEpLHt9LHsidHJhbnNmb3JtLW9yaWdpbiI6YCR7cy54K28ueC8xNn1lbSAke3MueStvLnkvMTZ9ZW1gfSkpfXJldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fV19ZnVuY3Rpb24gT20oZSl7dmFyIHQ9ZS5wcmVmaXgsbj1lLmljb25OYW1lLHI9ZS5jaGlsZHJlbixpPWUuYXR0cmlidXRlcyxhPWUuc3ltYm9sLG89YT09PSEwP2Ake3R9LSR7cS5jc3NQcmVmaXh9LSR7bn1gOmE7cmV0dXJuW3t0YWc6YHN2Z2AsYXR0cmlidXRlczp7c3R5bGU6YGRpc3BsYXk6IG5vbmU7YH0sY2hpbGRyZW46W3t0YWc6YHN5bWJvbGAsYXR0cmlidXRlczpLKEsoe30saSkse30se2lkOm99KSxjaGlsZHJlbjpyfV19XX1mdW5jdGlvbiBrbShlKXtyZXR1cm5bYGFyaWEtbGFiZWxgLGBhcmlhLWxhYmVsbGVkYnlgLGB0aXRsZWAsYHJvbGVgXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGV9KX1mdW5jdGlvbiBBbShlKXt2YXIgdD1lLmljb25zLG49dC5tYWluLHI9dC5tYXNrLGk9ZS5wcmVmaXgsYT1lLmljb25OYW1lLG89ZS50cmFuc2Zvcm0scz1lLnN5bWJvbCxjPWUubWFza0lkLGw9ZS5leHRyYSx1PWUud2F0Y2hhYmxlLGQ9dSE9PXZvaWQgMCYmdSxmPXIuZm91bmQ/cjpuLHA9Zi53aWR0aCxtPWYuaGVpZ2h0LGg9W3EucmVwbGFjZW1lbnRDbGFzcyxhP2Ake3EuY3NzUHJlZml4fS0ke2F9YDpgYF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsLmNsYXNzZXMuaW5kZXhPZihlKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09YGB8fCEhZX0pLmNvbmNhdChsLmNsYXNzZXMpLmpvaW4oYCBgKSxnPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOksoSyh7fSxsLmF0dHJpYnV0ZXMpLHt9LHsiZGF0YS1wcmVmaXgiOmksImRhdGEtaWNvbiI6YSxjbGFzczpoLHJvbGU6bC5hdHRyaWJ1dGVzLnJvbGV8fGBpbWdgLHZpZXdCb3g6YDAgMCAke3B9ICR7bX1gfSl9OyFrbShsLmF0dHJpYnV0ZXMpJiYhbC5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdJiYoZy5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdPWB0cnVlYCksZCYmKGcuYXR0cmlidXRlc1trZl09YGApO3ZhciBfPUsoSyh7fSxnKSx7fSx7cHJlZml4OmksaWNvbk5hbWU6YSxtYWluOm4sbWFzazpyLG1hc2tJZDpjLHRyYW5zZm9ybTpvLHN5bWJvbDpzLHN0eWxlczpLKHt9LGwuc3R5bGVzKX0pLHY9ci5mb3VuZCYmbi5mb3VuZD94bShgZ2VuZXJhdGVBYnN0cmFjdE1hc2tgLF8pfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06eG0oYGdlbmVyYXRlQWJzdHJhY3RJY29uYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LHk9di5jaGlsZHJlbixiPXYuYXR0cmlidXRlcztyZXR1cm4gXy5jaGlsZHJlbj15LF8uYXR0cmlidXRlcz1iLHM/T20oXyk6RG0oXyl9ZnVuY3Rpb24gam0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9ZS50cmFuc2Zvcm0sYT1lLmV4dHJhLG89ZS53YXRjaGFibGUscz1vIT09dm9pZCAwJiZvLGM9SyhLKHt9LGEuYXR0cmlidXRlcykse30se2NsYXNzOmEuY2xhc3Nlcy5qb2luKGAgYCl9KTtzJiYoY1trZl09YGApO3ZhciBsPUsoe30sYS5zdHlsZXMpO2dwKGkpJiYobC50cmFuc2Zvcm09dnAoe3RyYW5zZm9ybTppLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6bixoZWlnaHQ6cn0pLGxbYC13ZWJraXQtdHJhbnNmb3JtYF09bC50cmFuc2Zvcm0pO3ZhciB1PWhwKGwpO3UubGVuZ3RoPjAmJihjLnN0eWxlPXUpO3ZhciBkPVtdO3JldHVybiBkLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpjLGNoaWxkcmVuOlt0XX0pLGR9ZnVuY3Rpb24gTW0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS5leHRyYSxyPUsoSyh7fSxuLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpuLmNsYXNzZXMuam9pbihgIGApfSksaT1ocChuLnN0eWxlcyk7aS5sZW5ndGg+MCYmKHIuc3R5bGU9aSk7dmFyIGE9W107cmV0dXJuIGEucHVzaCh7dGFnOmBzcGFuYCxhdHRyaWJ1dGVzOnIsY2hpbGRyZW46W3RdfSksYX12YXIgTm09VHAuc3R5bGVzO2Z1bmN0aW9uIFBtKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9RnUoZS5zbGljZSg0KSwxKVswXSxpPW51bGw7cmV0dXJuIGk9QXJyYXkuaXNBcnJheShyKT97dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtxLmNzc1ByZWZpeH0tJHtaZi5HUk9VUH1gfSxjaGlsZHJlbjpbe3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7WmYuU0VDT05EQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMF19fSx7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtxLmNzc1ByZWZpeH0tJHtaZi5QUklNQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMV19fV19Ont0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2ZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyfX0se2ZvdW5kOiEwLHdpZHRoOnQsaGVpZ2h0Om4saWNvbjppfX12YXIgRm09e2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyfTtmdW5jdGlvbiBJbShlLHQpeyFSZiYmIXEuc2hvd01pc3NpbmdJY29ucyYmZSYmY29uc29sZS5lcnJvcihgSWNvbiB3aXRoIG5hbWUgIiR7ZX0iIGFuZCBwcmVmaXggIiR7dH0iIGlzIG1pc3NpbmcuYCl9ZnVuY3Rpb24gTG0oZSx0KXt2YXIgbj10O3JldHVybiB0PT09YGZhYCYmcS5zdHlsZURlZmF1bHQhPT1udWxsJiYodD10bSgpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe2lmKG49PT1gZmFgKXt2YXIgYT0kcChlKXx8e307ZT1hLmljb25OYW1lfHxlLHQ9YS5wcmVmaXh8fHR9aWYoZSYmdCYmTm1bdF0mJk5tW3RdW2VdKXt2YXIgbz1ObVt0XVtlXTtyZXR1cm4gcihQbShvKSl9SW0oZSx0KSxyKEsoSyh7fSxGbSkse30se2ljb246cS5zaG93TWlzc2luZ0ljb25zJiZlJiZ4bShgbWlzc2luZ0ljb25BYnN0cmFjdGApfHx7fX0pKX0pfXZhciBSbT1mdW5jdGlvbigpe30sem09cS5tZWFzdXJlUGVyZm9ybWFuY2UmJlp1JiZadS5tYXJrJiZadS5tZWFzdXJlP1p1OnttYXJrOlJtLG1lYXN1cmU6Um19LEJtPWBGQSAiNy4zLjEiYCxWbT1mdW5jdGlvbihlKXtyZXR1cm4gem0ubWFyayhgJHtCbX0gJHtlfSBiZWdpbnNgKSxmdW5jdGlvbigpe3JldHVybiBIbShlKX19LEhtPWZ1bmN0aW9uKGUpe3ptLm1hcmsoYCR7Qm19ICR7ZX0gZW5kc2ApLHptLm1lYXN1cmUoYCR7Qm19ICR7ZX1gLGAke0JtfSAke2V9IGJlZ2luc2AsYCR7Qm19ICR7ZX0gZW5kc2ApfSxVbT17YmVnaW46Vm0sZW5kOkhtfSxXbT1mdW5jdGlvbigpe307ZnVuY3Rpb24gR20oZSl7cmV0dXJuIHR5cGVvZihlLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZShrZik6bnVsbCk9PWBzdHJpbmdgfWZ1bmN0aW9uIEttKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKE1mKTpudWxsLG49ZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUoTmYpOm51bGw7cmV0dXJuIHQmJm59ZnVuY3Rpb24gcW0oZSl7cmV0dXJuIGUmJmUuY2xhc3NMaXN0JiZlLmNsYXNzTGlzdC5jb250YWlucyYmZS5jbGFzc0xpc3QuY29udGFpbnMocS5yZXBsYWNlbWVudENsYXNzKX1mdW5jdGlvbiBKbSgpe3JldHVybiBxLmF1dG9SZXBsYWNlU3ZnPT09ITA/JG0ucmVwbGFjZTokbVtxLmF1dG9SZXBsYWNlU3ZnXXx8JG0ucmVwbGFjZX1mdW5jdGlvbiBZbShlKXtyZXR1cm4gWXUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gWG0oZSl7cmV0dXJuIFl1LmNyZWF0ZUVsZW1lbnQoZSl9ZnVuY3Rpb24gWm0oZSl7dmFyIHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSkuY2VGbixuPXQ9PT12b2lkIDA/ZS50YWc9PT1gc3ZnYD9ZbTpYbTp0O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gWXUuY3JlYXRlVGV4dE5vZGUoZSk7dmFyIHI9bihlLnRhZyk7cmV0dXJuIE9iamVjdC5rZXlzKGUuYXR0cmlidXRlc3x8W10pLmZvckVhY2goZnVuY3Rpb24odCl7ci5zZXRBdHRyaWJ1dGUodCxlLmF0dHJpYnV0ZXNbdF0pfSksKGUuY2hpbGRyZW58fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuYXBwZW5kQ2hpbGQoWm0oZSx7Y2VGbjpufSkpfSkscn1mdW5jdGlvbiBRbShlKXt2YXIgdD1gICR7ZS5vdXRlckhUTUx9IGA7cmV0dXJuIHQ9YCR7dH1Gb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIGAsdH12YXIgJG09e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtpZih0LnBhcmVudE5vZGUpe2lmKGVbMV0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFptKGUpLHQpfSksdC5nZXRBdHRyaWJ1dGUoa2YpPT09bnVsbCYmcS5rZWVwT3JpZ2luYWxTb3VyY2Upe3ZhciBuPVl1LmNyZWF0ZUNvbW1lbnQoUW0odCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH5mcCh0KS5pbmRleE9mKHEucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuICRtLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke3EuY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXEucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBBcChlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZShrZixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uIGVoKGUpe2UoKX1mdW5jdGlvbiB0aChlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6V207aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPWVoO3EubXV0YXRlQXBwcm9hY2g9PT1GZiYmKHI9SnUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxlaCkscihmdW5jdGlvbigpe3ZhciB0PUptKCkscj1VbS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgbmg9ITE7ZnVuY3Rpb24gcmgoKXtuaD0hMH1mdW5jdGlvbiBpaCgpe25oPSExfXZhciBhaD1udWxsO2Z1bmN0aW9uIG9oKGUpe2lmKFh1JiZxLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9XbTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP1dtOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP1dtOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9ZdTpzO2FoPW5ldyBYdShmdW5jdGlvbihlKXtpZighbmgpe3ZhciB0PXRtKCk7ZHAoZSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLnR5cGU9PT1gY2hpbGRMaXN0YCYmZS5hZGRlZE5vZGVzLmxlbmd0aD4wJiYhR20oZS5hZGRlZE5vZGVzWzBdKSYmKHEuc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oZS50YXJnZXQpLG4oZS50YXJnZXQpKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJmUudGFyZ2V0LnBhcmVudE5vZGUmJnEuc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oW2UudGFyZ2V0XSwhMCksZS50eXBlPT09YGF0dHJpYnV0ZXNgJiZHbShlLnRhcmdldCkmJn5YZi5pbmRleE9mKGUuYXR0cmlidXRlTmFtZSkpe2lmKGUuYXR0cmlidXRlTmFtZT09PWBjbGFzc2AmJkttKGUudGFyZ2V0KSl7dmFyIHI9Y20oZnAoZS50YXJnZXQpKSxhPXIucHJlZml4LHM9ci5pY29uTmFtZTtlLnRhcmdldC5zZXRBdHRyaWJ1dGUoTWYsYXx8dCkscyYmZS50YXJnZXQuc2V0QXR0cmlidXRlKE5mLHMpfWVsc2UgcW0oZS50YXJnZXQpJiZpKGUudGFyZ2V0KX19KX19KSxRdSYmYWgub2JzZXJ2ZShjLHtjaGlsZExpc3Q6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITB9KX19ZnVuY3Rpb24gc2goKXthaCYmYWguZGlzY29ubmVjdCgpfWZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKGBzdHlsZWApLG49W107cmV0dXJuIHQmJihuPXQuc3BsaXQoYDtgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwbGl0KGA6YCkscj1uWzBdLGk9bi5zbGljZSgxKTtyZXR1cm4gciYmaS5sZW5ndGg+MCYmKGVbcl09aS5qb2luKGA6YCkudHJpbSgpKSxlfSx7fSkpLG59ZnVuY3Rpb24gbGgoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtcHJlZml4YCksbj1lLmdldEF0dHJpYnV0ZShgZGF0YS1pY29uYCkscj1lLmlubmVyVGV4dD09PXZvaWQgMD9gYDplLmlubmVyVGV4dC50cmltKCksaT1jbShmcChlKSk7cmV0dXJuIGkucHJlZml4fHw9dG0oKSx0JiZuJiYoaS5wcmVmaXg9dCxpLmljb25OYW1lPW4pLGkuaWNvbk5hbWUmJmkucHJlZml4P2k6KGkucHJlZml4JiZyLmxlbmd0aD4wJiYoaS5pY29uTmFtZT1acChpLnByZWZpeCxlLmlubmVyVGV4dCl8fFhwKGkucHJlZml4LFBwKGUuaW5uZXJUZXh0KSkpLCFpLmljb25OYW1lJiZxLmF1dG9GZXRjaFN2ZyYmZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmKGkuaWNvbk5hbWU9ZS5maXJzdENoaWxkLmRhdGEpLGkpfWZ1bmN0aW9uIHVoKGUpe3JldHVybiBkcChlLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm5hbWUhPT1gY2xhc3NgJiZlLm5hbWUhPT1gc3R5bGVgJiYoZVt0Lm5hbWVdPXQudmFsdWUpLGV9LHt9KX1mdW5jdGlvbiBkaCgpe3JldHVybntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpzcCxzeW1ib2w6ITEsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxleHRyYTp7Y2xhc3NlczpbXSxzdHlsZXM6e30sYXR0cmlidXRlczp7fX19fWZ1bmN0aW9uIGZoKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7c3R5bGVQYXJzZXI6ITB9LG49bGgoZSkscj1uLmljb25OYW1lLGk9bi5wcmVmaXgsYT1uLnJlc3Qsbz11aChlKSxzPXltKGBwYXJzZU5vZGVBdHRyaWJ1dGVzYCx7fSxlKTtyZXR1cm4gSyh7aWNvbk5hbWU6cixwcmVmaXg6aSx0cmFuc2Zvcm06c3AsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxzeW1ib2w6ITEsZXh0cmE6e2NsYXNzZXM6YSxzdHlsZXM6dC5zdHlsZVBhcnNlcj9jaChlKTpbXSxhdHRyaWJ1dGVzOm99fSxzKX12YXIgcGg9VHAuc3R5bGVzO2Z1bmN0aW9uIG1oKGUpe3ZhciB0PXEuYXV0b1JlcGxhY2VTdmc9PT1gbmVzdGA/ZmgoZSx7c3R5bGVQYXJzZXI6ITF9KTpmaChlKTtyZXR1cm5+dC5leHRyYS5jbGFzc2VzLmluZGV4T2YoSmYpP3htKGBnZW5lcmF0ZUxheWVyc1RleHRgLGUsdCk6eG0oYGdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbmAsZSx0KX1mdW5jdGlvbiBoaCgpe3JldHVybltdLmNvbmNhdChJdShvZiksSXUoeWYpKX1mdW5jdGlvbiBnaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtpZighUXUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBuPVl1LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Qscj1mdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoYCR7UGZ9LSR7ZX1gKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbi5yZW1vdmUoYCR7UGZ9LSR7ZX1gKX0sYT1xLmF1dG9GZXRjaFN2Zz9oaCgpOmFkLmNvbmNhdChPYmplY3Qua2V5cyhwaCkpO2EuaW5jbHVkZXMoYGZhYCl8fGEucHVzaChgZmFgKTt2YXIgbz1bYC4ke0pmfTpub3QoWyR7a2Z9XSlgXS5jb25jYXQoYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYC4ke2V9Om5vdChbJHtrZn1dKWB9KSkuam9pbihgLCBgKTtpZihvLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBzPVtdO3RyeXtzPWRwKGUucXVlcnlTZWxlY3RvckFsbChvKSl9Y2F0Y2h7fWlmKHMubGVuZ3RoPjApcihgcGVuZGluZ2ApLGkoYGNvbXBsZXRlYCk7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGM9VW0uYmVnaW4oYG9uVHJlZWApLGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49bWgodCk7biYmZS5wdXNoKG4pfWNhdGNoKGUpe1JmfHxlLm5hbWU9PT1gTWlzc2luZ0ljb25gJiZjb25zb2xlLmVycm9yKGUpfXJldHVybiBlfSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5hbGwobCkudGhlbihmdW5jdGlvbihuKXt0aChuLGZ1bmN0aW9uKCl7cihgYWN0aXZlYCkscihgY29tcGxldGVgKSxpKGBwZW5kaW5nYCksdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJnQoKSxjKCksZSgpfSl9KS5jYXRjaChmdW5jdGlvbihlKXtjKCksbihlKX0pfSl9ZnVuY3Rpb24gX2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7bWgoZSkudGhlbihmdW5jdGlvbihlKXtlJiZ0aChbZV0sdCl9KX1mdW5jdGlvbiB2aChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9KHR8fHt9KS5pY29uP3Q6U20odHx8e30pLGk9bi5tYXNrO3JldHVybiBpJiY9KGl8fHt9KS5pY29uP2k6U20oaXx8e30pLGUocixLKEsoe30sbikse30se21hc2s6aX0pKX19dmFyIHloPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9zcDpuLGk9dC5zeW1ib2wsYT1pIT09dm9pZCAwJiZpLG89dC5tYXNrLHM9bz09PXZvaWQgMD9udWxsOm8sYz10Lm1hc2tJZCxsPWM9PT12b2lkIDA/bnVsbDpjLHU9dC5jbGFzc2VzLGQ9dT09PXZvaWQgMD9bXTp1LGY9dC5hdHRyaWJ1dGVzLHA9Zj09PXZvaWQgMD97fTpmLG09dC5zdHlsZXMsaD1tPT09dm9pZCAwP3t9Om07aWYoZSl7dmFyIGc9ZS5wcmVmaXgsXz1lLmljb25OYW1lLHY9ZS5pY29uO3JldHVybiBFbShLKHt0eXBlOmBpY29uYH0sZSksZnVuY3Rpb24oKXtyZXR1cm4gYm0oYGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbmAse2ljb25EZWZpbml0aW9uOmUscGFyYW1zOnR9KSxBbSh7aWNvbnM6e21haW46UG0odiksbWFzazpzP1BtKHMuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDpnLGljb25OYW1lOl8sdHJhbnNmb3JtOksoSyh7fSxzcCksciksc3ltYm9sOmEsbWFza0lkOmwsZXh0cmE6e2F0dHJpYnV0ZXM6cCxzdHlsZXM6aCxjbGFzc2VzOmR9fSl9KX19LGJoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57aWNvbjp2aCh5aCl9fSxob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyZWVDYWxsYmFjaz1naCxlLm5vZGVDYWxsYmFjaz1faCxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuaTJzdmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLG49dD09PXZvaWQgMD9ZdTp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gZ2gobixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtMbShuLHIpLG8uaWNvbk5hbWU/TG0oby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPUZ1KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLEFtKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89aHAoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIGdwKGkpJiYocz14bShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSx4aD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gRW0oe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXtibShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtxLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KEl1KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSxTaD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIEVtKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGJtKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxNbSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake3EuY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChJdShhKSl9fSl9KX19fX0sQ2g9e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9zcDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIEVtKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGJtKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxqbSh7Y29udGVudDplLHRyYW5zZm9ybTpLKEsoe30sc3ApLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7cS5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KEl1KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoJHUpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSxqbSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSx3aD1SZWdFeHAoYCJgLGB1Z2ApLFRoPVsxMTA1OTIwLDExMTIzMTldLEVoPUsoSyhLKEsoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLG5mKSx3ZiksdWYpLERoPU9iamVjdC5rZXlzKEVoKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPUVoW3RdLGV9LHt9KSxPaD1PYmplY3Qua2V5cyhEaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49RGhbdF07cmV0dXJuIGVbdF09bls5MDBdfHxJdShPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIGtoKGUpe3JldHVybiBQcChJdShlLnJlcGxhY2Uod2gsYGApKVswXXx8YGApfWZ1bmN0aW9uIEFoKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2Uod2gsYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PVRoWzBdJiZyPD1UaFsxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24gamgoZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKERoW25dfHx7fSlbaV18fE9oW25dfWZ1bmN0aW9uIE1oKGUsdCl7dmFyIG49YCR7amZ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT1kcChlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKEFmKT09PXR9KVswXSxvPUp1LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goWWYpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj1qaChzLGwpLHA9a2goZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD1BaChvKSxnPVhwKGYscCksXz1nO2lmKG0pe3ZhciB2PWVtKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKE1mKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKE5mKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9ZGgoKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW0FmXT10LExtKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT1BbShLKEsoe30seSkse30se2ljb25zOnttYWluOmksbWFzazpubSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89WXUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsYHN2Z2ApO3Q9PT1gOjpiZWZvcmVgP2UuaW5zZXJ0QmVmb3JlKG8sZS5maXJzdENoaWxkKTplLmFwcGVuZENoaWxkKG8pLG8ub3V0ZXJIVE1MPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBBcChlKX0pLmpvaW4oYApgKSxlLnJlbW92ZUF0dHJpYnV0ZShuKSxyKCl9KS5jYXRjaChpKX1lbHNlIHIoKX1lbHNlIHIoKX0pfWZ1bmN0aW9uIE5oKGUpe3JldHVybiBQcm9taXNlLmFsbChbTWgoZSxgOjpiZWZvcmVgKSxNaChlLGA6OmFmdGVyYCldKX1mdW5jdGlvbiBQaChlKXtyZXR1cm4gZS5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmIX5JZi5pbmRleE9mKGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSYmIWUuZ2V0QXR0cmlidXRlKEFmKSYmKCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS50YWdOYW1lIT09YHN2Z2ApfXZhciBGaD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJkxmLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0sSWg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107dmFyIHQ9bmV3IFNldCxuPWUuc3BsaXQoLywoPyFbXigpXSpcKSkvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSk7bj1uLmZsYXRNYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoYChgKT9lOmUuc3BsaXQoYCxgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSl9KTt2YXIgcj1rdShuKSxpO3RyeXtmb3Ioci5zKCk7IShpPXIubigpKS5kb25lOyl7dmFyIGE9aS52YWx1ZTtpZihGaChhKSl7dmFyIG89TGYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LGBgKX0sYSk7byE9PWBgJiZvIT09YCpgJiZ0LmFkZChvKX19fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0fTtmdW5jdGlvbiBMaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMCYmYXJndW1lbnRzWzFdO2lmKFF1KXt2YXIgbjtpZih0KW49ZTtlbHNlIGlmKHEuc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiluPWUucXVlcnlTZWxlY3RvckFsbChgKmApO2Vsc2V7dmFyIHI9bmV3IFNldCxpPWt1KGRvY3VtZW50LnN0eWxlU2hlZXRzKSxhO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZTt0cnl7dmFyIHM9a3Uoby5jc3NSdWxlcyksYzt0cnl7Zm9yKHMucygpOyEoYz1zLm4oKSkuZG9uZTspe3ZhciBsPWMudmFsdWUsdT1rdShJaChsLnNlbGVjdG9yVGV4dCkpLGQ7dHJ5e2Zvcih1LnMoKTshKGQ9dS5uKCkpLmRvbmU7KXt2YXIgZj1kLnZhbHVlO3IuYWRkKGYpfX1jYXRjaChlKXt1LmUoZSl9ZmluYWxseXt1LmYoKX19fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX1jYXRjaChlKXtxLnNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MmJmNvbnNvbGUud2FybihgRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogJHtvLmhyZWZ9ICgke2UubWVzc2FnZX0pCklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLmApfX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9aWYoIXIuc2l6ZSlyZXR1cm47dmFyIHA9QXJyYXkuZnJvbShyKS5qb2luKGAsIGApO3RyeXtuPWUucXVlcnlTZWxlY3RvckFsbChwKX1jYXRjaHt9fXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciByPWRwKG4pLmZpbHRlcihQaCkubWFwKE5oKSxpPVVtLmJlZ2luKGBzZWFyY2hQc2V1ZG9FbGVtZW50c2ApO3JoKCksUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbigpe2koKSxpaCgpLGUoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7aSgpLGloKCksdCgpfSl9KX19dmFyIFJoPXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9TGgsZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLnBzZXVkb0VsZW1lbnRzMnN2Zz1mdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUsbj10PT09dm9pZCAwP1l1OnQ7cS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmTGgobil9fX0semg9ITEsQmg9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e3Vud2F0Y2g6ZnVuY3Rpb24oKXtyaCgpLHpoPSEwfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntib290c3RyYXA6ZnVuY3Rpb24oKXtvaCh5bShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7c2goKX0sd2F0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vYnNlcnZlTXV0YXRpb25zUm9vdDt6aD9paCgpOm9oKHltKGBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzYCx7b2JzZXJ2ZU11dGF0aW9uc1Jvb3Q6dH0pKX19fX0sVmg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdChgIGApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO2lmKHImJmk9PT1gaGApcmV0dXJuIGUuZmxpcFg9ITAsZTtpZihyJiZpPT09YHZgKXJldHVybiBlLmZsaXBZPSEwLGU7aWYoaT1wYXJzZUZsb2F0KGkpLGlzTmFOKGkpKXJldHVybiBlO3N3aXRjaChyKXtjYXNlYGdyb3dgOmUuc2l6ZSs9aTticmVhaztjYXNlYHNocmlua2A6ZS5zaXplLT1pO2JyZWFrO2Nhc2VgbGVmdGA6ZS54LT1pO2JyZWFrO2Nhc2VgcmlnaHRgOmUueCs9aTticmVhaztjYXNlYHVwYDplLnktPWk7YnJlYWs7Y2FzZWBkb3duYDplLnkrPWk7YnJlYWs7Y2FzZWByb3RhdGVgOmUucm90YXRlKz1pfXJldHVybiBlfSx7c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfSl9LEhoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gVmgoZSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS10cmFuc2Zvcm1gKTtyZXR1cm4gbiYmKGUudHJhbnNmb3JtPVZoKG4pKSxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWFpbixuPWUudHJhbnNmb3JtLHI9ZS5jb250YWluZXJXaWR0aCxpPWUuaWNvbldpZHRoLGE9e291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke24ueCozMn0sICR7bi55KjMyfSkgYH0gJHtgc2NhbGUoJHtuLnNpemUvMTYqKG4uZmxpcFg/LTE6MSl9LCAke24uc2l6ZS8xNioobi5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke24ucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke2kvMiotMX0gLTI1NilgfX07cmV0dXJue3RhZzpgZ2AsYXR0cmlidXRlczpLKHt9LGEub3V0ZXIpLGNoaWxkcmVuOlt7dGFnOmBnYCxhdHRyaWJ1dGVzOksoe30sYS5pbm5lciksY2hpbGRyZW46W3t0YWc6dC5pY29uLnRhZyxjaGlsZHJlbjp0Lmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpLKEsoe30sdC5pY29uLmF0dHJpYnV0ZXMpLGEucGF0aCl9XX1dfX19fSxVaD17eDowLHk6MCx3aWR0aDpgMTAwJWAsaGVpZ2h0OmAxMDAlYH07ZnVuY3Rpb24gV2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBlLmF0dHJpYnV0ZXMmJihlLmF0dHJpYnV0ZXMuZmlsbHx8dCkmJihlLmF0dHJpYnV0ZXMuZmlsbD1gYmxhY2tgKSxlfWZ1bmN0aW9uIEdoKGUpe3JldHVybiBlLnRhZz09PWBnYD9lLmNoaWxkcmVuOltlXX12bShbQ3AsYmgseGgsU2gsQ2gsUmgsQmgsSGgse2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrYCkscj1uP2NtKG4uc3BsaXQoYCBgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSkpOm5tKCk7cmV0dXJuIHIucHJlZml4fHw9dG0oKSxlLm1hc2s9cixlLm1hc2tJZD10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrLWlkYCksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RNYXNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLm1hc2ssYT1lLm1hc2tJZCxvPWUudHJhbnNmb3JtLHM9ci53aWR0aCxjPXIuaWNvbixsPWkud2lkdGgsdT1pLmljb24sZD1fcCh7dHJhbnNmb3JtOm8sY29udGFpbmVyV2lkdGg6bCxpY29uV2lkdGg6c30pLGY9e3RhZzpgcmVjdGAsYXR0cmlidXRlczpLKEsoe30sVWgpLHt9LHtmaWxsOmB3aGl0ZWB9KX0scD1jLmNoaWxkcmVuP3tjaGlsZHJlbjpjLmNoaWxkcmVuLm1hcChXaCl9Ont9LG09e3RhZzpgZ2AsYXR0cmlidXRlczpLKHt9LGQuaW5uZXIpLGNoaWxkcmVuOltXaChLKHt0YWc6Yy50YWcsYXR0cmlidXRlczpLKEsoe30sYy5hdHRyaWJ1dGVzKSxkLnBhdGgpfSxwKSldfSxoPXt0YWc6YGdgLGF0dHJpYnV0ZXM6Syh7fSxkLm91dGVyKSxjaGlsZHJlbjpbbV19LGc9YG1hc2stJHthfHx1cCgpfWAsXz1gY2xpcC0ke2F8fHVwKCl9YCx2PXt0YWc6YG1hc2tgLGF0dHJpYnV0ZXM6SyhLKHt9LFVoKSx7fSx7aWQ6ZyxtYXNrVW5pdHM6YHVzZXJTcGFjZU9uVXNlYCxtYXNrQ29udGVudFVuaXRzOmB1c2VyU3BhY2VPblVzZWB9KSxjaGlsZHJlbjpbZixoXX0seT17dGFnOmBkZWZzYCxjaGlsZHJlbjpbe3RhZzpgY2xpcFBhdGhgLGF0dHJpYnV0ZXM6e2lkOl99LGNoaWxkcmVuOkdoKHUpfSx2XX07cmV0dXJuIHQucHVzaCh5LHt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6Syh7ZmlsbDpgY3VycmVudENvbG9yYCwiY2xpcC1wYXRoIjpgdXJsKCMke199KWAsbWFzazpgdXJsKCMke2d9KWB9LFVoKX0pLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6bn19fX0se3Byb3ZpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSExO0p1Lm1hdGNoTWVkaWEmJih0PUp1Lm1hdGNoTWVkaWEoYChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpYCkubWF0Y2hlcyksZS5taXNzaW5nSWNvbkFic3RyYWN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sbj17ZmlsbDpgY3VycmVudENvbG9yYH0scj17YXR0cmlidXRlVHlwZTpgWE1MYCxyZXBlYXRDb3VudDpgaW5kZWZpbml0ZWAsZHVyOmAyc2B9O2UucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7ZDpgTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40emB9KX0pO3ZhciBpPUsoSyh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgb3BhY2l0eWB9KSxhPXt0YWc6YGNpcmNsZWAsYXR0cmlidXRlczpLKEsoe30sbikse30se2N4OmAyNTZgLGN5OmAzNjRgLHI6YDI4YH0pLGNoaWxkcmVuOltdfTtyZXR1cm4gdHx8YS5jaGlsZHJlbi5wdXNoKHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6SyhLKHt9LHIpLHt9LHthdHRyaWJ1dGVOYW1lOmByYCx2YWx1ZXM6YDI4OzE0OzI4OzI4OzE0OzI4O2B9KX0se3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpLKEsoe30saSkse30se3ZhbHVlczpgMTswOzE7MTswOzE7YH0pfSksZS5wdXNoKGEpLGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7b3BhY2l0eTpgMWAsZDpgTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyemB9KSxjaGlsZHJlbjp0P1tdOlt7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOksoSyh7fSxpKSx7fSx7dmFsdWVzOmAxOzA7MDswOzA7MTtgfSl9XX0pLHR8fGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7b3BhY2l0eTpgMGAsZDpgTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41emB9KSxjaGlsZHJlbjpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpLKEsoe30saSkse30se3ZhbHVlczpgMDswOzE7MTswOzA7YH0pfV19KSx7dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgbWlzc2luZ2B9LGNoaWxkcmVuOmV9fX19LHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtc3ltYm9sYCk7cmV0dXJuIGUuc3ltYm9sPW49PT1udWxsPyExOm49PT1gYHx8bixlfX19fV0se21peG91dHNUbzp3bX0pLHdtLm5vQXV0byx3bS5jb25maWcsd20ubGlicmFyeSx3bS5kb207dmFyIEtoPXdtLnBhcnNlO3dtLmZpbmRJY29uRGVmaW5pdGlvbix3bS50b0h0bWw7dmFyIHFoPXdtLmljb247d20ubGF5ZXIsd20udGV4dCx3bS5jb3VudGVyO2Z1bmN0aW9uIEpoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBZaChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBKaChlKX1mdW5jdGlvbiBYaChlLHQsbil7cmV0dXJuKHQ9YWcodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWmgoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIFFoKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uICRoKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZWcoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/JGgoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1hoKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOiRoKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiB0ZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPW5nKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiBuZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gcmcoZSl7cmV0dXJuIFloKGUpfHxaaChlKXx8c2coZSl8fFFoKCl9ZnVuY3Rpb24gaWcoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBhZyhlKXt2YXIgdD1pZyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBvZyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBvZz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sb2coZSl9ZnVuY3Rpb24gc2coZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIEpoKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KaChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gY2coZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WGgoe30sZSx0KTp7fX1mdW5jdGlvbiBsZyhlKXt2YXIgdCxuPSh0PXsiZmEtc3BpbiI6ZS5zcGluLCJmYS1wdWxzZSI6ZS5wdWxzZSwiZmEtZnciOmUuZml4ZWRXaWR0aCwiZmEtYm9yZGVyIjplLmJvcmRlciwiZmEtbGkiOmUubGlzdEl0ZW0sImZhLWludmVyc2UiOmUuaW52ZXJzZSwiZmEtZmxpcCI6ZS5mbGlwPT09ITAsImZhLWZsaXAtaG9yaXpvbnRhbCI6ZS5mbGlwPT09YGhvcml6b250YWxgfHxlLmZsaXA9PT1gYm90aGAsImZhLWZsaXAtdmVydGljYWwiOmUuZmxpcD09PWB2ZXJ0aWNhbGB8fGUuZmxpcD09PWBib3RoYH0sWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgodCxgZmEtJHtlLnNpemV9YCxlLnNpemUhPT1udWxsKSxgZmEtcm90YXRlLSR7ZS5yb3RhdGlvbn1gLGUucm90YXRpb24hPT1udWxsKSxgZmEtcm90YXRlLWJ5YCxlLnJvdGF0ZUJ5KSxgZmEtcHVsbC0ke2UucHVsbH1gLGUucHVsbCE9PW51bGwpLGBmYS1zd2FwLW9wYWNpdHlgLGUuc3dhcE9wYWNpdHkpLGBmYS1ib3VuY2VgLGUuYm91bmNlKSxgZmEtc2hha2VgLGUuc2hha2UpLGBmYS1iZWF0YCxlLmJlYXQpLGBmYS1mYWRlYCxlLmZhZGUpLGBmYS1iZWF0LWZhZGVgLGUuYmVhdEZhZGUpLFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFhoKFhoKFhoKFhoKFhoKHQsYGZhLXNwaW4tc25hcGAsZS5zcGluU25hcCksYGZhLXNwaW4tc25hcC00YCxlLnNwaW5TbmFwNCksYGZhLXNwaW4tc25hcC04YCxlLnNwaW5TbmFwOCksYGZhLXN3aW5nYCxlLnN3aW5nKSxgZmEtd2FnYCxlLndhZykpO3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/ZTpudWxsfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9dmFyIHVnPXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30sZGc9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe2lmKCFsKHQpfHxkKHQpfHxmKHQpfHxwKHQpfHxjKHQpKXJldHVybiB0O3ZhciBpLGE9MCxvPTA7aWYodSh0KSlmb3IoaT1bXSxvPXQubGVuZ3RoO2E8bzthKyspaS5wdXNoKG4oZSx0W2FdLHIpKTtlbHNlIGZvcih2YXIgcyBpbiBpPXt9LHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihpW2UocyxyKV09bihlLHRbc10scikpO3JldHVybiBpfSxyPWZ1bmN0aW9uKGUsdCl7dHx8PXt9O3ZhciBuPXQuc2VwYXJhdG9yfHxgX2Ascj10LnNwbGl0fHwvKD89W0EtWl0pLztyZXR1cm4gZS5zcGxpdChyKS5qb2luKG4pfSxpPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP2U6KGU9ZS5yZXBsYWNlKC9bXC1fXHNdKyguKT8vZyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpgYH0pLGUuc3Vic3RyKDAsMSkudG9Mb3dlckNhc2UoKStlLnN1YnN0cigxKSl9LGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtyZXR1cm4gdC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0KS50b0xvd2VyQ2FzZSgpfSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmB9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1PYmplY3QoZSl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQXJyYXldYH0sZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGUpPT1gW29iamVjdCBEYXRlXWB9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgUmVnRXhwXWB9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQm9vbGVhbl1gfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLT0wLGU9PT1lfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmYHByb2Nlc3NgaW4gdD90LnByb2Nlc3M6dDtyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/ZnVuY3Rpb24odCxyKXtyZXR1cm4gbih0LGUscil9OmV9LGc9e2NhbWVsaXplOmksZGVjYW1lbGl6ZTpvLHBhc2NhbGl6ZTphLGRlcGFzY2FsaXplOm8sY2FtZWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChpLHQpLGUpfSxkZWNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgobyx0KSxlLHQpfSxwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChhLHQpLGUpfSxkZXBhc2NhbGl6ZUtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNhbWVsaXplS2V5cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtlLmV4cG9ydHM/ZS5leHBvcnRzPWc6dC5odW1wcz1nfSkodWcpfSkoZGcpO3ZhciBmZz1kZy5leHBvcnRzLHBnPVtgZ3JhZGllbnRGaWxsYF0sbWc9W2BjbGFzc2AsYHN0eWxlYF0saGc9W2B0eXBlYCxgc3RvcHNgLGBpZGBdO2Z1bmN0aW9uIGdnKGUpe3JldHVybiBlLnNwbGl0KGA7YCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuaW5kZXhPZihgOmApLHI9ZmcuY2FtZWxpemUodC5zbGljZSgwLG4pKTtyZXR1cm4gZVtyXT10LnNsaWNlKG4rMSkudHJpbSgpLGV9LHt9KX1mdW5jdGlvbiBfZyhlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ITAsZX0se30pfWZ1bmN0aW9uIHZnKGUsdCl7cmV0dXJuIHRjKGBzdG9wYCxlZyh7a2V5OmAke3R9LSR7ZS5vZmZzZXR9YCxvZmZzZXQ6ZS5vZmZzZXQsInN0b3AtY29sb3IiOmUuY29sb3J9LGUub3BhY2l0eSE9PXZvaWQgMCYmeyJzdG9wLW9wYWNpdHkiOmUub3BhY2l0eX0pKX1mdW5jdGlvbiB5ZyhlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHQ9KGUuY2hpbGRyZW58fFtdKS5tYXAoeWcpO3JldHVybiBlLnRhZz09PWBwYXRoYCYmZS5hdHRyaWJ1dGVzJiZgZmlsbGBpbiBlLmF0dHJpYnV0ZXM/ZWcoZWcoe30sZSkse30se2F0dHJpYnV0ZXM6ZWcoZWcoe30sZS5hdHRyaWJ1dGVzKSx7fSx7ZmlsbDp2b2lkIDB9KSxjaGlsZHJlbjp0fSk6ZWcoZWcoe30sZSkse30se2NoaWxkcmVuOnR9KX1mdW5jdGlvbiBiZyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e307aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBlO3ZhciByPXQuZ3JhZGllbnRGaWxsLGk9cj09PXZvaWQgMD9udWxsOnIsYT10Zyh0LHBnKSxvPWl8fGBmaWxsYGluIG4/eWcoZSk6ZSxzPShvLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBiZyhlLHt9LHt9KX0pLGM9T2JqZWN0LmtleXMoby5hdHRyaWJ1dGVzfHx7fSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49by5hdHRyaWJ1dGVzW3RdO3N3aXRjaCh0KXtjYXNlYGNsYXNzYDplLmNsYXNzPV9nKG4pO2JyZWFrO2Nhc2Vgc3R5bGVgOmUuc3R5bGU9Z2cobik7YnJlYWs7ZGVmYXVsdDplLmF0dHJzW3RdPW59cmV0dXJuIGV9LHthdHRyczp7fSxjbGFzczp7fSxzdHlsZTp7fX0pO24uY2xhc3M7dmFyIGw9bi5zdHlsZSx1PWw9PT12b2lkIDA/e306bCxkPXRnKG4sbWcpO2lmKGkmJmkuaWQmJihpLnR5cGU9PT1gbGluZWFyYHx8aS50eXBlPT09YHJhZGlhbGApKXt2YXIgZj1pLnR5cGUscD1pLnN0b3BzLG09cD09PXZvaWQgMD9bXTpwLGg9aS5pZCxnPXRnKGksaGcpLF89dGMoZj09PWBsaW5lYXJgP2BsaW5lYXJHcmFkaWVudGA6YHJhZGlhbEdyYWRpZW50YCxlZyhlZyh7fSxnKSx7fSx7aWQ6aH0pLG0ubWFwKHZnKSk7cmV0dXJuIHRjKG8udGFnLGVnKGVnKGVnKGVnKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOmVnKGVnKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSx7fSx7ZmlsbDpgdXJsKCMke2h9KWB9KSxbX10uY29uY2F0KHJnKHMpKSl9cmV0dXJuIHRjKGUudGFnLGVnKGVnKGVnKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOmVnKGVnKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSxzKX12YXIgeGc9ITE7dHJ5e3hnPSEwfWNhdGNoe31mdW5jdGlvbiBTZygpe2lmKCF4ZyYmY29uc29sZSYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PWBmdW5jdGlvbmApe3ZhciBlOyhlPWNvbnNvbGUpLmVycm9yLmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gQ2coZSl7aWYoZSYmb2coZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUmJmUuaWNvbilyZXR1cm4gZTtpZihLaC5pY29uKXJldHVybiBLaC5pY29uKGUpO2lmKGU9PT1udWxsKXJldHVybiBudWxsO2lmKG9nKGUpPT09YG9iamVjdGAmJmUucHJlZml4JiZlLmljb25OYW1lKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MilyZXR1cm57cHJlZml4OmVbMF0saWNvbk5hbWU6ZVsxXX07aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybntwcmVmaXg6YGZhc2AsaWNvbk5hbWU6ZX19dmFyIHdnPUYoe25hbWU6YEZvbnRBd2Vzb21lSWNvbmAscHJvcHM6e2JvcmRlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZpeGVkV2lkdGg6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbGlwOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMSx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuWyEwLCExLGBob3Jpem9udGFsYCxgdmVydGljYWxgLGBib3RoYF0uaW5kZXhPZihlKT4tMX19LGljb246e3R5cGU6W09iamVjdCxBcnJheSxTdHJpbmddLHJlcXVpcmVkOiEwfSxtYXNrOnt0eXBlOltPYmplY3QsQXJyYXksU3RyaW5nXSxkZWZhdWx0Om51bGx9LG1hc2tJZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSxsaXN0SXRlbTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHB1bGw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuW2ByaWdodGAsYGxlZnRgXS5pbmRleE9mKGUpPi0xfX0scHVsc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxyb3RhdGlvbjp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bOTAsMTgwLDI3MF0uaW5kZXhPZihOdW1iZXIucGFyc2VJbnQoZSwxMCkpPi0xfX0scm90YXRlQnk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzd2FwT3BhY2l0eTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYDF4YCxgMnhgLGAzeGAsYDR4YCxgNXhgLGA2eGAsYDd4YCxgOHhgLGA5eGAsYDEweGBdLmluZGV4T2YoZSk+LTF9fSxzcGluOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdHJhbnNmb3JtOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LHN5bWJvbDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHRpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LHRpdGxlSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0saW52ZXJzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJvdW5jZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNoYWtlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYmVhdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZhZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxiZWF0RmFkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsYXNoOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblB1bHNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblJldmVyc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx3aWR0aEF1dG86e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxjYW52YXNTcXVhcmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxjYW52YXNSb29teTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGdyYWRpZW50RmlsbDp7dHlwZTpPYmplY3QsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGUuaWQhPWBzdHJpbmdgfHwhZS5pZD8oY29uc29sZS53YXJuKGBGb250QXdlc29tZUljb246IGdyYWRpZW50RmlsbC5pZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApLCExKTplLnR5cGUhPT1gbGluZWFyYCYmZS50eXBlIT09YHJhZGlhbGA/KGNvbnNvbGUud2FybihgRm9udEF3ZXNvbWVJY29uOiBncmFkaWVudEZpbGwudHlwZSBtdXN0IGJlICJsaW5lYXIiIG9yICJyYWRpYWwiYCksITEpOiEwfX0sZmxpcDM2MDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJ1eno6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbG9hdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGplbGxvOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDg6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzd2luZzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdhZzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxzZXR1cDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuYXR0cnMscj1XKGZ1bmN0aW9uKCl7cmV0dXJuIENnKGUuaWNvbil9KSxpPVcoZnVuY3Rpb24oKXtyZXR1cm4gY2coYGNsYXNzZXNgLGxnKGUpKX0pLGE9VyhmdW5jdGlvbigpe3JldHVybiBjZyhgdHJhbnNmb3JtYCx0eXBlb2YgZS50cmFuc2Zvcm09PWBzdHJpbmdgP0toLnRyYW5zZm9ybShlLnRyYW5zZm9ybSk6ZS50cmFuc2Zvcm0pfSksbz1XKGZ1bmN0aW9uKCl7cmV0dXJuIGNnKGBtYXNrYCxDZyhlLm1hc2spKX0pLHM9VyhmdW5jdGlvbigpe3ZhciB0PWVnKGVnKGVnKGVnKHt9LGkudmFsdWUpLGEudmFsdWUpLG8udmFsdWUpLHt9LHtzeW1ib2w6ZS5zeW1ib2wsbWFza0lkOmUubWFza0lkfSk7cmV0dXJuIHQudGl0bGU9ZS50aXRsZSx0LnRpdGxlSWQ9ZS50aXRsZUlkLHFoKHIudmFsdWUsdCl9KTtFcihzLGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBTZyhgQ291bGQgbm90IGZpbmQgb25lIG9yIG1vcmUgaWNvbihzKWAsci52YWx1ZSxvLnZhbHVlKX0se2ltbWVkaWF0ZTohMH0pLGUuZ3JhZGllbnRGaWxsJiZlLnN5bWJvbCYmU2coYGdyYWRpZW50RmlsbCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gc3ltYm9sIGlzIHRydWUgYW5kIHdpbGwgYmUgaWdub3JlZGApO3ZhciBjPVcoZnVuY3Rpb24oKXtyZXR1cm4gcy52YWx1ZT9iZyhzLnZhbHVlLmFic3RyYWN0WzBdLHtncmFkaWVudEZpbGw6ZS5zeW1ib2w/bnVsbDplLmdyYWRpZW50RmlsbH0sbik6bnVsbH0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjLnZhbHVlfX19KSxUZz10eXBlb2Ygd2luZG93PGB1YCxFZyxEZz1lPT5FZz1lLE9nPVN5bWJvbCgpO2Z1bmN0aW9uIGtnKGUpe3JldHVybiBlJiZ0eXBlb2YgZT09YG9iamVjdGAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gJiZ0eXBlb2YgZS50b0pTT04hPWBmdW5jdGlvbmB9dmFyIEFnPXR5cGVvZiB3aW5kb3c9PWBvYmplY3RgJiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzp0eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjp0eXBlb2YgZ2xvYmFsPT1gb2JqZWN0YCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dHlwZW9mIGdsb2JhbFRoaXM9PWBvYmplY3RgP2dsb2JhbFRoaXM6e0hUTUxFbGVtZW50Om51bGx9O2Z1bmN0aW9uIGpnKGUse2F1dG9Cb206dD0hMX09e30pe3JldHVybiB0JiYvXlxzKig/OnRleHRcL1xTKnxhcHBsaWNhdGlvblwveG1sfFxTKlwvXFMqXCt4bWwpXHMqOy4qY2hhcnNldFxzKj1ccyp1dGYtOC9pLnRlc3QoZS50eXBlKT9uZXcgQmxvYihbYO+7v2AsZV0se3R5cGU6ZS50eXBlfSk6ZX1mdW5jdGlvbiBNZyhlLHQsbil7bGV0IHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3Iub3BlbihgR0VUYCxlKSxyLnJlc3BvbnNlVHlwZT1gYmxvYmAsci5vbmxvYWQ9ZnVuY3Rpb24oKXtMZyhyLnJlc3BvbnNlLHQsbil9LHIub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoYGNvdWxkIG5vdCBkb3dubG9hZCBmaWxlYCl9LHIuc2VuZCgpfWZ1bmN0aW9uIE5nKGUpe2xldCB0PW5ldyBYTUxIdHRwUmVxdWVzdDt0Lm9wZW4oYEhFQURgLGUsITEpO3RyeXt0LnNlbmQoKX1jYXRjaHt9cmV0dXJuIHQuc3RhdHVzPj0yMDAmJnQuc3RhdHVzPD0yOTl9ZnVuY3Rpb24gUGcoZSl7dHJ5e2UuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChgY2xpY2tgKSl9Y2F0Y2h7bGV0IHQ9bmV3IE1vdXNlRXZlbnQoYGNsaWNrYCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLHZpZXc6d2luZG93LGRldGFpbDowLHNjcmVlblg6ODAsc2NyZWVuWToyMCxjbGllbnRYOjgwLGNsaWVudFk6MjAsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0Om51bGx9KTtlLmRpc3BhdGNoRXZlbnQodCl9fXZhciBGZz10eXBlb2YgbmF2aWdhdG9yPT1gb2JqZWN0YD9uYXZpZ2F0b3I6e3VzZXJBZ2VudDpgYH0sSWc9L01hY2ludG9zaC8udGVzdChGZy51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QoRmcudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3QoRmcudXNlckFnZW50KSxMZz1UZz90eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQ8YHVgJiZgZG93bmxvYWRgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhSWc/Umc6YG1zU2F2ZU9yT3BlbkJsb2JgaW4gRmc/emc6Qmc6KCk9Pnt9O2Z1bmN0aW9uIFJnKGUsdD1gZG93bmxvYWRgLG4pe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyLmRvd25sb2FkPXQsci5yZWw9YG5vb3BlbmVyYCx0eXBlb2YgZT09YHN0cmluZ2A/KHIuaHJlZj1lLHIub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP1BnKHIpOk5nKHIuaHJlZik/TWcoZSx0LG4pOihyLnRhcmdldD1gX2JsYW5rYCxQZyhyKSkpOihyLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChyLmhyZWYpfSw0ZTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtQZyhyKX0sMCkpfWZ1bmN0aW9uIHpnKGUsdD1gZG93bmxvYWRgLG4pe2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoTmcoZSkpTWcoZSx0LG4pO2Vsc2V7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3QuaHJlZj1lLHQudGFyZ2V0PWBfYmxhbmtgLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtQZyh0KX0pfX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGpnKGUsbiksdCl9ZnVuY3Rpb24gQmcoZSx0LG4scil7aWYocnx8PW9wZW4oYGAsYF9ibGFua2ApLHImJihyLmRvY3VtZW50LnRpdGxlPXIuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9YGRvd25sb2FkaW5nLi4uYCksdHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBNZyhlLHQsbik7bGV0IGk9ZS50eXBlPT09YGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAsYT0vY29uc3RydWN0b3IvaS50ZXN0KFN0cmluZyhBZy5IVE1MRWxlbWVudCkpfHxgc2FmYXJpYGluIEFnLG89L0NyaU9TXC9bXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigob3x8aSYmYXx8SWcpJiZ0eXBlb2YgRmlsZVJlYWRlcjxgdWApe2xldCB0PW5ldyBGaWxlUmVhZGVyO3Qub25sb2FkZW5kPWZ1bmN0aW9uKCl7bGV0IGU9dC5yZXN1bHQ7aWYodHlwZW9mIGUhPWBzdHJpbmdgKXRocm93IHI9bnVsbCxFcnJvcihgV3JvbmcgcmVhZGVyLnJlc3VsdCB0eXBlYCk7ZT1vP2U6ZS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLGBkYXRhOmF0dGFjaG1lbnQvZmlsZTtgKSxyP3IubG9jYXRpb24uaHJlZj1lOmxvY2F0aW9uLmFzc2lnbihlKSxyPW51bGx9LHQucmVhZEFzRGF0YVVSTChlKX1lbHNle2xldCB0PVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cj9yLmxvY2F0aW9uLmFzc2lnbih0KTpsb2NhdGlvbi5ocmVmPXQscj1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHQpfSw0ZTQpfX12YXJ7YXNzaWduOlZnfT1PYmplY3Q7ZnVuY3Rpb24gSGcoKXtsZXQgZT1QZSghMCksdD1lLnJ1bigoKT0+TSh7fSkpLG49W10scj1bXSxpPXNuKHtpbnN0YWxsKGUpe0RnKGkpLGkuX2E9ZSxlLnByb3ZpZGUoT2csaSksZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcGluaWE9aSxyLmZvckVhY2goZT0+bi5wdXNoKGUpKSxyPVtdfSx1c2UoZSl7cmV0dXJuIHRoaXMuX2E/bi5wdXNoKGUpOnIucHVzaChlKSx0aGlzfSxfcDpuLF9hOm51bGwsX2U6ZSxfczpuZXcgTWFwLHN0YXRlOnR9KTtyZXR1cm4gaX12YXIgVWc9KCk9Pnt9O2Z1bmN0aW9uIFdnKGUsdCxuLHI9VWcpe2UuYWRkKHQpO2xldCBpPSgpPT57ZS5kZWxldGUodCkmJnIoKX07cmV0dXJuIW4mJkZlKCkmJkllKGkpLGl9ZnVuY3Rpb24gR2coZSwuLi50KXtlLmZvckVhY2goZT0+e2UoLi4udCl9KX12YXIgS2c9ZT0+ZSgpLHFnPVN5bWJvbCgpLEpnPVN5bWJvbCgpO2Z1bmN0aW9uIFlnKGUsdCl7ZSBpbnN0YW5jZW9mIE1hcCYmdCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goKHQsbik9PmUuc2V0KG4sdCkpOmUgaW5zdGFuY2VvZiBTZXQmJnQgaW5zdGFuY2VvZiBTZXQmJnQuZm9yRWFjaChlLmFkZCxlKTtmb3IobGV0IG4gaW4gdCl7aWYoIU9iamVjdC5oYXNPd24odCxuKSljb250aW51ZTtsZXQgcj10W25dLGk9ZVtuXTtlW25dPWtnKGkpJiZrZyhyKSYmT2JqZWN0Lmhhc093bihlLG4pJiYhaihyKSYmIW5uKHIpP1lnKGkscik6cn1yZXR1cm4gZX12YXIgWGc9U3ltYm9sKCk7ZnVuY3Rpb24gWmcoZSl7cmV0dXJuIWV8fHR5cGVvZiBlIT1gb2JqZWN0YHx8IU9iamVjdC5oYXNPd24oZSxYZyl9dmFye2Fzc2lnbjpRZ309T2JqZWN0O2Z1bmN0aW9uICRnKGUpe3JldHVybiEhKGooZSkmJmUuZWZmZWN0KX1mdW5jdGlvbiBlXyhlLHQsbixyKXtsZXR7c3RhdGU6aSxhY3Rpb25zOmEsZ2V0dGVyczpvfT10LHM9bi5zdGF0ZS52YWx1ZVtlXSxjO2Z1bmN0aW9uIGwoKXtyZXR1cm4gc3x8KG4uc3RhdGUudmFsdWVbZV09aT9pKCk6e30pLFFnKHluKG4uc3RhdGUudmFsdWVbZV0pLGEsT2JqZWN0LmtleXMob3x8e30pLnJlZHVjZSgodCxyKT0+KHRbcl09c24oVygoKT0+e0RnKG4pO2xldCB0PW4uX3MuZ2V0KGUpO3JldHVybiBvW3JdLmNhbGwodCx0KX0pKSx0KSx7fSkpfXJldHVybiBjPXRfKGUsbCx0LG4sciwhMCksY31mdW5jdGlvbiB0XyhlLHQsbj17fSxyLGksYSl7bGV0IG8scz1RZyh7YWN0aW9uczp7fX0sbiksYz17ZGVlcDohMH0sbCx1LGQ9bmV3IFNldCxmPW5ldyBTZXQscCxtPXIuc3RhdGUudmFsdWVbZV07IWEmJiFtJiYoci5zdGF0ZS52YWx1ZVtlXT17fSk7bGV0IGg7ZnVuY3Rpb24gZyh0KXtsZXQgbjtsPXU9ITEsdHlwZW9mIHQ9PWBmdW5jdGlvbmA/KHQoci5zdGF0ZS52YWx1ZVtlXSksbj17dHlwZTpgcGF0Y2ggZnVuY3Rpb25gLHN0b3JlSWQ6ZSxldmVudHM6cH0pOihZZyhyLnN0YXRlLnZhbHVlW2VdLHQpLG49e3R5cGU6YHBhdGNoIG9iamVjdGAscGF5bG9hZDp0LHN0b3JlSWQ6ZSxldmVudHM6cH0pO2xldCBpPWg9U3ltYm9sKCk7UW4oKS50aGVuKCgpPT57aD09PWkmJihsPSEwKX0pLHU9ITAsR2coZCxuLHIuc3RhdGUudmFsdWVbZV0pfWxldCBfPWE/ZnVuY3Rpb24oKXtsZXR7c3RhdGU6ZX09bix0PWU/ZSgpOnt9O3RoaXMuJHBhdGNoKGU9PntRZyhlLHQpfSl9OlVnO2Z1bmN0aW9uIHYoKXtvLnN0b3AoKSxkLmNsZWFyKCksZi5jbGVhcigpLHIuX3MuZGVsZXRlKGUpfWxldCB5PSh0LG49YGApPT57aWYocWcgaW4gdClyZXR1cm4gdFtKZ109bix0O2xldCBpPWZ1bmN0aW9uKCl7RGcocik7bGV0IG49QXJyYXkuZnJvbShhcmd1bWVudHMpLGE9bmV3IFNldCxvPW5ldyBTZXQ7ZnVuY3Rpb24gcyhlKXthLmFkZChlKX1mdW5jdGlvbiBjKGUpe28uYWRkKGUpfUdnKGYse2FyZ3M6bixuYW1lOmlbSmddLHN0b3JlOmIsYWZ0ZXI6cyxvbkVycm9yOmN9KTtsZXQgbDt0cnl7bD10LmFwcGx5KHRoaXMmJnRoaXMuJGlkPT09ZT90aGlzOmIsbil9Y2F0Y2goZSl7dGhyb3cgR2cobyxlKSxlfXJldHVybiBsIGluc3RhbmNlb2YgUHJvbWlzZT9sLnRoZW4oZT0+KEdnKGEsZSksZSkpLmNhdGNoKGU9PihHZyhvLGUpLFByb21pc2UucmVqZWN0KGUpKSk6KEdnKGEsbCksbCl9O3JldHVybiBpW3FnXT0hMCxpW0pnXT1uLGl9LGI9WnQoe19wOnIsJGlkOmUsJG9uQWN0aW9uOldnLmJpbmQobnVsbCxmKSwkcGF0Y2g6ZywkcmVzZXQ6Xywkc3Vic2NyaWJlKHQsbj17fSl7aWYoZC5oYXModCkpcmV0dXJuIFVnO2xldCBpPVdnKGQsdCxuLmRldGFjaGVkLCgpPT5hKCkpLGE9by5ydW4oKCk9PkVyKCgpPT5yLnN0YXRlLnZhbHVlW2VdLHI9Pnsobi5mbHVzaD09PWBzeW5jYD91OmwpJiZ0KHtzdG9yZUlkOmUsdHlwZTpgZGlyZWN0YCxldmVudHM6cH0scil9LFFnKHt9LGMsbikpKTtyZXR1cm4gaX0sJGRpc3Bvc2U6dn0pO3IuX3Muc2V0KGUsYik7bGV0IHg9KHIuX2EmJnIuX2EucnVuV2l0aENvbnRleHR8fEtnKSgoKT0+ci5fZS5ydW4oKCk9PihvPVBlKCkpLnJ1bigoKT0+dCh7YWN0aW9uOnl9KSkpKTtmb3IobGV0IHQgaW4geCl7bGV0IG49eFt0XTtqKG4pJiYhJGcobil8fG5uKG4pP2F8fChtJiZaZyhuKSYmKGoobik/bi52YWx1ZT1tW3RdOigobiBpbnN0YW5jZW9mIFNldHx8biBpbnN0YW5jZW9mIE1hcCkmJm4uY2xlYXIoKSxZZyhuLG1bdF0pKSksci5zdGF0ZS52YWx1ZVtlXVt0XT1uKTp0eXBlb2Ygbj09YGZ1bmN0aW9uYCYmKHhbdF09eShuLHQpLHMuYWN0aW9uc1t0XT1uKX1yZXR1cm4gUWcoYix4KSxRZyhBKGIpLHgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCIkc3RhdGUiLHtnZXQ6KCk9PnIuc3RhdGUudmFsdWVbZV0sc2V0OmU9PntnKHQ9PntRZyh0LGUpfSl9fSksci5fcC5mb3JFYWNoKGU9PntsZXQgdD1vLnJ1bigoKT0+ZSh7c3RvcmU6YixhcHA6ci5fYSxwaW5pYTpyLG9wdGlvbnM6c30pKTtRZyhiLHQpfSksbSYmYSYmbi5oeWRyYXRlJiZuLmh5ZHJhdGUoYi4kc3RhdGUsbSksbD0hMCx1PSEwLGJ9ZnVuY3Rpb24gbl8oZSx0LG4pe2xldCByLGk9dHlwZW9mIHQ9PWBmdW5jdGlvbmA7cj1pP246dDtmdW5jdGlvbiBhKG4sYSl7bGV0IG89YnIoKTtyZXR1cm4gbnx8PW8/eXIoT2csbnVsbCk6bnVsbCxuJiZEZyhuKSxuPUVnLG4uX3MuaGFzKGUpfHwoaT90XyhlLHQscixuKTplXyhlLHIsbikpLG4uX3MuZ2V0KGUpfXJldHVybiBhLiRpZD1lLGF9dmFyIHJfPXtwcmVmaXg6YGZhYmAsaWNvbk5hbWU6YGdpdGh1YmAsaWNvbjpbNTEyLDUxMixbXSxgZjA5YmAsYE0yMTYuNSAzNjIuNWMtNjYtOC0xMTIuNS01NS41LTExMi41LTExNyAwLTI1IDktNTIgMjQtNzAtNi41LTE2LjUtNS41LTUxLjUgMi02NiAyMC0yLjUgNDcgOCA2MyAyMi41IDE5LTYgMzktOSA2My41LTlzNDQuNSAzIDYyLjUgOC41YzE1LjUtMTQgNDMtMjQuNSA2My0yMiA3IDEzLjUgOCA0OC41IDEuNSA2NS41IDE2IDE5IDI0LjUgNDQuNSAyNC41IDcwLjUgMCA2MS41LTQ2LjUgMTA4LTExMy41IDExNi41IDE3IDExIDI4LjUgMzUgMjguNSA2Mi41bDAgNTJDMzIzIDQ5MS41IDMzNS41IDUwMCAzNTAuNSA0OTQgNDQxIDQ1OS41IDUxMiAzNjkgNTEyIDI1NyA1MTIgMTE1LjUgMzk3IDAgMjU1LjUgMFMwIDExNS41IDAgMjU3YzAgMTExIDcwLjUgMjAzIDE2NS41IDIzNy41IDEzLjUgNSAyNi41LTQgMjYuNS0xNy41bDAtNDBjLTcgMy0xNiA1LTI0IDUtMzMgMC01Mi41LTE4LTY2LjUtNTEuNS01LjUtMTMuNS0xMS41LTIxLjUtMjMtMjMtNi0uNS04LTMtOC02IDAtNiAxMC0xMC41IDIwLTEwLjUgMTQuNSAwIDI3IDkgNDAgMjcuNSAxMCAxNC41IDIwLjUgMjEgMzMgMjFzMjAuNS00LjUgMzItMTZjOC41LTguNSAxNS0xNiAyMS0yMXpgXX0saV89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgbWFnbmlmeWluZy1nbGFzc2AsaWNvbjpbNTEyLDUxMixbMTI4MjY5LGBzZWFyY2hgXSxgZjAwMmAsYE00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4emBdfSxhXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBrZXlgLGljb246WzUxMiw1MTIsWzEyODI3M10sYGYwODRgLGBNMzM2IDM1MmM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlM0MzMuMiAwIDMzNiAwIDE2MCA3OC44IDE2MCAxNzZjMCAxOC43IDIuOSAzNi44IDguMyA1My43TDcgMzkxYy00LjUgNC41LTcgMTAuNi03IDE3bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzYuNCAwIDEyLjUtMi41IDE3LTdsMzMuMy0zMy4zYzE2LjkgNS40IDM1IDguMyA1My43IDguM3pNMzc2IDk2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHpgXX0sb189e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC11cGAsaWNvbjpbMzg0LDUxMixbYHNvcnQtYXNjYF0sYGYwZGVgLGBNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0emBdfSxzXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBleWVgLGljb246WzU3Niw1MTIsWzEyODA2NV0sYGYwNmVgLGBNMjg4IDMyYy04MC44IDAtMTQ1LjUgMzYuOC0xOTIuNiA4MC42LTQ2LjggNDMuNS03OC4xIDk1LjQtOTMgMTMxLjEtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42czE0NS41LTM2LjggMTkyLjYtODAuNmM0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNnpNMTQ0IDI1NmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDQtNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjQtMTEuNSAwLTIyLjMtMy0zMS43LTguNC0xIDEwLjktLjEgMjIuMSAyLjkgMzMuMiAxMy43IDUxLjIgNjYuNCA4MS42IDExNy42IDY3LjlzODEuNi02Ni40IDY3LjktMTE3LjZjLTEyLjItNDUuNy01NS41LTc0LjgtMTAxLjEtNzAuOCA1LjMgOS4zIDguNCAyMC4xIDguNCAzMS43emBdfSxjXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGV2cm9uLXVwYCxpY29uOls0NDgsNTEyLFtdLGBmMDc3YCxgTTIwMS40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjI0IDE3My4zIDU0LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE5Mi0xOTJ6YF19LGxfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNpcmNsZS14bWFya2AsaWNvbjpbNTEyLDUxMixbNjE1MzIsYHRpbWVzLWNpcmNsZWAsYHhtYXJrLWNpcmNsZWBdLGBmMDU3YCxgTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45emBdfSx1Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtZXhjbGFtYXRpb25gLGljb246WzUxMiw1MTIsW2BleGNsYW1hdGlvbi1jaXJjbGVgXSxgZjA2YWAsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC0xOTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi42IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxkXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGVja2AsaWNvbjpbNDQ4LDUxMixbMTAwMDMsMTAwMDRdLGBmMDBjYCxgTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6YF19LGZfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNvcnRgLGljb246WzM4NCw1MTIsW2B1bnNvcnRlZGBdLGBmMGRjYCxgTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6YF19LHBfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHhtYXJrYCxpY29uOlszODQsNTEyLFsxMjg0NzMsMTAwMDUsMTAwMDYsMTAwNjAsMjE1LGBjbG9zZWAsYG11bHRpcGx5YCxgcmVtb3ZlYCxgdGltZXNgXSxgZjAwZGAsYE01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40emBdfSxtXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtY2hlY2tgLGljb246WzUxMiw1MTIsWzYxNTMzLGBjaGVjay1jaXJjbGVgXSxgZjA1OGAsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXpgXX0saF89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1kb3duYCxpY29uOls0NDgsNTEyLFtdLGBmMDc4YCxgTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6YF19LGdfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHRyaWFuZ2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFs5ODg4LGBleGNsYW1hdGlvbi10cmlhbmdsZWAsYHdhcm5pbmdgXSxgZjA3MWAsYE0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxfXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjb3B5YCxpY29uOls0NDgsNTEyLFtdLGBmMGM1YCxgTTE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIwMC42YzAtMTcuNC03LjEtMzQuMS0xOS43LTQ2LjJMMzcwLjYgMTcuOEMzNTguNyA2LjQgMzQyLjggMCAzMjYuMyAwTDE5MiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNjQgMCAwIDE2LTE5MiAwIDAtMjU2IDE2IDAgMC02NC0xNiAwemBdfSx2Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBleWUtc2xhc2hgLGljb246WzU3Niw1MTIsW10sYGYwNzBgLGBNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0yMDQuNSAxMzguN2MyMy41LTE2LjggNTIuNC0yNi43IDgzLjUtMjYuNyA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDMxLjEtOS45IDU5LjktMjYuNyA4My41bC0zNC43LTM0LjdjMTIuNy0yMS40IDE3LTQ3LjcgMTAuMS03My43LTEzLjctNTEuMi02Ni40LTgxLjYtMTE3LjYtNjcuOS04LjYgMi4zLTE2LjcgNS43LTI0IDEwbC0zNC43LTM0Ljd6TTMyNS4zIDM5NS4xYy0xMS45IDMuMi0yNC40IDQuOS0zNy4zIDQuOS03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTEyLjkgMS43LTI1LjQgNC45LTM3LjNMNjkuNCAxMzkuMmMtMzIuNiAzNi44LTU1IDc1LjgtNjYuOSAxMDQuNS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjYgMzcuMyAwIDcxLjItNy45IDEwMS41LTIwLjZsLTY0LjItNjQuMnpgXX0seV89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC1kb3duYCxpY29uOlszODQsNTEyLFtgc29ydC1kZXNjYF0sYGYwZGRgLGBNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4emBdfTtmdW5jdGlvbiBiXyhlKXt2YXIgdCxuLHI9YGA7aWYodHlwZW9mIGU9PWBzdHJpbmdgfHx0eXBlb2YgZT09YG51bWJlcmApcis9ZTtlbHNlIGlmKHR5cGVvZiBlPT1gb2JqZWN0YCl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKWVbdF0mJihuPWJfKGVbdF0pKSYmKHImJihyKz1gIGApLHIrPW4pfWVsc2UgZm9yKG4gaW4gZSllW25dJiYociYmKHIrPWAgYCkscis9bil9cmV0dXJuIHJ9ZnVuY3Rpb24geF8oKXtmb3IodmFyIGUsdCxuPTAscj1gYCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKykoZT1hcmd1bWVudHNbbl0pJiYodD1iXyhlKSkmJihyJiYocis9YCBgKSxyKz10KTtyZXR1cm4gcn12YXIgU189ZT0+dHlwZW9mIGU9PWBib29sZWFuYD9gJHtlfWA6ZT09PTA/YDBgOmUsQ189eF8sd189KGUsdCk9Pm49PntpZih0Py52YXJpYW50cz09bnVsbClyZXR1cm4gQ18oZSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpO2xldHt2YXJpYW50czpyLGRlZmF1bHRWYXJpYW50czppfT10LGE9T2JqZWN0LmtleXMocikubWFwKGU9PntsZXQgdD1uPy5bZV0sYT1pPy5bZV07aWYodD09PW51bGwpcmV0dXJuIG51bGw7bGV0IG89U18odCl8fFNfKGEpO3JldHVybiByW2VdW29dfSksbz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiByPT09dm9pZCAwfHwoZVtuXT1yKSxlfSx7fSk7cmV0dXJuIENfKGUsYSx0Py5jb21wb3VuZFZhcmlhbnRzPy5yZWR1Y2UoKGUsdCk9PntsZXR7Y2xhc3M6bixjbGFzc05hbWU6ciwuLi5hfT10O3JldHVybiBPYmplY3QuZW50cmllcyhhKS5ldmVyeShlPT57bGV0W3Qsbl09ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHsuLi5pLC4uLm99W3RdKTp7Li4uaSwuLi5vfVt0XT09PW59KT9bLi4uZSxuLHJdOmV9LFtdKSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpfSxUXz0oZSx0KT0+e2xldCBuPUFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbltlLmxlbmd0aCtyXT10W3JdO3JldHVybiBufSxFXz0oZSx0KT0+KHtjbGFzc0dyb3VwSWQ6ZSx2YWxpZGF0b3I6dH0pLERfPShlPW5ldyBNYXAsdD1udWxsLG4pPT4oe25leHRQYXJ0OmUsdmFsaWRhdG9yczp0LGNsYXNzR3JvdXBJZDpufSksT189YC1gLGtfPVtdLEFfPWBhcmJpdHJhcnkuLmAsal89ZT0+e2xldCB0PVBfKGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnJ9PWU7cmV0dXJue2dldENsYXNzR3JvdXBJZDplPT57aWYoZS5zdGFydHNXaXRoKGBbYCkmJmUuZW5kc1dpdGgoYF1gKSlyZXR1cm4gTl8oZSk7bGV0IG49ZS5zcGxpdChPXyk7cmV0dXJuIE1fKG4sKyhuWzBdPT09YGAmJm4ubGVuZ3RoPjEpLHQpfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGUsdCk9PntpZih0KXtsZXQgdD1yW2VdLGk9bltlXTtyZXR1cm4gdD9pP1RfKGksdCk6dDppfHxrX31yZXR1cm4gbltlXXx8a199fX0sTV89KGUsdCxuKT0+e2lmKGUubGVuZ3RoLXQ9PT0wKXJldHVybiBuLmNsYXNzR3JvdXBJZDtsZXQgcj1lW3RdLGk9bi5uZXh0UGFydC5nZXQocik7aWYoaSl7bGV0IG49TV8oZSx0KzEsaSk7aWYobilyZXR1cm4gbn1sZXQgYT1uLnZhbGlkYXRvcnM7aWYoYT09PW51bGwpcmV0dXJuO2xldCBvPXQ9PT0wP2Uuam9pbihPXyk6ZS5zbGljZSh0KS5qb2luKE9fKSxzPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cztlKyspe2xldCB0PWFbZV07aWYodC52YWxpZGF0b3IobykpcmV0dXJuIHQuY2xhc3NHcm91cElkfX0sTl89ZT0+ZS5zbGljZSgxLC0xKS5pbmRleE9mKGA6YCk9PT0tMT92b2lkIDA6KCgpPT57bGV0IHQ9ZS5zbGljZSgxLC0xKSxuPXQuaW5kZXhPZihgOmApLHI9dC5zbGljZSgwLG4pO3JldHVybiByP0FfK3I6dm9pZCAwfSkoKSxQXz1lPT57bGV0e3RoZW1lOnQsY2xhc3NHcm91cHM6bn09ZTtyZXR1cm4gRl8obix0KX0sRl89KGUsdCk9PntsZXQgbj1EXygpO2ZvcihsZXQgciBpbiBlKXtsZXQgaT1lW3JdO0lfKGksbixyLHQpfXJldHVybiBufSxJXz0oZSx0LG4scik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgaT1lW2FdO0xfKGksdCxuLHIpfX0sTF89KGUsdCxuLHIpPT57aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtSXyhlLHQsbik7cmV0dXJufWlmKHR5cGVvZiBlPT1gZnVuY3Rpb25gKXt6XyhlLHQsbixyKTtyZXR1cm59Ql8oZSx0LG4scil9LFJfPShlLHQsbik9PntsZXQgcj1lPT09YGA/dDpWXyh0LGUpO3IuY2xhc3NHcm91cElkPW59LHpfPShlLHQsbixyKT0+e2lmKEhfKGUpKXtJXyhlKHIpLHQsbixyKTtyZXR1cm59dC52YWxpZGF0b3JzPT09bnVsbCYmKHQudmFsaWRhdG9ycz1bXSksdC52YWxpZGF0b3JzLnB1c2goRV8obixlKSl9LEJfPShlLHQsbixyKT0+e2xldCBpPU9iamVjdC5lbnRyaWVzKGUpLGE9aS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7bGV0W2Esb109aVtlXTtJXyhvLFZfKHQsYSksbixyKX19LFZfPShlLHQpPT57bGV0IG49ZSxyPXQuc3BsaXQoT18pLGk9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bGV0IHQ9cltlXSxpPW4ubmV4dFBhcnQuZ2V0KHQpO2l8fChpPURfKCksbi5uZXh0UGFydC5zZXQodCxpKSksbj1pfXJldHVybiBufSxIXz1lPT5gaXNUaGVtZUdldHRlcmBpbiBlJiZlLmlzVGhlbWVHZXR0ZXI9PT0hMCxVXz1lPT57aWYoZTwxKXJldHVybntnZXQ6KCk9PnZvaWQgMCxzZXQ6KCk9Pnt9fTtsZXQgdD0wLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksaT0oaSxhKT0+e25baV09YSx0KyssdD5lJiYodD0wLHI9bixuPU9iamVjdC5jcmVhdGUobnVsbCkpfTtyZXR1cm57Z2V0KGUpe2xldCB0PW5bZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdDtpZigodD1yW2VdKSE9PXZvaWQgMClyZXR1cm4gaShlLHQpLHR9LHNldChlLHQpe2UgaW4gbj9uW2VdPXQ6aShlLHQpfX19LFdfPWAhYCxHXz1gOmAsS189W10scV89KGUsdCxuLHIsaSk9Pih7bW9kaWZpZXJzOmUsaGFzSW1wb3J0YW50TW9kaWZpZXI6dCxiYXNlQ2xhc3NOYW1lOm4sbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpyLGlzRXh0ZXJuYWw6aX0pLEpfPWU9PntsZXR7cHJlZml4OnQsZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6bn09ZSxyPWU9PntsZXQgdD1bXSxuPTAscj0wLGk9MCxhLG89ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IG89ZVtzXTtpZihuPT09MCYmcj09PTApe2lmKG89PT1HXyl7dC5wdXNoKGUuc2xpY2UoaSxzKSksaT1zKzE7Y29udGludWV9aWYobz09PWAvYCl7YT1zO2NvbnRpbnVlfX1vPT09YFtgP24rKzpvPT09YF1gP24tLTpvPT09YChgP3IrKzpvPT09YClgJiZyLS19bGV0IHM9dC5sZW5ndGg9PT0wP2U6ZS5zbGljZShpKSxjPXMsbD0hMTtzLmVuZHNXaXRoKFdfKT8oYz1zLnNsaWNlKDAsLTEpLGw9ITApOnMuc3RhcnRzV2l0aChXXykmJihjPXMuc2xpY2UoMSksbD0hMCk7bGV0IHU9YSYmYT5pP2EtaTp2b2lkIDA7cmV0dXJuIHFfKHQsbCxjLHUpfTtpZih0KXtsZXQgZT10K0dfLG49cjtyPXQ9PnQuc3RhcnRzV2l0aChlKT9uKHQuc2xpY2UoZS5sZW5ndGgpKTpxXyhLXywhMSx0LHZvaWQgMCwhMCl9aWYobil7bGV0IGU9cjtyPXQ9Pm4oe2NsYXNzTmFtZTp0LHBhcnNlQ2xhc3NOYW1lOmV9KX1yZXR1cm4gcn0sWV89ZT0+e2xldCB0PW5ldyBNYXA7cmV0dXJuIGUub3JkZXJTZW5zaXRpdmVNb2RpZmllcnMuZm9yRWFjaCgoZSxuKT0+e3Quc2V0KGUsMWU2K24pfSksZT0+e2xldCBuPVtdLHI9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV0sbz1hWzBdPT09YFtgLHM9dC5oYXMoYSk7b3x8cz8oci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSxyPVtdKSxuLnB1c2goYSkpOnIucHVzaChhKX1yZXR1cm4gci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSksbn19LFhfPWU9Pih7Y2FjaGU6VV8oZS5jYWNoZVNpemUpLHBhcnNlQ2xhc3NOYW1lOkpfKGUpLHNvcnRNb2RpZmllcnM6WV8oZSkscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6Wl8oZSksLi4ual8oZSl9KSxaXz1lPT57bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKG4pZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdFtuW2VdXT0hMDtyZXR1cm4gdH0sUV89L1xzKy8sJF89KGUsdCk9PntsZXR7cGFyc2VDbGFzc05hbWU6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aSxzb3J0TW9kaWZpZXJzOmEscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6b309dCxzPVtdLGM9ZS50cmltKCkuc3BsaXQoUV8pLGw9YGA7Zm9yKGxldCBlPWMubGVuZ3RoLTE7ZT49MDstLWUpe2xldCB0PWNbZV0se2lzRXh0ZXJuYWw6dSxtb2RpZmllcnM6ZCxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6cCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOm19PW4odCk7aWYodSl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWxldCBoPSEhbSxnO2lmKGgpe2c9cihwLnN1YnN0cmluZygwLG0pKTtsZXQgZT1nJiZvW2ddP3IocCk6dm9pZCAwO2UmJmUhPT1nJiYoZz1lLGg9ITEpfWVsc2UgZz1yKHApO2lmKCFnKXtpZighaCl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWlmKGc9cihwKSwhZyl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWg9ITF9bGV0IF89ZC5sZW5ndGg9PT0wP2BgOmQubGVuZ3RoPT09MT9kWzBdOmEoZCkuam9pbihgOmApLHY9Zj9fK1dfOl8seT12K2c7aWYocy5pbmRleE9mKHkpPi0xKWNvbnRpbnVlO3MucHVzaCh5KTtsZXQgYj1pKGcsaCk7Zm9yKGxldCBlPTA7ZTxiLmxlbmd0aDsrK2Upe2xldCB0PWJbZV07cy5wdXNoKHYrdCl9bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpfXJldHVybiBsfSxldj0oLi4uZSk9PntsZXQgdD0wLG4scixpPWBgO2Zvcig7dDxlLmxlbmd0aDspKG49ZVt0KytdKSYmKHI9dHYobikpJiYoaSYmKGkrPWAgYCksaSs9cik7cmV0dXJuIGl9LHR2PWU9PntpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7bGV0IHQsbj1gYDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYodD10dihlW3JdKSkmJihuJiYobis9YCBgKSxuKz10KTtyZXR1cm4gbn0sbnY9KGUsLi4udCk9PntsZXQgbixyLGksYSxvPW89PihuPVhfKHQucmVkdWNlKChlLHQpPT50KGUpLGUoKSkpLHI9bi5jYWNoZS5nZXQsaT1uLmNhY2hlLnNldCxhPXMscyhvKSkscz1lPT57bGV0IHQ9cihlKTtpZih0KXJldHVybiB0O2xldCBhPSRfKGUsbik7cmV0dXJuIGkoZSxhKSxhfTtyZXR1cm4gYT1vLCguLi5lKT0+YShldiguLi5lKSl9LHJ2PVtdLGl2PWU9PntsZXQgdD10PT50W2VdfHxydjtyZXR1cm4gdC5pc1RoZW1lR2V0dGVyPSEwLHR9LGF2PS9eXFsoPzooXHdbXHctXSopOik/KC4rKVxdJC9pLG92PS9eXCgoPzooXHdbXHctXSopOik/KC4rKVwpJC9pLHN2PS9eXGQrKD86XC5cZCspP1wvXGQrKD86XC5cZCspPyQvLGN2PS9eKFxkKyhcLlxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC8sbHY9L1xkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XGIoY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKXxeMCQvLHV2PS9eKHJnYmE/fGhzbGE/fGh3Ynwob2spPyhsYWJ8bGNoKXxjb2xvci1taXgpXCguK1wpJC8sZHY9L14oaW5zZXRfKT8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKV8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKS8sZnY9L14odXJsfGltYWdlfGltYWdlLXNldHxjcm9zcy1mYWRlfGVsZW1lbnR8KHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsfGNvbmljKS1ncmFkaWVudClcKC4rXCkkLyxwdj1lPT5zdi50ZXN0KGUpLEo9ZT0+ISFlJiYhTnVtYmVyLmlzTmFOKE51bWJlcihlKSksbXY9ZT0+ISFlJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihlKSksaHY9ZT0+ZS5lbmRzV2l0aChgJWApJiZKKGUuc2xpY2UoMCwtMSkpLGd2PWU9PmN2LnRlc3QoZSksX3Y9KCk9PiEwLHZ2PWU9Pmx2LnRlc3QoZSkmJiF1di50ZXN0KGUpLHl2PSgpPT4hMSxidj1lPT5kdi50ZXN0KGUpLHh2PWU9PmZ2LnRlc3QoZSksU3Y9ZT0+IVkoZSkmJiFYKGUpLEN2PWU9PmUuc3RhcnRzV2l0aChgQGNvbnRhaW5lcmApJiYoZVsxMF09PT1gL2AmJmVbMTFdIT09dm9pZCAwfHxlWzExXT09PWBzYCYmZVsxNl0hPT12b2lkIDAmJmUuc3RhcnRzV2l0aChgLXNpemUvYCwxMCl8fGVbMTFdPT09YG5gJiZlWzE4XSE9PXZvaWQgMCYmZS5zdGFydHNXaXRoKGAtbm9ybWFsL2AsMTApKSx3dj1lPT56dihlLFV2LHl2KSxZPWU9PmF2LnRlc3QoZSksVHY9ZT0+enYoZSxXdix2diksRXY9ZT0+enYoZSxHdixKKSxEdj1lPT56dihlLHF2LF92KSxPdj1lPT56dihlLEt2LHl2KSxrdj1lPT56dihlLFZ2LHl2KSxBdj1lPT56dihlLEh2LHh2KSxqdj1lPT56dihlLEp2LGJ2KSxYPWU9Pm92LnRlc3QoZSksTXY9ZT0+QnYoZSxXdiksTnY9ZT0+QnYoZSxLdiksUHY9ZT0+QnYoZSxWdiksRnY9ZT0+QnYoZSxVdiksSXY9ZT0+QnYoZSxIdiksTHY9ZT0+QnYoZSxKdiwhMCksUnY9ZT0+QnYoZSxxdiwhMCksenY9KGUsdCxuKT0+e2xldCByPWF2LmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90KHJbMV0pOm4oclsyXSk6ITF9LEJ2PShlLHQsbj0hMSk9PntsZXQgcj1vdi5leGVjKGUpO3JldHVybiByP3JbMV0/dChyWzFdKTpuOiExfSxWdj1lPT5lPT09YHBvc2l0aW9uYHx8ZT09PWBwZXJjZW50YWdlYCxIdj1lPT5lPT09YGltYWdlYHx8ZT09PWB1cmxgLFV2PWU9PmU9PT1gbGVuZ3RoYHx8ZT09PWBzaXplYHx8ZT09PWBiZy1zaXplYCxXdj1lPT5lPT09YGxlbmd0aGAsR3Y9ZT0+ZT09PWBudW1iZXJgLEt2PWU9PmU9PT1gZmFtaWx5LW5hbWVgLHF2PWU9PmU9PT1gbnVtYmVyYHx8ZT09PWB3ZWlnaHRgLEp2PWU9PmU9PT1gc2hhZG93YCxZdj1udigoKT0+e2xldCBlPWl2KGBjb2xvcmApLHQ9aXYoYGZvbnRgKSxuPWl2KGB0ZXh0YCkscj1pdihgZm9udC13ZWlnaHRgKSxpPWl2KGB0cmFja2luZ2ApLGE9aXYoYGxlYWRpbmdgKSxvPWl2KGBicmVha3BvaW50YCkscz1pdihgY29udGFpbmVyYCksYz1pdihgc3BhY2luZ2ApLGw9aXYoYHJhZGl1c2ApLHU9aXYoYHNoYWRvd2ApLGQ9aXYoYGluc2V0LXNoYWRvd2ApLGY9aXYoYHRleHQtc2hhZG93YCkscD1pdihgZHJvcC1zaGFkb3dgKSxtPWl2KGBibHVyYCksaD1pdihgcGVyc3BlY3RpdmVgKSxnPWl2KGBhc3BlY3RgKSxfPWl2KGBlYXNlYCksdj1pdihgYW5pbWF0ZWApLHk9KCk9PltgYXV0b2AsYGF2b2lkYCxgYWxsYCxgYXZvaWQtcGFnZWAsYHBhZ2VgLGBsZWZ0YCxgcmlnaHRgLGBjb2x1bW5gXSxiPSgpPT5bYGNlbnRlcmAsYHRvcGAsYGJvdHRvbWAsYGxlZnRgLGByaWdodGAsYHRvcC1sZWZ0YCxgbGVmdC10b3BgLGB0b3AtcmlnaHRgLGByaWdodC10b3BgLGBib3R0b20tcmlnaHRgLGByaWdodC1ib3R0b21gLGBib3R0b20tbGVmdGAsYGxlZnQtYm90dG9tYF0seD0oKT0+Wy4uLmIoKSxYLFldLFM9KCk9PltgYXV0b2AsYGhpZGRlbmAsYGNsaXBgLGB2aXNpYmxlYCxgc2Nyb2xsYF0sQz0oKT0+W2BhdXRvYCxgY29udGFpbmAsYG5vbmVgXSx3PSgpPT5bWCxZLGNdLGVlPSgpPT5bcHYsYGZ1bGxgLGBhdXRvYCwuLi53KCldLHRlPSgpPT5bbXYsYG5vbmVgLGBzdWJncmlkYCxYLFldLFQ9KCk9PltgYXV0b2Ase3NwYW46W2BmdWxsYCxtdixYLFldfSxtdixYLFldLG5lPSgpPT5bbXYsYGF1dG9gLFgsWV0scmU9KCk9PltgYXV0b2AsYG1pbmAsYG1heGAsYGZyYCxYLFldLGllPSgpPT5bYHN0YXJ0YCxgZW5kYCxgY2VudGVyYCxgYmV0d2VlbmAsYGFyb3VuZGAsYGV2ZW5seWAsYHN0cmV0Y2hgLGBiYXNlbGluZWAsYGNlbnRlci1zYWZlYCxgZW5kLXNhZmVgXSxFPSgpPT5bYHN0YXJ0YCxgZW5kYCxgY2VudGVyYCxgc3RyZXRjaGAsYGNlbnRlci1zYWZlYCxgZW5kLXNhZmVgXSxhZT0oKT0+W2BhdXRvYCwuLi53KCldLG9lPSgpPT5bcHYsYGF1dG9gLGBmdWxsYCxgZHZ3YCxgZHZoYCxgbHZ3YCxgbHZoYCxgc3Z3YCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLHNlPSgpPT5bcHYsYHNjcmVlbmAsYGZ1bGxgLGBkdndgLGBsdndgLGBzdndgLGBtaW5gLGBtYXhgLGBmaXRgLC4uLncoKV0sY2U9KCk9Pltwdixgc2NyZWVuYCxgZnVsbGAsYGxoYCxgZHZoYCxgbHZoYCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLEQ9KCk9PltlLFgsWV0sbGU9KCk9PlsuLi5iKCksUHYsa3Yse3Bvc2l0aW9uOltYLFldfV0sdWU9KCk9Pltgbm8tcmVwZWF0YCx7cmVwZWF0OltgYCxgeGAsYHlgLGBzcGFjZWAsYHJvdW5kYF19XSxkZT0oKT0+W2BhdXRvYCxgY292ZXJgLGBjb250YWluYCxGdix3dix7c2l6ZTpbWCxZXX1dLGZlPSgpPT5baHYsTXYsVHZdLHBlPSgpPT5bYGAsYG5vbmVgLGBmdWxsYCxsLFgsWV0sbWU9KCk9PltgYCxKLE12LFR2XSxoZT0oKT0+W2Bzb2xpZGAsYGRhc2hlZGAsYGRvdHRlZGAsYGRvdWJsZWBdLGdlPSgpPT5bYG5vcm1hbGAsYG11bHRpcGx5YCxgc2NyZWVuYCxgb3ZlcmxheWAsYGRhcmtlbmAsYGxpZ2h0ZW5gLGBjb2xvci1kb2RnZWAsYGNvbG9yLWJ1cm5gLGBoYXJkLWxpZ2h0YCxgc29mdC1saWdodGAsYGRpZmZlcmVuY2VgLGBleGNsdXNpb25gLGBodWVgLGBzYXR1cmF0aW9uYCxgY29sb3JgLGBsdW1pbm9zaXR5YF0sX2U9KCk9PltKLGh2LFB2LGt2XSx2ZT0oKT0+W2BgLGBub25lYCxtLFgsWV0seWU9KCk9Pltgbm9uZWAsSixYLFldLGJlPSgpPT5bYG5vbmVgLEosWCxZXSxPPSgpPT5bSixYLFldLHhlPSgpPT5bcHYsYGZ1bGxgLC4uLncoKV07cmV0dXJue2NhY2hlU2l6ZTo1MDAsdGhlbWU6e2FuaW1hdGU6W2BzcGluYCxgcGluZ2AsYHB1bHNlYCxgYm91bmNlYF0sYXNwZWN0OltgdmlkZW9gXSxibHVyOltndl0sYnJlYWtwb2ludDpbZ3ZdLGNvbG9yOltfdl0sY29udGFpbmVyOltndl0sImRyb3Atc2hhZG93IjpbZ3ZdLGVhc2U6W2BpbmAsYG91dGAsYGluLW91dGBdLGZvbnQ6W1N2XSwiZm9udC13ZWlnaHQiOltgdGhpbmAsYGV4dHJhbGlnaHRgLGBsaWdodGAsYG5vcm1hbGAsYG1lZGl1bWAsYHNlbWlib2xkYCxgYm9sZGAsYGV4dHJhYm9sZGAsYGJsYWNrYF0sImluc2V0LXNoYWRvdyI6W2d2XSxsZWFkaW5nOltgbm9uZWAsYHRpZ2h0YCxgc251Z2AsYG5vcm1hbGAsYHJlbGF4ZWRgLGBsb29zZWBdLHBlcnNwZWN0aXZlOltgZHJhbWF0aWNgLGBuZWFyYCxgbm9ybWFsYCxgbWlkcmFuZ2VgLGBkaXN0YW50YCxgbm9uZWBdLHJhZGl1czpbZ3ZdLHNoYWRvdzpbZ3ZdLHNwYWNpbmc6W2BweGAsSl0sdGV4dDpbZ3ZdLCJ0ZXh0LXNoYWRvdyI6W2d2XSx0cmFja2luZzpbYHRpZ2h0ZXJgLGB0aWdodGAsYG5vcm1hbGAsYHdpZGVgLGB3aWRlcmAsYHdpZGVzdGBdfSxjbGFzc0dyb3Vwczp7YXNwZWN0Olt7YXNwZWN0OltgYXV0b2AsYHNxdWFyZWAscHYsWSxYLGddfV0sY29udGFpbmVyOltgY29udGFpbmVyYF0sImNvbnRhaW5lci10eXBlIjpbeyJAY29udGFpbmVyIjpbYGAsYG5vcm1hbGAsYHNpemVgLFgsWV19XSwiY29udGFpbmVyLW5hbWVkIjpbQ3ZdLGNvbHVtbnM6W3tjb2x1bW5zOltKLFksWCxzXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOnkoKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6eSgpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbYGF1dG9gLGBhdm9pZGAsYGF2b2lkLXBhZ2VgLGBhdm9pZC1jb2x1bW5gXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOltgc2xpY2VgLGBjbG9uZWBdfV0sYm94Olt7Ym94OltgYm9yZGVyYCxgY29udGVudGBdfV0sZGlzcGxheTpbYGJsb2NrYCxgaW5saW5lLWJsb2NrYCxgaW5saW5lYCxgZmxleGAsYGlubGluZS1mbGV4YCxgdGFibGVgLGBpbmxpbmUtdGFibGVgLGB0YWJsZS1jYXB0aW9uYCxgdGFibGUtY2VsbGAsYHRhYmxlLWNvbHVtbmAsYHRhYmxlLWNvbHVtbi1ncm91cGAsYHRhYmxlLWZvb3Rlci1ncm91cGAsYHRhYmxlLWhlYWRlci1ncm91cGAsYHRhYmxlLXJvdy1ncm91cGAsYHRhYmxlLXJvd2AsYGZsb3ctcm9vdGAsYGdyaWRgLGBpbmxpbmUtZ3JpZGAsYGNvbnRlbnRzYCxgbGlzdC1pdGVtYCxgaGlkZGVuYF0sc3I6W2Bzci1vbmx5YCxgbm90LXNyLW9ubHlgXSxmbG9hdDpbe2Zsb2F0OltgcmlnaHRgLGBsZWZ0YCxgbm9uZWAsYHN0YXJ0YCxgZW5kYF19XSxjbGVhcjpbe2NsZWFyOltgbGVmdGAsYHJpZ2h0YCxgYm90aGAsYG5vbmVgLGBzdGFydGAsYGVuZGBdfV0saXNvbGF0aW9uOltgaXNvbGF0ZWAsYGlzb2xhdGlvbi1hdXRvYF0sIm9iamVjdC1maXQiOlt7b2JqZWN0OltgY29udGFpbmAsYGNvdmVyYCxgZmlsbGAsYG5vbmVgLGBzY2FsZS1kb3duYF19XSwib2JqZWN0LXBvc2l0aW9uIjpbe29iamVjdDp4KCl9XSxvdmVyZmxvdzpbe292ZXJmbG93OlMoKX1dLCJvdmVyZmxvdy14IjpbeyJvdmVyZmxvdy14IjpTKCl9XSwib3ZlcmZsb3cteSI6W3sib3ZlcmZsb3cteSI6UygpfV0sb3ZlcnNjcm9sbDpbe292ZXJzY3JvbGw6QygpfV0sIm92ZXJzY3JvbGwteCI6W3sib3ZlcnNjcm9sbC14IjpDKCl9XSwib3ZlcnNjcm9sbC15IjpbeyJvdmVyc2Nyb2xsLXkiOkMoKX1dLHBvc2l0aW9uOltgc3RhdGljYCxgZml4ZWRgLGBhYnNvbHV0ZWAsYHJlbGF0aXZlYCxgc3RpY2t5YF0saW5zZXQ6W3tpbnNldDplZSgpfV0sImluc2V0LXgiOlt7Imluc2V0LXgiOmVlKCl9XSwiaW5zZXQteSI6W3siaW5zZXQteSI6ZWUoKX1dLHN0YXJ0Olt7Imluc2V0LXMiOmVlKCksc3RhcnQ6ZWUoKX1dLGVuZDpbeyJpbnNldC1lIjplZSgpLGVuZDplZSgpfV0sImluc2V0LWJzIjpbeyJpbnNldC1icyI6ZWUoKX1dLCJpbnNldC1iZSI6W3siaW5zZXQtYmUiOmVlKCl9XSx0b3A6W3t0b3A6ZWUoKX1dLHJpZ2h0Olt7cmlnaHQ6ZWUoKX1dLGJvdHRvbTpbe2JvdHRvbTplZSgpfV0sbGVmdDpbe2xlZnQ6ZWUoKX1dLHZpc2liaWxpdHk6W2B2aXNpYmxlYCxgaW52aXNpYmxlYCxgY29sbGFwc2VgXSx6Olt7ejpbbXYsYGF1dG9gLFgsWV19XSxiYXNpczpbe2Jhc2lzOltwdixgZnVsbGAsYGF1dG9gLHMsLi4udygpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Oltgcm93YCxgcm93LXJldmVyc2VgLGBjb2xgLGBjb2wtcmV2ZXJzZWBdfV0sImZsZXgtd3JhcCI6W3tmbGV4Oltgbm93cmFwYCxgd3JhcGAsYHdyYXAtcmV2ZXJzZWBdfV0sZmxleDpbe2ZsZXg6W0oscHYsYGF1dG9gLGBpbml0aWFsYCxgbm9uZWAsWV19XSxncm93Olt7Z3JvdzpbYGAsSixYLFldfV0sc2hyaW5rOlt7c2hyaW5rOltgYCxKLFgsWV19XSxvcmRlcjpbe29yZGVyOlttdixgZmlyc3RgLGBsYXN0YCxgbm9uZWAsWCxZXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6dGUoKX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpUKCl9XSwiY29sLXN0YXJ0IjpbeyJjb2wtc3RhcnQiOm5lKCl9XSwiY29sLWVuZCI6W3siY29sLWVuZCI6bmUoKX1dLCJncmlkLXJvd3MiOlt7ImdyaWQtcm93cyI6dGUoKX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpUKCl9XSwicm93LXN0YXJ0IjpbeyJyb3ctc3RhcnQiOm5lKCl9XSwicm93LWVuZCI6W3sicm93LWVuZCI6bmUoKX1dLCJncmlkLWZsb3ciOlt7ImdyaWQtZmxvdyI6W2Byb3dgLGBjb2xgLGBkZW5zZWAsYHJvdy1kZW5zZWAsYGNvbC1kZW5zZWBdfV0sImF1dG8tY29scyI6W3siYXV0by1jb2xzIjpyZSgpfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpyZSgpfV0sZ2FwOlt7Z2FwOncoKX1dLCJnYXAteCI6W3siZ2FwLXgiOncoKX1dLCJnYXAteSI6W3siZ2FwLXkiOncoKX1dLCJqdXN0aWZ5LWNvbnRlbnQiOlt7anVzdGlmeTpbLi4uaWUoKSxgbm9ybWFsYF19XSwianVzdGlmeS1pdGVtcyI6W3sianVzdGlmeS1pdGVtcyI6Wy4uLkUoKSxgbm9ybWFsYF19XSwianVzdGlmeS1zZWxmIjpbeyJqdXN0aWZ5LXNlbGYiOltgYXV0b2AsLi4uRSgpXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6W2Bub3JtYWxgLC4uLmllKCldfV0sImFsaWduLWl0ZW1zIjpbe2l0ZW1zOlsuLi5FKCkse2Jhc2VsaW5lOltgYCxgbGFzdGBdfV19XSwiYWxpZ24tc2VsZiI6W3tzZWxmOltgYXV0b2AsLi4uRSgpLHtiYXNlbGluZTpbYGAsYGxhc3RgXX1dfV0sInBsYWNlLWNvbnRlbnQiOlt7InBsYWNlLWNvbnRlbnQiOmllKCl9XSwicGxhY2UtaXRlbXMiOlt7InBsYWNlLWl0ZW1zIjpbLi4uRSgpLGBiYXNlbGluZWBdfV0sInBsYWNlLXNlbGYiOlt7InBsYWNlLXNlbGYiOltgYXV0b2AsLi4uRSgpXX1dLHA6W3twOncoKX1dLHB4Olt7cHg6dygpfV0scHk6W3tweTp3KCl9XSxwczpbe3BzOncoKX1dLHBlOlt7cGU6dygpfV0scGJzOlt7cGJzOncoKX1dLHBiZTpbe3BiZTp3KCl9XSxwdDpbe3B0OncoKX1dLHByOlt7cHI6dygpfV0scGI6W3twYjp3KCl9XSxwbDpbe3BsOncoKX1dLG06W3ttOmFlKCl9XSxteDpbe214OmFlKCl9XSxteTpbe215OmFlKCl9XSxtczpbe21zOmFlKCl9XSxtZTpbe21lOmFlKCl9XSxtYnM6W3ttYnM6YWUoKX1dLG1iZTpbe21iZTphZSgpfV0sbXQ6W3ttdDphZSgpfV0sbXI6W3ttcjphZSgpfV0sbWI6W3ttYjphZSgpfV0sbWw6W3ttbDphZSgpfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOncoKX1dLCJzcGFjZS14LXJldmVyc2UiOltgc3BhY2UteC1yZXZlcnNlYF0sInNwYWNlLXkiOlt7InNwYWNlLXkiOncoKX1dLCJzcGFjZS15LXJldmVyc2UiOltgc3BhY2UteS1yZXZlcnNlYF0sc2l6ZTpbe3NpemU6b2UoKX1dLCJpbmxpbmUtc2l6ZSI6W3tpbmxpbmU6W2BhdXRvYCwuLi5zZSgpXX1dLCJtaW4taW5saW5lLXNpemUiOlt7Im1pbi1pbmxpbmUiOltgYXV0b2AsLi4uc2UoKV19XSwibWF4LWlubGluZS1zaXplIjpbeyJtYXgtaW5saW5lIjpbYG5vbmVgLC4uLnNlKCldfV0sImJsb2NrLXNpemUiOlt7YmxvY2s6W2BhdXRvYCwuLi5jZSgpXX1dLCJtaW4tYmxvY2stc2l6ZSI6W3sibWluLWJsb2NrIjpbYGF1dG9gLC4uLmNlKCldfV0sIm1heC1ibG9jay1zaXplIjpbeyJtYXgtYmxvY2siOltgbm9uZWAsLi4uY2UoKV19XSx3Olt7dzpbcyxgc2NyZWVuYCwuLi5vZSgpXX1dLCJtaW4tdyI6W3sibWluLXciOltzLGBzY3JlZW5gLGBub25lYCwuLi5vZSgpXX1dLCJtYXgtdyI6W3sibWF4LXciOltzLGBzY3JlZW5gLGBub25lYCxgcHJvc2VgLHtzY3JlZW46W29dfSwuLi5vZSgpXX1dLGg6W3toOltgc2NyZWVuYCxgbGhgLC4uLm9lKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6W2BzY3JlZW5gLGBsaGAsYG5vbmVgLC4uLm9lKCldfV0sIm1heC1oIjpbeyJtYXgtaCI6W2BzY3JlZW5gLGBsaGAsLi4ub2UoKV19XSwiZm9udC1zaXplIjpbe3RleHQ6W2BiYXNlYCxuLE12LFR2XX1dLCJmb250LXNtb290aGluZyI6W2BhbnRpYWxpYXNlZGAsYHN1YnBpeGVsLWFudGlhbGlhc2VkYF0sImZvbnQtc3R5bGUiOltgaXRhbGljYCxgbm90LWl0YWxpY2BdLCJmb250LXdlaWdodCI6W3tmb250OltyLFJ2LER2XX1dLCJmb250LXN0cmV0Y2giOlt7ImZvbnQtc3RyZXRjaCI6W2B1bHRyYS1jb25kZW5zZWRgLGBleHRyYS1jb25kZW5zZWRgLGBjb25kZW5zZWRgLGBzZW1pLWNvbmRlbnNlZGAsYG5vcm1hbGAsYHNlbWktZXhwYW5kZWRgLGBleHBhbmRlZGAsYGV4dHJhLWV4cGFuZGVkYCxgdWx0cmEtZXhwYW5kZWRgLGh2LFldfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W052LE92LHRdfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltZXX1dLCJmdm4tbm9ybWFsIjpbYG5vcm1hbC1udW1zYF0sImZ2bi1vcmRpbmFsIjpbYG9yZGluYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2BzbGFzaGVkLXplcm9gXSwiZnZuLWZpZ3VyZSI6W2BsaW5pbmctbnVtc2AsYG9sZHN0eWxlLW51bXNgXSwiZnZuLXNwYWNpbmciOltgcHJvcG9ydGlvbmFsLW51bXNgLGB0YWJ1bGFyLW51bXNgXSwiZnZuLWZyYWN0aW9uIjpbYGRpYWdvbmFsLWZyYWN0aW9uc2AsYHN0YWNrZWQtZnJhY3Rpb25zYF0sdHJhY2tpbmc6W3t0cmFja2luZzpbaSxYLFldfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltKLGBub25lYCxYLEV2XX1dLGxlYWRpbmc6W3tsZWFkaW5nOlthLC4uLncoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6W2Bub25lYCxYLFldfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbYGluc2lkZWAsYG91dHNpZGVgXX1dLCJsaXN0LXN0eWxlLXR5cGUiOlt7bGlzdDpbYGRpc2NgLGBkZWNpbWFsYCxgbm9uZWAsWCxZXX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OltgbGVmdGAsYGNlbnRlcmAsYHJpZ2h0YCxganVzdGlmeWAsYHN0YXJ0YCxgZW5kYF19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6RCgpfV0sInRleHQtY29sb3IiOlt7dGV4dDpEKCl9XSwidGV4dC1kZWNvcmF0aW9uIjpbYHVuZGVybGluZWAsYG92ZXJsaW5lYCxgbGluZS10aHJvdWdoYCxgbm8tdW5kZXJsaW5lYF0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5oZSgpLGB3YXZ5YF19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOltKLGBmcm9tLWZvbnRgLGBhdXRvYCxYLFR2XX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpEKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W0osYGF1dG9gLFgsWV19XSwidGV4dC10cmFuc2Zvcm0iOltgdXBwZXJjYXNlYCxgbG93ZXJjYXNlYCxgY2FwaXRhbGl6ZWAsYG5vcm1hbC1jYXNlYF0sInRleHQtb3ZlcmZsb3ciOltgdHJ1bmNhdGVgLGB0ZXh0LWVsbGlwc2lzYCxgdGV4dC1jbGlwYF0sInRleHQtd3JhcCI6W3t0ZXh0Oltgd3JhcGAsYG5vd3JhcGAsYGJhbGFuY2VgLGBwcmV0dHlgXX1dLGluZGVudDpbe2luZGVudDp3KCl9XSwidGFiLXNpemUiOlt7dGFiOlttdixYLFldfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOltgYmFzZWxpbmVgLGB0b3BgLGBtaWRkbGVgLGBib3R0b21gLGB0ZXh0LXRvcGAsYHRleHQtYm90dG9tYCxgc3ViYCxgc3VwZXJgLFgsWV19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbYG5vcm1hbGAsYG5vd3JhcGAsYHByZWAsYHByZS1saW5lYCxgcHJlLXdyYXBgLGBicmVhay1zcGFjZXNgXX1dLGJyZWFrOlt7YnJlYWs6W2Bub3JtYWxgLGB3b3Jkc2AsYGFsbGAsYGtlZXBgXX1dLHdyYXA6W3t3cmFwOltgYnJlYWstd29yZGAsYGFueXdoZXJlYCxgbm9ybWFsYF19XSxoeXBoZW5zOlt7aHlwaGVuczpbYG5vbmVgLGBtYW51YWxgLGBhdXRvYF19XSxjb250ZW50Olt7Y29udGVudDpbYG5vbmVgLFgsWV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbYGZpeGVkYCxgbG9jYWxgLGBzY3JvbGxgXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgdGV4dGBdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YF19XSwiYmctcG9zaXRpb24iOlt7Ymc6bGUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6dWUoKX1dLCJiZy1zaXplIjpbe2JnOmRlKCl9XSwiYmctaW1hZ2UiOlt7Ymc6W2Bub25lYCx7bGluZWFyOlt7dG86W2B0YCxgdHJgLGByYCxgYnJgLGBiYCxgYmxgLGBsYCxgdGxgXX0sbXYsWCxZXSxyYWRpYWw6W2BgLFgsWV0sY29uaWM6W212LFgsWV19LEl2LEF2XX1dLCJiZy1jb2xvciI6W3tiZzpEKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpmZSgpfV0sImdyYWRpZW50LXZpYS1wb3MiOlt7dmlhOmZlKCl9XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOmZlKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOkQoKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOkQoKX1dLCJncmFkaWVudC10byI6W3t0bzpEKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpwZSgpfV0sInJvdW5kZWQtcyI6W3sicm91bmRlZC1zIjpwZSgpfV0sInJvdW5kZWQtZSI6W3sicm91bmRlZC1lIjpwZSgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpwZSgpfV0sInJvdW5kZWQtciI6W3sicm91bmRlZC1yIjpwZSgpfV0sInJvdW5kZWQtYiI6W3sicm91bmRlZC1iIjpwZSgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpwZSgpfV0sInJvdW5kZWQtc3MiOlt7InJvdW5kZWQtc3MiOnBlKCl9XSwicm91bmRlZC1zZSI6W3sicm91bmRlZC1zZSI6cGUoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpwZSgpfV0sInJvdW5kZWQtZXMiOlt7InJvdW5kZWQtZXMiOnBlKCl9XSwicm91bmRlZC10bCI6W3sicm91bmRlZC10bCI6cGUoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpwZSgpfV0sInJvdW5kZWQtYnIiOlt7InJvdW5kZWQtYnIiOnBlKCl9XSwicm91bmRlZC1ibCI6W3sicm91bmRlZC1ibCI6cGUoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6bWUoKX1dLCJib3JkZXItdy14IjpbeyJib3JkZXIteCI6bWUoKX1dLCJib3JkZXItdy15IjpbeyJib3JkZXIteSI6bWUoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6bWUoKX1dLCJib3JkZXItdy1lIjpbeyJib3JkZXItZSI6bWUoKX1dLCJib3JkZXItdy1icyI6W3siYm9yZGVyLWJzIjptZSgpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOm1lKCl9XSwiYm9yZGVyLXctdCI6W3siYm9yZGVyLXQiOm1lKCl9XSwiYm9yZGVyLXctciI6W3siYm9yZGVyLXIiOm1lKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOm1lKCl9XSwiYm9yZGVyLXctbCI6W3siYm9yZGVyLWwiOm1lKCl9XSwiZGl2aWRlLXgiOlt7ImRpdmlkZS14IjptZSgpfV0sImRpdmlkZS14LXJldmVyc2UiOltgZGl2aWRlLXgtcmV2ZXJzZWBdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOm1lKCl9XSwiZGl2aWRlLXktcmV2ZXJzZSI6W2BkaXZpZGUteS1yZXZlcnNlYF0sImJvcmRlci1zdHlsZSI6W3tib3JkZXI6Wy4uLmhlKCksYGhpZGRlbmAsYG5vbmVgXX1dLCJkaXZpZGUtc3R5bGUiOlt7ZGl2aWRlOlsuLi5oZSgpLGBoaWRkZW5gLGBub25lYF19XSwiYm9yZGVyLWNvbG9yIjpbe2JvcmRlcjpEKCl9XSwiYm9yZGVyLWNvbG9yLXgiOlt7ImJvcmRlci14IjpEKCl9XSwiYm9yZGVyLWNvbG9yLXkiOlt7ImJvcmRlci15IjpEKCl9XSwiYm9yZGVyLWNvbG9yLXMiOlt7ImJvcmRlci1zIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWUiOlt7ImJvcmRlci1lIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWJzIjpbeyJib3JkZXItYnMiOkQoKX1dLCJib3JkZXItY29sb3ItYmUiOlt7ImJvcmRlci1iZSI6RCgpfV0sImJvcmRlci1jb2xvci10IjpbeyJib3JkZXItdCI6RCgpfV0sImJvcmRlci1jb2xvci1yIjpbeyJib3JkZXItciI6RCgpfV0sImJvcmRlci1jb2xvci1iIjpbeyJib3JkZXItYiI6RCgpfV0sImJvcmRlci1jb2xvci1sIjpbeyJib3JkZXItbCI6RCgpfV0sImRpdmlkZS1jb2xvciI6W3tkaXZpZGU6RCgpfV0sIm91dGxpbmUtc3R5bGUiOlt7b3V0bGluZTpbLi4uaGUoKSxgbm9uZWAsYGhpZGRlbmBdfV0sIm91dGxpbmUtb2Zmc2V0IjpbeyJvdXRsaW5lLW9mZnNldCI6W0osWCxZXX1dLCJvdXRsaW5lLXciOlt7b3V0bGluZTpbYGAsSixNdixUdl19XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOkQoKX1dLHNoYWRvdzpbe3NoYWRvdzpbYGAsYG5vbmVgLHUsTHYsanZdfV0sInNoYWRvdy1jb2xvciI6W3tzaGFkb3c6RCgpfV0sImluc2V0LXNoYWRvdyI6W3siaW5zZXQtc2hhZG93IjpbYG5vbmVgLGQsTHYsanZdfV0sImluc2V0LXNoYWRvdy1jb2xvciI6W3siaW5zZXQtc2hhZG93IjpEKCl9XSwicmluZy13Ijpbe3Jpbmc6bWUoKX1dLCJyaW5nLXctaW5zZXQiOltgcmluZy1pbnNldGBdLCJyaW5nLWNvbG9yIjpbe3Jpbmc6RCgpfV0sInJpbmctb2Zmc2V0LXciOlt7InJpbmctb2Zmc2V0IjpbSixUdl19XSwicmluZy1vZmZzZXQtY29sb3IiOlt7InJpbmctb2Zmc2V0IjpEKCl9XSwiaW5zZXQtcmluZy13IjpbeyJpbnNldC1yaW5nIjptZSgpfV0sImluc2V0LXJpbmctY29sb3IiOlt7Imluc2V0LXJpbmciOkQoKX1dLCJ0ZXh0LXNoYWRvdyI6W3sidGV4dC1zaGFkb3ciOltgbm9uZWAsZixMdixqdl19XSwidGV4dC1zaGFkb3ctY29sb3IiOlt7InRleHQtc2hhZG93IjpEKCl9XSxvcGFjaXR5Olt7b3BhY2l0eTpbSixYLFldfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjpbLi4uZ2UoKSxgcGx1cy1kYXJrZXJgLGBwbHVzLWxpZ2h0ZXJgXX1dLCJiZy1ibGVuZCI6W3siYmctYmxlbmQiOmdlKCl9XSwibWFzay1jbGlwIjpbeyJtYXNrLWNsaXAiOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGBmaWxsYCxgc3Ryb2tlYCxgdmlld2BdfSxgbWFzay1uby1jbGlwYF0sIm1hc2stY29tcG9zaXRlIjpbe21hc2s6W2BhZGRgLGBzdWJ0cmFjdGAsYGludGVyc2VjdGAsYGV4Y2x1ZGVgXX1dLCJtYXNrLWltYWdlLWxpbmVhci1wb3MiOlt7Im1hc2stbGluZWFyIjpbSl19XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1wb3MiOlt7Im1hc2stbGluZWFyLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1saW5lYXItdG8tcG9zIjpbeyJtYXNrLWxpbmVhci10byI6X2UoKX1dLCJtYXNrLWltYWdlLWxpbmVhci1mcm9tLWNvbG9yIjpbeyJtYXNrLWxpbmVhci1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1saW5lYXItdG8tY29sb3IiOlt7Im1hc2stbGluZWFyLXRvIjpEKCl9XSwibWFzay1pbWFnZS10LWZyb20tcG9zIjpbeyJtYXNrLXQtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXQtdG8tcG9zIjpbeyJtYXNrLXQtdG8iOl9lKCl9XSwibWFzay1pbWFnZS10LWZyb20tY29sb3IiOlt7Im1hc2stdC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS10LXRvLWNvbG9yIjpbeyJtYXNrLXQtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1wb3MiOlt7Im1hc2stci1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2Utci10by1wb3MiOlt7Im1hc2stci10byI6X2UoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1jb2xvciI6W3sibWFzay1yLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXItdG8tY29sb3IiOlt7Im1hc2stci10byI6RCgpfV0sIm1hc2staW1hZ2UtYi1mcm9tLXBvcyI6W3sibWFzay1iLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1iLXRvLXBvcyI6W3sibWFzay1iLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtYi1mcm9tLWNvbG9yIjpbeyJtYXNrLWItZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtYi10by1jb2xvciI6W3sibWFzay1iLXRvIjpEKCl9XSwibWFzay1pbWFnZS1sLWZyb20tcG9zIjpbeyJtYXNrLWwtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLWwtdG8tcG9zIjpbeyJtYXNrLWwtdG8iOl9lKCl9XSwibWFzay1pbWFnZS1sLWZyb20tY29sb3IiOlt7Im1hc2stbC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1sLXRvLWNvbG9yIjpbeyJtYXNrLWwtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1wb3MiOlt7Im1hc2steC1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UteC10by1wb3MiOlt7Im1hc2steC10byI6X2UoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1jb2xvciI6W3sibWFzay14LWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXgtdG8tY29sb3IiOlt7Im1hc2steC10byI6RCgpfV0sIm1hc2staW1hZ2UteS1mcm9tLXBvcyI6W3sibWFzay15LWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS15LXRvLXBvcyI6W3sibWFzay15LXRvIjpfZSgpfV0sIm1hc2staW1hZ2UteS1mcm9tLWNvbG9yIjpbeyJtYXNrLXktZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UteS10by1jb2xvciI6W3sibWFzay15LXRvIjpEKCl9XSwibWFzay1pbWFnZS1yYWRpYWwiOlt7Im1hc2stcmFkaWFsIjpbWCxZXX1dLCJtYXNrLWltYWdlLXJhZGlhbC1mcm9tLXBvcyI6W3sibWFzay1yYWRpYWwtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1wb3MiOlt7Im1hc2stcmFkaWFsLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtcmFkaWFsLWZyb20tY29sb3IiOlt7Im1hc2stcmFkaWFsLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1jb2xvciI6W3sibWFzay1yYWRpYWwtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC1zaGFwZSI6W3sibWFzay1yYWRpYWwiOltgY2lyY2xlYCxgZWxsaXBzZWBdfV0sIm1hc2staW1hZ2UtcmFkaWFsLXNpemUiOlt7Im1hc2stcmFkaWFsIjpbe2Nsb3Nlc3Q6W2BzaWRlYCxgY29ybmVyYF0sZmFydGhlc3Q6W2BzaWRlYCxgY29ybmVyYF19XX1dLCJtYXNrLWltYWdlLXJhZGlhbC1wb3MiOlt7Im1hc2stcmFkaWFsLWF0IjpiKCl9XSwibWFzay1pbWFnZS1jb25pYy1wb3MiOlt7Im1hc2stY29uaWMiOltKXX1dLCJtYXNrLWltYWdlLWNvbmljLWZyb20tcG9zIjpbeyJtYXNrLWNvbmljLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1jb25pYy10by1wb3MiOlt7Im1hc2stY29uaWMtdG8iOl9lKCl9XSwibWFzay1pbWFnZS1jb25pYy1mcm9tLWNvbG9yIjpbeyJtYXNrLWNvbmljLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLWNvbG9yIjpbeyJtYXNrLWNvbmljLXRvIjpEKCl9XSwibWFzay1tb2RlIjpbe21hc2s6W2BhbHBoYWAsYGx1bWluYW5jZWAsYG1hdGNoYF19XSwibWFzay1vcmlnaW4iOlt7Im1hc2stb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgZmlsbGAsYHN0cm9rZWAsYHZpZXdgXX1dLCJtYXNrLXBvc2l0aW9uIjpbe21hc2s6bGUoKX1dLCJtYXNrLXJlcGVhdCI6W3ttYXNrOnVlKCl9XSwibWFzay1zaXplIjpbe21hc2s6ZGUoKX1dLCJtYXNrLXR5cGUiOlt7Im1hc2stdHlwZSI6W2BhbHBoYWAsYGx1bWluYW5jZWBdfV0sIm1hc2staW1hZ2UiOlt7bWFzazpbYG5vbmVgLFgsWV19XSxmaWx0ZXI6W3tmaWx0ZXI6W2BgLGBub25lYCxYLFldfV0sYmx1cjpbe2JsdXI6dmUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltKLFgsWV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltKLFgsWV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbYGAsYG5vbmVgLHAsTHYsanZdfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6RCgpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOltgYCxKLFgsWV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W0osWCxZXX1dLGludmVydDpbe2ludmVydDpbYGAsSixYLFldfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbSixYLFldfV0sc2VwaWE6W3tzZXBpYTpbYGAsSixYLFldfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbYGAsYG5vbmVgLFgsWV19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6dmUoKX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbSixYLFldfV0sImJhY2tkcm9wLWNvbnRyYXN0IjpbeyJiYWNrZHJvcC1jb250cmFzdCI6W0osWCxZXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W2BgLEosWCxZXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbSixYLFldfV0sImJhY2tkcm9wLWludmVydCI6W3siYmFja2Ryb3AtaW52ZXJ0IjpbYGAsSixYLFldfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOltKLFgsWV19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbSixYLFldfV0sImJhY2tkcm9wLXNlcGlhIjpbeyJiYWNrZHJvcC1zZXBpYSI6W2BgLEosWCxZXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOltgY29sbGFwc2VgLGBzZXBhcmF0ZWBdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6dygpfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOncoKX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15Ijp3KCl9XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOltgYXV0b2AsYGZpeGVkYF19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbYHRvcGAsYGJvdHRvbWBdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246W2BgLGBhbGxgLGBjb2xvcnNgLGBvcGFjaXR5YCxgc2hhZG93YCxgdHJhbnNmb3JtYCxgbm9uZWAsWCxZXX1dLCJ0cmFuc2l0aW9uLWJlaGF2aW9yIjpbe3RyYW5zaXRpb246W2Bub3JtYWxgLGBkaXNjcmV0ZWBdfV0sZHVyYXRpb246W3tkdXJhdGlvbjpbSixgaW5pdGlhbGAsWCxZXX1dLGVhc2U6W3tlYXNlOltgbGluZWFyYCxgaW5pdGlhbGAsXyxYLFldfV0sZGVsYXk6W3tkZWxheTpbSixYLFldfV0sYW5pbWF0ZTpbe2FuaW1hdGU6W2Bub25lYCx2LFgsWV19XSxiYWNrZmFjZTpbe2JhY2tmYWNlOltgaGlkZGVuYCxgdmlzaWJsZWBdfV0scGVyc3BlY3RpdmU6W3twZXJzcGVjdGl2ZTpbaCxYLFldfV0sInBlcnNwZWN0aXZlLW9yaWdpbiI6W3sicGVyc3BlY3RpdmUtb3JpZ2luIjp4KCl9XSxyb3RhdGU6W3tyb3RhdGU6eWUoKX1dLCJyb3RhdGUteCI6W3sicm90YXRlLXgiOnllKCl9XSwicm90YXRlLXkiOlt7InJvdGF0ZS15Ijp5ZSgpfV0sInJvdGF0ZS16IjpbeyJyb3RhdGUteiI6eWUoKX1dLHNjYWxlOlt7c2NhbGU6YmUoKX1dLCJzY2FsZS14IjpbeyJzY2FsZS14IjpiZSgpfV0sInNjYWxlLXkiOlt7InNjYWxlLXkiOmJlKCl9XSwic2NhbGUteiI6W3sic2NhbGUteiI6YmUoKX1dLCJzY2FsZS0zZCI6W2BzY2FsZS0zZGBdLHNrZXc6W3tza2V3Ok8oKX1dLCJza2V3LXgiOlt7InNrZXcteCI6TygpfV0sInNrZXcteSI6W3sic2tldy15IjpPKCl9XSx0cmFuc2Zvcm06W3t0cmFuc2Zvcm06W1gsWSxgYCxgbm9uZWAsYGdwdWAsYGNwdWBdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOngoKX1dLCJ0cmFuc2Zvcm0tc3R5bGUiOlt7dHJhbnNmb3JtOltgM2RgLGBmbGF0YF19XSx0cmFuc2xhdGU6W3t0cmFuc2xhdGU6eGUoKX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOnhlKCl9XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15Ijp4ZSgpfV0sInRyYW5zbGF0ZS16IjpbeyJ0cmFuc2xhdGUteiI6eGUoKX1dLCJ0cmFuc2xhdGUtbm9uZSI6W2B0cmFuc2xhdGUtbm9uZWBdLHpvb206W3t6b29tOlttdixYLFldfV0sYWNjZW50Olt7YWNjZW50OkQoKX1dLGFwcGVhcmFuY2U6W3thcHBlYXJhbmNlOltgbm9uZWAsYGF1dG9gXX1dLCJjYXJldC1jb2xvciI6W3tjYXJldDpEKCl9XSwiY29sb3Itc2NoZW1lIjpbe3NjaGVtZTpbYG5vcm1hbGAsYGRhcmtgLGBsaWdodGAsYGxpZ2h0LWRhcmtgLGBvbmx5LWRhcmtgLGBvbmx5LWxpZ2h0YF19XSxjdXJzb3I6W3tjdXJzb3I6W2BhdXRvYCxgZGVmYXVsdGAsYHBvaW50ZXJgLGB3YWl0YCxgdGV4dGAsYG1vdmVgLGBoZWxwYCxgbm90LWFsbG93ZWRgLGBub25lYCxgY29udGV4dC1tZW51YCxgcHJvZ3Jlc3NgLGBjZWxsYCxgY3Jvc3NoYWlyYCxgdmVydGljYWwtdGV4dGAsYGFsaWFzYCxgY29weWAsYG5vLWRyb3BgLGBncmFiYCxgZ3JhYmJpbmdgLGBhbGwtc2Nyb2xsYCxgY29sLXJlc2l6ZWAsYHJvdy1yZXNpemVgLGBuLXJlc2l6ZWAsYGUtcmVzaXplYCxgcy1yZXNpemVgLGB3LXJlc2l6ZWAsYG5lLXJlc2l6ZWAsYG53LXJlc2l6ZWAsYHNlLXJlc2l6ZWAsYHN3LXJlc2l6ZWAsYGV3LXJlc2l6ZWAsYG5zLXJlc2l6ZWAsYG5lc3ctcmVzaXplYCxgbndzZS1yZXNpemVgLGB6b29tLWluYCxgem9vbS1vdXRgLFgsWV19XSwiZmllbGQtc2l6aW5nIjpbeyJmaWVsZC1zaXppbmciOltgZml4ZWRgLGBjb250ZW50YF19XSwicG9pbnRlci1ldmVudHMiOlt7InBvaW50ZXItZXZlbnRzIjpbYGF1dG9gLGBub25lYF19XSxyZXNpemU6W3tyZXNpemU6W2Bub25lYCxgYCxgeWAsYHhgXX1dLCJzY3JvbGwtYmVoYXZpb3IiOlt7c2Nyb2xsOltgYXV0b2AsYHNtb290aGBdfV0sInNjcm9sbGJhci10aHVtYi1jb2xvciI6W3sic2Nyb2xsYmFyLXRodW1iIjpEKCl9XSwic2Nyb2xsYmFyLXRyYWNrLWNvbG9yIjpbeyJzY3JvbGxiYXItdHJhY2siOkQoKX1dLCJzY3JvbGxiYXItZ3V0dGVyIjpbeyJzY3JvbGxiYXItZ3V0dGVyIjpbYGF1dG9gLGBzdGFibGVgLGBib3RoYF19XSwic2Nyb2xsYmFyLXciOlt7c2Nyb2xsYmFyOltgYXV0b2AsYHRoaW5gLGBub25lYF19XSwic2Nyb2xsLW0iOlt7InNjcm9sbC1tIjp3KCl9XSwic2Nyb2xsLW14IjpbeyJzY3JvbGwtbXgiOncoKX1dLCJzY3JvbGwtbXkiOlt7InNjcm9sbC1teSI6dygpfV0sInNjcm9sbC1tcyI6W3sic2Nyb2xsLW1zIjp3KCl9XSwic2Nyb2xsLW1lIjpbeyJzY3JvbGwtbWUiOncoKX1dLCJzY3JvbGwtbWJzIjpbeyJzY3JvbGwtbWJzIjp3KCl9XSwic2Nyb2xsLW1iZSI6W3sic2Nyb2xsLW1iZSI6dygpfV0sInNjcm9sbC1tdCI6W3sic2Nyb2xsLW10Ijp3KCl9XSwic2Nyb2xsLW1yIjpbeyJzY3JvbGwtbXIiOncoKX1dLCJzY3JvbGwtbWIiOlt7InNjcm9sbC1tYiI6dygpfV0sInNjcm9sbC1tbCI6W3sic2Nyb2xsLW1sIjp3KCl9XSwic2Nyb2xsLXAiOlt7InNjcm9sbC1wIjp3KCl9XSwic2Nyb2xsLXB4IjpbeyJzY3JvbGwtcHgiOncoKX1dLCJzY3JvbGwtcHkiOlt7InNjcm9sbC1weSI6dygpfV0sInNjcm9sbC1wcyI6W3sic2Nyb2xsLXBzIjp3KCl9XSwic2Nyb2xsLXBlIjpbeyJzY3JvbGwtcGUiOncoKX1dLCJzY3JvbGwtcGJzIjpbeyJzY3JvbGwtcGJzIjp3KCl9XSwic2Nyb2xsLXBiZSI6W3sic2Nyb2xsLXBiZSI6dygpfV0sInNjcm9sbC1wdCI6W3sic2Nyb2xsLXB0Ijp3KCl9XSwic2Nyb2xsLXByIjpbeyJzY3JvbGwtcHIiOncoKX1dLCJzY3JvbGwtcGIiOlt7InNjcm9sbC1wYiI6dygpfV0sInNjcm9sbC1wbCI6W3sic2Nyb2xsLXBsIjp3KCl9XSwic25hcC1hbGlnbiI6W3tzbmFwOltgc3RhcnRgLGBlbmRgLGBjZW50ZXJgLGBhbGlnbi1ub25lYF19XSwic25hcC1zdG9wIjpbe3NuYXA6W2Bub3JtYWxgLGBhbHdheXNgXX1dLCJzbmFwLXR5cGUiOlt7c25hcDpbYG5vbmVgLGB4YCxgeWAsYGJvdGhgXX1dLCJzbmFwLXN0cmljdG5lc3MiOlt7c25hcDpbYG1hbmRhdG9yeWAsYHByb3hpbWl0eWBdfV0sdG91Y2g6W3t0b3VjaDpbYGF1dG9gLGBub25lYCxgbWFuaXB1bGF0aW9uYF19XSwidG91Y2gteCI6W3sidG91Y2gtcGFuIjpbYHhgLGBsZWZ0YCxgcmlnaHRgXX1dLCJ0b3VjaC15IjpbeyJ0b3VjaC1wYW4iOltgeWAsYHVwYCxgZG93bmBdfV0sInRvdWNoLXB6IjpbYHRvdWNoLXBpbmNoLXpvb21gXSxzZWxlY3Q6W3tzZWxlY3Q6W2Bub25lYCxgdGV4dGAsYGFsbGAsYGF1dG9gXX1dLCJ3aWxsLWNoYW5nZSI6W3sid2lsbC1jaGFuZ2UiOltgYXV0b2AsYHNjcm9sbGAsYGNvbnRlbnRzYCxgdHJhbnNmb3JtYCxYLFldfV0sZmlsbDpbe2ZpbGw6W2Bub25lYCwuLi5EKCldfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbSixNdixUdixFdl19XSxzdHJva2U6W3tzdHJva2U6W2Bub25lYCwuLi5EKCldfV0sImZvcmNlZC1jb2xvci1hZGp1c3QiOlt7ImZvcmNlZC1jb2xvci1hZGp1c3QiOltgYXV0b2AsYG5vbmVgXX1dfSxjb25mbGljdGluZ0NsYXNzR3JvdXBzOnsiY29udGFpbmVyLW5hbWVkIjpbYGNvbnRhaW5lci10eXBlYF0sb3ZlcmZsb3c6W2BvdmVyZmxvdy14YCxgb3ZlcmZsb3cteWBdLG92ZXJzY3JvbGw6W2BvdmVyc2Nyb2xsLXhgLGBvdmVyc2Nyb2xsLXlgXSxpbnNldDpbYGluc2V0LXhgLGBpbnNldC15YCxgaW5zZXQtYnNgLGBpbnNldC1iZWAsYHN0YXJ0YCxgZW5kYCxgdG9wYCxgcmlnaHRgLGBib3R0b21gLGBsZWZ0YF0sImluc2V0LXgiOltgcmlnaHRgLGBsZWZ0YF0sImluc2V0LXkiOltgdG9wYCxgYm90dG9tYF0sZmxleDpbYGJhc2lzYCxgZ3Jvd2AsYHNocmlua2BdLGdhcDpbYGdhcC14YCxgZ2FwLXlgXSxwOltgcHhgLGBweWAsYHBzYCxgcGVgLGBwYnNgLGBwYmVgLGBwdGAsYHByYCxgcGJgLGBwbGBdLHB4OltgcHJgLGBwbGBdLHB5OltgcHRgLGBwYmBdLG06W2BteGAsYG15YCxgbXNgLGBtZWAsYG1ic2AsYG1iZWAsYG10YCxgbXJgLGBtYmAsYG1sYF0sbXg6W2BtcmAsYG1sYF0sbXk6W2BtdGAsYG1iYF0sc2l6ZTpbYHdgLGBoYF0sImZvbnQtc2l6ZSI6W2BsZWFkaW5nYF0sImZ2bi1ub3JtYWwiOltgZnZuLW9yZGluYWxgLGBmdm4tc2xhc2hlZC16ZXJvYCxgZnZuLWZpZ3VyZWAsYGZ2bi1zcGFjaW5nYCxgZnZuLWZyYWN0aW9uYF0sImZ2bi1vcmRpbmFsIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1maWd1cmUiOltgZnZuLW5vcm1hbGBdLCJmdm4tc3BhY2luZyI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1mcmFjdGlvbiI6W2Bmdm4tbm9ybWFsYF0sImxpbmUtY2xhbXAiOltgZGlzcGxheWAsYG92ZXJmbG93YF0scm91bmRlZDpbYHJvdW5kZWQtc2AsYHJvdW5kZWQtZWAsYHJvdW5kZWQtdGAsYHJvdW5kZWQtcmAsYHJvdW5kZWQtYmAsYHJvdW5kZWQtbGAsYHJvdW5kZWQtc3NgLGByb3VuZGVkLXNlYCxgcm91bmRlZC1lZWAsYHJvdW5kZWQtZXNgLGByb3VuZGVkLXRsYCxgcm91bmRlZC10cmAsYHJvdW5kZWQtYnJgLGByb3VuZGVkLWJsYF0sInJvdW5kZWQtcyI6W2Byb3VuZGVkLXNzYCxgcm91bmRlZC1lc2BdLCJyb3VuZGVkLWUiOltgcm91bmRlZC1zZWAsYHJvdW5kZWQtZWVgXSwicm91bmRlZC10IjpbYHJvdW5kZWQtdGxgLGByb3VuZGVkLXRyYF0sInJvdW5kZWQtciI6W2Byb3VuZGVkLXRyYCxgcm91bmRlZC1icmBdLCJyb3VuZGVkLWIiOltgcm91bmRlZC1icmAsYHJvdW5kZWQtYmxgXSwicm91bmRlZC1sIjpbYHJvdW5kZWQtdGxgLGByb3VuZGVkLWJsYF0sImJvcmRlci1zcGFjaW5nIjpbYGJvcmRlci1zcGFjaW5nLXhgLGBib3JkZXItc3BhY2luZy15YF0sImJvcmRlci13IjpbYGJvcmRlci13LXhgLGBib3JkZXItdy15YCxgYm9yZGVyLXctc2AsYGJvcmRlci13LWVgLGBib3JkZXItdy1ic2AsYGJvcmRlci13LWJlYCxgYm9yZGVyLXctdGAsYGJvcmRlci13LXJgLGBib3JkZXItdy1iYCxgYm9yZGVyLXctbGBdLCJib3JkZXItdy14IjpbYGJvcmRlci13LXJgLGBib3JkZXItdy1sYF0sImJvcmRlci13LXkiOltgYm9yZGVyLXctdGAsYGJvcmRlci13LWJgXSwiYm9yZGVyLWNvbG9yIjpbYGJvcmRlci1jb2xvci14YCxgYm9yZGVyLWNvbG9yLXlgLGBib3JkZXItY29sb3Itc2AsYGJvcmRlci1jb2xvci1lYCxgYm9yZGVyLWNvbG9yLWJzYCxgYm9yZGVyLWNvbG9yLWJlYCxgYm9yZGVyLWNvbG9yLXRgLGBib3JkZXItY29sb3ItcmAsYGJvcmRlci1jb2xvci1iYCxgYm9yZGVyLWNvbG9yLWxgXSwiYm9yZGVyLWNvbG9yLXgiOltgYm9yZGVyLWNvbG9yLXJgLGBib3JkZXItY29sb3ItbGBdLCJib3JkZXItY29sb3IteSI6W2Bib3JkZXItY29sb3ItdGAsYGJvcmRlci1jb2xvci1iYF0sdHJhbnNsYXRlOltgdHJhbnNsYXRlLXhgLGB0cmFuc2xhdGUteWAsYHRyYW5zbGF0ZS1ub25lYF0sInRyYW5zbGF0ZS1ub25lIjpbYHRyYW5zbGF0ZWAsYHRyYW5zbGF0ZS14YCxgdHJhbnNsYXRlLXlgLGB0cmFuc2xhdGUtemBdLCJzY3JvbGwtbSI6W2BzY3JvbGwtbXhgLGBzY3JvbGwtbXlgLGBzY3JvbGwtbXNgLGBzY3JvbGwtbWVgLGBzY3JvbGwtbWJzYCxgc2Nyb2xsLW1iZWAsYHNjcm9sbC1tdGAsYHNjcm9sbC1tcmAsYHNjcm9sbC1tYmAsYHNjcm9sbC1tbGBdLCJzY3JvbGwtbXgiOltgc2Nyb2xsLW1yYCxgc2Nyb2xsLW1sYF0sInNjcm9sbC1teSI6W2BzY3JvbGwtbXRgLGBzY3JvbGwtbWJgXSwic2Nyb2xsLXAiOltgc2Nyb2xsLXB4YCxgc2Nyb2xsLXB5YCxgc2Nyb2xsLXBzYCxgc2Nyb2xsLXBlYCxgc2Nyb2xsLXBic2AsYHNjcm9sbC1wYmVgLGBzY3JvbGwtcHRgLGBzY3JvbGwtcHJgLGBzY3JvbGwtcGJgLGBzY3JvbGwtcGxgXSwic2Nyb2xsLXB4IjpbYHNjcm9sbC1wcmAsYHNjcm9sbC1wbGBdLCJzY3JvbGwtcHkiOltgc2Nyb2xsLXB0YCxgc2Nyb2xsLXBiYF0sdG91Y2g6W2B0b3VjaC14YCxgdG91Y2gteWAsYHRvdWNoLXB6YF0sInRvdWNoLXgiOltgdG91Y2hgXSwidG91Y2gteSI6W2B0b3VjaGBdLCJ0b3VjaC1weiI6W2B0b3VjaGBdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6eyJmb250LXNpemUiOltgbGVhZGluZ2BdfSxwb3N0Zml4TG9va3VwQ2xhc3NHcm91cHM6W2Bjb250YWluZXItdHlwZWBdLG9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzOltgKmAsYCoqYCxgYWZ0ZXJgLGBiYWNrZHJvcGAsYGJlZm9yZWAsYGRldGFpbHMtY29udGVudGAsYGZpbGVgLGBmaXJzdC1sZXR0ZXJgLGBmaXJzdC1saW5lYCxgbWFya2VyYCxgcGxhY2Vob2xkZXJgLGBzZWxlY3Rpb25gXX19KTtmdW5jdGlvbiBaKC4uLmUpe3JldHVybiBZdih4XyhlKSl9dmFyIFh2PUYoe19fbmFtZTpgQWxlcnRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50Ont9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBhbGVydGAsY2xhc3M6TyhOKFopKE4oJHYpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpKSxyb2xlOmBhbGVydGB9LFtJKG4uJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxadj1GKHtfX25hbWU6YEFsZXJ0RGVzY3JpcHRpb25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTihaKShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20gdGV4dC1iYWxhbmNlIG1kOnRleHQtcHJldHR5IFsmX3A6bm90KDpsYXN0LWNoaWxkKV06bWItNCBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksUXY9Rih7X19uYW1lOmBBbGVydFRpdGxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGFsZXJ0LXRpdGxlYCxjbGFzczpPKE4oWikoYGZvbnQtbWVkaXVtIGdyb3VwLWhhcy1bPnN2Z10vYWxlcnQ6Y29sLXN0YXJ0LTIgY24tZm9udC1oZWFkaW5nIFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSwkdj13XyhgZ3JpZCBnYXAtMC41IHJvdW5kZWQtbGcgYm9yZGVyIHB4LTIuNSBweS0yIHRleHQtbGVmdCB0ZXh0LXNtIGhhcy1kYXRhLVtzbG90PWFsZXJ0LWFjdGlvbl06cmVsYXRpdmUgaGFzLWRhdGEtW3Nsb3Q9YWxlcnQtYWN0aW9uXTpwci0xOCBoYXMtWz5zdmddOmdyaWQtY29scy1bYXV0b18xZnJdIGhhcy1bPnN2Z106Z2FwLXgtMiAqOltzdmddOnJvdy1zcGFuLTIgKjpbc3ZnXTp0cmFuc2xhdGUteS0wLjUgKjpbc3ZnXTp0ZXh0LWN1cnJlbnQgKjpbc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9hbGVydCByZWxhdGl2ZSB3LWZ1bGxgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YHRleHQtZGVzdHJ1Y3RpdmUgYmctY2FyZCAqOmRhdGEtW3Nsb3Q9YWxlcnQtZGVzY3JpcHRpb25dOnRleHQtZGVzdHJ1Y3RpdmUvOTAgKjpbc3ZnXTp0ZXh0LWN1cnJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiBleShlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgP2AnJHtlfSdgOm5ldyBpeSgpLnNlcmlhbGl6ZShlKX12YXIgdHk9YCBfLSw7OiE/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/V3kodCk6e307cmV0dXJuIFcoKCk9Pih7Li4ubi52YWx1ZSwuLi5yfSkpfXZhciBKeT0wO2Z1bmN0aW9uIFl5KGUsdD1gcmVrYWApe2lmKGUpcmV0dXJuIGU7bGV0IG4scj1WeSh7dXNlSWQ6dm9pZCAwfSk7cmV0dXJuIG49ci51c2VJZD9yLnVzZUlkKCk6YHVzZUlkYGluIHh1P2FpPy4oKTpgJHsrK0p5fWAsdD9gJHt0fS0ke259YDpufWZ1bmN0aW9uIFh5KGUsdCl7bGV0IG49TShlKTtmdW5jdGlvbiByKGUpe3JldHVybiB0W24udmFsdWVdW2VdPz9uLnZhbHVlfXJldHVybntzdGF0ZTpuLGRpc3BhdGNoOmU9PntuLnZhbHVlPXIoZSl9fX1mdW5jdGlvbiBaeShlLHQpe2xldCBuPU0oe30pLHI9TShgbm9uZWApLGk9TShlKSxhPWUudmFsdWU/YG1vdW50ZWRgOmB1bm1vdW50ZWRgLG8scz10LnZhbHVlPy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz9EeSx7c3RhdGU6YyxkaXNwYXRjaDpsfT1YeShhLHttb3VudGVkOntVTk1PVU5UOmB1bm1vdW50ZWRgLEFOSU1BVElPTl9PVVQ6YHVubW91bnRTdXNwZW5kZWRgfSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDpgbW91bnRlZGAsQU5JTUFUSU9OX0VORDpgdW5tb3VudGVkYH0sdW5tb3VudGVkOntNT1VOVDpgbW91bnRlZGB9fSksdT1lPT57aWYoZnkpe2xldCBuPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KTt0LnZhbHVlPy5kaXNwYXRjaEV2ZW50KG4pfX07RXIoZSxhc3luYyhlLGkpPT57bGV0IGE9aSE9PWU7aWYoYXdhaXQgUW4oKSxhKXtsZXQgYT1yLnZhbHVlLG89UXkodC52YWx1ZSk7ZT8obChgTU9VTlRgKSx1KGBlbnRlcmApLG89PT1gbm9uZWAmJnUoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8obChgVU5NT1VOVGApLHUoYGxlYXZlYCksdShgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGwoYEFOSU1BVElPTl9PVVRgKSx1KGBsZWF2ZWApKToobChgVU5NT1VOVGApLHUoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBkPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPVF5KHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9Yy52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKHUoYGFmdGVyLSR7YX1gKSxsKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmbChgQU5JTUFUSU9OX0VORGApfSxmPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPVF5KHQudmFsdWUpKX0scD1Fcih0LChlLHQpPT57ZT8obi52YWx1ZT1nZXRDb21wdXRlZFN0eWxlKGUpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxkKSxlLmFkZEV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpOihsKGBBTklNQVRJT05fRU5EYCksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbnN0YXJ0YCxmKSx0Py5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpfSx7aW1tZWRpYXRlOiEwfSksbT1FcihjLCgpPT57bGV0IGU9UXkodC52YWx1ZSk7ci52YWx1ZT1jLnZhbHVlPT09YG1vdW50ZWRgP2U6YG5vbmVgfSk7cmV0dXJuIHRhKCgpPT57cCgpLG0oKSx0LnZhbHVlJiYodC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsZiksdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pfSkse2lzUHJlc2VudDpXKCgpPT5bYG1vdW50ZWRgLGB1bm1vdW50U3VzcGVuZGVkYF0uaW5jbHVkZXMoYy52YWx1ZSkpfX1mdW5jdGlvbiBReShlKXtyZXR1cm4gZSYmZ2V0Q29tcHV0ZWRTdHlsZShlKS5hbmltYXRpb25OYW1lfHxgbm9uZWB9dmFyICR5PUYoe25hbWU6YFByZXNlbmNlYCxwcm9wczp7cHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59fSxzbG90czp7fSxzZXR1cChlLHtzbG90czp0LGV4cG9zZTpufSl7bGV0e3ByZXNlbnQ6cixmb3JjZU1vdW50Oml9PXluKGUpLGE9TSgpLHtpc1ByZXNlbnQ6b309WnkocixhKTtuKHtwcmVzZW50Om99KTtsZXQgcz10LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pO3M9THkoc3x8W10pO2xldCBjPUZzKCk7aWYocyYmcz8ubGVuZ3RoPjEpe2xldCBlPWM/LnBhcmVudD8udHlwZS5uYW1lP2A8JHtjLnBhcmVudC50eXBlLm5hbWV9IC8+YDpgY29tcG9uZW50YDt0aHJvdyBFcnJvcihbYERldGVjdGVkIGFuIGludmFsaWQgY2hpbGRyZW4gZm9yIFxgJHtlfVxgIGZvciAgXGBQcmVzZW5jZVxgIGNvbXBvbmVudC5gLGBgLCJOb3RlOiBQcmVzZW5jZSB3b3JrcyBzaW1pbGFybHkgdG8gYHYtaWZgIGRpcmVjdGx5LCBidXQgaXQgd2FpdHMgZm9yIGFuaW1hdGlvbi90cmFuc2l0aW9uIHRvIGZpbmlzaGVkIGJlZm9yZSB1bm1vdW50aW5nLiBTbyBpdCBleHBlY3Qgb25seSBvbmUgZGlyZWN0IGNoaWxkIG9mIHZhbGlkIFZOb2RlIHR5cGUuIixgWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6YCxbIlByb3ZpZGUgYSBzaW5nbGUgY2hpbGQgZWxlbWVudCBzbyB0aGF0IGBwcmVzZW5jZWAgZGlyZWN0aXZlIGF0dGFjaCBjb3JyZWN0bHkuIixgRW5zdXJlIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiBhY3R1YWwgZWxlbWVudCBpbnN0ZWFkIG9mIGEgcmF3IHRleHQgbm9kZSBvciBjb21tZW50IG5vZGUuYF0ubWFwKGU9PmAgIC0gJHtlfWApLmpvaW4oYApgKV0uam9pbihgCmApKX1yZXR1cm4oKT0+aS52YWx1ZXx8ci52YWx1ZXx8by52YWx1ZT90Yyh0LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pWzBdLHtyZWY6ZT0+e2xldCB0PU95KGUpO3JldHVybiB0Py5oYXNBdHRyaWJ1dGU9PT12b2lkIDB8fCh0Py5oYXNBdHRyaWJ1dGUoYGRhdGEtcmVrYS1wb3BwZXItY29udGVudC13cmFwcGVyYCk/YS52YWx1ZT10LmZpcnN0RWxlbWVudENoaWxkOmEudmFsdWU9dCksdH19KTpudWxsfX0pLGViPUYoe25hbWU6YFByaW1pdGl2ZVNsb3RgLGluaGVyaXRBdHRyczohMSxzZXR1cChlLHthdHRyczp0LHNsb3RzOm59KXtyZXR1cm4oKT0+e2lmKCFuLmRlZmF1bHQpcmV0dXJuIG51bGw7bGV0IGU9THkobi5kZWZhdWx0KCkpLHI9ZS5maW5kSW5kZXgoZT0+ZS50eXBlIT09Y3MpO2lmKHI9PT0tMSlyZXR1cm4gZTtsZXQgaT1lW3JdO2RlbGV0ZSBpLnByb3BzPy5yZWY7bGV0IGE9aS5wcm9wcz9rcyh0LGkucHJvcHMpOnQsbz1Dcyh7Li4uaSxwcm9wczp7fX0sYSk7cmV0dXJuIGUubGVuZ3RoPT09MT9vOihlW3JdPW8sZSl9fX0pLHRiPVtgYXJlYWAsYGltZ2AsYGlucHV0YF0sbmI9Rih7bmFtZTpgUHJpbWl0aXZlYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhczp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpgZGl2YH19LHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe2xldCByPWUuYXNDaGlsZD9gdGVtcGxhdGVgOmUuYXM7cmV0dXJuIHR5cGVvZiByPT1gc3RyaW5nYCYmdGIuaW5jbHVkZXMocik/KCk9PnRjKHIsdCk6cj09PWB0ZW1wbGF0ZWA/KCk9PnRjKGViLHQse2RlZmF1bHQ6bi5kZWZhdWx0fSk6KCk9PnRjKGUuYXMsdCx7ZGVmYXVsdDpuLmRlZmF1bHR9KX19KTtmdW5jdGlvbiByYigpe2xldCBlPU0oKTtyZXR1cm57cHJpbWl0aXZlRWxlbWVudDplLGN1cnJlbnRFbGVtZW50OlcoKCk9PltgI3RleHRgLGAjY29tbWVudGBdLmluY2x1ZGVzKGUudmFsdWU/LiRlbC5ub2RlTmFtZSk/ZS52YWx1ZT8uJGVsLm5leHRFbGVtZW50U2libGluZzpPeShlKSl9fXZhcltpYixhYl09b3koYENvbGxhcHNpYmxlUm9vdGApLG9iPUYoe19fbmFtZTpgQ29sbGFwc2libGVSb290YCxwcm9wczp7ZGVmYXVsdE9wZW46e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxvcGVuOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTpvcGVuYF0sc2V0dXAoZSx7ZXhwb3NlOnQsZW1pdDpufSl7bGV0IHI9ZSxpPUl5KHIsYG9wZW5gLG4se2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRPcGVuLHBhc3NpdmU6ci5vcGVuPT09dm9pZCAwfSkse2Rpc2FibGVkOmEsdW5tb3VudE9uSGlkZTpvfT15bihyKTtyZXR1cm4gYWIoe2NvbnRlbnRJZDpgYCxkaXNhYmxlZDphLG9wZW46aSx1bm1vdW50T25IaWRlOm8sb25PcGVuVG9nZ2xlOigpPT57YS52YWx1ZXx8KGkudmFsdWU9IWkudmFsdWUpfX0pLHQoe29wZW46aX0pLEd5KCksKGUsdCk9PihSKCksQihOKG5iKSx7YXM6ZS5hcywiYXMtY2hpbGQiOnIuYXNDaGlsZCwiZGF0YS1zdGF0ZSI6TihpKT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOk4oYSk/YGA6dm9pZCAwfSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGAse29wZW46TihpKX0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYF0pKX19KSxzYj1GKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBDb2xsYXBzaWJsZUNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgY29udGVudEZvdW5kYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1pYigpO2kuY29udGVudElkfHw9WXkodm9pZCAwLGByZWthLWNvbGxhcHNpYmxlLWNvbnRlbnRgKTtsZXQgYT1NKCkse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT1HeSgpLGM9TSgwKSxsPU0oMCksdT1XKCgpPT5pLm9wZW4udmFsdWUpLGQ9TSh1LnZhbHVlKSxmPU0oKTtFcigoKT0+W3UudmFsdWUsYS52YWx1ZT8ucHJlc2VudF0sYXN5bmMoKT0+e2F3YWl0IFFuKCk7bGV0IGU9cy52YWx1ZTtpZighZSlyZXR1cm47Zi52YWx1ZT1mLnZhbHVlfHx7dHJhbnNpdGlvbkR1cmF0aW9uOmUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLGFuaW1hdGlvbk5hbWU6ZS5zdHlsZS5hbmltYXRpb25OYW1lfSxlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gMHNgLGUuc3R5bGUuYW5pbWF0aW9uTmFtZT1gbm9uZWA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsLnZhbHVlPXQuaGVpZ2h0LGMudmFsdWU9dC53aWR0aCxkLnZhbHVlfHwoZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249Zi52YWx1ZS50cmFuc2l0aW9uRHVyYXRpb24sZS5zdHlsZS5hbmltYXRpb25OYW1lPWYudmFsdWUuYW5pbWF0aW9uTmFtZSl9LHtpbW1lZGlhdGU6ITB9KTtsZXQgcD1XKCgpPT5kLnZhbHVlJiZpLm9wZW4udmFsdWUpO3JldHVybiBaaSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2QudmFsdWU9ITF9KX0pLGt5KHMsYGJlZm9yZW1hdGNoYCxlPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57aS5vbk9wZW5Ub2dnbGUoKSxyKGBjb250ZW50Rm91bmRgKX0pfSksKGUsdCk9PihSKCksQihOKCR5KSx7cmVmX2tleTpgcHJlc2VudFJlZmAscmVmOmEscHJlc2VudDplLmZvcmNlTW91bnR8fE4oaSkub3Blbi52YWx1ZSwiZm9yY2UtbW91bnQiOiEwfSx7ZGVmYXVsdDpQKCh7cHJlc2VudDp0fSk9PltIKE4obmIpLGtzKGUuJGF0dHJzLHtpZDpOKGkpLmNvbnRlbnRJZCxyZWY6TihvKSwiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczplLmFzLGhpZGRlbjp0P3ZvaWQgMDpOKGkpLnVubW91bnRPbkhpZGUudmFsdWU/YGA6YHVudGlsLWZvdW5kYCwiZGF0YS1zdGF0ZSI6cC52YWx1ZT92b2lkIDA6TihpKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6TihpKS5kaXNhYmxlZD8udmFsdWU/YGA6dm9pZCAwLHN0eWxlOnsiLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0IjpgJHtsLnZhbHVlfXB4YCwiLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgiOmAke2MudmFsdWV9cHhgfX0pLHtkZWZhdWx0OlAoKCk9PlshTihpKS51bm1vdW50T25IaWRlLnZhbHVlfHx0P0koZS4kc2xvdHMsYGRlZmF1bHRgLHtrZXk6MH0pOlRzKGB2LWlmYCwhMCldKSxfOjJ9LDEwNDAsW2BpZGAsYGFzLWNoaWxkYCxgYXNgLGBoaWRkZW5gLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYHN0eWxlYF0pXSksXzozfSw4LFtgcHJlc2VudGBdKSl9fSksY2I9Rih7X19uYW1lOmBDb2xsYXBzaWJsZVRyaWdnZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWU7R3koKTtsZXQgbj1pYigpO3JldHVybihlLHIpPT4oUigpLEIoTihuYikse3R5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJhcmlhLWNvbnRyb2xzIjpOKG4pLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6TihuKS5vcGVuLnZhbHVlLCJkYXRhLXN0YXRlIjpOKG4pLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpOKG4pLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsZGlzYWJsZWQ6TihuKS5kaXNhYmxlZD8udmFsdWUsb25DbGljazpOKG4pLm9uT3BlblRvZ2dsZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHR5cGVgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1jb250cm9sc2AsYGFyaWEtZXhwYW5kZWRgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRpc2FibGVkYCxgb25DbGlja2BdKSl9fSk7ZnVuY3Rpb24gbGIoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KXtsZXQgcj1ufHx0O3JldHVybiBuIT09dm9pZCAwfHx0IT09dm9pZCAwP0FycmF5LmlzQXJyYXkocik/YG11bHRpcGxlYDpgc2luZ2xlYDplPz9gc2luZ2xlYH1mdW5jdGlvbiB1Yih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pe3JldHVybiBlfHxsYih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pfWZ1bmN0aW9uIGRiKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnR9KXtyZXR1cm4gdD09PXZvaWQgMD9lPT09YHNpbmdsZWA/dm9pZCAwOltdOnR9ZnVuY3Rpb24gZmIoZSx0KXtsZXQgbj1XKCgpPT51YihlKSkscj1JeShlLGBtb2RlbFZhbHVlYCx0LHtkZWZhdWx0VmFsdWU6ZGIoZSkscGFzc2l2ZTplLm1vZGVsVmFsdWU9PT12b2lkIDAsZGVlcDohMH0pO2Z1bmN0aW9uIGkoZSl7aWYobi52YWx1ZT09PWBzaW5nbGVgKXIudmFsdWU9YXkoZSxyLnZhbHVlKT92b2lkIDA6ZTtlbHNle2xldCB0PUFycmF5LmlzQXJyYXkoci52YWx1ZSk/Wy4uLnIudmFsdWV8fFtdXTpbci52YWx1ZV0uZmlsdGVyKEJvb2xlYW4pO2lmKGx5KHQsZSkpe2xldCBuPXQuZmluZEluZGV4KHQ9PmF5KHQsZSkpO3Quc3BsaWNlKG4sMSl9ZWxzZSB0LnB1c2goZSk7ci52YWx1ZT10fX1yZXR1cm57bW9kZWxWYWx1ZTpyLGNoYW5nZU1vZGVsVmFsdWU6aSxpc1NpbmdsZTpXKCgpPT5uLnZhbHVlPT09YHNpbmdsZWApfX12YXJbcGIsbWJdPW95KGBBY2NvcmRpb25Sb290YCksaGI9Rih7X19uYW1lOmBBY2NvcmRpb25Sb290YCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG9yaWVudGF0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmB2ZXJ0aWNhbGB9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHR5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtkaXI6aSxkaXNhYmxlZDphLHVubW91bnRPbkhpZGU6b309eW4obikscz1VeShpKSx7bW9kZWxWYWx1ZTpjLGNoYW5nZU1vZGVsVmFsdWU6bCxpc1NpbmdsZTp1fT1mYihuLHIpLHtmb3J3YXJkUmVmOmQsY3VycmVudEVsZW1lbnQ6Zn09R3koKTtyZXR1cm4gbWIoe2Rpc2FibGVkOmEsZGlyZWN0aW9uOnMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixwYXJlbnRFbGVtZW50OmYsaXNTaW5nbGU6dSxjb2xsYXBzaWJsZTpuLmNvbGxhcHNpYmxlLG1vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmwsdW5tb3VudE9uSGlkZTpvfSksKGUsdCk9PihSKCksQihOKG5iKSx7cmVmOk4oZCksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk4oYyl9KV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgXSkpfX0pLGdiPWZ1bmN0aW9uKGUpe3JldHVybiBlLk9wZW49YG9wZW5gLGUuQ2xvc2VkPWBjbG9zZWRgLGV9KGdifHx7fSksW19iLHZiXT1veShgQWNjb3JkaW9uSXRlbWApLHliPUYoe19fbmFtZTpgQWNjb3JkaW9uSXRlbWAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlLHtleHBvc2U6dH0pe2xldCBuPWUscj1wYigpLGk9VygoKT0+ci5pc1NpbmdsZS52YWx1ZT9uLnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlOkFycmF5LmlzQXJyYXkoci5tb2RlbFZhbHVlLnZhbHVlKSYmci5tb2RlbFZhbHVlLnZhbHVlLmluY2x1ZGVzKG4udmFsdWUpKSxhPVcoKCk9PnIuZGlzYWJsZWQudmFsdWV8fG4uZGlzYWJsZWQpLG89VygoKT0+YS52YWx1ZT9gYDp2b2lkIDApLHM9VygoKT0+aS52YWx1ZT9nYi5PcGVuOmdiLkNsb3NlZCk7dCh7b3BlbjppLGRhdGFEaXNhYmxlZDpvfSk7bGV0e2N1cnJlbnRSZWY6YyxjdXJyZW50RWxlbWVudDpsfT1HeSgpO3ZiKHtvcGVuOmksZGF0YVN0YXRlOnMsZGlzYWJsZWQ6YSxkYXRhRGlzYWJsZWQ6byx0cmlnZ2VySWQ6YGAsY3VycmVudFJlZjpjLGN1cnJlbnRFbGVtZW50OmwsdmFsdWU6VygoKT0+bi52YWx1ZSl9KTtmdW5jdGlvbiB1KGUpe2xldCB0PWUudGFyZ2V0O2lmKEFycmF5LmZyb20oci5wYXJlbnRFbGVtZW50LnZhbHVlPy5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbV1gKT8/W10pLmZpbmRJbmRleChlPT5lPT09dCk9PT0tMSlyZXR1cm4gbnVsbDt6eShlLHQsci5wYXJlbnRFbGVtZW50LnZhbHVlLHthcnJvd0tleU9wdGlvbnM6ci5vcmllbnRhdGlvbixkaXI6ci5kaXJlY3Rpb24udmFsdWUsZm9jdXM6ITB9KX1yZXR1cm4oZSx0KT0+KFIoKSxCKE4ob2IpLHsiZGF0YS1vcmllbnRhdGlvbiI6TihyKS5vcmllbnRhdGlvbiwiZGF0YS1kaXNhYmxlZCI6by52YWx1ZSwiZGF0YS1zdGF0ZSI6cy52YWx1ZSxkaXNhYmxlZDphLnZhbHVlLG9wZW46aS52YWx1ZSxhczpuLmFzLCJhcy1jaGlsZCI6bi5hc0NoaWxkLCJ1bm1vdW50LW9uLWhpZGUiOm4udW5tb3VudE9uSGlkZT8/TihyKS51bm1vdW50T25IaWRlLnZhbHVlLG9uS2V5ZG93bjpzdSh1LFtgdXBgLGBkb3duYCxgbGVmdGAsYHJpZ2h0YCxgaG9tZWAsYGVuZGBdKX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHtvcGVuOmkudmFsdWV9KV0pLF86M30sOCxbYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYCxgb3BlbmAsYGFzYCxgYXMtY2hpbGRgLGB1bm1vdW50LW9uLWhpZGVgXSkpfX0pLGJiPUYoe19fbmFtZTpgQWNjb3JkaW9uQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXBiKCkscj1fYigpO3JldHVybiBHeSgpLChlLGkpPT4oUigpLEIoTihzYikse3JvbGU6YHJlZ2lvbmAsImFzLWNoaWxkIjp0LmFzQ2hpbGQsYXM6ZS5hcywiZm9yY2UtbW91bnQiOnQuZm9yY2VNb3VudCwiYXJpYS1sYWJlbGxlZGJ5IjpOKHIpLnRyaWdnZXJJZCwiZGF0YS1zdGF0ZSI6TihyKS5kYXRhU3RhdGUudmFsdWUsImRhdGEtZGlzYWJsZWQiOk4ocikuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpOKG4pLm9yaWVudGF0aW9uLHN0eWxlOnsiLS1yZWthLWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjpgdmFyKC0tcmVrYS1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoKWAsIi0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOmB2YXIoLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0KWB9LG9uQ29udGVudEZvdW5kOmlbMF18fD1lPT5OKG4pLmNoYW5nZU1vZGVsVmFsdWUoTihyKS52YWx1ZS52YWx1ZSl9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgZm9yY2UtbW91bnRgLGBhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSkpfX0pLHhiPUYoe19fbmFtZTpgQWNjb3JkaW9uSGVhZGVyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGgzYH19LHNldHVwKGUpe2xldCB0PWUsbj1wYigpLHI9X2IoKTtyZXR1cm4gR3koKSwoZSxpKT0+KFIoKSxCKE4obmIpLHthczp0LmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJkYXRhLW9yaWVudGF0aW9uIjpOKG4pLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjpOKHIpLmRhdGFTdGF0ZS52YWx1ZSwiZGF0YS1kaXNhYmxlZCI6TihyKS5kYXRhRGlzYWJsZWQudmFsdWV9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYF0pKX19KSxTYj1GKHtfX25hbWU6YEFjY29yZGlvblRyaWdnZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49cGIoKSxyPV9iKCk7ci50cmlnZ2VySWR8fD1ZeSh2b2lkIDAsYHJla2EtYWNjb3JkaW9uLXRyaWdnZXJgKTtmdW5jdGlvbiBpKCl7bGV0IGU9bi5pc1NpbmdsZS52YWx1ZSYmci5vcGVuLnZhbHVlJiYhbi5jb2xsYXBzaWJsZTtyLmRpc2FibGVkLnZhbHVlfHxlfHxuLmNoYW5nZU1vZGVsVmFsdWUoci52YWx1ZS52YWx1ZSl9cmV0dXJuKGUsYSk9PihSKCksQihOKGNiKSx7aWQ6TihyKS50cmlnZ2VySWQscmVmOk4ocikuY3VycmVudFJlZiwiZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbSI6YGAsYXM6dC5hcywiYXMtY2hpbGQiOnQuYXNDaGlsZCwiYXJpYS1kaXNhYmxlZCI6TihyKS5kaXNhYmxlZC52YWx1ZXx8dm9pZCAwLCJhcmlhLWV4cGFuZGVkIjpOKHIpLm9wZW4udmFsdWV8fCExLCJkYXRhLWRpc2FibGVkIjpOKHIpLmRhdGFEaXNhYmxlZC52YWx1ZSwiZGF0YS1vcmllbnRhdGlvbiI6TihuKS5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6TihyKS5kYXRhU3RhdGUudmFsdWUsZGlzYWJsZWQ6TihyKS5kaXNhYmxlZC52YWx1ZSxvbkNsaWNrOml9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BpZGAsYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWRpc2FibGVkYCxgYXJpYS1leHBhbmRlZGAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYF0pKX19KSxDYj1gZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbWA7ZnVuY3Rpb24gd2IoZT17fSl7bGV0e2tleTp0PWBgLGlzUHJvdmlkZXI6bj0hMX09ZSxyPWAke3R9Q29sbGVjdGlvblByb3ZpZGVyYCxpO24/KGk9e2NvbGxlY3Rpb25SZWY6TSgpLGl0ZW1NYXA6TShuZXcgTWFwKX0sdnIocixpKSk6aT15cihyKTtsZXQgYT0oZT0hMSk9PntsZXQgdD1pLmNvbGxlY3Rpb25SZWYudmFsdWU7aWYoIXQpcmV0dXJuW107bGV0IG49QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0NifV1gKSkscj1uZXcgTWFwKG4ubWFwKChlLHQpPT5bZSx0XSkpLGE9QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpLnNvcnQoKGUsdCk9PihyLmdldChlLnJlZik/Py0xKS0oci5nZXQodC5yZWYpPz8tMSkpO3JldHVybiBlP2E6YS5maWx0ZXIoZT0+ZS5yZWYuZGF0YXNldC5kaXNhYmxlZCE9PWBgKX0sbz1GKHtuYW1lOmBDb2xsZWN0aW9uU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse3Nsb3RzOnQsYXR0cnM6bn0pe2xldHtwcmltaXRpdmVFbGVtZW50OnIsY3VycmVudEVsZW1lbnQ6YX09cmIoKTtyZXR1cm4gRXIoYSwoKT0+e2kuY29sbGVjdGlvblJlZi52YWx1ZT1hLnZhbHVlfSksKCk9PnRjKGViLHtyZWY6ciwuLi5ufSx0KX19KSxzPUYoe25hbWU6YENvbGxlY3Rpb25JdGVtYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e3ZhbHVlOnt2YWxpZGF0b3I6KCk9PiEwfX0sc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1yYigpO3JldHVybiBDcih0PT57aWYoYS52YWx1ZSl7bGV0IG49c24oYS52YWx1ZSk7aS5pdGVtTWFwLnZhbHVlLnNldChuLHtyZWY6YS52YWx1ZSx2YWx1ZTplLnZhbHVlfSksdCgoKT0+aS5pdGVtTWFwLnZhbHVlLmRlbGV0ZShuKSl9fSksKCk9PnRjKGViLHsuLi5uLFtDYl06YGAscmVmOnJ9LHQpfX0pO3JldHVybntnZXRJdGVtczphLHJlYWN0aXZlSXRlbXM6VygoKT0+QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpKSxpdGVtTWFwU2l6ZTpXKCgpPT5pLml0ZW1NYXAudmFsdWUuc2l6ZSksQ29sbGVjdGlvblNsb3Q6byxDb2xsZWN0aW9uSXRlbTpzfX12YXIgVGI9YHJvdmluZ0ZvY3VzR3JvdXAub25FbnRyeUZvY3VzYCxFYj17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxEYj17QXJyb3dMZWZ0OmBwcmV2YCxBcnJvd1VwOmBwcmV2YCxBcnJvd1JpZ2h0OmBuZXh0YCxBcnJvd0Rvd246YG5leHRgLFBhZ2VVcDpgZmlyc3RgLEhvbWU6YGZpcnN0YCxQYWdlRG93bjpgbGFzdGAsRW5kOmBsYXN0YH07ZnVuY3Rpb24gT2IoZSx0KXtyZXR1cm4gdD09PWBydGxgP2U9PT1gQXJyb3dMZWZ0YD9gQXJyb3dSaWdodGA6ZT09PWBBcnJvd1JpZ2h0YD9gQXJyb3dMZWZ0YDplOmV9ZnVuY3Rpb24ga2IoZSx0LG4pe2xldCByPU9iKGUua2V5LG4pO2lmKCEodD09PWB2ZXJ0aWNhbGAmJltgQXJyb3dMZWZ0YCxgQXJyb3dSaWdodGBdLmluY2x1ZGVzKHIpKSYmISh0PT09YGhvcml6b250YWxgJiZbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhyKSkpcmV0dXJuIERiW3JdfWZ1bmN0aW9uIEFiKGUsdD0hMSl7bGV0IG49c3koKTtmb3IobGV0IHIgb2YgZSlpZihyPT09bnx8KHIuZm9jdXMoe3ByZXZlbnRTY3JvbGw6dH0pLHN5KCkhPT1uKSlyZXR1cm59ZnVuY3Rpb24gamIoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbTWIsTmJdPW95KGBSb3ZpbmdGb2N1c0dyb3VwYCksUGI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0dyb3VwYCxwcm9wczp7b3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sY3VycmVudFRhYlN0b3BJZDp7dHlwZTpbU3RyaW5nLG51bGxdLHJlcXVpcmVkOiExfSxkZWZhdWx0Q3VycmVudFRhYlN0b3BJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYGVudHJ5Rm9jdXNgLGB1cGRhdGU6Y3VycmVudFRhYlN0b3BJZGBdLHNldHVwKGUse2V4cG9zZTp0LGVtaXQ6bn0pe2xldCByPWUsaT1uLHtsb29wOmEsb3JpZW50YXRpb246byxkaXI6c309eW4ociksYz1VeShzKSxsPUl5KHIsYGN1cnJlbnRUYWJTdG9wSWRgLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRDdXJyZW50VGFiU3RvcElkLHBhc3NpdmU6ci5jdXJyZW50VGFiU3RvcElkPT09dm9pZCAwfSksdT1NKCExKSxkPU0oITEpLGY9TSgwKSx7Z2V0SXRlbXM6cCxDb2xsZWN0aW9uU2xvdDptfT13Yih7aXNQcm92aWRlcjohMH0pO2Z1bmN0aW9uIGgoZSl7bGV0IHQ9IWQudmFsdWU7aWYoZS5jdXJyZW50VGFyZ2V0JiZlLnRhcmdldD09PWUuY3VycmVudFRhcmdldCYmdCYmIXUudmFsdWUpe2xldCB0PW5ldyBDdXN0b21FdmVudChUYixFYik7aWYoZS5jdXJyZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQodCksaShgZW50cnlGb2N1c2AsdCksIXQuZGVmYXVsdFByZXZlbnRlZCl7bGV0IGU9cCgpLm1hcChlPT5lLnJlZikuZmlsdGVyKGU9PmUuZGF0YXNldC5kaXNhYmxlZCE9PWBgKTtBYihbZS5maW5kKGU9PmUuZ2V0QXR0cmlidXRlKGBkYXRhLWFjdGl2ZWApPT09YGApLGUuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1oaWdobGlnaHRlZGApPT09YGApLGUuZmluZChlPT5lLmlkPT09bC52YWx1ZSksLi4uZV0uZmlsdGVyKEJvb2xlYW4pLHIucHJldmVudFNjcm9sbE9uRW50cnlGb2N1cyl9fWQudmFsdWU9ITF9ZnVuY3Rpb24gZygpe3NldFRpbWVvdXQoKCk9PntkLnZhbHVlPSExfSwxKX1yZXR1cm4gdCh7Z2V0SXRlbXM6cH0pLE5iKHtsb29wOmEsZGlyOmMsb3JpZW50YXRpb246byxjdXJyZW50VGFiU3RvcElkOmwsb25JdGVtRm9jdXM6ZT0+e2wudmFsdWU9ZX0sb25JdGVtU2hpZnRUYWI6KCk9Pnt1LnZhbHVlPSEwfSxvbkZvY3VzYWJsZUl0ZW1BZGQ6KCk9PntmLnZhbHVlKyt9LG9uRm9jdXNhYmxlSXRlbVJlbW92ZTooKT0+e2YudmFsdWUtLX19KSwoZSx0KT0+KFIoKSxCKE4obSksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7dGFiaW5kZXg6dS52YWx1ZXx8Zi52YWx1ZT09PTA/LTE6MCwiZGF0YS1vcmllbnRhdGlvbiI6TihvKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGRpcjpOKGMpLHN0eWxlOntvdXRsaW5lOmBub25lYH0sb25Nb3VzZWRvd246dFswXXx8PWU9PmQudmFsdWU9ITAsb25Nb3VzZXVwOmcsb25Gb2N1czpoLG9uQmx1cjp0WzFdfHw9ZT0+dS52YWx1ZT0hMX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHRhYmluZGV4YCxgZGF0YS1vcmllbnRhdGlvbmAsYGFzYCxgYXMtY2hpbGRgLGBkaXJgXSldKSxfOjN9KSl9fSksRmI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0l0ZW1gLHByb3BzOnt0YWJTdG9wSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxmb2N1c2FibGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxsb3dTaGlmdEtleTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49TWIoKSxyPVl5KCksaT1XKCgpPT50LnRhYlN0b3BJZHx8ciksYT1XKCgpPT5uLmN1cnJlbnRUYWJTdG9wSWQudmFsdWU9PT1pLnZhbHVlKSx7Z2V0SXRlbXM6byxDb2xsZWN0aW9uSXRlbTpzfT13YigpO1ppKCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtQWRkKCl9KSx0YSgoKT0+e3QuZm9jdXNhYmxlJiZuLm9uRm9jdXNhYmxlSXRlbVJlbW92ZSgpfSksRXIoKCk9PnQuZm9jdXNhYmxlLChlLHQpPT57ZSE9PXQmJihlP24ub25Gb2N1c2FibGVJdGVtQWRkKCk6bi5vbkZvY3VzYWJsZUl0ZW1SZW1vdmUoKSl9KTtmdW5jdGlvbiBjKGUpe2lmKGUua2V5PT09YFRhYmAmJmUuc2hpZnRLZXkpe24ub25JdGVtU2hpZnRUYWIoKTtyZXR1cm59aWYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQpcmV0dXJuO2xldCByPWtiKGUsbi5vcmllbnRhdGlvbi52YWx1ZSxuLmRpci52YWx1ZSk7aWYociE9PXZvaWQgMCl7aWYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5fHwhdC5hbGxvd1NoaWZ0S2V5JiZlLnNoaWZ0S2V5KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGk9Wy4uLm8oKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCldO2lmKHI9PT1gbGFzdGApaS5yZXZlcnNlKCk7ZWxzZSBpZihyPT09YHByZXZgfHxyPT09YG5leHRgKXtyPT09YHByZXZgJiZpLnJldmVyc2UoKTtsZXQgdD1pLmluZGV4T2YoZS5jdXJyZW50VGFyZ2V0KTtpPW4ubG9vcC52YWx1ZT9qYihpLHQrMSk6aS5zbGljZSh0KzEpfVFuKCgpPT5BYihpKSl9fXJldHVybihlLHQpPT4oUigpLEIoTihzKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4obmIpLHt0YWJpbmRleDphLnZhbHVlPzA6LTEsImRhdGEtb3JpZW50YXRpb24iOk4obikub3JpZW50YXRpb24udmFsdWUsImRhdGEtYWN0aXZlIjplLmFjdGl2ZT9gYDp2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmUuZm9jdXNhYmxlP3ZvaWQgMDpgYCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLG9uTW91c2Vkb3duOnRbMF18fD10PT57ZS5mb2N1c2FibGU/TihuKS5vbkl0ZW1Gb2N1cyhpLnZhbHVlKTp0LnByZXZlbnREZWZhdWx0KCl9LG9uRm9jdXM6dFsxXXx8PWU9Pk4obikub25JdGVtRm9jdXMoaS52YWx1ZSksb25LZXlkb3duOmN9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0YWJpbmRleGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWFjdGl2ZWAsYGRhdGEtZGlzYWJsZWRgLGBhc2AsYGFzLWNoaWxkYF0pXSksXzozfSkpfX0pLFtJYixMYl09b3koYFRhYnNSb290YCksUmI9Rih7X19uYW1lOmBUYWJzUm9vdGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaG9yaXpvbnRhbGB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFjdGl2YXRpb25Nb2RlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBhdXRvbWF0aWNgfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse29yaWVudGF0aW9uOmksdW5tb3VudE9uSGlkZTphLGRpcjpvfT15bihuKSxzPVV5KG8pO0d5KCk7bGV0IGM9SXkobixgbW9kZWxWYWx1ZWAscix7ZGVmYXVsdFZhbHVlOm4uZGVmYXVsdFZhbHVlLHBhc3NpdmU6bi5tb2RlbFZhbHVlPT09dm9pZCAwfSksbD1NKCksdT11bihuZXcgU2V0KTtyZXR1cm4gTGIoe21vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmU9PntjLnZhbHVlPWV9LG9yaWVudGF0aW9uOmksZGlyOnMsdW5tb3VudE9uSGlkZTphLGFjdGl2YXRpb25Nb2RlOm4uYWN0aXZhdGlvbk1vZGUsYmFzZUlkOll5KHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6bCxjb250ZW50SWRzOnUscmVnaXN0ZXJDb250ZW50OmU9Pnt1LnZhbHVlPW5ldyBTZXQoWy4uLnUudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldCh1LnZhbHVlKTt0LmRlbGV0ZShlKSx1LnZhbHVlPXR9fSksKGUsdCk9PihSKCksQihOKG5iKSx7ZGlyOk4ocyksImRhdGEtb3JpZW50YXRpb24iOk4oaSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk4oYyl9KV0pLF86M30sOCxbYGRpcmAsYGRhdGEtb3JpZW50YXRpb25gLGBhcy1jaGlsZGAsYGFzYF0pKX19KTtmdW5jdGlvbiB6YihlLHQpe3JldHVybmAke2V9LXRyaWdnZXItJHt0fWB9ZnVuY3Rpb24gQmIoZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBWYj1GKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bn09R3koKSxyPUliKCksaT1XKCgpPT56YihyLmJhc2VJZCx0LnZhbHVlKSksYT1XKCgpPT5CYihyLmJhc2VJZCx0LnZhbHVlKSksbz1XKCgpPT50LnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlKSxzPU0oby52YWx1ZSk7cmV0dXJuIFppKCgpPT57ci5yZWdpc3RlckNvbnRlbnQodC52YWx1ZSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cy52YWx1ZT0hMX0pfSksZWEoKCk9PntyLnVucmVnaXN0ZXJDb250ZW50KHQudmFsdWUpfSksKGUsdCk9PihSKCksQihOKCR5KSx7cHJlc2VudDplLmZvcmNlTW91bnR8fG8udmFsdWUsImZvcmNlLW1vdW50IjpgYH0se2RlZmF1bHQ6UCgoe3ByZXNlbnQ6dH0pPT5bSChOKG5iKSx7aWQ6YS52YWx1ZSxyZWY6TihuKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLHJvbGU6YHRhYnBhbmVsYCwiZGF0YS1zdGF0ZSI6by52YWx1ZT9gYWN0aXZlYDpgaW5hY3RpdmVgLCJkYXRhLW9yaWVudGF0aW9uIjpOKHIpLm9yaWVudGF0aW9uLnZhbHVlLCJhcmlhLWxhYmVsbGVkYnkiOmkudmFsdWUsaGlkZGVuOiF0LHRhYmluZGV4OmAwYCxzdHlsZTpnZSh7YW5pbWF0aW9uRHVyYXRpb246cy52YWx1ZT9gMHNgOnZvaWQgMH0pfSx7ZGVmYXVsdDpQKCgpPT5bIU4ocikudW5tb3VudE9uSGlkZS52YWx1ZXx8dD9JKGUuJHNsb3RzLGBkZWZhdWx0YCx7a2V5OjB9KTpUcyhgdi1pZmAsITApXSksXzoyfSwxMDMyLFtgaWRgLGBhcy1jaGlsZGAsYGFzYCxgZGF0YS1zdGF0ZWAsYGRhdGEtb3JpZW50YXRpb25gLGBhcmlhLWxhYmVsbGVkYnlgLGBoaWRkZW5gLGBzdHlsZWBdKV0pLF86M30sOCxbYHByZXNlbnRgXSkpfX0pLEhiPUYoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0e2xvb3A6dH09eW4oZSkse2ZvcndhcmRSZWY6bixjdXJyZW50RWxlbWVudDpyfT1HeSgpLGk9SWIoKTtyZXR1cm4gaS50YWJzTGlzdD1yLChlLHIpPT4oUigpLEIoTihQYikseyJhcy1jaGlsZCI6YGAsb3JpZW50YXRpb246TihpKS5vcmllbnRhdGlvbi52YWx1ZSxkaXI6TihpKS5kaXIudmFsdWUsbG9vcDpOKHQpfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7cmVmOk4obikscm9sZTpgdGFibGlzdGAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcywiYXJpYS1vcmllbnRhdGlvbiI6TihpKS5vcmllbnRhdGlvbi52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgLGBhcmlhLW9yaWVudGF0aW9uYF0pXSksXzozfSw4LFtgb3JpZW50YXRpb25gLGBkaXJgLGBsb29wYF0pKX19KSxVYj1GKHtfX25hbWU6YFRhYnNUcmlnZ2VyYCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZSx7Zm9yd2FyZFJlZjpufT1HeSgpLHI9SWIoKSxpPVcoKCk9PnpiKHIuYmFzZUlkLHQudmFsdWUpKSxhPVcoKCk9PnIuY29udGVudElkcy52YWx1ZS5oYXModC52YWx1ZSk/QmIoci5iYXNlSWQsdC52YWx1ZSk6dm9pZCAwKSxvPVcoKCk9PnQudmFsdWU9PT1yLm1vZGVsVmFsdWUudmFsdWUpO3JldHVybihlLHQpPT4oUigpLEIoTihGYikseyJhcy1jaGlsZCI6YGAsZm9jdXNhYmxlOiFlLmRpc2FibGVkLGFjdGl2ZTpvLnZhbHVlfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7aWQ6aS52YWx1ZSxyZWY6TihuKSxyb2xlOmB0YWJgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLXNlbGVjdGVkIjpvLnZhbHVlP2B0cnVlYDpgZmFsc2VgLCJhcmlhLWNvbnRyb2xzIjphLnZhbHVlLCJkYXRhLXN0YXRlIjpvLnZhbHVlP2BhY3RpdmVgOmBpbmFjdGl2ZWAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwiZGF0YS1kaXNhYmxlZCI6ZS5kaXNhYmxlZD9gYDp2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOk4ocikub3JpZW50YXRpb24udmFsdWUsb25Nb3VzZWRvd246dFswXXx8PWF1KHQ9PnshZS5kaXNhYmxlZCYmdC5jdHJsS2V5PT09ITE/TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpOnQucHJldmVudERlZmF1bHQoKX0sW2BsZWZ0YF0pLG9uS2V5ZG93bjp0WzFdfHw9c3UodD0+TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpLFtgZW50ZXJgLGBzcGFjZWBdKSxvbkZvY3VzOnRbMl18fD0oKT0+e2xldCB0PU4ocikuYWN0aXZhdGlvbk1vZGUhPT1gbWFudWFsYDshby52YWx1ZSYmIWUuZGlzYWJsZWQmJnQmJk4ocikuY2hhbmdlTW9kZWxWYWx1ZShlLnZhbHVlKX19LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BpZGAsYHR5cGVgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1zZWxlY3RlZGAsYGFyaWEtY29udHJvbHNgLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1vcmllbnRhdGlvbmBdKV0pLF86M30sOCxbYGZvY3VzYWJsZWAsYGFjdGl2ZWBdKSl9fSksV2I9Rih7X19uYW1lOmBCdXR0b25gLHByb3BzOnt2YXJpYW50Ont9LHNpemU6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7ZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9PihSKCksQihOKG5iKSx7ImRhdGEtc2xvdCI6YGJ1dHRvbmAsImRhdGEtdmFyaWFudCI6ZS52YXJpYW50LCJkYXRhLXNpemUiOmUuc2l6ZSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGNsYXNzOk8oTihaKShOKEdiKSh7dmFyaWFudDplLnZhcmlhbnQsc2l6ZTplLnNpemV9KSx0LmNsYXNzKSl9LHtkZWZhdWx0OlAoKCk9PltJKG4uJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BkYXRhLXZhcmlhbnRgLGBkYXRhLXNpemVgLGBhc2AsYGFzLWNoaWxkYCxgY2xhc3NgXSkpfX0pLEdiPXdfKGBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IGJnLWNsaXAtcGFkZGluZyB0ZXh0LXNtIGZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgYWN0aXZlOm5vdC1hcmlhLVtoYXNwb3B1cF06dHJhbnNsYXRlLXktcHggWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9idXR0b24gaW5saW5lLWZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tYWxsIG91dGxpbmUtbm9uZSBzZWxlY3Qtbm9uZSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MGAsb3V0bGluZTpgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsc2Vjb25kYXJ5OmBiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAgYXJpYS1leHBhbmRlZDpiZy1zZWNvbmRhcnkgYXJpYS1leHBhbmRlZDp0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kYCxnaG9zdDpgaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctbXV0ZWQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIGhvdmVyOmJnLWRlc3RydWN0aXZlLzIwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzIwIHRleHQtZGVzdHJ1Y3RpdmUgZm9jdXMtdmlzaWJsZTpib3JkZXItZGVzdHJ1Y3RpdmUvNDAgZGFyazpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8zMGAsbGluazpgdGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVgfSxzaXplOntkZWZhdWx0OmBoLTggZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLHhzOmBoLTYgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIHB4LTIgdGV4dC14cyBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZyBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2Asc206YGgtNyBnYXAtMSByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMnB4KV0gcHgtMi41IHRleHQtWzAuOHJlbV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTMuNWAsbGc6YGgtOSBnYXAtMS41IHB4LTIuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0yIGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMmAsaWNvbjpgc2l6ZS04YCwiaWNvbi14cyI6YHNpemUtNiByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMHB4KV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2AsImljb24tc20iOmBzaXplLTcgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnYCwiaWNvbi1sZyI6YHNpemUtOWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgLHNpemU6YGRlZmF1bHRgfX0pLEtiPVtgZGF0YS1zaXplYF0scWI9Rih7X19uYW1lOmBDYXJkYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkYCwiZGF0YS1zaXplIjplLnNpemUsY2xhc3M6TyhOKFopKGByaW5nLWZvcmVncm91bmQvMTAgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZCBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBweS00IHRleHQtc20gcmluZy0xIGhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wIGhhcy1bPmltZzpmaXJzdC1jaGlsZF06cHQtMCBkYXRhLVtzaXplPXNtXTpnYXAtMyBkYXRhLVtzaXplPXNtXTpweS0zIGRhdGEtW3NpemU9c21dOmhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wICo6W2ltZzpmaXJzdC1jaGlsZF06cm91bmRlZC10LXhsICo6W2ltZzpsYXN0LWNoaWxkXTpyb3VuZGVkLWIteGwgZ3JvdXAvY2FyZCBmbGV4IGZsZXgtY29sYCx0LmNsYXNzKSl9LFtJKG4uJHNsb3RzLGBkZWZhdWx0YCldLDEwLEtiKSl9fSksSmI9Rih7X19uYW1lOmBDYXJkQ29udGVudGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLWNvbnRlbnRgLGNsYXNzOk8oTihaKShgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTNgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFliPUYoe19fbmFtZTpgQ2FyZERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTihaKShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc21gLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFhiPUYoe19fbmFtZTpgQ2FyZEhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLWhlYWRlcmAsY2xhc3M6TyhOKFopKGBnYXAtMSByb3VuZGVkLXQteGwgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTMgWy5ib3JkZXItYl06cGItNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOlsuYm9yZGVyLWJdOnBiLTMgZ3JvdXAvY2FyZC1oZWFkZXIgQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gaXRlbXMtc3RhcnQgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dIGhhcy1kYXRhLVtzbG90PWNhcmQtZGVzY3JpcHRpb25dOmdyaWQtcm93cy1bYXV0b19hdXRvXWAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWmI9Rih7X19uYW1lOmBDYXJkVGl0bGVgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC10aXRsZWAsY2xhc3M6TyhOKFopKGB0ZXh0LWJhc2UgbGVhZGluZy1zbnVnIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6dGV4dC1zbSBjbi1mb250LWhlYWRpbmdgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFFiPUYoe19fbmFtZTpgSW5wdXRgLHByb3BzOntkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj1JeShuLGBtb2RlbFZhbHVlYCx0LHtwYXNzaXZlOiEwLGRlZmF1bHRWYWx1ZTpuLmRlZmF1bHRWYWx1ZX0pO3JldHVybihlLHQpPT5ncigoUigpLHooYGlucHV0YCx7Im9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKHIpP3IudmFsdWU9ZTpudWxsLCJkYXRhLXNsb3QiOmBpbnB1dGAsY2xhc3M6TyhOKFopKGBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZGlzYWJsZWQ6YmctaW5wdXQvNTAgZGFyazpkaXNhYmxlZDpiZy1pbnB1dC84MCBoLTggcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMi41IHB5LTEgdGV4dC1iYXNlIHRyYW5zaXRpb24tY29sb3JzIGZpbGU6aC02IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgbWQ6dGV4dC1zbSB3LWZ1bGwgbWluLXctMCBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBgLG4uY2xhc3MpKX0sbnVsbCwyKSksW1tHbCxOKHIpXV0pfX0pLCRiPWBsbG1nd0FkbWluS2V5YDtmdW5jdGlvbiBleCgpe3RyeXtyZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgkYik/P2BgfWNhdGNoe3JldHVybmBgfX1mdW5jdGlvbiB0eChlKXt0cnl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgkYixlKX1jYXRjaHt9fWZ1bmN0aW9uIG54KCl7dHJ5e3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJGIpfWNhdGNoe319dmFyIHJ4PW5fKGBhdXRoYCx7c3RhdGU6KCk9Pih7YXBpS2V5OmV4KCksZXJyb3I6YGB9KSxnZXR0ZXJzOntpc0F1dGhlbnRpY2F0ZWQ6ZT0+ZS5hcGlLZXkhPT1gYH0sYWN0aW9uczp7c3VibWl0KGUpe2UmJih0aGlzLmFwaUtleT1lLHRoaXMuZXJyb3I9YGAsdHgoZSkpfSxyZWplY3QoZSl7dGhpcy5hcGlLZXk9YGAsdGhpcy5lcnJvcj1lLG54KCl9fX0pLGl4PWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdHVzO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSksdGhpcy5uYW1lPWBBZG1pbkFwaUVycm9yYCx0aGlzLnN0YXR1cz10fX07YXN5bmMgZnVuY3Rpb24gYXgoZSl7bGV0IHQ9cngoKSxuPXQuYXBpS2V5LHI9YXdhaXQgZmV0Y2goZSx7Y3JlZGVudGlhbHM6YHNhbWUtb3JpZ2luYCxoZWFkZXJzOm4/eyJ4LWFwaS1rZXkiOm59Ont9fSk7aWYoci5zdGF0dXM9PT00MDF8fHIuc3RhdHVzPT09NDAzKXRocm93IHQuYXBpS2V5PT09biYmdC5yZWplY3QoYGludmFsaWQga2V5LCBvciBub3QgYW4gYWRtaW5gKSxuZXcgaXgoYCR7ZX06IEhUVFAgJHtyLnN0YXR1c31gLHIuc3RhdHVzKTtpZighci5vayl0aHJvdyBuZXcgaXgoYCR7ZX06IEhUVFAgJHtyLnN0YXR1c31gLHIuc3RhdHVzKTtyZXR1cm4gYXdhaXQgci5qc29uKCl9dmFyIG94PTVlMyxzeD1uXyhgZGFzaGJvYXJkYCx7c3RhdGU6KCk9Pih7b3ZlcnZpZXc6bnVsbCx1c2FnZTpudWxsLHRhcmdldHM6bnVsbCxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLHRpbWVyOnZvaWQgMH0pLGFjdGlvbnM6e2FzeW5jIHJlZnJlc2goKXtpZighcngoKS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldFtlLHQsbl09YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtheChgL2FkbWluL2FwaS9vdmVydmlld2ApLGF4KGAvYWRtaW4vYXBpL3VzYWdlYCksYXgoYC9hZG1pbi9hcGkvdGFyZ2V0c2ApXSk7ZS5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMub3ZlcnZpZXc9ZS52YWx1ZSksdC5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMudXNhZ2U9dC52YWx1ZSksbi5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMudGFyZ2V0cz1uLnZhbHVlKTtsZXQgcj1bXTtpZihlLnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YG92ZXJ2aWV3YCxyZWFzb246ZS5yZWFzb259KSx0LnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YHVzYWdlYCxyZWFzb246dC5yZWFzb259KSxuLnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YHRhcmdldHNgLHJlYXNvbjpuLnJlYXNvbn0pLHIubGVuZ3RoPT09MCl7dGhpcy5sYXN0VXBkYXRlZD1uZXcgRGF0ZSx0aGlzLmVycm9yPWBgO3JldHVybn1yLnNvbWUoKHtyZWFzb246ZX0pPT5lIGluc3RhbmNlb2YgaXgmJihlLnN0YXR1cz09PTQwMXx8ZS5zdGF0dXM9PT00MDMpKXx8KHIubGVuZ3RoPDMmJih0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlKSx0aGlzLmVycm9yPXIubWFwKCh7bGFiZWw6ZSxyZWFzb246dH0pPT5gJHtlfTogJHt0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOlN0cmluZyh0KX1gKS5qb2luKGA7IGApKX0sc3RhcnRQb2xsaW5nKCl7dGhpcy50aW1lcj09PXZvaWQgMCYmKHRoaXMucmVmcmVzaCgpLHRoaXMudGltZXI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgdGhpcy5yZWZyZXNoKCksb3gpKX0sc3RvcFBvbGxpbmcoKXt0aGlzLnRpbWVyIT09dm9pZCAwJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXZvaWQgMCl9fX0pLGN4PXtjbGFzczpgbXgtYXV0byBmbGV4IG1pbi1oLVs3MHZoXSBtYXgtdy1tZCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBweC00YH0sbHg9e2NsYXNzOmBmbGV4IHNpemUtMTIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeWB9LHV4PXtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTFgfSxkeD17ImFyaWEtbGFiZWxsZWRieSI6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxmeD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LHB4PXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0sbXg9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSxoeD17Y2xhc3M6YHJlbGF0aXZlYH0sZ3g9KChlLHQpPT57bGV0IG49ZS5fX3ZjY09wdHN8fGU7Zm9yKGxldFtlLHJdb2YgdCluW2VdPXI7cmV0dXJuIG59KShGKHtfX25hbWU6YEF1dGhHYXRlYCxzZXR1cChlKXtsZXQgdD1yeCgpLG49c3goKSxyPU0oYGApLGk9TSghMSksYT1NKG51bGwpLG89VygoKT0+ci52YWx1ZS50cmltKCkhPT1gYCk7ZnVuY3Rpb24gcygpe2xldCBlPXIudmFsdWU7ci52YWx1ZT1gYCx0LnN1Ym1pdChlKSxuLnJlZnJlc2goKX1mdW5jdGlvbiBjKCl7UW4oKCk9PmEudmFsdWU/LiRlbD8uZm9jdXMoKSl9cmV0dXJuIFppKGMpLEVyKCgpPT50LmVycm9yLGU9PntlJiZjKCl9KSwoZSxuKT0+e2xldCBjPWNhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUigpLHooYGRpdmAsY3gsW0goTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyYH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsbHgsW0goYyx7aWNvbjpOKGFfKSxjbGFzczpgc2l6ZS01YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLFYoYGRpdmAsdXgsW25bM118fD1WKGBzcGFuYCx7Y2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExMTSBHYXRld2F5YCwtMSksSChOKFpiKSx7Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZGB9LHtkZWZhdWx0OlAoKCk9PlsuLi5uWzJdfHw9W1UoYEFkbWluIGtleSByZXF1aXJlZGAsLTEpXV0pLF86MX0pXSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzRdfHw9W1UoYEVudGVyIGFuIGFkbWluIEFQSSBrZXkgdG8gY29udGludWUuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OlAoKCk9PltuWzEwXXx8PVYoYGgyYCx7aWQ6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBzci1vbmx5YH0sYCBIb3cgdGhpcyBrZXkgaXMgaGFuZGxlZCBgLC0xKSxWKGB1bGAsZHgsW1YoYGxpYCxmeCxbSChjLHtpY29uOk4oZF8pLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzVdfHw9Vihgc3BhbmAsbnVsbCxgS2VwdCBvbmx5IGluIHRoaXMgdGFiJ3Mgc2Vzc2lvbiBzdG9yYWdlYCwtMSldKSxWKGBsaWAscHgsW0goYyx7aWNvbjpOKGRfKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls2XXx8PVYoYHNwYW5gLG51bGwsYE5ldmVyIHdyaXR0ZW4gdG8gZGlza2AsLTEpXSksVihgbGlgLG14LFtIKGMse2ljb246TihkXyksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bN118fD1WKGBzcGFuYCxudWxsLGBTZW50IG9ubHkgdG8gdGhpcyBwYWdlJ3Mgb3duIC9hZG1pbi9hcGkvKiByZXF1ZXN0c2AsLTEpXSldKSxWKGBmb3JtYCx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgLG9uU3VibWl0OmF1KHMsW2BwcmV2ZW50YF0pfSxbVihgZGl2YCxoeCxbSChOKFFiKSx7cmVmX2tleTpga2V5SW5wdXRFbGAscmVmOmEsbW9kZWxWYWx1ZTpyLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpuWzBdfHw9ZT0+ci52YWx1ZT1lLHR5cGU6aS52YWx1ZT9gdGV4dGA6YHBhc3N3b3JkYCxhdXRvY29tcGxldGU6YG9mZmAscGxhY2Vob2xkZXI6YEFQSSBrZXlgLCJhcmlhLWxhYmVsIjpgQWRtaW4gQVBJIGtleWAsImFyaWEtaW52YWxpZCI6ISFOKHQpLmVycm9yLCJhcmlhLWRlc2NyaWJlZGJ5IjpOKHQpLmVycm9yP2BhdXRoZ2F0ZS1lcnJvcmA6dm9pZCAwLGNsYXNzOk8oW2BoLTEwIHByLTEwYCx7ImF1dGhnYXRlLXNoYWtlIjpOKHQpLmVycm9yfV0pfSxudWxsLDgsW2Btb2RlbFZhbHVlYCxgdHlwZWAsYGFyaWEtaW52YWxpZGAsYGFyaWEtZGVzY3JpYmVkYnlgLGBjbGFzc2BdKSxIKE4oV2IpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCxjbGFzczpgYWJzb2x1dGUgdG9wLTEvMiByaWdodC0xLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCwiYXJpYS1sYWJlbCI6aS52YWx1ZT9gSGlkZSBrZXlgOmBTaG93IGtleWAsb25DbGljazpuWzFdfHw9ZT0+aS52YWx1ZT0haS52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0goYyx7aWNvbjppLnZhbHVlP04odl8pOk4oc18pLGNsYXNzOmBzaXplLTMuNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9LDgsW2BhcmlhLWxhYmVsYF0pXSksSChOKFdiKSx7dHlwZTpgc3VibWl0YCxjbGFzczpgdy1mdWxsYCxkaXNhYmxlZDohby52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+Wy4uLm5bOF18fD1bVShgIENvbnRpbnVlIGAsLTEpXV0pLF86MX0sOCxbYGRpc2FibGVkYF0pXSwzMiksTih0KS5lcnJvcj8oUigpLEIoTihYdikse2tleTowLGlkOmBhdXRoZ2F0ZS1lcnJvcmAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpQKCgpPT5bSChOKFF2KSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzldfHw9W1UoYEF1dGhlbnRpY2F0aW9uIGZhaWxlZGAsLTEpXV0pLF86MX0pLEgoTihadiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bVShrKE4odCkuZXJyb3IpLDEpXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KV0pfX19KSxbW2BfX3Njb3BlSWRgLGBkYXRhLXYtNGJlNmJjMDlgXV0pO2Z1bmN0aW9uIF94KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiB2eChlLHQpe3JldHVybiBuPT57dC5zZXRTdGF0ZSh0PT4oey4uLnQsW2VdOl94KG4sdFtlXSl9KSl9fWZ1bmN0aW9uIHl4KGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gYngoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+dHlwZW9mIGU9PWBudW1iZXJgKX1mdW5jdGlvbiB4eChlLHQpe2xldCBuPVtdLHI9ZT0+e2UuZm9yRWFjaChlPT57bi5wdXNoKGUpO2xldCBpPXQoZSk7aSE9bnVsbCYmaS5sZW5ndGgmJnIoaSl9KX07cmV0dXJuIHIoZSksbn1mdW5jdGlvbiBRKGUsdCxuKXtsZXQgcj1bXSxpO3JldHVybiBhPT57bGV0IG87bi5rZXkmJm4uZGVidWcmJihvPURhdGUubm93KCkpO2xldCBzPWUoYSk7aWYoIShzLmxlbmd0aCE9PXIubGVuZ3RofHxzLnNvbWUoKGUsdCk9PnJbdF0hPT1lKSkpcmV0dXJuIGk7cj1zO2xldCBjO2lmKG4ua2V5JiZuLmRlYnVnJiYoYz1EYXRlLm5vdygpKSxpPXQoLi4ucyksbj09bnVsbHx8bi5vbkNoYW5nZT09bnVsbHx8bi5vbkNoYW5nZShpKSxuLmtleSYmbi5kZWJ1ZyYmbiE9bnVsbCYmbi5kZWJ1ZygpKXtsZXQgZT1NYXRoLnJvdW5kKChEYXRlLm5vdygpLW8pKjEwMCkvMTAwLHQ9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jKSoxMDApLzEwMCxyPXQvMTYsaT0oZSx0KT0+e2ZvcihlPVN0cmluZyhlKTtlLmxlbmd0aDx0OyllPWAgYCtlO3JldHVybiBlfTtjb25zb2xlLmluZm8oYCVj4o+xICR7aSh0LDUpfSAvJHtpKGUsNSl9IG1zYCxgCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjb2xvcjogaHNsKCR7TWF0aC5tYXgoMCxNYXRoLm1pbigxMjAtMTIwKnIsMTIwKSl9ZGVnIDEwMCUgMzElKTtgLG4/LmtleSl9cmV0dXJuIGl9fWZ1bmN0aW9uICQoZSx0LG4scil7cmV0dXJue2RlYnVnOigpPT5lPy5kZWJ1Z0FsbD8/ZVt0XSxrZXk6ITEsb25DaGFuZ2U6cn19ZnVuY3Rpb24gU3goZSx0LG4scil7bGV0IGk9e2lkOmAke3QuaWR9XyR7bi5pZH1gLHJvdzp0LGNvbHVtbjpuLGdldFZhbHVlOigpPT50LmdldFZhbHVlKHIpLHJlbmRlclZhbHVlOigpPT5pLmdldFZhbHVlKCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLGdldENvbnRleHQ6USgoKT0+W2Usbix0LGldLChlLHQsbixyKT0+KHt0YWJsZTplLGNvbHVtbjp0LHJvdzpuLGNlbGw6cixnZXRWYWx1ZTpyLmdldFZhbHVlLHJlbmRlclZhbHVlOnIucmVuZGVyVmFsdWV9KSwkKGUub3B0aW9ucyxgZGVidWdDZWxsc2AsYGNlbGwuZ2V0Q29udGV4dGApKX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2gocj0+e3IuY3JlYXRlQ2VsbD09bnVsbHx8ci5jcmVhdGVDZWxsKGksbix0LGUpfSx7fSksaX1mdW5jdGlvbiBDeChlLHQsbixyKXtsZXQgaT17Li4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLC4uLnR9LGE9aS5hY2Nlc3NvcktleSxvPWkuaWQ/PyhhP3R5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGw9PWBmdW5jdGlvbmA/YS5yZXBsYWNlQWxsKGAuYCxgX2ApOmEucmVwbGFjZSgvXC4vZyxgX2ApOnZvaWQgMCk/Pyh0eXBlb2YgaS5oZWFkZXI9PWBzdHJpbmdgP2kuaGVhZGVyOnZvaWQgMCkscztpZihpLmFjY2Vzc29yRm4/cz1pLmFjY2Vzc29yRm46YSYmKHM9YS5pbmNsdWRlcyhgLmApP2U9PntsZXQgdD1lO2ZvcihsZXQgZSBvZiBhLnNwbGl0KGAuYCkpdD10Py5bZV07cmV0dXJuIHR9OmU9PmVbaS5hY2Nlc3NvcktleV0pLCFvKXRocm93IEVycm9yKCk7bGV0IGM9e2lkOmAke1N0cmluZyhvKX1gLGFjY2Vzc29yRm46cyxwYXJlbnQ6cixkZXB0aDpuLGNvbHVtbkRlZjppLGNvbHVtbnM6W10sZ2V0RmxhdENvbHVtbnM6USgoKT0+WyEwXSwoKT0+W2MsLi4uYy5jb2x1bW5zPy5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSldLCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0RmxhdENvbHVtbnNgKSksZ2V0TGVhZkNvbHVtbnM6USgoKT0+W2UuX2dldE9yZGVyQ29sdW1uc0ZuKCldLGU9Pnt2YXIgdDtyZXR1cm4odD1jLmNvbHVtbnMpIT1udWxsJiZ0Lmxlbmd0aD9lKGMuY29sdW1ucy5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpOltjXX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGNvbHVtbi5nZXRMZWFmQ29sdW1uc2ApKX07Zm9yKGxldCB0IG9mIGUuX2ZlYXR1cmVzKXQuY3JlYXRlQ29sdW1uPT1udWxsfHx0LmNyZWF0ZUNvbHVtbihjLGUpO3JldHVybiBjfXZhciB3eD1gZGVidWdIZWFkZXJzYDtmdW5jdGlvbiBUeChlLHQsbil7bGV0IHI9e2lkOm4uaWQ/P3QuaWQsY29sdW1uOnQsaW5kZXg6bi5pbmRleCxpc1BsYWNlaG9sZGVyOiEhbi5pc1BsYWNlaG9sZGVyLHBsYWNlaG9sZGVySWQ6bi5wbGFjZWhvbGRlcklkLGRlcHRoOm4uZGVwdGgsc3ViSGVhZGVyczpbXSxjb2xTcGFuOjAscm93U3BhbjowLGhlYWRlckdyb3VwOm51bGwsZ2V0TGVhZkhlYWRlcnM6KCk9PntsZXQgZT1bXSx0PW49PntuLnN1YkhlYWRlcnMmJm4uc3ViSGVhZGVycy5sZW5ndGgmJm4uc3ViSGVhZGVycy5tYXAodCksZS5wdXNoKG4pfTtyZXR1cm4gdChyKSxlfSxnZXRDb250ZXh0OigpPT4oe3RhYmxlOmUsaGVhZGVyOnIsY29sdW1uOnR9KX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2godD0+e3QuY3JlYXRlSGVhZGVyPT1udWxsfHx0LmNyZWF0ZUhlYWRlcihyLGUpfSkscn12YXIgRXg9e2NyZWF0ZVRhYmxlOmU9PntlLmdldEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PntsZXQgYT1yPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxvPWk/Lm1hcChlPT5uLmZpbmQodD0+dC5pZD09PWUpKS5maWx0ZXIoQm9vbGVhbik/P1tdLHM9bi5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUuaWQpKSYmIShpIT1udWxsJiZpLmluY2x1ZGVzKGUuaWQpKSk7cmV0dXJuIER4KHQsWy4uLmEsLi4ucywuLi5vXSxlKX0sJChlLm9wdGlvbnMsd3gsYGdldEhlYWRlckdyb3Vwc2ApKSxlLmdldENlbnRlckhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PihuPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpLER4KHQsbixlLGBjZW50ZXJgKSksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckhlYWRlckdyb3Vwc2ApKSxlLmdldExlZnRIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKHQsbixyKT0+RHgodCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGBsZWZ0YCksJChlLm9wdGlvbnMsd3gsYGdldExlZnRIZWFkZXJHcm91cHNgKSksZS5nZXRSaWdodEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKHQsbixyKT0+RHgodCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGByaWdodGApLCQoZS5vcHRpb25zLHd4LGBnZXRSaWdodEhlYWRlckdyb3Vwc2ApKSxlLmdldEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSwkKGUub3B0aW9ucyx3eCxgZ2V0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0TGVmdEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldExlZnRGb290ZXJHcm91cHNgKSksZS5nZXRDZW50ZXJGb290ZXJHcm91cHM9USgoKT0+W2UuZ2V0Q2VudGVySGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckZvb3Rlckdyb3Vwc2ApKSxlLmdldFJpZ2h0Rm9vdGVyR3JvdXBzPVEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldFJpZ2h0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0RmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLHd4LGBnZXRGbGF0SGVhZGVyc2ApKSxlLmdldExlZnRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLHd4LGBnZXRMZWZ0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckZsYXRIZWFkZXJzYCkpLGUuZ2V0UmlnaHRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRSaWdodEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSwkKGUub3B0aW9ucyx3eCxgZ2V0UmlnaHRGbGF0SGVhZGVyc2ApKSxlLmdldENlbnRlckxlYWZIZWFkZXJzPVEoKCk9PltlLmdldENlbnRlckZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLCQoZS5vcHRpb25zLHd4LGBnZXRDZW50ZXJMZWFmSGVhZGVyc2ApKSxlLmdldExlZnRMZWFmSGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksJChlLm9wdGlvbnMsd3gsYGdldExlZnRMZWFmSGVhZGVyc2ApKSxlLmdldFJpZ2h0TGVhZkhlYWRlcnM9USgoKT0+W2UuZ2V0UmlnaHRGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSwkKGUub3B0aW9ucyx3eCxgZ2V0UmlnaHRMZWFmSGVhZGVyc2ApKSxlLmdldExlYWZIZWFkZXJzPVEoKCk9PltlLmdldExlZnRIZWFkZXJHcm91cHMoKSxlLmdldENlbnRlckhlYWRlckdyb3VwcygpLGUuZ2V0UmlnaHRIZWFkZXJHcm91cHMoKV0sKGUsdCxuKT0+Wy4uLmVbMF0/LmhlYWRlcnM/P1tdLC4uLnRbMF0/LmhlYWRlcnM/P1tdLC4uLm5bMF0/LmhlYWRlcnM/P1tdXS5tYXAoZT0+ZS5nZXRMZWFmSGVhZGVycygpKS5mbGF0KCksJChlLm9wdGlvbnMsd3gsYGdldExlYWZIZWFkZXJzYCkpfX07ZnVuY3Rpb24gRHgoZSx0LG4scil7bGV0IGk9MCxhPWZ1bmN0aW9uKGUsdCl7dD09PXZvaWQgMCYmKHQ9MSksaT1NYXRoLm1heChpLHQpLGUuZmlsdGVyKGU9PmUuZ2V0SXNWaXNpYmxlKCkpLmZvckVhY2goZT0+e3ZhciBuOyhuPWUuY29sdW1ucykhPW51bGwmJm4ubGVuZ3RoJiZhKGUuY29sdW1ucyx0KzEpfSwwKX07YShlKTtsZXQgbz1bXSxzPShlLHQpPT57bGV0IGk9e2RlcHRoOnQsaWQ6W3IsYCR7dH1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGhlYWRlcnM6W119LGE9W107ZS5mb3JFYWNoKGU9PntsZXQgbz1bLi4uYV0ucmV2ZXJzZSgpWzBdLHM9ZS5jb2x1bW4uZGVwdGg9PT1pLmRlcHRoLGMsbD0hMTtpZihzJiZlLmNvbHVtbi5wYXJlbnQ/Yz1lLmNvbHVtbi5wYXJlbnQ6KGM9ZS5jb2x1bW4sbD0hMCksbyYmbz8uY29sdW1uPT09YylvLnN1YkhlYWRlcnMucHVzaChlKTtlbHNle2xldCBpPVR4KG4sYyx7aWQ6W3IsdCxjLmlkLGU/LmlkXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGlzUGxhY2Vob2xkZXI6bCxwbGFjZWhvbGRlcklkOmw/YCR7YS5maWx0ZXIoZT0+ZS5jb2x1bW49PT1jKS5sZW5ndGh9YDp2b2lkIDAsZGVwdGg6dCxpbmRleDphLmxlbmd0aH0pO2kuc3ViSGVhZGVycy5wdXNoKGUpLGEucHVzaChpKX1pLmhlYWRlcnMucHVzaChlKSxlLmhlYWRlckdyb3VwPWl9KSxvLnB1c2goaSksdD4wJiZzKGEsdC0xKX07cyh0Lm1hcCgoZSx0KT0+VHgobixlLHtkZXB0aDppLGluZGV4OnR9KSksaS0xKSxvLnJldmVyc2UoKTtsZXQgYz1lPT5lLmZpbHRlcihlPT5lLmNvbHVtbi5nZXRJc1Zpc2libGUoKSkubWFwKGU9PntsZXQgdD0wLG49MCxyPVswXTtlLnN1YkhlYWRlcnMmJmUuc3ViSGVhZGVycy5sZW5ndGg/KHI9W10sYyhlLnN1YkhlYWRlcnMpLmZvckVhY2goZT0+e2xldHtjb2xTcGFuOm4scm93U3BhbjppfT1lO3QrPW4sci5wdXNoKGkpfSkpOnQ9MTtsZXQgaT1NYXRoLm1pbiguLi5yKTtyZXR1cm4gbis9aSxlLmNvbFNwYW49dCxlLnJvd1NwYW49bix7Y29sU3Bhbjp0LHJvd1NwYW46bn19KTtyZXR1cm4gYyhvWzBdPy5oZWFkZXJzPz9bXSksb312YXIgT3g9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9e2lkOnQsaW5kZXg6cixvcmlnaW5hbDpuLGRlcHRoOmkscGFyZW50SWQ6byxfdmFsdWVzQ2FjaGU6e30sX3VuaXF1ZVZhbHVlc0NhY2hlOnt9LGdldFZhbHVlOnQ9PntpZihzLl92YWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBzLl92YWx1ZXNDYWNoZVt0XT1uLmFjY2Vzc29yRm4ocy5vcmlnaW5hbCxyKSxzLl92YWx1ZXNDYWNoZVt0XX0sZ2V0VW5pcXVlVmFsdWVzOnQ9PntpZihzLl91bmlxdWVWYWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBuLmNvbHVtbkRlZi5nZXRVbmlxdWVWYWx1ZXM/KHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdPW4uY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcyhzLm9yaWdpbmFsLHIpLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKToocy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF09W3MuZ2V0VmFsdWUodCldLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKX0scmVuZGVyVmFsdWU6dD0+cy5nZXRWYWx1ZSh0KT8/ZS5vcHRpb25zLnJlbmRlckZhbGxiYWNrVmFsdWUsc3ViUm93czphPz9bXSxnZXRMZWFmUm93czooKT0+eHgocy5zdWJSb3dzLGU9PmUuc3ViUm93cyksZ2V0UGFyZW50Um93OigpPT5zLnBhcmVudElkP2UuZ2V0Um93KHMucGFyZW50SWQsITApOnZvaWQgMCxnZXRQYXJlbnRSb3dzOigpPT57bGV0IGU9W10sdD1zO2Zvcig7Oyl7bGV0IG49dC5nZXRQYXJlbnRSb3coKTtpZighbilicmVhaztlLnB1c2gobiksdD1ufXJldHVybiBlLnJldmVyc2UoKX0sZ2V0QWxsQ2VsbHM6USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKV0sdD0+dC5tYXAodD0+U3goZSxzLHQsdC5pZCkpLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRBbGxDZWxsc2ApKSxfZ2V0QWxsQ2VsbHNCeUNvbHVtbklkOlEoKCk9PltzLmdldEFsbENlbGxzKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmNvbHVtbi5pZF09dCxlKSx7fSksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEFsbENlbGxzQnlDb2x1bW5JZGApKX07Zm9yKGxldCB0PTA7dDxlLl9mZWF0dXJlcy5sZW5ndGg7dCsrKXtsZXQgbj1lLl9mZWF0dXJlc1t0XTtuPT1udWxsfHxuLmNyZWF0ZVJvdz09bnVsbHx8bi5jcmVhdGVSb3cocyxlKX1yZXR1cm4gc30sa3g9e2NyZWF0ZUNvbHVtbjooZSx0KT0+e2UuX2dldEZhY2V0ZWRSb3dNb2RlbD10Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKHQsZS5pZCksZS5nZXRGYWNldGVkUm93TW9kZWw9KCk9PmUuX2dldEZhY2V0ZWRSb3dNb2RlbD9lLl9nZXRGYWNldGVkUm93TW9kZWwoKTp0LmdldFByZUZpbHRlcmVkUm93TW9kZWwoKSxlLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz0oKT0+ZS5fZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz9lLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzKCk6bmV3IE1hcCxlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcz0oKT0+e2lmKGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMpcmV0dXJuIGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMoKX19fSxBeD0oZSx0LG4pPT57dmFyIHIsaTtsZXQgYT1uPT1udWxsfHwocj1uLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCk7cmV0dXJuISEoKGk9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihpPWkudG9TdHJpbmcoKSkhPW51bGwmJihpPWkudG9Mb3dlckNhc2UoKSkhPW51bGwmJmkuaW5jbHVkZXMoYSkpfTtBeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBqeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuISEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihyPXIudG9TdHJpbmcoKSkhPW51bGwmJnIuaW5jbHVkZXMobikpfTtqeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBNeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuKChyPWUuZ2V0VmFsdWUodCkpPT1udWxsfHwocj1yLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpPT09bj8udG9Mb3dlckNhc2UoKX07TXguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgTng9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT8uaW5jbHVkZXMobik7TnguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgUHg9KGUsdCxuKT0+IW4uc29tZShuPT57dmFyIHI7cmV0dXJuISgocj1lLmdldFZhbHVlKHQpKSE9bnVsbCYmci5pbmNsdWRlcyhuKSl9KTtQeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgRng9KGUsdCxuKT0+bi5zb21lKG49PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pKTtGeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgSXg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09PW47SXguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgTHg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09bjtMeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBSeD0oZSx0LG4pPT57bGV0W3IsaV09bixhPWUuZ2V0VmFsdWUodCk7cmV0dXJuIGE+PXImJmE8PWl9O1J4LnJlc29sdmVGaWx0ZXJWYWx1ZT1lPT57bGV0W3Qsbl09ZSxyPXR5cGVvZiB0PT1gbnVtYmVyYD90OnBhcnNlRmxvYXQodCksaT10eXBlb2Ygbj09YG51bWJlcmA/bjpwYXJzZUZsb2F0KG4pLGE9dD09PW51bGx8fE51bWJlci5pc05hTihyKT8tMS8wOnIsbz1uPT09bnVsbHx8TnVtYmVyLmlzTmFOKGkpPzEvMDppO2lmKGE+byl7bGV0IGU9YTthPW8sbz1lfXJldHVyblthLG9dfSxSeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHxCeChlWzBdKSYmQngoZVsxXSk7dmFyIHp4PXtpbmNsdWRlc1N0cmluZzpBeCxpbmNsdWRlc1N0cmluZ1NlbnNpdGl2ZTpqeCxlcXVhbHNTdHJpbmc6TXgsYXJySW5jbHVkZXM6TngsYXJySW5jbHVkZXNBbGw6UHgsYXJySW5jbHVkZXNTb21lOkZ4LGVxdWFsczpJeCx3ZWFrRXF1YWxzOkx4LGluTnVtYmVyUmFuZ2U6Unh9O2Z1bmN0aW9uIEJ4KGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB9dmFyIFZ4PXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe2ZpbHRlckZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbkZpbHRlcnM6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5GaWx0ZXJzQ2hhbmdlOnZ4KGBjb2x1bW5GaWx0ZXJzYCxlKSxmaWx0ZXJGcm9tTGVhZlJvd3M6ITEsbWF4TGVhZlJvd0ZpbHRlckRlcHRoOjEwMH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UuZ2V0QXV0b0ZpbHRlckZuPSgpPT57bGV0IG49dC5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk7cmV0dXJuIHR5cGVvZiBuPT1gc3RyaW5nYD96eC5pbmNsdWRlc1N0cmluZzp0eXBlb2Ygbj09YG51bWJlcmA/enguaW5OdW1iZXJSYW5nZTp0eXBlb2Ygbj09YGJvb2xlYW5gfHx0eXBlb2Ygbj09YG9iamVjdGAmJm4/enguZXF1YWxzOkFycmF5LmlzQXJyYXkobik/enguYXJySW5jbHVkZXM6engud2Vha0VxdWFsc30sZS5nZXRGaWx0ZXJGbj0oKT0+eXgoZS5jb2x1bW5EZWYuZmlsdGVyRm4pP2UuY29sdW1uRGVmLmZpbHRlckZuOmUuY29sdW1uRGVmLmZpbHRlckZuPT09YGF1dG9gP2UuZ2V0QXV0b0ZpbHRlckZuKCk6dC5vcHRpb25zLmZpbHRlckZucz8uW2UuY29sdW1uRGVmLmZpbHRlckZuXT8/enhbZS5jb2x1bW5EZWYuZmlsdGVyRm5dLGUuZ2V0Q2FuRmlsdGVyPSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlQ29sdW1uRmlsdGVyPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uRmlsdGVycz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmISFlLmFjY2Vzc29yRm4sZS5nZXRJc0ZpbHRlcmVkPSgpPT5lLmdldEZpbHRlckluZGV4KCk+LTEsZS5nZXRGaWx0ZXJWYWx1ZT0oKT0+e3ZhciBuO3JldHVybihuPXQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzKT09bnVsbHx8KG49bi5maW5kKHQ9PnQuaWQ9PT1lLmlkKSk9PW51bGw/dm9pZCAwOm4udmFsdWV9LGUuZ2V0RmlsdGVySW5kZXg9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzPy5maW5kSW5kZXgodD0+dC5pZD09PWUuaWQpPz8tMSxlLnNldEZpbHRlclZhbHVlPW49Pnt0LnNldENvbHVtbkZpbHRlcnModD0+e2xldCByPWUuZ2V0RmlsdGVyRm4oKSxpPXQ/LmZpbmQodD0+dC5pZD09PWUuaWQpLGE9X3gobixpP2kudmFsdWU6dm9pZCAwKTtpZihIeChyLGEsZSkpcmV0dXJuIHQ/LmZpbHRlcih0PT50LmlkIT09ZS5pZCk/P1tdO2xldCBvPXtpZDplLmlkLHZhbHVlOmF9O3JldHVybiBpP3Q/Lm1hcCh0PT50LmlkPT09ZS5pZD9vOnQpPz9bXTp0IT1udWxsJiZ0Lmxlbmd0aD9bLi4udCxvXTpbb119KX19LGNyZWF0ZVJvdzooZSx0KT0+e2UuY29sdW1uRmlsdGVycz17fSxlLmNvbHVtbkZpbHRlcnNNZXRhPXt9fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5GaWx0ZXJzPXQ9PntsZXQgbj1lLmdldEFsbExlYWZDb2x1bW5zKCk7ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShlPT5feCh0LGUpPy5maWx0ZXIoZT0+e2xldCB0PW4uZmluZCh0PT50LmlkPT09ZS5pZCk7cmV0dXJuISh0JiZIeCh0LmdldEZpbHRlckZuKCksZS52YWx1ZSx0KSl9KSl9LGUucmVzZXRDb2x1bW5GaWx0ZXJzPXQ9PntlLnNldENvbHVtbkZpbHRlcnModD9bXTplLmluaXRpYWxTdGF0ZT8uY29sdW1uRmlsdGVycz8/W10pfSxlLmdldFByZUZpbHRlcmVkUm93TW9kZWw9KCk9PmUuZ2V0Q29yZVJvd01vZGVsKCksZS5nZXRGaWx0ZXJlZFJvd01vZGVsPSgpPT4oIWUuX2dldEZpbHRlcmVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsJiYoZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmlsdGVyZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEZpbHRlcmVkUm93TW9kZWw/ZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCk6ZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCgpKX19O2Z1bmN0aW9uIEh4KGUsdCxuKXtyZXR1cm4oZSYmZS5hdXRvUmVtb3ZlP2UuYXV0b1JlbW92ZSh0LG4pOiExKXx8dD09PXZvaWQgMHx8dHlwZW9mIHQ9PWBzdHJpbmdgJiYhdH12YXIgVXg9e3N1bTooZSx0LG4pPT5uLnJlZHVjZSgodCxuKT0+e2xldCByPW4uZ2V0VmFsdWUoZSk7cmV0dXJuIHQrKHR5cGVvZiByPT1gbnVtYmVyYD9yOjApfSwwKSxtaW46KGUsdCxuKT0+e2xldCByO3JldHVybiBuLmZvckVhY2godD0+e2xldCBuPXQuZ2V0VmFsdWUoZSk7biE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pfSkscn0sbWF4OihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LGV4dGVudDooZSx0LG4pPT57bGV0IHIsaTtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPT09dm9pZCAwP24+PW4mJihyPWk9bik6KHI+biYmKHI9biksaTxuJiYoaT1uKSkpfSksW3IsaV19LG1lYW46KGUsdCk9PntsZXQgbj0wLHI9MDtpZih0LmZvckVhY2godD0+e2xldCBpPXQuZ2V0VmFsdWUoZSk7aSE9bnVsbCYmKGk9K2kpPj1pJiYoKytuLHIrPWkpfSksbilyZXR1cm4gci9ufSxtZWRpYW46KGUsdCk9PntpZighdC5sZW5ndGgpcmV0dXJuO2xldCBuPXQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpO2lmKCFieChuKSlyZXR1cm47aWYobi5sZW5ndGg9PT0xKXJldHVybiBuWzBdO2xldCByPU1hdGguZmxvb3Iobi5sZW5ndGgvMiksaT1uLnNvcnQoKGUsdCk9PmUtdCk7cmV0dXJuIG4ubGVuZ3RoJTI9PTA/KGlbci0xXStpW3JdKS8yOmlbcl19LHVuaXF1ZTooZSx0KT0+QXJyYXkuZnJvbShuZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS52YWx1ZXMoKSksdW5pcXVlQ291bnQ6KGUsdCk9Pm5ldyBTZXQodC5tYXAodD0+dC5nZXRWYWx1ZShlKSkpLnNpemUsY291bnQ6KGUsdCk9PnQubGVuZ3RofSxXeD17Z2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHthZ2dyZWdhdGVkQ2VsbDplPT57dmFyIHQ7cmV0dXJuKCh0PWUuZ2V0VmFsdWUoKSk9PW51bGx8fHQudG9TdHJpbmc9PW51bGw/dm9pZCAwOnQudG9TdHJpbmcoKSk/P251bGx9LGFnZ3JlZ2F0aW9uRm46YGF1dG9gfSksZ2V0SW5pdGlhbFN0YXRlOmU9Pih7Z3JvdXBpbmc6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Hcm91cGluZ0NoYW5nZTp2eChgZ3JvdXBpbmdgLGUpLGdyb3VwZWRDb2x1bW5Nb2RlOmByZW9yZGVyYH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlR3JvdXBpbmc9KCk9Pnt0LnNldEdyb3VwaW5nKHQ9PnQhPW51bGwmJnQuaW5jbHVkZXMoZS5pZCk/dC5maWx0ZXIodD0+dCE9PWUuaWQpOlsuLi50Pz9bXSxlLmlkXSl9LGUuZ2V0Q2FuR3JvdXA9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nPz8hMCkmJighIWUuYWNjZXNzb3JGbnx8ISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKSxlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmNsdWRlcyhlLmlkKSxlLmdldEdyb3VwZWRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmRleE9mKGUuaWQpLGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5Hcm91cCgpO3JldHVybigpPT57dCYmZS50b2dnbGVHcm91cGluZygpfX0sZS5nZXRBdXRvQWdncmVnYXRpb25Gbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO2lmKHR5cGVvZiBuPT1gbnVtYmVyYClyZXR1cm4gVXguc3VtO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PWBbb2JqZWN0IERhdGVdYClyZXR1cm4gVXguZXh0ZW50fSxlLmdldEFnZ3JlZ2F0aW9uRm49KCk9PntpZighZSl0aHJvdyBFcnJvcigpO3JldHVybiB5eChlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuKT9lLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuOmUuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm49PT1gYXV0b2A/ZS5nZXRBdXRvQWdncmVnYXRpb25GbigpOnQub3B0aW9ucy5hZ2dyZWdhdGlvbkZucz8uW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dPz9VeFtlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldEdyb3VwaW5nPXQ9PmUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Hcm91cGluZ0NoYW5nZSh0KSxlLnJlc2V0R3JvdXBpbmc9dD0+e2Uuc2V0R3JvdXBpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uZ3JvdXBpbmc/P1tdKX0sZS5nZXRQcmVHcm91cGVkUm93TW9kZWw9KCk9PmUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLGUuZ2V0R3JvdXBlZFJvd01vZGVsPSgpPT4oIWUuX2dldEdyb3VwZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEdyb3VwZWRSb3dNb2RlbCYmKGUuX2dldEdyb3VwZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0R3JvdXBlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsR3JvdXBpbmd8fCFlLl9nZXRHcm91cGVkUm93TW9kZWw/ZS5nZXRQcmVHcm91cGVkUm93TW9kZWwoKTplLl9nZXRHcm91cGVkUm93TW9kZWwoKSl9LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0SXNHcm91cGVkPSgpPT4hIWUuZ3JvdXBpbmdDb2x1bW5JZCxlLmdldEdyb3VwaW5nVmFsdWU9bj0+e2lmKGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl07bGV0IHI9dC5nZXRDb2x1bW4obik7cmV0dXJuIHIhPW51bGwmJnIuY29sdW1uRGVmLmdldEdyb3VwaW5nVmFsdWU/KGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl09ci5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZShlLm9yaWdpbmFsKSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW25dKTplLmdldFZhbHVlKG4pfSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlPXt9fSxjcmVhdGVDZWxsOihlLHQsbixyKT0+e2UuZ2V0SXNHcm91cGVkPSgpPT50LmdldElzR3JvdXBlZCgpJiZ0LmlkPT09bi5ncm91cGluZ0NvbHVtbklkLGUuZ2V0SXNQbGFjZWhvbGRlcj0oKT0+IWUuZ2V0SXNHcm91cGVkKCkmJnQuZ2V0SXNHcm91cGVkKCksZS5nZXRJc0FnZ3JlZ2F0ZWQ9KCk9Pnt2YXIgdDtyZXR1cm4hZS5nZXRJc0dyb3VwZWQoKSYmIWUuZ2V0SXNQbGFjZWhvbGRlcigpJiYhISgodD1uLnN1YlJvd3MpIT1udWxsJiZ0Lmxlbmd0aCl9fX07ZnVuY3Rpb24gR3goZSx0LG4pe2lmKCEodCE9bnVsbCYmdC5sZW5ndGgpfHwhbilyZXR1cm4gZTtsZXQgcj1lLmZpbHRlcihlPT4hdC5pbmNsdWRlcyhlLmlkKSk7cmV0dXJuIG49PT1gcmVtb3ZlYD9yOlsuLi50Lm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksLi4ucl19dmFyIEt4PXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtjb2x1bW5PcmRlcjpbXSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtbk9yZGVyQ2hhbmdlOnZ4KGBjb2x1bW5PcmRlcmAsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEluZGV4PVEoZT0+W3JTKHQsZSldLHQ9PnQuZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSwkKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0SW5kZXhgKSksZS5nZXRJc0ZpcnN0Q29sdW1uPW49PnJTKHQsbilbMF0/LmlkPT09ZS5pZCxlLmdldElzTGFzdENvbHVtbj1uPT57bGV0IHI9clModCxuKTtyZXR1cm4gcltyLmxlbmd0aC0xXT8uaWQ9PT1lLmlkfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uT3JkZXI9dD0+ZS5vcHRpb25zLm9uQ29sdW1uT3JkZXJDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5PcmRlcj10PT57ZS5zZXRDb2x1bW5PcmRlcih0P1tdOmUuaW5pdGlhbFN0YXRlLmNvbHVtbk9yZGVyPz9bXSl9LGUuX2dldE9yZGVyQ29sdW1uc0ZuPVEoKCk9PltlLmdldFN0YXRlKCkuY29sdW1uT3JkZXIsZS5nZXRTdGF0ZSgpLmdyb3VwaW5nLGUub3B0aW9ucy5ncm91cGVkQ29sdW1uTW9kZV0sKGUsdCxuKT0+cj0+e2xldCBpPVtdO2lmKCEoZSE9bnVsbCYmZS5sZW5ndGgpKWk9cjtlbHNle2xldCB0PVsuLi5lXSxuPVsuLi5yXTtmb3IoO24ubGVuZ3RoJiZ0Lmxlbmd0aDspe2xldCBlPXQuc2hpZnQoKSxyPW4uZmluZEluZGV4KHQ9PnQuaWQ9PT1lKTtyPi0xJiZpLnB1c2gobi5zcGxpY2UociwxKVswXSl9aT1bLi4uaSwuLi5uXX1yZXR1cm4gR3goaSx0LG4pfSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYF9nZXRPcmRlckNvbHVtbnNGbmApKX19LHF4PSgpPT4oe2xlZnQ6W10scmlnaHQ6W119KSxKeD17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uUGlubmluZzpxeCgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uUGlubmluZ0NoYW5nZTp2eChgY29sdW1uUGlubmluZ2AsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLnBpbj1uPT57bGV0IHI9ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKS5maWx0ZXIoQm9vbGVhbik7dC5zZXRDb2x1bW5QaW5uaW5nKGU9Pm49PT1gcmlnaHRgP3tsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OlsuLi4oZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSksLi4ucl19Om49PT1gbGVmdGA/e2xlZnQ6Wy4uLihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX06e2xlZnQ6KGU/LmxlZnQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSkscmlnaHQ6KGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT5lLmdldExlYWZDb2x1bW5zKCkuc29tZShlPT4oZS5jb2x1bW5EZWYuZW5hYmxlUGlubmluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtblBpbm5pbmc/P3Qub3B0aW9ucy5lbmFibGVQaW5uaW5nPz8hMCkpLGUuZ2V0SXNQaW5uZWQ9KCk9PntsZXQgbj1lLmdldExlYWZDb2x1bW5zKCkubWFwKGU9PmUuaWQpLHtsZWZ0OnIscmlnaHQ6aX09dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcsYT1uLnNvbWUoZT0+cj8uaW5jbHVkZXMoZSkpLG89bi5zb21lKGU9Pmk/LmluY2x1ZGVzKGUpKTtyZXR1cm4gYT9gbGVmdGA6bz9gcmlnaHRgOiExfSxlLmdldFBpbm5lZEluZGV4PSgpPT57dmFyIG47bGV0IHI9ZS5nZXRJc1Bpbm5lZCgpO3JldHVybiByPygobj10LmdldFN0YXRlKCkuY29sdW1uUGlubmluZyk9PW51bGx8fChuPW5bcl0pPT1udWxsP3ZvaWQgMDpuLmluZGV4T2YoZS5pZCkpPz8tMTowfX0sY3JlYXRlUm93OihlLHQpPT57ZS5nZXRDZW50ZXJWaXNpYmxlQ2VsbHM9USgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQsbik9PntsZXQgcj1bLi4udD8/W10sLi4ubj8/W11dO3JldHVybiBlLmZpbHRlcihlPT4hci5pbmNsdWRlcyhlLmNvbHVtbi5pZCkpfSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0Q2VudGVyVmlzaWJsZUNlbGxzYCkpLGUuZ2V0TGVmdFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmNvbHVtbi5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbikubWFwKGU9Pih7Li4uZSxwb3NpdGlvbjpgbGVmdGB9KSksJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldExlZnRWaXNpYmxlQ2VsbHNgKSksZS5nZXRSaWdodFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YHJpZ2h0YH0pKSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0UmlnaHRWaXNpYmxlQ2VsbHNgKSl9LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtblBpbm5pbmc9dD0+ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZSh0KSxlLnJlc2V0Q29sdW1uUGlubmluZz10PT5lLnNldENvbHVtblBpbm5pbmcodD9xeCgpOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5QaW5uaW5nPz9xeCgpKSxlLmdldElzU29tZUNvbHVtbnNQaW5uZWQ9dD0+e2xldCBuPWUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nO3JldHVybiB0PyEhblt0XT8ubGVuZ3RoOiEhKG4ubGVmdD8ubGVuZ3RofHxuLnJpZ2h0Py5sZW5ndGgpfSxlLmdldExlZnRMZWFmQ29sdW1ucz1RKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldExlZnRMZWFmQ29sdW1uc2ApKSxlLmdldFJpZ2h0TGVhZkNvbHVtbnM9USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSwkKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0UmlnaHRMZWFmQ29sdW1uc2ApKSxlLmdldENlbnRlckxlYWZDb2x1bW5zPVEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCxuKT0+e2xldCByPVsuLi50Pz9bXSwuLi5uPz9bXV07cmV0dXJuIGUuZmlsdGVyKGU9PiFyLmluY2x1ZGVzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldENlbnRlckxlYWZDb2x1bW5zYCkpfX07ZnVuY3Rpb24gWXgoZSl7cmV0dXJuIGV8fCh0eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwpfXZhciBYeD17c2l6ZToxNTAsbWluU2l6ZToyMCxtYXhTaXplOjIqKjUzLTF9LFp4PSgpPT4oe3N0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxpc1Jlc2l6aW5nQ29sdW1uOiExLGNvbHVtblNpemluZ1N0YXJ0OltdfSksUXg9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Plh4LGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblNpemluZzp7fSxjb2x1bW5TaXppbmdJbmZvOlp4KCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7Y29sdW1uUmVzaXplTW9kZTpgb25FbmRgLGNvbHVtblJlc2l6ZURpcmVjdGlvbjpgbHRyYCxvbkNvbHVtblNpemluZ0NoYW5nZTp2eChgY29sdW1uU2l6aW5nYCxlKSxvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6dngoYGNvbHVtblNpemluZ0luZm9gLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRTaXplPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ1tlLmlkXTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZS5jb2x1bW5EZWYubWluU2l6ZT8/WHgubWluU2l6ZSxuPz9lLmNvbHVtbkRlZi5zaXplPz9YeC5zaXplKSxlLmNvbHVtbkRlZi5tYXhTaXplPz9YeC5tYXhTaXplKX0sZS5nZXRTdGFydD1RKGU9PltlLHJTKHQsZSksdC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ10sKHQsbik9Pm4uc2xpY2UoMCxlLmdldEluZGV4KHQpKS5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCksJCh0Lm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldFN0YXJ0YCkpLGUuZ2V0QWZ0ZXI9UShlPT5bZSxyUyh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKGUuZ2V0SW5kZXgodCkrMSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLCQodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBZnRlcmApKSxlLnJlc2V0U2l6ZT0oKT0+e3Quc2V0Q29sdW1uU2l6aW5nKHQ9PntsZXR7W2UuaWRdOm4sLi4ucn09dDtyZXR1cm4gcn0pfSxlLmdldENhblJlc2l6ZT0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uUmVzaXppbmc/PyEwKSxlLmdldElzUmVzaXppbmc9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdJbmZvLmlzUmVzaXppbmdDb2x1bW49PT1lLmlkfSxjcmVhdGVIZWFkZXI6KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgdD0wLG49ZT0+e2Uuc3ViSGVhZGVycy5sZW5ndGg/ZS5zdWJIZWFkZXJzLmZvckVhY2gobik6dCs9ZS5jb2x1bW4uZ2V0U2l6ZSgpPz8wfTtyZXR1cm4gbihlKSx0fSxlLmdldFN0YXJ0PSgpPT57aWYoZS5pbmRleD4wKXtsZXQgdD1lLmhlYWRlckdyb3VwLmhlYWRlcnNbZS5pbmRleC0xXTtyZXR1cm4gdC5nZXRTdGFydCgpK3QuZ2V0U2l6ZSgpfXJldHVybiAwfSxlLmdldFJlc2l6ZUhhbmRsZXI9bj0+e2xldCByPXQuZ2V0Q29sdW1uKGUuY29sdW1uLmlkKSxpPXI/LmdldENhblJlc2l6ZSgpO3JldHVybiBhPT57aWYoIXJ8fCFpfHwoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSx0UyhhKSYmYS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoPjEpKXJldHVybjtsZXQgbz1lLmdldFNpemUoKSxzPWU/ZS5nZXRMZWFmSGVhZGVycygpLm1hcChlPT5bZS5jb2x1bW4uaWQsZS5jb2x1bW4uZ2V0U2l6ZSgpXSk6W1tyLmlkLHIuZ2V0U2l6ZSgpXV0sYz10UyhhKT9NYXRoLnJvdW5kKGEudG91Y2hlc1swXS5jbGllbnRYKTphLmNsaWVudFgsbD17fSx1PShlLG4pPT57dHlwZW9mIG49PWBudW1iZXJgJiYodC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9PntsZXQgcj10Lm9wdGlvbnMuY29sdW1uUmVzaXplRGlyZWN0aW9uPT09YHJ0bGA/LTE6MSxpPShuLShlPy5zdGFydE9mZnNldD8/MCkpKnIsYT1NYXRoLm1heChpLyhlPy5zdGFydFNpemU/PzApLC0uOTk5OTk5KTtyZXR1cm4gZS5jb2x1bW5TaXppbmdTdGFydC5mb3JFYWNoKGU9PntsZXRbdCxuXT1lO2xbdF09TWF0aC5yb3VuZChNYXRoLm1heChuK24qYSwwKSoxMDApLzEwMH0pLHsuLi5lLGRlbHRhT2Zmc2V0OmksZGVsdGFQZXJjZW50YWdlOmF9fSksKHQub3B0aW9ucy5jb2x1bW5SZXNpemVNb2RlPT09YG9uQ2hhbmdlYHx8ZT09PWBlbmRgKSYmdC5zZXRDb2x1bW5TaXppbmcoZT0+KHsuLi5lLC4uLmx9KSkpfSxkPWU9PnUoYG1vdmVgLGUpLGY9ZT0+e3UoYGVuZGAsZSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxpc1Jlc2l6aW5nQ29sdW1uOiExLHN0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxjb2x1bW5TaXppbmdTdGFydDpbXX0pKX0scD1ZeChuKSxtPXttb3ZlSGFuZGxlcjplPT5kKGUuY2xpZW50WCksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZW1vdmVgLG0ubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYG1vdXNldXBgLG0udXBIYW5kbGVyKSxmKGUuY2xpZW50WCl9fSxoPXttb3ZlSGFuZGxlcjplPT4oZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGQoZS50b3VjaGVzWzBdLmNsaWVudFgpLCExKSx1cEhhbmRsZXI6ZT0+e3A/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNobW92ZWAsaC5tb3ZlSGFuZGxlcikscD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdG91Y2hlbmRgLGgudXBIYW5kbGVyKSxlLmNhbmNlbGFibGUmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSksZihlLnRvdWNoZXNbMF0/LmNsaWVudFgpfX0sZz1lUygpP3twYXNzaXZlOiExfTohMTt0UyhhKT8ocD8uYWRkRXZlbnRMaXN0ZW5lcihgdG91Y2htb3ZlYCxoLm1vdmVIYW5kbGVyLGcpLHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlcixnKSk6KHA/LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlbW92ZWAsbS5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlcixnKSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxzdGFydE9mZnNldDpjLHN0YXJ0U2l6ZTpvLGRlbHRhT2Zmc2V0OjAsZGVsdGFQZXJjZW50YWdlOjAsY29sdW1uU2l6aW5nU3RhcnQ6cyxpc1Jlc2l6aW5nQ29sdW1uOnIuaWR9KSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uU2l6aW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlKHQpLGUuc2V0Q29sdW1uU2l6aW5nSW5mbz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5TaXppbmc9dD0+e2Uuc2V0Q29sdW1uU2l6aW5nKHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nPz97fSl9LGUucmVzZXRIZWFkZXJTaXplSW5mbz10PT57ZS5zZXRDb2x1bW5TaXppbmdJbmZvKHQ/WngoKTplLmluaXRpYWxTdGF0ZS5jb2x1bW5TaXppbmdJbmZvPz9aeCgpKX0sZS5nZXRUb3RhbFNpemU9KCk9PmUuZ2V0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0TGVmdFRvdGFsU2l6ZT0oKT0+ZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0Q2VudGVyVG90YWxTaXplPSgpPT5lLmdldENlbnRlckhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldFJpZ2h0VG90YWxTaXplPSgpPT5lLmdldFJpZ2h0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wfX0sJHg9bnVsbDtmdW5jdGlvbiBlUygpe2lmKHR5cGVvZiAkeD09YGJvb2xlYW5gKXJldHVybiAkeDtsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fSxuPSgpPT57fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgdGVzdGAsbix0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdGVzdGAsbil9Y2F0Y2h7ZT0hMX1yZXR1cm4gJHg9ZSwkeH1mdW5jdGlvbiB0UyhlKXtyZXR1cm4gZS50eXBlPT09YHRvdWNoc3RhcnRgfXZhciBuUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uVmlzaWJpbGl0eTp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2U6dngoYGNvbHVtblZpc2liaWxpdHlgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS50b2dnbGVWaXNpYmlsaXR5PW49PntlLmdldENhbkhpZGUoKSYmdC5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ9Pih7Li4udCxbZS5pZF06bj8/IWUuZ2V0SXNWaXNpYmxlKCl9KSl9LGUuZ2V0SXNWaXNpYmxlPSgpPT57bGV0IG49ZS5jb2x1bW5zO3JldHVybihuLmxlbmd0aD9uLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGUoKSk6dC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHk/LltlLmlkXSk/PyEwfSxlLmdldENhbkhpZGU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVIaWRpbmc/PyEwKSxlLmdldFRvZ2dsZVZpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVWaXNpYmlsaXR5PT1udWxsfHxlLnRvZ2dsZVZpc2liaWxpdHkodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLl9nZXRBbGxWaXNpYmxlQ2VsbHM9USgoKT0+W2UuZ2V0QWxsQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLCQodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBfZ2V0QWxsVmlzaWJsZUNlbGxzYCkpLGUuZ2V0VmlzaWJsZUNlbGxzPVEoKCk9PltlLmdldExlZnRWaXNpYmxlQ2VsbHMoKSxlLmdldENlbnRlclZpc2libGVDZWxscygpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHMoKV0sKGUsdCxuKT0+Wy4uLmUsLi4udCwuLi5uXSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9KHQsbik9PlEoKCk9PltuKCksbigpLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+ZS5pZCkuam9pbihgX2ApXSxlPT5lLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZT09bnVsbD92b2lkIDA6ZS5nZXRJc1Zpc2libGUoKSksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsdCkpO2UuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zPXQoYGdldFZpc2libGVGbGF0Q29sdW1uc2AsKCk9PmUuZ2V0QWxsRmxhdENvbHVtbnMoKSksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpKSxlLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0TGVmdExlYWZDb2x1bW5zKCkpLGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldFJpZ2h0TGVhZkNvbHVtbnMoKSksZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSxlLnNldENvbHVtblZpc2liaWxpdHk9dD0+ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uVmlzaWJpbGl0eT10PT57ZS5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eT8/e30pfSxlLnRvZ2dsZUFsbENvbHVtbnNWaXNpYmxlPXQ9Pnt0Pz89IWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLGUuc2V0Q29sdW1uVmlzaWJpbGl0eShlLmdldEFsbExlYWZDb2x1bW5zKCkucmVkdWNlKChlLG4pPT4oey4uLmUsW24uaWRdOnR8fCEobi5nZXRDYW5IaWRlIT1udWxsJiZuLmdldENhbkhpZGUoKSl9KSx7fSkpfSxlLmdldElzQWxsQ29sdW1uc1Zpc2libGU9KCk9PiFlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZShlPT4hKGUuZ2V0SXNWaXNpYmxlIT1udWxsJiZlLmdldElzVmlzaWJsZSgpKSksZS5nZXRJc1NvbWVDb2x1bW5zVmlzaWJsZT0oKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLGUuZ2V0VG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSh0LnRhcmdldD8uY2hlY2tlZCl9fX07ZnVuY3Rpb24gclMoZSx0KXtyZXR1cm4gdD90PT09YGNlbnRlcmA/ZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnMoKTp0PT09YGxlZnRgP2UuZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1ucygpOmUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnMoKTplLmdldFZpc2libGVMZWFmQ29sdW1ucygpfXZhciBpUz17Y3JlYXRlVGFibGU6ZT0+e2UuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD0oKT0+ZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD9lLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKTplLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWwoKSxlLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPWUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyhlLGBfX2dsb2JhbF9fYCksZS5nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPSgpPT5lLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzP2UuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKTpuZXcgTWFwLGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9ZS5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMmJmUub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9KCk9PntpZihlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKXJldHVybiBlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKCl9fX0sYVM9e2dldEluaXRpYWxTdGF0ZTplPT4oe2dsb2JhbEZpbHRlcjp2b2lkIDAsLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25HbG9iYWxGaWx0ZXJDaGFuZ2U6dngoYGdsb2JhbEZpbHRlcmAsZSksZ2xvYmFsRmlsdGVyRm46YGF1dG9gLGdldENvbHVtbkNhbkdsb2JhbEZpbHRlcjp0PT57dmFyIG47bGV0IHI9KG49ZS5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXSk9PW51bGx8fChuPW4uX2dldEFsbENlbGxzQnlDb2x1bW5JZCgpW3QuaWRdKT09bnVsbD92b2lkIDA6bi5nZXRWYWx1ZSgpO3JldHVybiB0eXBlb2Ygcj09YHN0cmluZ2B8fHR5cGVvZiByPT1gbnVtYmVyYH19KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldENhbkdsb2JhbEZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmKCh0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyPT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyKGUpKT8/ITApJiYhIWUuYWNjZXNzb3JGbn0sY3JlYXRlVGFibGU6ZT0+e2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuPSgpPT56eC5pbmNsdWRlc1N0cmluZyxlLmdldEdsb2JhbEZpbHRlckZuPSgpPT57bGV0e2dsb2JhbEZpbHRlckZuOnR9PWUub3B0aW9ucztyZXR1cm4geXgodCk/dDp0PT09YGF1dG9gP2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuKCk6ZS5vcHRpb25zLmZpbHRlckZucz8uW3RdPz96eFt0XX0sZS5zZXRHbG9iYWxGaWx0ZXI9dD0+e2Uub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uR2xvYmFsRmlsdGVyQ2hhbmdlKHQpfSxlLnJlc2V0R2xvYmFsRmlsdGVyPXQ9PntlLnNldEdsb2JhbEZpbHRlcih0P3ZvaWQgMDplLmluaXRpYWxTdGF0ZS5nbG9iYWxGaWx0ZXIpfX19LG9TPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtleHBhbmRlZDp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkV4cGFuZGVkQ2hhbmdlOnZ4KGBleHBhbmRlZGAsZSkscGFnaW5hdGVFeHBhbmRlZFJvd3M6ITB9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRFeHBhbmRlZD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldEV4cGFuZGVkPz8hZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZyl7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRFeHBhbmRlZCgpLG49ITF9KX19LGUuc2V0RXhwYW5kZWQ9dD0+ZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKHQpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkPXQ9Pnt0Pz8hZS5nZXRJc0FsbFJvd3NFeHBhbmRlZCgpP2Uuc2V0RXhwYW5kZWQoITApOmUuc2V0RXhwYW5kZWQoe30pfSxlLnJlc2V0RXhwYW5kZWQ9dD0+e2Uuc2V0RXhwYW5kZWQodD97fTplLmluaXRpYWxTdGF0ZT8uZXhwYW5kZWQ/P3t9KX0sZS5nZXRDYW5Tb21lUm93c0V4cGFuZD0oKT0+ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PmUuZ2V0Q2FuRXhwYW5kKCkpLGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlcj0oKT0+dD0+e3QucGVyc2lzdD09bnVsbHx8dC5wZXJzaXN0KCksZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKX0sZS5nZXRJc1NvbWVSb3dzRXhwYW5kZWQ9KCk9PntsZXQgdD1lLmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuIHQ9PT0hMHx8T2JqZWN0LnZhbHVlcyh0KS5zb21lKEJvb2xlYW4pfSxlLmdldElzQWxsUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0eXBlb2YgdD09YGJvb2xlYW5gP3Q9PT0hMDohKCFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fGUuZ2V0Um93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PiFlLmdldElzRXhwYW5kZWQoKSkpfSxlLmdldEV4cGFuZGVkRGVwdGg9KCk9PntsZXQgdD0wO3JldHVybihlLmdldFN0YXRlKCkuZXhwYW5kZWQ9PT0hMD9PYmplY3Qua2V5cyhlLmdldFJvd01vZGVsKCkucm93c0J5SWQpOk9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5leHBhbmRlZCkpLmZvckVhY2goZT0+e2xldCBuPWUuc3BsaXQoYC5gKTt0PU1hdGgubWF4KHQsbi5sZW5ndGgpfSksdH0sZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsPSgpPT5lLmdldFNvcnRlZFJvd01vZGVsKCksZS5nZXRFeHBhbmRlZFJvd01vZGVsPSgpPT4oIWUuX2dldEV4cGFuZGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsJiYoZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZ3x8IWUuX2dldEV4cGFuZGVkUm93TW9kZWw/ZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCk6ZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVFeHBhbmRlZD1uPT57dC5zZXRFeHBhbmRlZChyPT57bGV0IGk9cj09PSEwfHwhIShyIT1udWxsJiZyW2UuaWRdKSxhPXt9O2lmKHI9PT0hMD9PYmplY3Qua2V5cyh0LmdldFJvd01vZGVsKCkucm93c0J5SWQpLmZvckVhY2goZT0+e2FbZV09ITB9KTphPXIsbj8/PSFpLCFpJiZuKXJldHVybnsuLi5hLFtlLmlkXTohMH07aWYoaSYmIW4pe2xldHtbZS5pZF06dCwuLi5ufT1hO3JldHVybiBufXJldHVybiByfSl9LGUuZ2V0SXNFeHBhbmRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4hISgodC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKT8/KG49PT0hMHx8bj8uW2UuaWRdKSl9LGUuZ2V0Q2FuRXhwYW5kPSgpPT57dmFyIG47cmV0dXJuKHQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQoZSkpPz8oKHQub3B0aW9ucy5lbmFibGVFeHBhbmRpbmc/PyEwKSYmISEoKG49ZS5zdWJSb3dzKSE9bnVsbCYmbi5sZW5ndGgpKX0sZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZD0oKT0+e2xldCBuPSEwLHI9ZTtmb3IoO24mJnIucGFyZW50SWQ7KXI9dC5nZXRSb3coci5wYXJlbnRJZCwhMCksbj1yLmdldElzRXhwYW5kZWQoKTtyZXR1cm4gbn0sZS5nZXRUb2dnbGVFeHBhbmRlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhbkV4cGFuZCgpO3JldHVybigpPT57dCYmZS50b2dnbGVFeHBhbmRlZCgpfX19fSxzUz0wLGNTPTEwLGxTPSgpPT4oe3BhZ2VJbmRleDpzUyxwYWdlU2l6ZTpjU30pLHVTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHsuLi5lLHBhZ2luYXRpb246ey4uLmxTKCksLi4uZT8ucGFnaW5hdGlvbn19KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUGFnaW5hdGlvbkNoYW5nZTp2eChgcGFnaW5hdGlvbmAsZSl9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRQYWdlSW5kZXg9KCk9PntpZighdCl7ZS5fcXVldWUoKCk9Pnt0PSEwfSk7cmV0dXJufWlmKGUub3B0aW9ucy5hdXRvUmVzZXRBbGw/P2Uub3B0aW9ucy5hdXRvUmVzZXRQYWdlSW5kZXg/PyFlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbil7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRQYWdlSW5kZXgoKSxuPSExfSl9fSxlLnNldFBhZ2luYXRpb249dD0+ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZShlPT5feCh0LGUpKSxlLnJlc2V0UGFnaW5hdGlvbj10PT57ZS5zZXRQYWdpbmF0aW9uKHQ/bFMoKTplLmluaXRpYWxTdGF0ZS5wYWdpbmF0aW9uPz9sUygpKX0sZS5zZXRQYWdlSW5kZXg9dD0+e2Uuc2V0UGFnaW5hdGlvbihuPT57bGV0IHI9X3godCxuLnBhZ2VJbmRleCksaT1lLm9wdGlvbnMucGFnZUNvdW50PT09dm9pZCAwfHxlLm9wdGlvbnMucGFnZUNvdW50PT09LTE/MioqNTMtMTplLm9wdGlvbnMucGFnZUNvdW50LTE7cmV0dXJuIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGkpKSx7Li4ubixwYWdlSW5kZXg6cn19KX0sZS5yZXNldFBhZ2VJbmRleD10PT57dmFyIG47ZS5zZXRQYWdlSW5kZXgodD9zUzooKG49ZS5pbml0aWFsU3RhdGUpPT1udWxsfHwobj1uLnBhZ2luYXRpb24pPT1udWxsP3ZvaWQgMDpuLnBhZ2VJbmRleCk/P3NTKX0sZS5yZXNldFBhZ2VTaXplPXQ9Pnt2YXIgbjtlLnNldFBhZ2VTaXplKHQ/Y1M6KChuPWUuaW5pdGlhbFN0YXRlKT09bnVsbHx8KG49bi5wYWdpbmF0aW9uKT09bnVsbD92b2lkIDA6bi5wYWdlU2l6ZSk/P2NTKX0sZS5zZXRQYWdlU2l6ZT10PT57ZS5zZXRQYWdpbmF0aW9uKGU9PntsZXQgbj1NYXRoLm1heCgxLF94KHQsZS5wYWdlU2l6ZSkpLHI9ZS5wYWdlU2l6ZSplLnBhZ2VJbmRleCxpPU1hdGguZmxvb3Ioci9uKTtyZXR1cm57Li4uZSxwYWdlSW5kZXg6aSxwYWdlU2l6ZTpufX0pfSxlLnNldFBhZ2VDb3VudD10PT5lLnNldFBhZ2luYXRpb24obj0+e2xldCByPV94KHQsZS5vcHRpb25zLnBhZ2VDb3VudD8/LTEpO3JldHVybiB0eXBlb2Ygcj09YG51bWJlcmAmJihyPU1hdGgubWF4KC0xLHIpKSx7Li4ubixwYWdlQ291bnQ6cn19KSxlLmdldFBhZ2VPcHRpb25zPVEoKCk9PltlLmdldFBhZ2VDb3VudCgpXSxlPT57bGV0IHQ9W107cmV0dXJuIGUmJmU+MCYmKHQ9Wy4uLkFycmF5KGUpXS5maWxsKG51bGwpLm1hcCgoZSx0KT0+dCkpLHR9LCQoZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0UGFnZU9wdGlvbnNgKSksZS5nZXRDYW5QcmV2aW91c1BhZ2U9KCk9PmUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLnBhZ2VJbmRleD4wLGUuZ2V0Q2FuTmV4dFBhZ2U9KCk9PntsZXR7cGFnZUluZGV4OnR9PWUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLG49ZS5nZXRQYWdlQ291bnQoKTtyZXR1cm4gbj09PS0xfHxuIT09MCYmdDxuLTF9LGUucHJldmlvdXNQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lLTEpLGUubmV4dFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGU9PmUrMSksZS5maXJzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KDApLGUubGFzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGUuZ2V0UGFnZUNvdW50KCktMSksZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWw9KCk9PmUuZ2V0RXhwYW5kZWRSb3dNb2RlbCgpLGUuZ2V0UGFnaW5hdGlvblJvd01vZGVsPSgpPT4oIWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCYmZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbCYmKGUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD1lLm9wdGlvbnMuZ2V0UGFnaW5hdGlvblJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbnx8IWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpOmUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCgpKSxlLmdldFBhZ2VDb3VudD0oKT0+ZS5vcHRpb25zLnBhZ2VDb3VudD8/TWF0aC5jZWlsKGUuZ2V0Um93Q291bnQoKS9lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlU2l6ZSksZS5nZXRSb3dDb3VudD0oKT0+ZS5vcHRpb25zLnJvd0NvdW50Pz9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpLnJvd3MubGVuZ3RofX0sZFM9KCk9Pih7dG9wOltdLGJvdHRvbTpbXX0pLGZTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtyb3dQaW5uaW5nOmRTKCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Sb3dQaW5uaW5nQ2hhbmdlOnZ4KGByb3dQaW5uaW5nYCxlKX0pLGNyZWF0ZVJvdzooZSx0KT0+e2UucGluPShuLHIsaSk9PntsZXQgYT1yP2UuZ2V0TGVhZlJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10sbz1pP2UuZ2V0UGFyZW50Um93cygpLm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KTpbXSxzPW5ldyBTZXQoWy4uLm8sZS5pZCwuLi5hXSk7dC5zZXRSb3dQaW5uaW5nKGU9Pm49PT1gYm90dG9tYD97dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTpbLi4uKGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV19Om49PT1gdG9wYD97dG9wOlsuLi4oZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSwuLi5BcnJheS5mcm9tKHMpXSxib3R0b206KGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSl9Ont0b3A6KGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT57bGV0e2VuYWJsZVJvd1Bpbm5pbmc6bixlbmFibGVQaW5uaW5nOnJ9PXQub3B0aW9ucztyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/bihlKTpuPz9yPz8hMH0sZS5nZXRJc1Bpbm5lZD0oKT0+e2xldCBuPVtlLmlkXSx7dG9wOnIsYm90dG9tOml9PXQuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YHRvcGA6bz9gYm90dG9tYDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e2xldCBuPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gbj8oKG49PT1gdG9wYD90LmdldFRvcFJvd3MoKTp0LmdldEJvdHRvbVJvd3MoKSk/Lm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KSk/LmluZGV4T2YoZS5pZCk/Py0xOi0xfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93UGlubmluZz10PT5lLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlKHQpLGUucmVzZXRSb3dQaW5uaW5nPXQ9PmUuc2V0Um93UGlubmluZyh0P2RTKCk6ZS5pbml0aWFsU3RhdGU/LnJvd1Bpbm5pbmc/P2RTKCkpLGUuZ2V0SXNTb21lUm93c1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi50b3A/Lmxlbmd0aHx8bi5ib3R0b20/Lmxlbmd0aCl9LGUuX2dldFBpbm5lZFJvd3M9KHQsbixyKT0+KGUub3B0aW9ucy5rZWVwUGlubmVkUm93cz8/ITA/KG4/P1tdKS5tYXAodD0+e2xldCBuPWUuZ2V0Um93KHQsITApO3JldHVybiBuLmdldElzQWxsUGFyZW50c0V4cGFuZGVkKCk/bjpudWxsfSk6KG4/P1tdKS5tYXAoZT0+dC5maW5kKHQ9PnQuaWQ9PT1lKSkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOnJ9KSksZS5nZXRUb3BSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3BdLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgdG9wYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFRvcFJvd3NgKSksZS5nZXRCb3R0b21Sb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgYm90dG9tYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEJvdHRvbVJvd3NgKSksZS5nZXRDZW50ZXJSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3AsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwoZSx0LG4pPT57bGV0IHI9bmV3IFNldChbLi4udD8/W10sLi4ubj8/W11dKTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaGFzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclJvd3NgKSl9fSxwUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93U2VsZWN0aW9uOnt9LC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93U2VsZWN0aW9uQ2hhbmdlOnZ4KGByb3dTZWxlY3Rpb25gLGUpLGVuYWJsZVJvd1NlbGVjdGlvbjohMCxlbmFibGVNdWx0aVJvd1NlbGVjdGlvbjohMCxlbmFibGVTdWJSb3dTZWxlY3Rpb246ITB9KSxjcmVhdGVUYWJsZTplPT57ZS5zZXRSb3dTZWxlY3Rpb249dD0+ZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dTZWxlY3Rpb25DaGFuZ2UodCksZS5yZXNldFJvd1NlbGVjdGlvbj10PT5lLnNldFJvd1NlbGVjdGlvbih0P3t9OmUuaW5pdGlhbFN0YXRlLnJvd1NlbGVjdGlvbj8/e30pLGUudG9nZ2xlQWxsUm93c1NlbGVjdGVkPXQ9PntlLnNldFJvd1NlbGVjdGlvbihuPT57dD10PT09dm9pZCAwPyFlLmdldElzQWxsUm93c1NlbGVjdGVkKCk6dDtsZXQgcj17Li4ubn0saT1lLmdldFByZUdyb3VwZWRSb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiB0P2kuZm9yRWFjaChlPT57ZS5nZXRDYW5TZWxlY3QoKSYmKHJbZS5pZF09ITApfSk6aS5mb3JFYWNoKGU9PntkZWxldGUgcltlLmlkXX0pLHJ9KX0sZS50b2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkPXQ9PmUuc2V0Um93U2VsZWN0aW9uKG49PntsZXQgcj10PT09dm9pZCAwPyFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpOnQsaT17Li4ubn07cmV0dXJuIGUuZ2V0Um93TW9kZWwoKS5yb3dzLmZvckVhY2godD0+e21TKGksdC5pZCxyLCEwLGUpfSksaX0pLGUuZ2V0UHJlU2VsZWN0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRDb3JlUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9oUyhlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/aFMoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbD1RKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldFNvcnRlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/aFMoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldElzQWxsUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Mse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hISh0Lmxlbmd0aCYmT2JqZWN0LmtleXMobikubGVuZ3RoKTtyZXR1cm4gciYmdC5zb21lKGU9PmUuZ2V0Q2FuU2VsZWN0KCkmJiFuW2UuaWRdKSYmKHI9ITEpLHJ9LGUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5maWx0ZXIoZT0+ZS5nZXRDYW5TZWxlY3QoKSkse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hIXQubGVuZ3RoO3JldHVybiByJiZ0LnNvbWUoZT0+IW5bZS5pZF0pJiYocj0hMSkscn0sZS5nZXRJc1NvbWVSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1PYmplY3Qua2V5cyhlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uPz97fSkubGVuZ3RoO3JldHVybiB0PjAmJnQ8ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MubGVuZ3RofSxlLmdldElzU29tZVBhZ2VSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpJiZ0LmZpbHRlcihlPT5lLmdldENhblNlbGVjdCgpKS5zb21lKGU9PmUuZ2V0SXNTZWxlY3RlZCgpfHxlLmdldElzU29tZVNlbGVjdGVkKCkpfSxlLmdldFRvZ2dsZUFsbFJvd3NTZWxlY3RlZEhhbmRsZXI9KCk9PnQ9PntlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX0sZS5nZXRUb2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkSGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX19LGNyZWF0ZVJvdzooZSx0KT0+e2UudG9nZ2xlU2VsZWN0ZWQ9KG4scik9PntsZXQgaT1lLmdldElzU2VsZWN0ZWQoKTt0LnNldFJvd1NlbGVjdGlvbihhPT57aWYobj1uPT09dm9pZCAwPyFpOm4sZS5nZXRDYW5TZWxlY3QoKSYmaT09PW4pcmV0dXJuIGE7bGV0IG89ey4uLmF9O3JldHVybiBtUyhvLGUuaWQsbixyPy5zZWxlY3RDaGlsZHJlbj8/ITAsdCksb30pfSxlLmdldElzU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gZ1MoZSxuKX0sZS5nZXRJc1NvbWVTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiBfUyhlLG4pPT09YHNvbWVgfSxlLmdldElzQWxsU3ViUm93c1NlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIF9TKGUsbik9PT1gYWxsYH0sZS5nZXRDYW5TZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRDYW5TZWxlY3RTdWJSb3dzPSgpPT50eXBlb2YgdC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb24/PyEwLGUuZ2V0Q2FuTXVsdGlTZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRUb2dnbGVTZWxlY3RlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhblNlbGVjdCgpO3JldHVybiBuPT57dCYmZS50b2dnbGVTZWxlY3RlZChuLnRhcmdldD8uY2hlY2tlZCl9fX19LG1TPShlLHQsbixyLGkpPT57dmFyIGE7bGV0IG89aS5nZXRSb3codCwhMCk7bj8oby5nZXRDYW5NdWx0aVNlbGVjdCgpfHxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PmRlbGV0ZSBlW3RdKSxvLmdldENhblNlbGVjdCgpJiYoZVt0XT0hMCkpOmRlbGV0ZSBlW3RdLHImJihhPW8uc3ViUm93cykhPW51bGwmJmEubGVuZ3RoJiZvLmdldENhblNlbGVjdFN1YlJvd3MoKSYmby5zdWJSb3dzLmZvckVhY2godD0+bVMoZSx0LmlkLG4scixpKSl9O2Z1bmN0aW9uIGhTKGUsdCl7bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixyPVtdLGk9e30sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChlPT57dmFyIHQ7bGV0IG89Z1MoZSxuKTtpZihvJiYoci5wdXNoKGUpLGlbZS5pZF09ZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlPXsuLi5lLHN1YlJvd3M6YShlLnN1YlJvd3MpfSksbylyZXR1cm4gZX0pLmZpbHRlcihCb29sZWFuKX07cmV0dXJue3Jvd3M6YSh0LnJvd3MpLGZsYXRSb3dzOnIscm93c0J5SWQ6aX19ZnVuY3Rpb24gZ1MoZSx0KXtyZXR1cm4gdFtlLmlkXT8/ITF9ZnVuY3Rpb24gX1MoZSx0LG4pe3ZhciByO2lmKCEoKHI9ZS5zdWJSb3dzKSE9bnVsbCYmci5sZW5ndGgpKXJldHVybiExO2xldCBpPSEwLGE9ITE7cmV0dXJuIGUuc3ViUm93cy5mb3JFYWNoKGU9PntpZighKGEmJiFpKSYmKGUuZ2V0Q2FuU2VsZWN0KCkmJihnUyhlLHQpP2E9ITA6aT0hMSksZS5zdWJSb3dzJiZlLnN1YlJvd3MubGVuZ3RoKSl7bGV0IG49X1MoZSx0KTtuPT09YGFsbGA/YT0hMDoobj09PWBzb21lYCYmKGE9ITApLGk9ITEpfX0pLGk/YGFsbGA6YT9gc29tZWA6ITF9dmFyIHZTPS8oWzAtOV0rKS9nbSx5Uz0oZSx0LG4pPT5EUyhFUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLEVTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLGJTPShlLHQsbik9PkRTKEVTKGUuZ2V0VmFsdWUobikpLEVTKHQuZ2V0VmFsdWUobikpKSx4Uz0oZSx0LG4pPT5UUyhFUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLEVTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLFNTPShlLHQsbik9PlRTKEVTKGUuZ2V0VmFsdWUobikpLEVTKHQuZ2V0VmFsdWUobikpKSxDUz0oZSx0LG4pPT57bGV0IHI9ZS5nZXRWYWx1ZShuKSxpPXQuZ2V0VmFsdWUobik7cmV0dXJuIHI+aT8xOnI8aT8tMTowfSx3Uz0oZSx0LG4pPT5UUyhlLmdldFZhbHVlKG4pLHQuZ2V0VmFsdWUobikpO2Z1bmN0aW9uIFRTKGUsdCl7cmV0dXJuIGU9PT10PzA6ZT50PzE6LTF9ZnVuY3Rpb24gRVMoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD9pc05hTihlKXx8ZT09PTEvMHx8ZT09PS0xLzA/YGA6U3RyaW5nKGUpOnR5cGVvZiBlPT1gc3RyaW5nYD9lOmBgfWZ1bmN0aW9uIERTKGUsdCl7bGV0IG49ZS5zcGxpdCh2UykuZmlsdGVyKEJvb2xlYW4pLHI9dC5zcGxpdCh2UykuZmlsdGVyKEJvb2xlYW4pO2Zvcig7bi5sZW5ndGgmJnIubGVuZ3RoOyl7bGV0IGU9bi5zaGlmdCgpLHQ9ci5zaGlmdCgpLGk9cGFyc2VJbnQoZSwxMCksYT1wYXJzZUludCh0LDEwKSxvPVtpLGFdLnNvcnQoKTtpZihpc05hTihvWzBdKSl7aWYoZT50KXJldHVybiAxO2lmKHQ+ZSlyZXR1cm4tMTtjb250aW51ZX1pZihpc05hTihvWzFdKSlyZXR1cm4gaXNOYU4oaSk/LTE6MTtpZihpPmEpcmV0dXJuIDE7aWYoYT5pKXJldHVybi0xfXJldHVybiBuLmxlbmd0aC1yLmxlbmd0aH12YXIgT1M9e2FscGhhbnVtZXJpYzp5UyxhbHBoYW51bWVyaWNDYXNlU2Vuc2l0aXZlOmJTLHRleHQ6eFMsdGV4dENhc2VTZW5zaXRpdmU6U1MsZGF0ZXRpbWU6Q1MsYmFzaWM6d1N9LGtTPVtFeCxuUyxLeCxKeCxreCxWeCxpUyxhUyx7Z2V0SW5pdGlhbFN0YXRlOmU9Pih7c29ydGluZzpbXSwuLi5lfSksZ2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHtzb3J0aW5nRm46YGF1dG9gLHNvcnRVbmRlZmluZWQ6MX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Tb3J0aW5nQ2hhbmdlOnZ4KGBzb3J0aW5nYCxlKSxpc011bHRpU29ydEV2ZW50OmU9PmUuc2hpZnRLZXl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEF1dG9Tb3J0aW5nRm49KCk9PntsZXQgbj10LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93cy5zbGljZSgxMCkscj0hMTtmb3IobGV0IHQgb2Ygbil7bGV0IG49dD8uZ2V0VmFsdWUoZS5pZCk7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09YFtvYmplY3QgRGF0ZV1gKXJldHVybiBPUy5kYXRldGltZTtpZih0eXBlb2Ygbj09YHN0cmluZ2AmJihyPSEwLG4uc3BsaXQodlMpLmxlbmd0aD4xKSlyZXR1cm4gT1MuYWxwaGFudW1lcmljfXJldHVybiByP09TLnRleHQ6T1MuYmFzaWN9LGUuZ2V0QXV0b1NvcnREaXI9KCk9PnR5cGVvZiB0LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk9PWBzdHJpbmdgP2Bhc2NgOmBkZXNjYCxlLmdldFNvcnRpbmdGbj0oKT0+e2lmKCFlKXRocm93IEVycm9yKCk7cmV0dXJuIHl4KGUuY29sdW1uRGVmLnNvcnRpbmdGbik/ZS5jb2x1bW5EZWYuc29ydGluZ0ZuOmUuY29sdW1uRGVmLnNvcnRpbmdGbj09PWBhdXRvYD9lLmdldEF1dG9Tb3J0aW5nRm4oKTp0Lm9wdGlvbnMuc29ydGluZ0Zucz8uW2UuY29sdW1uRGVmLnNvcnRpbmdGbl0/P09TW2UuY29sdW1uRGVmLnNvcnRpbmdGbl19LGUudG9nZ2xlU29ydGluZz0obixyKT0+e2xldCBpPWUuZ2V0TmV4dFNvcnRpbmdPcmRlcigpLGE9biE9bnVsbDt0LnNldFNvcnRpbmcobz0+e2xldCBzPW8/LmZpbmQodD0+dC5pZD09PWUuaWQpLGM9bz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSxsPVtdLHUsZD1hP246aT09PWBkZXNjYDtyZXR1cm4gdT1vIT1udWxsJiZvLmxlbmd0aCYmZS5nZXRDYW5NdWx0aVNvcnQoKSYmcj9zP2B0b2dnbGVgOmBhZGRgOm8hPW51bGwmJm8ubGVuZ3RoJiZjIT09by5sZW5ndGgtMT9gcmVwbGFjZWA6cz9gdG9nZ2xlYDpgcmVwbGFjZWAsdT09PWB0b2dnbGVgJiYoYXx8aXx8KHU9YHJlbW92ZWApKSx1PT09YGFkZGA/KGw9Wy4uLm8se2lkOmUuaWQsZGVzYzpkfV0sbC5zcGxpY2UoMCxsLmxlbmd0aC0odC5vcHRpb25zLm1heE11bHRpU29ydENvbENvdW50Pz8yKio1My0xKSkpOmw9dT09PWB0b2dnbGVgP28ubWFwKHQ9PnQuaWQ9PT1lLmlkP3suLi50LGRlc2M6ZH06dCk6dT09PWByZW1vdmVgP28uZmlsdGVyKHQ9PnQuaWQhPT1lLmlkKTpbe2lkOmUuaWQsZGVzYzpkfV0sbH0pfSxlLmdldEZpcnN0U29ydERpcj0oKT0+ZS5jb2x1bW5EZWYuc29ydERlc2NGaXJzdD8/dC5vcHRpb25zLnNvcnREZXNjRmlyc3Q/P2UuZ2V0QXV0b1NvcnREaXIoKT09PWBkZXNjYD9gZGVzY2A6YGFzY2AsZS5nZXROZXh0U29ydGluZ09yZGVyPW49PntsZXQgcj1lLmdldEZpcnN0U29ydERpcigpLGk9ZS5nZXRJc1NvcnRlZCgpO3JldHVybiBpP2khPT1yJiYodC5vcHRpb25zLmVuYWJsZVNvcnRpbmdSZW1vdmFsPz8hMCkmJighbnx8KHQub3B0aW9ucy5lbmFibGVNdWx0aVJlbW92ZT8/ITApKT8hMTppPT09YGRlc2NgP2Bhc2NgOmBkZXNjYDpyfSxlLmdldENhblNvcnQ9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVTb3J0aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlU29ydGluZz8/ITApJiYhIWUuYWNjZXNzb3JGbixlLmdldENhbk11bHRpU29ydD0oKT0+ZS5jb2x1bW5EZWYuZW5hYmxlTXVsdGlTb3J0Pz90Lm9wdGlvbnMuZW5hYmxlTXVsdGlTb3J0Pz8hIWUuYWNjZXNzb3JGbixlLmdldElzU29ydGVkPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLnNvcnRpbmc/LmZpbmQodD0+dC5pZD09PWUuaWQpO3JldHVybiBuP24uZGVzYz9gZGVzY2A6YGFzY2A6ITF9LGUuZ2V0U29ydEluZGV4PSgpPT50LmdldFN0YXRlKCkuc29ydGluZz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5jbGVhclNvcnRpbmc9KCk9Pnt0LnNldFNvcnRpbmcodD0+dCE9bnVsbCYmdC5sZW5ndGg/dC5maWx0ZXIodD0+dC5pZCE9PWUuaWQpOltdKX0sZS5nZXRUb2dnbGVTb3J0aW5nSGFuZGxlcj0oKT0+e2xldCBuPWUuZ2V0Q2FuU29ydCgpO3JldHVybiByPT57biYmKHIucGVyc2lzdD09bnVsbHx8ci5wZXJzaXN0KCksZS50b2dnbGVTb3J0aW5nPT1udWxsfHxlLnRvZ2dsZVNvcnRpbmcodm9pZCAwLGUuZ2V0Q2FuTXVsdGlTb3J0KCk/dC5vcHRpb25zLmlzTXVsdGlTb3J0RXZlbnQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5pc011bHRpU29ydEV2ZW50KHIpOiExKSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0U29ydGluZz10PT5lLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlKHQpLGUucmVzZXRTb3J0aW5nPXQ9PntlLnNldFNvcnRpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uc29ydGluZz8/W10pfSxlLmdldFByZVNvcnRlZFJvd01vZGVsPSgpPT5lLmdldEdyb3VwZWRSb3dNb2RlbCgpLGUuZ2V0U29ydGVkUm93TW9kZWw9KCk9PighZS5fZ2V0U29ydGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbCYmKGUuX2dldFNvcnRlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFNvcnRpbmd8fCFlLl9nZXRTb3J0ZWRSb3dNb2RlbD9lLmdldFByZVNvcnRlZFJvd01vZGVsKCk6ZS5fZ2V0U29ydGVkUm93TW9kZWwoKSl9fSxXeCxvUyx1UyxmUyxwUyxReF07ZnVuY3Rpb24gQVMoZSl7bGV0IHQ9Wy4uLmtTLC4uLmUuX2ZlYXR1cmVzPz9bXV0sbj17X2ZlYXR1cmVzOnR9LHI9bi5fZmVhdHVyZXMucmVkdWNlKChlLHQpPT5PYmplY3QuYXNzaWduKGUsdC5nZXREZWZhdWx0T3B0aW9ucz09bnVsbD92b2lkIDA6dC5nZXREZWZhdWx0T3B0aW9ucyhuKSkse30pLGk9ZT0+bi5vcHRpb25zLm1lcmdlT3B0aW9ucz9uLm9wdGlvbnMubWVyZ2VPcHRpb25zKHIsZSk6ey4uLnIsLi4uZX0sYT17Li4uZS5pbml0aWFsU3RhdGU/P3t9fTtuLl9mZWF0dXJlcy5mb3JFYWNoKGU9PnthPShlLmdldEluaXRpYWxTdGF0ZT09bnVsbD92b2lkIDA6ZS5nZXRJbml0aWFsU3RhdGUoYSkpPz9hfSk7bGV0IG89W10scz0hMSxjPXtfZmVhdHVyZXM6dCxvcHRpb25zOnsuLi5yLC4uLmV9LGluaXRpYWxTdGF0ZTphLF9xdWV1ZTplPT57by5wdXNoKGUpLHN8fChzPSEwLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pntmb3IoO28ubGVuZ3RoOylvLnNoaWZ0KCkoKTtzPSExfSkuY2F0Y2goZT0+c2V0VGltZW91dCgoKT0+e3Rocm93IGV9KSkpfSxyZXNldDooKT0+e24uc2V0U3RhdGUobi5pbml0aWFsU3RhdGUpfSxzZXRPcHRpb25zOmU9PntsZXQgdD1feChlLG4ub3B0aW9ucyk7bi5vcHRpb25zPWkodCl9LGdldFN0YXRlOigpPT5uLm9wdGlvbnMuc3RhdGUsc2V0U3RhdGU6ZT0+e24ub3B0aW9ucy5vblN0YXRlQ2hhbmdlPT1udWxsfHxuLm9wdGlvbnMub25TdGF0ZUNoYW5nZShlKX0sX2dldFJvd0lkOihlLHQscik9PihuLm9wdGlvbnMuZ2V0Um93SWQ9PW51bGw/dm9pZCAwOm4ub3B0aW9ucy5nZXRSb3dJZChlLHQscikpPz9gJHtyP1tyLmlkLHRdLmpvaW4oYC5gKTp0fWAsZ2V0Q29yZVJvd01vZGVsOigpPT4obi5fZ2V0Q29yZVJvd01vZGVsfHw9bi5vcHRpb25zLmdldENvcmVSb3dNb2RlbChuKSxuLl9nZXRDb3JlUm93TW9kZWwoKSksZ2V0Um93TW9kZWw6KCk9Pm4uZ2V0UGFnaW5hdGlvblJvd01vZGVsKCksZ2V0Um93OihlLHQpPT57bGV0IHI9KHQ/bi5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTpuLmdldFJvd01vZGVsKCkpLnJvd3NCeUlkW2VdO2lmKCFyJiYocj1uLmdldENvcmVSb3dNb2RlbCgpLnJvd3NCeUlkW2VdLCFyKSl0aHJvdyBFcnJvcigpO3JldHVybiByfSxfZ2V0RGVmYXVsdENvbHVtbkRlZjpRKCgpPT5bbi5vcHRpb25zLmRlZmF1bHRDb2x1bW5dLGU9PihlPz89e30se2hlYWRlcjplPT57bGV0IHQ9ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZjtyZXR1cm4gdC5hY2Nlc3NvcktleT90LmFjY2Vzc29yS2V5OnQuYWNjZXNzb3JGbj90LmlkOm51bGx9LGNlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLnJlbmRlclZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSwuLi5uLl9mZWF0dXJlcy5yZWR1Y2UoKGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0LmdldERlZmF1bHRDb2x1bW5EZWY9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdENvbHVtbkRlZigpKSx7fSksLi4uZX0pLCQoZSxgZGVidWdDb2x1bW5zYCxgX2dldERlZmF1bHRDb2x1bW5EZWZgKSksX2dldENvbHVtbkRlZnM6KCk9Pm4ub3B0aW9ucy5jb2x1bW5zLGdldEFsbENvbHVtbnM6USgoKT0+W24uX2dldENvbHVtbkRlZnMoKV0sZT0+e2xldCB0PWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksZS5tYXAoZT0+e2xldCBhPUN4KG4sZSxpLHIpLG89ZTtyZXR1cm4gYS5jb2x1bW5zPW8uY29sdW1ucz90KG8uY29sdW1ucyxhLGkrMSk6W10sYX0pfTtyZXR1cm4gdChlKX0sJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxDb2x1bW5zYCkpLGdldEFsbEZsYXRDb2x1bW5zOlEoKCk9PltuLmdldEFsbENvbHVtbnMoKV0sZT0+ZS5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSksJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc2ApKSxfZ2V0QWxsRmxhdENvbHVtbnNCeUlkOlEoKCk9PltuLmdldEFsbEZsYXRDb2x1bW5zKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmlkXT10LGUpLHt9KSwkKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbEZsYXRDb2x1bW5zQnlJZGApKSxnZXRBbGxMZWFmQ29sdW1uczpRKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCksbi5fZ2V0T3JkZXJDb2x1bW5zRm4oKV0sKGUsdCk9PnQoZS5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpLCQoZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsTGVhZkNvbHVtbnNgKSksZ2V0Q29sdW1uOmU9Pm4uX2dldEFsbEZsYXRDb2x1bW5zQnlJZCgpW2VdfTtPYmplY3QuYXNzaWduKG4sYyk7Zm9yKGxldCBlPTA7ZTxuLl9mZWF0dXJlcy5sZW5ndGg7ZSsrKXtsZXQgdD1uLl9mZWF0dXJlc1tlXTt0PT1udWxsfHx0LmNyZWF0ZVRhYmxlPT1udWxsfHx0LmNyZWF0ZVRhYmxlKG4pfXJldHVybiBufWZ1bmN0aW9uIGpTKCl7cmV0dXJuIGU9PlEoKCk9PltlLm9wdGlvbnMuZGF0YV0sdD0+e2xldCBuPXtyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxyPWZ1bmN0aW9uKHQsaSxhKXtpPT09dm9pZCAwJiYoaT0wKTtsZXQgbz1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7bGV0IGw9T3goZSxlLl9nZXRSb3dJZCh0W2NdLGMsYSksdFtjXSxjLGksdm9pZCAwLGE/LmlkKTtpZihuLmZsYXRSb3dzLnB1c2gobCksbi5yb3dzQnlJZFtsLmlkXT1sLG8ucHVzaChsKSxlLm9wdGlvbnMuZ2V0U3ViUm93cyl7dmFyIHM7bC5vcmlnaW5hbFN1YlJvd3M9ZS5vcHRpb25zLmdldFN1YlJvd3ModFtjXSxjKSwocz1sLm9yaWdpbmFsU3ViUm93cykhPW51bGwmJnMubGVuZ3RoJiYobC5zdWJSb3dzPXIobC5vcmlnaW5hbFN1YlJvd3MsaSsxLGwpKX19cmV0dXJuIG99O3JldHVybiBuLnJvd3M9cih0KSxufSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBNUygpe3JldHVybiBlPT5RKCgpPT5bZS5nZXRTdGF0ZSgpLnNvcnRpbmcsZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpXSwodCxuKT0+e2lmKCFuLnJvd3MubGVuZ3RofHwhKHQhPW51bGwmJnQubGVuZ3RoKSlyZXR1cm4gbjtsZXQgcj1lLmdldFN0YXRlKCkuc29ydGluZyxpPVtdLGE9ci5maWx0ZXIodD0+ZS5nZXRDb2x1bW4odC5pZCk/LmdldENhblNvcnQoKSksbz17fTthLmZvckVhY2godD0+e2xldCBuPWUuZ2V0Q29sdW1uKHQuaWQpO24mJihvW3QuaWRdPXtzb3J0VW5kZWZpbmVkOm4uY29sdW1uRGVmLnNvcnRVbmRlZmluZWQsaW52ZXJ0U29ydGluZzpuLmNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nLHNvcnRpbmdGbjpuLmdldFNvcnRpbmdGbigpfSl9KTtsZXQgcz1lPT57bGV0IHQ9ZS5tYXAoZT0+KHsuLi5lfSkpO3JldHVybiB0LnNvcnQoKGUsdCk9Pntmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rPTEpe2xldCByPWFbbl0saT1vW3IuaWRdLHM9aS5zb3J0VW5kZWZpbmVkLGM9cj8uZGVzYz8/ITEsbD0wO2lmKHMpe2xldCBuPWUuZ2V0VmFsdWUoci5pZCksaT10LmdldFZhbHVlKHIuaWQpLGE9bj09PXZvaWQgMCxvPWk9PT12b2lkIDA7aWYoYXx8byl7aWYocz09PWBmaXJzdGApcmV0dXJuIGE/LTE6MTtpZihzPT09YGxhc3RgKXJldHVybiBhPzE6LTE7bD1hJiZvPzA6YT9zOi1zfX1pZihsPT09MCYmKGw9aS5zb3J0aW5nRm4oZSx0LHIuaWQpKSxsIT09MClyZXR1cm4gYyYmKGwqPS0xKSxpLmludmVydFNvcnRpbmcmJihsKj0tMSksbH1yZXR1cm4gZS5pbmRleC10LmluZGV4fSksdC5mb3JFYWNoKGU9Pnt2YXIgdDtpLnB1c2goZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlLnN1YlJvd3M9cyhlLnN1YlJvd3MpKX0pLHR9O3JldHVybntyb3dzOnMobi5yb3dzKSxmbGF0Um93czppLHJvd3NCeUlkOm4ucm93c0J5SWR9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNvcnRlZFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBOUygpe3JldHVybiEwfXZhciBQUz1TeW1ib2woYG1lcmdlLXByb3h5YCksRlM9e2dldChlLHQsbil7cmV0dXJuIHQ9PT1QUz9uOmUuZ2V0KHQpfSxoYXMoZSx0KXtyZXR1cm4gZS5oYXModCl9LHNldDpOUyxkZWxldGVQcm9wZXJ0eTpOUyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIGUuZ2V0KHQpfSxzZXQ6TlMsZGVsZXRlUHJvcGVydHk6TlN9fSxvd25LZXlzKGUpe3JldHVybiBlLmtleXMoKX19O2Z1bmN0aW9uIElTKGUpe3JldHVybmB2YWx1ZWBpbiBlP2UudmFsdWU6ZX1mdW5jdGlvbiBMUygpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3JldHVybiBuZXcgUHJveHkoe2dldCh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IHI9SVMoZVtuXSlbdF07aWYociE9PXZvaWQgMClyZXR1cm4gcn19LGhhcyh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZih0IGluIElTKGVbbl0pKXJldHVybiEwO3JldHVybiExfSxrZXlzKCl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKC4uLk9iamVjdC5rZXlzKElTKGVbbl0pKSk7cmV0dXJuWy4uLkFycmF5LmZyb20obmV3IFNldCh0KSldfX0sRlMpfXZhciBSUz1GKHtwcm9wczpbYHJlbmRlcmAsYHByb3BzYF0sc2V0dXA6ZT0+KCk9PnR5cGVvZiBlLnJlbmRlcj09YGZ1bmN0aW9uYHx8dHlwZW9mIGUucmVuZGVyPT1gb2JqZWN0YD90YyhlLnJlbmRlcixlLnByb3BzKTplLnJlbmRlcn0pO2Z1bmN0aW9uIHpTKGUpe3JldHVybiBMUyhlLHtkYXRhOk4oZS5kYXRhKX0pfWZ1bmN0aW9uIEJTKGUpe2xldCB0PWooZS5kYXRhKSxuPUFTKExTKHtzdGF0ZTp7fSxvblN0YXRlQ2hhbmdlOigpPT57fSxyZW5kZXJGYWxsYmFja1ZhbHVlOm51bGwsbWVyZ2VPcHRpb25zKGUsbil7cmV0dXJuIHQ/ey4uLmUsLi4ubn06TFMoZSxuKX19LHQ/elMoZSk6ZSkpO2lmKHQpe2xldCB0PXVuKGUuZGF0YSk7RXIodCwoKT0+e24uc2V0U3RhdGUoZT0+KHsuLi5lLGRhdGE6dC52YWx1ZX0pKX0se2ltbWVkaWF0ZTohMH0pfWxldCByPU0obi5pbml0aWFsU3RhdGUpO3JldHVybiBDcigoKT0+e24uc2V0T3B0aW9ucyhuPT57bGV0IGk9bmV3IFByb3h5KHt9LHtnZXQ6KGUsdCk9PnIudmFsdWVbdF19KTtyZXR1cm4gTFMobix0P3pTKGUpOmUse3N0YXRlOkxTKGksZS5zdGF0ZT8/e30pLG9uU3RhdGVDaGFuZ2U6dD0+e3QgaW5zdGFuY2VvZiBGdW5jdGlvbj9yLnZhbHVlPXQoci52YWx1ZSk6ci52YWx1ZT10LGUub25TdGF0ZUNoYW5nZT09bnVsbHx8ZS5vblN0YXRlQ2hhbmdlKHQpfX0pfSl9KSxufXZhciBWUz1bYGFyaWEtbGFiZWxgXSxIUz1GKHtfX25hbWU6YFNvcnRIZWFkZXJCdXR0b25gLHByb3BzOntoZWFkZXI6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT50LmhlYWRlci5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSkscj1XKCgpPT5uLnZhbHVlPT09YGFzY2A/b186bi52YWx1ZT09PWBkZXNjYD95XzpmXyksaT1XKCgpPT57bGV0IGU9dC5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9lOnQuaGVhZGVyLmNvbHVtbi5pZH0pLGE9VygoKT0+e2xldCBlPW4udmFsdWU9PT1gYXNjYD9gYXNjZW5kaW5nYDpuLnZhbHVlPT09YGRlc2NgP2BkZXNjZW5kaW5nYDpgbm9uZWA7cmV0dXJuYFNvcnQgYnkgJHtpLnZhbHVlfSwgY3VycmVudGx5ICR7ZX1gfSk7ZnVuY3Rpb24gbygpe3QuaGVhZGVyLmNvbHVtbi50b2dnbGVTb3J0aW5nKG4udmFsdWU9PT1gYXNjYCl9cmV0dXJuKHQsaSk9PntsZXQgcz1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSx6KGBidXR0b25gLHt0eXBlOmBidXR0b25gLCJhcmlhLWxhYmVsIjphLnZhbHVlLGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBweC0xLjUgcHktMC41IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmluZ2Asb25DbGljazpvfSxbZS5oZWFkZXIuaXNQbGFjZWhvbGRlcj9UcyhgYCwhMCk6KFIoKSxCKE4oUlMpLHtrZXk6MCxyZW5kZXI6ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIscHJvcHM6ZS5oZWFkZXIuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKSksSChzLHtpY29uOnIudmFsdWUsY2xhc3M6TyhbYHNpemUtMyBzaHJpbmstMGAsbi52YWx1ZT9gdGV4dC1mb3JlZ3JvdW5kYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwYF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSldLDgsVlMpfX19KSxVUz17ImRhdGEtc2xvdCI6YHRhYmxlLWNvbnRhaW5lcmAsY2xhc3M6YHJlbGF0aXZlIHctZnVsbCBvdmVyZmxvdy14LWF1dG9gfSxXUz1GKHtfX25hbWU6YFRhYmxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCxVUyxbVihgdGFibGVgLHsiZGF0YS1zbG90IjpgdGFibGVgLGNsYXNzOk8oTihaKShgdy1mdWxsIGNhcHRpb24tYm90dG9tIHRleHQtc21gLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSl9fSksR1M9Rih7X19uYW1lOmBUYWJsZUJvZHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0Ym9keWAseyJkYXRhLXNsb3QiOmB0YWJsZS1ib2R5YCxjbGFzczpPKE4oWikoYFsmX3RyOmxhc3QtY2hpbGRdOmJvcmRlci0wYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxLUz1GKHtfX25hbWU6YFRhYmxlQ2VsbGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRkYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWNlbGxgLGNsYXNzOk8oTihaKShgcC0yIGFsaWduLW1pZGRsZSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSkscVM9Rih7X19uYW1lOmBUYWJsZVJvd2AscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRyYCx7ImRhdGEtc2xvdCI6YHRhYmxlLXJvd2AsY2xhc3M6TyhOKFopKGBob3ZlcjpiZy1tdXRlZC81MCBkYXRhLVtzdGF0ZT1zZWxlY3RlZF06YmctbXV0ZWQgYm9yZGVyLWIgdHJhbnNpdGlvbi1jb2xvcnMgaGFzLWFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQvNTBgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLEpTPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMTBgfSxZUz1GKHtfX25hbWU6YFRhYmxlRW1wdHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxjb2xzcGFuOntkZWZhdWx0OjF9fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KFIoKSxCKHFTLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goS1Msa3Moe2NsYXNzOk4oWikoYHAtNCB3aGl0ZXNwYWNlLW5vd3JhcCBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmRgLHQuY2xhc3MpfSxOKG4pKSx7ZGVmYXVsdDpQKCgpPT5bVihgZGl2YCxKUyxbSShlLiRzbG90cyxgZGVmYXVsdGApXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9KSl9fSksWFM9Rih7X19uYW1lOmBUYWJsZUhlYWRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0aGAseyJkYXRhLXNsb3QiOmB0YWJsZS1oZWFkYCxjbGFzczpPKE4oWikoYHRleHQtZm9yZWdyb3VuZCBoLTEwIHB4LTIgdGV4dC1sZWZ0IGFsaWduLW1pZGRsZSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWlM9Rih7X19uYW1lOmBUYWJsZUhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRoZWFkYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWhlYWRlcmAsY2xhc3M6TyhOKFopKGBbJl90cl06Ym9yZGVyLWJgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pO2Z1bmN0aW9uIFFTKGUsdCl7dC52YWx1ZT10eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQudmFsdWUpOmV9dmFyICRTPUYoe19fbmFtZTpgRGF0YVRhYmxlYCxwcm9wczp7Y29sdW1uczp7fSxkYXRhOnt9LHJvd0NsYXNzOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e319LHNldHVwKGUpe2xldCB0PWUsbj1NKFtdKSxyPUJTKHtnZXQgZGF0YSgpe3JldHVybiB0LmRhdGF9LGdldCBjb2x1bW5zKCl7cmV0dXJuIHQuY29sdW1uc30sZ2V0Q29yZVJvd01vZGVsOmpTKCksZ2V0U29ydGVkUm93TW9kZWw6TVMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+UVMoZSxuKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gbi52YWx1ZX19fSk7ZnVuY3Rpb24gaShlKXtpZihlPT09YGFzY2ApcmV0dXJuYGFzY2VuZGluZ2A7aWYoZT09PWBkZXNjYClyZXR1cm5gZGVzY2VuZGluZ2B9cmV0dXJuKHQsbik9PihSKCksQihOKFdTKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWlMpLG51bGwse2RlZmF1bHQ6UCgoKT0+WyhSKCEwKSx6KEwsbnVsbCxtYShOKHIpLmdldEhlYWRlckdyb3VwcygpLGU9PihSKCksQihOKHFTKSx7a2V5OmUuaWR9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEoZS5oZWFkZXJzLGU9PihSKCksQihOKFhTKSx7a2V5OmUuaWQsY2xhc3M6TyhlLmNvbHVtbi5jb2x1bW5EZWYubWV0YT8uYWxpZ249PT1gcmlnaHRgP2B0ZXh0LXJpZ2h0YDp2b2lkIDApLCJhcmlhLXNvcnQiOmUuY29sdW1uLmdldENhblNvcnQoKT9pKGUuY29sdW1uLmdldElzU29ydGVkKCkpPz9gbm9uZWA6dm9pZCAwfSx7ZGVmYXVsdDpQKCgpPT5bZS5jb2x1bW4uZ2V0Q2FuU29ydCgpPyhSKCksQihIUyx7a2V5OjAsaGVhZGVyOmUsY2xhc3M6YC1teC0xLjVgfSxudWxsLDgsW2BoZWFkZXJgXSkpOmUuaXNQbGFjZWhvbGRlcj9UcyhgYCwhMCk6KFIoKSxCKE4oUlMpLHtrZXk6MSxyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpXSksXzoyfSwxMDMyLFtgY2xhc3NgLGBhcmlhLXNvcnRgXSkpKSwxMjgpKV0pLF86Mn0sMTAyNCkpKSwxMjgpKV0pLF86MX0pLEgoTihHUyksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoPT09MD8oUigpLEIoTihZUykse2tleTowLGNvbHNwYW46ZS5jb2x1bW5zLmxlbmd0aCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlLmVtcHR5TWVzc2FnZT8/YG5vbmVgKSwxKV0pLF86MX0sOCxbYGNvbHNwYW5gXSkpOlRzKGBgLCEwKSwoUighMCkseihMLG51bGwsbWEoTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MsdD0+KFIoKSxCKE4ocVMpLHtrZXk6dC5pZCxjbGFzczpPKGUucm93Q2xhc3M/Lih0Lm9yaWdpbmFsKSl9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodC5nZXRWaXNpYmxlQ2VsbHMoKSxlPT4oUigpLEIoTihLUykse2tleTplLmlkLGNsYXNzOk8oZS5jb2x1bW4uY29sdW1uRGVmLm1ldGE/LmFsaWduPT09YHJpZ2h0YD9gdGV4dC1yaWdodCB0YWJ1bGFyLW51bXNgOnZvaWQgMCl9LHtkZWZhdWx0OlAoKCk9PltIKE4oUlMpLHtyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmNlbGwscHJvcHM6ZS5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pXSksXzoyfSwxMDMyLFtgY2xhc3NgXSkpKSwxMjgpKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KSxlQz1GKHtfX25hbWU6YEJhZGdlYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx2YXJpYW50Ont9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4ocixpKT0+KFIoKSxCKE4obmIpLGtzKHsiZGF0YS1zbG90IjpgYmFkZ2VgLCJkYXRhLXZhcmlhbnQiOmUudmFyaWFudCxjbGFzczpOKFopKE4odEMpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSxOKG4pKSx7ZGVmYXVsdDpQKCgpPT5bSShyLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGRhdGEtdmFyaWFudGAsYGNsYXNzYF0pKX19KSx0Qz13XyhgaC01IGdhcC0xIHJvdW5kZWQtNHhsIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMiBweS0wLjUgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyY+c3ZnXTpzaXplLTMhIGdyb3VwL2JhZGdlIGlubGluZS1mbGV4IHctZml0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgWyY+c3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXNlY29uZGFyeS84MGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIFthXTpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgdGV4dC1kZXN0cnVjdGl2ZSBkYXJrOmJnLWRlc3RydWN0aXZlLzIwYCxvdXRsaW5lOmBib3JkZXItYm9yZGVyIHRleHQtZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctbXV0ZWQgW2FdOmhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwYCxsaW5rOmB0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2FzeW5jIGZ1bmN0aW9uIG5DKGUsdCl7aWYobmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0KXRyeXtyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSksYGNvcGllZGB9Y2F0Y2h7fWlmKCF0KXJldHVybmBmYWlsZWRgO2xldCBuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5zZWxlY3ROb2RlQ29udGVudHModCk7bGV0IHI9d2luZG93LmdldFNlbGVjdGlvbigpO3JldHVybiByPyhyLnJlbW92ZUFsbFJhbmdlcygpLHIuYWRkUmFuZ2UobiksYHNlbGVjdGVkYCk6YGZhaWxlZGB9dmFyIHJDPWAwMDAxLTAxLTAxVDAwOjAwOjAwWmA7ZnVuY3Rpb24gaUMoZSx0KXtyZXR1cm5gJHtlfS8ke3R9YH1mdW5jdGlvbiBhQyhlKXtyZXR1cm5gJCR7KGUvMWU2KS50b0ZpeGVkKDQpfWB9ZnVuY3Rpb24gb0MoZSl7cmV0dXJuIGUudG9Mb2NhbGVTdHJpbmcoYGVuLVVTYCl9ZnVuY3Rpb24gc0MoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7aWYodDwxZTQpcmV0dXJuIG9DKGUpO2xldCBuPWU8MD9gLWA6YGAsW3IsaV09dDwxZTY/WzFlMyxga2BdOnQ8MWU5P1sxZTYsYE1gXTpbMWU5LGBCYF0sYT10L3Isbz0zLShNYXRoLmZsb29yKGEpPj0xMDA/MzpNYXRoLmZsb29yKGEpPj0xMD8yOjEpLHM9MTAqKm8sYz0oTWF0aC5mbG9vcih0KnMvcikvcykudG9GaXhlZChvKTtyZXR1cm4gbz4wJiYoYz1jLnJlcGxhY2UoLzArJC8sYGApLnJlcGxhY2UoL1wuJC8sYGApKSxgJHtufSR7Y30ke2l9YH1mdW5jdGlvbiBjQyhlKXtyZXR1cm4gZT4wJiYhKGUmZS0xKX1mdW5jdGlvbiBsQyhlKXtyZXR1cm4gZTwxMDI0P2Ake2V9YDpjQyhlKT9lPDEwNDg1NzY/YCR7TWF0aC5yb3VuZChlLzEwMjQpfWtgOmAke01hdGgucm91bmQoZS8xMDQ4NTc2KX1NYDplPDFlNj9gJHtNYXRoLnJvdW5kKGUvMWUzKX1rYDpgJHtNYXRoLnJvdW5kKGUvMWU2KX1NYH1mdW5jdGlvbiB1QyhlKXtyZXR1cm5gJCR7ZS50b0ZpeGVkKDIpfWB9ZnVuY3Rpb24gZEMoZSx0KXtyZXR1cm4gZT09PTAmJnQ9PT0wP2BmcmVlYDpgaW4gJHt1QyhlKX0gLyBvdXQgJHt1Qyh0KX0gcGVyIE1Ub2tgfWZ1bmN0aW9uIGZDKGUpe2lmKCFlfHxlPT09ckMpcmV0dXJuYGA7bGV0IHQ9bmV3IERhdGUoZSkuZ2V0VGltZSgpO3JldHVybiBOdW1iZXIuaXNOYU4odCk/YGA6YCAoJHtNYXRoLm1heCgwLE1hdGgucm91bmQoKERhdGUubm93KCktdCkvMWUzKSl9cyBhZ28pYH1mdW5jdGlvbiBwQyhlKXtpZighZXx8ZT09PXJDKXJldHVybmBgO2xldCB0PW5ldyBEYXRlKGUpLmdldFRpbWUoKTtpZihOdW1iZXIuaXNOYU4odCkpcmV0dXJuYGA7bGV0IG49TWF0aC5yb3VuZCgodC1EYXRlLm5vdygpKS8xZTMpO3JldHVybiBuPD0wP2BgOmBpbiAke259c2B9ZnVuY3Rpb24gbUMoZSl7aWYoIWV8fGU9PT1yQylyZXR1cm5gbmV2ZXJgO2xldCB0PW5ldyBEYXRlKGUpO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP2U6dC50b0xvY2FsZVN0cmluZygpfWZ1bmN0aW9uIGhDKGUsdCl7cmV0dXJuIGU/ZkModCk/YHJlZnJlc2hlZGA6YHBlbmRpbmdgOmBvZmZgfWZ1bmN0aW9uIGdDKGUsdCl7c3dpdGNoKGhDKGUsdCkpe2Nhc2Vgb2ZmYDpyZXR1cm5gZGlzY292ZXJ5IG9mZmA7Y2FzZWBwZW5kaW5nYDpyZXR1cm5gcGVuZGluZ2A7Y2FzZWByZWZyZXNoZWRgOnJldHVybmByZWZyZXNoZWQke2ZDKHQpfWB9fWZ1bmN0aW9uIF9DKGUsdCl7c3dpdGNoKGhDKGUsdCkpe2Nhc2Vgb2ZmYDpyZXR1cm5gZGlzY292ZXJ5IG9mZmA7Y2FzZWBwZW5kaW5nYDpyZXR1cm5gcGVuZGluZ2A7Y2FzZWByZWZyZXNoZWRgOnJldHVybiBtQyh0KX19ZnVuY3Rpb24gdkMoZSl7aWYoIWUpcmV0dXJuYG5vbmVgO2xldCB0PVtdO3JldHVybiBlLnJlcXVlc3RzUGVyTWludXRlJiZ0LnB1c2goYHJlcS9taW4gJHtlLnJlcXVlc3RzUGVyTWludXRlfWApLGUucmVxdWVzdHNQZXJEYXkmJnQucHVzaChgcmVxL2RheSAke2UucmVxdWVzdHNQZXJEYXl9YCksZS50b2tlbnNQZXJEYXkmJnQucHVzaChgdG9rL2RheSAke2UudG9rZW5zUGVyRGF5fWApLGUudG9rZW5zUGVyTW9udGgmJnQucHVzaChgdG9rL21vbnRoICR7ZS50b2tlbnNQZXJNb250aH1gKSxlLmNvc3RQZXJEYXlVU0QmJnQucHVzaChgY29zdC9kYXkgJCR7ZS5jb3N0UGVyRGF5VVNEfWApLGUuY29zdFBlck1vbnRoVVNEJiZ0LnB1c2goYGNvc3QvbW9udGggJCR7ZS5jb3N0UGVyTW9udGhVU0R9YCksdC5sZW5ndGg/dC5qb2luKGAsIGApOmBub25lYH1mdW5jdGlvbiB5QyhlLHQpe3N3aXRjaCh0KXtjYXNlYGhvdXJgOnJldHVybmAke2Uuc2xpY2UoOCwxMCl9OjAwYDtjYXNlYGRheWA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSkscj1OdW1iZXIoZS5zbGljZSg2LDgpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEscikudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCxkYXk6YG51bWVyaWNgfSl9Y2FzZWBtb250aGA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSk7cmV0dXJuIG5ldyBEYXRlKHQsbi0xLDEpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOmBzaG9ydGAseWVhcjpgbnVtZXJpY2B9KX19fXZhciBiQz1GKHtfX25hbWU6YE1vZGVsQ2hpcGAscHJvcHM6e2lkOnt9LGNvbnRleHRUb2tlbnM6e30saW5wdXRQZXJNVG9rVXNkOnt9LG91dHB1dFBlck1Ub2tVc2Q6e319LHNldHVwKGUpe2xldCB0PWUsbj1zaShgbGFiZWxgKSxyPU0oYGlkbGVgKSxpO2Z1bmN0aW9uIGEoKXtjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ci52YWx1ZT1gaWRsZWB9LDE1MDApfWFzeW5jIGZ1bmN0aW9uIG8oKXtsZXQgZT1hd2FpdCBuQyh0LmlkLG4udmFsdWU/P3ZvaWQgMCk7ci52YWx1ZT1lLGEoKX1sZXQgcz17aWRsZTpfXyxjb3BpZWQ6ZF8sc2VsZWN0ZWQ6ZF8sZmFpbGVkOmdffSxjPVcoKCk9Pih7aWRsZTpgQ29weSAke3QuaWR9YCxjb3BpZWQ6YENvcGllZGAsc2VsZWN0ZWQ6YFNlbGVjdGVkIOKAlCBwcmVzcyBDdHJsL0NtZCtDYCxmYWlsZWQ6YENvcHkgZmFpbGVkYH0pKSxsPVcoKCk9PntsZXQgZT1bXTtyZXR1cm4gdC5pbnB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJnQub3V0cHV0UGVyTVRva1VzZCE9PXZvaWQgMCYmZS5wdXNoKGRDKHQuaW5wdXRQZXJNVG9rVXNkLHQub3V0cHV0UGVyTVRva1VzZCkpLHQuY29udGV4dFRva2VucyE9PXZvaWQgMCYmZS5wdXNoKGAke2xDKHQuY29udGV4dFRva2Vucyl9IGNvbnRleHRgKSxlLmpvaW4oYCDCtyBgKX0pLHU9VygoKT0+e2xldCBlPWMudmFsdWVbci52YWx1ZV07cmV0dXJuIGwudmFsdWU/YCR7ZX0gwrcgJHtsLnZhbHVlfWA6ZX0pO3JldHVybiB0YSgoKT0+e2NsZWFyVGltZW91dChpKX0pLCh0LG4pPT57bGV0IGk9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCksQihOKGVDKSx7YXM6YGJ1dHRvbmAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOk8oW2BjdXJzb3ItcG9pbnRlciBnYXAtMSBmb250LW1vbm8gdGV4dC14cyBmb250LW5vcm1hbCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZGAsci52YWx1ZT09PWBmYWlsZWRgP2B0ZXh0LWRlc3RydWN0aXZlYDpgYF0pLHRpdGxlOnUudmFsdWUsImFyaWEtbGFiZWwiOnUudmFsdWUsb25DbGljazpvfSx7ZGVmYXVsdDpQKCgpPT5bVihgc3BhbmAse3JlZjpgbGFiZWxgLGNsYXNzOmBzZWxlY3QtdGV4dGB9LGsoZS5pZCksNTEzKSxIKGkse2ljb246c1tyLnZhbHVlXSxjbGFzczpgc2l6ZS0yLjUgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSw4LFtgY2xhc3NgLGB0aXRsZWAsYGFyaWEtbGFiZWxgXSl9fX0pO2Z1bmN0aW9uIHhDKGUsdCl7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShlKXx8ZTw9MD9udWxsOihlLShOdW1iZXIuaXNGaW5pdGUodCk/dDowKSkvZX1mdW5jdGlvbiBTQyhlKXtyZXR1cm4gZT09PW51bGw/YG5vLXRyYWZmaWNgOmU8Ljk/YHNldmVyZWA6ZTwuOTk/YGRlZ3JhZGVkYDpgaGVhbHRoeWB9ZnVuY3Rpb24gQ0MoZSx0KXtsZXQgbj14QyhlLHQpO3JldHVybiBuIT09bnVsbCYmbjwuOTl9ZnVuY3Rpb24gd0MoZSl7cmV0dXJuIGU+PTE/YDEwMCVgOmAke01hdGguZmxvb3IoZSoxMDApfSVgfWZ1bmN0aW9uIFRDKGUsdCxuKXtyZXR1cm4gZT09PTE/dDpufWZ1bmN0aW9uIEVDKGUsdCl7aWYoZTw9MClyZXR1cm5gbm8gdHJhZmZpYyBpbiB0aGUgbGFzdCBtaW51dGVgO2xldCBuPXhDKGUsdCkscj1uPT09bnVsbD9gYDpgICgke3dDKG4pfSlgO3JldHVybmAke2V9ICR7VEMoZSxgYXR0ZW1wdGAsYGF0dGVtcHRzYCl9LCAke3R9ICR7VEModCxgZmFpbHVyZWAsYGZhaWx1cmVzYCl9IGluIHRoZSBsYXN0IG1pbnV0ZSR7cn1gfWZ1bmN0aW9uIERDKGUsdCl7aWYoZTw9MClyZXR1cm5gbm8gdHJhZmZpYyB0b2RheWA7bGV0IG49eEMoZSx0KSxyPW49PT1udWxsP2BgOmAgKCR7d0Mobil9KWA7cmV0dXJuYCR7ZX0gJHtUQyhlLGBhdHRlbXB0YCxgYXR0ZW1wdHNgKX0sICR7dH0gJHtUQyh0LGBmYWlsdXJlYCxgZmFpbHVyZXNgKX0gdG9kYXkke3J9YH12YXIgT0M9eyJhcmlhLWhpZGRlbiI6YHRydWVgfSxrQz17Y2xhc3M6YHNyLW9ubHlgfSxBQz1GKHtfX25hbWU6YFByb3ZpZGVyUmF0ZUJhZGdlYCxwcm9wczp7YXR0ZW1wdHNEYXk6e30sZmFpbHVyZXNEYXk6e30sYXR0ZW1wdHNNaW51dGU6e30sZmFpbHVyZXNNaW51dGU6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT54Qyh0LmF0dGVtcHRzRGF5LHQuZmFpbHVyZXNEYXkpKSxyPVcoKCk9PlNDKG4udmFsdWUpKSxpPVcoKCk9PnIudmFsdWU9PT1gbm8tdHJhZmZpY2A/YG5vIHRyYWZmaWNgOndDKG4udmFsdWUpKSxhPVcoKCk9PnQuYXR0ZW1wdHNNaW51dGU9PT12b2lkIDB8fHQuZmFpbHVyZXNNaW51dGU9PT12b2lkIDA/REModC5hdHRlbXB0c0RheSx0LmZhaWx1cmVzRGF5KTpFQyh0LmF0dGVtcHRzTWludXRlLHQuZmFpbHVyZXNNaW51dGUpKSxvPVcoKCk9PnIudmFsdWU9PT1gc2V2ZXJlYD9gZGVzdHJ1Y3RpdmVgOnIudmFsdWU9PT1gaGVhbHRoeWA/YHNlY29uZGFyeWA6YG91dGxpbmVgKSxzPVcoKCk9PnIudmFsdWU9PT1gZGVncmFkZWRgP2Bib3JkZXItc3RhdHVzLXdhcm4vNDAgdGV4dC1zdGF0dXMtd2FybmA6ci52YWx1ZT09PWBuby10cmFmZmljYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDpgYCk7cmV0dXJuKGUsdCk9PihSKCksQihOKGVDKSx7YXM6YHNwYW5gLHZhcmlhbnQ6by52YWx1ZSxjbGFzczpPKFtzLnZhbHVlLGBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgXSksdGl0bGU6YS52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLE9DLGsoaS52YWx1ZSksMSksVihgc3BhbmAsa0MsayhhLnZhbHVlKSwxKV0pLF86MX0sOCxbYHZhcmlhbnRgLGBjbGFzc2AsYHRpdGxlYF0pKX19KSxqQz1GKHtfX25hbWU6YFNlYXJjaElucHV0YCxwcm9wczp7bW9kZWxWYWx1ZTp7fSxwbGFjZWhvbGRlcjp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9VygoKT0+bi5tb2RlbFZhbHVlLmxlbmd0aD4wKTtmdW5jdGlvbiBhKGUpe3IoYHVwZGF0ZTptb2RlbFZhbHVlYCxTdHJpbmcoZSkpfWZ1bmN0aW9uIG8oKXtyKGB1cGRhdGU6bW9kZWxWYWx1ZWAsYGApfXJldHVybih0LHIpPT57bGV0IHM9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCx7Y2xhc3M6TyhOKFopKGByZWxhdGl2ZWAsbi5jbGFzcykpfSxbSChzLHtpY29uOk4oaV8pLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgbGVmdC0yLjUgc2l6ZS0zLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLEgoTihRYikseyJtb2RlbC12YWx1ZSI6ZS5tb2RlbFZhbHVlLHR5cGU6YHRleHRgLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsImFyaWEtbGFiZWwiOmUucGxhY2Vob2xkZXIsY2xhc3M6YHByLTggcGwtOGAsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmF9LG51bGwsOCxbYG1vZGVsLXZhbHVlYCxgcGxhY2Vob2xkZXJgLGBhcmlhLWxhYmVsYF0pLGkudmFsdWU/KFIoKSxCKE4oV2IpLHtrZXk6MCx0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCwiYXJpYS1sYWJlbCI6YENsZWFyIHNlYXJjaGAsY2xhc3M6YGFic29sdXRlIHRvcC0xLzIgcmlnaHQtMSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgLG9uQ2xpY2s6b30se2RlZmF1bHQ6UCgoKT0+W0gocyx7aWNvbjpOKHBfKSxjbGFzczpgc2l6ZS0zLjVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSkpOlRzKGBgLCEwKV0sMil9fX0pLE1DPUYoe19fbmFtZTpgQWNjb3JkaW9uYCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sZGlyOnt9LG9yaWVudGF0aW9uOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx0eXBlOnt9LG1vZGVsVmFsdWU6e30sZGVmYXVsdFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1xeShDeShuLGBjbGFzc2ApLHIpO3JldHVybihlLHQpPT4oUigpLEIoTihoYiksa3MoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb25gfSxOKGkpLHtjbGFzczpOKFopKGBmbGV4IHctZnVsbCBmbGV4LWNvbGAsbi5jbGFzcyl9KSx7ZGVmYXVsdDpQKHQ9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCx4ZShTcyh0KSkpXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxOQz1GKHtfX25hbWU6YEFjY29yZGlvbkNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1DeSh0LGBjbGFzc2ApO3JldHVybihlLHIpPT4oUigpLEIoTihiYiksa3MoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb24tY29udGVudGB9LE4obikse2NsYXNzOmBkYXRhLW9wZW46YW5pbWF0ZS1hY2NvcmRpb24tZG93biBkYXRhLWNsb3NlZDphbmltYXRlLWFjY29yZGlvbi11cCB0ZXh0LXNtIG92ZXJmbG93LWhpZGRlbmB9KSx7ZGVmYXVsdDpQKCgpPT5bVihgZGl2YCx7Y2xhc3M6TyhOKFopKGBwdC0wIHBiLTIuNSBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9wOm5vdCg6bGFzdC1jaGlsZCldOm1iLTRgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSxfOjN9LDE2KSl9fSksUEM9Rih7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdmFsdWU6e30sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49S3koQ3kodCxgY2xhc3NgKSk7cmV0dXJuKGUscik9PihSKCksQihOKHliKSxrcyh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1pdGVtYH0sTihuKSx7Y2xhc3M6TihaKShgbm90LWxhc3Q6Ym9yZGVyLWJgLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksRkM9Rih7X19uYW1lOmBBY2NvcmRpb25UcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUN5KHQsYGNsYXNzYCk7cmV0dXJuKGUscik9PntsZXQgaT1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSxCKE4oeGIpLHtjbGFzczpgZmxleGB9LHtkZWZhdWx0OlAoKCk9PltIKE4oU2IpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXJgfSxOKG4pLHtjbGFzczpOKFopKGBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6YWZ0ZXI6Ym9yZGVyLXJpbmcgKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1sZyBweS0yLjUgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6cmluZy0zICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06bWwtYXV0byAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOnNpemUtNCBncm91cC9hY2NvcmRpb24tdHJpZ2dlciByZWxhdGl2ZSBmbGV4IGZsZXgtMSBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwYCx0LmNsYXNzKX0pLHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCksSShlLiRzbG90cyxgaWNvbmAse30sKCk9PltIKGkse2ljb246TihoXyksImRhdGEtc2xvdCI6YGFjY29yZGlvbi10cmlnZ2VyLWljb25gLCJhcmlhLWhpZGRlbiI6YHRydWVgLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIHNocmluay0wIGdyb3VwLWFyaWEtZXhwYW5kZWQvYWNjb3JkaW9uLXRyaWdnZXI6aGlkZGVuYH0sbnVsbCw4LFtgaWNvbmBdKSxIKGkse2ljb246TihjXyksImRhdGEtc2xvdCI6YGFjY29yZGlvbi10cmlnZ2VyLWljb25gLCJhcmlhLWhpZGRlbiI6YHRydWVgLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGhpZGRlbiBzaHJpbmstMCBncm91cC1hcmlhLWV4cGFuZGVkL2FjY29yZGlvbi10cmlnZ2VyOmlubGluZWB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKV0pLF86M30pfX19KTtmdW5jdGlvbiBJQygpe2xldCBlPU0oYGApLHQ9VygoKT0+ZS52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7cmV0dXJue3F1ZXJ5OmUsbm9ybWFsaXplZDp0LGhhc1F1ZXJ5OlcoKCk9PnQudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBMQyhlLHQsbil7aWYoIXQpcmV0dXJuIG5ldyBTZXQoZS5tYW51YWxseUV4cGFuZGVkKTtsZXQgcj1uZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7Zm9yKGxldCB0IG9mIG4pZS5tYW51YWxseUNvbGxhcHNlZC5oYXModCl8fHIuYWRkKHQpO3JldHVybiByfWZ1bmN0aW9uIFJDKGUsdCxuKXtuPyhlLm1hbnVhbGx5RXhwYW5kZWQuZGVsZXRlKHQpLGUubWFudWFsbHlDb2xsYXBzZWQuYWRkKHQpKTooZS5tYW51YWxseUNvbGxhcHNlZC5kZWxldGUodCksZS5tYW51YWxseUV4cGFuZGVkLmFkZCh0KSl9ZnVuY3Rpb24gekMoZSl7ZS5tYW51YWxseUNvbGxhcHNlZC5jbGVhcigpfXZhciBCQz17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxWQz17Y2xhc3M6YGdyaWQgZ2FwLTQgc206Z3JpZC1jb2xzLTNgfSxIQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sVUM9e2tleTowLGNsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjUgdGV4dC1kZXN0cnVjdGl2ZWB9LFdDPXtjbGFzczpgZm9udC1tZWRpdW1gfSxHQz17a2V5OjAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEtDPXtjbGFzczpgZm9udC1tZWRpdW1gfSxxQz17a2V5OjAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEpDPXtrZXk6MCxjbGFzczpgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFlDPXtrZXk6MSxjbGFzczpgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFhDPXtjbGFzczpgZmxleCBmbGV4LTEgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC0zIGdhcC15LTEgcHItMiB0ZXh0LWxlZnRgfSxaQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sUUM9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSwkQz17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZXc9e2NsYXNzOmBtYi0zIGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLXgtNiBnYXAteS0xLjUgdGV4dC1zbSBzbTpncmlkLWNvbHMtM2B9LHR3PXtjbGFzczpgYnJlYWstYWxsYH0sbnc9e2tleTowfSxydz17Y2xhc3M6YHRleHQtZGVzdHJ1Y3RpdmVgfSxpdz17a2V5OjF9LGF3PXtjbGFzczpgdGV4dC1kZXN0cnVjdGl2ZWB9LG93PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LHN3PXtrZXk6MCx0aXRsZTpgY29udGV4dCB3aW5kb3dgLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxjdz17a2V5OjEsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sbHc9e2tleTowLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHV3PUYoe19fbmFtZTpgUHJvdmlkZXJzVmlld2Asc2V0dXAoZSl7bGV0IHQ9c3goKSxuPVcoKCk9PnQub3ZlcnZpZXcpLHI9WnQoe21hbnVhbGx5RXhwYW5kZWQ6bmV3IFNldCxtYW51YWxseUNvbGxhcHNlZDpuZXcgU2V0fSkse3F1ZXJ5Omksbm9ybWFsaXplZDphLGhhc1F1ZXJ5Om99PUlDKCk7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBpQyhlLHQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYS52YWx1ZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5tb2RlbHMuc29tZSh0PT5zKGUubmFtZSx0KSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5hbGlhcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGEudmFsdWUpfHxlLnRhcmdldC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGEudmFsdWUpfWxldCB1PVcoKCk9PntsZXQgZT1uLnZhbHVlPy5wcm92aWRlcnM/P1tdO3JldHVybiBvLnZhbHVlP2UuZmlsdGVyKGMpOmV9KSxkPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hbGlhc2VzPz9bXTtyZXR1cm4gby52YWx1ZT9lLmZpbHRlcihsKTplfSksZj1XKCgpPT5MQyhyLG8udmFsdWUsdS52YWx1ZS5tYXAoZT0+ZS5uYW1lKSkpO2Z1bmN0aW9uIHAoZSl7UkMocixlLGYudmFsdWUuaGFzKGUpKX1sZXQgbT1XKHtnZXQ6KCk9PkFycmF5LmZyb20oZi52YWx1ZSksc2V0OmU9PntsZXQgdD1uZXcgU2V0KGUpO2ZvcihsZXQgZSBvZiBmLnZhbHVlKXQuaGFzKGUpfHxwKGUpO2ZvcihsZXQgZSBvZiB0KWYudmFsdWUuaGFzKGUpfHxwKGUpfX0pO0VyKGksZT0+e2UudHJpbSgpPT09YGAmJnpDKHIpfSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gby52YWx1ZT9lLm1vZGVscy5maWx0ZXIodD0+cyhlLm5hbWUsdCkpOmUubW9kZWxzfWxldCBnPXthdHRlbXB0c0RheTowLGZhaWx1cmVzRGF5OjB9O2Z1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZS5tb2RlbFJhdGVzPy5bdF0/P2d9ZnVuY3Rpb24gdihlLHQpe2xldCBuPV8oZSx0KTtyZXR1cm4gQ0Mobi5hdHRlbXB0c0RheSxuLmZhaWx1cmVzRGF5KX1sZXQgeT17fTtmdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGUubW9kZWxNZXRhPy5bdF0/P3l9ZnVuY3Rpb24geChlKXtzd2l0Y2goZSl7Y2FzZWBvcGVuYDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2VgaGFsZi1vcGVuYDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gUyhlKXtsZXQgdD1wQyhlLm9wZW5VbnRpbCk7cmV0dXJuIHQ/YCR7ZS5oZWFsdGhTdGF0ZX0gKCR7dH0pYDplLmhlYWx0aFN0YXRlfWxldCBDPVt7aWQ6YGFsaWFzYCxoZWFkZXI6YEFsaWFzYCxhY2Nlc3NvckZuOmU9PmUuYWxpYXMsY2VsbDooe3JvdzplfSk9PnRjKGJDLHtpZDplLm9yaWdpbmFsLmFsaWFzLGNvbnRleHRUb2tlbnM6ZS5vcmlnaW5hbC5tb2RlbE1ldGE/LmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwubW9kZWxNZXRhPy5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm9yaWdpbmFsLm1vZGVsTWV0YT8ub3V0cHV0UGVyTVRva1VzZH0pfSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+ZS50YXJnZXQsY2VsbDooe3JvdzplfSk9PnRjKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGUub3JpZ2luYWwudGFyZ2V0KX1dLHc9VygoKT0+bi52YWx1ZT8uYWxpYXNlcy5sZW5ndGg/by52YWx1ZT9gbm8gYWxpYXNlcyBtYXRjaCAiJHtpLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCk7cmV0dXJuKGUsdCk9PntsZXQgcj1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSx6KGBkaXZgLEJDLFtWKGBkaXZgLFZDLFtIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W0gocix7aWNvbjpuLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP04obV8pOk4obF8pLGNsYXNzOk8oW24udmFsdWU/LnJlZGlzLmNvbmZpZ3VyZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKX0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLHRbMl18fD1VKGAgUmVkaXMgYCwtMSldKSxfOjF9KV0pLF86MX0pLEgoTihKYikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHRleHQtc21gfSx7ZGVmYXVsdDpQKCgpPT5bVihgcGAsSEMsayhuLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2BDb25maWd1cmVkYDpgTm90IGNvbmZpZ3VyZWRgKSwxKSxuLnZhbHVlPy5yZWRpcy5sYXN0RXJyPyhSKCkseihgcGAsVUMsW0gocix7aWNvbjpOKGdfKSxjbGFzczpgbXQtMC41IHNpemUtMy41IHNocmluay0wYH0sbnVsbCw4LFtgaWNvbmBdKSxWKGBzcGFuYCxudWxsLGsobi52YWx1ZS5yZWRpcy5sYXN0RXJyKStrKE4oZkMpKG4udmFsdWUucmVkaXMubGFzdEVyckF0KSksMSldKSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W0gocix7aWNvbjpuLnZhbHVlPy5jYWNoZS5lbmFibGVkP04obV8pOk4obF8pLGNsYXNzOk8oW24udmFsdWU/LmNhY2hlLmVuYWJsZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKX0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLHRbM118fD1VKGAgUmVzcG9uc2UgY2FjaGUgYCwtMSldKSxfOjF9KV0pLF86MX0pLEgoTihKYikse2NsYXNzOmB0ZXh0LXNtYH0se2RlZmF1bHQ6UCgoKT0+W1YoYHBgLFdDLGsobi52YWx1ZT8uY2FjaGUuZW5hYmxlZD9gRW5hYmxlZGA6YERpc2FibGVkYCksMSksbi52YWx1ZT8uY2FjaGUuZW5hYmxlZD8oUigpLHooYHBgLEdDLGB0dGwgYCtrKG4udmFsdWUuY2FjaGUudHRsKSwxKSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W0gocix7aWNvbjpuLnZhbHVlPy5yZXRyeS5lbmFibGVkP04obV8pOk4obF8pLGNsYXNzOk8oW24udmFsdWU/LnJldHJ5LmVuYWJsZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKX0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLHRbNF18fD1VKGAgUmV0cnkgYCwtMSldKSxfOjF9KV0pLF86MX0pLEgoTihKYikse2NsYXNzOmB0ZXh0LXNtYH0se2RlZmF1bHQ6UCgoKT0+W1YoYHBgLEtDLGsobi52YWx1ZT8ucmV0cnkuZW5hYmxlZD9gRW5hYmxlZGA6YERpc2FibGVkYCksMSksbi52YWx1ZT8ucmV0cnkuZW5hYmxlZD8oUigpLHooYHBgLHFDLGAgYXR0ZW1wdHMgYCtrKG4udmFsdWUucmV0cnkuYXR0ZW1wdHMpK2AsIGJhY2tvZmYgYCtrKG4udmFsdWUucmV0cnkuYmFja29mZiksMSkpOlRzKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzVdfHw9W1UoYFByb3ZpZGVyc2AsLTEpXV0pLF86MX0pLEgoTihZYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFs2XXx8PVtVKGAgRXZlcnkgY29uZmlndXJlZCB1cHN0cmVhbSBhbmQgaXRzIGxhc3QgZGlzY292ZXJ5IHJlZnJlc2guIFNlYXJjaCBmaWx0ZXJzIHByb3ZpZGVycyBhbmQgYWxpYXNlcyBieSBtb2RlbCBpZC4gYCwtMSldXSksXzoxfSksSChqQyx7bW9kZWxWYWx1ZTpOKGkpLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+aihpKT9pLnZhbHVlPWU6bnVsbCxwbGFjZWhvbGRlcjpgU2VhcmNoIG1vZGVscyBvciBhbGlhc2VzLi4uYCxjbGFzczpgbXQtMiBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W24udmFsdWU/LnByb3ZpZGVycy5sZW5ndGg/TihvKSYmdS52YWx1ZS5sZW5ndGg9PT0wPyhSKCkseihgcGAsWUMsYCBubyBwcm92aWRlcnMgbWF0Y2ggImArayhOKGkpKStgIiBgLDEpKTooUigpLEIoTihNQykse2tleToyLG1vZGVsVmFsdWU6bS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFsxXXx8PWU9Pm0udmFsdWU9ZSx0eXBlOmBtdWx0aXBsZWAsY2xhc3M6YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTNgfSx7ZGVmYXVsdDpQKCgpPT5bKFIoITApLHooTCxudWxsLG1hKHUudmFsdWUsZT0+KFIoKSxCKE4oUEMpLHtrZXk6ZS5uYW1lLHZhbHVlOmUubmFtZX0se2RlZmF1bHQ6UCgoKT0+W0goTihGQyksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bVihgc3BhbmAsWEMsW1YoYHNwYW5gLFpDLGsoZS5uYW1lKSwxKSxIKE4oZUMpLHthczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUudHlwZSksMSldKSxfOjJ9LDEwMjQpLFYoYHNwYW5gLFFDLGsoZS5tb2RlbENvdW50KStgIG1vZGVsc2AsMSksSChBQyx7ImF0dGVtcHRzLWRheSI6ZS5hdHRlbXB0c0RheSwiZmFpbHVyZXMtZGF5IjplLmZhaWx1cmVzRGF5LCJhdHRlbXB0cy1taW51dGUiOmUuYXR0ZW1wdHNNaW51dGUsImZhaWx1cmVzLW1pbnV0ZSI6ZS5mYWlsdXJlc01pbnV0ZX0sbnVsbCw4LFtgYXR0ZW1wdHMtZGF5YCxgZmFpbHVyZXMtZGF5YCxgYXR0ZW1wdHMtbWludXRlYCxgZmFpbHVyZXMtbWludXRlYF0pLGUuaGVhbHRoU3RhdGU9PT1gY2xvc2VkYD9UcyhgYCwhMCk6KFIoKSxCKE4oZUMpLHtrZXk6MCxhczpgc3BhbmAsdmFyaWFudDp4KGUuaGVhbHRoU3RhdGUpLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6ZS5oZWFsdGhTdGF0ZT09PWBvcGVuYD9gZGlzY292ZXJ5IGlzIGJhY2tpbmcgb2ZmIGFmdGVyIHJlcGVhdGVkIGZhaWx1cmVzYDpgYSBkaXNjb3ZlcnkgcHJvYmUgaXMgZGVjaWRpbmcgd2hldGhlciB0byByZWNvdmVyYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhTKGUpKSwxKV0pLF86Mn0sMTAzMixbYHZhcmlhbnRgLGB0aXRsZWBdKSksZS5sYXN0RXJyPyhSKCksQihyLHtrZXk6MSxpY29uOk4oZ18pLGNsYXNzOmBzaXplLTMuNSBzaHJpbmstMCB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSk6VHMoYGAsITApLFYoYHNwYW5gLCRDLGsoTihnQykoZS5kaXNjb3ZlcnlFbmFibGVkLGUubGFzdFJlZnJlc2gpKSwxKV0pXSksXzoyfSwxMDI0KSxIKE4oTkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYGRsYCxldyxbVihgZGl2YCxudWxsLFt0WzddfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQmFzZSBVUkxgLC0xKSxWKGBkZGAsdHcsayhlLmJhc2VVcmwpLDEpXSksVihgZGl2YCxudWxsLFt0WzhdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGFzdCByZWZyZXNoYCwtMSksVihgZGRgLG51bGwsayhOKF9DKShlLmRpc2NvdmVyeUVuYWJsZWQsZS5sYXN0UmVmcmVzaCkpLDEpXSksZS5oZWFsdGhTdGF0ZT09PWBjbG9zZWRgP1RzKGBgLCEwKTooUigpLHooYGRpdmAsbncsW3RbOV18fD1WKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBEaXNjb3ZlcnkgaGVhbHRoYCwtMSksVihgZGRgLHJ3LGsoUyhlKSksMSldKSksZS5sYXN0RXJyPyhSKCkseihgZGl2YCxpdyxbdFsxMF18fD1WKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMYXN0IGVycm9yYCwtMSksVihgZGRgLGF3LGsoZS5sYXN0RXJyKSwxKV0pKTpUcyhgYCwhMCldKSxoKGUpLmxlbmd0aD8oUigpLHooYGRpdmAsb3csWyhSKCEwKSx6KEwsbnVsbCxtYShoKGUpLHQ9PihSKCkseihgc3BhbmAse2tleTp0LGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFgfSxbSChiQyx7aWQ6TihpQykoZS5uYW1lLHQpLCJjb250ZXh0LXRva2VucyI6YihlLHQpLmNvbnRleHRUb2tlbnMsImlucHV0LXBlci1tLXRvay11c2QiOmIoZSx0KS5pbnB1dFBlck1Ub2tVc2QsIm91dHB1dC1wZXItbS10b2stdXNkIjpiKGUsdCkub3V0cHV0UGVyTVRva1VzZH0sbnVsbCw4LFtgaWRgLGBjb250ZXh0LXRva2Vuc2AsYGlucHV0LXBlci1tLXRvay11c2RgLGBvdXRwdXQtcGVyLW0tdG9rLXVzZGBdKSxiKGUsdCkuY29udGV4dFRva2Vucz09PXZvaWQgMD9UcyhgYCwhMCk6KFIoKSx6KGBzcGFuYCxzdyxrKE4obEMpKGIoZSx0KS5jb250ZXh0VG9rZW5zKSksMSkpLHYoZSx0KT8oUigpLEIoQUMse2tleToxLCJhdHRlbXB0cy1kYXkiOl8oZSx0KS5hdHRlbXB0c0RheSwiZmFpbHVyZXMtZGF5IjpfKGUsdCkuZmFpbHVyZXNEYXl9LG51bGwsOCxbYGF0dGVtcHRzLWRheWAsYGZhaWx1cmVzLWRheWBdKSk6VHMoYGAsITApXSkpKSwxMjgpKV0pKTooUigpLHooYHBgLGN3LGBubyBtb2RlbHMga25vd24geWV0YCkpXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLHooYHBgLEpDLGBub25lYCkpXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzExXXx8PVtVKGBNb2RlbCBhbGlhc2VzYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzEyXXx8PVtVKGBPcGVyYXRvci1kZWZpbmVkIGFsaWFzIOKGkiB0YXJnZXQgbW9kZWwgbWFwcGluZ3MuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goJFMse2NvbHVtbnM6QyxkYXRhOmQudmFsdWUsImVtcHR5LW1lc3NhZ2UiOncudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBlbXB0eS1tZXNzYWdlYF0pXSksXzoxfSldKSxfOjF9KSxuLnZhbHVlPy52ZXJzaW9uPyhSKCkseihgcGAsbHcsYFZlcnNpb246IGArayhuLnZhbHVlLnZlcnNpb24pLDEpKTpUcyhgYCwhMCldKX19fSksZHc9W2B0aXRsZWBdLGZ3PXsiYXJpYS1oaWRkZW4iOmB0cnVlYH0scHc9e2NsYXNzOmBzci1vbmx5YH0sbXc9Rih7X19uYW1lOmBDb21wYWN0TnVtYmVyYCxwcm9wczp7dmFsdWU6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT5zQyh0LnZhbHVlKSkscj1XKCgpPT5vQyh0LnZhbHVlKSk7cmV0dXJuKGUsdCk9PihSKCkseihgc3BhbmAse3RpdGxlOnIudmFsdWV9LFtWKGBzcGFuYCxmdyxrKG4udmFsdWUpLDEpLFYoYHNwYW5gLHB3LGsoci52YWx1ZSksMSldLDgsZHcpKX19KTtmdW5jdGlvbiBodyhlLHQsbil7cmV0dXJue2lkOmUsaGVhZGVyOnQsYWNjZXNzb3JGbjpuLG1ldGE6e2FsaWduOmByaWdodGB9LGNlbGw6KHtyb3c6ZX0pPT50Yyhtdyx7dmFsdWU6bihlLm9yaWdpbmFsKX0pfX1mdW5jdGlvbiBndygpe3JldHVyblt7aWQ6YG5hbWVgLGhlYWRlcjpgTmFtZWAsYWNjZXNzb3JGbjplPT5lLm5hbWUsY2VsbDooe3JvdzplfSk9PnRjKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sZS5vcmlnaW5hbC5uYW1lKX0se2lkOmB1cmxgLGhlYWRlcjpgVVJMYCxhY2Nlc3NvckZuOmU9PmUudXJsLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmBibG9jayBtYXgtdy14cyB0cnVuY2F0ZSB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOmUub3JpZ2luYWwudXJsfSxlLm9yaWdpbmFsLnVybCl9LHtpZDpgYWNjZXNzYCxoZWFkZXI6YEFjY2Vzc2AsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PihlLmFjY2Vzcz8/W10pLmpvaW4oYCwgYCksY2VsbDooe3JvdzplfSk9PntsZXQgdD1lLm9yaWdpbmFsLmFjY2VzcztyZXR1cm4gdD8ubGVuZ3RoP3RjKGBkaXZgLHtjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LHQubWFwKGU9PnRjKGVDLHtrZXk6ZSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0sKCk9PmUpKSk6dGMoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFsbCBncm91cHNgKX19LGh3KGByZXFNaW5gLGByZXEvbWluYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTWludXRlKSxodyhgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1BlckRheSksaHcoYHJlcU1vbnRoYCxgcmVxL21vbnRoYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTW9udGgpXX12YXIgX3c9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sdnc9Rih7X19uYW1lOmBUYXJnZXRzVmlld2Asc2V0dXAoZSl7bGV0IHQ9c3goKSxuPVcoKCk9PnQudGFyZ2V0cykse3F1ZXJ5OnIsbm9ybWFsaXplZDppLGhhc1F1ZXJ5OmF9PUlDKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS52YWx1ZSl9bGV0IHM9VygoKT0+e2xldCBlPW4udmFsdWU/Lm1jcFNlcnZlcnM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KSxjPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hZ2VudHM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGU/YS52YWx1ZSYmdD09PTA/YG5vIHRhcmdldHMgbWF0Y2ggIiR7ci52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGB9bGV0IHU9VygoKT0+bChuLnZhbHVlPy5tY3BTZXJ2ZXJzLmxlbmd0aD8/MCxzLnZhbHVlLmxlbmd0aCkpLGQ9VygoKT0+bChuLnZhbHVlPy5hZ2VudHMubGVuZ3RoPz8wLGMudmFsdWUubGVuZ3RoKSksZj1ndygpO3JldHVybihlLHQpPT4oUigpLHooYGRpdmAsX3csW0goakMse21vZGVsVmFsdWU6TihyKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9Pmoocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBNQ1Agc2VydmVycyBvciBhZ2VudHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsxXXx8PVtVKGBNQ1Agc2VydmVyc2AsLTEpXV0pLF86MX0pLEgoTihZYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsyXXx8PVtVKGBDb25maWd1cmVkIE1DUCBwcm94eSB0YXJnZXRzLCB0aGUgZ3JvdXBzIGFsbG93ZWQgdG8gcmVhY2ggdGhlbSwgYW5kIHRoZWlyIHJlcXVlc3QgY291bnRlcnMuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goJFMse2NvbHVtbnM6TihmKSxkYXRhOnMudmFsdWUsImVtcHR5LW1lc3NhZ2UiOnUudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFszXXx8PVtVKGBBZ2VudHNgLC0xKV1dKSxfOjF9KSxIKE4oWWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbNF18fD1bVShgQ29uZmlndXJlZCBBMkEgYWdlbnQgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLmAsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKCRTLHtjb2x1bW5zOk4oZiksZGF0YTpjLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpkLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLHl3PUYoe19fbmFtZTpgVGFic2AscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxvcmllbnRhdGlvbjp7fSxkaXI6e30sYWN0aXZhdGlvbk1vZGU6e30sbW9kZWxWYWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPXF5KEN5KG4sYGNsYXNzYCkscik7cmV0dXJuKGUsdCk9PihSKCksQihOKFJiKSxrcyh7ImRhdGEtc2xvdCI6YHRhYnNgLCJkYXRhLW9yaWVudGF0aW9uIjpOKGkpLm9yaWVudGF0aW9ufHxgaG9yaXpvbnRhbGB9LE4oaSkse2NsYXNzOk4oWikoYGdhcC0yIGdyb3VwL3RhYnMgZmxleCBkYXRhLWhvcml6b250YWw6ZmxleC1jb2xgLG4uY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BkYXRhLW9yaWVudGF0aW9uYCxgY2xhc3NgXSkpfX0pLGJ3PUYoe19fbmFtZTpgVGFic0NvbnRlbnRgLHByb3BzOnt2YWx1ZTp7fSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1DeSh0LGBjbGFzc2ApO3JldHVybihlLHIpPT4oUigpLEIoTihWYiksa3MoeyJkYXRhLXNsb3QiOmB0YWJzLWNvbnRlbnRgLGNsYXNzOk4oWikoYHRleHQtc20gZmxleC0xIG91dGxpbmUtbm9uZWAsdC5jbGFzcyl9LE4obikpLHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLHh3PUYoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sdmFyaWFudDp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgLGB2YXJpYW50YCk7cmV0dXJuKHIsaSk9PihSKCksQihOKEhiKSxrcyh7ImRhdGEtc2xvdCI6YHRhYnMtbGlzdGAsImRhdGEtdmFyaWFudCI6ZS52YXJpYW50fSxOKG4pLHtjbGFzczpOKFopKE4oQ3cpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCgoKT0+W0koci4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSksU3c9Rih7X19uYW1lOmBUYWJzVHJpZ2dlcmAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1LeShDeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oVWIpLGtzKHsiZGF0YS1zbG90IjpgdGFicy10cmlnZ2VyYCxjbGFzczpOKFopKGBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtc20gZm9udC1tZWRpdW0gZ3JvdXAtZGF0YS1bdmFyaWFudD1kZWZhdWx0XS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6c2hhZG93LXNtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEgcmVsYXRpdmUgaW5saW5lLWZsZXggaC1bY2FsYygxMDAlLTFweCldIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1mb3JlZ3JvdW5kLzYwIHRyYW5zaXRpb24tYWxsIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczp3LWZ1bGwgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmp1c3RpZnktc3RhcnQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6dGV4dC1mb3JlZ3JvdW5kIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCxgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6YmctdHJhbnNwYXJlbnQgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YmctdHJhbnNwYXJlbnQgZGFyazpncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpib3JkZXItdHJhbnNwYXJlbnQgZGFyazpncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpiZy10cmFuc3BhcmVudGAsYGRhdGEtYWN0aXZlOmJnLWJhY2tncm91bmQgZGF0YS1hY3RpdmU6dGV4dC1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1hY3RpdmU6Ym9yZGVyLWlucHV0IGRhcms6ZGF0YS1hY3RpdmU6YmctaW5wdXQvMzAgZGFyazpkYXRhLWFjdGl2ZTp0ZXh0LWZvcmVncm91bmRgLGBhZnRlcjphYnNvbHV0ZSBhZnRlcjpiZy1mb3JlZ3JvdW5kIGFmdGVyOm9wYWNpdHktMCBhZnRlcjp0cmFuc2l0aW9uLW9wYWNpdHkgZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6aW5zZXQteC0wIGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmJvdHRvbS1bLTVweF0gZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6aC0wLjUgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOmluc2V0LXktMCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6LXJpZ2h0LTEgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOnctMC41IGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmFmdGVyOm9wYWNpdHktMTAwYCx0LmNsYXNzKX0sTihuKSkse2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksQ3c9d18oYHJvdW5kZWQtbGcgcC0wLjc1IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmgtOCBkYXRhLVt2YXJpYW50PWxpbmVdOnJvdW5kZWQtbm9uZSBncm91cC90YWJzLWxpc3QgaW5saW5lLWZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6aC1maXQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmZsZXgtY29sYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLW11dGVkYCxsaW5lOmBnYXAtMSBiZy10cmFuc3BhcmVudGB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2Z1bmN0aW9uIHd3KGUsdCxuLHI9U3RyaW5nLGk9ITApe3JldHVybntpZDplLGhlYWRlcjp0LGFjY2Vzc29yRm46bixtZXRhOnthbGlnbjpgcmlnaHRgfSxjZWxsOih7cm93OmV9KT0+e2lmKGUub3JpZ2luYWwuc3RvcmVEb3duKXJldHVybmA/YDtsZXQgdD1uKGUub3JpZ2luYWwpO3JldHVybiBpP3RjKG13LHt2YWx1ZTp0fSk6cih0KX19fWZ1bmN0aW9uIFR3KGUsdCxuKXtyZXR1cm5be2lkOmBpZGAsaGVhZGVyOmUsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmBmb250LW1lZGl1bWB9LGUub3JpZ2luYWwuaWQpfSx7aWQ6YHNlY29uZGFyeWAsaGVhZGVyOnQsYWNjZXNzb3JGbjpuLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxuKGUub3JpZ2luYWwpKX0se2lkOmBsaW1pdHNgLGhlYWRlcjpgTGltaXRzYCxhY2Nlc3NvckZuOmU9PnZDKGUubGltaXRzKSxjZWxsOih7cm93OmV9KT0+dGMoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sdkMoZS5vcmlnaW5hbC5saW1pdHMpKX0sd3coYHJlcU1pbmAsYHJlcS9taW5gLGU9PmUucmVxdWVzdHNQZXJNaW51dGUpLHd3KGByZXFEYXlgLGByZXEvZGF5YCxlPT5lLnJlcXVlc3RzUGVyRGF5KSx3dyhgdG9rSW5EYXlgLGB0b2tJbi9kYXlgLGU9PmUudG9rZW5zSW5QZXJEYXkpLHd3KGB0b2tPdXREYXlgLGB0b2tPdXQvZGF5YCxlPT5lLnRva2Vuc091dFBlckRheSksd3coYHRva0luTW9udGhgLGB0b2tJbi9tb250aGAsZT0+ZS50b2tlbnNJblBlck1vbnRoKSx3dyhgdG9rT3V0TW9udGhgLGB0b2tPdXQvbW9udGhgLGU9PmUudG9rZW5zT3V0UGVyTW9udGgpLHd3KGBjb3N0RGF5YCxgY29zdC9kYXlgLGU9PmUuY29zdFBlckRheU1pY3JvVXNkLGFDLCExKSx3dyhgY29zdE1vbnRoYCxgY29zdC9tb250aGAsZT0+ZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxhQywhMSldfXZhciBFdz1GKHtfX25hbWU6YFVzYWdlVGFibGVgLHByb3BzOntpZExhYmVsOnt9LGVudHJpZXM6e30sc2Vjb25kYXJ5Q29sdW1uTGFiZWw6e30sc2Vjb25kYXJ5VmFsdWU6e3R5cGU6RnVuY3Rpb259LGVtcHR5TWVzc2FnZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9PlR3KHQuaWRMYWJlbCx0LnNlY29uZGFyeUNvbHVtbkxhYmVsLHQuc2Vjb25kYXJ5VmFsdWUpKTtyZXR1cm4odCxyKT0+KFIoKSxCKCRTLHtjb2x1bW5zOm4udmFsdWUsZGF0YTplLmVudHJpZXMsImVtcHR5LW1lc3NhZ2UiOmUuZW1wdHlNZXNzYWdlLCJyb3ctY2xhc3MiOmU9PmUuc3RvcmVEb3duP2BiZy1kZXN0cnVjdGl2ZS8xMGA6dm9pZCAwfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgLGByb3ctY2xhc3NgXSkpfX0pO2Z1bmN0aW9uIER3KGUsdCl7cmV0dXJuIGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX1mdW5jdGlvbiBPdyhlLHQpe3JldHVybiBlLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModCl9ZnVuY3Rpb24ga3coZSx0KXtyZXR1cm4gdC5maWx0ZXIodD0+dC5ncm91cE5hbWU9PT1lLmlkKX1mdW5jdGlvbiBBdyhlLHQsbil7cmV0dXJuIGt3KGUsdCkuZmlsdGVyKGU9PkR3KGUsbikpfWZ1bmN0aW9uIGp3KGUsdCxuKXtyZXR1cm4gT3coZSxuKXx8QXcoZSx0LG4pLmxlbmd0aD4wfXZhciBNdz17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxOdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxQdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxGdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxJdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxMdz17a2V5OjAsY2xhc3M6YG1iLTMgZmxleCBmbGV4LXdyYXAgZ2FwLXgtNCBnYXAteS0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sUnc9e2NsYXNzOmBmbGV4IGZsZXgtMSBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC14LTQgZ2FwLXktMSBwci0yIHRleHQtbGVmdGB9LHp3PXtjbGFzczpgZm9udC1tZWRpdW1gfSxCdz17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LFZ3PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sSHc9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxVdz17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sV3c9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sR3c9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxLdz17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxxdz17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEp3PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LFl3PXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sWHc9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sWnc9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxRdz17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sJHc9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxlVD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LHRUPXtjbGFzczpgdGFidWxhci1udW1zYH0sblQ9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxyVD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LGlUPXtjbGFzczpgdGFidWxhci1udW1zYH0sYVQ9e2tleToyLGNsYXNzOmBweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sb1Q9YEdsb2IgcGF0dGVybiDigJQgbWF0Y2hlcyBsaWtlIGEgc2hlbGwgd2lsZGNhcmQgKCosID8sIFsuLi5dKWAsc1Q9Rih7X19uYW1lOmBVc2FnZVZpZXdgLHNldHVwKGUpe2xldCB0PXN4KCksbj1XKCgpPT50LnVzYWdlKSxyPVcoKCk9PntsZXQgZT17fTtmb3IobGV0IG4gb2YgdC5vdmVydmlldz8uZ3JvdXBzPz9bXSllW24ubmFtZV09bi5tZW1iZXJDb3VudDtyZXR1cm4gZX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUuZ3JvdXBOYW1lPz9gYH1mdW5jdGlvbiBhKGUpe2xldCB0PXIudmFsdWVbZS5pZF07cmV0dXJuIHQ9PT12b2lkIDA/YGA6U3RyaW5nKHQpfWxldHtxdWVyeTpvLG5vcm1hbGl6ZWQ6cyxoYXNRdWVyeTpjfT1JQygpLGw9VygoKT0+e2xldCBlPW4udmFsdWU/Lmdyb3Vwcz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiBlLmZpbHRlcihlPT5qdyhlLHQscy52YWx1ZSkpfSksdT1XKCgpPT5jLnZhbHVlP2wudmFsdWUuZmlsdGVyKGU9PiFPdyhlLHMudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIGQoZSl7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiFjLnZhbHVlfHxPdyhlLHMudmFsdWUpP2t3KGUsdCk6QXcoZSx0LHMudmFsdWUpfWxldCBmPVcoKCk9Pm4udmFsdWU/Lmdyb3Vwcy5sZW5ndGg/Yy52YWx1ZT9gbm8gZ3JvdXBzIG1hdGNoICIke28udmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKSxwPVcoKCk9PntsZXQgZT1uLnZhbHVlPy51c2Vycz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8uZ3JvdXBzPz9bXSxyPW5ldyBTZXQodC5maWx0ZXIoZT0+T3coZSxzLnZhbHVlKSkubWFwKGU9PmUuaWQpKTtyZXR1cm4gZS5maWx0ZXIoZT0+RHcoZSxzLnZhbHVlKXx8ZS5ncm91cE5hbWUhPT12b2lkIDAmJnIuaGFzKGUuZ3JvdXBOYW1lKSl9KSxtPVcoKCk9Pm4udmFsdWU/LnVzZXJzLmxlbmd0aD9jLnZhbHVlP2BubyB1c2VycyBtYXRjaCAiJHtvLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCksaD1UdyhgTmFtZWAsYE1lbWJlcnNgLGEpLGc9TShbXSksXz1CUyh7Z2V0IGRhdGEoKXtyZXR1cm4gbC52YWx1ZX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gaH0sZ2V0Q29yZVJvd01vZGVsOmpTKCksZ2V0U29ydGVkUm93TW9kZWw6TVMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+UVMoZSxnKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gZy52YWx1ZX19fSksdj1XKCgpPT5fLmdldFJvd01vZGVsKCkucm93cykseT1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLGI9VygoKT0+Xy5nZXRIZWFkZXJHcm91cHMoKVswXS5oZWFkZXJzLmZpbHRlcihlPT55LmhhcyhlLmNvbHVtbi5pZCkpKSx4PVp0KHttYW51YWxseUV4cGFuZGVkOm5ldyBTZXQsbWFudWFsbHlDb2xsYXBzZWQ6bmV3IFNldH0pLFM9VygoKT0+TEMoeCxjLnZhbHVlLHUudmFsdWUpKTtmdW5jdGlvbiBDKGUpe1JDKHgsZSxTLnZhbHVlLmhhcyhlKSl9bGV0IHc9Vyh7Z2V0OigpPT5BcnJheS5mcm9tKFMudmFsdWUpLHNldDplPT57bGV0IHQ9bmV3IFNldChlKTtmb3IobGV0IGUgb2YgUy52YWx1ZSl0LmhhcyhlKXx8QyhlKTtmb3IobGV0IGUgb2YgdClTLnZhbHVlLmhhcyhlKXx8QyhlKX19KTtFcihvLGU9PntlLnRyaW0oKT09PWBgJiZ6Qyh4KX0pO2Z1bmN0aW9uIGVlKGUpe3JldHVybi9bKj9bXS8udGVzdChlKX1yZXR1cm4oZSx0KT0+KFIoKSx6KGBkaXZgLE13LFtIKGpDLHttb2RlbFZhbHVlOk4obyksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKG8pP28udmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgdXNlcnMgb3IgZ3JvdXBzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLG4udmFsdWU/KFIoKSxCKE4ocWIpLHtrZXk6MH0se2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzJdfHw9W1UoYFRvdGFsYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzNdfHw9W1UoYFVzYWdlIHN1bW1lZCBhY3Jvc3MgZXZlcnkgdXNlciBhbmQgZ3JvdXAgY29tYmluZWQuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsbnVsbCxbdFs0XXx8PVYoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFJlcXVlc3RzL2RheWAsLTEpLFYoYHBgLE53LFtIKG13LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzVdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIGluL2RheWAsLTEpLFYoYHBgLFB3LFtIKG13LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnRva2Vuc0luUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzZdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIG91dC9kYXlgLC0xKSxWKGBwYCxGdyxbSChtdyx7dmFsdWU6bi52YWx1ZS50b3RhbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxWKGBkaXZgLG51bGwsW3RbN118fD1WKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBDb3N0L2RheWAsLTEpLFYoYHBgLEl3LGsoTihhQykobi52YWx1ZS50b3RhbC5jb3N0UGVyRGF5TWljcm9Vc2QpKSwxKV0pXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbOF18fD1bVShgR3JvdXBzYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzldfHw9W1UoYEV4cGFuZCBhIGdyb3VwIHRvIHNlZSBpdHMgbWVtYmVyIHVzZXJzJyBvd24gdXNhZ2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W3YudmFsdWUubGVuZ3RoPyhSKCkseihgZGl2YCxMdyxbKFIoITApLHooTCxudWxsLG1hKGIudmFsdWUsZT0+KFIoKSxCKEhTLHtrZXk6ZS5pZCxoZWFkZXI6ZX0sbnVsbCw4LFtgaGVhZGVyYF0pKSksMTI4KSldKSk6VHMoYGAsITApLHYudmFsdWUubGVuZ3RoPyhSKCksQihOKE1DKSx7a2V5OjEsbW9kZWxWYWx1ZTp3LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+dy52YWx1ZT1lLHR5cGU6YG11bHRpcGxlYCxjbGFzczpgcm91bmRlZC1tZCBib3JkZXIgcHgtM2B9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodi52YWx1ZSxlPT4oUigpLEIoTihQQykse2tleTplLm9yaWdpbmFsLmlkLHZhbHVlOmUub3JpZ2luYWwuaWR9LHtkZWZhdWx0OlAoKCk9PltIKE4oRkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLFJ3LFtWKGBzcGFuYCx6dyxrKGUub3JpZ2luYWwuaWQpLDEpLFYoYHNwYW5gLEJ3LGsoYShlLm9yaWdpbmFsKXx8YDBgKStgIG1lbWJlcnNgLDEpLFYoYHNwYW5gLFZ3LFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKG13LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSksdFsxMF18fD1VKGAgcmVxL2RheSBgLC0xKV0pLFYoYHNwYW5gLEh3LGsoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOk4oYUMpKGUub3JpZ2luYWwuY29zdFBlckRheU1pY3JvVXNkKSkrYC9kYXkgYCwxKV0pXSksXzoyfSwxMDI0KSxIKE4oTkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYGRsYCxVdyxbVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6b1R9LGBQcm92aWRlcnNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5wcm92aWRlcnM/Lmxlbmd0aD8oUigpLHooYGRpdmAsV3csWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLnByb3ZpZGVycyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsR3csYEFsbCBwcm92aWRlcnNgKSldKV0pLFYoYGRpdmAsbnVsbCxbVihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOm9UfSxgTW9kZWxzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubW9kZWxzPy5sZW5ndGg/KFIoKSx6KGBkaXZgLEt3LFsoUighMCkseihMLG51bGwsbWEoZS5vcmlnaW5hbC5tb2RlbHMsZT0+KFIoKSx6KEwse2tleTplfSxbZWUoZSk/KFIoKSxCKE4oZUMpLHtrZXk6MSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlKSwxKV0pLF86Mn0sMTAyNCkpOihSKCksQihiQyx7a2V5OjAsaWQ6ZX0sbnVsbCw4LFtgaWRgXSkpXSw2NCkpKSwxMjgpKV0pKTooUigpLHooYHNwYW5gLHF3LGBBbGwgbW9kZWxzYCkpXSldKSxWKGBkaXZgLG51bGwsW1YoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpvVH0sYE1DUCBzZXJ2ZXJzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubWNwU2VydmVycz8ubGVuZ3RoPyhSKCkseihgZGl2YCxKdyxbKFIoITApLHooTCxudWxsLG1hKGUub3JpZ2luYWwubWNwU2VydmVycyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsWXcsYEFsbCBNQ1Agc2VydmVyc2ApKV0pXSksVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6b1R9LGBBZ2VudHNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5hZ2VudHM/Lmxlbmd0aD8oUigpLHooYGRpdmAsWHcsWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLmFnZW50cyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsWncsYEFsbCBhZ2VudHNgKSldKV0pXSksVihgZGxgLFF3LFtWKGBkaXZgLG51bGwsW3RbMTFdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGltaXRzYCwtMSksVihgZGRgLG51bGwsayhOKHZDKShlLm9yaWdpbmFsLmxpbWl0cykpLDEpXSksVihgZGl2YCxudWxsLFt0WzEyXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHJlcS9taW5gLC0xKSxWKGBkZGAsJHcsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhSKCkseihMLHtrZXk6MH0sW1UoYD9gKV0sNjQpKTooUigpLEIobXcse2tleToxLHZhbHVlOmUub3JpZ2luYWwucmVxdWVzdHNQZXJNaW51dGV9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzEzXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL2RheWAsLTEpLFYoYGRkYCxlVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihtdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJblBlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTRdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgdG9rT3V0L2RheWAsLTEpLFYoYGRkYCx0VCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihtdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE1XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL21vbnRoYCwtMSksVihgZGRgLG5ULFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKG13LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc0luUGVyTW9udGh9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE2XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva091dC9tb250aGAsLTEpLFYoYGRkYCxyVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihtdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJNb250aH0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTddfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgY29zdC9tb250aGAsLTEpLFYoYGRkYCxpVCxrKGUub3JpZ2luYWwuc3RvcmVEb3duP2A/YDpOKGFDKShlLm9yaWdpbmFsLmNvc3RQZXJNb250aE1pY3JvVXNkKSksMSldKV0pLHRbMThdfHw9VihgcGAse2NsYXNzOmBtYi0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTWVtYmVyc2AsLTEpLEgoRXcseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6ZChlLm9yaWdpbmFsKSwic2Vjb25kYXJ5LXZhbHVlIjppfSxudWxsLDgsW2BlbnRyaWVzYF0pXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLHooYHBgLGFULGsoZi52YWx1ZSksMSkpXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzE5XXx8PVtVKGBVc2Vyc2AsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKEV3LHsiaWQtbGFiZWwiOmBOYW1lYCwic2Vjb25kYXJ5LWNvbHVtbi1sYWJlbCI6YEdyb3VwYCxlbnRyaWVzOnAudmFsdWUsInNlY29uZGFyeS12YWx1ZSI6aSwiZW1wdHktbWVzc2FnZSI6bS52YWx1ZX0sbnVsbCw4LFtgZW50cmllc2AsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pO2Z1bmN0aW9uIGNUKGUsdCxuKXtsZXQgcj1lLnN0YXJ0c1dpdGgoYCNgKT9lLnNsaWNlKDEpOmU7cmV0dXJuIHQuaW5jbHVkZXMocik/cjpufWZ1bmN0aW9uIGxUKGUpe3JldHVybmAjJHtlfWB9ZnVuY3Rpb24gdVQoe3ZhbGlkVGFiczplLGRlZmF1bHRUYWI6dH0pe2xldCBuPXR5cGVvZiB3aW5kb3c8YHVgLHI9TShuP2NUKHdpbmRvdy5sb2NhdGlvbi5oYXNoLGUsdCk6dCk7RXIocixlPT57aWYoIW4pcmV0dXJuO2xldCB0PWxUKGUpO3dpbmRvdy5sb2NhdGlvbi5oYXNoIT09dCYmd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsYGAsdCl9KTtmdW5jdGlvbiBpKCl7ci52YWx1ZT1jVCh3aW5kb3cubG9jYXRpb24uaGFzaCxlLHQpfXJldHVybiBuJiYoWmkoKCk9PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSksdGEoKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSkpLHJ9dmFyIGRUPShmdW5jdGlvbigpe2xldCBlPXR5cGVvZiBkb2N1bWVudDxgdWAmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKS5yZWxMaXN0O3JldHVybiBlJiZlLnN1cHBvcnRzJiZlLnN1cHBvcnRzKGBtb2R1bGVwcmVsb2FkYCk/YG1vZHVsZXByZWxvYWRgOmBwcmVsb2FkYH0pKCksZlQ9ZnVuY3Rpb24oZSl7cmV0dXJuYC9hZG1pbi9gK2V9LHBUPXt9LG1UPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1Qcm9taXNlLnJlc29sdmUoKTtpZih0JiZ0Lmxlbmd0aD4wKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShgbGlua2ApLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtwcm9wZXJ0eT1jc3Atbm9uY2VdYCksYT1pPy5ub25jZXx8aT8uZ2V0QXR0cmlidXRlKGBub25jZWApO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKGU9PlByb21pc2UucmVzb2x2ZShlKS50aGVuKGU9Pih7c3RhdHVzOmBmdWxmaWxsZWRgLHZhbHVlOmV9KSxlPT4oe3N0YXR1czpgcmVqZWN0ZWRgLHJlYXNvbjplfSkpKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZT9pbXBvcnQubWV0YS5yZXNvbHZlKGUpOm5ldyBVUkwoZSxpbXBvcnQubWV0YS51cmwpLmhyZWZ9cj1vKHQubWFwKHQ9PntpZih0PWZUKHQsbiksdD1zKHQpLHQgaW4gcFQpcmV0dXJuO3BUW3RdPSEwO2xldCByPXQuZW5kc1dpdGgoYC5jc3NgKTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpZihpLmhyZWY9PT10JiYoIXJ8fGkucmVsPT09YHN0eWxlc2hlZXRgKSlyZXR1cm59bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApO2lmKGkucmVsPXI/YHN0eWxlc2hlZXRgOmRULHJ8fChpLmFzPWBzY3JpcHRgKSxpLmNyb3NzT3JpZ2luPWBgLGkuaHJlZj10LGEmJmkuc2V0QXR0cmlidXRlKGBub25jZWAsYSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSxyKXJldHVybiBuZXcgUHJvbWlzZSgoZSxuKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsZSksaS5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsKCk9Pm4oRXJyb3IoYFVuYWJsZSB0byBwcmVsb2FkIENTUyBmb3IgJHt0fWApKSl9KX0pKX1mdW5jdGlvbiBpKGUpe2xldCB0PW5ldyBFdmVudChgdml0ZTpwcmVsb2FkRXJyb3JgLHtjYW5jZWxhYmxlOiEwfSk7aWYodC5wYXlsb2FkPWUsd2luZG93LmRpc3BhdGNoRXZlbnQodCksIXQuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBlfXJldHVybiByLnRoZW4odD0+e2ZvcihsZXQgZSBvZiB0fHxbXSllLnN0YXR1cz09PWByZWplY3RlZGAmJmkoZS5yZWFzb24pO3JldHVybiBlKCkuY2F0Y2goaSl9KX0saFQ9e2NsYXNzOmBmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNiBweC00IHB5LTggc206cHgtNiBsZzpweC04YH0sZ1Q9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sX1Q9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSx2VD17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx5VD1gaHR0cHM6Ly9naXRodWIuY29tL2x1a2FzenJhY3p5bG8vdHJhZWZpay1sbG1nYXRld2F5YCxiVD1odShGKHtfX25hbWU6YEFwcGAsc2V0dXAoZSl7bGV0IHQ9TGkoKCk9Pm1UKCgpPT5pbXBvcnQoYC4vQ2hhcnRzVmlldy15bGlfTUNIOC5qc2ApLFtdKSksbj1yeCgpLHI9c3goKSxpPXVUKHt2YWxpZFRhYnM6W2Bwcm92aWRlcnNgLGB1c2FnZWAsYGNoYXJ0c2AsYHRhcmdldHNgXSxkZWZhdWx0VGFiOmBwcm92aWRlcnNgfSksYT1XKCgpPT5yLmVycm9yP2ByZWZyZXNoIGZhaWxlZDogJHtyLmVycm9yfWA6ci5sYXN0VXBkYXRlZD9gbGFzdCB1cGRhdGVkICR7ci5sYXN0VXBkYXRlZC50b0xvY2FsZVRpbWVTdHJpbmcoKX1gOmBsb2FkaW5nLi4uYCk7cmV0dXJuIFppKCgpPT57ci5zdGFydFBvbGxpbmcoKX0pLChlLG8pPT57bGV0IHM9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCxoVCxbVihgaGVhZGVyYCxnVCxbVihgZGl2YCxfVCxbb1sxXXx8PVYoYGgxYCx7Y2xhc3M6YHRleHQteGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodGB9LGBMTE0gR2F0ZXdheSDigJQgQWRtaW5gLC0xKSxIKE4oV2IpLHthczpgYWAsaHJlZjp5VCx0YXJnZXQ6YF9ibGFua2AscmVsOmBub29wZW5lciBub3JlZmVycmVyYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbmAsImFyaWEtbGFiZWwiOmBHaXRIdWIgcmVwb3NpdG9yeWAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChzLHtpY29uOk4ocl8pLGNsYXNzOmBzaXplLTRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxWKGBwYCx2VCxbTihyKS5lcnJvcj8oUigpLEIocyx7a2V5OjAsaWNvbjpOKHVfKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWB9LG51bGwsOCxbYGljb25gXSkpOlRzKGBgLCEwKSxWKGBzcGFuYCx7Y2xhc3M6TyhOKHIpLmVycm9yP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDApfSxrKGEudmFsdWUpLDMpXSldKSxOKG4pLmlzQXV0aGVudGljYXRlZD8oUigpLEIoTih5dykse2tleToxLG1vZGVsVmFsdWU6TihpKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b1swXXx8PWU9PmooaSk/aS52YWx1ZT1lOm51bGx9LHtkZWZhdWx0OlAoKCk9PltIKE4oeHcpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihTdykse3ZhbHVlOmBwcm92aWRlcnNgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1syXXx8PVtVKGBQcm92aWRlcnNgLC0xKV1dKSxfOjF9KSxIKE4oU3cpLHt2YWx1ZTpgdXNhZ2VgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1szXXx8PVtVKGBVc2FnZWAsLTEpXV0pLF86MX0pLEgoTihTdykse3ZhbHVlOmBjaGFydHNgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1s0XXx8PVtVKGBDaGFydHNgLC0xKV1dKSxfOjF9KSxIKE4oU3cpLHt2YWx1ZTpgdGFyZ2V0c2B9LHtkZWZhdWx0OlAoKCk9PlsuLi5vWzVdfHw9W1UoYE1DUCAmIEFnZW50c2AsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKGJ3KSx7dmFsdWU6YHByb3ZpZGVyc2B9LHtkZWZhdWx0OlAoKCk9PltIKHV3KV0pLF86MX0pLEgoTihidykse3ZhbHVlOmB1c2FnZWB9LHtkZWZhdWx0OlAoKCk9PltIKHNUKV0pLF86MX0pLEgoTihidykse3ZhbHVlOmBjaGFydHNgfSx7ZGVmYXVsdDpQKCgpPT5bSChOKHQpKV0pLF86MX0pLEgoTihidykse3ZhbHVlOmB0YXJnZXRzYH0se2RlZmF1bHQ6UCgoKT0+W0godncpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLEIoZ3gse2tleTowfSkpXSl9fX0pKTtiVC51c2UoSGcoKSksYlQuY29tcG9uZW50KGBGb250QXdlc29tZUljb25gLHdnKSxiVC5tb3VudChgI2FwcGApO2V4cG9ydHtWciBhcyAkLGt5IGFzIEEsWnQgYXMgQXQsVHkgYXMgQixnZSBhcyBCdCxxeSBhcyBDLHdyIGFzIEN0LFZ5IGFzIEQsb24gYXMgRHQsVXkgYXMgRSxGZSBhcyBFdCxieSBhcyBGLHluIGFzIEZ0LFogYXMgRyxzeSBhcyBILGZ5IGFzIEksbW4gYXMgSXQsY18gYXMgSixkXyBhcyBLLGd5IGFzIEwsTiBhcyBMdCxGeSBhcyBNLGVuIGFzIE10LEl5IGFzIE4sdW4gYXMgTnQsTnkgYXMgTyxqIGFzIE90LGR5IGFzIFAsQSBhcyBQdCxMIGFzIFEsQ3kgYXMgUixPIGFzIFJ0LFl5IGFzIFMsQ3IgYXMgU3QsR3kgYXMgVCxyYyBhcyBUdCxveSBhcyBVLGN5IGFzIFYsayBhcyBWdCxheSBhcyBXLHdnIGFzIFgsbl8gYXMgWSxhdSBhcyBaLEpiIGFzIF8sbWEgYXMgX3QseXcgYXMgYSxVIGFzIGF0LG5iIGFzIGIsYWMgYXMgYnQseUMgYXMgYyxTcyBhcyBjdCxzeCBhcyBkLGtzIGFzIGR0LFcgYXMgZXQsaXggYXMgZixRbiBhcyBmdCxYYiBhcyBnLFIgYXMgZ3QsWmIgYXMgaCx0YSBhcyBodCx4dyBhcyBpLHogYXMgaXQsQXkgYXMgaixNIGFzIGp0LE95IGFzIGssSWUgYXMga3Qsc0MgYXMgbCx0YyBhcyBsdCxyeCBhcyBtLFppIGFzIG10LER3IGFzIG4sQiBhcyBudCxJQyBhcyBvLEggYXMgb3QsYXggYXMgcCxlYSBhcyBwdCxoXyBhcyBxLFN3IGFzIHIsVHMgYXMgcnQsakMgYXMgcyxGIGFzIHN0LGp3IGFzIHQsViBhcyB0dCxvQyBhcyB1LFBhIGFzIHV0LHFiIGFzIHYsSSBhcyB2dCxLeSBhcyB3LFAgYXMgd3QsJHkgYXMgeCxFciBhcyB4dCx3YiBhcyB5LHVhIGFzIHl0LHd5IGFzIHoseGUgYXMgenR9Ow==", + "aW1wb3J0eyQgYXMgZSxBIGFzIHQsQXQgYXMgbixCIGFzIHIsQnQgYXMgaSxDIGFzIGEsQ3QgYXMgbyxEIGFzIHMsRHQgYXMgYyxFIGFzIGwsRXQgYXMgdSxGIGFzIGQsRnQgYXMgZixHIGFzIHAsSCBhcyBtLEkgYXMgaCxJdCBhcyBnLEogYXMgXyxLIGFzIHYsTCBhcyB5LEx0IGFzIGIsTSBhcyB4LE10IGFzIFMsTiBhcyBDLE50IGFzIHcsTyBhcyBULE90IGFzIEUsUCBhcyBELFB0IGFzIE8sUSBhcyBrLFIgYXMgQSxSdCBhcyBlZSxTIGFzIHRlLFN0IGFzIG5lLFQgYXMgcmUsVHQgYXMgaWUsVSBhcyBhZSxWIGFzIG9lLFZ0IGFzIHNlLFcgYXMgY2UsWCBhcyBsZSxZIGFzIHVlLFogYXMgZGUsXyBhcyBmZSxfdCBhcyBwZSxhIGFzIG1lLGF0IGFzIGhlLGIgYXMgaixjIGFzIGdlLGN0IGFzIF9lLGQgYXMgdmUsZHQgYXMgTSxldCBhcyBOLGYgYXMgeWUsZnQgYXMgYmUsZyBhcyB4ZSxndCBhcyBQLGggYXMgU2UsaHQgYXMgQ2UsaSBhcyB3ZSxpdCBhcyBUZSxqIGFzIEVlLGp0IGFzIEYsayBhcyBEZSxrdCBhcyBPZSxsIGFzIGtlLGx0IGFzIEFlLG0gYXMgamUsbXQgYXMgTWUsbiBhcyBOZSxudCBhcyBJLG8gYXMgUGUsb3QgYXMgTCxwIGFzIEZlLHB0IGFzIEllLHEgYXMgTGUsciBhcyBSZSxydCBhcyB6ZSxzIGFzIEJlLHN0IGFzIFIsdCBhcyBWZSx0dCBhcyBIZSx1IGFzIFVlLHV0IGFzIFdlLHYgYXMgR2UsdnQgYXMgeix3IGFzIEtlLHd0IGFzIEIseCBhcyBxZSx4dCBhcyBWLHkgYXMgSmUseXQgYXMgWWUseiBhcyBYZSx6dCBhcyBaZX1mcm9tIi4vaW5kZXgtZWpLVFpaZHguanMiO2Z1bmN0aW9uIFFlKGUsdD0tMS8wLG49MS8wKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heCh0LGUpKX1mdW5jdGlvbiAkZShlLHQsbil7bGV0IHI9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxpPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTt0JiZyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LHtvbmNlOiEwfSksci5kaXNwYXRjaEV2ZW50KGkpfXZhciBIPW4oe2xheWVyc1Jvb3Q6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LG9yaWdpbmFsQm9keVBvaW50ZXJFdmVudHM6dm9pZCAwLGJyYW5jaGVzOm5ldyBTZXR9KTtmdW5jdGlvbiBldChlKXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiExO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdCE9PW51bGwmJnQhPT1PYmplY3QucHJvdG90eXBlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1udWxsfHxTeW1ib2wuaXRlcmF0b3IgaW4gZT8hMTpTeW1ib2wudG9TdHJpbmdUYWcgaW4gZT9PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBNb2R1bGVdYDohMH1mdW5jdGlvbiB0dChlLHQsbj1gLmAscil7aWYoIWV0KHQpKXJldHVybiB0dChlLHt9LG4scik7bGV0IGk9ey4uLnR9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyhlKSl7aWYodD09PWBfX3Byb3RvX19gfHx0PT09YGNvbnN0cnVjdG9yYCljb250aW51ZTtsZXQgYT1lW3RdO2EhPW51bGwmJihyJiZyKGksdCxhLG4pfHwoaVt0XT1BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGlbdF0pP1suLi5hLC4uLmlbdF1dOmV0KGEpJiZldChpW3RdKT90dChhLGlbdF0sKG4/YCR7bn0uYDpgYCkrdC50b1N0cmluZygpLHIpOmEpKX1yZXR1cm4gaX1mdW5jdGlvbiBudChlKXtyZXR1cm4oLi4udCk9PnQucmVkdWNlKCh0LG4pPT50dCh0LG4sYGAsZSkse30pfXZhciBydD1udCgpLGl0PWQoKCk9PntsZXQgZT1GKG5ldyBNYXApLG49RigpLHI9TigoKT0+e2ZvcihsZXQgdCBvZiBlLnZhbHVlLnZhbHVlcygpKWlmKHQpcmV0dXJuITA7cmV0dXJuITF9KSxpPXMoe3Njcm9sbEJvZHk6RighMCl9KSxhPW51bGwsbz0oKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWBgLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9YGAsSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gYCksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KGAtLXNjcm9sbGJhci13aWR0aGApLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9bi52YWx1ZT8/YGAseSYmYT8uKCksbi52YWx1ZT12b2lkIDB9O3JldHVybiBWKHIsKGUscyk9PntpZighaClyZXR1cm47aWYoIWUpe3MmJm8oKTtyZXR1cm59bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyk7bGV0IGM9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9e3BhZGRpbmc6YyxtYXJnaW46MH0sdT1pLnNjcm9sbEJvZHk/LnZhbHVlP3R5cGVvZiBpLnNjcm9sbEJvZHkudmFsdWU9PWBvYmplY3RgP3J0KHtwYWRkaW5nOmkuc2Nyb2xsQm9keS52YWx1ZS5wYWRkaW5nPT09ITA/YzppLnNjcm9sbEJvZHkudmFsdWUucGFkZGluZyxtYXJnaW46aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbj09PSEwP2M6aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbn0sbCk6bDp7cGFkZGluZzowLG1hcmdpbjowfTtjPjAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10eXBlb2YgdS5wYWRkaW5nPT1gbnVtYmVyYD9gJHt1LnBhZGRpbmd9cHhgOlN0cmluZyh1LnBhZGRpbmcpLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9dHlwZW9mIHUubWFyZ2luPT1gbnVtYmVyYD9gJHt1Lm1hcmdpbn1weGA6U3RyaW5nKHUubWFyZ2luKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCxgJHtjfXB4YCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1gaGlkZGVuYCkseSYmKGE9dChkb2N1bWVudCxgdG91Y2htb3ZlYCxlPT5zdChlKSx7cGFzc2l2ZTohMX0pKSxiZSgoKT0+e3IudmFsdWUmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9YGhpZGRlbmApfSl9LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHN5bmNgfSksZX0pO2Z1bmN0aW9uIGF0KGUpe2xldCB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDcpLG49aXQoKTtuLnZhbHVlLnNldCh0LGU/PyExKTtsZXQgaT1OKHtnZXQ6KCk9Pm4udmFsdWUuZ2V0KHQpPz8hMSxzZXQ6ZT0+bi52YWx1ZS5zZXQodCxlKX0pO3JldHVybiByKCgpPT57bi52YWx1ZS5kZWxldGUodCl9KSxpfWZ1bmN0aW9uIG90KGUpe2xldCB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO2lmKHQub3ZlcmZsb3dYPT09YHNjcm9sbGB8fHQub3ZlcmZsb3dZPT09YHNjcm9sbGB8fHQub3ZlcmZsb3dYPT09YGF1dG9gJiZlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGh8fHQub3ZlcmZsb3dZPT09YGF1dG9gJiZlLmNsaWVudEhlaWdodDxlLnNjcm9sbEhlaWdodClyZXR1cm4hMDt7bGV0IHQ9ZS5wYXJlbnROb2RlO3JldHVybiEodCBpbnN0YW5jZW9mIEVsZW1lbnQpfHx0LnRhZ05hbWU9PT1gQk9EWWA/ITE6b3QodCl9fWZ1bmN0aW9uIHN0KGUpe2xldCB0PWV8fHdpbmRvdy5ldmVudCxuPXQudGFyZ2V0O3JldHVybiBuIGluc3RhbmNlb2YgRWxlbWVudCYmb3Qobik/ITE6dC50b3VjaGVzLmxlbmd0aD4xfHwodC5wcmV2ZW50RGVmYXVsdCYmdC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCksITEpfXZhciBjdD0wO2Z1bmN0aW9uIGx0KCl7bmUoZT0+e2lmKCFoKXJldHVybjtsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWZvY3VzLWd1YXJkXWApO2RvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGBhZnRlcmJlZ2luYCx0WzBdPz91dCgpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChgYmVmb3JlZW5kYCx0WzFdPz91dCgpKSxjdCsrLGUoKCk9PntjdD09PTEmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtZm9jdXMtZ3VhcmRdYCkuZm9yRWFjaChlPT5lLnJlbW92ZSgpKSxjdC0tfSl9KX1mdW5jdGlvbiB1dCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHNwYW5gKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoYGRhdGEtcmVrYS1mb2N1cy1ndWFyZGAsYGApLGUudGFiSW5kZXg9MCxlLnN0eWxlLm91dGxpbmU9YG5vbmVgLGUuc3R5bGUub3BhY2l0eT1gMGAsZS5zdHlsZS5wb3NpdGlvbj1gZml4ZWRgLGUuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWAsZX1mdW5jdGlvbiBkdChlKXtyZXR1cm4gTigoKT0+IWcoZSl8fCEhRGUoZSk/LmNsb3Nlc3QoYGZvcm1gKSl9dmFyIGZ0PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+YHVgP251bGw6KEFycmF5LmlzQXJyYXkoZSk/ZVswXTplKS5vd25lckRvY3VtZW50LmJvZHl9LHB0PW5ldyBXZWFrTWFwLG10PW5ldyBXZWFrTWFwLGh0PXt9LGd0PTAsX3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihlLmhvc3R8fF90KGUucGFyZW50Tm9kZSkpfSx2dD1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtpZihlLmNvbnRhaW5zKHQpKXJldHVybiB0O3ZhciBuPV90KHQpO3JldHVybiBuJiZlLmNvbnRhaW5zKG4pP246KGNvbnNvbGUuZXJyb3IoYGFyaWEtaGlkZGVuYCx0LGBpbiBub3QgY29udGFpbmVkIGluc2lkZWAsZSxgLiBEb2luZyBub3RoaW5nYCksbnVsbCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSl9LHl0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXZ0KHQsQXJyYXkuaXNBcnJheShlKT9lOltlXSk7aHRbbl18fChodFtuXT1uZXcgV2Vha01hcCk7dmFyIGE9aHRbbl0sbz1bXSxzPW5ldyBTZXQsYz1uZXcgU2V0KGkpLGw9ZnVuY3Rpb24oZSl7IWV8fHMuaGFzKGUpfHwocy5hZGQoZSksbChlLnBhcmVudE5vZGUpKX07aS5mb3JFYWNoKGwpO3ZhciB1PWZ1bmN0aW9uKGUpeyFlfHxjLmhhcyhlKXx8QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUpe2lmKHMuaGFzKGUpKXUoZSk7ZWxzZSB0cnl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUociksaT10IT09bnVsbCYmdCE9PWBmYWxzZWAsYz0ocHQuZ2V0KGUpfHwwKSsxLGw9KGEuZ2V0KGUpfHwwKSsxO3B0LnNldChlLGMpLGEuc2V0KGUsbCksby5wdXNoKGUpLGM9PT0xJiZpJiZtdC5zZXQoZSwhMCksbD09PTEmJmUuc2V0QXR0cmlidXRlKG4sYHRydWVgKSxpfHxlLnNldEF0dHJpYnV0ZShyLGB0cnVlYCl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcihgYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uIGAsZSx0KX19KX07cmV0dXJuIHUodCkscy5jbGVhcigpLGd0KyssZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cHQuZ2V0KGUpLTEsaT1hLmdldChlKS0xO3B0LnNldChlLHQpLGEuc2V0KGUsaSksdHx8KG10LmhhcyhlKXx8ZS5yZW1vdmVBdHRyaWJ1dGUociksbXQuZGVsZXRlKGUpKSxpfHxlLnJlbW92ZUF0dHJpYnV0ZShuKX0pLGd0LS0sZ3R8fChwdD1uZXcgV2Vha01hcCxwdD1uZXcgV2Vha01hcCxtdD1uZXcgV2Vha01hcCxodD17fSl9fSxidD1mdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49YGRhdGEtYXJpYS1oaWRkZW5gKTt2YXIgcj1BcnJheS5mcm9tKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGk9dHx8ZnQoZSk7cmV0dXJuIGk/KHIucHVzaC5hcHBseShyLEFycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpYS1saXZlXSwgc2NyaXB0YCkpKSx5dChyLGksbixgYXJpYS1oaWRkZW5gKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIHh0KGUpe2xldCB0O1YoKCk9PkRlKGUpLGU9PntsZXQgbj0hMTt0cnl7bj0hIWU/LmNsb3Nlc3QoYFtwb3BvdmVyXTpub3QoOnBvcG92ZXItb3BlbilgKX1jYXRjaHt9ZSYmIW4/dD1idChlKTp0JiZ0KCl9KSxDZSgoKT0+e3QmJnQoKX0pfWZ1bmN0aW9uIFN0KGUpe2xldCB0PUYoKSxuPU4oKCk9PnQudmFsdWU/LndpZHRoPz8wKSxyPU4oKCk9PnQudmFsdWU/LmhlaWdodD8/MCksaTtyZXR1cm4gTWUoKCk9PntsZXQgbj1EZShlKTtuPyh0LnZhbHVlPXt3aWR0aDpuLm9mZnNldFdpZHRoLGhlaWdodDpuLm9mZnNldEhlaWdodH0saT1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuO2xldCByPWVbMF0saSxhO2lmKGBib3JkZXJCb3hTaXplYGluIHIpe2xldCBlPXIuYm9yZGVyQm94U2l6ZSx0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO2k9dC5pbmxpbmVTaXplLGE9dC5ibG9ja1NpemV9ZWxzZSBpPW4ub2Zmc2V0V2lkdGgsYT1uLm9mZnNldEhlaWdodDt0LnZhbHVlPXt3aWR0aDppLGhlaWdodDphfX0pLGkub2JzZXJ2ZShuLHtib3g6YGJvcmRlci1ib3hgfSkpOnQudmFsdWU9dm9pZCAwfSksQ2UoKCk9PntpPy5kaXNjb25uZWN0KCksaT12b2lkIDB9KSx7d2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gQ3QoZSl7bGV0IHQ9WGUoYGAsMWUzKTtyZXR1cm57c2VhcmNoOnQsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOihuLHIpPT57aWYodC52YWx1ZSs9bixlKWUobik7ZWxzZXtsZXQgZT1tKCksbj1yLm1hcChlPT4oey4uLmUsdGV4dFZhbHVlOmUudmFsdWU/LnRleHRWYWx1ZT8/ZS5yZWYudGV4dENvbnRlbnQ/LnRyaW0oKT8/YGB9KSksaT1uLmZpbmQodD0+dC5yZWY9PT1lKSxhPVR0KG4ubWFwKGU9PmUudGV4dFZhbHVlKSx0LnZhbHVlLGk/LnRleHRWYWx1ZSksbz1uLmZpbmQoZT0+ZS50ZXh0VmFsdWU9PT1hKTtyZXR1cm4gbyYmby5yZWYuZm9jdXMoKSxvPy5yZWZ9fSxyZXNldFR5cGVhaGVhZDooKT0+e3QudmFsdWU9YGB9fX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWZ1bmN0aW9uIFR0KGUsdCxuKXtsZXQgcj10Lmxlbmd0aD4xJiZBcnJheS5mcm9tKHQpLmV2ZXJ5KGU9PmU9PT10WzBdKT90WzBdOnQsaT1uP2UuaW5kZXhPZihuKTotMSxhPXd0KGUsTWF0aC5tYXgoaSwwKSk7ci5sZW5ndGg9PT0xJiYoYT1hLmZpbHRlcihlPT5lIT09bikpO2xldCBvPWEuZmluZChlPT5lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChyLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gbz09PW4/dm9pZCAwOm99dmFyIEV0PWBkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZWAsRHQ9YGRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlYDtmdW5jdGlvbiBPdChlLHQpe2lmKCEodCBpbnN0YW5jZW9mIEVsZW1lbnQpKXJldHVybiExO2xldCBuPXQuY2xvc2VzdChgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCkscj1lLmRhdGFzZXQuZGlzbWlzc2FibGVMYXllcj09PWBgP2U6ZS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSxpPUFycmF5LmZyb20oZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApKTtyZXR1cm4hIShuJiYocj09PW58fGkuaW5kZXhPZihyKTxpLmluZGV4T2YobikpKX1mdW5jdGlvbiBrdChlLHQsbj0hMCl7bGV0IHI9dD8udmFsdWU/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXM/LmRvY3VtZW50LGk9RighMSksYT1GKCgpPT57fSk7cmV0dXJuIG5lKG89PntpZighaHx8IWcobikpcmV0dXJuO2xldCBzPWFzeW5jIG49PntsZXQgbz1uLnRhcmdldDtpZighKCF0Py52YWx1ZXx8IW8pKXtpZihPdCh0LnZhbHVlLG8pKXtpLnZhbHVlPSExO3JldHVybn1pZihuLnRhcmdldCYmIWkudmFsdWUpe2xldCB0PXtvcmlnaW5hbEV2ZW50Om59O2Z1bmN0aW9uIGkoKXskZShFdCxlLHQpfW4ucG9pbnRlclR5cGU9PT1gdG91Y2hgPyhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKSxhLnZhbHVlPWksci5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSx7b25jZTohMH0pKTppKCl9ZWxzZSByLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKTtpLnZhbHVlPSExfX0sYz13aW5kb3cuc2V0VGltZW91dCgoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcmRvd25gLHMpfSwwKTtvKCgpPT57d2luZG93LmNsZWFyVGltZW91dChjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJkb3duYCxzKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKX0pfSkse29uUG9pbnRlckRvd25DYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITApfX19ZnVuY3Rpb24gQXQoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUYoITEpO3JldHVybiBuZShhPT57aWYoIWh8fCFnKG4pKXJldHVybjtsZXQgbz1hc3luYyBuPT57aWYoIXQ/LnZhbHVlKXJldHVybjthd2FpdCBiZSgpLGF3YWl0IGJlKCk7bGV0IHI9bi50YXJnZXQ7IXQudmFsdWV8fCFyfHxPdCh0LnZhbHVlLHIpfHxuLnRhcmdldCYmIWkudmFsdWUmJiRlKER0LGUse29yaWdpbmFsRXZlbnQ6bn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG8pLGEoKCk9PnIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbykpfSkse29uRm9jdXNDYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITApfSxvbkJsdXJDYXB0dXJlOigpPT57ZyhuKSYmKGkudmFsdWU9ITEpfX19dmFyIGp0PVIoe19fbmFtZTpgRGlzbWlzc2FibGVMYXllcmAscHJvcHM6e2Rpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9fSxlbWl0czpbYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgLGBmb2N1c091dHNpZGVgLGBpbnRlcmFjdE91dHNpZGVgLGBkaXNtaXNzYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2ZvcndhcmRSZWY6YSxjdXJyZW50RWxlbWVudDpvfT1yZSgpLHM9TigoKT0+by52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcy5kb2N1bWVudCksYz1OKCgpPT5ILmxheWVyc1Jvb3QpLGw9TigoKT0+by52YWx1ZT9BcnJheS5mcm9tKGMudmFsdWUpLmluZGV4T2Yoby52YWx1ZSk6LTEpLHU9TigoKT0+SC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPjApLGQ9TigoKT0+e2xldCBlPUFycmF5LmZyb20oYy52YWx1ZSksW3RdPVsuLi5ILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSksbj1lLmluZGV4T2YodCk7cmV0dXJuIGwudmFsdWU+PW59KSxmPWt0KGFzeW5jIGU9PntsZXQgdD1bLi4uSC5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFuLnByZXNlbnR8fCFkLnZhbHVlfHx0fHwocihgcG9pbnRlckRvd25PdXRzaWRlYCxlKSxyKGBpbnRlcmFjdE91dHNpZGVgLGUpLGF3YWl0IGJlKCksZS5kZWZhdWx0UHJldmVudGVkfHxyKGBkaXNtaXNzYCkpfSxvKSxwPUF0KGU9PntsZXQgdD1bLi4uSC5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFuLnByZXNlbnR8fHR8fChyKGBmb2N1c091dHNpZGVgLGUpLHIoYGludGVyYWN0T3V0c2lkZWAsZSksZS5kZWZhdWx0UHJldmVudGVkfHxyKGBkaXNtaXNzYCkpfSxvKTtyZXR1cm4gVChgRXNjYXBlYCxlPT57bi5wcmVzZW50JiZsLnZhbHVlPT09Yy52YWx1ZS5zaXplLTEmJihyKGBlc2NhcGVLZXlEb3duYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fHIoYGRpc21pc3NgKSl9KSxWKFtvLCgpPT5uLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cywoKT0+bi5wcmVzZW50XSwoW2UsdCxuXSxyLGkpPT57IWV8fCFufHx0JiYoSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKEgub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cz1zLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxzLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWApLEgubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuYWRkKGUpLGkoKCk9PntILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShlKSxILmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYhb2UoSC5vcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzKSYmKHMudmFsdWUuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUgub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cyl9KSl9LHtpbW1lZGlhdGU6ITB9KSxWKFtvLCgpPT5uLnByZXNlbnRdLChbZSx0XSxuLHIpPT57IWV8fCF0fHwoYy52YWx1ZS5hZGQoZSkscigoKT0+e2MudmFsdWUuZGVsZXRlKGUpfSkpfSx7aW1tZWRpYXRlOiEwfSksbmUoZT0+e2UoKCk9PntvLnZhbHVlJiYoYy52YWx1ZS5kZWxldGUoby52YWx1ZSksSC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoby52YWx1ZSkpfSl9KSwoZSx0KT0+KFAoKSxJKGIoaikse3JlZjpiKGEpLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImRhdGEtZGlzbWlzc2FibGUtbGF5ZXIiOmBgLHN0eWxlOmkoe3BvaW50ZXJFdmVudHM6dS52YWx1ZT9kLnZhbHVlP2BhdXRvYDpgbm9uZWA6dm9pZCAwfSksb25Gb2N1c0NhcHR1cmU6YihwKS5vbkZvY3VzQ2FwdHVyZSxvbkJsdXJDYXB0dXJlOmIocCkub25CbHVyQ2FwdHVyZSxvblBvaW50ZXJkb3duQ2FwdHVyZTpiKGYpLm9uUG9pbnRlckRvd25DYXB0dXJlfSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYHN0eWxlYCxgb25Gb2N1c0NhcHR1cmVgLGBvbkJsdXJDYXB0dXJlYCxgb25Qb2ludGVyZG93bkNhcHR1cmVgXSkpfX0pLE10PUQoKCk9PkYoW10pKTtmdW5jdGlvbiBOdCgpe2xldCBlPU10KCk7cmV0dXJue2FkZCh0KXtsZXQgbj1lLnZhbHVlWzBdO3QhPT1uJiZuPy5wYXVzZSgpLGUudmFsdWU9UHQoZS52YWx1ZSx0KSxlLnZhbHVlLnVuc2hpZnQodCl9LHJlbW92ZSh0KXtlLnZhbHVlPVB0KGUudmFsdWUsdCksZS52YWx1ZVswXT8ucmVzdW1lKCl9fX1mdW5jdGlvbiBQdChlLHQpe2xldCBuPVsuLi5lXSxyPW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiZuLnNwbGljZShyLDEpLG59dmFyIEZ0PWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnRgLEl0PWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudGAsTHQ9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH07ZnVuY3Rpb24gUnQoZSx7c2VsZWN0OnQ9ITF9PXt9KXtsZXQgbj1tKCk7Zm9yKGxldCByIG9mIGUpaWYoV3Qocix7c2VsZWN0OnR9KSxtKCkhPT1uKXJldHVybiEwfWZ1bmN0aW9uIHp0KGUpe2xldCB0PUJ0KGUpO3JldHVybltWdCh0LGUpLFZ0KHQucmV2ZXJzZSgpLGUpXX1mdW5jdGlvbiBCdChlKXtsZXQgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTplPT57bGV0IHQ9ZS50YWdOYW1lPT09YElOUFVUYCYmZS50eXBlPT09YGhpZGRlbmA7cmV0dXJuIGUuZGlzYWJsZWR8fGUuaGlkZGVufHx0P05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ZS50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspdC5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiB0fWZ1bmN0aW9uIFZ0KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYoIUh0KG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIEh0KGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PWBoaWRkZW5gKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PWBub25lYClyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmBzZWxlY3RgaW4gZX1mdW5jdGlvbiBXdChlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2xldCBuPW0oKTtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZSE9PW4mJlV0KGUpJiZ0JiZlLnNlbGVjdCgpfX12YXIgR3Q9Uih7X19uYW1lOmBGb2N1c1Njb3BlYCxwcm9wczp7bG9vcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LHRyYXBwZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxwcmVzZW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Btb3VudEF1dG9Gb2N1c2AsYHVubW91bnRBdXRvRm9jdXNgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgcj1lLGk9dCx7Y3VycmVudFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXJlKCkscz1GKG51bGwpLGM9TnQoKSxsPW4oe3BhdXNlZDohMSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX19KTtuZShlPT57aWYoIWgpcmV0dXJuO2xldCB0PW8udmFsdWU7aWYoIXIudHJhcHBlZClyZXR1cm47ZnVuY3Rpb24gbihlKXtpZihsLnBhdXNlZHx8IXQpcmV0dXJuO2xldCBuPWUudGFyZ2V0O3QuY29udGFpbnMobik/cy52YWx1ZT1uOld0KHMudmFsdWUse3NlbGVjdDohMH0pfWZ1bmN0aW9uIGkoZSl7aWYobC5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQ7biE9PW51bGwmJih0LmNvbnRhaW5zKG4pfHxXdChzLnZhbHVlLHtzZWxlY3Q6ITB9KSl9ZnVuY3Rpb24gYShlKXtsZXQgbj1zLnZhbHVlO24hPT1udWxsJiZlLnNvbWUoZT0+ZS5yZW1vdmVkTm9kZXMubGVuZ3RoPjApJiYodC5jb250YWlucyhuKXx8V3QodCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKTtsZXQgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihhKTt0JiZjLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNvdXRgLGkpLGMuZGlzY29ubmVjdCgpfSl9KTtmdW5jdGlvbiB1KGUsdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KEZ0LEx0KSxyPWU9PmkoYG1vdW50QXV0b0ZvY3VzYCxlKTtlLmFkZEV2ZW50TGlzdGVuZXIoRnQsciksZS5kaXNwYXRjaEV2ZW50KG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihGdCxyKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChSdChCdChlKSx7c2VsZWN0OiEwfSksbSgpPT09dCYmV3QoZSkpfW5lKGFzeW5jIGU9PntsZXQgdD1vLnZhbHVlO2lmKGF3YWl0IGJlKCksIXQpcmV0dXJuO3IucHJlc2VudCE9PSExJiZjLmFkZChsKTtsZXQgbj1tKCk7IXQuY29udGFpbnMobikmJnIucHJlc2VudCE9PSExJiZ1KHQsbiksZSgoKT0+e2xldCBlPW5ldyBDdXN0b21FdmVudChJdCxMdCkscj1lPT57aShgdW5tb3VudEF1dG9Gb2N1c2AsZSl9O3QuYWRkRXZlbnRMaXN0ZW5lcihJdCxyKSx0LmRpc3BhdGNoRXZlbnQoZSksdC5zZXRBdHRyaWJ1dGUoYGRhdGEtZm9jdXMtc2NvcGUtdW5tb3VudGluZ2AsYGApLHNldFRpbWVvdXQoKCk9PntlLmRlZmF1bHRQcmV2ZW50ZWR8fFd0KG4/P2RvY3VtZW50LmJvZHkse3NlbGVjdDohMH0pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihJdCxyKSxjLnJlbW92ZShsKSx0LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1mb2N1cy1zY29wZS11bm1vdW50aW5nYCl9LDApfSl9KSxWKCgpPT5yLnByZXNlbnQsYXN5bmMoZSx0KT0+e2lmKCFoKXJldHVybjtpZihlPT09ITEmJnQ9PT0hMCl7Yy5yZW1vdmUobCk7cmV0dXJufWlmKGUhPT0hMHx8dCE9PSExKXJldHVybjtjLmFkZChsKSxhd2FpdCBiZSgpO2xldCBuPW8udmFsdWU7aWYoIW4pcmV0dXJuO2xldCByPW0oKTtuLmNvbnRhaW5zKHIpfHx1KG4scil9KTtmdW5jdGlvbiBkKGUpe2lmKCFyLmxvb3AmJiFyLnRyYXBwZWR8fGwucGF1c2VkKXJldHVybjtsZXQgdD1lLmtleT09PWBUYWJgJiYhZS5hbHRLZXkmJiFlLmN0cmxLZXkmJiFlLm1ldGFLZXksbj1tKCk7aWYodCYmbil7bGV0IHQ9ZS5jdXJyZW50VGFyZ2V0LFtpLGFdPXp0KHQpO2kmJmE/IWUuc2hpZnRLZXkmJm49PT1hPyhlLnByZXZlbnREZWZhdWx0KCksci5sb29wJiZXdChpLHtzZWxlY3Q6ITB9KSk6ZS5zaGlmdEtleSYmbj09PWkmJihlLnByZXZlbnREZWZhdWx0KCksci5sb29wJiZXdChhLHtzZWxlY3Q6ITB9KSk6bj09PXQmJmUucHJldmVudERlZmF1bHQoKX19cmV0dXJuKGUsdCk9PihQKCksSShiKGopLHtyZWZfa2V5OmBjdXJyZW50UmVmYCxyZWY6YSx0YWJpbmRleDpgLTFgLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25LZXlkb3duOmR9LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYF0pKX19KSxLdD1bYEVudGVyYCxgIGBdLHF0PVtgQXJyb3dEb3duYCxgUGFnZVVwYCxgSG9tZWBdLEp0PVtgQXJyb3dVcGAsYFBhZ2VEb3duYCxgRW5kYF07Wy4uLnF0LC4uLkp0XSxbLi4uS3RdLFsuLi5LdF07ZnVuY3Rpb24gWXQoZSl7bGV0IHQ9bSgpO2ZvcihsZXQgbiBvZiBlKWlmKG49PT10fHwobi5mb2N1cygpLG0oKSE9PXQpKXJldHVybn12YXIgWHQ9Uih7X19uYW1lOmBUZWxlcG9ydGAscHJvcHM6e3RvOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRlZmVyOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LHNldHVwKHQpe2xldCBuPXQscj1zKHt9KSxpPU4oKCk9Pm4udG8/P3IudGVsZXBvcnRUbz8udmFsdWU/P2Bib2R5YCksYT1FZSgpO3JldHVybih0LG4pPT5iKGEpfHx0LmZvcmNlTW91bnQ/KFAoKSxJKGUse2tleTowLHRvOmkudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZCxkZWZlcjp0LmRlZmVyfSxbeih0LiRzbG90cyxgZGVmYXVsdGApXSw4LFtgdG9gLGBkaXNhYmxlZGAsYGRlZmVyYF0pKTp6ZShgdi1pZmAsITApfX0pLFp0PVIoe19fbmFtZTpgVmlzdWFsbHlIaWRkZW5gLHByb3BzOntmZWF0dXJlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBmb2N1c2FibGVgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KFAoKSxJKGIoaikse2FzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsImFyaWEtaGlkZGVuIjplLmZlYXR1cmU9PT1gZm9jdXNhYmxlYHx8ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YHRydWVgOnZvaWQgMCwiZGF0YS1oaWRkZW4iOmUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2BgOnZvaWQgMCx0YWJpbmRleDplLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gLTFgOnZvaWQgMCxzdHlsZTp7cG9zaXRpb246YGFic29sdXRlYCxib3JkZXI6MCx3aWR0aDpgMXB4YCxoZWlnaHQ6YDFweGAscGFkZGluZzowLG1hcmdpbjpgLTFweGAsb3ZlcmZsb3c6YGhpZGRlbmAsY2xpcDpgcmVjdCgwLCAwLCAwLCAwKWAsY2xpcFBhdGg6YGluc2V0KDUwJSlgLHdoaXRlU3BhY2U6YG5vd3JhcGAsd29yZFdyYXA6YG5vcm1hbGAsdG9wOmAtMXB4YCxsZWZ0OmAtMXB4YH19LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgYXJpYS1oaWRkZW5gLGBkYXRhLWhpZGRlbmAsYHRhYmluZGV4YF0pKX19KSxbUXQsJHRdPWFlKGBQb3BwZXJSb290YCksZW49Uih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyUm9vdGAsc2V0dXAoZSl7bGV0IHQ9RigpO3JldHVybiAkdCh7YW5jaG9yOnQsb25BbmNob3JDaGFuZ2U6ZT0+dC52YWx1ZT1lfSksKGUsdCk9PnooZS4kc2xvdHMsYGRlZmF1bHRgKX19KSx0bj1SKHtfX25hbWU6YFBvcHBlckFuY2hvcmAscHJvcHM6e3JlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09cmUoKSxpPVF0KCk7cmV0dXJuIG8oKCk9PntpLm9uQW5jaG9yQ2hhbmdlKHQucmVmZXJlbmNlPz9yLnZhbHVlKX0pLChlLHQpPT4oUCgpLEkoYihqKSx7cmVmOmIobiksYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZH0se2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pO2Z1bmN0aW9uIG5uKGUpe3JldHVybiBlIT09bnVsbH1mdW5jdGlvbiBybihlKXtyZXR1cm57bmFtZTpgdHJhbnNmb3JtT3JpZ2luYCxvcHRpb25zOmUsZm4odCl7bGV0e3BsYWNlbWVudDpuLHJlY3RzOnIsbWlkZGxld2FyZURhdGE6aX09dCxhPWkuYXJyb3c/LmNlbnRlck9mZnNldCE9PTAsbz1hPzA6ZS5hcnJvd1dpZHRoLHM9YT8wOmUuYXJyb3dIZWlnaHQsW2MsbF09YW4obiksdT17c3RhcnQ6ZS5kaXI9PT1gcnRsYD9gMTAwJWA6YDAlYCxjZW50ZXI6YDUwJWAsZW5kOmUuZGlyPT09YHJ0bGA/YDAlYDpgMTAwJWB9W2xdLGQ9e3N0YXJ0OmAwJWAsY2VudGVyOmA1MCVgLGVuZDpgMTAwJWB9W2xdLGY9KGkuYXJyb3c/Lng/PzApK28vMixwPShpLmFycm93Py55Pz8wKStzLzIsbT1gYCxoPWBgO3JldHVybiBjPT09YGJvdHRvbWA/KG09YT91OmAke2Z9cHhgLGg9YCR7LXN9cHhgKTpjPT09YHRvcGA/KG09YT91OmAke2Z9cHhgLGg9YCR7ci5mbG9hdGluZy5oZWlnaHQrc31weGApOmM9PT1gcmlnaHRgPyhtPWAkey1zfXB4YCxoPWE/ZDpgJHtwfXB4YCk6Yz09PWBsZWZ0YCYmKG09YCR7ci5mbG9hdGluZy53aWR0aCtzfXB4YCxoPWE/ZDpgJHtwfXB4YCkse2RhdGE6e3g6bSx5Omh9fX19fWZ1bmN0aW9uIGFuKGUpe2xldFt0LG49YGNlbnRlcmBdPWUuc3BsaXQoYC1gKTtyZXR1cm5bdCxuXX12YXIgb249W2B0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXSxzbj1NYXRoLm1pbixjbj1NYXRoLm1heCxsbj1NYXRoLnJvdW5kLHVuPU1hdGguZmxvb3IsZG49ZT0+KHt4OmUseTplfSksZm49e2xlZnQ6YHJpZ2h0YCxyaWdodDpgbGVmdGAsYm90dG9tOmB0b3BgLHRvcDpgYm90dG9tYH07ZnVuY3Rpb24gcG4oZSx0LG4pe3JldHVybiBjbihlLHNuKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiBobihlKXtyZXR1cm4gZS5zcGxpdChgLWApWzBdfWZ1bmN0aW9uIGduKGUpe3JldHVybiBlLnNwbGl0KGAtYClbMV19ZnVuY3Rpb24gX24oZSl7cmV0dXJuIGU9PT1geGA/YHlgOmB4YH1mdW5jdGlvbiB2bihlKXtyZXR1cm4gZT09PWB5YD9gaGVpZ2h0YDpgd2lkdGhgfWZ1bmN0aW9uIHluKGUpe2xldCB0PWVbMF07cmV0dXJuIHQ9PT1gdGB8fHQ9PT1gYmA/YHlgOmB4YH1mdW5jdGlvbiBibihlKXtyZXR1cm4gX24oeW4oZSkpfWZ1bmN0aW9uIHhuKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7bGV0IHI9Z24oZSksaT1ibihlKSxhPXZuKGkpLG89aT09PWB4YD9yPT09KG4/YGVuZGA6YHN0YXJ0YCk/YHJpZ2h0YDpgbGVmdGA6cj09PWBzdGFydGA/YGJvdHRvbWA6YHRvcGA7cmV0dXJuIHQucmVmZXJlbmNlW2FdPnQuZmxvYXRpbmdbYV0mJihvPUFuKG8pKSxbbyxBbihvKV19ZnVuY3Rpb24gU24oZSl7bGV0IHQ9QW4oZSk7cmV0dXJuW0NuKGUpLHQsQ24odCldfWZ1bmN0aW9uIENuKGUpe3JldHVybiBlLmluY2x1ZGVzKGBzdGFydGApP2UucmVwbGFjZShgc3RhcnRgLGBlbmRgKTplLnJlcGxhY2UoYGVuZGAsYHN0YXJ0YCl9dmFyIHduPVtgbGVmdGAsYHJpZ2h0YF0sVG49W2ByaWdodGAsYGxlZnRgXSxFbj1bYHRvcGAsYGJvdHRvbWBdLERuPVtgYm90dG9tYCxgdG9wYF07ZnVuY3Rpb24gT24oZSx0LG4pe3N3aXRjaChlKXtjYXNlYHRvcGA6Y2FzZWBib3R0b21gOnJldHVybiBuP3Q/VG46d246dD93bjpUbjtjYXNlYGxlZnRgOmNhc2VgcmlnaHRgOnJldHVybiB0P0VuOkRuO2RlZmF1bHQ6cmV0dXJuW119fWZ1bmN0aW9uIGtuKGUsdCxuLHIpe2xldCBpPWduKGUpLGE9T24oaG4oZSksbj09PWBzdGFydGAscik7cmV0dXJuIGkmJihhPWEubWFwKGU9PmUrYC1gK2kpLHQmJihhPWEuY29uY2F0KGEubWFwKENuKSkpKSxhfWZ1bmN0aW9uIEFuKGUpe2xldCB0PWhuKGUpO3JldHVybiBmblt0XStlLnNsaWNlKHQubGVuZ3RoKX1mdW5jdGlvbiBqbihlKXtyZXR1cm57dG9wOmUudG9wPz8wLHJpZ2h0OmUucmlnaHQ/PzAsYm90dG9tOmUuYm90dG9tPz8wLGxlZnQ6ZS5sZWZ0Pz8wfX1mdW5jdGlvbiBNbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBudW1iZXJgP3t0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX06am4oZSl9ZnVuY3Rpb24gTm4oZSl7bGV0e3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6aX09ZTtyZXR1cm57d2lkdGg6cixoZWlnaHQ6aSx0b3A6bixsZWZ0OnQscmlnaHQ6dCtyLGJvdHRvbTpuK2kseDp0LHk6bn19ZnVuY3Rpb24gUG4oZSx0LG4pe2xldHtyZWZlcmVuY2U6cixmbG9hdGluZzppfT1lLGE9eW4odCksbz1ibih0KSxzPXZuKG8pLGM9aG4odCksbD1hPT09YHlgLHU9ci54K3Iud2lkdGgvMi1pLndpZHRoLzIsZD1yLnkrci5oZWlnaHQvMi1pLmhlaWdodC8yLGY9cltzXS8yLWlbc10vMixwO3N3aXRjaChjKXtjYXNlYHRvcGA6cD17eDp1LHk6ci55LWkuaGVpZ2h0fTticmVhaztjYXNlYGJvdHRvbWA6cD17eDp1LHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlYHJpZ2h0YDpwPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZWBsZWZ0YDpwPXt4OnIueC1pLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpwPXt4OnIueCx5OnIueX19bGV0IG09Z24odCk7cmV0dXJuIG0mJihwW29dKz1mKihtPT09YGVuZGA/MTotMSkqKG4mJmw/LTE6MSkpLHB9YXN5bmMgZnVuY3Rpb24gRm4oZSx0KXt0PT09dm9pZCAwJiYodD17fSk7bGV0e3g6bix5OnIscGxhdGZvcm06aSxyZWN0czphLGVsZW1lbnRzOm8sc3RyYXRlZ3k6c309ZSx7Ym91bmRhcnk6Yz1gY2xpcHBpbmdBbmNlc3RvcnNgLHJvb3RCb3VuZGFyeTpsPWB2aWV3cG9ydGAsZWxlbWVudENvbnRleHQ6dT1gZmxvYXRpbmdgLGFsdEJvdW5kYXJ5OmQ9ITEscGFkZGluZzpmPTB9PW1uKHQsZSkscD1NbihmKSxtPW9bZD91PT09YGZsb2F0aW5nYD9gcmVmZXJlbmNlYDpgZmxvYXRpbmdgOnVdLGg9Tm4oYXdhaXQgaS5nZXRDbGlwcGluZ1JlY3Qoe2VsZW1lbnQ6YXdhaXQoaS5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmkuaXNFbGVtZW50KG0pKT8/ITA/bTptLmNvbnRleHRFbGVtZW50fHxhd2FpdChpLmdldERvY3VtZW50RWxlbWVudD09bnVsbD92b2lkIDA6aS5nZXREb2N1bWVudEVsZW1lbnQoby5mbG9hdGluZykpLGJvdW5kYXJ5OmMscm9vdEJvdW5kYXJ5Omwsc3RyYXRlZ3k6c30pKSxnPXU9PT1gZmxvYXRpbmdgP3t4Om4seTpyLHdpZHRoOmEuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmEuZmxvYXRpbmcuaGVpZ2h0fTphLnJlZmVyZW5jZSxfPWF3YWl0KGkuZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChvLmZsb2F0aW5nKSksdj1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQoXykpJiZhd2FpdChpLmdldFNjYWxlPT1udWxsP3ZvaWQgMDppLmdldFNjYWxlKF8pKXx8e3g6MSx5OjF9LHk9Tm4oaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpvLHJlY3Q6ZyxvZmZzZXRQYXJlbnQ6XyxzdHJhdGVneTpzfSk6Zyk7cmV0dXJue3RvcDooaC50b3AteS50b3ArcC50b3ApL3YueSxib3R0b206KHkuYm90dG9tLWguYm90dG9tK3AuYm90dG9tKS92LnksbGVmdDooaC5sZWZ0LXkubGVmdCtwLmxlZnQpL3YueCxyaWdodDooeS5yaWdodC1oLnJpZ2h0K3AucmlnaHQpL3YueH19dmFyIEluPTUwLExuPWFzeW5jKGUsdCxuKT0+e2xldHtwbGFjZW1lbnQ6cj1gYm90dG9tYCxzdHJhdGVneTppPWBhYnNvbHV0ZWAsbWlkZGxld2FyZTphPVtdLHBsYXRmb3JtOm99PW4scz1vLmRldGVjdE92ZXJmbG93P286ey4uLm8sZGV0ZWN0T3ZlcmZsb3c6Rm59LGM9YXdhaXQoby5pc1JUTD09bnVsbD92b2lkIDA6by5pc1JUTCh0KSksbD1hd2FpdCBvLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dCxzdHJhdGVneTppfSkse3g6dSx5OmR9PVBuKGwscixjKSxmPXIscD0wLG09e307Zm9yKGxldCBuPTA7bjxhLmxlbmd0aDtuKyspe2xldCBoPWFbbl07aWYoIWgpY29udGludWU7bGV0e25hbWU6ZyxmbjpffT1oLHt4OnYseSxkYXRhOmIscmVzZXQ6eH09YXdhaXQgXyh7eDp1LHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTptLHJlY3RzOmwscGxhdGZvcm06cyxlbGVtZW50czp7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dH19KTt1PXY/P3UsZD15Pz9kLG1bZ109ey4uLm1bZ10sLi4uYn0seCYmcDxJbiYmKHArKyx0eXBlb2YgeD09YG9iamVjdGAmJih4LnBsYWNlbWVudCYmKGY9eC5wbGFjZW1lbnQpLHgucmVjdHMmJihsPXgucmVjdHM9PT0hMD9hd2FpdCBvLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dCxzdHJhdGVneTppfSk6eC5yZWN0cykse3g6dSx5OmR9PVBuKGwsZixjKSksbj0tMSl9cmV0dXJue3g6dSx5OmQscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTptfX0sUm49ZT0+KHtuYW1lOmBhcnJvd2Asb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOmEscGxhdGZvcm06byxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmN9PXQse2VsZW1lbnQ6bCxwYWRkaW5nOnU9MH09bW4oZSx0KXx8e307aWYobD09bnVsbClyZXR1cm57fTtsZXQgZD1Nbih1KSxmPXt4Om4seTpyfSxwPWJuKGkpLG09dm4ocCksaD1hd2FpdCBvLmdldERpbWVuc2lvbnMobCksZz1wPT09YHlgLF89Zz9gdG9wYDpgbGVmdGAsdj1nP2Bib3R0b21gOmByaWdodGAseT1nP2BjbGllbnRIZWlnaHRgOmBjbGllbnRXaWR0aGAsYj1hLnJlZmVyZW5jZVttXSthLnJlZmVyZW5jZVtwXS1mW3BdLWEuZmxvYXRpbmdbbV0seD1mW3BdLWEucmVmZXJlbmNlW3BdLFM9YXdhaXQoby5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOm8uZ2V0T2Zmc2V0UGFyZW50KGwpKSxDPVM/U1t5XTowOyghQ3x8IWF3YWl0KG8uaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpvLmlzRWxlbWVudChTKSkpJiYoQz1zLmZsb2F0aW5nW3ldfHxhLmZsb2F0aW5nW21dKTtsZXQgdz1iLzIteC8yLFQ9Qy8yLWhbbV0vMi0xLEU9c24oZFtfXSxUKSxEPXNuKGRbdl0sVCksTz1DLWhbbV0tRCxrPUMvMi1oW21dLzIrdyxBPXBuKEUsayxPKSxlZT0hYy5hcnJvdyYmZ24oaSkhPW51bGwmJmshPT1BJiZhLnJlZmVyZW5jZVttXS8yLShrPEU/RTpEKS1oW21dLzI8MCx0ZT1lZT9rPEU/ay1FOmstTzowO3JldHVybntbcF06ZltwXSt0ZSxkYXRhOntbcF06QSxjZW50ZXJPZmZzZXQ6ay1BLXRlLC4uLmVlJiZ7YWxpZ25tZW50T2Zmc2V0OnRlfX0scmVzZXQ6ZWV9fX0pLHpuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YGZsaXBgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbjtsZXR7cGxhY2VtZW50OnIsbWlkZGxld2FyZURhdGE6aSxyZWN0czphLGluaXRpYWxQbGFjZW1lbnQ6byxwbGF0Zm9ybTpzLGVsZW1lbnRzOmN9PXQse21haW5BeGlzOmw9ITAsY3Jvc3NBeGlzOnU9ITAsZmFsbGJhY2tQbGFjZW1lbnRzOmQsZmFsbGJhY2tTdHJhdGVneTpmPWBiZXN0Rml0YCxmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uOnA9YG5vbmVgLGZsaXBBbGlnbm1lbnQ6bT0hMCwuLi5ofT1tbihlLHQpO2lmKChuPWkuYXJyb3cpIT1udWxsJiZuLmFsaWdubWVudE9mZnNldClyZXR1cm57fTtsZXQgZz1obihyKSxfPXluKG8pLHY9aG4obyk9PT1vLHk9YXdhaXQocy5pc1JUTD09bnVsbD92b2lkIDA6cy5pc1JUTChjLmZsb2F0aW5nKSksYj1kfHwodnx8IW0/W0FuKG8pXTpTbihvKSkseD1wIT09YG5vbmVgOyFkJiZ4JiZiLnB1c2goLi4ua24obyxtLHAseSkpO2xldCBTPVtvLC4uLmJdLEM9YXdhaXQgcy5kZXRlY3RPdmVyZmxvdyh0LGgpLHc9W10sVD1pLmZsaXA/Lm92ZXJmbG93c3x8W107aWYobCYmdy5wdXNoKENbZ10pLHUpe2xldCBlPXhuKHIsYSx5KTt3LnB1c2goQ1tlWzBdXSxDW2VbMV1dKX1pZihUPVsuLi5ULHtwbGFjZW1lbnQ6cixvdmVyZmxvd3M6d31dLCF3LmV2ZXJ5KGU9PmU8PTApKXtsZXQgZT0oaS5mbGlwPy5pbmRleHx8MCkrMSx0PVNbZV07aWYodCYmKHUhPT1gYWxpZ25tZW50YHx8Xz09PXluKHQpfHxULmV2ZXJ5KGU9PnluKGUucGxhY2VtZW50KSE9PV98fGUub3ZlcmZsb3dzWzBdPjApKSlyZXR1cm57ZGF0YTp7aW5kZXg6ZSxvdmVyZmxvd3M6VH0scmVzZXQ6e3BsYWNlbWVudDp0fX07bGV0IG49VC5maWx0ZXIoZT0+ZS5vdmVyZmxvd3NbMF08PTApLnNvcnQoKGUsdCk9PmUub3ZlcmZsb3dzWzFdLXQub3ZlcmZsb3dzWzFdKVswXT8ucGxhY2VtZW50O2lmKCFuKXN3aXRjaChmKXtjYXNlYGJlc3RGaXRgOntsZXQgZT1ULmZpbHRlcihlPT57aWYoeCl7bGV0IHQ9eW4oZS5wbGFjZW1lbnQpO3JldHVybiB0PT09X3x8dD09PWB5YH1yZXR1cm4hMH0pLm1hcChlPT5bZS5wbGFjZW1lbnQsZS5vdmVyZmxvd3MuZmlsdGVyKGU9PmU+MCkucmVkdWNlKChlLHQpPT5lK3QsMCldKS5zb3J0KChlLHQpPT5lWzFdLXRbMV0pWzBdPy5bMF07ZSYmKG49ZSk7YnJlYWt9Y2FzZWBpbml0aWFsUGxhY2VtZW50YDpuPW99aWYociE9PW4pcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6bn19fXJldHVybnt9fX19O2Z1bmN0aW9uIEJuKGUsdCl7cmV0dXJue3RvcDplLnRvcC10LmhlaWdodCxyaWdodDplLnJpZ2h0LXQud2lkdGgsYm90dG9tOmUuYm90dG9tLXQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LXQud2lkdGh9fWZ1bmN0aW9uIFZuKGUpe3JldHVybiBvbi5zb21lKHQ9PmVbdF0+PTApfXZhciBIbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBoaWRlYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3JlY3RzOm4scGxhdGZvcm06cn09dCx7c3RyYXRlZ3k6aT1gcmVmZXJlbmNlSGlkZGVuYCwuLi5hfT1tbihlLHQpO3N3aXRjaChpKXtjYXNlYHJlZmVyZW5jZUhpZGRlbmA6e2xldCBlPUJuKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxlbGVtZW50Q29udGV4dDpgcmVmZXJlbmNlYH0pLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czplLHJlZmVyZW5jZUhpZGRlbjpWbihlKX19fWNhc2VgZXNjYXBlZGA6e2xldCBlPUJuKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxhbHRCb3VuZGFyeTohMH0pLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czplLGVzY2FwZWQ6Vm4oZSl9fX1kZWZhdWx0OnJldHVybnt9fX19fSxVbj1uZXcgU2V0KFtgbGVmdGAsYHRvcGBdKTthc3luYyBmdW5jdGlvbiBXbihlLHQpe2xldHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PWUsYT1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKSxvPWhuKG4pLHM9Z24obiksYz15bihuKT09PWB5YCxsPVVuLmhhcyhvKT8tMToxLHU9YSYmYz8tMToxLGQ9bW4odCxlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOm19PXR5cGVvZiBkPT1gbnVtYmVyYD97bWFpbkF4aXM6ZCxjcm9zc0F4aXM6MCxhbGlnbm1lbnRBeGlzOm51bGx9OnttYWluQXhpczpkLm1haW5BeGlzfHwwLGNyb3NzQXhpczpkLmNyb3NzQXhpc3x8MCxhbGlnbm1lbnRBeGlzOmQuYWxpZ25tZW50QXhpc307cmV0dXJuIHMmJnR5cGVvZiBtPT1gbnVtYmVyYCYmKHA9cz09PWBlbmRgP20qLTE6bSksYz97eDpwKnUseTpmKmx9Ont4OmYqbCx5OnAqdX19dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSx7bmFtZTpgb2Zmc2V0YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG47bGV0e3g6cix5OmkscGxhY2VtZW50OmEsbWlkZGxld2FyZURhdGE6b309dCxzPWF3YWl0IFduKHQsZSk7cmV0dXJuIGE9PT1vLm9mZnNldD8ucGxhY2VtZW50JiYobj1vLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQ/e306e3g6citzLngseTppK3MueSxkYXRhOnsuLi5zLHBsYWNlbWVudDphfX19fX0sS249ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2hpZnRgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxwbGF0Zm9ybTphfT10LHttYWluQXhpczpvPSEwLGNyb3NzQXhpczpzPSExLGxpbWl0ZXI6Yz17Zm46ZT0+e2xldHt4OnQseTpufT1lO3JldHVybnt4OnQseTpufX19LC4uLmx9PW1uKGUsdCksdT17eDpuLHk6cn0sZD1hd2FpdCBhLmRldGVjdE92ZXJmbG93KHQsbCksZj15bihpKSxwPV9uKGYpLG09dVtwXSxoPXVbZl0sZz0oZSx0KT0+cG4odCtkW2U9PT1geWA/YHRvcGA6YGxlZnRgXSx0LHQtZFtlPT09YHlgP2Bib3R0b21gOmByaWdodGBdKTtvJiYobT1nKHAsbSkpLHMmJihoPWcoZixoKSk7bGV0IF89Yy5mbih7Li4udCxbcF06bSxbZl06aH0pO3JldHVybnsuLi5fLGRhdGE6e3g6Xy54LW4seTpfLnktcixlbmFibGVkOntbcF06byxbZl06c319fX19fSxxbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtvcHRpb25zOmUsZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxtaWRkbGV3YXJlRGF0YTpvfT10LHtvZmZzZXQ6cz0wLG1haW5BeGlzOmM9ITAsY3Jvc3NBeGlzOmw9ITB9PW1uKGUsdCksdT17eDpuLHk6cn0sZD15bihpKSxmPV9uKGQpLHA9dVtmXSxtPXVbZF0saD1tbihzLHQpLGc9dHlwZW9mIGg9PWBudW1iZXJgP3ttYWluQXhpczpoLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6aC5tYWluQXhpcz8/MCxjcm9zc0F4aXM6aC5jcm9zc0F4aXM/PzB9O2lmKGMpe2xldCBlPWY9PT1geWA/YGhlaWdodGA6YHdpZHRoYCx0PWEucmVmZXJlbmNlW2ZdLWEuZmxvYXRpbmdbZV0rZy5tYWluQXhpcyxuPWEucmVmZXJlbmNlW2ZdK2EucmVmZXJlbmNlW2VdLWcubWFpbkF4aXM7cDx0P3A9dDpwPm4mJihwPW4pfWlmKGwpe2xldCBlPWY9PT1geWA/YHdpZHRoYDpgaGVpZ2h0YCx0PVVuLmhhcyhobihpKSksbj1hLnJlZmVyZW5jZVtkXS1hLmZsb2F0aW5nW2VdKyh0JiZvLm9mZnNldD8uW2RdfHwwKSsodD8wOmcuY3Jvc3NBeGlzKSxyPWEucmVmZXJlbmNlW2RdK2EucmVmZXJlbmNlW2VdKyh0PzA6by5vZmZzZXQ/LltkXXx8MCktKHQ/Zy5jcm9zc0F4aXM6MCk7bTxuP209bjptPnImJihtPXIpfXJldHVybntbZl06cCxbZF06bX19fX0sSm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2l6ZWAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOmksZWxlbWVudHM6YX09dCx7YXBwbHk6bz0oKT0+e30sLi4uc309bW4oZSx0KSxjPWF3YWl0IGkuZGV0ZWN0T3ZlcmZsb3codCxzKSxsPWhuKG4pLHU9Z24obiksZD15bihuKT09PWB5YCx7d2lkdGg6ZixoZWlnaHQ6cH09ci5mbG9hdGluZyxtLGg7bD09PWB0b3BgfHxsPT09YGJvdHRvbWA/KG09bCxoPXU9PT0oYXdhaXQoaS5pc1JUTD09bnVsbD92b2lkIDA6aS5pc1JUTChhLmZsb2F0aW5nKSk/YHN0YXJ0YDpgZW5kYCk/YGxlZnRgOmByaWdodGApOihoPWwsbT11PT09YGVuZGA/YHRvcGA6YGJvdHRvbWApO2xldCBnPXAtYy50b3AtYy5ib3R0b20sXz1mLWMubGVmdC1jLnJpZ2h0LHY9c24ocC1jW21dLGcpLHk9c24oZi1jW2hdLF8pLGI9dC5taWRkbGV3YXJlRGF0YS5zaGlmdCx4PSFiLFM9dixDPXk7YiE9bnVsbCYmYi5lbmFibGVkLngmJihDPV8pLGIhPW51bGwmJmIuZW5hYmxlZC55JiYoUz1nKSx4JiYhdSYmKGQ/Qz1mLTIqY24oYy5sZWZ0LGMucmlnaHQpOlM9cC0yKmNuKGMudG9wLGMuYm90dG9tKSksYXdhaXQgbyh7Li4udCxhdmFpbGFibGVXaWR0aDpDLGF2YWlsYWJsZUhlaWdodDpTfSk7bGV0IHc9YXdhaXQgaS5nZXREaW1lbnNpb25zKGEuZmxvYXRpbmcpO3JldHVybiBmIT09dy53aWR0aHx8cCE9PXcuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiBZbigpe3JldHVybiB0eXBlb2Ygd2luZG93PGB1YH1mdW5jdGlvbiBYbihlKXtyZXR1cm4gJG4oZSk/KGUubm9kZU5hbWV8fGBgKS50b0xvd2VyQ2FzZSgpOmAjZG9jdW1lbnRgfWZ1bmN0aW9uIFpuKGUpe3ZhciB0O3JldHVybihlPT1udWxsfHwodD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIFFuKGUpe3JldHVybigoJG4oZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPy5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIFluKCk/ZSBpbnN0YW5jZW9mIE5vZGV8fGUgaW5zdGFuY2VvZiBabihlKS5Ob2RlOiExfWZ1bmN0aW9uIGVyKGUpe3JldHVybiBZbigpP2UgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2YgWm4oZSkuRWxlbWVudDohMX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gWW4oKT9lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBabihlKS5IVE1MRWxlbWVudDohMX1mdW5jdGlvbiBucihlKXtyZXR1cm4hWW4oKXx8dHlwZW9mIFNoYWRvd1Jvb3Q+YHVgPyExOmUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgWm4oZSkuU2hhZG93Um9vdH1mdW5jdGlvbiBycihlKXtsZXR7b3ZlcmZsb3c6dCxvdmVyZmxvd1g6bixvdmVyZmxvd1k6cixkaXNwbGF5Oml9PW1yKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KHQrcituKSYmaSE9PWBpbmxpbmVgJiZpIT09YGNvbnRlbnRzYH1mdW5jdGlvbiBpcihlKXtyZXR1cm4vXih0YWJsZXx0ZHx0aCkkLy50ZXN0KFhuKGUpKX1mdW5jdGlvbiBhcihlKXt0cnl7aWYoZS5tYXRjaGVzKGA6cG9wb3Zlci1vcGVuYCkpcmV0dXJuITB9Y2F0Y2h7fXRyeXtyZXR1cm4gZS5tYXRjaGVzKGA6bW9kYWxgKX1jYXRjaHtyZXR1cm4hMX19dmFyIG9yPS90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvLHNyPS9wYWludHxsYXlvdXR8c3RyaWN0fGNvbnRlbnQvLGNyPWU9PiEhZSYmZSE9PWBub25lYCxscjtmdW5jdGlvbiB1cihlKXtsZXQgdD1lcihlKT9tcihlKTplO3JldHVybiBjcih0LnRyYW5zZm9ybSl8fGNyKHQudHJhbnNsYXRlKXx8Y3IodC5zY2FsZSl8fGNyKHQucm90YXRlKXx8Y3IodC5wZXJzcGVjdGl2ZSl8fCFmcigpJiYoY3IodC5iYWNrZHJvcEZpbHRlcil8fGNyKHQuZmlsdGVyKSl8fG9yLnRlc3QodC53aWxsQ2hhbmdlfHxgYCl8fHNyLnRlc3QodC5jb250YWlufHxgYCl9ZnVuY3Rpb24gZHIoZSl7bGV0IHQ9Z3IoZSk7Zm9yKDt0cih0KSYmIXByKHQpOyl7aWYodXIodCkpcmV0dXJuIHQ7aWYoYXIodCkpcmV0dXJuIG51bGw7dD1ncih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmcigpe3JldHVybiBscj8/PXR5cGVvZiBDU1M8YHVgJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cyhgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJgLGBub25lYCksbHJ9ZnVuY3Rpb24gcHIoZSl7cmV0dXJuL14oaHRtbHxib2R5fCNkb2N1bWVudCkkLy50ZXN0KFhuKGUpKX1mdW5jdGlvbiBtcihlKXtyZXR1cm4gWm4oZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBocihlKXtyZXR1cm4gZXIoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIGdyKGUpe2lmKFhuKGUpPT09YGh0bWxgKXJldHVybiBlO2xldCB0PWUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGV8fG5yKGUpJiZlLmhvc3R8fFFuKGUpO3JldHVybiBucih0KT90Lmhvc3Q6dH1mdW5jdGlvbiBfcihlKXtsZXQgdD1ncihlKTtyZXR1cm4gcHIodCk/KGUub3duZXJEb2N1bWVudHx8ZSkuYm9keTp0cih0KSYmcnIodCk/dDpfcih0KX1mdW5jdGlvbiB2cihlLHQsbil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPSEwKTtsZXQgcj1fcihlKSxpPXI9PT1lLm93bmVyRG9jdW1lbnQ/LmJvZHksYT1abihyKTtpZihpKXtsZXQgZT15cihhKTtyZXR1cm4gdC5jb25jYXQoYSxhLnZpc3VhbFZpZXdwb3J0fHxbXSxycihyKT9yOltdLGUmJm4/dnIoZSk6W10pfXJldHVybiB0LmNvbmNhdChyLHZyKHIsW10sbikpfWZ1bmN0aW9uIHlyKGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWZ1bmN0aW9uIGJyKGUpe2xldCB0PW1yKGUpLG49cGFyc2VGbG9hdCh0LndpZHRoKXx8MCxyPXBhcnNlRmxvYXQodC5oZWlnaHQpfHwwLGk9dHIoZSksYT1pP2Uub2Zmc2V0V2lkdGg6bixvPWk/ZS5vZmZzZXRIZWlnaHQ6cixzPWxuKG4pIT09YXx8bG4ocikhPT1vO3JldHVybiBzJiYobj1hLHI9bykse3dpZHRoOm4saGVpZ2h0OnIsJDpzfX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZXIoZSk/ZTplLmNvbnRleHRFbGVtZW50fWZ1bmN0aW9uIFNyKGUpe2xldCB0PXhyKGUpO2lmKCF0cih0KSlyZXR1cm4gZG4oMSk7bGV0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6aSwkOmF9PWJyKHQpLG89KGE/bG4obi53aWR0aCk6bi53aWR0aCkvcixzPShhP2xuKG4uaGVpZ2h0KTpuLmhlaWdodCkvaTtyZXR1cm4oIW98fCFOdW1iZXIuaXNGaW5pdGUobykpJiYobz0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpvLHk6c319dmFyIENyPWRuKDApO2Z1bmN0aW9uIHdyKGUpe2xldCB0PVpuKGUpO3JldHVybiFmcigpfHwhdC52aXN1YWxWaWV3cG9ydD9Dcjp7eDp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQseTp0LnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcH19ZnVuY3Rpb24gVHIoZSx0LG4pe3JldHVybiB0PT09dm9pZCAwJiYodD0hMSksISFuJiZ0JiZuPT09Wm4oZSl9ZnVuY3Rpb24gRXIoZSx0LG4scil7dD09PXZvaWQgMCYmKHQ9ITEpLG49PT12b2lkIDAmJihuPSExKTtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9eHIoZSksbz1kbigxKTt0JiYocj9lcihyKSYmKG89U3IocikpOm89U3IoZSkpO2xldCBzPVRyKGEsbixyKT93cihhKTpkbigwKSxjPShpLmxlZnQrcy54KS9vLngsbD0oaS50b3Arcy55KS9vLnksdT1pLndpZHRoL28ueCxkPWkuaGVpZ2h0L28ueTtpZihhJiZyKXtsZXQgZT1abihhKSx0PWVyKHIpP1puKHIpOnIsbj1lLGk9eXIobik7Zm9yKDtpJiZ0IT09bjspe2xldCBlPVNyKGkpLHQ9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPW1yKGkpLGE9dC5sZWZ0KyhpLmNsaWVudExlZnQrcGFyc2VGbG9hdChyLnBhZGRpbmdMZWZ0KSkqZS54LG89dC50b3ArKGkuY2xpZW50VG9wK3BhcnNlRmxvYXQoci5wYWRkaW5nVG9wKSkqZS55O2MqPWUueCxsKj1lLnksdSo9ZS54LGQqPWUueSxjKz1hLGwrPW8sbj1abihpKSxpPXlyKG4pfX1yZXR1cm4gTm4oe3dpZHRoOnUsaGVpZ2h0OmQseDpjLHk6bH0pfWZ1bmN0aW9uIERyKGUsdCl7bGV0IG49aHIoZSkuc2Nyb2xsTGVmdDtyZXR1cm4gdD90LmxlZnQrbjpFcihRbihlKSkubGVmdCtufWZ1bmN0aW9uIE9yKGUsdCl7bGV0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDpuLmxlZnQrdC5zY3JvbGxMZWZ0LURyKGUsbikseTpuLnRvcCt0LnNjcm9sbFRvcH19ZnVuY3Rpb24ga3IoZSl7bGV0e2VsZW1lbnRzOnQscmVjdDpuLG9mZnNldFBhcmVudDpyLHN0cmF0ZWd5Oml9PWUsYT1pPT09YGZpeGVkYCxvPVFuKHIpLHM9dD9hcih0LmZsb2F0aW5nKTohMTtpZihyPT09b3x8cyYmYSlyZXR1cm4gbjtsZXQgYz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxsPWRuKDEpLHU9ZG4oMCksZD10cihyKTtpZigoZHx8IWEpJiYoKFhuKHIpIT09YGJvZHlgfHxycihvKSkmJihjPWhyKHIpKSxkKSl7bGV0IGU9RXIocik7bD1TcihyKSx1Lng9ZS54K3IuY2xpZW50TGVmdCx1Lnk9ZS55K3IuY2xpZW50VG9wfWxldCBmPW8mJiFkJiYhYT9PcihvLGMpOmRuKDApO3JldHVybnt3aWR0aDpuLndpZHRoKmwueCxoZWlnaHQ6bi5oZWlnaHQqbC55LHg6bi54KmwueC1jLnNjcm9sbExlZnQqbC54K3UueCtmLngseTpuLnkqbC55LWMuc2Nyb2xsVG9wKmwueSt1LnkrZi55fX1mdW5jdGlvbiBBcihlKXtyZXR1cm4gZS5nZXRDbGllbnRSZWN0cz9BcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSk6W119ZnVuY3Rpb24ganIoZSl7bGV0IHQ9aHIoZSksbj1lLm93bmVyRG9jdW1lbnQuYm9keSxyPWNuKGUuc2Nyb2xsV2lkdGgsZS5jbGllbnRXaWR0aCxuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgpLGk9Y24oZS5zY3JvbGxIZWlnaHQsZS5jbGllbnRIZWlnaHQsbi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQpLGE9LXQuc2Nyb2xsTGVmdCtEcihlKSxvPS10LnNjcm9sbFRvcDtyZXR1cm4gbXIobikuZGlyZWN0aW9uPT09YHJ0bGAmJihhKz1jbihlLmNsaWVudFdpZHRoLG4uY2xpZW50V2lkdGgpLXIpLHt3aWR0aDpyLGhlaWdodDppLHg6YSx5Om99fXZhciBNcj0yNTtmdW5jdGlvbiBOcihlLHQsbil7bj09PXZvaWQgMCYmKG49YHZpZXdwb3J0YCk7bGV0IHI9bj09PWBsYXlvdXRWaWV3cG9ydGAsaT1abihlKSxhPVFuKGUpLG89aS52aXN1YWxWaWV3cG9ydCxzPWEuY2xpZW50V2lkdGgsYz1hLmNsaWVudEhlaWdodCxsPTAsdT0wO2lmKG8pe2xldCBlPSFmcigpfHx0PT09YGZpeGVkYDtyP2V8fChsPS1vLm9mZnNldExlZnQsdT0tby5vZmZzZXRUb3ApOihzPW8ud2lkdGgsYz1vLmhlaWdodCxlJiYobD1vLm9mZnNldExlZnQsdT1vLm9mZnNldFRvcCkpfWlmKERyKGEpPD0wKXtsZXQgZT1hLm93bmVyRG9jdW1lbnQsdD1lLmJvZHksbj1nZXRDb21wdXRlZFN0eWxlKHQpLHI9ZS5jb21wYXRNb2RlPT09YENTUzFDb21wYXRgJiZwYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KXx8MCxpPU1hdGguYWJzKGEuY2xpZW50V2lkdGgtdC5jbGllbnRXaWR0aC1yKSxvPWdldENvbXB1dGVkU3R5bGUoYSkuc2Nyb2xsYmFyR3V0dGVyPT09YHN0YWJsZSBib3RoLWVkZ2VzYD9pLzI6aTtvPD1NciYmKHMtPW8pfXJldHVybnt3aWR0aDpzLGhlaWdodDpjLHg6bCx5OnV9fWZ1bmN0aW9uIFByKGUsdCl7bGV0IG49RXIoZSwhMCx0PT09YGZpeGVkYCkscj1uLnRvcCtlLmNsaWVudFRvcCxpPW4ubGVmdCtlLmNsaWVudExlZnQsYT1TcihlKTtyZXR1cm57d2lkdGg6ZS5jbGllbnRXaWR0aCphLngsaGVpZ2h0OmUuY2xpZW50SGVpZ2h0KmEueSx4OmkqYS54LHk6ciphLnl9fWZ1bmN0aW9uIEZyKGUsdCxuKXtsZXQgcjtpZih0PT09YHZpZXdwb3J0YHx8dD09PWBsYXlvdXRWaWV3cG9ydGApcj1OcihlLG4sdCk7ZWxzZSBpZih0PT09YGRvY3VtZW50YClyPWpyKFFuKGUpKTtlbHNlIGlmKGVyKHQpKXI9UHIodCxuKTtlbHNle2xldCBuPXdyKGUpO3I9e3g6dC54LW4ueCx5OnQueS1uLnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fXJldHVybiBObihyKX1mdW5jdGlvbiBJcihlLHQpe2xldCBuPXQuZ2V0KGUpO2lmKG4pcmV0dXJuIG47bGV0IHI9dnIoZSxbXSwhMSkuZmlsdGVyKGU9PmVyKGUpJiZYbihlKSE9PWBib2R5YCksaT1udWxsLGE9bXIoZSkucG9zaXRpb249PT1gZml4ZWRgLG89YT9ncihlKTplO2Zvcig7ZXIobykmJiFwcihvKTspe2xldCBlPW1yKG8pLHQ9dXIobyksbj1pP2kucG9zaXRpb246YT9gZml4ZWRgOmBgOyF0JiYobj09PWBmaXhlZGB8fG49PT1gYWJzb2x1dGVgJiZlLnBvc2l0aW9uPT09YHN0YXRpY2ApP3I9ci5maWx0ZXIoZT0+ZSE9PW8pOmk9ZSxvPWdyKG8pfXJldHVybiB0LnNldChlLHIpLHJ9ZnVuY3Rpb24gTHIoZSl7bGV0e2VsZW1lbnQ6dCxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Oml9PWUsYT1bLi4ubj09PWBjbGlwcGluZ0FuY2VzdG9yc2A/YXIodCk/W106SXIodCx0aGlzLl9jKTpbXS5jb25jYXQobikscl0sbz1Gcih0LGFbMF0saSkscz1vLnRvcCxjPW8ucmlnaHQsbD1vLmJvdHRvbSx1PW8ubGVmdDtmb3IobGV0IGU9MTtlPGEubGVuZ3RoO2UrKyl7bGV0IG49RnIodCxhW2VdLGkpO3M9Y24obi50b3AscyksYz1zbihuLnJpZ2h0LGMpLGw9c24obi5ib3R0b20sbCksdT1jbihuLmxlZnQsdSl9cmV0dXJue3dpZHRoOmMtdSxoZWlnaHQ6bC1zLHg6dSx5OnN9fWZ1bmN0aW9uIFJyKGUpe2xldHt3aWR0aDp0LGhlaWdodDpufT1icihlKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6bn19ZnVuY3Rpb24genIoZSx0LG4pe2xldCByPXRyKHQpLGk9UW4odCksYT1uPT09YGZpeGVkYCxvPUVyKGUsITAsYSx0KSxzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGM9ZG4oMCk7aWYoKHJ8fCFhKSYmKChYbih0KSE9PWBib2R5YHx8cnIoaSkpJiYocz1ocih0KSkscikpe2xldCBlPUVyKHQsITAsYSx0KTtjLng9ZS54K3QuY2xpZW50TGVmdCxjLnk9ZS55K3QuY2xpZW50VG9wfSFyJiZpJiYoYy54PURyKGkpKTtsZXQgbD1pJiYhciYmIWE/T3IoaSxzKTpkbigwKTtyZXR1cm57eDpvLmxlZnQrcy5zY3JvbGxMZWZ0LWMueC1sLngseTpvLnRvcCtzLnNjcm9sbFRvcC1jLnktbC55LHdpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0fX1mdW5jdGlvbiBCcihlKXtyZXR1cm4gbXIoZSkucG9zaXRpb249PT1gc3RhdGljYH1mdW5jdGlvbiBWcihlLHQpe2lmKCF0cihlKXx8bXIoZSkucG9zaXRpb249PT1gZml4ZWRgKXJldHVybiBudWxsO2lmKHQpcmV0dXJuIHQoZSk7bGV0IG49ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIFFuKGUpPT09biYmKG49bi5vd25lckRvY3VtZW50LmJvZHkpLG59ZnVuY3Rpb24gSHIoZSx0KXtsZXQgbj1abihlKTtpZihhcihlKSlyZXR1cm4gbjtpZighdHIoZSkpe2xldCB0PWdyKGUpO2Zvcig7dCYmIXByKHQpOyl7aWYoZXIodCkmJiFCcih0KSlyZXR1cm4gdDt0PWdyKHQpfXJldHVybiBufWxldCByPVZyKGUsdCk7Zm9yKDtyJiZpcihyKSYmQnIocik7KXI9VnIocix0KTtyZXR1cm4gciYmcHIocikmJkJyKHIpJiYhdXIocik/bjpyfHxkcihlKXx8bn12YXIgVXI9YXN5bmMgZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5nZXRPZmZzZXRQYXJlbnR8fEhyLG49dGhpcy5nZXREaW1lbnNpb25zLHI9YXdhaXQgbihlLmZsb2F0aW5nKTtyZXR1cm57cmVmZXJlbmNlOnpyKGUucmVmZXJlbmNlLGF3YWl0IHQoZS5mbG9hdGluZyksZS5zdHJhdGVneSksZmxvYXRpbmc6e3g6MCx5OjAsd2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9fX07ZnVuY3Rpb24gV3IoZSl7cmV0dXJuIG1yKGUpLmRpcmVjdGlvbj09PWBydGxgfXZhciBHcj17Y29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q6a3IsZ2V0RG9jdW1lbnRFbGVtZW50OlFuLGdldENsaXBwaW5nUmVjdDpMcixnZXRPZmZzZXRQYXJlbnQ6SHIsZ2V0RWxlbWVudFJlY3RzOlVyLGdldENsaWVudFJlY3RzOkFyLGdldERpbWVuc2lvbnM6UnIsZ2V0U2NhbGU6U3IsaXNFbGVtZW50OmVyLGlzUlRMOldyfTtmdW5jdGlvbiBLcihlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueSYmZS53aWR0aD09PXQud2lkdGgmJmUuaGVpZ2h0PT09dC5oZWlnaHR9ZnVuY3Rpb24gcXIoZSx0LG4pe2xldCByPW51bGwsaSxhPVFuKGUpO2Z1bmN0aW9uIG8oKXt2YXIgZTtjbGVhclRpbWVvdXQoaSksKGU9cik9PW51bGx8fGUuZGlzY29ubmVjdCgpLHI9bnVsbH1mdW5jdGlvbiBzKG4sYyl7bj09PXZvaWQgMCYmKG49ITEpLGM9PT12b2lkIDAmJihjPTEpLG8oKTtsZXQgbD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtsZWZ0OnUsdG9wOmQsd2lkdGg6ZixoZWlnaHQ6cH09bDtpZihufHx0KCksIWZ8fCFwKXJldHVybjtsZXQgbT11bihkKSxoPXVuKGEuY2xpZW50V2lkdGgtKHUrZikpLGc9dW4oYS5jbGllbnRIZWlnaHQtKGQrcCkpLF89dW4odSksdj17cm9vdE1hcmdpbjotbStgcHggYCstaCtgcHggYCstZytgcHggYCstXytgcHhgLHRocmVzaG9sZDpjbigwLHNuKDEsYykpfHwxfSx5PSEwO2Z1bmN0aW9uIGIodCl7bGV0IG49dFswXS5pbnRlcnNlY3Rpb25SYXRpbztpZighS3IobCxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSlyZXR1cm4gcygpO2lmKG4hPT1jKXtpZigheSlyZXR1cm4gcygpO24/cyghMSxuKTppPXNldFRpbWVvdXQoKCk9PntzKCExLDFlLTcpfSwxZTMpfXk9ITF9dHJ5e3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsey4uLnYscm9vdDphLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihiLHYpfXIub2JzZXJ2ZShlKX1sZXQgYz1abihlKSxsPSgpPT5zKG4pO3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCkscyghMCksKCk9PntjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCksbygpfX1mdW5jdGlvbiBKcihlLHQsbixyKXtyPT09dm9pZCAwJiYocj17fSk7bGV0e2FuY2VzdG9yU2Nyb2xsOmk9ITAsYW5jZXN0b3JSZXNpemU6YT0hMCxlbGVtZW50UmVzaXplOm89dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT1gZnVuY3Rpb25gLGxheW91dFNoaWZ0OnM9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT1gZnVuY3Rpb25gLGFuaW1hdGlvbkZyYW1lOmM9ITF9PXIsbD14cihlKSx1PWl8fGE/Wy4uLmw/dnIobCk6W10sLi4udD92cih0KTpbXV06W107dS5mb3JFYWNoKGU9PntpJiZlLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSk7bGV0IGQ9bCYmcz9xcihsLG4sYSk6bnVsbCxmPS0xLHA9bnVsbDtvJiYocD1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2xldFtyXT1lO3ImJnIudGFyZ2V0PT09bCYmcCYmdCYmKHAudW5vYnNlcnZlKHQpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpLGY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGU7KGU9cCk9PW51bGx8fGUub2JzZXJ2ZSh0KX0pKSxuKCl9KSxsJiYhYyYmcC5vYnNlcnZlKGwpLHQmJnAub2JzZXJ2ZSh0KSk7bGV0IG0saD1jP0VyKGUpOm51bGw7YyYmZygpO2Z1bmN0aW9uIGcoKXtsZXQgdD1FcihlKTtoJiYhS3IoaCx0KSYmbigpLGg9dCxtPXJlcXVlc3RBbmltYXRpb25GcmFtZShnKX1yZXR1cm4gbigpLCgpPT57dmFyIGU7dS5mb3JFYWNoKGU9PntpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSksZD8uKCksKGU9cCk9PW51bGx8fGUuZGlzY29ubmVjdCgpLHA9bnVsbCxjJiZjYW5jZWxBbmltYXRpb25GcmFtZShtKX19dmFyIFlyPUduLFhyPUtuLFpyPXpuLFFyPUpuLCRyPUhuLGVpPVJuLHRpPXFuLG5pPShlLHQsbik9PntsZXQgcj1uZXcgTWFwLGk9bj8/e30sYT17Li4uR3IsLi4uaS5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gTG4oZSx0LHsuLi5pLHBsYXRmb3JtOmF9KX07ZnVuY3Rpb24gcmkoZSl7cmV0dXJuIHR5cGVvZiBlPT1gb2JqZWN0YCYmISFlJiZgJGVsYGluIGV9ZnVuY3Rpb24gaWkoZSl7aWYocmkoZSkpe2xldCB0PWUuJGVsO3JldHVybiAkbih0KSYmWG4odCk9PT1gI2NvbW1lbnRgP251bGw6dH1yZXR1cm4gZX1mdW5jdGlvbiBhaShlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSgpOmIoZSl9ZnVuY3Rpb24gb2koZSl7cmV0dXJue25hbWU6YGFycm93YCxvcHRpb25zOmUsZm4odCl7bGV0IG49aWkoYWkoZS5lbGVtZW50KSk7cmV0dXJuIG49PW51bGw/e306ZWkoe2VsZW1lbnQ6bixwYWRkaW5nOmUucGFkZGluZ30pLmZuKHQpfX19ZnVuY3Rpb24gc2koZSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+YHVgPzE6KGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIGNpKGUsdCl7bGV0IG49c2koZSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufWZ1bmN0aW9uIGxpKGUsdCxuKXtuPT09dm9pZCAwJiYobj17fSk7bGV0IHI9bi53aGlsZUVsZW1lbnRzTW91bnRlZCxpPU4oKCk9PmFpKG4ub3Blbik/PyEwKSxhPU4oKCk9PmFpKG4ubWlkZGxld2FyZSkpLG89TigoKT0+YWkobi5wbGFjZW1lbnQpPz9gYm90dG9tYCkscz1OKCgpPT5haShuLnN0cmF0ZWd5KT8/YGFic29sdXRlYCksYz1OKCgpPT5haShuLnRyYW5zZm9ybSk/PyEwKSxsPU4oKCk9PmlpKGUudmFsdWUpKSxkPU4oKCk9PmlpKHQudmFsdWUpKSxmPUYoMCkscD1GKDApLG09RihzLnZhbHVlKSxoPUYoby52YWx1ZSksZz13KHt9KSxfPUYoITEpLHY9TigoKT0+e2xldCBlPXtwb3NpdGlvbjptLnZhbHVlLGxlZnQ6YDBgLHRvcDpgMGB9O2lmKCFkLnZhbHVlKXJldHVybiBlO2xldCB0PWNpKGQudmFsdWUsZi52YWx1ZSksbj1jaShkLnZhbHVlLHAudmFsdWUpO3JldHVybiBjLnZhbHVlP3suLi5lLHRyYW5zZm9ybTpgdHJhbnNsYXRlKGArdCtgcHgsIGArbitgcHgpYCwuLi5zaShkLnZhbHVlKT49MS41JiZ7d2lsbENoYW5nZTpgdHJhbnNmb3JtYH19Ontwb3NpdGlvbjptLnZhbHVlLGxlZnQ6dCtgcHhgLHRvcDpuK2BweGB9fSkseTtmdW5jdGlvbiBiKCl7aWYobC52YWx1ZT09bnVsbHx8ZC52YWx1ZT09bnVsbClyZXR1cm47bGV0IGU9aS52YWx1ZTtuaShsLnZhbHVlLGQudmFsdWUse21pZGRsZXdhcmU6YS52YWx1ZSxwbGFjZW1lbnQ6by52YWx1ZSxzdHJhdGVneTpzLnZhbHVlfSkudGhlbih0PT57Zi52YWx1ZT10LngscC52YWx1ZT10LnksbS52YWx1ZT10LnN0cmF0ZWd5LGgudmFsdWU9dC5wbGFjZW1lbnQsZy52YWx1ZT10Lm1pZGRsZXdhcmVEYXRhLF8udmFsdWU9ZSE9PSExfSl9ZnVuY3Rpb24geCgpe3R5cGVvZiB5PT1gZnVuY3Rpb25gJiYoeSgpLHk9dm9pZCAwKX1mdW5jdGlvbiBDKCl7aWYoeCgpLHI9PT12b2lkIDApe2IoKTtyZXR1cm59aWYobC52YWx1ZSE9bnVsbCYmZC52YWx1ZSE9bnVsbCl7eT1yKGwudmFsdWUsZC52YWx1ZSxiKTtyZXR1cm59fWZ1bmN0aW9uIFQoKXtpLnZhbHVlfHwoXy52YWx1ZT0hMSl9cmV0dXJuIFYoW2EsbyxzLGldLGIse2ZsdXNoOmBzeW5jYH0pLFYoW2wsZF0sQyx7Zmx1c2g6YHN5bmNgfSksVihpLFQse2ZsdXNoOmBzeW5jYH0pLHUoKSYmT2UoeCkse3g6UyhmKSx5OlMocCksc3RyYXRlZ3k6UyhtKSxwbGFjZW1lbnQ6UyhoKSxtaWRkbGV3YXJlRGF0YTpTKGcpLGlzUG9zaXRpb25lZDpTKF8pLGZsb2F0aW5nU3R5bGVzOnYsdXBkYXRlOmJ9fXZhciB1aT1bYGRpcmBdLGRpPXtzaWRlOmBib3R0b21gLHNpZGVPZmZzZXQ6MCxzaWRlRmxpcDohMCxhbGlnbjpgY2VudGVyYCxhbGlnbk9mZnNldDowLGFsaWduRmxpcDohMCxhcnJvd1BhZGRpbmc6MCxoaWRlU2hpZnRlZEFycm93OiEwLGF2b2lkQ29sbGlzaW9uczohMCxjb2xsaXNpb25Cb3VuZGFyeTooKT0+W10sY29sbGlzaW9uUGFkZGluZzowLHN0aWNreTpgcGFydGlhbGAsaGlkZVdoZW5EZXRhY2hlZDohMSxwb3NpdGlvblN0cmF0ZWd5OmBmaXhlZGAsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpgb3B0aW1pemVkYCxwcmlvcml0aXplUG9zaXRpb246ITF9LFtmaSxwaV09YWUoYFBvcHBlckNvbnRlbnRgKSxtaT1SKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBQb3BwZXJDb250ZW50YCxwcm9wczpXZSh7bWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHsuLi5kaX0pLGVtaXRzOltgcGxhY2VkYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsYT1RdCgpLHtmb3J3YXJkUmVmOnMsY3VycmVudEVsZW1lbnQ6Y309cmUoKSx1PWwoTigoKT0+bi5kaXIpKSxkPUYoKSxmPUYoKSx7d2lkdGg6cCxoZWlnaHQ6bX09U3QoZiksaD1OKCgpPT5uLnNpZGUrKG4uYWxpZ249PT1gY2VudGVyYD9gYDpgLSR7bi5hbGlnbn1gKSksZz1OKCgpPT50eXBlb2Ygbi5jb2xsaXNpb25QYWRkaW5nPT1gbnVtYmVyYD9uLmNvbGxpc2lvblBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLm4uY29sbGlzaW9uUGFkZGluZ30pLF89TigoKT0+QXJyYXkuaXNBcnJheShuLmNvbGxpc2lvbkJvdW5kYXJ5KT9uLmNvbGxpc2lvbkJvdW5kYXJ5OltuLmNvbGxpc2lvbkJvdW5kYXJ5XSksdj1OKCgpPT4oe3BhZGRpbmc6Zy52YWx1ZSxib3VuZGFyeTpfLnZhbHVlLmZpbHRlcihubiksYWx0Qm91bmRhcnk6Xy52YWx1ZS5sZW5ndGg+MH0pKSx5PU4oKCk9Pih7bWFpbkF4aXM6bi5zaWRlRmxpcCxjcm9zc0F4aXM6bi5hbGlnbkZsaXB9KSkseD1OKCgpPT5bWXIoe21haW5BeGlzOm4uc2lkZU9mZnNldCttLnZhbHVlLGFsaWdubWVudEF4aXM6bi5hbGlnbk9mZnNldH0pLG4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmWnIoey4uLnYudmFsdWUsLi4ueS52YWx1ZX0pLG4uYXZvaWRDb2xsaXNpb25zJiZYcih7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiEhbi5wcmlvcml0aXplUG9zaXRpb24sbGltaXRlcjpuLnN0aWNreT09PWBwYXJ0aWFsYD90aSgpOnZvaWQgMCwuLi52LnZhbHVlfSksIW4ucHJpb3JpdGl6ZVBvc2l0aW9uJiZuLmF2b2lkQ29sbGlzaW9ucyYmWnIoey4uLnYudmFsdWUsLi4ueS52YWx1ZX0pLFFyKHsuLi52LnZhbHVlLGFwcGx5Oih7ZWxlbWVudHM6ZSxyZWN0czp0LGF2YWlsYWJsZVdpZHRoOm4sYXZhaWxhYmxlSGVpZ2h0OnJ9KT0+e2xldHt3aWR0aDppLGhlaWdodDphfT10LnJlZmVyZW5jZSxvPWUuZmxvYXRpbmcuc3R5bGU7by5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hdmFpbGFibGUtd2lkdGhgLGAke259cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHRgLGAke3J9cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWFuY2hvci13aWR0aGAsYCR7aX1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLWhlaWdodGAsYCR7YX1weGApfX0pLGYudmFsdWUmJm9pKHtlbGVtZW50OmYudmFsdWUscGFkZGluZzpuLmFycm93UGFkZGluZ30pLHJuKHthcnJvd1dpZHRoOnAudmFsdWUsYXJyb3dIZWlnaHQ6bS52YWx1ZSxkaXI6dS52YWx1ZX0pLG4uaGlkZVdoZW5EZXRhY2hlZCYmJHIoe3N0cmF0ZWd5OmByZWZlcmVuY2VIaWRkZW5gLC4uLnYudmFsdWV9KV0pLHtmbG9hdGluZ1N0eWxlczpTLHBsYWNlbWVudDpDLGlzUG9zaXRpb25lZDp3LG1pZGRsZXdhcmVEYXRhOlQsdXBkYXRlOkV9PWxpKE4oKCk9Pm4ucmVmZXJlbmNlPz9hLmFuY2hvci52YWx1ZSksZCx7c3RyYXRlZ3k6bi5wb3NpdGlvblN0cmF0ZWd5LHBsYWNlbWVudDpoLHdoaWxlRWxlbWVudHNNb3VudGVkOiguLi5lKT0+SnIoLi4uZSx7bGF5b3V0U2hpZnQ6IW4uZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQsYW5pbWF0aW9uRnJhbWU6bi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5PT09YGFsd2F5c2B9KSxtaWRkbGV3YXJlOnh9KSxEPU4oKCk9PmFuKEMudmFsdWUpWzBdKSxPPU4oKCk9PmFuKEMudmFsdWUpWzFdKTtvKCgpPT57dy52YWx1ZSYmcihgcGxhY2VkYCl9KTtsZXQgaz1OKCgpPT57bGV0IGU9VC52YWx1ZS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MDtyZXR1cm4gbi5oaWRlU2hpZnRlZEFycm93JiZlfSksQT1GKGBgKTtyZXR1cm4gbmUoKCk9PntjLnZhbHVlJiYoQS52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjLnZhbHVlKS56SW5kZXgpfSkscGkoe3BsYWNlZFNpZGU6RCxvbkFycm93Q2hhbmdlOmU9PmYudmFsdWU9ZSxhcnJvd1g6TigoKT0+VC52YWx1ZS5hcnJvdz8ueD8/MCksYXJyb3dZOk4oKCk9PlQudmFsdWUuYXJyb3c/Lnk/PzApLHNob3VsZEhpZGVBcnJvdzprfSksKGUsdCk9PihQKCksVGUoYGRpdmAse3JlZl9rZXk6YGZsb2F0aW5nUmVmYCxyZWY6ZCwiZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXIiOmBgLGRpcjpiKHUpLHN0eWxlOmkoey4uLmIoUyksdHJhbnNmb3JtOmIodyk/YihTKS50cmFuc2Zvcm06YHRyYW5zbGF0ZSgwLCAtMjAwJSlgLG1pbldpZHRoOmBtYXgtY29udGVudGAsekluZGV4OkEudmFsdWUsIi0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6W2IoVCkudHJhbnNmb3JtT3JpZ2luPy54LGIoVCkudHJhbnNmb3JtT3JpZ2luPy55XS5qb2luKGAgYCksLi4uYihUKS5oaWRlPy5yZWZlcmVuY2VIaWRkZW4mJnt2aXNpYmlsaXR5OmBoaWRkZW5gLHBvaW50ZXJFdmVudHM6YG5vbmVgfX0pfSxbbi5tZW1vRGVwZW5kZW5jaWVzP2llKFtuLmFzQ2hpbGQsbi5hcyxELnZhbHVlLE8udmFsdWUsYih3KSwuLi5PYmplY3QudmFsdWVzKGUuJGF0dHJzKSwuLi5uLm1lbW9EZXBlbmRlbmNpZXNdLCgpPT4oUCgpLEkoYihqKSxNKHtrZXk6MCxyZWY6YihzKX0sZS4kYXR0cnMseyJhcy1jaGlsZCI6bi5hc0NoaWxkLGFzOm4uYXMsImRhdGEtc2lkZSI6RC52YWx1ZSwiZGF0YS1hbGlnbiI6Ty52YWx1ZSxzdHlsZTp7YW5pbWF0aW9uOmIodyk/dm9pZCAwOmBub25lYH19KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGFzLWNoaWxkYCxgYXNgLGBkYXRhLXNpZGVgLGBkYXRhLWFsaWduYCxgc3R5bGVgXSkpLHQsMCk6KFAoKSxJKGIoaiksTSh7a2V5OjEscmVmOmIocyl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczpuLmFzLCJkYXRhLXNpZGUiOkQudmFsdWUsImRhdGEtYWxpZ24iOk8udmFsdWUsZGlyOmIodSksc3R5bGU6e2FuaW1hdGlvbjpiKHcpP3ZvaWQgMDpgbm9uZWB9fSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2Bhcy1jaGlsZGAsYGFzYCxgZGF0YS1zaWRlYCxgZGF0YS1hbGlnbmAsYGRpcmAsYHN0eWxlYF0pKV0sMTIsdWkpKX19KTtmdW5jdGlvbiBoaShlKXtsZXQgdD1zKHtub25jZTpGKCl9KTtyZXR1cm4gTigoKT0+ZT8udmFsdWV8fHQubm9uY2U/LnZhbHVlKX12YXIgZ2k9W2AgYCxgRW50ZXJgLGBBcnJvd1VwYCxgQXJyb3dEb3duYF0sX2k9W2AgYCxgRW50ZXJgXTtmdW5jdGlvbiB2aShlLHQsbil7cmV0dXJuIGU9PT12b2lkIDA/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoZT0+eWkoZSx0LG4pKTp5aShlLHQsbil9ZnVuY3Rpb24geWkoZSx0LG4pe3JldHVybiBlPT09dm9pZCAwfHx0PT09dm9pZCAwPyExOnR5cGVvZiBlPT1gc3RyaW5nYD9lPT09dDp0eXBlb2Ygbj09YGZ1bmN0aW9uYD9uKGUsdCk6dHlwZW9mIG49PWBzdHJpbmdgP2U/LltuXT09PXQ/LltuXTpjZShlLHQpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB8fEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MH12YXIgeGk9W2B2YWx1ZWBdLFtTaSxDaV09YWUoYFNlbGVjdFJvb3RgKSx3aT1SKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RSb290YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxudWxsYWJsZVZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXSxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCx7cmVxdWlyZWQ6aSxkaXNhYmxlZDphLG11bHRpcGxlOm8sZGlyOnN9PWYobiksYz1DKG4sYG1vZGVsVmFsdWVgLHIse2RlZmF1bHRWYWx1ZTpuLmRlZmF1bHRWYWx1ZT8/KG8udmFsdWU/W106dm9pZCAwKSxwYXNzaXZlOm4ubW9kZWxWYWx1ZT09PXZvaWQgMCxkZWVwOiEwfSksdT1DKG4sYG9wZW5gLHIse2RlZmF1bHRWYWx1ZTpuLmRlZmF1bHRPcGVuLHBhc3NpdmU6bi5vcGVuPT09dm9pZCAwfSksZD1GKCkscD1GKCksbT1GKHt4OjAseTowfSksaD1OKCgpPT5vLnZhbHVlJiZBcnJheS5pc0FycmF5KGMudmFsdWUpP2MudmFsdWU/Lmxlbmd0aD09PTA6b2UoYy52YWx1ZSkpO0plKHtpc1Byb3ZpZGVyOiEwfSk7bGV0IGc9bChzKSxfPWR0KGQpLHY9RihuZXcgU2V0KSx5PU4oKCk9PkFycmF5LmZyb20odi52YWx1ZSkubWFwKGU9PmUudmFsdWUpLmpvaW4oYDtgKSk7ZnVuY3Rpb24geChlKXtpZihvLnZhbHVlKXtsZXQgdD1BcnJheS5pc0FycmF5KGMudmFsdWUpP1suLi5jLnZhbHVlXTpbXSxyPXQuZmluZEluZGV4KHQ9PnlpKHQsZSxuLmJ5KSk7cj09PS0xP3QucHVzaChlKTp0LnNwbGljZShyLDEpLGMudmFsdWU9Wy4uLnRdfWVsc2UgYy52YWx1ZT1lfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIEFycmF5LmZyb20odi52YWx1ZSkuZmluZCh0PT52aShlLHQudmFsdWUsbi5ieSkpfXJldHVybiBDaSh7dHJpZ2dlckVsZW1lbnQ6ZCxvblRyaWdnZXJDaGFuZ2U6ZT0+e2QudmFsdWU9ZX0sdmFsdWVFbGVtZW50OnAsb25WYWx1ZUVsZW1lbnRDaGFuZ2U6ZT0+e3AudmFsdWU9ZX0sY29udGVudElkOmBgLG1vZGVsVmFsdWU6YyxvblZhbHVlQ2hhbmdlOngsYnk6bi5ieSxvcGVuOnUsbXVsdGlwbGU6byxyZXF1aXJlZDppLG9uT3BlbkNoYW5nZTplPT57dS52YWx1ZT1lfSxkaXI6Zyx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6bSxkaXNhYmxlZDphLGlzRW1wdHlNb2RlbFZhbHVlOmgsb3B0aW9uc1NldDp2LG9uT3B0aW9uQWRkOmU9PntsZXQgdD1TKGUudmFsdWUpO3QmJnYudmFsdWUuZGVsZXRlKHQpLHYudmFsdWUuYWRkKGUpfSxvbk9wdGlvblJlbW92ZTplPT57bGV0IHQ9UyhlLnZhbHVlKTt0JiZ2LnZhbHVlLmRlbGV0ZSh0KX19KSwoZSx0KT0+KFAoKSxJKGIoZW4pLG51bGwse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOmIoYyksb3BlbjpiKHUpfSksYihfKSYmZS5uYW1lPyhQKCksSShUaSx7a2V5OnkudmFsdWUsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsdGFiaW5kZXg6YC0xYCxtdWx0aXBsZTpiKG8pLHJlcXVpcmVkOmIoaSksbmFtZTplLm5hbWUsYXV0b2NvbXBsZXRlOmUuYXV0b2NvbXBsZXRlLGRpc2FibGVkOmIoYSksdmFsdWU6YihjKX0se2RlZmF1bHQ6QigoKT0+W2Iob2UpKGIoYykpPyhQKCksVGUoYG9wdGlvbmAse2tleTowLHZhbHVlOmUubnVsbGFibGVWYWx1ZX0sbnVsbCw4LHhpKSk6emUoYHYtaWZgLCEwKSwoUCghMCksVGUoayxudWxsLHBlKEFycmF5LmZyb20odi52YWx1ZSksZT0+KFAoKSxUZShgb3B0aW9uYCxNKHtrZXk6ZS52YWx1ZT8/YGB9LHtyZWZfZm9yOiEwfSxlKSxudWxsLDE2KSkpLDEyOCkpXSksXzoxfSw4LFtgbXVsdGlwbGVgLGByZXF1aXJlZGAsYG5hbWVgLGBhdXRvY29tcGxldGVgLGBkaXNhYmxlZGAsYHZhbHVlYF0pKTp6ZShgdi1pZmAsITApXSksXzozfSkpfX0pLFRpPVIoe19fbmFtZTpgQnViYmxlU2VsZWN0YCxwcm9wczp7YXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGZvcm06e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxuYW1lOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc2l6ZTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49RigpLHI9U2koKTtWKCgpPT50LnZhbHVlLChlLHQpPT57bGV0IHI9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixgdmFsdWVgKS5zZXQ7aWYoZSE9PXQmJmkmJm4udmFsdWUpe2xldCB0PW5ldyBFdmVudChgY2hhbmdlYCx7YnViYmxlczohMH0pO2kuY2FsbChuLnZhbHVlLGUpLG4udmFsdWUuZGlzcGF0Y2hFdmVudCh0KX19KTtmdW5jdGlvbiBpKGUpe3Iub25WYWx1ZUNoYW5nZShlLnRhcmdldC52YWx1ZSl9cmV0dXJuKGUscik9PihQKCksSShiKFp0KSx7ImFzLWNoaWxkIjpgYH0se2RlZmF1bHQ6QigoKT0+W0hlKGBzZWxlY3RgLE0oe3JlZl9rZXk6YHNlbGVjdEVsZW1lbnRgLHJlZjpufSx0LHtvbklucHV0Oml9KSxbeihlLiRzbG90cyxgZGVmYXVsdGApXSwxNildKSxfOjN9KSl9fSksRWk9Uih7X19uYW1lOmBTZWxlY3RQb3BwZXJQb3NpdGlvbmAscHJvcHM6e21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3RhcnRgfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITEsZGVmYXVsdDoxMH0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1LZShlKTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIobWkpLE0oYih0KSx7c3R5bGU6e2JveFNpemluZzpgYm9yZGVyLWJveGAsIi0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjpgdmFyKC0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClgLCItLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3Itd2lkdGgpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWFuY2hvci1oZWlnaHQpYH19KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLERpPXtvblZpZXdwb3J0Q2hhbmdlOigpPT57fSxpdGVtVGV4dFJlZkNhbGxiYWNrOigpPT57fSxpdGVtUmVmQ2FsbGJhY2s6KCk9Pnt9fSxbT2ksa2ldPWFlKGBTZWxlY3RDb250ZW50YCksQWk9Uih7X19uYW1lOmBTZWxlY3RDb250ZW50SW1wbGAscHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBpdGVtLWFsaWduZWRgfSxib2R5TG9jazp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LG1lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3RhcnRgfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITF9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfX0sZW1pdHM6W2BjbG9zZUF1dG9Gb2N1c2AsYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPVNpKCk7bHQoKSxhdChuLmJvZHlMb2NrKTtsZXR7Q29sbGVjdGlvblNsb3Q6YSxnZXRJdGVtczpvfT1KZSgpLHM9RigpO3h0KHMpO2xldHtzZWFyY2g6YyxoYW5kbGVUeXBlYWhlYWRTZWFyY2g6bH09Q3QoKSx1PUYoKSxkPUYoKSxmPUYoKSxwPUYoITEpLG09RighMSksaD1GKCExKTtmdW5jdGlvbiBnKCl7ZC52YWx1ZSYmcy52YWx1ZSYmWXQoW2QudmFsdWUscy52YWx1ZV0pfVYocCwoKT0+e2coKX0pO2xldHtvbk9wZW5DaGFuZ2U6Xyx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6dn09aTtuZShlPT57aWYoIXMudmFsdWUpcmV0dXJuO2xldCB0PXt4OjAseTowfSxuPWU9Pnt0PXt4Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWCktKHYudmFsdWU/Lng/PzApKSx5Ok1hdGguYWJzKE1hdGgucm91bmQoZS5wYWdlWSktKHYudmFsdWU/Lnk/PzApKX19LHI9ZT0+e2UucG9pbnRlclR5cGUhPT1gdG91Y2hgJiYodC54PD0xMCYmdC55PD0xMD9lLnByZXZlbnREZWZhdWx0KCk6cy52YWx1ZT8uY29udGFpbnMoZS50YXJnZXQpfHxfKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksdi52YWx1ZT1udWxsKX07di52YWx1ZSE9PW51bGwmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcnVwYCxyLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksZSgoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJtb3ZlYCxuKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVydXBgLHIse2NhcHR1cmU6ITB9KX0pfSk7ZnVuY3Rpb24geShlKXtsZXQgdD1lLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXk7aWYoZS5rZXk9PT1gVGFiYCYmZS5wcmV2ZW50RGVmYXVsdCgpLCF0JiZlLmtleS5sZW5ndGg9PT0xJiZsKGUua2V5LG8oKSksW2BBcnJvd1VwYCxgQXJyb3dEb3duYCxgSG9tZWAsYEVuZGBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IHQ9Wy4uLm8oKS5tYXAoZT0+ZS5yZWYpXTtpZihbYEFycm93VXBgLGBFbmRgXS5pbmNsdWRlcyhlLmtleSkmJih0PXQuc2xpY2UoKS5yZXZlcnNlKCkpLFtgQXJyb3dVcGAsYEFycm93RG93bmBdLmluY2x1ZGVzKGUua2V5KSl7bGV0IG49ZS50YXJnZXQscj10LmluZGV4T2Yobik7dD10LnNsaWNlKHIrMSl9c2V0VGltZW91dCgoKT0+WXQodCkpLGUucHJldmVudERlZmF1bHQoKX19bGV0IHg9TigoKT0+bi5wb3NpdGlvbj09PWBwb3BwZXJgP246e30pLFM9S2UoeC52YWx1ZSk7cmV0dXJuIGtpKHtjb250ZW50OnMsdmlld3BvcnQ6dSxvblZpZXdwb3J0Q2hhbmdlOmU9Pnt1LnZhbHVlPWV9LGl0ZW1SZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IW0udmFsdWUmJiFuLGE9dmkoaS5tb2RlbFZhbHVlLnZhbHVlLHQsaS5ieSk7aWYoaS5tdWx0aXBsZS52YWx1ZSl7aWYoaC52YWx1ZSlyZXR1cm47KGF8fHIpJiYoZC52YWx1ZT1lLGEmJihoLnZhbHVlPSEwKSl9ZWxzZShhfHxyKSYmKGQudmFsdWU9ZSk7ciYmKG0udmFsdWU9ITApfSxzZWxlY3RlZEl0ZW06ZCxzZWxlY3RlZEl0ZW1UZXh0OmYsb25JdGVtTGVhdmU6KCk9PntzLnZhbHVlPy5mb2N1cygpfSxpdGVtVGV4dFJlZkNhbGxiYWNrOihlLHQsbik9PntsZXQgcj0hbS52YWx1ZSYmIW47KHZpKGkubW9kZWxWYWx1ZS52YWx1ZSx0LGkuYnkpfHxyKSYmKGYudmFsdWU9ZSl9LGZvY3VzU2VsZWN0ZWRJdGVtOmcscG9zaXRpb246bi5wb3NpdGlvbixpc1Bvc2l0aW9uZWQ6cCxzZWFyY2hSZWY6Y30pLChlLHQpPT4oUCgpLEkoYihhKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoR3QpLHsiYXMtY2hpbGQiOmBgLG9uTW91bnRBdXRvRm9jdXM6dFs2XXx8PWRlKCgpPT57fSxbYHByZXZlbnRgXSksb25Vbm1vdW50QXV0b0ZvY3VzOnRbN118fD1lPT57cihgY2xvc2VBdXRvRm9jdXNgLGUpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihiKGkpLnRyaWdnZXJFbGVtZW50LnZhbHVlPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUucHJldmVudERlZmF1bHQoKSl9fSx7ZGVmYXVsdDpCKCgpPT5bTChiKGp0KSx7ImFzLWNoaWxkIjpgYCwiZGlzYWJsZS1vdXRzaWRlLXBvaW50ZXItZXZlbnRzIjplLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cyxvbkZvY3VzT3V0c2lkZTp0WzJdfHw9ZGUoKCk9Pnt9LFtgcHJldmVudGBdKSxvbkRpc21pc3M6dFszXXx8PWU9PmIoaSkub25PcGVuQ2hhbmdlKCExKSxvbkVzY2FwZUtleURvd246dFs0XXx8PWU9PnIoYGVzY2FwZUtleURvd25gLGUpLG9uUG9pbnRlckRvd25PdXRzaWRlOnRbNV18fD1lPT5yKGBwb2ludGVyRG93bk91dHNpZGVgLGUpfSx7ZGVmYXVsdDpCKCgpPT5bKFAoKSxJKFllKGUucG9zaXRpb249PT1gcG9wcGVyYD9FaTpOaSksTSh7Li4uZS4kYXR0cnMsLi4uYihTKX0se2lkOmIoaSkuY29udGVudElkLHJlZjplPT57aWYoIWUpcmV0dXJuO2xldCB0PWIoRGUpKGUpO3Q/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9zLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6cy52YWx1ZT10fSxyb2xlOmBsaXN0Ym94YCwiZGF0YS1zdGF0ZSI6YihpKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCxkaXI6YihpKS5kaXIudmFsdWUsc3R5bGU6e2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAsb3V0bGluZTpgbm9uZWB9LG9uQ29udGV4dG1lbnU6dFswXXx8PWRlKCgpPT57fSxbYHByZXZlbnRgXSksb25QbGFjZWQ6dFsxXXx8PWU9PnAudmFsdWU9ITAsb25LZXlkb3duOnl9KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGlkYCxgZGF0YS1zdGF0ZWAsYGRpcmAsYG9uS2V5ZG93bmBdKSldKSxfOjN9LDgsW2BkaXNhYmxlLW91dHNpZGUtcG9pbnRlci1ldmVudHNgXSldKSxfOjN9KV0pLF86M30pKX19KSxbamksTWldPWFlKGBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uYCksTmk9Uih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0SXRlbUFsaWduZWRQb3NpdGlvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgcGxhY2VkYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse2dldEl0ZW1zOmF9PUplKCksbz1TaSgpLHM9T2koKSxjPUYoITEpLGw9RighMCksdT1GKCkse2ZvcndhcmRSZWY6ZCxjdXJyZW50RWxlbWVudDpmfT1yZSgpLHt2aWV3cG9ydDpwLHNlbGVjdGVkSXRlbTptLHNlbGVjdGVkSXRlbVRleHQ6aCxmb2N1c1NlbGVjdGVkSXRlbTpnfT1zO2Z1bmN0aW9uIF8oKXtpZihvLnRyaWdnZXJFbGVtZW50LnZhbHVlJiZvLnZhbHVlRWxlbWVudC52YWx1ZSYmdS52YWx1ZSYmZi52YWx1ZSYmcD8udmFsdWUmJm0/LnZhbHVlJiZoPy52YWx1ZSl7bGV0IGU9by50cmlnZ2VyRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PWYudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1vLnZhbHVlRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWgudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoby5kaXIudmFsdWUhPT1gcnRsYCl7bGV0IHI9aS5sZWZ0LXQubGVmdCxhPW4ubGVmdC1yLG89ZS5sZWZ0LWEscz1lLndpZHRoK28sYz1NYXRoLm1heChzLHQud2lkdGgpLGw9d2luZG93LmlubmVyV2lkdGgtMTAsZD1RZShhLDEwLE1hdGgubWF4KDEwLGwtYykpO3UudmFsdWUuc3R5bGUubWluV2lkdGg9YCR7c31weGAsdS52YWx1ZS5zdHlsZS5sZWZ0PWAke2R9cHhgfWVsc2V7bGV0IHI9dC5yaWdodC1pLnJpZ2h0LGE9d2luZG93LmlubmVyV2lkdGgtbi5yaWdodC1yLG89d2luZG93LmlubmVyV2lkdGgtZS5yaWdodC1hLHM9ZS53aWR0aCtvLGM9TWF0aC5tYXgocyx0LndpZHRoKSxsPXdpbmRvdy5pbm5lcldpZHRoLTEwLGQ9UWUoYSwxMCxNYXRoLm1heCgxMCxsLWMpKTt1LnZhbHVlLnN0eWxlLm1pbldpZHRoPWAke3N9cHhgLHUudmFsdWUuc3R5bGUucmlnaHQ9YCR7ZH1weGB9bGV0IHM9YSgpLm1hcChlPT5lLnJlZiksbD13aW5kb3cuaW5uZXJIZWlnaHQtMjAsZD1wLnZhbHVlLnNjcm9sbEhlaWdodCxnPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYudmFsdWUpLF89TnVtYmVyLnBhcnNlSW50KGcuYm9yZGVyVG9wV2lkdGgsMTApLHY9TnVtYmVyLnBhcnNlSW50KGcucGFkZGluZ1RvcCwxMCkseT1OdW1iZXIucGFyc2VJbnQoZy5ib3JkZXJCb3R0b21XaWR0aCwxMCksYj1OdW1iZXIucGFyc2VJbnQoZy5wYWRkaW5nQm90dG9tLDEwKSx4PV8rditkK2IreSxTPU1hdGgubWluKG0udmFsdWUub2Zmc2V0SGVpZ2h0KjUseCksQz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwLnZhbHVlKSx3PU51bWJlci5wYXJzZUludChDLnBhZGRpbmdUb3AsMTApLFQ9TnVtYmVyLnBhcnNlSW50KEMucGFkZGluZ0JvdHRvbSwxMCksRT1lLnRvcCtlLmhlaWdodC8yLTEwLEQ9bC1FLE89bS52YWx1ZS5vZmZzZXRIZWlnaHQvMixrPW0udmFsdWUub2Zmc2V0VG9wK08sQT1fK3YrayxlZT14LUE7aWYoQTw9RSl7bGV0IGU9bS52YWx1ZT09PXMuYXQoLTEpO3UudmFsdWUuc3R5bGUuYm90dG9tPWAwcHhgO2xldCB0PWYudmFsdWUuY2xpZW50SGVpZ2h0LXAudmFsdWUub2Zmc2V0VG9wLXAudmFsdWUub2Zmc2V0SGVpZ2h0LG49QStNYXRoLm1heChELE8rKGU/VDowKSt0K3kpO3UudmFsdWUuc3R5bGUuaGVpZ2h0PWAke259cHhgfWVsc2V7bGV0IGU9bS52YWx1ZT09PXNbMF07dS52YWx1ZS5zdHlsZS50b3A9YDBweGA7bGV0IHQ9TWF0aC5tYXgoRSxfK3AudmFsdWUub2Zmc2V0VG9wKyhlP3c6MCkrTykrZWU7dS52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7dH1weGAscC52YWx1ZS5zY3JvbGxUb3A9QS1FK3AudmFsdWUub2Zmc2V0VG9wfXUudmFsdWUuc3R5bGUubWFyZ2luPWAxMHB4IDBgLHUudmFsdWUuc3R5bGUubWluSGVpZ2h0PWAke1N9cHhgLHUudmFsdWUuc3R5bGUubWF4SGVpZ2h0PWAke2x9cHhgLHIoYHBsYWNlZGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+Yy52YWx1ZT0hMCl9fWxldCB2PUYoYGApO01lKGFzeW5jKCk9Pnthd2FpdCBiZSgpLF8oKSxmLnZhbHVlJiYodi52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnZhbHVlKS56SW5kZXgpfSk7ZnVuY3Rpb24geShlKXtlJiZsLnZhbHVlPT09ITAmJihfKCksZz8uKCksbC52YWx1ZT0hMSl9cmV0dXJuIHgoby50cmlnZ2VyRWxlbWVudCwoKT0+e18oKX0pLE1pKHtjb250ZW50V3JhcHBlcjp1LHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOmMsb25TY3JvbGxCdXR0b25DaGFuZ2U6eX0pLChlLHQpPT4oUCgpLFRlKGBkaXZgLHtyZWZfa2V5OmBjb250ZW50V3JhcHBlckVsZW1lbnRgLHJlZjp1LHN0eWxlOmkoe2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAscG9zaXRpb246YGZpeGVkYCx6SW5kZXg6di52YWx1ZX0pfSxbTChiKGopLE0oe3JlZjpiKGQpLHN0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLG1heEhlaWdodDpgMTAwJWB9fSx7Li4uZS4kYXR0cnMsLi4ubn0pLHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0sNCkpfX0pLFBpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFByb3ZpZGVyYCxwcm9wczp7Y29udGV4dDp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxzZXR1cChlKXtyZXR1cm4gQ2koZS5jb250ZXh0KSxraShEaSksKGUsdCk9PnooZS4kc2xvdHMsYGRlZmF1bHRgKX19KSxGaT17a2V5OjF9LElpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKHQse2VtaXQ6bn0pe2xldCByPXQsaT1hKHIsbiksbz1TaSgpLHM9RigpO01lKCgpPT57cy52YWx1ZT1uZXcgRG9jdW1lbnRGcmFnbWVudH0pO2xldCBjPUYoKSxsPU4oKCk9PnIuZm9yY2VNb3VudHx8by5vcGVuLnZhbHVlKSx1PUYobC52YWx1ZSksZDtmdW5jdGlvbiBmKCl7ZCYmPShjbGVhclRpbWVvdXQoZCksdm9pZCAwKX1yZXR1cm4gVihsLChlLHQsbik9PntmKCksZD1zZXRUaW1lb3V0KCgpPT57dS52YWx1ZT1sLnZhbHVlLGQ9dm9pZCAwfSksbihmKX0pLENlKGYpLCh0LG4pPT5sLnZhbHVlfHx1LnZhbHVlfHxjLnZhbHVlPy5wcmVzZW50PyhQKCksSShiKHFlKSx7a2V5OjAscmVmX2tleTpgcHJlc2VuY2VSZWZgLHJlZjpjLHByZXNlbnQ6bC52YWx1ZX0se2RlZmF1bHQ6QigoKT0+W0woQWksWmUoX2Uoey4uLmIoaSksLi4udC4kYXR0cnN9KSkse2RlZmF1bHQ6QigoKT0+W3oodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpXSksXzozfSw4LFtgcHJlc2VudGBdKSk6cy52YWx1ZT8oUCgpLFRlKGBkaXZgLEZpLFsoUCgpLEkoZSx7dG86cy52YWx1ZX0sW0woUGkse2NvbnRleHQ6YihvKX0se2RlZmF1bHQ6QigoKT0+W3oodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGNvbnRleHRgXSldLDgsW2B0b2BdKSldKSk6emUoYHYtaWZgLCEwKX19KSxMaT1SKHtfX25hbWU6YFNlbGVjdEljb25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KFAoKSxJKGIoaikseyJhcmlhLWhpZGRlbiI6YHRydWVgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGR9LHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W3RbMF18fD1oZShg4pa8YCldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pLFtSaSx6aV09YWUoYFNlbGVjdEl0ZW1gKSxCaT1SKHtfX25hbWU6YFNlbGVjdEl0ZW1gLHByb3BzOnt2YWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSx0ZXh0VmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHNlbGVjdGBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtkaXNhYmxlZDppfT1mKG4pLGE9U2koKSxvPU9pKCkse2ZvcndhcmRSZWY6cyxjdXJyZW50RWxlbWVudDpjfT1yZSgpLHtDb2xsZWN0aW9uSXRlbTpsfT1KZSgpLHU9TigoKT0+dmkoYS5tb2RlbFZhbHVlPy52YWx1ZSxuLnZhbHVlLGEuYnkpKSxkPUYoITEpLHA9RihuLnRleHRWYWx1ZT8/YGApLGg9dGUodm9pZCAwLGByZWthLXNlbGVjdC1pdGVtLXRleHRgKTthc3luYyBmdW5jdGlvbiBnKGUpe2UuZGVmYXVsdFByZXZlbnRlZHx8JGUoYHNlbGVjdC5zZWxlY3RgLF8se29yaWdpbmFsRXZlbnQ6ZSx2YWx1ZTpuLnZhbHVlfSl9YXN5bmMgZnVuY3Rpb24gXyhlKXthd2FpdCBiZSgpLHIoYHNlbGVjdGAsZSksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGkudmFsdWV8fChhLm9uVmFsdWVDaGFuZ2Uobi52YWx1ZSksYS5tdWx0aXBsZS52YWx1ZXx8YS5vbk9wZW5DaGFuZ2UoITEpKSl9YXN5bmMgZnVuY3Rpb24gdihlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihpLnZhbHVlP28ub25JdGVtTGVhdmU/LigpOmUuY3VycmVudFRhcmdldD8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSl9YXN5bmMgZnVuY3Rpb24geShlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJmUuY3VycmVudFRhcmdldD09PW0oKSYmby5vbkl0ZW1MZWF2ZT8uKCl9YXN5bmMgZnVuY3Rpb24geChlKXthd2FpdCBiZSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihvLnNlYXJjaFJlZj8udmFsdWU9PT1gYHx8ZS5rZXkhPT1gIGApJiYoX2kuaW5jbHVkZXMoZS5rZXkpJiZnKGUpLGUua2V5PT09YCBgJiZlLnByZXZlbnREZWZhdWx0KCkpfWlmKG4udmFsdWU9PT1gYCl0aHJvdyBFcnJvcihgQSA8U2VsZWN0SXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuYCk7cmV0dXJuIE1lKCgpPT57Yy52YWx1ZSYmby5pdGVtUmVmQ2FsbGJhY2soYy52YWx1ZSxuLnZhbHVlLG4uZGlzYWJsZWQpfSksemkoe3ZhbHVlOm4udmFsdWUsZGlzYWJsZWQ6aSx0ZXh0SWQ6aCxpc1NlbGVjdGVkOnUsb25JdGVtVGV4dENoYW5nZTplPT57cC52YWx1ZT0oKHAudmFsdWV8fGU/LnRleHRDb250ZW50KT8/YGApLnRyaW0oKX19KSwoZSx0KT0+KFAoKSxJKGIobCkse3ZhbHVlOnt0ZXh0VmFsdWU6cC52YWx1ZX19LHtkZWZhdWx0OkIoKCk9PltMKGIoaikse3JlZjpiKHMpLHJvbGU6YG9wdGlvbmAsImFyaWEtbGFiZWxsZWRieSI6YihoKSwiZGF0YS1oaWdobGlnaHRlZCI6ZC52YWx1ZT9gYDp2b2lkIDAsImFyaWEtc2VsZWN0ZWQiOnUudmFsdWUsImRhdGEtc3RhdGUiOnUudmFsdWU/YGNoZWNrZWRgOmB1bmNoZWNrZWRgLCJhcmlhLWRpc2FibGVkIjpiKGkpfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmIoaSk/YGA6dm9pZCAwLHRhYmluZGV4OmIoaSk/dm9pZCAwOi0xLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsb25Gb2N1czp0WzBdfHw9ZT0+ZC52YWx1ZT0hMCxvbkJsdXI6dFsxXXx8PWU9PmQudmFsdWU9ITEsb25Qb2ludGVydXA6ZyxvblBvaW50ZXJkb3duOnRbMl18fD1lPT57ZS5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG9uVG91Y2hlbmQ6dFszXXx8PWRlKCgpPT57fSxbYHByZXZlbnRgLGBzdG9wYF0pLG9uUG9pbnRlcm1vdmU6dixvblBvaW50ZXJsZWF2ZTp5LG9uS2V5ZG93bjp4fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXJpYS1sYWJlbGxlZGJ5YCxgZGF0YS1oaWdobGlnaHRlZGAsYGFyaWEtc2VsZWN0ZWRgLGBkYXRhLXN0YXRlYCxgYXJpYS1kaXNhYmxlZGAsYGRhdGEtZGlzYWJsZWRgLGB0YWJpbmRleGAsYGFzYCxgYXMtY2hpbGRgXSldKSxfOjN9LDgsW2B2YWx1ZWBdKSl9fSksVmk9Uih7X19uYW1lOmBTZWxlY3RJdGVtSW5kaWNhdG9yYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVJpKCk7cmV0dXJuKGUscik9PmIobikuaXNTZWxlY3RlZC52YWx1ZT8oUCgpLEkoYihqKSxNKHtrZXk6MCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sdCkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKTp6ZShgdi1pZmAsITApfX0pLEhpPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdEl0ZW1UZXh0YCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNpKCkscj1PaSgpLGk9UmkoKSx7Zm9yd2FyZFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXJlKCkscz1OKCgpPT4oe3ZhbHVlOmkudmFsdWUsZGlzYWJsZWQ6aS5kaXNhYmxlZC52YWx1ZSx0ZXh0Q29udGVudDpvLnZhbHVlPy50ZXh0Q29udGVudD8/aS52YWx1ZT8udG9TdHJpbmcoKT8/YGB9KSk7cmV0dXJuIE1lKCgpPT57by52YWx1ZSYmKGkub25JdGVtVGV4dENoYW5nZShvLnZhbHVlKSxyLml0ZW1UZXh0UmVmQ2FsbGJhY2soby52YWx1ZSxpLnZhbHVlLGkuZGlzYWJsZWQudmFsdWUpLG4ub25PcHRpb25BZGQocy52YWx1ZSkpfSksQ2UoKCk9PntuLm9uT3B0aW9uUmVtb3ZlKHMudmFsdWUpfSksKGUsbik9PihQKCksSShiKGopLE0oe2lkOmIoaSkudGV4dElkLHJlZjpiKGEpfSx7Li4udCwuLi5lLiRhdHRyc30pLHtkZWZhdWx0OkIoKCk9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgXSkpfX0pLFVpPVIoe19fbmFtZTpgU2VsZWN0UG9ydGFsYCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIoWHQpLFplKF9lKHQpKSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLFdpPVIoe19fbmFtZTpgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbGAsZW1pdHM6W2BhdXRvU2Nyb2xsYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49dCx7Z2V0SXRlbXM6cn09SmUoKSxpPU9pKCksYT1GKG51bGwpO2Z1bmN0aW9uIG8oKXthLnZhbHVlIT09bnVsbCYmKHdpbmRvdy5jbGVhckludGVydmFsKGEudmFsdWUpLGEudmFsdWU9bnVsbCl9bmUoKCk9PntyKCkubWFwKGU9PmUucmVmKS5maW5kKGU9PmU9PT1tKCkpPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6YG5lYXJlc3RgfSl9KTtmdW5jdGlvbiBzKCl7YS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1mdW5jdGlvbiBjKCl7aS5vbkl0ZW1MZWF2ZT8uKCksYS52YWx1ZT09PW51bGwmJihhLnZhbHVlPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e24oYGF1dG9TY3JvbGxgKX0sNTApKX1yZXR1cm4gSWUoKCk9Pm8oKSksKGUsdCk9PihQKCksSShiKGopLE0oeyJhcmlhLWhpZGRlbiI6YHRydWVgLHN0eWxlOntmbGV4U2hyaW5rOjB9fSxlLiRwYXJlbnQ/LiRwcm9wcyx7b25Qb2ludGVyZG93bjpzLG9uUG9pbnRlcm1vdmU6YyxvblBvaW50ZXJsZWF2ZTp0WzBdfHw9KCk9PntvKCl9fSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxHaT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1PaSgpLG49dC5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP2ppKCk6dm9pZCAwLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09cmUoKSxhPUYoITEpO3JldHVybiBuZShlPT57aWYodC52aWV3cG9ydD8udmFsdWUmJnQuaXNQb3NpdGlvbmVkPy52YWx1ZSl7bGV0IG49dC52aWV3cG9ydC52YWx1ZTtmdW5jdGlvbiByKCl7bGV0IGU9bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQ7YS52YWx1ZT1NYXRoLmNlaWwobi5zY3JvbGxUb3ApPGV9cigpLG4uYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSxlKCgpPT5uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAscikpfX0pLFYoaSwoKT0+e2kudmFsdWUmJm4/Lm9uU2Nyb2xsQnV0dG9uQ2hhbmdlKGkudmFsdWUpfSksKGUsbik9PmEudmFsdWU/KFAoKSxJKFdpLHtrZXk6MCxyZWY6YihyKSxvbkF1dG9TY3JvbGw6blswXXx8PSgpPT57bGV0e3ZpZXdwb3J0OmUsc2VsZWN0ZWRJdGVtOm59PWIodCk7ZT8udmFsdWUmJm4/LnZhbHVlJiYoZS52YWx1ZS5zY3JvbGxUb3A9ZS52YWx1ZS5zY3JvbGxUb3Arbi52YWx1ZS5vZmZzZXRIZWlnaHQpfX0se2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sNTEyKSk6emUoYHYtaWZgLCEwKX19KSxLaT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9T2koKSxuPXQucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD9qaSgpOnZvaWQgMCx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PXJlKCksYT1GKCExKTtyZXR1cm4gbmUoZT0+e2lmKHQudmlld3BvcnQ/LnZhbHVlJiZ0LmlzUG9zaXRpb25lZD8udmFsdWUpe2xldCBuPXQudmlld3BvcnQudmFsdWU7ZnVuY3Rpb24gcigpe2EudmFsdWU9bi5zY3JvbGxUb3A+MH1yKCksbi5hZGRFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpLGUoKCk9Pm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSl9fSksVihpLCgpPT57aS52YWx1ZSYmbj8ub25TY3JvbGxCdXR0b25DaGFuZ2UoaS52YWx1ZSl9KSwoZSxuKT0+YS52YWx1ZT8oUCgpLEkoV2kse2tleTowLHJlZjpiKHIpLG9uQXV0b1Njcm9sbDpuWzBdfHw9KCk9PntsZXR7dmlld3BvcnQ6ZSxzZWxlY3RlZEl0ZW06bn09Yih0KTtlPy52YWx1ZSYmbj8udmFsdWUmJihlLnZhbHVlLnNjcm9sbFRvcD1lLnZhbHVlLnNjcm9sbFRvcC1uLnZhbHVlLm9mZnNldEhlaWdodCl9fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw1MTIpKTp6ZShgdi1pZmAsITApfX0pLHFpPVIoe19fbmFtZTpgU2VsZWN0VHJpZ2dlcmAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWUsbj1TaSgpLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09cmUoKSxhPU4oKCk9Pm4uZGlzYWJsZWQ/LnZhbHVlfHx0LmRpc2FibGVkKTtuLmNvbnRlbnRJZHx8PXRlKHZvaWQgMCxgcmVrYS1zZWxlY3QtY29udGVudGApLE1lKCgpPT57bi5vblRyaWdnZXJDaGFuZ2UoaS52YWx1ZSl9KTtsZXR7Z2V0SXRlbXM6b309SmUoKSx7c2VhcmNoOnMsaGFuZGxlVHlwZWFoZWFkU2VhcmNoOmMscmVzZXRUeXBlYWhlYWQ6bH09Q3QoKTtmdW5jdGlvbiB1KCl7YS52YWx1ZXx8KG4ub25PcGVuQ2hhbmdlKCEwKSxsKCkpfWZ1bmN0aW9uIGQoZSl7dSgpLG4udHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLnZhbHVlPXt4Ok1hdGgucm91bmQoZS5wYWdlWCkseTpNYXRoLnJvdW5kKGUucGFnZVkpfX1mdW5jdGlvbiBmKGUpe3JldHVybiBlLmJ1dHRvbj09PTAmJmUuY3RybEtleT09PSExfWxldCBwPSExO2Z1bmN0aW9uIG0oZSl7aWYoZS5wb2ludGVyVHlwZT09PWB0b3VjaGApcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtsZXQgdD1lLnRhcmdldDt0Lmhhc1BvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSYmdC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpLGYoZSkmJihkKGUpLHA9ITApfWZ1bmN0aW9uIGgoZSl7ZihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIGcoZSl7cHx8ZS5jdXJyZW50VGFyZ2V0Py5mb2N1cygpLHA9ITF9cmV0dXJuKGUsdCk9PihQKCksSShiKHRuKSx7ImFzLWNoaWxkIjpgYCxyZWZlcmVuY2U6ZS5yZWZlcmVuY2V9LHtkZWZhdWx0OkIoKCk9PltMKGIoaikse3JlZjpiKHIpLHJvbGU6YGNvbWJvYm94YCx0eXBlOmUuYXM9PT1gYnV0dG9uYD9gYnV0dG9uYDp2b2lkIDAsImFyaWEtY29udHJvbHMiOmIobikuY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpiKG4pLm9wZW4udmFsdWV8fCExLCJhcmlhLXJlcXVpcmVkIjpiKG4pLnJlcXVpcmVkPy52YWx1ZSwiYXJpYS1hdXRvY29tcGxldGUiOmBub25lYCxkaXNhYmxlZDphLnZhbHVlLGRpcjpiKG4pPy5kaXIudmFsdWUsImRhdGEtc3RhdGUiOmIobik/Lm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjphLnZhbHVlP2BgOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6YihiaSkoYihuKS5tb2RlbFZhbHVlPy52YWx1ZSk/YGA6dm9pZCAwLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsb25DbGljazpnLG9uUG9pbnRlcmRvd246bSxvbk1vdXNlZG93bjpoLG9uUG9pbnRlcnVwOnRbMF18fD1kZShlPT57ZS5wb2ludGVyVHlwZT09PWB0b3VjaGAmJmQoZSl9LFtgcHJldmVudGBdKSxvbktleWRvd246dFsxXXx8PWU9PntsZXQgdD1iKHMpIT09YGA7IShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiZlLmtleS5sZW5ndGg9PT0xJiZ0JiZlLmtleT09PWAgYHx8KGIoYykoZS5rZXksYihvKSgpKSxiKGdpKS5pbmNsdWRlcyhlLmtleSkmJih1KCksZS5wcmV2ZW50RGVmYXVsdCgpKSl9fSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgYXJpYS1yZXF1aXJlZGAsYGRpc2FibGVkYCxgZGlyYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLXBsYWNlaG9sZGVyYCxgYXMtY2hpbGRgLGBhc2BdKV0pLF86M30sOCxbYHJlZmVyZW5jZWBdKSl9fSksSmk9Uih7X19uYW1lOmBTZWxlY3RWYWx1ZWAscHJvcHM6e3BsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLHtmb3J3YXJkUmVmOm4sY3VycmVudEVsZW1lbnQ6cn09cmUoKSxpPVNpKCk7TWUoKCk9PntpLnZhbHVlRWxlbWVudD1yfSk7bGV0IGE9TigoKT0+e2xldCBlPVtdLHQ9QXJyYXkuZnJvbShpLm9wdGlvbnNTZXQudmFsdWUpLG49ZT0+dC5maW5kKHQ9PnZpKGUsdC52YWx1ZSxpLmJ5KSk7cmV0dXJuIGU9QXJyYXkuaXNBcnJheShpLm1vZGVsVmFsdWUudmFsdWUpP2kubW9kZWxWYWx1ZS52YWx1ZS5tYXAoZT0+bihlKT8udGV4dENvbnRlbnQ/P2BgKTpbbihpLm1vZGVsVmFsdWUudmFsdWUpPy50ZXh0Q29udGVudD8/YGBdLGUuZmlsdGVyKEJvb2xlYW4pfSksbz1OKCgpPT5hLnZhbHVlLmxlbmd0aD9hLnZhbHVlLmpvaW4oYCwgYCk6dC5wbGFjZWhvbGRlcik7cmV0dXJuKGUscik9PihQKCksSShiKGopLHtyZWY6YihuKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLHN0eWxlOntwb2ludGVyRXZlbnRzOmBub25lYH0sImRhdGEtcGxhY2Vob2xkZXIiOmEudmFsdWUubGVuZ3RoP3ZvaWQgMDp0LnBsYWNlaG9sZGVyfSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGAse3NlbGVjdGVkTGFiZWw6YS52YWx1ZSxtb2RlbFZhbHVlOmIoaSkubW9kZWxWYWx1ZS52YWx1ZX0sKCk9PltoZShzZShvLnZhbHVlKSwxKV0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtcGxhY2Vob2xkZXJgXSkpfX0pLFlpPVIoe19fbmFtZTpgU2VsZWN0Vmlld3BvcnRgLHByb3BzOntub25jZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse25vbmNlOm59PWYodCkscj1oaShuKSxpPU9pKCksYT1pLnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGA/amkoKTp2b2lkIDAse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT1yZSgpO01lKCgpPT57aT8ub25WaWV3cG9ydENoYW5nZShzLnZhbHVlKX0pO2xldCBjPUYoMCk7ZnVuY3Rpb24gbChlKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQse3Nob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOm4sY29udGVudFdyYXBwZXI6cn09YT8/e307aWYobj8udmFsdWUmJnI/LnZhbHVlKXtsZXQgZT1NYXRoLmFicyhjLnZhbHVlLXQuc2Nyb2xsVG9wKTtpZihlPjApe2xldCBuPXdpbmRvdy5pbm5lckhlaWdodC0yMCxpPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUubWluSGVpZ2h0KSxhPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUuaGVpZ2h0KSxvPU1hdGgubWF4KGksYSk7aWYobzxuKXtsZXQgaT1vK2UsYT1NYXRoLm1pbihuLGkpLHM9aS1hO3IudmFsdWUuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLHIudmFsdWUuc3R5bGUuYm90dG9tPT09YDBweGAmJih0LnNjcm9sbFRvcD1zPjA/czowLHIudmFsdWUuc3R5bGUuanVzdGlmeUNvbnRlbnQ9YGZsZXgtZW5kYCl9fX1jLnZhbHVlPXQuc2Nyb2xsVG9wfXJldHVybihlLG4pPT4oUCgpLFRlKGssbnVsbCxbTChiKGopLE0oe3JlZjpiKG8pLCJkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0IjpgYCxyb2xlOmBwcmVzZW50YXRpb25gfSx7Li4uZS4kYXR0cnMsLi4udH0se3N0eWxlOntwb3NpdGlvbjpgcmVsYXRpdmVgLGZsZXg6MSxvdmVyZmxvdzpgaGlkZGVuIGF1dG9gfSxvblNjcm9sbDpsfSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpLEwoYihqKSx7YXM6YHN0eWxlYCxub25jZTpiKHIpfSx7ZGVmYXVsdDpCKCgpPT5uWzBdfHw9W2hlKGAgLyogSGlkZSBzY3JvbGxiYXJzIGNyb3NzLWJyb3dzZXIgYW5kIGVuYWJsZSBtb21lbnR1bSBzY3JvbGwgZm9yIHRvdWNoIGRldmljZXMgKi8gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdIHsgc2Nyb2xsYmFyLXdpZHRoOm5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9IFtkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9IGApXSksXzoxLF9fOlswXX0sOCxbYG5vbmNlYF0pXSw2NCkpfX0pLFhpPVIoe19fbmFtZTpgU2VsZWN0YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFufSxkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxudWxsYWJsZVZhbHVlOnt9LGJ5Ont0eXBlOltTdHJpbmcsRnVuY3Rpb25dfSxkaXI6e30sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbn0sYXV0b2NvbXBsZXRlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LG5hbWU6e30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgLGB1cGRhdGU6b3BlbmBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWEoZSx0KTtyZXR1cm4oZSx0KT0+KFAoKSxJKGIod2kpLE0oeyJkYXRhLXNsb3QiOmBzZWxlY3RgfSxiKG4pKSx7ZGVmYXVsdDpCKHQ9Plt6KGUuJHNsb3RzLGBkZWZhdWx0YCxaZShfZSh0KSkpXSksXzozfSwxNikpfX0pLFppPVIoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LHBvc2l0aW9uOntkZWZhdWx0OmBpdGVtLWFsaWduZWRgfSxib2R5TG9jazp7dHlwZTpCb29sZWFufSxtZW1vRGVwZW5kZW5jaWVzOnt9LHNpZGU6e30sc2lkZU9mZnNldDp7fSxzaWRlRmxpcDp7dHlwZTpCb29sZWFufSxhbGlnbjp7ZGVmYXVsdDpgY2VudGVyYH0sYWxpZ25PZmZzZXQ6e30sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW59LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFufSxjb2xsaXNpb25Cb3VuZGFyeTp7fSxjb2xsaXNpb25QYWRkaW5nOnt9LGFycm93UGFkZGluZzp7fSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW59LHN0aWNreTp7fSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW59LHBvc2l0aW9uU3RyYXRlZ3k6e30sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7fSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFufSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbn0scmVmZXJlbmNlOnt9LGRpcjp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFufSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2BjbG9zZUF1dG9Gb2N1c2AsYGVzY2FwZUtleURvd25gLGBwb2ludGVyRG93bk91dHNpZGVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPUEobixgY2xhc3NgKSxvPWEoaSxyKTtyZXR1cm4odCxyKT0+KFAoKSxJKGIoVWkpLG51bGwse2RlZmF1bHQ6QigoKT0+W0woYihJaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC1jb250ZW50YCwiZGF0YS1hbGlnbi10cmlnZ2VyIjplLnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGB9LHsuLi50LiRhdHRycywuLi5iKG8pfSx7Y2xhc3M6YihwKShgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLW9wZW46YW5pbWF0ZS1pbiBkYXRhLWNsb3NlZDphbmltYXRlLW91dCBkYXRhLWNsb3NlZDpmYWRlLW91dC0wIGRhdGEtb3BlbjpmYWRlLWluLTAgZGF0YS1jbG9zZWQ6em9vbS1vdXQtOTUgZGF0YS1vcGVuOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmluZy1mb3JlZ3JvdW5kLzEwIG1pbi13LTM2IHJvdW5kZWQtbGcgc2hhZG93LW1kIHJpbmctMSBkdXJhdGlvbi0xMDAgZGF0YS1bc2lkZT1pbmxpbmUtc3RhcnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPWlubGluZS1lbmRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGNuLW1lbnUtdHJhbnNsdWNlbnQgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG9yaWdpbi0oLS1yZWthLXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byBkYXRhLVthbGlnbi10cmlnZ2VyPXRydWVdOmFuaW1hdGUtbm9uZWAsZS5wb3NpdGlvbj09PWBwb3BwZXJgJiZgZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMWAsbi5jbGFzcyl9KSx7ZGVmYXVsdDpCKCgpPT5bTChiKHRhKSksTChiKFlpKSx7ImRhdGEtcG9zaXRpb24iOmUucG9zaXRpb24sY2xhc3M6ZWUoYihwKShgZGF0YS1bcG9zaXRpb249cG9wcGVyXTpoLSgtLXJla2Etc2VsZWN0LXRyaWdnZXItaGVpZ2h0KSBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOnctZnVsbCBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOm1pbi13LSgtLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgpYCkpfSx7ZGVmYXVsdDpCKCgpPT5beih0LiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgZGF0YS1wb3NpdGlvbmAsYGNsYXNzYF0pLEwoYihlYSkpXSksXzozfSwxNixbYGRhdGEtYWxpZ24tdHJpZ2dlcmAsYGNsYXNzYF0pXSksXzozfSkpfX0pLFFpPXtjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcmB9LCRpPVIoe19fbmFtZTpgU2VsZWN0SXRlbWAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LHRleHRWYWx1ZTp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2ApLHI9S2Uobik7cmV0dXJuKGUsbik9PihQKCksSShiKEJpKSxNKHsiZGF0YS1zbG90Ijpgc2VsZWN0LWl0ZW1gfSxiKHIpLHtjbGFzczpiKHApKGBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBub3QtZGF0YS1bdmFyaWFudD1kZXN0cnVjdGl2ZV06Zm9jdXM6Kio6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBnYXAtMS41IHJvdW5kZWQtbWQgcHktMSBwci04IHBsLTEuNSB0ZXh0LXNtIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTIgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCx0LmNsYXNzKX0pLHtkZWZhdWx0OkIoKCk9PltIZShgc3BhbmAsUWksW0woYihWaSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgaW5kaWNhdG9yLWljb25gLHt9LCgpPT5bTChiKGxlKSx7aWNvbjpiKHYpLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIHNpemUtMy41YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSldKSxMKGIoSGkpLG51bGwse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxlYT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2ApLHI9S2Uobik7cmV0dXJuKGUsbik9PihQKCksSShiKEdpKSxNKHsiZGF0YS1zbG90Ijpgc2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvbmB9LGIocikse2NsYXNzOmIocCkoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6QigoKT0+W3ooZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bTChiKGxlKSx7aWNvbjpiKExlKSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSx0YT1SKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUEodCxgY2xhc3NgKSxyPUtlKG4pO3JldHVybihlLG4pPT4oUCgpLEkoYihLaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uYH0sYihyKSx7Y2xhc3M6YihwKShgYmctcG9wb3ZlciB6LTEwIGZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGAse30sKCk9PltMKGIobGUpLHtpY29uOmIoXyksY2xhc3M6YHNpemUtNGB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksbmE9Uih7X19uYW1lOmBTZWxlY3RUcmlnZ2VyYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0scmVmZXJlbmNlOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lLG49QSh0LGBjbGFzc2AsYHNpemVgKSxyPUtlKG4pO3JldHVybihuLGkpPT4oUCgpLEkoYihxaSksTSh7ImRhdGEtc2xvdCI6YHNlbGVjdC10cmlnZ2VyYCwiZGF0YS1zaXplIjplLnNpemV9LGIocikse2NsYXNzOmIocCkoYGJvcmRlci1pbnB1dCBkYXRhLXBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGdhcC0xLjUgcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHktMiBwci0yIHBsLTIuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTggZGF0YS1bc2l6ZT1zbV06aC03IGRhdGEtW3NpemU9c21dOnJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHdoaXRlc3BhY2Utbm93cmFwIG91dGxpbmUtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6QigoKT0+W3oobi4kc2xvdHMsYGRlZmF1bHRgKSxMKGIoTGkpLHsiYXMtY2hpbGQiOmBgfSx7ZGVmYXVsdDpCKCgpPT5bTChiKGxlKSx7aWNvbjpiKExlKSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHNpemUtNCBwb2ludGVyLWV2ZW50cy1ub25lYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pXSksXzozfSwxNixbYGRhdGEtc2l6ZWAsYGNsYXNzYF0pKX19KSxyYT1SKHtfX25hbWU6YFNlbGVjdFZhbHVlYCxwcm9wczp7cGxhY2Vob2xkZXI6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFAoKSxJKGIoSmkpLE0oeyJkYXRhLXNsb3QiOmBzZWxlY3QtdmFsdWVgfSx0KSx7ZGVmYXVsdDpCKCgpPT5beihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pO2Z1bmN0aW9uIGlhKGUpe3JldHVybiBlKy41fDB9dmFyIGFhPShlLHQsbik9Pk1hdGgubWF4KE1hdGgubWluKGUsbiksdCk7ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGFhKGlhKGUqMi41NSksMCwyNTUpfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBhYShpYShlKjI1NSksMCwyNTUpfWZ1bmN0aW9uIGNhKGUpe3JldHVybiBhYShpYShlLzIuNTUpLzEwMCwwLDEpfWZ1bmN0aW9uIGxhKGUpe3JldHVybiBhYShpYShlKjEwMCksMCwxMDApfXZhciB1YT17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LEE6MTAsQjoxMSxDOjEyLEQ6MTMsRToxNCxGOjE1LGE6MTAsYjoxMSxjOjEyLGQ6MTMsZToxNCxmOjE1fSxkYT1bLi4uYDAxMjM0NTY3ODlBQkNERUZgXSxmYT1lPT5kYVtlJjE1XSxwYT1lPT5kYVsoZSYyNDApPj40XStkYVtlJjE1XSxtYT1lPT4oZSYyNDApPj40PT0oZSYxNSksaGE9ZT0+bWEoZS5yKSYmbWEoZS5nKSYmbWEoZS5iKSYmbWEoZS5hKTtmdW5jdGlvbiBnYShlKXt2YXIgdD1lLmxlbmd0aCxuO3JldHVybiBlWzBdPT09YCNgJiYodD09PTR8fHQ9PT01P249e3I6MjU1JnVhW2VbMV1dKjE3LGc6MjU1JnVhW2VbMl1dKjE3LGI6MjU1JnVhW2VbM11dKjE3LGE6dD09PTU/dWFbZVs0XV0qMTc6MjU1fToodD09PTd8fHQ9PT05KSYmKG49e3I6dWFbZVsxXV08PDR8dWFbZVsyXV0sZzp1YVtlWzNdXTw8NHx1YVtlWzRdXSxiOnVhW2VbNV1dPDw0fHVhW2VbNl1dLGE6dD09PTk/dWFbZVs3XV08PDR8dWFbZVs4XV06MjU1fSkpLG59dmFyIF9hPShlLHQpPT5lPDI1NT90KGUpOmBgO2Z1bmN0aW9uIHZhKGUpe3ZhciB0PWhhKGUpP2ZhOnBhO3JldHVybiBlP2AjYCt0KGUucikrdChlLmcpK3QoZS5iKStfYShlLmEsdCk6dm9pZCAwfXZhciB5YT0vXihoc2xhP3xod2J8aHN2KVwoXHMqKFstKy5lXGRdKykoPzpkZWcpP1tccyxdKyhbLSsuZVxkXSspJVtccyxdKyhbLSsuZVxkXSspJSg/OltccyxdKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiBiYShlLHQsbil7bGV0IHI9dCpNYXRoLm1pbihuLDEtbiksaT0odCxpPSh0K2UvMzApJTEyKT0+bi1yKk1hdGgubWF4KE1hdGgubWluKGktMyw5LWksMSksLTEpO3JldHVybltpKDApLGkoOCksaSg0KV19ZnVuY3Rpb24geGEoZSx0LG4pe2xldCByPShyLGk9KHIrZS82MCklNik9Pm4tbip0Kk1hdGgubWF4KE1hdGgubWluKGksNC1pLDEpLDApO3JldHVybltyKDUpLHIoMykscigxKV19ZnVuY3Rpb24gU2EoZSx0LG4pe2xldCByPWJhKGUsMSwuNSksaTtmb3IodCtuPjEmJihpPTEvKHQrbiksdCo9aSxuKj1pKSxpPTA7aTwzO2krKylyW2ldKj0xLXQtbixyW2ldKz10O3JldHVybiByfWZ1bmN0aW9uIENhKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT1pPyh0LW4pL3IrKHQ8bj82OjApOnQ9PT1pPyhuLWUpL3IrMjooZS10KS9yKzR9ZnVuY3Rpb24gd2EoZSl7bGV0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9TWF0aC5tYXgodCxuLHIpLGE9TWF0aC5taW4odCxuLHIpLG89KGkrYSkvMixzLGMsbDtyZXR1cm4gaSE9PWEmJihsPWktYSxjPW8+LjU/bC8oMi1pLWEpOmwvKGkrYSkscz1DYSh0LG4scixsLGkpLHM9cyo2MCsuNSksW3N8MCxjfHwwLG9dfWZ1bmN0aW9uIFRhKGUsdCxuLHIpe3JldHVybihBcnJheS5pc0FycmF5KHQpP2UodFswXSx0WzFdLHRbMl0pOmUodCxuLHIpKS5tYXAoc2EpfWZ1bmN0aW9uIEVhKGUsdCxuKXtyZXR1cm4gVGEoYmEsZSx0LG4pfWZ1bmN0aW9uIERhKGUsdCxuKXtyZXR1cm4gVGEoU2EsZSx0LG4pfWZ1bmN0aW9uIE9hKGUsdCxuKXtyZXR1cm4gVGEoeGEsZSx0LG4pfWZ1bmN0aW9uIGthKGUpe3JldHVybihlJTM2MCszNjApJTM2MH1mdW5jdGlvbiBBYShlKXtsZXQgdD15YS5leGVjKGUpLG49MjU1LHI7aWYoIXQpcmV0dXJuO3RbNV0hPT1yJiYobj10WzZdP29hKCt0WzVdKTpzYSgrdFs1XSkpO2xldCBpPWthKCt0WzJdKSxhPXRbM10vMTAwLG89dFs0XS8xMDA7cmV0dXJuIHI9dFsxXT09PWBod2JgP0RhKGksYSxvKTp0WzFdPT09YGhzdmA/T2EoaSxhLG8pOkVhKGksYSxvKSx7cjpyWzBdLGc6clsxXSxiOnJbMl0sYTpufX1mdW5jdGlvbiBqYShlLHQpe3ZhciBuPXdhKGUpO25bMF09a2EoblswXSt0KSxuPUVhKG4pLGUucj1uWzBdLGUuZz1uWzFdLGUuYj1uWzJdfWZ1bmN0aW9uIE1hKGUpe2lmKCFlKXJldHVybjtsZXQgdD13YShlKSxuPXRbMF0scj1sYSh0WzFdKSxpPWxhKHRbMl0pO3JldHVybiBlLmE8MjU1P2Boc2xhKCR7bn0sICR7cn0lLCAke2l9JSwgJHtjYShlLmEpfSlgOmBoc2woJHtufSwgJHtyfSUsICR7aX0lKWB9dmFyIE5hPXt4OmBkYXJrYCxaOmBsaWdodGAsWTpgcmVgLFg6YGJsdWAsVzpgZ3JgLFY6YG1lZGl1bWAsVTpgc2xhdGVgLEE6YGVlYCxUOmBvbGAsUzpgb3JgLEI6YHJhYCxDOmBsYXRlZ2AsRDpgaWdodHNgLFI6YGluYCxROmB0dXJxdW9pc2AsRTpgaGlgLFA6YHJvYCxPOmBhbGAsTjpgbGVgLE06YGRlYCxMOmB5ZWxsb2AsRjpgZW5gLEs6YGNoYCxHOmBhcmtzYCxIOmBlYWAsSTpgaWdodGdgLEo6YHdoYH0sUGE9e09pY2VYZTpgZjBmOGZmYCxhbnRpcXVld0V0ZTpgZmFlYmQ3YCxhcXVhOmBmZmZmYCxhcXVhbWFyUmU6YDdmZmZkNGAsYXp1WTpgZjBmZmZmYCxiZWlnZTpgZjVmNWRjYCxiaXNxdWU6YGZmZTRjNGAsYmxhY2s6YDBgLGJsYW5LZWRPbW9uZDpgZmZlYmNkYCxYZTpgZmZgLFhldmlUZXQ6YDhhMmJlMmAsYlB3bjpgYTUyYTJhYCxidXJseXdvb2Q6YGRlYjg4N2AsY2FNdFhlOmA1ZjllYTBgLEthcnRZdXNlOmA3ZmZmMDBgLEtvY1RhdGU6YGQyNjkxZWAsY1NPOmBmZjdmNTBgLGNTbmZsb3dlclhlOmA2NDk1ZWRgLGNTbnNpbGs6YGZmZjhkY2AsY3JpbXNvbjpgZGMxNDNjYCxjeWFuOmBmZmZmYCx4WGU6YDhiYCx4Y3lhbjpgOGI4YmAseGdUTW5QZDpgYjg4NjBiYCx4V2F5OmBhOWE5YTlgLHhnWUY6YDY0MDBgLHhnWXk6YGE5YTlhOWAseGtoYWtpOmBiZGI3NmJgLHhtYWdGdGE6YDhiMDA4YmAseFRpdmVnWUY6YDU1NmIyZmAseFNhbmdlOmBmZjhjMDBgLHhTY0VkOmA5OTMyY2NgLHhZZDpgOGIwMDAwYCx4c09tb246YGU5OTY3YWAseHNIZ1lGOmA4ZmJjOGZgLHhVWGU6YDQ4M2Q4YmAseFVXYXk6YDJmNGY0ZmAseFVnWXk6YDJmNGY0ZmAseFFlOmBjZWQxYCx4dmlUZXQ6YDk0MDBkM2AsZEFwcFJrOmBmZjE0OTNgLGRBcHNreVhlOmBiZmZmYCxkaW1XYXk6YDY5Njk2OWAsZGltZ1l5OmA2OTY5NjlgLGRvZGdlclhlOmAxZTkwZmZgLGZpWWJyaWNrOmBiMjIyMjJgLGZsU093RXRlOmBmZmZhZjBgLGZvWXN0V0FuOmAyMjhiMjJgLGZ1S3NpYTpgZmYwMGZmYCxnYVJzYlNvOmBkY2RjZGNgLGdob3N0d0V0ZTpgZjhmOGZmYCxnVGQ6YGZmZDcwMGAsZ1RNblBkOmBkYWE1MjBgLFdheTpgODA4MDgwYCxnWUY6YDgwMDBgLGdZRkx3OmBhZGZmMmZgLGdZeTpgODA4MDgwYCxob25leU13OmBmMGZmZjBgLGhvdHBSazpgZmY2OWI0YCxSZGlhbllkOmBjZDVjNWNgLFJkaWdvOmA0YjAwODJgLGl2U3k6YGZmZmZmMGAsa2hha2k6YGYwZTY4Y2AsbGF2Rk1yOmBlNmU2ZmFgLGxhdkZNclhzaDpgZmZmMGY1YCxsYXduZ1lGOmA3Y2ZjMDBgLE5tb25jRWZmb246YGZmZmFjZGAsWlhlOmBhZGQ4ZTZgLFpjU086YGYwODA4MGAsWmN5YW46YGUwZmZmZmAsWmdUTW5QZEx3OmBmYWZhZDJgLFpXYXk6YGQzZDNkM2AsWmdZRjpgOTBlZTkwYCxaZ1l5OmBkM2QzZDNgLFpwUms6YGZmYjZjMWAsWnNPbW9uOmBmZmEwN2FgLFpzSGdZRjpgMjBiMmFhYCxac2t5WGU6YDg3Y2VmYWAsWlVXYXk6YDc3ODg5OWAsWlVnWXk6YDc3ODg5OWAsWnN0QWxYZTpgYjBjNGRlYCxaTHc6YGZmZmZlMGAsbGltZTpgZmYwMGAsbGltZWdZRjpgMzJjZDMyYCxsUkY6YGZhZjBlNmAsbWFnRnRhOmBmZjAwZmZgLG1hUG9uOmA4MDAwMDBgLFZhcXVhbWFyUmU6YDY2Y2RhYWAsVlhlOmBjZGAsVlNjRWQ6YGJhNTVkM2AsVnB1cnBOOmA5MzcwZGJgLFZzSGdZRjpgM2NiMzcxYCxWVVhlOmA3YjY4ZWVgLFZzcHJSZ2dZRjpgZmE5YWAsVlFlOmA0OGQxY2NgLFZ2aVRldFlkOmBjNzE1ODVgLG1pZG5pZ2h0WGU6YDE5MTk3MGAsbVJ0Y1lhbTpgZjVmZmZhYCxtaXN0eVBzZTpgZmZlNGUxYCxtb2NjYXNSOmBmZmU0YjVgLG5hdmFqb3dFdGU6YGZmZGVhZGAsbmF2eTpgODBgLFRkbGFjZTpgZmRmNWU2YCxUaXZlOmA4MDgwMDBgLFRpdmVkQmI6YDZiOGUyM2AsU2FuZ2U6YGZmYTUwMGAsU2FuZ2VZZDpgZmY0NTAwYCxTY0VkOmBkYTcwZDZgLHBPZWdUTW5QZDpgZWVlOGFhYCxwT2VnWUY6YDk4ZmI5OGAscE9lUWU6YGFmZWVlZWAscE9ldmlUZXRZZDpgZGI3MDkzYCxwYXBheWF3RXA6YGZmZWZkNWAscEhLcHVmZjpgZmZkYWI5YCxwZXJ1OmBjZDg1M2ZgLHBSazpgZmZjMGNiYCxwbHVtOmBkZGEwZGRgLHBvd01yWGU6YGIwZTBlNmAscHVycE46YDgwMDA4MGAsWWJlY2NhcHVycE46YDY2MzM5OWAsWWQ6YGZmMDAwMGAsUHN5YnJvd246YGJjOGY4ZmAsUHlPWGU6YDQxNjllMWAsc2FkZE5iUHduOmA4YjQ1MTNgLHNPbW9uOmBmYTgwNzJgLHNhbmR5YlB3bjpgZjRhNDYwYCxzSGdZRjpgMmU4YjU3YCxzSHNoZWxsOmBmZmY1ZWVgLHNpRm5hOmBhMDUyMmRgLHNpbHZlcjpgYzBjMGMwYCxza3lYZTpgODdjZWViYCxVWGU6YDZhNWFjZGAsVVdheTpgNzA4MDkwYCxVZ1l5OmA3MDgwOTBgLHNub3c6YGZmZmFmYWAsc3ByUmdnWUY6YGZmN2ZgLHN0QWxYZTpgNDY4MmI0YCx0YW46YGQyYjQ4Y2AsdGVPOmA4MDgwYCx0RXN0TjpgZDhiZmQ4YCx0b21hdG86YGZmNjM0N2AsUWU6YDQwZTBkMGAsdmlUZXQ6YGVlODJlZWAsSkh0OmBmNWRlYjNgLHdFdGU6YGZmZmZmZmAsd0V0ZXNtb2tlOmBmNWY1ZjVgLEx3OmBmZmZmMDBgLEx3Z1lGOmA5YWNkMzJgfTtmdW5jdGlvbiBGYSgpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoUGEpLG49T2JqZWN0LmtleXMoTmEpLHIsaSxhLG8scztmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3Iobz1zPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWE9bltpXSxzPXMucmVwbGFjZShhLE5hW2FdKTthPXBhcnNlSW50KFBhW29dLDE2KSxlW3NdPVthPj4xNiYyNTUsYT4+OCYyNTUsYSYyNTVdfXJldHVybiBlfXZhciBJYTtmdW5jdGlvbiBMYShlKXtJYXx8KElhPUZhKCksSWEudHJhbnNwYXJlbnQ9WzAsMCwwLDBdKTtsZXQgdD1JYVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB0JiZ7cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0Lmxlbmd0aD09PTQ/dFszXToyNTV9fXZhciBSYT0vXnJnYmE/XChccyooWy0rLlxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpPyg/OltccywvXSsoWy0rLmVcZF0rKSglKT8pP1xzKlwpJC87ZnVuY3Rpb24gemEoZSl7bGV0IHQ9UmEuZXhlYyhlKSxuPTI1NSxyLGksYTtpZih0KXtpZih0WzddIT09cil7bGV0IGU9K3RbN107bj10WzhdP29hKGUpOmFhKGUqMjU1LDAsMjU1KX1yZXR1cm4gcj0rdFsxXSxpPSt0WzNdLGE9K3RbNV0scj0yNTUmKHRbMl0/b2Eocik6YWEociwwLDI1NSkpLGk9MjU1Jih0WzRdP29hKGkpOmFhKGksMCwyNTUpKSxhPTI1NSYodFs2XT9vYShhKTphYShhLDAsMjU1KSkse3IsZzppLGI6YSxhOm59fX1mdW5jdGlvbiBCYShlKXtyZXR1cm4gZSYmKGUuYTwyNTU/YHJnYmEoJHtlLnJ9LCAke2UuZ30sICR7ZS5ifSwgJHtjYShlLmEpfSlgOmByZ2IoJHtlLnJ9LCAke2UuZ30sICR7ZS5ifSlgKX12YXIgVmE9ZT0+ZTw9LjAwMzEzMDg/ZSoxMi45MjplKiooMS8yLjQpKjEuMDU1LS4wNTUsSGE9ZT0+ZTw9LjA0MDQ1P2UvMTIuOTI6KChlKy4wNTUpLzEuMDU1KSoqMi40O2Z1bmN0aW9uIFVhKGUsdCxuKXtsZXQgcj1IYShjYShlLnIpKSxpPUhhKGNhKGUuZykpLGE9SGEoY2EoZS5iKSk7cmV0dXJue3I6c2EoVmEocituKihIYShjYSh0LnIpKS1yKSkpLGc6c2EoVmEoaStuKihIYShjYSh0LmcpKS1pKSkpLGI6c2EoVmEoYStuKihIYShjYSh0LmIpKS1hKSkpLGE6ZS5hK24qKHQuYS1lLmEpfX1mdW5jdGlvbiBXYShlLHQsbil7aWYoZSl7bGV0IHI9d2EoZSk7clt0XT1NYXRoLm1heCgwLE1hdGgubWluKHJbdF0rclt0XSpuLHQ9PT0wPzM2MDoxKSkscj1FYShyKSxlLnI9clswXSxlLmc9clsxXSxlLmI9clsyXX19ZnVuY3Rpb24gR2EoZSx0KXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbih0fHx7fSxlKX1mdW5jdGlvbiBLYShlKXt2YXIgdD17cjowLGc6MCxiOjAsYToyNTV9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoPj0zJiYodD17cjplWzBdLGc6ZVsxXSxiOmVbMl0sYToyNTV9LGUubGVuZ3RoPjMmJih0LmE9c2EoZVszXSkpKToodD1HYShlLHtyOjAsZzowLGI6MCxhOjF9KSx0LmE9c2EodC5hKSksdH1mdW5jdGlvbiBxYShlKXtyZXR1cm4gZS5jaGFyQXQoMCk9PT1gcmA/emEoZSk6QWEoZSl9dmFyIEphPWNsYXNzIGV7Y29uc3RydWN0b3IodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7bGV0IG49dHlwZW9mIHQscjtuPT09YG9iamVjdGA/cj1LYSh0KTpuPT09YHN0cmluZ2AmJihyPWdhKHQpfHxMYSh0KXx8cWEodCkpLHRoaXMuX3JnYj1yLHRoaXMuX3ZhbGlkPSEhcn1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5fdmFsaWR9Z2V0IHJnYigpe3ZhciBlPUdhKHRoaXMuX3JnYik7cmV0dXJuIGUmJihlLmE9Y2EoZS5hKSksZX1zZXQgcmdiKGUpe3RoaXMuX3JnYj1LYShlKX1yZ2JTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/QmEodGhpcy5fcmdiKTp2b2lkIDB9aGV4U3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP3ZhKHRoaXMuX3JnYik6dm9pZCAwfWhzbFN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9NYSh0aGlzLl9yZ2IpOnZvaWQgMH1taXgoZSx0KXtpZihlKXtsZXQgbj10aGlzLnJnYixyPWUucmdiLGksYT10PT09aT8uNTp0LG89MiphLTEscz1uLmEtci5hLGM9KChvKnM9PT0tMT9vOihvK3MpLygxK28qcykpKzEpLzI7aT0xLWMsbi5yPTI1NSZjKm4ucitpKnIucisuNSxuLmc9MjU1JmMqbi5nK2kqci5nKy41LG4uYj0yNTUmYypuLmIraSpyLmIrLjUsbi5hPWEqbi5hKygxLWEpKnIuYSx0aGlzLnJnYj1ufXJldHVybiB0aGlzfWludGVycG9sYXRlKGUsdCl7cmV0dXJuIGUmJih0aGlzLl9yZ2I9VWEodGhpcy5fcmdiLGUuX3JnYix0KSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLnJnYil9YWxwaGEoZSl7cmV0dXJuIHRoaXMuX3JnYi5hPXNhKGUpLHRoaXN9Y2xlYXJlcihlKXtsZXQgdD10aGlzLl9yZ2I7cmV0dXJuIHQuYSo9MS1lLHRoaXN9Z3JleXNjYWxlKCl7bGV0IGU9dGhpcy5fcmdiO3JldHVybiBlLnI9ZS5nPWUuYj1pYShlLnIqLjMrZS5nKi41OStlLmIqLjExKSx0aGlzfW9wYXF1ZXIoZSl7bGV0IHQ9dGhpcy5fcmdiO3JldHVybiB0LmEqPTErZSx0aGlzfW5lZ2F0ZSgpe2xldCBlPXRoaXMuX3JnYjtyZXR1cm4gZS5yPTI1NS1lLnIsZS5nPTI1NS1lLmcsZS5iPTI1NS1lLmIsdGhpc31saWdodGVuKGUpe3JldHVybiBXYSh0aGlzLl9yZ2IsMixlKSx0aGlzfWRhcmtlbihlKXtyZXR1cm4gV2EodGhpcy5fcmdiLDIsLWUpLHRoaXN9c2F0dXJhdGUoZSl7cmV0dXJuIFdhKHRoaXMuX3JnYiwxLGUpLHRoaXN9ZGVzYXR1cmF0ZShlKXtyZXR1cm4gV2EodGhpcy5fcmdiLDEsLWUpLHRoaXN9cm90YXRlKGUpe3JldHVybiBqYSh0aGlzLl9yZ2IsZSksdGhpc319O2Z1bmN0aW9uIFlhKCl7fXZhciBYYT0oKCk9PntsZXQgZT0wO3JldHVybigpPT5lKyt9KSgpO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIGU9PW51bGx9ZnVuY3Rpb24gVyhlKXtpZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2xldCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gdC5zbGljZSgwLDcpPT09YFtvYmplY3RgJiZ0LnNsaWNlKC02KT09PWBBcnJheV1gfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUhPT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBPYmplY3RdYH1mdW5jdGlvbiBLKGUpe3JldHVybih0eXBlb2YgZT09YG51bWJlcmB8fGUgaW5zdGFuY2VvZiBOdW1iZXIpJiZpc0Zpbml0ZSgrZSl9ZnVuY3Rpb24gWmEoZSx0KXtyZXR1cm4gSyhlKT9lOnR9ZnVuY3Rpb24gcShlLHQpe3JldHVybiBlPT09dm9pZCAwP3Q6ZX12YXIgUWE9KGUsdCk9PnR5cGVvZiBlPT1gc3RyaW5nYCYmZS5lbmRzV2l0aChgJWApP3BhcnNlRmxvYXQoZSkvMTAwKnQ6K2U7ZnVuY3Rpb24gSihlLHQsbil7aWYoZSYmdHlwZW9mIGUuY2FsbD09YGZ1bmN0aW9uYClyZXR1cm4gZS5hcHBseShuLHQpfWZ1bmN0aW9uIFkoZSx0LG4scil7bGV0IGksYSxvO2lmKFcoZSkpe2lmKGE9ZS5sZW5ndGgscilmb3IoaT1hLTE7aT49MDtpLS0pdC5jYWxsKG4sZVtpXSxpKTtlbHNlIGZvcihpPTA7aTxhO2krKyl0LmNhbGwobixlW2ldLGkpfWVsc2UgaWYoRyhlKSlmb3Iobz1PYmplY3Qua2V5cyhlKSxhPW8ubGVuZ3RoLGk9MDtpPGE7aSsrKXQuY2FsbChuLGVbb1tpXV0sb1tpXSl9ZnVuY3Rpb24gJGEoZSx0KXtsZXQgbixyLGksYTtpZighZXx8IXR8fGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24paWYoaT1lW25dLGE9dFtuXSxpLmRhdGFzZXRJbmRleCE9PWEuZGF0YXNldEluZGV4fHxpLmluZGV4IT09YS5pbmRleClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlbyhlKXtpZihXKGUpKXJldHVybiBlLm1hcChlbyk7aWYoRyhlKSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPU9iamVjdC5rZXlzKGUpLHI9bi5sZW5ndGgsaT0wO2Zvcig7aTxyOysraSl0W25baV1dPWVvKGVbbltpXV0pO3JldHVybiB0fXJldHVybiBlfWZ1bmN0aW9uIHRvKGUpe3JldHVybltgX19wcm90b19fYCxgcHJvdG90eXBlYCxgY29uc3RydWN0b3JgXS5pbmRleE9mKGUpPT09LTF9ZnVuY3Rpb24gbm8oZSx0LG4scil7aWYoIXRvKGUpKXJldHVybjtsZXQgaT10W2VdLGE9bltlXTtHKGkpJiZHKGEpP3JvKGksYSxyKTp0W2VdPWVvKGEpfWZ1bmN0aW9uIHJvKGUsdCxuKXtsZXQgcj1XKHQpP3Q6W3RdLGk9ci5sZW5ndGg7aWYoIUcoZSkpcmV0dXJuIGU7bnx8PXt9O2xldCBhPW4ubWVyZ2VyfHxubyxvO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2lmKG89clt0XSwhRyhvKSljb250aW51ZTtsZXQgaT1PYmplY3Qua2V5cyhvKTtmb3IobGV0IHQ9MCxyPWkubGVuZ3RoO3Q8cjsrK3QpYShpW3RdLGUsbyxuKX1yZXR1cm4gZX1mdW5jdGlvbiBpbyhlLHQpe3JldHVybiBybyhlLHQse21lcmdlcjphb30pfWZ1bmN0aW9uIGFvKGUsdCxuKXtpZighdG8oZSkpcmV0dXJuO2xldCByPXRbZV0saT1uW2VdO0cocikmJkcoaSk/aW8ocixpKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKXx8KHRbZV09ZW8oaSkpfXZhciBvbz17IiI6ZT0+ZSx4OmU9PmUueCx5OmU9PmUueX07ZnVuY3Rpb24gc28oZSl7bGV0IHQ9ZS5zcGxpdChgLmApLG49W10scj1gYDtmb3IobGV0IGUgb2YgdClyKz1lLHIuZW5kc1dpdGgoYFxcYCk/cj1yLnNsaWNlKDAsLTEpK2AuYDoobi5wdXNoKHIpLHI9YGApO3JldHVybiBufWZ1bmN0aW9uIGNvKGUpe2xldCB0PXNvKGUpO3JldHVybiBlPT57Zm9yKGxldCBuIG9mIHQpe2lmKG49PT1gYClicmVhaztlJiY9ZVtuXX1yZXR1cm4gZX19ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4ob29bdF18fChvb1t0XT1jbyh0KSkpKGUpfWZ1bmN0aW9uIHVvKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9dmFyIGZvPWU9PmUhPT12b2lkIDAscG89ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAsbW89KGUsdCk9PntpZihlLnNpemUhPT10LnNpemUpcmV0dXJuITE7Zm9yKGxldCBuIG9mIGUpaWYoIXQuaGFzKG4pKXJldHVybiExO3JldHVybiEwfTtmdW5jdGlvbiBobyhlKXtyZXR1cm4gZS50eXBlPT09YG1vdXNldXBgfHxlLnR5cGU9PT1gY2xpY2tgfHxlLnR5cGU9PT1gY29udGV4dG1lbnVgfXZhciBYPU1hdGguUEksZ289MipYO2dvK1g7dmFyIF9vPTEvMCx2bz1YLzE4MCx5bz1YLzIsYm89WC80LHhvPVgqMi8zLFNvPU1hdGgubG9nMTAsQ289TWF0aC5zaWduO2Z1bmN0aW9uIHdvKGUsdCxuKXtyZXR1cm4gTWF0aC5hYnMoZS10KTxufWZ1bmN0aW9uIFRvKGUpe2xldCB0PU1hdGgucm91bmQoZSk7ZT13byhlLHQsZS8xZTMpP3Q6ZTtsZXQgbj0xMCoqTWF0aC5mbG9vcihTbyhlKSkscj1lL247cmV0dXJuKHI8PTE/MTpyPD0yPzI6cjw9NT81OjEwKSpufWZ1bmN0aW9uIEVvKGUpe2xldCB0PVtdLG49TWF0aC5zcXJ0KGUpLHI7Zm9yKHI9MTtyPG47cisrKWUlcj09PTAmJih0LnB1c2gociksdC5wdXNoKGUvcikpO3JldHVybiBuPT09KG58MCkmJnQucHVzaChuKSx0LnNvcnQoKGUsdCk9PmUtdCkucG9wKCksdH1mdW5jdGlvbiBEbyhlKXtyZXR1cm4gdHlwZW9mIGU9PWBzeW1ib2xgfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIShTeW1ib2wudG9QcmltaXRpdmUgaW4gZXx8YHRvU3RyaW5nYGluIGV8fGB2YWx1ZU9mYGluIGUpfWZ1bmN0aW9uIE9vKGUpe3JldHVybiFEbyhlKSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBrbyhlLHQpe2xldCBuPU1hdGgucm91bmQoZSk7cmV0dXJuIG4tdDw9ZSYmbit0Pj1lfWZ1bmN0aW9uIEFvKGUsdCxuKXtsZXQgcixpLGE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYT1lW3JdW25dLGlzTmFOKGEpfHwodC5taW49TWF0aC5taW4odC5taW4sYSksdC5tYXg9TWF0aC5tYXgodC5tYXgsYSkpfWZ1bmN0aW9uIGpvKGUpe3JldHVybiBYLzE4MCplfWZ1bmN0aW9uIE1vKGUpe3JldHVybiAxODAvWCplfWZ1bmN0aW9uIE5vKGUpe2lmKCFLKGUpKXJldHVybjtsZXQgdD0xLG49MDtmb3IoO01hdGgucm91bmQoZSp0KS90IT09ZTspdCo9MTAsbisrO3JldHVybiBufWZ1bmN0aW9uIFBvKGUsdCl7bGV0IG49dC54LWUueCxyPXQueS1lLnksaT1NYXRoLnNxcnQobipuK3IqciksYT1NYXRoLmF0YW4yKHIsbik7cmV0dXJuIGE8LS41KlgmJihhKz1nbykse2FuZ2xlOmEsZGlzdGFuY2U6aX19ZnVuY3Rpb24gRm8oZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KCh0LngtZS54KSoqMisodC55LWUueSkqKjIpfWZ1bmN0aW9uIElvKGUpe3JldHVybihlJWdvK2dvKSVnb31mdW5jdGlvbiBMbyhlLHQsbixyKXtsZXQgaT1JbyhlKSxhPUlvKHQpLG89SW8obikscz1JbyhhLWkpLGM9SW8oby1pKSxsPUlvKGktYSksdT1JbyhpLW8pO3JldHVybiBpPT09YXx8aT09PW98fHImJmE9PT1vfHxzPmMmJmw8dX1mdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4obixlKSl9ZnVuY3Rpb24gem8oZSl7cmV0dXJuIFJvKGUsLTMyNzY4LDMyNzY3KX1mdW5jdGlvbiBCbyhlLHQsbixyPTFlLTYpe3JldHVybiBlPj1NYXRoLm1pbih0LG4pLXImJmU8PU1hdGgubWF4KHQsbikrcn1mdW5jdGlvbiBWbyhlLHQsbil7bnx8PShuPT5lW25dPHQpO2xldCByPWUubGVuZ3RoLTEsaT0wLGE7Zm9yKDtyLWk+MTspYT1pK3I+PjEsbihhKT9pPWE6cj1hO3JldHVybntsbzppLGhpOnJ9fXZhciBIbz0oZSx0LG4scik9PlZvKGUsbixyP3I9PntsZXQgaT1lW3JdW3RdO3JldHVybiBpPG58fGk9PT1uJiZlW3IrMV1bdF09PT1ufTpyPT5lW3JdW3RdPG4pLFVvPShlLHQsbik9PlZvKGUsbixyPT5lW3JdW3RdPj1uKTtmdW5jdGlvbiBXbyhlLHQsbil7bGV0IHI9MCxpPWUubGVuZ3RoO2Zvcig7cjxpJiZlW3JdPHQ7KXIrKztmb3IoO2k+ciYmZVtpLTFdPm47KWktLTtyZXR1cm4gcj4wfHxpPGUubGVuZ3RoP2Uuc2xpY2UocixpKTplfXZhciBHbz1bYHB1c2hgLGBwb3BgLGBzaGlmdGAsYHNwbGljZWAsYHVuc2hpZnRgXTtmdW5jdGlvbiBLbyhlLHQpe2lmKGUuX2NoYXJ0anMpe2UuX2NoYXJ0anMubGlzdGVuZXJzLnB1c2godCk7cmV0dXJufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2hhcnRqcyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOntsaXN0ZW5lcnM6W3RdfX0pLEdvLmZvckVhY2godD0+e2xldCBuPWBfb25EYXRhYCt1byh0KSxyPWVbdF07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWUoLi4udCl7bGV0IGk9ci5hcHBseSh0aGlzLHQpO3JldHVybiBlLl9jaGFydGpzLmxpc3RlbmVycy5mb3JFYWNoKGU9Pnt0eXBlb2YgZVtuXT09YGZ1bmN0aW9uYCYmZVtuXSguLi50KX0pLGl9fSl9KX1mdW5jdGlvbiBxbyhlLHQpe2xldCBuPWUuX2NoYXJ0anM7aWYoIW4pcmV0dXJuO2xldCByPW4ubGlzdGVuZXJzLGk9ci5pbmRleE9mKHQpO2khPT0tMSYmci5zcGxpY2UoaSwxKSwhKHIubGVuZ3RoPjApJiYoR28uZm9yRWFjaCh0PT57ZGVsZXRlIGVbdF19KSxkZWxldGUgZS5fY2hhcnRqcyl9ZnVuY3Rpb24gSm8oZSl7bGV0IHQ9bmV3IFNldChlKTtyZXR1cm4gdC5zaXplPT09ZS5sZW5ndGg/ZTpBcnJheS5mcm9tKHQpfXZhciBZbz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PmB1YD9mdW5jdGlvbihlKXtyZXR1cm4gZSgpfTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfSgpO2Z1bmN0aW9uIFhvKGUsdCl7bGV0IG49W10scj0hMTtyZXR1cm4gZnVuY3Rpb24oLi4uaSl7bj1pLHJ8fChyPSEwLFlvLmNhbGwod2luZG93LCgpPT57cj0hMSxlLmFwcGx5KHQsbil9KSl9fWZ1bmN0aW9uIFpvKGUsdCl7bGV0IG47cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3JldHVybiB0PyhjbGVhclRpbWVvdXQobiksbj1zZXRUaW1lb3V0KGUsdCxyKSk6ZS5hcHBseSh0aGlzLHIpLHR9fXZhciBRbz1lPT5lPT09YHN0YXJ0YD9gbGVmdGA6ZT09PWBlbmRgP2ByaWdodGA6YGNlbnRlcmAsJG89KGUsdCxuKT0+ZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjoodCtuKS8yLGVzPShlLHQsbixyKT0+ZT09PShyP2BsZWZ0YDpgcmlnaHRgKT9uOmU9PT1gY2VudGVyYD8odCtuKS8yOnQsdHM9ZT0+ZT09PTB8fGU9PT0xLG5zPShlLHQsbik9Pi0oMioqKDEwKi0tZSkqTWF0aC5zaW4oKGUtdCkqZ28vbikpLHJzPShlLHQsbik9PjIqKigtMTAqZSkqTWF0aC5zaW4oKGUtdCkqZ28vbikrMSxpcz17bGluZWFyOmU9PmUsZWFzZUluUXVhZDplPT5lKmUsZWFzZU91dFF1YWQ6ZT0+LWUqKGUtMiksZWFzZUluT3V0UXVhZDplPT4oZS89LjUpPDE/LjUqZSplOi0uNSooLS1lKihlLTIpLTEpLGVhc2VJbkN1YmljOmU9PmUqZSplLGVhc2VPdXRDdWJpYzplPT4tLWUqZSplKzEsZWFzZUluT3V0Q3ViaWM6ZT0+KGUvPS41KTwxPy41KmUqZSplOi41KigoZS09MikqZSplKzIpLGVhc2VJblF1YXJ0OmU9PmUqZSplKmUsZWFzZU91dFF1YXJ0OmU9Pi0oLS1lKmUqZSplLTEpLGVhc2VJbk91dFF1YXJ0OmU9PihlLz0uNSk8MT8uNSplKmUqZSplOi0uNSooKGUtPTIpKmUqZSplLTIpLGVhc2VJblF1aW50OmU9PmUqZSplKmUqZSxlYXNlT3V0UXVpbnQ6ZT0+LS1lKmUqZSplKmUrMSxlYXNlSW5PdXRRdWludDplPT4oZS89LjUpPDE/LjUqZSplKmUqZSplOi41KigoZS09MikqZSplKmUqZSsyKSxlYXNlSW5TaW5lOmU9Pi1NYXRoLmNvcyhlKnlvKSsxLGVhc2VPdXRTaW5lOmU9Pk1hdGguc2luKGUqeW8pLGVhc2VJbk91dFNpbmU6ZT0+LS41KihNYXRoLmNvcyhYKmUpLTEpLGVhc2VJbkV4cG86ZT0+ZT09PTA/MDoyKiooMTAqKGUtMSkpLGVhc2VPdXRFeHBvOmU9PmU9PT0xPzE6LSgyKiooLTEwKmUpKSsxLGVhc2VJbk91dEV4cG86ZT0+dHMoZSk/ZTplPC41Py41KjIqKigxMCooZSoyLTEpKTouNSooLSgyKiooLTEwKihlKjItMSkpKSsyKSxlYXNlSW5DaXJjOmU9PmU+PTE/ZTotKE1hdGguc3FydCgxLWUqZSktMSksZWFzZU91dENpcmM6ZT0+TWF0aC5zcXJ0KDEtIC0tZSplKSxlYXNlSW5PdXRDaXJjOmU9PihlLz0uNSk8MT8tLjUqKE1hdGguc3FydCgxLWUqZSktMSk6LjUqKE1hdGguc3FydCgxLShlLT0yKSplKSsxKSxlYXNlSW5FbGFzdGljOmU9PnRzKGUpP2U6bnMoZSwuMDc1LC4zKSxlYXNlT3V0RWxhc3RpYzplPT50cyhlKT9lOnJzKGUsLjA3NSwuMyksZWFzZUluT3V0RWxhc3RpYyhlKXtsZXQgdD0uMTEyNSxuPS40NTtyZXR1cm4gdHMoZSk/ZTplPC41Py41Km5zKGUqMix0LG4pOi41Ky41KnJzKGUqMi0xLHQsbil9LGVhc2VJbkJhY2soZSl7cmV0dXJuIGUqZSooMi43MDE1OCplLTEuNzAxNTgpfSxlYXNlT3V0QmFjayhlKXtyZXR1cm4tLWUqZSooMi43MDE1OCplKzEuNzAxNTgpKzF9LGVhc2VJbk91dEJhY2soZSl7bGV0IHQ9MS43MDE1ODtyZXR1cm4oZS89LjUpPDE/LjUqKGUqZSooKCh0Kj0xLjUyNSkrMSkqZS10KSk6LjUqKChlLT0yKSplKigoKHQqPTEuNTI1KSsxKSplK3QpKzIpfSxlYXNlSW5Cb3VuY2U6ZT0+MS1pcy5lYXNlT3V0Qm91bmNlKDEtZSksZWFzZU91dEJvdW5jZShlKXtsZXQgdD03LjU2MjUsbj0yLjc1O3JldHVybiBlPDEvbj90KmUqZTplPDIvbj90KihlLT0xLjUvbikqZSsuNzU6ZTwyLjUvbj90KihlLT0yLjI1L24pKmUrLjkzNzU6dCooZS09Mi42MjUvbikqZSsuOTg0Mzc1fSxlYXNlSW5PdXRCb3VuY2U6ZT0+ZTwuNT9pcy5lYXNlSW5Cb3VuY2UoZSoyKSouNTppcy5lYXNlT3V0Qm91bmNlKGUqMi0xKSouNSsuNX07ZnVuY3Rpb24gYXMoZSl7aWYoZSYmdHlwZW9mIGU9PWBvYmplY3RgKXtsZXQgdD1lLnRvU3RyaW5nKCk7cmV0dXJuIHQ9PT1gW29iamVjdCBDYW52YXNQYXR0ZXJuXWB8fHQ9PT1gW29iamVjdCBDYW52YXNHcmFkaWVudF1gfXJldHVybiExfWZ1bmN0aW9uIG9zKGUpe3JldHVybiBhcyhlKT9lOm5ldyBKYShlKX1mdW5jdGlvbiBzcyhlKXtyZXR1cm4gYXMoZSk/ZTpuZXcgSmEoZSkuc2F0dXJhdGUoLjUpLmRhcmtlbiguMSkuaGV4U3RyaW5nKCl9dmFyIGNzPVtgeGAsYHlgLGBib3JkZXJXaWR0aGAsYHJhZGl1c2AsYHRlbnNpb25gXSxscz1bYGNvbG9yYCxgYm9yZGVyQ29sb3JgLGBiYWNrZ3JvdW5kQ29sb3JgXTtmdW5jdGlvbiB1cyhlKXtlLnNldChgYW5pbWF0aW9uYCx7ZGVsYXk6dm9pZCAwLGR1cmF0aW9uOjFlMyxlYXNpbmc6YGVhc2VPdXRRdWFydGAsZm46dm9pZCAwLGZyb206dm9pZCAwLGxvb3A6dm9pZCAwLHRvOnZvaWQgMCx0eXBlOnZvaWQgMH0pLGUuZGVzY3JpYmUoYGFuaW1hdGlvbmAse19mYWxsYmFjazohMSxfaW5kZXhhYmxlOiExLF9zY3JpcHRhYmxlOmU9PmUhPT1gb25Qcm9ncmVzc2AmJmUhPT1gb25Db21wbGV0ZWAmJmUhPT1gZm5gfSksZS5zZXQoYGFuaW1hdGlvbnNgLHtjb2xvcnM6e3R5cGU6YGNvbG9yYCxwcm9wZXJ0aWVzOmxzfSxudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6Y3N9fSksZS5kZXNjcmliZShgYW5pbWF0aW9uc2Ase19mYWxsYmFjazpgYW5pbWF0aW9uYH0pLGUuc2V0KGB0cmFuc2l0aW9uc2Ase2FjdGl2ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjo0MDB9fSxyZXNpemU6e2FuaW1hdGlvbjp7ZHVyYXRpb246MH19LHNob3c6e2FuaW1hdGlvbnM6e2NvbG9yczp7ZnJvbTpgdHJhbnNwYXJlbnRgfSx2aXNpYmxlOnt0eXBlOmBib29sZWFuYCxkdXJhdGlvbjowfX19LGhpZGU6e2FuaW1hdGlvbnM6e2NvbG9yczp7dG86YHRyYW5zcGFyZW50YH0sdmlzaWJsZTp7dHlwZTpgYm9vbGVhbmAsZWFzaW5nOmBsaW5lYXJgLGZuOmU9PmV8MH19fX0pfWZ1bmN0aW9uIGRzKGUpe2Uuc2V0KGBsYXlvdXRgLHthdXRvUGFkZGluZzohMCxwYWRkaW5nOnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH19KX12YXIgZnM9bmV3IE1hcDtmdW5jdGlvbiBwcyhlLHQpe3R8fD17fTtsZXQgbj1lK0pTT04uc3RyaW5naWZ5KHQpLHI9ZnMuZ2V0KG4pO3JldHVybiByfHwocj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx0KSxmcy5zZXQobixyKSkscn1mdW5jdGlvbiBtcyhlLHQsbil7cmV0dXJuIHBzKHQsbikuZm9ybWF0KGUpfXZhciBocz17dmFsdWVzKGUpe3JldHVybiBXKGUpP2U6YGArZX0sbnVtZXJpYyhlLHQsbil7aWYoZT09PTApcmV0dXJuYDBgO2xldCByPXRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsaSxhPWU7aWYobi5sZW5ndGg+MSl7bGV0IHQ9TWF0aC5tYXgoTWF0aC5hYnMoblswXS52YWx1ZSksTWF0aC5hYnMobltuLmxlbmd0aC0xXS52YWx1ZSkpOyh0PDFlLTR8fHQ+MHgzOGQ3ZWE0YzY4MDAwKSYmKGk9YHNjaWVudGlmaWNgKSxhPWdzKGUsbil9bGV0IG89U28oTWF0aC5hYnMoYSkpLHM9aXNOYU4obyk/MTpNYXRoLm1heChNYXRoLm1pbigtMSpNYXRoLmZsb29yKG8pLDIwKSwwKSxjPXtub3RhdGlvbjppLG1pbmltdW1GcmFjdGlvbkRpZ2l0czpzLG1heGltdW1GcmFjdGlvbkRpZ2l0czpzfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihjLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpLG1zKGUscixjKX0sbG9nYXJpdGhtaWMoZSx0LG4pe2lmKGU9PT0wKXJldHVybmAwYDtsZXQgcj1uW3RdLnNpZ25pZmljYW5kfHxlLzEwKipNYXRoLmZsb29yKFNvKGUpKTtyZXR1cm5bMSwyLDMsNSwxMCwxNV0uaW5jbHVkZXMocil8fHQ+Ljgqbi5sZW5ndGg/aHMubnVtZXJpYy5jYWxsKHRoaXMsZSx0LG4pOmBgfX07ZnVuY3Rpb24gZ3MoZSx0KXtsZXQgbj10Lmxlbmd0aD4zP3RbMl0udmFsdWUtdFsxXS52YWx1ZTp0WzFdLnZhbHVlLXRbMF0udmFsdWU7cmV0dXJuIE1hdGguYWJzKG4pPj0xJiZlIT09TWF0aC5mbG9vcihlKSYmKG49ZS1NYXRoLmZsb29yKGUpKSxufXZhciBfcz17Zm9ybWF0dGVyczpoc307ZnVuY3Rpb24gdnMoZSl7ZS5zZXQoYHNjYWxlYCx7ZGlzcGxheTohMCxvZmZzZXQ6ITEscmV2ZXJzZTohMSxiZWdpbkF0WmVybzohMSxib3VuZHM6YHRpY2tzYCxjbGlwOiEwLGdyYWNlOjAsZ3JpZDp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxkcmF3T25DaGFydEFyZWE6ITAsZHJhd1RpY2tzOiEwLHRpY2tMZW5ndGg6OCx0aWNrV2lkdGg6KGUsdCk9PnQubGluZVdpZHRoLHRpY2tDb2xvcjooZSx0KT0+dC5jb2xvcixvZmZzZXQ6ITF9LGJvcmRlcjp7ZGlzcGxheTohMCxkYXNoOltdLGRhc2hPZmZzZXQ6MCx3aWR0aDoxfSx0aXRsZTp7ZGlzcGxheTohMSx0ZXh0OmBgLHBhZGRpbmc6e3RvcDo0LGJvdHRvbTo0fX0sdGlja3M6e21pblJvdGF0aW9uOjAsbWF4Um90YXRpb246NTAsbWlycm9yOiExLHRleHRTdHJva2VXaWR0aDowLHRleHRTdHJva2VDb2xvcjpgYCxwYWRkaW5nOjMsZGlzcGxheTohMCxhdXRvU2tpcDohMCxhdXRvU2tpcFBhZGRpbmc6MyxsYWJlbE9mZnNldDowLGNhbGxiYWNrOl9zLmZvcm1hdHRlcnMudmFsdWVzLG1pbm9yOnt9LG1ham9yOnt9LGFsaWduOmBjZW50ZXJgLGNyb3NzQWxpZ246YG5lYXJgLHNob3dMYWJlbEJhY2tkcm9wOiExLGJhY2tkcm9wQ29sb3I6YHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSlgLGJhY2tkcm9wUGFkZGluZzoyfX0pLGUucm91dGUoYHNjYWxlLnRpY2tzYCxgY29sb3JgLGBgLGBjb2xvcmApLGUucm91dGUoYHNjYWxlLmdyaWRgLGBjb2xvcmAsYGAsYGJvcmRlckNvbG9yYCksZS5yb3V0ZShgc2NhbGUuYm9yZGVyYCxgY29sb3JgLGBgLGBib3JkZXJDb2xvcmApLGUucm91dGUoYHNjYWxlLnRpdGxlYCxgY29sb3JgLGBgLGBjb2xvcmApLGUuZGVzY3JpYmUoYHNjYWxlYCx7X2ZhbGxiYWNrOiExLF9zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYGJlZm9yZWApJiYhZS5zdGFydHNXaXRoKGBhZnRlcmApJiZlIT09YGNhbGxiYWNrYCYmZSE9PWBwYXJzZXJgLF9pbmRleGFibGU6ZT0+ZSE9PWBib3JkZXJEYXNoYCYmZSE9PWB0aWNrQm9yZGVyRGFzaGAmJmUhPT1gZGFzaGB9KSxlLmRlc2NyaWJlKGBzY2FsZXNgLHtfZmFsbGJhY2s6YHNjYWxlYH0pLGUuZGVzY3JpYmUoYHNjYWxlLnRpY2tzYCx7X3NjcmlwdGFibGU6ZT0+ZSE9PWBiYWNrZHJvcFBhZGRpbmdgJiZlIT09YGNhbGxiYWNrYCxfaW5kZXhhYmxlOmU9PmUhPT1gYmFja2Ryb3BQYWRkaW5nYH0pfXZhciB5cz1PYmplY3QuY3JlYXRlKG51bGwpLGJzPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24geHMoZSx0KXtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGAuYCk7Zm9yKGxldCB0PTAscj1uLmxlbmd0aDt0PHI7Kyt0KXtsZXQgcj1uW3RdO2U9ZVtyXXx8KGVbcl09T2JqZWN0LmNyZWF0ZShudWxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gU3MoZSx0LG4pe3JldHVybiB0eXBlb2YgdD09YHN0cmluZ2A/cm8oeHMoZSx0KSxuKTpybyh4cyhlLGBgKSx0KX12YXIgWj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmFuaW1hdGlvbj12b2lkIDAsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9YHJnYmEoMCwwLDAsMC4xKWAsdGhpcy5ib3JkZXJDb2xvcj1gcmdiYSgwLDAsMCwwLjEpYCx0aGlzLmNvbG9yPWAjNjY2YCx0aGlzLmRhdGFzZXRzPXt9LHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1lPT5lLmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKSx0aGlzLmVsZW1lbnRzPXt9LHRoaXMuZXZlbnRzPVtgbW91c2Vtb3ZlYCxgbW91c2VvdXRgLGBjbGlja2AsYHRvdWNoc3RhcnRgLGB0b3VjaG1vdmVgXSx0aGlzLmZvbnQ9e2ZhbWlseTpgJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZgLHNpemU6MTIsc3R5bGU6YG5vcm1hbGAsbGluZUhlaWdodDoxLjIsd2VpZ2h0Om51bGx9LHRoaXMuaG92ZXI9e30sdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvcj0oZSx0KT0+c3ModC5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuaG92ZXJCb3JkZXJDb2xvcj0oZSx0KT0+c3ModC5ib3JkZXJDb2xvciksdGhpcy5ob3ZlckNvbG9yPShlLHQpPT5zcyh0LmNvbG9yKSx0aGlzLmluZGV4QXhpcz1geGAsdGhpcy5pbnRlcmFjdGlvbj17bW9kZTpgbmVhcmVzdGAsaW50ZXJzZWN0OiEwLGluY2x1ZGVJbnZpc2libGU6ITF9LHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpbz0hMCx0aGlzLm9uSG92ZXI9bnVsbCx0aGlzLm9uQ2xpY2s9bnVsbCx0aGlzLnBhcnNpbmc9ITAsdGhpcy5wbHVnaW5zPXt9LHRoaXMucmVzcG9uc2l2ZT0hMCx0aGlzLnNjYWxlPXZvaWQgMCx0aGlzLnNjYWxlcz17fSx0aGlzLnNob3dMaW5lPSEwLHRoaXMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3A9ITAsdGhpcy5kZXNjcmliZShlKSx0aGlzLmFwcGx5KHQpfXNldChlLHQpe3JldHVybiBTcyh0aGlzLGUsdCl9Z2V0KGUpe3JldHVybiB4cyh0aGlzLGUpfWRlc2NyaWJlKGUsdCl7cmV0dXJuIFNzKGJzLGUsdCl9b3ZlcnJpZGUoZSx0KXtyZXR1cm4gU3MoeXMsZSx0KX1yb3V0ZShlLHQsbixyKXtsZXQgaT14cyh0aGlzLGUpLGE9eHModGhpcyxuKSxvPWBfYCt0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkse1tvXTp7dmFsdWU6aVt0XSx3cml0YWJsZTohMH0sW3RdOntlbnVtZXJhYmxlOiEwLGdldCgpe2xldCBlPXRoaXNbb10sdD1hW3JdO3JldHVybiBHKGUpP09iamVjdC5hc3NpZ24oe30sdCxlKTpxKGUsdCl9LHNldChlKXt0aGlzW29dPWV9fX0pfWFwcGx5KGUpe2UuZm9yRWFjaChlPT5lKHRoaXMpKX19KHtfc2NyaXB0YWJsZTplPT4hZS5zdGFydHNXaXRoKGBvbmApLF9pbmRleGFibGU6ZT0+ZSE9PWBldmVudHNgLGhvdmVyOntfZmFsbGJhY2s6YGludGVyYWN0aW9uYH0saW50ZXJhY3Rpb246e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9fSxbdXMsZHMsdnNdKTtmdW5jdGlvbiBDcyhlKXtyZXR1cm4hZXx8VShlLnNpemUpfHxVKGUuZmFtaWx5KT9udWxsOihlLnN0eWxlP2Uuc3R5bGUrYCBgOmBgKSsoZS53ZWlnaHQ/ZS53ZWlnaHQrYCBgOmBgKStlLnNpemUrYHB4IGArZS5mYW1pbHl9ZnVuY3Rpb24gd3MoZSx0LG4scixpKXtsZXQgYT10W2ldO3JldHVybiBhfHwoYT10W2ldPWUubWVhc3VyZVRleHQoaSkud2lkdGgsbi5wdXNoKGkpKSxhPnImJihyPWEpLHJ9ZnVuY3Rpb24gVHMoZSx0LG4scil7cnx8PXt9O2xldCBpPXIuZGF0YT1yLmRhdGF8fHt9LGE9ci5nYXJiYWdlQ29sbGVjdD1yLmdhcmJhZ2VDb2xsZWN0fHxbXTtyLmZvbnQhPT10JiYoaT1yLmRhdGE9e30sYT1yLmdhcmJhZ2VDb2xsZWN0PVtdLHIuZm9udD10KSxlLnNhdmUoKSxlLmZvbnQ9dDtsZXQgbz0wLHM9bi5sZW5ndGgsYyxsLHUsZCxmO2ZvcihjPTA7YzxzO2MrKylpZihkPW5bY10sZCE9bnVsbCYmIVcoZCkpbz13cyhlLGksYSxvLGQpO2Vsc2UgaWYoVyhkKSlmb3IobD0wLHU9ZC5sZW5ndGg7bDx1O2wrKylmPWRbbF0sZiE9bnVsbCYmIVcoZikmJihvPXdzKGUsaSxhLG8sZikpO2UucmVzdG9yZSgpO2xldCBwPWEubGVuZ3RoLzI7aWYocD5uLmxlbmd0aCl7Zm9yKGM9MDtjPHA7YysrKWRlbGV0ZSBpW2FbY11dO2Euc3BsaWNlKDAscCl9cmV0dXJuIG99ZnVuY3Rpb24gRXMoZSx0LG4pe2xldCByPWUuY3VycmVudERldmljZVBpeGVsUmF0aW8saT1uPT09MD8wOk1hdGgubWF4KG4vMiwuNSk7cmV0dXJuIE1hdGgucm91bmQoKHQtaSkqcikvcitpfWZ1bmN0aW9uIERzKGUsdCl7IXQmJiFlfHwodHx8PWUuZ2V0Q29udGV4dChgMmRgKSx0LnNhdmUoKSx0LnJlc2V0VHJhbnNmb3JtKCksdC5jbGVhclJlY3QoMCwwLGUud2lkdGgsZS5oZWlnaHQpLHQucmVzdG9yZSgpKX1mdW5jdGlvbiBPcyhlLHQsbixyKXtrcyhlLHQsbixyLG51bGwpfWZ1bmN0aW9uIGtzKGUsdCxuLHIsaSl7bGV0IGEsbyxzLGMsbCx1LGQsZixwPXQucG9pbnRTdHlsZSxtPXQucm90YXRpb24saD10LnJhZGl1cyxnPShtfHwwKSp2bztpZihwJiZ0eXBlb2YgcD09YG9iamVjdGAmJihhPXAudG9TdHJpbmcoKSxhPT09YFtvYmplY3QgSFRNTEltYWdlRWxlbWVudF1gfHxhPT09YFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdYCkpe2Uuc2F2ZSgpLGUudHJhbnNsYXRlKG4sciksZS5yb3RhdGUoZyksZS5kcmF3SW1hZ2UocCwtcC53aWR0aC8yLC1wLmhlaWdodC8yLHAud2lkdGgscC5oZWlnaHQpLGUucmVzdG9yZSgpO3JldHVybn1pZighKGlzTmFOKGgpfHxoPD0wKSl7c3dpdGNoKGUuYmVnaW5QYXRoKCkscCl7ZGVmYXVsdDppP2UuZWxsaXBzZShuLHIsaS8yLGgsMCwwLGdvKTplLmFyYyhuLHIsaCwwLGdvKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgdHJpYW5nbGVgOnU9aT9pLzI6aCxlLm1vdmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz14byxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxnKz14byxlLmxpbmVUbyhuK01hdGguc2luKGcpKnUsci1NYXRoLmNvcyhnKSpoKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdFJvdW5kZWRgOmw9aCouNTE2LGM9aC1sLG89TWF0aC5jb3MoZytibykqYyxkPU1hdGguY29zKGcrYm8pKihpP2kvMi1sOmMpLHM9TWF0aC5zaW4oZytibykqYyxmPU1hdGguc2luKGcrYm8pKihpP2kvMi1sOmMpLGUuYXJjKG4tZCxyLXMsbCxnLVgsZy15byksZS5hcmMobitmLHItbyxsLGcteW8sZyksZS5hcmMobitkLHIrcyxsLGcsZyt5byksZS5hcmMobi1mLHIrbyxsLGcreW8sZytYKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdGA6aWYoIW0pe2M9TWF0aC5TUVJUMV8yKmgsdT1pP2kvMjpjLGUucmVjdChuLXUsci1jLDIqdSwyKmMpO2JyZWFrfWcrPWJvO2Nhc2VgcmVjdFJvdGA6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuK2QscitzKSxlLmxpbmVUbyhuLWYscitvKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgY3Jvc3NSb3RgOmcrPWJvO2Nhc2VgY3Jvc3NgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBzdGFyYDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZCxyK3MpLGUubW92ZVRvKG4rZixyLW8pLGUubGluZVRvKG4tZixyK28pLGcrPWJvLGQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBsaW5lYDpvPWk/aS8yOk1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGUubW92ZVRvKG4tbyxyLXMpLGUubGluZVRvKG4rbyxyK3MpO2JyZWFrO2Nhc2VgZGFzaGA6ZS5tb3ZlVG8obixyKSxlLmxpbmVUbyhuK01hdGguY29zKGcpKihpP2kvMjpoKSxyK01hdGguc2luKGcpKmgpO2JyZWFrO2Nhc2UhMTplLmNsb3NlUGF0aCgpfWUuZmlsbCgpLHQuYm9yZGVyV2lkdGg+MCYmZS5zdHJva2UoKX19ZnVuY3Rpb24gQXMoZSx0LG4pe3JldHVybiBufHw9LjUsIXR8fGUmJmUueD50LmxlZnQtbiYmZS54PHQucmlnaHQrbiYmZS55PnQudG9wLW4mJmUueTx0LmJvdHRvbStufWZ1bmN0aW9uIGpzKGUsdCl7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSxlLnJlY3QodC5sZWZ0LHQudG9wLHQucmlnaHQtdC5sZWZ0LHQuYm90dG9tLXQudG9wKSxlLmNsaXAoKX1mdW5jdGlvbiBNcyhlKXtlLnJlc3RvcmUoKX1mdW5jdGlvbiBOcyhlLHQpe3QudHJhbnNsYXRpb24mJmUudHJhbnNsYXRlKHQudHJhbnNsYXRpb25bMF0sdC50cmFuc2xhdGlvblsxXSksVSh0LnJvdGF0aW9uKXx8ZS5yb3RhdGUodC5yb3RhdGlvbiksdC5jb2xvciYmKGUuZmlsbFN0eWxlPXQuY29sb3IpLHQudGV4dEFsaWduJiYoZS50ZXh0QWxpZ249dC50ZXh0QWxpZ24pLHQudGV4dEJhc2VsaW5lJiYoZS50ZXh0QmFzZWxpbmU9dC50ZXh0QmFzZWxpbmUpfWZ1bmN0aW9uIFBzKGUsdCxuLHIsaSl7aWYoaS5zdHJpa2V0aHJvdWdofHxpLnVuZGVybGluZSl7bGV0IGE9ZS5tZWFzdXJlVGV4dChyKSxvPXQtYS5hY3R1YWxCb3VuZGluZ0JveExlZnQscz10K2EuYWN0dWFsQm91bmRpbmdCb3hSaWdodCxjPW4tYS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCxsPW4rYS5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQsdT1pLnN0cmlrZXRocm91Z2g/KGMrbCkvMjpsO2Uuc3Ryb2tlU3R5bGU9ZS5maWxsU3R5bGUsZS5iZWdpblBhdGgoKSxlLmxpbmVXaWR0aD1pLmRlY29yYXRpb25XaWR0aHx8MixlLm1vdmVUbyhvLHUpLGUubGluZVRvKHMsdSksZS5zdHJva2UoKX19ZnVuY3Rpb24gRnMoZSx0KXtsZXQgbj1lLmZpbGxTdHlsZTtlLmZpbGxTdHlsZT10LmNvbG9yLGUuZmlsbFJlY3QodC5sZWZ0LHQudG9wLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPW59ZnVuY3Rpb24gSXMoZSx0LG4scixpLGE9e30pe2xldCBvPVcodCk/dDpbdF0scz1hLnN0cm9rZVdpZHRoPjAmJmEuc3Ryb2tlQ29sb3IhPT1gYCxjLGw7Zm9yKGUuc2F2ZSgpLGUuZm9udD1pLnN0cmluZyxOcyhlLGEpLGM9MDtjPG8ubGVuZ3RoOysrYylsPW9bY10sYS5iYWNrZHJvcCYmRnMoZSxhLmJhY2tkcm9wKSxzJiYoYS5zdHJva2VDb2xvciYmKGUuc3Ryb2tlU3R5bGU9YS5zdHJva2VDb2xvciksVShhLnN0cm9rZVdpZHRoKXx8KGUubGluZVdpZHRoPWEuc3Ryb2tlV2lkdGgpLGUuc3Ryb2tlVGV4dChsLG4scixhLm1heFdpZHRoKSksZS5maWxsVGV4dChsLG4scixhLm1heFdpZHRoKSxQcyhlLG4scixsLGEpLHIrPU51bWJlcihpLmxpbmVIZWlnaHQpO2UucmVzdG9yZSgpfWZ1bmN0aW9uIExzKGUsdCl7bGV0e3g6bix5OnIsdzppLGg6YSxyYWRpdXM6b309dDtlLmFyYyhuK28udG9wTGVmdCxyK28udG9wTGVmdCxvLnRvcExlZnQsMS41KlgsWCwhMCksZS5saW5lVG8obixyK2Etby5ib3R0b21MZWZ0KSxlLmFyYyhuK28uYm90dG9tTGVmdCxyK2Etby5ib3R0b21MZWZ0LG8uYm90dG9tTGVmdCxYLHlvLCEwKSxlLmxpbmVUbyhuK2ktby5ib3R0b21SaWdodCxyK2EpLGUuYXJjKG4raS1vLmJvdHRvbVJpZ2h0LHIrYS1vLmJvdHRvbVJpZ2h0LG8uYm90dG9tUmlnaHQseW8sMCwhMCksZS5saW5lVG8obitpLHIrby50b3BSaWdodCksZS5hcmMobitpLW8udG9wUmlnaHQscitvLnRvcFJpZ2h0LG8udG9wUmlnaHQsMCwteW8sITApLGUubGluZVRvKG4rby50b3BMZWZ0LHIpfXZhciBScz0vXihub3JtYWx8KFxkKyg/OlwuXGQrKT8pKHB4fGVtfCUpPykkLyx6cz0vXihub3JtYWx8aXRhbGljfGluaXRpYWx8aW5oZXJpdHx1bnNldHwob2JsaXF1ZSggLT9bMC05XT9bMC05XWRlZyk/KSkkLztmdW5jdGlvbiBCcyhlLHQpe2xldCBuPShgYCtlKS5tYXRjaChScyk7aWYoIW58fG5bMV09PT1gbm9ybWFsYClyZXR1cm4gdCoxLjI7c3dpdGNoKGU9K25bMl0sblszXSl7Y2FzZWBweGA6cmV0dXJuIGU7Y2FzZWAlYDplLz0xMDB9cmV0dXJuIHQqZX12YXIgVnM9ZT0+K2V8fDA7ZnVuY3Rpb24gSHMoZSx0KXtsZXQgbj17fSxyPUcodCksaT1yP09iamVjdC5rZXlzKHQpOnQsYT1HKGUpP3I/bj0+cShlW25dLGVbdFtuXV0pOnQ9PmVbdF06KCk9PmU7Zm9yKGxldCBlIG9mIGkpbltlXT1WcyhhKGUpKTtyZXR1cm4gbn1mdW5jdGlvbiBVcyhlKXtyZXR1cm4gSHMoZSx7dG9wOmB5YCxyaWdodDpgeGAsYm90dG9tOmB5YCxsZWZ0OmB4YH0pfWZ1bmN0aW9uIFdzKGUpe3JldHVybiBIcyhlLFtgdG9wTGVmdGAsYHRvcFJpZ2h0YCxgYm90dG9tTGVmdGAsYGJvdHRvbVJpZ2h0YF0pfWZ1bmN0aW9uIFEoZSl7bGV0IHQ9VXMoZSk7cmV0dXJuIHQud2lkdGg9dC5sZWZ0K3QucmlnaHQsdC5oZWlnaHQ9dC50b3ArdC5ib3R0b20sdH1mdW5jdGlvbiAkKGUsdCl7ZXx8PXt9LHR8fD1aLmZvbnQ7bGV0IG49cShlLnNpemUsdC5zaXplKTt0eXBlb2Ygbj09YHN0cmluZ2AmJihuPXBhcnNlSW50KG4sMTApKTtsZXQgcj1xKGUuc3R5bGUsdC5zdHlsZSk7ciYmIShgYCtyKS5tYXRjaCh6cykmJihjb25zb2xlLndhcm4oYEludmFsaWQgZm9udCBzdHlsZSBzcGVjaWZpZWQ6ICJgK3IrYCJgKSxyPXZvaWQgMCk7bGV0IGk9e2ZhbWlseTpxKGUuZmFtaWx5LHQuZmFtaWx5KSxsaW5lSGVpZ2h0OkJzKHEoZS5saW5lSGVpZ2h0LHQubGluZUhlaWdodCksbiksc2l6ZTpuLHN0eWxlOnIsd2VpZ2h0OnEoZS53ZWlnaHQsdC53ZWlnaHQpLHN0cmluZzpgYH07cmV0dXJuIGkuc3RyaW5nPUNzKGkpLGl9ZnVuY3Rpb24gR3MoZSx0LG4scil7bGV0IGk9ITAsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpaWYocz1lW2FdLHMhPT12b2lkIDAmJih0IT09dm9pZCAwJiZ0eXBlb2Ygcz09YGZ1bmN0aW9uYCYmKHM9cyh0KSxpPSExKSxuIT09dm9pZCAwJiZXKHMpJiYocz1zW24lcy5sZW5ndGhdLGk9ITEpLHMhPT12b2lkIDApKXJldHVybiByJiYhaSYmKHIuY2FjaGVhYmxlPSExKSxzfWZ1bmN0aW9uIEtzKGUsdCxuKXtsZXR7bWluOnIsbWF4Oml9PWUsYT1RYSh0LChpLXIpLzIpLG89KGUsdCk9Pm4mJmU9PT0wPzA6ZSt0O3JldHVybnttaW46byhyLC1NYXRoLmFicyhhKSksbWF4Om8oaSxhKX19ZnVuY3Rpb24gcXMoZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGUpLHQpfWZ1bmN0aW9uIEpzKGUsdD1bYGBdLG4scixpPSgpPT5lWzBdKXtsZXQgYT1ufHxlO3JldHVybiByPT09dm9pZCAwJiYocj11YyhgX2ZhbGxiYWNrYCxlKSksbmV3IFByb3h5KHtbU3ltYm9sLnRvU3RyaW5nVGFnXTpgT2JqZWN0YCxfY2FjaGVhYmxlOiEwLF9zY29wZXM6ZSxfcm9vdFNjb3BlczphLF9mYWxsYmFjazpyLF9nZXRUYXJnZXQ6aSxvdmVycmlkZTpuPT5KcyhbbiwuLi5lXSx0LGEscil9LHtkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBkZWxldGUgdFtuXSxkZWxldGUgdC5fa2V5cyxkZWxldGUgZVswXVtuXSwhMH0sZ2V0KG4scil7cmV0dXJuICRzKG4sciwoKT0+bGMocix0LGUsbikpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5fc2NvcGVzWzBdLHQpfSxnZXRQcm90b3R5cGVPZigpe3JldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGVbMF0pfSxoYXMoZSx0KXtyZXR1cm4gZGMoZSkuaW5jbHVkZXModCl9LG93bktleXMoZSl7cmV0dXJuIGRjKGUpfSxzZXQoZSx0LG4pe2xldCByPWUuX3N0b3JhZ2V8fD1pKCk7cmV0dXJuIGVbdF09clt0XT1uLGRlbGV0ZSBlLl9rZXlzLCEwfX0pfWZ1bmN0aW9uIFlzKGUsdCxuLHIpe2xldCBpPXtfY2FjaGVhYmxlOiExLF9wcm94eTplLF9jb250ZXh0OnQsX3N1YlByb3h5Om4sX3N0YWNrOm5ldyBTZXQsX2Rlc2NyaXB0b3JzOlhzKGUsciksc2V0Q29udGV4dDp0PT5ZcyhlLHQsbixyKSxvdmVycmlkZTppPT5ZcyhlLm92ZXJyaWRlKGkpLHQsbixyKX07cmV0dXJuIG5ldyBQcm94eShpLHtkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBkZWxldGUgdFtuXSxkZWxldGUgZVtuXSwhMH0sZ2V0KGUsdCxuKXtyZXR1cm4gJHMoZSx0LCgpPT5lYyhlLHQsbikpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKXtyZXR1cm4gdC5fZGVzY3JpcHRvcnMuYWxsS2V5cz9SZWZsZWN0LmhhcyhlLG4pP3tlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH06dm9pZCAwOlJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbil9LGdldFByb3RvdHlwZU9mKCl7cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGhhcyh0LG4pe3JldHVybiBSZWZsZWN0LmhhcyhlLG4pfSxvd25LZXlzKCl7cmV0dXJuIFJlZmxlY3Qub3duS2V5cyhlKX0sc2V0KHQsbixyKXtyZXR1cm4gZVtuXT1yLGRlbGV0ZSB0W25dLCEwfX0pfWZ1bmN0aW9uIFhzKGUsdD17c2NyaXB0YWJsZTohMCxpbmRleGFibGU6ITB9KXtsZXR7X3NjcmlwdGFibGU6bj10LnNjcmlwdGFibGUsX2luZGV4YWJsZTpyPXQuaW5kZXhhYmxlLF9hbGxLZXlzOmk9dC5hbGxLZXlzfT1lO3JldHVybnthbGxLZXlzOmksc2NyaXB0YWJsZTpuLGluZGV4YWJsZTpyLGlzU2NyaXB0YWJsZTpwbyhuKT9uOigpPT5uLGlzSW5kZXhhYmxlOnBvKHIpP3I6KCk9PnJ9fXZhciBacz0oZSx0KT0+ZT9lK3VvKHQpOnQsUXM9KGUsdCk9PkcodCkmJmUhPT1gYWRhcHRlcnNgJiYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbHx8dC5jb25zdHJ1Y3Rvcj09PU9iamVjdCk7ZnVuY3Rpb24gJHMoZSx0LG4pe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHx0PT09YGNvbnN0cnVjdG9yYClyZXR1cm4gZVt0XTtsZXQgcj1uKCk7cmV0dXJuIGVbdF09cixyfWZ1bmN0aW9uIGVjKGUsdCxuKXtsZXR7X3Byb3h5OnIsX2NvbnRleHQ6aSxfc3ViUHJveHk6YSxfZGVzY3JpcHRvcnM6b309ZSxzPXJbdF07cmV0dXJuIHBvKHMpJiZvLmlzU2NyaXB0YWJsZSh0KSYmKHM9dGModCxzLGUsbikpLFcocykmJnMubGVuZ3RoJiYocz1uYyh0LHMsZSxvLmlzSW5kZXhhYmxlKSksUXModCxzKSYmKHM9WXMocyxpLGEmJmFbdF0sbykpLHN9ZnVuY3Rpb24gdGMoZSx0LG4scil7bGV0e19wcm94eTppLF9jb250ZXh0OmEsX3N1YlByb3h5Om8sX3N0YWNrOnN9PW47aWYocy5oYXMoZSkpdGhyb3cgRXJyb3IoYFJlY3Vyc2lvbiBkZXRlY3RlZDogYCtBcnJheS5mcm9tKHMpLmpvaW4oYC0+YCkrYC0+YCtlKTtzLmFkZChlKTtsZXQgYz10KGEsb3x8cik7cmV0dXJuIHMuZGVsZXRlKGUpLFFzKGUsYykmJihjPW9jKGkuX3Njb3BlcyxpLGUsYykpLGN9ZnVuY3Rpb24gbmMoZSx0LG4scil7bGV0e19wcm94eTppLF9jb250ZXh0OmEsX3N1YlByb3h5Om8sX2Rlc2NyaXB0b3JzOnN9PW47aWYoYS5pbmRleCE9PXZvaWQgMCYmcihlKSlyZXR1cm4gdFthLmluZGV4JXQubGVuZ3RoXTtpZihHKHRbMF0pKXtsZXQgbj10LHI9aS5fc2NvcGVzLmZpbHRlcihlPT5lIT09bik7dD1bXTtmb3IobGV0IGMgb2Ygbil7bGV0IG49b2MocixpLGUsYyk7dC5wdXNoKFlzKG4sYSxvJiZvW2VdLHMpKX19cmV0dXJuIHR9ZnVuY3Rpb24gcmMoZSx0LG4pe3JldHVybiBwbyhlKT9lKHQsbik6ZX12YXIgaWM9KGUsdCk9PmU9PT0hMD90OnR5cGVvZiBlPT1gc3RyaW5nYD9sbyh0LGUpOnZvaWQgMDtmdW5jdGlvbiBhYyhlLHQsbixyLGkpe2ZvcihsZXQgYSBvZiB0KXtsZXQgdD1pYyhuLGEpO2lmKHQpe2UuYWRkKHQpO2xldCBhPXJjKHQuX2ZhbGxiYWNrLG4saSk7aWYoYSE9PXZvaWQgMCYmYSE9PW4mJmEhPT1yKXJldHVybiBhfWVsc2UgaWYodD09PSExJiZyIT09dm9pZCAwJiZuIT09cilyZXR1cm4gbnVsbH1yZXR1cm4hMX1mdW5jdGlvbiBvYyhlLHQsbixyKXtsZXQgaT10Ll9yb290U2NvcGVzLGE9cmModC5fZmFsbGJhY2ssbixyKSxvPVsuLi5lLC4uLmldLHM9bmV3IFNldDtzLmFkZChyKTtsZXQgYz1zYyhzLG8sbixhfHxuLHIpO3JldHVybiBjPT09bnVsbHx8YSE9PXZvaWQgMCYmYSE9PW4mJihjPXNjKHMsbyxhLGMsciksYz09PW51bGwpPyExOkpzKEFycmF5LmZyb20ocyksW2BgXSxpLGEsKCk9PmNjKHQsbixyKSl9ZnVuY3Rpb24gc2MoZSx0LG4scixpKXtmb3IoO247KW49YWMoZSx0LG4scixpKTtyZXR1cm4gbn1mdW5jdGlvbiBjYyhlLHQsbil7bGV0IHI9ZS5fZ2V0VGFyZ2V0KCk7dCBpbiByfHwoclt0XT17fSk7bGV0IGk9clt0XTtyZXR1cm4gVyhpKSYmRyhuKT9uOml8fHt9fWZ1bmN0aW9uIGxjKGUsdCxuLHIpe2xldCBpO2ZvcihsZXQgYSBvZiB0KWlmKGk9dWMoWnMoYSxlKSxuKSxpIT09dm9pZCAwKXJldHVybiBRcyhlLGkpP29jKG4scixlLGkpOml9ZnVuY3Rpb24gdWMoZSx0KXtmb3IobGV0IG4gb2YgdCl7aWYoIW4pY29udGludWU7bGV0IHQ9bltlXTtpZih0IT09dm9pZCAwKXJldHVybiB0fX1mdW5jdGlvbiBkYyhlKXtsZXQgdD1lLl9rZXlzO3JldHVybiB0fHw9ZS5fa2V5cz1mYyhlLl9zY29wZXMpLHR9ZnVuY3Rpb24gZmMoZSl7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSlmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoYF9gKSkpdC5hZGQoZSk7cmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gcGMoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzxgdWAmJnR5cGVvZiBkb2N1bWVudDxgdWB9ZnVuY3Rpb24gbWMoZSl7bGV0IHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnRvU3RyaW5nKCk9PT1gW29iamVjdCBTaGFkb3dSb290XWAmJih0PXQuaG9zdCksdH1mdW5jdGlvbiBoYyhlLHQsbil7bGV0IHI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD8ocj1wYXJzZUludChlLDEwKSxlLmluZGV4T2YoYCVgKSE9PS0xJiYocj1yLzEwMCp0LnBhcmVudE5vZGVbbl0pKTpyPWUscn12YXIgZ2M9ZT0+ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtmdW5jdGlvbiBfYyhlLHQpe3JldHVybiBnYyhlKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB2Yz1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdO2Z1bmN0aW9uIHljKGUsdCxuKXtsZXQgcj17fTtuPW4/YC1gK246YGA7Zm9yKGxldCBpPTA7aTw0O2krKyl7bGV0IGE9dmNbaV07clthXT1wYXJzZUZsb2F0KGVbdCtgLWArYStuXSl8fDB9cmV0dXJuIHIud2lkdGg9ci5sZWZ0K3IucmlnaHQsci5oZWlnaHQ9ci50b3Arci5ib3R0b20scn12YXIgYmM9KGUsdCxuKT0+KGU+MHx8dD4wKSYmKCFufHwhbi5zaGFkb3dSb290KTtmdW5jdGlvbiB4YyhlLHQpe2xldCBuPWUudG91Y2hlcyxyPW4mJm4ubGVuZ3RoP25bMF06ZSx7b2Zmc2V0WDppLG9mZnNldFk6YX09cixvPSExLHMsYztpZihiYyhpLGEsZS50YXJnZXQpKXM9aSxjPWE7ZWxzZXtsZXQgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3M9ci5jbGllbnRYLWUubGVmdCxjPXIuY2xpZW50WS1lLnRvcCxvPSEwfXJldHVybnt4OnMseTpjLGJveDpvfX1mdW5jdGlvbiBTYyhlLHQpe2lmKGBuYXRpdmVgaW4gZSlyZXR1cm4gZTtsZXR7Y2FudmFzOm4sY3VycmVudERldmljZVBpeGVsUmF0aW86cn09dCxpPWdjKG4pLGE9aS5ib3hTaXppbmc9PT1gYm9yZGVyLWJveGAsbz15YyhpLGBwYWRkaW5nYCkscz15YyhpLGBib3JkZXJgLGB3aWR0aGApLHt4OmMseTpsLGJveDp1fT14YyhlLG4pLGQ9by5sZWZ0Kyh1JiZzLmxlZnQpLGY9by50b3ArKHUmJnMudG9wKSx7d2lkdGg6cCxoZWlnaHQ6bX09dDtyZXR1cm4gYSYmKHAtPW8ud2lkdGgrcy53aWR0aCxtLT1vLmhlaWdodCtzLmhlaWdodCkse3g6TWF0aC5yb3VuZCgoYy1kKS9wKm4ud2lkdGgvcikseTpNYXRoLnJvdW5kKChsLWYpL20qbi5oZWlnaHQvcil9fWZ1bmN0aW9uIENjKGUsdCxuKXtsZXQgcixpO2lmKHQ9PT12b2lkIDB8fG49PT12b2lkIDApe2xldCBhPWUmJm1jKGUpO2lmKCFhKXQ9ZS5jbGllbnRXaWR0aCxuPWUuY2xpZW50SGVpZ2h0O2Vsc2V7bGV0IGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWdjKGEpLHM9eWMobyxgYm9yZGVyYCxgd2lkdGhgKSxjPXljKG8sYHBhZGRpbmdgKTt0PWUud2lkdGgtYy53aWR0aC1zLndpZHRoLG49ZS5oZWlnaHQtYy5oZWlnaHQtcy5oZWlnaHQscj1oYyhvLm1heFdpZHRoLGEsYGNsaWVudFdpZHRoYCksaT1oYyhvLm1heEhlaWdodCxhLGBjbGllbnRIZWlnaHRgKX19cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om4sbWF4V2lkdGg6cnx8X28sbWF4SGVpZ2h0Oml8fF9vfX12YXIgd2M9ZT0+TWF0aC5yb3VuZChlKjEwKS8xMDtmdW5jdGlvbiBUYyhlLHQsbixyKXtsZXQgaT1nYyhlKSxhPXljKGksYG1hcmdpbmApLG89aGMoaS5tYXhXaWR0aCxlLGBjbGllbnRXaWR0aGApfHxfbyxzPWhjKGkubWF4SGVpZ2h0LGUsYGNsaWVudEhlaWdodGApfHxfbyxjPUNjKGUsdCxuKSx7d2lkdGg6bCxoZWlnaHQ6dX09YztpZihpLmJveFNpemluZz09PWBjb250ZW50LWJveGApe2xldCBlPXljKGksYGJvcmRlcmAsYHdpZHRoYCksdD15YyhpLGBwYWRkaW5nYCk7bC09dC53aWR0aCtlLndpZHRoLHUtPXQuaGVpZ2h0K2UuaGVpZ2h0fXJldHVybiBsPU1hdGgubWF4KDAsbC1hLndpZHRoKSx1PU1hdGgubWF4KDAscj9sL3I6dS1hLmhlaWdodCksbD13YyhNYXRoLm1pbihsLG8sYy5tYXhXaWR0aCkpLHU9d2MoTWF0aC5taW4odSxzLGMubWF4SGVpZ2h0KSksbCYmIXUmJih1PXdjKGwvMikpLCh0IT09dm9pZCAwfHxuIT09dm9pZCAwKSYmciYmYy5oZWlnaHQmJnU+Yy5oZWlnaHQmJih1PWMuaGVpZ2h0LGw9d2MoTWF0aC5mbG9vcih1KnIpKSkse3dpZHRoOmwsaGVpZ2h0OnV9fWZ1bmN0aW9uIEVjKGUsdCxuKXtsZXQgcj10fHwxLGk9d2MoZS5oZWlnaHQqciksYT13YyhlLndpZHRoKnIpO2UuaGVpZ2h0PXdjKGUuaGVpZ2h0KSxlLndpZHRoPXdjKGUud2lkdGgpO2xldCBvPWUuY2FudmFzO3JldHVybiBvLnN0eWxlJiYobnx8IW8uc3R5bGUuaGVpZ2h0JiYhby5zdHlsZS53aWR0aCkmJihvLnN0eWxlLmhlaWdodD1gJHtlLmhlaWdodH1weGAsby5zdHlsZS53aWR0aD1gJHtlLndpZHRofXB4YCksZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PXJ8fG8uaGVpZ2h0IT09aXx8by53aWR0aCE9PWE/KGUuY3VycmVudERldmljZVBpeGVsUmF0aW89cixvLmhlaWdodD1pLG8ud2lkdGg9YSxlLmN0eC5zZXRUcmFuc2Zvcm0ociwwLDAsciwwLDApLCEwKTohMX12YXIgRGM9ZnVuY3Rpb24oKXtsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fTtwYygpJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCkpfWNhdGNoe31yZXR1cm4gZX0oKTtmdW5jdGlvbiBPYyhlLHQpe2xldCBuPV9jKGUsdCkscj1uJiZuLm1hdGNoKC9eKFxkKykoXC5cZCspP3B4JC8pO3JldHVybiByPytyWzFdOnZvaWQgMH12YXIga2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm57eChuKXtyZXR1cm4gZStlK3Qtbn0sc2V0V2lkdGgoZSl7dD1lfSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGU9PT1gY2VudGVyYD9lOmU9PT1gcmlnaHRgP2BsZWZ0YDpgcmlnaHRgfSx4UGx1cyhlLHQpe3JldHVybiBlLXR9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZS10fX19LEFjPWZ1bmN0aW9uKCl7cmV0dXJue3goZSl7cmV0dXJuIGV9LHNldFdpZHRoKGUpe30sdGV4dEFsaWduKGUpe3JldHVybiBlfSx4UGx1cyhlLHQpe3JldHVybiBlK3R9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZX19fTtmdW5jdGlvbiBqYyhlLHQsbil7cmV0dXJuIGU/a2ModCxuKTpBYygpfWZ1bmN0aW9uIE1jKGUsdCl7bGV0IG4scjsodD09PWBsdHJgfHx0PT09YHJ0bGApJiYobj1lLmNhbnZhcy5zdHlsZSxyPVtuLmdldFByb3BlcnR5VmFsdWUoYGRpcmVjdGlvbmApLG4uZ2V0UHJvcGVydHlQcmlvcml0eShgZGlyZWN0aW9uYCldLG4uc2V0UHJvcGVydHkoYGRpcmVjdGlvbmAsdCxgaW1wb3J0YW50YCksZS5wcmV2VGV4dERpcmVjdGlvbj1yKX1mdW5jdGlvbiBOYyhlLHQpe3QhPT12b2lkIDAmJihkZWxldGUgZS5wcmV2VGV4dERpcmVjdGlvbixlLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0WzBdLHRbMV0pKX1mdW5jdGlvbiBQYyhlLHQsbil7cmV0dXJuIGUub3B0aW9ucy5jbGlwP2Vbbl06dFtuXX1mdW5jdGlvbiBGYyhlLHQpe2xldHt4U2NhbGU6bix5U2NhbGU6cn09ZTtyZXR1cm4gbiYmcj97bGVmdDpQYyhuLHQsYGxlZnRgKSxyaWdodDpQYyhuLHQsYHJpZ2h0YCksdG9wOlBjKHIsdCxgdG9wYCksYm90dG9tOlBjKHIsdCxgYm90dG9tYCl9OnR9ZnVuY3Rpb24gSWMoZSx0KXtsZXQgbj10Ll9jbGlwO2lmKG4uZGlzYWJsZWQpcmV0dXJuITE7bGV0IHI9RmModCxlLmNoYXJ0QXJlYSk7cmV0dXJue2xlZnQ6bi5sZWZ0PT09ITE/MDpyLmxlZnQtKG4ubGVmdD09PSEwPzA6bi5sZWZ0KSxyaWdodDpuLnJpZ2h0PT09ITE/ZS53aWR0aDpyLnJpZ2h0KyhuLnJpZ2h0PT09ITA/MDpuLnJpZ2h0KSx0b3A6bi50b3A9PT0hMT8wOnIudG9wLShuLnRvcD09PSEwPzA6bi50b3ApLGJvdHRvbTpuLmJvdHRvbT09PSExP2UuaGVpZ2h0OnIuYm90dG9tKyhuLmJvdHRvbT09PSEwPzA6bi5ib3R0b20pfX12YXIgTGM9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX2NoYXJ0cz1uZXcgTWFwLHRoaXMuX3J1bm5pbmc9ITEsdGhpcy5fbGFzdERhdGU9dm9pZCAwfV9ub3RpZnkoZSx0LG4scil7bGV0IGk9dC5saXN0ZW5lcnNbcl0sYT10LmR1cmF0aW9uO2kuZm9yRWFjaChyPT5yKHtjaGFydDplLGluaXRpYWw6dC5pbml0aWFsLG51bVN0ZXBzOmEsY3VycmVudFN0ZXA6TWF0aC5taW4obi10LnN0YXJ0LGEpfSkpfV9yZWZyZXNoKCl7dGhpcy5fcmVxdWVzdHx8PSh0aGlzLl9ydW5uaW5nPSEwLFlvLmNhbGwod2luZG93LCgpPT57dGhpcy5fdXBkYXRlKCksdGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX3J1bm5pbmcmJnRoaXMuX3JlZnJlc2goKX0pKX1fdXBkYXRlKGU9RGF0ZS5ub3coKSl7bGV0IHQ9MDt0aGlzLl9jaGFydHMuZm9yRWFjaCgobixyKT0+e2lmKCFuLnJ1bm5pbmd8fCFuLml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IGk9bi5pdGVtcyxhPWkubGVuZ3RoLTEsbz0hMSxzO2Zvcig7YT49MDstLWEpcz1pW2FdLHMuX2FjdGl2ZT8ocy5fdG90YWw+bi5kdXJhdGlvbiYmKG4uZHVyYXRpb249cy5fdG90YWwpLHMudGljayhlKSxvPSEwKTooaVthXT1pW2kubGVuZ3RoLTFdLGkucG9wKCkpO28mJihyLmRyYXcoKSx0aGlzLl9ub3RpZnkocixuLGUsYHByb2dyZXNzYCkpLGkubGVuZ3RofHwobi5ydW5uaW5nPSExLHRoaXMuX25vdGlmeShyLG4sZSxgY29tcGxldGVgKSxuLmluaXRpYWw9ITEpLHQrPWkubGVuZ3RofSksdGhpcy5fbGFzdERhdGU9ZSx0PT09MCYmKHRoaXMuX3J1bm5pbmc9ITEpfV9nZXRBbmltcyhlKXtsZXQgdD10aGlzLl9jaGFydHMsbj10LmdldChlKTtyZXR1cm4gbnx8KG49e3J1bm5pbmc6ITEsaW5pdGlhbDohMCxpdGVtczpbXSxsaXN0ZW5lcnM6e2NvbXBsZXRlOltdLHByb2dyZXNzOltdfX0sdC5zZXQoZSxuKSksbn1saXN0ZW4oZSx0LG4pe3RoaXMuX2dldEFuaW1zKGUpLmxpc3RlbmVyc1t0XS5wdXNoKG4pfWFkZChlLHQpeyF0fHwhdC5sZW5ndGh8fHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLnB1c2goLi4udCl9aGFzKGUpe3JldHVybiB0aGlzLl9nZXRBbmltcyhlKS5pdGVtcy5sZW5ndGg+MH1zdGFydChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3QmJih0LnJ1bm5pbmc9ITAsdC5zdGFydD1EYXRlLm5vdygpLHQuZHVyYXRpb249dC5pdGVtcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5fZHVyYXRpb24pLDApLHRoaXMuX3JlZnJlc2goKSl9cnVubmluZyhlKXtpZighdGhpcy5fcnVubmluZylyZXR1cm4hMTtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3JldHVybiEoIXR8fCF0LnJ1bm5pbmd8fCF0Lml0ZW1zLmxlbmd0aCl9c3RvcChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO2lmKCF0fHwhdC5pdGVtcy5sZW5ndGgpcmV0dXJuO2xldCBuPXQuaXRlbXMscj1uLmxlbmd0aC0xO2Zvcig7cj49MDstLXIpbltyXS5jYW5jZWwoKTt0Lml0ZW1zPVtdLHRoaXMuX25vdGlmeShlLHQsRGF0ZS5ub3coKSxgY29tcGxldGVgKX1yZW1vdmUoZSl7cmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoZSl9fSxSYz1gdHJhbnNwYXJlbnRgLHpjPXtib29sZWFuKGUsdCxuKXtyZXR1cm4gbj4uNT90OmV9LGNvbG9yKGUsdCxuKXtsZXQgcj1vcyhlfHxSYyksaT1yLnZhbGlkJiZvcyh0fHxSYyk7cmV0dXJuIGkmJmkudmFsaWQ/aS5taXgocixuKS5oZXhTdHJpbmcoKTp0fSxudW1iZXIoZSx0LG4pe3JldHVybiBlKyh0LWUpKm59fSxCYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyKXtsZXQgaT10W25dO3I9R3MoW2UudG8scixpLGUuZnJvbV0pO2xldCBhPUdzKFtlLmZyb20saSxyXSk7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX2ZuPWUuZm58fHpjW2UudHlwZXx8dHlwZW9mIGFdLHRoaXMuX2Vhc2luZz1pc1tlLmVhc2luZ118fGlzLmxpbmVhcix0aGlzLl9zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCkrKGUuZGVsYXl8fDApKSx0aGlzLl9kdXJhdGlvbj10aGlzLl90b3RhbD1NYXRoLmZsb29yKGUuZHVyYXRpb24pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdGFyZ2V0PXQsdGhpcy5fcHJvcD1uLHRoaXMuX2Zyb209YSx0aGlzLl90bz1yLHRoaXMuX3Byb21pc2VzPXZvaWQgMH1hY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXVwZGF0ZShlLHQsbil7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9ub3RpZnkoITEpO2xldCByPXRoaXMuX3RhcmdldFt0aGlzLl9wcm9wXSxpPW4tdGhpcy5fc3RhcnQsYT10aGlzLl9kdXJhdGlvbi1pO3RoaXMuX3N0YXJ0PW4sdGhpcy5fZHVyYXRpb249TWF0aC5mbG9vcihNYXRoLm1heChhLGUuZHVyYXRpb24pKSx0aGlzLl90b3RhbCs9aSx0aGlzLl9sb29wPSEhZS5sb29wLHRoaXMuX3RvPUdzKFtlLnRvLHQscixlLmZyb21dKSx0aGlzLl9mcm9tPUdzKFtlLmZyb20scix0XSl9fWNhbmNlbCgpe3RoaXMuX2FjdGl2ZSYmKHRoaXMudGljayhEYXRlLm5vdygpKSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbm90aWZ5KCExKSl9dGljayhlKXtsZXQgdD1lLXRoaXMuX3N0YXJ0LG49dGhpcy5fZHVyYXRpb24scj10aGlzLl9wcm9wLGk9dGhpcy5fZnJvbSxhPXRoaXMuX2xvb3Asbz10aGlzLl90byxzO2lmKHRoaXMuX2FjdGl2ZT1pIT09byYmKGF8fHQ8biksIXRoaXMuX2FjdGl2ZSl7dGhpcy5fdGFyZ2V0W3JdPW8sdGhpcy5fbm90aWZ5KCEwKTtyZXR1cm59aWYodDwwKXt0aGlzLl90YXJnZXRbcl09aTtyZXR1cm59cz10L24lMixzPWEmJnM+MT8yLXM6cyxzPXRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLE1hdGgubWF4KDAscykpKSx0aGlzLl90YXJnZXRbcl09dGhpcy5fZm4oaSxvLHMpfXdhaXQoKXtsZXQgZT10aGlzLl9wcm9taXNlc3x8PVtdO3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2UucHVzaCh7cmVzOnQscmVqOm59KX0pfV9ub3RpZnkoZSl7bGV0IHQ9ZT9gcmVzYDpgcmVqYCxuPXRoaXMuX3Byb21pc2VzfHxbXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdW3RdKCl9fSxWYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2NoYXJ0PWUsdGhpcy5fcHJvcGVydGllcz1uZXcgTWFwLHRoaXMuY29uZmlndXJlKHQpfWNvbmZpZ3VyZShlKXtpZighRyhlKSlyZXR1cm47bGV0IHQ9T2JqZWN0LmtleXMoWi5hbmltYXRpb24pLG49dGhpcy5fcHJvcGVydGllcztPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKHI9PntsZXQgaT1lW3JdO2lmKCFHKGkpKXJldHVybjtsZXQgYT17fTtmb3IobGV0IGUgb2YgdClhW2VdPWlbZV07KFcoaS5wcm9wZXJ0aWVzKSYmaS5wcm9wZXJ0aWVzfHxbcl0pLmZvckVhY2goZT0+eyhlPT09cnx8IW4uaGFzKGUpKSYmbi5zZXQoZSxhKX0pfSl9X2FuaW1hdGVPcHRpb25zKGUsdCl7bGV0IG49dC5vcHRpb25zLHI9VWMoZSxuKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9jcmVhdGVBbmltYXRpb25zKHIsbik7cmV0dXJuIG4uJHNoYXJlZCYmSGMoZS5vcHRpb25zLiRhbmltYXRpb25zLG4pLnRoZW4oKCk9PntlLm9wdGlvbnM9bn0sKCk9Pnt9KSxpfV9jcmVhdGVBbmltYXRpb25zKGUsdCl7bGV0IG49dGhpcy5fcHJvcGVydGllcyxyPVtdLGk9ZS4kYW5pbWF0aW9uc3x8PXt9LGE9T2JqZWN0LmtleXModCksbz1EYXRlLm5vdygpLHM7Zm9yKHM9YS5sZW5ndGgtMTtzPj0wOy0tcyl7bGV0IGM9YVtzXTtpZihjLmNoYXJBdCgwKT09PWAkYCljb250aW51ZTtpZihjPT09YG9wdGlvbnNgKXtyLnB1c2goLi4udGhpcy5fYW5pbWF0ZU9wdGlvbnMoZSx0KSk7Y29udGludWV9bGV0IGw9dFtjXSx1PWlbY10sZD1uLmdldChjKTtpZih1KXtpZihkJiZ1LmFjdGl2ZSgpKXt1LnVwZGF0ZShkLGwsbyk7Y29udGludWV9dS5jYW5jZWwoKX1pZighZHx8IWQuZHVyYXRpb24pe2VbY109bDtjb250aW51ZX1pW2NdPXU9bmV3IEJjKGQsZSxjLGwpLHIucHVzaCh1KX1yZXR1cm4gcn11cGRhdGUoZSx0KXtpZih0aGlzLl9wcm9wZXJ0aWVzLnNpemU9PT0wKXtPYmplY3QuYXNzaWduKGUsdCk7cmV0dXJufWxldCBuPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMoZSx0KTtpZihuLmxlbmd0aClyZXR1cm4gTGMuYWRkKHRoaXMuX2NoYXJ0LG4pLCEwfX07ZnVuY3Rpb24gSGMoZSx0KXtsZXQgbj1bXSxyPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtsZXQgaT1lW3JbdF1dO2kmJmkuYWN0aXZlKCkmJm4ucHVzaChpLndhaXQoKSl9cmV0dXJuIFByb21pc2UuYWxsKG4pfWZ1bmN0aW9uIFVjKGUsdCl7aWYoIXQpcmV0dXJuO2xldCBuPWUub3B0aW9ucztpZighbil7ZS5vcHRpb25zPXQ7cmV0dXJufXJldHVybiBuLiRzaGFyZWQmJihlLm9wdGlvbnM9bj1PYmplY3QuYXNzaWduKHt9LG4seyRzaGFyZWQ6ITEsJGFuaW1hdGlvbnM6e319KSksbn1mdW5jdGlvbiBXYyhlLHQpe2xldCBuPWUmJmUub3B0aW9uc3x8e30scj1uLnJldmVyc2UsaT1uLm1pbj09PXZvaWQgMD90OjAsYT1uLm1heD09PXZvaWQgMD90OjA7cmV0dXJue3N0YXJ0OnI/YTppLGVuZDpyP2k6YX19ZnVuY3Rpb24gR2MoZSx0LG4pe2lmKG49PT0hMSlyZXR1cm4hMTtsZXQgcj1XYyhlLG4pLGk9V2ModCxuKTtyZXR1cm57dG9wOmkuZW5kLHJpZ2h0OnIuZW5kLGJvdHRvbTppLnN0YXJ0LGxlZnQ6ci5zdGFydH19ZnVuY3Rpb24gS2MoZSl7bGV0IHQsbixyLGk7cmV0dXJuIEcoZSk/KHQ9ZS50b3Asbj1lLnJpZ2h0LHI9ZS5ib3R0b20saT1lLmxlZnQpOnQ9bj1yPWk9ZSx7dG9wOnQscmlnaHQ6bixib3R0b206cixsZWZ0OmksZGlzYWJsZWQ6ZT09PSExfX1mdW5jdGlvbiBxYyhlLHQpe2xldCBuPVtdLHI9ZS5fZ2V0U29ydGVkRGF0YXNldE1ldGFzKHQpLGksYTtmb3IoaT0wLGE9ci5sZW5ndGg7aTxhOysraSluLnB1c2gocltpXS5pbmRleCk7cmV0dXJuIG59ZnVuY3Rpb24gSmMoZSx0LG4scj17fSl7bGV0IGk9ZS5rZXlzLGE9ci5tb2RlPT09YHNpbmdsZWAsbyxzLGMsbDtpZih0PT09bnVsbClyZXR1cm47bGV0IHU9ITE7Zm9yKG89MCxzPWkubGVuZ3RoO288czsrK28pe2lmKGM9K2lbb10sYz09PW4pe2lmKHU9ITAsci5hbGwpY29udGludWU7YnJlYWt9bD1lLnZhbHVlc1tjXSxLKGwpJiYoYXx8dD09PTB8fENvKHQpPT09Q28obCkpJiYodCs9bCl9cmV0dXJuIXUmJiFyLmFsbD8wOnR9ZnVuY3Rpb24gWWMoZSx0KXtsZXR7aVNjYWxlOm4sdlNjYWxlOnJ9PXQsaT1uLmF4aXM9PT1geGA/YHhgOmB5YCxhPXIuYXhpcz09PWB4YD9geGA6YHlgLG89T2JqZWN0LmtleXMoZSkscz1BcnJheShvLmxlbmd0aCksYyxsLHU7Zm9yKGM9MCxsPW8ubGVuZ3RoO2M8bDsrK2MpdT1vW2NdLHNbY109e1tpXTp1LFthXTplW3VdfTtyZXR1cm4gc31mdW5jdGlvbiBYYyhlLHQpe2xldCBuPWUmJmUub3B0aW9ucy5zdGFja2VkO3JldHVybiBufHxuPT09dm9pZCAwJiZ0LnN0YWNrIT09dm9pZCAwfWZ1bmN0aW9uIFpjKGUsdCxuKXtyZXR1cm5gJHtlLmlkfS4ke3QuaWR9LiR7bi5zdGFja3x8bi50eXBlfWB9ZnVuY3Rpb24gUWMoZSl7bGV0e21pbjp0LG1heDpuLG1pbkRlZmluZWQ6cixtYXhEZWZpbmVkOml9PWUuZ2V0VXNlckJvdW5kcygpO3JldHVybnttaW46cj90Oi0xLzAsbWF4Omk/bjoxLzB9fWZ1bmN0aW9uICRjKGUsdCxuKXtsZXQgcj1lW3RdfHwoZVt0XT17fSk7cmV0dXJuIHJbbl18fChyW25dPXt9KX1mdW5jdGlvbiBlbChlLHQsbixyKXtmb3IobGV0IGkgb2YgdC5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcyhyKS5yZXZlcnNlKCkpe2xldCB0PWVbaS5pbmRleF07aWYobiYmdD4wfHwhbiYmdDwwKXJldHVybiBpLmluZGV4fXJldHVybiBudWxsfWZ1bmN0aW9uIHRsKGUsdCl7bGV0e2NoYXJ0Om4sX2NhY2hlZE1ldGE6cn09ZSxpPW4uX3N0YWNrc3x8PXt9LHtpU2NhbGU6YSx2U2NhbGU6byxpbmRleDpzfT1yLGM9YS5heGlzLGw9by5heGlzLHU9WmMoYSxvLHIpLGQ9dC5sZW5ndGgsZjtmb3IobGV0IGU9MDtlPGQ7KytlKXtsZXQgbj10W2VdLHtbY106YSxbbF06ZH09bixwPW4uX3N0YWNrc3x8PXt9O2Y9cFtsXT0kYyhpLHUsYSksZltzXT1kLGYuX3RvcD1lbChmLG8sITAsci50eXBlKSxmLl9ib3R0b209ZWwoZixvLCExLHIudHlwZSk7bGV0IG09Zi5fdmlzdWFsVmFsdWVzfHwoZi5fdmlzdWFsVmFsdWVzPXt9KTttW3NdPWR9fWZ1bmN0aW9uIG5sKGUsdCl7bGV0IG49ZS5zY2FsZXM7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT5uW2VdLmF4aXM9PT10KS5zaGlmdCgpfWZ1bmN0aW9uIHJsKGUsdCl7cmV0dXJuIHFzKGUse2FjdGl2ZTohMSxkYXRhc2V0OnZvaWQgMCxkYXRhc2V0SW5kZXg6dCxpbmRleDp0LG1vZGU6YGRlZmF1bHRgLHR5cGU6YGRhdGFzZXRgfSl9ZnVuY3Rpb24gaWwoZSx0LG4pe3JldHVybiBxcyhlLHthY3RpdmU6ITEsZGF0YUluZGV4OnQscGFyc2VkOnZvaWQgMCxyYXc6dm9pZCAwLGVsZW1lbnQ6bixpbmRleDp0LG1vZGU6YGRlZmF1bHRgLHR5cGU6YGRhdGFgfSl9ZnVuY3Rpb24gYWwoZSx0KXtsZXQgbj1lLmNvbnRyb2xsZXIuaW5kZXgscj1lLnZTY2FsZSYmZS52U2NhbGUuYXhpcztpZihyKXt0fHw9ZS5fcGFyc2VkO2ZvcihsZXQgZSBvZiB0KXtsZXQgdD1lLl9zdGFja3M7aWYoIXR8fHRbcl09PT12b2lkIDB8fHRbcl1bbl09PT12b2lkIDApcmV0dXJuO2RlbGV0ZSB0W3JdW25dLHRbcl0uX3Zpc3VhbFZhbHVlcyE9PXZvaWQgMCYmdFtyXS5fdmlzdWFsVmFsdWVzW25dIT09dm9pZCAwJiZkZWxldGUgdFtyXS5fdmlzdWFsVmFsdWVzW25dfX19dmFyIG9sPWU9PmU9PT1gcmVzZXRgfHxlPT09YG5vbmVgLHNsPShlLHQpPT50P2U6T2JqZWN0LmFzc2lnbih7fSxlKSxjbD0oZSx0LG4pPT5lJiYhdC5oaWRkZW4mJnQuX3N0YWNrZWQmJntrZXlzOnFjKG4sITApLHZhbHVlczpudWxsfSxsbD1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9e307c3RhdGljIGRhdGFzZXRFbGVtZW50VHlwZT1udWxsO3N0YXRpYyBkYXRhRWxlbWVudFR5cGU9bnVsbDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY2hhcnQ9ZSx0aGlzLl9jdHg9ZS5jdHgsdGhpcy5pbmRleD10LHRoaXMuX2NhY2hlZERhdGFPcHRzPXt9LHRoaXMuX2NhY2hlZE1ldGE9dGhpcy5nZXRNZXRhKCksdGhpcy5fdHlwZT10aGlzLl9jYWNoZWRNZXRhLnR5cGUsdGhpcy5vcHRpb25zPXZvaWQgMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuX2RhdGE9dm9pZCAwLHRoaXMuX29iamVjdERhdGE9dm9pZCAwLHRoaXMuX3NoYXJlZE9wdGlvbnM9dm9pZCAwLHRoaXMuX2RyYXdTdGFydD12b2lkIDAsdGhpcy5fZHJhd0NvdW50PXZvaWQgMCx0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmc9ITEsdGhpcy5zdXBwb3J0c0RlY2ltYXRpb249ITEsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5fc3luY0xpc3Q9W10sdGhpcy5kYXRhc2V0RWxlbWVudFR5cGU9bmV3LnRhcmdldC5kYXRhc2V0RWxlbWVudFR5cGUsdGhpcy5kYXRhRWxlbWVudFR5cGU9bmV3LnRhcmdldC5kYXRhRWxlbWVudFR5cGUsdGhpcy5pbml0aWFsaXplKCl9aW5pdGlhbGl6ZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5jb25maWd1cmUoKSx0aGlzLmxpbmtTY2FsZXMoKSxlLl9zdGFja2VkPVhjKGUudlNjYWxlLGUpLHRoaXMuYWRkRWxlbWVudHMoKSx0aGlzLm9wdGlvbnMuZmlsbCYmIXRoaXMuY2hhcnQuaXNQbHVnaW5FbmFibGVkKGBmaWxsZXJgKSYmY29uc29sZS53YXJuKGBUcmllZCB0byB1c2UgdGhlICdmaWxsJyBvcHRpb24gd2l0aG91dCB0aGUgJ0ZpbGxlcicgcGx1Z2luIGVuYWJsZWQuIFBsZWFzZSBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZSAnRmlsbGVyJyBwbHVnaW4gYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgZGlzYWJsZWQgaW4gdGhlIG9wdGlvbnNgKX11cGRhdGVJbmRleChlKXt0aGlzLmluZGV4IT09ZSYmYWwodGhpcy5fY2FjaGVkTWV0YSksdGhpcy5pbmRleD1lfWxpbmtTY2FsZXMoKXtsZXQgZT10aGlzLmNoYXJ0LHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXRoaXMuZ2V0RGF0YXNldCgpLHI9KGUsdCxuLHIpPT5lPT09YHhgP3Q6ZT09PWByYD9yOm4saT10LnhBeGlzSUQ9cShuLnhBeGlzSUQsbmwoZSxgeGApKSxhPXQueUF4aXNJRD1xKG4ueUF4aXNJRCxubChlLGB5YCkpLG89dC5yQXhpc0lEPXEobi5yQXhpc0lELG5sKGUsYHJgKSkscz10LmluZGV4QXhpcyxjPXQuaUF4aXNJRD1yKHMsaSxhLG8pLGw9dC52QXhpc0lEPXIocyxhLGksbyk7dC54U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGkpLHQueVNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChhKSx0LnJTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQobyksdC5pU2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGMpLHQudlNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChsKX1nZXREYXRhc2V0KCl7cmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEodGhpcy5pbmRleCl9Z2V0U2NhbGVGb3JJZChlKXtyZXR1cm4gdGhpcy5jaGFydC5zY2FsZXNbZV19X2dldE90aGVyU2NhbGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTtyZXR1cm4gZT09PXQuaVNjYWxlP3QudlNjYWxlOnQuaVNjYWxlfXJlc2V0KCl7dGhpcy5fdXBkYXRlKGByZXNldGApfV9kZXN0cm95KCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhJiZxbyh0aGlzLl9kYXRhLHRoaXMpLGUuX3N0YWNrZWQmJmFsKGUpfV9kYXRhQ2hlY2soKXtsZXQgZT10aGlzLmdldERhdGFzZXQoKSx0PWUuZGF0YXx8PVtdLG49dGhpcy5fZGF0YTtpZihHKHQpKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGE9WWModCxlKX1lbHNlIGlmKG4hPT10KXtpZihuKXtxbyhuLHRoaXMpO2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7YWwoZSksZS5fcGFyc2VkPVtdfXQmJk9iamVjdC5pc0V4dGVuc2libGUodCkmJktvKHQsdGhpcyksdGhpcy5fc3luY0xpc3Q9W10sdGhpcy5fZGF0YT10fX1hZGRFbGVtZW50cygpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YUNoZWNrKCksdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUmJihlLmRhdGFzZXQ9bmV3IHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKX1idWlsZE9yVXBkYXRlRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXRoaXMuZ2V0RGF0YXNldCgpLHI9ITE7dGhpcy5fZGF0YUNoZWNrKCk7bGV0IGk9dC5fc3RhY2tlZDt0Ll9zdGFja2VkPVhjKHQudlNjYWxlLHQpLHQuc3RhY2shPT1uLnN0YWNrJiYocj0hMCxhbCh0KSx0LnN0YWNrPW4uc3RhY2spLHRoaXMuX3Jlc3luY0VsZW1lbnRzKGUpLChyfHxpIT09dC5fc3RhY2tlZCkmJih0bCh0aGlzLHQuX3BhcnNlZCksdC5fc3RhY2tlZD1YYyh0LnZTY2FsZSx0KSl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5jaGFydC5jb25maWcsdD1lLmRhdGFzZXRTY29wZUtleXModGhpcy5fdHlwZSksbj1lLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSx0LCEwKTt0aGlzLm9wdGlvbnM9ZS5jcmVhdGVSZXNvbHZlcihuLHRoaXMuZ2V0Q29udGV4dCgpKSx0aGlzLl9wYXJzaW5nPXRoaXMub3B0aW9ucy5wYXJzaW5nLHRoaXMuX2NhY2hlZERhdGFPcHRzPXt9fXBhcnNlKGUsdCl7bGV0e19jYWNoZWRNZXRhOm4sX2RhdGE6cn09dGhpcyx7aVNjYWxlOmksX3N0YWNrZWQ6YX09bixvPWkuYXhpcyxzPWU9PT0wJiZ0PT09ci5sZW5ndGh8fG4uX3NvcnRlZCxjPWU+MCYmbi5fcGFyc2VkW2UtMV0sbCx1LGQ7aWYodGhpcy5fcGFyc2luZz09PSExKW4uX3BhcnNlZD1yLG4uX3NvcnRlZD0hMCxkPXI7ZWxzZXtkPVcocltlXSk/dGhpcy5wYXJzZUFycmF5RGF0YShuLHIsZSx0KTpHKHJbZV0pP3RoaXMucGFyc2VPYmplY3REYXRhKG4scixlLHQpOnRoaXMucGFyc2VQcmltaXRpdmVEYXRhKG4scixlLHQpO2xldCBpPSgpPT51W29dPT09bnVsbHx8YyYmdVtvXTxjW29dO2ZvcihsPTA7bDx0OysrbCluLl9wYXJzZWRbbCtlXT11PWRbbF0scyYmKGkoKSYmKHM9ITEpLGM9dSk7bi5fc29ydGVkPXN9YSYmdGwodGhpcyxkKX1wYXJzZVByaW1pdGl2ZURhdGEoZSx0LG4scil7bGV0e2lTY2FsZTppLHZTY2FsZTphfT1lLG89aS5heGlzLHM9YS5heGlzLGM9aS5nZXRMYWJlbHMoKSxsPWk9PT1hLHU9QXJyYXkociksZCxmLHA7Zm9yKGQ9MCxmPXI7ZDxmOysrZClwPWQrbix1W2RdPXtbb106bHx8aS5wYXJzZShjW3BdLHApLFtzXTphLnBhcnNlKHRbcF0scCl9O3JldHVybiB1fXBhcnNlQXJyYXlEYXRhKGUsdCxuLHIpe2xldHt4U2NhbGU6aSx5U2NhbGU6YX09ZSxvPUFycmF5KHIpLHMsYyxsLHU7Zm9yKHM9MCxjPXI7czxjOysrcylsPXMrbix1PXRbbF0sb1tzXT17eDppLnBhcnNlKHVbMF0sbCkseTphLnBhcnNlKHVbMV0sbCl9O3JldHVybiBvfXBhcnNlT2JqZWN0RGF0YShlLHQsbixyKXtsZXR7eFNjYWxlOmkseVNjYWxlOmF9PWUse3hBeGlzS2V5Om89YHhgLHlBeGlzS2V5OnM9YHlgfT10aGlzLl9wYXJzaW5nLGM9QXJyYXkociksbCx1LGQsZjtmb3IobD0wLHU9cjtsPHU7KytsKWQ9bCtuLGY9dFtkXSxjW2xdPXt4OmkucGFyc2UobG8oZixvKSxkKSx5OmEucGFyc2UobG8oZixzKSxkKX07cmV0dXJuIGN9Z2V0UGFyc2VkKGUpe3JldHVybiB0aGlzLl9jYWNoZWRNZXRhLl9wYXJzZWRbZV19Z2V0RGF0YUVsZW1lbnQoZSl7cmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuZGF0YVtlXX1hcHBseVN0YWNrKGUsdCxuKXtsZXQgcj10aGlzLmNoYXJ0LGk9dGhpcy5fY2FjaGVkTWV0YSxhPXRbZS5heGlzXTtyZXR1cm4gSmMoe2tleXM6cWMociwhMCksdmFsdWVzOnQuX3N0YWNrc1tlLmF4aXNdLl92aXN1YWxWYWx1ZXN9LGEsaS5pbmRleCx7bW9kZTpufSl9dXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGUsdCxuLHIpe2xldCBpPW5bdC5heGlzXSxhPWk9PT1udWxsP05hTjppLG89ciYmbi5fc3RhY2tzW3QuYXhpc107ciYmbyYmKHIudmFsdWVzPW8sYT1KYyhyLGksdGhpcy5fY2FjaGVkTWV0YS5pbmRleCkpLGUubWluPU1hdGgubWluKGUubWluLGEpLGUubWF4PU1hdGgubWF4KGUubWF4LGEpfWdldE1pbk1heChlLHQpe2xldCBuPXRoaXMuX2NhY2hlZE1ldGEscj1uLl9wYXJzZWQsaT1uLl9zb3J0ZWQmJmU9PT1uLmlTY2FsZSxhPXIubGVuZ3RoLG89dGhpcy5fZ2V0T3RoZXJTY2FsZShlKSxzPWNsKHQsbix0aGlzLmNoYXJ0KSxjPXttaW46MS8wLG1heDotMS8wfSx7bWluOmwsbWF4OnV9PVFjKG8pLGQsZjtmdW5jdGlvbiBwKCl7Zj1yW2RdO2xldCB0PWZbby5heGlzXTtyZXR1cm4hSyhmW2UuYXhpc10pfHxsPnR8fHU8dH1mb3IoZD0wO2Q8YSYmISghcCgpJiYodGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQoYyxlLGYscyksaSkpOysrZCk7aWYoaSl7Zm9yKGQ9YS0xO2Q+PTA7LS1kKWlmKCFwKCkpe3RoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGMsZSxmLHMpO2JyZWFrfX1yZXR1cm4gY31nZXRBbGxQYXJzZWRWYWx1ZXMoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkLG49W10scixpLGE7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpYT10W3JdW2UuYXhpc10sSyhhKSYmbi5wdXNoKGEpO3JldHVybiBufWdldE1heE92ZXJmbG93KCl7cmV0dXJuITF9Z2V0TGFiZWxBbmRWYWx1ZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLG49dC5pU2NhbGUscj10LnZTY2FsZSxpPXRoaXMuZ2V0UGFyc2VkKGUpO3JldHVybntsYWJlbDpuP2BgK24uZ2V0TGFiZWxGb3JWYWx1ZShpW24uYXhpc10pOmBgLHZhbHVlOnI/YGArci5nZXRMYWJlbEZvclZhbHVlKGlbci5heGlzXSk6YGB9fV91cGRhdGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLnVwZGF0ZShlfHxgZGVmYXVsdGApLHQuX2NsaXA9S2MocSh0aGlzLm9wdGlvbnMuY2xpcCxHYyh0LnhTY2FsZSx0LnlTY2FsZSx0aGlzLmdldE1heE92ZXJmbG93KCkpKSl9dXBkYXRlKGUpe31kcmF3KCl7bGV0IGU9dGhpcy5fY3R4LHQ9dGhpcy5jaGFydCxuPXRoaXMuX2NhY2hlZE1ldGEscj1uLmRhdGF8fFtdLGk9dC5jaGFydEFyZWEsYT1bXSxvPXRoaXMuX2RyYXdTdGFydHx8MCxzPXRoaXMuX2RyYXdDb3VudHx8ci5sZW5ndGgtbyxjPXRoaXMub3B0aW9ucy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcCxsO2ZvcihuLmRhdGFzZXQmJm4uZGF0YXNldC5kcmF3KGUsaSxvLHMpLGw9bztsPG8rczsrK2wpe2xldCB0PXJbbF07dC5oaWRkZW58fCh0LmFjdGl2ZSYmYz9hLnB1c2godCk6dC5kcmF3KGUsaSkpfWZvcihsPTA7bDxhLmxlbmd0aDsrK2wpYVtsXS5kcmF3KGUsaSl9Z2V0U3R5bGUoZSx0KXtsZXQgbj10P2BhY3RpdmVgOmBkZWZhdWx0YDtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0P3RoaXMucmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhuKTp0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZXx8MCxuKX1nZXRDb250ZXh0KGUsdCxuKXtsZXQgcj10aGlzLmdldERhdGFzZXQoKSxpO2lmKGU+PTAmJmU8dGhpcy5fY2FjaGVkTWV0YS5kYXRhLmxlbmd0aCl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YS5kYXRhW2VdO2k9dC4kY29udGV4dHx8PWlsKHRoaXMuZ2V0Q29udGV4dCgpLGUsdCksaS5wYXJzZWQ9dGhpcy5nZXRQYXJzZWQoZSksaS5yYXc9ci5kYXRhW2VdLGkuaW5kZXg9aS5kYXRhSW5kZXg9ZX1lbHNlIGk9dGhpcy4kY29udGV4dHx8PXJsKHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLHRoaXMuaW5kZXgpLGkuZGF0YXNldD1yLGkuaW5kZXg9aS5kYXRhc2V0SW5kZXg9dGhpcy5pbmRleDtyZXR1cm4gaS5hY3RpdmU9ISF0LGkubW9kZT1uLGl9cmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlLmlkLGUpfXJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZSx0KXtyZXR1cm4gdGhpcy5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHRoaXMuZGF0YUVsZW1lbnRUeXBlLmlkLHQsZSl9X3Jlc29sdmVFbGVtZW50T3B0aW9ucyhlLHQ9YGRlZmF1bHRgLG4pe2xldCByPXQ9PT1gYWN0aXZlYCxpPXRoaXMuX2NhY2hlZERhdGFPcHRzLGE9ZStgLWArdCxvPWlbYV0scz10aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcmJmZvKG4pO2lmKG8pcmV0dXJuIHNsKG8scyk7bGV0IGM9dGhpcy5jaGFydC5jb25maWcsbD1jLmRhdGFzZXRFbGVtZW50U2NvcGVLZXlzKHRoaXMuX3R5cGUsZSksdT1yP1tgJHtlfUhvdmVyYCxgaG92ZXJgLGUsYGBdOltlLGBgXSxkPWMuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLGwpLGY9T2JqZWN0LmtleXMoWi5lbGVtZW50c1tlXSkscD1jLnJlc29sdmVOYW1lZE9wdGlvbnMoZCxmLCgpPT50aGlzLmdldENvbnRleHQobixyLHQpLHUpO3JldHVybiBwLiRzaGFyZWQmJihwLiRzaGFyZWQ9cyxpW2FdPU9iamVjdC5mcmVlemUoc2wocCxzKSkpLHB9X3Jlc29sdmVBbmltYXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLmNoYXJ0LGk9dGhpcy5fY2FjaGVkRGF0YU9wdHMsYT1gYW5pbWF0aW9uLSR7dH1gLG89aVthXTtpZihvKXJldHVybiBvO2xldCBzO2lmKHIub3B0aW9ucy5hbmltYXRpb24hPT0hMSl7bGV0IHI9dGhpcy5jaGFydC5jb25maWcsaT1yLmRhdGFzZXRBbmltYXRpb25TY29wZUtleXModGhpcy5fdHlwZSx0KSxhPXIuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLGkpO3M9ci5jcmVhdGVSZXNvbHZlcihhLHRoaXMuZ2V0Q29udGV4dChlLG4sdCkpfWxldCBjPW5ldyBWYyhyLHMmJnMuYW5pbWF0aW9ucyk7cmV0dXJuIHMmJnMuX2NhY2hlYWJsZSYmKGlbYV09T2JqZWN0LmZyZWV6ZShjKSksY31nZXRTaGFyZWRPcHRpb25zKGUpe2lmKGUuJHNoYXJlZClyZXR1cm4gdGhpcy5fc2hhcmVkT3B0aW9uc3x8PU9iamVjdC5hc3NpZ24oe30sZSl9aW5jbHVkZU9wdGlvbnMoZSx0KXtyZXR1cm4hdHx8b2woZSl8fHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZH1fZ2V0U2hhcmVkT3B0aW9ucyhlLHQpe2xldCBuPXRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlLHQpLHI9dGhpcy5fc2hhcmVkT3B0aW9ucyxpPXRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhuKSxhPXRoaXMuaW5jbHVkZU9wdGlvbnModCxpKXx8aSE9PXI7cmV0dXJuIHRoaXMudXBkYXRlU2hhcmVkT3B0aW9ucyhpLHQsbikse3NoYXJlZE9wdGlvbnM6aSxpbmNsdWRlT3B0aW9uczphfX11cGRhdGVFbGVtZW50KGUsdCxuLHIpe29sKHIpP09iamVjdC5hc3NpZ24oZSxuKTp0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh0LHIpLnVwZGF0ZShlLG4pfXVwZGF0ZVNoYXJlZE9wdGlvbnMoZSx0LG4pe2UmJiFvbCh0KSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnModm9pZCAwLHQpLnVwZGF0ZShlLG4pfV9zZXRTdHlsZShlLHQsbixyKXtlLmFjdGl2ZT1yO2xldCBpPXRoaXMuZ2V0U3R5bGUodCxyKTt0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh0LG4scikudXBkYXRlKGUse29wdGlvbnM6IXImJnRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhpKXx8aX0pfXJlbW92ZUhvdmVyU3R5bGUoZSx0LG4pe3RoaXMuX3NldFN0eWxlKGUsbixgYWN0aXZlYCwhMSl9c2V0SG92ZXJTdHlsZShlLHQsbil7dGhpcy5fc2V0U3R5bGUoZSxuLGBhY3RpdmVgLCEwKX1fcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7ZSYmdGhpcy5fc2V0U3R5bGUoZSx2b2lkIDAsYGFjdGl2ZWAsITEpfV9zZXREYXRhc2V0SG92ZXJTdHlsZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldDtlJiZ0aGlzLl9zZXRTdHlsZShlLHZvaWQgMCxgYWN0aXZlYCwhMCl9X3Jlc3luY0VsZW1lbnRzKGUpe2xldCB0PXRoaXMuX2RhdGEsbj10aGlzLl9jYWNoZWRNZXRhLmRhdGE7Zm9yKGxldFtlLHQsbl1vZiB0aGlzLl9zeW5jTGlzdCl0aGlzW2VdKHQsbik7dGhpcy5fc3luY0xpc3Q9W107bGV0IHI9bi5sZW5ndGgsaT10Lmxlbmd0aCxhPU1hdGgubWluKGkscik7YSYmdGhpcy5wYXJzZSgwLGEpLGk+cj90aGlzLl9pbnNlcnRFbGVtZW50cyhyLGktcixlKTppPHImJnRoaXMuX3JlbW92ZUVsZW1lbnRzKGksci1pKX1faW5zZXJ0RWxlbWVudHMoZSx0LG49ITApe2xldCByPXRoaXMuX2NhY2hlZE1ldGEsaT1yLmRhdGEsYT1lK3QsbyxzPWU9Pntmb3IoZS5sZW5ndGgrPXQsbz1lLmxlbmd0aC0xO28+PWE7by0tKWVbb109ZVtvLXRdfTtmb3IocyhpKSxvPWU7bzxhOysrbylpW29dPW5ldyB0aGlzLmRhdGFFbGVtZW50VHlwZTt0aGlzLl9wYXJzaW5nJiZzKHIuX3BhcnNlZCksdGhpcy5wYXJzZShlLHQpLG4mJnRoaXMudXBkYXRlRWxlbWVudHMoaSxlLHQsYHJlc2V0YCl9dXBkYXRlRWxlbWVudHMoZSx0LG4scil7fV9yZW1vdmVFbGVtZW50cyhlLHQpe2xldCBuPXRoaXMuX2NhY2hlZE1ldGE7aWYodGhpcy5fcGFyc2luZyl7bGV0IHI9bi5fcGFyc2VkLnNwbGljZShlLHQpO24uX3N0YWNrZWQmJmFsKG4scil9bi5kYXRhLnNwbGljZShlLHQpfV9zeW5jKGUpe2lmKHRoaXMuX3BhcnNpbmcpdGhpcy5fc3luY0xpc3QucHVzaChlKTtlbHNle2xldFt0LG4scl09ZTt0aGlzW3RdKG4scil9dGhpcy5jaGFydC5fZGF0YUNoYW5nZXMucHVzaChbdGhpcy5pbmRleCwuLi5lXSl9X29uRGF0YVB1c2goKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoO3RoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLHRoaXMuZ2V0RGF0YXNldCgpLmRhdGEubGVuZ3RoLWUsZV0pfV9vbkRhdGFQb3AoKXt0aGlzLl9zeW5jKFtgX3JlbW92ZUVsZW1lbnRzYCx0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoLTEsMV0pfV9vbkRhdGFTaGlmdCgpe3RoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLDAsMV0pfV9vbkRhdGFTcGxpY2UoZSx0KXt0JiZ0aGlzLl9zeW5jKFtgX3JlbW92ZUVsZW1lbnRzYCxlLHRdKTtsZXQgbj1hcmd1bWVudHMubGVuZ3RoLTI7biYmdGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsZSxuXSl9X29uRGF0YVVuc2hpZnQoKXt0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCwwLGFyZ3VtZW50cy5sZW5ndGhdKX19O2Z1bmN0aW9uIHVsKGUsdCl7aWYoIWUuX2NhY2hlLiRiYXIpe2xldCBuPWUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModCkscj1bXTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspcj1yLmNvbmNhdChuW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKGUpKTtlLl9jYWNoZS4kYmFyPUpvKHIuc29ydCgoZSx0KT0+ZS10KSl9cmV0dXJuIGUuX2NhY2hlLiRiYXJ9ZnVuY3Rpb24gZGwoZSl7bGV0IHQ9ZS5pU2NhbGUsbj11bCh0LGUudHlwZSkscj10Ll9sZW5ndGgsaSxhLG8scyxjPSgpPT57byE9PTMyNzY3JiZvIT09LTMyNzY4JiYoZm8ocykmJihyPU1hdGgubWluKHIsTWF0aC5hYnMoby1zKXx8cikpLHM9byl9O2ZvcihpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW89dC5nZXRQaXhlbEZvclZhbHVlKG5baV0pLGMoKTtmb3Iocz12b2lkIDAsaT0wLGE9dC50aWNrcy5sZW5ndGg7aTxhOysraSlvPXQuZ2V0UGl4ZWxGb3JUaWNrKGkpLGMoKTtyZXR1cm4gcn1mdW5jdGlvbiBmbChlLHQsbixyKXtsZXQgaT1uLmJhclRoaWNrbmVzcyxhLG87cmV0dXJuIFUoaSk/KGE9dC5taW4qbi5jYXRlZ29yeVBlcmNlbnRhZ2Usbz1uLmJhclBlcmNlbnRhZ2UpOihhPWkqcixvPTEpLHtjaHVuazphL3IscmF0aW86byxzdGFydDp0LnBpeGVsc1tlXS1hLzJ9fWZ1bmN0aW9uIHBsKGUsdCxuLHIpe2xldCBpPXQucGl4ZWxzLGE9aVtlXSxvPWU+MD9pW2UtMV06bnVsbCxzPWU8aS5sZW5ndGgtMT9pW2UrMV06bnVsbCxjPW4uY2F0ZWdvcnlQZXJjZW50YWdlO289PT1udWxsJiYobz1hLShzPT09bnVsbD90LmVuZC10LnN0YXJ0OnMtYSkpLHM9PT1udWxsJiYocz1hK2Etbyk7bGV0IGw9YS0oYS1NYXRoLm1pbihvLHMpKS8yKmM7cmV0dXJue2NodW5rOk1hdGguYWJzKHMtbykvMipjL3IscmF0aW86bi5iYXJQZXJjZW50YWdlLHN0YXJ0Omx9fWZ1bmN0aW9uIG1sKGUsdCxuLHIpe2xldCBpPW4ucGFyc2UoZVswXSxyKSxhPW4ucGFyc2UoZVsxXSxyKSxvPU1hdGgubWluKGksYSkscz1NYXRoLm1heChpLGEpLGM9byxsPXM7TWF0aC5hYnMobyk+TWF0aC5hYnMocykmJihjPXMsbD1vKSx0W24uYXhpc109bCx0Ll9jdXN0b209e2JhclN0YXJ0OmMsYmFyRW5kOmwsc3RhcnQ6aSxlbmQ6YSxtaW46byxtYXg6c319ZnVuY3Rpb24gaGwoZSx0LG4scil7cmV0dXJuIFcoZSk/bWwoZSx0LG4scik6dFtuLmF4aXNdPW4ucGFyc2UoZSxyKSx0fWZ1bmN0aW9uIGdsKGUsdCxuLHIpe2xldCBpPWUuaVNjYWxlLGE9ZS52U2NhbGUsbz1pLmdldExhYmVscygpLHM9aT09PWEsYz1bXSxsLHUsZCxmO2ZvcihsPW4sdT1uK3I7bDx1OysrbClmPXRbbF0sZD17fSxkW2kuYXhpc109c3x8aS5wYXJzZShvW2xdLGwpLGMucHVzaChobChmLGQsYSxsKSk7cmV0dXJuIGN9ZnVuY3Rpb24gX2woZSl7cmV0dXJuIGUmJmUuYmFyU3RhcnQhPT12b2lkIDAmJmUuYmFyRW5kIT09dm9pZCAwfWZ1bmN0aW9uIHZsKGUsdCxuKXtyZXR1cm4gZT09PTA/KHQuaXNIb3Jpem9udGFsKCk/MTotMSkqKHQubWluPj1uPzE6LTEpOkNvKGUpfWZ1bmN0aW9uIHlsKGUpe2xldCB0LG4scixpLGE7cmV0dXJuIGUuaG9yaXpvbnRhbD8odD1lLmJhc2U+ZS54LG49YGxlZnRgLHI9YHJpZ2h0YCk6KHQ9ZS5iYXNlPGUueSxuPWBib3R0b21gLHI9YHRvcGApLHQ/KGk9YGVuZGAsYT1gc3RhcnRgKTooaT1gc3RhcnRgLGE9YGVuZGApLHtzdGFydDpuLGVuZDpyLHJldmVyc2U6dCx0b3A6aSxib3R0b206YX19ZnVuY3Rpb24gYmwoZSx0LG4scil7bGV0IGk9dC5ib3JkZXJTa2lwcGVkLGE9e307aWYoIWkpe2UuYm9yZGVyU2tpcHBlZD1hO3JldHVybn1pZihpPT09ITApe2UuYm9yZGVyU2tpcHBlZD17dG9wOiEwLHJpZ2h0OiEwLGJvdHRvbTohMCxsZWZ0OiEwfTtyZXR1cm59bGV0e3N0YXJ0Om8sZW5kOnMscmV2ZXJzZTpjLHRvcDpsLGJvdHRvbTp1fT15bChlKTtpPT09YG1pZGRsZWAmJm4mJihlLmVuYWJsZUJvcmRlclJhZGl1cz0hMCwobi5fdG9wfHwwKT09PXI/aT1sOihuLl9ib3R0b218fDApPT09cj9pPXU6KGFbeGwodSxvLHMsYyldPSEwLGk9bCkpLGFbeGwoaSxvLHMsYyldPSEwLGUuYm9yZGVyU2tpcHBlZD1hfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe3JldHVybiByPyhlPVNsKGUsdCxuKSxlPUNsKGUsbix0KSk6ZT1DbChlLHQsbiksZX1mdW5jdGlvbiBTbChlLHQsbil7cmV0dXJuIGU9PT10P246ZT09PW4/dDplfWZ1bmN0aW9uIENsKGUsdCxuKXtyZXR1cm4gZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjplfWZ1bmN0aW9uIHdsKGUse2luZmxhdGVBbW91bnQ6dH0sbil7ZS5pbmZsYXRlQW1vdW50PXQ9PT1gYXV0b2A/bj09PTE/LjMzOjA6dH12YXIgVGw9Y2xhc3MgZXh0ZW5kcyBsbHtzdGF0aWMgaWQ9YGJhcmA7c3RhdGljIGRlZmF1bHRzPXtkYXRhc2V0RWxlbWVudFR5cGU6ITEsZGF0YUVsZW1lbnRUeXBlOmBiYXJgLGNhdGVnb3J5UGVyY2VudGFnZTouOCxiYXJQZXJjZW50YWdlOi45LGdyb3VwZWQ6ITAsYW5pbWF0aW9uczp7bnVtYmVyczp7dHlwZTpgbnVtYmVyYCxwcm9wZXJ0aWVzOltgeGAsYHlgLGBiYXNlYCxgd2lkdGhgLGBoZWlnaHRgXX19fTtzdGF0aWMgb3ZlcnJpZGVzPXtzY2FsZXM6e19pbmRleF86e3R5cGU6YGNhdGVnb3J5YCxvZmZzZXQ6ITAsZ3JpZDp7b2Zmc2V0OiEwfX0sX3ZhbHVlXzp7dHlwZTpgbGluZWFyYCxiZWdpbkF0WmVybzohMH19fTtwYXJzZVByaW1pdGl2ZURhdGEoZSx0LG4scil7cmV0dXJuIGdsKGUsdCxuLHIpfXBhcnNlQXJyYXlEYXRhKGUsdCxuLHIpe3JldHVybiBnbChlLHQsbixyKX1wYXJzZU9iamVjdERhdGEoZSx0LG4scil7bGV0e2lTY2FsZTppLHZTY2FsZTphfT1lLHt4QXhpc0tleTpvPWB4YCx5QXhpc0tleTpzPWB5YH09dGhpcy5fcGFyc2luZyxjPWkuYXhpcz09PWB4YD9vOnMsbD1hLmF4aXM9PT1geGA/bzpzLHU9W10sZCxmLHAsbTtmb3IoZD1uLGY9bityO2Q8ZjsrK2QpbT10W2RdLHA9e30scFtpLmF4aXNdPWkucGFyc2UobG8obSxjKSxkKSx1LnB1c2goaGwobG8obSxsKSxwLGEsZCkpO3JldHVybiB1fXVwZGF0ZVJhbmdlRnJvbVBhcnNlZChlLHQsbixyKXtzdXBlci51cGRhdGVSYW5nZUZyb21QYXJzZWQoZSx0LG4scik7bGV0IGk9bi5fY3VzdG9tO2kmJnQ9PT10aGlzLl9jYWNoZWRNZXRhLnZTY2FsZSYmKGUubWluPU1hdGgubWluKGUubWluLGkubWluKSxlLm1heD1NYXRoLm1heChlLm1heCxpLm1heCkpfWdldE1heE92ZXJmbG93KCl7cmV0dXJuIDB9Z2V0TGFiZWxBbmRWYWx1ZShlKXtsZXR7aVNjYWxlOnQsdlNjYWxlOm59PXRoaXMuX2NhY2hlZE1ldGEscj10aGlzLmdldFBhcnNlZChlKSxpPXIuX2N1c3RvbSxhPV9sKGkpP2BbYCtpLnN0YXJ0K2AsIGAraS5lbmQrYF1gOmBgK24uZ2V0TGFiZWxGb3JWYWx1ZShyW24uYXhpc10pO3JldHVybntsYWJlbDpgYCt0LmdldExhYmVsRm9yVmFsdWUoclt0LmF4aXNdKSx2YWx1ZTphfX1pbml0aWFsaXplKCl7dGhpcy5lbmFibGVPcHRpb25TaGFyaW5nPSEwLHN1cGVyLmluaXRpYWxpemUoKTtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO2Uuc3RhY2s9dGhpcy5nZXREYXRhc2V0KCkuc3RhY2t9dXBkYXRlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGE7dGhpcy51cGRhdGVFbGVtZW50cyh0LmRhdGEsMCx0LmRhdGEubGVuZ3RoLGUpfXVwZGF0ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXI9PT1gcmVzZXRgLHtpbmRleDphLF9jYWNoZWRNZXRhOnt2U2NhbGU6b319PXRoaXMscz1vLmdldEJhc2VQaXhlbCgpLGM9by5pc0hvcml6b250YWwoKSxsPXRoaXMuX2dldFJ1bGVyKCkse3NoYXJlZE9wdGlvbnM6dSxpbmNsdWRlT3B0aW9uczpkfT10aGlzLl9nZXRTaGFyZWRPcHRpb25zKHQscik7Zm9yKGxldCBmPXQ7Zjx0K247ZisrKXtsZXQgdD10aGlzLmdldFBhcnNlZChmKSxuPWl8fFUodFtvLmF4aXNdKT97YmFzZTpzLGhlYWQ6c306dGhpcy5fY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMoZikscD10aGlzLl9jYWxjdWxhdGVCYXJJbmRleFBpeGVscyhmLGwpLG09KHQuX3N0YWNrc3x8e30pW28uYXhpc10saD17aG9yaXpvbnRhbDpjLGJhc2U6bi5iYXNlLGVuYWJsZUJvcmRlclJhZGl1czohbXx8X2wodC5fY3VzdG9tKXx8YT09PW0uX3RvcHx8YT09PW0uX2JvdHRvbSx4OmM/bi5oZWFkOnAuY2VudGVyLHk6Yz9wLmNlbnRlcjpuLmhlYWQsaGVpZ2h0OmM/cC5zaXplOk1hdGguYWJzKG4uc2l6ZSksd2lkdGg6Yz9NYXRoLmFicyhuLnNpemUpOnAuc2l6ZX07ZCYmKGgub3B0aW9ucz11fHx0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZixlW2ZdLmFjdGl2ZT9gYWN0aXZlYDpyKSk7bGV0IGc9aC5vcHRpb25zfHxlW2ZdLm9wdGlvbnM7YmwoaCxnLG0sYSksd2woaCxnLGwucmF0aW8pLHRoaXMudXBkYXRlRWxlbWVudChlW2ZdLGYsaCxyKX19X2dldFN0YWNrcyhlLHQpe2xldHtpU2NhbGU6bn09dGhpcy5fY2FjaGVkTWV0YSxyPW4uZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModGhpcy5fdHlwZSkuZmlsdGVyKGU9PmUuY29udHJvbGxlci5vcHRpb25zLmdyb3VwZWQpLGk9bi5vcHRpb25zLnN0YWNrZWQsYT1bXSxvPXRoaXMuX2NhY2hlZE1ldGEuY29udHJvbGxlci5nZXRQYXJzZWQodCkscz1vJiZvW24uYXhpc10sYz1lPT57bGV0IHQ9ZS5fcGFyc2VkLmZpbmQoZT0+ZVtuLmF4aXNdPT09cykscj10JiZ0W2UudlNjYWxlLmF4aXNdO2lmKFUocil8fGlzTmFOKHIpKXJldHVybiEwfTtmb3IobGV0IG4gb2YgcilpZighKHQhPT12b2lkIDAmJmMobikpJiYoKGk9PT0hMXx8YS5pbmRleE9mKG4uc3RhY2spPT09LTF8fGk9PT12b2lkIDAmJm4uc3RhY2s9PT12b2lkIDApJiZhLnB1c2gobi5zdGFjayksbi5pbmRleD09PWUpKWJyZWFrO3JldHVybiBhLmxlbmd0aHx8YS5wdXNoKHZvaWQgMCksYX1fZ2V0U3RhY2tDb3VudChlKXtyZXR1cm4gdGhpcy5fZ2V0U3RhY2tzKHZvaWQgMCxlKS5sZW5ndGh9X2dldEF4aXNDb3VudCgpe3JldHVybiB0aGlzLl9nZXRBeGlzKCkubGVuZ3RofWdldEZpcnN0U2NhbGVJZEZvckluZGV4QXhpcygpe2xldCBlPXRoaXMuY2hhcnQuc2NhbGVzLHQ9dGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcztyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKG49PmVbbl0uYXhpcz09PXQpLnNoaWZ0KCl9X2dldEF4aXMoKXtsZXQgZT17fSx0PXRoaXMuZ2V0Rmlyc3RTY2FsZUlkRm9ySW5kZXhBeGlzKCk7Zm9yKGxldCBuIG9mIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyllW3EodGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcz09PWB4YD9uLnhBeGlzSUQ6bi55QXhpc0lELHQpXT0hMDtyZXR1cm4gT2JqZWN0LmtleXMoZSl9X2dldFN0YWNrSW5kZXgoZSx0LG4pe2xldCByPXRoaXMuX2dldFN0YWNrcyhlLG4pLGk9dD09PXZvaWQgMD8tMTpyLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9yLmxlbmd0aC0xOml9X2dldFJ1bGVyKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXQuaVNjYWxlLHI9W10saSxhO2ZvcihpPTAsYT10LmRhdGEubGVuZ3RoO2k8YTsrK2kpci5wdXNoKG4uZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpKVtuLmF4aXNdLGkpKTtsZXQgbz1lLmJhclRoaWNrbmVzcztyZXR1cm57bWluOm98fGRsKHQpLHBpeGVsczpyLHN0YXJ0Om4uX3N0YXJ0UGl4ZWwsZW5kOm4uX2VuZFBpeGVsLHN0YWNrQ291bnQ6dGhpcy5fZ2V0U3RhY2tDb3VudCgpLHNjYWxlOm4sZ3JvdXBlZDplLmdyb3VwZWQscmF0aW86bz8xOmUuY2F0ZWdvcnlQZXJjZW50YWdlKmUuYmFyUGVyY2VudGFnZX19X2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGUpe2xldHtfY2FjaGVkTWV0YTp7dlNjYWxlOnQsX3N0YWNrZWQ6bixpbmRleDpyfSxvcHRpb25zOntiYXNlOmksbWluQmFyTGVuZ3RoOmF9fT10aGlzLG89aXx8MCxzPXRoaXMuZ2V0UGFyc2VkKGUpLGM9cy5fY3VzdG9tLGw9X2woYyksdT1zW3QuYXhpc10sZD0wLGY9bj90aGlzLmFwcGx5U3RhY2sodCxzLG4pOnUscCxtO2YhPT11JiYoZD1mLXUsZj11KSxsJiYodT1jLmJhclN0YXJ0LGY9Yy5iYXJFbmQtYy5iYXJTdGFydCx1IT09MCYmQ28odSkhPT1DbyhjLmJhckVuZCkmJihkPTApLGQrPXUpO2xldCBoPSFVKGkpJiYhbD9pOmQsZz10LmdldFBpeGVsRm9yVmFsdWUoaCk7aWYocD10aGlzLmNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGUpP3QuZ2V0UGl4ZWxGb3JWYWx1ZShkK2YpOmcsbT1wLWcsTWF0aC5hYnMobSk8YSl7bT12bChtLHQsbykqYSx1PT09byYmKGctPW0vMik7bGV0IGU9dC5nZXRQaXhlbEZvckRlY2ltYWwoMCksaT10LmdldFBpeGVsRm9yRGVjaW1hbCgxKTtnPU1hdGgubWF4KE1hdGgubWluKGcsTWF0aC5tYXgoZSxpKSksTWF0aC5taW4oZSxpKSkscD1nK20sbiYmIWwmJihzLl9zdGFja3NbdC5heGlzXS5fdmlzdWFsVmFsdWVzW3JdPXQuZ2V0VmFsdWVGb3JQaXhlbChwKS10LmdldFZhbHVlRm9yUGl4ZWwoZykpfWlmKGc9PT10LmdldFBpeGVsRm9yVmFsdWUobykpe2xldCBlPUNvKG0pKnQuZ2V0TGluZVdpZHRoRm9yVmFsdWUobykvMjtnKz1lLG0tPWV9cmV0dXJue3NpemU6bSxiYXNlOmcsaGVhZDpwLGNlbnRlcjpwK20vMn19X2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGUsdCl7bGV0IG49dC5zY2FsZSxyPXRoaXMub3B0aW9ucyxpPXIuc2tpcE51bGwsYT1xKHIubWF4QmFyVGhpY2tuZXNzLDEvMCksbyxzLGM9dGhpcy5fZ2V0QXhpc0NvdW50KCk7aWYodC5ncm91cGVkKXtsZXQgbj1pP3RoaXMuX2dldFN0YWNrQ291bnQoZSk6dC5zdGFja0NvdW50LGw9ci5iYXJUaGlja25lc3M9PT1gZmxleGA/cGwoZSx0LHIsbipjKTpmbChlLHQscixuKmMpLHU9dGhpcy5jaGFydC5vcHRpb25zLmluZGV4QXhpcz09PWB4YD90aGlzLmdldERhdGFzZXQoKS54QXhpc0lEOnRoaXMuZ2V0RGF0YXNldCgpLnlBeGlzSUQsZD10aGlzLl9nZXRBeGlzKCkuaW5kZXhPZihxKHUsdGhpcy5nZXRGaXJzdFNjYWxlSWRGb3JJbmRleEF4aXMoKSkpLGY9dGhpcy5fZ2V0U3RhY2tJbmRleCh0aGlzLmluZGV4LHRoaXMuX2NhY2hlZE1ldGEuc3RhY2ssaT9lOnZvaWQgMCkrZDtvPWwuc3RhcnQrbC5jaHVuaypmK2wuY2h1bmsvMixzPU1hdGgubWluKGEsbC5jaHVuaypsLnJhdGlvKX1lbHNlIG89bi5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGUpW24uYXhpc10sZSkscz1NYXRoLm1pbihhLHQubWluKnQucmF0aW8pO3JldHVybntiYXNlOm8tcy8yLGhlYWQ6bytzLzIsY2VudGVyOm8sc2l6ZTpzfX1kcmF3KCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YSx0PWUudlNjYWxlLG49ZS5kYXRhLHI9bi5sZW5ndGgsaT0wO2Zvcig7aTxyOysraSl0aGlzLmdldFBhcnNlZChpKVt0LmF4aXNdIT09bnVsbCYmIW5baV0uaGlkZGVuJiZuW2ldLmRyYXcodGhpcy5fY3R4KX19O2Z1bmN0aW9uIEVsKCl7dGhyb3cgRXJyb3IoYFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC5gKX12YXIgRGw9e19kYXRlOmNsYXNzIGV7c3RhdGljIG92ZXJyaWRlKHQpe09iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9b3B0aW9ucztjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8e319aW5pdCgpe31mb3JtYXRzKCl7cmV0dXJuIEVsKCl9cGFyc2UoKXtyZXR1cm4gRWwoKX1mb3JtYXQoKXtyZXR1cm4gRWwoKX1hZGQoKXtyZXR1cm4gRWwoKX1kaWZmKCl7cmV0dXJuIEVsKCl9c3RhcnRPZigpe3JldHVybiBFbCgpfWVuZE9mKCl7cmV0dXJuIEVsKCl9fX07ZnVuY3Rpb24gT2woZSx0LG4scil7bGV0e2NvbnRyb2xsZXI6aSxkYXRhOmEsX3NvcnRlZDpvfT1lLHM9aS5fY2FjaGVkTWV0YS5pU2NhbGUsYz1lLmRhdGFzZXQmJmUuZGF0YXNldC5vcHRpb25zP2UuZGF0YXNldC5vcHRpb25zLnNwYW5HYXBzOm51bGw7aWYocyYmdD09PXMuYXhpcyYmdCE9PWByYCYmbyYmYS5sZW5ndGgpe2xldCBvPXMuX3JldmVyc2VQaXhlbHM/VW86SG87aWYoIXIpe2xldCByPW8oYSx0LG4pO2lmKGMpe2xldHt2U2NhbGU6dH09aS5fY2FjaGVkTWV0YSx7X3BhcnNlZDpufT1lLGE9bi5zbGljZSgwLHIubG8rMSkucmV2ZXJzZSgpLmZpbmRJbmRleChlPT4hVShlW3QuYXhpc10pKTtyLmxvLT1NYXRoLm1heCgwLGEpO2xldCBvPW4uc2xpY2Uoci5oaSkuZmluZEluZGV4KGU9PiFVKGVbdC5heGlzXSkpO3IuaGkrPU1hdGgubWF4KDAsbyl9cmV0dXJuIHJ9aWYoaS5fc2hhcmVkT3B0aW9ucyl7bGV0IGU9YVswXSxyPXR5cGVvZiBlLmdldFJhbmdlPT1gZnVuY3Rpb25gJiZlLmdldFJhbmdlKHQpO2lmKHIpe2xldCBlPW8oYSx0LG4tciksaT1vKGEsdCxuK3IpO3JldHVybntsbzplLmxvLGhpOmkuaGl9fX19cmV0dXJue2xvOjAsaGk6YS5sZW5ndGgtMX19ZnVuY3Rpb24ga2woZSx0LG4scixpKXtsZXQgYT1lLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxvPW5bdF07Zm9yKGxldCBlPTAsbj1hLmxlbmd0aDtlPG47KytlKXtsZXR7aW5kZXg6bixkYXRhOnN9PWFbZV0se2xvOmMsaGk6bH09T2woYVtlXSx0LG8saSk7Zm9yKGxldCBlPWM7ZTw9bDsrK2Upe2xldCB0PXNbZV07dC5za2lwfHxyKHQsbixlKX19fWZ1bmN0aW9uIEFsKGUpe2xldCB0PWUuaW5kZXhPZihgeGApIT09LTEsbj1lLmluZGV4T2YoYHlgKSE9PS0xO3JldHVybiBmdW5jdGlvbihlLHIpe2xldCBpPXQ/TWF0aC5hYnMoZS54LXIueCk6MCxhPW4/TWF0aC5hYnMoZS55LXIueSk6MDtyZXR1cm4gTWF0aC5zcXJ0KGkqKjIrYSoqMil9fWZ1bmN0aW9uIGpsKGUsdCxuLHIsaSl7bGV0IGE9W107cmV0dXJuIWkmJiFlLmlzUG9pbnRJbkFyZWEodCl8fGtsKGUsbix0LGZ1bmN0aW9uKG4sbyxzKXshaSYmIUFzKG4sZS5jaGFydEFyZWEsMCl8fG4uaW5SYW5nZSh0LngsdC55LHIpJiZhLnB1c2goe2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6byxpbmRleDpzfSl9LCEwKSxhfWZ1bmN0aW9uIE1sKGUsdCxuLHIpe2xldCBpPVtdO2Z1bmN0aW9uIGEoZSxuLGEpe2xldHtzdGFydEFuZ2xlOm8sZW5kQW5nbGU6c309ZS5nZXRQcm9wcyhbYHN0YXJ0QW5nbGVgLGBlbmRBbmdsZWBdLHIpLHthbmdsZTpjfT1QbyhlLHt4OnQueCx5OnQueX0pO0xvKGMsbyxzKSYmaS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4Om4saW5kZXg6YX0pfXJldHVybiBrbChlLG4sdCxhKSxpfWZ1bmN0aW9uIE5sKGUsdCxuLHIsaSxhKXtsZXQgbz1bXSxzPUFsKG4pLGM9MS8wO2Z1bmN0aW9uIGwobixsLHUpe2xldCBkPW4uaW5SYW5nZSh0LngsdC55LGkpO2lmKHImJiFkKXJldHVybjtsZXQgZj1uLmdldENlbnRlclBvaW50KGkpO2lmKCEoYXx8ZS5pc1BvaW50SW5BcmVhKGYpKSYmIWQpcmV0dXJuO2xldCBwPXModCxmKTtwPGM/KG89W3tlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX1dLGM9cCk6cD09PWMmJm8ucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpsLGluZGV4OnV9KX1yZXR1cm4ga2woZSxuLHQsbCksb31mdW5jdGlvbiBQbChlLHQsbixyLGksYSl7cmV0dXJuIWEmJiFlLmlzUG9pbnRJbkFyZWEodCk/W106bj09PWByYCYmIXI/TWwoZSx0LG4saSk6TmwoZSx0LG4scixpLGEpfWZ1bmN0aW9uIEZsKGUsdCxuLHIsaSl7bGV0IGE9W10sbz1uPT09YHhgP2BpblhSYW5nZWA6YGluWVJhbmdlYCxzPSExO3JldHVybiBrbChlLG4sdCwoZSxyLGMpPT57ZVtvXSYmZVtvXSh0W25dLGkpJiYoYS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4OnIsaW5kZXg6Y30pLHN8fD1lLmluUmFuZ2UodC54LHQueSxpKSl9KSxyJiYhcz9bXTphfXZhciBJbD17ZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zOmtsLG1vZGVzOntpbmRleChlLHQsbixyKXtsZXQgaT1TYyh0LGUpLGE9bi5heGlzfHxgeGAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/amwoZSxpLGEscixvKTpQbChlLGksYSwhMSxyLG8pLGM9W107cmV0dXJuIHMubGVuZ3RoPyhlLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKS5mb3JFYWNoKGU9PntsZXQgdD1zWzBdLmluZGV4LG49ZS5kYXRhW3RdO24mJiFuLnNraXAmJmMucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDplLmluZGV4LGluZGV4OnR9KX0pLGMpOltdfSxkYXRhc2V0KGUsdCxuLHIpe2xldCBpPVNjKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/amwoZSxpLGEscixvKTpQbChlLGksYSwhMSxyLG8pO2lmKHMubGVuZ3RoPjApe2xldCB0PXNbMF0uZGF0YXNldEluZGV4LG49ZS5nZXREYXRhc2V0TWV0YSh0KS5kYXRhO3M9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDsrK2Upcy5wdXNoKHtlbGVtZW50Om5bZV0sZGF0YXNldEluZGV4OnQsaW5kZXg6ZX0pfXJldHVybiBzfSxwb2ludChlLHQsbixyKXtyZXR1cm4gamwoZSxTYyh0LGUpLG4uYXhpc3x8YHh5YCxyLG4uaW5jbHVkZUludmlzaWJsZXx8ITEpfSxuZWFyZXN0KGUsdCxuLHIpe2xldCBpPVNjKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExO3JldHVybiBQbChlLGksYSxuLmludGVyc2VjdCxyLG8pfSx4KGUsdCxuLHIpe3JldHVybiBGbChlLFNjKHQsZSksYHhgLG4uaW50ZXJzZWN0LHIpfSx5KGUsdCxuLHIpe3JldHVybiBGbChlLFNjKHQsZSksYHlgLG4uaW50ZXJzZWN0LHIpfX19LExsPVtgbGVmdGAsYHRvcGAsYHJpZ2h0YCxgYm90dG9tYF07ZnVuY3Rpb24gUmwoZSx0KXtyZXR1cm4gZS5maWx0ZXIoZT0+ZS5wb3M9PT10KX1mdW5jdGlvbiB6bChlLHQpe3JldHVybiBlLmZpbHRlcihlPT5MbC5pbmRleE9mKGUucG9zKT09PS0xJiZlLmJveC5heGlzPT09dCl9ZnVuY3Rpb24gQmwoZSx0KXtyZXR1cm4gZS5zb3J0KChlLG4pPT57bGV0IHI9dD9uOmUsaT10P2U6bjtyZXR1cm4gci53ZWlnaHQ9PT1pLndlaWdodD9yLmluZGV4LWkuaW5kZXg6ci53ZWlnaHQtaS53ZWlnaHR9KX1mdW5jdGlvbiBWbChlKXtsZXQgdD1bXSxuLHIsaSxhLG8scztmb3Iobj0wLHI9KGV8fFtdKS5sZW5ndGg7bjxyOysrbilpPWVbbl0se3Bvc2l0aW9uOmEsb3B0aW9uczp7c3RhY2s6byxzdGFja1dlaWdodDpzPTF9fT1pLHQucHVzaCh7aW5kZXg6bixib3g6aSxwb3M6YSxob3Jpem9udGFsOmkuaXNIb3Jpem9udGFsKCksd2VpZ2h0Omkud2VpZ2h0LHN0YWNrOm8mJmErbyxzdGFja1dlaWdodDpzfSk7cmV0dXJuIHR9ZnVuY3Rpb24gSGwoZSl7bGV0IHQ9e307Zm9yKGxldCBuIG9mIGUpe2xldHtzdGFjazplLHBvczpyLHN0YWNrV2VpZ2h0Oml9PW47aWYoIWV8fCFMbC5pbmNsdWRlcyhyKSljb250aW51ZTtsZXQgYT10W2VdfHwodFtlXT17Y291bnQ6MCxwbGFjZWQ6MCx3ZWlnaHQ6MCxzaXplOjB9KTthLmNvdW50KyssYS53ZWlnaHQrPWl9cmV0dXJuIHR9ZnVuY3Rpb24gVWwoZSx0KXtsZXQgbj1IbChlKSx7dkJveE1heFdpZHRoOnIsaEJveE1heEhlaWdodDppfT10LGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtzPWVbYV07bGV0e2Z1bGxTaXplOm99PXMuYm94LGM9bltzLnN0YWNrXSxsPWMmJnMuc3RhY2tXZWlnaHQvYy53ZWlnaHQ7cy5ob3Jpem9udGFsPyhzLndpZHRoPWw/bCpyOm8mJnQuYXZhaWxhYmxlV2lkdGgscy5oZWlnaHQ9aSk6KHMud2lkdGg9cixzLmhlaWdodD1sP2wqaTpvJiZ0LmF2YWlsYWJsZUhlaWdodCl9cmV0dXJuIG59ZnVuY3Rpb24gV2woZSl7bGV0IHQ9VmwoZSksbj1CbCh0LmZpbHRlcihlPT5lLmJveC5mdWxsU2l6ZSksITApLHI9QmwoUmwodCxgbGVmdGApLCEwKSxpPUJsKFJsKHQsYHJpZ2h0YCkpLGE9QmwoUmwodCxgdG9wYCksITApLG89QmwoUmwodCxgYm90dG9tYCkpLHM9emwodCxgeGApLGM9emwodCxgeWApO3JldHVybntmdWxsU2l6ZTpuLGxlZnRBbmRUb3A6ci5jb25jYXQoYSkscmlnaHRBbmRCb3R0b206aS5jb25jYXQoYykuY29uY2F0KG8pLmNvbmNhdChzKSxjaGFydEFyZWE6UmwodCxgY2hhcnRBcmVhYCksdmVydGljYWw6ci5jb25jYXQoaSkuY29uY2F0KGMpLGhvcml6b250YWw6YS5jb25jYXQobykuY29uY2F0KHMpfX1mdW5jdGlvbiBHbChlLHQsbixyKXtyZXR1cm4gTWF0aC5tYXgoZVtuXSx0W25dKStNYXRoLm1heChlW3JdLHRbcl0pfWZ1bmN0aW9uIEtsKGUsdCl7ZS50b3A9TWF0aC5tYXgoZS50b3AsdC50b3ApLGUubGVmdD1NYXRoLm1heChlLmxlZnQsdC5sZWZ0KSxlLmJvdHRvbT1NYXRoLm1heChlLmJvdHRvbSx0LmJvdHRvbSksZS5yaWdodD1NYXRoLm1heChlLnJpZ2h0LHQucmlnaHQpfWZ1bmN0aW9uIHFsKGUsdCxuLHIpe2xldHtwb3M6aSxib3g6YX09bixvPWUubWF4UGFkZGluZztpZighRyhpKSl7bi5zaXplJiYoZVtpXS09bi5zaXplKTtsZXQgdD1yW24uc3RhY2tdfHx7c2l6ZTowLGNvdW50OjF9O3Quc2l6ZT1NYXRoLm1heCh0LnNpemUsbi5ob3Jpem9udGFsP2EuaGVpZ2h0OmEud2lkdGgpLG4uc2l6ZT10LnNpemUvdC5jb3VudCxlW2ldKz1uLnNpemV9YS5nZXRQYWRkaW5nJiZLbChvLGEuZ2V0UGFkZGluZygpKTtsZXQgcz1NYXRoLm1heCgwLHQub3V0ZXJXaWR0aC1HbChvLGUsYGxlZnRgLGByaWdodGApKSxjPU1hdGgubWF4KDAsdC5vdXRlckhlaWdodC1HbChvLGUsYHRvcGAsYGJvdHRvbWApKSxsPXMhPT1lLncsdT1jIT09ZS5oO3JldHVybiBlLnc9cyxlLmg9YyxuLmhvcml6b250YWw/e3NhbWU6bCxvdGhlcjp1fTp7c2FtZTp1LG90aGVyOmx9fWZ1bmN0aW9uIEpsKGUpe2xldCB0PWUubWF4UGFkZGluZztmdW5jdGlvbiBuKG4pe2xldCByPU1hdGgubWF4KHRbbl0tZVtuXSwwKTtyZXR1cm4gZVtuXSs9cixyfWUueSs9bihgdG9wYCksZS54Kz1uKGBsZWZ0YCksbihgcmlnaHRgKSxuKGBib3R0b21gKX1mdW5jdGlvbiBZbChlLHQpe2xldCBuPXQubWF4UGFkZGluZztmdW5jdGlvbiByKGUpe2xldCByPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH07cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1NYXRoLm1heCh0W2VdLG5bZV0pfSkscn1yZXR1cm4gcihlP1tgbGVmdGAsYHJpZ2h0YF06W2B0b3BgLGBib3R0b21gXSl9ZnVuY3Rpb24gWGwoZSx0LG4scil7bGV0IGk9W10sYSxvLHMsYyxsLHU7Zm9yKGE9MCxvPWUubGVuZ3RoLGw9MDthPG87KythKXtzPWVbYV0sYz1zLmJveCxjLnVwZGF0ZShzLndpZHRofHx0Lncscy5oZWlnaHR8fHQuaCxZbChzLmhvcml6b250YWwsdCkpO2xldHtzYW1lOm8sb3RoZXI6ZH09cWwodCxuLHMscik7bHw9byYmaS5sZW5ndGgsdXx8PWQsYy5mdWxsU2l6ZXx8aS5wdXNoKHMpfXJldHVybiBsJiZYbChpLHQsbixyKXx8dX1mdW5jdGlvbiBabChlLHQsbixyLGkpe2UudG9wPW4sZS5sZWZ0PXQsZS5yaWdodD10K3IsZS5ib3R0b209bitpLGUud2lkdGg9cixlLmhlaWdodD1pfWZ1bmN0aW9uIFFsKGUsdCxuLHIpe2xldCBpPW4ucGFkZGluZyx7eDphLHk6b309dDtmb3IobGV0IHMgb2YgZSl7bGV0IGU9cy5ib3gsYz1yW3Muc3RhY2tdfHx7Y291bnQ6MSxwbGFjZWQ6MCx3ZWlnaHQ6MX0sbD1zLnN0YWNrV2VpZ2h0L2Mud2VpZ2h0fHwxO2lmKHMuaG9yaXpvbnRhbCl7bGV0IHI9dC53KmwsYT1jLnNpemV8fGUuaGVpZ2h0O2ZvKGMuc3RhcnQpJiYobz1jLnN0YXJ0KSxlLmZ1bGxTaXplP1psKGUsaS5sZWZ0LG8sbi5vdXRlcldpZHRoLWkucmlnaHQtaS5sZWZ0LGEpOlpsKGUsdC5sZWZ0K2MucGxhY2VkLG8scixhKSxjLnN0YXJ0PW8sYy5wbGFjZWQrPXIsbz1lLmJvdHRvbX1lbHNle2xldCByPXQuaCpsLG89Yy5zaXplfHxlLndpZHRoO2ZvKGMuc3RhcnQpJiYoYT1jLnN0YXJ0KSxlLmZ1bGxTaXplP1psKGUsYSxpLnRvcCxvLG4ub3V0ZXJIZWlnaHQtaS5ib3R0b20taS50b3ApOlpsKGUsYSx0LnRvcCtjLnBsYWNlZCxvLHIpLGMuc3RhcnQ9YSxjLnBsYWNlZCs9cixhPWUucmlnaHR9fXQueD1hLHQueT1vfXZhciAkbD17YWRkQm94KGUsdCl7ZS5ib3hlc3x8PVtdLHQuZnVsbFNpemU9dC5mdWxsU2l6ZXx8ITEsdC5wb3NpdGlvbj10LnBvc2l0aW9ufHxgdG9wYCx0LndlaWdodD10LndlaWdodHx8MCx0Ll9sYXllcnM9dC5fbGF5ZXJzfHxmdW5jdGlvbigpe3JldHVyblt7ejowLGRyYXcoZSl7dC5kcmF3KGUpfX1dfSxlLmJveGVzLnB1c2godCl9LHJlbW92ZUJveChlLHQpe2xldCBuPWUuYm94ZXM/ZS5ib3hlcy5pbmRleE9mKHQpOi0xO24hPT0tMSYmZS5ib3hlcy5zcGxpY2UobiwxKX0sY29uZmlndXJlKGUsdCxuKXt0LmZ1bGxTaXplPW4uZnVsbFNpemUsdC5wb3NpdGlvbj1uLnBvc2l0aW9uLHQud2VpZ2h0PW4ud2VpZ2h0fSx1cGRhdGUoZSx0LG4scil7aWYoIWUpcmV0dXJuO2xldCBpPVEoZS5vcHRpb25zLmxheW91dC5wYWRkaW5nKSxhPU1hdGgubWF4KHQtaS53aWR0aCwwKSxvPU1hdGgubWF4KG4taS5oZWlnaHQsMCkscz1XbChlLmJveGVzKSxjPXMudmVydGljYWwsbD1zLmhvcml6b250YWw7WShlLmJveGVzLGU9Pnt0eXBlb2YgZS5iZWZvcmVMYXlvdXQ9PWBmdW5jdGlvbmAmJmUuYmVmb3JlTGF5b3V0KCl9KTtsZXQgdT1jLnJlZHVjZSgoZSx0KT0+dC5ib3gub3B0aW9ucyYmdC5ib3gub3B0aW9ucy5kaXNwbGF5PT09ITE/ZTplKzEsMCl8fDEsZD1PYmplY3QuZnJlZXplKHtvdXRlcldpZHRoOnQsb3V0ZXJIZWlnaHQ6bixwYWRkaW5nOmksYXZhaWxhYmxlV2lkdGg6YSxhdmFpbGFibGVIZWlnaHQ6byx2Qm94TWF4V2lkdGg6YS8yL3UsaEJveE1heEhlaWdodDpvLzJ9KSxmPU9iamVjdC5hc3NpZ24oe30saSk7S2woZixRKHIpKTtsZXQgcD1PYmplY3QuYXNzaWduKHttYXhQYWRkaW5nOmYsdzphLGg6byx4OmkubGVmdCx5OmkudG9wfSxpKSxtPVVsKGMuY29uY2F0KGwpLGQpO1hsKHMuZnVsbFNpemUscCxkLG0pLFhsKGMscCxkLG0pLFhsKGwscCxkLG0pJiZYbChjLHAsZCxtKSxKbChwKSxRbChzLmxlZnRBbmRUb3AscCxkLG0pLHAueCs9cC53LHAueSs9cC5oLFFsKHMucmlnaHRBbmRCb3R0b20scCxkLG0pLGUuY2hhcnRBcmVhPXtsZWZ0OnAubGVmdCx0b3A6cC50b3AscmlnaHQ6cC5sZWZ0K3Audyxib3R0b206cC50b3ArcC5oLGhlaWdodDpwLmgsd2lkdGg6cC53fSxZKHMuY2hhcnRBcmVhLHQ9PntsZXQgbj10LmJveDtPYmplY3QuYXNzaWduKG4sZS5jaGFydEFyZWEpLG4udXBkYXRlKHAudyxwLmgse2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfSl9KX19LGV1PWNsYXNze2FjcXVpcmVDb250ZXh0KGUsdCl7fXJlbGVhc2VDb250ZXh0KGUpe3JldHVybiExfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe31yZW1vdmVFdmVudExpc3RlbmVyKGUsdCxuKXt9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiAxfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiB0PU1hdGgubWF4KDAsdHx8ZS53aWR0aCksbnx8PWUuaGVpZ2h0LHt3aWR0aDp0LGhlaWdodDpNYXRoLm1heCgwLHI/TWF0aC5mbG9vcih0L3IpOm4pfX1pc0F0dGFjaGVkKGUpe3JldHVybiEwfXVwZGF0ZUNvbmZpZyhlKXt9fSx0dT1jbGFzcyBleHRlbmRzIGV1e2FjcXVpcmVDb250ZXh0KGUpe3JldHVybiBlJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKXx8bnVsbH11cGRhdGVDb25maWcoZSl7ZS5vcHRpb25zLmFuaW1hdGlvbj0hMX19LG51PWAkY2hhcnRqc2AscnU9e3RvdWNoc3RhcnQ6YG1vdXNlZG93bmAsdG91Y2htb3ZlOmBtb3VzZW1vdmVgLHRvdWNoZW5kOmBtb3VzZXVwYCxwb2ludGVyZW50ZXI6YG1vdXNlZW50ZXJgLHBvaW50ZXJkb3duOmBtb3VzZWRvd25gLHBvaW50ZXJtb3ZlOmBtb3VzZW1vdmVgLHBvaW50ZXJ1cDpgbW91c2V1cGAscG9pbnRlcmxlYXZlOmBtb3VzZW91dGAscG9pbnRlcm91dDpgbW91c2VvdXRgfSxpdT1lPT5lPT09bnVsbHx8ZT09PWBgO2Z1bmN0aW9uIGF1KGUsdCl7bGV0IG49ZS5zdHlsZSxyPWUuZ2V0QXR0cmlidXRlKGBoZWlnaHRgKSxpPWUuZ2V0QXR0cmlidXRlKGB3aWR0aGApO2lmKGVbbnVdPXtpbml0aWFsOntoZWlnaHQ6cix3aWR0aDppLHN0eWxlOntkaXNwbGF5Om4uZGlzcGxheSxoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aH19fSxuLmRpc3BsYXk9bi5kaXNwbGF5fHxgYmxvY2tgLG4uYm94U2l6aW5nPW4uYm94U2l6aW5nfHxgYm9yZGVyLWJveGAsaXUoaSkpe2xldCB0PU9jKGUsYHdpZHRoYCk7dCE9PXZvaWQgMCYmKGUud2lkdGg9dCl9aWYoaXUocikpe2lmKGUuc3R5bGUuaGVpZ2h0PT09YGApZS5oZWlnaHQ9ZS53aWR0aC8odHx8Mik7ZWxzZXtsZXQgdD1PYyhlLGBoZWlnaHRgKTt0IT09dm9pZCAwJiYoZS5oZWlnaHQ9dCl9fXJldHVybiBlfXZhciBvdT1EYz97cGFzc2l2ZTohMH06ITE7ZnVuY3Rpb24gc3UoZSx0LG4pe2UmJmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sb3UpfWZ1bmN0aW9uIGN1KGUsdCxuKXtlJiZlLmNhbnZhcyYmZS5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sb3UpfWZ1bmN0aW9uIGx1KGUsdCl7bGV0IG49cnVbZS50eXBlXXx8ZS50eXBlLHt4OnIseTppfT1TYyhlLHQpO3JldHVybnt0eXBlOm4sY2hhcnQ6dCxuYXRpdmU6ZSx4OnI9PT12b2lkIDA/bnVsbDpyLHk6aT09PXZvaWQgMD9udWxsOml9fWZ1bmN0aW9uIHV1KGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYobj09PXR8fG4uY29udGFpbnModCkpcmV0dXJuITB9ZnVuY3Rpb24gZHUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD11dShuLmFkZGVkTm9kZXMsciksdCYmPSF1dShuLnJlbW92ZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9ZnVuY3Rpb24gZnUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD11dShuLnJlbW92ZWROb2RlcyxyKSx0JiY9IXV1KG4uYWRkZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9dmFyIHB1PW5ldyBNYXAsbXU9MDtmdW5jdGlvbiBodSgpe2xldCBlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO2UhPT1tdSYmKG11PWUscHUuZm9yRWFjaCgodCxuKT0+e24uY3VycmVudERldmljZVBpeGVsUmF0aW8hPT1lJiZ0KCl9KSl9ZnVuY3Rpb24gZ3UoZSx0KXtwdS5zaXplfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxodSkscHUuc2V0KGUsdCl9ZnVuY3Rpb24gX3UoZSl7cHUuZGVsZXRlKGUpLHB1LnNpemV8fHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLGh1KX1mdW5jdGlvbiB2dShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1yJiZtYyhyKTtpZighaSlyZXR1cm47bGV0IGE9WG8oKGUsdCk9PntsZXQgcj1pLmNsaWVudFdpZHRoO24oZSx0KSxyPGkuY2xpZW50V2lkdGgmJm4oKX0sd2luZG93KSxvPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0IHQ9ZVswXSxuPXQuY29udGVudFJlY3Qud2lkdGgscj10LmNvbnRlbnRSZWN0LmhlaWdodDsobiE9PTB8fHIhPT0wKSYmYShuLHIpfSk7cmV0dXJuIG8ub2JzZXJ2ZShpKSxndShlLGEpLG99ZnVuY3Rpb24geXUoZSx0LG4pe24mJm4uZGlzY29ubmVjdCgpLHQ9PT1gcmVzaXplYCYmX3UoZSl9ZnVuY3Rpb24gYnUoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9WG8odD0+e2UuY3R4IT09bnVsbCYmbihsdSh0LGUpKX0sZSk7cmV0dXJuIHN1KHIsdCxpKSxpfXZhciB4dT1jbGFzcyBleHRlbmRzIGV1e2FjcXVpcmVDb250ZXh0KGUsdCl7bGV0IG49ZSYmZS5nZXRDb250ZXh0JiZlLmdldENvbnRleHQoYDJkYCk7cmV0dXJuIG4mJm4uY2FudmFzPT09ZT8oYXUoZSx0KSxuKTpudWxsfXJlbGVhc2VDb250ZXh0KGUpe2xldCB0PWUuY2FudmFzO2lmKCF0W251XSlyZXR1cm4hMTtsZXQgbj10W251XS5pbml0aWFsO1tgaGVpZ2h0YCxgd2lkdGhgXS5mb3JFYWNoKGU9PntsZXQgcj1uW2VdO1Uocik/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6dC5zZXRBdHRyaWJ1dGUoZSxyKX0pO2xldCByPW4uc3R5bGV8fHt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGU9Pnt0LnN0eWxlW2VdPXJbZV19KSx0LndpZHRoPXQud2lkdGgsZGVsZXRlIHRbbnVdLCEwfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpO2xldCByPWUuJHByb3hpZXN8fD17fTtyW3RdPSh7YXR0YWNoOmR1LGRldGFjaDpmdSxyZXNpemU6dnV9W3RdfHxidSkoZSx0LG4pfXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KXtsZXQgbj1lLiRwcm94aWVzfHw9e30scj1uW3RdO3ImJigoe2F0dGFjaDp5dSxkZXRhY2g6eXUscmVzaXplOnl1fVt0XXx8Y3UpKGUsdCxyKSxuW3RdPXZvaWQgMCl9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb31nZXRNYXhpbXVtU2l6ZShlLHQsbixyKXtyZXR1cm4gVGMoZSx0LG4scil9aXNBdHRhY2hlZChlKXtsZXQgdD1lJiZtYyhlKTtyZXR1cm4hISh0JiZ0LmlzQ29ubmVjdGVkKX19O2Z1bmN0aW9uIFN1KGUpe3JldHVybiFwYygpfHx0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPGB1YCYmZSBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcz90dTp4dX12YXIgQ3U9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPXt9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXZvaWQgMDt4O3k7YWN0aXZlPSExO29wdGlvbnM7JGFuaW1hdGlvbnM7dG9vbHRpcFBvc2l0aW9uKGUpe2xldHt4OnQseTpufT10aGlzLmdldFByb3BzKFtgeGAsYHlgXSxlKTtyZXR1cm57eDp0LHk6bn19aGFzVmFsdWUoKXtyZXR1cm4gT28odGhpcy54KSYmT28odGhpcy55KX1nZXRQcm9wcyhlLHQpe2xldCBuPXRoaXMuJGFuaW1hdGlvbnM7aWYoIXR8fCFuKXJldHVybiB0aGlzO2xldCByPXt9O3JldHVybiBlLmZvckVhY2goZT0+e3JbZV09bltlXSYmbltlXS5hY3RpdmUoKT9uW2VdLl90bzp0aGlzW2VdfSkscn19O2Z1bmN0aW9uIHd1KGUsdCl7bGV0IG49ZS5vcHRpb25zLnRpY2tzLHI9VHUoZSksaT1NYXRoLm1pbihuLm1heFRpY2tzTGltaXR8fHIsciksYT1uLm1ham9yLmVuYWJsZWQ/RHUodCk6W10sbz1hLmxlbmd0aCxzPWFbMF0sYz1hW28tMV0sbD1bXTtpZihvPmkpcmV0dXJuIE91KHQsbCxhLG8vaSksbDtsZXQgdT1FdShhLHQsaSk7aWYobz4wKXtsZXQgZSxuLHI9bz4xP01hdGgucm91bmQoKGMtcykvKG8tMSkpOm51bGw7Zm9yKGt1KHQsbCx1LFUocik/MDpzLXIscyksZT0wLG49by0xO2U8bjtlKyspa3UodCxsLHUsYVtlXSxhW2UrMV0pO3JldHVybiBrdSh0LGwsdSxjLFUocik/dC5sZW5ndGg6YytyKSxsfXJldHVybiBrdSh0LGwsdSksbH1mdW5jdGlvbiBUdShlKXtsZXQgdD1lLm9wdGlvbnMub2Zmc2V0LG49ZS5fdGlja1NpemUoKSxyPWUuX2xlbmd0aC9uKyArIXQsaT1lLl9tYXhMZW5ndGgvbjtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1pbihyLGkpKX1mdW5jdGlvbiBFdShlLHQsbil7bGV0IHI9QXUoZSksaT10Lmxlbmd0aC9uO2lmKCFyKXJldHVybiBNYXRoLm1heChpLDEpO2xldCBhPUVvKHIpO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGgtMTtlPHQ7ZSsrKXtsZXQgdD1hW2VdO2lmKHQ+aSlyZXR1cm4gdH1yZXR1cm4gTWF0aC5tYXgoaSwxKX1mdW5jdGlvbiBEdShlKXtsZXQgdD1bXSxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXS5tYWpvciYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIE91KGUsdCxuLHIpe2xldCBpPTAsYT1uWzBdLG87Zm9yKHI9TWF0aC5jZWlsKHIpLG89MDtvPGUubGVuZ3RoO28rKylvPT09YSYmKHQucHVzaChlW29dKSxpKyssYT1uW2kqcl0pfWZ1bmN0aW9uIGt1KGUsdCxuLHIsaSl7bGV0IGE9cShyLDApLG89TWF0aC5taW4ocShpLGUubGVuZ3RoKSxlLmxlbmd0aCkscz0wLGMsbCx1O2ZvcihuPU1hdGguY2VpbChuKSxpJiYoYz1pLXIsbj1jL01hdGguZmxvb3IoYy9uKSksdT1hO3U8MDspcysrLHU9TWF0aC5yb3VuZChhK3Mqbik7Zm9yKGw9TWF0aC5tYXgoYSwwKTtsPG87bCsrKWw9PT11JiYodC5wdXNoKGVbbF0pLHMrKyx1PU1hdGgucm91bmQoYStzKm4pKX1mdW5jdGlvbiBBdShlKXtsZXQgdD1lLmxlbmd0aCxuLHI7aWYodDwyKXJldHVybiExO2ZvcihyPWVbMF0sbj0xO248dDsrK24paWYoZVtuXS1lW24tMV0hPT1yKXJldHVybiExO3JldHVybiByfXZhciBqdT1lPT5lPT09YGxlZnRgP2ByaWdodGA6ZT09PWByaWdodGA/YGxlZnRgOmUsTXU9KGUsdCxuKT0+dD09PWB0b3BgfHx0PT09YGxlZnRgP2VbdF0rbjplW3RdLW4sTnU9KGUsdCk9Pk1hdGgubWluKHR8fGUsZSk7ZnVuY3Rpb24gUHUoZSx0KXtsZXQgbj1bXSxyPWUubGVuZ3RoL3QsaT1lLmxlbmd0aCxhPTA7Zm9yKDthPGk7YSs9ciluLnB1c2goZVtNYXRoLmZsb29yKGEpXSk7cmV0dXJuIG59ZnVuY3Rpb24gRnUoZSx0LG4pe2xldCByPWUudGlja3MubGVuZ3RoLGk9TWF0aC5taW4odCxyLTEpLGE9ZS5fc3RhcnRQaXhlbCxvPWUuX2VuZFBpeGVsLHM9MWUtNixjPWUuZ2V0UGl4ZWxGb3JUaWNrKGkpLGw7aWYoIShuJiYobD1yPT09MT9NYXRoLm1heChjLWEsby1jKTp0PT09MD8oZS5nZXRQaXhlbEZvclRpY2soMSktYykvMjooYy1lLmdldFBpeGVsRm9yVGljayhpLTEpKS8yLGMrPWk8dD9sOi1sLGM8YS1zfHxjPm8rcykpKXJldHVybiBjfWZ1bmN0aW9uIEl1KGUsdCl7WShlLGU9PntsZXQgbj1lLmdjLHI9bi5sZW5ndGgvMixpO2lmKHI+dCl7Zm9yKGk9MDtpPHI7KytpKWRlbGV0ZSBlLmRhdGFbbltpXV07bi5zcGxpY2UoMCxyKX19KX1mdW5jdGlvbiBMdShlKXtyZXR1cm4gZS5kcmF3VGlja3M/ZS50aWNrTGVuZ3RoOjB9ZnVuY3Rpb24gUnUoZSx0KXtpZighZS5kaXNwbGF5KXJldHVybiAwO2xldCBuPSQoZS5mb250LHQpLHI9UShlLnBhZGRpbmcpO3JldHVybihXKGUudGV4dCk/ZS50ZXh0Lmxlbmd0aDoxKSpuLmxpbmVIZWlnaHQrci5oZWlnaHR9ZnVuY3Rpb24genUoZSx0KXtyZXR1cm4gcXMoZSx7c2NhbGU6dCx0eXBlOmBzY2FsZWB9KX1mdW5jdGlvbiBCdShlLHQsbil7cmV0dXJuIHFzKGUse3RpY2s6bixpbmRleDp0LHR5cGU6YHRpY2tgfSl9ZnVuY3Rpb24gVnUoZSx0LG4pe2xldCByPVFvKGUpO3JldHVybihuJiZ0IT09YHJpZ2h0YHx8IW4mJnQ9PT1gcmlnaHRgKSYmKHI9anUocikpLHJ9ZnVuY3Rpb24gSHUoZSx0LG4scil7bGV0e3RvcDppLGxlZnQ6YSxib3R0b206byxyaWdodDpzLGNoYXJ0OmN9PWUse2NoYXJ0QXJlYTpsLHNjYWxlczp1fT1jLGQ9MCxmLHAsbSxoPW8taSxnPXMtYTtpZihlLmlzSG9yaXpvbnRhbCgpKXtpZihwPSRvKHIsYSxzKSxHKG4pKXtsZXQgZT1PYmplY3Qua2V5cyhuKVswXSxyPW5bZV07bT11W2VdLmdldFBpeGVsRm9yVmFsdWUocikraC10fWVsc2UgbT1uPT09YGNlbnRlcmA/KGwuYm90dG9tK2wudG9wKS8yK2gtdDpNdShlLG4sdCk7Zj1zLWF9ZWxzZXtpZihHKG4pKXtsZXQgZT1PYmplY3Qua2V5cyhuKVswXSxyPW5bZV07cD11W2VdLmdldFBpeGVsRm9yVmFsdWUociktZyt0fWVsc2UgcD1uPT09YGNlbnRlcmA/KGwubGVmdCtsLnJpZ2h0KS8yLWcrdDpNdShlLG4sdCk7bT0kbyhyLG8saSksZD1uPT09YGxlZnRgPy15bzp5b31yZXR1cm57dGl0bGVYOnAsdGl0bGVZOm0sbWF4V2lkdGg6Zixyb3RhdGlvbjpkfX12YXIgVXU9Y2xhc3MgZSBleHRlbmRzIEN1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pZD1lLmlkLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5vcHRpb25zPXZvaWQgMCx0aGlzLmN0eD1lLmN0eCx0aGlzLmNoYXJ0PWUuY2hhcnQsdGhpcy50b3A9dm9pZCAwLHRoaXMuYm90dG9tPXZvaWQgMCx0aGlzLmxlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLl9tYXJnaW5zPXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH0sdGhpcy5tYXhXaWR0aD12b2lkIDAsdGhpcy5tYXhIZWlnaHQ9dm9pZCAwLHRoaXMucGFkZGluZ1RvcD12b2lkIDAsdGhpcy5wYWRkaW5nQm90dG9tPXZvaWQgMCx0aGlzLnBhZGRpbmdMZWZ0PXZvaWQgMCx0aGlzLnBhZGRpbmdSaWdodD12b2lkIDAsdGhpcy5heGlzPXZvaWQgMCx0aGlzLmxhYmVsUm90YXRpb249dm9pZCAwLHRoaXMubWluPXZvaWQgMCx0aGlzLm1heD12b2lkIDAsdGhpcy5fcmFuZ2U9dm9pZCAwLHRoaXMudGlja3M9W10sdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4TGVuZ3RoPTAsdGhpcy5fbG9uZ2VzdFRleHRDYWNoZT17fSx0aGlzLl9zdGFydFBpeGVsPXZvaWQgMCx0aGlzLl9lbmRQaXhlbD12b2lkIDAsdGhpcy5fcmV2ZXJzZVBpeGVscz0hMSx0aGlzLl91c2VyTWF4PXZvaWQgMCx0aGlzLl91c2VyTWluPXZvaWQgMCx0aGlzLl9zdWdnZXN0ZWRNYXg9dm9pZCAwLHRoaXMuX3N1Z2dlc3RlZE1pbj12b2lkIDAsdGhpcy5fdGlja3NMZW5ndGg9MCx0aGlzLl9ib3JkZXJWYWx1ZT0wLHRoaXMuX2NhY2hlPXt9LHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQ9ITEsdGhpcy4kY29udGV4dD12b2lkIDB9aW5pdChlKXt0aGlzLm9wdGlvbnM9ZS5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSx0aGlzLmF4aXM9ZS5heGlzLHRoaXMuX3VzZXJNaW49dGhpcy5wYXJzZShlLm1pbiksdGhpcy5fdXNlck1heD10aGlzLnBhcnNlKGUubWF4KSx0aGlzLl9zdWdnZXN0ZWRNaW49dGhpcy5wYXJzZShlLnN1Z2dlc3RlZE1pbiksdGhpcy5fc3VnZ2VzdGVkTWF4PXRoaXMucGFyc2UoZS5zdWdnZXN0ZWRNYXgpfXBhcnNlKGUsdCl7cmV0dXJuIGV9Z2V0VXNlckJvdW5kcygpe2xldHtfdXNlck1pbjplLF91c2VyTWF4OnQsX3N1Z2dlc3RlZE1pbjpuLF9zdWdnZXN0ZWRNYXg6cn09dGhpcztyZXR1cm4gZT1aYShlLDEvMCksdD1aYSh0LC0xLzApLG49WmEobiwxLzApLHI9WmEociwtMS8wKSx7bWluOlphKGUsbiksbWF4OlphKHQsciksbWluRGVmaW5lZDpLKGUpLG1heERlZmluZWQ6Syh0KX19Z2V0TWluTWF4KGUpe2xldHttaW46dCxtYXg6bixtaW5EZWZpbmVkOnIsbWF4RGVmaW5lZDppfT10aGlzLmdldFVzZXJCb3VuZHMoKSxhO2lmKHImJmkpcmV0dXJue21pbjp0LG1heDpufTtsZXQgbz10aGlzLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCk7Zm9yKGxldCBzPTAsYz1vLmxlbmd0aDtzPGM7KytzKWE9b1tzXS5jb250cm9sbGVyLmdldE1pbk1heCh0aGlzLGUpLHJ8fCh0PU1hdGgubWluKHQsYS5taW4pKSxpfHwobj1NYXRoLm1heChuLGEubWF4KSk7cmV0dXJuIHQ9aSYmdD5uP246dCxuPXImJnQ+bj90Om4se21pbjpaYSh0LFphKG4sdCkpLG1heDpaYShuLFphKHQsbikpfX1nZXRQYWRkaW5nKCl7cmV0dXJue2xlZnQ6dGhpcy5wYWRkaW5nTGVmdHx8MCx0b3A6dGhpcy5wYWRkaW5nVG9wfHwwLHJpZ2h0OnRoaXMucGFkZGluZ1JpZ2h0fHwwLGJvdHRvbTp0aGlzLnBhZGRpbmdCb3R0b218fDB9fWdldFRpY2tzKCl7cmV0dXJuIHRoaXMudGlja3N9Z2V0TGFiZWxzKCl7bGV0IGU9dGhpcy5jaGFydC5kYXRhO3JldHVybiB0aGlzLm9wdGlvbnMubGFiZWxzfHwodGhpcy5pc0hvcml6b250YWwoKT9lLnhMYWJlbHM6ZS55TGFiZWxzKXx8ZS5sYWJlbHN8fFtdfWdldExhYmVsSXRlbXMoZT10aGlzLmNoYXJ0LmNoYXJ0QXJlYSl7cmV0dXJuIHRoaXMuX2xhYmVsSXRlbXN8fD10aGlzLl9jb21wdXRlTGFiZWxJdGVtcyhlKX1iZWZvcmVMYXlvdXQoKXt0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExfWJlZm9yZVVwZGF0ZSgpe0oodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSxbdGhpc10pfXVwZGF0ZShlLHQsbil7bGV0e2JlZ2luQXRaZXJvOnIsZ3JhY2U6aSx0aWNrczphfT10aGlzLm9wdGlvbnMsbz1hLnNhbXBsZVNpemU7dGhpcy5iZWZvcmVVcGRhdGUoKSx0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW49T2JqZWN0LmFzc2lnbih7bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LG4pLHRoaXMudGlja3M9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLmJlZm9yZVNldERpbWVuc2lvbnMoKSx0aGlzLnNldERpbWVuc2lvbnMoKSx0aGlzLmFmdGVyU2V0RGltZW5zaW9ucygpLHRoaXMuX21heExlbmd0aD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgrbi5sZWZ0K24ucmlnaHQ6dGhpcy5oZWlnaHQrbi50b3Arbi5ib3R0b20sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZHx8PSh0aGlzLmJlZm9yZURhdGFMaW1pdHMoKSx0aGlzLmRldGVybWluZURhdGFMaW1pdHMoKSx0aGlzLmFmdGVyRGF0YUxpbWl0cygpLHRoaXMuX3JhbmdlPUtzKHRoaXMsaSxyKSwhMCksdGhpcy5iZWZvcmVCdWlsZFRpY2tzKCksdGhpcy50aWNrcz10aGlzLmJ1aWxkVGlja3MoKXx8W10sdGhpcy5hZnRlckJ1aWxkVGlja3MoKTtsZXQgcz1vPHRoaXMudGlja3MubGVuZ3RoO3RoaXMuX2NvbnZlcnRUaWNrc1RvTGFiZWxzKHM/UHUodGhpcy50aWNrcyxvKTp0aGlzLnRpY2tzKSx0aGlzLmNvbmZpZ3VyZSgpLHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuY2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksYS5kaXNwbGF5JiYoYS5hdXRvU2tpcHx8YS5zb3VyY2U9PT1gYXV0b2ApJiYodGhpcy50aWNrcz13dSh0aGlzLHRoaXMudGlja3MpLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLmFmdGVyQXV0b1NraXAoKSkscyYmdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHModGhpcy50aWNrcyksdGhpcy5iZWZvcmVGaXQoKSx0aGlzLmZpdCgpLHRoaXMuYWZ0ZXJGaXQoKSx0aGlzLmFmdGVyVXBkYXRlKCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5vcHRpb25zLnJldmVyc2UsdCxuO3RoaXMuaXNIb3Jpem9udGFsKCk/KHQ9dGhpcy5sZWZ0LG49dGhpcy5yaWdodCk6KHQ9dGhpcy50b3Asbj10aGlzLmJvdHRvbSxlPSFlKSx0aGlzLl9zdGFydFBpeGVsPXQsdGhpcy5fZW5kUGl4ZWw9bix0aGlzLl9yZXZlcnNlUGl4ZWxzPWUsdGhpcy5fbGVuZ3RoPW4tdCx0aGlzLl9hbGlnblRvUGl4ZWxzPXRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzfWFmdGVyVXBkYXRlKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsW3RoaXNdKX1iZWZvcmVTZXREaW1lbnNpb25zKCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucyxbdGhpc10pfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PTAsdGhpcy5yaWdodD10aGlzLndpZHRoKToodGhpcy5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsdGhpcy50b3A9MCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCksdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1RvcD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTB9YWZ0ZXJTZXREaW1lbnNpb25zKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLFt0aGlzXSl9X2NhbGxIb29rcyhlKXt0aGlzLmNoYXJ0Lm5vdGlmeVBsdWdpbnMoZSx0aGlzLmdldENvbnRleHQoKSksSih0aGlzLm9wdGlvbnNbZV0sW3RoaXNdKX1iZWZvcmVEYXRhTGltaXRzKCl7dGhpcy5fY2FsbEhvb2tzKGBiZWZvcmVEYXRhTGltaXRzYCl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe31hZnRlckRhdGFMaW1pdHMoKXt0aGlzLl9jYWxsSG9va3MoYGFmdGVyRGF0YUxpbWl0c2ApfWJlZm9yZUJ1aWxkVGlja3MoKXt0aGlzLl9jYWxsSG9va3MoYGJlZm9yZUJ1aWxkVGlja3NgKX1idWlsZFRpY2tzKCl7cmV0dXJuW119YWZ0ZXJCdWlsZFRpY2tzKCl7dGhpcy5fY2FsbEhvb2tzKGBhZnRlckJ1aWxkVGlja3NgKX1iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKXtKKHRoaXMub3B0aW9ucy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLG4scixpO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWk9ZVtuXSxpLmxhYmVsPUoodC5jYWxsYmFjayxbaS52YWx1ZSxuLGVdLHRoaXMpfWFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCl7Sih0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49TnUodGhpcy50aWNrcy5sZW5ndGgsZS50aWNrcy5tYXhUaWNrc0xpbWl0KSxyPXQubWluUm90YXRpb258fDAsaT10Lm1heFJvdGF0aW9uLGE9cixvLHMsYztpZighdGhpcy5faXNWaXNpYmxlKCl8fCF0LmRpc3BsYXl8fHI+PWl8fG48PTF8fCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt0aGlzLmxhYmVsUm90YXRpb249cjtyZXR1cm59bGV0IGw9dGhpcy5fZ2V0TGFiZWxTaXplcygpLHU9bC53aWRlc3Qud2lkdGgsZD1sLmhpZ2hlc3QuaGVpZ2h0LGY9Um8odGhpcy5jaGFydC53aWR0aC11LDAsdGhpcy5tYXhXaWR0aCk7bz1lLm9mZnNldD90aGlzLm1heFdpZHRoL246Zi8obi0xKSx1KzY+byYmKG89Zi8obi0oZS5vZmZzZXQ/LjU6MSkpLHM9dGhpcy5tYXhIZWlnaHQtTHUoZS5ncmlkKS10LnBhZGRpbmctUnUoZS50aXRsZSx0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCksYz1NYXRoLnNxcnQodSp1K2QqZCksYT1NbyhNYXRoLm1pbihNYXRoLmFzaW4oUm8oKGwuaGlnaGVzdC5oZWlnaHQrNikvbywtMSwxKSksTWF0aC5hc2luKFJvKHMvYywtMSwxKSktTWF0aC5hc2luKFJvKGQvYywtMSwxKSkpKSxhPU1hdGgubWF4KHIsTWF0aC5taW4oaSxhKSkpLHRoaXMubGFiZWxSb3RhdGlvbj1hfWFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpe0oodGhpcy5vcHRpb25zLmFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWFmdGVyQXV0b1NraXAoKXt9YmVmb3JlRml0KCl7Sih0aGlzLm9wdGlvbnMuYmVmb3JlRml0LFt0aGlzXSl9Zml0KCl7bGV0IGU9e3dpZHRoOjAsaGVpZ2h0OjB9LHtjaGFydDp0LG9wdGlvbnM6e3RpY2tzOm4sdGl0bGU6cixncmlkOml9fT10aGlzLGE9dGhpcy5faXNWaXNpYmxlKCksbz10aGlzLmlzSG9yaXpvbnRhbCgpO2lmKGEpe2xldCBhPVJ1KHIsdC5vcHRpb25zLmZvbnQpO2lmKG8/KGUud2lkdGg9dGhpcy5tYXhXaWR0aCxlLmhlaWdodD1MdShpKSthKTooZS5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsZS53aWR0aD1MdShpKSthKSxuLmRpc3BsYXkmJnRoaXMudGlja3MubGVuZ3RoKXtsZXR7Zmlyc3Q6dCxsYXN0OnIsd2lkZXN0OmksaGlnaGVzdDphfT10aGlzLl9nZXRMYWJlbFNpemVzKCkscz1uLnBhZGRpbmcqMixjPWpvKHRoaXMubGFiZWxSb3RhdGlvbiksbD1NYXRoLmNvcyhjKSx1PU1hdGguc2luKGMpO2lmKG8pe2xldCB0PW4ubWlycm9yPzA6dSppLndpZHRoK2wqYS5oZWlnaHQ7ZS5oZWlnaHQ9TWF0aC5taW4odGhpcy5tYXhIZWlnaHQsZS5oZWlnaHQrdCtzKX1lbHNle2xldCB0PW4ubWlycm9yPzA6bCppLndpZHRoK3UqYS5oZWlnaHQ7ZS53aWR0aD1NYXRoLm1pbih0aGlzLm1heFdpZHRoLGUud2lkdGgrdCtzKX10aGlzLl9jYWxjdWxhdGVQYWRkaW5nKHQscix1LGwpfX10aGlzLl9oYW5kbGVNYXJnaW5zKCksbz8odGhpcy53aWR0aD10aGlzLl9sZW5ndGg9dC53aWR0aC10aGlzLl9tYXJnaW5zLmxlZnQtdGhpcy5fbWFyZ2lucy5yaWdodCx0aGlzLmhlaWdodD1lLmhlaWdodCk6KHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD10aGlzLl9sZW5ndGg9dC5oZWlnaHQtdGhpcy5fbWFyZ2lucy50b3AtdGhpcy5fbWFyZ2lucy5ib3R0b20pfV9jYWxjdWxhdGVQYWRkaW5nKGUsdCxuLHIpe2xldHt0aWNrczp7YWxpZ246aSxwYWRkaW5nOmF9LHBvc2l0aW9uOm99PXRoaXMub3B0aW9ucyxzPXRoaXMubGFiZWxSb3RhdGlvbiE9PTAsYz1vIT09YHRvcGAmJnRoaXMuYXhpcz09PWB4YDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgbz10aGlzLmdldFBpeGVsRm9yVGljaygwKS10aGlzLmxlZnQsbD10aGlzLnJpZ2h0LXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKHRoaXMudGlja3MubGVuZ3RoLTEpLHU9MCxkPTA7cz9jPyh1PXIqZS53aWR0aCxkPW4qdC5oZWlnaHQpOih1PW4qZS5oZWlnaHQsZD1yKnQud2lkdGgpOmk9PT1gc3RhcnRgP2Q9dC53aWR0aDppPT09YGVuZGA/dT1lLndpZHRoOmkhPT1gaW5uZXJgJiYodT1lLndpZHRoLzIsZD10LndpZHRoLzIpLHRoaXMucGFkZGluZ0xlZnQ9TWF0aC5tYXgoKHUtbythKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLW8pLDApLHRoaXMucGFkZGluZ1JpZ2h0PU1hdGgubWF4KChkLWwrYSkqdGhpcy53aWR0aC8odGhpcy53aWR0aC1sKSwwKX1lbHNle2xldCBuPXQuaGVpZ2h0LzIscj1lLmhlaWdodC8yO2k9PT1gc3RhcnRgPyhuPTAscj1lLmhlaWdodCk6aT09PWBlbmRgJiYobj10LmhlaWdodCxyPTApLHRoaXMucGFkZGluZ1RvcD1uK2EsdGhpcy5wYWRkaW5nQm90dG9tPXIrYX19X2hhbmRsZU1hcmdpbnMoKXt0aGlzLl9tYXJnaW5zJiYodGhpcy5fbWFyZ2lucy5sZWZ0PU1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsdGhpcy5fbWFyZ2lucy5sZWZ0KSx0aGlzLl9tYXJnaW5zLnRvcD1NYXRoLm1heCh0aGlzLnBhZGRpbmdUb3AsdGhpcy5fbWFyZ2lucy50b3ApLHRoaXMuX21hcmdpbnMucmlnaHQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nUmlnaHQsdGhpcy5fbWFyZ2lucy5yaWdodCksdGhpcy5fbWFyZ2lucy5ib3R0b209TWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLHRoaXMuX21hcmdpbnMuYm90dG9tKSl9YWZ0ZXJGaXQoKXtKKHRoaXMub3B0aW9ucy5hZnRlckZpdCxbdGhpc10pfWlzSG9yaXpvbnRhbCgpe2xldHtheGlzOmUscG9zaXRpb246dH09dGhpcy5vcHRpb25zO3JldHVybiB0PT09YHRvcGB8fHQ9PT1gYm90dG9tYHx8ZT09PWB4YH1pc0Z1bGxTaXplKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5mdWxsU2l6ZX1fY29udmVydFRpY2tzVG9MYWJlbHMoZSl7dGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKSx0aGlzLmdlbmVyYXRlVGlja0xhYmVscyhlKTtsZXQgdCxuO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKVUoZVt0XS5sYWJlbCkmJihlLnNwbGljZSh0LDEpLG4tLSx0LS0pO3RoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKX1fZ2V0TGFiZWxTaXplcygpe2xldCBlPXRoaXMuX2xhYmVsU2l6ZXM7aWYoIWUpe2xldCB0PXRoaXMub3B0aW9ucy50aWNrcy5zYW1wbGVTaXplLG49dGhpcy50aWNrczt0PG4ubGVuZ3RoJiYobj1QdShuLHQpKSx0aGlzLl9sYWJlbFNpemVzPWU9dGhpcy5fY29tcHV0ZUxhYmVsU2l6ZXMobixuLmxlbmd0aCx0aGlzLm9wdGlvbnMudGlja3MubWF4VGlja3NMaW1pdCl9cmV0dXJuIGV9X2NvbXB1dGVMYWJlbFNpemVzKGUsdCxuKXtsZXR7Y3R4OnIsX2xvbmdlc3RUZXh0Q2FjaGU6aX09dGhpcyxhPVtdLG89W10scz1NYXRoLmZsb29yKHQvTnUodCxuKSksYz0wLGw9MCx1LGQsZixwLG0saCxnLF8sdix5LGI7Zm9yKHU9MDt1PHQ7dSs9cyl7aWYocD1lW3VdLmxhYmVsLG09dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyh1KSxyLmZvbnQ9aD1tLnN0cmluZyxnPWlbaF09aVtoXXx8e2RhdGE6e30sZ2M6W119LF89bS5saW5lSGVpZ2h0LHY9eT0wLCFVKHApJiYhVyhwKSl2PXdzKHIsZy5kYXRhLGcuZ2MsdixwKSx5PV87ZWxzZSBpZihXKHApKWZvcihkPTAsZj1wLmxlbmd0aDtkPGY7KytkKWI9cFtkXSwhVShiKSYmIVcoYikmJih2PXdzKHIsZy5kYXRhLGcuZ2MsdixiKSx5Kz1fKTthLnB1c2godiksby5wdXNoKHkpLGM9TWF0aC5tYXgodixjKSxsPU1hdGgubWF4KHksbCl9SXUoaSx0KTtsZXQgeD1hLmluZGV4T2YoYyksUz1vLmluZGV4T2YobCksQz1lPT4oe3dpZHRoOmFbZV18fDAsaGVpZ2h0Om9bZV18fDB9KTtyZXR1cm57Zmlyc3Q6QygwKSxsYXN0OkModC0xKSx3aWRlc3Q6Qyh4KSxoaWdoZXN0OkMoUyksd2lkdGhzOmEsaGVpZ2h0czpvfX1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBlfWdldFBpeGVsRm9yVmFsdWUoZSx0KXtyZXR1cm4gTmFOfWdldFZhbHVlRm9yUGl4ZWwoZSl7fWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRQaXhlbEZvckRlY2ltYWwoZSl7dGhpcy5fcmV2ZXJzZVBpeGVscyYmKGU9MS1lKTtsZXQgdD10aGlzLl9zdGFydFBpeGVsK2UqdGhpcy5fbGVuZ3RoO3JldHVybiB6byh0aGlzLl9hbGlnblRvUGl4ZWxzP0VzKHRoaXMuY2hhcnQsdCwwKTp0KX1nZXREZWNpbWFsRm9yUGl4ZWwoZSl7bGV0IHQ9KGUtdGhpcy5fc3RhcnRQaXhlbCkvdGhpcy5fbGVuZ3RoO3JldHVybiB0aGlzLl9yZXZlcnNlUGl4ZWxzPzEtdDp0fWdldEJhc2VQaXhlbCgpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0QmFzZVZhbHVlKCl7bGV0e21pbjplLG1heDp0fT10aGlzO3JldHVybiBlPDAmJnQ8MD90OmU+MCYmdD4wP2U6MH1nZXRDb250ZXh0KGUpe2xldCB0PXRoaXMudGlja3N8fFtdO2lmKGU+PTAmJmU8dC5sZW5ndGgpe2xldCBuPXRbZV07cmV0dXJuIG4uJGNvbnRleHR8fD1CdSh0aGlzLmdldENvbnRleHQoKSxlLG4pfXJldHVybiB0aGlzLiRjb250ZXh0fHw9enUodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcyl9X3RpY2tTaXplKCl7bGV0IGU9dGhpcy5vcHRpb25zLnRpY2tzLHQ9am8odGhpcy5sYWJlbFJvdGF0aW9uKSxuPU1hdGguYWJzKE1hdGguY29zKHQpKSxyPU1hdGguYWJzKE1hdGguc2luKHQpKSxpPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxhPWUuYXV0b1NraXBQYWRkaW5nfHwwLG89aT9pLndpZGVzdC53aWR0aCthOjAscz1pP2kuaGlnaGVzdC5oZWlnaHQrYTowO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3Mqbj5vKnI/by9uOnMvcjpzKnI8bypuP3MvbjpvL3J9X2lzVmlzaWJsZSgpe2xldCBlPXRoaXMub3B0aW9ucy5kaXNwbGF5O3JldHVybiBlPT09YGF1dG9gP3RoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGg+MDohIWV9X2NvbXB1dGVHcmlkTGluZUl0ZW1zKGUpe2xldCB0PXRoaXMuYXhpcyxuPXRoaXMuY2hhcnQscj10aGlzLm9wdGlvbnMse2dyaWQ6aSxwb3NpdGlvbjphLGJvcmRlcjpvfT1yLHM9aS5vZmZzZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpLGw9dGhpcy50aWNrcy5sZW5ndGgrICshIXMsdT1MdShpKSxkPVtdLGY9by5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxwPWYuZGlzcGxheT9mLndpZHRoOjAsbT1wLzIsaD1mdW5jdGlvbihlKXtyZXR1cm4gRXMobixlLHApfSxnLF8sdix5LGIseCxTLEMsdyxULEUsRDtpZihhPT09YHRvcGApZz1oKHRoaXMuYm90dG9tKSx4PXRoaXMuYm90dG9tLXUsQz1nLW0sVD1oKGUudG9wKSttLEQ9ZS5ib3R0b207ZWxzZSBpZihhPT09YGJvdHRvbWApZz1oKHRoaXMudG9wKSxUPWUudG9wLEQ9aChlLmJvdHRvbSktbSx4PWcrbSxDPXRoaXMudG9wK3U7ZWxzZSBpZihhPT09YGxlZnRgKWc9aCh0aGlzLnJpZ2h0KSxiPXRoaXMucmlnaHQtdSxTPWctbSx3PWgoZS5sZWZ0KSttLEU9ZS5yaWdodDtlbHNlIGlmKGE9PT1gcmlnaHRgKWc9aCh0aGlzLmxlZnQpLHc9ZS5sZWZ0LEU9aChlLnJpZ2h0KS1tLGI9ZyttLFM9dGhpcy5sZWZ0K3U7ZWxzZSBpZih0PT09YHhgKXtpZihhPT09YGNlbnRlcmApZz1oKChlLnRvcCtlLmJvdHRvbSkvMisuNSk7ZWxzZSBpZihHKGEpKXtsZXQgZT1PYmplY3Qua2V5cyhhKVswXSx0PWFbZV07Zz1oKHRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkpfVQ9ZS50b3AsRD1lLmJvdHRvbSx4PWcrbSxDPXgrdX1lbHNlIGlmKHQ9PT1geWApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUubGVmdCtlLnJpZ2h0KS8yKTtlbHNlIGlmKEcoYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9Yj1nLW0sUz1iLXUsdz1lLmxlZnQsRT1lLnJpZ2h0fWxldCBPPXEoci50aWNrcy5tYXhUaWNrc0xpbWl0LGwpLGs9TWF0aC5tYXgoMSxNYXRoLmNlaWwobC9PKSk7Zm9yKF89MDtfPGw7Xys9ayl7bGV0IGU9dGhpcy5nZXRDb250ZXh0KF8pLHQ9aS5zZXRDb250ZXh0KGUpLHI9by5zZXRDb250ZXh0KGUpLGE9dC5saW5lV2lkdGgsbD10LmNvbG9yLHU9ci5kYXNofHxbXSxmPXIuZGFzaE9mZnNldCxwPXQudGlja1dpZHRoLG09dC50aWNrQ29sb3IsaD10LnRpY2tCb3JkZXJEYXNofHxbXSxnPXQudGlja0JvcmRlckRhc2hPZmZzZXQ7dj1GdSh0aGlzLF8scyksdiE9PXZvaWQgMCYmKHk9RXMobix2LGEpLGM/Yj1TPXc9RT15Ong9Qz1UPUQ9eSxkLnB1c2goe3R4MTpiLHR5MTp4LHR4MjpTLHR5MjpDLHgxOncseTE6VCx4MjpFLHkyOkQsd2lkdGg6YSxjb2xvcjpsLGJvcmRlckRhc2g6dSxib3JkZXJEYXNoT2Zmc2V0OmYsdGlja1dpZHRoOnAsdGlja0NvbG9yOm0sdGlja0JvcmRlckRhc2g6aCx0aWNrQm9yZGVyRGFzaE9mZnNldDpnfSkpfXJldHVybiB0aGlzLl90aWNrc0xlbmd0aD1sLHRoaXMuX2JvcmRlclZhbHVlPWcsZH1fY29tcHV0ZUxhYmVsSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5vcHRpb25zLHtwb3NpdGlvbjpyLHRpY2tzOml9PW4sYT10aGlzLmlzSG9yaXpvbnRhbCgpLG89dGhpcy50aWNrcyx7YWxpZ246cyxjcm9zc0FsaWduOmMscGFkZGluZzpsLG1pcnJvcjp1fT1pLGQ9THUobi5ncmlkKSxmPWQrbCxwPXU/LWw6ZixtPS1qbyh0aGlzLmxhYmVsUm90YXRpb24pLGg9W10sZyxfLHYseSxiLHgsUyxDLHcsVCxFLEQsTz1gbWlkZGxlYDtpZihyPT09YHRvcGApeD10aGlzLmJvdHRvbS1wLFM9dGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO2Vsc2UgaWYocj09PWBib3R0b21gKXg9dGhpcy50b3ArcCxTPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtlbHNlIGlmKHI9PT1gbGVmdGApe2xldCBlPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCk7Uz1lLnRleHRBbGlnbixiPWUueH1lbHNlIGlmKHI9PT1gcmlnaHRgKXtsZXQgZT10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpO1M9ZS50ZXh0QWxpZ24sYj1lLnh9ZWxzZSBpZih0PT09YHhgKXtpZihyPT09YGNlbnRlcmApeD0oZS50b3ArZS5ib3R0b20pLzIrZjtlbHNlIGlmKEcocikpe2xldCBlPU9iamVjdC5rZXlzKHIpWzBdLHQ9cltlXTt4PXRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkrZn1TPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKX1lbHNlIGlmKHQ9PT1geWApe2lmKHI9PT1gY2VudGVyYCliPShlLmxlZnQrZS5yaWdodCkvMi1mO2Vsc2UgaWYoRyhyKSl7bGV0IGU9T2JqZWN0LmtleXMocilbMF0sdD1yW2VdO2I9dGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KX1TPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCkudGV4dEFsaWdufXQ9PT1geWAmJihzPT09YHN0YXJ0YD9PPWB0b3BgOnM9PT1gZW5kYCYmKE89YGJvdHRvbWApKTtsZXQgaz10aGlzLl9nZXRMYWJlbFNpemVzKCk7Zm9yKGc9MCxfPW8ubGVuZ3RoO2c8XzsrK2cpe3Y9b1tnXSx5PXYubGFiZWw7bGV0IGU9aS5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChnKSk7Qz10aGlzLmdldFBpeGVsRm9yVGljayhnKStpLmxhYmVsT2Zmc2V0LHc9dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhnKSxUPXcubGluZUhlaWdodCxFPVcoeSk/eS5sZW5ndGg6MTtsZXQgdD1FLzIsbj1lLmNvbG9yLHM9ZS50ZXh0U3Ryb2tlQ29sb3IsbD1lLnRleHRTdHJva2VXaWR0aCxkPVM7YT8oYj1DLFM9PT1gaW5uZXJgJiYoZD1nPT09Xy0xP3RoaXMub3B0aW9ucy5yZXZlcnNlP2BsZWZ0YDpgcmlnaHRgOmc9PT0wP3RoaXMub3B0aW9ucy5yZXZlcnNlP2ByaWdodGA6YGxlZnRgOmBjZW50ZXJgKSxEPXI9PT1gdG9wYD9jPT09YG5lYXJgfHxtIT09MD8tRSpUK1QvMjpjPT09YGNlbnRlcmA/LWsuaGlnaGVzdC5oZWlnaHQvMi10KlQrVDotay5oaWdoZXN0LmhlaWdodCtULzI6Yz09PWBuZWFyYHx8bSE9PTA/VC8yOmM9PT1gY2VudGVyYD9rLmhpZ2hlc3QuaGVpZ2h0LzItdCpUOmsuaGlnaGVzdC5oZWlnaHQtRSpULHUmJihEKj0tMSksbSE9PTAmJiFlLnNob3dMYWJlbEJhY2tkcm9wJiYoYis9VC8yKk1hdGguc2luKG0pKSk6KHg9QyxEPSgxLUUpKlQvMik7bGV0IGY7aWYoZS5zaG93TGFiZWxCYWNrZHJvcCl7bGV0IHQ9UShlLmJhY2tkcm9wUGFkZGluZyksbj1rLmhlaWdodHNbZ10scj1rLndpZHRoc1tnXSxpPUQtdC50b3AsYT0wLXQubGVmdDtzd2l0Y2goTyl7Y2FzZWBtaWRkbGVgOmktPW4vMjticmVhaztjYXNlYGJvdHRvbWA6aS09bn1zd2l0Y2goUyl7Y2FzZWBjZW50ZXJgOmEtPXIvMjticmVhaztjYXNlYHJpZ2h0YDphLT1yO2JyZWFrO2Nhc2VgaW5uZXJgOmc9PT1fLTE/YS09cjpnPjAmJihhLT1yLzIpfWY9e2xlZnQ6YSx0b3A6aSx3aWR0aDpyK3Qud2lkdGgsaGVpZ2h0Om4rdC5oZWlnaHQsY29sb3I6ZS5iYWNrZHJvcENvbG9yfX1oLnB1c2goe2xhYmVsOnksZm9udDp3LHRleHRPZmZzZXQ6RCxvcHRpb25zOntyb3RhdGlvbjptLGNvbG9yOm4sc3Ryb2tlQ29sb3I6cyxzdHJva2VXaWR0aDpsLHRleHRBbGlnbjpkLHRleHRCYXNlbGluZTpPLHRyYW5zbGF0aW9uOltiLHhdLGJhY2tkcm9wOmZ9fSl9cmV0dXJuIGh9X2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKXtsZXR7cG9zaXRpb246ZSx0aWNrczp0fT10aGlzLm9wdGlvbnM7aWYoLWpvKHRoaXMubGFiZWxSb3RhdGlvbikpcmV0dXJuIGU9PT1gdG9wYD9gbGVmdGA6YHJpZ2h0YDtsZXQgbj1gY2VudGVyYDtyZXR1cm4gdC5hbGlnbj09PWBzdGFydGA/bj1gbGVmdGA6dC5hbGlnbj09PWBlbmRgP249YHJpZ2h0YDp0LmFsaWduPT09YGlubmVyYCYmKG49YGlubmVyYCksbn1fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChlKXtsZXR7cG9zaXRpb246dCx0aWNrczp7Y3Jvc3NBbGlnbjpuLG1pcnJvcjpyLHBhZGRpbmc6aX19PXRoaXMub3B0aW9ucyxhPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxvPWUraSxzPWEud2lkZXN0LndpZHRoLGMsbDtyZXR1cm4gdD09PWBsZWZ0YD9yPyhsPXRoaXMucmlnaHQraSxuPT09YG5lYXJgP2M9YGxlZnRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsKz1zLzIpOihjPWByaWdodGAsbCs9cykpOihsPXRoaXMucmlnaHQtbyxuPT09YG5lYXJgP2M9YHJpZ2h0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbC09cy8yKTooYz1gbGVmdGAsbD10aGlzLmxlZnQpKTp0PT09YHJpZ2h0YD9yPyhsPXRoaXMubGVmdCtpLG49PT1gbmVhcmA/Yz1gcmlnaHRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsLT1zLzIpOihjPWBsZWZ0YCxsLT1zKSk6KGw9dGhpcy5sZWZ0K28sbj09PWBuZWFyYD9jPWBsZWZ0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbCs9cy8yKTooYz1gcmlnaHRgLGw9dGhpcy5yaWdodCkpOmM9YHJpZ2h0YCx7dGV4dEFsaWduOmMseDpsfX1fY29tcHV0ZUxhYmVsQXJlYSgpe2lmKHRoaXMub3B0aW9ucy50aWNrcy5taXJyb3IpcmV0dXJuO2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLm9wdGlvbnMucG9zaXRpb247aWYodD09PWBsZWZ0YHx8dD09PWByaWdodGApcmV0dXJue3RvcDowLGxlZnQ6dGhpcy5sZWZ0LGJvdHRvbTplLmhlaWdodCxyaWdodDp0aGlzLnJpZ2h0fTtpZih0PT09YHRvcGB8fHQ9PT1gYm90dG9tYClyZXR1cm57dG9wOnRoaXMudG9wLGxlZnQ6MCxib3R0b206dGhpcy5ib3R0b20scmlnaHQ6ZS53aWR0aH19ZHJhd0JhY2tncm91bmQoKXtsZXR7Y3R4OmUsb3B0aW9uczp7YmFja2dyb3VuZENvbG9yOnR9LGxlZnQ6bix0b3A6cix3aWR0aDppLGhlaWdodDphfT10aGlzO3QmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT10LGUuZmlsbFJlY3QobixyLGksYSksZS5yZXN0b3JlKCkpfWdldExpbmVXaWR0aEZvclZhbHVlKGUpe2xldCB0PXRoaXMub3B0aW9ucy5ncmlkO2lmKCF0aGlzLl9pc1Zpc2libGUoKXx8IXQuZGlzcGxheSlyZXR1cm4gMDtsZXQgbj10aGlzLnRpY2tzLmZpbmRJbmRleCh0PT50LnZhbHVlPT09ZSk7cmV0dXJuIG4+PTA/dC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChuKSkubGluZVdpZHRoOjB9ZHJhd0dyaWQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLmdyaWQsbj10aGlzLmN0eCxyPXRoaXMuX2dyaWRMaW5lSXRlbXN8fD10aGlzLl9jb21wdXRlR3JpZExpbmVJdGVtcyhlKSxpLGEsbz0oZSx0LHIpPT57IXIud2lkdGh8fCFyLmNvbG9yfHwobi5zYXZlKCksbi5saW5lV2lkdGg9ci53aWR0aCxuLnN0cm9rZVN0eWxlPXIuY29sb3Isbi5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2h8fFtdKSxuLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxuLmJlZ2luUGF0aCgpLG4ubW92ZVRvKGUueCxlLnkpLG4ubGluZVRvKHQueCx0LnkpLG4uc3Ryb2tlKCksbi5yZXN0b3JlKCkpfTtpZih0LmRpc3BsYXkpZm9yKGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe2xldCBlPXJbaV07dC5kcmF3T25DaGFydEFyZWEmJm8oe3g6ZS54MSx5OmUueTF9LHt4OmUueDIseTplLnkyfSxlKSx0LmRyYXdUaWNrcyYmbyh7eDplLnR4MSx5OmUudHkxfSx7eDplLnR4Mix5OmUudHkyfSx7Y29sb3I6ZS50aWNrQ29sb3Isd2lkdGg6ZS50aWNrV2lkdGgsYm9yZGVyRGFzaDplLnRpY2tCb3JkZXJEYXNoLGJvcmRlckRhc2hPZmZzZXQ6ZS50aWNrQm9yZGVyRGFzaE9mZnNldH0pfX1kcmF3Qm9yZGVyKCl7bGV0e2NoYXJ0OmUsY3R4OnQsb3B0aW9uczp7Ym9yZGVyOm4sZ3JpZDpyfX09dGhpcyxpPW4uc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSksYT1uLmRpc3BsYXk/aS53aWR0aDowO2lmKCFhKXJldHVybjtsZXQgbz1yLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGgscz10aGlzLl9ib3JkZXJWYWx1ZSxjLGwsdSxkO3RoaXMuaXNIb3Jpem9udGFsKCk/KGM9RXMoZSx0aGlzLmxlZnQsYSktYS8yLGw9RXMoZSx0aGlzLnJpZ2h0LG8pK28vMix1PWQ9cyk6KHU9RXMoZSx0aGlzLnRvcCxhKS1hLzIsZD1FcyhlLHRoaXMuYm90dG9tLG8pK28vMixjPWw9cyksdC5zYXZlKCksdC5saW5lV2lkdGg9aS53aWR0aCx0LnN0cm9rZVN0eWxlPWkuY29sb3IsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhjLHUpLHQubGluZVRvKGwsZCksdC5zdHJva2UoKSx0LnJlc3RvcmUoKX1kcmF3TGFiZWxzKGUpe2lmKCF0aGlzLm9wdGlvbnMudGlja3MuZGlzcGxheSlyZXR1cm47bGV0IHQ9dGhpcy5jdHgsbj10aGlzLl9jb21wdXRlTGFiZWxBcmVhKCk7biYmanModCxuKTtsZXQgcj10aGlzLmdldExhYmVsSXRlbXMoZSk7Zm9yKGxldCBlIG9mIHIpe2xldCBuPWUub3B0aW9ucyxyPWUuZm9udCxpPWUubGFiZWwsYT1lLnRleHRPZmZzZXQ7SXModCxpLDAsYSxyLG4pfW4mJk1zKHQpfWRyYXdUaXRsZSgpe2xldHtjdHg6ZSxvcHRpb25zOntwb3NpdGlvbjp0LHRpdGxlOm4scmV2ZXJzZTpyfX09dGhpcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgaT0kKG4uZm9udCksYT1RKG4ucGFkZGluZyksbz1uLmFsaWduLHM9aS5saW5lSGVpZ2h0LzI7dD09PWBib3R0b21gfHx0PT09YGNlbnRlcmB8fEcodCk/KHMrPWEuYm90dG9tLFcobi50ZXh0KSYmKHMrPWkubGluZUhlaWdodCoobi50ZXh0Lmxlbmd0aC0xKSkpOnMrPWEudG9wO2xldHt0aXRsZVg6Yyx0aXRsZVk6bCxtYXhXaWR0aDp1LHJvdGF0aW9uOmR9PUh1KHRoaXMscyx0LG8pO0lzKGUsbi50ZXh0LDAsMCxpLHtjb2xvcjpuLmNvbG9yLG1heFdpZHRoOnUscm90YXRpb246ZCx0ZXh0QWxpZ246VnUobyx0LHIpLHRleHRCYXNlbGluZTpgbWlkZGxlYCx0cmFuc2xhdGlvbjpbYyxsXX0pfWRyYXcoZSl7dGhpcy5faXNWaXNpYmxlKCkmJih0aGlzLmRyYXdCYWNrZ3JvdW5kKCksdGhpcy5kcmF3R3JpZChlKSx0aGlzLmRyYXdCb3JkZXIoKSx0aGlzLmRyYXdUaXRsZSgpLHRoaXMuZHJhd0xhYmVscyhlKSl9X2xheWVycygpe2xldCB0PXRoaXMub3B0aW9ucyxuPXQudGlja3MmJnQudGlja3Muenx8MCxyPXEodC5ncmlkJiZ0LmdyaWQueiwtMSksaT1xKHQuYm9yZGVyJiZ0LmJvcmRlci56LDApO3JldHVybiF0aGlzLl9pc1Zpc2libGUoKXx8dGhpcy5kcmF3IT09ZS5wcm90b3R5cGUuZHJhdz9be3o6bixkcmF3OmU9Pnt0aGlzLmRyYXcoZSl9fV06W3t6OnIsZHJhdzplPT57dGhpcy5kcmF3QmFja2dyb3VuZCgpLHRoaXMuZHJhd0dyaWQoZSksdGhpcy5kcmF3VGl0bGUoKX19LHt6OmksZHJhdzooKT0+e3RoaXMuZHJhd0JvcmRlcigpfX0se3o6bixkcmF3OmU9Pnt0aGlzLmRyYXdMYWJlbHMoZSl9fV19Z2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoZSl7bGV0IHQ9dGhpcy5jaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCksbj10aGlzLmF4aXMrYEF4aXNJRGAscj1bXSxpLGE7Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpe2xldCBhPXRbaV07YVtuXT09PXRoaXMuaWQmJighZXx8YS50eXBlPT09ZSkmJnIucHVzaChhKX1yZXR1cm4gcn1fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhlKXtyZXR1cm4gJCh0aGlzLm9wdGlvbnMudGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoZSkpLmZvbnQpfV9tYXhEaWdpdHMoKXtsZXQgZT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7cmV0dXJuKHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aDp0aGlzLmhlaWdodCkvZX19LFd1PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnR5cGU9ZSx0aGlzLnNjb3BlPXQsdGhpcy5vdmVycmlkZT1uLHRoaXMuaXRlbXM9T2JqZWN0LmNyZWF0ZShudWxsKX1pc0ZvclR5cGUoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsZS5wcm90b3R5cGUpfXJlZ2lzdGVyKGUpe2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxuO3F1KHQpJiYobj10aGlzLnJlZ2lzdGVyKHQpKTtsZXQgcj10aGlzLml0ZW1zLGk9ZS5pZCxhPXRoaXMuc2NvcGUrYC5gK2k7aWYoIWkpdGhyb3cgRXJyb3IoYGNsYXNzIGRvZXMgbm90IGhhdmUgaWQ6IGArZSk7cmV0dXJuIGkgaW4gcj9hOihyW2ldPWUsR3UoZSxhLG4pLHRoaXMub3ZlcnJpZGUmJloub3ZlcnJpZGUoZS5pZCxlLm92ZXJyaWRlcyksYSl9Z2V0KGUpe3JldHVybiB0aGlzLml0ZW1zW2VdfXVucmVnaXN0ZXIoZSl7bGV0IHQ9dGhpcy5pdGVtcyxuPWUuaWQscj10aGlzLnNjb3BlO24gaW4gdCYmZGVsZXRlIHRbbl0sciYmbiBpbiBaW3JdJiYoZGVsZXRlIFpbcl1bbl0sdGhpcy5vdmVycmlkZSYmZGVsZXRlIHlzW25dKX19O2Z1bmN0aW9uIEd1KGUsdCxuKXtsZXQgcj1ybyhPYmplY3QuY3JlYXRlKG51bGwpLFtuP1ouZ2V0KG4pOnt9LFouZ2V0KHQpLGUuZGVmYXVsdHNdKTtaLnNldCh0LHIpLGUuZGVmYXVsdFJvdXRlcyYmS3UodCxlLmRlZmF1bHRSb3V0ZXMpLGUuZGVzY3JpcHRvcnMmJlouZGVzY3JpYmUodCxlLmRlc2NyaXB0b3JzKX1mdW5jdGlvbiBLdShlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2xldCByPW4uc3BsaXQoYC5gKSxpPXIucG9wKCksYT1bZV0uY29uY2F0KHIpLmpvaW4oYC5gKSxvPXRbbl0uc3BsaXQoYC5gKSxzPW8ucG9wKCksYz1vLmpvaW4oYC5gKTtaLnJvdXRlKGEsaSxjLHMpfSl9ZnVuY3Rpb24gcXUoZSl7cmV0dXJuYGlkYGluIGUmJmBkZWZhdWx0c2BpbiBlfXZhciBKdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRyb2xsZXJzPW5ldyBXdShsbCxgZGF0YXNldHNgLCEwKSx0aGlzLmVsZW1lbnRzPW5ldyBXdShDdSxgZWxlbWVudHNgKSx0aGlzLnBsdWdpbnM9bmV3IFd1KE9iamVjdCxgcGx1Z2luc2ApLHRoaXMuc2NhbGVzPW5ldyBXdShVdSxgc2NhbGVzYCksdGhpcy5fdHlwZWRSZWdpc3RyaWVzPVt0aGlzLmNvbnRyb2xsZXJzLHRoaXMuc2NhbGVzLHRoaXMuZWxlbWVudHNdfWFkZCguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSl9cmVtb3ZlKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUpfWFkZENvbnRyb2xsZXJzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfWFkZEVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuZWxlbWVudHMpfWFkZFBsdWdpbnMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5wbHVnaW5zKX1hZGRTY2FsZXMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfWdldENvbnRyb2xsZXIoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuY29udHJvbGxlcnMsYGNvbnRyb2xsZXJgKX1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLmVsZW1lbnRzLGBlbGVtZW50YCl9Z2V0UGx1Z2luKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnBsdWdpbnMsYHBsdWdpbmApfWdldFNjYWxlKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnNjYWxlcyxgc2NhbGVgKX1yZW1vdmVDb250cm9sbGVycyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfXJlbW92ZUVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5lbGVtZW50cyl9cmVtb3ZlUGx1Z2lucyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMucGx1Z2lucyl9cmVtb3ZlU2NhbGVzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfV9lYWNoKGUsdCxuKXtbLi4udF0uZm9yRWFjaCh0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO258fHIuaXNGb3JUeXBlKHQpfHxyPT09dGhpcy5wbHVnaW5zJiZ0LmlkP3RoaXMuX2V4ZWMoZSxyLHQpOlkodCx0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO3RoaXMuX2V4ZWMoZSxyLHQpfSl9KX1fZXhlYyhlLHQsbil7bGV0IHI9dW8oZSk7SihuW2BiZWZvcmVgK3JdLFtdLG4pLHRbZV0obiksSihuW2BhZnRlcmArcl0sW10sbil9X2dldFJlZ2lzdHJ5Rm9yVHlwZShlKXtmb3IobGV0IHQ9MDt0PHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7dCsrKXtsZXQgbj10aGlzLl90eXBlZFJlZ2lzdHJpZXNbdF07aWYobi5pc0ZvclR5cGUoZSkpcmV0dXJuIG59cmV0dXJuIHRoaXMucGx1Z2luc31fZ2V0KGUsdCxuKXtsZXQgcj10LmdldChlKTtpZihyPT09dm9pZCAwKXRocm93IEVycm9yKGAiYCtlK2AiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgYCtuK2AuYCk7cmV0dXJuIHJ9fSxZdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2luaXQ9dm9pZCAwfW5vdGlmeShlLHQsbixyKXtpZih0PT09YGJlZm9yZUluaXRgJiYodGhpcy5faW5pdD10aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhlLCEwKSx0aGlzLl9ub3RpZnkodGhpcy5faW5pdCxlLGBpbnN0YWxsYCkpLHRoaXMuX2luaXQ9PT12b2lkIDApcmV0dXJuO2xldCBpPXI/dGhpcy5fZGVzY3JpcHRvcnMoZSkuZmlsdGVyKHIpOnRoaXMuX2Rlc2NyaXB0b3JzKGUpLGE9dGhpcy5fbm90aWZ5KGksZSx0LG4pO3JldHVybiB0PT09YGFmdGVyRGVzdHJveWAmJih0aGlzLl9ub3RpZnkoaSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsZSxgdW5pbnN0YWxsYCksdGhpcy5faW5pdD12b2lkIDApLGF9X25vdGlmeShlLHQsbixyKXtyfHw9e307Zm9yKGxldCBpIG9mIGUpe2xldCBlPWkucGx1Z2luLGE9ZVtuXTtpZihKKGEsW3QscixpLm9wdGlvbnNdLGUpPT09ITEmJnIuY2FuY2VsYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH1pbnZhbGlkYXRlKCl7VSh0aGlzLl9jYWNoZSl8fCh0aGlzLl9vbGRDYWNoZT10aGlzLl9jYWNoZSx0aGlzLl9jYWNoZT12b2lkIDApfV9kZXNjcmlwdG9ycyhlKXtpZih0aGlzLl9jYWNoZSlyZXR1cm4gdGhpcy5fY2FjaGU7bGV0IHQ9dGhpcy5fY2FjaGU9dGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoZSk7cmV0dXJuIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhlKSx0fV9jcmVhdGVEZXNjcmlwdG9ycyhlLHQpe2xldCBuPWUmJmUuY29uZmlnLHI9cShuLm9wdGlvbnMmJm4ub3B0aW9ucy5wbHVnaW5zLHt9KSxpPVh1KG4pO3JldHVybiByPT09ITEmJiF0P1tdOlF1KGUsaSxyLHQpfV9ub3RpZnlTdGF0ZUNoYW5nZXMoZSl7bGV0IHQ9dGhpcy5fb2xkQ2FjaGV8fFtdLG49dGhpcy5fY2FjaGUscj0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLnBsdWdpbi5pZD09PXQucGx1Z2luLmlkKSk7dGhpcy5fbm90aWZ5KHIodCxuKSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHIobix0KSxlLGBzdGFydGApfX07ZnVuY3Rpb24gWHUoZSl7bGV0IHQ9e30sbj1bXSxyPU9iamVjdC5rZXlzKEp1LnBsdWdpbnMuaXRlbXMpO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaChKdS5nZXRQbHVnaW4ocltlXSkpO2xldCBpPWUucGx1Z2luc3x8W107Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPWlbZV07bi5pbmRleE9mKHIpPT09LTEmJihuLnB1c2gociksdFtyLmlkXT0hMCl9cmV0dXJue3BsdWdpbnM6bixsb2NhbElkczp0fX1mdW5jdGlvbiBadShlLHQpe3JldHVybiF0JiZlPT09ITE/bnVsbDplPT09ITA/e306ZX1mdW5jdGlvbiBRdShlLHtwbHVnaW5zOnQsbG9jYWxJZHM6bn0scixpKXtsZXQgYT1bXSxvPWUuZ2V0Q29udGV4dCgpO2ZvcihsZXQgcyBvZiB0KXtsZXQgdD1zLmlkLGM9WnUoclt0XSxpKTtjIT09bnVsbCYmYS5wdXNoKHtwbHVnaW46cyxvcHRpb25zOiR1KGUuY29uZmlnLHtwbHVnaW46cyxsb2NhbDpuW3RdfSxjLG8pfSl9cmV0dXJuIGF9ZnVuY3Rpb24gJHUoZSx7cGx1Z2luOnQsbG9jYWw6bn0scixpKXtsZXQgYT1lLnBsdWdpblNjb3BlS2V5cyh0KSxvPWUuZ2V0T3B0aW9uU2NvcGVzKHIsYSk7cmV0dXJuIG4mJnQuZGVmYXVsdHMmJm8ucHVzaCh0LmRlZmF1bHRzKSxlLmNyZWF0ZVJlc29sdmVyKG8saSxbYGBdLHtzY3JpcHRhYmxlOiExLGluZGV4YWJsZTohMSxhbGxLZXlzOiEwfSl9ZnVuY3Rpb24gZWQoZSx0KXtsZXQgbj1aLmRhdGFzZXRzW2VdfHx7fTtyZXR1cm4oKHQuZGF0YXNldHN8fHt9KVtlXXx8e30pLmluZGV4QXhpc3x8dC5pbmRleEF4aXN8fG4uaW5kZXhBeGlzfHxgeGB9ZnVuY3Rpb24gdGQoZSx0KXtsZXQgbj1lO3JldHVybiBlPT09YF9pbmRleF9gP249dDplPT09YF92YWx1ZV9gJiYobj10PT09YHhgP2B5YDpgeGApLG59ZnVuY3Rpb24gbmQoZSx0KXtyZXR1cm4gZT09PXQ/YF9pbmRleF9gOmBfdmFsdWVfYH1mdW5jdGlvbiByZChlKXtpZihlPT09YHhgfHxlPT09YHlgfHxlPT09YHJgKXJldHVybiBlfWZ1bmN0aW9uIGlkKGUpe2lmKGU9PT1gdG9wYHx8ZT09PWBib3R0b21gKXJldHVybmB4YDtpZihlPT09YGxlZnRgfHxlPT09YHJpZ2h0YClyZXR1cm5geWB9ZnVuY3Rpb24gYWQoZSwuLi50KXtpZihyZChlKSlyZXR1cm4gZTtmb3IobGV0IG4gb2YgdCl7bGV0IHQ9bi5heGlzfHxpZChuLnBvc2l0aW9uKXx8ZS5sZW5ndGg+MSYmcmQoZVswXS50b0xvd2VyQ2FzZSgpKTtpZih0KXJldHVybiB0fXRocm93IEVycm9yKGBDYW5ub3QgZGV0ZXJtaW5lIHR5cGUgb2YgJyR7ZX0nIGF4aXMuIFBsZWFzZSBwcm92aWRlICdheGlzJyBvciAncG9zaXRpb24nIG9wdGlvbi5gKX1mdW5jdGlvbiBvZChlLHQsbil7aWYoblt0K2BBeGlzSURgXT09PWUpcmV0dXJue2F4aXM6dH19ZnVuY3Rpb24gc2QoZSx0KXtpZih0LmRhdGEmJnQuZGF0YS5kYXRhc2V0cyl7bGV0IG49dC5kYXRhLmRhdGFzZXRzLmZpbHRlcih0PT50LnhBeGlzSUQ9PT1lfHx0LnlBeGlzSUQ9PT1lKTtpZihuLmxlbmd0aClyZXR1cm4gb2QoZSxgeGAsblswXSl8fG9kKGUsYHlgLG5bMF0pfXJldHVybnt9fWZ1bmN0aW9uIGNkKGUsdCl7bGV0IG49eXNbZS50eXBlXXx8e3NjYWxlczp7fX0scj10LnNjYWxlc3x8e30saT1lZChlLnR5cGUsdCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQ9PntsZXQgbz1yW3RdO2lmKCFHKG8pKXJldHVybiBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHNjYWxlIGNvbmZpZ3VyYXRpb24gZm9yIHNjYWxlOiAke3R9YCk7aWYoby5fcHJveHkpcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke3R9YCk7bGV0IHM9YWQodCxvLHNkKHQsZSksWi5zY2FsZXNbby50eXBlXSksYz1uZChzLGkpLGw9bi5zY2FsZXN8fHt9O2FbdF09aW8oT2JqZWN0LmNyZWF0ZShudWxsKSxbe2F4aXM6c30sbyxsW3NdLGxbY11dKX0pLGUuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKG49PntsZXQgaT1uLnR5cGV8fGUudHlwZSxvPW4uaW5kZXhBeGlzfHxlZChpLHQpLHM9KHlzW2ldfHx7fSkuc2NhbGVzfHx7fTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGU9PntsZXQgdD10ZChlLG8pLGk9blt0K2BBeGlzSURgXXx8dDthW2ldPWFbaV18fE9iamVjdC5jcmVhdGUobnVsbCksaW8oYVtpXSxbe2F4aXM6dH0scltpXSxzW2VdXSl9KX0pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZT0+e2xldCB0PWFbZV07aW8odCxbWi5zY2FsZXNbdC50eXBlXSxaLnNjYWxlXSl9KSxhfWZ1bmN0aW9uIGxkKGUpe2xldCB0PWUub3B0aW9uc3x8PXt9O3QucGx1Z2lucz1xKHQucGx1Z2lucyx7fSksdC5zY2FsZXM9Y2QoZSx0KX1mdW5jdGlvbiB1ZChlKXtyZXR1cm4gZXx8PXt9LGUuZGF0YXNldHM9ZS5kYXRhc2V0c3x8W10sZS5sYWJlbHM9ZS5sYWJlbHN8fFtdLGV9ZnVuY3Rpb24gZGQoZSl7cmV0dXJuIGV8fD17fSxlLmRhdGE9dWQoZS5kYXRhKSxsZChlKSxlfXZhciBmZD1uZXcgTWFwLHBkPW5ldyBTZXQ7ZnVuY3Rpb24gbWQoZSx0KXtsZXQgbj1mZC5nZXQoZSk7cmV0dXJuIG58fChuPXQoKSxmZC5zZXQoZSxuKSxwZC5hZGQobikpLG59dmFyIGhkPShlLHQsbik9PntsZXQgcj1sbyh0LG4pO3IhPT12b2lkIDAmJmUuYWRkKHIpfSxnZD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9jb25maWc9ZGQoZSksdGhpcy5fc2NvcGVDYWNoZT1uZXcgTWFwLHRoaXMuX3Jlc29sdmVyQ2FjaGU9bmV3IE1hcH1nZXQgcGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5fY29uZmlnLnBsYXRmb3JtfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy50eXBlfXNldCB0eXBlKGUpe3RoaXMuX2NvbmZpZy50eXBlPWV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fY29uZmlnLmRhdGF9c2V0IGRhdGEoZSl7dGhpcy5fY29uZmlnLmRhdGE9dWQoZSl9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fY29uZmlnLm9wdGlvbnN9c2V0IG9wdGlvbnMoZSl7dGhpcy5fY29uZmlnLm9wdGlvbnM9ZX1nZXQgcGx1Z2lucygpe3JldHVybiB0aGlzLl9jb25maWcucGx1Z2luc311cGRhdGUoKXtsZXQgZT10aGlzLl9jb25maWc7dGhpcy5jbGVhckNhY2hlKCksbGQoZSl9Y2xlYXJDYWNoZSgpe3RoaXMuX3Njb3BlQ2FjaGUuY2xlYXIoKSx0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCl9ZGF0YXNldFNjb3BlS2V5cyhlKXtyZXR1cm4gbWQoZSwoKT0+W1tgZGF0YXNldHMuJHtlfWAsYGBdXSl9ZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyhlLHQpe3JldHVybiBtZChgJHtlfS50cmFuc2l0aW9uLiR7dH1gLCgpPT5bW2BkYXRhc2V0cy4ke2V9LnRyYW5zaXRpb25zLiR7dH1gLGB0cmFuc2l0aW9ucy4ke3R9YF0sW2BkYXRhc2V0cy4ke2V9YCxgYF1dKX1kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyhlLHQpe3JldHVybiBtZChgJHtlfS0ke3R9YCwoKT0+W1tgZGF0YXNldHMuJHtlfS5lbGVtZW50cy4ke3R9YCxgZGF0YXNldHMuJHtlfWAsYGVsZW1lbnRzLiR7dH1gLGBgXV0pfXBsdWdpblNjb3BlS2V5cyhlKXtsZXQgdD1lLmlkLG49dGhpcy50eXBlO3JldHVybiBtZChgJHtufS1wbHVnaW4tJHt0fWAsKCk9PltbYHBsdWdpbnMuJHt0fWAsLi4uZS5hZGRpdGlvbmFsT3B0aW9uU2NvcGVzfHxbXV1dKX1fY2FjaGVkU2NvcGVzKGUsdCl7bGV0IG49dGhpcy5fc2NvcGVDYWNoZSxyPW4uZ2V0KGUpO3JldHVybighcnx8dCkmJihyPW5ldyBNYXAsbi5zZXQoZSxyKSkscn1nZXRPcHRpb25TY29wZXMoZSx0LG4pe2xldHtvcHRpb25zOnIsdHlwZTppfT10aGlzLGE9dGhpcy5fY2FjaGVkU2NvcGVzKGUsbiksbz1hLmdldCh0KTtpZihvKXJldHVybiBvO2xldCBzPW5ldyBTZXQ7dC5mb3JFYWNoKHQ9PntlJiYocy5hZGQoZSksdC5mb3JFYWNoKHQ9PmhkKHMsZSx0KSkpLHQuZm9yRWFjaChlPT5oZChzLHIsZSkpLHQuZm9yRWFjaChlPT5oZChzLHlzW2ldfHx7fSxlKSksdC5mb3JFYWNoKGU9PmhkKHMsWixlKSksdC5mb3JFYWNoKGU9PmhkKHMsYnMsZSkpfSk7bGV0IGM9QXJyYXkuZnJvbShzKTtyZXR1cm4gYy5sZW5ndGg9PT0wJiZjLnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSkscGQuaGFzKHQpJiZhLnNldCh0LGMpLGN9Y2hhcnRPcHRpb25TY29wZXMoKXtsZXR7b3B0aW9uczplLHR5cGU6dH09dGhpcztyZXR1cm5bZSx5c1t0XXx8e30sWi5kYXRhc2V0c1t0XXx8e30se3R5cGU6dH0sWixic119cmVzb2x2ZU5hbWVkT3B0aW9ucyhlLHQsbixyPVtgYF0pe2xldCBpPXskc2hhcmVkOiEwfSx7cmVzb2x2ZXI6YSxzdWJQcmVmaXhlczpvfT1fZCh0aGlzLl9yZXNvbHZlckNhY2hlLGUscikscz1hO2lmKHlkKGEsdCkpe2kuJHNoYXJlZD0hMSxuPXBvKG4pP24oKTpuO2xldCB0PXRoaXMuY3JlYXRlUmVzb2x2ZXIoZSxuLG8pO3M9WXMoYSxuLHQpfWZvcihsZXQgZSBvZiB0KWlbZV09c1tlXTtyZXR1cm4gaX1jcmVhdGVSZXNvbHZlcihlLHQsbj1bYGBdLHIpe2xldHtyZXNvbHZlcjppfT1fZCh0aGlzLl9yZXNvbHZlckNhY2hlLGUsbik7cmV0dXJuIEcodCk/WXMoaSx0LHZvaWQgMCxyKTppfX07ZnVuY3Rpb24gX2QoZSx0LG4pe2xldCByPWUuZ2V0KHQpO3J8fChyPW5ldyBNYXAsZS5zZXQodCxyKSk7bGV0IGk9bi5qb2luKCksYT1yLmdldChpKTtyZXR1cm4gYXx8KGE9e3Jlc29sdmVyOkpzKHQsbiksc3ViUHJlZml4ZXM6bi5maWx0ZXIoZT0+IWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhgaG92ZXJgKSl9LHIuc2V0KGksYSkpLGF9dmFyIHZkPWU9PkcoZSkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLnNvbWUodD0+cG8oZVt0XSkpO2Z1bmN0aW9uIHlkKGUsdCl7bGV0e2lzU2NyaXB0YWJsZTpuLGlzSW5kZXhhYmxlOnJ9PVhzKGUpO2ZvcihsZXQgaSBvZiB0KXtsZXQgdD1uKGkpLGE9cihpKSxvPShhfHx0KSYmZVtpXTtpZih0JiYocG8obyl8fHZkKG8pKXx8YSYmVyhvKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgYmQ9YDQuNS4xYCx4ZD1bYHRvcGAsYGJvdHRvbWAsYGxlZnRgLGByaWdodGAsYGNoYXJ0QXJlYWBdO2Z1bmN0aW9uIFNkKGUsdCl7cmV0dXJuIGU9PT1gdG9wYHx8ZT09PWBib3R0b21gfHx4ZC5pbmRleE9mKGUpPT09LTEmJnQ9PT1geGB9ZnVuY3Rpb24gQ2QoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gbltlXT09PXJbZV0/blt0XS1yW3RdOm5bZV0tcltlXX19ZnVuY3Rpb24gd2QoZSl7bGV0IHQ9ZS5jaGFydCxuPXQub3B0aW9ucy5hbmltYXRpb247dC5ub3RpZnlQbHVnaW5zKGBhZnRlclJlbmRlcmApLEoobiYmbi5vbkNvbXBsZXRlLFtlXSx0KX1mdW5jdGlvbiBUZChlKXtsZXQgdD1lLmNoYXJ0LG49dC5vcHRpb25zLmFuaW1hdGlvbjtKKG4mJm4ub25Qcm9ncmVzcyxbZV0sdCl9ZnVuY3Rpb24gRWQoZSl7cmV0dXJuIHBjKCkmJnR5cGVvZiBlPT1gc3RyaW5nYD9lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpOmUmJmUubGVuZ3RoJiYoZT1lWzBdKSxlJiZlLmNhbnZhcyYmKGU9ZS5jYW52YXMpLGV9dmFyIERkPXt9LE9kPWU9PntsZXQgdD1FZChlKTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhEZCkuZmlsdGVyKGU9PmUuY2FudmFzPT09dCkucG9wKCl9O2Z1bmN0aW9uIGtkKGUsdCxuKXtsZXQgcj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IGkgb2Ygcil7bGV0IHI9K2k7aWYocj49dCl7bGV0IGE9ZVtpXTtkZWxldGUgZVtpXSwobj4wfHxyPnQpJiYoZVtyK25dPWEpfX19ZnVuY3Rpb24gQWQoZSx0LG4scil7cmV0dXJuIW58fGUudHlwZT09PWBtb3VzZW91dGA/bnVsbDpyP3Q6ZX12YXIgamQ9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPVo7c3RhdGljIGluc3RhbmNlcz1EZDtzdGF0aWMgb3ZlcnJpZGVzPXlzO3N0YXRpYyByZWdpc3RyeT1KdTtzdGF0aWMgdmVyc2lvbj1iZDtzdGF0aWMgZ2V0Q2hhcnQ9T2Q7c3RhdGljIHJlZ2lzdGVyKC4uLmUpe0p1LmFkZCguLi5lKSxNZCgpfXN0YXRpYyB1bnJlZ2lzdGVyKC4uLmUpe0p1LnJlbW92ZSguLi5lKSxNZCgpfWNvbnN0cnVjdG9yKGUsdCl7bGV0IG49dGhpcy5jb25maWc9bmV3IGdkKHQpLHI9RWQoZSksaT1PZChyKTtpZihpKXRocm93IEVycm9yKGBDYW52YXMgaXMgYWxyZWFkeSBpbiB1c2UuIENoYXJ0IHdpdGggSUQgJ2AraS5pZCtgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEICdgK2kuY2FudmFzLmlkK2AnIGNhbiBiZSByZXVzZWQuYCk7bGV0IGE9bi5jcmVhdGVSZXNvbHZlcihuLmNoYXJ0T3B0aW9uU2NvcGVzKCksdGhpcy5nZXRDb250ZXh0KCkpO3RoaXMucGxhdGZvcm09bmV3KG4ucGxhdGZvcm18fChTdShyKSkpLHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKG4pO2xldCBvPXRoaXMucGxhdGZvcm0uYWNxdWlyZUNvbnRleHQocixhLmFzcGVjdFJhdGlvKSxzPW8mJm8uY2FudmFzLGM9cyYmcy5oZWlnaHQsbD1zJiZzLndpZHRoO2lmKHRoaXMuaWQ9WGEoKSx0aGlzLmN0eD1vLHRoaXMuY2FudmFzPXMsdGhpcy53aWR0aD1sLHRoaXMuaGVpZ2h0PWMsdGhpcy5fb3B0aW9ucz1hLHRoaXMuX2FzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX21ldGFzZXRzPVtdLHRoaXMuX3N0YWNrcz12b2lkIDAsdGhpcy5ib3hlcz1bXSx0aGlzLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXZvaWQgMCx0aGlzLmNoYXJ0QXJlYT12b2lkIDAsdGhpcy5fYWN0aXZlPVtdLHRoaXMuX2xhc3RFdmVudD12b2lkIDAsdGhpcy5fbGlzdGVuZXJzPXt9LHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwLHRoaXMuX3NvcnRlZE1ldGFzZXRzPVtdLHRoaXMuc2NhbGVzPXt9LHRoaXMuX3BsdWdpbnM9bmV3IFl1LHRoaXMuJHByb3hpZXM9e30sdGhpcy5faGlkZGVuSW5kaWNlcz17fSx0aGlzLmF0dGFjaGVkPSExLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5fZG9SZXNpemU9Wm8oZT0+dGhpcy51cGRhdGUoZSksYS5yZXNpemVEZWxheXx8MCksdGhpcy5fZGF0YUNoYW5nZXM9W10sRGRbdGhpcy5pZF09dGhpcywhb3x8IXMpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtYCk7cmV0dXJufUxjLmxpc3Rlbih0aGlzLGBjb21wbGV0ZWAsd2QpLExjLmxpc3Rlbih0aGlzLGBwcm9ncmVzc2AsVGQpLHRoaXMuX2luaXRpYWxpemUoKSx0aGlzLmF0dGFjaGVkJiZ0aGlzLnVwZGF0ZSgpfWdldCBhc3BlY3RSYXRpbygpe2xldHtvcHRpb25zOnthc3BlY3RSYXRpbzplLG1haW50YWluQXNwZWN0UmF0aW86dH0sd2lkdGg6bixoZWlnaHQ6cixfYXNwZWN0UmF0aW86aX09dGhpcztyZXR1cm4gVShlKT90JiZpP2k6cj9uL3I6bnVsbDplfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuY29uZmlnLmRhdGF9c2V0IGRhdGEoZSl7dGhpcy5jb25maWcuZGF0YT1lfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX29wdGlvbnN9c2V0IG9wdGlvbnMoZSl7dGhpcy5jb25maWcub3B0aW9ucz1lfWdldCByZWdpc3RyeSgpe3JldHVybiBKdX1faW5pdGlhbGl6ZSgpe3JldHVybiB0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUluaXRgKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLnJlc2l6ZSgpOkVjKHRoaXMsdGhpcy5vcHRpb25zLmRldmljZVBpeGVsUmF0aW8pLHRoaXMuYmluZEV2ZW50cygpLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJJbml0YCksdGhpc31jbGVhcigpe3JldHVybiBEcyh0aGlzLmNhbnZhcyx0aGlzLmN0eCksdGhpc31zdG9wKCl7cmV0dXJuIExjLnN0b3AodGhpcyksdGhpc31yZXNpemUoZSx0KXtMYy5ydW5uaW5nKHRoaXMpP3RoaXMuX3Jlc2l6ZUJlZm9yZURyYXc9e3dpZHRoOmUsaGVpZ2h0OnR9OnRoaXMuX3Jlc2l6ZShlLHQpfV9yZXNpemUoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMscj10aGlzLmNhbnZhcyxpPW4ubWFpbnRhaW5Bc3BlY3RSYXRpbyYmdGhpcy5hc3BlY3RSYXRpbyxhPXRoaXMucGxhdGZvcm0uZ2V0TWF4aW11bVNpemUocixlLHQsaSksbz1uLmRldmljZVBpeGVsUmF0aW98fHRoaXMucGxhdGZvcm0uZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLHM9dGhpcy53aWR0aD9gcmVzaXplYDpgYXR0YWNoYDt0aGlzLndpZHRoPWEud2lkdGgsdGhpcy5oZWlnaHQ9YS5oZWlnaHQsdGhpcy5fYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxFYyh0aGlzLG8sITApJiYodGhpcy5ub3RpZnlQbHVnaW5zKGByZXNpemVgLHtzaXplOmF9KSxKKG4ub25SZXNpemUsW3RoaXMsYV0sdGhpcyksdGhpcy5hdHRhY2hlZCYmdGhpcy5fZG9SZXNpemUocykmJnRoaXMucmVuZGVyKCkpfWVuc3VyZVNjYWxlc0hhdmVJRHMoKXtZKHRoaXMub3B0aW9ucy5zY2FsZXN8fHt9LChlLHQpPT57ZS5pZD10fSl9YnVpbGRPclVwZGF0ZVNjYWxlcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PWUuc2NhbGVzLG49dGhpcy5zY2FsZXMscj1PYmplY3Qua2V5cyhuKS5yZWR1Y2UoKGUsdCk9PihlW3RdPSExLGUpLHt9KSxpPVtdO3QmJihpPWkuY29uY2F0KE9iamVjdC5rZXlzKHQpLm1hcChlPT57bGV0IG49dFtlXSxyPWFkKGUsbiksaT1yPT09YHJgLGE9cj09PWB4YDtyZXR1cm57b3B0aW9uczpuLGRwb3NpdGlvbjppP2BjaGFydEFyZWFgOmE/YGJvdHRvbWA6YGxlZnRgLGR0eXBlOmk/YHJhZGlhbExpbmVhcmA6YT9gY2F0ZWdvcnlgOmBsaW5lYXJgfX0pKSksWShpLHQ9PntsZXQgaT10Lm9wdGlvbnMsYT1pLmlkLG89YWQoYSxpKSxzPXEoaS50eXBlLHQuZHR5cGUpOyhpLnBvc2l0aW9uPT09dm9pZCAwfHxTZChpLnBvc2l0aW9uLG8pIT09U2QodC5kcG9zaXRpb24pKSYmKGkucG9zaXRpb249dC5kcG9zaXRpb24pLHJbYV09ITA7bGV0IGM9bnVsbDthIGluIG4mJm5bYV0udHlwZT09PXM/Yz1uW2FdOihjPW5ldyhKdS5nZXRTY2FsZShzKSkoe2lkOmEsdHlwZTpzLGN0eDp0aGlzLmN0eCxjaGFydDp0aGlzfSksbltjLmlkXT1jKSxjLmluaXQoaSxlKX0pLFkociwoZSx0KT0+e2V8fGRlbGV0ZSBuW3RdfSksWShuLGU9PnskbC5jb25maWd1cmUodGhpcyxlLGUub3B0aW9ucyksJGwuYWRkQm94KHRoaXMsZSl9KX1fdXBkYXRlTWV0YXNldHMoKXtsZXQgZT10aGlzLl9tZXRhc2V0cyx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj1lLmxlbmd0aDtpZihlLnNvcnQoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCksbj50KXtmb3IobGV0IGU9dDtlPG47KytlKXRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShlKTtlLnNwbGljZSh0LG4tdCl9dGhpcy5fc29ydGVkTWV0YXNldHM9ZS5zbGljZSgwKS5zb3J0KENkKGBvcmRlcmAsYGluZGV4YCkpfV9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpe2xldHtfbWV0YXNldHM6ZSxkYXRhOntkYXRhc2V0czp0fX09dGhpcztlLmxlbmd0aD50Lmxlbmd0aCYmZGVsZXRlIHRoaXMuX3N0YWNrcyxlLmZvckVhY2goKGUsbik9Pnt0LmZpbHRlcih0PT50PT09ZS5fZGF0YXNldCkubGVuZ3RoPT09MCYmdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKG4pfSl9YnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCl7bGV0IGU9W10sdD10aGlzLmRhdGEuZGF0YXNldHMsbixyO2Zvcih0aGlzLl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpLG49MCxyPXQubGVuZ3RoO248cjtuKyspe2xldCByPXRbbl0saT10aGlzLmdldERhdGFzZXRNZXRhKG4pLGE9ci50eXBlfHx0aGlzLmNvbmZpZy50eXBlO2lmKGkudHlwZSYmaS50eXBlIT09YSYmKHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShuKSxpPXRoaXMuZ2V0RGF0YXNldE1ldGEobikpLGkudHlwZT1hLGkuaW5kZXhBeGlzPXIuaW5kZXhBeGlzfHxlZChhLHRoaXMub3B0aW9ucyksaS5vcmRlcj1yLm9yZGVyfHwwLGkuaW5kZXg9bixpLmxhYmVsPWBgK3IubGFiZWwsaS52aXNpYmxlPXRoaXMuaXNEYXRhc2V0VmlzaWJsZShuKSxpLmNvbnRyb2xsZXIpaS5jb250cm9sbGVyLnVwZGF0ZUluZGV4KG4pLGkuY29udHJvbGxlci5saW5rU2NhbGVzKCk7ZWxzZXtsZXQgdD1KdS5nZXRDb250cm9sbGVyKGEpLHtkYXRhc2V0RWxlbWVudFR5cGU6cixkYXRhRWxlbWVudFR5cGU6b309Wi5kYXRhc2V0c1thXTtPYmplY3QuYXNzaWduKHQse2RhdGFFbGVtZW50VHlwZTpKdS5nZXRFbGVtZW50KG8pLGRhdGFzZXRFbGVtZW50VHlwZTpyJiZKdS5nZXRFbGVtZW50KHIpfSksaS5jb250cm9sbGVyPW5ldyB0KHRoaXMsbiksZS5wdXNoKGkuY29udHJvbGxlcil9fXJldHVybiB0aGlzLl91cGRhdGVNZXRhc2V0cygpLGV9X3Jlc2V0RWxlbWVudHMoKXtZKHRoaXMuZGF0YS5kYXRhc2V0cywoZSx0KT0+e3RoaXMuZ2V0RGF0YXNldE1ldGEodCkuY29udHJvbGxlci5yZXNldCgpfSx0aGlzKX1yZXNldCgpe3RoaXMuX3Jlc2V0RWxlbWVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2V0YCl9dXBkYXRlKGUpe2xldCB0PXRoaXMuY29uZmlnO3QudXBkYXRlKCk7bGV0IG49dGhpcy5fb3B0aW9ucz10LmNyZWF0ZVJlc29sdmVyKHQuY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9IW4uYW5pbWF0aW9uO2lmKHRoaXMuX3VwZGF0ZVNjYWxlcygpLHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpLHRoaXMuX3VwZGF0ZUhpZGRlbkluZGljZXMoKSx0aGlzLl9wbHVnaW5zLmludmFsaWRhdGUoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVVwZGF0ZWAse21vZGU6ZSxjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IGk9dGhpcy5idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUVsZW1lbnRzVXBkYXRlYCk7bGV0IGE9MDtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0O2UrKyl7bGV0e2NvbnRyb2xsZXI6dH09dGhpcy5nZXREYXRhc2V0TWV0YShlKSxuPSFyJiZpLmluZGV4T2YodCk9PT0tMTt0LmJ1aWxkT3JVcGRhdGVFbGVtZW50cyhuKSxhPU1hdGgubWF4KCt0LmdldE1heE92ZXJmbG93KCksYSl9YT10aGlzLl9taW5QYWRkaW5nPW4ubGF5b3V0LmF1dG9QYWRkaW5nP2E6MCx0aGlzLl91cGRhdGVMYXlvdXQoYSkscnx8WShpLGU9PntlLnJlc2V0KCl9KSx0aGlzLl91cGRhdGVEYXRhc2V0cyhlKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyVXBkYXRlYCx7bW9kZTplfSksdGhpcy5fbGF5ZXJzLnNvcnQoQ2QoYHpgLGBfaWR4YCkpO2xldHtfYWN0aXZlOm8sX2xhc3RFdmVudDpzfT10aGlzO3M/dGhpcy5fZXZlbnRIYW5kbGVyKHMsITApOm8ubGVuZ3RoJiZ0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhvLG8sITApLHRoaXMucmVuZGVyKCl9X3VwZGF0ZVNjYWxlcygpe1kodGhpcy5zY2FsZXMsZT0+eyRsLnJlbW92ZUJveCh0aGlzLGUpfSksdGhpcy5lbnN1cmVTY2FsZXNIYXZlSURzKCksdGhpcy5idWlsZE9yVXBkYXRlU2NhbGVzKCl9X2NoZWNrRXZlbnRCaW5kaW5ncygpe2xldCBlPXRoaXMub3B0aW9uczsoIW1vKG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKSksbmV3IFNldChlLmV2ZW50cykpfHwhIXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMhPT1lLnJlc3BvbnNpdmUpJiYodGhpcy51bmJpbmRFdmVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSl9X3VwZGF0ZUhpZGRlbkluZGljZXMoKXtsZXR7X2hpZGRlbkluZGljZXM6ZX09dGhpcyx0PXRoaXMuX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpfHxbXTtmb3IobGV0e21ldGhvZDpuLHN0YXJ0OnIsY291bnQ6aX1vZiB0KWtkKGUscixuPT09YF9yZW1vdmVFbGVtZW50c2A/LWk6aSl9X2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpe2xldCBlPXRoaXMuX2RhdGFDaGFuZ2VzO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuO3RoaXMuX2RhdGFDaGFuZ2VzPVtdO2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj10PT5uZXcgU2V0KGUuZmlsdGVyKGU9PmVbMF09PT10KS5tYXAoKGUsdCk9PnQrYCxgK2Uuc3BsaWNlKDEpLmpvaW4oYCxgKSkpLHI9bigwKTtmb3IobGV0IGU9MTtlPHQ7ZSsrKWlmKCFtbyhyLG4oZSkpKXJldHVybjtyZXR1cm4gQXJyYXkuZnJvbShyKS5tYXAoZT0+ZS5zcGxpdChgLGApKS5tYXAoZT0+KHttZXRob2Q6ZVsxXSxzdGFydDorZVsyXSxjb3VudDorZVszXX0pKX1fdXBkYXRlTGF5b3V0KGUpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlTGF5b3V0YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuOyRsLnVwZGF0ZSh0aGlzLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZSk7bGV0IHQ9dGhpcy5jaGFydEFyZWEsbj10LndpZHRoPD0wfHx0LmhlaWdodDw9MDt0aGlzLl9sYXllcnM9W10sWSh0aGlzLmJveGVzLGU9PntuJiZlLnBvc2l0aW9uPT09YGNoYXJ0QXJlYWB8fChlLmNvbmZpZ3VyZSYmZS5jb25maWd1cmUoKSx0aGlzLl9sYXllcnMucHVzaCguLi5lLl9sYXllcnMoKSkpfSx0aGlzKSx0aGlzLl9sYXllcnMuZm9yRWFjaCgoZSx0KT0+e2UuX2lkeD10fSksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckxheW91dGApfV91cGRhdGVEYXRhc2V0cyhlKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzVXBkYXRlYCx7bW9kZTplLGNhbmNlbGFibGU6ITB9KSE9PSExKXtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIuY29uZmlndXJlKCk7Zm9yKGxldCB0PTAsbj10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8bjsrK3QpdGhpcy5fdXBkYXRlRGF0YXNldCh0LHBvKGUpP2Uoe2RhdGFzZXRJbmRleDp0fSk6ZSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRzVXBkYXRlYCx7bW9kZTplfSl9fV91cGRhdGVEYXRhc2V0KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKSxyPXttZXRhOm4saW5kZXg6ZSxtb2RlOnQsY2FuY2VsYWJsZTohMH07dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0VXBkYXRlYCxyKSE9PSExJiYobi5jb250cm9sbGVyLl91cGRhdGUodCksci5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0VXBkYXRlYCxyKSl9cmVuZGVyKCl7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVSZW5kZXJgLHtjYW5jZWxhYmxlOiEwfSkhPT0hMSYmKExjLmhhcyh0aGlzKT90aGlzLmF0dGFjaGVkJiYhTGMucnVubmluZyh0aGlzKSYmTGMuc3RhcnQodGhpcyk6KHRoaXMuZHJhdygpLHdkKHtjaGFydDp0aGlzfSkpKX1kcmF3KCl7bGV0IGU7aWYodGhpcy5fcmVzaXplQmVmb3JlRHJhdyl7bGV0e3dpZHRoOmUsaGVpZ2h0OnR9PXRoaXMuX3Jlc2l6ZUJlZm9yZURyYXc7dGhpcy5fcmVzaXplQmVmb3JlRHJhdz1udWxsLHRoaXMuX3Jlc2l6ZShlLHQpfWlmKHRoaXMuY2xlYXIoKSx0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MHx8dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEcmF3YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCB0PXRoaXMuX2xheWVycztmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uejw9MDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTtmb3IodGhpcy5fZHJhd0RhdGFzZXRzKCk7ZTx0Lmxlbmd0aDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRHJhd2ApfV9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZSl7bGV0IHQ9dGhpcy5fc29ydGVkTWV0YXNldHMsbj1bXSxyLGk7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3Ipe2xldCBpPXRbcl07KCFlfHxpLnZpc2libGUpJiZuLnB1c2goaSl9cmV0dXJuIG59Z2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpe3JldHVybiB0aGlzLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoITApfV9kcmF3RGF0YXNldHMoKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzRHJhd2Ase2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgZT10aGlzLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLl9kcmF3RGF0YXNldChlW3RdKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldHNEcmF3YCl9X2RyYXdEYXRhc2V0KGUpe2xldCB0PXRoaXMuY3R4LG49e21ldGE6ZSxpbmRleDplLmluZGV4LGNhbmNlbGFibGU6ITB9LHI9SWModGhpcyxlKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXREcmF3YCxuKSE9PSExJiYociYmanModCxyKSxlLmNvbnRyb2xsZXIuZHJhdygpLHImJk1zKHQpLG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldERyYXdgLG4pKX1pc1BvaW50SW5BcmVhKGUpe3JldHVybiBBcyhlLHRoaXMuY2hhcnRBcmVhLHRoaXMuX21pblBhZGRpbmcpfWdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSx0LG4scil7bGV0IGk9SWwubW9kZXNbdF07cmV0dXJuIHR5cGVvZiBpPT1gZnVuY3Rpb25gP2kodGhpcyxlLG4scik6W119Z2V0RGF0YXNldE1ldGEoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdLG49dGhpcy5fbWV0YXNldHMscj1uLmZpbHRlcihlPT5lJiZlLl9kYXRhc2V0PT09dCkucG9wKCk7cmV0dXJuIHJ8fChyPXt0eXBlOm51bGwsZGF0YTpbXSxkYXRhc2V0Om51bGwsY29udHJvbGxlcjpudWxsLGhpZGRlbjpudWxsLHhBeGlzSUQ6bnVsbCx5QXhpc0lEOm51bGwsb3JkZXI6dCYmdC5vcmRlcnx8MCxpbmRleDplLF9kYXRhc2V0OnQsX3BhcnNlZDpbXSxfc29ydGVkOiExfSxuLnB1c2gocikpLHJ9Z2V0Q29udGV4dCgpe3JldHVybiB0aGlzLiRjb250ZXh0fHw9cXMobnVsbCx7Y2hhcnQ6dGhpcyx0eXBlOmBjaGFydGB9KX1nZXRWaXNpYmxlRGF0YXNldENvdW50KCl7cmV0dXJuIHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmxlbmd0aH1pc0RhdGFzZXRWaXNpYmxlKGUpe2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0c1tlXTtpZighdClyZXR1cm4hMTtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO3JldHVybiB0eXBlb2Ygbi5oaWRkZW49PWBib29sZWFuYD8hbi5oaWRkZW46IXQuaGlkZGVufXNldERhdGFzZXRWaXNpYmlsaXR5KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKTtuLmhpZGRlbj0hdH10b2dnbGVEYXRhVmlzaWJpbGl0eShlKXt0aGlzLl9oaWRkZW5JbmRpY2VzW2VdPSF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfWdldERhdGFWaXNpYmlsaXR5KGUpe3JldHVybiF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfV91cGRhdGVWaXNpYmlsaXR5KGUsdCxuKXtsZXQgcj1uP2BzaG93YDpgaGlkZWAsaT10aGlzLmdldERhdGFzZXRNZXRhKGUpLGE9aS5jb250cm9sbGVyLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAscik7Zm8odCk/KGkuZGF0YVt0XS5oaWRkZW49IW4sdGhpcy51cGRhdGUoKSk6KHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZSxuKSxhLnVwZGF0ZShpLHt2aXNpYmxlOm59KSx0aGlzLnVwZGF0ZSh0PT50LmRhdGFzZXRJbmRleD09PWU/cjp2b2lkIDApKX1oaWRlKGUsdCl7dGhpcy5fdXBkYXRlVmlzaWJpbGl0eShlLHQsITEpfXNob3coZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMCl9X2Rlc3Ryb3lEYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLl9tZXRhc2V0c1tlXTt0JiZ0LmNvbnRyb2xsZXImJnQuY29udHJvbGxlci5fZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tlXX1fc3RvcCgpe2xldCBlLHQ7Zm9yKHRoaXMuc3RvcCgpLExjLnJlbW92ZSh0aGlzKSxlPTAsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO2U8dDsrK2UpdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGUpfWRlc3Ryb3koKXt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURlc3Ryb3lgKTtsZXR7Y2FudmFzOmUsY3R4OnR9PXRoaXM7dGhpcy5fc3RvcCgpLHRoaXMuY29uZmlnLmNsZWFyQ2FjaGUoKSxlJiYodGhpcy51bmJpbmRFdmVudHMoKSxEcyhlLHQpLHRoaXMucGxhdGZvcm0ucmVsZWFzZUNvbnRleHQodCksdGhpcy5jYW52YXM9bnVsbCx0aGlzLmN0eD1udWxsKSxkZWxldGUgRGRbdGhpcy5pZF0sdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRlc3Ryb3lgKX10b0Jhc2U2NEltYWdlKC4uLmUpe3JldHVybiB0aGlzLmNhbnZhcy50b0RhdGFVUkwoLi4uZSl9YmluZEV2ZW50cygpe3RoaXMuYmluZFVzZXJFdmVudHMoKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLmJpbmRSZXNwb25zaXZlRXZlbnRzKCk6dGhpcy5hdHRhY2hlZD0hMH1iaW5kVXNlckV2ZW50cygpe2xldCBlPXRoaXMuX2xpc3RlbmVycyx0PXRoaXMucGxhdGZvcm0sbj0obixyKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZVtuXT1yfSxyPShlLHQsbik9PntlLm9mZnNldFg9dCxlLm9mZnNldFk9bix0aGlzLl9ldmVudEhhbmRsZXIoZSl9O1kodGhpcy5vcHRpb25zLmV2ZW50cyxlPT5uKGUscikpfWJpbmRSZXNwb25zaXZlRXZlbnRzKCl7dGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVyc3x8PXt9O2xldCBlPXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsdD10aGlzLnBsYXRmb3JtLG49KG4scik9Pnt0LmFkZEV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGVbbl09cn0scj0obixyKT0+e2Vbbl0mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGRlbGV0ZSBlW25dKX0saT0oZSx0KT0+e3RoaXMuY2FudmFzJiZ0aGlzLnJlc2l6ZShlLHQpfSxhLG89KCk9PntyKGBhdHRhY2hgLG8pLHRoaXMuYXR0YWNoZWQ9ITAsdGhpcy5yZXNpemUoKSxuKGByZXNpemVgLGkpLG4oYGRldGFjaGAsYSl9O2E9KCk9Pnt0aGlzLmF0dGFjaGVkPSExLHIoYHJlc2l6ZWAsaSksdGhpcy5fc3RvcCgpLHRoaXMuX3Jlc2l6ZSgwLDApLG4oYGF0dGFjaGAsbyl9LHQuaXNBdHRhY2hlZCh0aGlzLmNhbnZhcyk/bygpOmEoKX11bmJpbmRFdmVudHMoKXtZKHRoaXMuX2xpc3RlbmVycywoZSx0KT0+e3RoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLHQsZSl9KSx0aGlzLl9saXN0ZW5lcnM9e30sWSh0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzLChlLHQpPT57dGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsdCxlKX0pLHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwfXVwZGF0ZUhvdmVyU3R5bGUoZSx0LG4pe2xldCByPW4/YHNldGA6YHJlbW92ZWAsaSxhLG8scztmb3IodD09PWBkYXRhc2V0YCYmKGk9dGhpcy5nZXREYXRhc2V0TWV0YShlWzBdLmRhdGFzZXRJbmRleCksaS5jb250cm9sbGVyW2BfYCtyK2BEYXRhc2V0SG92ZXJTdHlsZWBdKCkpLG89MCxzPWUubGVuZ3RoO288czsrK28pe2E9ZVtvXTtsZXQgdD1hJiZ0aGlzLmdldERhdGFzZXRNZXRhKGEuZGF0YXNldEluZGV4KS5jb250cm9sbGVyO3QmJnRbcitgSG92ZXJTdHlsZWBdKGEuZWxlbWVudCxhLmRhdGFzZXRJbmRleCxhLmluZGV4KX19Z2V0QWN0aXZlRWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfHxbXX1zZXRBY3RpdmVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9hY3RpdmV8fFtdLG49ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBObyBkYXRhc2V0IGZvdW5kIGF0IGluZGV4IGArZSk7cmV0dXJue2RhdGFzZXRJbmRleDplLGVsZW1lbnQ6bi5kYXRhW3RdLGluZGV4OnR9fSk7JGEobix0KXx8KHRoaXMuX2FjdGl2ZT1uLHRoaXMuX2xhc3RFdmVudD1udWxsLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG4sdCkpfW5vdGlmeVBsdWdpbnMoZSx0LG4pe3JldHVybiB0aGlzLl9wbHVnaW5zLm5vdGlmeSh0aGlzLGUsdCxuKX1pc1BsdWdpbkVuYWJsZWQoZSl7cmV0dXJuIHRoaXMuX3BsdWdpbnMuX2NhY2hlLmZpbHRlcih0PT50LnBsdWdpbi5pZD09PWUpLmxlbmd0aD09PTF9X3VwZGF0ZUhvdmVyU3R5bGVzKGUsdCxuKXtsZXQgcj10aGlzLm9wdGlvbnMuaG92ZXIsaT0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCkpLGE9aSh0LGUpLG89bj9lOmkoZSx0KTthLmxlbmd0aCYmdGhpcy51cGRhdGVIb3ZlclN0eWxlKGEsci5tb2RlLCExKSxvLmxlbmd0aCYmci5tb2RlJiZ0aGlzLnVwZGF0ZUhvdmVyU3R5bGUobyxyLm1vZGUsITApfV9ldmVudEhhbmRsZXIoZSx0KXtsZXQgbj17ZXZlbnQ6ZSxyZXBsYXk6dCxjYW5jZWxhYmxlOiEwLGluQ2hhcnRBcmVhOnRoaXMuaXNQb2ludEluQXJlYShlKX0scj10PT4odC5vcHRpb25zLmV2ZW50c3x8dGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVFdmVudGAsbixyKT09PSExKXJldHVybjtsZXQgaT10aGlzLl9oYW5kbGVFdmVudChlLHQsbi5pbkNoYXJ0QXJlYSk7cmV0dXJuIG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRXZlbnRgLG4sciksKGl8fG4uY2hhbmdlZCkmJnRoaXMucmVuZGVyKCksdGhpc31faGFuZGxlRXZlbnQoZSx0LG4pe2xldHtfYWN0aXZlOnI9W10sb3B0aW9uczppfT10aGlzLGE9dCxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUscixuLGEpLHM9aG8oZSksYz1BZChlLHRoaXMuX2xhc3RFdmVudCxuLHMpO24mJih0aGlzLl9sYXN0RXZlbnQ9bnVsbCxKKGkub25Ib3ZlcixbZSxvLHRoaXNdLHRoaXMpLHMmJkooaS5vbkNsaWNrLFtlLG8sdGhpc10sdGhpcykpO2xldCBsPSEkYShvLHIpO3JldHVybihsfHx0KSYmKHRoaXMuX2FjdGl2ZT1vLHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKG8scix0KSksdGhpcy5fbGFzdEV2ZW50PWMsbH1fZ2V0QWN0aXZlRWxlbWVudHMoZSx0LG4scil7aWYoZS50eXBlPT09YG1vdXNlb3V0YClyZXR1cm5bXTtpZighbilyZXR1cm4gdDtsZXQgaT10aGlzLm9wdGlvbnMuaG92ZXI7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLGkubW9kZSxpLHIpfX07ZnVuY3Rpb24gTWQoKXtyZXR1cm4gWShqZC5pbnN0YW5jZXMsZT0+ZS5fcGx1Z2lucy5pbnZhbGlkYXRlKCkpfWZ1bmN0aW9uIE5kKGUsdCl7bGV0e3g6bix5OnIsYmFzZTppLHdpZHRoOmEsaGVpZ2h0Om99PWUuZ2V0UHJvcHMoW2B4YCxgeWAsYGJhc2VgLGB3aWR0aGAsYGhlaWdodGBdLHQpLHMsYyxsLHUsZDtyZXR1cm4gZS5ob3Jpem9udGFsPyhkPW8vMixzPU1hdGgubWluKG4saSksYz1NYXRoLm1heChuLGkpLGw9ci1kLHU9citkKTooZD1hLzIscz1uLWQsYz1uK2QsbD1NYXRoLm1pbihyLGkpLHU9TWF0aC5tYXgocixpKSkse2xlZnQ6cyx0b3A6bCxyaWdodDpjLGJvdHRvbTp1fX1mdW5jdGlvbiBQZChlLHQsbixyKXtyZXR1cm4gZT8wOlJvKHQsbixyKX1mdW5jdGlvbiBGZChlLHQsbil7bGV0IHI9ZS5vcHRpb25zLmJvcmRlcldpZHRoLGk9ZS5ib3JkZXJTa2lwcGVkLGE9VXMocik7cmV0dXJue3Q6UGQoaS50b3AsYS50b3AsMCxuKSxyOlBkKGkucmlnaHQsYS5yaWdodCwwLHQpLGI6UGQoaS5ib3R0b20sYS5ib3R0b20sMCxuKSxsOlBkKGkubGVmdCxhLmxlZnQsMCx0KX19ZnVuY3Rpb24gSWQoZSx0LG4pe2xldHtlbmFibGVCb3JkZXJSYWRpdXM6cn09ZS5nZXRQcm9wcyhbYGVuYWJsZUJvcmRlclJhZGl1c2BdKSxpPWUub3B0aW9ucy5ib3JkZXJSYWRpdXMsYT1XcyhpKSxvPU1hdGgubWluKHQsbikscz1lLmJvcmRlclNraXBwZWQsYz1yfHxHKGkpO3JldHVybnt0b3BMZWZ0OlBkKCFjfHxzLnRvcHx8cy5sZWZ0LGEudG9wTGVmdCwwLG8pLHRvcFJpZ2h0OlBkKCFjfHxzLnRvcHx8cy5yaWdodCxhLnRvcFJpZ2h0LDAsbyksYm90dG9tTGVmdDpQZCghY3x8cy5ib3R0b218fHMubGVmdCxhLmJvdHRvbUxlZnQsMCxvKSxib3R0b21SaWdodDpQZCghY3x8cy5ib3R0b218fHMucmlnaHQsYS5ib3R0b21SaWdodCwwLG8pfX1mdW5jdGlvbiBMZChlKXtsZXQgdD1OZChlKSxuPXQucmlnaHQtdC5sZWZ0LHI9dC5ib3R0b20tdC50b3AsaT1GZChlLG4vMixyLzIpLGE9SWQoZSxuLzIsci8yKTtyZXR1cm57b3V0ZXI6e3g6dC5sZWZ0LHk6dC50b3AsdzpuLGg6cixyYWRpdXM6YX0saW5uZXI6e3g6dC5sZWZ0K2kubCx5OnQudG9wK2kudCx3Om4taS5sLWkucixoOnItaS50LWkuYixyYWRpdXM6e3RvcExlZnQ6TWF0aC5tYXgoMCxhLnRvcExlZnQtTWF0aC5tYXgoaS50LGkubCkpLHRvcFJpZ2h0Ok1hdGgubWF4KDAsYS50b3BSaWdodC1NYXRoLm1heChpLnQsaS5yKSksYm90dG9tTGVmdDpNYXRoLm1heCgwLGEuYm90dG9tTGVmdC1NYXRoLm1heChpLmIsaS5sKSksYm90dG9tUmlnaHQ6TWF0aC5tYXgoMCxhLmJvdHRvbVJpZ2h0LU1hdGgubWF4KGkuYixpLnIpKX19fX1mdW5jdGlvbiBSZChlLHQsbixyKXtsZXQgaT10PT09bnVsbCxhPW49PT1udWxsLG89ZSYmIShpJiZhKSYmTmQoZSxyKTtyZXR1cm4gbyYmKGl8fEJvKHQsby5sZWZ0LG8ucmlnaHQpKSYmKGF8fEJvKG4sby50b3Asby5ib3R0b20pKX1mdW5jdGlvbiB6ZChlKXtyZXR1cm4gZS50b3BMZWZ0fHxlLnRvcFJpZ2h0fHxlLmJvdHRvbUxlZnR8fGUuYm90dG9tUmlnaHR9ZnVuY3Rpb24gQmQoZSx0KXtlLnJlY3QodC54LHQueSx0LncsdC5oKX1mdW5jdGlvbiBWZChlLHQsbj17fSl7bGV0IHI9ZS54PT09bi54PzA6LXQsaT1lLnk9PT1uLnk/MDotdCxhPShlLngrZS53PT09bi54K24udz8wOnQpLXIsbz0oZS55K2UuaD09PW4ueStuLmg/MDp0KS1pO3JldHVybnt4OmUueCtyLHk6ZS55K2ksdzplLncrYSxoOmUuaCtvLHJhZGl1czplLnJhZGl1c319dmFyIEhkPWNsYXNzIGV4dGVuZHMgQ3V7c3RhdGljIGlkPWBiYXJgO3N0YXRpYyBkZWZhdWx0cz17Ym9yZGVyU2tpcHBlZDpgc3RhcnRgLGJvcmRlcldpZHRoOjAsYm9yZGVyUmFkaXVzOjAsaW5mbGF0ZUFtb3VudDpgYXV0b2AscG9pbnRTdHlsZTp2b2lkIDB9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXtiYWNrZ3JvdW5kQ29sb3I6YGJhY2tncm91bmRDb2xvcmAsYm9yZGVyQ29sb3I6YGJvcmRlckNvbG9yYH07Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuaG9yaXpvbnRhbD12b2lkIDAsdGhpcy5iYXNlPXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5pbmZsYXRlQW1vdW50PXZvaWQgMCxlJiZPYmplY3QuYXNzaWduKHRoaXMsZSl9ZHJhdyhlKXtsZXR7aW5mbGF0ZUFtb3VudDp0LG9wdGlvbnM6e2JvcmRlckNvbG9yOm4sYmFja2dyb3VuZENvbG9yOnJ9fT10aGlzLHtpbm5lcjppLG91dGVyOmF9PUxkKHRoaXMpLG89emQoYS5yYWRpdXMpP0xzOkJkO2Uuc2F2ZSgpLChhLnchPT1pLnd8fGEuaCE9PWkuaCkmJihlLmJlZ2luUGF0aCgpLG8oZSxWZChhLHQsaSkpLGUuY2xpcCgpLG8oZSxWZChpLC10LGEpKSxlLmZpbGxTdHlsZT1uLGUuZmlsbChgZXZlbm9kZGApKSxlLmJlZ2luUGF0aCgpLG8oZSxWZChpLHQpKSxlLmZpbGxTdHlsZT1yLGUuZmlsbCgpLGUucmVzdG9yZSgpfWluUmFuZ2UoZSx0LG4pe3JldHVybiBSZCh0aGlzLGUsdCxuKX1pblhSYW5nZShlLHQpe3JldHVybiBSZCh0aGlzLGUsbnVsbCx0KX1pbllSYW5nZShlLHQpe3JldHVybiBSZCh0aGlzLG51bGwsZSx0KX1nZXRDZW50ZXJQb2ludChlKXtsZXR7eDp0LHk6bixiYXNlOnIsaG9yaXpvbnRhbDppfT10aGlzLmdldFByb3BzKFtgeGAsYHlgLGBiYXNlYCxgaG9yaXpvbnRhbGBdLGUpO3JldHVybnt4Omk/KHQrcikvMjp0LHk6aT9uOihuK3IpLzJ9fWdldFJhbmdlKGUpe3JldHVybiBlPT09YHhgP3RoaXMud2lkdGgvMjp0aGlzLmhlaWdodC8yfX0sVWQ9KGUsdCk9PntsZXR7Ym94SGVpZ2h0Om49dCxib3hXaWR0aDpyPXR9PWU7cmV0dXJuIGUudXNlUG9pbnRTdHlsZSYmKG49TWF0aC5taW4obix0KSxyPWUucG9pbnRTdHlsZVdpZHRofHxNYXRoLm1pbihyLHQpKSx7Ym94V2lkdGg6cixib3hIZWlnaHQ6bixpdGVtSGVpZ2h0Ok1hdGgubWF4KHQsbil9fSxXZD0oZSx0KT0+ZSE9PW51bGwmJnQhPT1udWxsJiZlLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCxHZD1jbGFzcyBleHRlbmRzIEN1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fYWRkZWQ9ITEsdGhpcy5sZWdlbmRIaXRCb3hlcz1bXSx0aGlzLl9ob3ZlcmVkSXRlbT1udWxsLHRoaXMuZG91Z2hudXRNb2RlPSExLHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLm9wdGlvbnM9ZS5vcHRpb25zLHRoaXMuY3R4PWUuY3R4LHRoaXMubGVnZW5kSXRlbXM9dm9pZCAwLHRoaXMuY29sdW1uU2l6ZXM9dm9pZCAwLHRoaXMubGluZVdpZHRocz12b2lkIDAsdGhpcy5tYXhIZWlnaHQ9dm9pZCAwLHRoaXMubWF4V2lkdGg9dm9pZCAwLHRoaXMudG9wPXZvaWQgMCx0aGlzLmJvdHRvbT12b2lkIDAsdGhpcy5sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5fbWFyZ2lucz12b2lkIDAsdGhpcy5wb3NpdGlvbj12b2lkIDAsdGhpcy53ZWlnaHQ9dm9pZCAwLHRoaXMuZnVsbFNpemU9dm9pZCAwfXVwZGF0ZShlLHQsbil7dGhpcy5tYXhXaWR0aD1lLHRoaXMubWF4SGVpZ2h0PXQsdGhpcy5fbWFyZ2lucz1uLHRoaXMuc2V0RGltZW5zaW9ucygpLHRoaXMuYnVpbGRMYWJlbHMoKSx0aGlzLmZpdCgpfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PXRoaXMuX21hcmdpbnMubGVmdCx0aGlzLnJpZ2h0PXRoaXMud2lkdGgpOih0aGlzLmhlaWdodD10aGlzLm1heEhlaWdodCx0aGlzLnRvcD10aGlzLl9tYXJnaW5zLnRvcCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCl9YnVpbGRMYWJlbHMoKXtsZXQgZT10aGlzLm9wdGlvbnMubGFiZWxzfHx7fSx0PUooZS5nZW5lcmF0ZUxhYmVscyxbdGhpcy5jaGFydF0sdGhpcyl8fFtdO2UuZmlsdGVyJiYodD10LmZpbHRlcih0PT5lLmZpbHRlcih0LHRoaXMuY2hhcnQuZGF0YSkpKSxlLnNvcnQmJih0PXQuc29ydCgodCxuKT0+ZS5zb3J0KHQsbix0aGlzLmNoYXJ0LmRhdGEpKSksdGhpcy5vcHRpb25zLnJldmVyc2UmJnQucmV2ZXJzZSgpLHRoaXMubGVnZW5kSXRlbXM9dH1maXQoKXtsZXR7b3B0aW9uczplLGN0eDp0fT10aGlzO2lmKCFlLmRpc3BsYXkpe3RoaXMud2lkdGg9dGhpcy5oZWlnaHQ9MDtyZXR1cm59bGV0IG49ZS5sYWJlbHMscj0kKG4uZm9udCksaT1yLnNpemUsYT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7Ym94V2lkdGg6byxpdGVtSGVpZ2h0OnN9PVVkKG4saSksYyxsO3QuZm9udD1yLnN0cmluZyx0aGlzLmlzSG9yaXpvbnRhbCgpPyhjPXRoaXMubWF4V2lkdGgsbD10aGlzLl9maXRSb3dzKGEsaSxvLHMpKzEwKToobD10aGlzLm1heEhlaWdodCxjPXRoaXMuX2ZpdENvbHMoYSxyLG8scykrMTApLHRoaXMud2lkdGg9TWF0aC5taW4oYyxlLm1heFdpZHRofHx0aGlzLm1heFdpZHRoKSx0aGlzLmhlaWdodD1NYXRoLm1pbihsLGUubWF4SGVpZ2h0fHx0aGlzLm1heEhlaWdodCl9X2ZpdFJvd3MoZSx0LG4scil7bGV0e2N0eDppLG1heFdpZHRoOmEsb3B0aW9uczp7bGFiZWxzOntwYWRkaW5nOm99fX09dGhpcyxzPXRoaXMubGVnZW5kSGl0Qm94ZXM9W10sYz10aGlzLmxpbmVXaWR0aHM9WzBdLGw9citvLHU9ZTtpLnRleHRBbGlnbj1gbGVmdGAsaS50ZXh0QmFzZWxpbmU9YG1pZGRsZWA7bGV0IGQ9LTEsZj0tbDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLHApPT57bGV0IG09bit0LzIraS5tZWFzdXJlVGV4dChlLnRleHQpLndpZHRoOyhwPT09MHx8Y1tjLmxlbmd0aC0xXSttKzIqbz5hKSYmKHUrPWwsY1tjLmxlbmd0aC0ocD4wPzA6MSldPTAsZis9bCxkKyspLHNbcF09e2xlZnQ6MCx0b3A6Zixyb3c6ZCx3aWR0aDptLGhlaWdodDpyfSxjW2MubGVuZ3RoLTFdKz1tK299KSx1fV9maXRDb2xzKGUsdCxuLHIpe2xldHtjdHg6aSxtYXhIZWlnaHQ6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMuY29sdW1uU2l6ZXM9W10sbD1hLWUsdT1vLGQ9MCxmPTAscD0wLG09MDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLGEpPT57bGV0e2l0ZW1XaWR0aDpoLGl0ZW1IZWlnaHQ6Z309S2Qobix0LGksZSxyKTthPjAmJmYrZysyKm8+bCYmKHUrPWQrbyxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSxwKz1kK28sbSsrLGQ9Zj0wKSxzW2FdPXtsZWZ0OnAsdG9wOmYsY29sOm0sd2lkdGg6aCxoZWlnaHQ6Z30sZD1NYXRoLm1heChkLGgpLGYrPWcrb30pLHUrPWQsYy5wdXNoKHt3aWR0aDpkLGhlaWdodDpmfSksdX1hZGp1c3RIaXRCb3hlcygpe2lmKCF0aGlzLm9wdGlvbnMuZGlzcGxheSlyZXR1cm47bGV0IGU9dGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCkse2xlZ2VuZEhpdEJveGVzOnQsb3B0aW9uczp7YWxpZ246bixsYWJlbHM6e3BhZGRpbmc6cn0scnRsOml9fT10aGlzLGE9amMoaSx0aGlzLmxlZnQsdGhpcy53aWR0aCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7bGV0IGk9MCxvPSRvKG4sdGhpcy5sZWZ0K3IsdGhpcy5yaWdodC10aGlzLmxpbmVXaWR0aHNbaV0pO2ZvcihsZXQgcyBvZiB0KWkhPT1zLnJvdyYmKGk9cy5yb3csbz0kbyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKSkscy50b3ArPXRoaXMudG9wK2UrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChvKSxzLndpZHRoKSxvKz1zLndpZHRoK3J9ZWxzZXtsZXQgaT0wLG89JG8obix0aGlzLnRvcCtlK3IsdGhpcy5ib3R0b20tdGhpcy5jb2x1bW5TaXplc1tpXS5oZWlnaHQpO2ZvcihsZXQgcyBvZiB0KXMuY29sIT09aSYmKGk9cy5jb2wsbz0kbyhuLHRoaXMudG9wK2Urcix0aGlzLmJvdHRvbS10aGlzLmNvbHVtblNpemVzW2ldLmhlaWdodCkpLHMudG9wPW8scy5sZWZ0Kz10aGlzLmxlZnQrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChzLmxlZnQpLHMud2lkdGgpLG8rPXMuaGVpZ2h0K3J9fWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb249PT1gdG9wYHx8dGhpcy5vcHRpb25zLnBvc2l0aW9uPT09YGJvdHRvbWB9ZHJhdygpe2lmKHRoaXMub3B0aW9ucy5kaXNwbGF5KXtsZXQgZT10aGlzLmN0eDtqcyhlLHRoaXMpLHRoaXMuX2RyYXcoKSxNcyhlKX19X2RyYXcoKXtsZXR7b3B0aW9uczplLGNvbHVtblNpemVzOnQsbGluZVdpZHRoczpuLGN0eDpyfT10aGlzLHthbGlnbjppLGxhYmVsczphfT1lLG89Wi5jb2xvcixzPWpjKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxjPSQoYS5mb250KSx7cGFkZGluZzpsfT1hLHU9Yy5zaXplLGQ9dS8yLGY7dGhpcy5kcmF3VGl0bGUoKSxyLnRleHRBbGlnbj1zLnRleHRBbGlnbihgbGVmdGApLHIudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHIubGluZVdpZHRoPS41LHIuZm9udD1jLnN0cmluZztsZXR7Ym94V2lkdGg6cCxib3hIZWlnaHQ6bSxpdGVtSGVpZ2h0Omh9PVVkKGEsdSksZz1mdW5jdGlvbihlLHQsbil7aWYoaXNOYU4ocCl8fHA8PTB8fGlzTmFOKG0pfHxtPDApcmV0dXJuO3Iuc2F2ZSgpO2xldCBpPXEobi5saW5lV2lkdGgsMSk7aWYoci5maWxsU3R5bGU9cShuLmZpbGxTdHlsZSxvKSxyLmxpbmVDYXA9cShuLmxpbmVDYXAsYGJ1dHRgKSxyLmxpbmVEYXNoT2Zmc2V0PXEobi5saW5lRGFzaE9mZnNldCwwKSxyLmxpbmVKb2luPXEobi5saW5lSm9pbixgbWl0ZXJgKSxyLmxpbmVXaWR0aD1pLHIuc3Ryb2tlU3R5bGU9cShuLnN0cm9rZVN0eWxlLG8pLHIuc2V0TGluZURhc2gocShuLmxpbmVEYXNoLFtdKSksYS51c2VQb2ludFN0eWxlKXtsZXQgbz17cmFkaXVzOm0qTWF0aC5TUVJUMi8yLHBvaW50U3R5bGU6bi5wb2ludFN0eWxlLHJvdGF0aW9uOm4ucm90YXRpb24sYm9yZGVyV2lkdGg6aX0sYz1zLnhQbHVzKGUscC8yKSxsPXQrZDtrcyhyLG8sYyxsLGEucG9pbnRTdHlsZVdpZHRoJiZwKX1lbHNle2xldCBhPXQrTWF0aC5tYXgoKHUtbSkvMiwwKSxvPXMubGVmdEZvckx0cihlLHApLGM9V3Mobi5ib3JkZXJSYWRpdXMpO3IuYmVnaW5QYXRoKCksT2JqZWN0LnZhbHVlcyhjKS5zb21lKGU9PmUhPT0wKT9McyhyLHt4Om8seTphLHc6cCxoOm0scmFkaXVzOmN9KTpyLnJlY3QobyxhLHAsbSksci5maWxsKCksaSE9PTAmJnIuc3Ryb2tlKCl9ci5yZXN0b3JlKCl9LF89ZnVuY3Rpb24oZSx0LG4pe0lzKHIsbi50ZXh0LGUsdCtoLzIsYyx7c3RyaWtldGhyb3VnaDpuLmhpZGRlbix0ZXh0QWxpZ246cy50ZXh0QWxpZ24obi50ZXh0QWxpZ24pfSl9LHY9dGhpcy5pc0hvcml6b250YWwoKSx5PXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO2Y9dj97eDokbyhpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtblswXSkseTp0aGlzLnRvcCtsK3ksbGluZTowfTp7eDp0aGlzLmxlZnQrbCx5OiRvKGksdGhpcy50b3AreStsLHRoaXMuYm90dG9tLXRbMF0uaGVpZ2h0KSxsaW5lOjB9LE1jKHRoaXMuY3R4LGUudGV4dERpcmVjdGlvbik7bGV0IGI9aCtsO3RoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobyx1KT0+e3Iuc3Ryb2tlU3R5bGU9by5mb250Q29sb3Isci5maWxsU3R5bGU9by5mb250Q29sb3I7bGV0IG09ci5tZWFzdXJlVGV4dChvLnRleHQpLndpZHRoLGg9cy50ZXh0QWxpZ24oby50ZXh0QWxpZ258fD1hLnRleHRBbGlnbikseD1wK2QrbSxTPWYueCxDPWYueTtzLnNldFdpZHRoKHRoaXMud2lkdGgpLHY/dT4wJiZTK3grbD50aGlzLnJpZ2h0JiYoQz1mLnkrPWIsZi5saW5lKyssUz1mLng9JG8oaSx0aGlzLmxlZnQrbCx0aGlzLnJpZ2h0LW5bZi5saW5lXSkpOnU+MCYmQytiPnRoaXMuYm90dG9tJiYoUz1mLng9Uyt0W2YubGluZV0ud2lkdGgrbCxmLmxpbmUrKyxDPWYueT0kbyhpLHRoaXMudG9wK3krbCx0aGlzLmJvdHRvbS10W2YubGluZV0uaGVpZ2h0KSk7bGV0IHc9cy54KFMpO2lmKGcodyxDLG8pLFM9ZXMoaCxTK3ArZCx2P1MreDp0aGlzLnJpZ2h0LGUucnRsKSxfKHMueChTKSxDLG8pLHYpZi54Kz14K2w7ZWxzZSBpZih0eXBlb2Ygby50ZXh0IT1gc3RyaW5nYCl7bGV0IGU9Yy5saW5lSGVpZ2h0O2YueSs9WWQobyxlKStsfWVsc2UgZi55Kz1ifSksTmModGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKX1kcmF3VGl0bGUoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpdGxlLG49JCh0LmZvbnQpLHI9USh0LnBhZGRpbmcpO2lmKCF0LmRpc3BsYXkpcmV0dXJuO2xldCBpPWpjKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxhPXRoaXMuY3R4LG89dC5wb3NpdGlvbixzPW4uc2l6ZS8yLGM9ci50b3ArcyxsLHU9dGhpcy5sZWZ0LGQ9dGhpcy53aWR0aDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKWQ9TWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKSxsPXRoaXMudG9wK2MsdT0kbyhlLmFsaWduLHUsdGhpcy5yaWdodC1kKTtlbHNle2xldCB0PXRoaXMuY29sdW1uU2l6ZXMucmVkdWNlKChlLHQpPT5NYXRoLm1heChlLHQuaGVpZ2h0KSwwKTtsPWMrJG8oZS5hbGlnbix0aGlzLnRvcCx0aGlzLmJvdHRvbS10LWUubGFiZWxzLnBhZGRpbmctdGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCkpfWxldCBmPSRvKG8sdSx1K2QpO2EudGV4dEFsaWduPWkudGV4dEFsaWduKFFvKG8pKSxhLnRleHRCYXNlbGluZT1gbWlkZGxlYCxhLnN0cm9rZVN0eWxlPXQuY29sb3IsYS5maWxsU3R5bGU9dC5jb2xvcixhLmZvbnQ9bi5zdHJpbmcsSXMoYSx0LnRleHQsZixsLG4pfV9jb21wdXRlVGl0bGVIZWlnaHQoKXtsZXQgZT10aGlzLm9wdGlvbnMudGl0bGUsdD0kKGUuZm9udCksbj1RKGUucGFkZGluZyk7cmV0dXJuIGUuZGlzcGxheT90LmxpbmVIZWlnaHQrbi5oZWlnaHQ6MH1fZ2V0TGVnZW5kSXRlbUF0KGUsdCl7bGV0IG4scixpO2lmKEJvKGUsdGhpcy5sZWZ0LHRoaXMucmlnaHQpJiZCbyh0LHRoaXMudG9wLHRoaXMuYm90dG9tKSl7Zm9yKGk9dGhpcy5sZWdlbmRIaXRCb3hlcyxuPTA7bjxpLmxlbmd0aDsrK24paWYocj1pW25dLEJvKGUsci5sZWZ0LHIubGVmdCtyLndpZHRoKSYmQm8odCxyLnRvcCxyLnRvcCtyLmhlaWdodCkpcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbbl19cmV0dXJuIG51bGx9aGFuZGxlRXZlbnQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zO2lmKCFYZChlLnR5cGUsdCkpcmV0dXJuO2xldCBuPXRoaXMuX2dldExlZ2VuZEl0ZW1BdChlLngsZS55KTtpZihlLnR5cGU9PT1gbW91c2Vtb3ZlYHx8ZS50eXBlPT09YG1vdXNlb3V0YCl7bGV0IHI9dGhpcy5faG92ZXJlZEl0ZW0saT1XZChyLG4pO3ImJiFpJiZKKHQub25MZWF2ZSxbZSxyLHRoaXNdLHRoaXMpLHRoaXMuX2hvdmVyZWRJdGVtPW4sbiYmIWkmJkoodC5vbkhvdmVyLFtlLG4sdGhpc10sdGhpcyl9ZWxzZSBuJiZKKHQub25DbGljayxbZSxuLHRoaXNdLHRoaXMpfX07ZnVuY3Rpb24gS2QoZSx0LG4scixpKXtyZXR1cm57aXRlbVdpZHRoOnFkKHIsZSx0LG4pLGl0ZW1IZWlnaHQ6SmQoaSxyLHQubGluZUhlaWdodCl9fWZ1bmN0aW9uIHFkKGUsdCxuLHIpe2xldCBpPWUudGV4dDtyZXR1cm4gaSYmdHlwZW9mIGkhPWBzdHJpbmdgJiYoaT1pLnJlZHVjZSgoZSx0KT0+ZS5sZW5ndGg+dC5sZW5ndGg/ZTp0KSksdCtuLnNpemUvMityLm1lYXN1cmVUZXh0KGkpLndpZHRofWZ1bmN0aW9uIEpkKGUsdCxuKXtsZXQgcj1lO3JldHVybiB0eXBlb2YgdC50ZXh0IT1gc3RyaW5nYCYmKHI9WWQodCxuKSkscn1mdW5jdGlvbiBZZChlLHQpe3JldHVybiB0KihlLnRleHQ/ZS50ZXh0Lmxlbmd0aDowKX1mdW5jdGlvbiBYZChlLHQpe3JldHVybiEhKChlPT09YG1vdXNlbW92ZWB8fGU9PT1gbW91c2VvdXRgKSYmKHQub25Ib3Zlcnx8dC5vbkxlYXZlKXx8dC5vbkNsaWNrJiYoZT09PWBjbGlja2B8fGU9PT1gbW91c2V1cGApKX12YXIgWmQ9e2lkOmBsZWdlbmRgLF9lbGVtZW50OkdkLHN0YXJ0KGUsdCxuKXtsZXQgcj1lLmxlZ2VuZD1uZXcgR2Qoe2N0eDplLmN0eCxvcHRpb25zOm4sY2hhcnQ6ZX0pOyRsLmNvbmZpZ3VyZShlLHIsbiksJGwuYWRkQm94KGUscil9LHN0b3AoZSl7JGwucmVtb3ZlQm94KGUsZS5sZWdlbmQpLGRlbGV0ZSBlLmxlZ2VuZH0sYmVmb3JlVXBkYXRlKGUsdCxuKXtsZXQgcj1lLmxlZ2VuZDskbC5jb25maWd1cmUoZSxyLG4pLHIub3B0aW9ucz1ufSxhZnRlclVwZGF0ZShlKXtsZXQgdD1lLmxlZ2VuZDt0LmJ1aWxkTGFiZWxzKCksdC5hZGp1c3RIaXRCb3hlcygpfSxhZnRlckV2ZW50KGUsdCl7dC5yZXBsYXl8fGUubGVnZW5kLmhhbmRsZUV2ZW50KHQuZXZlbnQpfSxkZWZhdWx0czp7ZGlzcGxheTohMCxwb3NpdGlvbjpgdG9wYCxhbGlnbjpgY2VudGVyYCxmdWxsU2l6ZTohMCxyZXZlcnNlOiExLHdlaWdodDoxZTMsb25DbGljayhlLHQsbil7bGV0IHI9dC5kYXRhc2V0SW5kZXgsaT1uLmNoYXJ0O2kuaXNEYXRhc2V0VmlzaWJsZShyKT8oaS5oaWRlKHIpLHQuaGlkZGVuPSEwKTooaS5zaG93KHIpLHQuaGlkZGVuPSExKX0sb25Ib3ZlcjpudWxsLG9uTGVhdmU6bnVsbCxsYWJlbHM6e2NvbG9yOmU9PmUuY2hhcnQub3B0aW9ucy5jb2xvcixib3hXaWR0aDo0MCxwYWRkaW5nOjEwLGdlbmVyYXRlTGFiZWxzKGUpe2xldCB0PWUuZGF0YS5kYXRhc2V0cyx7bGFiZWxzOnt1c2VQb2ludFN0eWxlOm4scG9pbnRTdHlsZTpyLHRleHRBbGlnbjppLGNvbG9yOmEsdXNlQm9yZGVyUmFkaXVzOm8sYm9yZGVyUmFkaXVzOnN9fT1lLmxlZ2VuZC5vcHRpb25zO3JldHVybiBlLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoKS5tYXAoZT0+e2xldCBjPWUuY29udHJvbGxlci5nZXRTdHlsZShuPzA6dm9pZCAwKSxsPVEoYy5ib3JkZXJXaWR0aCk7cmV0dXJue3RleHQ6dFtlLmluZGV4XS5sYWJlbCxmaWxsU3R5bGU6Yy5iYWNrZ3JvdW5kQ29sb3IsZm9udENvbG9yOmEsaGlkZGVuOiFlLnZpc2libGUsbGluZUNhcDpjLmJvcmRlckNhcFN0eWxlLGxpbmVEYXNoOmMuYm9yZGVyRGFzaCxsaW5lRGFzaE9mZnNldDpjLmJvcmRlckRhc2hPZmZzZXQsbGluZUpvaW46Yy5ib3JkZXJKb2luU3R5bGUsbGluZVdpZHRoOihsLndpZHRoK2wuaGVpZ2h0KS80LHN0cm9rZVN0eWxlOmMuYm9yZGVyQ29sb3IscG9pbnRTdHlsZTpyfHxjLnBvaW50U3R5bGUscm90YXRpb246Yy5yb3RhdGlvbix0ZXh0QWxpZ246aXx8Yy50ZXh0QWxpZ24sYm9yZGVyUmFkaXVzOm8mJihzfHxjLmJvcmRlclJhZGl1cyksZGF0YXNldEluZGV4OmUuaW5kZXh9fSx0aGlzKX19LHRpdGxlOntjb2xvcjplPT5lLmNoYXJ0Lm9wdGlvbnMuY29sb3IsZGlzcGxheTohMSxwb3NpdGlvbjpgY2VudGVyYCx0ZXh0OmBgfX0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksbGFiZWxzOntfc2NyaXB0YWJsZTplPT4hW2BnZW5lcmF0ZUxhYmVsc2AsYGZpbHRlcmAsYHNvcnRgXS5pbmNsdWRlcyhlKX19fSxRZD17YXZlcmFnZShlKXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IHQsbixyPW5ldyBTZXQsaT0wLGE9MDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuOysrdCl7bGV0IG49ZVt0XS5lbGVtZW50O2lmKG4mJm4uaGFzVmFsdWUoKSl7bGV0IGU9bi50b29sdGlwUG9zaXRpb24oKTtyLmFkZChlLngpLGkrPWUueSwrK2F9fXJldHVybiBhPT09MHx8ci5zaXplPT09MD8hMTp7eDpbLi4ucl0ucmVkdWNlKChlLHQpPT5lK3QpL3Iuc2l6ZSx5OmkvYX19LG5lYXJlc3QoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IG49dC54LHI9dC55LGk9MS8wLGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtsZXQgbj1lW2FdLmVsZW1lbnQ7aWYobiYmbi5oYXNWYWx1ZSgpKXtsZXQgZT1Gbyh0LG4uZ2V0Q2VudGVyUG9pbnQoKSk7ZTxpJiYoaT1lLHM9bil9fWlmKHMpe2xldCBlPXMudG9vbHRpcFBvc2l0aW9uKCk7bj1lLngscj1lLnl9cmV0dXJue3g6bix5OnJ9fX07ZnVuY3Rpb24gJGQoZSx0KXtyZXR1cm4gdCYmKFcodCk/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSx0KTplLnB1c2godCkpLGV9ZnVuY3Rpb24gZWYoZSl7cmV0dXJuKHR5cGVvZiBlPT1gc3RyaW5nYHx8ZSBpbnN0YW5jZW9mIFN0cmluZykmJmUuaW5kZXhPZihgCmApPi0xP2Uuc3BsaXQoYApgKTplfWZ1bmN0aW9uIHRmKGUsdCl7bGV0e2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6cixpbmRleDppfT10LGE9ZS5nZXREYXRhc2V0TWV0YShyKS5jb250cm9sbGVyLHtsYWJlbDpvLHZhbHVlOnN9PWEuZ2V0TGFiZWxBbmRWYWx1ZShpKTtyZXR1cm57Y2hhcnQ6ZSxsYWJlbDpvLHBhcnNlZDphLmdldFBhcnNlZChpKSxyYXc6ZS5kYXRhLmRhdGFzZXRzW3JdLmRhdGFbaV0sZm9ybWF0dGVkVmFsdWU6cyxkYXRhc2V0OmEuZ2V0RGF0YXNldCgpLGRhdGFJbmRleDppLGRhdGFzZXRJbmRleDpyLGVsZW1lbnQ6bn19ZnVuY3Rpb24gbmYoZSx0KXtsZXQgbj1lLmNoYXJ0LmN0eCx7Ym9keTpyLGZvb3RlcjppLHRpdGxlOmF9PWUse2JveFdpZHRoOm8sYm94SGVpZ2h0OnN9PXQsYz0kKHQuYm9keUZvbnQpLGw9JCh0LnRpdGxlRm9udCksdT0kKHQuZm9vdGVyRm9udCksZD1hLmxlbmd0aCxmPWkubGVuZ3RoLHA9ci5sZW5ndGgsbT1RKHQucGFkZGluZyksaD1tLmhlaWdodCxnPTAsXz1yLnJlZHVjZSgoZSx0KT0+ZSt0LmJlZm9yZS5sZW5ndGgrdC5saW5lcy5sZW5ndGgrdC5hZnRlci5sZW5ndGgsMCk7aWYoXys9ZS5iZWZvcmVCb2R5Lmxlbmd0aCtlLmFmdGVyQm9keS5sZW5ndGgsZCYmKGgrPWQqbC5saW5lSGVpZ2h0KyhkLTEpKnQudGl0bGVTcGFjaW5nK3QudGl0bGVNYXJnaW5Cb3R0b20pLF8pe2xldCBlPXQuZGlzcGxheUNvbG9ycz9NYXRoLm1heChzLGMubGluZUhlaWdodCk6Yy5saW5lSGVpZ2h0O2grPXAqZSsoXy1wKSpjLmxpbmVIZWlnaHQrKF8tMSkqdC5ib2R5U3BhY2luZ31mJiYoaCs9dC5mb290ZXJNYXJnaW5Ub3ArZip1LmxpbmVIZWlnaHQrKGYtMSkqdC5mb290ZXJTcGFjaW5nKTtsZXQgdj0wLHk9ZnVuY3Rpb24oZSl7Zz1NYXRoLm1heChnLG4ubWVhc3VyZVRleHQoZSkud2lkdGgrdil9O3JldHVybiBuLnNhdmUoKSxuLmZvbnQ9bC5zdHJpbmcsWShlLnRpdGxlLHkpLG4uZm9udD1jLnN0cmluZyxZKGUuYmVmb3JlQm9keS5jb25jYXQoZS5hZnRlckJvZHkpLHkpLHY9dC5kaXNwbGF5Q29sb3JzP28rMit0LmJveFBhZGRpbmc6MCxZKHIsZT0+e1koZS5iZWZvcmUseSksWShlLmxpbmVzLHkpLFkoZS5hZnRlcix5KX0pLHY9MCxuLmZvbnQ9dS5zdHJpbmcsWShlLmZvb3Rlcix5KSxuLnJlc3RvcmUoKSxnKz1tLndpZHRoLHt3aWR0aDpnLGhlaWdodDpofX1mdW5jdGlvbiByZihlLHQpe2xldHt5Om4saGVpZ2h0OnJ9PXQ7cmV0dXJuIG48ci8yP2B0b3BgOm4+ZS5oZWlnaHQtci8yP2Bib3R0b21gOmBjZW50ZXJgfWZ1bmN0aW9uIGFmKGUsdCxuLHIpe2xldHt4Omksd2lkdGg6YX09cixvPW4uY2FyZXRTaXplK24uY2FyZXRQYWRkaW5nO2lmKGU9PT1gbGVmdGAmJmkrYStvPnQud2lkdGh8fGU9PT1gcmlnaHRgJiZpLWEtbzwwKXJldHVybiEwfWZ1bmN0aW9uIG9mKGUsdCxuLHIpe2xldHt4Omksd2lkdGg6YX09bix7d2lkdGg6byxjaGFydEFyZWE6e2xlZnQ6cyxyaWdodDpjfX09ZSxsPWBjZW50ZXJgO3JldHVybiByPT09YGNlbnRlcmA/bD1pPD0ocytjKS8yP2BsZWZ0YDpgcmlnaHRgOmk8PWEvMj9sPWBsZWZ0YDppPj1vLWEvMiYmKGw9YHJpZ2h0YCksYWYobCxlLHQsbikmJihsPWBjZW50ZXJgKSxsfWZ1bmN0aW9uIHNmKGUsdCxuKXtsZXQgcj1uLnlBbGlnbnx8dC55QWxpZ258fHJmKGUsbik7cmV0dXJue3hBbGlnbjpuLnhBbGlnbnx8dC54QWxpZ258fG9mKGUsdCxuLHIpLHlBbGlnbjpyfX1mdW5jdGlvbiBjZihlLHQpe2xldHt4Om4sd2lkdGg6cn09ZTtyZXR1cm4gdD09PWByaWdodGA/bi09cjp0PT09YGNlbnRlcmAmJihuLT1yLzIpLG59ZnVuY3Rpb24gbGYoZSx0LG4pe2xldHt5OnIsaGVpZ2h0Oml9PWU7cmV0dXJuIHQ9PT1gdG9wYD9yKz1uOnItPXQ9PT1gYm90dG9tYD9pK246aS8yLHJ9ZnVuY3Rpb24gdWYoZSx0LG4scil7bGV0e2NhcmV0U2l6ZTppLGNhcmV0UGFkZGluZzphLGNvcm5lclJhZGl1czpvfT1lLHt4QWxpZ246cyx5QWxpZ246Y309bixsPWkrYSx7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PVdzKG8pLG09Y2YodCxzKSxoPWxmKHQsYyxsKTtyZXR1cm4gYz09PWBjZW50ZXJgP3M9PT1gbGVmdGA/bSs9bDpzPT09YHJpZ2h0YCYmKG0tPWwpOnM9PT1gbGVmdGA/bS09TWF0aC5tYXgodSxmKStpOnM9PT1gcmlnaHRgJiYobSs9TWF0aC5tYXgoZCxwKStpKSx7eDpSbyhtLDAsci53aWR0aC10LndpZHRoKSx5OlJvKGgsMCxyLmhlaWdodC10LmhlaWdodCl9fWZ1bmN0aW9uIGRmKGUsdCxuKXtsZXQgcj1RKG4ucGFkZGluZyk7cmV0dXJuIHQ9PT1gY2VudGVyYD9lLngrZS53aWR0aC8yOnQ9PT1gcmlnaHRgP2UueCtlLndpZHRoLXIucmlnaHQ6ZS54K3IubGVmdH1mdW5jdGlvbiBmZihlKXtyZXR1cm4gJGQoW10sZWYoZSkpfWZ1bmN0aW9uIHBmKGUsdCxuKXtyZXR1cm4gcXMoZSx7dG9vbHRpcDp0LHRvb2x0aXBJdGVtczpuLHR5cGU6YHRvb2x0aXBgfSl9ZnVuY3Rpb24gbWYoZSx0KXtsZXQgbj10JiZ0LmRhdGFzZXQmJnQuZGF0YXNldC50b29sdGlwJiZ0LmRhdGFzZXQudG9vbHRpcC5jYWxsYmFja3M7cmV0dXJuIG4/ZS5vdmVycmlkZShuKTplfXZhciBoZj17YmVmb3JlVGl0bGU6WWEsdGl0bGUoZSl7aWYoZS5sZW5ndGg+MCl7bGV0IHQ9ZVswXSxuPXQuY2hhcnQuZGF0YS5sYWJlbHMscj1uP24ubGVuZ3RoOjA7aWYodGhpcyYmdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubW9kZT09PWBkYXRhc2V0YClyZXR1cm4gdC5kYXRhc2V0LmxhYmVsfHxgYDtpZih0LmxhYmVsKXJldHVybiB0LmxhYmVsO2lmKHI+MCYmdC5kYXRhSW5kZXg8cilyZXR1cm4gblt0LmRhdGFJbmRleF19cmV0dXJuYGB9LGFmdGVyVGl0bGU6WWEsYmVmb3JlQm9keTpZYSxiZWZvcmVMYWJlbDpZYSxsYWJlbChlKXtpZih0aGlzJiZ0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5tb2RlPT09YGRhdGFzZXRgKXJldHVybiBlLmxhYmVsK2A6IGArZS5mb3JtYXR0ZWRWYWx1ZXx8ZS5mb3JtYXR0ZWRWYWx1ZTtsZXQgdD1lLmRhdGFzZXQubGFiZWx8fGBgO3QmJih0Kz1gOiBgKTtsZXQgbj1lLmZvcm1hdHRlZFZhbHVlO3JldHVybiBVKG4pfHwodCs9biksdH0sbGFiZWxDb2xvcihlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57Ym9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixiYWNrZ3JvdW5kQ29sb3I6dC5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyV2lkdGg6dC5ib3JkZXJXaWR0aCxib3JkZXJEYXNoOnQuYm9yZGVyRGFzaCxib3JkZXJEYXNoT2Zmc2V0OnQuYm9yZGVyRGFzaE9mZnNldCxib3JkZXJSYWRpdXM6MH19LGxhYmVsVGV4dENvbG9yKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5ib2R5Q29sb3J9LGxhYmVsUG9pbnRTdHlsZShlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57cG9pbnRTdHlsZTp0LnBvaW50U3R5bGUscm90YXRpb246dC5yb3RhdGlvbn19LGFmdGVyTGFiZWw6WWEsYWZ0ZXJCb2R5OllhLGJlZm9yZUZvb3RlcjpZYSxmb290ZXI6WWEsYWZ0ZXJGb290ZXI6WWF9O2Z1bmN0aW9uIGdmKGUsdCxuLHIpe2xldCBpPWVbdF0uY2FsbChuLHIpO3JldHVybiBpPT09dm9pZCAwP2hmW3RdLmNhbGwobixyKTppfXZhciBfZj1jbGFzcyBleHRlbmRzIEN1e3N0YXRpYyBwb3NpdGlvbmVycz1RZDtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3BhY2l0eT0wLHRoaXMuX2FjdGl2ZT1bXSx0aGlzLl9ldmVudFBvc2l0aW9uPXZvaWQgMCx0aGlzLl9zaXplPXZvaWQgMCx0aGlzLl9jYWNoZWRBbmltYXRpb25zPXZvaWQgMCx0aGlzLl90b29sdGlwSXRlbXM9W10sdGhpcy4kYW5pbWF0aW9ucz12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5kYXRhUG9pbnRzPXZvaWQgMCx0aGlzLnRpdGxlPXZvaWQgMCx0aGlzLmJlZm9yZUJvZHk9dm9pZCAwLHRoaXMuYm9keT12b2lkIDAsdGhpcy5hZnRlckJvZHk9dm9pZCAwLHRoaXMuZm9vdGVyPXZvaWQgMCx0aGlzLnhBbGlnbj12b2lkIDAsdGhpcy55QWxpZ249dm9pZCAwLHRoaXMueD12b2lkIDAsdGhpcy55PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5jYXJldFg9dm9pZCAwLHRoaXMuY2FyZXRZPXZvaWQgMCx0aGlzLmxhYmVsQ29sb3JzPXZvaWQgMCx0aGlzLmxhYmVsUG9pbnRTdHlsZXM9dm9pZCAwLHRoaXMubGFiZWxUZXh0Q29sb3JzPXZvaWQgMH1pbml0aWFsaXplKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwfV9yZXNvbHZlQW5pbWF0aW9ucygpe2xldCBlPXRoaXMuX2NhY2hlZEFuaW1hdGlvbnM7aWYoZSlyZXR1cm4gZTtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHI9bi5lbmFibGVkJiZ0Lm9wdGlvbnMuYW5pbWF0aW9uJiZuLmFuaW1hdGlvbnMsaT1uZXcgVmModGhpcy5jaGFydCxyKTtyZXR1cm4gci5fY2FjaGVhYmxlJiYodGhpcy5fY2FjaGVkQW5pbWF0aW9ucz1PYmplY3QuZnJlZXplKGkpKSxpfWdldENvbnRleHQoKXtyZXR1cm4gdGhpcy4kY29udGV4dHx8PXBmKHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLHRoaXMsdGhpcy5fdG9vbHRpcEl0ZW1zKX1nZXRUaXRsZShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPWdmKG4sYGJlZm9yZVRpdGxlYCx0aGlzLGUpLGk9Z2YobixgdGl0bGVgLHRoaXMsZSksYT1nZihuLGBhZnRlclRpdGxlYCx0aGlzLGUpLG89W107cmV0dXJuIG89JGQobyxlZihyKSksbz0kZChvLGVmKGkpKSxvPSRkKG8sZWYoYSkpLG99Z2V0QmVmb3JlQm9keShlLHQpe3JldHVybiBmZihnZih0LmNhbGxiYWNrcyxgYmVmb3JlQm9keWAsdGhpcyxlKSl9Z2V0Qm9keShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPVtdO3JldHVybiBZKGUsZT0+e2xldCB0PXtiZWZvcmU6W10sbGluZXM6W10sYWZ0ZXI6W119LGk9bWYobixlKTskZCh0LmJlZm9yZSxlZihnZihpLGBiZWZvcmVMYWJlbGAsdGhpcyxlKSkpLCRkKHQubGluZXMsZ2YoaSxgbGFiZWxgLHRoaXMsZSkpLCRkKHQuYWZ0ZXIsZWYoZ2YoaSxgYWZ0ZXJMYWJlbGAsdGhpcyxlKSkpLHIucHVzaCh0KX0pLHJ9Z2V0QWZ0ZXJCb2R5KGUsdCl7cmV0dXJuIGZmKGdmKHQuY2FsbGJhY2tzLGBhZnRlckJvZHlgLHRoaXMsZSkpfWdldEZvb3RlcihlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPWdmKG4sYGJlZm9yZUZvb3RlcmAsdGhpcyxlKSxpPWdmKG4sYGZvb3RlcmAsdGhpcyxlKSxhPWdmKG4sYGFmdGVyRm9vdGVyYCx0aGlzLGUpLG89W107cmV0dXJuIG89JGQobyxlZihyKSksbz0kZChvLGVmKGkpKSxvPSRkKG8sZWYoYSkpLG99X2NyZWF0ZUl0ZW1zKGUpe2xldCB0PXRoaXMuX2FjdGl2ZSxuPXRoaXMuY2hhcnQuZGF0YSxyPVtdLGk9W10sYT1bXSxvPVtdLHMsYztmb3Iocz0wLGM9dC5sZW5ndGg7czxjOysrcylvLnB1c2godGYodGhpcy5jaGFydCx0W3NdKSk7cmV0dXJuIGUuZmlsdGVyJiYobz1vLmZpbHRlcigodCxyLGkpPT5lLmZpbHRlcih0LHIsaSxuKSkpLGUuaXRlbVNvcnQmJihvPW8uc29ydCgodCxyKT0+ZS5pdGVtU29ydCh0LHIsbikpKSxZKG8sdD0+e2xldCBuPW1mKGUuY2FsbGJhY2tzLHQpO3IucHVzaChnZihuLGBsYWJlbENvbG9yYCx0aGlzLHQpKSxpLnB1c2goZ2YobixgbGFiZWxQb2ludFN0eWxlYCx0aGlzLHQpKSxhLnB1c2goZ2YobixgbGFiZWxUZXh0Q29sb3JgLHRoaXMsdCkpfSksdGhpcy5sYWJlbENvbG9ycz1yLHRoaXMubGFiZWxQb2ludFN0eWxlcz1pLHRoaXMubGFiZWxUZXh0Q29sb3JzPWEsdGhpcy5kYXRhUG9pbnRzPW8sb311cGRhdGUoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hY3RpdmUsaSxhPVtdO2lmKCFyLmxlbmd0aCl0aGlzLm9wYWNpdHkhPT0wJiYoaT17b3BhY2l0eTowfSk7ZWxzZXtsZXQgZT1RZFtuLnBvc2l0aW9uXS5jYWxsKHRoaXMscix0aGlzLl9ldmVudFBvc2l0aW9uKTthPXRoaXMuX2NyZWF0ZUl0ZW1zKG4pLHRoaXMudGl0bGU9dGhpcy5nZXRUaXRsZShhLG4pLHRoaXMuYmVmb3JlQm9keT10aGlzLmdldEJlZm9yZUJvZHkoYSxuKSx0aGlzLmJvZHk9dGhpcy5nZXRCb2R5KGEsbiksdGhpcy5hZnRlckJvZHk9dGhpcy5nZXRBZnRlckJvZHkoYSxuKSx0aGlzLmZvb3Rlcj10aGlzLmdldEZvb3RlcihhLG4pO2xldCB0PXRoaXMuX3NpemU9bmYodGhpcyxuKSxvPU9iamVjdC5hc3NpZ24oe30sZSx0KSxzPXNmKHRoaXMuY2hhcnQsbixvKSxjPXVmKG4sbyxzLHRoaXMuY2hhcnQpO3RoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLGk9e29wYWNpdHk6MSx4OmMueCx5OmMueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCxjYXJldFg6ZS54LGNhcmV0WTplLnl9fXRoaXMuX3Rvb2x0aXBJdGVtcz1hLHRoaXMuJGNvbnRleHQ9dm9pZCAwLGkmJnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsaSksZSYmbi5leHRlcm5hbCYmbi5leHRlcm5hbC5jYWxsKHRoaXMse2NoYXJ0OnRoaXMuY2hhcnQsdG9vbHRpcDp0aGlzLHJlcGxheTp0fSl9ZHJhd0NhcmV0KGUsdCxuLHIpe2xldCBpPXRoaXMuZ2V0Q2FyZXRQb3NpdGlvbihlLG4scik7dC5saW5lVG8oaS54MSxpLnkxKSx0LmxpbmVUbyhpLngyLGkueTIpLHQubGluZVRvKGkueDMsaS55Myl9Z2V0Q2FyZXRQb3NpdGlvbihlLHQsbil7bGV0e3hBbGlnbjpyLHlBbGlnbjppfT10aGlzLHtjYXJldFNpemU6YSxjb3JuZXJSYWRpdXM6b309bix7dG9wTGVmdDpzLHRvcFJpZ2h0OmMsYm90dG9tTGVmdDpsLGJvdHRvbVJpZ2h0OnV9PVdzKG8pLHt4OmQseTpmfT1lLHt3aWR0aDpwLGhlaWdodDptfT10LGgsZyxfLHYseSxiO3JldHVybiBpPT09YGNlbnRlcmA/KHk9ZittLzIscj09PWBsZWZ0YD8oaD1kLGc9aC1hLHY9eSthLGI9eS1hKTooaD1kK3AsZz1oK2Esdj15LWEsYj15K2EpLF89aCk6KGc9cj09PWBsZWZ0YD9kK01hdGgubWF4KHMsbCkrYTpyPT09YHJpZ2h0YD9kK3AtTWF0aC5tYXgoYyx1KS1hOnRoaXMuY2FyZXRYLGk9PT1gdG9wYD8odj1mLHk9di1hLGg9Zy1hLF89ZythKToodj1mK20seT12K2EsaD1nK2EsXz1nLWEpLGI9dikse3gxOmgseDI6Zyx4MzpfLHkxOnYseTI6eSx5MzpifX1kcmF3VGl0bGUoZSx0LG4pe2xldCByPXRoaXMudGl0bGUsaT1yLmxlbmd0aCxhLG8scztpZihpKXtsZXQgYz1qYyhuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1kZih0aGlzLG4udGl0bGVBbGlnbixuKSx0LnRleHRBbGlnbj1jLnRleHRBbGlnbihuLnRpdGxlQWxpZ24pLHQudGV4dEJhc2VsaW5lPWBtaWRkbGVgLGE9JChuLnRpdGxlRm9udCksbz1uLnRpdGxlU3BhY2luZyx0LmZpbGxTdHlsZT1uLnRpdGxlQ29sb3IsdC5mb250PWEuc3RyaW5nLHM9MDtzPGk7KytzKXQuZmlsbFRleHQocltzXSxjLngoZS54KSxlLnkrYS5saW5lSGVpZ2h0LzIpLGUueSs9YS5saW5lSGVpZ2h0K28scysxPT09aSYmKGUueSs9bi50aXRsZU1hcmdpbkJvdHRvbS1vKX19X2RyYXdDb2xvckJveChlLHQsbixyLGkpe2xldCBhPXRoaXMubGFiZWxDb2xvcnNbbl0sbz10aGlzLmxhYmVsUG9pbnRTdHlsZXNbbl0se2JveEhlaWdodDpzLGJveFdpZHRoOmN9PWksbD0kKGkuYm9keUZvbnQpLHU9ZGYodGhpcyxgbGVmdGAsaSksZD1yLngodSksZj1zPGwubGluZUhlaWdodD8obC5saW5lSGVpZ2h0LXMpLzI6MCxwPXQueStmO2lmKGkudXNlUG9pbnRTdHlsZSl7bGV0IHQ9e3JhZGl1czpNYXRoLm1pbihjLHMpLzIscG9pbnRTdHlsZTpvLnBvaW50U3R5bGUscm90YXRpb246by5yb3RhdGlvbixib3JkZXJXaWR0aDoxfSxuPXIubGVmdEZvckx0cihkLGMpK2MvMixsPXArcy8yO2Uuc3Ryb2tlU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsT3MoZSx0LG4sbCksZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLE9zKGUsdCxuLGwpfWVsc2V7ZS5saW5lV2lkdGg9RyhhLmJvcmRlcldpZHRoKT9NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGEuYm9yZGVyV2lkdGgpKTphLmJvcmRlcldpZHRofHwxLGUuc3Ryb2tlU3R5bGU9YS5ib3JkZXJDb2xvcixlLnNldExpbmVEYXNoKGEuYm9yZGVyRGFzaHx8W10pLGUubGluZURhc2hPZmZzZXQ9YS5ib3JkZXJEYXNoT2Zmc2V0fHwwO2xldCB0PXIubGVmdEZvckx0cihkLGMpLG49ci5sZWZ0Rm9yTHRyKHIueFBsdXMoZCwxKSxjLTIpLG89V3MoYS5ib3JkZXJSYWRpdXMpO09iamVjdC52YWx1ZXMobykuc29tZShlPT5lIT09MCk/KGUuYmVnaW5QYXRoKCksZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsTHMoZSx7eDp0LHk6cCx3OmMsaDpzLHJhZGl1czpvfSksZS5maWxsKCksZS5zdHJva2UoKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmJlZ2luUGF0aCgpLExzKGUse3g6bix5OnArMSx3OmMtMixoOnMtMixyYWRpdXM6b30pLGUuZmlsbCgpKTooZS5maWxsU3R5bGU9aS5tdWx0aUtleUJhY2tncm91bmQsZS5maWxsUmVjdCh0LHAsYyxzKSxlLnN0cm9rZVJlY3QodCxwLGMscyksZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3IsZS5maWxsUmVjdChuLHArMSxjLTIscy0yKSl9ZS5maWxsU3R5bGU9dGhpcy5sYWJlbFRleHRDb2xvcnNbbl19ZHJhd0JvZHkoZSx0LG4pe2xldHtib2R5OnJ9PXRoaXMse2JvZHlTcGFjaW5nOmksYm9keUFsaWduOmEsZGlzcGxheUNvbG9yczpvLGJveEhlaWdodDpzLGJveFdpZHRoOmMsYm94UGFkZGluZzpsfT1uLHU9JChuLmJvZHlGb250KSxkPXUubGluZUhlaWdodCxmPTAscD1qYyhuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCksbT1mdW5jdGlvbihuKXt0LmZpbGxUZXh0KG4scC54KGUueCtmKSxlLnkrZC8yKSxlLnkrPWQraX0saD1wLnRleHRBbGlnbihhKSxnLF8sdix5LGIseCxTO2Zvcih0LnRleHRBbGlnbj1hLHQudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHQuZm9udD11LnN0cmluZyxlLng9ZGYodGhpcyxoLG4pLHQuZmlsbFN0eWxlPW4uYm9keUNvbG9yLFkodGhpcy5iZWZvcmVCb2R5LG0pLGY9byYmaCE9PWByaWdodGA/YT09PWBjZW50ZXJgP2MvMitsOmMrMitsOjAseT0wLHg9ci5sZW5ndGg7eTx4OysreSl7Zm9yKGc9clt5XSxfPXRoaXMubGFiZWxUZXh0Q29sb3JzW3ldLHQuZmlsbFN0eWxlPV8sWShnLmJlZm9yZSxtKSx2PWcubGluZXMsbyYmdi5sZW5ndGgmJih0aGlzLl9kcmF3Q29sb3JCb3godCxlLHkscCxuKSxkPU1hdGgubWF4KHUubGluZUhlaWdodCxzKSksYj0wLFM9di5sZW5ndGg7YjxTOysrYiltKHZbYl0pLGQ9dS5saW5lSGVpZ2h0O1koZy5hZnRlcixtKX1mPTAsZD11LmxpbmVIZWlnaHQsWSh0aGlzLmFmdGVyQm9keSxtKSxlLnktPWl9ZHJhd0Zvb3RlcihlLHQsbil7bGV0IHI9dGhpcy5mb290ZXIsaT1yLmxlbmd0aCxhLG87aWYoaSl7bGV0IHM9amMobi5ydGwsdGhpcy54LHRoaXMud2lkdGgpO2ZvcihlLng9ZGYodGhpcyxuLmZvb3RlckFsaWduLG4pLGUueSs9bi5mb290ZXJNYXJnaW5Ub3AsdC50ZXh0QWxpZ249cy50ZXh0QWxpZ24obi5mb290ZXJBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT0kKG4uZm9vdGVyRm9udCksdC5maWxsU3R5bGU9bi5mb290ZXJDb2xvcix0LmZvbnQ9YS5zdHJpbmcsbz0wO288aTsrK28pdC5maWxsVGV4dChyW29dLHMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbi5mb290ZXJTcGFjaW5nfX1kcmF3QmFja2dyb3VuZChlLHQsbixyKXtsZXR7eEFsaWduOmkseUFsaWduOmF9PXRoaXMse3g6byx5OnN9PWUse3dpZHRoOmMsaGVpZ2h0Omx9PW4se3RvcExlZnQ6dSx0b3BSaWdodDpkLGJvdHRvbUxlZnQ6Zixib3R0b21SaWdodDpwfT1XcyhyLmNvcm5lclJhZGl1cyk7dC5maWxsU3R5bGU9ci5iYWNrZ3JvdW5kQ29sb3IsdC5zdHJva2VTdHlsZT1yLmJvcmRlckNvbG9yLHQubGluZVdpZHRoPXIuYm9yZGVyV2lkdGgsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhvK3UscyksYT09PWB0b3BgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MtZCxzKSx0LnF1YWRyYXRpY0N1cnZlVG8obytjLHMsbytjLHMrZCksYT09PWBjZW50ZXJgJiZpPT09YHJpZ2h0YCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obytjLHMrbC1wKSx0LnF1YWRyYXRpY0N1cnZlVG8obytjLHMrbCxvK2MtcCxzK2wpLGE9PT1gYm90dG9tYCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obytmLHMrbCksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scytsLG8scytsLWYpLGE9PT1gY2VudGVyYCYmaT09PWBsZWZ0YCYmdGhpcy5kcmF3Q2FyZXQoZSx0LG4sciksdC5saW5lVG8obyxzK3UpLHQucXVhZHJhdGljQ3VydmVUbyhvLHMsbyt1LHMpLHQuY2xvc2VQYXRoKCksdC5maWxsKCksci5ib3JkZXJXaWR0aD4wJiZ0LnN0cm9rZSgpfV91cGRhdGVBbmltYXRpb25UYXJnZXQoZSl7bGV0IHQ9dGhpcy5jaGFydCxuPXRoaXMuJGFuaW1hdGlvbnMscj1uJiZuLngsaT1uJiZuLnk7aWYocnx8aSl7bGV0IG49UWRbZS5wb3NpdGlvbl0uY2FsbCh0aGlzLHRoaXMuX2FjdGl2ZSx0aGlzLl9ldmVudFBvc2l0aW9uKTtpZighbilyZXR1cm47bGV0IGE9dGhpcy5fc2l6ZT1uZih0aGlzLGUpLG89T2JqZWN0LmFzc2lnbih7fSxuLHRoaXMuX3NpemUpLHM9c2YodCxlLG8pLGM9dWYoZSxvLHMsdCk7KHIuX3RvIT09Yy54fHxpLl90byE9PWMueSkmJih0aGlzLnhBbGlnbj1zLnhBbGlnbix0aGlzLnlBbGlnbj1zLnlBbGlnbix0aGlzLndpZHRoPWEud2lkdGgsdGhpcy5oZWlnaHQ9YS5oZWlnaHQsdGhpcy5jYXJldFg9bi54LHRoaXMuY2FyZXRZPW4ueSx0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucygpLnVwZGF0ZSh0aGlzLGMpKX19X3dpbGxSZW5kZXIoKXtyZXR1cm4hIXRoaXMub3BhY2l0eX1kcmF3KGUpe2xldCB0PXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxuPXRoaXMub3BhY2l0eTtpZighbilyZXR1cm47dGhpcy5fdXBkYXRlQW5pbWF0aW9uVGFyZ2V0KHQpO2xldCByPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0saT17eDp0aGlzLngseTp0aGlzLnl9O249TWF0aC5hYnMobik8LjAwMT8wOm47bGV0IGE9USh0LnBhZGRpbmcpLG89dGhpcy50aXRsZS5sZW5ndGh8fHRoaXMuYmVmb3JlQm9keS5sZW5ndGh8fHRoaXMuYm9keS5sZW5ndGh8fHRoaXMuYWZ0ZXJCb2R5Lmxlbmd0aHx8dGhpcy5mb290ZXIubGVuZ3RoO3QuZW5hYmxlZCYmbyYmKGUuc2F2ZSgpLGUuZ2xvYmFsQWxwaGE9bix0aGlzLmRyYXdCYWNrZ3JvdW5kKGksZSxyLHQpLE1jKGUsdC50ZXh0RGlyZWN0aW9uKSxpLnkrPWEudG9wLHRoaXMuZHJhd1RpdGxlKGksZSx0KSx0aGlzLmRyYXdCb2R5KGksZSx0KSx0aGlzLmRyYXdGb290ZXIoaSxlLHQpLE5jKGUsdC50ZXh0RGlyZWN0aW9uKSxlLnJlc3RvcmUoKSl9Z2V0QWN0aXZlRWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfHxbXX1zZXRBY3RpdmVFbGVtZW50cyhlLHQpe2xldCBuPXRoaXMuX2FjdGl2ZSxyPWUubWFwKCh7ZGF0YXNldEluZGV4OmUsaW5kZXg6dH0pPT57bGV0IG49dGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShlKTtpZighbil0aHJvdyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkYXRhc2V0IGF0IGluZGV4IGArZSk7cmV0dXJue2RhdGFzZXRJbmRleDplLGVsZW1lbnQ6bi5kYXRhW3RdLGluZGV4OnR9fSksaT0hJGEobixyKSxhPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChyLHQpOyhpfHxhKSYmKHRoaXMuX2FjdGl2ZT1yLHRoaXMuX2V2ZW50UG9zaXRpb249dCx0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHM9ITAsdGhpcy51cGRhdGUoITApKX1oYW5kbGVFdmVudChlLHQsbj0hMCl7aWYodCYmdGhpcy5faWdub3JlUmVwbGF5RXZlbnRzKXJldHVybiExO3RoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMTtsZXQgcj10aGlzLm9wdGlvbnMsaT10aGlzLl9hY3RpdmV8fFtdLGE9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudHMoZSxpLHQsbiksbz10aGlzLl9wb3NpdGlvbkNoYW5nZWQoYSxlKSxzPXR8fCEkYShhLGkpfHxvO3JldHVybiBzJiYodGhpcy5fYWN0aXZlPWEsKHIuZW5hYmxlZHx8ci5leHRlcm5hbCkmJih0aGlzLl9ldmVudFBvc2l0aW9uPXt4OmUueCx5OmUueX0sdGhpcy51cGRhdGUoITAsdCkpKSxzfV9nZXRBY3RpdmVFbGVtZW50cyhlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnM7aWYoZS50eXBlPT09YG1vdXNlb3V0YClyZXR1cm5bXTtpZighcilyZXR1cm4gdC5maWx0ZXIoZT0+dGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2UuZGF0YXNldEluZGV4XSYmdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRQYXJzZWQoZS5pbmRleCkhPT12b2lkIDApO2xldCBhPXRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLGkubW9kZSxpLG4pO3JldHVybiBpLnJldmVyc2UmJmEucmV2ZXJzZSgpLGF9X3Bvc2l0aW9uQ2hhbmdlZChlLHQpe2xldHtjYXJldFg6bixjYXJldFk6cixvcHRpb25zOml9PXRoaXMsYT1RZFtpLnBvc2l0aW9uXS5jYWxsKHRoaXMsZSx0KTtyZXR1cm4gYSE9PSExJiYobiE9PWEueHx8ciE9PWEueSl9fSx2Zj17aWQ6YHRvb2x0aXBgLF9lbGVtZW50Ol9mLHBvc2l0aW9uZXJzOlFkLGFmdGVySW5pdChlLHQsbil7biYmKGUudG9vbHRpcD1uZXcgX2Yoe2NoYXJ0OmUsb3B0aW9uczpufSkpfSxiZWZvcmVVcGRhdGUoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LHJlc2V0KGUsdCxuKXtlLnRvb2x0aXAmJmUudG9vbHRpcC5pbml0aWFsaXplKG4pfSxhZnRlckRyYXcoZSl7bGV0IHQ9ZS50b29sdGlwO2lmKHQmJnQuX3dpbGxSZW5kZXIoKSl7bGV0IG49e3Rvb2x0aXA6dH07aWYoZS5ub3RpZnlQbHVnaW5zKGBiZWZvcmVUb29sdGlwRHJhd2Asey4uLm4sY2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO3QuZHJhdyhlLmN0eCksZS5ub3RpZnlQbHVnaW5zKGBhZnRlclRvb2x0aXBEcmF3YCxuKX19LGFmdGVyRXZlbnQoZSx0KXtpZihlLnRvb2x0aXApe2xldCBuPXQucmVwbGF5O2UudG9vbHRpcC5oYW5kbGVFdmVudCh0LmV2ZW50LG4sdC5pbkNoYXJ0QXJlYSkmJih0LmNoYW5nZWQ9ITApfX0sZGVmYXVsdHM6e2VuYWJsZWQ6ITAsZXh0ZXJuYWw6bnVsbCxwb3NpdGlvbjpgYXZlcmFnZWAsYmFja2dyb3VuZENvbG9yOmByZ2JhKDAsMCwwLDAuOClgLHRpdGxlQ29sb3I6YCNmZmZgLHRpdGxlRm9udDp7d2VpZ2h0OmBib2xkYH0sdGl0bGVTcGFjaW5nOjIsdGl0bGVNYXJnaW5Cb3R0b206Nix0aXRsZUFsaWduOmBsZWZ0YCxib2R5Q29sb3I6YCNmZmZgLGJvZHlTcGFjaW5nOjIsYm9keUZvbnQ6e30sYm9keUFsaWduOmBsZWZ0YCxmb290ZXJDb2xvcjpgI2ZmZmAsZm9vdGVyU3BhY2luZzoyLGZvb3Rlck1hcmdpblRvcDo2LGZvb3RlckZvbnQ6e3dlaWdodDpgYm9sZGB9LGZvb3RlckFsaWduOmBsZWZ0YCxwYWRkaW5nOjYsY2FyZXRQYWRkaW5nOjIsY2FyZXRTaXplOjUsY29ybmVyUmFkaXVzOjYsYm94SGVpZ2h0OihlLHQpPT50LmJvZHlGb250LnNpemUsYm94V2lkdGg6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxtdWx0aUtleUJhY2tncm91bmQ6YCNmZmZgLGRpc3BsYXlDb2xvcnM6ITAsYm94UGFkZGluZzowLGJvcmRlckNvbG9yOmByZ2JhKDAsMCwwLDApYCxib3JkZXJXaWR0aDowLGFuaW1hdGlvbjp7ZHVyYXRpb246NDAwLGVhc2luZzpgZWFzZU91dFF1YXJ0YH0sYW5pbWF0aW9uczp7bnVtYmVyczp7dHlwZTpgbnVtYmVyYCxwcm9wZXJ0aWVzOltgeGAsYHlgLGB3aWR0aGAsYGhlaWdodGAsYGNhcmV0WGAsYGNhcmV0WWBdfSxvcGFjaXR5OntlYXNpbmc6YGxpbmVhcmAsZHVyYXRpb246MjAwfX0sY2FsbGJhY2tzOmhmfSxkZWZhdWx0Um91dGVzOntib2R5Rm9udDpgZm9udGAsZm9vdGVyRm9udDpgZm9udGAsdGl0bGVGb250OmBmb250YH0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PmUhPT1gZmlsdGVyYCYmZSE9PWBpdGVtU29ydGAmJmUhPT1gZXh0ZXJuYWxgLF9pbmRleGFibGU6ITEsY2FsbGJhY2tzOntfc2NyaXB0YWJsZTohMSxfaW5kZXhhYmxlOiExfSxhbmltYXRpb246e19mYWxsYmFjazohMX0sYW5pbWF0aW9uczp7X2ZhbGxiYWNrOmBhbmltYXRpb25gfX0sYWRkaXRpb25hbE9wdGlvblNjb3BlczpbYGludGVyYWN0aW9uYF19LHlmPShlLHQsbixyKT0+KHR5cGVvZiB0PT1gc3RyaW5nYD8obj1lLnB1c2godCktMSxyLnVuc2hpZnQoe2luZGV4Om4sbGFiZWw6dH0pKTppc05hTih0KSYmKG49bnVsbCksbik7ZnVuY3Rpb24gYmYoZSx0LG4scil7bGV0IGk9ZS5pbmRleE9mKHQpO3JldHVybiBpPT09LTE/eWYoZSx0LG4scik6aT09PWUubGFzdEluZGV4T2YodCk/aTpufXZhciB4Zj0oZSx0KT0+ZT09PW51bGw/bnVsbDpSbyhNYXRoLnJvdW5kKGUpLDAsdCk7ZnVuY3Rpb24gU2YoZSl7bGV0IHQ9dGhpcy5nZXRMYWJlbHMoKTtyZXR1cm4gZT49MCYmZTx0Lmxlbmd0aD90W2VdOmV9dmFyIENmPWNsYXNzIGV4dGVuZHMgVXV7c3RhdGljIGlkPWBjYXRlZ29yeWA7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6U2Z9fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl92YWx1ZVJhbmdlPTAsdGhpcy5fYWRkZWRMYWJlbHM9W119aW5pdChlKXtsZXQgdD10aGlzLl9hZGRlZExhYmVscztpZih0Lmxlbmd0aCl7bGV0IGU9dGhpcy5nZXRMYWJlbHMoKTtmb3IobGV0e2luZGV4Om4sbGFiZWw6cn1vZiB0KWVbbl09PT1yJiZlLnNwbGljZShuLDEpO3RoaXMuX2FkZGVkTGFiZWxzPVtdfXN1cGVyLmluaXQoZSl9cGFyc2UoZSx0KXtpZihVKGUpKXJldHVybiBudWxsO2xldCBuPXRoaXMuZ2V0TGFiZWxzKCk7cmV0dXJuIHQ9aXNGaW5pdGUodCkmJm5bdF09PT1lP3Q6YmYobixlLHEodCxlKSx0aGlzLl9hZGRlZExhYmVscykseGYodCxuLmxlbmd0aC0xKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbkRlZmluZWQ6ZSxtYXhEZWZpbmVkOnR9PXRoaXMuZ2V0VXNlckJvdW5kcygpLHttaW46bixtYXg6cn09dGhpcy5nZXRNaW5NYXgoITApO3RoaXMub3B0aW9ucy5ib3VuZHM9PT1gdGlja3NgJiYoZXx8KG49MCksdHx8KHI9dGhpcy5nZXRMYWJlbHMoKS5sZW5ndGgtMSkpLHRoaXMubWluPW4sdGhpcy5tYXg9cn1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5taW4sdD10aGlzLm1heCxuPXRoaXMub3B0aW9ucy5vZmZzZXQscj1bXSxpPXRoaXMuZ2V0TGFiZWxzKCk7aT1lPT09MCYmdD09PWkubGVuZ3RoLTE/aTppLnNsaWNlKGUsdCsxKSx0aGlzLl92YWx1ZVJhbmdlPU1hdGgubWF4KGkubGVuZ3RoLSshbiwxKSx0aGlzLl9zdGFydFZhbHVlPXRoaXMubWluLShuPy41OjApO2ZvcihsZXQgbj1lO248PXQ7bisrKXIucHVzaCh7dmFsdWU6bn0pO3JldHVybiByfWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIFNmLmNhbGwodGhpcyxlKX1jb25maWd1cmUoKXtzdXBlci5jb25maWd1cmUoKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHwodGhpcy5fcmV2ZXJzZVBpeGVscz0hdGhpcy5fcmV2ZXJzZVBpeGVscyl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4gdHlwZW9mIGUhPWBudW1iZXJgJiYoZT10aGlzLnBhcnNlKGUpKSxlPT09bnVsbD9OYU46dGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKGUtdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0UGl4ZWxGb3JUaWNrKGUpe2xldCB0PXRoaXMudGlja3M7cmV0dXJuIGU8MHx8ZT50Lmxlbmd0aC0xP251bGw6dGhpcy5nZXRQaXhlbEZvclZhbHVlKHRbZV0udmFsdWUpfWdldFZhbHVlRm9yUGl4ZWwoZSl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5fc3RhcnRWYWx1ZSt0aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKSp0aGlzLl92YWx1ZVJhbmdlKX1nZXRCYXNlUGl4ZWwoKXtyZXR1cm4gdGhpcy5ib3R0b219fTtmdW5jdGlvbiB3ZihlLHQpe2xldCBuPVtdLHtib3VuZHM6cixzdGVwOmksbWluOmEsbWF4Om8scHJlY2lzaW9uOnMsY291bnQ6YyxtYXhUaWNrczpsLG1heERpZ2l0czp1LGluY2x1ZGVCb3VuZHM6ZH09ZSxmPWl8fDEscD1sLTEse21pbjptLG1heDpofT10LGc9IVUoYSksXz0hVShvKSx2PSFVKGMpLHk9KGgtbSkvKHUrMSksYj1UbygoaC1tKS9wL2YpKmYseCxTLEMsdztpZihiPDFlLTE0JiYhZyYmIV8pcmV0dXJuW3t2YWx1ZTptfSx7dmFsdWU6aH1dO3c9TWF0aC5jZWlsKGgvYiktTWF0aC5mbG9vcihtL2IpLHc+cCYmKGI9VG8odypiL3AvZikqZiksVShzKXx8KHg9MTAqKnMsYj1NYXRoLmNlaWwoYip4KS94KSxyPT09YHRpY2tzYD8oUz1NYXRoLmZsb29yKG0vYikqYixDPU1hdGguY2VpbChoL2IpKmIpOihTPW0sQz1oKSxnJiZfJiZpJiZrbygoby1hKS9pLGIvMWUzKT8odz1NYXRoLnJvdW5kKE1hdGgubWluKChvLWEpL2IsbCkpLGI9KG8tYSkvdyxTPWEsQz1vKTp2PyhTPWc/YTpTLEM9Xz9vOkMsdz1jLTEsYj0oQy1TKS93KToodz0oQy1TKS9iLHc9d28odyxNYXRoLnJvdW5kKHcpLGIvMWUzKT9NYXRoLnJvdW5kKHcpOk1hdGguY2VpbCh3KSk7bGV0IFQ9TWF0aC5tYXgoTm8oYiksTm8oUykpO3g9MTAqKihVKHMpP1Q6cyksUz1NYXRoLnJvdW5kKFMqeCkveCxDPU1hdGgucm91bmQoQyp4KS94O2xldCBFPTA7Zm9yKGcmJihkJiZTIT09YT8obi5wdXNoKHt2YWx1ZTphfSksUzxhJiZFKyssd28oTWF0aC5yb3VuZCgoUytFKmIpKngpL3gsYSxUZihhLHksZSkpJiZFKyspOlM8YSYmRSsrKTtFPHc7KytFKXtsZXQgZT1NYXRoLnJvdW5kKChTK0UqYikqeCkveDtpZihfJiZlPm8pYnJlYWs7bi5wdXNoKHt2YWx1ZTplfSl9cmV0dXJuIF8mJmQmJkMhPT1vP24ubGVuZ3RoJiZ3byhuW24ubGVuZ3RoLTFdLnZhbHVlLG8sVGYobyx5LGUpKT9uW24ubGVuZ3RoLTFdLnZhbHVlPW86bi5wdXNoKHt2YWx1ZTpvfSk6KCFffHxDPT09bykmJm4ucHVzaCh7dmFsdWU6Q30pLG59ZnVuY3Rpb24gVGYoZSx0LHtob3Jpem9udGFsOm4sbWluUm90YXRpb246cn0pe2xldCBpPWpvKHIpLGE9KG4/TWF0aC5zaW4oaSk6TWF0aC5jb3MoaSkpfHwuMDAxLG89Ljc1KnQqKGBgK2UpLmxlbmd0aDtyZXR1cm4gTWF0aC5taW4odC9hLG8pfXZhciBFZj1jbGFzcyBleHRlbmRzIFV1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuc3RhcnQ9dm9pZCAwLHRoaXMuZW5kPXZvaWQgMCx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl9lbmRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wfXBhcnNlKGUsdCl7cmV0dXJuIFUoZSl8fCh0eXBlb2YgZT09YG51bWJlcmB8fGUgaW5zdGFuY2VvZiBOdW1iZXIpJiYhaXNGaW5pdGUoK2UpP251bGw6K2V9aGFuZGxlVGlja1JhbmdlT3B0aW9ucygpe2xldHtiZWdpbkF0WmVybzplfT10aGlzLm9wdGlvbnMse21pbkRlZmluZWQ6dCxtYXhEZWZpbmVkOm59PXRoaXMuZ2V0VXNlckJvdW5kcygpLHttaW46cixtYXg6aX09dGhpcyxhPWU9PnI9dD9yOmUsbz1lPT5pPW4/aTplO2lmKGUpe2xldCBlPUNvKHIpLHQ9Q28oaSk7ZTwwJiZ0PDA/bygwKTplPjAmJnQ+MCYmYSgwKX1pZihyPT09aSl7bGV0IHQ9aT09PTA/MTpNYXRoLmFicyhpKi4wNSk7byhpK3QpLGV8fGEoci10KX10aGlzLm1pbj1yLHRoaXMubWF4PWl9Z2V0VGlja0xpbWl0KCl7bGV0e21heFRpY2tzTGltaXQ6ZSxzdGVwU2l6ZTp0fT10aGlzLm9wdGlvbnMudGlja3MsbjtyZXR1cm4gdD8obj1NYXRoLmNlaWwodGhpcy5tYXgvdCktTWF0aC5mbG9vcih0aGlzLm1pbi90KSsxLG4+MWUzJiYoY29uc29sZS53YXJuKGBzY2FsZXMuJHt0aGlzLmlkfS50aWNrcy5zdGVwU2l6ZTogJHt0fSB3b3VsZCByZXN1bHQgZ2VuZXJhdGluZyB1cCB0byAke259IHRpY2tzLiBMaW1pdGluZyB0byAxMDAwLmApLG49MWUzKSk6KG49dGhpcy5jb21wdXRlVGlja0xpbWl0KCksZXx8PTExKSxlJiYobj1NYXRoLm1pbihlLG4pKSxufWNvbXB1dGVUaWNrTGltaXQoKXtyZXR1cm4gMS8wfWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49dGhpcy5nZXRUaWNrTGltaXQoKTtuPU1hdGgubWF4KDIsbik7bGV0IHI9d2Yoe21heFRpY2tzOm4sYm91bmRzOmUuYm91bmRzLG1pbjplLm1pbixtYXg6ZS5tYXgscHJlY2lzaW9uOnQucHJlY2lzaW9uLHN0ZXA6dC5zdGVwU2l6ZSxjb3VudDp0LmNvdW50LG1heERpZ2l0czp0aGlzLl9tYXhEaWdpdHMoKSxob3Jpem9udGFsOnRoaXMuaXNIb3Jpem9udGFsKCksbWluUm90YXRpb246dC5taW5Sb3RhdGlvbnx8MCxpbmNsdWRlQm91bmRzOnQuaW5jbHVkZUJvdW5kcyE9PSExfSx0aGlzLl9yYW5nZXx8dGhpcyk7cmV0dXJuIGUuYm91bmRzPT09YHRpY2tzYCYmQW8ocix0aGlzLGB2YWx1ZWApLGUucmV2ZXJzZT8oci5yZXZlcnNlKCksdGhpcy5zdGFydD10aGlzLm1heCx0aGlzLmVuZD10aGlzLm1pbik6KHRoaXMuc3RhcnQ9dGhpcy5taW4sdGhpcy5lbmQ9dGhpcy5tYXgpLHJ9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy50aWNrcyx0PXRoaXMubWluLG49dGhpcy5tYXg7aWYoc3VwZXIuY29uZmlndXJlKCksdGhpcy5vcHRpb25zLm9mZnNldCYmZS5sZW5ndGgpe2xldCByPShuLXQpL01hdGgubWF4KGUubGVuZ3RoLTEsMSkvMjt0LT1yLG4rPXJ9dGhpcy5fc3RhcnRWYWx1ZT10LHRoaXMuX2VuZFZhbHVlPW4sdGhpcy5fdmFsdWVSYW5nZT1uLXR9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gbXMoZSx0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpfX0sRGY9Y2xhc3MgZXh0ZW5kcyBFZntzdGF0aWMgaWQ9YGxpbmVhcmA7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6X3MuZm9ybWF0dGVycy5udW1lcmljfX07ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW46ZSxtYXg6dH09dGhpcy5nZXRNaW5NYXgoITApO3RoaXMubWluPUsoZSk/ZTowLHRoaXMubWF4PUsodCk/dDoxLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWNvbXB1dGVUaWNrTGltaXQoKXtsZXQgZT10aGlzLmlzSG9yaXpvbnRhbCgpLHQ9ZT90aGlzLndpZHRoOnRoaXMuaGVpZ2h0LG49am8odGhpcy5vcHRpb25zLnRpY2tzLm1pblJvdGF0aW9uKSxyPShlP01hdGguc2luKG4pOk1hdGguY29zKG4pKXx8LjAwMSxpPXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoMCk7cmV0dXJuIE1hdGguY2VpbCh0L01hdGgubWluKDQwLGkubGluZUhlaWdodC9yKSl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PW51bGw/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKChlLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFZhbHVlRm9yUGl4ZWwoZSl7cmV0dXJuIHRoaXMuX3N0YXJ0VmFsdWUrdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkqdGhpcy5fdmFsdWVSYW5nZX19LE9mPWU9Pk1hdGguZmxvb3IoU28oZSkpLGtmPShlLHQpPT4xMCoqKE9mKGUpK3QpO2Z1bmN0aW9uIEFmKGUpe3JldHVybiBlLzEwKipPZihlKT09MX1mdW5jdGlvbiBqZihlLHQsbil7bGV0IHI9MTAqKm4saT1NYXRoLmZsb29yKGUvcik7cmV0dXJuIE1hdGguY2VpbCh0L3IpLWl9ZnVuY3Rpb24gTWYoZSx0KXtsZXQgbj1PZih0LWUpO2Zvcig7amYoZSx0LG4pPjEwOyluKys7Zm9yKDtqZihlLHQsbik8MTA7KW4tLTtyZXR1cm4gTWF0aC5taW4obixPZihlKSl9ZnVuY3Rpb24gTmYoZSx7bWluOnQsbWF4Om59KXt0PVphKGUubWluLHQpO2xldCByPVtdLGk9T2YodCksYT1NZih0LG4pLG89YTwwPzEwKipNYXRoLmFicyhhKToxLHM9MTAqKmEsYz1pPmE/MTAqKmk6MCxsPU1hdGgucm91bmQoKHQtYykqbykvbyx1PU1hdGguZmxvb3IoKHQtYykvcy8xMCkqcyoxMCxkPU1hdGguZmxvb3IoKGwtdSkvMTAqKmEpLGY9WmEoZS5taW4sTWF0aC5yb3VuZCgoYyt1K2QqMTAqKmEpKm8pL28pO2Zvcig7ZjxuOylyLnB1c2goe3ZhbHVlOmYsbWFqb3I6QWYoZiksc2lnbmlmaWNhbmQ6ZH0pLGQ+PTEwP2Q9ZDwxNT8xNToyMDpkKyssZD49MjAmJihhKyssZD0yLG89YT49MD8xOm8pLGY9TWF0aC5yb3VuZCgoYyt1K2QqMTAqKmEpKm8pL287bGV0IHA9WmEoZS5tYXgsZik7cmV0dXJuIHIucHVzaCh7dmFsdWU6cCxtYWpvcjpBZihwKSxzaWduaWZpY2FuZDpkfSkscn0oY2xhc3MgZXh0ZW5kcyBVdXtzdGF0aWMgaWQ9YGxvZ2FyaXRobWljYDtzdGF0aWMgZGVmYXVsdHM9e3RpY2tzOntjYWxsYmFjazpfcy5mb3JtYXR0ZXJzLmxvZ2FyaXRobWljLG1ham9yOntlbmFibGVkOiEwfX19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuc3RhcnQ9dm9pZCAwLHRoaXMuZW5kPXZvaWQgMCx0aGlzLl9zdGFydFZhbHVlPXZvaWQgMCx0aGlzLl92YWx1ZVJhbmdlPTB9cGFyc2UoZSx0KXtsZXQgbj1FZi5wcm90b3R5cGUucGFyc2UuYXBwbHkodGhpcyxbZSx0XSk7aWYobj09PTApe3RoaXMuX3plcm89ITA7cmV0dXJufXJldHVybiBLKG4pJiZuPjA/bjpudWxsfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm1pbj1LKGUpP01hdGgubWF4KDAsZSk6bnVsbCx0aGlzLm1heD1LKHQpP01hdGgubWF4KDAsdCk6bnVsbCx0aGlzLm9wdGlvbnMuYmVnaW5BdFplcm8mJih0aGlzLl96ZXJvPSEwKSx0aGlzLl96ZXJvJiZ0aGlzLm1pbiE9PXRoaXMuX3N1Z2dlc3RlZE1pbiYmIUsodGhpcy5fdXNlck1pbikmJih0aGlzLm1pbj1lPT09a2YodGhpcy5taW4sMCk/a2YodGhpcy5taW4sLTEpOmtmKHRoaXMubWluLDApKSx0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKX1oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl7bGV0e21pbkRlZmluZWQ6ZSxtYXhEZWZpbmVkOnR9PXRoaXMuZ2V0VXNlckJvdW5kcygpLG49dGhpcy5taW4scj10aGlzLm1heCxpPXQ9Pm49ZT9uOnQsYT1lPT5yPXQ/cjplO249PT1yJiYobjw9MD8oaSgxKSxhKDEwKSk6KGkoa2YobiwtMSkpLGEoa2YociwxKSkpKSxuPD0wJiZpKGtmKHIsLTEpKSxyPD0wJiZhKGtmKG4sMSkpLHRoaXMubWluPW4sdGhpcy5tYXg9cn1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9TmYoe21pbjp0aGlzLl91c2VyTWluLG1heDp0aGlzLl91c2VyTWF4fSx0aGlzKTtyZXR1cm4gZS5ib3VuZHM9PT1gdGlja3NgJiZBbyh0LHRoaXMsYHZhbHVlYCksZS5yZXZlcnNlPyh0LnJldmVyc2UoKSx0aGlzLnN0YXJ0PXRoaXMubWF4LHRoaXMuZW5kPXRoaXMubWluKToodGhpcy5zdGFydD10aGlzLm1pbix0aGlzLmVuZD10aGlzLm1heCksdH1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBlPT09dm9pZCAwP2AwYDptcyhlLHRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5taW47c3VwZXIuY29uZmlndXJlKCksdGhpcy5fc3RhcnRWYWx1ZT1TbyhlKSx0aGlzLl92YWx1ZVJhbmdlPVNvKHRoaXMubWF4KS1TbyhlKX1nZXRQaXhlbEZvclZhbHVlKGUpe3JldHVybihlPT09dm9pZCAwfHxlPT09MCkmJihlPXRoaXMubWluKSxlPT09bnVsbHx8aXNOYU4oZSk/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKGU9PT10aGlzLm1pbj8wOihTbyhlKS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe2xldCB0PXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpO3JldHVybiAxMCoqKHRoaXMuX3N0YXJ0VmFsdWUrdCp0aGlzLl92YWx1ZVJhbmdlKX19KTtmdW5jdGlvbiBQZihlKXtsZXQgdD1lLnRpY2tzO2lmKHQuZGlzcGxheSYmZS5kaXNwbGF5KXtsZXQgZT1RKHQuYmFja2Ryb3BQYWRkaW5nKTtyZXR1cm4gcSh0LmZvbnQmJnQuZm9udC5zaXplLFouZm9udC5zaXplKStlLmhlaWdodH1yZXR1cm4gMH1mdW5jdGlvbiBGZihlLHQsbil7cmV0dXJuIG49VyhuKT9uOltuXSx7dzpUcyhlLHQuc3RyaW5nLG4pLGg6bi5sZW5ndGgqdC5saW5lSGVpZ2h0fX1mdW5jdGlvbiBJZihlLHQsbixyLGkpe3JldHVybiBlPT09cnx8ZT09PWk/e3N0YXJ0OnQtbi8yLGVuZDp0K24vMn06ZTxyfHxlPmk/e3N0YXJ0OnQtbixlbmQ6dH06e3N0YXJ0OnQsZW5kOnQrbn19ZnVuY3Rpb24gTGYoZSl7bGV0IHQ9e2w6ZS5sZWZ0K2UuX3BhZGRpbmcubGVmdCxyOmUucmlnaHQtZS5fcGFkZGluZy5yaWdodCx0OmUudG9wK2UuX3BhZGRpbmcudG9wLGI6ZS5ib3R0b20tZS5fcGFkZGluZy5ib3R0b219LG49T2JqZWN0LmFzc2lnbih7fSx0KSxyPVtdLGk9W10sYT1lLl9wb2ludExhYmVscy5sZW5ndGgsbz1lLm9wdGlvbnMucG9pbnRMYWJlbHMscz1vLmNlbnRlclBvaW50TGFiZWxzP1gvYTowO2ZvcihsZXQgYz0wO2M8YTtjKyspe2xldCBhPW8uc2V0Q29udGV4dChlLmdldFBvaW50TGFiZWxDb250ZXh0KGMpKTtpW2NdPWEucGFkZGluZztsZXQgbD1lLmdldFBvaW50UG9zaXRpb24oYyxlLmRyYXdpbmdBcmVhK2lbY10scyksdT0kKGEuZm9udCksZD1GZihlLmN0eCx1LGUuX3BvaW50TGFiZWxzW2NdKTtyW2NdPWQ7bGV0IGY9SW8oZS5nZXRJbmRleEFuZ2xlKGMpK3MpLHA9TWF0aC5yb3VuZChNbyhmKSk7UmYobix0LGYsSWYocCxsLngsZC53LDAsMTgwKSxJZihwLGwueSxkLmgsOTAsMjcwKSl9ZS5zZXRDZW50ZXJQb2ludCh0Lmwtbi5sLG4uci10LnIsdC50LW4udCxuLmItdC5iKSxlLl9wb2ludExhYmVsSXRlbXM9VmYoZSxyLGkpfWZ1bmN0aW9uIFJmKGUsdCxuLHIsaSl7bGV0IGE9TWF0aC5hYnMoTWF0aC5zaW4obikpLG89TWF0aC5hYnMoTWF0aC5jb3MobikpLHM9MCxjPTA7ci5zdGFydDx0Lmw/KHM9KHQubC1yLnN0YXJ0KS9hLGUubD1NYXRoLm1pbihlLmwsdC5sLXMpKTpyLmVuZD50LnImJihzPShyLmVuZC10LnIpL2EsZS5yPU1hdGgubWF4KGUucix0LnIrcykpLGkuc3RhcnQ8dC50PyhjPSh0LnQtaS5zdGFydCkvbyxlLnQ9TWF0aC5taW4oZS50LHQudC1jKSk6aS5lbmQ+dC5iJiYoYz0oaS5lbmQtdC5iKS9vLGUuYj1NYXRoLm1heChlLmIsdC5iK2MpKX1mdW5jdGlvbiB6ZihlLHQsbil7bGV0IHI9ZS5kcmF3aW5nQXJlYSx7ZXh0cmE6aSxhZGRpdGlvbmFsQW5nbGU6YSxwYWRkaW5nOm8sc2l6ZTpzfT1uLGM9ZS5nZXRQb2ludFBvc2l0aW9uKHQscitpK28sYSksbD1NYXRoLnJvdW5kKE1vKElvKGMuYW5nbGUreW8pKSksdT1XZihjLnkscy5oLGwpLGQ9SGYobCksZj1VZihjLngscy53LGQpO3JldHVybnt2aXNpYmxlOiEwLHg6Yy54LHk6dSx0ZXh0QWxpZ246ZCxsZWZ0OmYsdG9wOnUscmlnaHQ6ZitzLncsYm90dG9tOnUrcy5ofX1mdW5jdGlvbiBCZihlLHQpe2lmKCF0KXJldHVybiEwO2xldHtsZWZ0Om4sdG9wOnIscmlnaHQ6aSxib3R0b206YX09ZTtyZXR1cm4hKEFzKHt4Om4seTpyfSx0KXx8QXMoe3g6bix5OmF9LHQpfHxBcyh7eDppLHk6cn0sdCl8fEFzKHt4OmkseTphfSx0KSl9ZnVuY3Rpb24gVmYoZSx0LG4pe2xldCByPVtdLGk9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLGE9ZS5vcHRpb25zLHtjZW50ZXJQb2ludExhYmVsczpvLGRpc3BsYXk6c309YS5wb2ludExhYmVscyxjPXtleHRyYTpQZihhKS8yLGFkZGl0aW9uYWxBbmdsZTpvP1gvaTowfSxsO2ZvcihsZXQgYT0wO2E8aTthKyspe2MucGFkZGluZz1uW2FdLGMuc2l6ZT10W2FdO2xldCBpPXpmKGUsYSxjKTtyLnB1c2goaSkscz09PWBhdXRvYCYmKGkudmlzaWJsZT1CZihpLGwpLGkudmlzaWJsZSYmKGw9aSkpfXJldHVybiByfWZ1bmN0aW9uIEhmKGUpe3JldHVybiBlPT09MHx8ZT09PTE4MD9gY2VudGVyYDplPDE4MD9gbGVmdGA6YHJpZ2h0YH1mdW5jdGlvbiBVZihlLHQsbil7cmV0dXJuIG49PT1gcmlnaHRgP2UtPXQ6bj09PWBjZW50ZXJgJiYoZS09dC8yKSxlfWZ1bmN0aW9uIFdmKGUsdCxuKXtyZXR1cm4gbj09PTkwfHxuPT09MjcwP2UtPXQvMjoobj4yNzB8fG48OTApJiYoZS09dCksZX1mdW5jdGlvbiBHZihlLHQsbil7bGV0e2xlZnQ6cix0b3A6aSxyaWdodDphLGJvdHRvbTpvfT1uLHtiYWNrZHJvcENvbG9yOnN9PXQ7aWYoIVUocykpe2xldCBuPVdzKHQuYm9yZGVyUmFkaXVzKSxjPVEodC5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFN0eWxlPXM7bGV0IGw9ci1jLmxlZnQsdT1pLWMudG9wLGQ9YS1yK2Mud2lkdGgsZj1vLWkrYy5oZWlnaHQ7T2JqZWN0LnZhbHVlcyhuKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxMcyhlLHt4OmwseTp1LHc6ZCxoOmYscmFkaXVzOm59KSxlLmZpbGwoKSk6ZS5maWxsUmVjdChsLHUsZCxmKX19ZnVuY3Rpb24gS2YoZSx0KXtsZXR7Y3R4Om4sb3B0aW9uczp7cG9pbnRMYWJlbHM6cn19PWU7Zm9yKGxldCBpPXQtMTtpPj0wO2ktLSl7bGV0IHQ9ZS5fcG9pbnRMYWJlbEl0ZW1zW2ldO2lmKCF0LnZpc2libGUpY29udGludWU7bGV0IGE9ci5zZXRDb250ZXh0KGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO0dmKG4sYSx0KTtsZXQgbz0kKGEuZm9udCkse3g6cyx5OmMsdGV4dEFsaWduOmx9PXQ7SXMobixlLl9wb2ludExhYmVsc1tpXSxzLGMrby5saW5lSGVpZ2h0LzIsbyx7Y29sb3I6YS5jb2xvcix0ZXh0QWxpZ246bCx0ZXh0QmFzZWxpbmU6YG1pZGRsZWB9KX19ZnVuY3Rpb24gcWYoZSx0LG4scil7bGV0e2N0eDppfT1lO2lmKG4paS5hcmMoZS54Q2VudGVyLGUueUNlbnRlcix0LDAsZ28pO2Vsc2V7bGV0IG49ZS5nZXRQb2ludFBvc2l0aW9uKDAsdCk7aS5tb3ZlVG8obi54LG4ueSk7Zm9yKGxldCBhPTE7YTxyO2ErKyluPWUuZ2V0UG9pbnRQb3NpdGlvbihhLHQpLGkubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBKZihlLHQsbixyLGkpe2xldCBhPWUuY3R4LG89dC5jaXJjdWxhcix7Y29sb3I6cyxsaW5lV2lkdGg6Y309dDshbyYmIXJ8fCFzfHwhY3x8bjwwfHwoYS5zYXZlKCksYS5zdHJva2VTdHlsZT1zLGEubGluZVdpZHRoPWMsYS5zZXRMaW5lRGFzaChpLmRhc2h8fFtdKSxhLmxpbmVEYXNoT2Zmc2V0PWkuZGFzaE9mZnNldCxhLmJlZ2luUGF0aCgpLHFmKGUsbixvLHIpLGEuY2xvc2VQYXRoKCksYS5zdHJva2UoKSxhLnJlc3RvcmUoKSl9ZnVuY3Rpb24gWWYoZSx0LG4pe3JldHVybiBxcyhlLHtsYWJlbDpuLGluZGV4OnQsdHlwZTpgcG9pbnRMYWJlbGB9KX0oY2xhc3MgZXh0ZW5kcyBFZntzdGF0aWMgaWQ9YHJhZGlhbExpbmVhcmA7c3RhdGljIGRlZmF1bHRzPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246YGNoYXJ0QXJlYWAsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZDp7Y2lyY3VsYXI6ITF9LHN0YXJ0QW5nbGU6MCx0aWNrczp7c2hvd0xhYmVsQmFja2Ryb3A6ITAsY2FsbGJhY2s6X3MuZm9ybWF0dGVycy5udW1lcmljfSxwb2ludExhYmVsczp7YmFja2Ryb3BDb2xvcjp2b2lkIDAsYmFja2Ryb3BQYWRkaW5nOjIsZGlzcGxheTohMCxmb250OntzaXplOjEwfSxjYWxsYmFjayhlKXtyZXR1cm4gZX0scGFkZGluZzo1LGNlbnRlclBvaW50TGFiZWxzOiExfX07c3RhdGljIGRlZmF1bHRSb3V0ZXM9eyJhbmdsZUxpbmVzLmNvbG9yIjpgYm9yZGVyQ29sb3JgLCJwb2ludExhYmVscy5jb2xvciI6YGNvbG9yYCwidGlja3MuY29sb3IiOmBjb2xvcmB9O3N0YXRpYyBkZXNjcmlwdG9ycz17YW5nbGVMaW5lczp7X2ZhbGxiYWNrOmBncmlkYH19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMueENlbnRlcj12b2lkIDAsdGhpcy55Q2VudGVyPXZvaWQgMCx0aGlzLmRyYXdpbmdBcmVhPXZvaWQgMCx0aGlzLl9wb2ludExhYmVscz1bXSx0aGlzLl9wb2ludExhYmVsSXRlbXM9W119c2V0RGltZW5zaW9ucygpe2xldCBlPXRoaXMuX3BhZGRpbmc9UShQZih0aGlzLm9wdGlvbnMpLzIpLHQ9dGhpcy53aWR0aD10aGlzLm1heFdpZHRoLWUud2lkdGgsbj10aGlzLmhlaWdodD10aGlzLm1heEhlaWdodC1lLmhlaWdodDt0aGlzLnhDZW50ZXI9TWF0aC5mbG9vcih0aGlzLmxlZnQrdC8yK2UubGVmdCksdGhpcy55Q2VudGVyPU1hdGguZmxvb3IodGhpcy50b3Arbi8yK2UudG9wKSx0aGlzLmRyYXdpbmdBcmVhPU1hdGguZmxvb3IoTWF0aC5taW4odCxuKS8yKX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMSk7dGhpcy5taW49SyhlKSYmIWlzTmFOKGUpP2U6MCx0aGlzLm1heD1LKHQpJiYhaXNOYU4odCk/dDowLHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfWNvbXB1dGVUaWNrTGltaXQoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuZHJhd2luZ0FyZWEvUGYodGhpcy5vcHRpb25zKSl9Z2VuZXJhdGVUaWNrTGFiZWxzKGUpe0VmLnByb3RvdHlwZS5nZW5lcmF0ZVRpY2tMYWJlbHMuY2FsbCh0aGlzLGUpLHRoaXMuX3BvaW50TGFiZWxzPXRoaXMuZ2V0TGFiZWxzKCkubWFwKChlLHQpPT57bGV0IG49Sih0aGlzLm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssW2UsdF0sdGhpcyk7cmV0dXJuIG58fG49PT0wP246YGB9KS5maWx0ZXIoKGUsdCk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkodCkpfWZpdCgpe2xldCBlPXRoaXMub3B0aW9ucztlLmRpc3BsYXkmJmUucG9pbnRMYWJlbHMuZGlzcGxheT9MZih0aGlzKTp0aGlzLnNldENlbnRlclBvaW50KDAsMCwwLDApfXNldENlbnRlclBvaW50KGUsdCxuLHIpe3RoaXMueENlbnRlcis9TWF0aC5mbG9vcigoZS10KS8yKSx0aGlzLnlDZW50ZXIrPU1hdGguZmxvb3IoKG4tcikvMiksdGhpcy5kcmF3aW5nQXJlYS09TWF0aC5taW4odGhpcy5kcmF3aW5nQXJlYS8yLE1hdGgubWF4KGUsdCxuLHIpKX1nZXRJbmRleEFuZ2xlKGUpe2xldCB0PWdvLyh0aGlzLl9wb2ludExhYmVscy5sZW5ndGh8fDEpLG49dGhpcy5vcHRpb25zLnN0YXJ0QW5nbGV8fDA7cmV0dXJuIElvKGUqdCtqbyhuKSl9Z2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoZSl7aWYoVShlKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2U/KHRoaXMubWF4LWUpKnQ6KGUtdGhpcy5taW4pKnR9Z2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZSl7aWYoVShlKSlyZXR1cm4gTmFOO2xldCB0PWUvKHRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKSk7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXZlcnNlP3RoaXMubWF4LXQ6dGhpcy5taW4rdH1nZXRQb2ludExhYmVsQ29udGV4dChlKXtsZXQgdD10aGlzLl9wb2ludExhYmVsc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gWWYodGhpcy5nZXRDb250ZXh0KCksZSxuKX19Z2V0UG9pbnRQb3NpdGlvbihlLHQsbj0wKXtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoZSkteW8rbjtyZXR1cm57eDpNYXRoLmNvcyhyKSp0K3RoaXMueENlbnRlcix5Ok1hdGguc2luKHIpKnQrdGhpcy55Q2VudGVyLGFuZ2xlOnJ9fWdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShlLHQpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24oZSx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQpKX1nZXRCYXNlUG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGV8fDAsdGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0UG9pbnRMYWJlbFBvc2l0aW9uKGUpe2xldHtsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX09dGhpcy5fcG9pbnRMYWJlbEl0ZW1zW2VdO3JldHVybntsZWZ0OnQsdG9wOm4scmlnaHQ6cixib3R0b206aX19ZHJhd0JhY2tncm91bmQoKXtsZXR7YmFja2dyb3VuZENvbG9yOmUsZ3JpZDp7Y2lyY3VsYXI6dH19PXRoaXMub3B0aW9ucztpZihlKXtsZXQgbj10aGlzLmN0eDtuLnNhdmUoKSxuLmJlZ2luUGF0aCgpLHFmKHRoaXMsdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksdCx0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpLG4uY2xvc2VQYXRoKCksbi5maWxsU3R5bGU9ZSxuLmZpbGwoKSxuLnJlc3RvcmUoKX19ZHJhd0dyaWQoKXtsZXQgZT10aGlzLmN0eCx0PXRoaXMub3B0aW9ucyx7YW5nbGVMaW5lczpuLGdyaWQ6cixib3JkZXI6aX09dCxhPXRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCxvLHMsYztpZih0LnBvaW50TGFiZWxzLmRpc3BsYXkmJktmKHRoaXMsYSksci5kaXNwbGF5JiZ0aGlzLnRpY2tzLmZvckVhY2goKGUsdCk9PntpZih0IT09MHx8dD09PTAmJnRoaXMubWluPDApe3M9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShlLnZhbHVlKTtsZXQgbj10aGlzLmdldENvbnRleHQodCksbz1yLnNldENvbnRleHQobiksYz1pLnNldENvbnRleHQobik7SmYodGhpcyxvLHMsYSxjKX19KSxuLmRpc3BsYXkpe2ZvcihlLnNhdmUoKSxvPWEtMTtvPj0wO28tLSl7bGV0IHI9bi5zZXRDb250ZXh0KHRoaXMuZ2V0UG9pbnRMYWJlbENvbnRleHQobykpLHtjb2xvcjppLGxpbmVXaWR0aDphfT1yOyFhfHwhaXx8KGUubGluZVdpZHRoPWEsZS5zdHJva2VTdHlsZT1pLGUuc2V0TGluZURhc2goci5ib3JkZXJEYXNoKSxlLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxzPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodC5yZXZlcnNlP3RoaXMubWluOnRoaXMubWF4KSxjPXRoaXMuZ2V0UG9pbnRQb3NpdGlvbihvLHMpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5saW5lVG8oYy54LGMueSksZS5zdHJva2UoKSl9ZS5yZXN0b3JlKCl9fWRyYXdCb3JkZXIoKXt9ZHJhd0xhYmVscygpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLG49dC50aWNrcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoMCksaSxhO2Uuc2F2ZSgpLGUudHJhbnNsYXRlKHRoaXMueENlbnRlcix0aGlzLnlDZW50ZXIpLGUucm90YXRlKHIpLGUudGV4dEFsaWduPWBjZW50ZXJgLGUudGV4dEJhc2VsaW5lPWBtaWRkbGVgLHRoaXMudGlja3MuZm9yRWFjaCgocixvKT0+e2lmKG89PT0wJiZ0aGlzLm1pbj49MCYmIXQucmV2ZXJzZSlyZXR1cm47bGV0IHM9bi5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChvKSksYz0kKHMuZm9udCk7aWYoaT10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMudGlja3Nbb10udmFsdWUpLHMuc2hvd0xhYmVsQmFja2Ryb3Ape2UuZm9udD1jLnN0cmluZyxhPWUubWVhc3VyZVRleHQoci5sYWJlbCkud2lkdGgsZS5maWxsU3R5bGU9cy5iYWNrZHJvcENvbG9yO2xldCB0PVEocy5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFJlY3QoLWEvMi10LmxlZnQsLWktYy5zaXplLzItdC50b3AsYSt0LndpZHRoLGMuc2l6ZSt0LmhlaWdodCl9SXMoZSxyLmxhYmVsLDAsLWksYyx7Y29sb3I6cy5jb2xvcixzdHJva2VDb2xvcjpzLnRleHRTdHJva2VDb2xvcixzdHJva2VXaWR0aDpzLnRleHRTdHJva2VXaWR0aH0pfSksZS5yZXN0b3JlKCl9ZHJhd1RpdGxlKCl7fX0pO3ZhciBYZj17bWlsbGlzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjEsc3RlcHM6MWUzfSxzZWNvbmQ6e2NvbW1vbjohMCxzaXplOjFlMyxzdGVwczo2MH0sbWludXRlOntjb21tb246ITAsc2l6ZTo2ZTQsc3RlcHM6NjB9LGhvdXI6e2NvbW1vbjohMCxzaXplOjM2ZTUsc3RlcHM6MjR9LGRheTp7Y29tbW9uOiEwLHNpemU6ODY0ZTUsc3RlcHM6MzB9LHdlZWs6e2NvbW1vbjohMSxzaXplOjYwNDhlNSxzdGVwczo0fSxtb250aDp7Y29tbW9uOiEwLHNpemU6MjYyOGU2LHN0ZXBzOjEyfSxxdWFydGVyOntjb21tb246ITEsc2l6ZTo3ODg0ZTYsc3RlcHM6NH0seWVhcjp7Y29tbW9uOiEwLHNpemU6MzE1NGU3fX0sWmY9T2JqZWN0LmtleXMoWGYpO2Z1bmN0aW9uIFFmKGUsdCl7cmV0dXJuIGUtdH1mdW5jdGlvbiAkZihlLHQpe2lmKFUodCkpcmV0dXJuIG51bGw7bGV0IG49ZS5fYWRhcHRlcix7cGFyc2VyOnIscm91bmQ6aSxpc29XZWVrZGF5OmF9PWUuX3BhcnNlT3B0cyxvPXQ7cmV0dXJuIHR5cGVvZiByPT1gZnVuY3Rpb25gJiYobz1yKG8pKSxLKG8pfHwobz10eXBlb2Ygcj09YHN0cmluZ2A/bi5wYXJzZShvLHIpOm4ucGFyc2UobykpLG89PT1udWxsP251bGw6KGkmJihvPWk9PT1gd2Vla2AmJihPbyhhKXx8YT09PSEwKT9uLnN0YXJ0T2YobyxgaXNvV2Vla2AsYSk6bi5zdGFydE9mKG8saSkpLCtvKX1mdW5jdGlvbiBlcChlLHQsbixyKXtsZXQgaT1aZi5sZW5ndGg7Zm9yKGxldCBhPVpmLmluZGV4T2YoZSk7YTxpLTE7KythKXtsZXQgZT1YZltaZlthXV0saT1lLnN0ZXBzP2Uuc3RlcHM6MioqNTMtMTtpZihlLmNvbW1vbiYmTWF0aC5jZWlsKChuLXQpLyhpKmUuc2l6ZSkpPD1yKXJldHVybiBaZlthXX1yZXR1cm4gWmZbaS0xXX1mdW5jdGlvbiB0cChlLHQsbixyLGkpe2ZvcihsZXQgYT1aZi5sZW5ndGgtMTthPj1aZi5pbmRleE9mKG4pO2EtLSl7bGV0IG49WmZbYV07aWYoWGZbbl0uY29tbW9uJiZlLl9hZGFwdGVyLmRpZmYoaSxyLG4pPj10LTEpcmV0dXJuIG59cmV0dXJuIFpmW24/WmYuaW5kZXhPZihuKTowXX1mdW5jdGlvbiBucChlKXtmb3IobGV0IHQ9WmYuaW5kZXhPZihlKSsxLG49WmYubGVuZ3RoO3Q8bjsrK3QpaWYoWGZbWmZbdF1dLmNvbW1vbilyZXR1cm4gWmZbdF19ZnVuY3Rpb24gcnAoZSx0LG4pe2lmKCFuKWVbdF09ITA7ZWxzZSBpZihuLmxlbmd0aCl7bGV0e2xvOnIsaGk6aX09Vm8obix0KSxhPW5bcl0+PXQ/bltyXTpuW2ldO2VbYV09ITB9fWZ1bmN0aW9uIGlwKGUsdCxuLHIpe2xldCBpPWUuX2FkYXB0ZXIsYT0raS5zdGFydE9mKHRbMF0udmFsdWUsciksbz10W3QubGVuZ3RoLTFdLnZhbHVlLHMsYztmb3Iocz1hO3M8PW87cz0raS5hZGQocywxLHIpKWM9bltzXSxjPj0wJiYodFtjXS5tYWpvcj0hMCk7cmV0dXJuIHR9ZnVuY3Rpb24gYXAoZSx0LG4pe2xldCByPVtdLGk9e30sYT10Lmxlbmd0aCxvLHM7Zm9yKG89MDtvPGE7KytvKXM9dFtvXSxpW3NdPW8sci5wdXNoKHt2YWx1ZTpzLG1ham9yOiExfSk7cmV0dXJuIGE9PT0wfHwhbj9yOmlwKGUscixpLG4pfXZhciBvcD1jbGFzcyBleHRlbmRzIFV1e3N0YXRpYyBpZD1gdGltZWA7c3RhdGljIGRlZmF1bHRzPXtib3VuZHM6YGRhdGFgLGFkYXB0ZXJzOnt9LHRpbWU6e3BhcnNlcjohMSx1bml0OiExLHJvdW5kOiExLGlzb1dlZWtkYXk6ITEsbWluVW5pdDpgbWlsbGlzZWNvbmRgLGRpc3BsYXlGb3JtYXRzOnt9fSx0aWNrczp7c291cmNlOmBhdXRvYCxjYWxsYmFjazohMSxtYWpvcjp7ZW5hYmxlZDohMX19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfSx0aGlzLl91bml0PWBkYXlgLHRoaXMuX21ham9yVW5pdD12b2lkIDAsdGhpcy5fb2Zmc2V0cz17fSx0aGlzLl9ub3JtYWxpemVkPSExLHRoaXMuX3BhcnNlT3B0cz12b2lkIDB9aW5pdChlLHQ9e30pe2xldCBuPWUudGltZXx8PXt9LHI9dGhpcy5fYWRhcHRlcj1uZXcgRGwuX2RhdGUoZS5hZGFwdGVycy5kYXRlKTtyLmluaXQodCksaW8obi5kaXNwbGF5Rm9ybWF0cyxyLmZvcm1hdHMoKSksdGhpcy5fcGFyc2VPcHRzPXtwYXJzZXI6bi5wYXJzZXIscm91bmQ6bi5yb3VuZCxpc29XZWVrZGF5Om4uaXNvV2Vla2RheX0sc3VwZXIuaW5pdChlKSx0aGlzLl9ub3JtYWxpemVkPXQubm9ybWFsaXplZH1wYXJzZShlLHQpe3JldHVybiBlPT09dm9pZCAwP251bGw6JGYodGhpcyxlKX1iZWZvcmVMYXlvdXQoKXtzdXBlci5iZWZvcmVMYXlvdXQoKSx0aGlzLl9jYWNoZT17ZGF0YTpbXSxsYWJlbHM6W10sYWxsOltdfX1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9dGhpcy5fYWRhcHRlcixuPWUudGltZS51bml0fHxgZGF5YCx7bWluOnIsbWF4OmksbWluRGVmaW5lZDphLG1heERlZmluZWQ6b309dGhpcy5nZXRVc2VyQm91bmRzKCk7ZnVuY3Rpb24gcyhlKXshYSYmIWlzTmFOKGUubWluKSYmKHI9TWF0aC5taW4ocixlLm1pbikpLCFvJiYhaXNOYU4oZS5tYXgpJiYoaT1NYXRoLm1heChpLGUubWF4KSl9KCFhfHwhbykmJihzKHRoaXMuX2dldExhYmVsQm91bmRzKCkpLChlLmJvdW5kcyE9PWB0aWNrc2B8fGUudGlja3Muc291cmNlIT09YGxhYmVsc2ApJiZzKHRoaXMuZ2V0TWluTWF4KCExKSkpLHI9SyhyKSYmIWlzTmFOKHIpP3I6K3Quc3RhcnRPZihEYXRlLm5vdygpLG4pLGk9SyhpKSYmIWlzTmFOKGkpP2k6K3QuZW5kT2YoRGF0ZS5ub3coKSxuKSsxLHRoaXMubWluPU1hdGgubWluKHIsaS0xKSx0aGlzLm1heD1NYXRoLm1heChyKzEsaSl9X2dldExhYmVsQm91bmRzKCl7bGV0IGU9dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKSx0PTEvMCxuPS0xLzA7cmV0dXJuIGUubGVuZ3RoJiYodD1lWzBdLG49ZVtlLmxlbmd0aC0xXSkse21pbjp0LG1heDpufX1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aW1lLG49ZS50aWNrcyxyPW4uc291cmNlPT09YGxhYmVsc2A/dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTp0aGlzLl9nZW5lcmF0ZSgpO2UuYm91bmRzPT09YHRpY2tzYCYmci5sZW5ndGgmJih0aGlzLm1pbj10aGlzLl91c2VyTWlufHxyWzBdLHRoaXMubWF4PXRoaXMuX3VzZXJNYXh8fHJbci5sZW5ndGgtMV0pO2xldCBpPXRoaXMubWluLGE9dGhpcy5tYXgsbz1XbyhyLGksYSk7cmV0dXJuIHRoaXMuX3VuaXQ9dC51bml0fHwobi5hdXRvU2tpcD9lcCh0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShpKSk6dHAodGhpcyxvLmxlbmd0aCx0Lm1pblVuaXQsdGhpcy5taW4sdGhpcy5tYXgpKSx0aGlzLl9tYWpvclVuaXQ9IW4ubWFqb3IuZW5hYmxlZHx8dGhpcy5fdW5pdD09PWB5ZWFyYD92b2lkIDA6bnAodGhpcy5fdW5pdCksdGhpcy5pbml0T2Zmc2V0cyhyKSxlLnJldmVyc2UmJm8ucmV2ZXJzZSgpLGFwKHRoaXMsbyx0aGlzLl9tYWpvclVuaXQpfWFmdGVyQXV0b1NraXAoKXt0aGlzLm9wdGlvbnMub2Zmc2V0QWZ0ZXJBdXRvc2tpcCYmdGhpcy5pbml0T2Zmc2V0cyh0aGlzLnRpY2tzLm1hcChlPT4rZS52YWx1ZSkpfWluaXRPZmZzZXRzKGU9W10pe2xldCB0PTAsbj0wLHIsaTt0aGlzLm9wdGlvbnMub2Zmc2V0JiZlLmxlbmd0aCYmKHI9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVswXSksdD1lLmxlbmd0aD09PTE/MS1yOih0aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzFdKS1yKS8yLGk9dGhpcy5nZXREZWNpbWFsRm9yVmFsdWUoZVtlLmxlbmd0aC0xXSksbj1lLmxlbmd0aD09PTE/aTooaS10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTJdKSkvMik7bGV0IGE9ZS5sZW5ndGg8Mz8uNTouMjU7dD1Sbyh0LDAsYSksbj1SbyhuLDAsYSksdGhpcy5fb2Zmc2V0cz17c3RhcnQ6dCxlbmQ6bixmYWN0b3I6MS8odCsxK24pfX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLl9hZGFwdGVyLHQ9dGhpcy5taW4sbj10aGlzLm1heCxyPXRoaXMub3B0aW9ucyxpPXIudGltZSxhPWkudW5pdHx8ZXAoaS5taW5Vbml0LHQsbix0aGlzLl9nZXRMYWJlbENhcGFjaXR5KHQpKSxvPXEoci50aWNrcy5zdGVwU2l6ZSwxKSxzPWE9PT1gd2Vla2AmJmkuaXNvV2Vla2RheSxjPU9vKHMpfHxzPT09ITAsbD17fSx1PXQsZCxmO2lmKGMmJih1PStlLnN0YXJ0T2YodSxgaXNvV2Vla2AscykpLHU9K2Uuc3RhcnRPZih1LGM/YGRheWA6YSksZS5kaWZmKG4sdCxhKT4xZTUqbyl0aHJvdyBFcnJvcih0K2AgYW5kIGArbitgIGFyZSB0b28gZmFyIGFwYXJ0IHdpdGggc3RlcFNpemUgb2YgYCtvK2AgYCthKTtsZXQgcD1yLnRpY2tzLnNvdXJjZT09PWBkYXRhYCYmdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO2ZvcihkPXUsZj0wO2Q8bjtkPStlLmFkZChkLG8sYSksZisrKXJwKGwsZCxwKTtyZXR1cm4oZD09PW58fHIuYm91bmRzPT09YHRpY2tzYHx8Zj09PTEpJiZycChsLGQscCksT2JqZWN0LmtleXMobCkuc29ydChRZikubWFwKGU9PitlKX1nZXRMYWJlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX2FkYXB0ZXIsbj10aGlzLm9wdGlvbnMudGltZTtyZXR1cm4gbi50b29sdGlwRm9ybWF0P3QuZm9ybWF0KGUsbi50b29sdGlwRm9ybWF0KTp0LmZvcm1hdChlLG4uZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpfWZvcm1hdChlLHQpe2xldCBuPXRoaXMub3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzLHI9dGhpcy5fdW5pdCxpPXR8fG5bcl07cmV0dXJuIHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGUsaSl9X3RpY2tGb3JtYXRGdW5jdGlvbihlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnMsYT1pLnRpY2tzLmNhbGxiYWNrO2lmKGEpcmV0dXJuIEooYSxbZSx0LG5dLHRoaXMpO2xldCBvPWkudGltZS5kaXNwbGF5Rm9ybWF0cyxzPXRoaXMuX3VuaXQsYz10aGlzLl9tYWpvclVuaXQsbD1zJiZvW3NdLHU9YyYmb1tjXSxkPW5bdF0sZj1jJiZ1JiZkJiZkLm1ham9yO3JldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdChlLHJ8fChmP3U6bCkpfWdlbmVyYXRlVGlja0xhYmVscyhlKXtsZXQgdCxuLHI7Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpcj1lW3RdLHIubGFiZWw9dGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKHIudmFsdWUsdCxlKX1nZXREZWNpbWFsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjooZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX1nZXRQaXhlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlKTtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHQuc3RhcnQrbikqdC5mYWN0b3IpfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpL3QuZmFjdG9yLXQuZW5kO3JldHVybiB0aGlzLm1pbituKih0aGlzLm1heC10aGlzLm1pbil9X2dldExhYmVsU2l6ZShlKXtsZXQgdD10aGlzLm9wdGlvbnMudGlja3Msbj10aGlzLmN0eC5tZWFzdXJlVGV4dChlKS53aWR0aCxyPWpvKHRoaXMuaXNIb3Jpem9udGFsKCk/dC5tYXhSb3RhdGlvbjp0Lm1pblJvdGF0aW9uKSxpPU1hdGguY29zKHIpLGE9TWF0aC5zaW4ociksbz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLnNpemU7cmV0dXJue3c6bippK28qYSxoOm4qYStvKml9fV9nZXRMYWJlbENhcGFjaXR5KGUpe2xldCB0PXRoaXMub3B0aW9ucy50aW1lLG49dC5kaXNwbGF5Rm9ybWF0cyxyPW5bdC51bml0XXx8bi5taWxsaXNlY29uZCxpPXRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbihlLDAsYXAodGhpcyxbZV0sdGhpcy5fbWFqb3JVbml0KSxyKSxhPXRoaXMuX2dldExhYmVsU2l6ZShpKSxvPU1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoL2Eudzp0aGlzLmhlaWdodC9hLmgpLTE7cmV0dXJuIG8+MD9vOjF9Z2V0RGF0YVRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5kYXRhfHxbXSx0LG47aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2lmKHRoaXMuX25vcm1hbGl6ZWQmJnIubGVuZ3RoKXJldHVybiB0aGlzLl9jYWNoZS5kYXRhPXJbMF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcyk7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpZT1lLmNvbmNhdChyW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpKTtyZXR1cm4gdGhpcy5fY2FjaGUuZGF0YT10aGlzLm5vcm1hbGl6ZShlKX1nZXRMYWJlbFRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5sYWJlbHN8fFtdLHQsbjtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgcj10aGlzLmdldExhYmVscygpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWUucHVzaCgkZih0aGlzLHJbdF0pKTtyZXR1cm4gdGhpcy5fY2FjaGUubGFiZWxzPXRoaXMuX25vcm1hbGl6ZWQ/ZTp0aGlzLm5vcm1hbGl6ZShlKX1ub3JtYWxpemUoZSl7cmV0dXJuIEpvKGUuc29ydChRZikpfX07ZnVuY3Rpb24gc3AoZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aC0xLGEsbyxzLGM7bj8odD49ZVtyXS5wb3MmJnQ8PWVbaV0ucG9zJiYoe2xvOnIsaGk6aX09SG8oZSxgcG9zYCx0KSkse3BvczphLHRpbWU6c309ZVtyXSx7cG9zOm8sdGltZTpjfT1lW2ldKToodD49ZVtyXS50aW1lJiZ0PD1lW2ldLnRpbWUmJih7bG86cixoaTppfT1IbyhlLGB0aW1lYCx0KSkse3RpbWU6YSxwb3M6c309ZVtyXSx7dGltZTpvLHBvczpjfT1lW2ldKTtsZXQgbD1vLWE7cmV0dXJuIGw/cysoYy1zKSoodC1hKS9sOnN9KGNsYXNzIGV4dGVuZHMgb3B7c3RhdGljIGlkPWB0aW1lc2VyaWVzYDtzdGF0aWMgZGVmYXVsdHM9b3AuZGVmYXVsdHM7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fdGFibGU9W10sdGhpcy5fbWluUG9zPXZvaWQgMCx0aGlzLl90YWJsZVJhbmdlPXZvaWQgMH1pbml0T2Zmc2V0cygpe2xldCBlPXRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpLHQ9dGhpcy5fdGFibGU9dGhpcy5idWlsZExvb2t1cFRhYmxlKGUpO3RoaXMuX21pblBvcz1zcCh0LHRoaXMubWluKSx0aGlzLl90YWJsZVJhbmdlPXNwKHQsdGhpcy5tYXgpLXRoaXMuX21pblBvcyxzdXBlci5pbml0T2Zmc2V0cyhlKX1idWlsZExvb2t1cFRhYmxlKGUpe2xldHttaW46dCxtYXg6bn09dGhpcyxyPVtdLGk9W10sYSxvLHMsYyxsO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKWM9ZVthXSxjPj10JiZjPD1uJiZyLnB1c2goYyk7aWYoci5sZW5ndGg8MilyZXR1cm5be3RpbWU6dCxwb3M6MH0se3RpbWU6bixwb3M6MX1dO2ZvcihhPTAsbz1yLmxlbmd0aDthPG87KythKWw9clthKzFdLHM9clthLTFdLGM9clthXSxNYXRoLnJvdW5kKChsK3MpLzIpIT09YyYmaS5wdXNoKHt0aW1lOmMscG9zOmEvKG8tMSl9KTtyZXR1cm4gaX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLm1pbix0PXRoaXMubWF4LG49c3VwZXIuZ2V0RGF0YVRpbWVzdGFtcHMoKTtyZXR1cm4oIW4uaW5jbHVkZXMoZSl8fCFuLmxlbmd0aCkmJm4uc3BsaWNlKDAsMCxlKSwoIW4uaW5jbHVkZXModCl8fG4ubGVuZ3RoPT09MSkmJm4ucHVzaCh0KSxuLnNvcnQoKGUsdCk9PmUtdCl9X2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpe2xldCBlPXRoaXMuX2NhY2hlLmFsbHx8W107aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHQ9dGhpcy5nZXREYXRhVGltZXN0YW1wcygpLG49dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtyZXR1cm4gZT10Lmxlbmd0aCYmbi5sZW5ndGg/dGhpcy5ub3JtYWxpemUodC5jb25jYXQobikpOnQubGVuZ3RoP3Q6bixlPXRoaXMuX2NhY2hlLmFsbD1lLGV9Z2V0RGVjaW1hbEZvclZhbHVlKGUpe3JldHVybihzcCh0aGlzLl90YWJsZSxlKS10aGlzLl9taW5Qb3MpL3RoaXMuX3RhYmxlUmFuZ2V9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkvdC5mYWN0b3ItdC5lbmQ7cmV0dXJuIHNwKHRoaXMuX3RhYmxlLG4qdGhpcy5fdGFibGVSYW5nZSt0aGlzLl9taW5Qb3MsITApfX0pO3ZhciBjcD17ZGF0YTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LG9wdGlvbnM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6KCk9Pih7fSl9LHBsdWdpbnM6e3R5cGU6QXJyYXksZGVmYXVsdDooKT0+W119LGRhdGFzZXRJZEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpgbGFiZWxgfSx1cGRhdGVNb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH19LGxwPXthcmlhTGFiZWw6e3R5cGU6U3RyaW5nfSxhcmlhRGVzY3JpYmVkYnk6e3R5cGU6U3RyaW5nfX0sdXA9e3R5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxkZXN0cm95RGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sLi4uY3AsLi4ubHB9LGRwPShlLHQpPT5PYmplY3QuYXNzaWduKGUsdCk7ZnVuY3Rpb24gZnAoZSl7cmV0dXJuIGMoZSk/TyhlKTplfWZ1bmN0aW9uIHBwKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTplO3JldHVybiBjKHQpP25ldyBQcm94eShlLHt9KTplfWZ1bmN0aW9uIG1wKGUsdCl7bGV0IG49ZS5vcHRpb25zO24mJnQmJk9iamVjdC5hc3NpZ24obix0KX1mdW5jdGlvbiBocChlLHQpe2UubGFiZWxzPXR9ZnVuY3Rpb24gZ3AoZSx0LG4pe2xldCByPVtdO2UuZGF0YXNldHM9dC5tYXAodD0+e2xldCBpPWUuZGF0YXNldHMuZmluZChlPT5lW25dPT09dFtuXSk7cmV0dXJuIWl8fCF0LmRhdGF8fHIuaW5jbHVkZXMoaSk/ey4uLnR9OihyLnB1c2goaSksT2JqZWN0LmFzc2lnbihpLHQpLGkpfSl9ZnVuY3Rpb24gX3AoZSx0KXtsZXQgbj17bGFiZWxzOltdLGRhdGFzZXRzOltdfTtyZXR1cm4gaHAobixlLmxhYmVscyksZ3AobixlLmRhdGFzZXRzLHQpLG59dmFyIHZwPVIoe3Byb3BzOnVwLHNldHVwKGUsdCl7bGV0e2V4cG9zZTpuLHNsb3RzOnJ9PXQsaT1GKG51bGwpLGE9dyhudWxsKTtuKHtjaGFydDphfSk7bGV0IG89KCk9PntpZighaS52YWx1ZSlyZXR1cm47bGV0e3R5cGU6dCxkYXRhOm4sb3B0aW9uczpyLHBsdWdpbnM6byxkYXRhc2V0SWRLZXk6c309ZSxjPXBwKF9wKG4scyksbik7YS52YWx1ZT1uZXcgamQoaS52YWx1ZSx7dHlwZTp0LGRhdGE6YyxvcHRpb25zOnsuLi5yfSxwbHVnaW5zOm99KX0scz0oKT0+e2xldCB0PU8oYS52YWx1ZSk7dCYmKGUuZGVzdHJveURlbGF5PjA/c2V0VGltZW91dCgoKT0+e3QuZGVzdHJveSgpLGEudmFsdWU9bnVsbH0sZS5kZXN0cm95RGVsYXkpOih0LmRlc3Ryb3koKSxhLnZhbHVlPW51bGwpKX0sYz10PT57dC51cGRhdGUoZS51cGRhdGVNb2RlKX07cmV0dXJuIE1lKG8pLENlKHMpLFYoWygpPT5lLm9wdGlvbnMsKCk9PmUuZGF0YV0sKHQsbik9PntsZXRbcixpXT10LFtvLHNdPW4sbD1PKGEudmFsdWUpO2lmKCFsKXJldHVybjtsZXQgdT0hMTtpZihyKXtsZXQgZT1mcChyKSx0PWZwKG8pO2UmJmUhPT10JiYobXAobCxlKSx1PSEwKX1pZihpKXtsZXQgdD1mcChpLmxhYmVscyksbj1mcChzLmxhYmVscykscj1mcChpLmRhdGFzZXRzKSxhPWZwKHMuZGF0YXNldHMpO3QhPT1uJiYoaHAobC5jb25maWcuZGF0YSx0KSx1PSEwKSxyJiZyIT09YSYmKGdwKGwuY29uZmlnLmRhdGEscixlLmRhdGFzZXRJZEtleSksdT0hMCl9dSYmYmUoKCk9PntjKGwpfSl9LHtkZWVwOiEwfSksKCk9PkFlKGBjYW52YXNgLHtyb2xlOmBpbWdgLCJhcmlhLWxhYmVsIjplLmFyaWFMYWJlbCwiYXJpYS1kZXNjcmliZWRieSI6ZS5hcmlhRGVzY3JpYmVkYnkscmVmOml9LFtBZShgcGAse30sW3IuZGVmYXVsdD9yLmRlZmF1bHQoKTpgYF0pXSl9fSk7ZnVuY3Rpb24geXAoZSx0KXtyZXR1cm4gamQucmVnaXN0ZXIodCksUih7cHJvcHM6Y3Asc2V0dXAodCxuKXtsZXR7ZXhwb3NlOnJ9PW4saT13KG51bGwpLGE9dyhudWxsKTtWKCgpPT5hLnZhbHVlPy5jaGFydD8/bnVsbCxlPT57aS52YWx1ZT1lfSx7Zmx1c2g6YHN5bmNgfSkscih7Y2hhcnQ6aX0pO2xldCBvPWU9PnthLnZhbHVlPWV9O3JldHVybigpPT5BZSh2cCxkcCh7cmVmOm99LHt0eXBlOmUsLi4udH0pKX19KX12YXIgYnA9eXAoYGJhcmAsVGwpO2pkLnJlZ2lzdGVyKFRsLEhkLENmLERmLFpkLHZmKTtmdW5jdGlvbiB4cCgpe2xldCBlPUYoYGApLHQ9RihgYCksbj1GKGBgKTtmdW5jdGlvbiByKCl7bGV0IHI9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2UudmFsdWU9ci5nZXRQcm9wZXJ0eVZhbHVlKGAtLWZvcmVncm91bmRgKS50cmltKCksdC52YWx1ZT1yLmdldFByb3BlcnR5VmFsdWUoYC0tbXV0ZWQtZm9yZWdyb3VuZGApLnRyaW0oKSxuLnZhbHVlPXIuZ2V0UHJvcGVydHlWYWx1ZShgLS1ib3JkZXJgKS50cmltKCl9bGV0IGk7cmV0dXJuIE1lKCgpPT57cigpLGk9d2luZG93Lm1hdGNoTWVkaWEoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylgKSxpLmFkZEV2ZW50TGlzdGVuZXIoYGNoYW5nZWAscil9KSxJZSgoKT0+e2k/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNoYW5nZWAscil9KSx7Zm9yZWdyb3VuZDplLG11dGVkRm9yZWdyb3VuZDp0LGJvcmRlcjpufX12YXIgU3A9e2NsYXNzOmBoLTcyIHctZnVsbGB9LENwPVIoe19fbmFtZTpgVXNhZ2VDaGFydGAscHJvcHM6e3RhYjp7fSx3aW5kb3c6e30sc2VyaWVzQnlNZXRyaWM6e319LHNldHVwKGUpe2xldCB0PWUse2ZvcmVncm91bmQ6bixtdXRlZEZvcmVncm91bmQ6cixib3JkZXI6aX09eHAoKSxhPXtyZXF1ZXN0czpbe21ldHJpYzpgcmVxYCxsYWJlbDpgUmVxdWVzdHNgLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH1dLHRva2Vuczpbe21ldHJpYzpgdG9raW5gLGxhYmVsOmBUb2tlbnMgaW5gLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1pbmB9LHttZXRyaWM6YHRva291dGAsbGFiZWw6YFRva2VucyBvdXRgLGNvbG9yOmAtLWNoYXJ0LXRva2Vucy1vdXRgfV0sY29zdDpbe21ldHJpYzpgY29zdGAsbGFiZWw6YENvc3QgKFVTRClgLGNvbG9yOmAtLWNoYXJ0LWNvc3RgfV19O2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZT09PWBjb3N0YD90LzFlNjp0fWxldCBzPU4oKCk9PntsZXQgZT1hW3QudGFiXSxuPW5ldyBTZXQ7Zm9yKGxldCByIG9mIGUpZm9yKGxldCBlIG9mIHQuc2VyaWVzQnlNZXRyaWNbci5tZXRyaWNdPz9bXSluLmFkZChlLmJ1Y2tldCk7cmV0dXJuIEFycmF5LmZyb20obikuc29ydCgpfSksYz1OKCgpPT5zLnZhbHVlLm1hcChlPT5nZShlLHQud2luZG93KSkpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGUpLnRyaW0oKX1sZXQgdT1OKCgpPT57bi52YWx1ZTtsZXQgZT1zLnZhbHVlO3JldHVybntsYWJlbHM6Yy52YWx1ZSxkYXRhc2V0czphW3QudGFiXS5tYXAobj0+e2xldCByPW5ldyBNYXAoKHQuc2VyaWVzQnlNZXRyaWNbbi5tZXRyaWNdPz9bXSkubWFwKGU9PltlLmJ1Y2tldCxlLnZhbHVlXSkpO3JldHVybntsYWJlbDpuLmxhYmVsLGJhY2tncm91bmRDb2xvcjpsKG4uY29sb3IpLGRhdGE6ZS5tYXAoZT0+byhuLm1ldHJpYyxyLmdldChlKT8/MCkpfX0pfX0pLGQ9TigoKT0+YVt0LnRhYl0ubGVuZ3RoPjEpLGY9TigoKT0+KHtyZXNwb25zaXZlOiEwLG1haW50YWluQXNwZWN0UmF0aW86ITEsYW5pbWF0aW9uOiExLHNjYWxlczp7eDp7c3RhY2tlZDpkLnZhbHVlLGdyaWQ6e2NvbG9yOmkudmFsdWUsZGlzcGxheTohMX0sdGlja3M6e2NvbG9yOnIudmFsdWV9fSx5OntzdGFja2VkOmQudmFsdWUsYmVnaW5BdFplcm86ITAsZ3JpZDp7Y29sb3I6aS52YWx1ZX0sdGlja3M6e2NvbG9yOnIudmFsdWUsY2FsbGJhY2s6ZT0+dC50YWI9PT1gY29zdGA/YCQke2V9YDprZShOdW1iZXIoZSkpfX19LHBsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTpkLnZhbHVlLGxhYmVsczp7Y29sb3I6bi52YWx1ZX19LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6ZT0+e2xldCBuPWUucGFyc2VkLnk/PzA7cmV0dXJuIHQudGFiPT09YGNvc3RgP2Ake2UuZGF0YXNldC5sYWJlbH06ICQke24udG9GaXhlZCg0KX1gOmAke2UuZGF0YXNldC5sYWJlbH06ICR7a2Uobil9ICgke1VlKG4pfSlgfX19fX0pKTtyZXR1cm4oZSx0KT0+KFAoKSxUZShgZGl2YCxTcCxbTChiKGJwKSx7ZGF0YTp1LnZhbHVlLG9wdGlvbnM6Zi52YWx1ZX0sbnVsbCw4LFtgZGF0YWAsYG9wdGlvbnNgXSldKSl9fSksd3A9M2U0LFRwPXtob3VyOjI0LGRheTozMCxtb250aDoxMn0sRXA9e2hvdXI6YDI0aGAsZGF5OmAzMGRgLG1vbnRoOmAxMm1vYH07ZnVuY3Rpb24gRHAoZSl7c3dpdGNoKGUpe2Nhc2VgcmVxdWVzdHNgOnJldHVybltgcmVxYF07Y2FzZWB0b2tlbnNgOnJldHVybltgdG9raW5gLGB0b2tvdXRgXTtjYXNlYGNvc3RgOnJldHVybltgY29zdGBdfX12YXIgT3A9dWUoYGhpc3RvcnlgLHtzdGF0ZTooKT0+KHtzY29wZTpgdG90YWxgLHdpbmRvdzpgaG91cmAsdGFiOmByZXF1ZXN0c2Asc2VyaWVzQnlNZXRyaWM6e30sbG9hZGluZzohMSxlcnJvcjpgYCx0aW1lcjp2b2lkIDB9KSxhY3Rpb25zOntzZXRTY29wZShlKXtlIT09dGhpcy5zY29wZSYmKHRoaXMuc2NvcGU9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxzZXRXaW5kb3coZSl7ZSE9PXRoaXMud2luZG93JiYodGhpcy53aW5kb3c9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxzZXRUYWIoZSl7ZSE9PXRoaXMudGFiJiYodGhpcy50YWI9ZSx0aGlzLmZldGNoU2VyaWVzKCkpfSxhc3luYyBmZXRjaFNlcmllcygpe2lmKGplKCkuaXNBdXRoZW50aWNhdGVkKXt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBlPVRwW3RoaXMud2luZG93XSx0PURwKHRoaXMudGFiKSxuPWF3YWl0IFByb21pc2UuYWxsKHQubWFwKHQ9PkZlKGAvYWRtaW4vYXBpL3VzYWdlL2hpc3Rvcnk/c2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zY29wZSl9Jm1ldHJpYz0ke3R9JndpbmRvdz0ke3RoaXMud2luZG93fSZzcGFuPSR7ZX1gKSkpLHI9e307dC5mb3JFYWNoKChlLHQpPT57cltlXT1uW3RdLnBvaW50c30pLHRoaXMuc2VyaWVzQnlNZXRyaWM9cix0aGlzLmVycm9yPWBgfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiB5ZSYmKGUuc3RhdHVzPT09NDAxfHxlLnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpTdHJpbmcoZSl9ZmluYWxseXt0aGlzLmxvYWRpbmc9ITF9fX0sc3RhcnRBdXRvUmVmcmVzaCgpe3RoaXMudGltZXI9PT12b2lkIDAmJih0aGlzLnRpbWVyPXNldEludGVydmFsKCgpPT52b2lkIHRoaXMuZmV0Y2hTZXJpZXMoKSx3cCkpfSxzdG9wQXV0b1JlZnJlc2goKXt0aGlzLnRpbWVyIT09dm9pZCAwJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXZvaWQgMCl9fX0pLGtwPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zYH0sQXA9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtZGVzdHJ1Y3RpdmVgfSxqcD1SKHtfX25hbWU6YENoYXJ0c1ZpZXdgLHNldHVwKGUpe2xldCB0PXZlKCksbj1PcCgpLHtxdWVyeTpyLG5vcm1hbGl6ZWQ6aSxoYXNRdWVyeTphfT1QZSgpLG89TigoKT0+e2xldCBlPXQudXNhZ2U/LnVzZXJzPz9bXSxyPXQudXNhZ2U/Lmdyb3Vwcz8/W10sbz1lLmZpbHRlcihlPT4hYS52YWx1ZXx8TmUoZSxpLnZhbHVlKXx8YHVzZXI6JHtlLmlkfWA9PT1uLnNjb3BlKS5tYXAoZT0+KHt2YWx1ZTpgdXNlcjoke2UuaWR9YCxsYWJlbDplLmlkfSkpO3JldHVyblt7dmFsdWU6YHRvdGFsYCxsYWJlbDpgVG90YWwgKGFsbCB0cmFmZmljKWB9LC4uLnIuZmlsdGVyKHQ9PiFhLnZhbHVlfHxWZSh0LGUsaS52YWx1ZSl8fGBncm91cDoke3QuaWR9YD09PW4uc2NvcGUpLm1hcChlPT4oe3ZhbHVlOmBncm91cDoke2UuaWR9YCxsYWJlbDplLmlkfSkpLC4uLm9dfSkscz1bYGhvdXJgLGBkYXlgLGBtb250aGBdO2Z1bmN0aW9uIGMoZSl7bi5zZXRUYWIoZSl9ZnVuY3Rpb24gbChlKXt0eXBlb2YgZT09YHN0cmluZ2AmJm4uc2V0U2NvcGUoZSl9cmV0dXJuIE1lKCgpPT57bi5mZXRjaFNlcmllcygpLG4uc3RhcnRBdXRvUmVmcmVzaCgpfSksQ2UoKCk9PntuLnN0b3BBdXRvUmVmcmVzaCgpfSksVihvLGU9PntlLnNvbWUoZT0+ZS52YWx1ZT09PW4uc2NvcGUpfHxuLnNldFNjb3BlKGB0b3RhbGApfSksKGUsdCk9PihQKCksSShiKEdlKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoeGUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgc206anVzdGlmeS1iZXR3ZWVuYH0se2RlZmF1bHQ6QigoKT0+W0woYihTZSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5bLi4udFsyXXx8PVtoZShgVXNhZ2UgY2hhcnRzYCwtMSldXSksXzoxfSksSGUoYGRpdmAsa3AsW0woQmUse21vZGVsVmFsdWU6YihyKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9PkUocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciB1c2VycyBvciBncm91cHNgLGNsYXNzOmB3LTU2YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKSxMKGIoWGkpLHsibW9kZWwtdmFsdWUiOmIobikuc2NvcGUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmx9LHtkZWZhdWx0OkIoKCk9PltMKGIobmEpLHtjbGFzczpgdy01NmB9LHtkZWZhdWx0OkIoKCk9PltMKGIocmEpLHtwbGFjZWhvbGRlcjpgU2NvcGVgfSldKSxfOjF9KSxMKGIoWmkpLG51bGwse2RlZmF1bHQ6QigoKT0+WyhQKCEwKSxUZShrLG51bGwscGUoby52YWx1ZSxlPT4oUCgpLEkoYigkaSkse2tleTplLnZhbHVlLHZhbHVlOmUudmFsdWV9LHtkZWZhdWx0OkIoKCk9PltoZShzZShlLmxhYmVsKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pLEwoYihtZSkseyJtb2RlbC12YWx1ZSI6YihuKS53aW5kb3csIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMV18fD1lPT5iKG4pLnNldFdpbmRvdyhlKX0se2RlZmF1bHQ6QigoKT0+W0woYih3ZSksbnVsbCx7ZGVmYXVsdDpCKCgpPT5bKFAoKSxUZShrLG51bGwscGUocyxlPT5MKGIoUmUpLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpCKCgpPT5baGUoc2UoYihFcClbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpLDY0KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSldKSxfOjF9KSxMKGIoZmUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OkIoKCk9PltMKGIobWUpLHsibW9kZWwtdmFsdWUiOmIobikudGFiLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpjfSx7ZGVmYXVsdDpCKCgpPT5bTChiKHdlKSxudWxsLHtkZWZhdWx0OkIoKCk9PltMKGIoUmUpLHt2YWx1ZTpgcmVxdWVzdHNgfSx7ZGVmYXVsdDpCKCgpPT5bLi4udFszXXx8PVtoZShgUmVxdWVzdHNgLC0xKV1dKSxfOjF9KSxMKGIoUmUpLHt2YWx1ZTpgdG9rZW5zYH0se2RlZmF1bHQ6QigoKT0+Wy4uLnRbNF18fD1baGUoYFRva2Vuc2AsLTEpXV0pLF86MX0pLEwoYihSZSkse3ZhbHVlOmBjb3N0YH0se2RlZmF1bHQ6QigoKT0+Wy4uLnRbNV18fD1baGUoYENvc3RgLC0xKV1dKSxfOjF9KV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSksYihuKS5lcnJvcj8oUCgpLFRlKGBwYCxBcCxzZShiKG4pLmVycm9yKSwxKSk6emUoYGAsITApLEwoQ3Ase3RhYjpiKG4pLnRhYix3aW5kb3c6YihuKS53aW5kb3csInNlcmllcy1ieS1tZXRyaWMiOmIobikuc2VyaWVzQnlNZXRyaWN9LG51bGwsOCxbYHRhYmAsYHdpbmRvd2AsYHNlcmllcy1ieS1tZXRyaWNgXSldKSxfOjF9KV0pLF86MX0pKX19KTtleHBvcnR7anAgYXMgZGVmYXVsdH07", ), }, "index-De-V0jPt.css": { @@ -58,4 +52,10 @@ var adminAssets = map[string]adminAsset{ "QGtleWZyYW1lcyBhdXRoZ2F0ZS1zaGFrZS00YmU2YmMwOXsxMCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTFweCl9MjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDJweCl9MzAlLDUwJSw3MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNHB4KX00MCUsNjAle3RyYW5zZm9ybTp0cmFuc2xhdGUoNHB4KX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey5hdXRoZ2F0ZS1zaGFrZVtkYXRhLXYtNGJlNmJjMDlde2FuaW1hdGlvbjouNHMgZWFzZS1pbi1vdXQgYXV0aGdhdGUtc2hha2UtNGJlNmJjMDl9fUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKCgtd2Via2l0LWh5cGhlbnM6bm9uZSkpIGFuZCAobm90IChtYXJnaW4tdHJpbTppbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDppbmxpbmUpIGFuZCAobm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpezpyb290LDpob3N0ey0tc2hpbW1lci1hbmdsZToyMGRlZ30qLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWNvbnRlbnQ6IiI7LS10dy1hbmltYXRpb24tZGVsYXk6MHM7LS10dy1hbmltYXRpb24tZGlyZWN0aW9uOm5vcm1hbDstLXR3LWFuaW1hdGlvbi1kdXJhdGlvbjppbml0aWFsOy0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZTpub25lOy0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDoxOy0tdHctZW50ZXItYmx1cjowOy0tdHctZW50ZXItb3BhY2l0eToxOy0tdHctZW50ZXItcm90YXRlOjA7LS10dy1lbnRlci1zY2FsZToxOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6MDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OjA7LS10dy1leGl0LWJsdXI6MDstLXR3LWV4aXQtb3BhY2l0eToxOy0tdHctZXhpdC1yb3RhdGU6MDstLXR3LWV4aXQtc2NhbGU6MTstLXR3LWV4aXQtdHJhbnNsYXRlLXg6MDstLXR3LWV4aXQtdHJhbnNsYXRlLXk6MDstLXNjcm9sbC1mYWRlLXQ6MDstLXNjcm9sbC1mYWRlLWI6MDstLXNjcm9sbC1mYWRlLXM6MDstLXNjcm9sbC1mYWRlLWU6MDstLXNjcm9sbC1mYWRlLW1hc2s6aW5pdGlhbDstLXNoaW1tZXItaW1hZ2U6aW5pdGlhbDstLXNoaW1tZXItdGV4dC1maWxsOmluaXRpYWx9fX1AbGF5ZXIgdGhlbWV7OnJvb3QsOmhvc3R7LS1mb250LXNhbnM6dWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmOy0tc3BhY2luZzouMjVyZW07LS1jb250YWluZXIteHM6MjByZW07LS1jb250YWluZXItc206MjRyZW07LS1jb250YWluZXItbWQ6MjhyZW07LS10ZXh0LXhzOi43NXJlbTstLXRleHQteHMtLWxpbmUtaGVpZ2h0OmNhbGMoMSAvIC43NSk7LS10ZXh0LXNtOi44NzVyZW07LS10ZXh0LXNtLS1saW5lLWhlaWdodDpjYWxjKDEuMjUgLyAuODc1KTstLXRleHQtYmFzZToxcmVtOy0tdGV4dC1iYXNlLS1saW5lLWhlaWdodDpjYWxjKDEuNSAvIDEpOy0tdGV4dC1sZzoxLjEyNXJlbTstLXRleHQtbGctLWxpbmUtaGVpZ2h0OmNhbGMoMS43NSAvIDEuMTI1KTstLXRleHQteGw6MS4yNXJlbTstLXRleHQteGwtLWxpbmUtaGVpZ2h0OmNhbGMoMS43NSAvIDEuMjUpOy0tZm9udC13ZWlnaHQtbm9ybWFsOjQwMDstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy10aWdodDotLjAyNWVtOy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLW1kOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7LS1yYWRpdXMtNHhsOjJyZW07LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LCAwLCAuMiwgMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZjstLWRlZmF1bHQtbW9uby1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgIkNhc2NhZGlhIENvZGUiLCAiUm9ib3RvIE1vbm8iLCBDb25zb2xhcywgbW9ub3NwYWNlfX1AbGF5ZXIgYmFzZXsqLDphZnRlciw6YmVmb3JlLDo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9aHRtbCw6aG9zdHstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0YWItc2l6ZTo0O2xpbmUtaGVpZ2h0OjEuNTtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LWZvbnQtZmFtaWx5LC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCAiTm90byBTYW5zIiwgQXJpYWwsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZzp3aGVyZSg6bm90KGlmcmFtZSkpe291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6YmxvY2t9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnttYXJnaW4taW5saW5lLWVuZDo0cHh9OjpwbGFjZWhvbGRlcntvcGFjaXR5OjF9QHN1cHBvcnRzIChub3QgKCgtd2Via2l0LWFwcGVhcmFuY2U6LWFwcGxlLXBheS1idXR0b24pKSkgb3IgKGNvbnRhaW4taW50cmluc2ljLXNpemU6MXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIGN1cnJlbnRjb2xvciA1MCUsIHRyYW5zcGFyZW50KX19fXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWRhdGUtYW5kLXRpbWUtdmFsdWV7bWluLWhlaWdodDoxbGg7dGV4dC1hbGlnbjppbmhlcml0fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2Rpc3BsYXk6aW5saW5lLWZsZXh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZmllbGRzLXdyYXBwZXJ7cGFkZGluZzowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntsaW5lLWhlaWdodDoxfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfWJ1dHRvbixpbnB1dDp3aGVyZShbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdKXthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Kntib3JkZXItY29sb3I6dmFyKC0tYm9yZGVyKTtvdXRsaW5lLWNvbG9yOnZhcigtLXJpbmcpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsqe291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1yaW5nKSA1MCUsIHRyYW5zcGFyZW50KX19Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWZvcmVncm91bmQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtcztmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmfX1AbGF5ZXIgY29tcG9uZW50cztAbGF5ZXIgdXRpbGl0aWVzey5cQGNvbnRhaW5lclwvY2FyZC1oZWFkZXJ7Y29udGFpbmVyOmNhcmQtaGVhZGVyL2lubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbGxhcHNle3Zpc2liaWxpdHk6Y29sbGFwc2V9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LnNyLW9ubHl7Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW59LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0YXRpY3twb3NpdGlvbjpzdGF0aWN9LnRvcC0xXC8ye3RvcDo1MCV9LnRvcC0ye3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnJpZ2h0LTF7cmlnaHQ6dmFyKC0tc3BhY2luZyl9LnJpZ2h0LTFcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnJpZ2h0LTJ7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0uei0xMHt6LWluZGV4OjEwfS56LTUwe3otaW5kZXg6NTB9LmNvbC1zdGFydC0ye2dyaWQtY29sdW1uLXN0YXJ0OjJ9LnJvdy1zcGFuLTJ7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn0ucm93LXN0YXJ0LTF7Z3JpZC1yb3ctc3RhcnQ6MX0uLW14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEpfS4tbXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAtMS41KX0ubXgtYXV0b3ttYXJnaW4taW5saW5lOmF1dG99Lm15LTF7bWFyZ2luLWJsb2NrOnZhcigtLXNwYWNpbmcpfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ubXQtNHttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ubWItMVwuNXttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5tYi0ze21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0udGFibGUtY2FwdGlvbntkaXNwbGF5OnRhYmxlLWNhcHRpb259LnRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsfS50YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3d9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnNpemUtM3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9LnNpemUtNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNik7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uc2l6ZS03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA3KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5zaXplLTh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA5KX0uc2l6ZS0xMnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTIpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA1KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0uaC05e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOSl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxMCl9LmgtNzJ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3Mil9LmgtXFtjYWxjXCgxMDBcJS0xcHhcKVxde2hlaWdodDpjYWxjKDEwMCUgLSAxcHgpfS5oLXB4e2hlaWdodDoxcHh9Lm1heC1oLVwoLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHRcKXttYXgtaGVpZ2h0OnZhcigtLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCl9Lm1pbi1oLVxbNzB2aFxde21pbi1oZWlnaHQ6NzB2aH0udy01Nnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNTYpfS53LWZpdHt3aWR0aDpmaXQtY29udGVudH0udy1mdWxse3dpZHRoOjEwMCV9Lm1heC13LW1ke21heC13aWR0aDp2YXIoLS1jb250YWluZXItbWQpfS5tYXgtdy1zbXttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLXNtKX0ubWF4LXcteHN7bWF4LXdpZHRoOnZhcigtLWNvbnRhaW5lci14cyl9Lm1pbi13LTB7bWluLXdpZHRoOjB9Lm1pbi13LTM2e21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMzYpfS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS5jYXB0aW9uLWJvdHRvbXtjYXB0aW9uLXNpZGU6Ym90dG9tfS5vcmlnaW4tXCgtLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpblwpe3RyYW5zZm9ybS1vcmlnaW46dmFyKC0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMSAvIDIgKiAxMDAlKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpIHZhcigtLXR3LXJvdGF0ZS15LCkgdmFyKC0tdHctcm90YXRlLXosKSB2YXIoLS10dy1za2V3LXgsKSB2YXIoLS10dy1za2V3LXksKX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5zY3JvbGwtbXktMXtzY3JvbGwtbWFyZ2luLWJsb2NrOnZhcigtLXNwYWNpbmcpfS5hdXRvLXJvd3MtbWlue2dyaWQtYXV0by1yb3dzOm1pbi1jb250ZW50fS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5nYXAtMXtnYXA6dmFyKC0tc3BhY2luZyl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ2FwLTR7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ2FwLTZ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ2FwLXgtNHtjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ2FwLXgtNntjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZ2FwLXktMXtyb3ctZ2FwOnZhcigtLXNwYWNpbmcpfS5nYXAteS0xXC41e3Jvdy1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnNlbGYtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy14LWF1dG97b3ZlcmZsb3cteDphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC00eGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtNHhsKX0ucm91bmRlZC1cW21pblwodmFyXCgtLXJhZGl1cy1tZFwpXCwxMHB4XClcXXtib3JkZXItcmFkaXVzOm1pbih2YXIoLS1yYWRpdXMtbWQpLCAxMHB4KX0ucm91bmRlZC1cW21pblwodmFyXCgtLXJhZGl1cy1tZFwpXCwxMnB4XClcXXtib3JkZXItcmFkaXVzOm1pbih2YXIoLS1yYWRpdXMtbWQpLCAxMnB4KX0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6MjE0NzQ4MzY0N3B4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfS5yb3VuZGVkLXQteGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9LnJvdW5kZWQtYi14bHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KX0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci10e2JvcmRlci10b3Atc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLWJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjp2YXIoLS1ib3JkZXIpfS5ib3JkZXItaW5wdXR7Ym9yZGVyLWNvbG9yOnZhcigtLWlucHV0KX0uYm9yZGVyLXN0YXR1cy13YXJuXC80MHtib3JkZXItY29sb3I6dmFyKC0tc3RhdHVzLXdhcm4pfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXN0YXR1cy13YXJuXC80MHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1zdGF0dXMtd2FybikgNDAlLCB0cmFuc3BhcmVudCl9fS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOiMwMDAwfS5iZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tYmFja2dyb3VuZCl9LmJnLWJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJvcmRlcil9LmJnLWNhcmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jYXJkKX0uYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGVzdHJ1Y3RpdmVcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMTAlLCB0cmFuc3BhcmVudCl9fS5iZy1tdXRlZCwuYmctbXV0ZWRcLzUwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctbXV0ZWRcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZCkgNTAlLCB0cmFuc3BhcmVudCl9fS5iZy1wb3BvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcG9wb3Zlcil9LmJnLXByaW1hcnksLmJnLXByaW1hcnlcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tcHJpbWFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1wcmltYXJ5XC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tcHJpbWFyeSkgMTAlLCB0cmFuc3BhcmVudCl9fS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy1jbGlwLXBhZGRpbmd7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wLTBcLjc1e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC43NSl9LnAtMXtwYWRkaW5nOnZhcigtLXNwYWNpbmcpfS5wLTJ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnAtNHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnB4LTJcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5weC00e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9LnB5LTF7cGFkZGluZy1ibG9jazp2YXIoLS1zcGFjaW5nKX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5weS04e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5weS0xMHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAxMCl9LnB0LTB7cGFkZGluZy10b3A6MH0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucHItOHtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0ucHItMTB7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5wYi0yXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5wbC0xXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnBsLTh7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uYWxpZ24tbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRiBNb25vLENhc2NhZGlhIENvZGUsUm9ib3RvIE1vbm8sQ29uc29sYXMsbW9ub3NwYWNlfS50ZXh0LWJhc2V7Zm9udC1zaXplOnZhcigtLXRleHQtYmFzZSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LWJhc2UtLWxpbmUtaGVpZ2h0KSl9LnRleHQtbGd7Zm9udC1zaXplOnZhcigtLXRleHQtbGcpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1sZy0tbGluZS1oZWlnaHQpKX0udGV4dC1zbXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS50ZXh0LXhse2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXhsKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQteGwtLWxpbmUtaGVpZ2h0KSl9LnRleHQteHN7Zm9udC1zaXplOnZhcigtLXRleHQteHMpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC14cy0tbGluZS1oZWlnaHQpKX0udGV4dC1cWzBcLjhyZW1cXXtmb250LXNpemU6LjhyZW19LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1ub3JtYWx7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy10aWdodHstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXRpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy10aWdodCl9LnRleHQtYmFsYW5jZXt0ZXh0LXdyYXA6YmFsYW5jZX0uYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRleHQtY2FyZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLWNhcmQtZm9yZWdyb3VuZCl9LnRleHQtY2hhcnQtcmVxdWVzdHN7Y29sb3I6dmFyKC0tY2hhcnQtcmVxdWVzdHMpfS50ZXh0LWRlc3RydWN0aXZle2NvbG9yOnZhcigtLWRlc3RydWN0aXZlKX0udGV4dC1mb3JlZ3JvdW5kLC50ZXh0LWZvcmVncm91bmRcLzYwe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1mb3JlZ3JvdW5kXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWZvcmVncm91bmQpIDYwJSwgdHJhbnNwYXJlbnQpfX0udGV4dC1tdXRlZC1mb3JlZ3JvdW5kLC50ZXh0LW11dGVkLWZvcmVncm91bmRcLzYwe2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLW11dGVkLWZvcmVncm91bmQpIDYwJSwgdHJhbnNwYXJlbnQpfX0udGV4dC1wb3BvdmVyLWZvcmVncm91bmR7Y29sb3I6dmFyKC0tcG9wb3Zlci1mb3JlZ3JvdW5kKX0udGV4dC1wcmltYXJ5e2NvbG9yOnZhcigtLXByaW1hcnkpfS50ZXh0LXByaW1hcnktZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQpfS50ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLXNlY29uZGFyeS1mb3JlZ3JvdW5kKX0udGV4dC1zdGF0dXMtd2Fybntjb2xvcjp2YXIoLS1zdGF0dXMtd2Fybil9Lmxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2V9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpIHZhcigtLXR3LXNsYXNoZWQtemVybywpIHZhcigtLXR3LW51bWVyaWMtZmlndXJlLCkgdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCkgdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS51bmRlcmxpbmUtb2Zmc2V0LTR7dGV4dC11bmRlcmxpbmUtb2Zmc2V0OjRweH0uc2hhZG93LW1key0tdHctc2hhZG93OjAgNHB4IDZweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDJweCA0cHggLTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5yaW5nLWZvcmVncm91bmRcLzEwey0tdHctcmluZy1jb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctZm9yZWdyb3VuZFwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZm9yZWdyb3VuZCkgMTAlLCB0cmFuc3BhcmVudCl9fS5vdXRsaW5lLWhpZGRlbnstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9QG1lZGlhIChmb3JjZWQtY29sb3JzOmFjdGl2ZSl7Lm91dGxpbmUtaGlkZGVue291dGxpbmUtb2Zmc2V0OjJweDtvdXRsaW5lOjJweCBzb2xpZCAjMDAwMH19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCkgdmFyKC0tdHctYnJpZ2h0bmVzcywpIHZhcigtLXR3LWNvbnRyYXN0LCkgdmFyKC0tdHctZ3JheXNjYWxlLCkgdmFyKC0tdHctaHVlLXJvdGF0ZSwpIHZhcigtLXR3LWludmVydCwpIHZhcigtLXR3LXNhdHVyYXRlLCkgdmFyKC0tdHctc2VwaWEsKSB2YXIoLS10dy1kcm9wLXNoYWRvdywpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTEwMHstLXR3LWR1cmF0aW9uOi4xczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xc30ub3V0bGluZS1ub25ley0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5ydW5uaW5ne2FuaW1hdGlvbi1wbGF5LXN0YXRlOnJ1bm5pbmd9Lm5vdC1sYXN0XDpib3JkZXItYjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uZ3JvdXAtaGFzLVxbXD5zdmdcXVwvYWxlcnRcOmNvbC1zdGFydC0yOmlzKDp3aGVyZSguZ3JvdXBcL2FsZXJ0KTpoYXMoPnN2ZykgKil7Z3JpZC1jb2x1bW4tc3RhcnQ6Mn0uZ3JvdXAtYXJpYS1leHBhbmRlZFwvYWNjb3JkaW9uLXRyaWdnZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwXC9hY2NvcmRpb24tdHJpZ2dlcilbYXJpYS1leHBhbmRlZD10cnVlXSAqKXtkaXNwbGF5Om5vbmV9Lmdyb3VwLWFyaWEtZXhwYW5kZWRcL2FjY29yZGlvbi10cmlnZ2VyXDppbmxpbmU6aXMoOndoZXJlKC5ncm91cFwvYWNjb3JkaW9uLXRyaWdnZXIpW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gKil7ZGlzcGxheTppbmxpbmV9Lmdyb3VwLWRhdGEtXFtzaXplXD1zbVxdXC9jYXJkXDpwLTM6aXMoOndoZXJlKC5ncm91cFwvY2FyZClbZGF0YS1zaXplPXNtXSAqKXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOnB4LTM6aXMoOndoZXJlKC5ncm91cFwvY2FyZClbZGF0YS1zaXplPXNtXSAqKXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9Lmdyb3VwLWRhdGEtXFtzaXplXD1zbVxdXC9jYXJkXDp0ZXh0LXNtOmlzKDp3aGVyZSguZ3JvdXBcL2NhcmQpW2RhdGEtc2l6ZT1zbV0gKil7Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0uZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5ncm91cC1kYXRhLWhvcml6b250YWxcL3RhYnNcOmgtODppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKil7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6aC1maXQ6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtoZWlnaHQ6Zml0LWNvbnRlbnR9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOnctZnVsbDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICope3dpZHRoOjEwMCV9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmZsZXgtY29sOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKil7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDpqdXN0aWZ5LXN0YXJ0OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKil7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZpbGVcOmlubGluZS1mbGV4OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4fS5maWxlXDpoLTY6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9LmZpbGVcOmJvcmRlci0wOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uZmlsZVw6YmctdHJhbnNwYXJlbnQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmZpbGVcOnRleHQtc206OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXNtKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtc20tLWxpbmUtaGVpZ2h0KSl9LmZpbGVcOmZvbnQtbWVkaXVtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZmlsZVw6dGV4dC1mb3JlZ3JvdW5kOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0ucGxhY2Vob2xkZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9LmFmdGVyXDphYnNvbHV0ZTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO3Bvc2l0aW9uOmFic29sdXRlfS5hZnRlclw6YmctZm9yZWdyb3VuZDphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmFmdGVyXDpvcGFjaXR5LTA6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtvcGFjaXR5OjB9LmFmdGVyXDp0cmFuc2l0aW9uLW9wYWNpdHk6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZ3JvdXAtZGF0YS1ob3Jpem9udGFsXC90YWJzXDphZnRlclw6aW5zZXQteC0wOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2luc2V0LWlubGluZTowfS5ncm91cC1kYXRhLWhvcml6b250YWxcL3RhYnNcOmFmdGVyXDpib3R0b20tXFstNXB4XF06aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7Ym90dG9tOi01cHh9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6YWZ0ZXJcOmgtMFwuNTppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6YWZ0ZXJcOmluc2V0LXktMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7aW5zZXQtYmxvY2s6MH0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6YWZ0ZXJcOi1yaWdodC0xOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEpfS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDphZnRlclw6dy0wXC41OmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctYWNjZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWNjZW50KX0uaG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1kZXN0cnVjdGl2ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmhvdmVyXDpiZy1tdXRlZDpob3ZlciwuaG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1tdXRlZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLW11dGVkKSA1MCUsIHRyYW5zcGFyZW50KX19LmhvdmVyXDpiZy1zZWNvbmRhcnlcLzgwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1zZWNvbmRhcnlcLzgwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1zZWNvbmRhcnkpIDgwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tYWNjZW50LWZvcmVncm91bmQpfS5ob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5ob3Zlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfS5ob3Zlclw6dW5kZXJsaW5lOmhvdmVye3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX19LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mb2N1c1w6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpmb2N1cyw6aXMoLm5vdC1kYXRhLVxbdmFyaWFudFw9ZGVzdHJ1Y3RpdmVcXVw6Zm9jdXNcOlwqXCpcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6bm90KFtkYXRhLXZhcmlhbnQ9ZGVzdHJ1Y3RpdmVdKTpmb2N1cyAqKXtjb2xvcjp2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCl9LmZvY3VzLXZpc2libGVcOmJvcmRlci1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxle2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSA0MCUsIHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOmJvcmRlci1yaW5nOmZvY3VzLXZpc2libGV7Ym9yZGVyLWNvbG9yOnZhcigtLXJpbmcpfS5mb2N1cy12aXNpYmxlXDpyaW5nLTM6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKSAwIDAgMCBjYWxjKDNweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9LmZvY3VzLXZpc2libGVcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6cmluZy1yaW5nXC81MDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjp2YXIoLS1yaW5nKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOnJpbmctcmluZ1wvNTA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1yaW5nKSA1MCUsIHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtcmluZzpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6dmFyKC0tcmluZyl9LmZvY3VzLXZpc2libGVcOmFmdGVyXDpib3JkZXItcmluZzpmb2N1cy12aXNpYmxlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7Ym9yZGVyLWNvbG9yOnZhcigtLXJpbmcpfS5hY3RpdmVcOm5vdC1hcmlhLVxbaGFzcG9wdXBcXVw6dHJhbnNsYXRlLXktcHg6YWN0aXZlOm5vdChbYXJpYS1oYXNwb3B1cF0pey0tdHctdHJhbnNsYXRlLXk6MXB4O3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kaXNhYmxlZFw6cG9pbnRlci1ldmVudHMtbm9uZTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOmJnLWlucHV0XC81MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDpiZy1pbnB1dFwvNTA6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9OndoZXJlKFtkYXRhLXNsb3Q9YnV0dG9uLWdyb3VwXSkgLmluLWRhdGEtXFtzbG90XD1idXR0b24tZ3JvdXBcXVw6cm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtZW5kXF1cOnByLTE6aGFzKFtkYXRhLWljb249aW5saW5lLWVuZF0pe3BhZGRpbmctcmlnaHQ6dmFyKC0tc3BhY2luZyl9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLWVuZFxdXDpwci0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1lbmRdKXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1lbmRcXVw6cHItMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtZW5kXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLXN0YXJ0XF1cOnBsLTE6aGFzKFtkYXRhLWljb249aW5saW5lLXN0YXJ0XSl7cGFkZGluZy1sZWZ0OnZhcigtLXNwYWNpbmcpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1zdGFydFxdXDpwbC0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1zdGFydF0pe3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtc3RhcnRcXVw6cGwtMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtc3RhcnRdKXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5oYXMtZGF0YS1cW3Nsb3RcPWFsZXJ0LWFjdGlvblxdXDpyZWxhdGl2ZTpoYXMoW2RhdGEtc2xvdD1hbGVydC1hY3Rpb25dKXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFzLWRhdGEtXFtzbG90XD1hbGVydC1hY3Rpb25cXVw6cHItMTg6aGFzKFtkYXRhLXNsb3Q9YWxlcnQtYWN0aW9uXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTgpfS5oYXMtZGF0YS1cW3Nsb3RcPWNhcmQtYWN0aW9uXF1cOmdyaWQtY29scy1cWzFmcl9hdXRvXF06aGFzKFtkYXRhLXNsb3Q9Y2FyZC1hY3Rpb25dKXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG99Lmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1kZXNjcmlwdGlvblxdXDpncmlkLXJvd3MtXFthdXRvX2F1dG9cXTpoYXMoW2RhdGEtc2xvdD1jYXJkLWRlc2NyaXB0aW9uXSl7Z3JpZC10ZW1wbGF0ZS1yb3dzOmF1dG8gYXV0b30uaGFzLWRhdGEtXFtzbG90XD1jYXJkLWZvb3RlclxdXDpwYi0wOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH0uaGFzLVxbXD5pbWdcOmZpcnN0LWNoaWxkXF1cOnB0LTA6aGFzKD5pbWc6Zmlyc3QtY2hpbGQpe3BhZGRpbmctdG9wOjB9Lmhhcy1cW1w+c3ZnXF1cOmdyaWQtY29scy1cW2F1dG9fMWZyXF06aGFzKD5zdmcpe2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmcn0uaGFzLVxbXD5zdmdcXVw6Z2FwLXgtMjpoYXMoPnN2Zyl7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LmFyaWEtZXhwYW5kZWRcOmJnLW11dGVkW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmFyaWEtZXhwYW5kZWRcOmJnLXNlY29uZGFyeVthcmlhLWV4cGFuZGVkPXRydWVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX0uYXJpYS1leHBhbmRlZFw6dGV4dC1mb3JlZ3JvdW5kW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmFyaWEtZXhwYW5kZWRcOnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmRbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjp2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCl9LmFyaWEtaW52YWxpZFw6Ym9yZGVyLWRlc3RydWN0aXZlW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfS5hcmlhLWludmFsaWRcOnJpbmctM1thcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygzcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5hcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC8yMFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uZGF0YS1wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kW2RhdGEtcGxhY2Vob2xkZXJde2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfS5kYXRhLVxbYWxpZ24tdHJpZ2dlclw9dHJ1ZVxdXDphbmltYXRlLW5vbmVbZGF0YS1hbGlnbi10cmlnZ2VyPXRydWVde2FuaW1hdGlvbjpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6cG9pbnRlci1ldmVudHMtbm9uZVtkYXRhLWRpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6b3BhY2l0eS01MFtkYXRhLWRpc2FibGVkXXtvcGFjaXR5Oi41fS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDpoLVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpW2RhdGEtcG9zaXRpb249cG9wcGVyXXtoZWlnaHQ6dmFyKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpfS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDp3LWZ1bGxbZGF0YS1wb3NpdGlvbj1wb3BwZXJde3dpZHRoOjEwMCV9LmRhdGEtXFtwb3NpdGlvblw9cG9wcGVyXF1cOm1pbi13LVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoXClbZGF0YS1wb3NpdGlvbj1wb3BwZXJde21pbi13aWR0aDp2YXIoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoKX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDp0cmFuc2xhdGUteS0xW2RhdGEtc2lkZT1ib3R0b21dey0tdHctdHJhbnNsYXRlLXk6dmFyKC0tc3BhY2luZyk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtZW5kXF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1pbmxpbmUtZW5kXXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtc3RhcnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1pbmxpbmUtc3RhcnRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6LXRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPWxlZnRdey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1sZWZ0XXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSl9LmRhdGEtXFtzaWRlXD1yaWdodFxdXDp0cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1yaWdodF17LS10dy10cmFuc2xhdGUteDp2YXIoLS1zcGFjaW5nKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXJpZ2h0XF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1yaWdodF17LS10dy1lbnRlci10cmFuc2xhdGUteDpjYWxjKDIqdmFyKC0tc3BhY2luZykqLTEpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOi10cmFuc2xhdGUteS0xW2RhdGEtc2lkZT10b3Bdey0tdHctdHJhbnNsYXRlLXk6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpemVcPWRlZmF1bHRcXVw6aC04W2RhdGEtc2l6ZT1kZWZhdWx0XXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5kYXRhLVxbc2l6ZVw9c21cXVw6aC03W2RhdGEtc2l6ZT1zbV17aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uZGF0YS1cW3NpemVcPXNtXF1cOmdhcC0zW2RhdGEtc2l6ZT1zbV17Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTBweFwpXF1bZGF0YS1zaXplPXNtXXtib3JkZXItcmFkaXVzOm1pbih2YXIoLS1yYWRpdXMtbWQpLCAxMHB4KX0uZGF0YS1cW3NpemVcPXNtXF1cOnB5LTNbZGF0YS1zaXplPXNtXXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1mb290ZXJcXVw6cGItMFtkYXRhLXNpemU9c21dOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH06aXMoLlwqXCpcOmRhdGEtXFtzbG90XD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXF1cOm1sLWF1dG8gKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de21hcmdpbi1sZWZ0OmF1dG99OmlzKC5cKlwqXDpkYXRhLVxbc2xvdFw9YWNjb3JkaW9uLXRyaWdnZXItaWNvblxdXDpzaXplLTQgKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfTppcyguXCpcKlw6ZGF0YS1cW3Nsb3RcPWFjY29yZGlvbi10cmlnZ2VyLWljb25cXVw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kICopW2RhdGEtc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXXtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9YWxlcnQtZGVzY3JpcHRpb25cXVw6dGV4dC1kZXN0cnVjdGl2ZVwvOTA+KilbZGF0YS1zbG90PWFsZXJ0LWRlc2NyaXB0aW9uXXtjb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LWRlc3RydWN0aXZlXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDkwJSwgdHJhbnNwYXJlbnQpfX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOmxpbmUtY2xhbXAtMT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXstd2Via2l0LWxpbmUtY2xhbXA6MTstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7ZGlzcGxheTotd2Via2l0LWJveDtvdmVyZmxvdzpoaWRkZW59OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpmbGV4PiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVde2Rpc3BsYXk6ZmxleH06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOml0ZW1zLWNlbnRlcj4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXthbGlnbi1pdGVtczpjZW50ZXJ9OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpnYXAtMVwuNT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmRhdGEtXFtzdGF0ZVw9c2VsZWN0ZWRcXVw6YmctbXV0ZWRbZGF0YS1zdGF0ZT1zZWxlY3RlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmRhdGEtXFt2YXJpYW50XD1saW5lXF1cOnJvdW5kZWQtbm9uZVtkYXRhLXZhcmlhbnQ9bGluZV17Ym9yZGVyLXJhZGl1czowfUBtZWRpYSAod2lkdGg+PTQwcmVtKXsuc21cOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy00e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCxtaW5tYXgoMCwxZnIpKX0uc21cOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uc21cOml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LnNtXDpqdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnNtXDpweC02e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX19QG1lZGlhICh3aWR0aD49NDhyZW0pey5tZFw6dGV4dC1zbXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5tZFw6dGV4dC1wcmV0dHl7dGV4dC13cmFwOnByZXR0eX19QG1lZGlhICh3aWR0aD49NjRyZW0pey5sZ1w6cHgtOHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6dmFyKC0taW5wdXQpfS5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6dGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5kYXJrXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzMwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8zMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6aG92ZXJcOmJnLWlucHV0XC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmhvdmVyXDpiZy1pbnB1dFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmhvdmVyXDpiZy1tdXRlZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZCkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNDAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpkaXNhYmxlZFw6YmctaW5wdXRcLzgwOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGlzYWJsZWRcOmJnLWlucHV0XC84MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDgwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDphcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzQwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC80MFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX19LmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246ZW50ZXIgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4xNXMpKXZhcigtLXR3LWVhc2UsZWFzZSl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6ZmFkZS1pbi0wOndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDpmYWRlLWluLTA6d2hlcmUoW2RhdGEtb3Blbl06bm90KFtkYXRhLW9wZW49ZmFsc2VdKSl7LS10dy1lbnRlci1vcGFjaXR5OjB9LmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXstLXR3LWVudGVyLXNjYWxlOi45NX0uZGF0YS1jbG9zZWRcOmFuaW1hdGUtYWNjb3JkaW9uLXVwOndoZXJlKFtkYXRhLXN0YXRlPWNsb3NlZF0pLC5kYXRhLWNsb3NlZFw6YW5pbWF0ZS1hY2NvcmRpb24tdXA6d2hlcmUoW2RhdGEtY2xvc2VkXTpub3QoW2RhdGEtY2xvc2VkPWZhbHNlXSkpe2FuaW1hdGlvbjphY2NvcmRpb24tdXAgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtY2xvc2VkXDphbmltYXRlLW91dDp3aGVyZShbZGF0YS1zdGF0ZT1jbG9zZWRdKSwuZGF0YS1jbG9zZWRcOmFuaW1hdGUtb3V0OndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXthbmltYXRpb246ZXhpdCB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjE1cykpdmFyKC0tdHctZWFzZSxlYXNlKXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1jbG9zZWRcOmZhZGUtb3V0LTA6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDpmYWRlLW91dC0wOndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXstLXR3LWV4aXQtb3BhY2l0eTowfS5kYXRhLWNsb3NlZFw6em9vbS1vdXQtOTU6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDp6b29tLW91dC05NTp3aGVyZShbZGF0YS1jbG9zZWRdOm5vdChbZGF0YS1jbG9zZWQ9ZmFsc2VdKSl7LS10dy1leGl0LXNjYWxlOi45NX0uZGF0YS1hY3RpdmVcOmJnLWJhY2tncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhdGEtYWN0aXZlXDpiZy1iYWNrZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpfS5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWRlZmF1bHRcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6c2hhZG93LXNtOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWRlZmF1bHRdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9ZGVmYXVsdFxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctc206aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9ZGVmYXVsdF0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9Lmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOnNoYWRvdy1ub25lOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctbm9uZTppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7LS10dy1zaGFkb3c6MCAwICMwMDAwO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9OmlzKC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDphZnRlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmFmdGVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSkpOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7b3BhY2l0eToxfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JvcmRlci1jb2xvcjp2YXIoLS1pbnB1dCl9LmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSAzMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpib3JkZXItdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJvcmRlci10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7Ym9yZGVyLWNvbG9yOiMwMDAwfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6Z3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9fS5kYXRhLWhvcml6b250YWxcOmZsZXgtY29sOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LlxbXCZfYVxdXDp1bmRlcmxpbmUgYXt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LlxbXCZfYVxdXDp1bmRlcmxpbmUtb2Zmc2V0LTMgYXt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6M3B4fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW1wmX2FcXVw6aG92ZXJcOnRleHQtZm9yZWdyb3VuZCBhOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uXFtcJl9wXDpub3RcKFw6bGFzdC1jaGlsZFwpXF1cOm1iLTQgcDpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5cW1wmX3N2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lIHN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmX3N2Z1xdXDpzaHJpbmstMCBzdmd7ZmxleC1zaHJpbms6MH0uXFtcJl9zdmdcOm5vdFwoXFtjbGFzc1wqXD1zaXplLVxdXClcXVw6c2l6ZS0zIHN2Zzpub3QoW2NsYXNzKj1zaXplLV0pe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTNcLjUgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTQgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZfdHJcXVw6Ym9yZGVyLWIgdHJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5cW1wmX3RyXDpsYXN0LWNoaWxkXF1cOmJvcmRlci0wIHRyOmxhc3QtY2hpbGR7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LlxbXCZcOmhhc1woXFtyb2xlXD1jaGVja2JveFxdXClcXVw6cHItMDpoYXMoW3JvbGU9Y2hlY2tib3hdKXtwYWRkaW5nLXJpZ2h0OjB9LlxbXC5ib3JkZXItYlxdXDpwYi00LmJvcmRlci1ie3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOlxbXC5ib3JkZXItYlxdXDpwYi0zOmlzKDp3aGVyZSguZ3JvdXBcL2NhcmQpW2RhdGEtc2l6ZT1zbV0gKikuYm9yZGVyLWJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW2FcXVw6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYVxdXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMjAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOmJnLW11dGVkOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfS5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcHJpbWFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1wcmltYXJ5KSA4MCUsIHRyYW5zcGFyZW50KX19LlxbYVxdXDpob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNlY29uZGFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDppcyhhKTpob3Zlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX19OmlzKC5cKlw6XFtpbWdcOmZpcnN0LWNoaWxkXF1cOnJvdW5kZWQtdC14bD4qKTppcyhpbWc6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfTppcyguXCpcOlxbaW1nXDpsYXN0LWNoaWxkXF1cOnJvdW5kZWQtYi14bD4qKTppcyhpbWc6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOmZsZXg+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtkaXNwbGF5OmZsZXh9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOml0ZW1zLWNlbnRlcj4qKTppcyhzcGFuKTpsYXN0LWNoaWxke2FsaWduLWl0ZW1zOmNlbnRlcn06aXMoLlwqXDpcW3NwYW5cXVw6bGFzdFw6Z2FwLTI+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfTppcyguXCpcOlxbc3ZnXF1cOnJvdy1zcGFuLTI+Kik6aXMoc3ZnKXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyfTppcyguXCpcOlxbc3ZnXF1cOnRyYW5zbGF0ZS15LTBcLjU+Kik6aXMoc3ZnKXstLXR3LXRyYW5zbGF0ZS15OmNhbGModmFyKC0tc3BhY2luZykgKiAuNSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9OmlzKC5cKlw6XFtzdmdcXVw6dGV4dC1jdXJyZW50PiopOmlzKHN2Zyl7Y29sb3I6Y3VycmVudENvbG9yfTppcyguXCpcOlxbc3ZnXDpub3RcKFxbY2xhc3NcKlw9c2l6ZS1cXVwpXF1cOnNpemUtND4qKTppcyhzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZcPnN2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lPnN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmXD5zdmdcXVw6c2l6ZS0zXCE+c3Zne3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnQ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnR9LlxbXCZcPnRyXF1cOmxhc3RcOmJvcmRlci1iLTA+dHI6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDowfX1AcHJvcGVydHkgLS10dy1hbmltYXRpb24tZGVsYXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjBzfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOm5vcm1hbH1AcHJvcGVydHkgLS10dy1hbmltYXRpb24tZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1hbmltYXRpb24tZmlsbC1tb2Rle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpub25lfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZW50ZXItYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1lbnRlci1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1lbnRlci1zY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1lbnRlci10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1lbnRlci10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1leGl0LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZXhpdC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWV4aXQtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtc2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZXhpdC10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1leGl0LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLXR7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtYntzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1ze3N5bnRheDoiPGxlbmd0aC1wZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLWV7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtbWFza3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXNoaW1tZXItYW5nbGV7c3ludGF4OiI8YW5nbGU+Ijtpbmhlcml0czp0cnVlO2luaXRpYWwtdmFsdWU6MjBkZWd9QHByb3BlcnR5IC0tc2hpbW1lci1pbWFnZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXNoaW1tZXItdGV4dC1maWxse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnNoaW1tZXJ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6Y3VycmVudENvbG9yO2JhY2tncm91bmQtaW1hZ2U6bm9uZTthbmltYXRpb246bm9uZX19OnJvb3R7LS1iYWNrZ3JvdW5kOm9rbGNoKDk5JSAuMDA0IDc1KTstLWZvcmVncm91bmQ6b2tsY2goMTklIC4wMTIgNzUpOy0tY2FyZDpva2xjaCg5OS41JSAuMDAzIDc1KTstLWNhcmQtZm9yZWdyb3VuZDpva2xjaCgxOSUgLjAxMiA3NSk7LS1wb3BvdmVyOm9rbGNoKDk5LjUlIC4wMDMgNzUpOy0tcG9wb3Zlci1mb3JlZ3JvdW5kOm9rbGNoKDE5JSAuMDEyIDc1KTstLXByaW1hcnk6b2tsY2goNDYlIC4wOSAyMDApOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOm9rbGNoKDk4JSAuMDA2IDIwMCk7LS1zZWNvbmRhcnk6b2tsY2goOTUlIC4wMDYgNzUpOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6b2tsY2goMjIlIC4wMSA3NSk7LS1tdXRlZDpva2xjaCg5NSUgLjAwNiA3NSk7LS1tdXRlZC1mb3JlZ3JvdW5kOm9rbGNoKDQ4JSAuMDEyIDc1KTstLWFjY2VudDpva2xjaCg5MyUgLjAyIDIwMCk7LS1hY2NlbnQtZm9yZWdyb3VuZDpva2xjaCgyOCUgLjA1IDIwMCk7LS1kZXN0cnVjdGl2ZTpva2xjaCg1NSUgLjIgMjUpOy0tYm9yZGVyOm9rbGNoKDkwJSAuMDA3IDc1KTstLWlucHV0Om9rbGNoKDkwJSAuMDA3IDc1KTstLXJpbmc6b2tsY2goNTUlIC4wOSAyMDApOy0tcmFkaXVzOi4zNzVyZW07LS1jaGFydC1yZXF1ZXN0czojMDA5ZTczOy0tY2hhcnQtdG9rZW5zLWluOiMwMDcyYjI7LS1jaGFydC10b2tlbnMtb3V0OiNlNjlmMDA7LS1jaGFydC1jb3N0OiNkNTVlMDA7LS1zdGF0dXMtd2FybjojYTM1YzAwfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OnJvb3R7LS1iYWNrZ3JvdW5kOm9rbGNoKDE3JSAuMDA3IDc1KTstLWZvcmVncm91bmQ6b2tsY2goOTUlIC4wMDUgNzUpOy0tY2FyZDpva2xjaCgyMSUgLjAwOSA3NSk7LS1jYXJkLWZvcmVncm91bmQ6b2tsY2goOTUlIC4wMDUgNzUpOy0tcG9wb3Zlcjpva2xjaCgyMSUgLjAwOSA3NSk7LS1wb3BvdmVyLWZvcmVncm91bmQ6b2tsY2goOTUlIC4wMDUgNzUpOy0tcHJpbWFyeTpva2xjaCg3NCUgLjExIDIwMCk7LS1wcmltYXJ5LWZvcmVncm91bmQ6b2tsY2goMTYlIC4wMTIgMjAwKTstLXNlY29uZGFyeTpva2xjaCgyNyUgLjAxMSA3NSk7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDpva2xjaCg5MyUgLjAwNSA3NSk7LS1tdXRlZDpva2xjaCgyNyUgLjAxMSA3NSk7LS1tdXRlZC1mb3JlZ3JvdW5kOm9rbGNoKDY4JSAuMDEyIDc1KTstLWFjY2VudDpva2xjaCgzMiUgLjAzNSAyMDApOy0tYWNjZW50LWZvcmVncm91bmQ6b2tsY2goOTElIC4wMyAyMDApOy0tZGVzdHJ1Y3RpdmU6b2tsY2goNjglIC4xOSAyNSk7LS1ib3JkZXI6b2tsY2goMTAwJSAwIDAvLjEyKTstLWlucHV0Om9rbGNoKDEwMCUgMCAwLy4xNik7LS1yaW5nOm9rbGNoKDYyJSAuMSAyMDApOy0tY2hhcnQtcmVxdWVzdHM6IzE2Yjg5MTstLWNoYXJ0LXRva2Vucy1pbjojNDA5OGQ3Oy0tY2hhcnQtdG9rZW5zLW91dDojZjBhYzFmOy0tY2hhcnQtY29zdDojZTg3NjNhOy0tc3RhdHVzLXdhcm46I2YwYWMxZn19QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250ZW50e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToiIn1Aa2V5ZnJhbWVzIGVudGVyezAle29wYWNpdHk6dmFyKC0tdHctZW50ZXItb3BhY2l0eSwxKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QodmFyKC0tdHctZW50ZXItdHJhbnNsYXRlLXgsMCksdmFyKC0tdHctZW50ZXItdHJhbnNsYXRlLXksMCksMClzY2FsZTNkKHZhcigtLXR3LWVudGVyLXNjYWxlLDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLDEpKXJvdGF0ZSh2YXIoLS10dy1lbnRlci1yb3RhdGUsMCkpO2ZpbHRlcjpibHVyKHZhcigtLXR3LWVudGVyLWJsdXIsMCkpfX1Aa2V5ZnJhbWVzIGV4aXR7dG97b3BhY2l0eTp2YXIoLS10dy1leGl0LW9wYWNpdHksMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWV4aXQtdHJhbnNsYXRlLXgsMCksdmFyKC0tdHctZXhpdC10cmFuc2xhdGUteSwwKSwwKXNjYWxlM2QodmFyKC0tdHctZXhpdC1zY2FsZSwxKSx2YXIoLS10dy1leGl0LXNjYWxlLDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsMSkpcm90YXRlKHZhcigtLXR3LWV4aXQtcm90YXRlLDApKTtmaWx0ZXI6Ymx1cih2YXIoLS10dy1leGl0LWJsdXIsMCkpfX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yZWthLWFjY29yZGlvbi1jb250ZW50LWhlaWdodCx2YXIoLS1hY2NvcmRpb24tcGFuZWwtaGVpZ2h0LGF1dG8pKX19QGtleWZyYW1lcyBhY2NvcmRpb24tdXB7MCV7aGVpZ2h0OnZhcigtLXJla2EtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0LHZhcigtLWFjY29yZGlvbi1wYW5lbC1oZWlnaHQsYXV0bykpfXRve2hlaWdodDowfX0K", ), }, + "index-ejKTZZdx.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/e30pKTp0fWZ1bmN0aW9uIFFhKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0dXJuIGU7bGV0IG49bChPYmplY3QuY3JlYXRlKG51bGwpLGUpO2ZvcihsZXQgciBpbiB0KW5bcl09WWEoZVtyXSx0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiAkYSgpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOm8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIGVvPTA7ZnVuY3Rpb24gdG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyPW51bGwpe3Yobil8fChuPWwoe30sbikpLHIhPW51bGwmJiF4KHIpJiYocj1udWxsKTtsZXQgaT0kYSgpLGE9bmV3IFdlYWtTZXQsbz1bXSxzPSExLGM9aS5hcHA9e191aWQ6ZW8rKyxfY29tcG9uZW50Om4sX3Byb3BzOnIsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjphYyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmlnKGUpe30sdXNlKGUsLi4udCl7cmV0dXJuIGEuaGFzKGUpfHwoZSYmdihlLmluc3RhbGwpPyhhLmFkZChlKSxlLmluc3RhbGwoYywuLi50KSk6dihlKSYmKGEuYWRkKGUpLGUoYywuLi50KSkpLGN9LG1peGluKGUpe3JldHVybiBpLm1peGlucy5pbmNsdWRlcyhlKXx8aS5taXhpbnMucHVzaChlKSxjfSxjb21wb25lbnQoZSx0KXtyZXR1cm4gdD8oaS5jb21wb25lbnRzW2VdPXQsYyk6aS5jb21wb25lbnRzW2VdfSxkaXJlY3RpdmUoZSx0KXtyZXR1cm4gdD8oaS5kaXJlY3RpdmVzW2VdPXQsYyk6aS5kaXJlY3RpdmVzW2VdfSxtb3VudChhLG8sbCl7aWYoIXMpe2xldCB1PWMuX2NlVk5vZGV8fEgobixyKTtyZXR1cm4gdS5hcHBDb250ZXh0PWksbD09PSEwP2w9YHN2Z2A6bD09PSExJiYobD12b2lkIDApLG8mJnQ/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+VG4oZSx0LFZzKTtmdW5jdGlvbiB0YyhlLHQsbil7dHJ5e21zKC0xKTtsZXQgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPT09Mj94KHQpJiYhcCh0KT9ncyh0KT9IKGUsbnVsbCxbdF0pOkgoZSx0KTpIKGUsbnVsbCx0KToocj4zP249QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOnI9PT0zJiZncyhuKSYmKG49W25dKSxIKGUsdCxuKSl9ZmluYWxseXttcygxKX19ZnVuY3Rpb24gbmMoKXt9ZnVuY3Rpb24gcmMoZSx0LG4scil7bGV0IGk9bltyXTtpZihpJiZpYyhpLGUpKXJldHVybiBpO2xldCBhPXQoKTtyZXR1cm4gYS5tZW1vPWUuc2xpY2UoKSxhLmNhY2hlSW5kZXg9cixuW3JdPWF9ZnVuY3Rpb24gaWMoZSx0KXtsZXQgbj1lLm1lbW87aWYobi5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKEQobltlXSx0W2VdKSlyZXR1cm4hMTtyZXR1cm4gcHM+MCYmZHMmJmRzLnB1c2goZSksITB9dmFyIGFjPWAzLjUuNDFgLG9jPWEsc2M9Qm4sY2M9c3IsbGM9bHIsdWM9e2NyZWF0ZUNvbXBvbmVudEluc3RhbmNlOk5zLHNldHVwQ29tcG9uZW50OkhzLHJlbmRlckNvbXBvbmVudFJvb3Q6bG8sc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlOmZyLGlzVk5vZGU6Z3Msbm9ybWFsaXplVk5vZGU6RXMsZ2V0Q29tcG9uZW50UHVibGljSW5zdGFuY2U6UXMsZW5zdXJlVmFsaWRWTm9kZTpnYSxwdXNoV2FybmluZ0NvbnRleHQ6SW4scG9wV2FybmluZ0NvbnRleHQ6TG59LGRjPXZvaWQgMCxmYz10eXBlb2Ygd2luZG93PGB1YCYmd2luZG93LnRydXN0ZWRUeXBlcztpZihmYyl0cnl7ZGM9ZmMuY3JlYXRlUG9saWN5KGB2dWVgLHtjcmVhdGVIVE1MOmU9PmV9KX1jYXRjaHt9dmFyIHBjPWRjP2U9PmRjLmNyZWF0ZUhUTUwoZSk6ZT0+ZSxtYz1gaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLGhjPWBodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MYCxnYz10eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwsX2M9Z2MmJmdjLmNyZWF0ZUVsZW1lbnQoYHRlbXBsYXRlYCksdmM9e2luc2VydDooZSx0LG4pPT57dC5pbnNlcnRCZWZvcmUoZSxufHxudWxsKX0scmVtb3ZlOmU9PntsZXQgdD1lLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZChlKX0sY3JlYXRlRWxlbWVudDooZSx0LG4scik9PntsZXQgaT10PT09YHN2Z2A/Z2MuY3JlYXRlRWxlbWVudE5TKG1jLGUpOnQ9PT1gbWF0aG1sYD9nYy5jcmVhdGVFbGVtZW50TlMoaGMsZSk6bj9nYy5jcmVhdGVFbGVtZW50KGUse2lzOm59KTpnYy5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT09YHNlbGVjdGAmJnImJnIubXVsdGlwbGUhPW51bGwmJmkuc2V0QXR0cmlidXRlKGBtdWx0aXBsZWAsci5tdWx0aXBsZSksaX0sY3JlYXRlVGV4dDplPT5nYy5jcmVhdGVUZXh0Tm9kZShlKSxjcmVhdGVDb21tZW50OmU9PmdjLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSx0KT0+e2Uubm9kZVZhbHVlPXR9LHNldEVsZW1lbnRUZXh0OihlLHQpPT57ZS50ZXh0Q29udGVudD10fSxwYXJlbnROb2RlOmU9PmUucGFyZW50Tm9kZSxuZXh0U2libGluZzplPT5lLm5leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+Z2MucXVlcnlTZWxlY3RvcihlKSxzZXRTY29wZUlkKGUsdCl7ZS5zZXRBdHRyaWJ1dGUodCxgYCl9LGluc2VydFN0YXRpY0NvbnRlbnQoZSx0LG4scixpLGEpe2xldCBvPW4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGQ7aWYoaSYmKGk9PT1hfHxpLm5leHRTaWJsaW5nKSlmb3IoO3QuaW5zZXJ0QmVmb3JlKGkuY2xvbmVOb2RlKCEwKSxuKSwhKGk9PT1hfHwhKGk9aS5uZXh0U2libGluZykpOyk7ZWxzZXtfYy5pbm5lckhUTUw9cGMocj09PWBzdmdgP2A8c3ZnPiR7ZX08L3N2Zz5gOnI9PT1gbWF0aG1sYD9gPG1hdGg+JHtlfTwvbWF0aD5gOmUpO2xldCBpPV9jLmNvbnRlbnQ7aWYocj09PWBzdmdgfHxyPT09YG1hdGhtbGApe2xldCBlPWkuZmlyc3RDaGlsZDtmb3IoO2UuZmlyc3RDaGlsZDspaS5hcHBlbmRDaGlsZChlLmZpcnN0Q2hpbGQpO2kucmVtb3ZlQ2hpbGQoZSl9dC5pbnNlcnRCZWZvcmUoaSxuKX1yZXR1cm5bbz9vLm5leHRTaWJsaW5nOnQuZmlyc3RDaGlsZCxuP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkXX19LHljPWB0cmFuc2l0aW9uYCxiYz1gYW5pbWF0aW9uYCx4Yz1TeW1ib2woYF92dGNgKSxTYz17bmFtZTpTdHJpbmcsdHlwZTpTdHJpbmcsY3NzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sZHVyYXRpb246W1N0cmluZyxOdW1iZXIsT2JqZWN0XSxlbnRlckZyb21DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsZW50ZXJUb0NsYXNzOlN0cmluZyxhcHBlYXJGcm9tQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxsZWF2ZUZyb21DbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZ30sQ2M9bCh7fSxKcixTYyksd2M9KGU9PihlLmRpc3BsYXlOYW1lPWBUcmFuc2l0aW9uYCxlLnByb3BzPUNjLGUpKSgoZSx7c2xvdHM6dH0pPT50YyhRcixEYyhlKSx0KSksVGM9KGUsdD1bXSk9PntwKGUpP2UuZm9yRWFjaChlPT5lKC4uLnQpKTplJiZlKC4uLnQpfSxFYz1lPT5lP3AoZSk/ZS5zb21lKGU9PmUubGVuZ3RoPjEpOmUubGVuZ3RoPjE6ITE7ZnVuY3Rpb24gRGMoZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGUpbiBpbiBTY3x8KHRbbl09ZVtuXSk7aWYoZS5jc3M9PT0hMSlyZXR1cm4gdDtsZXR7bmFtZTpuPWB2YCx0eXBlOnIsZHVyYXRpb246aSxlbnRlckZyb21DbGFzczphPWAke259LWVudGVyLWZyb21gLGVudGVyQWN0aXZlQ2xhc3M6bz1gJHtufS1lbnRlci1hY3RpdmVgLGVudGVyVG9DbGFzczpzPWAke259LWVudGVyLXRvYCxhcHBlYXJGcm9tQ2xhc3M6Yz1hLGFwcGVhckFjdGl2ZUNsYXNzOnU9byxhcHBlYXJUb0NsYXNzOmQ9cyxsZWF2ZUZyb21DbGFzczpmPWAke259LWxlYXZlLWZyb21gLGxlYXZlQWN0aXZlQ2xhc3M6cD1gJHtufS1sZWF2ZS1hY3RpdmVgLGxlYXZlVG9DbGFzczptPWAke259LWxlYXZlLXRvYH09ZSxoPU9jKGkpLGc9aCYmaFswXSxfPWgmJmhbMV0se29uQmVmb3JlRW50ZXI6dixvbkVudGVyOnksb25FbnRlckNhbmNlbGxlZDpiLG9uTGVhdmU6eCxvbkxlYXZlQ2FuY2VsbGVkOlMsb25CZWZvcmVBcHBlYXI6Qz12LG9uQXBwZWFyOnc9eSxvbkFwcGVhckNhbmNlbGxlZDplZT1ifT10LHRlPShlLHQsbixyKT0+e2UuX2VudGVyQ2FuY2VsbGVkPXIsamMoZSx0P2Q6cyksamMoZSx0P3U6byksbiYmbigpfSxUPShlLHQpPT57ZS5faXNMZWF2aW5nPSExLGpjKGUsZiksamMoZSxtKSxqYyhlLHApLHQmJnQoKX0sbmU9ZT0+KHQsbik9PntsZXQgaT1lP3c6eSxvPSgpPT50ZSh0LGUsbik7VGMoaSxbdCxvXSksTWMoKCk9PntqYyh0LGU/YzphKSxBYyh0LGU/ZDpzKSxFYyhpKXx8UGModCxyLGcsbyl9KX07cmV0dXJuIGwodCx7b25CZWZvcmVFbnRlcihlKXtUYyh2LFtlXSksQWMoZSxhKSxBYyhlLG8pfSxvbkJlZm9yZUFwcGVhcihlKXtUYyhDLFtlXSksQWMoZSxjKSxBYyhlLHUpfSxvbkVudGVyOm5lKCExKSxvbkFwcGVhcjpuZSghMCksb25MZWF2ZShlLHQpe2UuX2lzTGVhdmluZz0hMDtsZXQgbj0oKT0+VChlLHQpO0FjKGUsZiksZS5fZW50ZXJDYW5jZWxsZWQ/KEFjKGUscCksUmMoZSkpOihSYyhlKSxBYyhlLHApKSxNYygoKT0+e2UuX2lzTGVhdmluZyYmKGpjKGUsZiksQWMoZSxtKSxFYyh4KXx8UGMoZSxyLF8sbikpfSksVGMoeCxbZSxuXSl9LG9uRW50ZXJDYW5jZWxsZWQoZSl7dGUoZSwhMSx2b2lkIDAsITApLFRjKGIsW2VdKX0sb25BcHBlYXJDYW5jZWxsZWQoZSl7dGUoZSwhMCx2b2lkIDAsITApLFRjKGVlLFtlXSl9LG9uTGVhdmVDYW5jZWxsZWQoZSl7VChlKSxUYyhTLFtlXSl9fSl9ZnVuY3Rpb24gT2MoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih4KGUpKXJldHVybltrYyhlLmVudGVyKSxrYyhlLmxlYXZlKV07e2xldCB0PWtjKGUpO3JldHVyblt0LHRdfX1mdW5jdGlvbiBrYyhlKXtyZXR1cm4gZmUoZSl9ZnVuY3Rpb24gQWMoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LmFkZCh0KSksKGVbeGNdfHwoZVt4Y109bmV3IFNldCkpLmFkZCh0KX1mdW5jdGlvbiBqYyhlLHQpe3Quc3BsaXQoL1xzKy8pLmZvckVhY2godD0+dCYmZS5jbGFzc0xpc3QucmVtb3ZlKHQpKTtsZXQgbj1lW3hjXTtuJiYobi5kZWxldGUodCksbi5zaXplfHwoZVt4Y109dm9pZCAwKSl9ZnVuY3Rpb24gTWMoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfSl9dmFyIE5jPTA7ZnVuY3Rpb24gUGMoZSx0LG4scil7bGV0IGk9ZS5fZW5kSWQ9KytOYyxhPSgpPT57aT09PWUuX2VuZElkJiZyKCl9O2lmKG4hPW51bGwpcmV0dXJuIHNldFRpbWVvdXQoYSxuKTtsZXR7dHlwZTpvLHRpbWVvdXQ6cyxwcm9wQ291bnQ6Y309RmMoZSx0KTtpZighbylyZXR1cm4gcigpO2xldCBsPW8rYGVuZGAsdT0wLGQ9KCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxmKSxhKCl9LGY9dD0+e3QudGFyZ2V0PT09ZSYmKyt1Pj1jJiZkKCl9O3NldFRpbWVvdXQoKCk9Pnt1PGMmJmQoKX0scysxKSxlLmFkZEV2ZW50TGlzdGVuZXIobCxmKX1mdW5jdGlvbiBGYyhlLHQpe2xldCBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLHI9ZT0+KG5bZV18fGBgKS5zcGxpdChgLCBgKSxpPXIoYCR7eWN9RGVsYXlgKSxhPXIoYCR7eWN9RHVyYXRpb25gKSxvPUljKGksYSkscz1yKGAke2JjfURlbGF5YCksYz1yKGAke2JjfUR1cmF0aW9uYCksbD1JYyhzLGMpLHU9bnVsbCxkPTAsZj0wO3Q9PT15Yz9vPjAmJih1PXljLGQ9byxmPWEubGVuZ3RoKTp0PT09YmM/bD4wJiYodT1iYyxkPWwsZj1jLmxlbmd0aCk6KGQ9TWF0aC5tYXgobyxsKSx1PWQ+MD9vPmw/eWM6YmM6bnVsbCxmPXU/dT09PXljP2EubGVuZ3RoOmMubGVuZ3RoOjApO2xldCBwPXU9PT15YyYmL1xiKD86dHJhbnNmb3JtfGFsbCkoPzosfCQpLy50ZXN0KHIoYCR7eWN9UHJvcGVydHlgKS50b1N0cmluZygpKTtyZXR1cm57dHlwZTp1LHRpbWVvdXQ6ZCxwcm9wQ291bnQ6ZixoYXNUcmFuc2Zvcm06cH19ZnVuY3Rpb24gSWMoZSx0KXtmb3IoO2UubGVuZ3RoPHQubGVuZ3RoOyllPWUuY29uY2F0KGUpO3JldHVybiBNYXRoLm1heCguLi50Lm1hcCgodCxuKT0+TGModCkrTGMoZVtuXSkpKX1mdW5jdGlvbiBMYyhlKXtyZXR1cm4gZT09PWBhdXRvYD8wOk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoYCxgLGAuYCkpKjFlM31mdW5jdGlvbiBSYyhlKXtyZXR1cm4oZT9lLm93bmVyRG9jdW1lbnQ6ZG9jdW1lbnQpLmJvZHkub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIHpjKGUsdCxuKXtsZXQgcj1lW3hjXTtyJiYodD0odD9bdCwuLi5yXTpbLi4ucl0pLmpvaW4oYCBgKSksdD09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZShgY2xhc3NgKTpuP2Uuc2V0QXR0cmlidXRlKGBjbGFzc2AsdCk6ZS5jbGFzc05hbWU9dH12YXIgQmM9U3ltYm9sKGBfdm9kYCksVmM9U3ltYm9sKGBfdnNoYCksSGM9e25hbWU6YHNob3dgLGJlZm9yZU1vdW50KGUse3ZhbHVlOnR9LHt0cmFuc2l0aW9uOm59KXtlW0JjXT1lLnN0eWxlLmRpc3BsYXk9PT1gbm9uZWA/YGA6ZS5zdHlsZS5kaXNwbGF5LG4mJnQ/bi5iZWZvcmVFbnRlcihlKTpVYyhlLHQpfSxtb3VudGVkKGUse3ZhbHVlOnR9LHt0cmFuc2l0aW9uOm59KXtuJiZ0JiZuLmVudGVyKGUpfSx1cGRhdGVkKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0se3RyYW5zaXRpb246cn0peyF0IT0hbiYmKHI/dD8oci5iZWZvcmVFbnRlcihlKSxVYyhlLCEwKSxyLmVudGVyKGUpKTpyLmxlYXZlKGUsKCk9PntVYyhlLCExKX0pOlVjKGUsdCkpfSxiZWZvcmVVbm1vdW50KGUse3ZhbHVlOnR9KXtVYyhlLHQpfX07ZnVuY3Rpb24gVWMoZSx0KXtlLnN0eWxlLmRpc3BsYXk9dD9lW0JjXTpgbm9uZWAsZVtWY109IXR9ZnVuY3Rpb24gV2MoKXtIYy5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9KT0+e2lmKCFlKXJldHVybntzdHlsZTp7ZGlzcGxheTpgbm9uZWB9fX19dmFyIEdjPVN5bWJvbChgYCk7ZnVuY3Rpb24gS2MoZSl7bGV0IHQ9RnMoKTtpZighdClyZXR1cm47bGV0IG49dC51dD0obj1lKHQucHJveHkpKT0+e0FycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj0iJHt0LnVpZH0iXWApKS5mb3JFYWNoKGU9PkpjKGUsbikpfSxyPSgpPT57bGV0IHI9ZSh0LnByb3h5KTt0LmNlP0pjKHQuY2Uscik6cWModC5zdWJUcmVlLHIpLG4ocil9O1FpKCgpPT57bnIocil9KSxaaSgoKT0+e0VyKHIsYSx7Zmx1c2g6YHBvc3RgfSk7bGV0IGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocik7ZS5vYnNlcnZlKHQuc3ViVHJlZS5lbC5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSx0YSgoKT0+ZS5kaXNjb25uZWN0KCkpfSl9ZnVuY3Rpb24gcWMoZSx0KXtpZihlLnNoYXBlRmxhZyYxMjgpe2xldCBuPWUuc3VzcGVuc2U7ZT1uLmFjdGl2ZUJyYW5jaCxuLnBlbmRpbmdCcmFuY2gmJiFuLmlzSHlkcmF0aW5nJiZuLmVmZmVjdHMucHVzaCgoKT0+e3FjKG4uYWN0aXZlQnJhbmNoLHQpfSl9Zm9yKDtlLmNvbXBvbmVudDspZT1lLmNvbXBvbmVudC5zdWJUcmVlO2lmKGUuc2hhcGVGbGFnJjEmJmUuZWwpSmMoZS5lbCx0KTtlbHNlIGlmKGUudHlwZT09PUwpZS5jaGlsZHJlbi5mb3JFYWNoKGU9PnFjKGUsdCkpO2Vsc2UgaWYoZS50eXBlPT09bHMpe2xldHtlbDpuLGFuY2hvcjpyfT1lO2Zvcig7biYmKEpjKG4sdCksbiE9PXIpOyluPW4ubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIEpjKGUsdCl7aWYoZS5ub2RlVHlwZT09PTEpe2xldCBuPWUuc3R5bGUscj1gYDtmb3IobGV0IGUgaW4gdCl7bGV0IGk9amUodFtlXSk7bi5zZXRQcm9wZXJ0eShgLS0ke2V9YCxpKSxyKz1gLS0ke2V9OiAke2l9O2B9bltHY109cn19dmFyIFljPS8oPzpefDspXHMqZGlzcGxheVxzKjovO2Z1bmN0aW9uIFhjKGUsdCxuKXtsZXQgcj1lLnN0eWxlLGk9eShuKSxhPSExO2lmKG4mJiFpKXtpZih0KXtpZih5KHQpKWZvcihsZXQgZSBvZiB0LnNwbGl0KGA7YCkpe2xldCB0PWUuc2xpY2UoMCxlLmluZGV4T2YoYDpgKSkudHJpbSgpO25bdF0/P1FjKHIsdCxgYCl9ZWxzZSBmb3IobGV0IGUgaW4gdCluW2VdPz9RYyhyLGUsYGApfWZvcihsZXQgaSBpbiBuKXtpPT09YGRpc3BsYXlgJiYoYT0hMCk7bGV0IG89bltpXTtvPT1udWxsP1FjKHIsaSxgYCk6bmwoZSxpLCF5KHQpJiZ0P3RbaV06dm9pZCAwLG8pfHxRYyhyLGksbyl9fWVsc2UgaWYoaSl7aWYodCE9PW4pe2xldCBlPXJbR2NdO2UmJihuKz1gO2ArZSksci5jc3NUZXh0PW4sYT1ZYy50ZXN0KG4pfX1lbHNlIHQmJmUucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApO0JjIGluIGUmJihlW0JjXT1hP3IuZGlzcGxheTpgYCxlW1ZjXSYmKHIuZGlzcGxheT1gbm9uZWApKX12YXIgWmM9L1xzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBRYyhlLHQsbil7aWYocChuKSluLmZvckVhY2gobj0+UWMoZSx0LG4pKTtlbHNlIGlmKG4/Pz1gYCx0LnN0YXJ0c1dpdGgoYC0tYCkpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7bGV0IHI9dGwoZSx0KTtaYy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkob2Uociksbi5yZXBsYWNlKFpjLGBgKSxgaW1wb3J0YW50YCk6ZVtyXT1ufX12YXIgJGM9W2BXZWJraXRgLGBNb3pgLGBtc2BdLGVsPXt9O2Z1bmN0aW9uIHRsKGUsdCl7bGV0IG49ZWxbdF07aWYobilyZXR1cm4gbjtsZXQgcj1FKHQpO2lmKHIhPT1gZmlsdGVyYCYmciBpbiBlKXJldHVybiBlbFt0XT1yO3I9c2Uocik7Zm9yKGxldCBuPTA7bjwkYy5sZW5ndGg7bisrKXtsZXQgaT0kY1tuXStyO2lmKGkgaW4gZSlyZXR1cm4gZWxbdF09aX1yZXR1cm4gdH1mdW5jdGlvbiBubChlLHQsbixyKXtyZXR1cm4gZS50YWdOYW1lPT09YFRFWFRBUkVBYCYmKHQ9PT1gd2lkdGhgfHx0PT09YGhlaWdodGApJiZ5KHIpJiZuPT09cn12YXIgcmw9YGh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtgO2Z1bmN0aW9uIGlsKGUsdCxuLHIsaSxhPUNlKHQpKXtyJiZ0LnN0YXJ0c1dpdGgoYHhsaW5rOmApP249PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGVOUyhybCx0LnNsaWNlKDYsdC5sZW5ndGgpKTplLnNldEF0dHJpYnV0ZU5TKHJsLHQsbik6bj09bnVsbHx8YSYmIXdlKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsYT9gYDpiKG4pP1N0cmluZyhuKTpuKX1mdW5jdGlvbiBhbChlLHQsbixyLGkpe2lmKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGApe24hPW51bGwmJihlW3RdPXQ9PT1gaW5uZXJIVE1MYD9wYyhuKTpuKTtyZXR1cm59bGV0IGE9ZS50YWdOYW1lO2lmKHQ9PT1gdmFsdWVgJiZhIT09YFBST0dSRVNTYCYmIWEuaW5jbHVkZXMoYC1gKSl7bGV0IHI9YT09PWBPUFRJT05gP2UuZ2V0QXR0cmlidXRlKGB2YWx1ZWApfHxgYDplLnZhbHVlLGk9bj09bnVsbD9lLnR5cGU9PT1gY2hlY2tib3hgP2BvbmA6YGA6U3RyaW5nKG4pOyhyIT09aXx8IShgX3ZhbHVlYGluIGUpKSYmKGUudmFsdWU9aSksbj8/ZS5yZW1vdmVBdHRyaWJ1dGUodCksZS5fdmFsdWU9bjtyZXR1cm59bGV0IG89ITE7aWYobj09PWBgfHxuPT1udWxsKXtsZXQgcj10eXBlb2YgZVt0XTtyPT09YGJvb2xlYW5gP249d2Uobik6bj09bnVsbCYmcj09PWBzdHJpbmdgPyhuPWBgLG89ITApOnI9PT1gbnVtYmVyYCYmKG49MCxvPSEwKX10cnl7ZVt0XT1ufWNhdGNoe31vJiZlLnJlbW92ZUF0dHJpYnV0ZShpfHx0KX1mdW5jdGlvbiBvbChlLHQsbixyKXtlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpfWZ1bmN0aW9uIHNsKGUsdCxuLHIpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9dmFyIGNsPVN5bWJvbChgX3ZlaWApO2Z1bmN0aW9uIGxsKGUsdCxuLHIsaT1udWxsKXtsZXQgYT1lW2NsXXx8KGVbY2xdPXt9KSxvPWFbdF07aWYociYmbylvLnZhbHVlPXI7ZWxzZXtsZXRbbixzXT1mbCh0KTtyP29sKGUsbixhW3RdPWdsKHIsaSkscyk6byYmKHNsKGUsbixvLHMpLGFbdF09dm9pZCAwKX19dmFyIHVsPS8oT25jZXxQYXNzaXZlfENhcHR1cmUpJC8sZGw9L15vbjo/KD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gZmwoZSl7bGV0IHQsbjtmb3IoOyhuPWUubWF0Y2godWwpKSYmIWRsLnRlc3QoZSk7KXR8fD17fSxlPWUuc2xpY2UoMCxlLmxlbmd0aC1uWzFdLmxlbmd0aCksdFtuWzFdLnRvTG93ZXJDYXNlKCldPSEwO3JldHVybltlWzJdPT09YDpgP2Uuc2xpY2UoMyk6b2UoZS5zbGljZSgyKSksdF19dmFyIHBsPTAsbWw9UHJvbWlzZS5yZXNvbHZlKCksaGw9KCk9PnBsfHw9KG1sLnRoZW4oKCk9PnBsPTApLERhdGUubm93KCkpO2Z1bmN0aW9uIGdsKGUsdCl7bGV0IG49ZT0+e2lmKCFlLl92dHMpZS5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihlLl92dHM8PW4uYXR0YWNoZWQpcmV0dXJuO2xldCByPW4udmFsdWU7aWYocChyKSl7bGV0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH07bGV0IGk9ci5zbGljZSgpLGE9W2VdO2ZvcihsZXQgbj0wO248aS5sZW5ndGgmJiFlLl9zdG9wcGVkO24rKyl7bGV0IGU9aVtuXTtlJiZIbihlLHQsNSxhKX19ZWxzZSBIbihyLHQsNSxbZV0pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0YWNoZWQ9aGwoKSxufXZhciBfbD1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8MTIzLHZsPShlLHQsbixyLGksYSk9PntsZXQgbz1pPT09YHN2Z2A7dD09PWBjbGFzc2A/emMoZSxyLG8pOnQ9PT1gc3R5bGVgP1hjKGUsbixyKTpzKHQpP2ModCl8fGxsKGUsdCxuLHIsYSk6KHRbMF09PT1gLmA/KHQ9dC5zbGljZSgxKSwhMCk6dFswXT09PWBeYD8odD10LnNsaWNlKDEpLCExKTp5bChlLHQscixvKSk/KGFsKGUsdCxyKSwhZS50YWdOYW1lLmluY2x1ZGVzKGAtYCkmJih0PT09YHZhbHVlYHx8dD09PWBjaGVja2VkYHx8dD09PWBzZWxlY3RlZGApJiZpbChlLHQscixvLGEsdCE9PWB2YWx1ZWApKTplLl9pc1Z1ZUNFJiYoYmwoZSx0KXx8ZS5fZGVmLl9fYXN5bmNMb2FkZXImJigvW0EtWl0vLnRlc3QodCl8fCF5KHIpKSk/YWwoZSxFKHQpLHIsYSx0KToodD09PWB0cnVlLXZhbHVlYD9lLl90cnVlVmFsdWU9cjp0PT09YGZhbHNlLXZhbHVlYCYmKGUuX2ZhbHNlVmFsdWU9ciksaWwoZSx0LHIsbykpfTtmdW5jdGlvbiB5bChlLHQsbixyKXtpZihyKXJldHVybiEhKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGB8fHQgaW4gZSYmX2wodCkmJnYobikpO2lmKHQ9PT1gc3BlbGxjaGVja2B8fHQ9PT1gZHJhZ2dhYmxlYHx8dD09PWB0cmFuc2xhdGVgfHx0PT09YGF1dG9jb3JyZWN0YHx8dD09PWBzYW5kYm94YCYmZS50YWdOYW1lPT09YElGUkFNRWB8fHQ9PT1gZm9ybWB8fHQ9PT1gbGlzdGAmJmUudGFnTmFtZT09PWBJTlBVVGB8fHQ9PT1gdHlwZWAmJmUudGFnTmFtZT09PWBURVhUQVJFQWApcmV0dXJuITE7aWYodD09PWB3aWR0aGB8fHQ9PT1gaGVpZ2h0YCl7bGV0IHQ9ZS50YWdOYW1lO2lmKHQ9PT1gSU1HYHx8dD09PWBWSURFT2B8fHQ9PT1gQ0FOVkFTYHx8dD09PWBTT1VSQ0VgKXJldHVybiExfXJldHVybiBfbCh0KSYmeShuKT8hMTp0IGluIGV9ZnVuY3Rpb24gYmwoZSx0KXtsZXQgbj1lLl9kZWYucHJvcHM7aWYoIW4pcmV0dXJuITE7bGV0IHI9RSh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLnNvbWUoZT0+RShlKT09PXIpOk9iamVjdC5rZXlzKG4pLnNvbWUoZT0+RShlKT09PXIpfXZhciB4bD17fTtmdW5jdGlvbiBTbChlLHQsbil7bGV0IHI9RihlLHQpO3RlKHIpJiYocj1sKHt9LHIsdCkpO2NsYXNzIGkgZXh0ZW5kcyBUbHtjb25zdHJ1Y3RvcihlKXtzdXBlcihyLGUsbil9fXJldHVybiBpLmRlZj1yLGl9dmFyIENsPSgoZSx0KT0+U2woZSx0LGd1KSksd2w9dHlwZW9mIEhUTUxFbGVtZW50PGB1YD9IVE1MRWxlbWVudDpjbGFzc3t9LFRsPWNsYXNzIGUgZXh0ZW5kcyB3bHtjb25zdHJ1Y3RvcihlLHQ9e30sbj1odSl7c3VwZXIoKSx0aGlzLl9kZWY9ZSx0aGlzLl9wcm9wcz10LHRoaXMuX2NyZWF0ZUFwcD1uLHRoaXMuX2lzVnVlQ0U9ITAsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9hcHA9bnVsbCx0aGlzLl9ub25jZT10aGlzLl9kZWYubm9uY2UsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3Jlc29sdmVkPSExLHRoaXMuX3BhdGNoaW5nPSExLHRoaXMuX2RpcnR5PSExLHRoaXMuX251bWJlclByb3BzPW51bGwsdGhpcy5fc3R5bGVDaGlsZHJlbj1uZXcgV2Vha1NldCx0aGlzLl9zdHlsZUFuY2hvcnM9bmV3IFdlYWtNYXAsdGhpcy5fb2I9bnVsbCx0aGlzLnNoYWRvd1Jvb3QmJm4hPT1odT90aGlzLl9yb290PXRoaXMuc2hhZG93Um9vdDplLnNoYWRvd1Jvb3Q9PT0hMT90aGlzLl9yb290PXRoaXM6KHRoaXMuYXR0YWNoU2hhZG93KGwoe30sZS5zaGFkb3dSb290T3B0aW9ucyx7bW9kZTpgb3BlbmB9KSksdGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3QpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoIXRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuOyF0aGlzLnNoYWRvd1Jvb3QmJiF0aGlzLl9yZXNvbHZlZCYmdGhpcy5fcGFyc2VTbG90cygpLHRoaXMuX2Nvbm5lY3RlZD0hMDtsZXQgdD10aGlzO2Zvcig7dCYmPXQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGV8fHQuaG9zdDspaWYodCBpbnN0YW5jZW9mIGUpe3RoaXMuX3BhcmVudD10O2JyZWFrfXRoaXMuX2luc3RhbmNlfHwodGhpcy5fcmVzb2x2ZWQ/dGhpcy5fbW91bnQodGhpcy5fZGVmKTp0JiZ0Ll9wZW5kaW5nUmVzb2x2ZT90aGlzLl9wZW5kaW5nUmVzb2x2ZT10Ll9wZW5kaW5nUmVzb2x2ZS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ1Jlc29sdmU9dm9pZCAwLHRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuIHRoaXMuX3Jlc29sdmVEZWYoKX0pOnRoaXMuX3Jlc29sdmVEZWYoKSl9X3NldFBhcmVudChlPXRoaXMuX3BhcmVudCl7ZSYmKHRoaXMuX2luc3RhbmNlLnBhcmVudD1lLl9pbnN0YW5jZSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dChlKSl9X2luaGVyaXRQYXJlbnRDb250ZXh0KGU9dGhpcy5fcGFyZW50KXtlJiZ0aGlzLl9hcHAmJk9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLl9hcHAuX2NvbnRleHQucHJvdmlkZXMsZS5faW5zdGFuY2UucHJvdmlkZXMpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fY29ubmVjdGVkPSExLFFuKCgpPT57dGhpcy5fY29ubmVjdGVkfHwodGhpcy5fb2ImJj0odGhpcy5fb2IuZGlzY29ubmVjdCgpLG51bGwpLHRoaXMuX2FwcCYmdGhpcy5fYXBwLnVubW91bnQoKSx0aGlzLl9pbnN0YW5jZSYmKHRoaXMuX2luc3RhbmNlLmNlPXZvaWQgMCksdGhpcy5fYXBwPXRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fdGVsZXBvcnRUYXJnZXRzJiY9KHRoaXMuX3RlbGVwb3J0VGFyZ2V0cy5jbGVhcigpLHZvaWQgMCkpfSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7Zm9yKGxldCB0IG9mIGUpdGhpcy5fc2V0QXR0cih0LmF0dHJpYnV0ZU5hbWUpfV9yZXNvbHZlRGVmKCl7aWYodGhpcy5fcGVuZGluZ1Jlc29sdmUpcmV0dXJuIHRoaXMuX3BlbmRpbmdSZXNvbHZlO2ZvcihsZXQgZT0wO2U8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtlKyspdGhpcy5fc2V0QXR0cih0aGlzLmF0dHJpYnV0ZXNbZV0ubmFtZSk7dGhpcy5fb2I9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fcHJvY2Vzc011dGF0aW9ucy5iaW5kKHRoaXMpKSx0aGlzLl9vYi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KTtsZXQgZT0oZSx0PSExKT0+e3RoaXMuX3Jlc29sdmVkPSEwLHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMDtsZXR7cHJvcHM6bixzdHlsZXM6cn09ZSxpO2lmKG4mJiFwKG4pKWZvcihsZXQgZSBpbiBuKXtsZXQgdD1uW2VdOyh0PT09TnVtYmVyfHx0JiZ0LnR5cGU9PT1OdW1iZXIpJiYoZSBpbiB0aGlzLl9wcm9wcyYmKHRoaXMuX3Byb3BzW2VdPWZlKHRoaXMuX3Byb3BzW2VdKSksKGl8fD1PYmplY3QuY3JlYXRlKG51bGwpKVtFKGUpXT0hMCl9dGhpcy5fbnVtYmVyUHJvcHM9aSx0aGlzLl9yZXNvbHZlUHJvcHMoZSksdGhpcy5zaGFkb3dSb290JiZ0aGlzLl9hcHBseVN0eWxlcyhyKSx0aGlzLl9tb3VudChlKX0sdD10aGlzLl9kZWYuX19hc3luY0xvYWRlcjtpZih0KXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZT10KCkudGhlbih0PT57dC5jb25maWd1cmVBcHA9dGhpcy5fZGVmLmNvbmZpZ3VyZUFwcCxlKHRoaXMuX2RlZj10LCEwKX0pLHRoaXMuX3BlbmRpbmdSZXNvbHZlO2UodGhpcy5fZGVmKX1fbW91bnQoZSl7dGhpcy5fYXBwPXRoaXMuX2NyZWF0ZUFwcChlKSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dCgpLGUuY29uZmlndXJlQXBwJiZlLmNvbmZpZ3VyZUFwcCh0aGlzLl9hcHApLHRoaXMuX2FwcC5fY2VWTm9kZT10aGlzLl9jcmVhdGVWTm9kZSgpLHRoaXMuX2FwcC5tb3VudCh0aGlzLl9yb290KTtsZXQgdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuZXhwb3NlZDtpZih0KWZvcihsZXQgZSBpbiB0KWYodGhpcyxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0OigpPT5OKHRbZV0pfSl9X3Jlc29sdmVQcm9wcyhlKXtsZXR7cHJvcHM6dH09ZSxuPXAodCk/dDpPYmplY3Qua2V5cyh0fHx7fSk7Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKHRoaXMpKWVbMF0hPT1gX2AmJm4uaW5jbHVkZXMoZSkmJnRoaXMuX3NldFByb3AoZSx0aGlzW2VdKTtmb3IobGV0IGUgb2Ygbi5tYXAoRSkpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0KCl7cmV0dXJuIHRoaXMuX2dldFByb3AoZSl9LHNldCh0KXt0aGlzLl9zZXRQcm9wKGUsdCwhMCwhdGhpcy5fcGF0Y2hpbmcpfX0pfV9zZXRBdHRyKGUpe2lmKGUuc3RhcnRzV2l0aChgZGF0YS12LWApKXJldHVybjtsZXQgdD10aGlzLmhhc0F0dHJpYnV0ZShlKSxuPXQ/dGhpcy5nZXRBdHRyaWJ1dGUoZSk6eGwscj1FKGUpO3QmJnRoaXMuX251bWJlclByb3BzJiZ0aGlzLl9udW1iZXJQcm9wc1tyXSYmKG49ZmUobikpLHRoaXMuX3NldFByb3AocixuLCExLCEwKX1fZ2V0UHJvcChlKXtyZXR1cm4gdGhpcy5fcHJvcHNbZV19X3NldFByb3AoZSx0LG49ITAscj0hMSl7aWYodCE9PXRoaXMuX3Byb3BzW2VdJiYodGhpcy5fZGlydHk9ITAsdD09PXhsP2RlbGV0ZSB0aGlzLl9wcm9wc1tlXToodGhpcy5fcHJvcHNbZV09dCxlPT09YGtleWAmJnRoaXMuX2FwcCYmKHRoaXMuX2FwcC5fY2VWTm9kZS5rZXk9dCkpLHImJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKSxuKSl7bGV0IG49dGhpcy5fb2I7biYmKHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMobi50YWtlUmVjb3JkcygpKSxuLmRpc2Nvbm5lY3QoKSksdD09PSEwP3RoaXMuc2V0QXR0cmlidXRlKG9lKGUpLGBgKTp0eXBlb2YgdD09YHN0cmluZ2B8fHR5cGVvZiB0PT1gbnVtYmVyYD90aGlzLnNldEF0dHJpYnV0ZShvZShlKSx0K2BgKTp0fHx0aGlzLnJlbW92ZUF0dHJpYnV0ZShvZShlKSksbiYmbi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KX19X3VwZGF0ZSgpe2xldCBlPXRoaXMuX2NyZWF0ZVZOb2RlKCk7dGhpcy5fYXBwJiYoZS5hcHBDb250ZXh0PXRoaXMuX2FwcC5fY29udGV4dCkscHUoZSx0aGlzLl9yb290KX1fY3JlYXRlVk5vZGUoKXtsZXQgZT17fTt0aGlzLnNoYWRvd1Jvb3R8fChlLm9uVm5vZGVNb3VudGVkPWUub25Wbm9kZVVwZGF0ZWQ9dGhpcy5fcmVuZGVyU2xvdHMuYmluZCh0aGlzKSk7bGV0IHQ9SCh0aGlzLl9kZWYsbChlLHRoaXMuX3Byb3BzKSk7cmV0dXJuIHRoaXMuX2luc3RhbmNlfHwodC5jZT1lPT57dGhpcy5faW5zdGFuY2U9ZSxlLmNlPXRoaXMsZS5pc0NFPSEwO2xldCB0PShlLHQpPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChlLHRlKHRbMF0pP2woe2RldGFpbDp0fSx0WzBdKTp7ZGV0YWlsOnR9KSl9O2UuZW1pdD0oZSwuLi5uKT0+e3QoZSxuKSxvZShlKSE9PWUmJnQob2UoZSksbil9LHRoaXMuX3NldFBhcmVudCgpfSksdH1fYXBwbHlTdHlsZXMoZSx0LG4pe2lmKCFlKXJldHVybjtpZih0KXtpZih0PT09dGhpcy5fZGVmfHx0aGlzLl9zdHlsZUNoaWxkcmVuLmhhcyh0KSlyZXR1cm47dGhpcy5fc3R5bGVDaGlsZHJlbi5hZGQodCl9bGV0IHI9dGhpcy5fbm9uY2UsaT10aGlzLnNoYWRvd1Jvb3QsYT1uP3RoaXMuX2dldFN0eWxlQW5jaG9yKG4pfHx0aGlzLl9nZXRTdHlsZUFuY2hvcih0aGlzLl9kZWYpOnRoaXMuX2dldFJvb3RTdHlsZUluc2VydGlvbkFuY2hvcihpKSxvPW51bGw7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDtzLS0pe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7ciYmYy5zZXRBdHRyaWJ1dGUoYG5vbmNlYCxyKSxjLnRleHRDb250ZW50PWVbc10saS5pbnNlcnRCZWZvcmUoYyxvfHxhKSxvPWMscz09PTAmJihufHx0aGlzLl9zdHlsZUFuY2hvcnMuc2V0KHRoaXMuX2RlZixjKSx0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuc2V0KHQsYykpfX1fZ2V0U3R5bGVBbmNob3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5fc3R5bGVBbmNob3JzLmdldChlKTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlPT09dGhpcy5zaGFkb3dSb290P3Q6KHQmJnRoaXMuX3N0eWxlQW5jaG9ycy5kZWxldGUoZSksbnVsbCl9X2dldFJvb3RTdHlsZUluc2VydGlvbkFuY2hvcihlKXtmb3IobGV0IHQ9MDt0PGUuY2hpbGROb2Rlcy5sZW5ndGg7dCsrKXtsZXQgbj1lLmNoaWxkTm9kZXNbdF07aWYoIShuIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkpcmV0dXJuIG59cmV0dXJuIG51bGx9X3BhcnNlU2xvdHMoKXtsZXQgZT10aGlzLl9zbG90cz17fSx0O2Zvcig7dD10aGlzLmZpcnN0Q2hpbGQ7KXtsZXQgbj10Lm5vZGVUeXBlPT09MSYmdC5nZXRBdHRyaWJ1dGUoYHNsb3RgKXx8YGRlZmF1bHRgOyhlW25dfHwoZVtuXT1bXSkpLnB1c2godCksdGhpcy5yZW1vdmVDaGlsZCh0KX19X3JlbmRlclNsb3RzKCl7bGV0IGU9dGhpcy5fZ2V0U2xvdHMoKSx0PXRoaXMuX2luc3RhbmNlLnR5cGUuX19zY29wZUlkO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dLGk9ci5nZXRBdHRyaWJ1dGUoYG5hbWVgKXx8YGRlZmF1bHRgLGE9dGhpcy5fc2xvdHNbaV0sbz1yLnBhcmVudE5vZGU7aWYoYSlmb3IobGV0IGUgb2YgYSl7aWYodCYmZS5ub2RlVHlwZT09PTEpe2xldCBuPXQrYC1zYCxyPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSwxKTtlLnNldEF0dHJpYnV0ZShuLGBgKTtsZXQgaTtmb3IoO2k9ci5uZXh0Tm9kZSgpOylpLnNldEF0dHJpYnV0ZShuLGBgKX1vLmluc2VydEJlZm9yZShlLHIpfWVsc2UgZm9yKDtyLmZpcnN0Q2hpbGQ7KW8uaW5zZXJ0QmVmb3JlKHIuZmlyc3RDaGlsZCxyKTtvLnJlbW92ZUNoaWxkKHIpfX1fZ2V0U2xvdHMoKXtsZXQgZT1bdGhpc107dGhpcy5fdGVsZXBvcnRUYXJnZXRzJiZlLnB1c2goLi4udGhpcy5fdGVsZXBvcnRUYXJnZXRzKTtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKXtsZXQgZT1uLnF1ZXJ5U2VsZWN0b3JBbGwoYHNsb3RgKTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LmFkZChlW25dKX1yZXR1cm4gQXJyYXkuZnJvbSh0KX1faW5qZWN0Q2hpbGRTdHlsZShlLHQpe3RoaXMuX2FwcGx5U3R5bGVzKGUuc3R5bGVzLGUsdCl9X2JlZ2luUGF0Y2goKXt0aGlzLl9wYXRjaGluZz0hMCx0aGlzLl9kaXJ0eT0hMX1fZW5kUGF0Y2goKXt0aGlzLl9wYXRjaGluZz0hMSx0aGlzLl9kaXJ0eSYmdGhpcy5faW5zdGFuY2UmJnRoaXMuX3VwZGF0ZSgpfV9oYXNTaGFkb3dSb290KCl7cmV0dXJuIHRoaXMuX2RlZi5zaGFkb3dSb290IT09ITF9X3JlbW92ZUNoaWxkU3R5bGUoZSl7fX07ZnVuY3Rpb24gRWwoZSl7bGV0IHQ9RnMoKTtyZXR1cm4gdCYmdC5jZXx8bnVsbH1mdW5jdGlvbiBEbCgpe2xldCBlPUVsKCk7cmV0dXJuIGUmJmUuc2hhZG93Um9vdH1mdW5jdGlvbiBPbChlPWAkc3R5bGVgKXt7bGV0IHQ9RnMoKTtpZighdClyZXR1cm4gcjtsZXQgbj10LnR5cGUuX19jc3NNb2R1bGVzO3JldHVybiBuJiZuW2VdfHxyfX12YXIga2w9bmV3IFdlYWtNYXAsQWw9bmV3IFdlYWtNYXAsamw9U3ltYm9sKGBfbW92ZUNiYCksTWw9U3ltYm9sKGBfZW50ZXJDYmApLE5sPShlPT4oZGVsZXRlIGUucHJvcHMubW9kZSxlKSkoe25hbWU6YFRyYW5zaXRpb25Hcm91cGAscHJvcHM6bCh7fSxDYyx7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSksc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPUZzKCkscj1LcigpLGksYTtyZXR1cm4gJGkoKCk9PntpZighaS5sZW5ndGgpcmV0dXJuO2xldCB0PWUubW92ZUNsYXNzfHxgJHtlLm5hbWV8fGB2YH0tbW92ZWA7aWYoIVJsKGlbMF0uZWwsbi52bm9kZS5lbCx0KSl7aT1bXTtyZXR1cm59aS5mb3JFYWNoKFBsKSxpLmZvckVhY2goRmwpO2xldCByPWkuZmlsdGVyKElsKTtSYyhuLnZub2RlLmVsKSxyLmZvckVhY2goZT0+e2xldCBuPWUuZWwscj1uLnN0eWxlO0FjKG4sdCksci50cmFuc2Zvcm09ci53ZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249YGA7bGV0IGk9bltqbF09ZT0+e2UmJmUudGFyZ2V0IT09bnx8KCFlfHxlLnByb3BlcnR5TmFtZS5lbmRzV2l0aChgdHJhbnNmb3JtYCkpJiYobi5yZW1vdmVFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKSxuW2psXT1udWxsLGpjKG4sdCkpfTtuLmFkZEV2ZW50TGlzdGVuZXIoYHRyYW5zaXRpb25lbmRgLGkpfSksaT1bXX0pLCgpPT57bGV0IG89QShlKSxzPURjKG8pLGM9by50YWd8fEw7aWYoaT1bXSxhKWZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3QuZWwmJnQuZWwgaW5zdGFuY2VvZiBFbGVtZW50JiYhdC5lbFtWY10mJihpLnB1c2godCkscmkodCxlaSh0LHMscixuKSksa2wuc2V0KHQsTGwodC5lbCkpKX1hPXQuZGVmYXVsdD9paSh0LmRlZmF1bHQoKSk6W107Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKyspe2xldCB0PWFbZV07dC5rZXkhPW51bGwmJnJpKHQsZWkodCxzLHIsbikpfXJldHVybiBIKGMsbnVsbCxhKX19fSk7ZnVuY3Rpb24gUGwoZSl7bGV0IHQ9ZS5lbDt0W2psXSYmdFtqbF0oKSx0W01sXSYmdFtNbF0oKX1mdW5jdGlvbiBGbChlKXtBbC5zZXQoZSxMbChlLmVsKSl9ZnVuY3Rpb24gSWwoZSl7bGV0IHQ9a2wuZ2V0KGUpLG49QWwuZ2V0KGUpLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2xldCB0PWUuZWwsbj10LnN0eWxlLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPTEscz0xO3JldHVybiB0Lm9mZnNldFdpZHRoJiYobz1hLndpZHRoL3Qub2Zmc2V0V2lkdGgpLHQub2Zmc2V0SGVpZ2h0JiYocz1hLmhlaWdodC90Lm9mZnNldEhlaWdodCksKCFOdW1iZXIuaXNGaW5pdGUobyl8fG89PT0wKSYmKG89MSksKCFOdW1iZXIuaXNGaW5pdGUocyl8fHM9PT0wKSYmKHM9MSksTWF0aC5hYnMoby0xKTwuMDEmJihvPTEpLE1hdGguYWJzKHMtMSk8LjAxJiYocz0xKSxuLnRyYW5zZm9ybT1uLndlYmtpdFRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7ci9vfXB4LCR7aS9zfXB4KWAsbi50cmFuc2l0aW9uRHVyYXRpb249YDBzYCxlfX1mdW5jdGlvbiBMbChlKXtsZXQgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntsZWZ0OnQubGVmdCx0b3A6dC50b3B9fWZ1bmN0aW9uIFJsKGUsdCxuKXtsZXQgcj1lLmNsb25lTm9kZSgpLGk9ZVt4Y107aSYmaS5mb3JFYWNoKGU9PntlLnNwbGl0KC9ccysvKS5mb3JFYWNoKGU9PmUmJnIuY2xhc3NMaXN0LnJlbW92ZShlKSl9KSxuLnNwbGl0KC9ccysvKS5mb3JFYWNoKGU9PmUmJnIuY2xhc3NMaXN0LmFkZChlKSksci5zdHlsZS5kaXNwbGF5PWBub25lYDtsZXQgYT10Lm5vZGVUeXBlPT09MT90OnQucGFyZW50Tm9kZTthLmFwcGVuZENoaWxkKHIpO2xldHtoYXNUcmFuc2Zvcm06b309RmMocik7cmV0dXJuIGEucmVtb3ZlQ2hpbGQociksb312YXIgemw9ZT0+e2xldCB0PWUucHJvcHNbYG9uVXBkYXRlOm1vZGVsVmFsdWVgXXx8ITE7cmV0dXJuIHAodCk/ZT0+bGUodCxlKTp0fTtmdW5jdGlvbiBCbChlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gVmwoZSl7bGV0IHQ9ZS50YXJnZXQ7dC5jb21wb3NpbmcmJih0LmNvbXBvc2luZz0hMSx0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGBpbnB1dGApKSl9dmFyIEhsPVN5bWJvbChgX2Fzc2lnbmApLFVsPVN5bWJvbChgX2luaXRpYWxWYWx1ZWApO2Z1bmN0aW9uIFdsKGUsdCxuKXtyZXR1cm4gdCYmKGU9ZS50cmltKCkpLG4mJihlPWRlKGUpKSxlfXZhciBHbD17Y3JlYXRlZChlLHttb2RpZmllcnM6e2xhenk6dCx0cmltOm4sbnVtYmVyOnJ9fSxpKXtlLnBhcmVudE5vZGUmJihlLnR5cGU9PT1gdGV4dGA/ZVtVbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvW1xyXG5dL2csYGApOmUudHlwZT09PWB0ZXh0YXJlYWAmJihlW1VsXT1lLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC9cclxuPy9nLGAKYCkpKSxlW0hsXT16bChpKTtsZXQgYT1yfHxpLnByb3BzJiZpLnByb3BzLnR5cGU9PT1gbnVtYmVyYDtvbChlLHQ/YGNoYW5nZWA6YGlucHV0YCx0PT57dC50YXJnZXQuY29tcG9zaW5nfHxlW0hsXShXbChlLnZhbHVlLG4sYSkpfSksKG58fGEpJiZvbChlLGBjaGFuZ2VgLCgpPT57ZS52YWx1ZT1XbChlLnZhbHVlLG4sYSl9KSx0fHwob2woZSxgY29tcG9zaXRpb25zdGFydGAsQmwpLG9sKGUsYGNvbXBvc2l0aW9uZW5kYCxWbCksb2woZSxgY2hhbmdlYCxWbCkpfSxtb3VudGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOnt0cmltOm4sbnVtYmVyOnJ9fSl7bGV0IGk9dD8/YGAsYT1lW1VsXTtkZWxldGUgZVtVbF0sYSE9PXZvaWQgMCYmKGUudHlwZT09PWB0ZXh0YHx8ZS50eXBlPT09YHRleHRhcmVhYCkmJmUudmFsdWUhPT1hP2VbSGxdKFdsKGUudmFsdWUsbixyKSk6ZS52YWx1ZT1pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpuLG1vZGlmaWVyczp7bGF6eTpyLHRyaW06aSxudW1iZXI6YX19LG8pe2lmKGVbSGxdPXpsKG8pLGUuY29tcG9zaW5nKXJldHVybjtsZXQgcz0oYXx8ZS50eXBlPT09YG51bWJlcmApJiYhL14wXGQvLnRlc3QoZS52YWx1ZSk/ZGUoZS52YWx1ZSk6ZS52YWx1ZSxjPXQ/P2BgO2lmKHM9PT1jKXJldHVybjtsZXQgbD1lLmdldFJvb3ROb2RlKCk7KGwgaW5zdGFuY2VvZiBEb2N1bWVudHx8bCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpJiZsLmFjdGl2ZUVsZW1lbnQ9PT1lJiZlLnR5cGUhPT1gcmFuZ2VgJiYociYmdD09PW58fGkmJmUudmFsdWUudHJpbSgpPT09Yyl8fChlLnZhbHVlPWMpfX0sS2w9e2RlZXA6ITAsY3JlYXRlZChlLHQsbil7ZVtIbF09emwobiksb2woZSxgY2hhbmdlYCwoKT0+e2xldCB0PWUuX21vZGVsVmFsdWUsbj1abChlKSxyPWUuY2hlY2tlZCxpPWVbSGxdO2lmKHAodCkpe2xldCBlPURlKHQsbiksYT1lIT09LTE7aWYociYmIWEpaSh0LmNvbmNhdChuKSk7ZWxzZSBpZighciYmYSl7bGV0IG49Wy4uLnRdO24uc3BsaWNlKGUsMSksaShuKX19ZWxzZSBpZihoKHQpKXtsZXQgZT1uZXcgU2V0KHQpO3I/ZS5hZGQobik6ZS5kZWxldGUobiksaShlKX1lbHNlIGkoUWwoZSxyKSl9KX0sbW91bnRlZDpxbCxiZWZvcmVVcGRhdGUoZSx0LG4pe2VbSGxdPXpsKG4pLHFsKGUsdCxuKX19O2Z1bmN0aW9uIHFsKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZS5fbW9kZWxWYWx1ZT10O2xldCBpO2lmKHAodCkpaT1EZSh0LHIucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYoaCh0KSlpPXQuaGFzKHIucHJvcHMudmFsdWUpO2Vsc2V7aWYodD09PW4pcmV0dXJuO2k9RWUodCxRbChlLCEwKSl9ZS5jaGVja2VkIT09aSYmKGUuY2hlY2tlZD1pKX12YXIgSmw9e2NyZWF0ZWQoZSx7dmFsdWU6dH0sbil7ZS5jaGVja2VkPUVlKHQsbi5wcm9wcy52YWx1ZSksZVtIbF09emwobiksb2woZSxgY2hhbmdlYCwoKT0+e2VbSGxdKFpsKGUpKX0pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpufSxyKXtlW0hsXT16bChyKSx0IT09biYmKGUuY2hlY2tlZD1FZSh0LHIucHJvcHMudmFsdWUpKX19LFlsPXtkZWVwOiEwLGNyZWF0ZWQoZSx7dmFsdWU6dCxtb2RpZmllcnM6e251bWJlcjpufX0scil7ZS5fbW9kZWxWYWx1ZT10LG9sKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZS5vcHRpb25zLGU9PmUuc2VsZWN0ZWQpLm1hcChlPT5uP2RlKFpsKGUpKTpabChlKSk7ZVtIbF0oZS5tdWx0aXBsZT9oKGUuX21vZGVsVmFsdWUpP25ldyBTZXQodCk6dDp0WzBdKSxlLl9hc3NpZ25pbmc9ITAsUW4oKCk9PntlLl9hc3NpZ25pbmc9ITF9KX0pLGVbSGxdPXpsKHIpfSxtb3VudGVkKGUse3ZhbHVlOnR9KXtYbChlLHQpfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dH0sbil7ZS5fbW9kZWxWYWx1ZT10LGVbSGxdPXpsKG4pfSx1cGRhdGVkKGUse3ZhbHVlOnR9KXtlLl9hc3NpZ25pbmd8fFhsKGUsdCl9fTtmdW5jdGlvbiBYbChlLHQpe2xldCBuPWUubXVsdGlwbGUscj1wKHQpO2lmKCEobiYmIXImJiFoKHQpKSl7Zm9yKGxldCBpPTAsYT1lLm9wdGlvbnMubGVuZ3RoO2k8YTtpKyspe2xldCBhPWUub3B0aW9uc1tpXSxvPVpsKGEpO2lmKG4pe2lmKHIpe2xldCBlPXR5cGVvZiBvO2Euc2VsZWN0ZWQ9ZT09PWBzdHJpbmdgfHxlPT09YG51bWJlcmA/dC5zb21lKGU9PlN0cmluZyhlKT09PVN0cmluZyhvKSk6RGUodCxvKT4tMX1lbHNlIGEuc2VsZWN0ZWQ9dC5oYXMobyl9ZWxzZSBpZihFZShabChhKSx0KSl7ZS5zZWxlY3RlZEluZGV4IT09aSYmKGUuc2VsZWN0ZWRJbmRleD1pKTtyZXR1cm59fSFuJiZlLnNlbGVjdGVkSW5kZXghPT0tMSYmKGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIFpsKGUpe3JldHVybmBfdmFsdWVgaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIFFsKGUsdCl7bGV0IG49dD9gX3RydWVWYWx1ZWA6YF9mYWxzZVZhbHVlYDtyZXR1cm4gbiBpbiBlP2Vbbl06dH12YXIgJGw9e2NyZWF0ZWQoZSx0LG4pe3R1KGUsdCxuLG51bGwsYGNyZWF0ZWRgKX0sbW91bnRlZChlLHQsbil7dHUoZSx0LG4sbnVsbCxgbW91bnRlZGApfSxiZWZvcmVVcGRhdGUoZSx0LG4scil7dHUoZSx0LG4scixgYmVmb3JlVXBkYXRlYCl9LHVwZGF0ZWQoZSx0LG4scil7dHUoZSx0LG4scixgdXBkYXRlZGApfX07ZnVuY3Rpb24gZXUoZSx0KXtzd2l0Y2goZSl7Y2FzZWBTRUxFQ1RgOnJldHVybiBZbDtjYXNlYFRFWFRBUkVBYDpyZXR1cm4gR2w7ZGVmYXVsdDpzd2l0Y2godCl7Y2FzZWBjaGVja2JveGA6cmV0dXJuIEtsO2Nhc2VgcmFkaW9gOnJldHVybiBKbDtkZWZhdWx0OnJldHVybiBHbH19fWZ1bmN0aW9uIHR1KGUsdCxuLHIsaSl7bGV0IGE9ZXUoZS50YWdOYW1lLG4ucHJvcHMmJm4ucHJvcHMudHlwZSlbaV07YSYmYShlLHQsbixyKX1mdW5jdGlvbiBudSgpe0dsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0pPT4oe3ZhbHVlOmV9KSxKbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYodC5wcm9wcyYmRWUodC5wcm9wcy52YWx1ZSxlKSlyZXR1cm57Y2hlY2tlZDohMH19LEtsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0sdCk9PntpZihwKGUpKXtpZih0LnByb3BzJiZEZShlLHQucHJvcHMudmFsdWUpPi0xKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGgoZSkpe2lmKHQucHJvcHMmJmUuaGFzKHQucHJvcHMudmFsdWUpKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGUpcmV0dXJue2NoZWNrZWQ6ITB9fSwkbC5nZXRTU1JQcm9wcz0oZSx0KT0+e2lmKHR5cGVvZiB0LnR5cGUhPWBzdHJpbmdgKXJldHVybjtsZXQgbj1ldSh0LnR5cGUudG9VcHBlckNhc2UoKSx0LnByb3BzJiZ0LnByb3BzLnR5cGUpO2lmKG4uZ2V0U1NSUHJvcHMpcmV0dXJuIG4uZ2V0U1NSUHJvcHMoZSx0KX19dmFyIHJ1PVtgY3RybGAsYHNoaWZ0YCxgYWx0YCxgbWV0YWBdLGl1PXtzdG9wOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDplPT5lLnByZXZlbnREZWZhdWx0KCksc2VsZjplPT5lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldCxjdHJsOmU9PiFlLmN0cmxLZXksc2hpZnQ6ZT0+IWUuc2hpZnRLZXksYWx0OmU9PiFlLmFsdEtleSxtZXRhOmU9PiFlLm1ldGFLZXksbGVmdDplPT5gYnV0dG9uYGluIGUmJmUuYnV0dG9uIT09MCxtaWRkbGU6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTEscmlnaHQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTIsZXhhY3Q6KGUsdCk9PnJ1LnNvbWUobj0+ZVtgJHtufUtleWBdJiYhdC5pbmNsdWRlcyhuKSl9LGF1PShlLHQpPT57aWYoIWUpcmV0dXJuIGU7bGV0IG49ZS5fd2l0aE1vZHN8fD17fSxyPXQuam9pbihgLmApO3JldHVybiBuW3JdfHwobltyXT0oKG4sLi4ucik9Pntmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9aXVbdFtlXV07aWYociYmcihuLHQpKXJldHVybn1yZXR1cm4gZShuLC4uLnIpfSkpfSxvdT17ZXNjOmBlc2NhcGVgLHNwYWNlOmAgYCx1cDpgYXJyb3ctdXBgLGxlZnQ6YGFycm93LWxlZnRgLHJpZ2h0OmBhcnJvdy1yaWdodGAsZG93bjpgYXJyb3ctZG93bmAsZGVsZXRlOmBiYWNrc3BhY2VgfSxzdT0oZSx0KT0+e2xldCBuPWUuX3dpdGhLZXlzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KG49PntpZighKGBrZXlgaW4gbikpcmV0dXJuO2xldCByPW9lKG4ua2V5KTtpZih0LnNvbWUoZT0+ZT09PXJ8fG91W2VdPT09cikpcmV0dXJuIGUobil9KSl9LGN1PWwoe3BhdGNoUHJvcDp2bH0sdmMpLGx1LHV1PSExO2Z1bmN0aW9uIGR1KCl7cmV0dXJuIGx1fHw9TG8oY3UpfWZ1bmN0aW9uIGZ1KCl7cmV0dXJuIGx1PXV1P2x1OlJvKGN1KSx1dT0hMCxsdX12YXIgcHU9KCguLi5lKT0+e2R1KCkucmVuZGVyKC4uLmUpfSksbXU9KCguLi5lKT0+e2Z1KCkuaHlkcmF0ZSguLi5lKX0pLGh1PSgoLi4uZSk9PntsZXQgdD1kdSgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gdC5tb3VudD1lPT57bGV0IHI9dnUoZSk7aWYoIXIpcmV0dXJuO2xldCBpPXQuX2NvbXBvbmVudDshdihpKSYmIWkucmVuZGVyJiYhaS50ZW1wbGF0ZSYmKGkudGVtcGxhdGU9ci5pbm5lckhUTUwpLHIubm9kZVR5cGU9PT0xJiYoci50ZXh0Q29udGVudD1gYCk7bGV0IGE9bihyLCExLF91KHIpKTtyZXR1cm4gciBpbnN0YW5jZW9mIEVsZW1lbnQmJihyLnJlbW92ZUF0dHJpYnV0ZShgdi1jbG9ha2ApLHIuc2V0QXR0cmlidXRlKGBkYXRhLXYtYXBwYCxgYCkpLGF9LHR9KSxndT0oKC4uLmUpPT57bGV0IHQ9ZnUoKS5jcmVhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9ZT0+e2xldCB0PXZ1KGUpO2lmKHQpcmV0dXJuIG4odCwhMCxfdSh0KSl9LHR9KTtmdW5jdGlvbiBfdShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm5gc3ZnYDtpZih0eXBlb2YgTWF0aE1MRWxlbWVudD09YGZ1bmN0aW9uYCYmZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQpcmV0dXJuYG1hdGhtbGB9ZnVuY3Rpb24gdnUoZSl7cmV0dXJuIHkoZSk/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTplfXZhciB5dT0hMSxidT0oKT0+e3l1fHwoeXU9ITAsbnUoKSxXYygpKX0seHU9dCh7QmFzZVRyYW5zaXRpb246KCk9PlFyLEJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzOigpPT5KcixDb21tZW50OigpPT5jcyxEZXByZWNhdGlvblR5cGVzOigpPT5udWxsLEVmZmVjdFNjb3BlOigpPT5OZSxFcnJvckNvZGVzOigpPT56bixFcnJvclR5cGVTdHJpbmdzOigpPT5zYyxGcmFnbWVudDooKT0+TCxLZWVwQWxpdmU6KCk9PkJpLFJlYWN0aXZlRWZmZWN0OigpPT56ZSxTdGF0aWM6KCk9PmxzLFN1c3BlbnNlOigpPT5YbyxUZWxlcG9ydDooKT0+VnIsVGV4dDooKT0+c3MsVHJhY2tPcFR5cGVzOigpPT5FbixUcmFuc2l0aW9uOigpPT53YyxUcmFuc2l0aW9uR3JvdXA6KCk9Pk5sLFRyaWdnZXJPcFR5cGVzOigpPT5EbixWdWVFbGVtZW50OigpPT5UbCxhc3NlcnROdW1iZXI6KCk9PlJuLGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nOigpPT5IbixjYWxsV2l0aEVycm9ySGFuZGxpbmc6KCk9PlZuLGNhbWVsaXplOigpPT5FLGNhcGl0YWxpemU6KCk9PnNlLGNsb25lVk5vZGU6KCk9PkNzLGNvbXBhdFV0aWxzOigpPT5udWxsLGNvbXBpbGU6KCk9PlN1LGNvbXB1dGVkOigpPT5XLGNyZWF0ZUFwcDooKT0+aHUsY3JlYXRlQmxvY2s6KCk9PkIsY3JlYXRlQ29tbWVudFZOb2RlOigpPT5UcyxjcmVhdGVFbGVtZW50QmxvY2s6KCk9PnosY3JlYXRlRWxlbWVudFZOb2RlOigpPT5WLGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyOigpPT5SbyxjcmVhdGVQcm9wc1Jlc3RQcm94eTooKT0+SWEsY3JlYXRlUmVuZGVyZXI6KCk9PkxvLGNyZWF0ZVNTUkFwcDooKT0+Z3UsY3JlYXRlU2xvdHM6KCk9PmhhLGNyZWF0ZVN0YXRpY1ZOb2RlOigpPT53cyxjcmVhdGVUZXh0Vk5vZGU6KCk9PlUsY3JlYXRlVk5vZGU6KCk9PkgsY3VzdG9tUmVmOigpPT52bixkZWZpbmVBc3luY0NvbXBvbmVudDooKT0+TGksZGVmaW5lQ29tcG9uZW50OigpPT5GLGRlZmluZUN1c3RvbUVsZW1lbnQ6KCk9PlNsLGRlZmluZUVtaXRzOigpPT53YSxkZWZpbmVFeHBvc2U6KCk9PlRhLGRlZmluZU1vZGVsOigpPT5PYSxkZWZpbmVPcHRpb25zOigpPT5FYSxkZWZpbmVQcm9wczooKT0+Q2EsZGVmaW5lU1NSQ3VzdG9tRWxlbWVudDooKT0+Q2wsZGVmaW5lU2xvdHM6KCk9PkRhLGRldnRvb2xzOigpPT5jYyxlZmZlY3Q6KCk9PlFlLGVmZmVjdFNjb3BlOigpPT5QZSxnZXRDdXJyZW50SW5zdGFuY2U6KCk9PkZzLGdldEN1cnJlbnRTY29wZTooKT0+RmUsZ2V0Q3VycmVudFdhdGNoZXI6KCk9PmpuLGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbjooKT0+aWksZ3VhcmRSZWFjdGl2ZVByb3BzOigpPT5TcyxoOigpPT50YyxoYW5kbGVFcnJvcjooKT0+VW4saGFzSW5qZWN0aW9uQ29udGV4dDooKT0+YnIsaHlkcmF0ZTooKT0+bXUsaHlkcmF0ZU9uSWRsZTooKT0+QWksaHlkcmF0ZU9uSW50ZXJhY3Rpb246KCk9PlBpLGh5ZHJhdGVPbk1lZGlhUXVlcnk6KCk9Pk5pLGh5ZHJhdGVPblZpc2libGU6KCk9Pk1pLGluaXRDdXN0b21Gb3JtYXR0ZXI6KCk9Pm5jLGluaXREaXJlY3RpdmVzRm9yU1NSOigpPT5idSxpbmplY3Q6KCk9PnlyLGlzTWVtb1NhbWU6KCk9PmljLGlzUHJveHk6KCk9Pm9uLGlzUmVhY3RpdmU6KCk9Pm5uLGlzUmVhZG9ubHk6KCk9PnJuLGlzUmVmOigpPT5qLGlzUnVudGltZU9ubHk6KCk9PkpzLGlzU2hhbGxvdzooKT0+YW4saXNWTm9kZTooKT0+Z3MsbWFya1JhdzooKT0+c24sbWVyZ2VEZWZhdWx0czooKT0+UGEsbWVyZ2VNb2RlbHM6KCk9PkZhLG1lcmdlUHJvcHM6KCk9PmtzLG5leHRUaWNrOigpPT5Rbixub2RlT3BzOigpPT52Yyxub3JtYWxpemVDbGFzczooKT0+Tyxub3JtYWxpemVQcm9wczooKT0+eGUsbm9ybWFsaXplU3R5bGU6KCk9PmdlLG9uQWN0aXZhdGVkOigpPT5IaSxvbkJlZm9yZU1vdW50OigpPT5YaSxvbkJlZm9yZVVubW91bnQ6KCk9PmVhLG9uQmVmb3JlVXBkYXRlOigpPT5RaSxvbkRlYWN0aXZhdGVkOigpPT5VaSxvbkVycm9yQ2FwdHVyZWQ6KCk9PmFhLG9uTW91bnRlZDooKT0+Wmksb25SZW5kZXJUcmFja2VkOigpPT5pYSxvblJlbmRlclRyaWdnZXJlZDooKT0+cmEsb25TY29wZURpc3Bvc2U6KCk9PkllLG9uU2VydmVyUHJlZmV0Y2g6KCk9Pm5hLG9uVW5tb3VudGVkOigpPT50YSxvblVwZGF0ZWQ6KCk9PiRpLG9uV2F0Y2hlckNsZWFudXA6KCk9Pk1uLG9wZW5CbG9jazooKT0+UixwYXRjaFByb3A6KCk9PnZsLHBvcFNjb3BlSWQ6KCk9Pm1yLHByb3ZpZGU6KCk9PnZyLHByb3h5UmVmczooKT0+Z24scHVzaFNjb3BlSWQ6KCk9PnByLHF1ZXVlUG9zdEZsdXNoQ2I6KCk9Pm5yLHJlYWN0aXZlOigpPT5adCxyZWFkb25seTooKT0+JHQscmVmOigpPT5NLHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyOigpPT5xcyxyZW5kZXI6KCk9PnB1LHJlbmRlckxpc3Q6KCk9Pm1hLHJlbmRlclNsb3Q6KCk9PkkscmVzb2x2ZUNvbXBvbmVudDooKT0+Y2EscmVzb2x2ZURpcmVjdGl2ZTooKT0+ZGEscmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ6KCk9PnVhLHJlc29sdmVGaWx0ZXI6KCk9Pm51bGwscmVzb2x2ZVRyYW5zaXRpb25Ib29rczooKT0+ZWksc2V0QmxvY2tUcmFja2luZzooKT0+bXMsc2V0RGV2dG9vbHNIb29rOigpPT5sYyxzZXRUcmFuc2l0aW9uSG9va3M6KCk9PnJpLHNoYWxsb3dSZWFjdGl2ZTooKT0+UXQsc2hhbGxvd1JlYWRvbmx5OigpPT5lbixzaGFsbG93UmVmOigpPT51bixzc3JDb250ZXh0S2V5OigpPT54cixzc3JVdGlsczooKT0+dWMsc3RvcDooKT0+JGUsdG9EaXNwbGF5U3RyaW5nOigpPT5rLHRvSGFuZGxlcktleTooKT0+Y2UsdG9IYW5kbGVyczooKT0+X2EsdG9SYXc6KCk9PkEsdG9SZWY6KCk9PlNuLHRvUmVmczooKT0+eW4sdG9WYWx1ZTooKT0+bW4sdHJhbnNmb3JtVk5vZGVBcmdzOigpPT52cyx0cmlnZ2VyUmVmOigpPT5wbix1bnJlZjooKT0+Tix1c2VBdHRyczooKT0+amEsdXNlQ3NzTW9kdWxlOigpPT5PbCx1c2VDc3NWYXJzOigpPT5LYyx1c2VIb3N0OigpPT5FbCx1c2VJZDooKT0+YWksdXNlTW9kZWw6KCk9PnJvLHVzZVNTUkNvbnRleHQ6KCk9PlNyLHVzZVNoYWRvd1Jvb3Q6KCk9PkRsLHVzZVNsb3RzOigpPT5BYSx1c2VUZW1wbGF0ZVJlZjooKT0+c2ksdXNlVHJhbnNpdGlvblN0YXRlOigpPT5Lcix2TW9kZWxDaGVja2JveDooKT0+S2wsdk1vZGVsRHluYW1pYzooKT0+JGwsdk1vZGVsUmFkaW86KCk9PkpsLHZNb2RlbFNlbGVjdDooKT0+WWwsdk1vZGVsVGV4dDooKT0+R2wsdlNob3c6KCk9PkhjLHZlcnNpb246KCk9PmFjLHdhcm46KCk9Pm9jLHdhdGNoOigpPT5Fcix3YXRjaEVmZmVjdDooKT0+Q3Isd2F0Y2hQb3N0RWZmZWN0OigpPT53cix3YXRjaFN5bmNFZmZlY3Q6KCk9PlRyLHdpdGhBc3luY0NvbnRleHQ6KCk9PkxhLHdpdGhDdHg6KCk9PlAsd2l0aERlZmF1bHRzOigpPT5rYSx3aXRoRGlyZWN0aXZlczooKT0+Z3Isd2l0aEtleXM6KCk9PnN1LHdpdGhNZW1vOigpPT5yYyx3aXRoTW9kaWZpZXJzOigpPT5hdSx3aXRoU2NvcGVJZDooKT0+aHJ9KSxTdT0oKT0+e307ZnVuY3Rpb24gQ3UoZSx0KXsodD09bnVsbHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPUFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHd1KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gVHUoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQ3UoZSl9ZnVuY3Rpb24gRXUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbmApfWZ1bmN0aW9uIER1KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsYHZhbHVlYGluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxSdShyLmtleSkscil9fWZ1bmN0aW9uIE91KGUsdCxuKXtyZXR1cm4gdCYmRHUoZS5wcm90b3R5cGUsdCksbiYmRHUoZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGt1KGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj1CdShlKSl8fHQmJmUmJnR5cGVvZiBlLmxlbmd0aD09YG51bWJlcmApe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW4ubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsYT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG4ucmV0dXJuPT1udWxsfHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybih0PVJ1KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEF1KGUpe2lmKHR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbYEBAaXRlcmF0b3JgXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBqdShlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYobiE9bnVsbCl7dmFyIHIsaSxhLG8scz1bXSxjPSEwLGw9ITE7dHJ5e2lmKGE9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KHI9YS5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbi5yZXR1cm4hPW51bGwmJihvPW4ucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319ZnVuY3Rpb24gTXUoKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBOdSgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBQdShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEsoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/UHUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0coZSx0LG5bdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UHUoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pfXJldHVybiBlfWZ1bmN0aW9uIEZ1KGUsdCl7cmV0dXJuIHd1KGUpfHxqdShlLHQpfHxCdShlLHQpfHxNdSgpfWZ1bmN0aW9uIEl1KGUpe3JldHVybiBUdShlKXx8QXUoZSl8fEJ1KGUpfHxOdSgpfWZ1bmN0aW9uIEx1KGUsdCl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8YGRlZmF1bHRgKTtpZih0eXBlb2YgciE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybih0PT09YHN0cmluZ2A/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gUnUoZSl7dmFyIHQ9THUoZSxgc3RyaW5nYCk7cmV0dXJuIHR5cGVvZiB0PT1gc3ltYm9sYD90OnQrYGB9ZnVuY3Rpb24genUoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4genU9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LHp1KGUpfWZ1bmN0aW9uIEJ1KGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBDdShlLHQpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIG49PT1gT2JqZWN0YCYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09YE1hcGB8fG49PT1gU2V0YD9BcnJheS5mcm9tKGUpOm49PT1gQXJndW1lbnRzYHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Q3UoZSx0KTp2b2lkIDB9fXZhciBWdT1mdW5jdGlvbigpe30sSHU9e30sVXU9e30sV3U9bnVsbCxHdT17bWFyazpWdSxtZWFzdXJlOlZ1fTt0cnl7dHlwZW9mIHdpbmRvdzxgdWAmJihIdT13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDxgdWAmJihVdT1kb2N1bWVudCksdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8YHVgJiYoV3U9TXV0YXRpb25PYnNlcnZlciksdHlwZW9mIHBlcmZvcm1hbmNlPGB1YCYmKEd1PXBlcmZvcm1hbmNlKX1jYXRjaHt9dmFyIEt1PShIdS5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQscXU9S3U9PT12b2lkIDA/YGA6S3UsSnU9SHUsWXU9VXUsWHU9V3UsWnU9R3U7SnUuZG9jdW1lbnQ7dmFyIFF1PSEhWXUuZG9jdW1lbnRFbGVtZW50JiYhIVl1LmhlYWQmJnR5cGVvZiBZdS5hZGRFdmVudExpc3RlbmVyPT1gZnVuY3Rpb25gJiZ0eXBlb2YgWXUuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCwkdT1+cXUuaW5kZXhPZihgTVNJRWApfHx+cXUuaW5kZXhPZihgVHJpZGVudC9gKSxlZCx0ZD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyxuZD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2kscmQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LGlkPXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0sYWQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sb2Q9YGNsYXNzaWNgLHNkPWBkdW90b25lYCxjZD1gc2hhcnBgLGxkPWBzaGFycC1kdW90b25lYCx1ZD1gY2hpc2VsYCxkZD1gZXRjaGAsZmQ9YGdyYXBoaXRlYCxwZD1gamVsbHlgLG1kPWBqZWxseS1kdW9gLGhkPWBqZWxseS1maWxsYCxnZD1gbW9zYWljYCxfZD1gbm90ZG9nYCx2ZD1gbm90ZG9nLWR1b2AseWQ9YHBpeGVsYCxiZD1gc2xhYmAseGQ9YHNsYWItZHVvYCxTZD1gc2xhYi1wcmVzc2AsQ2Q9YHNsYWItcHJlc3MtZHVvYCx3ZD1gdGh1bWJwcmludGAsVGQ9YHV0aWxpdHlgLEVkPWB1dGlsaXR5LWR1b2AsRGQ9YHV0aWxpdHktZmlsbGAsT2Q9YHZlbGx1bWAsa2Q9YHdoaXRlYm9hcmRgLEFkPWBDbGFzc2ljYCxqZD1gRHVvdG9uZWAsTWQ9YFNoYXJwYCxOZD1gU2hhcnAgRHVvdG9uZWAsUGQ9YENoaXNlbGAsRmQ9YEV0Y2hgLElkPWBHcmFwaGl0ZWAsTGQ9YEplbGx5YCxSZD1gSmVsbHkgRHVvYCx6ZD1gSmVsbHkgRmlsbGAsQmQ9YE1vc2FpY2AsVmQ9YE5vdGRvZ2AsSGQ9YE5vdGRvZyBEdW9gLFVkPWBQaXhlbGAsV2Q9YFNsYWJgLEdkPWBTbGFiIER1b2AsS2Q9YFNsYWIgUHJlc3NgLHFkPWBTbGFiIFByZXNzIER1b2AsSmQ9YFRodW1icHJpbnRgLFlkPWBVdGlsaXR5YCxYZD1gVXRpbGl0eSBEdW9gLFpkPWBVdGlsaXR5IEZpbGxgLFFkPWBWZWxsdW1gLCRkPWBXaGl0ZWJvYXJkYCxlZj1bb2Qsc2QsY2QsbGQsdWQsZGQsZmQscGQsbWQsaGQsZ2QsX2QsdmQseWQsYmQseGQsU2QsQ2Qsd2QsVGQsRWQsRGQsT2Qsa2RdO2VkPXt9LEcoRyhHKEcoRyhHKEcoRyhHKEcoZWQsb2QsQWQpLHNkLGpkKSxjZCxNZCksbGQsTmQpLHVkLFBkKSxkZCxGZCksZmQsSWQpLHBkLExkKSxtZCxSZCksaGQsemQpLEcoRyhHKEcoRyhHKEcoRyhHKEcoZWQsZ2QsQmQpLF9kLFZkKSx2ZCxIZCkseWQsVWQpLGJkLFdkKSx4ZCxHZCksU2QsS2QpLENkLHFkKSx3ZCxKZCksVGQsWWQpLEcoRyhHKEcoZWQsRWQsWGQpLERkLFpkKSxPZCxRZCksa2QsJGQpO3ZhciB0Zj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LG5mPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0scmY9bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSksYWY9e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxvZj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLHNmPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LGNmPVtga2l0YF07RyhHKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciBsZj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSx1Zj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sZGY9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSxmZj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0scGYsbWY9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxoZj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtwZj17fSxHKEcoRyhHKEcoRyhHKEcoRyhHKHBmLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksRyhHKEcoRyhHKEcoRyhHKEcoRyhwZixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLEcoRyhHKEcocGYsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLEcoRyh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgZ2Y9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sX2Y9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LHZmPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSx5Zj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQoaGYsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSksYmY9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSx4Zj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLFNmPXhmLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxDZj1bXS5jb25jYXQoSXUoT2JqZWN0LmtleXMoX2YpKSxiZixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLG1mLkdST1VQLG1mLlNXQVBfT1BBQ0lUWSxtZi5QUklNQVJZLG1mLlNFQ09OREFSWV0seGYubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSxTZi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSksd2Y9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0sVGY9YF9fX0ZPTlRfQVdFU09NRV9fX2AsRWY9MTYsRGY9YGZhYCxPZj1gc3ZnLWlubGluZS0tZmFgLGtmPWBkYXRhLWZhLWkyc3ZnYCxBZj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAsamY9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AsTWY9YGRhdGEtcHJlZml4YCxOZj1gZGF0YS1pY29uYCxQZj1gZm9udGF3ZXNvbWUtaTJzdmdgLEZmPWBhc3luY2AsSWY9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sTGY9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sUmY9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIHpmKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbb2RdfX0pfXZhciBCZj1LKHt9LHJkKTtCZltvZF09SyhLKEsoSyh7fSx7ImZhLWR1b3RvbmUiOmBkdW90b25lYH0pLHJkW29kXSksc2Yua2l0KSxzZltga2l0LWR1b3RvbmVgXSk7dmFyIFZmPXpmKEJmKSxIZj1LKHt9LGFmKTtIZltvZF09SyhLKEsoSyh7fSx7ZHVvdG9uZTpgZmFkYH0pLEhmW29kXSksZmYua2l0KSxmZltga2l0LWR1b3RvbmVgXSk7dmFyIFVmPXpmKEhmKSxXZj1LKHt9LHZmKTtXZltvZF09SyhLKHt9LFdmW29kXSksZGYua2l0KTt2YXIgR2Y9emYoV2YpLEtmPUsoe30sZ2YpO0tmW29kXT1LKEsoe30sS2Zbb2RdKSxsZi5raXQpLHpmKEtmKTt2YXIgcWY9dGQsSmY9YGZhLWxheWVycy10ZXh0YCxZZj1uZDt6ZihLKHt9LHRmKSk7dmFyIFhmPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sWmY9aWQsUWY9W10uY29uY2F0KEl1KGNmKSxJdShDZikpLCRmPUp1LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiBlcChlKXt2YXIgdD1ZdS5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbYCtlK2BdYCk7aWYodClyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gdHAoZSl7cmV0dXJuIGU9PT1gYD8hMDplPT09YGZhbHNlYD8hMTplPT09YHRydWVgfHxlfVl1JiZ0eXBlb2YgWXUucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PUZ1KGUsMiksbj10WzBdLHI9dFsxXSxpPXRwKGVwKG4pKTtpIT1udWxsJiYoJGZbcl09aSl9KTt2YXIgbnA9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6b2QsY3NzUHJlZml4OkRmLHJlcGxhY2VtZW50Q2xhc3M6T2YsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDpgYXN5bmNgLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07JGYuZmFtaWx5UHJlZml4JiYoJGYuY3NzUHJlZml4PSRmLmZhbWlseVByZWZpeCk7dmFyIHJwPUsoSyh7fSxucCksJGYpO3JwLmF1dG9SZXBsYWNlU3ZnfHwocnAub2JzZXJ2ZU11dGF0aW9ucz0hMSk7dmFyIHE9e307T2JqZWN0LmtleXMobnApLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsZSx7ZW51bWVyYWJsZTohMCxzZXQ6ZnVuY3Rpb24odCl7cnBbZV09dCxpcC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHEpfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBycFtlXX19KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtycC5jc3NQcmVmaXg9ZSxpcC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHEpfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBycC5jc3NQcmVmaXh9fSksSnUuRm9udEF3ZXNvbWVDb25maWc9cTt2YXIgaXA9W107ZnVuY3Rpb24gYXAoZSl7cmV0dXJuIGlwLnB1c2goZSksZnVuY3Rpb24oKXtpcC5zcGxpY2UoaXAuaW5kZXhPZihlKSwxKX19dmFyIG9wPUVmLHNwPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIGNwKGUpe2lmKCEoIWV8fCFRdSkpe3ZhciB0PVl1LmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7dC5zZXRBdHRyaWJ1dGUoYHR5cGVgLGB0ZXh0L2Nzc2ApLHQuaW5uZXJIVE1MPWU7Zm9yKHZhciBuPVl1LmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gWXUuaGVhZC5pbnNlcnRCZWZvcmUodCxyKSxlfX12YXIgbHA9YDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYDtmdW5jdGlvbiB1cCgpe2Zvcih2YXIgZT0xMix0PWBgO2UtLT4wOyl0Kz1scFtNYXRoLnJhbmRvbSgpKjYyfDBdO3JldHVybiB0fWZ1bmN0aW9uIGRwKGUpe2Zvcih2YXIgdD1bXSxuPShlfHxbXSkubGVuZ3RoPj4+MDtuLS07KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBmcChlKXtyZXR1cm4gZS5jbGFzc0xpc3Q/ZHAoZS5jbGFzc0xpc3QpOihlLmdldEF0dHJpYnV0ZShgY2xhc3NgKXx8YGApLnNwbGl0KGAgYCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9ZnVuY3Rpb24gcHAoZSl7cmV0dXJuYCR7ZX1gLnJlcGxhY2UoLyYvZyxgJmFtcDtgKS5yZXBsYWNlKC8iL2csYCZxdW90O2ApLnJlcGxhY2UoLycvZyxgJiMzOTtgKS5yZXBsYWNlKC88L2csYCZsdDtgKS5yZXBsYWNlKC8+L2csYCZndDtgKX1mdW5jdGlvbiBtcChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259PSIke3BwKGVbbl0pfSIgYH0sYGApLnRyaW0oKX1mdW5jdGlvbiBocChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZXx8e30pLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0K2Ake259OiAke2Vbbl0udHJpbSgpfTtgfSxgYCl9ZnVuY3Rpb24gZ3AoZSl7cmV0dXJuIGUuc2l6ZSE9PXNwLnNpemV8fGUueCE9PXNwLnh8fGUueSE9PXNwLnl8fGUucm90YXRlIT09c3Aucm90YXRlfHxlLmZsaXBYfHxlLmZsaXBZfWZ1bmN0aW9uIF9wKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS5jb250YWluZXJXaWR0aCxyPWUuaWNvbldpZHRoO3JldHVybntvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtuLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHt0LngqMzJ9LCAke3QueSozMn0pIGB9ICR7YHNjYWxlKCR7dC5zaXplLzE2Kih0LmZsaXBYPy0xOjEpfSwgJHt0LnNpemUvMTYqKHQuZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHt0LnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzIqLTF9IC0yNTYpYH19fWZ1bmN0aW9uIHZwKGUpe3ZhciB0PWUudHJhbnNmb3JtLG49ZS53aWR0aCxyPW49PT12b2lkIDA/RWY6bixpPWUuaGVpZ2h0LGE9aT09PXZvaWQgMD9FZjppLG89ZS5zdGFydENlbnRlcmVkLHM9byE9PXZvaWQgMCYmbyxjPWBgO3JldHVybiBjKz1zJiYkdT9gdHJhbnNsYXRlKCR7dC54L29wLXIvMn1lbSwgJHt0Lnkvb3AtYS8yfWVtKSBgOnM/YHRyYW5zbGF0ZShjYWxjKC01MCUgKyAke3QueC9vcH1lbSksIGNhbGMoLTUwJSArICR7dC55L29wfWVtKSkgYDpgdHJhbnNsYXRlKCR7dC54L29wfWVtLCAke3QueS9vcH1lbSkgYCxjKz1gc2NhbGUoJHt0LnNpemUvb3AqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS9vcCoodC5mbGlwWT8tMToxKX0pIGAsYys9YHJvdGF0ZSgke3Qucm90YXRlfWRlZykgYCxjfXZhciB5cD1gOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJzsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBCcmFuZHMnOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWInOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MnOwogIC0tZmEtZm9udC1zbGFiLWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTbGFiIER1byc7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MgRHVvJzsKICAtLWZhLWZvbnQtcGl4ZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUGl4ZWwnOwogIC0tZmEtZm9udC1tb3NhaWMtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE1vc2FpYyc7CiAgLS1mYS1mb250LXZlbGx1bS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVmVsbHVtJzsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCc7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQnOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyc7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8nOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBFdGNoJzsKICAtLWZhLWZvbnQtZ3JhcGhpdGUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUnOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSc7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCc7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8nOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgQ2hpc2VsJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSc7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byc7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsJzsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtY2FudmFzLXNxdWFyZSB7CiAgcGFkZGluZy1ibG9jazogMC4xMjVlbTsKICBtYXJnaW4tYmxvY2stZW5kOiAtMC4xMjVlbTsKfQoKLmZhLWNhbnZhcy1yb29teSB7CiAgcGFkZGluZy1ibG9jazogMC4yNWVtOwogIHBhZGRpbmctaW5saW5lOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjI1ZW07CiAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5mYS11bCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLWxpLW1hcmdpbiwgMi41ZW0pOwogIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0Owp9CgovKiBIZWFkcyBVcDogQm9yZGVyZWQgSWNvbnMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUhCiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhCiAgLSBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCBpbiB0aGlzIHZlcnNpb24gKnY3KSwgYnV0IGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBGb250IEF3ZXNvbWUgdjguCiovCi8qIE5vdGVzOgoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItd2lkdGggPSAxLzE2IGJ5IGRlZmF1bHQgKHRvIHJlbmRlciBhcyB+MXB4IGJhc2VkIG9uIGEgMTZweCBkZWZhdWx0IGZvbnQtc2l6ZSkKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXBhZGRpbmcgPQogICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KQogICoqIDQvMTYgZm9yIGhvcml6b250YWwgcGFkZGluZyAodG8gZ2l2ZSB+NHB4IG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbikKKi8KLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA2MjVlbSk7CiAgYm94LXNpemluZzogdmFyKC0tZmEtYm9yZGVyLWJveC1zaXppbmcsIGNvbnRlbnQtYm94KTsKICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCwKLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1wdWxsLXJpZ2h0LAouZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1iZWF0IHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpOwp9CgouZmEtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxLjVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtZmxpcC0zNjAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwLTM2MDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNzVzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc3BpbiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7Cn0KCi5mYS1zcGluLXNuYXAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluLXNuYXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtNCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC00OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMi40cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXNuYXAtOCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcC04OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgNHMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtYnV6eiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJ1eno7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjZzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXdhZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXdhZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjsKfQoKLmZhLWZsb2F0IHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxvYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAzcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwp9CgouZmEtc3dpbmcgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zd2luZzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjsKfQoKLmZhLWplbGxvIHsKICBhbmltYXRpb24tbmFtZTogZmEtamVsbG87CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAwLjlzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1vdXQpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtZmxpcC0zNjAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSwKICAuZmEtYnV6eiwKICAuZmEtZmxvYXQsCiAgLmZhLWplbGxvLAogIC5mYS1zcGluLXNuYXAsCiAgLmZhLXNwaW4tc25hcC00LAogIC5mYS1zcGluLXNuYXAtOCwKICAuZmEtc3dpbmcsCiAgLmZhLXdhZyB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA0NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjIgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjIyKSkpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEuMjUgKiB2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSkpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcpOwogIH0KICAxNCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4wNiksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjk0KSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtYW50aWNpcGF0aW9uLCAzcHgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45NCksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMTIpKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgNTIlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0tZmEtYm91bmNlLWhlaWdodCwgMC41ZW0pICogMS4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41LCAwLCAxLCAwLjUpOwogIH0KICA3MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45MikpIHRyYW5zbGF0ZVkoMCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC4zMywgMC42NiwgMSk7CiAgfQogIDg1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgsIDEuMDQpIHRyYW5zbGF0ZVkoY2FsYygtMnB4ICogdmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIDEpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgNDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC40LCAxKTsKICB9CiAgMjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ1JSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICBvcGFjaXR5OiBjYWxjKHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpICsgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjI4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIDAuNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA5MiUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiB2YXIoLS1mYS1mbGlwLW92ZXJzaG9vdCwgMS4wNCkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAtMzYwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUodmFyKC0tZmEtZmxpcC1hbnRpY2lwYXRpb24tc2NhbGUsIDAuOTUpKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC42KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpIHRyYW5zbGF0ZVgoLTFweCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpIHRyYW5zbGF0ZVgoMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA3OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTNkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxNi42NyUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDI4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDMzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDYyJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDY2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDc4LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDgzLjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDk1LjMzJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtNCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluLXNuYXAtOCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEyLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAyMS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAzNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAzNy41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDQ2LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNTklIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA3MS41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDc1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDg0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDg3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYnV6eiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjEsIDAsIDAuOSwgMSk7CiAgfQogIDUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC41ZGVnKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC41ZGVnKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSByb3RhdGUoMC4zZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSkpIHJvdGF0ZSgtMC4zZGVnKTsKICB9CiAgMjUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjcpKSByb3RhdGUoMC4yZGVnKTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgtMC4yZGVnKTsKICB9CiAgMzUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkgKiAwLjQpKSByb3RhdGUoMC4xZGVnKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS13YWcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMTIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNiwgMSk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXdhZy1hbmdsZSwgMTJkZWcpICogMC44NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbG9hdCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgMTUlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjQgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKHZhcigtLWZhLWZsb2F0LWRyaWZ0LCAxcHgpKSByb3RhdGUodmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpIHNjYWxlKDEsIDEpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXgsIDAuOTgpLCB2YXIoLS1mYS1mbG9hdC1zdHJldGNoLXksIDEuMDMpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMCk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC45MiAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMC41ICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgwLjk5NSwgMS4wMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMC4zMyk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMC4zICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpKSByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LXRpbHQsIDFkZWcpKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygwLjA1ICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3dpbmcgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC44LCAxKTsKICB9CiAgOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAxOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC42NSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuNjUsIDEpOwogIH0KICAzOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjQ1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGMoLTEgKiB2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpICogMC4xKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA2NCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtamVsbG8gewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSwgY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMiAtIHZhcigtLWZhLWplbGxvLXNjYWxlLXksIDEuMTIpKSwgdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpLCBjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSAtIDEpICogMC41KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpLCBjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikgLSAxKSAqIDAuMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNTglIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMiwgMC45OCk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA2OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gO2Z1bmN0aW9uIGJwKCl7dmFyIGU9RGYsdD1PZixuPXEuY3NzUHJlZml4LHI9cS5yZXBsYWNlbWVudENsYXNzLGk9eXA7aWYobiE9PWV8fHIhPT10KXt2YXIgYT1SZWdFeHAoYFxcLiR7ZX1cXC1gLGBnYCksbz1SZWdFeHAoYFxcLS0ke2V9XFwtYCxgZ2ApLHM9UmVnRXhwKGBcXC4ke3R9YCxgZ2ApO2k9aS5yZXBsYWNlKGEsYC4ke259LWApLnJlcGxhY2UobyxgLS0ke259LWApLnJlcGxhY2UocyxgLiR7cn1gKX1yZXR1cm4gaX12YXIgeHA9ITE7ZnVuY3Rpb24gU3AoKXtxLmF1dG9BZGRDc3MmJiF4cCYmKGNwKGJwKCkpLHhwPSEwKX12YXIgQ3A9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e2NzczpicCxpbnNlcnRDc3M6U3B9fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57YmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOmZ1bmN0aW9uKCl7U3AoKX0sYmVmb3JlSTJzdmc6ZnVuY3Rpb24oKXtTcCgpfX19fSx3cD1KdXx8e307d3BbVGZdfHwod3BbVGZdPXt9KSx3cFtUZl0uc3R5bGVzfHwod3BbVGZdLnN0eWxlcz17fSksd3BbVGZdLmhvb2tzfHwod3BbVGZdLmhvb2tzPXt9KSx3cFtUZl0uc2hpbXN8fCh3cFtUZl0uc2hpbXM9W10pO3ZhciBUcD13cFtUZl0sRXA9W10sRHA9ZnVuY3Rpb24oKXtZdS5yZW1vdmVFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCxEcCksT3A9MSxFcC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pfSxPcD0hMTtRdSYmKE9wPShZdS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChZdS5yZWFkeVN0YXRlKSxPcHx8WXUuYWRkRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsRHApKTtmdW5jdGlvbiBrcChlKXtRdSYmKE9wP3NldFRpbWVvdXQoZSwwKTpFcC5wdXNoKGUpKX1mdW5jdGlvbiBBcChlKXt2YXIgdD1lLnRhZyxuPWUuYXR0cmlidXRlcyxyPW49PT12b2lkIDA/e306bixpPWUuY2hpbGRyZW4sYT1pPT09dm9pZCAwP1tdOmk7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9wcChlKTpgPCR7dH0gJHttcChyKX0+JHthLm1hcChBcCkuam9pbihgYCl9PC8ke3R9PmB9ZnVuY3Rpb24ganAoZSx0LG4pe2lmKGUmJmVbdF0mJmVbdF1bbl0pcmV0dXJue3ByZWZpeDp0LGljb25OYW1lOm4saWNvbjplW3RdW25dfX12YXIgTXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfX0sTnA9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmtleXMoZSksYT1pLmxlbmd0aCxvPXI9PT12b2lkIDA/dDpNcCh0LHIpLHMsYyxsO2ZvcihuPT09dm9pZCAwPyhzPTEsbD1lW2lbMF1dKToocz0wLGw9bik7czxhO3MrKyljPWlbc10sbD1vKGwsZVtjXSxjLGUpO3JldHVybiBsfTtmdW5jdGlvbiBQcChlKXtyZXR1cm4gSXUoZSkubGVuZ3RoPT09MT9lLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTpudWxsfWZ1bmN0aW9uIEZwKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXt2YXIgcj1lW25dO3JldHVybiByLmljb24/dFtyLmljb25OYW1lXT1yLmljb246dFtuXT1yLHR9LHt9KX1mdW5jdGlvbiBJcChlLHQpe3ZhciBuPShhcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30pLnNraXBIb29rcyxyPW4hPT12b2lkIDAmJm4saT1GcCh0KTt0eXBlb2YgVHAuaG9va3MuYWRkUGFjaz09YGZ1bmN0aW9uYCYmIXI/VHAuaG9va3MuYWRkUGFjayhlLEZwKHQpKTpUcC5zdHlsZXNbZV09SyhLKHt9LFRwLnN0eWxlc1tlXXx8e30pLGkpLGU9PT1gZmFzYCYmSXAoYGZhYCx0KX12YXIgTHA9VHAuc3R5bGVzLFJwPVRwLnNoaW1zLHpwPU9iamVjdC5rZXlzKEdmKSxCcD16cC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1PYmplY3Qua2V5cyhHZlt0XSksZX0se30pLFZwPW51bGwsSHA9e30sVXA9e30sV3A9e30sR3A9e30sS3A9e307ZnVuY3Rpb24gcXAoZSl7cmV0dXJuflFmLmluZGV4T2YoZSl9ZnVuY3Rpb24gSnAoZSx0KXt2YXIgbj10LnNwbGl0KGAtYCkscj1uWzBdLGk9bi5zbGljZSgxKS5qb2luKGAtYCk7cmV0dXJuIHI9PT1lJiZpIT09YGAmJiFxcChpKT9pOm51bGx9dmFyIFlwPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5wKExwLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtyXT1OcChuLGUse30pLHR9LHt9KX07SHA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRbM10mJihlW3RbM11dPW4pLHRbMl0mJnRbMl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmB9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC50b1N0cmluZygxNildPW59KSxlfSksVXA9ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbbl09bix0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSksS3A9ZShmdW5jdGlvbihlLHQsbil7dmFyIHI9dFsyXTtyZXR1cm4gZVtuXT1uLHIuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW59KSxlfSk7dmFyIHQ9YGZhcmBpbiBMcHx8cS5hdXRvRmV0Y2hTdmcsbj1OcChScCxmdW5jdGlvbihlLG4pe3ZhciByPW5bMF0saT1uWzFdLGE9blsyXTtyZXR1cm4gaT09PWBmYXJgJiYhdCYmKGk9YGZhc2ApLHR5cGVvZiByPT1gc3RyaW5nYCYmKGUubmFtZXNbcl09e3ByZWZpeDppLGljb25OYW1lOmF9KSx0eXBlb2Ygcj09YG51bWJlcmAmJihlLnVuaWNvZGVzW3IudG9TdHJpbmcoMTYpXT17cHJlZml4OmksaWNvbk5hbWU6YX0pLGV9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO1dwPW4ubmFtZXMsR3A9bi51bmljb2RlcyxWcD1pbShxLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OnEuZmFtaWx5RGVmYXVsdH0pfTthcChmdW5jdGlvbihlKXtWcD1pbShlLnN0eWxlRGVmYXVsdCx7ZmFtaWx5OnEuZmFtaWx5RGVmYXVsdH0pfSksWXAoKTtmdW5jdGlvbiBYcChlLHQpe3JldHVybihIcFtlXXx8e30pW3RdfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuKFVwW2VdfHx7fSlbdF19ZnVuY3Rpb24gUXAoZSx0KXtyZXR1cm4oS3BbZV18fHt9KVt0XX1mdW5jdGlvbiAkcChlKXtyZXR1cm4gV3BbZV18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiBlbShlKXt2YXIgdD1HcFtlXSxuPVhwKGBmYXNgLGUpO3JldHVybiB0fHwobj97cHJlZml4OmBmYXNgLGljb25OYW1lOm59Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gdG0oKXtyZXR1cm4gVnB9dmFyIG5tPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O2Z1bmN0aW9uIHJtKGUpe3ZhciB0PW9kLG49enAucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7cS5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gZWYuZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBCcFtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIGltKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/b2Q6dCxyPVZmW25dW2VdO2lmKG49PT1zZCYmIWUpcmV0dXJuYGZhZGA7dmFyIGk9VWZbbl1bZV18fFVmW25dW3JdLGE9ZSBpbiBUcC5zdHlsZXM/ZTpudWxsO3JldHVybiBpfHxhfHxudWxsfWZ1bmN0aW9uIGFtKGUpe3ZhciB0PVtdLG49bnVsbDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPUpwKHEuY3NzUHJlZml4LGUpO3I/bj1yOmUmJnQucHVzaChlKX0pLHtpY29uTmFtZTpuLHJlc3Q6dH19ZnVuY3Rpb24gb20oZSl7cmV0dXJuIGUuc29ydCgpLmZpbHRlcihmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uaW5kZXhPZihlKT09PXR9KX12YXIgc209eWYuY29uY2F0KG9mKTtmdW5jdGlvbiBjbShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5za2lwTG9va3VwcyxuPXQhPT12b2lkIDAmJnQscj1udWxsLGk9b20oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHNtLmluY2x1ZGVzKGUpfSkpLGE9b20oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXNtLmluY2x1ZGVzKGUpfSkpLG89RnUoaS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSwhYWQuaW5jbHVkZXMoZSl9KSwxKVswXSxzPW89PT12b2lkIDA/bnVsbDpvLGM9cm0oaSksbD1LKEsoe30sYW0oYSkpLHt9LHtwcmVmaXg6aW0ocyx7ZmFtaWx5OmN9KX0pO3JldHVybiBLKEsoSyh7fSxsKSxmbSh7dmFsdWVzOmUsZmFtaWx5OmMsc3R5bGVzOkxwLGNvbmZpZzpxLGNhbm9uaWNhbDpsLGdpdmVuUHJlZml4OnJ9KSksbG0obixyLGwpKX1mdW5jdGlvbiBsbShlLHQsbil7dmFyIHI9bi5wcmVmaXgsaT1uLmljb25OYW1lO2lmKGV8fCFyfHwhaSlyZXR1cm57cHJlZml4OnIsaWNvbk5hbWU6aX07dmFyIGE9dD09PWBmYWA/JHAoaSk6e30sbz1RcChyLGkpO3JldHVybiBpPWEuaWNvbk5hbWV8fG98fGkscj1hLnByZWZpeHx8cixyPT09YGZhcmAmJiFMcC5mYXImJkxwLmZhcyYmIXEuYXV0b0ZldGNoU3ZnJiYocj1gZmFzYCkse3ByZWZpeDpyLGljb25OYW1lOml9fXZhciB1bT1lZi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1vZHx8ZSE9PXNkfSksZG09T2JqZWN0LmtleXModmYpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PW9kfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyh2ZltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gZm0oZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09c2QsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJnVtLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZG0uaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9cmYuZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9UXAoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PXRtKCl8fGBmYXNgKSxyfXZhciBwbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtFdSh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIE91KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPUsoSyh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksSXAobix0W25dKTt2YXIgcj1HZltvZF1bbl07ciYmSXAocix0W25dKSxZcCgpfSl9fSx7a2V5OmByZXNldGAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb25zPXt9fX0se2tleTpgX3B1bGxEZWZpbml0aW9uc2AsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnByZWZpeCYmdC5pY29uTmFtZSYmdC5pY29uP3swOnR9OnQ7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGk9ci5wcmVmaXgsYT1yLmljb25OYW1lLG89ci5pY29uLHM9b1syXTtlW2ldfHwoZVtpXT17fSkscy5sZW5ndGg+MCYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT1gc3RyaW5nYCYmKGVbaV1bdF09byl9KSxlW2ldW2FdPW99KSxlfX1dKX0oKSxtbT1bXSxobT17fSxnbT17fSxfbT1PYmplY3Qua2V5cyhnbSk7ZnVuY3Rpb24gdm0oZSx0KXt2YXIgbj10Lm1peG91dHNUbztyZXR1cm4gbW09ZSxobT17fSxPYmplY3Qua2V5cyhnbSkuZm9yRWFjaChmdW5jdGlvbihlKXtfbS5pbmRleE9mKGUpPT09LTEmJmRlbGV0ZSBnbVtlXX0pLG1tLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taXhvdXQ/ZS5taXhvdXQoKTp7fTtpZihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3R5cGVvZiB0W2VdPT1gZnVuY3Rpb25gJiYobltlXT10W2VdKSx6dSh0W2VdKT09PWBvYmplY3RgJiZPYmplY3Qua2V5cyh0W2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe25bZV18fChuW2VdPXt9KSxuW2VdW3JdPXRbZV1bcl19KX0pLGUuaG9va3Mpe3ZhciByPWUuaG9va3MoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2htW2VdfHwoaG1bZV09W10pLGhtW2VdLnB1c2gocltlXSl9KX1lLnByb3ZpZGVzJiZlLnByb3ZpZGVzKGdtKX0pLG59ZnVuY3Rpb24geW0oZSx0KXt2YXIgbj1bLi4uYXJndW1lbnRzXS5zbGljZSgyKTtyZXR1cm4oaG1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9ZS5hcHBseShudWxsLFt0XS5jb25jYXQobikpfSksdH1mdW5jdGlvbiBibShlKXt2YXIgdD1bLi4uYXJndW1lbnRzXS5zbGljZSgxKTsoaG1bZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYXBwbHkobnVsbCx0KX0pfWZ1bmN0aW9uIHhtKCl7dmFyIGU9YXJndW1lbnRzWzBdLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBnbVtlXT9nbVtlXS5hcHBseShudWxsLHQpOnZvaWQgMH1mdW5jdGlvbiBTbShlKXtlLnByZWZpeD09PWBmYWAmJihlLnByZWZpeD1gZmFzYCk7dmFyIHQ9ZS5pY29uTmFtZSxuPWUucHJlZml4fHx0bSgpO2lmKHQpcmV0dXJuIHQ9UXAobix0KXx8dCxqcChDbS5kZWZpbml0aW9ucyxuLHQpfHxqcChUcC5zdHlsZXMsbix0KX12YXIgQ209bmV3IHBtLHdtPXtub0F1dG86ZnVuY3Rpb24oKXtxLmF1dG9SZXBsYWNlU3ZnPSExLHEub2JzZXJ2ZU11dGF0aW9ucz0hMSxibShgbm9BdXRvYCl9LGNvbmZpZzpxLGRvbTp7aTJzdmc6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307cmV0dXJuIFF1PyhibShgYmVmb3JlSTJzdmdgLGUpLHhtKGBwc2V1ZG9FbGVtZW50czJzdmdgLGUpLHhtKGBpMnN2Z2AsZSkpOlByb21pc2UucmVqZWN0KEVycm9yKGBPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLmApKX0sd2F0Y2g6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sdD1lLmF1dG9SZXBsYWNlU3ZnUm9vdDtxLmF1dG9SZXBsYWNlU3ZnPT09ITEmJihxLmF1dG9SZXBsYWNlU3ZnPSEwKSxxLm9ic2VydmVNdXRhdGlvbnM9ITAsa3AoZnVuY3Rpb24oKXtUbSh7YXV0b1JlcGxhY2VTdmdSb290OnR9KSxibShgd2F0Y2hgLGUpfSl9fSxwYXJzZTp7aWNvbjpmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZih6dShlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm57cHJlZml4OmUucHJlZml4LGljb25OYW1lOlFwKGUucHJlZml4LGUuaWNvbk5hbWUpfHxlLmljb25OYW1lfTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpe3ZhciB0PWVbMV0uaW5kZXhPZihgZmEtYCk9PT0wP2VbMV0uc2xpY2UoMyk6ZVsxXSxuPWltKGVbMF0pO3JldHVybntwcmVmaXg6bixpY29uTmFtZTpRcChuLHQpfHx0fX1pZih0eXBlb2YgZT09YHN0cmluZ2AmJihlLmluZGV4T2YoYCR7cS5jc3NQcmVmaXh9LWApPi0xfHxlLm1hdGNoKHFmKSkpe3ZhciByPWNtKGUuc3BsaXQoYCBgKSx7c2tpcExvb2t1cHM6ITB9KTtyZXR1cm57cHJlZml4OnIucHJlZml4fHx0bSgpLGljb25OYW1lOlFwKHIucHJlZml4LHIuaWNvbk5hbWUpfHxyLmljb25OYW1lfX1pZih0eXBlb2YgZT09YHN0cmluZ2Ape3ZhciBpPXRtKCk7cmV0dXJue3ByZWZpeDppLGljb25OYW1lOlFwKGksZSl8fGV9fX19LGxpYnJhcnk6Q20sZmluZEljb25EZWZpbml0aW9uOlNtLHRvSHRtbDpBcH0sVG09ZnVuY3Rpb24oKXt2YXIgZT0oYXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9KS5hdXRvUmVwbGFjZVN2Z1Jvb3QsdD1lPT09dm9pZCAwP1l1OmU7KE9iamVjdC5rZXlzKFRwLnN0eWxlcykubGVuZ3RoPjB8fHEuYXV0b0ZldGNoU3ZnKSYmUXUmJnEuYXV0b1JlcGxhY2VTdmcmJndtLmRvbS5pMnN2Zyh7bm9kZTp0fSl9O2Z1bmN0aW9uIEVtKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhYnN0cmFjdCIse2dldDp0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImh0bWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hYnN0cmFjdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEFwKGUpfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZihRdSl7dmFyIHQ9WXUuY3JlYXRlRWxlbWVudChgZGl2YCk7cmV0dXJuIHQuaW5uZXJIVE1MPWUuaHRtbCx0LmNoaWxkcmVufX19KSxlfWZ1bmN0aW9uIERtKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLm1haW4scj1lLm1hc2ssaT1lLmF0dHJpYnV0ZXMsYT1lLnN0eWxlcyxvPWUudHJhbnNmb3JtO2lmKGdwKG8pJiZuLmZvdW5kJiYhci5mb3VuZCl7dmFyIHM9e3g6bi53aWR0aC9uLmhlaWdodC8yLHk6LjV9O2kuc3R5bGU9aHAoSyhLKHt9LGEpLHt9LHsidHJhbnNmb3JtLW9yaWdpbiI6YCR7cy54K28ueC8xNn1lbSAke3MueStvLnkvMTZ9ZW1gfSkpfXJldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fV19ZnVuY3Rpb24gT20oZSl7dmFyIHQ9ZS5wcmVmaXgsbj1lLmljb25OYW1lLHI9ZS5jaGlsZHJlbixpPWUuYXR0cmlidXRlcyxhPWUuc3ltYm9sLG89YT09PSEwP2Ake3R9LSR7cS5jc3NQcmVmaXh9LSR7bn1gOmE7cmV0dXJuW3t0YWc6YHN2Z2AsYXR0cmlidXRlczp7c3R5bGU6YGRpc3BsYXk6IG5vbmU7YH0sY2hpbGRyZW46W3t0YWc6YHN5bWJvbGAsYXR0cmlidXRlczpLKEsoe30saSkse30se2lkOm99KSxjaGlsZHJlbjpyfV19XX1mdW5jdGlvbiBrbShlKXtyZXR1cm5bYGFyaWEtbGFiZWxgLGBhcmlhLWxhYmVsbGVkYnlgLGB0aXRsZWAsYHJvbGVgXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGV9KX1mdW5jdGlvbiBBbShlKXt2YXIgdD1lLmljb25zLG49dC5tYWluLHI9dC5tYXNrLGk9ZS5wcmVmaXgsYT1lLmljb25OYW1lLG89ZS50cmFuc2Zvcm0scz1lLnN5bWJvbCxjPWUubWFza0lkLGw9ZS5leHRyYSx1PWUud2F0Y2hhYmxlLGQ9dSE9PXZvaWQgMCYmdSxmPXIuZm91bmQ/cjpuLHA9Zi53aWR0aCxtPWYuaGVpZ2h0LGg9W3EucmVwbGFjZW1lbnRDbGFzcyxhP2Ake3EuY3NzUHJlZml4fS0ke2F9YDpgYF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsLmNsYXNzZXMuaW5kZXhPZihlKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09YGB8fCEhZX0pLmNvbmNhdChsLmNsYXNzZXMpLmpvaW4oYCBgKSxnPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOksoSyh7fSxsLmF0dHJpYnV0ZXMpLHt9LHsiZGF0YS1wcmVmaXgiOmksImRhdGEtaWNvbiI6YSxjbGFzczpoLHJvbGU6bC5hdHRyaWJ1dGVzLnJvbGV8fGBpbWdgLHZpZXdCb3g6YDAgMCAke3B9ICR7bX1gfSl9OyFrbShsLmF0dHJpYnV0ZXMpJiYhbC5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdJiYoZy5hdHRyaWJ1dGVzW2BhcmlhLWhpZGRlbmBdPWB0cnVlYCksZCYmKGcuYXR0cmlidXRlc1trZl09YGApO3ZhciBfPUsoSyh7fSxnKSx7fSx7cHJlZml4OmksaWNvbk5hbWU6YSxtYWluOm4sbWFzazpyLG1hc2tJZDpjLHRyYW5zZm9ybTpvLHN5bWJvbDpzLHN0eWxlczpLKHt9LGwuc3R5bGVzKX0pLHY9ci5mb3VuZCYmbi5mb3VuZD94bShgZ2VuZXJhdGVBYnN0cmFjdE1hc2tgLF8pfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06eG0oYGdlbmVyYXRlQWJzdHJhY3RJY29uYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LHk9di5jaGlsZHJlbixiPXYuYXR0cmlidXRlcztyZXR1cm4gXy5jaGlsZHJlbj15LF8uYXR0cmlidXRlcz1iLHM/T20oXyk6RG0oXyl9ZnVuY3Rpb24gam0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS53aWR0aCxyPWUuaGVpZ2h0LGk9ZS50cmFuc2Zvcm0sYT1lLmV4dHJhLG89ZS53YXRjaGFibGUscz1vIT09dm9pZCAwJiZvLGM9SyhLKHt9LGEuYXR0cmlidXRlcykse30se2NsYXNzOmEuY2xhc3Nlcy5qb2luKGAgYCl9KTtzJiYoY1trZl09YGApO3ZhciBsPUsoe30sYS5zdHlsZXMpO2dwKGkpJiYobC50cmFuc2Zvcm09dnAoe3RyYW5zZm9ybTppLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6bixoZWlnaHQ6cn0pLGxbYC13ZWJraXQtdHJhbnNmb3JtYF09bC50cmFuc2Zvcm0pO3ZhciB1PWhwKGwpO3UubGVuZ3RoPjAmJihjLnN0eWxlPXUpO3ZhciBkPVtdO3JldHVybiBkLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpjLGNoaWxkcmVuOlt0XX0pLGR9ZnVuY3Rpb24gTW0oZSl7dmFyIHQ9ZS5jb250ZW50LG49ZS5leHRyYSxyPUsoSyh7fSxuLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpuLmNsYXNzZXMuam9pbihgIGApfSksaT1ocChuLnN0eWxlcyk7aS5sZW5ndGg+MCYmKHIuc3R5bGU9aSk7dmFyIGE9W107cmV0dXJuIGEucHVzaCh7dGFnOmBzcGFuYCxhdHRyaWJ1dGVzOnIsY2hpbGRyZW46W3RdfSksYX12YXIgTm09VHAuc3R5bGVzO2Z1bmN0aW9uIFBtKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9RnUoZS5zbGljZSg0KSwxKVswXSxpPW51bGw7cmV0dXJuIGk9QXJyYXkuaXNBcnJheShyKT97dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtxLmNzc1ByZWZpeH0tJHtaZi5HUk9VUH1gfSxjaGlsZHJlbjpbe3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7WmYuU0VDT05EQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMF19fSx7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntjbGFzczpgJHtxLmNzc1ByZWZpeH0tJHtaZi5QUklNQVJZfWAsZmlsbDpgY3VycmVudENvbG9yYCxkOnJbMV19fV19Ont0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2ZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyfX0se2ZvdW5kOiEwLHdpZHRoOnQsaGVpZ2h0Om4saWNvbjppfX12YXIgRm09e2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyfTtmdW5jdGlvbiBJbShlLHQpeyFSZiYmIXEuc2hvd01pc3NpbmdJY29ucyYmZSYmY29uc29sZS5lcnJvcihgSWNvbiB3aXRoIG5hbWUgIiR7ZX0iIGFuZCBwcmVmaXggIiR7dH0iIGlzIG1pc3NpbmcuYCl9ZnVuY3Rpb24gTG0oZSx0KXt2YXIgbj10O3JldHVybiB0PT09YGZhYCYmcS5zdHlsZURlZmF1bHQhPT1udWxsJiYodD10bSgpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe2lmKG49PT1gZmFgKXt2YXIgYT0kcChlKXx8e307ZT1hLmljb25OYW1lfHxlLHQ9YS5wcmVmaXh8fHR9aWYoZSYmdCYmTm1bdF0mJk5tW3RdW2VdKXt2YXIgbz1ObVt0XVtlXTtyZXR1cm4gcihQbShvKSl9SW0oZSx0KSxyKEsoSyh7fSxGbSkse30se2ljb246cS5zaG93TWlzc2luZ0ljb25zJiZlJiZ4bShgbWlzc2luZ0ljb25BYnN0cmFjdGApfHx7fX0pKX0pfXZhciBSbT1mdW5jdGlvbigpe30sem09cS5tZWFzdXJlUGVyZm9ybWFuY2UmJlp1JiZadS5tYXJrJiZadS5tZWFzdXJlP1p1OnttYXJrOlJtLG1lYXN1cmU6Um19LEJtPWBGQSAiNy4zLjEiYCxWbT1mdW5jdGlvbihlKXtyZXR1cm4gem0ubWFyayhgJHtCbX0gJHtlfSBiZWdpbnNgKSxmdW5jdGlvbigpe3JldHVybiBIbShlKX19LEhtPWZ1bmN0aW9uKGUpe3ptLm1hcmsoYCR7Qm19ICR7ZX0gZW5kc2ApLHptLm1lYXN1cmUoYCR7Qm19ICR7ZX1gLGAke0JtfSAke2V9IGJlZ2luc2AsYCR7Qm19ICR7ZX0gZW5kc2ApfSxVbT17YmVnaW46Vm0sZW5kOkhtfSxXbT1mdW5jdGlvbigpe307ZnVuY3Rpb24gR20oZSl7cmV0dXJuIHR5cGVvZihlLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZShrZik6bnVsbCk9PWBzdHJpbmdgfWZ1bmN0aW9uIEttKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKE1mKTpudWxsLG49ZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUoTmYpOm51bGw7cmV0dXJuIHQmJm59ZnVuY3Rpb24gcW0oZSl7cmV0dXJuIGUmJmUuY2xhc3NMaXN0JiZlLmNsYXNzTGlzdC5jb250YWlucyYmZS5jbGFzc0xpc3QuY29udGFpbnMocS5yZXBsYWNlbWVudENsYXNzKX1mdW5jdGlvbiBKbSgpe3JldHVybiBxLmF1dG9SZXBsYWNlU3ZnPT09ITA/JG0ucmVwbGFjZTokbVtxLmF1dG9SZXBsYWNlU3ZnXXx8JG0ucmVwbGFjZX1mdW5jdGlvbiBZbShlKXtyZXR1cm4gWXUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gWG0oZSl7cmV0dXJuIFl1LmNyZWF0ZUVsZW1lbnQoZSl9ZnVuY3Rpb24gWm0oZSl7dmFyIHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSkuY2VGbixuPXQ9PT12b2lkIDA/ZS50YWc9PT1gc3ZnYD9ZbTpYbTp0O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gWXUuY3JlYXRlVGV4dE5vZGUoZSk7dmFyIHI9bihlLnRhZyk7cmV0dXJuIE9iamVjdC5rZXlzKGUuYXR0cmlidXRlc3x8W10pLmZvckVhY2goZnVuY3Rpb24odCl7ci5zZXRBdHRyaWJ1dGUodCxlLmF0dHJpYnV0ZXNbdF0pfSksKGUuY2hpbGRyZW58fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IuYXBwZW5kQ2hpbGQoWm0oZSx7Y2VGbjpufSkpfSkscn1mdW5jdGlvbiBRbShlKXt2YXIgdD1gICR7ZS5vdXRlckhUTUx9IGA7cmV0dXJuIHQ9YCR7dH1Gb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIGAsdH12YXIgJG09e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtpZih0LnBhcmVudE5vZGUpe2lmKGVbMV0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFptKGUpLHQpfSksdC5nZXRBdHRyaWJ1dGUoa2YpPT09bnVsbCYmcS5rZWVwT3JpZ2luYWxTb3VyY2Upe3ZhciBuPVl1LmNyZWF0ZUNvbW1lbnQoUW0odCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH5mcCh0KS5pbmRleE9mKHEucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuICRtLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke3EuY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXEucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBBcChlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZShrZixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uIGVoKGUpe2UoKX1mdW5jdGlvbiB0aChlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6V207aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPWVoO3EubXV0YXRlQXBwcm9hY2g9PT1GZiYmKHI9SnUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxlaCkscihmdW5jdGlvbigpe3ZhciB0PUptKCkscj1VbS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgbmg9ITE7ZnVuY3Rpb24gcmgoKXtuaD0hMH1mdW5jdGlvbiBpaCgpe25oPSExfXZhciBhaD1udWxsO2Z1bmN0aW9uIG9oKGUpe2lmKFh1JiZxLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9XbTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP1dtOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP1dtOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9ZdTpzO2FoPW5ldyBYdShmdW5jdGlvbihlKXtpZighbmgpe3ZhciB0PXRtKCk7ZHAoZSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLnR5cGU9PT1gY2hpbGRMaXN0YCYmZS5hZGRlZE5vZGVzLmxlbmd0aD4wJiYhR20oZS5hZGRlZE5vZGVzWzBdKSYmKHEuc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oZS50YXJnZXQpLG4oZS50YXJnZXQpKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJmUudGFyZ2V0LnBhcmVudE5vZGUmJnEuc2VhcmNoUHNldWRvRWxlbWVudHMmJm8oW2UudGFyZ2V0XSwhMCksZS50eXBlPT09YGF0dHJpYnV0ZXNgJiZHbShlLnRhcmdldCkmJn5YZi5pbmRleE9mKGUuYXR0cmlidXRlTmFtZSkpe2lmKGUuYXR0cmlidXRlTmFtZT09PWBjbGFzc2AmJkttKGUudGFyZ2V0KSl7dmFyIHI9Y20oZnAoZS50YXJnZXQpKSxhPXIucHJlZml4LHM9ci5pY29uTmFtZTtlLnRhcmdldC5zZXRBdHRyaWJ1dGUoTWYsYXx8dCkscyYmZS50YXJnZXQuc2V0QXR0cmlidXRlKE5mLHMpfWVsc2UgcW0oZS50YXJnZXQpJiZpKGUudGFyZ2V0KX19KX19KSxRdSYmYWgub2JzZXJ2ZShjLHtjaGlsZExpc3Q6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITB9KX19ZnVuY3Rpb24gc2goKXthaCYmYWguZGlzY29ubmVjdCgpfWZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKGBzdHlsZWApLG49W107cmV0dXJuIHQmJihuPXQuc3BsaXQoYDtgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwbGl0KGA6YCkscj1uWzBdLGk9bi5zbGljZSgxKTtyZXR1cm4gciYmaS5sZW5ndGg+MCYmKGVbcl09aS5qb2luKGA6YCkudHJpbSgpKSxlfSx7fSkpLG59ZnVuY3Rpb24gbGgoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtcHJlZml4YCksbj1lLmdldEF0dHJpYnV0ZShgZGF0YS1pY29uYCkscj1lLmlubmVyVGV4dD09PXZvaWQgMD9gYDplLmlubmVyVGV4dC50cmltKCksaT1jbShmcChlKSk7cmV0dXJuIGkucHJlZml4fHw9dG0oKSx0JiZuJiYoaS5wcmVmaXg9dCxpLmljb25OYW1lPW4pLGkuaWNvbk5hbWUmJmkucHJlZml4P2k6KGkucHJlZml4JiZyLmxlbmd0aD4wJiYoaS5pY29uTmFtZT1acChpLnByZWZpeCxlLmlubmVyVGV4dCl8fFhwKGkucHJlZml4LFBwKGUuaW5uZXJUZXh0KSkpLCFpLmljb25OYW1lJiZxLmF1dG9GZXRjaFN2ZyYmZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSYmKGkuaWNvbk5hbWU9ZS5maXJzdENoaWxkLmRhdGEpLGkpfWZ1bmN0aW9uIHVoKGUpe3JldHVybiBkcChlLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm5hbWUhPT1gY2xhc3NgJiZlLm5hbWUhPT1gc3R5bGVgJiYoZVt0Lm5hbWVdPXQudmFsdWUpLGV9LHt9KX1mdW5jdGlvbiBkaCgpe3JldHVybntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHRyYW5zZm9ybTpzcCxzeW1ib2w6ITEsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxleHRyYTp7Y2xhc3NlczpbXSxzdHlsZXM6e30sYXR0cmlidXRlczp7fX19fWZ1bmN0aW9uIGZoKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7c3R5bGVQYXJzZXI6ITB9LG49bGgoZSkscj1uLmljb25OYW1lLGk9bi5wcmVmaXgsYT1uLnJlc3Qsbz11aChlKSxzPXltKGBwYXJzZU5vZGVBdHRyaWJ1dGVzYCx7fSxlKTtyZXR1cm4gSyh7aWNvbk5hbWU6cixwcmVmaXg6aSx0cmFuc2Zvcm06c3AsbWFzazp7aWNvbk5hbWU6bnVsbCxwcmVmaXg6bnVsbCxyZXN0OltdfSxtYXNrSWQ6bnVsbCxzeW1ib2w6ITEsZXh0cmE6e2NsYXNzZXM6YSxzdHlsZXM6dC5zdHlsZVBhcnNlcj9jaChlKTpbXSxhdHRyaWJ1dGVzOm99fSxzKX12YXIgcGg9VHAuc3R5bGVzO2Z1bmN0aW9uIG1oKGUpe3ZhciB0PXEuYXV0b1JlcGxhY2VTdmc9PT1gbmVzdGA/ZmgoZSx7c3R5bGVQYXJzZXI6ITF9KTpmaChlKTtyZXR1cm5+dC5leHRyYS5jbGFzc2VzLmluZGV4T2YoSmYpP3htKGBnZW5lcmF0ZUxheWVyc1RleHRgLGUsdCk6eG0oYGdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbmAsZSx0KX1mdW5jdGlvbiBoaCgpe3JldHVybltdLmNvbmNhdChJdShvZiksSXUoeWYpKX1mdW5jdGlvbiBnaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtpZighUXUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBuPVl1LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Qscj1mdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoYCR7UGZ9LSR7ZX1gKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbi5yZW1vdmUoYCR7UGZ9LSR7ZX1gKX0sYT1xLmF1dG9GZXRjaFN2Zz9oaCgpOmFkLmNvbmNhdChPYmplY3Qua2V5cyhwaCkpO2EuaW5jbHVkZXMoYGZhYCl8fGEucHVzaChgZmFgKTt2YXIgbz1bYC4ke0pmfTpub3QoWyR7a2Z9XSlgXS5jb25jYXQoYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYC4ke2V9Om5vdChbJHtrZn1dKWB9KSkuam9pbihgLCBgKTtpZihvLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBzPVtdO3RyeXtzPWRwKGUucXVlcnlTZWxlY3RvckFsbChvKSl9Y2F0Y2h7fWlmKHMubGVuZ3RoPjApcihgcGVuZGluZ2ApLGkoYGNvbXBsZXRlYCk7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGM9VW0uYmVnaW4oYG9uVHJlZWApLGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49bWgodCk7biYmZS5wdXNoKG4pfWNhdGNoKGUpe1JmfHxlLm5hbWU9PT1gTWlzc2luZ0ljb25gJiZjb25zb2xlLmVycm9yKGUpfXJldHVybiBlfSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5hbGwobCkudGhlbihmdW5jdGlvbihuKXt0aChuLGZ1bmN0aW9uKCl7cihgYWN0aXZlYCkscihgY29tcGxldGVgKSxpKGBwZW5kaW5nYCksdHlwZW9mIHQ9PWBmdW5jdGlvbmAmJnQoKSxjKCksZSgpfSl9KS5jYXRjaChmdW5jdGlvbihlKXtjKCksbihlKX0pfSl9ZnVuY3Rpb24gX2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7bWgoZSkudGhlbihmdW5jdGlvbihlKXtlJiZ0aChbZV0sdCl9KX1mdW5jdGlvbiB2aChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9KHR8fHt9KS5pY29uP3Q6U20odHx8e30pLGk9bi5tYXNrO3JldHVybiBpJiY9KGl8fHt9KS5pY29uP2k6U20oaXx8e30pLGUocixLKEsoe30sbikse30se21hc2s6aX0pKX19dmFyIHloPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9zcDpuLGk9dC5zeW1ib2wsYT1pIT09dm9pZCAwJiZpLG89dC5tYXNrLHM9bz09PXZvaWQgMD9udWxsOm8sYz10Lm1hc2tJZCxsPWM9PT12b2lkIDA/bnVsbDpjLHU9dC5jbGFzc2VzLGQ9dT09PXZvaWQgMD9bXTp1LGY9dC5hdHRyaWJ1dGVzLHA9Zj09PXZvaWQgMD97fTpmLG09dC5zdHlsZXMsaD1tPT09dm9pZCAwP3t9Om07aWYoZSl7dmFyIGc9ZS5wcmVmaXgsXz1lLmljb25OYW1lLHY9ZS5pY29uO3JldHVybiBFbShLKHt0eXBlOmBpY29uYH0sZSksZnVuY3Rpb24oKXtyZXR1cm4gYm0oYGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbmAse2ljb25EZWZpbml0aW9uOmUscGFyYW1zOnR9KSxBbSh7aWNvbnM6e21haW46UG0odiksbWFzazpzP1BtKHMuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDpnLGljb25OYW1lOl8sdHJhbnNmb3JtOksoSyh7fSxzcCksciksc3ltYm9sOmEsbWFza0lkOmwsZXh0cmE6e2F0dHJpYnV0ZXM6cCxzdHlsZXM6aCxjbGFzc2VzOmR9fSl9KX19LGJoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57aWNvbjp2aCh5aCl9fSxob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyZWVDYWxsYmFjaz1naCxlLm5vZGVDYWxsYmFjaz1faCxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuaTJzdmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLG49dD09PXZvaWQgMD9ZdTp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gZ2gobixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtMbShuLHIpLG8uaWNvbk5hbWU/TG0oby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPUZ1KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLEFtKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89aHAoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIGdwKGkpJiYocz14bShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSx4aD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gRW0oe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXtibShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtxLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KEl1KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSxTaD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIEVtKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGJtKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxNbSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake3EuY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChJdShhKSl9fSl9KX19fX0sQ2g9e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9zcDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIEVtKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGJtKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxqbSh7Y29udGVudDplLHRyYW5zZm9ybTpLKEsoe30sc3ApLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7cS5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KEl1KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoJHUpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSxqbSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSx3aD1SZWdFeHAoYCJgLGB1Z2ApLFRoPVsxMTA1OTIwLDExMTIzMTldLEVoPUsoSyhLKEsoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLG5mKSx3ZiksdWYpLERoPU9iamVjdC5rZXlzKEVoKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPUVoW3RdLGV9LHt9KSxPaD1PYmplY3Qua2V5cyhEaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49RGhbdF07cmV0dXJuIGVbdF09bls5MDBdfHxJdShPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIGtoKGUpe3JldHVybiBQcChJdShlLnJlcGxhY2Uod2gsYGApKVswXXx8YGApfWZ1bmN0aW9uIEFoKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2Uod2gsYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PVRoWzBdJiZyPD1UaFsxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24gamgoZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKERoW25dfHx7fSlbaV18fE9oW25dfWZ1bmN0aW9uIE1oKGUsdCl7dmFyIG49YCR7amZ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT1kcChlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKEFmKT09PXR9KVswXSxvPUp1LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goWWYpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj1qaChzLGwpLHA9a2goZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD1BaChvKSxnPVhwKGYscCksXz1nO2lmKG0pe3ZhciB2PWVtKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKE1mKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKE5mKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9ZGgoKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW0FmXT10LExtKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT1BbShLKEsoe30seSkse30se2ljb25zOnttYWluOmksbWFzazpubSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89WXUuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsYHN2Z2ApO3Q9PT1gOjpiZWZvcmVgP2UuaW5zZXJ0QmVmb3JlKG8sZS5maXJzdENoaWxkKTplLmFwcGVuZENoaWxkKG8pLG8ub3V0ZXJIVE1MPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBBcChlKX0pLmpvaW4oYApgKSxlLnJlbW92ZUF0dHJpYnV0ZShuKSxyKCl9KS5jYXRjaChpKX1lbHNlIHIoKX1lbHNlIHIoKX0pfWZ1bmN0aW9uIE5oKGUpe3JldHVybiBQcm9taXNlLmFsbChbTWgoZSxgOjpiZWZvcmVgKSxNaChlLGA6OmFmdGVyYCldKX1mdW5jdGlvbiBQaChlKXtyZXR1cm4gZS5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmIX5JZi5pbmRleE9mKGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSYmIWUuZ2V0QXR0cmlidXRlKEFmKSYmKCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS50YWdOYW1lIT09YHN2Z2ApfXZhciBGaD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJkxmLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KX0sSWg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107dmFyIHQ9bmV3IFNldCxuPWUuc3BsaXQoLywoPyFbXigpXSpcKSkvKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSk7bj1uLmZsYXRNYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5jbHVkZXMoYChgKT9lOmUuc3BsaXQoYCxgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSl9KTt2YXIgcj1rdShuKSxpO3RyeXtmb3Ioci5zKCk7IShpPXIubigpKS5kb25lOyl7dmFyIGE9aS52YWx1ZTtpZihGaChhKSl7dmFyIG89TGYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0LGBgKX0sYSk7byE9PWBgJiZvIT09YCpgJiZ0LmFkZChvKX19fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0fTtmdW5jdGlvbiBMaChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMCYmYXJndW1lbnRzWzFdO2lmKFF1KXt2YXIgbjtpZih0KW49ZTtlbHNlIGlmKHEuc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiluPWUucXVlcnlTZWxlY3RvckFsbChgKmApO2Vsc2V7dmFyIHI9bmV3IFNldCxpPWt1KGRvY3VtZW50LnN0eWxlU2hlZXRzKSxhO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZTt0cnl7dmFyIHM9a3Uoby5jc3NSdWxlcyksYzt0cnl7Zm9yKHMucygpOyEoYz1zLm4oKSkuZG9uZTspe3ZhciBsPWMudmFsdWUsdT1rdShJaChsLnNlbGVjdG9yVGV4dCkpLGQ7dHJ5e2Zvcih1LnMoKTshKGQ9dS5uKCkpLmRvbmU7KXt2YXIgZj1kLnZhbHVlO3IuYWRkKGYpfX1jYXRjaChlKXt1LmUoZSl9ZmluYWxseXt1LmYoKX19fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX1jYXRjaChlKXtxLnNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MmJmNvbnNvbGUud2FybihgRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogJHtvLmhyZWZ9ICgke2UubWVzc2FnZX0pCklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLmApfX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9aWYoIXIuc2l6ZSlyZXR1cm47dmFyIHA9QXJyYXkuZnJvbShyKS5qb2luKGAsIGApO3RyeXtuPWUucXVlcnlTZWxlY3RvckFsbChwKX1jYXRjaHt9fXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciByPWRwKG4pLmZpbHRlcihQaCkubWFwKE5oKSxpPVVtLmJlZ2luKGBzZWFyY2hQc2V1ZG9FbGVtZW50c2ApO3JoKCksUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbigpe2koKSxpaCgpLGUoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7aSgpLGloKCksdCgpfSl9KX19dmFyIFJoPXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9TGgsZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLnBzZXVkb0VsZW1lbnRzMnN2Zz1mdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUsbj10PT09dm9pZCAwP1l1OnQ7cS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmTGgobil9fX0semg9ITEsQmg9e21peG91dDpmdW5jdGlvbigpe3JldHVybntkb206e3Vud2F0Y2g6ZnVuY3Rpb24oKXtyaCgpLHpoPSEwfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntib290c3RyYXA6ZnVuY3Rpb24oKXtvaCh5bShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7c2goKX0sd2F0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vYnNlcnZlTXV0YXRpb25zUm9vdDt6aD9paCgpOm9oKHltKGBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzYCx7b2JzZXJ2ZU11dGF0aW9uc1Jvb3Q6dH0pKX19fX0sVmg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdChgIGApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO2lmKHImJmk9PT1gaGApcmV0dXJuIGUuZmxpcFg9ITAsZTtpZihyJiZpPT09YHZgKXJldHVybiBlLmZsaXBZPSEwLGU7aWYoaT1wYXJzZUZsb2F0KGkpLGlzTmFOKGkpKXJldHVybiBlO3N3aXRjaChyKXtjYXNlYGdyb3dgOmUuc2l6ZSs9aTticmVhaztjYXNlYHNocmlua2A6ZS5zaXplLT1pO2JyZWFrO2Nhc2VgbGVmdGA6ZS54LT1pO2JyZWFrO2Nhc2VgcmlnaHRgOmUueCs9aTticmVhaztjYXNlYHVwYDplLnktPWk7YnJlYWs7Y2FzZWBkb3duYDplLnkrPWk7YnJlYWs7Y2FzZWByb3RhdGVgOmUucm90YXRlKz1pfXJldHVybiBlfSx7c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfSl9LEhoPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gVmgoZSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS10cmFuc2Zvcm1gKTtyZXR1cm4gbiYmKGUudHJhbnNmb3JtPVZoKG4pKSxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWFpbixuPWUudHJhbnNmb3JtLHI9ZS5jb250YWluZXJXaWR0aCxpPWUuaWNvbldpZHRoLGE9e291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke24ueCozMn0sICR7bi55KjMyfSkgYH0gJHtgc2NhbGUoJHtuLnNpemUvMTYqKG4uZmxpcFg/LTE6MSl9LCAke24uc2l6ZS8xNioobi5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke24ucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke2kvMiotMX0gLTI1NilgfX07cmV0dXJue3RhZzpgZ2AsYXR0cmlidXRlczpLKHt9LGEub3V0ZXIpLGNoaWxkcmVuOlt7dGFnOmBnYCxhdHRyaWJ1dGVzOksoe30sYS5pbm5lciksY2hpbGRyZW46W3t0YWc6dC5pY29uLnRhZyxjaGlsZHJlbjp0Lmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpLKEsoe30sdC5pY29uLmF0dHJpYnV0ZXMpLGEucGF0aCl9XX1dfX19fSxVaD17eDowLHk6MCx3aWR0aDpgMTAwJWAsaGVpZ2h0OmAxMDAlYH07ZnVuY3Rpb24gV2goZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBlLmF0dHJpYnV0ZXMmJihlLmF0dHJpYnV0ZXMuZmlsbHx8dCkmJihlLmF0dHJpYnV0ZXMuZmlsbD1gYmxhY2tgKSxlfWZ1bmN0aW9uIEdoKGUpe3JldHVybiBlLnRhZz09PWBnYD9lLmNoaWxkcmVuOltlXX12bShbQ3AsYmgseGgsU2gsQ2gsUmgsQmgsSGgse2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrYCkscj1uP2NtKG4uc3BsaXQoYCBgKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfSkpOm5tKCk7cmV0dXJuIHIucHJlZml4fHw9dG0oKSxlLm1hc2s9cixlLm1hc2tJZD10LmdldEF0dHJpYnV0ZShgZGF0YS1mYS1tYXNrLWlkYCksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RNYXNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLm1hc2ssYT1lLm1hc2tJZCxvPWUudHJhbnNmb3JtLHM9ci53aWR0aCxjPXIuaWNvbixsPWkud2lkdGgsdT1pLmljb24sZD1fcCh7dHJhbnNmb3JtOm8sY29udGFpbmVyV2lkdGg6bCxpY29uV2lkdGg6c30pLGY9e3RhZzpgcmVjdGAsYXR0cmlidXRlczpLKEsoe30sVWgpLHt9LHtmaWxsOmB3aGl0ZWB9KX0scD1jLmNoaWxkcmVuP3tjaGlsZHJlbjpjLmNoaWxkcmVuLm1hcChXaCl9Ont9LG09e3RhZzpgZ2AsYXR0cmlidXRlczpLKHt9LGQuaW5uZXIpLGNoaWxkcmVuOltXaChLKHt0YWc6Yy50YWcsYXR0cmlidXRlczpLKEsoe30sYy5hdHRyaWJ1dGVzKSxkLnBhdGgpfSxwKSldfSxoPXt0YWc6YGdgLGF0dHJpYnV0ZXM6Syh7fSxkLm91dGVyKSxjaGlsZHJlbjpbbV19LGc9YG1hc2stJHthfHx1cCgpfWAsXz1gY2xpcC0ke2F8fHVwKCl9YCx2PXt0YWc6YG1hc2tgLGF0dHJpYnV0ZXM6SyhLKHt9LFVoKSx7fSx7aWQ6ZyxtYXNrVW5pdHM6YHVzZXJTcGFjZU9uVXNlYCxtYXNrQ29udGVudFVuaXRzOmB1c2VyU3BhY2VPblVzZWB9KSxjaGlsZHJlbjpbZixoXX0seT17dGFnOmBkZWZzYCxjaGlsZHJlbjpbe3RhZzpgY2xpcFBhdGhgLGF0dHJpYnV0ZXM6e2lkOl99LGNoaWxkcmVuOkdoKHUpfSx2XX07cmV0dXJuIHQucHVzaCh5LHt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6Syh7ZmlsbDpgY3VycmVudENvbG9yYCwiY2xpcC1wYXRoIjpgdXJsKCMke199KWAsbWFzazpgdXJsKCMke2d9KWB9LFVoKX0pLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6bn19fX0se3Byb3ZpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSExO0p1Lm1hdGNoTWVkaWEmJih0PUp1Lm1hdGNoTWVkaWEoYChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpYCkubWF0Y2hlcyksZS5taXNzaW5nSWNvbkFic3RyYWN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sbj17ZmlsbDpgY3VycmVudENvbG9yYH0scj17YXR0cmlidXRlVHlwZTpgWE1MYCxyZXBlYXRDb3VudDpgaW5kZWZpbml0ZWAsZHVyOmAyc2B9O2UucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7ZDpgTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40emB9KX0pO3ZhciBpPUsoSyh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgb3BhY2l0eWB9KSxhPXt0YWc6YGNpcmNsZWAsYXR0cmlidXRlczpLKEsoe30sbikse30se2N4OmAyNTZgLGN5OmAzNjRgLHI6YDI4YH0pLGNoaWxkcmVuOltdfTtyZXR1cm4gdHx8YS5jaGlsZHJlbi5wdXNoKHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6SyhLKHt9LHIpLHt9LHthdHRyaWJ1dGVOYW1lOmByYCx2YWx1ZXM6YDI4OzE0OzI4OzI4OzE0OzI4O2B9KX0se3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpLKEsoe30saSkse30se3ZhbHVlczpgMTswOzE7MTswOzE7YH0pfSksZS5wdXNoKGEpLGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7b3BhY2l0eTpgMWAsZDpgTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyemB9KSxjaGlsZHJlbjp0P1tdOlt7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOksoSyh7fSxpKSx7fSx7dmFsdWVzOmAxOzA7MDswOzA7MTtgfSl9XX0pLHR8fGUucHVzaCh7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOksoSyh7fSxuKSx7fSx7b3BhY2l0eTpgMGAsZDpgTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41emB9KSxjaGlsZHJlbjpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpLKEsoe30saSkse30se3ZhbHVlczpgMDswOzE7MTswOzA7YH0pfV19KSx7dGFnOmBnYCxhdHRyaWJ1dGVzOntjbGFzczpgbWlzc2luZ2B9LGNoaWxkcmVuOmV9fX19LHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtc3ltYm9sYCk7cmV0dXJuIGUuc3ltYm9sPW49PT1udWxsPyExOm49PT1gYHx8bixlfX19fV0se21peG91dHNUbzp3bX0pLHdtLm5vQXV0byx3bS5jb25maWcsd20ubGlicmFyeSx3bS5kb207dmFyIEtoPXdtLnBhcnNlO3dtLmZpbmRJY29uRGVmaW5pdGlvbix3bS50b0h0bWw7dmFyIHFoPXdtLmljb247d20ubGF5ZXIsd20udGV4dCx3bS5jb3VudGVyO2Z1bmN0aW9uIEpoKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBZaChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBKaChlKX1mdW5jdGlvbiBYaChlLHQsbil7cmV0dXJuKHQ9YWcodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWmgoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIFFoKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uICRoKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZWcoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdPT1udWxsP3t9OmFyZ3VtZW50c1t0XTt0JTI/JGgoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1hoKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOiRoKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiB0ZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPW5nKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiBuZyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gcmcoZSl7cmV0dXJuIFloKGUpfHxaaChlKXx8c2coZSl8fFFoKCl9ZnVuY3Rpb24gaWcoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBhZyhlKXt2YXIgdD1pZyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBvZyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBvZz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sb2coZSl9ZnVuY3Rpb24gc2coZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIEpoKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KaChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gY2coZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WGgoe30sZSx0KTp7fX1mdW5jdGlvbiBsZyhlKXt2YXIgdCxuPSh0PXsiZmEtc3BpbiI6ZS5zcGluLCJmYS1wdWxzZSI6ZS5wdWxzZSwiZmEtZnciOmUuZml4ZWRXaWR0aCwiZmEtYm9yZGVyIjplLmJvcmRlciwiZmEtbGkiOmUubGlzdEl0ZW0sImZhLWludmVyc2UiOmUuaW52ZXJzZSwiZmEtZmxpcCI6ZS5mbGlwPT09ITAsImZhLWZsaXAtaG9yaXpvbnRhbCI6ZS5mbGlwPT09YGhvcml6b250YWxgfHxlLmZsaXA9PT1gYm90aGAsImZhLWZsaXAtdmVydGljYWwiOmUuZmxpcD09PWB2ZXJ0aWNhbGB8fGUuZmxpcD09PWBib3RoYH0sWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgoWGgodCxgZmEtJHtlLnNpemV9YCxlLnNpemUhPT1udWxsKSxgZmEtcm90YXRlLSR7ZS5yb3RhdGlvbn1gLGUucm90YXRpb24hPT1udWxsKSxgZmEtcm90YXRlLWJ5YCxlLnJvdGF0ZUJ5KSxgZmEtcHVsbC0ke2UucHVsbH1gLGUucHVsbCE9PW51bGwpLGBmYS1zd2FwLW9wYWNpdHlgLGUuc3dhcE9wYWNpdHkpLGBmYS1ib3VuY2VgLGUuYm91bmNlKSxgZmEtc2hha2VgLGUuc2hha2UpLGBmYS1iZWF0YCxlLmJlYXQpLGBmYS1mYWRlYCxlLmZhZGUpLGBmYS1iZWF0LWZhZGVgLGUuYmVhdEZhZGUpLFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKFhoKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFhoKFhoKFhoKFhoKFhoKHQsYGZhLXNwaW4tc25hcGAsZS5zcGluU25hcCksYGZhLXNwaW4tc25hcC00YCxlLnNwaW5TbmFwNCksYGZhLXNwaW4tc25hcC04YCxlLnNwaW5TbmFwOCksYGZhLXN3aW5nYCxlLnN3aW5nKSxgZmEtd2FnYCxlLndhZykpO3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/ZTpudWxsfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9dmFyIHVnPXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e30sZGc9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe2lmKCFsKHQpfHxkKHQpfHxmKHQpfHxwKHQpfHxjKHQpKXJldHVybiB0O3ZhciBpLGE9MCxvPTA7aWYodSh0KSlmb3IoaT1bXSxvPXQubGVuZ3RoO2E8bzthKyspaS5wdXNoKG4oZSx0W2FdLHIpKTtlbHNlIGZvcih2YXIgcyBpbiBpPXt9LHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscykmJihpW2UocyxyKV09bihlLHRbc10scikpO3JldHVybiBpfSxyPWZ1bmN0aW9uKGUsdCl7dHx8PXt9O3ZhciBuPXQuc2VwYXJhdG9yfHxgX2Ascj10LnNwbGl0fHwvKD89W0EtWl0pLztyZXR1cm4gZS5zcGxpdChyKS5qb2luKG4pfSxpPWZ1bmN0aW9uKGUpe3JldHVybiBtKGUpP2U6KGU9ZS5yZXBsYWNlKC9bXC1fXHNdKyguKT8vZyxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpgYH0pLGUuc3Vic3RyKDAsMSkudG9Mb3dlckNhc2UoKStlLnN1YnN0cigxKSl9LGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtyZXR1cm4gdC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0KS50b0xvd2VyQ2FzZSgpfSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmB9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1PYmplY3QoZSl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQXJyYXldYH0sZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGUpPT1gW29iamVjdCBEYXRlXWB9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgUmVnRXhwXWB9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgQm9vbGVhbl1gfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLT0wLGU9PT1lfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmYHByb2Nlc3NgaW4gdD90LnByb2Nlc3M6dDtyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/ZnVuY3Rpb24odCxyKXtyZXR1cm4gbih0LGUscil9OmV9LGc9e2NhbWVsaXplOmksZGVjYW1lbGl6ZTpvLHBhc2NhbGl6ZTphLGRlcGFzY2FsaXplOm8sY2FtZWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChpLHQpLGUpfSxkZWNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgobyx0KSxlLHQpfSxwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oaChhLHQpLGUpfSxkZXBhc2NhbGl6ZUtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNhbWVsaXplS2V5cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtlLmV4cG9ydHM/ZS5leHBvcnRzPWc6dC5odW1wcz1nfSkodWcpfSkoZGcpO3ZhciBmZz1kZy5leHBvcnRzLHBnPVtgZ3JhZGllbnRGaWxsYF0sbWc9W2BjbGFzc2AsYHN0eWxlYF0saGc9W2B0eXBlYCxgc3RvcHNgLGBpZGBdO2Z1bmN0aW9uIGdnKGUpe3JldHVybiBlLnNwbGl0KGA7YCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuaW5kZXhPZihgOmApLHI9ZmcuY2FtZWxpemUodC5zbGljZSgwLG4pKTtyZXR1cm4gZVtyXT10LnNsaWNlKG4rMSkudHJpbSgpLGV9LHt9KX1mdW5jdGlvbiBfZyhlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ITAsZX0se30pfWZ1bmN0aW9uIHZnKGUsdCl7cmV0dXJuIHRjKGBzdG9wYCxlZyh7a2V5OmAke3R9LSR7ZS5vZmZzZXR9YCxvZmZzZXQ6ZS5vZmZzZXQsInN0b3AtY29sb3IiOmUuY29sb3J9LGUub3BhY2l0eSE9PXZvaWQgMCYmeyJzdG9wLW9wYWNpdHkiOmUub3BhY2l0eX0pKX1mdW5jdGlvbiB5ZyhlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHQ9KGUuY2hpbGRyZW58fFtdKS5tYXAoeWcpO3JldHVybiBlLnRhZz09PWBwYXRoYCYmZS5hdHRyaWJ1dGVzJiZgZmlsbGBpbiBlLmF0dHJpYnV0ZXM/ZWcoZWcoe30sZSkse30se2F0dHJpYnV0ZXM6ZWcoZWcoe30sZS5hdHRyaWJ1dGVzKSx7fSx7ZmlsbDp2b2lkIDB9KSxjaGlsZHJlbjp0fSk6ZWcoZWcoe30sZSkse30se2NoaWxkcmVuOnR9KX1mdW5jdGlvbiBiZyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e307aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBlO3ZhciByPXQuZ3JhZGllbnRGaWxsLGk9cj09PXZvaWQgMD9udWxsOnIsYT10Zyh0LHBnKSxvPWl8fGBmaWxsYGluIG4/eWcoZSk6ZSxzPShvLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBiZyhlLHt9LHt9KX0pLGM9T2JqZWN0LmtleXMoby5hdHRyaWJ1dGVzfHx7fSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49by5hdHRyaWJ1dGVzW3RdO3N3aXRjaCh0KXtjYXNlYGNsYXNzYDplLmNsYXNzPV9nKG4pO2JyZWFrO2Nhc2Vgc3R5bGVgOmUuc3R5bGU9Z2cobik7YnJlYWs7ZGVmYXVsdDplLmF0dHJzW3RdPW59cmV0dXJuIGV9LHthdHRyczp7fSxjbGFzczp7fSxzdHlsZTp7fX0pO24uY2xhc3M7dmFyIGw9bi5zdHlsZSx1PWw9PT12b2lkIDA/e306bCxkPXRnKG4sbWcpO2lmKGkmJmkuaWQmJihpLnR5cGU9PT1gbGluZWFyYHx8aS50eXBlPT09YHJhZGlhbGApKXt2YXIgZj1pLnR5cGUscD1pLnN0b3BzLG09cD09PXZvaWQgMD9bXTpwLGg9aS5pZCxnPXRnKGksaGcpLF89dGMoZj09PWBsaW5lYXJgP2BsaW5lYXJHcmFkaWVudGA6YHJhZGlhbEdyYWRpZW50YCxlZyhlZyh7fSxnKSx7fSx7aWQ6aH0pLG0ubWFwKHZnKSk7cmV0dXJuIHRjKG8udGFnLGVnKGVnKGVnKGVnKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOmVnKGVnKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSx7fSx7ZmlsbDpgdXJsKCMke2h9KWB9KSxbX10uY29uY2F0KHJnKHMpKSl9cmV0dXJuIHRjKGUudGFnLGVnKGVnKGVnKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOmVnKGVnKHt9LGMuc3R5bGUpLHUpfSxjLmF0dHJzKSxkKSxzKX12YXIgeGc9ITE7dHJ5e3hnPSEwfWNhdGNoe31mdW5jdGlvbiBTZygpe2lmKCF4ZyYmY29uc29sZSYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PWBmdW5jdGlvbmApe3ZhciBlOyhlPWNvbnNvbGUpLmVycm9yLmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gQ2coZSl7aWYoZSYmb2coZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUmJmUuaWNvbilyZXR1cm4gZTtpZihLaC5pY29uKXJldHVybiBLaC5pY29uKGUpO2lmKGU9PT1udWxsKXJldHVybiBudWxsO2lmKG9nKGUpPT09YG9iamVjdGAmJmUucHJlZml4JiZlLmljb25OYW1lKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MilyZXR1cm57cHJlZml4OmVbMF0saWNvbk5hbWU6ZVsxXX07aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybntwcmVmaXg6YGZhc2AsaWNvbk5hbWU6ZX19dmFyIHdnPUYoe25hbWU6YEZvbnRBd2Vzb21lSWNvbmAscHJvcHM6e2JvcmRlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZpeGVkV2lkdGg6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbGlwOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMSx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuWyEwLCExLGBob3Jpem9udGFsYCxgdmVydGljYWxgLGBib3RoYF0uaW5kZXhPZihlKT4tMX19LGljb246e3R5cGU6W09iamVjdCxBcnJheSxTdHJpbmddLHJlcXVpcmVkOiEwfSxtYXNrOnt0eXBlOltPYmplY3QsQXJyYXksU3RyaW5nXSxkZWZhdWx0Om51bGx9LG1hc2tJZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSxsaXN0SXRlbTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHB1bGw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuW2ByaWdodGAsYGxlZnRgXS5pbmRleE9mKGUpPi0xfX0scHVsc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxyb3RhdGlvbjp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bOTAsMTgwLDI3MF0uaW5kZXhPZihOdW1iZXIucGFyc2VJbnQoZSwxMCkpPi0xfX0scm90YXRlQnk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzd2FwT3BhY2l0eTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYDF4YCxgMnhgLGAzeGAsYDR4YCxgNXhgLGA2eGAsYDd4YCxgOHhgLGA5eGAsYDEweGBdLmluZGV4T2YoZSk+LTF9fSxzcGluOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdHJhbnNmb3JtOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LHN5bWJvbDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHRpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LHRpdGxlSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0saW52ZXJzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJvdW5jZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNoYWtlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYmVhdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZhZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxiZWF0RmFkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGZsYXNoOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblB1bHNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblJldmVyc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx3aWR0aEF1dG86e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxjYW52YXNTcXVhcmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxjYW52YXNSb29teTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGdyYWRpZW50RmlsbDp7dHlwZTpPYmplY3QsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGUuaWQhPWBzdHJpbmdgfHwhZS5pZD8oY29uc29sZS53YXJuKGBGb250QXdlc29tZUljb246IGdyYWRpZW50RmlsbC5pZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApLCExKTplLnR5cGUhPT1gbGluZWFyYCYmZS50eXBlIT09YHJhZGlhbGA/KGNvbnNvbGUud2FybihgRm9udEF3ZXNvbWVJY29uOiBncmFkaWVudEZpbGwudHlwZSBtdXN0IGJlICJsaW5lYXIiIG9yICJyYWRpYWwiYCksITEpOiEwfX0sZmxpcDM2MDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJ1eno6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbG9hdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGplbGxvOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzcGluU25hcDg6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzd2luZzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdhZzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxzZXR1cDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuYXR0cnMscj1XKGZ1bmN0aW9uKCl7cmV0dXJuIENnKGUuaWNvbil9KSxpPVcoZnVuY3Rpb24oKXtyZXR1cm4gY2coYGNsYXNzZXNgLGxnKGUpKX0pLGE9VyhmdW5jdGlvbigpe3JldHVybiBjZyhgdHJhbnNmb3JtYCx0eXBlb2YgZS50cmFuc2Zvcm09PWBzdHJpbmdgP0toLnRyYW5zZm9ybShlLnRyYW5zZm9ybSk6ZS50cmFuc2Zvcm0pfSksbz1XKGZ1bmN0aW9uKCl7cmV0dXJuIGNnKGBtYXNrYCxDZyhlLm1hc2spKX0pLHM9VyhmdW5jdGlvbigpe3ZhciB0PWVnKGVnKGVnKGVnKHt9LGkudmFsdWUpLGEudmFsdWUpLG8udmFsdWUpLHt9LHtzeW1ib2w6ZS5zeW1ib2wsbWFza0lkOmUubWFza0lkfSk7cmV0dXJuIHQudGl0bGU9ZS50aXRsZSx0LnRpdGxlSWQ9ZS50aXRsZUlkLHFoKHIudmFsdWUsdCl9KTtFcihzLGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBTZyhgQ291bGQgbm90IGZpbmQgb25lIG9yIG1vcmUgaWNvbihzKWAsci52YWx1ZSxvLnZhbHVlKX0se2ltbWVkaWF0ZTohMH0pLGUuZ3JhZGllbnRGaWxsJiZlLnN5bWJvbCYmU2coYGdyYWRpZW50RmlsbCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gc3ltYm9sIGlzIHRydWUgYW5kIHdpbGwgYmUgaWdub3JlZGApO3ZhciBjPVcoZnVuY3Rpb24oKXtyZXR1cm4gcy52YWx1ZT9iZyhzLnZhbHVlLmFic3RyYWN0WzBdLHtncmFkaWVudEZpbGw6ZS5zeW1ib2w/bnVsbDplLmdyYWRpZW50RmlsbH0sbik6bnVsbH0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjLnZhbHVlfX19KSxUZz10eXBlb2Ygd2luZG93PGB1YCxFZyxEZz1lPT5FZz1lLE9nPVN5bWJvbCgpO2Z1bmN0aW9uIGtnKGUpe3JldHVybiBlJiZ0eXBlb2YgZT09YG9iamVjdGAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gJiZ0eXBlb2YgZS50b0pTT04hPWBmdW5jdGlvbmB9dmFyIEFnPXR5cGVvZiB3aW5kb3c9PWBvYmplY3RgJiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzp0eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjp0eXBlb2YgZ2xvYmFsPT1gb2JqZWN0YCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dHlwZW9mIGdsb2JhbFRoaXM9PWBvYmplY3RgP2dsb2JhbFRoaXM6e0hUTUxFbGVtZW50Om51bGx9O2Z1bmN0aW9uIGpnKGUse2F1dG9Cb206dD0hMX09e30pe3JldHVybiB0JiYvXlxzKig/OnRleHRcL1xTKnxhcHBsaWNhdGlvblwveG1sfFxTKlwvXFMqXCt4bWwpXHMqOy4qY2hhcnNldFxzKj1ccyp1dGYtOC9pLnRlc3QoZS50eXBlKT9uZXcgQmxvYihbYO+7v2AsZV0se3R5cGU6ZS50eXBlfSk6ZX1mdW5jdGlvbiBNZyhlLHQsbil7bGV0IHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3Iub3BlbihgR0VUYCxlKSxyLnJlc3BvbnNlVHlwZT1gYmxvYmAsci5vbmxvYWQ9ZnVuY3Rpb24oKXtMZyhyLnJlc3BvbnNlLHQsbil9LHIub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoYGNvdWxkIG5vdCBkb3dubG9hZCBmaWxlYCl9LHIuc2VuZCgpfWZ1bmN0aW9uIE5nKGUpe2xldCB0PW5ldyBYTUxIdHRwUmVxdWVzdDt0Lm9wZW4oYEhFQURgLGUsITEpO3RyeXt0LnNlbmQoKX1jYXRjaHt9cmV0dXJuIHQuc3RhdHVzPj0yMDAmJnQuc3RhdHVzPD0yOTl9ZnVuY3Rpb24gUGcoZSl7dHJ5e2UuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChgY2xpY2tgKSl9Y2F0Y2h7bGV0IHQ9bmV3IE1vdXNlRXZlbnQoYGNsaWNrYCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLHZpZXc6d2luZG93LGRldGFpbDowLHNjcmVlblg6ODAsc2NyZWVuWToyMCxjbGllbnRYOjgwLGNsaWVudFk6MjAsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0Om51bGx9KTtlLmRpc3BhdGNoRXZlbnQodCl9fXZhciBGZz10eXBlb2YgbmF2aWdhdG9yPT1gb2JqZWN0YD9uYXZpZ2F0b3I6e3VzZXJBZ2VudDpgYH0sSWc9L01hY2ludG9zaC8udGVzdChGZy51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QoRmcudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3QoRmcudXNlckFnZW50KSxMZz1UZz90eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQ8YHVgJiZgZG93bmxvYWRgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhSWc/Umc6YG1zU2F2ZU9yT3BlbkJsb2JgaW4gRmc/emc6Qmc6KCk9Pnt9O2Z1bmN0aW9uIFJnKGUsdD1gZG93bmxvYWRgLG4pe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyLmRvd25sb2FkPXQsci5yZWw9YG5vb3BlbmVyYCx0eXBlb2YgZT09YHN0cmluZ2A/KHIuaHJlZj1lLHIub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP1BnKHIpOk5nKHIuaHJlZik/TWcoZSx0LG4pOihyLnRhcmdldD1gX2JsYW5rYCxQZyhyKSkpOihyLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChyLmhyZWYpfSw0ZTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtQZyhyKX0sMCkpfWZ1bmN0aW9uIHpnKGUsdD1gZG93bmxvYWRgLG4pe2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoTmcoZSkpTWcoZSx0LG4pO2Vsc2V7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3QuaHJlZj1lLHQudGFyZ2V0PWBfYmxhbmtgLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtQZyh0KX0pfX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGpnKGUsbiksdCl9ZnVuY3Rpb24gQmcoZSx0LG4scil7aWYocnx8PW9wZW4oYGAsYF9ibGFua2ApLHImJihyLmRvY3VtZW50LnRpdGxlPXIuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9YGRvd25sb2FkaW5nLi4uYCksdHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBNZyhlLHQsbik7bGV0IGk9ZS50eXBlPT09YGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAsYT0vY29uc3RydWN0b3IvaS50ZXN0KFN0cmluZyhBZy5IVE1MRWxlbWVudCkpfHxgc2FmYXJpYGluIEFnLG89L0NyaU9TXC9bXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigob3x8aSYmYXx8SWcpJiZ0eXBlb2YgRmlsZVJlYWRlcjxgdWApe2xldCB0PW5ldyBGaWxlUmVhZGVyO3Qub25sb2FkZW5kPWZ1bmN0aW9uKCl7bGV0IGU9dC5yZXN1bHQ7aWYodHlwZW9mIGUhPWBzdHJpbmdgKXRocm93IHI9bnVsbCxFcnJvcihgV3JvbmcgcmVhZGVyLnJlc3VsdCB0eXBlYCk7ZT1vP2U6ZS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLGBkYXRhOmF0dGFjaG1lbnQvZmlsZTtgKSxyP3IubG9jYXRpb24uaHJlZj1lOmxvY2F0aW9uLmFzc2lnbihlKSxyPW51bGx9LHQucmVhZEFzRGF0YVVSTChlKX1lbHNle2xldCB0PVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cj9yLmxvY2F0aW9uLmFzc2lnbih0KTpsb2NhdGlvbi5ocmVmPXQscj1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHQpfSw0ZTQpfX12YXJ7YXNzaWduOlZnfT1PYmplY3Q7ZnVuY3Rpb24gSGcoKXtsZXQgZT1QZSghMCksdD1lLnJ1bigoKT0+TSh7fSkpLG49W10scj1bXSxpPXNuKHtpbnN0YWxsKGUpe0RnKGkpLGkuX2E9ZSxlLnByb3ZpZGUoT2csaSksZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcGluaWE9aSxyLmZvckVhY2goZT0+bi5wdXNoKGUpKSxyPVtdfSx1c2UoZSl7cmV0dXJuIHRoaXMuX2E/bi5wdXNoKGUpOnIucHVzaChlKSx0aGlzfSxfcDpuLF9hOm51bGwsX2U6ZSxfczpuZXcgTWFwLHN0YXRlOnR9KTtyZXR1cm4gaX12YXIgVWc9KCk9Pnt9O2Z1bmN0aW9uIFdnKGUsdCxuLHI9VWcpe2UuYWRkKHQpO2xldCBpPSgpPT57ZS5kZWxldGUodCkmJnIoKX07cmV0dXJuIW4mJkZlKCkmJkllKGkpLGl9ZnVuY3Rpb24gR2coZSwuLi50KXtlLmZvckVhY2goZT0+e2UoLi4udCl9KX12YXIgS2c9ZT0+ZSgpLHFnPVN5bWJvbCgpLEpnPVN5bWJvbCgpO2Z1bmN0aW9uIFlnKGUsdCl7ZSBpbnN0YW5jZW9mIE1hcCYmdCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goKHQsbik9PmUuc2V0KG4sdCkpOmUgaW5zdGFuY2VvZiBTZXQmJnQgaW5zdGFuY2VvZiBTZXQmJnQuZm9yRWFjaChlLmFkZCxlKTtmb3IobGV0IG4gaW4gdCl7aWYoIU9iamVjdC5oYXNPd24odCxuKSljb250aW51ZTtsZXQgcj10W25dLGk9ZVtuXTtlW25dPWtnKGkpJiZrZyhyKSYmT2JqZWN0Lmhhc093bihlLG4pJiYhaihyKSYmIW5uKHIpP1lnKGkscik6cn1yZXR1cm4gZX12YXIgWGc9U3ltYm9sKCk7ZnVuY3Rpb24gWmcoZSl7cmV0dXJuIWV8fHR5cGVvZiBlIT1gb2JqZWN0YHx8IU9iamVjdC5oYXNPd24oZSxYZyl9dmFye2Fzc2lnbjpRZ309T2JqZWN0O2Z1bmN0aW9uICRnKGUpe3JldHVybiEhKGooZSkmJmUuZWZmZWN0KX1mdW5jdGlvbiBlXyhlLHQsbixyKXtsZXR7c3RhdGU6aSxhY3Rpb25zOmEsZ2V0dGVyczpvfT10LHM9bi5zdGF0ZS52YWx1ZVtlXSxjO2Z1bmN0aW9uIGwoKXtyZXR1cm4gc3x8KG4uc3RhdGUudmFsdWVbZV09aT9pKCk6e30pLFFnKHluKG4uc3RhdGUudmFsdWVbZV0pLGEsT2JqZWN0LmtleXMob3x8e30pLnJlZHVjZSgodCxyKT0+KHRbcl09c24oVygoKT0+e0RnKG4pO2xldCB0PW4uX3MuZ2V0KGUpO3JldHVybiBvW3JdLmNhbGwodCx0KX0pKSx0KSx7fSkpfXJldHVybiBjPXRfKGUsbCx0LG4sciwhMCksY31mdW5jdGlvbiB0XyhlLHQsbj17fSxyLGksYSl7bGV0IG8scz1RZyh7YWN0aW9uczp7fX0sbiksYz17ZGVlcDohMH0sbCx1LGQ9bmV3IFNldCxmPW5ldyBTZXQscCxtPXIuc3RhdGUudmFsdWVbZV07IWEmJiFtJiYoci5zdGF0ZS52YWx1ZVtlXT17fSk7bGV0IGg7ZnVuY3Rpb24gZyh0KXtsZXQgbjtsPXU9ITEsdHlwZW9mIHQ9PWBmdW5jdGlvbmA/KHQoci5zdGF0ZS52YWx1ZVtlXSksbj17dHlwZTpgcGF0Y2ggZnVuY3Rpb25gLHN0b3JlSWQ6ZSxldmVudHM6cH0pOihZZyhyLnN0YXRlLnZhbHVlW2VdLHQpLG49e3R5cGU6YHBhdGNoIG9iamVjdGAscGF5bG9hZDp0LHN0b3JlSWQ6ZSxldmVudHM6cH0pO2xldCBpPWg9U3ltYm9sKCk7UW4oKS50aGVuKCgpPT57aD09PWkmJihsPSEwKX0pLHU9ITAsR2coZCxuLHIuc3RhdGUudmFsdWVbZV0pfWxldCBfPWE/ZnVuY3Rpb24oKXtsZXR7c3RhdGU6ZX09bix0PWU/ZSgpOnt9O3RoaXMuJHBhdGNoKGU9PntRZyhlLHQpfSl9OlVnO2Z1bmN0aW9uIHYoKXtvLnN0b3AoKSxkLmNsZWFyKCksZi5jbGVhcigpLHIuX3MuZGVsZXRlKGUpfWxldCB5PSh0LG49YGApPT57aWYocWcgaW4gdClyZXR1cm4gdFtKZ109bix0O2xldCBpPWZ1bmN0aW9uKCl7RGcocik7bGV0IG49QXJyYXkuZnJvbShhcmd1bWVudHMpLGE9bmV3IFNldCxvPW5ldyBTZXQ7ZnVuY3Rpb24gcyhlKXthLmFkZChlKX1mdW5jdGlvbiBjKGUpe28uYWRkKGUpfUdnKGYse2FyZ3M6bixuYW1lOmlbSmddLHN0b3JlOmIsYWZ0ZXI6cyxvbkVycm9yOmN9KTtsZXQgbDt0cnl7bD10LmFwcGx5KHRoaXMmJnRoaXMuJGlkPT09ZT90aGlzOmIsbil9Y2F0Y2goZSl7dGhyb3cgR2cobyxlKSxlfXJldHVybiBsIGluc3RhbmNlb2YgUHJvbWlzZT9sLnRoZW4oZT0+KEdnKGEsZSksZSkpLmNhdGNoKGU9PihHZyhvLGUpLFByb21pc2UucmVqZWN0KGUpKSk6KEdnKGEsbCksbCl9O3JldHVybiBpW3FnXT0hMCxpW0pnXT1uLGl9LGI9WnQoe19wOnIsJGlkOmUsJG9uQWN0aW9uOldnLmJpbmQobnVsbCxmKSwkcGF0Y2g6ZywkcmVzZXQ6Xywkc3Vic2NyaWJlKHQsbj17fSl7aWYoZC5oYXModCkpcmV0dXJuIFVnO2xldCBpPVdnKGQsdCxuLmRldGFjaGVkLCgpPT5hKCkpLGE9by5ydW4oKCk9PkVyKCgpPT5yLnN0YXRlLnZhbHVlW2VdLHI9Pnsobi5mbHVzaD09PWBzeW5jYD91OmwpJiZ0KHtzdG9yZUlkOmUsdHlwZTpgZGlyZWN0YCxldmVudHM6cH0scil9LFFnKHt9LGMsbikpKTtyZXR1cm4gaX0sJGRpc3Bvc2U6dn0pO3IuX3Muc2V0KGUsYik7bGV0IHg9KHIuX2EmJnIuX2EucnVuV2l0aENvbnRleHR8fEtnKSgoKT0+ci5fZS5ydW4oKCk9PihvPVBlKCkpLnJ1bigoKT0+dCh7YWN0aW9uOnl9KSkpKTtmb3IobGV0IHQgaW4geCl7bGV0IG49eFt0XTtqKG4pJiYhJGcobil8fG5uKG4pP2F8fChtJiZaZyhuKSYmKGoobik/bi52YWx1ZT1tW3RdOigobiBpbnN0YW5jZW9mIFNldHx8biBpbnN0YW5jZW9mIE1hcCkmJm4uY2xlYXIoKSxZZyhuLG1bdF0pKSksci5zdGF0ZS52YWx1ZVtlXVt0XT1uKTp0eXBlb2Ygbj09YGZ1bmN0aW9uYCYmKHhbdF09eShuLHQpLHMuYWN0aW9uc1t0XT1uKX1yZXR1cm4gUWcoYix4KSxRZyhBKGIpLHgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCIkc3RhdGUiLHtnZXQ6KCk9PnIuc3RhdGUudmFsdWVbZV0sc2V0OmU9PntnKHQ9PntRZyh0LGUpfSl9fSksci5fcC5mb3JFYWNoKGU9PntsZXQgdD1vLnJ1bigoKT0+ZSh7c3RvcmU6YixhcHA6ci5fYSxwaW5pYTpyLG9wdGlvbnM6c30pKTtRZyhiLHQpfSksbSYmYSYmbi5oeWRyYXRlJiZuLmh5ZHJhdGUoYi4kc3RhdGUsbSksbD0hMCx1PSEwLGJ9ZnVuY3Rpb24gbl8oZSx0LG4pe2xldCByLGk9dHlwZW9mIHQ9PWBmdW5jdGlvbmA7cj1pP246dDtmdW5jdGlvbiBhKG4sYSl7bGV0IG89YnIoKTtyZXR1cm4gbnx8PW8/eXIoT2csbnVsbCk6bnVsbCxuJiZEZyhuKSxuPUVnLG4uX3MuaGFzKGUpfHwoaT90XyhlLHQscixuKTplXyhlLHIsbikpLG4uX3MuZ2V0KGUpfXJldHVybiBhLiRpZD1lLGF9dmFyIHJfPXtwcmVmaXg6YGZhYmAsaWNvbk5hbWU6YGdpdGh1YmAsaWNvbjpbNTEyLDUxMixbXSxgZjA5YmAsYE0yMTYuNSAzNjIuNWMtNjYtOC0xMTIuNS01NS41LTExMi41LTExNyAwLTI1IDktNTIgMjQtNzAtNi41LTE2LjUtNS41LTUxLjUgMi02NiAyMC0yLjUgNDcgOCA2MyAyMi41IDE5LTYgMzktOSA2My41LTlzNDQuNSAzIDYyLjUgOC41YzE1LjUtMTQgNDMtMjQuNSA2My0yMiA3IDEzLjUgOCA0OC41IDEuNSA2NS41IDE2IDE5IDI0LjUgNDQuNSAyNC41IDcwLjUgMCA2MS41LTQ2LjUgMTA4LTExMy41IDExNi41IDE3IDExIDI4LjUgMzUgMjguNSA2Mi41bDAgNTJDMzIzIDQ5MS41IDMzNS41IDUwMCAzNTAuNSA0OTQgNDQxIDQ1OS41IDUxMiAzNjkgNTEyIDI1NyA1MTIgMTE1LjUgMzk3IDAgMjU1LjUgMFMwIDExNS41IDAgMjU3YzAgMTExIDcwLjUgMjAzIDE2NS41IDIzNy41IDEzLjUgNSAyNi41LTQgMjYuNS0xNy41bDAtNDBjLTcgMy0xNiA1LTI0IDUtMzMgMC01Mi41LTE4LTY2LjUtNTEuNS01LjUtMTMuNS0xMS41LTIxLjUtMjMtMjMtNi0uNS04LTMtOC02IDAtNiAxMC0xMC41IDIwLTEwLjUgMTQuNSAwIDI3IDkgNDAgMjcuNSAxMCAxNC41IDIwLjUgMjEgMzMgMjFzMjAuNS00LjUgMzItMTZjOC41LTguNSAxNS0xNiAyMS0yMXpgXX0saV89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgbWFnbmlmeWluZy1nbGFzc2AsaWNvbjpbNTEyLDUxMixbMTI4MjY5LGBzZWFyY2hgXSxgZjAwMmAsYE00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4emBdfSxhXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBrZXlgLGljb246WzUxMiw1MTIsWzEyODI3M10sYGYwODRgLGBNMzM2IDM1MmM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlM0MzMuMiAwIDMzNiAwIDE2MCA3OC44IDE2MCAxNzZjMCAxOC43IDIuOSAzNi44IDguMyA1My43TDcgMzkxYy00LjUgNC41LTcgMTAuNi03IDE3bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzYuNCAwIDEyLjUtMi41IDE3LTdsMzMuMy0zMy4zYzE2LjkgNS40IDM1IDguMyA1My43IDguM3pNMzc2IDk2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHpgXX0sb189e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC11cGAsaWNvbjpbMzg0LDUxMixbYHNvcnQtYXNjYF0sYGYwZGVgLGBNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0emBdfSxzXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBleWVgLGljb246WzU3Niw1MTIsWzEyODA2NV0sYGYwNmVgLGBNMjg4IDMyYy04MC44IDAtMTQ1LjUgMzYuOC0xOTIuNiA4MC42LTQ2LjggNDMuNS03OC4xIDk1LjQtOTMgMTMxLjEtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42czE0NS41LTM2LjggMTkyLjYtODAuNmM0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNnpNMTQ0IDI1NmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDQtNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjQtMTEuNSAwLTIyLjMtMy0zMS43LTguNC0xIDEwLjktLjEgMjIuMSAyLjkgMzMuMiAxMy43IDUxLjIgNjYuNCA4MS42IDExNy42IDY3LjlzODEuNi02Ni40IDY3LjktMTE3LjZjLTEyLjItNDUuNy01NS41LTc0LjgtMTAxLjEtNzAuOCA1LjMgOS4zIDguNCAyMC4xIDguNCAzMS43emBdfSxjXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGV2cm9uLXVwYCxpY29uOls0NDgsNTEyLFtdLGBmMDc3YCxgTTIwMS40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjI0IDE3My4zIDU0LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE5Mi0xOTJ6YF19LGxfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNpcmNsZS14bWFya2AsaWNvbjpbNTEyLDUxMixbNjE1MzIsYHRpbWVzLWNpcmNsZWAsYHhtYXJrLWNpcmNsZWBdLGBmMDU3YCxgTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45emBdfSx1Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtZXhjbGFtYXRpb25gLGljb246WzUxMiw1MTIsW2BleGNsYW1hdGlvbi1jaXJjbGVgXSxgZjA2YWAsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC0xOTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi42IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxkXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaGVja2AsaWNvbjpbNDQ4LDUxMixbMTAwMDMsMTAwMDRdLGBmMDBjYCxgTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6YF19LGZfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNvcnRgLGljb246WzM4NCw1MTIsW2B1bnNvcnRlZGBdLGBmMGRjYCxgTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6YF19LHBfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHhtYXJrYCxpY29uOlszODQsNTEyLFsxMjg0NzMsMTAwMDUsMTAwMDYsMTAwNjAsMjE1LGBjbG9zZWAsYG11bHRpcGx5YCxgcmVtb3ZlYCxgdGltZXNgXSxgZjAwZGAsYE01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40emBdfSxtXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtY2hlY2tgLGljb246WzUxMiw1MTIsWzYxNTMzLGBjaGVjay1jaXJjbGVgXSxgZjA1OGAsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXpgXX0saF89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1kb3duYCxpY29uOls0NDgsNTEyLFtdLGBmMDc4YCxgTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6YF19LGdfPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHRyaWFuZ2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFs5ODg4LGBleGNsYW1hdGlvbi10cmlhbmdsZWAsYHdhcm5pbmdgXSxgZjA3MWAsYE0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxfXz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjb3B5YCxpY29uOls0NDgsNTEyLFtdLGBmMGM1YCxgTTE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIwMC42YzAtMTcuNC03LjEtMzQuMS0xOS43LTQ2LjJMMzcwLjYgMTcuOEMzNTguNyA2LjQgMzQyLjggMCAzMjYuMyAwTDE5MiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNjQgMCAwIDE2LTE5MiAwIDAtMjU2IDE2IDAgMC02NC0xNiAwemBdfSx2Xz17cHJlZml4OmBmYXNgLGljb25OYW1lOmBleWUtc2xhc2hgLGljb246WzU3Niw1MTIsW10sYGYwNzBgLGBNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0yMDQuNSAxMzguN2MyMy41LTE2LjggNTIuNC0yNi43IDgzLjUtMjYuNyA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDMxLjEtOS45IDU5LjktMjYuNyA4My41bC0zNC43LTM0LjdjMTIuNy0yMS40IDE3LTQ3LjcgMTAuMS03My43LTEzLjctNTEuMi02Ni40LTgxLjYtMTE3LjYtNjcuOS04LjYgMi4zLTE2LjcgNS43LTI0IDEwbC0zNC43LTM0Ljd6TTMyNS4zIDM5NS4xYy0xMS45IDMuMi0yNC40IDQuOS0zNy4zIDQuOS03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTEyLjkgMS43LTI1LjQgNC45LTM3LjNMNjkuNCAxMzkuMmMtMzIuNiAzNi44LTU1IDc1LjgtNjYuOSAxMDQuNS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjYgMzcuMyAwIDcxLjItNy45IDEwMS41LTIwLjZsLTY0LjItNjQuMnpgXX0seV89e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC1kb3duYCxpY29uOlszODQsNTEyLFtgc29ydC1kZXNjYF0sYGYwZGRgLGBNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4emBdfTtmdW5jdGlvbiBiXyhlKXt2YXIgdCxuLHI9YGA7aWYodHlwZW9mIGU9PWBzdHJpbmdgfHx0eXBlb2YgZT09YG51bWJlcmApcis9ZTtlbHNlIGlmKHR5cGVvZiBlPT1gb2JqZWN0YCl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKWVbdF0mJihuPWJfKGVbdF0pKSYmKHImJihyKz1gIGApLHIrPW4pfWVsc2UgZm9yKG4gaW4gZSllW25dJiYociYmKHIrPWAgYCkscis9bil9cmV0dXJuIHJ9ZnVuY3Rpb24geF8oKXtmb3IodmFyIGUsdCxuPTAscj1gYCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKykoZT1hcmd1bWVudHNbbl0pJiYodD1iXyhlKSkmJihyJiYocis9YCBgKSxyKz10KTtyZXR1cm4gcn12YXIgU189ZT0+dHlwZW9mIGU9PWBib29sZWFuYD9gJHtlfWA6ZT09PTA/YDBgOmUsQ189eF8sd189KGUsdCk9Pm49PntpZih0Py52YXJpYW50cz09bnVsbClyZXR1cm4gQ18oZSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpO2xldHt2YXJpYW50czpyLGRlZmF1bHRWYXJpYW50czppfT10LGE9T2JqZWN0LmtleXMocikubWFwKGU9PntsZXQgdD1uPy5bZV0sYT1pPy5bZV07aWYodD09PW51bGwpcmV0dXJuIG51bGw7bGV0IG89U18odCl8fFNfKGEpO3JldHVybiByW2VdW29dfSksbz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiByPT09dm9pZCAwfHwoZVtuXT1yKSxlfSx7fSk7cmV0dXJuIENfKGUsYSx0Py5jb21wb3VuZFZhcmlhbnRzPy5yZWR1Y2UoKGUsdCk9PntsZXR7Y2xhc3M6bixjbGFzc05hbWU6ciwuLi5hfT10O3JldHVybiBPYmplY3QuZW50cmllcyhhKS5ldmVyeShlPT57bGV0W3Qsbl09ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHsuLi5pLC4uLm99W3RdKTp7Li4uaSwuLi5vfVt0XT09PW59KT9bLi4uZSxuLHJdOmV9LFtdKSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpfSxUXz0oZSx0KT0+e2xldCBuPUFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbltlLmxlbmd0aCtyXT10W3JdO3JldHVybiBufSxFXz0oZSx0KT0+KHtjbGFzc0dyb3VwSWQ6ZSx2YWxpZGF0b3I6dH0pLERfPShlPW5ldyBNYXAsdD1udWxsLG4pPT4oe25leHRQYXJ0OmUsdmFsaWRhdG9yczp0LGNsYXNzR3JvdXBJZDpufSksT189YC1gLGtfPVtdLEFfPWBhcmJpdHJhcnkuLmAsal89ZT0+e2xldCB0PVBfKGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnJ9PWU7cmV0dXJue2dldENsYXNzR3JvdXBJZDplPT57aWYoZS5zdGFydHNXaXRoKGBbYCkmJmUuZW5kc1dpdGgoYF1gKSlyZXR1cm4gTl8oZSk7bGV0IG49ZS5zcGxpdChPXyk7cmV0dXJuIE1fKG4sKyhuWzBdPT09YGAmJm4ubGVuZ3RoPjEpLHQpfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGUsdCk9PntpZih0KXtsZXQgdD1yW2VdLGk9bltlXTtyZXR1cm4gdD9pP1RfKGksdCk6dDppfHxrX31yZXR1cm4gbltlXXx8a199fX0sTV89KGUsdCxuKT0+e2lmKGUubGVuZ3RoLXQ9PT0wKXJldHVybiBuLmNsYXNzR3JvdXBJZDtsZXQgcj1lW3RdLGk9bi5uZXh0UGFydC5nZXQocik7aWYoaSl7bGV0IG49TV8oZSx0KzEsaSk7aWYobilyZXR1cm4gbn1sZXQgYT1uLnZhbGlkYXRvcnM7aWYoYT09PW51bGwpcmV0dXJuO2xldCBvPXQ9PT0wP2Uuam9pbihPXyk6ZS5zbGljZSh0KS5qb2luKE9fKSxzPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cztlKyspe2xldCB0PWFbZV07aWYodC52YWxpZGF0b3IobykpcmV0dXJuIHQuY2xhc3NHcm91cElkfX0sTl89ZT0+ZS5zbGljZSgxLC0xKS5pbmRleE9mKGA6YCk9PT0tMT92b2lkIDA6KCgpPT57bGV0IHQ9ZS5zbGljZSgxLC0xKSxuPXQuaW5kZXhPZihgOmApLHI9dC5zbGljZSgwLG4pO3JldHVybiByP0FfK3I6dm9pZCAwfSkoKSxQXz1lPT57bGV0e3RoZW1lOnQsY2xhc3NHcm91cHM6bn09ZTtyZXR1cm4gRl8obix0KX0sRl89KGUsdCk9PntsZXQgbj1EXygpO2ZvcihsZXQgciBpbiBlKXtsZXQgaT1lW3JdO0lfKGksbixyLHQpfXJldHVybiBufSxJXz0oZSx0LG4scik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgaT1lW2FdO0xfKGksdCxuLHIpfX0sTF89KGUsdCxuLHIpPT57aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtSXyhlLHQsbik7cmV0dXJufWlmKHR5cGVvZiBlPT1gZnVuY3Rpb25gKXt6XyhlLHQsbixyKTtyZXR1cm59Ql8oZSx0LG4scil9LFJfPShlLHQsbik9PntsZXQgcj1lPT09YGA/dDpWXyh0LGUpO3IuY2xhc3NHcm91cElkPW59LHpfPShlLHQsbixyKT0+e2lmKEhfKGUpKXtJXyhlKHIpLHQsbixyKTtyZXR1cm59dC52YWxpZGF0b3JzPT09bnVsbCYmKHQudmFsaWRhdG9ycz1bXSksdC52YWxpZGF0b3JzLnB1c2goRV8obixlKSl9LEJfPShlLHQsbixyKT0+e2xldCBpPU9iamVjdC5lbnRyaWVzKGUpLGE9aS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7bGV0W2Esb109aVtlXTtJXyhvLFZfKHQsYSksbixyKX19LFZfPShlLHQpPT57bGV0IG49ZSxyPXQuc3BsaXQoT18pLGk9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bGV0IHQ9cltlXSxpPW4ubmV4dFBhcnQuZ2V0KHQpO2l8fChpPURfKCksbi5uZXh0UGFydC5zZXQodCxpKSksbj1pfXJldHVybiBufSxIXz1lPT5gaXNUaGVtZUdldHRlcmBpbiBlJiZlLmlzVGhlbWVHZXR0ZXI9PT0hMCxVXz1lPT57aWYoZTwxKXJldHVybntnZXQ6KCk9PnZvaWQgMCxzZXQ6KCk9Pnt9fTtsZXQgdD0wLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksaT0oaSxhKT0+e25baV09YSx0KyssdD5lJiYodD0wLHI9bixuPU9iamVjdC5jcmVhdGUobnVsbCkpfTtyZXR1cm57Z2V0KGUpe2xldCB0PW5bZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdDtpZigodD1yW2VdKSE9PXZvaWQgMClyZXR1cm4gaShlLHQpLHR9LHNldChlLHQpe2UgaW4gbj9uW2VdPXQ6aShlLHQpfX19LFdfPWAhYCxHXz1gOmAsS189W10scV89KGUsdCxuLHIsaSk9Pih7bW9kaWZpZXJzOmUsaGFzSW1wb3J0YW50TW9kaWZpZXI6dCxiYXNlQ2xhc3NOYW1lOm4sbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpyLGlzRXh0ZXJuYWw6aX0pLEpfPWU9PntsZXR7cHJlZml4OnQsZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6bn09ZSxyPWU9PntsZXQgdD1bXSxuPTAscj0wLGk9MCxhLG89ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IG89ZVtzXTtpZihuPT09MCYmcj09PTApe2lmKG89PT1HXyl7dC5wdXNoKGUuc2xpY2UoaSxzKSksaT1zKzE7Y29udGludWV9aWYobz09PWAvYCl7YT1zO2NvbnRpbnVlfX1vPT09YFtgP24rKzpvPT09YF1gP24tLTpvPT09YChgP3IrKzpvPT09YClgJiZyLS19bGV0IHM9dC5sZW5ndGg9PT0wP2U6ZS5zbGljZShpKSxjPXMsbD0hMTtzLmVuZHNXaXRoKFdfKT8oYz1zLnNsaWNlKDAsLTEpLGw9ITApOnMuc3RhcnRzV2l0aChXXykmJihjPXMuc2xpY2UoMSksbD0hMCk7bGV0IHU9YSYmYT5pP2EtaTp2b2lkIDA7cmV0dXJuIHFfKHQsbCxjLHUpfTtpZih0KXtsZXQgZT10K0dfLG49cjtyPXQ9PnQuc3RhcnRzV2l0aChlKT9uKHQuc2xpY2UoZS5sZW5ndGgpKTpxXyhLXywhMSx0LHZvaWQgMCwhMCl9aWYobil7bGV0IGU9cjtyPXQ9Pm4oe2NsYXNzTmFtZTp0LHBhcnNlQ2xhc3NOYW1lOmV9KX1yZXR1cm4gcn0sWV89ZT0+e2xldCB0PW5ldyBNYXA7cmV0dXJuIGUub3JkZXJTZW5zaXRpdmVNb2RpZmllcnMuZm9yRWFjaCgoZSxuKT0+e3Quc2V0KGUsMWU2K24pfSksZT0+e2xldCBuPVtdLHI9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV0sbz1hWzBdPT09YFtgLHM9dC5oYXMoYSk7b3x8cz8oci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSxyPVtdKSxuLnB1c2goYSkpOnIucHVzaChhKX1yZXR1cm4gci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSksbn19LFhfPWU9Pih7Y2FjaGU6VV8oZS5jYWNoZVNpemUpLHBhcnNlQ2xhc3NOYW1lOkpfKGUpLHNvcnRNb2RpZmllcnM6WV8oZSkscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6Wl8oZSksLi4ual8oZSl9KSxaXz1lPT57bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKG4pZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdFtuW2VdXT0hMDtyZXR1cm4gdH0sUV89L1xzKy8sJF89KGUsdCk9PntsZXR7cGFyc2VDbGFzc05hbWU6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aSxzb3J0TW9kaWZpZXJzOmEscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6b309dCxzPVtdLGM9ZS50cmltKCkuc3BsaXQoUV8pLGw9YGA7Zm9yKGxldCBlPWMubGVuZ3RoLTE7ZT49MDstLWUpe2xldCB0PWNbZV0se2lzRXh0ZXJuYWw6dSxtb2RpZmllcnM6ZCxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6cCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOm19PW4odCk7aWYodSl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWxldCBoPSEhbSxnO2lmKGgpe2c9cihwLnN1YnN0cmluZygwLG0pKTtsZXQgZT1nJiZvW2ddP3IocCk6dm9pZCAwO2UmJmUhPT1nJiYoZz1lLGg9ITEpfWVsc2UgZz1yKHApO2lmKCFnKXtpZighaCl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWlmKGc9cihwKSwhZyl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWg9ITF9bGV0IF89ZC5sZW5ndGg9PT0wP2BgOmQubGVuZ3RoPT09MT9kWzBdOmEoZCkuam9pbihgOmApLHY9Zj9fK1dfOl8seT12K2c7aWYocy5pbmRleE9mKHkpPi0xKWNvbnRpbnVlO3MucHVzaCh5KTtsZXQgYj1pKGcsaCk7Zm9yKGxldCBlPTA7ZTxiLmxlbmd0aDsrK2Upe2xldCB0PWJbZV07cy5wdXNoKHYrdCl9bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpfXJldHVybiBsfSxldj0oLi4uZSk9PntsZXQgdD0wLG4scixpPWBgO2Zvcig7dDxlLmxlbmd0aDspKG49ZVt0KytdKSYmKHI9dHYobikpJiYoaSYmKGkrPWAgYCksaSs9cik7cmV0dXJuIGl9LHR2PWU9PntpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7bGV0IHQsbj1gYDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYodD10dihlW3JdKSkmJihuJiYobis9YCBgKSxuKz10KTtyZXR1cm4gbn0sbnY9KGUsLi4udCk9PntsZXQgbixyLGksYSxvPW89PihuPVhfKHQucmVkdWNlKChlLHQpPT50KGUpLGUoKSkpLHI9bi5jYWNoZS5nZXQsaT1uLmNhY2hlLnNldCxhPXMscyhvKSkscz1lPT57bGV0IHQ9cihlKTtpZih0KXJldHVybiB0O2xldCBhPSRfKGUsbik7cmV0dXJuIGkoZSxhKSxhfTtyZXR1cm4gYT1vLCguLi5lKT0+YShldiguLi5lKSl9LHJ2PVtdLGl2PWU9PntsZXQgdD10PT50W2VdfHxydjtyZXR1cm4gdC5pc1RoZW1lR2V0dGVyPSEwLHR9LGF2PS9eXFsoPzooXHdbXHctXSopOik/KC4rKVxdJC9pLG92PS9eXCgoPzooXHdbXHctXSopOik/KC4rKVwpJC9pLHN2PS9eXGQrKD86XC5cZCspP1wvXGQrKD86XC5cZCspPyQvLGN2PS9eKFxkKyhcLlxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC8sbHY9L1xkKyglfHB4fHI/ZW18W3NkbF0/dihbaHdpYl18bWlufG1heCl8cHR8cGN8aW58Y218bW18Y2FwfGNofGV4fHI/bGh8Y3Eod3xofGl8YnxtaW58bWF4KSl8XGIoY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKXxeMCQvLHV2PS9eKHJnYmE/fGhzbGE/fGh3Ynwob2spPyhsYWJ8bGNoKXxjb2xvci1taXgpXCguK1wpJC8sZHY9L14oaW5zZXRfKT8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKV8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKS8sZnY9L14odXJsfGltYWdlfGltYWdlLXNldHxjcm9zcy1mYWRlfGVsZW1lbnR8KHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsfGNvbmljKS1ncmFkaWVudClcKC4rXCkkLyxwdj1lPT5zdi50ZXN0KGUpLEo9ZT0+ISFlJiYhTnVtYmVyLmlzTmFOKE51bWJlcihlKSksbXY9ZT0+ISFlJiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihlKSksaHY9ZT0+ZS5lbmRzV2l0aChgJWApJiZKKGUuc2xpY2UoMCwtMSkpLGd2PWU9PmN2LnRlc3QoZSksX3Y9KCk9PiEwLHZ2PWU9Pmx2LnRlc3QoZSkmJiF1di50ZXN0KGUpLHl2PSgpPT4hMSxidj1lPT5kdi50ZXN0KGUpLHh2PWU9PmZ2LnRlc3QoZSksU3Y9ZT0+IVkoZSkmJiFYKGUpLEN2PWU9PmUuc3RhcnRzV2l0aChgQGNvbnRhaW5lcmApJiYoZVsxMF09PT1gL2AmJmVbMTFdIT09dm9pZCAwfHxlWzExXT09PWBzYCYmZVsxNl0hPT12b2lkIDAmJmUuc3RhcnRzV2l0aChgLXNpemUvYCwxMCl8fGVbMTFdPT09YG5gJiZlWzE4XSE9PXZvaWQgMCYmZS5zdGFydHNXaXRoKGAtbm9ybWFsL2AsMTApKSx3dj1lPT56dihlLFV2LHl2KSxZPWU9PmF2LnRlc3QoZSksVHY9ZT0+enYoZSxXdix2diksRXY9ZT0+enYoZSxHdixKKSxEdj1lPT56dihlLHF2LF92KSxPdj1lPT56dihlLEt2LHl2KSxrdj1lPT56dihlLFZ2LHl2KSxBdj1lPT56dihlLEh2LHh2KSxqdj1lPT56dihlLEp2LGJ2KSxYPWU9Pm92LnRlc3QoZSksTXY9ZT0+QnYoZSxXdiksTnY9ZT0+QnYoZSxLdiksUHY9ZT0+QnYoZSxWdiksRnY9ZT0+QnYoZSxVdiksSXY9ZT0+QnYoZSxIdiksTHY9ZT0+QnYoZSxKdiwhMCksUnY9ZT0+QnYoZSxxdiwhMCksenY9KGUsdCxuKT0+e2xldCByPWF2LmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90KHJbMV0pOm4oclsyXSk6ITF9LEJ2PShlLHQsbj0hMSk9PntsZXQgcj1vdi5leGVjKGUpO3JldHVybiByP3JbMV0/dChyWzFdKTpuOiExfSxWdj1lPT5lPT09YHBvc2l0aW9uYHx8ZT09PWBwZXJjZW50YWdlYCxIdj1lPT5lPT09YGltYWdlYHx8ZT09PWB1cmxgLFV2PWU9PmU9PT1gbGVuZ3RoYHx8ZT09PWBzaXplYHx8ZT09PWBiZy1zaXplYCxXdj1lPT5lPT09YGxlbmd0aGAsR3Y9ZT0+ZT09PWBudW1iZXJgLEt2PWU9PmU9PT1gZmFtaWx5LW5hbWVgLHF2PWU9PmU9PT1gbnVtYmVyYHx8ZT09PWB3ZWlnaHRgLEp2PWU9PmU9PT1gc2hhZG93YCxZdj1udigoKT0+e2xldCBlPWl2KGBjb2xvcmApLHQ9aXYoYGZvbnRgKSxuPWl2KGB0ZXh0YCkscj1pdihgZm9udC13ZWlnaHRgKSxpPWl2KGB0cmFja2luZ2ApLGE9aXYoYGxlYWRpbmdgKSxvPWl2KGBicmVha3BvaW50YCkscz1pdihgY29udGFpbmVyYCksYz1pdihgc3BhY2luZ2ApLGw9aXYoYHJhZGl1c2ApLHU9aXYoYHNoYWRvd2ApLGQ9aXYoYGluc2V0LXNoYWRvd2ApLGY9aXYoYHRleHQtc2hhZG93YCkscD1pdihgZHJvcC1zaGFkb3dgKSxtPWl2KGBibHVyYCksaD1pdihgcGVyc3BlY3RpdmVgKSxnPWl2KGBhc3BlY3RgKSxfPWl2KGBlYXNlYCksdj1pdihgYW5pbWF0ZWApLHk9KCk9PltgYXV0b2AsYGF2b2lkYCxgYWxsYCxgYXZvaWQtcGFnZWAsYHBhZ2VgLGBsZWZ0YCxgcmlnaHRgLGBjb2x1bW5gXSxiPSgpPT5bYGNlbnRlcmAsYHRvcGAsYGJvdHRvbWAsYGxlZnRgLGByaWdodGAsYHRvcC1sZWZ0YCxgbGVmdC10b3BgLGB0b3AtcmlnaHRgLGByaWdodC10b3BgLGBib3R0b20tcmlnaHRgLGByaWdodC1ib3R0b21gLGBib3R0b20tbGVmdGAsYGxlZnQtYm90dG9tYF0seD0oKT0+Wy4uLmIoKSxYLFldLFM9KCk9PltgYXV0b2AsYGhpZGRlbmAsYGNsaXBgLGB2aXNpYmxlYCxgc2Nyb2xsYF0sQz0oKT0+W2BhdXRvYCxgY29udGFpbmAsYG5vbmVgXSx3PSgpPT5bWCxZLGNdLGVlPSgpPT5bcHYsYGZ1bGxgLGBhdXRvYCwuLi53KCldLHRlPSgpPT5bbXYsYG5vbmVgLGBzdWJncmlkYCxYLFldLFQ9KCk9PltgYXV0b2Ase3NwYW46W2BmdWxsYCxtdixYLFldfSxtdixYLFldLG5lPSgpPT5bbXYsYGF1dG9gLFgsWV0scmU9KCk9PltgYXV0b2AsYG1pbmAsYG1heGAsYGZyYCxYLFldLGllPSgpPT5bYHN0YXJ0YCxgZW5kYCxgY2VudGVyYCxgYmV0d2VlbmAsYGFyb3VuZGAsYGV2ZW5seWAsYHN0cmV0Y2hgLGBiYXNlbGluZWAsYGNlbnRlci1zYWZlYCxgZW5kLXNhZmVgXSxFPSgpPT5bYHN0YXJ0YCxgZW5kYCxgY2VudGVyYCxgc3RyZXRjaGAsYGNlbnRlci1zYWZlYCxgZW5kLXNhZmVgXSxhZT0oKT0+W2BhdXRvYCwuLi53KCldLG9lPSgpPT5bcHYsYGF1dG9gLGBmdWxsYCxgZHZ3YCxgZHZoYCxgbHZ3YCxgbHZoYCxgc3Z3YCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLHNlPSgpPT5bcHYsYHNjcmVlbmAsYGZ1bGxgLGBkdndgLGBsdndgLGBzdndgLGBtaW5gLGBtYXhgLGBmaXRgLC4uLncoKV0sY2U9KCk9Pltwdixgc2NyZWVuYCxgZnVsbGAsYGxoYCxgZHZoYCxgbHZoYCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLEQ9KCk9PltlLFgsWV0sbGU9KCk9PlsuLi5iKCksUHYsa3Yse3Bvc2l0aW9uOltYLFldfV0sdWU9KCk9Pltgbm8tcmVwZWF0YCx7cmVwZWF0OltgYCxgeGAsYHlgLGBzcGFjZWAsYHJvdW5kYF19XSxkZT0oKT0+W2BhdXRvYCxgY292ZXJgLGBjb250YWluYCxGdix3dix7c2l6ZTpbWCxZXX1dLGZlPSgpPT5baHYsTXYsVHZdLHBlPSgpPT5bYGAsYG5vbmVgLGBmdWxsYCxsLFgsWV0sbWU9KCk9PltgYCxKLE12LFR2XSxoZT0oKT0+W2Bzb2xpZGAsYGRhc2hlZGAsYGRvdHRlZGAsYGRvdWJsZWBdLGdlPSgpPT5bYG5vcm1hbGAsYG11bHRpcGx5YCxgc2NyZWVuYCxgb3ZlcmxheWAsYGRhcmtlbmAsYGxpZ2h0ZW5gLGBjb2xvci1kb2RnZWAsYGNvbG9yLWJ1cm5gLGBoYXJkLWxpZ2h0YCxgc29mdC1saWdodGAsYGRpZmZlcmVuY2VgLGBleGNsdXNpb25gLGBodWVgLGBzYXR1cmF0aW9uYCxgY29sb3JgLGBsdW1pbm9zaXR5YF0sX2U9KCk9PltKLGh2LFB2LGt2XSx2ZT0oKT0+W2BgLGBub25lYCxtLFgsWV0seWU9KCk9Pltgbm9uZWAsSixYLFldLGJlPSgpPT5bYG5vbmVgLEosWCxZXSxPPSgpPT5bSixYLFldLHhlPSgpPT5bcHYsYGZ1bGxgLC4uLncoKV07cmV0dXJue2NhY2hlU2l6ZTo1MDAsdGhlbWU6e2FuaW1hdGU6W2BzcGluYCxgcGluZ2AsYHB1bHNlYCxgYm91bmNlYF0sYXNwZWN0OltgdmlkZW9gXSxibHVyOltndl0sYnJlYWtwb2ludDpbZ3ZdLGNvbG9yOltfdl0sY29udGFpbmVyOltndl0sImRyb3Atc2hhZG93IjpbZ3ZdLGVhc2U6W2BpbmAsYG91dGAsYGluLW91dGBdLGZvbnQ6W1N2XSwiZm9udC13ZWlnaHQiOltgdGhpbmAsYGV4dHJhbGlnaHRgLGBsaWdodGAsYG5vcm1hbGAsYG1lZGl1bWAsYHNlbWlib2xkYCxgYm9sZGAsYGV4dHJhYm9sZGAsYGJsYWNrYF0sImluc2V0LXNoYWRvdyI6W2d2XSxsZWFkaW5nOltgbm9uZWAsYHRpZ2h0YCxgc251Z2AsYG5vcm1hbGAsYHJlbGF4ZWRgLGBsb29zZWBdLHBlcnNwZWN0aXZlOltgZHJhbWF0aWNgLGBuZWFyYCxgbm9ybWFsYCxgbWlkcmFuZ2VgLGBkaXN0YW50YCxgbm9uZWBdLHJhZGl1czpbZ3ZdLHNoYWRvdzpbZ3ZdLHNwYWNpbmc6W2BweGAsSl0sdGV4dDpbZ3ZdLCJ0ZXh0LXNoYWRvdyI6W2d2XSx0cmFja2luZzpbYHRpZ2h0ZXJgLGB0aWdodGAsYG5vcm1hbGAsYHdpZGVgLGB3aWRlcmAsYHdpZGVzdGBdfSxjbGFzc0dyb3Vwczp7YXNwZWN0Olt7YXNwZWN0OltgYXV0b2AsYHNxdWFyZWAscHYsWSxYLGddfV0sY29udGFpbmVyOltgY29udGFpbmVyYF0sImNvbnRhaW5lci10eXBlIjpbeyJAY29udGFpbmVyIjpbYGAsYG5vcm1hbGAsYHNpemVgLFgsWV19XSwiY29udGFpbmVyLW5hbWVkIjpbQ3ZdLGNvbHVtbnM6W3tjb2x1bW5zOltKLFksWCxzXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOnkoKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6eSgpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbYGF1dG9gLGBhdm9pZGAsYGF2b2lkLXBhZ2VgLGBhdm9pZC1jb2x1bW5gXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOltgc2xpY2VgLGBjbG9uZWBdfV0sYm94Olt7Ym94OltgYm9yZGVyYCxgY29udGVudGBdfV0sZGlzcGxheTpbYGJsb2NrYCxgaW5saW5lLWJsb2NrYCxgaW5saW5lYCxgZmxleGAsYGlubGluZS1mbGV4YCxgdGFibGVgLGBpbmxpbmUtdGFibGVgLGB0YWJsZS1jYXB0aW9uYCxgdGFibGUtY2VsbGAsYHRhYmxlLWNvbHVtbmAsYHRhYmxlLWNvbHVtbi1ncm91cGAsYHRhYmxlLWZvb3Rlci1ncm91cGAsYHRhYmxlLWhlYWRlci1ncm91cGAsYHRhYmxlLXJvdy1ncm91cGAsYHRhYmxlLXJvd2AsYGZsb3ctcm9vdGAsYGdyaWRgLGBpbmxpbmUtZ3JpZGAsYGNvbnRlbnRzYCxgbGlzdC1pdGVtYCxgaGlkZGVuYF0sc3I6W2Bzci1vbmx5YCxgbm90LXNyLW9ubHlgXSxmbG9hdDpbe2Zsb2F0OltgcmlnaHRgLGBsZWZ0YCxgbm9uZWAsYHN0YXJ0YCxgZW5kYF19XSxjbGVhcjpbe2NsZWFyOltgbGVmdGAsYHJpZ2h0YCxgYm90aGAsYG5vbmVgLGBzdGFydGAsYGVuZGBdfV0saXNvbGF0aW9uOltgaXNvbGF0ZWAsYGlzb2xhdGlvbi1hdXRvYF0sIm9iamVjdC1maXQiOlt7b2JqZWN0OltgY29udGFpbmAsYGNvdmVyYCxgZmlsbGAsYG5vbmVgLGBzY2FsZS1kb3duYF19XSwib2JqZWN0LXBvc2l0aW9uIjpbe29iamVjdDp4KCl9XSxvdmVyZmxvdzpbe292ZXJmbG93OlMoKX1dLCJvdmVyZmxvdy14IjpbeyJvdmVyZmxvdy14IjpTKCl9XSwib3ZlcmZsb3cteSI6W3sib3ZlcmZsb3cteSI6UygpfV0sb3ZlcnNjcm9sbDpbe292ZXJzY3JvbGw6QygpfV0sIm92ZXJzY3JvbGwteCI6W3sib3ZlcnNjcm9sbC14IjpDKCl9XSwib3ZlcnNjcm9sbC15IjpbeyJvdmVyc2Nyb2xsLXkiOkMoKX1dLHBvc2l0aW9uOltgc3RhdGljYCxgZml4ZWRgLGBhYnNvbHV0ZWAsYHJlbGF0aXZlYCxgc3RpY2t5YF0saW5zZXQ6W3tpbnNldDplZSgpfV0sImluc2V0LXgiOlt7Imluc2V0LXgiOmVlKCl9XSwiaW5zZXQteSI6W3siaW5zZXQteSI6ZWUoKX1dLHN0YXJ0Olt7Imluc2V0LXMiOmVlKCksc3RhcnQ6ZWUoKX1dLGVuZDpbeyJpbnNldC1lIjplZSgpLGVuZDplZSgpfV0sImluc2V0LWJzIjpbeyJpbnNldC1icyI6ZWUoKX1dLCJpbnNldC1iZSI6W3siaW5zZXQtYmUiOmVlKCl9XSx0b3A6W3t0b3A6ZWUoKX1dLHJpZ2h0Olt7cmlnaHQ6ZWUoKX1dLGJvdHRvbTpbe2JvdHRvbTplZSgpfV0sbGVmdDpbe2xlZnQ6ZWUoKX1dLHZpc2liaWxpdHk6W2B2aXNpYmxlYCxgaW52aXNpYmxlYCxgY29sbGFwc2VgXSx6Olt7ejpbbXYsYGF1dG9gLFgsWV19XSxiYXNpczpbe2Jhc2lzOltwdixgZnVsbGAsYGF1dG9gLHMsLi4udygpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Oltgcm93YCxgcm93LXJldmVyc2VgLGBjb2xgLGBjb2wtcmV2ZXJzZWBdfV0sImZsZXgtd3JhcCI6W3tmbGV4Oltgbm93cmFwYCxgd3JhcGAsYHdyYXAtcmV2ZXJzZWBdfV0sZmxleDpbe2ZsZXg6W0oscHYsYGF1dG9gLGBpbml0aWFsYCxgbm9uZWAsWV19XSxncm93Olt7Z3JvdzpbYGAsSixYLFldfV0sc2hyaW5rOlt7c2hyaW5rOltgYCxKLFgsWV19XSxvcmRlcjpbe29yZGVyOlttdixgZmlyc3RgLGBsYXN0YCxgbm9uZWAsWCxZXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6dGUoKX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpUKCl9XSwiY29sLXN0YXJ0IjpbeyJjb2wtc3RhcnQiOm5lKCl9XSwiY29sLWVuZCI6W3siY29sLWVuZCI6bmUoKX1dLCJncmlkLXJvd3MiOlt7ImdyaWQtcm93cyI6dGUoKX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpUKCl9XSwicm93LXN0YXJ0IjpbeyJyb3ctc3RhcnQiOm5lKCl9XSwicm93LWVuZCI6W3sicm93LWVuZCI6bmUoKX1dLCJncmlkLWZsb3ciOlt7ImdyaWQtZmxvdyI6W2Byb3dgLGBjb2xgLGBkZW5zZWAsYHJvdy1kZW5zZWAsYGNvbC1kZW5zZWBdfV0sImF1dG8tY29scyI6W3siYXV0by1jb2xzIjpyZSgpfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpyZSgpfV0sZ2FwOlt7Z2FwOncoKX1dLCJnYXAteCI6W3siZ2FwLXgiOncoKX1dLCJnYXAteSI6W3siZ2FwLXkiOncoKX1dLCJqdXN0aWZ5LWNvbnRlbnQiOlt7anVzdGlmeTpbLi4uaWUoKSxgbm9ybWFsYF19XSwianVzdGlmeS1pdGVtcyI6W3sianVzdGlmeS1pdGVtcyI6Wy4uLkUoKSxgbm9ybWFsYF19XSwianVzdGlmeS1zZWxmIjpbeyJqdXN0aWZ5LXNlbGYiOltgYXV0b2AsLi4uRSgpXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6W2Bub3JtYWxgLC4uLmllKCldfV0sImFsaWduLWl0ZW1zIjpbe2l0ZW1zOlsuLi5FKCkse2Jhc2VsaW5lOltgYCxgbGFzdGBdfV19XSwiYWxpZ24tc2VsZiI6W3tzZWxmOltgYXV0b2AsLi4uRSgpLHtiYXNlbGluZTpbYGAsYGxhc3RgXX1dfV0sInBsYWNlLWNvbnRlbnQiOlt7InBsYWNlLWNvbnRlbnQiOmllKCl9XSwicGxhY2UtaXRlbXMiOlt7InBsYWNlLWl0ZW1zIjpbLi4uRSgpLGBiYXNlbGluZWBdfV0sInBsYWNlLXNlbGYiOlt7InBsYWNlLXNlbGYiOltgYXV0b2AsLi4uRSgpXX1dLHA6W3twOncoKX1dLHB4Olt7cHg6dygpfV0scHk6W3tweTp3KCl9XSxwczpbe3BzOncoKX1dLHBlOlt7cGU6dygpfV0scGJzOlt7cGJzOncoKX1dLHBiZTpbe3BiZTp3KCl9XSxwdDpbe3B0OncoKX1dLHByOlt7cHI6dygpfV0scGI6W3twYjp3KCl9XSxwbDpbe3BsOncoKX1dLG06W3ttOmFlKCl9XSxteDpbe214OmFlKCl9XSxteTpbe215OmFlKCl9XSxtczpbe21zOmFlKCl9XSxtZTpbe21lOmFlKCl9XSxtYnM6W3ttYnM6YWUoKX1dLG1iZTpbe21iZTphZSgpfV0sbXQ6W3ttdDphZSgpfV0sbXI6W3ttcjphZSgpfV0sbWI6W3ttYjphZSgpfV0sbWw6W3ttbDphZSgpfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOncoKX1dLCJzcGFjZS14LXJldmVyc2UiOltgc3BhY2UteC1yZXZlcnNlYF0sInNwYWNlLXkiOlt7InNwYWNlLXkiOncoKX1dLCJzcGFjZS15LXJldmVyc2UiOltgc3BhY2UteS1yZXZlcnNlYF0sc2l6ZTpbe3NpemU6b2UoKX1dLCJpbmxpbmUtc2l6ZSI6W3tpbmxpbmU6W2BhdXRvYCwuLi5zZSgpXX1dLCJtaW4taW5saW5lLXNpemUiOlt7Im1pbi1pbmxpbmUiOltgYXV0b2AsLi4uc2UoKV19XSwibWF4LWlubGluZS1zaXplIjpbeyJtYXgtaW5saW5lIjpbYG5vbmVgLC4uLnNlKCldfV0sImJsb2NrLXNpemUiOlt7YmxvY2s6W2BhdXRvYCwuLi5jZSgpXX1dLCJtaW4tYmxvY2stc2l6ZSI6W3sibWluLWJsb2NrIjpbYGF1dG9gLC4uLmNlKCldfV0sIm1heC1ibG9jay1zaXplIjpbeyJtYXgtYmxvY2siOltgbm9uZWAsLi4uY2UoKV19XSx3Olt7dzpbcyxgc2NyZWVuYCwuLi5vZSgpXX1dLCJtaW4tdyI6W3sibWluLXciOltzLGBzY3JlZW5gLGBub25lYCwuLi5vZSgpXX1dLCJtYXgtdyI6W3sibWF4LXciOltzLGBzY3JlZW5gLGBub25lYCxgcHJvc2VgLHtzY3JlZW46W29dfSwuLi5vZSgpXX1dLGg6W3toOltgc2NyZWVuYCxgbGhgLC4uLm9lKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6W2BzY3JlZW5gLGBsaGAsYG5vbmVgLC4uLm9lKCldfV0sIm1heC1oIjpbeyJtYXgtaCI6W2BzY3JlZW5gLGBsaGAsLi4ub2UoKV19XSwiZm9udC1zaXplIjpbe3RleHQ6W2BiYXNlYCxuLE12LFR2XX1dLCJmb250LXNtb290aGluZyI6W2BhbnRpYWxpYXNlZGAsYHN1YnBpeGVsLWFudGlhbGlhc2VkYF0sImZvbnQtc3R5bGUiOltgaXRhbGljYCxgbm90LWl0YWxpY2BdLCJmb250LXdlaWdodCI6W3tmb250OltyLFJ2LER2XX1dLCJmb250LXN0cmV0Y2giOlt7ImZvbnQtc3RyZXRjaCI6W2B1bHRyYS1jb25kZW5zZWRgLGBleHRyYS1jb25kZW5zZWRgLGBjb25kZW5zZWRgLGBzZW1pLWNvbmRlbnNlZGAsYG5vcm1hbGAsYHNlbWktZXhwYW5kZWRgLGBleHBhbmRlZGAsYGV4dHJhLWV4cGFuZGVkYCxgdWx0cmEtZXhwYW5kZWRgLGh2LFldfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W052LE92LHRdfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltZXX1dLCJmdm4tbm9ybWFsIjpbYG5vcm1hbC1udW1zYF0sImZ2bi1vcmRpbmFsIjpbYG9yZGluYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2BzbGFzaGVkLXplcm9gXSwiZnZuLWZpZ3VyZSI6W2BsaW5pbmctbnVtc2AsYG9sZHN0eWxlLW51bXNgXSwiZnZuLXNwYWNpbmciOltgcHJvcG9ydGlvbmFsLW51bXNgLGB0YWJ1bGFyLW51bXNgXSwiZnZuLWZyYWN0aW9uIjpbYGRpYWdvbmFsLWZyYWN0aW9uc2AsYHN0YWNrZWQtZnJhY3Rpb25zYF0sdHJhY2tpbmc6W3t0cmFja2luZzpbaSxYLFldfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltKLGBub25lYCxYLEV2XX1dLGxlYWRpbmc6W3tsZWFkaW5nOlthLC4uLncoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6W2Bub25lYCxYLFldfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbYGluc2lkZWAsYG91dHNpZGVgXX1dLCJsaXN0LXN0eWxlLXR5cGUiOlt7bGlzdDpbYGRpc2NgLGBkZWNpbWFsYCxgbm9uZWAsWCxZXX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OltgbGVmdGAsYGNlbnRlcmAsYHJpZ2h0YCxganVzdGlmeWAsYHN0YXJ0YCxgZW5kYF19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6RCgpfV0sInRleHQtY29sb3IiOlt7dGV4dDpEKCl9XSwidGV4dC1kZWNvcmF0aW9uIjpbYHVuZGVybGluZWAsYG92ZXJsaW5lYCxgbGluZS10aHJvdWdoYCxgbm8tdW5kZXJsaW5lYF0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5oZSgpLGB3YXZ5YF19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOltKLGBmcm9tLWZvbnRgLGBhdXRvYCxYLFR2XX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpEKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W0osYGF1dG9gLFgsWV19XSwidGV4dC10cmFuc2Zvcm0iOltgdXBwZXJjYXNlYCxgbG93ZXJjYXNlYCxgY2FwaXRhbGl6ZWAsYG5vcm1hbC1jYXNlYF0sInRleHQtb3ZlcmZsb3ciOltgdHJ1bmNhdGVgLGB0ZXh0LWVsbGlwc2lzYCxgdGV4dC1jbGlwYF0sInRleHQtd3JhcCI6W3t0ZXh0Oltgd3JhcGAsYG5vd3JhcGAsYGJhbGFuY2VgLGBwcmV0dHlgXX1dLGluZGVudDpbe2luZGVudDp3KCl9XSwidGFiLXNpemUiOlt7dGFiOlttdixYLFldfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOltgYmFzZWxpbmVgLGB0b3BgLGBtaWRkbGVgLGBib3R0b21gLGB0ZXh0LXRvcGAsYHRleHQtYm90dG9tYCxgc3ViYCxgc3VwZXJgLFgsWV19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbYG5vcm1hbGAsYG5vd3JhcGAsYHByZWAsYHByZS1saW5lYCxgcHJlLXdyYXBgLGBicmVhay1zcGFjZXNgXX1dLGJyZWFrOlt7YnJlYWs6W2Bub3JtYWxgLGB3b3Jkc2AsYGFsbGAsYGtlZXBgXX1dLHdyYXA6W3t3cmFwOltgYnJlYWstd29yZGAsYGFueXdoZXJlYCxgbm9ybWFsYF19XSxoeXBoZW5zOlt7aHlwaGVuczpbYG5vbmVgLGBtYW51YWxgLGBhdXRvYF19XSxjb250ZW50Olt7Y29udGVudDpbYG5vbmVgLFgsWV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbYGZpeGVkYCxgbG9jYWxgLGBzY3JvbGxgXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgdGV4dGBdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YF19XSwiYmctcG9zaXRpb24iOlt7Ymc6bGUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6dWUoKX1dLCJiZy1zaXplIjpbe2JnOmRlKCl9XSwiYmctaW1hZ2UiOlt7Ymc6W2Bub25lYCx7bGluZWFyOlt7dG86W2B0YCxgdHJgLGByYCxgYnJgLGBiYCxgYmxgLGBsYCxgdGxgXX0sbXYsWCxZXSxyYWRpYWw6W2BgLFgsWV0sY29uaWM6W212LFgsWV19LEl2LEF2XX1dLCJiZy1jb2xvciI6W3tiZzpEKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpmZSgpfV0sImdyYWRpZW50LXZpYS1wb3MiOlt7dmlhOmZlKCl9XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOmZlKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOkQoKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOkQoKX1dLCJncmFkaWVudC10byI6W3t0bzpEKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpwZSgpfV0sInJvdW5kZWQtcyI6W3sicm91bmRlZC1zIjpwZSgpfV0sInJvdW5kZWQtZSI6W3sicm91bmRlZC1lIjpwZSgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpwZSgpfV0sInJvdW5kZWQtciI6W3sicm91bmRlZC1yIjpwZSgpfV0sInJvdW5kZWQtYiI6W3sicm91bmRlZC1iIjpwZSgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpwZSgpfV0sInJvdW5kZWQtc3MiOlt7InJvdW5kZWQtc3MiOnBlKCl9XSwicm91bmRlZC1zZSI6W3sicm91bmRlZC1zZSI6cGUoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpwZSgpfV0sInJvdW5kZWQtZXMiOlt7InJvdW5kZWQtZXMiOnBlKCl9XSwicm91bmRlZC10bCI6W3sicm91bmRlZC10bCI6cGUoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpwZSgpfV0sInJvdW5kZWQtYnIiOlt7InJvdW5kZWQtYnIiOnBlKCl9XSwicm91bmRlZC1ibCI6W3sicm91bmRlZC1ibCI6cGUoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6bWUoKX1dLCJib3JkZXItdy14IjpbeyJib3JkZXIteCI6bWUoKX1dLCJib3JkZXItdy15IjpbeyJib3JkZXIteSI6bWUoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6bWUoKX1dLCJib3JkZXItdy1lIjpbeyJib3JkZXItZSI6bWUoKX1dLCJib3JkZXItdy1icyI6W3siYm9yZGVyLWJzIjptZSgpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOm1lKCl9XSwiYm9yZGVyLXctdCI6W3siYm9yZGVyLXQiOm1lKCl9XSwiYm9yZGVyLXctciI6W3siYm9yZGVyLXIiOm1lKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOm1lKCl9XSwiYm9yZGVyLXctbCI6W3siYm9yZGVyLWwiOm1lKCl9XSwiZGl2aWRlLXgiOlt7ImRpdmlkZS14IjptZSgpfV0sImRpdmlkZS14LXJldmVyc2UiOltgZGl2aWRlLXgtcmV2ZXJzZWBdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOm1lKCl9XSwiZGl2aWRlLXktcmV2ZXJzZSI6W2BkaXZpZGUteS1yZXZlcnNlYF0sImJvcmRlci1zdHlsZSI6W3tib3JkZXI6Wy4uLmhlKCksYGhpZGRlbmAsYG5vbmVgXX1dLCJkaXZpZGUtc3R5bGUiOlt7ZGl2aWRlOlsuLi5oZSgpLGBoaWRkZW5gLGBub25lYF19XSwiYm9yZGVyLWNvbG9yIjpbe2JvcmRlcjpEKCl9XSwiYm9yZGVyLWNvbG9yLXgiOlt7ImJvcmRlci14IjpEKCl9XSwiYm9yZGVyLWNvbG9yLXkiOlt7ImJvcmRlci15IjpEKCl9XSwiYm9yZGVyLWNvbG9yLXMiOlt7ImJvcmRlci1zIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWUiOlt7ImJvcmRlci1lIjpEKCl9XSwiYm9yZGVyLWNvbG9yLWJzIjpbeyJib3JkZXItYnMiOkQoKX1dLCJib3JkZXItY29sb3ItYmUiOlt7ImJvcmRlci1iZSI6RCgpfV0sImJvcmRlci1jb2xvci10IjpbeyJib3JkZXItdCI6RCgpfV0sImJvcmRlci1jb2xvci1yIjpbeyJib3JkZXItciI6RCgpfV0sImJvcmRlci1jb2xvci1iIjpbeyJib3JkZXItYiI6RCgpfV0sImJvcmRlci1jb2xvci1sIjpbeyJib3JkZXItbCI6RCgpfV0sImRpdmlkZS1jb2xvciI6W3tkaXZpZGU6RCgpfV0sIm91dGxpbmUtc3R5bGUiOlt7b3V0bGluZTpbLi4uaGUoKSxgbm9uZWAsYGhpZGRlbmBdfV0sIm91dGxpbmUtb2Zmc2V0IjpbeyJvdXRsaW5lLW9mZnNldCI6W0osWCxZXX1dLCJvdXRsaW5lLXciOlt7b3V0bGluZTpbYGAsSixNdixUdl19XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOkQoKX1dLHNoYWRvdzpbe3NoYWRvdzpbYGAsYG5vbmVgLHUsTHYsanZdfV0sInNoYWRvdy1jb2xvciI6W3tzaGFkb3c6RCgpfV0sImluc2V0LXNoYWRvdyI6W3siaW5zZXQtc2hhZG93IjpbYG5vbmVgLGQsTHYsanZdfV0sImluc2V0LXNoYWRvdy1jb2xvciI6W3siaW5zZXQtc2hhZG93IjpEKCl9XSwicmluZy13Ijpbe3Jpbmc6bWUoKX1dLCJyaW5nLXctaW5zZXQiOltgcmluZy1pbnNldGBdLCJyaW5nLWNvbG9yIjpbe3Jpbmc6RCgpfV0sInJpbmctb2Zmc2V0LXciOlt7InJpbmctb2Zmc2V0IjpbSixUdl19XSwicmluZy1vZmZzZXQtY29sb3IiOlt7InJpbmctb2Zmc2V0IjpEKCl9XSwiaW5zZXQtcmluZy13IjpbeyJpbnNldC1yaW5nIjptZSgpfV0sImluc2V0LXJpbmctY29sb3IiOlt7Imluc2V0LXJpbmciOkQoKX1dLCJ0ZXh0LXNoYWRvdyI6W3sidGV4dC1zaGFkb3ciOltgbm9uZWAsZixMdixqdl19XSwidGV4dC1zaGFkb3ctY29sb3IiOlt7InRleHQtc2hhZG93IjpEKCl9XSxvcGFjaXR5Olt7b3BhY2l0eTpbSixYLFldfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjpbLi4uZ2UoKSxgcGx1cy1kYXJrZXJgLGBwbHVzLWxpZ2h0ZXJgXX1dLCJiZy1ibGVuZCI6W3siYmctYmxlbmQiOmdlKCl9XSwibWFzay1jbGlwIjpbeyJtYXNrLWNsaXAiOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGBmaWxsYCxgc3Ryb2tlYCxgdmlld2BdfSxgbWFzay1uby1jbGlwYF0sIm1hc2stY29tcG9zaXRlIjpbe21hc2s6W2BhZGRgLGBzdWJ0cmFjdGAsYGludGVyc2VjdGAsYGV4Y2x1ZGVgXX1dLCJtYXNrLWltYWdlLWxpbmVhci1wb3MiOlt7Im1hc2stbGluZWFyIjpbSl19XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1wb3MiOlt7Im1hc2stbGluZWFyLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1saW5lYXItdG8tcG9zIjpbeyJtYXNrLWxpbmVhci10byI6X2UoKX1dLCJtYXNrLWltYWdlLWxpbmVhci1mcm9tLWNvbG9yIjpbeyJtYXNrLWxpbmVhci1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1saW5lYXItdG8tY29sb3IiOlt7Im1hc2stbGluZWFyLXRvIjpEKCl9XSwibWFzay1pbWFnZS10LWZyb20tcG9zIjpbeyJtYXNrLXQtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXQtdG8tcG9zIjpbeyJtYXNrLXQtdG8iOl9lKCl9XSwibWFzay1pbWFnZS10LWZyb20tY29sb3IiOlt7Im1hc2stdC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS10LXRvLWNvbG9yIjpbeyJtYXNrLXQtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1wb3MiOlt7Im1hc2stci1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2Utci10by1wb3MiOlt7Im1hc2stci10byI6X2UoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1jb2xvciI6W3sibWFzay1yLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXItdG8tY29sb3IiOlt7Im1hc2stci10byI6RCgpfV0sIm1hc2staW1hZ2UtYi1mcm9tLXBvcyI6W3sibWFzay1iLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1iLXRvLXBvcyI6W3sibWFzay1iLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtYi1mcm9tLWNvbG9yIjpbeyJtYXNrLWItZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UtYi10by1jb2xvciI6W3sibWFzay1iLXRvIjpEKCl9XSwibWFzay1pbWFnZS1sLWZyb20tcG9zIjpbeyJtYXNrLWwtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLWwtdG8tcG9zIjpbeyJtYXNrLWwtdG8iOl9lKCl9XSwibWFzay1pbWFnZS1sLWZyb20tY29sb3IiOlt7Im1hc2stbC1mcm9tIjpEKCl9XSwibWFzay1pbWFnZS1sLXRvLWNvbG9yIjpbeyJtYXNrLWwtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1wb3MiOlt7Im1hc2steC1mcm9tIjpfZSgpfV0sIm1hc2staW1hZ2UteC10by1wb3MiOlt7Im1hc2steC10byI6X2UoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1jb2xvciI6W3sibWFzay14LWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXgtdG8tY29sb3IiOlt7Im1hc2steC10byI6RCgpfV0sIm1hc2staW1hZ2UteS1mcm9tLXBvcyI6W3sibWFzay15LWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS15LXRvLXBvcyI6W3sibWFzay15LXRvIjpfZSgpfV0sIm1hc2staW1hZ2UteS1mcm9tLWNvbG9yIjpbeyJtYXNrLXktZnJvbSI6RCgpfV0sIm1hc2staW1hZ2UteS10by1jb2xvciI6W3sibWFzay15LXRvIjpEKCl9XSwibWFzay1pbWFnZS1yYWRpYWwiOlt7Im1hc2stcmFkaWFsIjpbWCxZXX1dLCJtYXNrLWltYWdlLXJhZGlhbC1mcm9tLXBvcyI6W3sibWFzay1yYWRpYWwtZnJvbSI6X2UoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1wb3MiOlt7Im1hc2stcmFkaWFsLXRvIjpfZSgpfV0sIm1hc2staW1hZ2UtcmFkaWFsLWZyb20tY29sb3IiOlt7Im1hc2stcmFkaWFsLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1jb2xvciI6W3sibWFzay1yYWRpYWwtdG8iOkQoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC1zaGFwZSI6W3sibWFzay1yYWRpYWwiOltgY2lyY2xlYCxgZWxsaXBzZWBdfV0sIm1hc2staW1hZ2UtcmFkaWFsLXNpemUiOlt7Im1hc2stcmFkaWFsIjpbe2Nsb3Nlc3Q6W2BzaWRlYCxgY29ybmVyYF0sZmFydGhlc3Q6W2BzaWRlYCxgY29ybmVyYF19XX1dLCJtYXNrLWltYWdlLXJhZGlhbC1wb3MiOlt7Im1hc2stcmFkaWFsLWF0IjpiKCl9XSwibWFzay1pbWFnZS1jb25pYy1wb3MiOlt7Im1hc2stY29uaWMiOltKXX1dLCJtYXNrLWltYWdlLWNvbmljLWZyb20tcG9zIjpbeyJtYXNrLWNvbmljLWZyb20iOl9lKCl9XSwibWFzay1pbWFnZS1jb25pYy10by1wb3MiOlt7Im1hc2stY29uaWMtdG8iOl9lKCl9XSwibWFzay1pbWFnZS1jb25pYy1mcm9tLWNvbG9yIjpbeyJtYXNrLWNvbmljLWZyb20iOkQoKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLWNvbG9yIjpbeyJtYXNrLWNvbmljLXRvIjpEKCl9XSwibWFzay1tb2RlIjpbe21hc2s6W2BhbHBoYWAsYGx1bWluYW5jZWAsYG1hdGNoYF19XSwibWFzay1vcmlnaW4iOlt7Im1hc2stb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgZmlsbGAsYHN0cm9rZWAsYHZpZXdgXX1dLCJtYXNrLXBvc2l0aW9uIjpbe21hc2s6bGUoKX1dLCJtYXNrLXJlcGVhdCI6W3ttYXNrOnVlKCl9XSwibWFzay1zaXplIjpbe21hc2s6ZGUoKX1dLCJtYXNrLXR5cGUiOlt7Im1hc2stdHlwZSI6W2BhbHBoYWAsYGx1bWluYW5jZWBdfV0sIm1hc2staW1hZ2UiOlt7bWFzazpbYG5vbmVgLFgsWV19XSxmaWx0ZXI6W3tmaWx0ZXI6W2BgLGBub25lYCxYLFldfV0sYmx1cjpbe2JsdXI6dmUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltKLFgsWV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltKLFgsWV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbYGAsYG5vbmVgLHAsTHYsanZdfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6RCgpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOltgYCxKLFgsWV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W0osWCxZXX1dLGludmVydDpbe2ludmVydDpbYGAsSixYLFldfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbSixYLFldfV0sc2VwaWE6W3tzZXBpYTpbYGAsSixYLFldfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbYGAsYG5vbmVgLFgsWV19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6dmUoKX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbSixYLFldfV0sImJhY2tkcm9wLWNvbnRyYXN0IjpbeyJiYWNrZHJvcC1jb250cmFzdCI6W0osWCxZXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W2BgLEosWCxZXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbSixYLFldfV0sImJhY2tkcm9wLWludmVydCI6W3siYmFja2Ryb3AtaW52ZXJ0IjpbYGAsSixYLFldfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOltKLFgsWV19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbSixYLFldfV0sImJhY2tkcm9wLXNlcGlhIjpbeyJiYWNrZHJvcC1zZXBpYSI6W2BgLEosWCxZXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOltgY29sbGFwc2VgLGBzZXBhcmF0ZWBdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6dygpfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOncoKX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15Ijp3KCl9XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOltgYXV0b2AsYGZpeGVkYF19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbYHRvcGAsYGJvdHRvbWBdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246W2BgLGBhbGxgLGBjb2xvcnNgLGBvcGFjaXR5YCxgc2hhZG93YCxgdHJhbnNmb3JtYCxgbm9uZWAsWCxZXX1dLCJ0cmFuc2l0aW9uLWJlaGF2aW9yIjpbe3RyYW5zaXRpb246W2Bub3JtYWxgLGBkaXNjcmV0ZWBdfV0sZHVyYXRpb246W3tkdXJhdGlvbjpbSixgaW5pdGlhbGAsWCxZXX1dLGVhc2U6W3tlYXNlOltgbGluZWFyYCxgaW5pdGlhbGAsXyxYLFldfV0sZGVsYXk6W3tkZWxheTpbSixYLFldfV0sYW5pbWF0ZTpbe2FuaW1hdGU6W2Bub25lYCx2LFgsWV19XSxiYWNrZmFjZTpbe2JhY2tmYWNlOltgaGlkZGVuYCxgdmlzaWJsZWBdfV0scGVyc3BlY3RpdmU6W3twZXJzcGVjdGl2ZTpbaCxYLFldfV0sInBlcnNwZWN0aXZlLW9yaWdpbiI6W3sicGVyc3BlY3RpdmUtb3JpZ2luIjp4KCl9XSxyb3RhdGU6W3tyb3RhdGU6eWUoKX1dLCJyb3RhdGUteCI6W3sicm90YXRlLXgiOnllKCl9XSwicm90YXRlLXkiOlt7InJvdGF0ZS15Ijp5ZSgpfV0sInJvdGF0ZS16IjpbeyJyb3RhdGUteiI6eWUoKX1dLHNjYWxlOlt7c2NhbGU6YmUoKX1dLCJzY2FsZS14IjpbeyJzY2FsZS14IjpiZSgpfV0sInNjYWxlLXkiOlt7InNjYWxlLXkiOmJlKCl9XSwic2NhbGUteiI6W3sic2NhbGUteiI6YmUoKX1dLCJzY2FsZS0zZCI6W2BzY2FsZS0zZGBdLHNrZXc6W3tza2V3Ok8oKX1dLCJza2V3LXgiOlt7InNrZXcteCI6TygpfV0sInNrZXcteSI6W3sic2tldy15IjpPKCl9XSx0cmFuc2Zvcm06W3t0cmFuc2Zvcm06W1gsWSxgYCxgbm9uZWAsYGdwdWAsYGNwdWBdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOngoKX1dLCJ0cmFuc2Zvcm0tc3R5bGUiOlt7dHJhbnNmb3JtOltgM2RgLGBmbGF0YF19XSx0cmFuc2xhdGU6W3t0cmFuc2xhdGU6eGUoKX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOnhlKCl9XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15Ijp4ZSgpfV0sInRyYW5zbGF0ZS16IjpbeyJ0cmFuc2xhdGUteiI6eGUoKX1dLCJ0cmFuc2xhdGUtbm9uZSI6W2B0cmFuc2xhdGUtbm9uZWBdLHpvb206W3t6b29tOlttdixYLFldfV0sYWNjZW50Olt7YWNjZW50OkQoKX1dLGFwcGVhcmFuY2U6W3thcHBlYXJhbmNlOltgbm9uZWAsYGF1dG9gXX1dLCJjYXJldC1jb2xvciI6W3tjYXJldDpEKCl9XSwiY29sb3Itc2NoZW1lIjpbe3NjaGVtZTpbYG5vcm1hbGAsYGRhcmtgLGBsaWdodGAsYGxpZ2h0LWRhcmtgLGBvbmx5LWRhcmtgLGBvbmx5LWxpZ2h0YF19XSxjdXJzb3I6W3tjdXJzb3I6W2BhdXRvYCxgZGVmYXVsdGAsYHBvaW50ZXJgLGB3YWl0YCxgdGV4dGAsYG1vdmVgLGBoZWxwYCxgbm90LWFsbG93ZWRgLGBub25lYCxgY29udGV4dC1tZW51YCxgcHJvZ3Jlc3NgLGBjZWxsYCxgY3Jvc3NoYWlyYCxgdmVydGljYWwtdGV4dGAsYGFsaWFzYCxgY29weWAsYG5vLWRyb3BgLGBncmFiYCxgZ3JhYmJpbmdgLGBhbGwtc2Nyb2xsYCxgY29sLXJlc2l6ZWAsYHJvdy1yZXNpemVgLGBuLXJlc2l6ZWAsYGUtcmVzaXplYCxgcy1yZXNpemVgLGB3LXJlc2l6ZWAsYG5lLXJlc2l6ZWAsYG53LXJlc2l6ZWAsYHNlLXJlc2l6ZWAsYHN3LXJlc2l6ZWAsYGV3LXJlc2l6ZWAsYG5zLXJlc2l6ZWAsYG5lc3ctcmVzaXplYCxgbndzZS1yZXNpemVgLGB6b29tLWluYCxgem9vbS1vdXRgLFgsWV19XSwiZmllbGQtc2l6aW5nIjpbeyJmaWVsZC1zaXppbmciOltgZml4ZWRgLGBjb250ZW50YF19XSwicG9pbnRlci1ldmVudHMiOlt7InBvaW50ZXItZXZlbnRzIjpbYGF1dG9gLGBub25lYF19XSxyZXNpemU6W3tyZXNpemU6W2Bub25lYCxgYCxgeWAsYHhgXX1dLCJzY3JvbGwtYmVoYXZpb3IiOlt7c2Nyb2xsOltgYXV0b2AsYHNtb290aGBdfV0sInNjcm9sbGJhci10aHVtYi1jb2xvciI6W3sic2Nyb2xsYmFyLXRodW1iIjpEKCl9XSwic2Nyb2xsYmFyLXRyYWNrLWNvbG9yIjpbeyJzY3JvbGxiYXItdHJhY2siOkQoKX1dLCJzY3JvbGxiYXItZ3V0dGVyIjpbeyJzY3JvbGxiYXItZ3V0dGVyIjpbYGF1dG9gLGBzdGFibGVgLGBib3RoYF19XSwic2Nyb2xsYmFyLXciOlt7c2Nyb2xsYmFyOltgYXV0b2AsYHRoaW5gLGBub25lYF19XSwic2Nyb2xsLW0iOlt7InNjcm9sbC1tIjp3KCl9XSwic2Nyb2xsLW14IjpbeyJzY3JvbGwtbXgiOncoKX1dLCJzY3JvbGwtbXkiOlt7InNjcm9sbC1teSI6dygpfV0sInNjcm9sbC1tcyI6W3sic2Nyb2xsLW1zIjp3KCl9XSwic2Nyb2xsLW1lIjpbeyJzY3JvbGwtbWUiOncoKX1dLCJzY3JvbGwtbWJzIjpbeyJzY3JvbGwtbWJzIjp3KCl9XSwic2Nyb2xsLW1iZSI6W3sic2Nyb2xsLW1iZSI6dygpfV0sInNjcm9sbC1tdCI6W3sic2Nyb2xsLW10Ijp3KCl9XSwic2Nyb2xsLW1yIjpbeyJzY3JvbGwtbXIiOncoKX1dLCJzY3JvbGwtbWIiOlt7InNjcm9sbC1tYiI6dygpfV0sInNjcm9sbC1tbCI6W3sic2Nyb2xsLW1sIjp3KCl9XSwic2Nyb2xsLXAiOlt7InNjcm9sbC1wIjp3KCl9XSwic2Nyb2xsLXB4IjpbeyJzY3JvbGwtcHgiOncoKX1dLCJzY3JvbGwtcHkiOlt7InNjcm9sbC1weSI6dygpfV0sInNjcm9sbC1wcyI6W3sic2Nyb2xsLXBzIjp3KCl9XSwic2Nyb2xsLXBlIjpbeyJzY3JvbGwtcGUiOncoKX1dLCJzY3JvbGwtcGJzIjpbeyJzY3JvbGwtcGJzIjp3KCl9XSwic2Nyb2xsLXBiZSI6W3sic2Nyb2xsLXBiZSI6dygpfV0sInNjcm9sbC1wdCI6W3sic2Nyb2xsLXB0Ijp3KCl9XSwic2Nyb2xsLXByIjpbeyJzY3JvbGwtcHIiOncoKX1dLCJzY3JvbGwtcGIiOlt7InNjcm9sbC1wYiI6dygpfV0sInNjcm9sbC1wbCI6W3sic2Nyb2xsLXBsIjp3KCl9XSwic25hcC1hbGlnbiI6W3tzbmFwOltgc3RhcnRgLGBlbmRgLGBjZW50ZXJgLGBhbGlnbi1ub25lYF19XSwic25hcC1zdG9wIjpbe3NuYXA6W2Bub3JtYWxgLGBhbHdheXNgXX1dLCJzbmFwLXR5cGUiOlt7c25hcDpbYG5vbmVgLGB4YCxgeWAsYGJvdGhgXX1dLCJzbmFwLXN0cmljdG5lc3MiOlt7c25hcDpbYG1hbmRhdG9yeWAsYHByb3hpbWl0eWBdfV0sdG91Y2g6W3t0b3VjaDpbYGF1dG9gLGBub25lYCxgbWFuaXB1bGF0aW9uYF19XSwidG91Y2gteCI6W3sidG91Y2gtcGFuIjpbYHhgLGBsZWZ0YCxgcmlnaHRgXX1dLCJ0b3VjaC15IjpbeyJ0b3VjaC1wYW4iOltgeWAsYHVwYCxgZG93bmBdfV0sInRvdWNoLXB6IjpbYHRvdWNoLXBpbmNoLXpvb21gXSxzZWxlY3Q6W3tzZWxlY3Q6W2Bub25lYCxgdGV4dGAsYGFsbGAsYGF1dG9gXX1dLCJ3aWxsLWNoYW5nZSI6W3sid2lsbC1jaGFuZ2UiOltgYXV0b2AsYHNjcm9sbGAsYGNvbnRlbnRzYCxgdHJhbnNmb3JtYCxYLFldfV0sZmlsbDpbe2ZpbGw6W2Bub25lYCwuLi5EKCldfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbSixNdixUdixFdl19XSxzdHJva2U6W3tzdHJva2U6W2Bub25lYCwuLi5EKCldfV0sImZvcmNlZC1jb2xvci1hZGp1c3QiOlt7ImZvcmNlZC1jb2xvci1hZGp1c3QiOltgYXV0b2AsYG5vbmVgXX1dfSxjb25mbGljdGluZ0NsYXNzR3JvdXBzOnsiY29udGFpbmVyLW5hbWVkIjpbYGNvbnRhaW5lci10eXBlYF0sb3ZlcmZsb3c6W2BvdmVyZmxvdy14YCxgb3ZlcmZsb3cteWBdLG92ZXJzY3JvbGw6W2BvdmVyc2Nyb2xsLXhgLGBvdmVyc2Nyb2xsLXlgXSxpbnNldDpbYGluc2V0LXhgLGBpbnNldC15YCxgaW5zZXQtYnNgLGBpbnNldC1iZWAsYHN0YXJ0YCxgZW5kYCxgdG9wYCxgcmlnaHRgLGBib3R0b21gLGBsZWZ0YF0sImluc2V0LXgiOltgcmlnaHRgLGBsZWZ0YF0sImluc2V0LXkiOltgdG9wYCxgYm90dG9tYF0sZmxleDpbYGJhc2lzYCxgZ3Jvd2AsYHNocmlua2BdLGdhcDpbYGdhcC14YCxgZ2FwLXlgXSxwOltgcHhgLGBweWAsYHBzYCxgcGVgLGBwYnNgLGBwYmVgLGBwdGAsYHByYCxgcGJgLGBwbGBdLHB4OltgcHJgLGBwbGBdLHB5OltgcHRgLGBwYmBdLG06W2BteGAsYG15YCxgbXNgLGBtZWAsYG1ic2AsYG1iZWAsYG10YCxgbXJgLGBtYmAsYG1sYF0sbXg6W2BtcmAsYG1sYF0sbXk6W2BtdGAsYG1iYF0sc2l6ZTpbYHdgLGBoYF0sImZvbnQtc2l6ZSI6W2BsZWFkaW5nYF0sImZ2bi1ub3JtYWwiOltgZnZuLW9yZGluYWxgLGBmdm4tc2xhc2hlZC16ZXJvYCxgZnZuLWZpZ3VyZWAsYGZ2bi1zcGFjaW5nYCxgZnZuLWZyYWN0aW9uYF0sImZ2bi1vcmRpbmFsIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1maWd1cmUiOltgZnZuLW5vcm1hbGBdLCJmdm4tc3BhY2luZyI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1mcmFjdGlvbiI6W2Bmdm4tbm9ybWFsYF0sImxpbmUtY2xhbXAiOltgZGlzcGxheWAsYG92ZXJmbG93YF0scm91bmRlZDpbYHJvdW5kZWQtc2AsYHJvdW5kZWQtZWAsYHJvdW5kZWQtdGAsYHJvdW5kZWQtcmAsYHJvdW5kZWQtYmAsYHJvdW5kZWQtbGAsYHJvdW5kZWQtc3NgLGByb3VuZGVkLXNlYCxgcm91bmRlZC1lZWAsYHJvdW5kZWQtZXNgLGByb3VuZGVkLXRsYCxgcm91bmRlZC10cmAsYHJvdW5kZWQtYnJgLGByb3VuZGVkLWJsYF0sInJvdW5kZWQtcyI6W2Byb3VuZGVkLXNzYCxgcm91bmRlZC1lc2BdLCJyb3VuZGVkLWUiOltgcm91bmRlZC1zZWAsYHJvdW5kZWQtZWVgXSwicm91bmRlZC10IjpbYHJvdW5kZWQtdGxgLGByb3VuZGVkLXRyYF0sInJvdW5kZWQtciI6W2Byb3VuZGVkLXRyYCxgcm91bmRlZC1icmBdLCJyb3VuZGVkLWIiOltgcm91bmRlZC1icmAsYHJvdW5kZWQtYmxgXSwicm91bmRlZC1sIjpbYHJvdW5kZWQtdGxgLGByb3VuZGVkLWJsYF0sImJvcmRlci1zcGFjaW5nIjpbYGJvcmRlci1zcGFjaW5nLXhgLGBib3JkZXItc3BhY2luZy15YF0sImJvcmRlci13IjpbYGJvcmRlci13LXhgLGBib3JkZXItdy15YCxgYm9yZGVyLXctc2AsYGJvcmRlci13LWVgLGBib3JkZXItdy1ic2AsYGJvcmRlci13LWJlYCxgYm9yZGVyLXctdGAsYGJvcmRlci13LXJgLGBib3JkZXItdy1iYCxgYm9yZGVyLXctbGBdLCJib3JkZXItdy14IjpbYGJvcmRlci13LXJgLGBib3JkZXItdy1sYF0sImJvcmRlci13LXkiOltgYm9yZGVyLXctdGAsYGJvcmRlci13LWJgXSwiYm9yZGVyLWNvbG9yIjpbYGJvcmRlci1jb2xvci14YCxgYm9yZGVyLWNvbG9yLXlgLGBib3JkZXItY29sb3Itc2AsYGJvcmRlci1jb2xvci1lYCxgYm9yZGVyLWNvbG9yLWJzYCxgYm9yZGVyLWNvbG9yLWJlYCxgYm9yZGVyLWNvbG9yLXRgLGBib3JkZXItY29sb3ItcmAsYGJvcmRlci1jb2xvci1iYCxgYm9yZGVyLWNvbG9yLWxgXSwiYm9yZGVyLWNvbG9yLXgiOltgYm9yZGVyLWNvbG9yLXJgLGBib3JkZXItY29sb3ItbGBdLCJib3JkZXItY29sb3IteSI6W2Bib3JkZXItY29sb3ItdGAsYGJvcmRlci1jb2xvci1iYF0sdHJhbnNsYXRlOltgdHJhbnNsYXRlLXhgLGB0cmFuc2xhdGUteWAsYHRyYW5zbGF0ZS1ub25lYF0sInRyYW5zbGF0ZS1ub25lIjpbYHRyYW5zbGF0ZWAsYHRyYW5zbGF0ZS14YCxgdHJhbnNsYXRlLXlgLGB0cmFuc2xhdGUtemBdLCJzY3JvbGwtbSI6W2BzY3JvbGwtbXhgLGBzY3JvbGwtbXlgLGBzY3JvbGwtbXNgLGBzY3JvbGwtbWVgLGBzY3JvbGwtbWJzYCxgc2Nyb2xsLW1iZWAsYHNjcm9sbC1tdGAsYHNjcm9sbC1tcmAsYHNjcm9sbC1tYmAsYHNjcm9sbC1tbGBdLCJzY3JvbGwtbXgiOltgc2Nyb2xsLW1yYCxgc2Nyb2xsLW1sYF0sInNjcm9sbC1teSI6W2BzY3JvbGwtbXRgLGBzY3JvbGwtbWJgXSwic2Nyb2xsLXAiOltgc2Nyb2xsLXB4YCxgc2Nyb2xsLXB5YCxgc2Nyb2xsLXBzYCxgc2Nyb2xsLXBlYCxgc2Nyb2xsLXBic2AsYHNjcm9sbC1wYmVgLGBzY3JvbGwtcHRgLGBzY3JvbGwtcHJgLGBzY3JvbGwtcGJgLGBzY3JvbGwtcGxgXSwic2Nyb2xsLXB4IjpbYHNjcm9sbC1wcmAsYHNjcm9sbC1wbGBdLCJzY3JvbGwtcHkiOltgc2Nyb2xsLXB0YCxgc2Nyb2xsLXBiYF0sdG91Y2g6W2B0b3VjaC14YCxgdG91Y2gteWAsYHRvdWNoLXB6YF0sInRvdWNoLXgiOltgdG91Y2hgXSwidG91Y2gteSI6W2B0b3VjaGBdLCJ0b3VjaC1weiI6W2B0b3VjaGBdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6eyJmb250LXNpemUiOltgbGVhZGluZ2BdfSxwb3N0Zml4TG9va3VwQ2xhc3NHcm91cHM6W2Bjb250YWluZXItdHlwZWBdLG9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzOltgKmAsYCoqYCxgYWZ0ZXJgLGBiYWNrZHJvcGAsYGJlZm9yZWAsYGRldGFpbHMtY29udGVudGAsYGZpbGVgLGBmaXJzdC1sZXR0ZXJgLGBmaXJzdC1saW5lYCxgbWFya2VyYCxgcGxhY2Vob2xkZXJgLGBzZWxlY3Rpb25gXX19KTtmdW5jdGlvbiBaKC4uLmUpe3JldHVybiBZdih4XyhlKSl9dmFyIFh2PUYoe19fbmFtZTpgQWxlcnRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50Ont9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBhbGVydGAsY2xhc3M6TyhOKFopKE4oJHYpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpKSxyb2xlOmBhbGVydGB9LFtJKG4uJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxadj1GKHtfX25hbWU6YEFsZXJ0RGVzY3JpcHRpb25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTihaKShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20gdGV4dC1iYWxhbmNlIG1kOnRleHQtcHJldHR5IFsmX3A6bm90KDpsYXN0LWNoaWxkKV06bWItNCBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksUXY9Rih7X19uYW1lOmBBbGVydFRpdGxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGFsZXJ0LXRpdGxlYCxjbGFzczpPKE4oWikoYGZvbnQtbWVkaXVtIGdyb3VwLWhhcy1bPnN2Z10vYWxlcnQ6Y29sLXN0YXJ0LTIgY24tZm9udC1oZWFkaW5nIFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSwkdj13XyhgZ3JpZCBnYXAtMC41IHJvdW5kZWQtbGcgYm9yZGVyIHB4LTIuNSBweS0yIHRleHQtbGVmdCB0ZXh0LXNtIGhhcy1kYXRhLVtzbG90PWFsZXJ0LWFjdGlvbl06cmVsYXRpdmUgaGFzLWRhdGEtW3Nsb3Q9YWxlcnQtYWN0aW9uXTpwci0xOCBoYXMtWz5zdmddOmdyaWQtY29scy1bYXV0b18xZnJdIGhhcy1bPnN2Z106Z2FwLXgtMiAqOltzdmddOnJvdy1zcGFuLTIgKjpbc3ZnXTp0cmFuc2xhdGUteS0wLjUgKjpbc3ZnXTp0ZXh0LWN1cnJlbnQgKjpbc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9hbGVydCByZWxhdGl2ZSB3LWZ1bGxgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YHRleHQtZGVzdHJ1Y3RpdmUgYmctY2FyZCAqOmRhdGEtW3Nsb3Q9YWxlcnQtZGVzY3JpcHRpb25dOnRleHQtZGVzdHJ1Y3RpdmUvOTAgKjpbc3ZnXTp0ZXh0LWN1cnJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiBleShlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgP2AnJHtlfSdgOm5ldyBpeSgpLnNlcmlhbGl6ZShlKX12YXIgdHk9YCBfLSw7OiE/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/V3kodCk6e307cmV0dXJuIFcoKCk9Pih7Li4ubi52YWx1ZSwuLi5yfSkpfXZhciBKeT0wO2Z1bmN0aW9uIFl5KGUsdD1gcmVrYWApe2lmKGUpcmV0dXJuIGU7bGV0IG4scj1WeSh7dXNlSWQ6dm9pZCAwfSk7cmV0dXJuIG49ci51c2VJZD9yLnVzZUlkKCk6YHVzZUlkYGluIHh1P2FpPy4oKTpgJHsrK0p5fWAsdD9gJHt0fS0ke259YDpufWZ1bmN0aW9uIFh5KGUsdCl7bGV0IG49TShlKTtmdW5jdGlvbiByKGUpe3JldHVybiB0W24udmFsdWVdW2VdPz9uLnZhbHVlfXJldHVybntzdGF0ZTpuLGRpc3BhdGNoOmU9PntuLnZhbHVlPXIoZSl9fX1mdW5jdGlvbiBaeShlLHQpe2xldCBuPU0oe30pLHI9TShgbm9uZWApLGk9TShlKSxhPWUudmFsdWU/YG1vdW50ZWRgOmB1bm1vdW50ZWRgLG8scz10LnZhbHVlPy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz9EeSx7c3RhdGU6YyxkaXNwYXRjaDpsfT1YeShhLHttb3VudGVkOntVTk1PVU5UOmB1bm1vdW50ZWRgLEFOSU1BVElPTl9PVVQ6YHVubW91bnRTdXNwZW5kZWRgfSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDpgbW91bnRlZGAsQU5JTUFUSU9OX0VORDpgdW5tb3VudGVkYH0sdW5tb3VudGVkOntNT1VOVDpgbW91bnRlZGB9fSksdT1lPT57aWYoZnkpe2xldCBuPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KTt0LnZhbHVlPy5kaXNwYXRjaEV2ZW50KG4pfX07RXIoZSxhc3luYyhlLGkpPT57bGV0IGE9aSE9PWU7aWYoYXdhaXQgUW4oKSxhKXtsZXQgYT1yLnZhbHVlLG89UXkodC52YWx1ZSk7ZT8obChgTU9VTlRgKSx1KGBlbnRlcmApLG89PT1gbm9uZWAmJnUoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8obChgVU5NT1VOVGApLHUoYGxlYXZlYCksdShgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGwoYEFOSU1BVElPTl9PVVRgKSx1KGBsZWF2ZWApKToobChgVU5NT1VOVGApLHUoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBkPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPVF5KHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9Yy52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKHUoYGFmdGVyLSR7YX1gKSxsKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmbChgQU5JTUFUSU9OX0VORGApfSxmPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPVF5KHQudmFsdWUpKX0scD1Fcih0LChlLHQpPT57ZT8obi52YWx1ZT1nZXRDb21wdXRlZFN0eWxlKGUpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxkKSxlLmFkZEV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpOihsKGBBTklNQVRJT05fRU5EYCksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbnN0YXJ0YCxmKSx0Py5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpfSx7aW1tZWRpYXRlOiEwfSksbT1FcihjLCgpPT57bGV0IGU9UXkodC52YWx1ZSk7ci52YWx1ZT1jLnZhbHVlPT09YG1vdW50ZWRgP2U6YG5vbmVgfSk7cmV0dXJuIHRhKCgpPT57cCgpLG0oKSx0LnZhbHVlJiYodC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsZiksdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSksbyE9PXZvaWQgMCYmcz8uY2xlYXJUaW1lb3V0KG8pfSkse2lzUHJlc2VudDpXKCgpPT5bYG1vdW50ZWRgLGB1bm1vdW50U3VzcGVuZGVkYF0uaW5jbHVkZXMoYy52YWx1ZSkpfX1mdW5jdGlvbiBReShlKXtyZXR1cm4gZSYmZ2V0Q29tcHV0ZWRTdHlsZShlKS5hbmltYXRpb25OYW1lfHxgbm9uZWB9dmFyICR5PUYoe25hbWU6YFByZXNlbmNlYCxwcm9wczp7cHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59fSxzbG90czp7fSxzZXR1cChlLHtzbG90czp0LGV4cG9zZTpufSl7bGV0e3ByZXNlbnQ6cixmb3JjZU1vdW50Oml9PXluKGUpLGE9TSgpLHtpc1ByZXNlbnQ6b309WnkocixhKTtuKHtwcmVzZW50Om99KTtsZXQgcz10LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pO3M9THkoc3x8W10pO2xldCBjPUZzKCk7aWYocyYmcz8ubGVuZ3RoPjEpe2xldCBlPWM/LnBhcmVudD8udHlwZS5uYW1lP2A8JHtjLnBhcmVudC50eXBlLm5hbWV9IC8+YDpgY29tcG9uZW50YDt0aHJvdyBFcnJvcihbYERldGVjdGVkIGFuIGludmFsaWQgY2hpbGRyZW4gZm9yIFxgJHtlfVxgIGZvciAgXGBQcmVzZW5jZVxgIGNvbXBvbmVudC5gLGBgLCJOb3RlOiBQcmVzZW5jZSB3b3JrcyBzaW1pbGFybHkgdG8gYHYtaWZgIGRpcmVjdGx5LCBidXQgaXQgd2FpdHMgZm9yIGFuaW1hdGlvbi90cmFuc2l0aW9uIHRvIGZpbmlzaGVkIGJlZm9yZSB1bm1vdW50aW5nLiBTbyBpdCBleHBlY3Qgb25seSBvbmUgZGlyZWN0IGNoaWxkIG9mIHZhbGlkIFZOb2RlIHR5cGUuIixgWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6YCxbIlByb3ZpZGUgYSBzaW5nbGUgY2hpbGQgZWxlbWVudCBzbyB0aGF0IGBwcmVzZW5jZWAgZGlyZWN0aXZlIGF0dGFjaCBjb3JyZWN0bHkuIixgRW5zdXJlIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiBhY3R1YWwgZWxlbWVudCBpbnN0ZWFkIG9mIGEgcmF3IHRleHQgbm9kZSBvciBjb21tZW50IG5vZGUuYF0ubWFwKGU9PmAgIC0gJHtlfWApLmpvaW4oYApgKV0uam9pbihgCmApKX1yZXR1cm4oKT0+aS52YWx1ZXx8ci52YWx1ZXx8by52YWx1ZT90Yyh0LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pWzBdLHtyZWY6ZT0+e2xldCB0PU95KGUpO3JldHVybiB0Py5oYXNBdHRyaWJ1dGU9PT12b2lkIDB8fCh0Py5oYXNBdHRyaWJ1dGUoYGRhdGEtcmVrYS1wb3BwZXItY29udGVudC13cmFwcGVyYCk/YS52YWx1ZT10LmZpcnN0RWxlbWVudENoaWxkOmEudmFsdWU9dCksdH19KTpudWxsfX0pLGViPUYoe25hbWU6YFByaW1pdGl2ZVNsb3RgLGluaGVyaXRBdHRyczohMSxzZXR1cChlLHthdHRyczp0LHNsb3RzOm59KXtyZXR1cm4oKT0+e2lmKCFuLmRlZmF1bHQpcmV0dXJuIG51bGw7bGV0IGU9THkobi5kZWZhdWx0KCkpLHI9ZS5maW5kSW5kZXgoZT0+ZS50eXBlIT09Y3MpO2lmKHI9PT0tMSlyZXR1cm4gZTtsZXQgaT1lW3JdO2RlbGV0ZSBpLnByb3BzPy5yZWY7bGV0IGE9aS5wcm9wcz9rcyh0LGkucHJvcHMpOnQsbz1Dcyh7Li4uaSxwcm9wczp7fX0sYSk7cmV0dXJuIGUubGVuZ3RoPT09MT9vOihlW3JdPW8sZSl9fX0pLHRiPVtgYXJlYWAsYGltZ2AsYGlucHV0YF0sbmI9Rih7bmFtZTpgUHJpbWl0aXZlYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhczp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpgZGl2YH19LHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe2xldCByPWUuYXNDaGlsZD9gdGVtcGxhdGVgOmUuYXM7cmV0dXJuIHR5cGVvZiByPT1gc3RyaW5nYCYmdGIuaW5jbHVkZXMocik/KCk9PnRjKHIsdCk6cj09PWB0ZW1wbGF0ZWA/KCk9PnRjKGViLHQse2RlZmF1bHQ6bi5kZWZhdWx0fSk6KCk9PnRjKGUuYXMsdCx7ZGVmYXVsdDpuLmRlZmF1bHR9KX19KTtmdW5jdGlvbiByYigpe2xldCBlPU0oKTtyZXR1cm57cHJpbWl0aXZlRWxlbWVudDplLGN1cnJlbnRFbGVtZW50OlcoKCk9PltgI3RleHRgLGAjY29tbWVudGBdLmluY2x1ZGVzKGUudmFsdWU/LiRlbC5ub2RlTmFtZSk/ZS52YWx1ZT8uJGVsLm5leHRFbGVtZW50U2libGluZzpPeShlKSl9fXZhcltpYixhYl09b3koYENvbGxhcHNpYmxlUm9vdGApLG9iPUYoe19fbmFtZTpgQ29sbGFwc2libGVSb290YCxwcm9wczp7ZGVmYXVsdE9wZW46e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxvcGVuOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTpvcGVuYF0sc2V0dXAoZSx7ZXhwb3NlOnQsZW1pdDpufSl7bGV0IHI9ZSxpPUl5KHIsYG9wZW5gLG4se2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRPcGVuLHBhc3NpdmU6ci5vcGVuPT09dm9pZCAwfSkse2Rpc2FibGVkOmEsdW5tb3VudE9uSGlkZTpvfT15bihyKTtyZXR1cm4gYWIoe2NvbnRlbnRJZDpgYCxkaXNhYmxlZDphLG9wZW46aSx1bm1vdW50T25IaWRlOm8sb25PcGVuVG9nZ2xlOigpPT57YS52YWx1ZXx8KGkudmFsdWU9IWkudmFsdWUpfX0pLHQoe29wZW46aX0pLEd5KCksKGUsdCk9PihSKCksQihOKG5iKSx7YXM6ZS5hcywiYXMtY2hpbGQiOnIuYXNDaGlsZCwiZGF0YS1zdGF0ZSI6TihpKT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOk4oYSk/YGA6dm9pZCAwfSx7ZGVmYXVsdDpQKCgpPT5bSShlLiRzbG90cyxgZGVmYXVsdGAse29wZW46TihpKX0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYF0pKX19KSxzYj1GKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBDb2xsYXBzaWJsZUNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgY29udGVudEZvdW5kYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1pYigpO2kuY29udGVudElkfHw9WXkodm9pZCAwLGByZWthLWNvbGxhcHNpYmxlLWNvbnRlbnRgKTtsZXQgYT1NKCkse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT1HeSgpLGM9TSgwKSxsPU0oMCksdT1XKCgpPT5pLm9wZW4udmFsdWUpLGQ9TSh1LnZhbHVlKSxmPU0oKTtFcigoKT0+W3UudmFsdWUsYS52YWx1ZT8ucHJlc2VudF0sYXN5bmMoKT0+e2F3YWl0IFFuKCk7bGV0IGU9cy52YWx1ZTtpZighZSlyZXR1cm47Zi52YWx1ZT1mLnZhbHVlfHx7dHJhbnNpdGlvbkR1cmF0aW9uOmUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLGFuaW1hdGlvbk5hbWU6ZS5zdHlsZS5hbmltYXRpb25OYW1lfSxlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gMHNgLGUuc3R5bGUuYW5pbWF0aW9uTmFtZT1gbm9uZWA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsLnZhbHVlPXQuaGVpZ2h0LGMudmFsdWU9dC53aWR0aCxkLnZhbHVlfHwoZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249Zi52YWx1ZS50cmFuc2l0aW9uRHVyYXRpb24sZS5zdHlsZS5hbmltYXRpb25OYW1lPWYudmFsdWUuYW5pbWF0aW9uTmFtZSl9LHtpbW1lZGlhdGU6ITB9KTtsZXQgcD1XKCgpPT5kLnZhbHVlJiZpLm9wZW4udmFsdWUpO3JldHVybiBaaSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2QudmFsdWU9ITF9KX0pLGt5KHMsYGJlZm9yZW1hdGNoYCxlPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57aS5vbk9wZW5Ub2dnbGUoKSxyKGBjb250ZW50Rm91bmRgKX0pfSksKGUsdCk9PihSKCksQihOKCR5KSx7cmVmX2tleTpgcHJlc2VudFJlZmAscmVmOmEscHJlc2VudDplLmZvcmNlTW91bnR8fE4oaSkub3Blbi52YWx1ZSwiZm9yY2UtbW91bnQiOiEwfSx7ZGVmYXVsdDpQKCh7cHJlc2VudDp0fSk9PltIKE4obmIpLGtzKGUuJGF0dHJzLHtpZDpOKGkpLmNvbnRlbnRJZCxyZWY6TihvKSwiYXMtY2hpbGQiOm4uYXNDaGlsZCxhczplLmFzLGhpZGRlbjp0P3ZvaWQgMDpOKGkpLnVubW91bnRPbkhpZGUudmFsdWU/YGA6YHVudGlsLWZvdW5kYCwiZGF0YS1zdGF0ZSI6cC52YWx1ZT92b2lkIDA6TihpKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6TihpKS5kaXNhYmxlZD8udmFsdWU/YGA6dm9pZCAwLHN0eWxlOnsiLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0IjpgJHtsLnZhbHVlfXB4YCwiLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgiOmAke2MudmFsdWV9cHhgfX0pLHtkZWZhdWx0OlAoKCk9PlshTihpKS51bm1vdW50T25IaWRlLnZhbHVlfHx0P0koZS4kc2xvdHMsYGRlZmF1bHRgLHtrZXk6MH0pOlRzKGB2LWlmYCwhMCldKSxfOjJ9LDEwNDAsW2BpZGAsYGFzLWNoaWxkYCxgYXNgLGBoaWRkZW5gLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYHN0eWxlYF0pXSksXzozfSw4LFtgcHJlc2VudGBdKSl9fSksY2I9Rih7X19uYW1lOmBDb2xsYXBzaWJsZVRyaWdnZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWU7R3koKTtsZXQgbj1pYigpO3JldHVybihlLHIpPT4oUigpLEIoTihuYikse3R5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJhcmlhLWNvbnRyb2xzIjpOKG4pLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6TihuKS5vcGVuLnZhbHVlLCJkYXRhLXN0YXRlIjpOKG4pLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpOKG4pLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsZGlzYWJsZWQ6TihuKS5kaXNhYmxlZD8udmFsdWUsb25DbGljazpOKG4pLm9uT3BlblRvZ2dsZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHR5cGVgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1jb250cm9sc2AsYGFyaWEtZXhwYW5kZWRgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRpc2FibGVkYCxgb25DbGlja2BdKSl9fSk7ZnVuY3Rpb24gbGIoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KXtsZXQgcj1ufHx0O3JldHVybiBuIT09dm9pZCAwfHx0IT09dm9pZCAwP0FycmF5LmlzQXJyYXkocik/YG11bHRpcGxlYDpgc2luZ2xlYDplPz9gc2luZ2xlYH1mdW5jdGlvbiB1Yih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pe3JldHVybiBlfHxsYih7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pfWZ1bmN0aW9uIGRiKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnR9KXtyZXR1cm4gdD09PXZvaWQgMD9lPT09YHNpbmdsZWA/dm9pZCAwOltdOnR9ZnVuY3Rpb24gZmIoZSx0KXtsZXQgbj1XKCgpPT51YihlKSkscj1JeShlLGBtb2RlbFZhbHVlYCx0LHtkZWZhdWx0VmFsdWU6ZGIoZSkscGFzc2l2ZTplLm1vZGVsVmFsdWU9PT12b2lkIDAsZGVlcDohMH0pO2Z1bmN0aW9uIGkoZSl7aWYobi52YWx1ZT09PWBzaW5nbGVgKXIudmFsdWU9YXkoZSxyLnZhbHVlKT92b2lkIDA6ZTtlbHNle2xldCB0PUFycmF5LmlzQXJyYXkoci52YWx1ZSk/Wy4uLnIudmFsdWV8fFtdXTpbci52YWx1ZV0uZmlsdGVyKEJvb2xlYW4pO2lmKGx5KHQsZSkpe2xldCBuPXQuZmluZEluZGV4KHQ9PmF5KHQsZSkpO3Quc3BsaWNlKG4sMSl9ZWxzZSB0LnB1c2goZSk7ci52YWx1ZT10fX1yZXR1cm57bW9kZWxWYWx1ZTpyLGNoYW5nZU1vZGVsVmFsdWU6aSxpc1NpbmdsZTpXKCgpPT5uLnZhbHVlPT09YHNpbmdsZWApfX12YXJbcGIsbWJdPW95KGBBY2NvcmRpb25Sb290YCksaGI9Rih7X19uYW1lOmBBY2NvcmRpb25Sb290YCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG9yaWVudGF0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmB2ZXJ0aWNhbGB9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHR5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LHtkaXI6aSxkaXNhYmxlZDphLHVubW91bnRPbkhpZGU6b309eW4obikscz1VeShpKSx7bW9kZWxWYWx1ZTpjLGNoYW5nZU1vZGVsVmFsdWU6bCxpc1NpbmdsZTp1fT1mYihuLHIpLHtmb3J3YXJkUmVmOmQsY3VycmVudEVsZW1lbnQ6Zn09R3koKTtyZXR1cm4gbWIoe2Rpc2FibGVkOmEsZGlyZWN0aW9uOnMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixwYXJlbnRFbGVtZW50OmYsaXNTaW5nbGU6dSxjb2xsYXBzaWJsZTpuLmNvbGxhcHNpYmxlLG1vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmwsdW5tb3VudE9uSGlkZTpvfSksKGUsdCk9PihSKCksQihOKG5iKSx7cmVmOk4oZCksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk4oYyl9KV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgXSkpfX0pLGdiPWZ1bmN0aW9uKGUpe3JldHVybiBlLk9wZW49YG9wZW5gLGUuQ2xvc2VkPWBjbG9zZWRgLGV9KGdifHx7fSksW19iLHZiXT1veShgQWNjb3JkaW9uSXRlbWApLHliPUYoe19fbmFtZTpgQWNjb3JkaW9uSXRlbWAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlLHtleHBvc2U6dH0pe2xldCBuPWUscj1wYigpLGk9VygoKT0+ci5pc1NpbmdsZS52YWx1ZT9uLnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlOkFycmF5LmlzQXJyYXkoci5tb2RlbFZhbHVlLnZhbHVlKSYmci5tb2RlbFZhbHVlLnZhbHVlLmluY2x1ZGVzKG4udmFsdWUpKSxhPVcoKCk9PnIuZGlzYWJsZWQudmFsdWV8fG4uZGlzYWJsZWQpLG89VygoKT0+YS52YWx1ZT9gYDp2b2lkIDApLHM9VygoKT0+aS52YWx1ZT9nYi5PcGVuOmdiLkNsb3NlZCk7dCh7b3BlbjppLGRhdGFEaXNhYmxlZDpvfSk7bGV0e2N1cnJlbnRSZWY6YyxjdXJyZW50RWxlbWVudDpsfT1HeSgpO3ZiKHtvcGVuOmksZGF0YVN0YXRlOnMsZGlzYWJsZWQ6YSxkYXRhRGlzYWJsZWQ6byx0cmlnZ2VySWQ6YGAsY3VycmVudFJlZjpjLGN1cnJlbnRFbGVtZW50OmwsdmFsdWU6VygoKT0+bi52YWx1ZSl9KTtmdW5jdGlvbiB1KGUpe2xldCB0PWUudGFyZ2V0O2lmKEFycmF5LmZyb20oci5wYXJlbnRFbGVtZW50LnZhbHVlPy5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbV1gKT8/W10pLmZpbmRJbmRleChlPT5lPT09dCk9PT0tMSlyZXR1cm4gbnVsbDt6eShlLHQsci5wYXJlbnRFbGVtZW50LnZhbHVlLHthcnJvd0tleU9wdGlvbnM6ci5vcmllbnRhdGlvbixkaXI6ci5kaXJlY3Rpb24udmFsdWUsZm9jdXM6ITB9KX1yZXR1cm4oZSx0KT0+KFIoKSxCKE4ob2IpLHsiZGF0YS1vcmllbnRhdGlvbiI6TihyKS5vcmllbnRhdGlvbiwiZGF0YS1kaXNhYmxlZCI6by52YWx1ZSwiZGF0YS1zdGF0ZSI6cy52YWx1ZSxkaXNhYmxlZDphLnZhbHVlLG9wZW46aS52YWx1ZSxhczpuLmFzLCJhcy1jaGlsZCI6bi5hc0NoaWxkLCJ1bm1vdW50LW9uLWhpZGUiOm4udW5tb3VudE9uSGlkZT8/TihyKS51bm1vdW50T25IaWRlLnZhbHVlLG9uS2V5ZG93bjpzdSh1LFtgdXBgLGBkb3duYCxgbGVmdGAsYHJpZ2h0YCxgaG9tZWAsYGVuZGBdKX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHtvcGVuOmkudmFsdWV9KV0pLF86M30sOCxbYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYCxgb3BlbmAsYGFzYCxgYXMtY2hpbGRgLGB1bm1vdW50LW9uLWhpZGVgXSkpfX0pLGJiPUYoe19fbmFtZTpgQWNjb3JkaW9uQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXBiKCkscj1fYigpO3JldHVybiBHeSgpLChlLGkpPT4oUigpLEIoTihzYikse3JvbGU6YHJlZ2lvbmAsImFzLWNoaWxkIjp0LmFzQ2hpbGQsYXM6ZS5hcywiZm9yY2UtbW91bnQiOnQuZm9yY2VNb3VudCwiYXJpYS1sYWJlbGxlZGJ5IjpOKHIpLnRyaWdnZXJJZCwiZGF0YS1zdGF0ZSI6TihyKS5kYXRhU3RhdGUudmFsdWUsImRhdGEtZGlzYWJsZWQiOk4ocikuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpOKG4pLm9yaWVudGF0aW9uLHN0eWxlOnsiLS1yZWthLWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjpgdmFyKC0tcmVrYS1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoKWAsIi0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOmB2YXIoLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0KWB9LG9uQ29udGVudEZvdW5kOmlbMF18fD1lPT5OKG4pLmNoYW5nZU1vZGVsVmFsdWUoTihyKS52YWx1ZS52YWx1ZSl9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgZm9yY2UtbW91bnRgLGBhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSkpfX0pLHhiPUYoe19fbmFtZTpgQWNjb3JkaW9uSGVhZGVyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGgzYH19LHNldHVwKGUpe2xldCB0PWUsbj1wYigpLHI9X2IoKTtyZXR1cm4gR3koKSwoZSxpKT0+KFIoKSxCKE4obmIpLHthczp0LmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJkYXRhLW9yaWVudGF0aW9uIjpOKG4pLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjpOKHIpLmRhdGFTdGF0ZS52YWx1ZSwiZGF0YS1kaXNhYmxlZCI6TihyKS5kYXRhRGlzYWJsZWQudmFsdWV9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYF0pKX19KSxTYj1GKHtfX25hbWU6YEFjY29yZGlvblRyaWdnZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49cGIoKSxyPV9iKCk7ci50cmlnZ2VySWR8fD1ZeSh2b2lkIDAsYHJla2EtYWNjb3JkaW9uLXRyaWdnZXJgKTtmdW5jdGlvbiBpKCl7bGV0IGU9bi5pc1NpbmdsZS52YWx1ZSYmci5vcGVuLnZhbHVlJiYhbi5jb2xsYXBzaWJsZTtyLmRpc2FibGVkLnZhbHVlfHxlfHxuLmNoYW5nZU1vZGVsVmFsdWUoci52YWx1ZS52YWx1ZSl9cmV0dXJuKGUsYSk9PihSKCksQihOKGNiKSx7aWQ6TihyKS50cmlnZ2VySWQscmVmOk4ocikuY3VycmVudFJlZiwiZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbSI6YGAsYXM6dC5hcywiYXMtY2hpbGQiOnQuYXNDaGlsZCwiYXJpYS1kaXNhYmxlZCI6TihyKS5kaXNhYmxlZC52YWx1ZXx8dm9pZCAwLCJhcmlhLWV4cGFuZGVkIjpOKHIpLm9wZW4udmFsdWV8fCExLCJkYXRhLWRpc2FibGVkIjpOKHIpLmRhdGFEaXNhYmxlZC52YWx1ZSwiZGF0YS1vcmllbnRhdGlvbiI6TihuKS5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6TihyKS5kYXRhU3RhdGUudmFsdWUsZGlzYWJsZWQ6TihyKS5kaXNhYmxlZC52YWx1ZSxvbkNsaWNrOml9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BpZGAsYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWRpc2FibGVkYCxgYXJpYS1leHBhbmRlZGAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYF0pKX19KSxDYj1gZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbWA7ZnVuY3Rpb24gd2IoZT17fSl7bGV0e2tleTp0PWBgLGlzUHJvdmlkZXI6bj0hMX09ZSxyPWAke3R9Q29sbGVjdGlvblByb3ZpZGVyYCxpO24/KGk9e2NvbGxlY3Rpb25SZWY6TSgpLGl0ZW1NYXA6TShuZXcgTWFwKX0sdnIocixpKSk6aT15cihyKTtsZXQgYT0oZT0hMSk9PntsZXQgdD1pLmNvbGxlY3Rpb25SZWYudmFsdWU7aWYoIXQpcmV0dXJuW107bGV0IG49QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0NifV1gKSkscj1uZXcgTWFwKG4ubWFwKChlLHQpPT5bZSx0XSkpLGE9QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpLnNvcnQoKGUsdCk9PihyLmdldChlLnJlZik/Py0xKS0oci5nZXQodC5yZWYpPz8tMSkpO3JldHVybiBlP2E6YS5maWx0ZXIoZT0+ZS5yZWYuZGF0YXNldC5kaXNhYmxlZCE9PWBgKX0sbz1GKHtuYW1lOmBDb2xsZWN0aW9uU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse3Nsb3RzOnQsYXR0cnM6bn0pe2xldHtwcmltaXRpdmVFbGVtZW50OnIsY3VycmVudEVsZW1lbnQ6YX09cmIoKTtyZXR1cm4gRXIoYSwoKT0+e2kuY29sbGVjdGlvblJlZi52YWx1ZT1hLnZhbHVlfSksKCk9PnRjKGViLHtyZWY6ciwuLi5ufSx0KX19KSxzPUYoe25hbWU6YENvbGxlY3Rpb25JdGVtYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e3ZhbHVlOnt2YWxpZGF0b3I6KCk9PiEwfX0sc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1yYigpO3JldHVybiBDcih0PT57aWYoYS52YWx1ZSl7bGV0IG49c24oYS52YWx1ZSk7aS5pdGVtTWFwLnZhbHVlLnNldChuLHtyZWY6YS52YWx1ZSx2YWx1ZTplLnZhbHVlfSksdCgoKT0+aS5pdGVtTWFwLnZhbHVlLmRlbGV0ZShuKSl9fSksKCk9PnRjKGViLHsuLi5uLFtDYl06YGAscmVmOnJ9LHQpfX0pO3JldHVybntnZXRJdGVtczphLHJlYWN0aXZlSXRlbXM6VygoKT0+QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpKSxpdGVtTWFwU2l6ZTpXKCgpPT5pLml0ZW1NYXAudmFsdWUuc2l6ZSksQ29sbGVjdGlvblNsb3Q6byxDb2xsZWN0aW9uSXRlbTpzfX12YXIgVGI9YHJvdmluZ0ZvY3VzR3JvdXAub25FbnRyeUZvY3VzYCxFYj17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxEYj17QXJyb3dMZWZ0OmBwcmV2YCxBcnJvd1VwOmBwcmV2YCxBcnJvd1JpZ2h0OmBuZXh0YCxBcnJvd0Rvd246YG5leHRgLFBhZ2VVcDpgZmlyc3RgLEhvbWU6YGZpcnN0YCxQYWdlRG93bjpgbGFzdGAsRW5kOmBsYXN0YH07ZnVuY3Rpb24gT2IoZSx0KXtyZXR1cm4gdD09PWBydGxgP2U9PT1gQXJyb3dMZWZ0YD9gQXJyb3dSaWdodGA6ZT09PWBBcnJvd1JpZ2h0YD9gQXJyb3dMZWZ0YDplOmV9ZnVuY3Rpb24ga2IoZSx0LG4pe2xldCByPU9iKGUua2V5LG4pO2lmKCEodD09PWB2ZXJ0aWNhbGAmJltgQXJyb3dMZWZ0YCxgQXJyb3dSaWdodGBdLmluY2x1ZGVzKHIpKSYmISh0PT09YGhvcml6b250YWxgJiZbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhyKSkpcmV0dXJuIERiW3JdfWZ1bmN0aW9uIEFiKGUsdD0hMSl7bGV0IG49c3koKTtmb3IobGV0IHIgb2YgZSlpZihyPT09bnx8KHIuZm9jdXMoe3ByZXZlbnRTY3JvbGw6dH0pLHN5KCkhPT1uKSlyZXR1cm59ZnVuY3Rpb24gamIoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbTWIsTmJdPW95KGBSb3ZpbmdGb2N1c0dyb3VwYCksUGI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0dyb3VwYCxwcm9wczp7b3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sY3VycmVudFRhYlN0b3BJZDp7dHlwZTpbU3RyaW5nLG51bGxdLHJlcXVpcmVkOiExfSxkZWZhdWx0Q3VycmVudFRhYlN0b3BJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYGVudHJ5Rm9jdXNgLGB1cGRhdGU6Y3VycmVudFRhYlN0b3BJZGBdLHNldHVwKGUse2V4cG9zZTp0LGVtaXQ6bn0pe2xldCByPWUsaT1uLHtsb29wOmEsb3JpZW50YXRpb246byxkaXI6c309eW4ociksYz1VeShzKSxsPUl5KHIsYGN1cnJlbnRUYWJTdG9wSWRgLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRDdXJyZW50VGFiU3RvcElkLHBhc3NpdmU6ci5jdXJyZW50VGFiU3RvcElkPT09dm9pZCAwfSksdT1NKCExKSxkPU0oITEpLGY9TSgwKSx7Z2V0SXRlbXM6cCxDb2xsZWN0aW9uU2xvdDptfT13Yih7aXNQcm92aWRlcjohMH0pO2Z1bmN0aW9uIGgoZSl7bGV0IHQ9IWQudmFsdWU7aWYoZS5jdXJyZW50VGFyZ2V0JiZlLnRhcmdldD09PWUuY3VycmVudFRhcmdldCYmdCYmIXUudmFsdWUpe2xldCB0PW5ldyBDdXN0b21FdmVudChUYixFYik7aWYoZS5jdXJyZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQodCksaShgZW50cnlGb2N1c2AsdCksIXQuZGVmYXVsdFByZXZlbnRlZCl7bGV0IGU9cCgpLm1hcChlPT5lLnJlZikuZmlsdGVyKGU9PmUuZGF0YXNldC5kaXNhYmxlZCE9PWBgKTtBYihbZS5maW5kKGU9PmUuZ2V0QXR0cmlidXRlKGBkYXRhLWFjdGl2ZWApPT09YGApLGUuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1oaWdobGlnaHRlZGApPT09YGApLGUuZmluZChlPT5lLmlkPT09bC52YWx1ZSksLi4uZV0uZmlsdGVyKEJvb2xlYW4pLHIucHJldmVudFNjcm9sbE9uRW50cnlGb2N1cyl9fWQudmFsdWU9ITF9ZnVuY3Rpb24gZygpe3NldFRpbWVvdXQoKCk9PntkLnZhbHVlPSExfSwxKX1yZXR1cm4gdCh7Z2V0SXRlbXM6cH0pLE5iKHtsb29wOmEsZGlyOmMsb3JpZW50YXRpb246byxjdXJyZW50VGFiU3RvcElkOmwsb25JdGVtRm9jdXM6ZT0+e2wudmFsdWU9ZX0sb25JdGVtU2hpZnRUYWI6KCk9Pnt1LnZhbHVlPSEwfSxvbkZvY3VzYWJsZUl0ZW1BZGQ6KCk9PntmLnZhbHVlKyt9LG9uRm9jdXNhYmxlSXRlbVJlbW92ZTooKT0+e2YudmFsdWUtLX19KSwoZSx0KT0+KFIoKSxCKE4obSksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7dGFiaW5kZXg6dS52YWx1ZXx8Zi52YWx1ZT09PTA/LTE6MCwiZGF0YS1vcmllbnRhdGlvbiI6TihvKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGRpcjpOKGMpLHN0eWxlOntvdXRsaW5lOmBub25lYH0sb25Nb3VzZWRvd246dFswXXx8PWU9PmQudmFsdWU9ITAsb25Nb3VzZXVwOmcsb25Gb2N1czpoLG9uQmx1cjp0WzFdfHw9ZT0+dS52YWx1ZT0hMX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHRhYmluZGV4YCxgZGF0YS1vcmllbnRhdGlvbmAsYGFzYCxgYXMtY2hpbGRgLGBkaXJgXSldKSxfOjN9KSl9fSksRmI9Rih7X19uYW1lOmBSb3ZpbmdGb2N1c0l0ZW1gLHByb3BzOnt0YWJTdG9wSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxmb2N1c2FibGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxsb3dTaGlmdEtleTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49TWIoKSxyPVl5KCksaT1XKCgpPT50LnRhYlN0b3BJZHx8ciksYT1XKCgpPT5uLmN1cnJlbnRUYWJTdG9wSWQudmFsdWU9PT1pLnZhbHVlKSx7Z2V0SXRlbXM6byxDb2xsZWN0aW9uSXRlbTpzfT13YigpO1ppKCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtQWRkKCl9KSx0YSgoKT0+e3QuZm9jdXNhYmxlJiZuLm9uRm9jdXNhYmxlSXRlbVJlbW92ZSgpfSksRXIoKCk9PnQuZm9jdXNhYmxlLChlLHQpPT57ZSE9PXQmJihlP24ub25Gb2N1c2FibGVJdGVtQWRkKCk6bi5vbkZvY3VzYWJsZUl0ZW1SZW1vdmUoKSl9KTtmdW5jdGlvbiBjKGUpe2lmKGUua2V5PT09YFRhYmAmJmUuc2hpZnRLZXkpe24ub25JdGVtU2hpZnRUYWIoKTtyZXR1cm59aWYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQpcmV0dXJuO2xldCByPWtiKGUsbi5vcmllbnRhdGlvbi52YWx1ZSxuLmRpci52YWx1ZSk7aWYociE9PXZvaWQgMCl7aWYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5fHwhdC5hbGxvd1NoaWZ0S2V5JiZlLnNoaWZ0S2V5KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGk9Wy4uLm8oKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCldO2lmKHI9PT1gbGFzdGApaS5yZXZlcnNlKCk7ZWxzZSBpZihyPT09YHByZXZgfHxyPT09YG5leHRgKXtyPT09YHByZXZgJiZpLnJldmVyc2UoKTtsZXQgdD1pLmluZGV4T2YoZS5jdXJyZW50VGFyZ2V0KTtpPW4ubG9vcC52YWx1ZT9qYihpLHQrMSk6aS5zbGljZSh0KzEpfVFuKCgpPT5BYihpKSl9fXJldHVybihlLHQpPT4oUigpLEIoTihzKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4obmIpLHt0YWJpbmRleDphLnZhbHVlPzA6LTEsImRhdGEtb3JpZW50YXRpb24iOk4obikub3JpZW50YXRpb24udmFsdWUsImRhdGEtYWN0aXZlIjplLmFjdGl2ZT9gYDp2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmUuZm9jdXNhYmxlP3ZvaWQgMDpgYCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLG9uTW91c2Vkb3duOnRbMF18fD10PT57ZS5mb2N1c2FibGU/TihuKS5vbkl0ZW1Gb2N1cyhpLnZhbHVlKTp0LnByZXZlbnREZWZhdWx0KCl9LG9uRm9jdXM6dFsxXXx8PWU9Pk4obikub25JdGVtRm9jdXMoaS52YWx1ZSksb25LZXlkb3duOmN9LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0YWJpbmRleGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWFjdGl2ZWAsYGRhdGEtZGlzYWJsZWRgLGBhc2AsYGFzLWNoaWxkYF0pXSksXzozfSkpfX0pLFtJYixMYl09b3koYFRhYnNSb290YCksUmI9Rih7X19uYW1lOmBUYWJzUm9vdGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgaG9yaXpvbnRhbGB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFjdGl2YXRpb25Nb2RlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBhdXRvbWF0aWNgfSxtb2RlbFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQse29yaWVudGF0aW9uOmksdW5tb3VudE9uSGlkZTphLGRpcjpvfT15bihuKSxzPVV5KG8pO0d5KCk7bGV0IGM9SXkobixgbW9kZWxWYWx1ZWAscix7ZGVmYXVsdFZhbHVlOm4uZGVmYXVsdFZhbHVlLHBhc3NpdmU6bi5tb2RlbFZhbHVlPT09dm9pZCAwfSksbD1NKCksdT11bihuZXcgU2V0KTtyZXR1cm4gTGIoe21vZGVsVmFsdWU6YyxjaGFuZ2VNb2RlbFZhbHVlOmU9PntjLnZhbHVlPWV9LG9yaWVudGF0aW9uOmksZGlyOnMsdW5tb3VudE9uSGlkZTphLGFjdGl2YXRpb25Nb2RlOm4uYWN0aXZhdGlvbk1vZGUsYmFzZUlkOll5KHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6bCxjb250ZW50SWRzOnUscmVnaXN0ZXJDb250ZW50OmU9Pnt1LnZhbHVlPW5ldyBTZXQoWy4uLnUudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldCh1LnZhbHVlKTt0LmRlbGV0ZShlKSx1LnZhbHVlPXR9fSksKGUsdCk9PihSKCksQihOKG5iKSx7ZGlyOk4ocyksImRhdGEtb3JpZW50YXRpb24iOk4oaSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOk4oYyl9KV0pLF86M30sOCxbYGRpcmAsYGRhdGEtb3JpZW50YXRpb25gLGBhcy1jaGlsZGAsYGFzYF0pKX19KTtmdW5jdGlvbiB6YihlLHQpe3JldHVybmAke2V9LXRyaWdnZXItJHt0fWB9ZnVuY3Rpb24gQmIoZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBWYj1GKHtfX25hbWU6YFRhYnNDb250ZW50YCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUse2ZvcndhcmRSZWY6bn09R3koKSxyPUliKCksaT1XKCgpPT56YihyLmJhc2VJZCx0LnZhbHVlKSksYT1XKCgpPT5CYihyLmJhc2VJZCx0LnZhbHVlKSksbz1XKCgpPT50LnZhbHVlPT09ci5tb2RlbFZhbHVlLnZhbHVlKSxzPU0oby52YWx1ZSk7cmV0dXJuIFppKCgpPT57ci5yZWdpc3RlckNvbnRlbnQodC52YWx1ZSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cy52YWx1ZT0hMX0pfSksZWEoKCk9PntyLnVucmVnaXN0ZXJDb250ZW50KHQudmFsdWUpfSksKGUsdCk9PihSKCksQihOKCR5KSx7cHJlc2VudDplLmZvcmNlTW91bnR8fG8udmFsdWUsImZvcmNlLW1vdW50IjpgYH0se2RlZmF1bHQ6UCgoe3ByZXNlbnQ6dH0pPT5bSChOKG5iKSx7aWQ6YS52YWx1ZSxyZWY6TihuKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLHJvbGU6YHRhYnBhbmVsYCwiZGF0YS1zdGF0ZSI6by52YWx1ZT9gYWN0aXZlYDpgaW5hY3RpdmVgLCJkYXRhLW9yaWVudGF0aW9uIjpOKHIpLm9yaWVudGF0aW9uLnZhbHVlLCJhcmlhLWxhYmVsbGVkYnkiOmkudmFsdWUsaGlkZGVuOiF0LHRhYmluZGV4OmAwYCxzdHlsZTpnZSh7YW5pbWF0aW9uRHVyYXRpb246cy52YWx1ZT9gMHNgOnZvaWQgMH0pfSx7ZGVmYXVsdDpQKCgpPT5bIU4ocikudW5tb3VudE9uSGlkZS52YWx1ZXx8dD9JKGUuJHNsb3RzLGBkZWZhdWx0YCx7a2V5OjB9KTpUcyhgdi1pZmAsITApXSksXzoyfSwxMDMyLFtgaWRgLGBhcy1jaGlsZGAsYGFzYCxgZGF0YS1zdGF0ZWAsYGRhdGEtb3JpZW50YXRpb25gLGBhcmlhLWxhYmVsbGVkYnlgLGBoaWRkZW5gLGBzdHlsZWBdKV0pLF86M30sOCxbYHByZXNlbnRgXSkpfX0pLEhiPUYoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0e2xvb3A6dH09eW4oZSkse2ZvcndhcmRSZWY6bixjdXJyZW50RWxlbWVudDpyfT1HeSgpLGk9SWIoKTtyZXR1cm4gaS50YWJzTGlzdD1yLChlLHIpPT4oUigpLEIoTihQYikseyJhcy1jaGlsZCI6YGAsb3JpZW50YXRpb246TihpKS5vcmllbnRhdGlvbi52YWx1ZSxkaXI6TihpKS5kaXIudmFsdWUsbG9vcDpOKHQpfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7cmVmOk4obikscm9sZTpgdGFibGlzdGAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcywiYXJpYS1vcmllbnRhdGlvbiI6TihpKS5vcmllbnRhdGlvbi52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgLGBhcmlhLW9yaWVudGF0aW9uYF0pXSksXzozfSw4LFtgb3JpZW50YXRpb25gLGBkaXJgLGBsb29wYF0pKX19KSxVYj1GKHtfX25hbWU6YFRhYnNUcmlnZ2VyYCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZSx7Zm9yd2FyZFJlZjpufT1HeSgpLHI9SWIoKSxpPVcoKCk9PnpiKHIuYmFzZUlkLHQudmFsdWUpKSxhPVcoKCk9PnIuY29udGVudElkcy52YWx1ZS5oYXModC52YWx1ZSk/QmIoci5iYXNlSWQsdC52YWx1ZSk6dm9pZCAwKSxvPVcoKCk9PnQudmFsdWU9PT1yLm1vZGVsVmFsdWUudmFsdWUpO3JldHVybihlLHQpPT4oUigpLEIoTihGYikseyJhcy1jaGlsZCI6YGAsZm9jdXNhYmxlOiFlLmRpc2FibGVkLGFjdGl2ZTpvLnZhbHVlfSx7ZGVmYXVsdDpQKCgpPT5bSChOKG5iKSx7aWQ6aS52YWx1ZSxyZWY6TihuKSxyb2xlOmB0YWJgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLXNlbGVjdGVkIjpvLnZhbHVlP2B0cnVlYDpgZmFsc2VgLCJhcmlhLWNvbnRyb2xzIjphLnZhbHVlLCJkYXRhLXN0YXRlIjpvLnZhbHVlP2BhY3RpdmVgOmBpbmFjdGl2ZWAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwiZGF0YS1kaXNhYmxlZCI6ZS5kaXNhYmxlZD9gYDp2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOk4ocikub3JpZW50YXRpb24udmFsdWUsb25Nb3VzZWRvd246dFswXXx8PWF1KHQ9PnshZS5kaXNhYmxlZCYmdC5jdHJsS2V5PT09ITE/TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpOnQucHJldmVudERlZmF1bHQoKX0sW2BsZWZ0YF0pLG9uS2V5ZG93bjp0WzFdfHw9c3UodD0+TihyKS5jaGFuZ2VNb2RlbFZhbHVlKGUudmFsdWUpLFtgZW50ZXJgLGBzcGFjZWBdKSxvbkZvY3VzOnRbMl18fD0oKT0+e2xldCB0PU4ocikuYWN0aXZhdGlvbk1vZGUhPT1gbWFudWFsYDshby52YWx1ZSYmIWUuZGlzYWJsZWQmJnQmJk4ocikuY2hhbmdlTW9kZWxWYWx1ZShlLnZhbHVlKX19LHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BpZGAsYHR5cGVgLGBhc2AsYGFzLWNoaWxkYCxgYXJpYS1zZWxlY3RlZGAsYGFyaWEtY29udHJvbHNgLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1vcmllbnRhdGlvbmBdKV0pLF86M30sOCxbYGZvY3VzYWJsZWAsYGFjdGl2ZWBdKSl9fSksV2I9Rih7X19uYW1lOmBCdXR0b25gLHByb3BzOnt2YXJpYW50Ont9LHNpemU6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7ZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9PihSKCksQihOKG5iKSx7ImRhdGEtc2xvdCI6YGJ1dHRvbmAsImRhdGEtdmFyaWFudCI6ZS52YXJpYW50LCJkYXRhLXNpemUiOmUuc2l6ZSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGNsYXNzOk8oTihaKShOKEdiKSh7dmFyaWFudDplLnZhcmlhbnQsc2l6ZTplLnNpemV9KSx0LmNsYXNzKSl9LHtkZWZhdWx0OlAoKCk9PltJKG4uJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BkYXRhLXZhcmlhbnRgLGBkYXRhLXNpemVgLGBhc2AsYGFzLWNoaWxkYCxgY2xhc3NgXSkpfX0pLEdiPXdfKGBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IGJnLWNsaXAtcGFkZGluZyB0ZXh0LXNtIGZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgYWN0aXZlOm5vdC1hcmlhLVtoYXNwb3B1cF06dHJhbnNsYXRlLXktcHggWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9idXR0b24gaW5saW5lLWZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tYWxsIG91dGxpbmUtbm9uZSBzZWxlY3Qtbm9uZSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MGAsb3V0bGluZTpgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsc2Vjb25kYXJ5OmBiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAgYXJpYS1leHBhbmRlZDpiZy1zZWNvbmRhcnkgYXJpYS1leHBhbmRlZDp0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kYCxnaG9zdDpgaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctbXV0ZWQvNTAgYXJpYS1leHBhbmRlZDpiZy1tdXRlZCBhcmlhLWV4cGFuZGVkOnRleHQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIGhvdmVyOmJnLWRlc3RydWN0aXZlLzIwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzIwIHRleHQtZGVzdHJ1Y3RpdmUgZm9jdXMtdmlzaWJsZTpib3JkZXItZGVzdHJ1Y3RpdmUvNDAgZGFyazpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8zMGAsbGluazpgdGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVgfSxzaXplOntkZWZhdWx0OmBoLTggZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLHhzOmBoLTYgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIHB4LTIgdGV4dC14cyBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZyBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2Asc206YGgtNyBnYXAtMSByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMnB4KV0gcHgtMi41IHRleHQtWzAuOHJlbV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTMuNWAsbGc6YGgtOSBnYXAtMS41IHB4LTIuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0yIGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMmAsaWNvbjpgc2l6ZS04YCwiaWNvbi14cyI6YHNpemUtNiByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMHB4KV0gaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtM2AsImljb24tc20iOmBzaXplLTcgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnYCwiaWNvbi1sZyI6YHNpemUtOWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgLHNpemU6YGRlZmF1bHRgfX0pLEtiPVtgZGF0YS1zaXplYF0scWI9Rih7X19uYW1lOmBDYXJkYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sc2l6ZTp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihuLHIpPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkYCwiZGF0YS1zaXplIjplLnNpemUsY2xhc3M6TyhOKFopKGByaW5nLWZvcmVncm91bmQvMTAgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZCBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBweS00IHRleHQtc20gcmluZy0xIGhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wIGhhcy1bPmltZzpmaXJzdC1jaGlsZF06cHQtMCBkYXRhLVtzaXplPXNtXTpnYXAtMyBkYXRhLVtzaXplPXNtXTpweS0zIGRhdGEtW3NpemU9c21dOmhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wICo6W2ltZzpmaXJzdC1jaGlsZF06cm91bmRlZC10LXhsICo6W2ltZzpsYXN0LWNoaWxkXTpyb3VuZGVkLWIteGwgZ3JvdXAvY2FyZCBmbGV4IGZsZXgtY29sYCx0LmNsYXNzKSl9LFtJKG4uJHNsb3RzLGBkZWZhdWx0YCldLDEwLEtiKSl9fSksSmI9Rih7X19uYW1lOmBDYXJkQ29udGVudGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLWNvbnRlbnRgLGNsYXNzOk8oTihaKShgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTNgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFliPUYoe19fbmFtZTpgQ2FyZERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtZGVzY3JpcHRpb25gLGNsYXNzOk8oTihaKShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc21gLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFhiPUYoe19fbmFtZTpgQ2FyZEhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBjYXJkLWhlYWRlcmAsY2xhc3M6TyhOKFopKGBnYXAtMSByb3VuZGVkLXQteGwgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTMgWy5ib3JkZXItYl06cGItNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOlsuYm9yZGVyLWJdOnBiLTMgZ3JvdXAvY2FyZC1oZWFkZXIgQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gaXRlbXMtc3RhcnQgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dIGhhcy1kYXRhLVtzbG90PWNhcmQtZGVzY3JpcHRpb25dOmdyaWQtcm93cy1bYXV0b19hdXRvXWAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWmI9Rih7X19uYW1lOmBDYXJkVGl0bGVgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC10aXRsZWAsY2xhc3M6TyhOKFopKGB0ZXh0LWJhc2UgbGVhZGluZy1zbnVnIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6dGV4dC1zbSBjbi1mb250LWhlYWRpbmdgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFFiPUYoe19fbmFtZTpgSW5wdXRgLHByb3BzOntkZWZhdWx0VmFsdWU6e30sbW9kZWxWYWx1ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj1JeShuLGBtb2RlbFZhbHVlYCx0LHtwYXNzaXZlOiEwLGRlZmF1bHRWYWx1ZTpuLmRlZmF1bHRWYWx1ZX0pO3JldHVybihlLHQpPT5ncigoUigpLHooYGlucHV0YCx7Im9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKHIpP3IudmFsdWU9ZTpudWxsLCJkYXRhLXNsb3QiOmBpbnB1dGAsY2xhc3M6TyhOKFopKGBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZGlzYWJsZWQ6YmctaW5wdXQvNTAgZGFyazpkaXNhYmxlZDpiZy1pbnB1dC84MCBoLTggcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMi41IHB5LTEgdGV4dC1iYXNlIHRyYW5zaXRpb24tY29sb3JzIGZpbGU6aC02IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgbWQ6dGV4dC1zbSB3LWZ1bGwgbWluLXctMCBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBgLG4uY2xhc3MpKX0sbnVsbCwyKSksW1tHbCxOKHIpXV0pfX0pLCRiPWBsbG1nd0FkbWluS2V5YDtmdW5jdGlvbiBleCgpe3RyeXtyZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgkYik/P2BgfWNhdGNoe3JldHVybmBgfX1mdW5jdGlvbiB0eChlKXt0cnl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgkYixlKX1jYXRjaHt9fWZ1bmN0aW9uIG54KCl7dHJ5e3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJGIpfWNhdGNoe319dmFyIHJ4PW5fKGBhdXRoYCx7c3RhdGU6KCk9Pih7YXBpS2V5OmV4KCksZXJyb3I6YGB9KSxnZXR0ZXJzOntpc0F1dGhlbnRpY2F0ZWQ6ZT0+ZS5hcGlLZXkhPT1gYH0sYWN0aW9uczp7c3VibWl0KGUpe2UmJih0aGlzLmFwaUtleT1lLHRoaXMuZXJyb3I9YGAsdHgoZSkpfSxyZWplY3QoZSl7dGhpcy5hcGlLZXk9YGAsdGhpcy5lcnJvcj1lLG54KCl9fX0pLGl4PWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdHVzO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSksdGhpcy5uYW1lPWBBZG1pbkFwaUVycm9yYCx0aGlzLnN0YXR1cz10fX07YXN5bmMgZnVuY3Rpb24gYXgoZSl7bGV0IHQ9cngoKSxuPXQuYXBpS2V5LHI9YXdhaXQgZmV0Y2goZSx7Y3JlZGVudGlhbHM6YHNhbWUtb3JpZ2luYCxoZWFkZXJzOm4/eyJ4LWFwaS1rZXkiOm59Ont9fSk7aWYoci5zdGF0dXM9PT00MDF8fHIuc3RhdHVzPT09NDAzKXRocm93IHQuYXBpS2V5PT09biYmdC5yZWplY3QoYGludmFsaWQga2V5LCBvciBub3QgYW4gYWRtaW5gKSxuZXcgaXgoYCR7ZX06IEhUVFAgJHtyLnN0YXR1c31gLHIuc3RhdHVzKTtpZighci5vayl0aHJvdyBuZXcgaXgoYCR7ZX06IEhUVFAgJHtyLnN0YXR1c31gLHIuc3RhdHVzKTtyZXR1cm4gYXdhaXQgci5qc29uKCl9dmFyIG94PTVlMyxzeD1uXyhgZGFzaGJvYXJkYCx7c3RhdGU6KCk9Pih7b3ZlcnZpZXc6bnVsbCx1c2FnZTpudWxsLHRhcmdldHM6bnVsbCxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLHRpbWVyOnZvaWQgMH0pLGFjdGlvbnM6e2FzeW5jIHJlZnJlc2goKXtpZighcngoKS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldFtlLHQsbl09YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtheChgL2FkbWluL2FwaS9vdmVydmlld2ApLGF4KGAvYWRtaW4vYXBpL3VzYWdlYCksYXgoYC9hZG1pbi9hcGkvdGFyZ2V0c2ApXSk7ZS5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMub3ZlcnZpZXc9ZS52YWx1ZSksdC5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMudXNhZ2U9dC52YWx1ZSksbi5zdGF0dXM9PT1gZnVsZmlsbGVkYCYmKHRoaXMudGFyZ2V0cz1uLnZhbHVlKTtsZXQgcj1bXTtpZihlLnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YG92ZXJ2aWV3YCxyZWFzb246ZS5yZWFzb259KSx0LnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YHVzYWdlYCxyZWFzb246dC5yZWFzb259KSxuLnN0YXR1cz09PWByZWplY3RlZGAmJnIucHVzaCh7bGFiZWw6YHRhcmdldHNgLHJlYXNvbjpuLnJlYXNvbn0pLHIubGVuZ3RoPT09MCl7dGhpcy5sYXN0VXBkYXRlZD1uZXcgRGF0ZSx0aGlzLmVycm9yPWBgO3JldHVybn1yLnNvbWUoKHtyZWFzb246ZX0pPT5lIGluc3RhbmNlb2YgaXgmJihlLnN0YXR1cz09PTQwMXx8ZS5zdGF0dXM9PT00MDMpKXx8KHIubGVuZ3RoPDMmJih0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlKSx0aGlzLmVycm9yPXIubWFwKCh7bGFiZWw6ZSxyZWFzb246dH0pPT5gJHtlfTogJHt0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOlN0cmluZyh0KX1gKS5qb2luKGA7IGApKX0sc3RhcnRQb2xsaW5nKCl7dGhpcy50aW1lcj09PXZvaWQgMCYmKHRoaXMucmVmcmVzaCgpLHRoaXMudGltZXI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgdGhpcy5yZWZyZXNoKCksb3gpKX0sc3RvcFBvbGxpbmcoKXt0aGlzLnRpbWVyIT09dm9pZCAwJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXZvaWQgMCl9fX0pLGN4PXtjbGFzczpgbXgtYXV0byBmbGV4IG1pbi1oLVs3MHZoXSBtYXgtdy1tZCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBweC00YH0sbHg9e2NsYXNzOmBmbGV4IHNpemUtMTIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeWB9LHV4PXtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTFgfSxkeD17ImFyaWEtbGFiZWxsZWRieSI6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxmeD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LHB4PXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0sbXg9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSxoeD17Y2xhc3M6YHJlbGF0aXZlYH0sZ3g9KChlLHQpPT57bGV0IG49ZS5fX3ZjY09wdHN8fGU7Zm9yKGxldFtlLHJdb2YgdCluW2VdPXI7cmV0dXJuIG59KShGKHtfX25hbWU6YEF1dGhHYXRlYCxzZXR1cChlKXtsZXQgdD1yeCgpLG49c3goKSxyPU0oYGApLGk9TSghMSksYT1NKG51bGwpLG89VygoKT0+ci52YWx1ZS50cmltKCkhPT1gYCk7ZnVuY3Rpb24gcygpe2xldCBlPXIudmFsdWU7ci52YWx1ZT1gYCx0LnN1Ym1pdChlKSxuLnJlZnJlc2goKX1mdW5jdGlvbiBjKCl7UW4oKCk9PmEudmFsdWU/LiRlbD8uZm9jdXMoKSl9cmV0dXJuIFppKGMpLEVyKCgpPT50LmVycm9yLGU9PntlJiZjKCl9KSwoZSxuKT0+e2xldCBjPWNhKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUigpLHooYGRpdmAsY3gsW0goTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyYH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsbHgsW0goYyx7aWNvbjpOKGFfKSxjbGFzczpgc2l6ZS01YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLFYoYGRpdmAsdXgsW25bM118fD1WKGBzcGFuYCx7Y2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExMTSBHYXRld2F5YCwtMSksSChOKFpiKSx7Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZGB9LHtkZWZhdWx0OlAoKCk9PlsuLi5uWzJdfHw9W1UoYEFkbWluIGtleSByZXF1aXJlZGAsLTEpXV0pLF86MX0pXSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzRdfHw9W1UoYEVudGVyIGFuIGFkbWluIEFQSSBrZXkgdG8gY29udGludWUuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OlAoKCk9PltuWzEwXXx8PVYoYGgyYCx7aWQ6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBzci1vbmx5YH0sYCBIb3cgdGhpcyBrZXkgaXMgaGFuZGxlZCBgLC0xKSxWKGB1bGAsZHgsW1YoYGxpYCxmeCxbSChjLHtpY29uOk4oZF8pLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzVdfHw9Vihgc3BhbmAsbnVsbCxgS2VwdCBvbmx5IGluIHRoaXMgdGFiJ3Mgc2Vzc2lvbiBzdG9yYWdlYCwtMSldKSxWKGBsaWAscHgsW0goYyx7aWNvbjpOKGRfKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls2XXx8PVYoYHNwYW5gLG51bGwsYE5ldmVyIHdyaXR0ZW4gdG8gZGlza2AsLTEpXSksVihgbGlgLG14LFtIKGMse2ljb246TihkXyksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bN118fD1WKGBzcGFuYCxudWxsLGBTZW50IG9ubHkgdG8gdGhpcyBwYWdlJ3Mgb3duIC9hZG1pbi9hcGkvKiByZXF1ZXN0c2AsLTEpXSldKSxWKGBmb3JtYCx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgLG9uU3VibWl0OmF1KHMsW2BwcmV2ZW50YF0pfSxbVihgZGl2YCxoeCxbSChOKFFiKSx7cmVmX2tleTpga2V5SW5wdXRFbGAscmVmOmEsbW9kZWxWYWx1ZTpyLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpuWzBdfHw9ZT0+ci52YWx1ZT1lLHR5cGU6aS52YWx1ZT9gdGV4dGA6YHBhc3N3b3JkYCxhdXRvY29tcGxldGU6YG9mZmAscGxhY2Vob2xkZXI6YEFQSSBrZXlgLCJhcmlhLWxhYmVsIjpgQWRtaW4gQVBJIGtleWAsImFyaWEtaW52YWxpZCI6ISFOKHQpLmVycm9yLCJhcmlhLWRlc2NyaWJlZGJ5IjpOKHQpLmVycm9yP2BhdXRoZ2F0ZS1lcnJvcmA6dm9pZCAwLGNsYXNzOk8oW2BoLTEwIHByLTEwYCx7ImF1dGhnYXRlLXNoYWtlIjpOKHQpLmVycm9yfV0pfSxudWxsLDgsW2Btb2RlbFZhbHVlYCxgdHlwZWAsYGFyaWEtaW52YWxpZGAsYGFyaWEtZGVzY3JpYmVkYnlgLGBjbGFzc2BdKSxIKE4oV2IpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCxjbGFzczpgYWJzb2x1dGUgdG9wLTEvMiByaWdodC0xLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCwiYXJpYS1sYWJlbCI6aS52YWx1ZT9gSGlkZSBrZXlgOmBTaG93IGtleWAsb25DbGljazpuWzFdfHw9ZT0+aS52YWx1ZT0haS52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W0goYyx7aWNvbjppLnZhbHVlP04odl8pOk4oc18pLGNsYXNzOmBzaXplLTMuNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9LDgsW2BhcmlhLWxhYmVsYF0pXSksSChOKFdiKSx7dHlwZTpgc3VibWl0YCxjbGFzczpgdy1mdWxsYCxkaXNhYmxlZDohby52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+Wy4uLm5bOF18fD1bVShgIENvbnRpbnVlIGAsLTEpXV0pLF86MX0sOCxbYGRpc2FibGVkYF0pXSwzMiksTih0KS5lcnJvcj8oUigpLEIoTihYdikse2tleTowLGlkOmBhdXRoZ2F0ZS1lcnJvcmAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpQKCgpPT5bSChOKFF2KSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi5uWzldfHw9W1UoYEF1dGhlbnRpY2F0aW9uIGZhaWxlZGAsLTEpXV0pLF86MX0pLEgoTihadiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bVShrKE4odCkuZXJyb3IpLDEpXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApXSksXzoxfSldKSxfOjF9KV0pfX19KSxbW2BfX3Njb3BlSWRgLGBkYXRhLXYtNGJlNmJjMDlgXV0pO2Z1bmN0aW9uIF94KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiB2eChlLHQpe3JldHVybiBuPT57dC5zZXRTdGF0ZSh0PT4oey4uLnQsW2VdOl94KG4sdFtlXSl9KSl9fWZ1bmN0aW9uIHl4KGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gYngoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+dHlwZW9mIGU9PWBudW1iZXJgKX1mdW5jdGlvbiB4eChlLHQpe2xldCBuPVtdLHI9ZT0+e2UuZm9yRWFjaChlPT57bi5wdXNoKGUpO2xldCBpPXQoZSk7aSE9bnVsbCYmaS5sZW5ndGgmJnIoaSl9KX07cmV0dXJuIHIoZSksbn1mdW5jdGlvbiBRKGUsdCxuKXtsZXQgcj1bXSxpO3JldHVybiBhPT57bGV0IG87bi5rZXkmJm4uZGVidWcmJihvPURhdGUubm93KCkpO2xldCBzPWUoYSk7aWYoIShzLmxlbmd0aCE9PXIubGVuZ3RofHxzLnNvbWUoKGUsdCk9PnJbdF0hPT1lKSkpcmV0dXJuIGk7cj1zO2xldCBjO2lmKG4ua2V5JiZuLmRlYnVnJiYoYz1EYXRlLm5vdygpKSxpPXQoLi4ucyksbj09bnVsbHx8bi5vbkNoYW5nZT09bnVsbHx8bi5vbkNoYW5nZShpKSxuLmtleSYmbi5kZWJ1ZyYmbiE9bnVsbCYmbi5kZWJ1ZygpKXtsZXQgZT1NYXRoLnJvdW5kKChEYXRlLm5vdygpLW8pKjEwMCkvMTAwLHQ9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jKSoxMDApLzEwMCxyPXQvMTYsaT0oZSx0KT0+e2ZvcihlPVN0cmluZyhlKTtlLmxlbmd0aDx0OyllPWAgYCtlO3JldHVybiBlfTtjb25zb2xlLmluZm8oYCVj4o+xICR7aSh0LDUpfSAvJHtpKGUsNSl9IG1zYCxgCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjb2xvcjogaHNsKCR7TWF0aC5tYXgoMCxNYXRoLm1pbigxMjAtMTIwKnIsMTIwKSl9ZGVnIDEwMCUgMzElKTtgLG4/LmtleSl9cmV0dXJuIGl9fWZ1bmN0aW9uICQoZSx0LG4scil7cmV0dXJue2RlYnVnOigpPT5lPy5kZWJ1Z0FsbD8/ZVt0XSxrZXk6ITEsb25DaGFuZ2U6cn19ZnVuY3Rpb24gU3goZSx0LG4scil7bGV0IGk9e2lkOmAke3QuaWR9XyR7bi5pZH1gLHJvdzp0LGNvbHVtbjpuLGdldFZhbHVlOigpPT50LmdldFZhbHVlKHIpLHJlbmRlclZhbHVlOigpPT5pLmdldFZhbHVlKCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLGdldENvbnRleHQ6USgoKT0+W2Usbix0LGldLChlLHQsbixyKT0+KHt0YWJsZTplLGNvbHVtbjp0LHJvdzpuLGNlbGw6cixnZXRWYWx1ZTpyLmdldFZhbHVlLHJlbmRlclZhbHVlOnIucmVuZGVyVmFsdWV9KSwkKGUub3B0aW9ucyxgZGVidWdDZWxsc2AsYGNlbGwuZ2V0Q29udGV4dGApKX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2gocj0+e3IuY3JlYXRlQ2VsbD09bnVsbHx8ci5jcmVhdGVDZWxsKGksbix0LGUpfSx7fSksaX1mdW5jdGlvbiBDeChlLHQsbixyKXtsZXQgaT17Li4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLC4uLnR9LGE9aS5hY2Nlc3NvcktleSxvPWkuaWQ/PyhhP3R5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGw9PWBmdW5jdGlvbmA/YS5yZXBsYWNlQWxsKGAuYCxgX2ApOmEucmVwbGFjZSgvXC4vZyxgX2ApOnZvaWQgMCk/Pyh0eXBlb2YgaS5oZWFkZXI9PWBzdHJpbmdgP2kuaGVhZGVyOnZvaWQgMCkscztpZihpLmFjY2Vzc29yRm4/cz1pLmFjY2Vzc29yRm46YSYmKHM9YS5pbmNsdWRlcyhgLmApP2U9PntsZXQgdD1lO2ZvcihsZXQgZSBvZiBhLnNwbGl0KGAuYCkpdD10Py5bZV07cmV0dXJuIHR9OmU9PmVbaS5hY2Nlc3NvcktleV0pLCFvKXRocm93IEVycm9yKCk7bGV0IGM9e2lkOmAke1N0cmluZyhvKX1gLGFjY2Vzc29yRm46cyxwYXJlbnQ6cixkZXB0aDpuLGNvbHVtbkRlZjppLGNvbHVtbnM6W10sZ2V0RmxhdENvbHVtbnM6USgoKT0+WyEwXSwoKT0+W2MsLi4uYy5jb2x1bW5zPy5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSldLCQoZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0RmxhdENvbHVtbnNgKSksZ2V0TGVhZkNvbHVtbnM6USgoKT0+W2UuX2dldE9yZGVyQ29sdW1uc0ZuKCldLGU9Pnt2YXIgdDtyZXR1cm4odD1jLmNvbHVtbnMpIT1udWxsJiZ0Lmxlbmd0aD9lKGMuY29sdW1ucy5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpOltjXX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGNvbHVtbi5nZXRMZWFmQ29sdW1uc2ApKX07Zm9yKGxldCB0IG9mIGUuX2ZlYXR1cmVzKXQuY3JlYXRlQ29sdW1uPT1udWxsfHx0LmNyZWF0ZUNvbHVtbihjLGUpO3JldHVybiBjfXZhciB3eD1gZGVidWdIZWFkZXJzYDtmdW5jdGlvbiBUeChlLHQsbil7bGV0IHI9e2lkOm4uaWQ/P3QuaWQsY29sdW1uOnQsaW5kZXg6bi5pbmRleCxpc1BsYWNlaG9sZGVyOiEhbi5pc1BsYWNlaG9sZGVyLHBsYWNlaG9sZGVySWQ6bi5wbGFjZWhvbGRlcklkLGRlcHRoOm4uZGVwdGgsc3ViSGVhZGVyczpbXSxjb2xTcGFuOjAscm93U3BhbjowLGhlYWRlckdyb3VwOm51bGwsZ2V0TGVhZkhlYWRlcnM6KCk9PntsZXQgZT1bXSx0PW49PntuLnN1YkhlYWRlcnMmJm4uc3ViSGVhZGVycy5sZW5ndGgmJm4uc3ViSGVhZGVycy5tYXAodCksZS5wdXNoKG4pfTtyZXR1cm4gdChyKSxlfSxnZXRDb250ZXh0OigpPT4oe3RhYmxlOmUsaGVhZGVyOnIsY29sdW1uOnR9KX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2godD0+e3QuY3JlYXRlSGVhZGVyPT1udWxsfHx0LmNyZWF0ZUhlYWRlcihyLGUpfSkscn12YXIgRXg9e2NyZWF0ZVRhYmxlOmU9PntlLmdldEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PntsZXQgYT1yPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxvPWk/Lm1hcChlPT5uLmZpbmQodD0+dC5pZD09PWUpKS5maWx0ZXIoQm9vbGVhbik/P1tdLHM9bi5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUuaWQpKSYmIShpIT1udWxsJiZpLmluY2x1ZGVzKGUuaWQpKSk7cmV0dXJuIER4KHQsWy4uLmEsLi4ucywuLi5vXSxlKX0sJChlLm9wdGlvbnMsd3gsYGdldEhlYWRlckdyb3Vwc2ApKSxlLmdldENlbnRlckhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PihuPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpLER4KHQsbixlLGBjZW50ZXJgKSksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckhlYWRlckdyb3Vwc2ApKSxlLmdldExlZnRIZWFkZXJHcm91cHM9USgoKT0+W2UuZ2V0QWxsQ29sdW1ucygpLGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKHQsbixyKT0+RHgodCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGBsZWZ0YCksJChlLm9wdGlvbnMsd3gsYGdldExlZnRIZWFkZXJHcm91cHNgKSksZS5nZXRSaWdodEhlYWRlckdyb3Vwcz1RKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKHQsbixyKT0+RHgodCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGByaWdodGApLCQoZS5vcHRpb25zLHd4LGBnZXRSaWdodEhlYWRlckdyb3Vwc2ApKSxlLmdldEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSwkKGUub3B0aW9ucyx3eCxgZ2V0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0TGVmdEZvb3Rlckdyb3Vwcz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldExlZnRGb290ZXJHcm91cHNgKSksZS5nZXRDZW50ZXJGb290ZXJHcm91cHM9USgoKT0+W2UuZ2V0Q2VudGVySGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckZvb3Rlckdyb3Vwc2ApKSxlLmdldFJpZ2h0Rm9vdGVyR3JvdXBzPVEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksJChlLm9wdGlvbnMsd3gsYGdldFJpZ2h0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0RmxhdEhlYWRlcnM9USgoKT0+W2UuZ2V0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLHd4LGBnZXRGbGF0SGVhZGVyc2ApKSxlLmdldExlZnRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLCQoZS5vcHRpb25zLHd4LGBnZXRMZWZ0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksJChlLm9wdGlvbnMsd3gsYGdldENlbnRlckZsYXRIZWFkZXJzYCkpLGUuZ2V0UmlnaHRGbGF0SGVhZGVycz1RKCgpPT5bZS5nZXRSaWdodEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSwkKGUub3B0aW9ucyx3eCxgZ2V0UmlnaHRGbGF0SGVhZGVyc2ApKSxlLmdldENlbnRlckxlYWZIZWFkZXJzPVEoKCk9PltlLmdldENlbnRlckZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLCQoZS5vcHRpb25zLHd4LGBnZXRDZW50ZXJMZWFmSGVhZGVyc2ApKSxlLmdldExlZnRMZWFmSGVhZGVycz1RKCgpPT5bZS5nZXRMZWZ0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksJChlLm9wdGlvbnMsd3gsYGdldExlZnRMZWFmSGVhZGVyc2ApKSxlLmdldFJpZ2h0TGVhZkhlYWRlcnM9USgoKT0+W2UuZ2V0UmlnaHRGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSwkKGUub3B0aW9ucyx3eCxgZ2V0UmlnaHRMZWFmSGVhZGVyc2ApKSxlLmdldExlYWZIZWFkZXJzPVEoKCk9PltlLmdldExlZnRIZWFkZXJHcm91cHMoKSxlLmdldENlbnRlckhlYWRlckdyb3VwcygpLGUuZ2V0UmlnaHRIZWFkZXJHcm91cHMoKV0sKGUsdCxuKT0+Wy4uLmVbMF0/LmhlYWRlcnM/P1tdLC4uLnRbMF0/LmhlYWRlcnM/P1tdLC4uLm5bMF0/LmhlYWRlcnM/P1tdXS5tYXAoZT0+ZS5nZXRMZWFmSGVhZGVycygpKS5mbGF0KCksJChlLm9wdGlvbnMsd3gsYGdldExlYWZIZWFkZXJzYCkpfX07ZnVuY3Rpb24gRHgoZSx0LG4scil7bGV0IGk9MCxhPWZ1bmN0aW9uKGUsdCl7dD09PXZvaWQgMCYmKHQ9MSksaT1NYXRoLm1heChpLHQpLGUuZmlsdGVyKGU9PmUuZ2V0SXNWaXNpYmxlKCkpLmZvckVhY2goZT0+e3ZhciBuOyhuPWUuY29sdW1ucykhPW51bGwmJm4ubGVuZ3RoJiZhKGUuY29sdW1ucyx0KzEpfSwwKX07YShlKTtsZXQgbz1bXSxzPShlLHQpPT57bGV0IGk9e2RlcHRoOnQsaWQ6W3IsYCR7dH1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGhlYWRlcnM6W119LGE9W107ZS5mb3JFYWNoKGU9PntsZXQgbz1bLi4uYV0ucmV2ZXJzZSgpWzBdLHM9ZS5jb2x1bW4uZGVwdGg9PT1pLmRlcHRoLGMsbD0hMTtpZihzJiZlLmNvbHVtbi5wYXJlbnQ/Yz1lLmNvbHVtbi5wYXJlbnQ6KGM9ZS5jb2x1bW4sbD0hMCksbyYmbz8uY29sdW1uPT09YylvLnN1YkhlYWRlcnMucHVzaChlKTtlbHNle2xldCBpPVR4KG4sYyx7aWQ6W3IsdCxjLmlkLGU/LmlkXS5maWx0ZXIoQm9vbGVhbikuam9pbihgX2ApLGlzUGxhY2Vob2xkZXI6bCxwbGFjZWhvbGRlcklkOmw/YCR7YS5maWx0ZXIoZT0+ZS5jb2x1bW49PT1jKS5sZW5ndGh9YDp2b2lkIDAsZGVwdGg6dCxpbmRleDphLmxlbmd0aH0pO2kuc3ViSGVhZGVycy5wdXNoKGUpLGEucHVzaChpKX1pLmhlYWRlcnMucHVzaChlKSxlLmhlYWRlckdyb3VwPWl9KSxvLnB1c2goaSksdD4wJiZzKGEsdC0xKX07cyh0Lm1hcCgoZSx0KT0+VHgobixlLHtkZXB0aDppLGluZGV4OnR9KSksaS0xKSxvLnJldmVyc2UoKTtsZXQgYz1lPT5lLmZpbHRlcihlPT5lLmNvbHVtbi5nZXRJc1Zpc2libGUoKSkubWFwKGU9PntsZXQgdD0wLG49MCxyPVswXTtlLnN1YkhlYWRlcnMmJmUuc3ViSGVhZGVycy5sZW5ndGg/KHI9W10sYyhlLnN1YkhlYWRlcnMpLmZvckVhY2goZT0+e2xldHtjb2xTcGFuOm4scm93U3BhbjppfT1lO3QrPW4sci5wdXNoKGkpfSkpOnQ9MTtsZXQgaT1NYXRoLm1pbiguLi5yKTtyZXR1cm4gbis9aSxlLmNvbFNwYW49dCxlLnJvd1NwYW49bix7Y29sU3Bhbjp0LHJvd1NwYW46bn19KTtyZXR1cm4gYyhvWzBdPy5oZWFkZXJzPz9bXSksb312YXIgT3g9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9e2lkOnQsaW5kZXg6cixvcmlnaW5hbDpuLGRlcHRoOmkscGFyZW50SWQ6byxfdmFsdWVzQ2FjaGU6e30sX3VuaXF1ZVZhbHVlc0NhY2hlOnt9LGdldFZhbHVlOnQ9PntpZihzLl92YWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBzLl92YWx1ZXNDYWNoZVt0XT1uLmFjY2Vzc29yRm4ocy5vcmlnaW5hbCxyKSxzLl92YWx1ZXNDYWNoZVt0XX0sZ2V0VW5pcXVlVmFsdWVzOnQ9PntpZihzLl91bmlxdWVWYWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gcy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF07bGV0IG49ZS5nZXRDb2x1bW4odCk7aWYobiE9bnVsbCYmbi5hY2Nlc3NvckZuKXJldHVybiBuLmNvbHVtbkRlZi5nZXRVbmlxdWVWYWx1ZXM/KHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdPW4uY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcyhzLm9yaWdpbmFsLHIpLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKToocy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF09W3MuZ2V0VmFsdWUodCldLHMuX3VuaXF1ZVZhbHVlc0NhY2hlW3RdKX0scmVuZGVyVmFsdWU6dD0+cy5nZXRWYWx1ZSh0KT8/ZS5vcHRpb25zLnJlbmRlckZhbGxiYWNrVmFsdWUsc3ViUm93czphPz9bXSxnZXRMZWFmUm93czooKT0+eHgocy5zdWJSb3dzLGU9PmUuc3ViUm93cyksZ2V0UGFyZW50Um93OigpPT5zLnBhcmVudElkP2UuZ2V0Um93KHMucGFyZW50SWQsITApOnZvaWQgMCxnZXRQYXJlbnRSb3dzOigpPT57bGV0IGU9W10sdD1zO2Zvcig7Oyl7bGV0IG49dC5nZXRQYXJlbnRSb3coKTtpZighbilicmVhaztlLnB1c2gobiksdD1ufXJldHVybiBlLnJldmVyc2UoKX0sZ2V0QWxsQ2VsbHM6USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKV0sdD0+dC5tYXAodD0+U3goZSxzLHQsdC5pZCkpLCQoZS5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRBbGxDZWxsc2ApKSxfZ2V0QWxsQ2VsbHNCeUNvbHVtbklkOlEoKCk9PltzLmdldEFsbENlbGxzKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmNvbHVtbi5pZF09dCxlKSx7fSksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEFsbENlbGxzQnlDb2x1bW5JZGApKX07Zm9yKGxldCB0PTA7dDxlLl9mZWF0dXJlcy5sZW5ndGg7dCsrKXtsZXQgbj1lLl9mZWF0dXJlc1t0XTtuPT1udWxsfHxuLmNyZWF0ZVJvdz09bnVsbHx8bi5jcmVhdGVSb3cocyxlKX1yZXR1cm4gc30sa3g9e2NyZWF0ZUNvbHVtbjooZSx0KT0+e2UuX2dldEZhY2V0ZWRSb3dNb2RlbD10Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKHQsZS5pZCksZS5nZXRGYWNldGVkUm93TW9kZWw9KCk9PmUuX2dldEZhY2V0ZWRSb3dNb2RlbD9lLl9nZXRGYWNldGVkUm93TW9kZWwoKTp0LmdldFByZUZpbHRlcmVkUm93TW9kZWwoKSxlLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz0oKT0+ZS5fZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcz9lLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzKCk6bmV3IE1hcCxlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzPXQub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzJiZ0Lm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyh0LGUuaWQpLGUuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcz0oKT0+e2lmKGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMpcmV0dXJuIGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXMoKX19fSxBeD0oZSx0LG4pPT57dmFyIHIsaTtsZXQgYT1uPT1udWxsfHwocj1uLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCk7cmV0dXJuISEoKGk9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihpPWkudG9TdHJpbmcoKSkhPW51bGwmJihpPWkudG9Mb3dlckNhc2UoKSkhPW51bGwmJmkuaW5jbHVkZXMoYSkpfTtBeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBqeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuISEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJihyPXIudG9TdHJpbmcoKSkhPW51bGwmJnIuaW5jbHVkZXMobikpfTtqeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBNeD0oZSx0LG4pPT57dmFyIHI7cmV0dXJuKChyPWUuZ2V0VmFsdWUodCkpPT1udWxsfHwocj1yLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpPT09bj8udG9Mb3dlckNhc2UoKX07TXguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgTng9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT8uaW5jbHVkZXMobik7TnguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgUHg9KGUsdCxuKT0+IW4uc29tZShuPT57dmFyIHI7cmV0dXJuISgocj1lLmdldFZhbHVlKHQpKSE9bnVsbCYmci5pbmNsdWRlcyhuKSl9KTtQeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgRng9KGUsdCxuKT0+bi5zb21lKG49PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pKTtGeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgSXg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09PW47SXguYXV0b1JlbW92ZT1lPT5CeChlKTt2YXIgTHg9KGUsdCxuKT0+ZS5nZXRWYWx1ZSh0KT09bjtMeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpO3ZhciBSeD0oZSx0LG4pPT57bGV0W3IsaV09bixhPWUuZ2V0VmFsdWUodCk7cmV0dXJuIGE+PXImJmE8PWl9O1J4LnJlc29sdmVGaWx0ZXJWYWx1ZT1lPT57bGV0W3Qsbl09ZSxyPXR5cGVvZiB0PT1gbnVtYmVyYD90OnBhcnNlRmxvYXQodCksaT10eXBlb2Ygbj09YG51bWJlcmA/bjpwYXJzZUZsb2F0KG4pLGE9dD09PW51bGx8fE51bWJlci5pc05hTihyKT8tMS8wOnIsbz1uPT09bnVsbHx8TnVtYmVyLmlzTmFOKGkpPzEvMDppO2lmKGE+byl7bGV0IGU9YTthPW8sbz1lfXJldHVyblthLG9dfSxSeC5hdXRvUmVtb3ZlPWU9PkJ4KGUpfHxCeChlWzBdKSYmQngoZVsxXSk7dmFyIHp4PXtpbmNsdWRlc1N0cmluZzpBeCxpbmNsdWRlc1N0cmluZ1NlbnNpdGl2ZTpqeCxlcXVhbHNTdHJpbmc6TXgsYXJySW5jbHVkZXM6TngsYXJySW5jbHVkZXNBbGw6UHgsYXJySW5jbHVkZXNTb21lOkZ4LGVxdWFsczpJeCx3ZWFrRXF1YWxzOkx4LGluTnVtYmVyUmFuZ2U6Unh9O2Z1bmN0aW9uIEJ4KGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB9dmFyIFZ4PXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe2ZpbHRlckZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbkZpbHRlcnM6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5GaWx0ZXJzQ2hhbmdlOnZ4KGBjb2x1bW5GaWx0ZXJzYCxlKSxmaWx0ZXJGcm9tTGVhZlJvd3M6ITEsbWF4TGVhZlJvd0ZpbHRlckRlcHRoOjEwMH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UuZ2V0QXV0b0ZpbHRlckZuPSgpPT57bGV0IG49dC5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk7cmV0dXJuIHR5cGVvZiBuPT1gc3RyaW5nYD96eC5pbmNsdWRlc1N0cmluZzp0eXBlb2Ygbj09YG51bWJlcmA/enguaW5OdW1iZXJSYW5nZTp0eXBlb2Ygbj09YGJvb2xlYW5gfHx0eXBlb2Ygbj09YG9iamVjdGAmJm4/enguZXF1YWxzOkFycmF5LmlzQXJyYXkobik/enguYXJySW5jbHVkZXM6engud2Vha0VxdWFsc30sZS5nZXRGaWx0ZXJGbj0oKT0+eXgoZS5jb2x1bW5EZWYuZmlsdGVyRm4pP2UuY29sdW1uRGVmLmZpbHRlckZuOmUuY29sdW1uRGVmLmZpbHRlckZuPT09YGF1dG9gP2UuZ2V0QXV0b0ZpbHRlckZuKCk6dC5vcHRpb25zLmZpbHRlckZucz8uW2UuY29sdW1uRGVmLmZpbHRlckZuXT8/enhbZS5jb2x1bW5EZWYuZmlsdGVyRm5dLGUuZ2V0Q2FuRmlsdGVyPSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlQ29sdW1uRmlsdGVyPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uRmlsdGVycz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmISFlLmFjY2Vzc29yRm4sZS5nZXRJc0ZpbHRlcmVkPSgpPT5lLmdldEZpbHRlckluZGV4KCk+LTEsZS5nZXRGaWx0ZXJWYWx1ZT0oKT0+e3ZhciBuO3JldHVybihuPXQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzKT09bnVsbHx8KG49bi5maW5kKHQ9PnQuaWQ9PT1lLmlkKSk9PW51bGw/dm9pZCAwOm4udmFsdWV9LGUuZ2V0RmlsdGVySW5kZXg9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5GaWx0ZXJzPy5maW5kSW5kZXgodD0+dC5pZD09PWUuaWQpPz8tMSxlLnNldEZpbHRlclZhbHVlPW49Pnt0LnNldENvbHVtbkZpbHRlcnModD0+e2xldCByPWUuZ2V0RmlsdGVyRm4oKSxpPXQ/LmZpbmQodD0+dC5pZD09PWUuaWQpLGE9X3gobixpP2kudmFsdWU6dm9pZCAwKTtpZihIeChyLGEsZSkpcmV0dXJuIHQ/LmZpbHRlcih0PT50LmlkIT09ZS5pZCk/P1tdO2xldCBvPXtpZDplLmlkLHZhbHVlOmF9O3JldHVybiBpP3Q/Lm1hcCh0PT50LmlkPT09ZS5pZD9vOnQpPz9bXTp0IT1udWxsJiZ0Lmxlbmd0aD9bLi4udCxvXTpbb119KX19LGNyZWF0ZVJvdzooZSx0KT0+e2UuY29sdW1uRmlsdGVycz17fSxlLmNvbHVtbkZpbHRlcnNNZXRhPXt9fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5GaWx0ZXJzPXQ9PntsZXQgbj1lLmdldEFsbExlYWZDb2x1bW5zKCk7ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShlPT5feCh0LGUpPy5maWx0ZXIoZT0+e2xldCB0PW4uZmluZCh0PT50LmlkPT09ZS5pZCk7cmV0dXJuISh0JiZIeCh0LmdldEZpbHRlckZuKCksZS52YWx1ZSx0KSl9KSl9LGUucmVzZXRDb2x1bW5GaWx0ZXJzPXQ9PntlLnNldENvbHVtbkZpbHRlcnModD9bXTplLmluaXRpYWxTdGF0ZT8uY29sdW1uRmlsdGVycz8/W10pfSxlLmdldFByZUZpbHRlcmVkUm93TW9kZWw9KCk9PmUuZ2V0Q29yZVJvd01vZGVsKCksZS5nZXRGaWx0ZXJlZFJvd01vZGVsPSgpPT4oIWUuX2dldEZpbHRlcmVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsJiYoZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmlsdGVyZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEZpbHRlcmVkUm93TW9kZWw/ZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCk6ZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCgpKX19O2Z1bmN0aW9uIEh4KGUsdCxuKXtyZXR1cm4oZSYmZS5hdXRvUmVtb3ZlP2UuYXV0b1JlbW92ZSh0LG4pOiExKXx8dD09PXZvaWQgMHx8dHlwZW9mIHQ9PWBzdHJpbmdgJiYhdH12YXIgVXg9e3N1bTooZSx0LG4pPT5uLnJlZHVjZSgodCxuKT0+e2xldCByPW4uZ2V0VmFsdWUoZSk7cmV0dXJuIHQrKHR5cGVvZiByPT1gbnVtYmVyYD9yOjApfSwwKSxtaW46KGUsdCxuKT0+e2xldCByO3JldHVybiBuLmZvckVhY2godD0+e2xldCBuPXQuZ2V0VmFsdWUoZSk7biE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pfSkscn0sbWF4OihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LGV4dGVudDooZSx0LG4pPT57bGV0IHIsaTtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPT09dm9pZCAwP24+PW4mJihyPWk9bik6KHI+biYmKHI9biksaTxuJiYoaT1uKSkpfSksW3IsaV19LG1lYW46KGUsdCk9PntsZXQgbj0wLHI9MDtpZih0LmZvckVhY2godD0+e2xldCBpPXQuZ2V0VmFsdWUoZSk7aSE9bnVsbCYmKGk9K2kpPj1pJiYoKytuLHIrPWkpfSksbilyZXR1cm4gci9ufSxtZWRpYW46KGUsdCk9PntpZighdC5sZW5ndGgpcmV0dXJuO2xldCBuPXQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpO2lmKCFieChuKSlyZXR1cm47aWYobi5sZW5ndGg9PT0xKXJldHVybiBuWzBdO2xldCByPU1hdGguZmxvb3Iobi5sZW5ndGgvMiksaT1uLnNvcnQoKGUsdCk9PmUtdCk7cmV0dXJuIG4ubGVuZ3RoJTI9PTA/KGlbci0xXStpW3JdKS8yOmlbcl19LHVuaXF1ZTooZSx0KT0+QXJyYXkuZnJvbShuZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS52YWx1ZXMoKSksdW5pcXVlQ291bnQ6KGUsdCk9Pm5ldyBTZXQodC5tYXAodD0+dC5nZXRWYWx1ZShlKSkpLnNpemUsY291bnQ6KGUsdCk9PnQubGVuZ3RofSxXeD17Z2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHthZ2dyZWdhdGVkQ2VsbDplPT57dmFyIHQ7cmV0dXJuKCh0PWUuZ2V0VmFsdWUoKSk9PW51bGx8fHQudG9TdHJpbmc9PW51bGw/dm9pZCAwOnQudG9TdHJpbmcoKSk/P251bGx9LGFnZ3JlZ2F0aW9uRm46YGF1dG9gfSksZ2V0SW5pdGlhbFN0YXRlOmU9Pih7Z3JvdXBpbmc6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Hcm91cGluZ0NoYW5nZTp2eChgZ3JvdXBpbmdgLGUpLGdyb3VwZWRDb2x1bW5Nb2RlOmByZW9yZGVyYH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlR3JvdXBpbmc9KCk9Pnt0LnNldEdyb3VwaW5nKHQ9PnQhPW51bGwmJnQuaW5jbHVkZXMoZS5pZCk/dC5maWx0ZXIodD0+dCE9PWUuaWQpOlsuLi50Pz9bXSxlLmlkXSl9LGUuZ2V0Q2FuR3JvdXA9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nPz8hMCkmJighIWUuYWNjZXNzb3JGbnx8ISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKSxlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmNsdWRlcyhlLmlkKSxlLmdldEdyb3VwZWRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmRleE9mKGUuaWQpLGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5Hcm91cCgpO3JldHVybigpPT57dCYmZS50b2dnbGVHcm91cGluZygpfX0sZS5nZXRBdXRvQWdncmVnYXRpb25Gbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO2lmKHR5cGVvZiBuPT1gbnVtYmVyYClyZXR1cm4gVXguc3VtO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PWBbb2JqZWN0IERhdGVdYClyZXR1cm4gVXguZXh0ZW50fSxlLmdldEFnZ3JlZ2F0aW9uRm49KCk9PntpZighZSl0aHJvdyBFcnJvcigpO3JldHVybiB5eChlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuKT9lLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuOmUuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm49PT1gYXV0b2A/ZS5nZXRBdXRvQWdncmVnYXRpb25GbigpOnQub3B0aW9ucy5hZ2dyZWdhdGlvbkZucz8uW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dPz9VeFtlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldEdyb3VwaW5nPXQ9PmUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Hcm91cGluZ0NoYW5nZSh0KSxlLnJlc2V0R3JvdXBpbmc9dD0+e2Uuc2V0R3JvdXBpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uZ3JvdXBpbmc/P1tdKX0sZS5nZXRQcmVHcm91cGVkUm93TW9kZWw9KCk9PmUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLGUuZ2V0R3JvdXBlZFJvd01vZGVsPSgpPT4oIWUuX2dldEdyb3VwZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEdyb3VwZWRSb3dNb2RlbCYmKGUuX2dldEdyb3VwZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0R3JvdXBlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsR3JvdXBpbmd8fCFlLl9nZXRHcm91cGVkUm93TW9kZWw/ZS5nZXRQcmVHcm91cGVkUm93TW9kZWwoKTplLl9nZXRHcm91cGVkUm93TW9kZWwoKSl9LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0SXNHcm91cGVkPSgpPT4hIWUuZ3JvdXBpbmdDb2x1bW5JZCxlLmdldEdyb3VwaW5nVmFsdWU9bj0+e2lmKGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl07bGV0IHI9dC5nZXRDb2x1bW4obik7cmV0dXJuIHIhPW51bGwmJnIuY29sdW1uRGVmLmdldEdyb3VwaW5nVmFsdWU/KGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl09ci5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZShlLm9yaWdpbmFsKSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW25dKTplLmdldFZhbHVlKG4pfSxlLl9ncm91cGluZ1ZhbHVlc0NhY2hlPXt9fSxjcmVhdGVDZWxsOihlLHQsbixyKT0+e2UuZ2V0SXNHcm91cGVkPSgpPT50LmdldElzR3JvdXBlZCgpJiZ0LmlkPT09bi5ncm91cGluZ0NvbHVtbklkLGUuZ2V0SXNQbGFjZWhvbGRlcj0oKT0+IWUuZ2V0SXNHcm91cGVkKCkmJnQuZ2V0SXNHcm91cGVkKCksZS5nZXRJc0FnZ3JlZ2F0ZWQ9KCk9Pnt2YXIgdDtyZXR1cm4hZS5nZXRJc0dyb3VwZWQoKSYmIWUuZ2V0SXNQbGFjZWhvbGRlcigpJiYhISgodD1uLnN1YlJvd3MpIT1udWxsJiZ0Lmxlbmd0aCl9fX07ZnVuY3Rpb24gR3goZSx0LG4pe2lmKCEodCE9bnVsbCYmdC5sZW5ndGgpfHwhbilyZXR1cm4gZTtsZXQgcj1lLmZpbHRlcihlPT4hdC5pbmNsdWRlcyhlLmlkKSk7cmV0dXJuIG49PT1gcmVtb3ZlYD9yOlsuLi50Lm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksLi4ucl19dmFyIEt4PXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtjb2x1bW5PcmRlcjpbXSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtbk9yZGVyQ2hhbmdlOnZ4KGBjb2x1bW5PcmRlcmAsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEluZGV4PVEoZT0+W3JTKHQsZSldLHQ9PnQuZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSwkKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0SW5kZXhgKSksZS5nZXRJc0ZpcnN0Q29sdW1uPW49PnJTKHQsbilbMF0/LmlkPT09ZS5pZCxlLmdldElzTGFzdENvbHVtbj1uPT57bGV0IHI9clModCxuKTtyZXR1cm4gcltyLmxlbmd0aC0xXT8uaWQ9PT1lLmlkfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uT3JkZXI9dD0+ZS5vcHRpb25zLm9uQ29sdW1uT3JkZXJDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5PcmRlcj10PT57ZS5zZXRDb2x1bW5PcmRlcih0P1tdOmUuaW5pdGlhbFN0YXRlLmNvbHVtbk9yZGVyPz9bXSl9LGUuX2dldE9yZGVyQ29sdW1uc0ZuPVEoKCk9PltlLmdldFN0YXRlKCkuY29sdW1uT3JkZXIsZS5nZXRTdGF0ZSgpLmdyb3VwaW5nLGUub3B0aW9ucy5ncm91cGVkQ29sdW1uTW9kZV0sKGUsdCxuKT0+cj0+e2xldCBpPVtdO2lmKCEoZSE9bnVsbCYmZS5sZW5ndGgpKWk9cjtlbHNle2xldCB0PVsuLi5lXSxuPVsuLi5yXTtmb3IoO24ubGVuZ3RoJiZ0Lmxlbmd0aDspe2xldCBlPXQuc2hpZnQoKSxyPW4uZmluZEluZGV4KHQ9PnQuaWQ9PT1lKTtyPi0xJiZpLnB1c2gobi5zcGxpY2UociwxKVswXSl9aT1bLi4uaSwuLi5uXX1yZXR1cm4gR3goaSx0LG4pfSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYF9nZXRPcmRlckNvbHVtbnNGbmApKX19LHF4PSgpPT4oe2xlZnQ6W10scmlnaHQ6W119KSxKeD17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uUGlubmluZzpxeCgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uUGlubmluZ0NoYW5nZTp2eChgY29sdW1uUGlubmluZ2AsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLnBpbj1uPT57bGV0IHI9ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKS5maWx0ZXIoQm9vbGVhbik7dC5zZXRDb2x1bW5QaW5uaW5nKGU9Pm49PT1gcmlnaHRgP3tsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OlsuLi4oZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSksLi4ucl19Om49PT1gbGVmdGA/e2xlZnQ6Wy4uLihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX06e2xlZnQ6KGU/LmxlZnQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSkscmlnaHQ6KGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT5lLmdldExlYWZDb2x1bW5zKCkuc29tZShlPT4oZS5jb2x1bW5EZWYuZW5hYmxlUGlubmluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtblBpbm5pbmc/P3Qub3B0aW9ucy5lbmFibGVQaW5uaW5nPz8hMCkpLGUuZ2V0SXNQaW5uZWQ9KCk9PntsZXQgbj1lLmdldExlYWZDb2x1bW5zKCkubWFwKGU9PmUuaWQpLHtsZWZ0OnIscmlnaHQ6aX09dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcsYT1uLnNvbWUoZT0+cj8uaW5jbHVkZXMoZSkpLG89bi5zb21lKGU9Pmk/LmluY2x1ZGVzKGUpKTtyZXR1cm4gYT9gbGVmdGA6bz9gcmlnaHRgOiExfSxlLmdldFBpbm5lZEluZGV4PSgpPT57dmFyIG47bGV0IHI9ZS5nZXRJc1Bpbm5lZCgpO3JldHVybiByPygobj10LmdldFN0YXRlKCkuY29sdW1uUGlubmluZyk9PW51bGx8fChuPW5bcl0pPT1udWxsP3ZvaWQgMDpuLmluZGV4T2YoZS5pZCkpPz8tMTowfX0sY3JlYXRlUm93OihlLHQpPT57ZS5nZXRDZW50ZXJWaXNpYmxlQ2VsbHM9USgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQsbik9PntsZXQgcj1bLi4udD8/W10sLi4ubj8/W11dO3JldHVybiBlLmZpbHRlcihlPT4hci5pbmNsdWRlcyhlLmNvbHVtbi5pZCkpfSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0Q2VudGVyVmlzaWJsZUNlbGxzYCkpLGUuZ2V0TGVmdFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmNvbHVtbi5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbikubWFwKGU9Pih7Li4uZSxwb3NpdGlvbjpgbGVmdGB9KSksJCh0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldExlZnRWaXNpYmxlQ2VsbHNgKSksZS5nZXRSaWdodFZpc2libGVDZWxscz1RKCgpPT5bZS5fZ2V0QWxsVmlzaWJsZUNlbGxzKCksdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YHJpZ2h0YH0pKSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0UmlnaHRWaXNpYmxlQ2VsbHNgKSl9LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtblBpbm5pbmc9dD0+ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZSh0KSxlLnJlc2V0Q29sdW1uUGlubmluZz10PT5lLnNldENvbHVtblBpbm5pbmcodD9xeCgpOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5QaW5uaW5nPz9xeCgpKSxlLmdldElzU29tZUNvbHVtbnNQaW5uZWQ9dD0+e2xldCBuPWUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nO3JldHVybiB0PyEhblt0XT8ubGVuZ3RoOiEhKG4ubGVmdD8ubGVuZ3RofHxuLnJpZ2h0Py5sZW5ndGgpfSxlLmdldExlZnRMZWFmQ29sdW1ucz1RKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5pZD09PXQpKS5maWx0ZXIoQm9vbGVhbiksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldExlZnRMZWFmQ29sdW1uc2ApKSxlLmdldFJpZ2h0TGVhZkNvbHVtbnM9USgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSwkKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0UmlnaHRMZWFmQ29sdW1uc2ApKSxlLmdldENlbnRlckxlYWZDb2x1bW5zPVEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sKGUsdCxuKT0+e2xldCByPVsuLi50Pz9bXSwuLi5uPz9bXV07cmV0dXJuIGUuZmlsdGVyKGU9PiFyLmluY2x1ZGVzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldENlbnRlckxlYWZDb2x1bW5zYCkpfX07ZnVuY3Rpb24gWXgoZSl7cmV0dXJuIGV8fCh0eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwpfXZhciBYeD17c2l6ZToxNTAsbWluU2l6ZToyMCxtYXhTaXplOjIqKjUzLTF9LFp4PSgpPT4oe3N0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxpc1Jlc2l6aW5nQ29sdW1uOiExLGNvbHVtblNpemluZ1N0YXJ0OltdfSksUXg9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Plh4LGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblNpemluZzp7fSxjb2x1bW5TaXppbmdJbmZvOlp4KCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7Y29sdW1uUmVzaXplTW9kZTpgb25FbmRgLGNvbHVtblJlc2l6ZURpcmVjdGlvbjpgbHRyYCxvbkNvbHVtblNpemluZ0NoYW5nZTp2eChgY29sdW1uU2l6aW5nYCxlKSxvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6dngoYGNvbHVtblNpemluZ0luZm9gLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRTaXplPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ1tlLmlkXTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZS5jb2x1bW5EZWYubWluU2l6ZT8/WHgubWluU2l6ZSxuPz9lLmNvbHVtbkRlZi5zaXplPz9YeC5zaXplKSxlLmNvbHVtbkRlZi5tYXhTaXplPz9YeC5tYXhTaXplKX0sZS5nZXRTdGFydD1RKGU9PltlLHJTKHQsZSksdC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ10sKHQsbik9Pm4uc2xpY2UoMCxlLmdldEluZGV4KHQpKS5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCksJCh0Lm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGdldFN0YXJ0YCkpLGUuZ2V0QWZ0ZXI9UShlPT5bZSxyUyh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKGUuZ2V0SW5kZXgodCkrMSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLCQodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBZnRlcmApKSxlLnJlc2V0U2l6ZT0oKT0+e3Quc2V0Q29sdW1uU2l6aW5nKHQ9PntsZXR7W2UuaWRdOm4sLi4ucn09dDtyZXR1cm4gcn0pfSxlLmdldENhblJlc2l6ZT0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uUmVzaXppbmc/PyEwKSxlLmdldElzUmVzaXppbmc9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdJbmZvLmlzUmVzaXppbmdDb2x1bW49PT1lLmlkfSxjcmVhdGVIZWFkZXI6KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgdD0wLG49ZT0+e2Uuc3ViSGVhZGVycy5sZW5ndGg/ZS5zdWJIZWFkZXJzLmZvckVhY2gobik6dCs9ZS5jb2x1bW4uZ2V0U2l6ZSgpPz8wfTtyZXR1cm4gbihlKSx0fSxlLmdldFN0YXJ0PSgpPT57aWYoZS5pbmRleD4wKXtsZXQgdD1lLmhlYWRlckdyb3VwLmhlYWRlcnNbZS5pbmRleC0xXTtyZXR1cm4gdC5nZXRTdGFydCgpK3QuZ2V0U2l6ZSgpfXJldHVybiAwfSxlLmdldFJlc2l6ZUhhbmRsZXI9bj0+e2xldCByPXQuZ2V0Q29sdW1uKGUuY29sdW1uLmlkKSxpPXI/LmdldENhblJlc2l6ZSgpO3JldHVybiBhPT57aWYoIXJ8fCFpfHwoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSx0UyhhKSYmYS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoPjEpKXJldHVybjtsZXQgbz1lLmdldFNpemUoKSxzPWU/ZS5nZXRMZWFmSGVhZGVycygpLm1hcChlPT5bZS5jb2x1bW4uaWQsZS5jb2x1bW4uZ2V0U2l6ZSgpXSk6W1tyLmlkLHIuZ2V0U2l6ZSgpXV0sYz10UyhhKT9NYXRoLnJvdW5kKGEudG91Y2hlc1swXS5jbGllbnRYKTphLmNsaWVudFgsbD17fSx1PShlLG4pPT57dHlwZW9mIG49PWBudW1iZXJgJiYodC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9PntsZXQgcj10Lm9wdGlvbnMuY29sdW1uUmVzaXplRGlyZWN0aW9uPT09YHJ0bGA/LTE6MSxpPShuLShlPy5zdGFydE9mZnNldD8/MCkpKnIsYT1NYXRoLm1heChpLyhlPy5zdGFydFNpemU/PzApLC0uOTk5OTk5KTtyZXR1cm4gZS5jb2x1bW5TaXppbmdTdGFydC5mb3JFYWNoKGU9PntsZXRbdCxuXT1lO2xbdF09TWF0aC5yb3VuZChNYXRoLm1heChuK24qYSwwKSoxMDApLzEwMH0pLHsuLi5lLGRlbHRhT2Zmc2V0OmksZGVsdGFQZXJjZW50YWdlOmF9fSksKHQub3B0aW9ucy5jb2x1bW5SZXNpemVNb2RlPT09YG9uQ2hhbmdlYHx8ZT09PWBlbmRgKSYmdC5zZXRDb2x1bW5TaXppbmcoZT0+KHsuLi5lLC4uLmx9KSkpfSxkPWU9PnUoYG1vdmVgLGUpLGY9ZT0+e3UoYGVuZGAsZSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxpc1Jlc2l6aW5nQ29sdW1uOiExLHN0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxjb2x1bW5TaXppbmdTdGFydDpbXX0pKX0scD1ZeChuKSxtPXttb3ZlSGFuZGxlcjplPT5kKGUuY2xpZW50WCksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZW1vdmVgLG0ubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYG1vdXNldXBgLG0udXBIYW5kbGVyKSxmKGUuY2xpZW50WCl9fSxoPXttb3ZlSGFuZGxlcjplPT4oZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGQoZS50b3VjaGVzWzBdLmNsaWVudFgpLCExKSx1cEhhbmRsZXI6ZT0+e3A/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNobW92ZWAsaC5tb3ZlSGFuZGxlcikscD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdG91Y2hlbmRgLGgudXBIYW5kbGVyKSxlLmNhbmNlbGFibGUmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSksZihlLnRvdWNoZXNbMF0/LmNsaWVudFgpfX0sZz1lUygpP3twYXNzaXZlOiExfTohMTt0UyhhKT8ocD8uYWRkRXZlbnRMaXN0ZW5lcihgdG91Y2htb3ZlYCxoLm1vdmVIYW5kbGVyLGcpLHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlcixnKSk6KHA/LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlbW92ZWAsbS5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlcixnKSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxzdGFydE9mZnNldDpjLHN0YXJ0U2l6ZTpvLGRlbHRhT2Zmc2V0OjAsZGVsdGFQZXJjZW50YWdlOjAsY29sdW1uU2l6aW5nU3RhcnQ6cyxpc1Jlc2l6aW5nQ29sdW1uOnIuaWR9KSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uU2l6aW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlKHQpLGUuc2V0Q29sdW1uU2l6aW5nSW5mbz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5TaXppbmc9dD0+e2Uuc2V0Q29sdW1uU2l6aW5nKHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nPz97fSl9LGUucmVzZXRIZWFkZXJTaXplSW5mbz10PT57ZS5zZXRDb2x1bW5TaXppbmdJbmZvKHQ/WngoKTplLmluaXRpYWxTdGF0ZS5jb2x1bW5TaXppbmdJbmZvPz9aeCgpKX0sZS5nZXRUb3RhbFNpemU9KCk9PmUuZ2V0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0TGVmdFRvdGFsU2l6ZT0oKT0+ZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wLGUuZ2V0Q2VudGVyVG90YWxTaXplPSgpPT5lLmdldENlbnRlckhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldFJpZ2h0VG90YWxTaXplPSgpPT5lLmdldFJpZ2h0SGVhZGVyR3JvdXBzKClbMF0/LmhlYWRlcnMucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApPz8wfX0sJHg9bnVsbDtmdW5jdGlvbiBlUygpe2lmKHR5cGVvZiAkeD09YGJvb2xlYW5gKXJldHVybiAkeDtsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fSxuPSgpPT57fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgdGVzdGAsbix0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdGVzdGAsbil9Y2F0Y2h7ZT0hMX1yZXR1cm4gJHg9ZSwkeH1mdW5jdGlvbiB0UyhlKXtyZXR1cm4gZS50eXBlPT09YHRvdWNoc3RhcnRgfXZhciBuUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uVmlzaWJpbGl0eTp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2U6dngoYGNvbHVtblZpc2liaWxpdHlgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS50b2dnbGVWaXNpYmlsaXR5PW49PntlLmdldENhbkhpZGUoKSYmdC5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ9Pih7Li4udCxbZS5pZF06bj8/IWUuZ2V0SXNWaXNpYmxlKCl9KSl9LGUuZ2V0SXNWaXNpYmxlPSgpPT57bGV0IG49ZS5jb2x1bW5zO3JldHVybihuLmxlbmd0aD9uLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGUoKSk6dC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHk/LltlLmlkXSk/PyEwfSxlLmdldENhbkhpZGU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVIaWRpbmc/PyEwKSxlLmdldFRvZ2dsZVZpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVWaXNpYmlsaXR5PT1udWxsfHxlLnRvZ2dsZVZpc2liaWxpdHkodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLl9nZXRBbGxWaXNpYmxlQ2VsbHM9USgoKT0+W2UuZ2V0QWxsQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLCQodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBfZ2V0QWxsVmlzaWJsZUNlbGxzYCkpLGUuZ2V0VmlzaWJsZUNlbGxzPVEoKCk9PltlLmdldExlZnRWaXNpYmxlQ2VsbHMoKSxlLmdldENlbnRlclZpc2libGVDZWxscygpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHMoKV0sKGUsdCxuKT0+Wy4uLmUsLi4udCwuLi5uXSwkKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9KHQsbik9PlEoKCk9PltuKCksbigpLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+ZS5pZCkuam9pbihgX2ApXSxlPT5lLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZT09bnVsbD92b2lkIDA6ZS5nZXRJc1Zpc2libGUoKSksJChlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsdCkpO2UuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zPXQoYGdldFZpc2libGVGbGF0Q29sdW1uc2AsKCk9PmUuZ2V0QWxsRmxhdENvbHVtbnMoKSksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpKSxlLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0TGVmdExlYWZDb2x1bW5zKCkpLGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldFJpZ2h0TGVhZkNvbHVtbnMoKSksZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSxlLnNldENvbHVtblZpc2liaWxpdHk9dD0+ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uVmlzaWJpbGl0eT10PT57ZS5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eT8/e30pfSxlLnRvZ2dsZUFsbENvbHVtbnNWaXNpYmxlPXQ9Pnt0Pz89IWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLGUuc2V0Q29sdW1uVmlzaWJpbGl0eShlLmdldEFsbExlYWZDb2x1bW5zKCkucmVkdWNlKChlLG4pPT4oey4uLmUsW24uaWRdOnR8fCEobi5nZXRDYW5IaWRlIT1udWxsJiZuLmdldENhbkhpZGUoKSl9KSx7fSkpfSxlLmdldElzQWxsQ29sdW1uc1Zpc2libGU9KCk9PiFlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZShlPT4hKGUuZ2V0SXNWaXNpYmxlIT1udWxsJiZlLmdldElzVmlzaWJsZSgpKSksZS5nZXRJc1NvbWVDb2x1bW5zVmlzaWJsZT0oKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLGUuZ2V0VG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSh0LnRhcmdldD8uY2hlY2tlZCl9fX07ZnVuY3Rpb24gclMoZSx0KXtyZXR1cm4gdD90PT09YGNlbnRlcmA/ZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnMoKTp0PT09YGxlZnRgP2UuZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1ucygpOmUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnMoKTplLmdldFZpc2libGVMZWFmQ29sdW1ucygpfXZhciBpUz17Y3JlYXRlVGFibGU6ZT0+e2UuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFJvd01vZGVsKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD0oKT0+ZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZ3x8IWUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbD9lLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKTplLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWwoKSxlLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPWUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzJiZlLm9wdGlvbnMuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyhlLGBfX2dsb2JhbF9fYCksZS5nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzPSgpPT5lLl9nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzP2UuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKTpuZXcgTWFwLGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9ZS5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMmJmUub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXM9KCk9PntpZihlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKXJldHVybiBlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKCl9fX0sYVM9e2dldEluaXRpYWxTdGF0ZTplPT4oe2dsb2JhbEZpbHRlcjp2b2lkIDAsLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25HbG9iYWxGaWx0ZXJDaGFuZ2U6dngoYGdsb2JhbEZpbHRlcmAsZSksZ2xvYmFsRmlsdGVyRm46YGF1dG9gLGdldENvbHVtbkNhbkdsb2JhbEZpbHRlcjp0PT57dmFyIG47bGV0IHI9KG49ZS5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXSk9PW51bGx8fChuPW4uX2dldEFsbENlbGxzQnlDb2x1bW5JZCgpW3QuaWRdKT09bnVsbD92b2lkIDA6bi5nZXRWYWx1ZSgpO3JldHVybiB0eXBlb2Ygcj09YHN0cmluZ2B8fHR5cGVvZiByPT1gbnVtYmVyYH19KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldENhbkdsb2JhbEZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdsb2JhbEZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUZpbHRlcnM/PyEwKSYmKCh0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyPT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyKGUpKT8/ITApJiYhIWUuYWNjZXNzb3JGbn0sY3JlYXRlVGFibGU6ZT0+e2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuPSgpPT56eC5pbmNsdWRlc1N0cmluZyxlLmdldEdsb2JhbEZpbHRlckZuPSgpPT57bGV0e2dsb2JhbEZpbHRlckZuOnR9PWUub3B0aW9ucztyZXR1cm4geXgodCk/dDp0PT09YGF1dG9gP2UuZ2V0R2xvYmFsQXV0b0ZpbHRlckZuKCk6ZS5vcHRpb25zLmZpbHRlckZucz8uW3RdPz96eFt0XX0sZS5zZXRHbG9iYWxGaWx0ZXI9dD0+e2Uub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uR2xvYmFsRmlsdGVyQ2hhbmdlKHQpfSxlLnJlc2V0R2xvYmFsRmlsdGVyPXQ9PntlLnNldEdsb2JhbEZpbHRlcih0P3ZvaWQgMDplLmluaXRpYWxTdGF0ZS5nbG9iYWxGaWx0ZXIpfX19LG9TPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtleHBhbmRlZDp7fSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkV4cGFuZGVkQ2hhbmdlOnZ4KGBleHBhbmRlZGAsZSkscGFnaW5hdGVFeHBhbmRlZFJvd3M6ITB9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRFeHBhbmRlZD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldEV4cGFuZGVkPz8hZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZyl7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRFeHBhbmRlZCgpLG49ITF9KX19LGUuc2V0RXhwYW5kZWQ9dD0+ZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKHQpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkPXQ9Pnt0Pz8hZS5nZXRJc0FsbFJvd3NFeHBhbmRlZCgpP2Uuc2V0RXhwYW5kZWQoITApOmUuc2V0RXhwYW5kZWQoe30pfSxlLnJlc2V0RXhwYW5kZWQ9dD0+e2Uuc2V0RXhwYW5kZWQodD97fTplLmluaXRpYWxTdGF0ZT8uZXhwYW5kZWQ/P3t9KX0sZS5nZXRDYW5Tb21lUm93c0V4cGFuZD0oKT0+ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PmUuZ2V0Q2FuRXhwYW5kKCkpLGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlcj0oKT0+dD0+e3QucGVyc2lzdD09bnVsbHx8dC5wZXJzaXN0KCksZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKX0sZS5nZXRJc1NvbWVSb3dzRXhwYW5kZWQ9KCk9PntsZXQgdD1lLmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuIHQ9PT0hMHx8T2JqZWN0LnZhbHVlcyh0KS5zb21lKEJvb2xlYW4pfSxlLmdldElzQWxsUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0eXBlb2YgdD09YGJvb2xlYW5gP3Q9PT0hMDohKCFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fGUuZ2V0Um93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PiFlLmdldElzRXhwYW5kZWQoKSkpfSxlLmdldEV4cGFuZGVkRGVwdGg9KCk9PntsZXQgdD0wO3JldHVybihlLmdldFN0YXRlKCkuZXhwYW5kZWQ9PT0hMD9PYmplY3Qua2V5cyhlLmdldFJvd01vZGVsKCkucm93c0J5SWQpOk9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5leHBhbmRlZCkpLmZvckVhY2goZT0+e2xldCBuPWUuc3BsaXQoYC5gKTt0PU1hdGgubWF4KHQsbi5sZW5ndGgpfSksdH0sZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsPSgpPT5lLmdldFNvcnRlZFJvd01vZGVsKCksZS5nZXRFeHBhbmRlZFJvd01vZGVsPSgpPT4oIWUuX2dldEV4cGFuZGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsJiYoZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZ3x8IWUuX2dldEV4cGFuZGVkUm93TW9kZWw/ZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCk6ZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVFeHBhbmRlZD1uPT57dC5zZXRFeHBhbmRlZChyPT57bGV0IGk9cj09PSEwfHwhIShyIT1udWxsJiZyW2UuaWRdKSxhPXt9O2lmKHI9PT0hMD9PYmplY3Qua2V5cyh0LmdldFJvd01vZGVsKCkucm93c0J5SWQpLmZvckVhY2goZT0+e2FbZV09ITB9KTphPXIsbj8/PSFpLCFpJiZuKXJldHVybnsuLi5hLFtlLmlkXTohMH07aWYoaSYmIW4pe2xldHtbZS5pZF06dCwuLi5ufT1hO3JldHVybiBufXJldHVybiByfSl9LGUuZ2V0SXNFeHBhbmRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4hISgodC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKT8/KG49PT0hMHx8bj8uW2UuaWRdKSl9LGUuZ2V0Q2FuRXhwYW5kPSgpPT57dmFyIG47cmV0dXJuKHQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQoZSkpPz8oKHQub3B0aW9ucy5lbmFibGVFeHBhbmRpbmc/PyEwKSYmISEoKG49ZS5zdWJSb3dzKSE9bnVsbCYmbi5sZW5ndGgpKX0sZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZD0oKT0+e2xldCBuPSEwLHI9ZTtmb3IoO24mJnIucGFyZW50SWQ7KXI9dC5nZXRSb3coci5wYXJlbnRJZCwhMCksbj1yLmdldElzRXhwYW5kZWQoKTtyZXR1cm4gbn0sZS5nZXRUb2dnbGVFeHBhbmRlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhbkV4cGFuZCgpO3JldHVybigpPT57dCYmZS50b2dnbGVFeHBhbmRlZCgpfX19fSxzUz0wLGNTPTEwLGxTPSgpPT4oe3BhZ2VJbmRleDpzUyxwYWdlU2l6ZTpjU30pLHVTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHsuLi5lLHBhZ2luYXRpb246ey4uLmxTKCksLi4uZT8ucGFnaW5hdGlvbn19KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUGFnaW5hdGlvbkNoYW5nZTp2eChgcGFnaW5hdGlvbmAsZSl9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRQYWdlSW5kZXg9KCk9PntpZighdCl7ZS5fcXVldWUoKCk9Pnt0PSEwfSk7cmV0dXJufWlmKGUub3B0aW9ucy5hdXRvUmVzZXRBbGw/P2Uub3B0aW9ucy5hdXRvUmVzZXRQYWdlSW5kZXg/PyFlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbil7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRQYWdlSW5kZXgoKSxuPSExfSl9fSxlLnNldFBhZ2luYXRpb249dD0+ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUGFnaW5hdGlvbkNoYW5nZShlPT5feCh0LGUpKSxlLnJlc2V0UGFnaW5hdGlvbj10PT57ZS5zZXRQYWdpbmF0aW9uKHQ/bFMoKTplLmluaXRpYWxTdGF0ZS5wYWdpbmF0aW9uPz9sUygpKX0sZS5zZXRQYWdlSW5kZXg9dD0+e2Uuc2V0UGFnaW5hdGlvbihuPT57bGV0IHI9X3godCxuLnBhZ2VJbmRleCksaT1lLm9wdGlvbnMucGFnZUNvdW50PT09dm9pZCAwfHxlLm9wdGlvbnMucGFnZUNvdW50PT09LTE/MioqNTMtMTplLm9wdGlvbnMucGFnZUNvdW50LTE7cmV0dXJuIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGkpKSx7Li4ubixwYWdlSW5kZXg6cn19KX0sZS5yZXNldFBhZ2VJbmRleD10PT57dmFyIG47ZS5zZXRQYWdlSW5kZXgodD9zUzooKG49ZS5pbml0aWFsU3RhdGUpPT1udWxsfHwobj1uLnBhZ2luYXRpb24pPT1udWxsP3ZvaWQgMDpuLnBhZ2VJbmRleCk/P3NTKX0sZS5yZXNldFBhZ2VTaXplPXQ9Pnt2YXIgbjtlLnNldFBhZ2VTaXplKHQ/Y1M6KChuPWUuaW5pdGlhbFN0YXRlKT09bnVsbHx8KG49bi5wYWdpbmF0aW9uKT09bnVsbD92b2lkIDA6bi5wYWdlU2l6ZSk/P2NTKX0sZS5zZXRQYWdlU2l6ZT10PT57ZS5zZXRQYWdpbmF0aW9uKGU9PntsZXQgbj1NYXRoLm1heCgxLF94KHQsZS5wYWdlU2l6ZSkpLHI9ZS5wYWdlU2l6ZSplLnBhZ2VJbmRleCxpPU1hdGguZmxvb3Ioci9uKTtyZXR1cm57Li4uZSxwYWdlSW5kZXg6aSxwYWdlU2l6ZTpufX0pfSxlLnNldFBhZ2VDb3VudD10PT5lLnNldFBhZ2luYXRpb24obj0+e2xldCByPV94KHQsZS5vcHRpb25zLnBhZ2VDb3VudD8/LTEpO3JldHVybiB0eXBlb2Ygcj09YG51bWJlcmAmJihyPU1hdGgubWF4KC0xLHIpKSx7Li4ubixwYWdlQ291bnQ6cn19KSxlLmdldFBhZ2VPcHRpb25zPVEoKCk9PltlLmdldFBhZ2VDb3VudCgpXSxlPT57bGV0IHQ9W107cmV0dXJuIGUmJmU+MCYmKHQ9Wy4uLkFycmF5KGUpXS5maWxsKG51bGwpLm1hcCgoZSx0KT0+dCkpLHR9LCQoZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0UGFnZU9wdGlvbnNgKSksZS5nZXRDYW5QcmV2aW91c1BhZ2U9KCk9PmUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLnBhZ2VJbmRleD4wLGUuZ2V0Q2FuTmV4dFBhZ2U9KCk9PntsZXR7cGFnZUluZGV4OnR9PWUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLG49ZS5nZXRQYWdlQ291bnQoKTtyZXR1cm4gbj09PS0xfHxuIT09MCYmdDxuLTF9LGUucHJldmlvdXNQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lLTEpLGUubmV4dFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGU9PmUrMSksZS5maXJzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KDApLGUubGFzdFBhZ2U9KCk9PmUuc2V0UGFnZUluZGV4KGUuZ2V0UGFnZUNvdW50KCktMSksZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWw9KCk9PmUuZ2V0RXhwYW5kZWRSb3dNb2RlbCgpLGUuZ2V0UGFnaW5hdGlvblJvd01vZGVsPSgpPT4oIWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCYmZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbCYmKGUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD1lLm9wdGlvbnMuZ2V0UGFnaW5hdGlvblJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbnx8IWUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbD9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpOmUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCgpKSxlLmdldFBhZ2VDb3VudD0oKT0+ZS5vcHRpb25zLnBhZ2VDb3VudD8/TWF0aC5jZWlsKGUuZ2V0Um93Q291bnQoKS9lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlU2l6ZSksZS5nZXRSb3dDb3VudD0oKT0+ZS5vcHRpb25zLnJvd0NvdW50Pz9lLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCgpLnJvd3MubGVuZ3RofX0sZFM9KCk9Pih7dG9wOltdLGJvdHRvbTpbXX0pLGZTPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtyb3dQaW5uaW5nOmRTKCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Sb3dQaW5uaW5nQ2hhbmdlOnZ4KGByb3dQaW5uaW5nYCxlKX0pLGNyZWF0ZVJvdzooZSx0KT0+e2UucGluPShuLHIsaSk9PntsZXQgYT1yP2UuZ2V0TGVhZlJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10sbz1pP2UuZ2V0UGFyZW50Um93cygpLm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KTpbXSxzPW5ldyBTZXQoWy4uLm8sZS5pZCwuLi5hXSk7dC5zZXRSb3dQaW5uaW5nKGU9Pm49PT1gYm90dG9tYD97dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTpbLi4uKGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV19Om49PT1gdG9wYD97dG9wOlsuLi4oZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSwuLi5BcnJheS5mcm9tKHMpXSxib3R0b206KGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSl9Ont0b3A6KGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT57bGV0e2VuYWJsZVJvd1Bpbm5pbmc6bixlbmFibGVQaW5uaW5nOnJ9PXQub3B0aW9ucztyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/bihlKTpuPz9yPz8hMH0sZS5nZXRJc1Bpbm5lZD0oKT0+e2xldCBuPVtlLmlkXSx7dG9wOnIsYm90dG9tOml9PXQuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YHRvcGA6bz9gYm90dG9tYDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e2xldCBuPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gbj8oKG49PT1gdG9wYD90LmdldFRvcFJvd3MoKTp0LmdldEJvdHRvbVJvd3MoKSk/Lm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KSk/LmluZGV4T2YoZS5pZCk/Py0xOi0xfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93UGlubmluZz10PT5lLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlKHQpLGUucmVzZXRSb3dQaW5uaW5nPXQ9PmUuc2V0Um93UGlubmluZyh0P2RTKCk6ZS5pbml0aWFsU3RhdGU/LnJvd1Bpbm5pbmc/P2RTKCkpLGUuZ2V0SXNTb21lUm93c1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi50b3A/Lmxlbmd0aHx8bi5ib3R0b20/Lmxlbmd0aCl9LGUuX2dldFBpbm5lZFJvd3M9KHQsbixyKT0+KGUub3B0aW9ucy5rZWVwUGlubmVkUm93cz8/ITA/KG4/P1tdKS5tYXAodD0+e2xldCBuPWUuZ2V0Um93KHQsITApO3JldHVybiBuLmdldElzQWxsUGFyZW50c0V4cGFuZGVkKCk/bjpudWxsfSk6KG4/P1tdKS5tYXAoZT0+dC5maW5kKHQ9PnQuaWQ9PT1lKSkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOnJ9KSksZS5nZXRUb3BSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3BdLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgdG9wYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFRvcFJvd3NgKSksZS5nZXRCb3R0b21Sb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgYm90dG9tYCksJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEJvdHRvbVJvd3NgKSksZS5nZXRDZW50ZXJSb3dzPVEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3AsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwoZSx0LG4pPT57bGV0IHI9bmV3IFNldChbLi4udD8/W10sLi4ubj8/W11dKTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaGFzKGUuaWQpKX0sJChlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclJvd3NgKSl9fSxwUz17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93U2VsZWN0aW9uOnt9LC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93U2VsZWN0aW9uQ2hhbmdlOnZ4KGByb3dTZWxlY3Rpb25gLGUpLGVuYWJsZVJvd1NlbGVjdGlvbjohMCxlbmFibGVNdWx0aVJvd1NlbGVjdGlvbjohMCxlbmFibGVTdWJSb3dTZWxlY3Rpb246ITB9KSxjcmVhdGVUYWJsZTplPT57ZS5zZXRSb3dTZWxlY3Rpb249dD0+ZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dTZWxlY3Rpb25DaGFuZ2UodCksZS5yZXNldFJvd1NlbGVjdGlvbj10PT5lLnNldFJvd1NlbGVjdGlvbih0P3t9OmUuaW5pdGlhbFN0YXRlLnJvd1NlbGVjdGlvbj8/e30pLGUudG9nZ2xlQWxsUm93c1NlbGVjdGVkPXQ9PntlLnNldFJvd1NlbGVjdGlvbihuPT57dD10PT09dm9pZCAwPyFlLmdldElzQWxsUm93c1NlbGVjdGVkKCk6dDtsZXQgcj17Li4ubn0saT1lLmdldFByZUdyb3VwZWRSb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiB0P2kuZm9yRWFjaChlPT57ZS5nZXRDYW5TZWxlY3QoKSYmKHJbZS5pZF09ITApfSk6aS5mb3JFYWNoKGU9PntkZWxldGUgcltlLmlkXX0pLHJ9KX0sZS50b2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkPXQ9PmUuc2V0Um93U2VsZWN0aW9uKG49PntsZXQgcj10PT09dm9pZCAwPyFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpOnQsaT17Li4ubn07cmV0dXJuIGUuZ2V0Um93TW9kZWwoKS5yb3dzLmZvckVhY2godD0+e21TKGksdC5pZCxyLCEwLGUpfSksaX0pLGUuZ2V0UHJlU2VsZWN0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRDb3JlUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9oUyhlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWw9USgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/aFMoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbD1RKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldFNvcnRlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/aFMoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0sJChlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldElzQWxsUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Mse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hISh0Lmxlbmd0aCYmT2JqZWN0LmtleXMobikubGVuZ3RoKTtyZXR1cm4gciYmdC5zb21lKGU9PmUuZ2V0Q2FuU2VsZWN0KCkmJiFuW2UuaWRdKSYmKHI9ITEpLHJ9LGUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5maWx0ZXIoZT0+ZS5nZXRDYW5TZWxlY3QoKSkse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hIXQubGVuZ3RoO3JldHVybiByJiZ0LnNvbWUoZT0+IW5bZS5pZF0pJiYocj0hMSkscn0sZS5nZXRJc1NvbWVSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1PYmplY3Qua2V5cyhlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uPz97fSkubGVuZ3RoO3JldHVybiB0PjAmJnQ8ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MubGVuZ3RofSxlLmdldElzU29tZVBhZ2VSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpJiZ0LmZpbHRlcihlPT5lLmdldENhblNlbGVjdCgpKS5zb21lKGU9PmUuZ2V0SXNTZWxlY3RlZCgpfHxlLmdldElzU29tZVNlbGVjdGVkKCkpfSxlLmdldFRvZ2dsZUFsbFJvd3NTZWxlY3RlZEhhbmRsZXI9KCk9PnQ9PntlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX0sZS5nZXRUb2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkSGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX19LGNyZWF0ZVJvdzooZSx0KT0+e2UudG9nZ2xlU2VsZWN0ZWQ9KG4scik9PntsZXQgaT1lLmdldElzU2VsZWN0ZWQoKTt0LnNldFJvd1NlbGVjdGlvbihhPT57aWYobj1uPT09dm9pZCAwPyFpOm4sZS5nZXRDYW5TZWxlY3QoKSYmaT09PW4pcmV0dXJuIGE7bGV0IG89ey4uLmF9O3JldHVybiBtUyhvLGUuaWQsbixyPy5zZWxlY3RDaGlsZHJlbj8/ITAsdCksb30pfSxlLmdldElzU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gZ1MoZSxuKX0sZS5nZXRJc1NvbWVTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiBfUyhlLG4pPT09YHNvbWVgfSxlLmdldElzQWxsU3ViUm93c1NlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIF9TKGUsbik9PT1gYWxsYH0sZS5nZXRDYW5TZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRDYW5TZWxlY3RTdWJSb3dzPSgpPT50eXBlb2YgdC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb24/PyEwLGUuZ2V0Q2FuTXVsdGlTZWxlY3Q9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uKGUpOnQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbj8/ITAsZS5nZXRUb2dnbGVTZWxlY3RlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhblNlbGVjdCgpO3JldHVybiBuPT57dCYmZS50b2dnbGVTZWxlY3RlZChuLnRhcmdldD8uY2hlY2tlZCl9fX19LG1TPShlLHQsbixyLGkpPT57dmFyIGE7bGV0IG89aS5nZXRSb3codCwhMCk7bj8oby5nZXRDYW5NdWx0aVNlbGVjdCgpfHxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PmRlbGV0ZSBlW3RdKSxvLmdldENhblNlbGVjdCgpJiYoZVt0XT0hMCkpOmRlbGV0ZSBlW3RdLHImJihhPW8uc3ViUm93cykhPW51bGwmJmEubGVuZ3RoJiZvLmdldENhblNlbGVjdFN1YlJvd3MoKSYmby5zdWJSb3dzLmZvckVhY2godD0+bVMoZSx0LmlkLG4scixpKSl9O2Z1bmN0aW9uIGhTKGUsdCl7bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixyPVtdLGk9e30sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChlPT57dmFyIHQ7bGV0IG89Z1MoZSxuKTtpZihvJiYoci5wdXNoKGUpLGlbZS5pZF09ZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlPXsuLi5lLHN1YlJvd3M6YShlLnN1YlJvd3MpfSksbylyZXR1cm4gZX0pLmZpbHRlcihCb29sZWFuKX07cmV0dXJue3Jvd3M6YSh0LnJvd3MpLGZsYXRSb3dzOnIscm93c0J5SWQ6aX19ZnVuY3Rpb24gZ1MoZSx0KXtyZXR1cm4gdFtlLmlkXT8/ITF9ZnVuY3Rpb24gX1MoZSx0LG4pe3ZhciByO2lmKCEoKHI9ZS5zdWJSb3dzKSE9bnVsbCYmci5sZW5ndGgpKXJldHVybiExO2xldCBpPSEwLGE9ITE7cmV0dXJuIGUuc3ViUm93cy5mb3JFYWNoKGU9PntpZighKGEmJiFpKSYmKGUuZ2V0Q2FuU2VsZWN0KCkmJihnUyhlLHQpP2E9ITA6aT0hMSksZS5zdWJSb3dzJiZlLnN1YlJvd3MubGVuZ3RoKSl7bGV0IG49X1MoZSx0KTtuPT09YGFsbGA/YT0hMDoobj09PWBzb21lYCYmKGE9ITApLGk9ITEpfX0pLGk/YGFsbGA6YT9gc29tZWA6ITF9dmFyIHZTPS8oWzAtOV0rKS9nbSx5Uz0oZSx0LG4pPT5EUyhFUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLEVTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLGJTPShlLHQsbik9PkRTKEVTKGUuZ2V0VmFsdWUobikpLEVTKHQuZ2V0VmFsdWUobikpKSx4Uz0oZSx0LG4pPT5UUyhFUyhlLmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpLEVTKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLFNTPShlLHQsbik9PlRTKEVTKGUuZ2V0VmFsdWUobikpLEVTKHQuZ2V0VmFsdWUobikpKSxDUz0oZSx0LG4pPT57bGV0IHI9ZS5nZXRWYWx1ZShuKSxpPXQuZ2V0VmFsdWUobik7cmV0dXJuIHI+aT8xOnI8aT8tMTowfSx3Uz0oZSx0LG4pPT5UUyhlLmdldFZhbHVlKG4pLHQuZ2V0VmFsdWUobikpO2Z1bmN0aW9uIFRTKGUsdCl7cmV0dXJuIGU9PT10PzA6ZT50PzE6LTF9ZnVuY3Rpb24gRVMoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD9pc05hTihlKXx8ZT09PTEvMHx8ZT09PS0xLzA/YGA6U3RyaW5nKGUpOnR5cGVvZiBlPT1gc3RyaW5nYD9lOmBgfWZ1bmN0aW9uIERTKGUsdCl7bGV0IG49ZS5zcGxpdCh2UykuZmlsdGVyKEJvb2xlYW4pLHI9dC5zcGxpdCh2UykuZmlsdGVyKEJvb2xlYW4pO2Zvcig7bi5sZW5ndGgmJnIubGVuZ3RoOyl7bGV0IGU9bi5zaGlmdCgpLHQ9ci5zaGlmdCgpLGk9cGFyc2VJbnQoZSwxMCksYT1wYXJzZUludCh0LDEwKSxvPVtpLGFdLnNvcnQoKTtpZihpc05hTihvWzBdKSl7aWYoZT50KXJldHVybiAxO2lmKHQ+ZSlyZXR1cm4tMTtjb250aW51ZX1pZihpc05hTihvWzFdKSlyZXR1cm4gaXNOYU4oaSk/LTE6MTtpZihpPmEpcmV0dXJuIDE7aWYoYT5pKXJldHVybi0xfXJldHVybiBuLmxlbmd0aC1yLmxlbmd0aH12YXIgT1M9e2FscGhhbnVtZXJpYzp5UyxhbHBoYW51bWVyaWNDYXNlU2Vuc2l0aXZlOmJTLHRleHQ6eFMsdGV4dENhc2VTZW5zaXRpdmU6U1MsZGF0ZXRpbWU6Q1MsYmFzaWM6d1N9LGtTPVtFeCxuUyxLeCxKeCxreCxWeCxpUyxhUyx7Z2V0SW5pdGlhbFN0YXRlOmU9Pih7c29ydGluZzpbXSwuLi5lfSksZ2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHtzb3J0aW5nRm46YGF1dG9gLHNvcnRVbmRlZmluZWQ6MX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Tb3J0aW5nQ2hhbmdlOnZ4KGBzb3J0aW5nYCxlKSxpc011bHRpU29ydEV2ZW50OmU9PmUuc2hpZnRLZXl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldEF1dG9Tb3J0aW5nRm49KCk9PntsZXQgbj10LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93cy5zbGljZSgxMCkscj0hMTtmb3IobGV0IHQgb2Ygbil7bGV0IG49dD8uZ2V0VmFsdWUoZS5pZCk7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09YFtvYmplY3QgRGF0ZV1gKXJldHVybiBPUy5kYXRldGltZTtpZih0eXBlb2Ygbj09YHN0cmluZ2AmJihyPSEwLG4uc3BsaXQodlMpLmxlbmd0aD4xKSlyZXR1cm4gT1MuYWxwaGFudW1lcmljfXJldHVybiByP09TLnRleHQ6T1MuYmFzaWN9LGUuZ2V0QXV0b1NvcnREaXI9KCk9PnR5cGVvZiB0LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk9PWBzdHJpbmdgP2Bhc2NgOmBkZXNjYCxlLmdldFNvcnRpbmdGbj0oKT0+e2lmKCFlKXRocm93IEVycm9yKCk7cmV0dXJuIHl4KGUuY29sdW1uRGVmLnNvcnRpbmdGbik/ZS5jb2x1bW5EZWYuc29ydGluZ0ZuOmUuY29sdW1uRGVmLnNvcnRpbmdGbj09PWBhdXRvYD9lLmdldEF1dG9Tb3J0aW5nRm4oKTp0Lm9wdGlvbnMuc29ydGluZ0Zucz8uW2UuY29sdW1uRGVmLnNvcnRpbmdGbl0/P09TW2UuY29sdW1uRGVmLnNvcnRpbmdGbl19LGUudG9nZ2xlU29ydGluZz0obixyKT0+e2xldCBpPWUuZ2V0TmV4dFNvcnRpbmdPcmRlcigpLGE9biE9bnVsbDt0LnNldFNvcnRpbmcobz0+e2xldCBzPW8/LmZpbmQodD0+dC5pZD09PWUuaWQpLGM9bz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSxsPVtdLHUsZD1hP246aT09PWBkZXNjYDtyZXR1cm4gdT1vIT1udWxsJiZvLmxlbmd0aCYmZS5nZXRDYW5NdWx0aVNvcnQoKSYmcj9zP2B0b2dnbGVgOmBhZGRgOm8hPW51bGwmJm8ubGVuZ3RoJiZjIT09by5sZW5ndGgtMT9gcmVwbGFjZWA6cz9gdG9nZ2xlYDpgcmVwbGFjZWAsdT09PWB0b2dnbGVgJiYoYXx8aXx8KHU9YHJlbW92ZWApKSx1PT09YGFkZGA/KGw9Wy4uLm8se2lkOmUuaWQsZGVzYzpkfV0sbC5zcGxpY2UoMCxsLmxlbmd0aC0odC5vcHRpb25zLm1heE11bHRpU29ydENvbENvdW50Pz8yKio1My0xKSkpOmw9dT09PWB0b2dnbGVgP28ubWFwKHQ9PnQuaWQ9PT1lLmlkP3suLi50LGRlc2M6ZH06dCk6dT09PWByZW1vdmVgP28uZmlsdGVyKHQ9PnQuaWQhPT1lLmlkKTpbe2lkOmUuaWQsZGVzYzpkfV0sbH0pfSxlLmdldEZpcnN0U29ydERpcj0oKT0+ZS5jb2x1bW5EZWYuc29ydERlc2NGaXJzdD8/dC5vcHRpb25zLnNvcnREZXNjRmlyc3Q/P2UuZ2V0QXV0b1NvcnREaXIoKT09PWBkZXNjYD9gZGVzY2A6YGFzY2AsZS5nZXROZXh0U29ydGluZ09yZGVyPW49PntsZXQgcj1lLmdldEZpcnN0U29ydERpcigpLGk9ZS5nZXRJc1NvcnRlZCgpO3JldHVybiBpP2khPT1yJiYodC5vcHRpb25zLmVuYWJsZVNvcnRpbmdSZW1vdmFsPz8hMCkmJighbnx8KHQub3B0aW9ucy5lbmFibGVNdWx0aVJlbW92ZT8/ITApKT8hMTppPT09YGRlc2NgP2Bhc2NgOmBkZXNjYDpyfSxlLmdldENhblNvcnQ9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVTb3J0aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlU29ydGluZz8/ITApJiYhIWUuYWNjZXNzb3JGbixlLmdldENhbk11bHRpU29ydD0oKT0+ZS5jb2x1bW5EZWYuZW5hYmxlTXVsdGlTb3J0Pz90Lm9wdGlvbnMuZW5hYmxlTXVsdGlTb3J0Pz8hIWUuYWNjZXNzb3JGbixlLmdldElzU29ydGVkPSgpPT57bGV0IG49dC5nZXRTdGF0ZSgpLnNvcnRpbmc/LmZpbmQodD0+dC5pZD09PWUuaWQpO3JldHVybiBuP24uZGVzYz9gZGVzY2A6YGFzY2A6ITF9LGUuZ2V0U29ydEluZGV4PSgpPT50LmdldFN0YXRlKCkuc29ydGluZz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5jbGVhclNvcnRpbmc9KCk9Pnt0LnNldFNvcnRpbmcodD0+dCE9bnVsbCYmdC5sZW5ndGg/dC5maWx0ZXIodD0+dC5pZCE9PWUuaWQpOltdKX0sZS5nZXRUb2dnbGVTb3J0aW5nSGFuZGxlcj0oKT0+e2xldCBuPWUuZ2V0Q2FuU29ydCgpO3JldHVybiByPT57biYmKHIucGVyc2lzdD09bnVsbHx8ci5wZXJzaXN0KCksZS50b2dnbGVTb3J0aW5nPT1udWxsfHxlLnRvZ2dsZVNvcnRpbmcodm9pZCAwLGUuZ2V0Q2FuTXVsdGlTb3J0KCk/dC5vcHRpb25zLmlzTXVsdGlTb3J0RXZlbnQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5pc011bHRpU29ydEV2ZW50KHIpOiExKSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0U29ydGluZz10PT5lLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Tb3J0aW5nQ2hhbmdlKHQpLGUucmVzZXRTb3J0aW5nPXQ9PntlLnNldFNvcnRpbmcodD9bXTplLmluaXRpYWxTdGF0ZT8uc29ydGluZz8/W10pfSxlLmdldFByZVNvcnRlZFJvd01vZGVsPSgpPT5lLmdldEdyb3VwZWRSb3dNb2RlbCgpLGUuZ2V0U29ydGVkUm93TW9kZWw9KCk9PighZS5fZ2V0U29ydGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbCYmKGUuX2dldFNvcnRlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFNvcnRpbmd8fCFlLl9nZXRTb3J0ZWRSb3dNb2RlbD9lLmdldFByZVNvcnRlZFJvd01vZGVsKCk6ZS5fZ2V0U29ydGVkUm93TW9kZWwoKSl9fSxXeCxvUyx1UyxmUyxwUyxReF07ZnVuY3Rpb24gQVMoZSl7bGV0IHQ9Wy4uLmtTLC4uLmUuX2ZlYXR1cmVzPz9bXV0sbj17X2ZlYXR1cmVzOnR9LHI9bi5fZmVhdHVyZXMucmVkdWNlKChlLHQpPT5PYmplY3QuYXNzaWduKGUsdC5nZXREZWZhdWx0T3B0aW9ucz09bnVsbD92b2lkIDA6dC5nZXREZWZhdWx0T3B0aW9ucyhuKSkse30pLGk9ZT0+bi5vcHRpb25zLm1lcmdlT3B0aW9ucz9uLm9wdGlvbnMubWVyZ2VPcHRpb25zKHIsZSk6ey4uLnIsLi4uZX0sYT17Li4uZS5pbml0aWFsU3RhdGU/P3t9fTtuLl9mZWF0dXJlcy5mb3JFYWNoKGU9PnthPShlLmdldEluaXRpYWxTdGF0ZT09bnVsbD92b2lkIDA6ZS5nZXRJbml0aWFsU3RhdGUoYSkpPz9hfSk7bGV0IG89W10scz0hMSxjPXtfZmVhdHVyZXM6dCxvcHRpb25zOnsuLi5yLC4uLmV9LGluaXRpYWxTdGF0ZTphLF9xdWV1ZTplPT57by5wdXNoKGUpLHN8fChzPSEwLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pntmb3IoO28ubGVuZ3RoOylvLnNoaWZ0KCkoKTtzPSExfSkuY2F0Y2goZT0+c2V0VGltZW91dCgoKT0+e3Rocm93IGV9KSkpfSxyZXNldDooKT0+e24uc2V0U3RhdGUobi5pbml0aWFsU3RhdGUpfSxzZXRPcHRpb25zOmU9PntsZXQgdD1feChlLG4ub3B0aW9ucyk7bi5vcHRpb25zPWkodCl9LGdldFN0YXRlOigpPT5uLm9wdGlvbnMuc3RhdGUsc2V0U3RhdGU6ZT0+e24ub3B0aW9ucy5vblN0YXRlQ2hhbmdlPT1udWxsfHxuLm9wdGlvbnMub25TdGF0ZUNoYW5nZShlKX0sX2dldFJvd0lkOihlLHQscik9PihuLm9wdGlvbnMuZ2V0Um93SWQ9PW51bGw/dm9pZCAwOm4ub3B0aW9ucy5nZXRSb3dJZChlLHQscikpPz9gJHtyP1tyLmlkLHRdLmpvaW4oYC5gKTp0fWAsZ2V0Q29yZVJvd01vZGVsOigpPT4obi5fZ2V0Q29yZVJvd01vZGVsfHw9bi5vcHRpb25zLmdldENvcmVSb3dNb2RlbChuKSxuLl9nZXRDb3JlUm93TW9kZWwoKSksZ2V0Um93TW9kZWw6KCk9Pm4uZ2V0UGFnaW5hdGlvblJvd01vZGVsKCksZ2V0Um93OihlLHQpPT57bGV0IHI9KHQ/bi5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTpuLmdldFJvd01vZGVsKCkpLnJvd3NCeUlkW2VdO2lmKCFyJiYocj1uLmdldENvcmVSb3dNb2RlbCgpLnJvd3NCeUlkW2VdLCFyKSl0aHJvdyBFcnJvcigpO3JldHVybiByfSxfZ2V0RGVmYXVsdENvbHVtbkRlZjpRKCgpPT5bbi5vcHRpb25zLmRlZmF1bHRDb2x1bW5dLGU9PihlPz89e30se2hlYWRlcjplPT57bGV0IHQ9ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZjtyZXR1cm4gdC5hY2Nlc3NvcktleT90LmFjY2Vzc29yS2V5OnQuYWNjZXNzb3JGbj90LmlkOm51bGx9LGNlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLnJlbmRlclZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSwuLi5uLl9mZWF0dXJlcy5yZWR1Y2UoKGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0LmdldERlZmF1bHRDb2x1bW5EZWY9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdENvbHVtbkRlZigpKSx7fSksLi4uZX0pLCQoZSxgZGVidWdDb2x1bW5zYCxgX2dldERlZmF1bHRDb2x1bW5EZWZgKSksX2dldENvbHVtbkRlZnM6KCk9Pm4ub3B0aW9ucy5jb2x1bW5zLGdldEFsbENvbHVtbnM6USgoKT0+W24uX2dldENvbHVtbkRlZnMoKV0sZT0+e2xldCB0PWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksZS5tYXAoZT0+e2xldCBhPUN4KG4sZSxpLHIpLG89ZTtyZXR1cm4gYS5jb2x1bW5zPW8uY29sdW1ucz90KG8uY29sdW1ucyxhLGkrMSk6W10sYX0pfTtyZXR1cm4gdChlKX0sJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxDb2x1bW5zYCkpLGdldEFsbEZsYXRDb2x1bW5zOlEoKCk9PltuLmdldEFsbENvbHVtbnMoKV0sZT0+ZS5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSksJChlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc2ApKSxfZ2V0QWxsRmxhdENvbHVtbnNCeUlkOlEoKCk9PltuLmdldEFsbEZsYXRDb2x1bW5zKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmlkXT10LGUpLHt9KSwkKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbEZsYXRDb2x1bW5zQnlJZGApKSxnZXRBbGxMZWFmQ29sdW1uczpRKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCksbi5fZ2V0T3JkZXJDb2x1bW5zRm4oKV0sKGUsdCk9PnQoZS5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpLCQoZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsTGVhZkNvbHVtbnNgKSksZ2V0Q29sdW1uOmU9Pm4uX2dldEFsbEZsYXRDb2x1bW5zQnlJZCgpW2VdfTtPYmplY3QuYXNzaWduKG4sYyk7Zm9yKGxldCBlPTA7ZTxuLl9mZWF0dXJlcy5sZW5ndGg7ZSsrKXtsZXQgdD1uLl9mZWF0dXJlc1tlXTt0PT1udWxsfHx0LmNyZWF0ZVRhYmxlPT1udWxsfHx0LmNyZWF0ZVRhYmxlKG4pfXJldHVybiBufWZ1bmN0aW9uIGpTKCl7cmV0dXJuIGU9PlEoKCk9PltlLm9wdGlvbnMuZGF0YV0sdD0+e2xldCBuPXtyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxyPWZ1bmN0aW9uKHQsaSxhKXtpPT09dm9pZCAwJiYoaT0wKTtsZXQgbz1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7bGV0IGw9T3goZSxlLl9nZXRSb3dJZCh0W2NdLGMsYSksdFtjXSxjLGksdm9pZCAwLGE/LmlkKTtpZihuLmZsYXRSb3dzLnB1c2gobCksbi5yb3dzQnlJZFtsLmlkXT1sLG8ucHVzaChsKSxlLm9wdGlvbnMuZ2V0U3ViUm93cyl7dmFyIHM7bC5vcmlnaW5hbFN1YlJvd3M9ZS5vcHRpb25zLmdldFN1YlJvd3ModFtjXSxjKSwocz1sLm9yaWdpbmFsU3ViUm93cykhPW51bGwmJnMubGVuZ3RoJiYobC5zdWJSb3dzPXIobC5vcmlnaW5hbFN1YlJvd3MsaSsxLGwpKX19cmV0dXJuIG99O3JldHVybiBuLnJvd3M9cih0KSxufSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBNUygpe3JldHVybiBlPT5RKCgpPT5bZS5nZXRTdGF0ZSgpLnNvcnRpbmcsZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpXSwodCxuKT0+e2lmKCFuLnJvd3MubGVuZ3RofHwhKHQhPW51bGwmJnQubGVuZ3RoKSlyZXR1cm4gbjtsZXQgcj1lLmdldFN0YXRlKCkuc29ydGluZyxpPVtdLGE9ci5maWx0ZXIodD0+ZS5nZXRDb2x1bW4odC5pZCk/LmdldENhblNvcnQoKSksbz17fTthLmZvckVhY2godD0+e2xldCBuPWUuZ2V0Q29sdW1uKHQuaWQpO24mJihvW3QuaWRdPXtzb3J0VW5kZWZpbmVkOm4uY29sdW1uRGVmLnNvcnRVbmRlZmluZWQsaW52ZXJ0U29ydGluZzpuLmNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nLHNvcnRpbmdGbjpuLmdldFNvcnRpbmdGbigpfSl9KTtsZXQgcz1lPT57bGV0IHQ9ZS5tYXAoZT0+KHsuLi5lfSkpO3JldHVybiB0LnNvcnQoKGUsdCk9Pntmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rPTEpe2xldCByPWFbbl0saT1vW3IuaWRdLHM9aS5zb3J0VW5kZWZpbmVkLGM9cj8uZGVzYz8/ITEsbD0wO2lmKHMpe2xldCBuPWUuZ2V0VmFsdWUoci5pZCksaT10LmdldFZhbHVlKHIuaWQpLGE9bj09PXZvaWQgMCxvPWk9PT12b2lkIDA7aWYoYXx8byl7aWYocz09PWBmaXJzdGApcmV0dXJuIGE/LTE6MTtpZihzPT09YGxhc3RgKXJldHVybiBhPzE6LTE7bD1hJiZvPzA6YT9zOi1zfX1pZihsPT09MCYmKGw9aS5zb3J0aW5nRm4oZSx0LHIuaWQpKSxsIT09MClyZXR1cm4gYyYmKGwqPS0xKSxpLmludmVydFNvcnRpbmcmJihsKj0tMSksbH1yZXR1cm4gZS5pbmRleC10LmluZGV4fSksdC5mb3JFYWNoKGU9Pnt2YXIgdDtpLnB1c2goZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlLnN1YlJvd3M9cyhlLnN1YlJvd3MpKX0pLHR9O3JldHVybntyb3dzOnMobi5yb3dzKSxmbGF0Um93czppLHJvd3NCeUlkOm4ucm93c0J5SWR9fSwkKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNvcnRlZFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBOUygpe3JldHVybiEwfXZhciBQUz1TeW1ib2woYG1lcmdlLXByb3h5YCksRlM9e2dldChlLHQsbil7cmV0dXJuIHQ9PT1QUz9uOmUuZ2V0KHQpfSxoYXMoZSx0KXtyZXR1cm4gZS5oYXModCl9LHNldDpOUyxkZWxldGVQcm9wZXJ0eTpOUyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIGUuZ2V0KHQpfSxzZXQ6TlMsZGVsZXRlUHJvcGVydHk6TlN9fSxvd25LZXlzKGUpe3JldHVybiBlLmtleXMoKX19O2Z1bmN0aW9uIElTKGUpe3JldHVybmB2YWx1ZWBpbiBlP2UudmFsdWU6ZX1mdW5jdGlvbiBMUygpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3JldHVybiBuZXcgUHJveHkoe2dldCh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IHI9SVMoZVtuXSlbdF07aWYociE9PXZvaWQgMClyZXR1cm4gcn19LGhhcyh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZih0IGluIElTKGVbbl0pKXJldHVybiEwO3JldHVybiExfSxrZXlzKCl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKC4uLk9iamVjdC5rZXlzKElTKGVbbl0pKSk7cmV0dXJuWy4uLkFycmF5LmZyb20obmV3IFNldCh0KSldfX0sRlMpfXZhciBSUz1GKHtwcm9wczpbYHJlbmRlcmAsYHByb3BzYF0sc2V0dXA6ZT0+KCk9PnR5cGVvZiBlLnJlbmRlcj09YGZ1bmN0aW9uYHx8dHlwZW9mIGUucmVuZGVyPT1gb2JqZWN0YD90YyhlLnJlbmRlcixlLnByb3BzKTplLnJlbmRlcn0pO2Z1bmN0aW9uIHpTKGUpe3JldHVybiBMUyhlLHtkYXRhOk4oZS5kYXRhKX0pfWZ1bmN0aW9uIEJTKGUpe2xldCB0PWooZS5kYXRhKSxuPUFTKExTKHtzdGF0ZTp7fSxvblN0YXRlQ2hhbmdlOigpPT57fSxyZW5kZXJGYWxsYmFja1ZhbHVlOm51bGwsbWVyZ2VPcHRpb25zKGUsbil7cmV0dXJuIHQ/ey4uLmUsLi4ubn06TFMoZSxuKX19LHQ/elMoZSk6ZSkpO2lmKHQpe2xldCB0PXVuKGUuZGF0YSk7RXIodCwoKT0+e24uc2V0U3RhdGUoZT0+KHsuLi5lLGRhdGE6dC52YWx1ZX0pKX0se2ltbWVkaWF0ZTohMH0pfWxldCByPU0obi5pbml0aWFsU3RhdGUpO3JldHVybiBDcigoKT0+e24uc2V0T3B0aW9ucyhuPT57bGV0IGk9bmV3IFByb3h5KHt9LHtnZXQ6KGUsdCk9PnIudmFsdWVbdF19KTtyZXR1cm4gTFMobix0P3pTKGUpOmUse3N0YXRlOkxTKGksZS5zdGF0ZT8/e30pLG9uU3RhdGVDaGFuZ2U6dD0+e3QgaW5zdGFuY2VvZiBGdW5jdGlvbj9yLnZhbHVlPXQoci52YWx1ZSk6ci52YWx1ZT10LGUub25TdGF0ZUNoYW5nZT09bnVsbHx8ZS5vblN0YXRlQ2hhbmdlKHQpfX0pfSl9KSxufXZhciBWUz1bYGFyaWEtbGFiZWxgXSxIUz1GKHtfX25hbWU6YFNvcnRIZWFkZXJCdXR0b25gLHByb3BzOntoZWFkZXI6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT50LmhlYWRlci5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSkscj1XKCgpPT5uLnZhbHVlPT09YGFzY2A/b186bi52YWx1ZT09PWBkZXNjYD95XzpmXyksaT1XKCgpPT57bGV0IGU9dC5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9lOnQuaGVhZGVyLmNvbHVtbi5pZH0pLGE9VygoKT0+e2xldCBlPW4udmFsdWU9PT1gYXNjYD9gYXNjZW5kaW5nYDpuLnZhbHVlPT09YGRlc2NgP2BkZXNjZW5kaW5nYDpgbm9uZWA7cmV0dXJuYFNvcnQgYnkgJHtpLnZhbHVlfSwgY3VycmVudGx5ICR7ZX1gfSk7ZnVuY3Rpb24gbygpe3QuaGVhZGVyLmNvbHVtbi50b2dnbGVTb3J0aW5nKG4udmFsdWU9PT1gYXNjYCl9cmV0dXJuKHQsaSk9PntsZXQgcz1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSx6KGBidXR0b25gLHt0eXBlOmBidXR0b25gLCJhcmlhLWxhYmVsIjphLnZhbHVlLGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBweC0xLjUgcHktMC41IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmluZ2Asb25DbGljazpvfSxbZS5oZWFkZXIuaXNQbGFjZWhvbGRlcj9UcyhgYCwhMCk6KFIoKSxCKE4oUlMpLHtrZXk6MCxyZW5kZXI6ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIscHJvcHM6ZS5oZWFkZXIuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKSksSChzLHtpY29uOnIudmFsdWUsY2xhc3M6TyhbYHNpemUtMyBzaHJpbmstMGAsbi52YWx1ZT9gdGV4dC1mb3JlZ3JvdW5kYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwYF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSldLDgsVlMpfX19KSxVUz17ImRhdGEtc2xvdCI6YHRhYmxlLWNvbnRhaW5lcmAsY2xhc3M6YHJlbGF0aXZlIHctZnVsbCBvdmVyZmxvdy14LWF1dG9gfSxXUz1GKHtfX25hbWU6YFRhYmxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihSKCkseihgZGl2YCxVUyxbVihgdGFibGVgLHsiZGF0YS1zbG90IjpgdGFibGVgLGNsYXNzOk8oTihaKShgdy1mdWxsIGNhcHRpb24tYm90dG9tIHRleHQtc21gLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSl9fSksR1M9Rih7X19uYW1lOmBUYWJsZUJvZHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0Ym9keWAseyJkYXRhLXNsb3QiOmB0YWJsZS1ib2R5YCxjbGFzczpPKE4oWikoYFsmX3RyOmxhc3QtY2hpbGRdOmJvcmRlci0wYCx0LmNsYXNzKSl9LFtJKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxLUz1GKHtfX25hbWU6YFRhYmxlQ2VsbGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRkYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWNlbGxgLGNsYXNzOk8oTihaKShgcC0yIGFsaWduLW1pZGRsZSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSkscVM9Rih7X19uYW1lOmBUYWJsZVJvd2AscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRyYCx7ImRhdGEtc2xvdCI6YHRhYmxlLXJvd2AsY2xhc3M6TyhOKFopKGBob3ZlcjpiZy1tdXRlZC81MCBkYXRhLVtzdGF0ZT1zZWxlY3RlZF06YmctbXV0ZWQgYm9yZGVyLWIgdHJhbnNpdGlvbi1jb2xvcnMgaGFzLWFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQvNTBgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLEpTPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMTBgfSxZUz1GKHtfX25hbWU6YFRhYmxlRW1wdHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxjb2xzcGFuOntkZWZhdWx0OjF9fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KFIoKSxCKHFTLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goS1Msa3Moe2NsYXNzOk4oWikoYHAtNCB3aGl0ZXNwYWNlLW5vd3JhcCBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmRgLHQuY2xhc3MpfSxOKG4pKSx7ZGVmYXVsdDpQKCgpPT5bVihgZGl2YCxKUyxbSShlLiRzbG90cyxgZGVmYXVsdGApXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9KSl9fSksWFM9Rih7X19uYW1lOmBUYWJsZUhlYWRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFIoKSx6KGB0aGAseyJkYXRhLXNsb3QiOmB0YWJsZS1oZWFkYCxjbGFzczpPKE4oWikoYHRleHQtZm9yZWdyb3VuZCBoLTEwIHB4LTIgdGV4dC1sZWZ0IGFsaWduLW1pZGRsZSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsdC5jbGFzcykpfSxbSShlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksWlM9Rih7X19uYW1lOmBUYWJsZUhlYWRlcmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUigpLHooYHRoZWFkYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWhlYWRlcmAsY2xhc3M6TyhOKFopKGBbJl90cl06Ym9yZGVyLWJgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pO2Z1bmN0aW9uIFFTKGUsdCl7dC52YWx1ZT10eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQudmFsdWUpOmV9dmFyICRTPUYoe19fbmFtZTpgRGF0YVRhYmxlYCxwcm9wczp7Y29sdW1uczp7fSxkYXRhOnt9LHJvd0NsYXNzOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e319LHNldHVwKGUpe2xldCB0PWUsbj1NKFtdKSxyPUJTKHtnZXQgZGF0YSgpe3JldHVybiB0LmRhdGF9LGdldCBjb2x1bW5zKCl7cmV0dXJuIHQuY29sdW1uc30sZ2V0Q29yZVJvd01vZGVsOmpTKCksZ2V0U29ydGVkUm93TW9kZWw6TVMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+UVMoZSxuKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gbi52YWx1ZX19fSk7ZnVuY3Rpb24gaShlKXtpZihlPT09YGFzY2ApcmV0dXJuYGFzY2VuZGluZ2A7aWYoZT09PWBkZXNjYClyZXR1cm5gZGVzY2VuZGluZ2B9cmV0dXJuKHQsbik9PihSKCksQihOKFdTKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWlMpLG51bGwse2RlZmF1bHQ6UCgoKT0+WyhSKCEwKSx6KEwsbnVsbCxtYShOKHIpLmdldEhlYWRlckdyb3VwcygpLGU9PihSKCksQihOKHFTKSx7a2V5OmUuaWR9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEoZS5oZWFkZXJzLGU9PihSKCksQihOKFhTKSx7a2V5OmUuaWQsY2xhc3M6TyhlLmNvbHVtbi5jb2x1bW5EZWYubWV0YT8uYWxpZ249PT1gcmlnaHRgP2B0ZXh0LXJpZ2h0YDp2b2lkIDApLCJhcmlhLXNvcnQiOmUuY29sdW1uLmdldENhblNvcnQoKT9pKGUuY29sdW1uLmdldElzU29ydGVkKCkpPz9gbm9uZWA6dm9pZCAwfSx7ZGVmYXVsdDpQKCgpPT5bZS5jb2x1bW4uZ2V0Q2FuU29ydCgpPyhSKCksQihIUyx7a2V5OjAsaGVhZGVyOmUsY2xhc3M6YC1teC0xLjVgfSxudWxsLDgsW2BoZWFkZXJgXSkpOmUuaXNQbGFjZWhvbGRlcj9UcyhgYCwhMCk6KFIoKSxCKE4oUlMpLHtrZXk6MSxyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpXSksXzoyfSwxMDMyLFtgY2xhc3NgLGBhcmlhLXNvcnRgXSkpKSwxMjgpKV0pLF86Mn0sMTAyNCkpKSwxMjgpKV0pLF86MX0pLEgoTihHUyksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoPT09MD8oUigpLEIoTihZUykse2tleTowLGNvbHNwYW46ZS5jb2x1bW5zLmxlbmd0aCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlLmVtcHR5TWVzc2FnZT8/YG5vbmVgKSwxKV0pLF86MX0sOCxbYGNvbHNwYW5gXSkpOlRzKGBgLCEwKSwoUighMCkseihMLG51bGwsbWEoTihyKS5nZXRSb3dNb2RlbCgpLnJvd3MsdD0+KFIoKSxCKE4ocVMpLHtrZXk6dC5pZCxjbGFzczpPKGUucm93Q2xhc3M/Lih0Lm9yaWdpbmFsKSl9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodC5nZXRWaXNpYmxlQ2VsbHMoKSxlPT4oUigpLEIoTihLUykse2tleTplLmlkLGNsYXNzOk8oZS5jb2x1bW4uY29sdW1uRGVmLm1ldGE/LmFsaWduPT09YHJpZ2h0YD9gdGV4dC1yaWdodCB0YWJ1bGFyLW51bXNgOnZvaWQgMCl9LHtkZWZhdWx0OlAoKCk9PltIKE4oUlMpLHtyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmNlbGwscHJvcHM6ZS5nZXRDb250ZXh0KCl9LG51bGwsOCxbYHJlbmRlcmAsYHByb3BzYF0pXSksXzoyfSwxMDMyLFtgY2xhc3NgXSkpKSwxMjgpKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KSxlQz1GKHtfX25hbWU6YEJhZGdlYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx2YXJpYW50Ont9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgKTtyZXR1cm4ocixpKT0+KFIoKSxCKE4obmIpLGtzKHsiZGF0YS1zbG90IjpgYmFkZ2VgLCJkYXRhLXZhcmlhbnQiOmUudmFyaWFudCxjbGFzczpOKFopKE4odEMpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSxOKG4pKSx7ZGVmYXVsdDpQKCgpPT5bSShyLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGRhdGEtdmFyaWFudGAsYGNsYXNzYF0pKX19KSx0Qz13XyhgaC01IGdhcC0xIHJvdW5kZWQtNHhsIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMiBweS0wLjUgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyY+c3ZnXTpzaXplLTMhIGdyb3VwL2JhZGdlIGlubGluZS1mbGV4IHctZml0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgWyY+c3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXNlY29uZGFyeS84MGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIFthXTpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgdGV4dC1kZXN0cnVjdGl2ZSBkYXJrOmJnLWRlc3RydWN0aXZlLzIwYCxvdXRsaW5lOmBib3JkZXItYm9yZGVyIHRleHQtZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctbXV0ZWQgW2FdOmhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwYCxsaW5rOmB0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2FzeW5jIGZ1bmN0aW9uIG5DKGUsdCl7aWYobmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0KXRyeXtyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSksYGNvcGllZGB9Y2F0Y2h7fWlmKCF0KXJldHVybmBmYWlsZWRgO2xldCBuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5zZWxlY3ROb2RlQ29udGVudHModCk7bGV0IHI9d2luZG93LmdldFNlbGVjdGlvbigpO3JldHVybiByPyhyLnJlbW92ZUFsbFJhbmdlcygpLHIuYWRkUmFuZ2UobiksYHNlbGVjdGVkYCk6YGZhaWxlZGB9dmFyIHJDPWAwMDAxLTAxLTAxVDAwOjAwOjAwWmA7ZnVuY3Rpb24gaUMoZSx0KXtyZXR1cm5gJHtlfS8ke3R9YH1mdW5jdGlvbiBhQyhlKXtyZXR1cm5gJCR7KGUvMWU2KS50b0ZpeGVkKDQpfWB9ZnVuY3Rpb24gb0MoZSl7cmV0dXJuIGUudG9Mb2NhbGVTdHJpbmcoYGVuLVVTYCl9ZnVuY3Rpb24gc0MoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7aWYodDwxZTQpcmV0dXJuIG9DKGUpO2xldCBuPWU8MD9gLWA6YGAsW3IsaV09dDwxZTY/WzFlMyxga2BdOnQ8MWU5P1sxZTYsYE1gXTpbMWU5LGBCYF0sYT10L3Isbz0zLShNYXRoLmZsb29yKGEpPj0xMDA/MzpNYXRoLmZsb29yKGEpPj0xMD8yOjEpLHM9MTAqKm8sYz0oTWF0aC5mbG9vcih0KnMvcikvcykudG9GaXhlZChvKTtyZXR1cm4gbz4wJiYoYz1jLnJlcGxhY2UoLzArJC8sYGApLnJlcGxhY2UoL1wuJC8sYGApKSxgJHtufSR7Y30ke2l9YH1mdW5jdGlvbiBjQyhlKXtyZXR1cm4gZT4wJiYhKGUmZS0xKX1mdW5jdGlvbiBsQyhlKXtyZXR1cm4gZTwxMDI0P2Ake2V9YDpjQyhlKT9lPDEwNDg1NzY/YCR7TWF0aC5yb3VuZChlLzEwMjQpfWtgOmAke01hdGgucm91bmQoZS8xMDQ4NTc2KX1NYDplPDFlNj9gJHtNYXRoLnJvdW5kKGUvMWUzKX1rYDpgJHtNYXRoLnJvdW5kKGUvMWU2KX1NYH1mdW5jdGlvbiB1QyhlKXtyZXR1cm5gJCR7ZS50b0ZpeGVkKDIpfWB9ZnVuY3Rpb24gZEMoZSx0KXtyZXR1cm4gZT09PTAmJnQ9PT0wP2BmcmVlYDpgaW4gJHt1QyhlKX0gLyBvdXQgJHt1Qyh0KX0gcGVyIE1Ub2tgfWZ1bmN0aW9uIGZDKGUpe2lmKCFlfHxlPT09ckMpcmV0dXJuYGA7bGV0IHQ9bmV3IERhdGUoZSkuZ2V0VGltZSgpO3JldHVybiBOdW1iZXIuaXNOYU4odCk/YGA6YCAoJHtNYXRoLm1heCgwLE1hdGgucm91bmQoKERhdGUubm93KCktdCkvMWUzKSl9cyBhZ28pYH1mdW5jdGlvbiBwQyhlKXtpZighZXx8ZT09PXJDKXJldHVybmBgO2xldCB0PW5ldyBEYXRlKGUpLmdldFRpbWUoKTtpZihOdW1iZXIuaXNOYU4odCkpcmV0dXJuYGA7bGV0IG49TWF0aC5yb3VuZCgodC1EYXRlLm5vdygpKS8xZTMpO3JldHVybiBuPD0wP2BgOmBpbiAke259c2B9ZnVuY3Rpb24gbUMoZSl7aWYoIWV8fGU9PT1yQylyZXR1cm5gbmV2ZXJgO2xldCB0PW5ldyBEYXRlKGUpO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP2U6dC50b0xvY2FsZVN0cmluZygpfWZ1bmN0aW9uIGhDKGUsdCl7cmV0dXJuIGU/ZkModCk/YHJlZnJlc2hlZGA6YHBlbmRpbmdgOmBvZmZgfWZ1bmN0aW9uIGdDKGUsdCl7c3dpdGNoKGhDKGUsdCkpe2Nhc2Vgb2ZmYDpyZXR1cm5gZGlzY292ZXJ5IG9mZmA7Y2FzZWBwZW5kaW5nYDpyZXR1cm5gcGVuZGluZ2A7Y2FzZWByZWZyZXNoZWRgOnJldHVybmByZWZyZXNoZWQke2ZDKHQpfWB9fWZ1bmN0aW9uIF9DKGUsdCl7c3dpdGNoKGhDKGUsdCkpe2Nhc2Vgb2ZmYDpyZXR1cm5gZGlzY292ZXJ5IG9mZmA7Y2FzZWBwZW5kaW5nYDpyZXR1cm5gcGVuZGluZ2A7Y2FzZWByZWZyZXNoZWRgOnJldHVybiBtQyh0KX19ZnVuY3Rpb24gdkMoZSl7aWYoIWUpcmV0dXJuYG5vbmVgO2xldCB0PVtdO3JldHVybiBlLnJlcXVlc3RzUGVyTWludXRlJiZ0LnB1c2goYHJlcS9taW4gJHtlLnJlcXVlc3RzUGVyTWludXRlfWApLGUucmVxdWVzdHNQZXJEYXkmJnQucHVzaChgcmVxL2RheSAke2UucmVxdWVzdHNQZXJEYXl9YCksZS50b2tlbnNQZXJEYXkmJnQucHVzaChgdG9rL2RheSAke2UudG9rZW5zUGVyRGF5fWApLGUudG9rZW5zUGVyTW9udGgmJnQucHVzaChgdG9rL21vbnRoICR7ZS50b2tlbnNQZXJNb250aH1gKSxlLmNvc3RQZXJEYXlVU0QmJnQucHVzaChgY29zdC9kYXkgJCR7ZS5jb3N0UGVyRGF5VVNEfWApLGUuY29zdFBlck1vbnRoVVNEJiZ0LnB1c2goYGNvc3QvbW9udGggJCR7ZS5jb3N0UGVyTW9udGhVU0R9YCksdC5sZW5ndGg/dC5qb2luKGAsIGApOmBub25lYH1mdW5jdGlvbiB5QyhlLHQpe3N3aXRjaCh0KXtjYXNlYGhvdXJgOnJldHVybmAke2Uuc2xpY2UoOCwxMCl9OjAwYDtjYXNlYGRheWA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSkscj1OdW1iZXIoZS5zbGljZSg2LDgpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEscikudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCxkYXk6YG51bWVyaWNgfSl9Y2FzZWBtb250aGA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSk7cmV0dXJuIG5ldyBEYXRlKHQsbi0xLDEpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOmBzaG9ydGAseWVhcjpgbnVtZXJpY2B9KX19fXZhciBiQz1GKHtfX25hbWU6YE1vZGVsQ2hpcGAscHJvcHM6e2lkOnt9LGNvbnRleHRUb2tlbnM6e30saW5wdXRQZXJNVG9rVXNkOnt9LG91dHB1dFBlck1Ub2tVc2Q6e319LHNldHVwKGUpe2xldCB0PWUsbj1zaShgbGFiZWxgKSxyPU0oYGlkbGVgKSxpO2Z1bmN0aW9uIGEoKXtjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KCgpPT57ci52YWx1ZT1gaWRsZWB9LDE1MDApfWFzeW5jIGZ1bmN0aW9uIG8oKXtsZXQgZT1hd2FpdCBuQyh0LmlkLG4udmFsdWU/P3ZvaWQgMCk7ci52YWx1ZT1lLGEoKX1sZXQgcz17aWRsZTpfXyxjb3BpZWQ6ZF8sc2VsZWN0ZWQ6ZF8sZmFpbGVkOmdffSxjPVcoKCk9Pih7aWRsZTpgQ29weSAke3QuaWR9YCxjb3BpZWQ6YENvcGllZGAsc2VsZWN0ZWQ6YFNlbGVjdGVkIOKAlCBwcmVzcyBDdHJsL0NtZCtDYCxmYWlsZWQ6YENvcHkgZmFpbGVkYH0pKSxsPVcoKCk9PntsZXQgZT1bXTtyZXR1cm4gdC5pbnB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJnQub3V0cHV0UGVyTVRva1VzZCE9PXZvaWQgMCYmZS5wdXNoKGRDKHQuaW5wdXRQZXJNVG9rVXNkLHQub3V0cHV0UGVyTVRva1VzZCkpLHQuY29udGV4dFRva2VucyE9PXZvaWQgMCYmZS5wdXNoKGAke2xDKHQuY29udGV4dFRva2Vucyl9IGNvbnRleHRgKSxlLmpvaW4oYCDCtyBgKX0pLHU9VygoKT0+e2xldCBlPWMudmFsdWVbci52YWx1ZV07cmV0dXJuIGwudmFsdWU/YCR7ZX0gwrcgJHtsLnZhbHVlfWA6ZX0pO3JldHVybiB0YSgoKT0+e2NsZWFyVGltZW91dChpKX0pLCh0LG4pPT57bGV0IGk9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCksQihOKGVDKSx7YXM6YGJ1dHRvbmAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOk8oW2BjdXJzb3ItcG9pbnRlciBnYXAtMSBmb250LW1vbm8gdGV4dC14cyBmb250LW5vcm1hbCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZGAsci52YWx1ZT09PWBmYWlsZWRgP2B0ZXh0LWRlc3RydWN0aXZlYDpgYF0pLHRpdGxlOnUudmFsdWUsImFyaWEtbGFiZWwiOnUudmFsdWUsb25DbGljazpvfSx7ZGVmYXVsdDpQKCgpPT5bVihgc3BhbmAse3JlZjpgbGFiZWxgLGNsYXNzOmBzZWxlY3QtdGV4dGB9LGsoZS5pZCksNTEzKSxIKGkse2ljb246c1tyLnZhbHVlXSxjbGFzczpgc2l6ZS0yLjUgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSw4LFtgY2xhc3NgLGB0aXRsZWAsYGFyaWEtbGFiZWxgXSl9fX0pO2Z1bmN0aW9uIHhDKGUsdCl7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShlKXx8ZTw9MD9udWxsOihlLShOdW1iZXIuaXNGaW5pdGUodCk/dDowKSkvZX1mdW5jdGlvbiBTQyhlKXtyZXR1cm4gZT09PW51bGw/YG5vLXRyYWZmaWNgOmU8Ljk/YHNldmVyZWA6ZTwuOTk/YGRlZ3JhZGVkYDpgaGVhbHRoeWB9ZnVuY3Rpb24gQ0MoZSx0KXtsZXQgbj14QyhlLHQpO3JldHVybiBuIT09bnVsbCYmbjwuOTl9ZnVuY3Rpb24gd0MoZSl7cmV0dXJuIGU+PTE/YDEwMCVgOmAke01hdGguZmxvb3IoZSoxMDApfSVgfWZ1bmN0aW9uIFRDKGUsdCxuKXtyZXR1cm4gZT09PTE/dDpufWZ1bmN0aW9uIEVDKGUsdCl7aWYoZTw9MClyZXR1cm5gbm8gdHJhZmZpYyBpbiB0aGUgbGFzdCBtaW51dGVgO2xldCBuPXhDKGUsdCkscj1uPT09bnVsbD9gYDpgICgke3dDKG4pfSlgO3JldHVybmAke2V9ICR7VEMoZSxgYXR0ZW1wdGAsYGF0dGVtcHRzYCl9LCAke3R9ICR7VEModCxgZmFpbHVyZWAsYGZhaWx1cmVzYCl9IGluIHRoZSBsYXN0IG1pbnV0ZSR7cn1gfWZ1bmN0aW9uIERDKGUsdCl7aWYoZTw9MClyZXR1cm5gbm8gdHJhZmZpYyB0b2RheWA7bGV0IG49eEMoZSx0KSxyPW49PT1udWxsP2BgOmAgKCR7d0Mobil9KWA7cmV0dXJuYCR7ZX0gJHtUQyhlLGBhdHRlbXB0YCxgYXR0ZW1wdHNgKX0sICR7dH0gJHtUQyh0LGBmYWlsdXJlYCxgZmFpbHVyZXNgKX0gdG9kYXkke3J9YH12YXIgT0M9eyJhcmlhLWhpZGRlbiI6YHRydWVgfSxrQz17Y2xhc3M6YHNyLW9ubHlgfSxBQz1GKHtfX25hbWU6YFByb3ZpZGVyUmF0ZUJhZGdlYCxwcm9wczp7YXR0ZW1wdHNEYXk6e30sZmFpbHVyZXNEYXk6e30sYXR0ZW1wdHNNaW51dGU6e30sZmFpbHVyZXNNaW51dGU6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT54Qyh0LmF0dGVtcHRzRGF5LHQuZmFpbHVyZXNEYXkpKSxyPVcoKCk9PlNDKG4udmFsdWUpKSxpPVcoKCk9PnIudmFsdWU9PT1gbm8tdHJhZmZpY2A/YG5vIHRyYWZmaWNgOndDKG4udmFsdWUpKSxhPVcoKCk9PnQuYXR0ZW1wdHNNaW51dGU9PT12b2lkIDB8fHQuZmFpbHVyZXNNaW51dGU9PT12b2lkIDA/REModC5hdHRlbXB0c0RheSx0LmZhaWx1cmVzRGF5KTpFQyh0LmF0dGVtcHRzTWludXRlLHQuZmFpbHVyZXNNaW51dGUpKSxvPVcoKCk9PnIudmFsdWU9PT1gc2V2ZXJlYD9gZGVzdHJ1Y3RpdmVgOnIudmFsdWU9PT1gaGVhbHRoeWA/YHNlY29uZGFyeWA6YG91dGxpbmVgKSxzPVcoKCk9PnIudmFsdWU9PT1gZGVncmFkZWRgP2Bib3JkZXItc3RhdHVzLXdhcm4vNDAgdGV4dC1zdGF0dXMtd2FybmA6ci52YWx1ZT09PWBuby10cmFmZmljYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDpgYCk7cmV0dXJuKGUsdCk9PihSKCksQihOKGVDKSx7YXM6YHNwYW5gLHZhcmlhbnQ6by52YWx1ZSxjbGFzczpPKFtzLnZhbHVlLGBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgXSksdGl0bGU6YS52YWx1ZX0se2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLE9DLGsoaS52YWx1ZSksMSksVihgc3BhbmAsa0MsayhhLnZhbHVlKSwxKV0pLF86MX0sOCxbYHZhcmlhbnRgLGBjbGFzc2AsYHRpdGxlYF0pKX19KSxqQz1GKHtfX25hbWU6YFNlYXJjaElucHV0YCxwcm9wczp7bW9kZWxWYWx1ZTp7fSxwbGFjZWhvbGRlcjp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9VygoKT0+bi5tb2RlbFZhbHVlLmxlbmd0aD4wKTtmdW5jdGlvbiBhKGUpe3IoYHVwZGF0ZTptb2RlbFZhbHVlYCxTdHJpbmcoZSkpfWZ1bmN0aW9uIG8oKXtyKGB1cGRhdGU6bW9kZWxWYWx1ZWAsYGApfXJldHVybih0LHIpPT57bGV0IHM9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCx7Y2xhc3M6TyhOKFopKGByZWxhdGl2ZWAsbi5jbGFzcykpfSxbSChzLHtpY29uOk4oaV8pLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgbGVmdC0yLjUgc2l6ZS0zLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLEgoTihRYikseyJtb2RlbC12YWx1ZSI6ZS5tb2RlbFZhbHVlLHR5cGU6YHRleHRgLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsImFyaWEtbGFiZWwiOmUucGxhY2Vob2xkZXIsY2xhc3M6YHByLTggcGwtOGAsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmF9LG51bGwsOCxbYG1vZGVsLXZhbHVlYCxgcGxhY2Vob2xkZXJgLGBhcmlhLWxhYmVsYF0pLGkudmFsdWU/KFIoKSxCKE4oV2IpLHtrZXk6MCx0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uLXhzYCwiYXJpYS1sYWJlbCI6YENsZWFyIHNlYXJjaGAsY2xhc3M6YGFic29sdXRlIHRvcC0xLzIgcmlnaHQtMSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgLG9uQ2xpY2s6b30se2RlZmF1bHQ6UCgoKT0+W0gocyx7aWNvbjpOKHBfKSxjbGFzczpgc2l6ZS0zLjVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSkpOlRzKGBgLCEwKV0sMil9fX0pLE1DPUYoe19fbmFtZTpgQWNjb3JkaW9uYCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sZGlyOnt9LG9yaWVudGF0aW9uOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx0eXBlOnt9LG1vZGVsVmFsdWU6e30sZGVmYXVsdFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1xeShDeShuLGBjbGFzc2ApLHIpO3JldHVybihlLHQpPT4oUigpLEIoTihoYiksa3MoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb25gfSxOKGkpLHtjbGFzczpOKFopKGBmbGV4IHctZnVsbCBmbGV4LWNvbGAsbi5jbGFzcyl9KSx7ZGVmYXVsdDpQKHQ9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCx4ZShTcyh0KSkpXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxOQz1GKHtfX25hbWU6YEFjY29yZGlvbkNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1DeSh0LGBjbGFzc2ApO3JldHVybihlLHIpPT4oUigpLEIoTihiYiksa3MoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb24tY29udGVudGB9LE4obikse2NsYXNzOmBkYXRhLW9wZW46YW5pbWF0ZS1hY2NvcmRpb24tZG93biBkYXRhLWNsb3NlZDphbmltYXRlLWFjY29yZGlvbi11cCB0ZXh0LXNtIG92ZXJmbG93LWhpZGRlbmB9KSx7ZGVmYXVsdDpQKCgpPT5bVihgZGl2YCx7Y2xhc3M6TyhOKFopKGBwdC0wIHBiLTIuNSBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9wOm5vdCg6bGFzdC1jaGlsZCldOm1iLTRgLHQuY2xhc3MpKX0sW0koZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSxfOjN9LDE2KSl9fSksUEM9Rih7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdmFsdWU6e30sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49S3koQ3kodCxgY2xhc3NgKSk7cmV0dXJuKGUscik9PihSKCksQihOKHliKSxrcyh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1pdGVtYH0sTihuKSx7Y2xhc3M6TihaKShgbm90LWxhc3Q6Ym9yZGVyLWJgLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksRkM9Rih7X19uYW1lOmBBY2NvcmRpb25UcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUN5KHQsYGNsYXNzYCk7cmV0dXJuKGUscik9PntsZXQgaT1jYShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFIoKSxCKE4oeGIpLHtjbGFzczpgZmxleGB9LHtkZWZhdWx0OlAoKCk9PltIKE4oU2IpLGtzKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXJgfSxOKG4pLHtjbGFzczpOKFopKGBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6YWZ0ZXI6Ym9yZGVyLXJpbmcgKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1sZyBweS0yLjUgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6cmluZy0zICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06bWwtYXV0byAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOnNpemUtNCBncm91cC9hY2NvcmRpb24tdHJpZ2dlciByZWxhdGl2ZSBmbGV4IGZsZXgtMSBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwYCx0LmNsYXNzKX0pLHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCksSShlLiRzbG90cyxgaWNvbmAse30sKCk9PltIKGkse2ljb246TihoXyksImRhdGEtc2xvdCI6YGFjY29yZGlvbi10cmlnZ2VyLWljb25gLCJhcmlhLWhpZGRlbiI6YHRydWVgLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIHNocmluay0wIGdyb3VwLWFyaWEtZXhwYW5kZWQvYWNjb3JkaW9uLXRyaWdnZXI6aGlkZGVuYH0sbnVsbCw4LFtgaWNvbmBdKSxIKGkse2ljb246TihjXyksImRhdGEtc2xvdCI6YGFjY29yZGlvbi10cmlnZ2VyLWljb25gLCJhcmlhLWhpZGRlbiI6YHRydWVgLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGhpZGRlbiBzaHJpbmstMCBncm91cC1hcmlhLWV4cGFuZGVkL2FjY29yZGlvbi10cmlnZ2VyOmlubGluZWB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKV0pLF86M30pfX19KTtmdW5jdGlvbiBJQygpe2xldCBlPU0oYGApLHQ9VygoKT0+ZS52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7cmV0dXJue3F1ZXJ5OmUsbm9ybWFsaXplZDp0LGhhc1F1ZXJ5OlcoKCk9PnQudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBMQyhlLHQsbil7aWYoIXQpcmV0dXJuIG5ldyBTZXQoZS5tYW51YWxseUV4cGFuZGVkKTtsZXQgcj1uZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7Zm9yKGxldCB0IG9mIG4pZS5tYW51YWxseUNvbGxhcHNlZC5oYXModCl8fHIuYWRkKHQpO3JldHVybiByfWZ1bmN0aW9uIFJDKGUsdCxuKXtuPyhlLm1hbnVhbGx5RXhwYW5kZWQuZGVsZXRlKHQpLGUubWFudWFsbHlDb2xsYXBzZWQuYWRkKHQpKTooZS5tYW51YWxseUNvbGxhcHNlZC5kZWxldGUodCksZS5tYW51YWxseUV4cGFuZGVkLmFkZCh0KSl9ZnVuY3Rpb24gekMoZSl7ZS5tYW51YWxseUNvbGxhcHNlZC5jbGVhcigpfXZhciBCQz17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxWQz17Y2xhc3M6YGdyaWQgZ2FwLTQgc206Z3JpZC1jb2xzLTNgfSxIQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sVUM9e2tleTowLGNsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjUgdGV4dC1kZXN0cnVjdGl2ZWB9LFdDPXtjbGFzczpgZm9udC1tZWRpdW1gfSxHQz17a2V5OjAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEtDPXtjbGFzczpgZm9udC1tZWRpdW1gfSxxQz17a2V5OjAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEpDPXtrZXk6MCxjbGFzczpgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFlDPXtrZXk6MSxjbGFzczpgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFhDPXtjbGFzczpgZmxleCBmbGV4LTEgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC0zIGdhcC15LTEgcHItMiB0ZXh0LWxlZnRgfSxaQz17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sUUM9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSwkQz17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZXc9e2NsYXNzOmBtYi0zIGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLXgtNiBnYXAteS0xLjUgdGV4dC1zbSBzbTpncmlkLWNvbHMtM2B9LHR3PXtjbGFzczpgYnJlYWstYWxsYH0sbnc9e2tleTowfSxydz17a2V5OjF9LGl3PXtjbGFzczpgdGV4dC1kZXN0cnVjdGl2ZWB9LGF3PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LG93PXtrZXk6MCx0aXRsZTpgY29udGV4dCB3aW5kb3dgLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxzdz17a2V5OjEsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sY3c9e2tleTowLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGx3PUYoe19fbmFtZTpgUHJvdmlkZXJzVmlld2Asc2V0dXAoZSl7bGV0IHQ9c3goKSxuPVcoKCk9PnQub3ZlcnZpZXcpLHI9WnQoe21hbnVhbGx5RXhwYW5kZWQ6bmV3IFNldCxtYW51YWxseUNvbGxhcHNlZDpuZXcgU2V0fSkse3F1ZXJ5Omksbm9ybWFsaXplZDphLGhhc1F1ZXJ5Om99PUlDKCk7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBpQyhlLHQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYS52YWx1ZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5tb2RlbHMuc29tZSh0PT5zKGUubmFtZSx0KSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5hbGlhcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGEudmFsdWUpfHxlLnRhcmdldC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGEudmFsdWUpfWxldCB1PVcoKCk9PntsZXQgZT1uLnZhbHVlPy5wcm92aWRlcnM/P1tdO3JldHVybiBvLnZhbHVlP2UuZmlsdGVyKGMpOmV9KSxkPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hbGlhc2VzPz9bXTtyZXR1cm4gby52YWx1ZT9lLmZpbHRlcihsKTplfSksZj1XKCgpPT5MQyhyLG8udmFsdWUsdS52YWx1ZS5tYXAoZT0+ZS5uYW1lKSkpO2Z1bmN0aW9uIHAoZSl7UkMocixlLGYudmFsdWUuaGFzKGUpKX1sZXQgbT1XKHtnZXQ6KCk9PkFycmF5LmZyb20oZi52YWx1ZSksc2V0OmU9PntsZXQgdD1uZXcgU2V0KGUpO2ZvcihsZXQgZSBvZiBmLnZhbHVlKXQuaGFzKGUpfHxwKGUpO2ZvcihsZXQgZSBvZiB0KWYudmFsdWUuaGFzKGUpfHxwKGUpfX0pO0VyKGksZT0+e2UudHJpbSgpPT09YGAmJnpDKHIpfSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gby52YWx1ZT9lLm1vZGVscy5maWx0ZXIodD0+cyhlLm5hbWUsdCkpOmUubW9kZWxzfWxldCBnPXthdHRlbXB0c0RheTowLGZhaWx1cmVzRGF5OjB9O2Z1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZS5tb2RlbFJhdGVzPy5bdF0/P2d9ZnVuY3Rpb24gdihlLHQpe2xldCBuPV8oZSx0KTtyZXR1cm4gQ0Mobi5hdHRlbXB0c0RheSxuLmZhaWx1cmVzRGF5KX1sZXQgeT17fTtmdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGUubW9kZWxNZXRhPy5bdF0/P3l9ZnVuY3Rpb24geChlKXtzd2l0Y2goZSl7Y2FzZWBvcGVuYDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2VgaGFsZi1vcGVuYDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gUyhlKXtsZXQgdD1wQyhlLm9wZW5VbnRpbCk7cmV0dXJuIHQ/YCR7ZS5oZWFsdGhTdGF0ZX0gKCR7dH0pYDplLmhlYWx0aFN0YXRlfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGU9PT1gb3BlbmA/YHRleHQtZGVzdHJ1Y3RpdmVgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfWxldCB3PVt7aWQ6YGFsaWFzYCxoZWFkZXI6YEFsaWFzYCxhY2Nlc3NvckZuOmU9PmUuYWxpYXMsY2VsbDooe3JvdzplfSk9PnRjKGJDLHtpZDplLm9yaWdpbmFsLmFsaWFzLGNvbnRleHRUb2tlbnM6ZS5vcmlnaW5hbC5tb2RlbE1ldGE/LmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwubW9kZWxNZXRhPy5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm9yaWdpbmFsLm1vZGVsTWV0YT8ub3V0cHV0UGVyTVRva1VzZH0pfSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+ZS50YXJnZXQsY2VsbDooe3JvdzplfSk9PnRjKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGUub3JpZ2luYWwudGFyZ2V0KX1dLGVlPVcoKCk9Pm4udmFsdWU/LmFsaWFzZXMubGVuZ3RoP28udmFsdWU/YG5vIGFsaWFzZXMgbWF0Y2ggIiR7aS52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGApO3JldHVybihlLHQpPT57bGV0IHI9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCxCQyxbVihgZGl2YCxWQyxbSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYikse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0OlAoKCk9PltIKHIse2ljb246bi52YWx1ZT8ucmVkaXMuY29uZmlndXJlZD9OKG1fKTpOKGxfKSxjbGFzczpPKFtuLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSl9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSx0WzJdfHw9VShgIFJlZGlzIGAsLTEpXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMSB0ZXh0LXNtYH0se2RlZmF1bHQ6UCgoKT0+W1YoYHBgLEhDLGsobi52YWx1ZT8ucmVkaXMuY29uZmlndXJlZD9gQ29uZmlndXJlZGA6YE5vdCBjb25maWd1cmVkYCksMSksbi52YWx1ZT8ucmVkaXMubGFzdEVycj8oUigpLHooYHBgLFVDLFtIKHIse2ljb246TihnXyksY2xhc3M6YG10LTAuNSBzaXplLTMuNSBzaHJpbmstMGB9LG51bGwsOCxbYGljb25gXSksVihgc3BhbmAsbnVsbCxrKG4udmFsdWUucmVkaXMubGFzdEVycikrayhOKGZDKShuLnZhbHVlLnJlZGlzLmxhc3RFcnJBdCkpLDEpXSkpOlRzKGBgLCEwKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYikse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0OlAoKCk9PltIKHIse2ljb246bi52YWx1ZT8uY2FjaGUuZW5hYmxlZD9OKG1fKTpOKGxfKSxjbGFzczpPKFtuLnZhbHVlPy5jYWNoZS5lbmFibGVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSl9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSx0WzNdfHw9VShgIFJlc3BvbnNlIGNhY2hlIGAsLTEpXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgdGV4dC1zbWB9LHtkZWZhdWx0OlAoKCk9PltWKGBwYCxXQyxrKG4udmFsdWU/LmNhY2hlLmVuYWJsZWQ/YEVuYWJsZWRgOmBEaXNhYmxlZGApLDEpLG4udmFsdWU/LmNhY2hlLmVuYWJsZWQ/KFIoKSx6KGBwYCxHQyxgdHRsIGArayhuLnZhbHVlLmNhY2hlLnR0bCksMSkpOlRzKGBgLCEwKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYikse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0OlAoKCk9PltIKHIse2ljb246bi52YWx1ZT8ucmV0cnkuZW5hYmxlZD9OKG1fKTpOKGxfKSxjbGFzczpPKFtuLnZhbHVlPy5yZXRyeS5lbmFibGVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSl9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSx0WzRdfHw9VShgIFJldHJ5IGAsLTEpXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgdGV4dC1zbWB9LHtkZWZhdWx0OlAoKCk9PltWKGBwYCxLQyxrKG4udmFsdWU/LnJldHJ5LmVuYWJsZWQ/YEVuYWJsZWRgOmBEaXNhYmxlZGApLDEpLG4udmFsdWU/LnJldHJ5LmVuYWJsZWQ/KFIoKSx6KGBwYCxxQyxgIGF0dGVtcHRzIGArayhuLnZhbHVlLnJldHJ5LmF0dGVtcHRzKStgLCBiYWNrb2ZmIGArayhuLnZhbHVlLnJldHJ5LmJhY2tvZmYpLDEpKTpUcyhgYCwhMCldKSxfOjF9KV0pLF86MX0pXSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFs1XXx8PVtVKGBQcm92aWRlcnNgLC0xKV1dKSxfOjF9KSxIKE4oWWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbNl18fD1bVShgIEV2ZXJ5IGNvbmZpZ3VyZWQgdXBzdHJlYW0gYW5kIGl0cyBsYXN0IGRpc2NvdmVyeSByZWZyZXNoLiBTZWFyY2ggZmlsdGVycyBwcm92aWRlcnMgYW5kIGFsaWFzZXMgYnkgbW9kZWwgaWQuIGAsLTEpXV0pLF86MX0pLEgoakMse21vZGVsVmFsdWU6TihpKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9PmooaSk/aS52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YFNlYXJjaCBtb2RlbHMgb3IgYWxpYXNlcy4uLmAsY2xhc3M6YG10LTIgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltuLnZhbHVlPy5wcm92aWRlcnMubGVuZ3RoP04obykmJnUudmFsdWUubGVuZ3RoPT09MD8oUigpLHooYHBgLFlDLGAgbm8gcHJvdmlkZXJzIG1hdGNoICJgK2soTihpKSkrYCIgYCwxKSk6KFIoKSxCKE4oTUMpLHtrZXk6Mixtb2RlbFZhbHVlOm0udmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMV18fD1lPT5tLnZhbHVlPWUsdHlwZTpgbXVsdGlwbGVgLGNsYXNzOmByb3VuZGVkLW1kIGJvcmRlciBweC0zYH0se2RlZmF1bHQ6UCgoKT0+WyhSKCEwKSx6KEwsbnVsbCxtYSh1LnZhbHVlLGU9PihSKCksQihOKFBDKSx7a2V5OmUubmFtZSx2YWx1ZTplLm5hbWV9LHtkZWZhdWx0OlAoKCk9PltIKE4oRkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLFhDLFtWKGBzcGFuYCxaQyxrKGUubmFtZSksMSksSChOKGVDKSx7YXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlLnR5cGUpLDEpXSksXzoyfSwxMDI0KSxWKGBzcGFuYCxRQyxrKGUubW9kZWxDb3VudCkrYCBtb2RlbHNgLDEpLEgoQUMseyJhdHRlbXB0cy1kYXkiOmUuYXR0ZW1wdHNEYXksImZhaWx1cmVzLWRheSI6ZS5mYWlsdXJlc0RheSwiYXR0ZW1wdHMtbWludXRlIjplLmF0dGVtcHRzTWludXRlLCJmYWlsdXJlcy1taW51dGUiOmUuZmFpbHVyZXNNaW51dGV9LG51bGwsOCxbYGF0dGVtcHRzLWRheWAsYGZhaWx1cmVzLWRheWAsYGF0dGVtcHRzLW1pbnV0ZWAsYGZhaWx1cmVzLW1pbnV0ZWBdKSxlLmhlYWx0aFN0YXRlPT09YGNsb3NlZGA/VHMoYGAsITApOihSKCksQihOKGVDKSx7a2V5OjAsYXM6YHNwYW5gLHZhcmlhbnQ6eChlLmhlYWx0aFN0YXRlKSxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmUuaGVhbHRoU3RhdGU9PT1gb3BlbmA/YGRpc2NvdmVyeSBpcyBiYWNraW5nIG9mZiBhZnRlciByZXBlYXRlZCBmYWlsdXJlc2A6YGEgZGlzY292ZXJ5IHByb2JlIGlzIGRlY2lkaW5nIHdoZXRoZXIgdG8gcmVjb3ZlcmB9LHtkZWZhdWx0OlAoKCk9PltVKGsoUyhlKSksMSldKSxfOjJ9LDEwMzIsW2B2YXJpYW50YCxgdGl0bGVgXSkpLGUubGFzdEVycj8oUigpLEIocix7a2V5OjEsaWNvbjpOKGdfKSxjbGFzczpgc2l6ZS0zLjUgc2hyaW5rLTAgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOlRzKGBgLCEwKSxWKGBzcGFuYCwkQyxrKE4oZ0MpKGUuZGlzY292ZXJ5RW5hYmxlZCxlLmxhc3RSZWZyZXNoKSksMSldKV0pLF86Mn0sMTAyNCksSChOKE5DKSxudWxsLHtkZWZhdWx0OlAoKCk9PltWKGBkbGAsZXcsW1YoYGRpdmAsbnVsbCxbdFs3XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEJhc2UgVVJMYCwtMSksVihgZGRgLHR3LGsoZS5iYXNlVXJsKSwxKV0pLFYoYGRpdmAsbnVsbCxbdFs4XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExhc3QgcmVmcmVzaGAsLTEpLFYoYGRkYCxudWxsLGsoTihfQykoZS5kaXNjb3ZlcnlFbmFibGVkLGUubGFzdFJlZnJlc2gpKSwxKV0pLGUuaGVhbHRoU3RhdGU9PT1gY2xvc2VkYD9UcyhgYCwhMCk6KFIoKSx6KGBkaXZgLG53LFt0WzldfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgRGlzY292ZXJ5IGhlYWx0aGAsLTEpLFYoYGRkYCx7Y2xhc3M6TyhDKGUuaGVhbHRoU3RhdGUpKX0sayhTKGUpKSwzKV0pKSxlLmxhc3RFcnI/KFIoKSx6KGBkaXZgLHJ3LFt0WzEwXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExhc3QgZXJyb3JgLC0xKSxWKGBkZGAsaXcsayhlLmxhc3RFcnIpLDEpXSkpOlRzKGBgLCEwKV0pLGgoZSkubGVuZ3RoPyhSKCkseihgZGl2YCxhdyxbKFIoITApLHooTCxudWxsLG1hKGgoZSksdD0+KFIoKSx6KGBzcGFuYCx7a2V5OnQsY2xhc3M6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMWB9LFtIKGJDLHtpZDpOKGlDKShlLm5hbWUsdCksImNvbnRleHQtdG9rZW5zIjpiKGUsdCkuY29udGV4dFRva2VucywiaW5wdXQtcGVyLW0tdG9rLXVzZCI6YihlLHQpLmlucHV0UGVyTVRva1VzZCwib3V0cHV0LXBlci1tLXRvay11c2QiOmIoZSx0KS5vdXRwdXRQZXJNVG9rVXNkfSxudWxsLDgsW2BpZGAsYGNvbnRleHQtdG9rZW5zYCxgaW5wdXQtcGVyLW0tdG9rLXVzZGAsYG91dHB1dC1wZXItbS10b2stdXNkYF0pLGIoZSx0KS5jb250ZXh0VG9rZW5zPT09dm9pZCAwP1RzKGBgLCEwKTooUigpLHooYHNwYW5gLG93LGsoTihsQykoYihlLHQpLmNvbnRleHRUb2tlbnMpKSwxKSksdihlLHQpPyhSKCksQihBQyx7a2V5OjEsImF0dGVtcHRzLWRheSI6XyhlLHQpLmF0dGVtcHRzRGF5LCJmYWlsdXJlcy1kYXkiOl8oZSx0KS5mYWlsdXJlc0RheX0sbnVsbCw4LFtgYXR0ZW1wdHMtZGF5YCxgZmFpbHVyZXMtZGF5YF0pKTpUcyhgYCwhMCldKSkpLDEyOCkpXSkpOihSKCkseihgcGAsc3csYG5vIG1vZGVscyBrbm93biB5ZXRgKSldKSxfOjJ9LDEwMjQpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0sOCxbYG1vZGVsVmFsdWVgXSkpOihSKCkseihgcGAsSkMsYG5vbmVgKSldKSxfOjF9KV0pLF86MX0pLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbMTFdfHw9W1UoYE1vZGVsIGFsaWFzZXNgLC0xKV1dKSxfOjF9KSxIKE4oWWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbMTJdfHw9W1UoYE9wZXJhdG9yLWRlZmluZWQgYWxpYXMg4oaSIHRhcmdldCBtb2RlbCBtYXBwaW5ncy5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLEgoTihKYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSCgkUyx7Y29sdW1uczp3LGRhdGE6ZC52YWx1ZSwiZW1wdHktbWVzc2FnZSI6ZWUudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBlbXB0eS1tZXNzYWdlYF0pXSksXzoxfSldKSxfOjF9KSxuLnZhbHVlPy52ZXJzaW9uPyhSKCkseihgcGAsY3csYFZlcnNpb246IGArayhuLnZhbHVlLnZlcnNpb24pLDEpKTpUcyhgYCwhMCldKX19fSksdXc9W2B0aXRsZWBdLGR3PXsiYXJpYS1oaWRkZW4iOmB0cnVlYH0sZnc9e2NsYXNzOmBzci1vbmx5YH0scHc9Rih7X19uYW1lOmBDb21wYWN0TnVtYmVyYCxwcm9wczp7dmFsdWU6e319LHNldHVwKGUpe2xldCB0PWUsbj1XKCgpPT5zQyh0LnZhbHVlKSkscj1XKCgpPT5vQyh0LnZhbHVlKSk7cmV0dXJuKGUsdCk9PihSKCkseihgc3BhbmAse3RpdGxlOnIudmFsdWV9LFtWKGBzcGFuYCxkdyxrKG4udmFsdWUpLDEpLFYoYHNwYW5gLGZ3LGsoci52YWx1ZSksMSldLDgsdXcpKX19KTtmdW5jdGlvbiBtdyhlLHQsbil7cmV0dXJue2lkOmUsaGVhZGVyOnQsYWNjZXNzb3JGbjpuLG1ldGE6e2FsaWduOmByaWdodGB9LGNlbGw6KHtyb3c6ZX0pPT50Yyhwdyx7dmFsdWU6bihlLm9yaWdpbmFsKX0pfX1mdW5jdGlvbiBodygpe3JldHVyblt7aWQ6YG5hbWVgLGhlYWRlcjpgTmFtZWAsYWNjZXNzb3JGbjplPT5lLm5hbWUsY2VsbDooe3JvdzplfSk9PnRjKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sZS5vcmlnaW5hbC5uYW1lKX0se2lkOmB1cmxgLGhlYWRlcjpgVVJMYCxhY2Nlc3NvckZuOmU9PmUudXJsLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmBibG9jayBtYXgtdy14cyB0cnVuY2F0ZSB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOmUub3JpZ2luYWwudXJsfSxlLm9yaWdpbmFsLnVybCl9LHtpZDpgYWNjZXNzYCxoZWFkZXI6YEFjY2Vzc2AsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PihlLmFjY2Vzcz8/W10pLmpvaW4oYCwgYCksY2VsbDooe3JvdzplfSk9PntsZXQgdD1lLm9yaWdpbmFsLmFjY2VzcztyZXR1cm4gdD8ubGVuZ3RoP3RjKGBkaXZgLHtjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LHQubWFwKGU9PnRjKGVDLHtrZXk6ZSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0sKCk9PmUpKSk6dGMoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFsbCBncm91cHNgKX19LG13KGByZXFNaW5gLGByZXEvbWluYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTWludXRlKSxtdyhgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1BlckRheSksbXcoYHJlcU1vbnRoYCxgcmVxL21vbnRoYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTW9udGgpXX12YXIgZ3c9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sX3c9Rih7X19uYW1lOmBUYXJnZXRzVmlld2Asc2V0dXAoZSl7bGV0IHQ9c3goKSxuPVcoKCk9PnQudGFyZ2V0cykse3F1ZXJ5OnIsbm9ybWFsaXplZDppLGhhc1F1ZXJ5OmF9PUlDKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS52YWx1ZSl9bGV0IHM9VygoKT0+e2xldCBlPW4udmFsdWU/Lm1jcFNlcnZlcnM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KSxjPVcoKCk9PntsZXQgZT1uLnZhbHVlPy5hZ2VudHM/P1tdO3JldHVybiBhLnZhbHVlP2UuZmlsdGVyKG8pOmV9KTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGU/YS52YWx1ZSYmdD09PTA/YG5vIHRhcmdldHMgbWF0Y2ggIiR7ci52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGB9bGV0IHU9VygoKT0+bChuLnZhbHVlPy5tY3BTZXJ2ZXJzLmxlbmd0aD8/MCxzLnZhbHVlLmxlbmd0aCkpLGQ9VygoKT0+bChuLnZhbHVlPy5hZ2VudHMubGVuZ3RoPz8wLGMudmFsdWUubGVuZ3RoKSksZj1odygpO3JldHVybihlLHQpPT4oUigpLHooYGRpdmAsZ3csW0goakMse21vZGVsVmFsdWU6TihyKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9Pmoocik/ci52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBNQ1Agc2VydmVycyBvciBhZ2VudHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsxXXx8PVtVKGBNQ1Agc2VydmVyc2AsLTEpXV0pLF86MX0pLEgoTihZYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFsyXXx8PVtVKGBDb25maWd1cmVkIE1DUCBwcm94eSB0YXJnZXRzLCB0aGUgZ3JvdXBzIGFsbG93ZWQgdG8gcmVhY2ggdGhlbSwgYW5kIHRoZWlyIHJlcXVlc3QgY291bnRlcnMuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goJFMse2NvbHVtbnM6TihmKSxkYXRhOnMudmFsdWUsImVtcHR5LW1lc3NhZ2UiOnUudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksSChOKHFiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWGIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihaYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bLi4udFszXXx8PVtVKGBBZ2VudHNgLC0xKV1dKSxfOjF9KSxIKE4oWWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbNF18fD1bVShgQ29uZmlndXJlZCBBMkEgYWdlbnQgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLmAsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKCRTLHtjb2x1bW5zOk4oZiksZGF0YTpjLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpkLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLHZ3PUYoe19fbmFtZTpgVGFic2AscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxvcmllbnRhdGlvbjp7fSxkaXI6e30sYWN0aXZhdGlvbk1vZGU6e30sbW9kZWxWYWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPXF5KEN5KG4sYGNsYXNzYCkscik7cmV0dXJuKGUsdCk9PihSKCksQihOKFJiKSxrcyh7ImRhdGEtc2xvdCI6YHRhYnNgLCJkYXRhLW9yaWVudGF0aW9uIjpOKGkpLm9yaWVudGF0aW9ufHxgaG9yaXpvbnRhbGB9LE4oaSkse2NsYXNzOk4oWikoYGdhcC0yIGdyb3VwL3RhYnMgZmxleCBkYXRhLWhvcml6b250YWw6ZmxleC1jb2xgLG4uY2xhc3MpfSkse2RlZmF1bHQ6UCh0PT5bSShlLiRzbG90cyxgZGVmYXVsdGAseGUoU3ModCkpKV0pLF86M30sMTYsW2BkYXRhLW9yaWVudGF0aW9uYCxgY2xhc3NgXSkpfX0pLHl3PUYoe19fbmFtZTpgVGFic0NvbnRlbnRgLHByb3BzOnt2YWx1ZTp7fSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1DeSh0LGBjbGFzc2ApO3JldHVybihlLHIpPT4oUigpLEIoTihWYiksa3MoeyJkYXRhLXNsb3QiOmB0YWJzLWNvbnRlbnRgLGNsYXNzOk4oWikoYHRleHQtc20gZmxleC0xIG91dGxpbmUtbm9uZWAsdC5jbGFzcyl9LE4obikpLHtkZWZhdWx0OlAoKCk9PltJKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLGJ3PUYoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sdmFyaWFudDp7ZGVmYXVsdDpgZGVmYXVsdGB9fSxzZXR1cChlKXtsZXQgdD1lLG49Q3kodCxgY2xhc3NgLGB2YXJpYW50YCk7cmV0dXJuKHIsaSk9PihSKCksQihOKEhiKSxrcyh7ImRhdGEtc2xvdCI6YHRhYnMtbGlzdGAsImRhdGEtdmFyaWFudCI6ZS52YXJpYW50fSxOKG4pLHtjbGFzczpOKFopKE4oU3cpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpfSkse2RlZmF1bHQ6UCgoKT0+W0koci4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSkseHc9Rih7X19uYW1lOmBUYWJzVHJpZ2dlcmAscHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1LeShDeSh0LGBjbGFzc2ApKTtyZXR1cm4oZSxyKT0+KFIoKSxCKE4oVWIpLGtzKHsiZGF0YS1zbG90IjpgdGFicy10cmlnZ2VyYCxjbGFzczpOKFopKGBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtc20gZm9udC1tZWRpdW0gZ3JvdXAtZGF0YS1bdmFyaWFudD1kZWZhdWx0XS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6c2hhZG93LXNtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEgcmVsYXRpdmUgaW5saW5lLWZsZXggaC1bY2FsYygxMDAlLTFweCldIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1mb3JlZ3JvdW5kLzYwIHRyYW5zaXRpb24tYWxsIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczp3LWZ1bGwgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmp1c3RpZnktc3RhcnQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6dGV4dC1mb3JlZ3JvdW5kIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCxgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6YmctdHJhbnNwYXJlbnQgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YmctdHJhbnNwYXJlbnQgZGFyazpncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpib3JkZXItdHJhbnNwYXJlbnQgZGFyazpncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpiZy10cmFuc3BhcmVudGAsYGRhdGEtYWN0aXZlOmJnLWJhY2tncm91bmQgZGF0YS1hY3RpdmU6dGV4dC1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1hY3RpdmU6Ym9yZGVyLWlucHV0IGRhcms6ZGF0YS1hY3RpdmU6YmctaW5wdXQvMzAgZGFyazpkYXRhLWFjdGl2ZTp0ZXh0LWZvcmVncm91bmRgLGBhZnRlcjphYnNvbHV0ZSBhZnRlcjpiZy1mb3JlZ3JvdW5kIGFmdGVyOm9wYWNpdHktMCBhZnRlcjp0cmFuc2l0aW9uLW9wYWNpdHkgZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6aW5zZXQteC0wIGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmFmdGVyOmJvdHRvbS1bLTVweF0gZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6aC0wLjUgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOmluc2V0LXktMCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6LXJpZ2h0LTEgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmFmdGVyOnctMC41IGdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmFmdGVyOm9wYWNpdHktMTAwYCx0LmNsYXNzKX0sTihuKSkse2RlZmF1bHQ6UCgoKT0+W0koZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksU3c9d18oYHJvdW5kZWQtbGcgcC0wLjc1IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOmgtOCBkYXRhLVt2YXJpYW50PWxpbmVdOnJvdW5kZWQtbm9uZSBncm91cC90YWJzLWxpc3QgaW5saW5lLWZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6aC1maXQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmZsZXgtY29sYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLW11dGVkYCxsaW5lOmBnYXAtMSBiZy10cmFuc3BhcmVudGB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2Z1bmN0aW9uIEN3KGUsdCxuLHI9U3RyaW5nLGk9ITApe3JldHVybntpZDplLGhlYWRlcjp0LGFjY2Vzc29yRm46bixtZXRhOnthbGlnbjpgcmlnaHRgfSxjZWxsOih7cm93OmV9KT0+e2lmKGUub3JpZ2luYWwuc3RvcmVEb3duKXJldHVybmA/YDtsZXQgdD1uKGUub3JpZ2luYWwpO3JldHVybiBpP3RjKHB3LHt2YWx1ZTp0fSk6cih0KX19fWZ1bmN0aW9uIHd3KGUsdCxuKXtyZXR1cm5be2lkOmBpZGAsaGVhZGVyOmUsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmBmb250LW1lZGl1bWB9LGUub3JpZ2luYWwuaWQpfSx7aWQ6YHNlY29uZGFyeWAsaGVhZGVyOnQsYWNjZXNzb3JGbjpuLGNlbGw6KHtyb3c6ZX0pPT50Yyhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxuKGUub3JpZ2luYWwpKX0se2lkOmBsaW1pdHNgLGhlYWRlcjpgTGltaXRzYCxhY2Nlc3NvckZuOmU9PnZDKGUubGltaXRzKSxjZWxsOih7cm93OmV9KT0+dGMoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sdkMoZS5vcmlnaW5hbC5saW1pdHMpKX0sQ3coYHJlcU1pbmAsYHJlcS9taW5gLGU9PmUucmVxdWVzdHNQZXJNaW51dGUpLEN3KGByZXFEYXlgLGByZXEvZGF5YCxlPT5lLnJlcXVlc3RzUGVyRGF5KSxDdyhgdG9rSW5EYXlgLGB0b2tJbi9kYXlgLGU9PmUudG9rZW5zSW5QZXJEYXkpLEN3KGB0b2tPdXREYXlgLGB0b2tPdXQvZGF5YCxlPT5lLnRva2Vuc091dFBlckRheSksQ3coYHRva0luTW9udGhgLGB0b2tJbi9tb250aGAsZT0+ZS50b2tlbnNJblBlck1vbnRoKSxDdyhgdG9rT3V0TW9udGhgLGB0b2tPdXQvbW9udGhgLGU9PmUudG9rZW5zT3V0UGVyTW9udGgpLEN3KGBjb3N0RGF5YCxgY29zdC9kYXlgLGU9PmUuY29zdFBlckRheU1pY3JvVXNkLGFDLCExKSxDdyhgY29zdE1vbnRoYCxgY29zdC9tb250aGAsZT0+ZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxhQywhMSldfXZhciBUdz1GKHtfX25hbWU6YFVzYWdlVGFibGVgLHByb3BzOntpZExhYmVsOnt9LGVudHJpZXM6e30sc2Vjb25kYXJ5Q29sdW1uTGFiZWw6e30sc2Vjb25kYXJ5VmFsdWU6e3R5cGU6RnVuY3Rpb259LGVtcHR5TWVzc2FnZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVcoKCk9Pnd3KHQuaWRMYWJlbCx0LnNlY29uZGFyeUNvbHVtbkxhYmVsLHQuc2Vjb25kYXJ5VmFsdWUpKTtyZXR1cm4odCxyKT0+KFIoKSxCKCRTLHtjb2x1bW5zOm4udmFsdWUsZGF0YTplLmVudHJpZXMsImVtcHR5LW1lc3NhZ2UiOmUuZW1wdHlNZXNzYWdlLCJyb3ctY2xhc3MiOmU9PmUuc3RvcmVEb3duP2BiZy1kZXN0cnVjdGl2ZS8xMGA6dm9pZCAwfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgLGByb3ctY2xhc3NgXSkpfX0pO2Z1bmN0aW9uIEV3KGUsdCl7cmV0dXJuIGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX1mdW5jdGlvbiBEdyhlLHQpe3JldHVybiBlLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModCl9ZnVuY3Rpb24gT3coZSx0KXtyZXR1cm4gdC5maWx0ZXIodD0+dC5ncm91cE5hbWU9PT1lLmlkKX1mdW5jdGlvbiBrdyhlLHQsbil7cmV0dXJuIE93KGUsdCkuZmlsdGVyKGU9PkV3KGUsbikpfWZ1bmN0aW9uIEF3KGUsdCxuKXtyZXR1cm4gRHcoZSxuKXx8a3coZSx0LG4pLmxlbmd0aD4wfXZhciBqdz17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxNdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxOdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxQdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxGdz17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxJdz17a2V5OjAsY2xhc3M6YG1iLTMgZmxleCBmbGV4LXdyYXAgZ2FwLXgtNCBnYXAteS0xIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sTHc9e2NsYXNzOmBmbGV4IGZsZXgtMSBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC14LTQgZ2FwLXktMSBwci0yIHRleHQtbGVmdGB9LFJ3PXtjbGFzczpgZm9udC1tZWRpdW1gfSx6dz17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LEJ3PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sVnc9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxIdz17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sVXc9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sV3c9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxHdz17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxLdz17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHF3PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LEp3PXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sWXc9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sWHc9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxadz17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sUXc9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSwkdz17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LGVUPXtjbGFzczpgdGFidWxhci1udW1zYH0sdFQ9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxuVD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LHJUPXtjbGFzczpgdGFidWxhci1udW1zYH0saVQ9e2tleToyLGNsYXNzOmBweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYVQ9YEdsb2IgcGF0dGVybiDigJQgbWF0Y2hlcyBsaWtlIGEgc2hlbGwgd2lsZGNhcmQgKCosID8sIFsuLi5dKWAsb1Q9Rih7X19uYW1lOmBVc2FnZVZpZXdgLHNldHVwKGUpe2xldCB0PXN4KCksbj1XKCgpPT50LnVzYWdlKSxyPVcoKCk9PntsZXQgZT17fTtmb3IobGV0IG4gb2YgdC5vdmVydmlldz8uZ3JvdXBzPz9bXSllW24ubmFtZV09bi5tZW1iZXJDb3VudDtyZXR1cm4gZX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUuZ3JvdXBOYW1lPz9gYH1mdW5jdGlvbiBhKGUpe2xldCB0PXIudmFsdWVbZS5pZF07cmV0dXJuIHQ9PT12b2lkIDA/YGA6U3RyaW5nKHQpfWxldHtxdWVyeTpvLG5vcm1hbGl6ZWQ6cyxoYXNRdWVyeTpjfT1JQygpLGw9VygoKT0+e2xldCBlPW4udmFsdWU/Lmdyb3Vwcz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiBlLmZpbHRlcihlPT5BdyhlLHQscy52YWx1ZSkpfSksdT1XKCgpPT5jLnZhbHVlP2wudmFsdWUuZmlsdGVyKGU9PiFEdyhlLHMudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIGQoZSl7bGV0IHQ9bi52YWx1ZT8udXNlcnM/P1tdO3JldHVybiFjLnZhbHVlfHxEdyhlLHMudmFsdWUpP093KGUsdCk6a3coZSx0LHMudmFsdWUpfWxldCBmPVcoKCk9Pm4udmFsdWU/Lmdyb3Vwcy5sZW5ndGg/Yy52YWx1ZT9gbm8gZ3JvdXBzIG1hdGNoICIke28udmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKSxwPVcoKCk9PntsZXQgZT1uLnZhbHVlPy51c2Vycz8/W107aWYoIWMudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bi52YWx1ZT8uZ3JvdXBzPz9bXSxyPW5ldyBTZXQodC5maWx0ZXIoZT0+RHcoZSxzLnZhbHVlKSkubWFwKGU9PmUuaWQpKTtyZXR1cm4gZS5maWx0ZXIoZT0+RXcoZSxzLnZhbHVlKXx8ZS5ncm91cE5hbWUhPT12b2lkIDAmJnIuaGFzKGUuZ3JvdXBOYW1lKSl9KSxtPVcoKCk9Pm4udmFsdWU/LnVzZXJzLmxlbmd0aD9jLnZhbHVlP2BubyB1c2VycyBtYXRjaCAiJHtvLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCksaD13dyhgTmFtZWAsYE1lbWJlcnNgLGEpLGc9TShbXSksXz1CUyh7Z2V0IGRhdGEoKXtyZXR1cm4gbC52YWx1ZX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gaH0sZ2V0Q29yZVJvd01vZGVsOmpTKCksZ2V0U29ydGVkUm93TW9kZWw6TVMoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+UVMoZSxnKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gZy52YWx1ZX19fSksdj1XKCgpPT5fLmdldFJvd01vZGVsKCkucm93cykseT1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLGI9VygoKT0+Xy5nZXRIZWFkZXJHcm91cHMoKVswXS5oZWFkZXJzLmZpbHRlcihlPT55LmhhcyhlLmNvbHVtbi5pZCkpKSx4PVp0KHttYW51YWxseUV4cGFuZGVkOm5ldyBTZXQsbWFudWFsbHlDb2xsYXBzZWQ6bmV3IFNldH0pLFM9VygoKT0+TEMoeCxjLnZhbHVlLHUudmFsdWUpKTtmdW5jdGlvbiBDKGUpe1JDKHgsZSxTLnZhbHVlLmhhcyhlKSl9bGV0IHc9Vyh7Z2V0OigpPT5BcnJheS5mcm9tKFMudmFsdWUpLHNldDplPT57bGV0IHQ9bmV3IFNldChlKTtmb3IobGV0IGUgb2YgUy52YWx1ZSl0LmhhcyhlKXx8QyhlKTtmb3IobGV0IGUgb2YgdClTLnZhbHVlLmhhcyhlKXx8QyhlKX19KTtFcihvLGU9PntlLnRyaW0oKT09PWBgJiZ6Qyh4KX0pO2Z1bmN0aW9uIGVlKGUpe3JldHVybi9bKj9bXS8udGVzdChlKX1yZXR1cm4oZSx0KT0+KFIoKSx6KGBkaXZgLGp3LFtIKGpDLHttb2RlbFZhbHVlOk4obyksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5qKG8pP28udmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgdXNlcnMgb3IgZ3JvdXBzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLG4udmFsdWU/KFIoKSxCKE4ocWIpLHtrZXk6MH0se2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzJdfHw9W1UoYFRvdGFsYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzNdfHw9W1UoYFVzYWdlIHN1bW1lZCBhY3Jvc3MgZXZlcnkgdXNlciBhbmQgZ3JvdXAgY29tYmluZWQuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0se2RlZmF1bHQ6UCgoKT0+W1YoYGRpdmAsbnVsbCxbdFs0XXx8PVYoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFJlcXVlc3RzL2RheWAsLTEpLFYoYHBgLE13LFtIKHB3LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzVdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIGluL2RheWAsLTEpLFYoYHBgLE53LFtIKHB3LHt2YWx1ZTpuLnZhbHVlLnRvdGFsLnRva2Vuc0luUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksVihgZGl2YCxudWxsLFt0WzZdfHw9VihgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIG91dC9kYXlgLC0xKSxWKGBwYCxQdyxbSChwdyx7dmFsdWU6bi52YWx1ZS50b3RhbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxWKGBkaXZgLG51bGwsW3RbN118fD1WKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBDb3N0L2RheWAsLTEpLFYoYHBgLEZ3LGsoTihhQykobi52YWx1ZS50b3RhbC5jb3N0UGVyRGF5TWljcm9Vc2QpKSwxKV0pXSksXzoxfSldKSxfOjF9KSk6VHMoYGAsITApLEgoTihxYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFhiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKE4oWmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+Wy4uLnRbOF18fD1bVShgR3JvdXBzYCwtMSldXSksXzoxfSksSChOKFliKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzldfHw9W1UoYEV4cGFuZCBhIGdyb3VwIHRvIHNlZSBpdHMgbWVtYmVyIHVzZXJzJyBvd24gdXNhZ2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSxIKE4oSmIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W3YudmFsdWUubGVuZ3RoPyhSKCkseihgZGl2YCxJdyxbKFIoITApLHooTCxudWxsLG1hKGIudmFsdWUsZT0+KFIoKSxCKEhTLHtrZXk6ZS5pZCxoZWFkZXI6ZX0sbnVsbCw4LFtgaGVhZGVyYF0pKSksMTI4KSldKSk6VHMoYGAsITApLHYudmFsdWUubGVuZ3RoPyhSKCksQihOKE1DKSx7a2V5OjEsbW9kZWxWYWx1ZTp3LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+dy52YWx1ZT1lLHR5cGU6YG11bHRpcGxlYCxjbGFzczpgcm91bmRlZC1tZCBib3JkZXIgcHgtM2B9LHtkZWZhdWx0OlAoKCk9PlsoUighMCkseihMLG51bGwsbWEodi52YWx1ZSxlPT4oUigpLEIoTihQQykse2tleTplLm9yaWdpbmFsLmlkLHZhbHVlOmUub3JpZ2luYWwuaWR9LHtkZWZhdWx0OlAoKCk9PltIKE4oRkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYHNwYW5gLEx3LFtWKGBzcGFuYCxSdyxrKGUub3JpZ2luYWwuaWQpLDEpLFYoYHNwYW5gLHp3LGsoYShlLm9yaWdpbmFsKXx8YDBgKStgIG1lbWJlcnNgLDEpLFYoYHNwYW5gLEJ3LFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKHB3LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSksdFsxMF18fD1VKGAgcmVxL2RheSBgLC0xKV0pLFYoYHNwYW5gLFZ3LGsoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOk4oYUMpKGUub3JpZ2luYWwuY29zdFBlckRheU1pY3JvVXNkKSkrYC9kYXkgYCwxKV0pXSksXzoyfSwxMDI0KSxIKE4oTkMpLG51bGwse2RlZmF1bHQ6UCgoKT0+W1YoYGRsYCxIdyxbVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6YVR9LGBQcm92aWRlcnNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5wcm92aWRlcnM/Lmxlbmd0aD8oUigpLHooYGRpdmAsVXcsWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLnByb3ZpZGVycyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsV3csYEFsbCBwcm92aWRlcnNgKSldKV0pLFYoYGRpdmAsbnVsbCxbVihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOmFUfSxgTW9kZWxzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubW9kZWxzPy5sZW5ndGg/KFIoKSx6KGBkaXZgLEd3LFsoUighMCkseihMLG51bGwsbWEoZS5vcmlnaW5hbC5tb2RlbHMsZT0+KFIoKSx6KEwse2tleTplfSxbZWUoZSk/KFIoKSxCKE4oZUMpLHtrZXk6MSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6UCgoKT0+W1UoayhlKSwxKV0pLF86Mn0sMTAyNCkpOihSKCksQihiQyx7a2V5OjAsaWQ6ZX0sbnVsbCw4LFtgaWRgXSkpXSw2NCkpKSwxMjgpKV0pKTooUigpLHooYHNwYW5gLEt3LGBBbGwgbW9kZWxzYCkpXSldKSxWKGBkaXZgLG51bGwsW1YoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTphVH0sYE1DUCBzZXJ2ZXJzYCksVihgZGRgLG51bGwsW2Uub3JpZ2luYWwubWNwU2VydmVycz8ubGVuZ3RoPyhSKCkseihgZGl2YCxxdyxbKFIoITApLHooTCxudWxsLG1hKGUub3JpZ2luYWwubWNwU2VydmVycyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsSncsYEFsbCBNQ1Agc2VydmVyc2ApKV0pXSksVihgZGl2YCxudWxsLFtWKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6YVR9LGBBZ2VudHNgKSxWKGBkZGAsbnVsbCxbZS5vcmlnaW5hbC5hZ2VudHM/Lmxlbmd0aD8oUigpLHooYGRpdmAsWXcsWyhSKCEwKSx6KEwsbnVsbCxtYShlLm9yaWdpbmFsLmFnZW50cyxlPT4oUigpLEIoTihlQykse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpQKCgpPT5bVShrKGUpLDEpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSkpOihSKCkseihgc3BhbmAsWHcsYEFsbCBhZ2VudHNgKSldKV0pXSksVihgZGxgLFp3LFtWKGBkaXZgLG51bGwsW3RbMTFdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGltaXRzYCwtMSksVihgZGRgLG51bGwsayhOKHZDKShlLm9yaWdpbmFsLmxpbWl0cykpLDEpXSksVihgZGl2YCxudWxsLFt0WzEyXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHJlcS9taW5gLC0xKSxWKGBkZGAsUXcsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhSKCkseihMLHtrZXk6MH0sW1UoYD9gKV0sNjQpKTooUigpLEIocHcse2tleToxLHZhbHVlOmUub3JpZ2luYWwucmVxdWVzdHNQZXJNaW51dGV9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzEzXXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL2RheWAsLTEpLFYoYGRkYCwkdyxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihwdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJblBlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTRdfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgdG9rT3V0L2RheWAsLTEpLFYoYGRkYCxlVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihwdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE1XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL21vbnRoYCwtMSksVihgZGRgLHRULFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oUigpLHooTCx7a2V5OjB9LFtVKGA/YCldLDY0KSk6KFIoKSxCKHB3LHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc0luUGVyTW9udGh9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksVihgZGl2YCxudWxsLFt0WzE2XXx8PVYoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva091dC9tb250aGAsLTEpLFYoYGRkYCxuVCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFIoKSx6KEwse2tleTowfSxbVShgP2ApXSw2NCkpOihSKCksQihwdyx7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNPdXRQZXJNb250aH0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxWKGBkaXZgLG51bGwsW3RbMTddfHw9VihgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgY29zdC9tb250aGAsLTEpLFYoYGRkYCxyVCxrKGUub3JpZ2luYWwuc3RvcmVEb3duP2A/YDpOKGFDKShlLm9yaWdpbmFsLmNvc3RQZXJNb250aE1pY3JvVXNkKSksMSldKV0pLHRbMThdfHw9VihgcGAse2NsYXNzOmBtYi0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTWVtYmVyc2AsLTEpLEgoVHcseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6ZChlLm9yaWdpbmFsKSwic2Vjb25kYXJ5LXZhbHVlIjppfSxudWxsLDgsW2BlbnRyaWVzYF0pXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLHooYHBgLGlULGsoZi52YWx1ZSksMSkpXSksXzoxfSldKSxfOjF9KSxIKE4ocWIpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTihYYiksbnVsbCx7ZGVmYXVsdDpQKCgpPT5bSChOKFpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PlsuLi50WzE5XXx8PVtVKGBVc2Vyc2AsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKEpiKSxudWxsLHtkZWZhdWx0OlAoKCk9PltIKFR3LHsiaWQtbGFiZWwiOmBOYW1lYCwic2Vjb25kYXJ5LWNvbHVtbi1sYWJlbCI6YEdyb3VwYCxlbnRyaWVzOnAudmFsdWUsInNlY29uZGFyeS12YWx1ZSI6aSwiZW1wdHktbWVzc2FnZSI6bS52YWx1ZX0sbnVsbCw4LFtgZW50cmllc2AsYGVtcHR5LW1lc3NhZ2VgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pO2Z1bmN0aW9uIHNUKGUsdCxuKXtsZXQgcj1lLnN0YXJ0c1dpdGgoYCNgKT9lLnNsaWNlKDEpOmU7cmV0dXJuIHQuaW5jbHVkZXMocik/cjpufWZ1bmN0aW9uIGNUKGUpe3JldHVybmAjJHtlfWB9ZnVuY3Rpb24gbFQoe3ZhbGlkVGFiczplLGRlZmF1bHRUYWI6dH0pe2xldCBuPXR5cGVvZiB3aW5kb3c8YHVgLHI9TShuP3NUKHdpbmRvdy5sb2NhdGlvbi5oYXNoLGUsdCk6dCk7RXIocixlPT57aWYoIW4pcmV0dXJuO2xldCB0PWNUKGUpO3dpbmRvdy5sb2NhdGlvbi5oYXNoIT09dCYmd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsYGAsdCl9KTtmdW5jdGlvbiBpKCl7ci52YWx1ZT1zVCh3aW5kb3cubG9jYXRpb24uaGFzaCxlLHQpfXJldHVybiBuJiYoWmkoKCk9PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSksdGEoKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxpKSkpLHJ9dmFyIHVUPShmdW5jdGlvbigpe2xldCBlPXR5cGVvZiBkb2N1bWVudDxgdWAmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKS5yZWxMaXN0O3JldHVybiBlJiZlLnN1cHBvcnRzJiZlLnN1cHBvcnRzKGBtb2R1bGVwcmVsb2FkYCk/YG1vZHVsZXByZWxvYWRgOmBwcmVsb2FkYH0pKCksZFQ9ZnVuY3Rpb24oZSl7cmV0dXJuYC9hZG1pbi9gK2V9LGZUPXt9LHBUPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1Qcm9taXNlLnJlc29sdmUoKTtpZih0JiZ0Lmxlbmd0aD4wKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShgbGlua2ApLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtwcm9wZXJ0eT1jc3Atbm9uY2VdYCksYT1pPy5ub25jZXx8aT8uZ2V0QXR0cmlidXRlKGBub25jZWApO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKGU9PlByb21pc2UucmVzb2x2ZShlKS50aGVuKGU9Pih7c3RhdHVzOmBmdWxmaWxsZWRgLHZhbHVlOmV9KSxlPT4oe3N0YXR1czpgcmVqZWN0ZWRgLHJlYXNvbjplfSkpKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaW1wb3J0Lm1ldGEucmVzb2x2ZT9pbXBvcnQubWV0YS5yZXNvbHZlKGUpOm5ldyBVUkwoZSxpbXBvcnQubWV0YS51cmwpLmhyZWZ9cj1vKHQubWFwKHQ9PntpZih0PWRUKHQsbiksdD1zKHQpLHQgaW4gZlQpcmV0dXJuO2ZUW3RdPSEwO2xldCByPXQuZW5kc1dpdGgoYC5jc3NgKTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpZihpLmhyZWY9PT10JiYoIXJ8fGkucmVsPT09YHN0eWxlc2hlZXRgKSlyZXR1cm59bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApO2lmKGkucmVsPXI/YHN0eWxlc2hlZXRgOnVULHJ8fChpLmFzPWBzY3JpcHRgKSxpLmNyb3NzT3JpZ2luPWBgLGkuaHJlZj10LGEmJmkuc2V0QXR0cmlidXRlKGBub25jZWAsYSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSxyKXJldHVybiBuZXcgUHJvbWlzZSgoZSxuKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsZSksaS5hZGRFdmVudExpc3RlbmVyKGBlcnJvcmAsKCk9Pm4oRXJyb3IoYFVuYWJsZSB0byBwcmVsb2FkIENTUyBmb3IgJHt0fWApKSl9KX0pKX1mdW5jdGlvbiBpKGUpe2xldCB0PW5ldyBFdmVudChgdml0ZTpwcmVsb2FkRXJyb3JgLHtjYW5jZWxhYmxlOiEwfSk7aWYodC5wYXlsb2FkPWUsd2luZG93LmRpc3BhdGNoRXZlbnQodCksIXQuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBlfXJldHVybiByLnRoZW4odD0+e2ZvcihsZXQgZSBvZiB0fHxbXSllLnN0YXR1cz09PWByZWplY3RlZGAmJmkoZS5yZWFzb24pO3JldHVybiBlKCkuY2F0Y2goaSl9KX0sbVQ9e2NsYXNzOmBmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtNiBweC00IHB5LTggc206cHgtNiBsZzpweC04YH0saFQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sZ1Q9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSxfVD17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx2VD1gaHR0cHM6Ly9naXRodWIuY29tL2x1a2FzenJhY3p5bG8vdHJhZWZpay1sbG1nYXRld2F5YCx5VD1odShGKHtfX25hbWU6YEFwcGAsc2V0dXAoZSl7bGV0IHQ9TGkoKCk9PnBUKCgpPT5pbXBvcnQoYC4vQ2hhcnRzVmlldy1CYTExQWg1US5qc2ApLFtdKSksbj1yeCgpLHI9c3goKSxpPWxUKHt2YWxpZFRhYnM6W2Bwcm92aWRlcnNgLGB1c2FnZWAsYGNoYXJ0c2AsYHRhcmdldHNgXSxkZWZhdWx0VGFiOmBwcm92aWRlcnNgfSksYT1XKCgpPT5yLmVycm9yP2ByZWZyZXNoIGZhaWxlZDogJHtyLmVycm9yfWA6ci5sYXN0VXBkYXRlZD9gbGFzdCB1cGRhdGVkICR7ci5sYXN0VXBkYXRlZC50b0xvY2FsZVRpbWVTdHJpbmcoKX1gOmBsb2FkaW5nLi4uYCk7cmV0dXJuIFppKCgpPT57ci5zdGFydFBvbGxpbmcoKX0pLChlLG8pPT57bGV0IHM9Y2EoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBSKCkseihgZGl2YCxtVCxbVihgaGVhZGVyYCxoVCxbVihgZGl2YCxnVCxbb1sxXXx8PVYoYGgxYCx7Y2xhc3M6YHRleHQteGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodGB9LGBMTE0gR2F0ZXdheSDigJQgQWRtaW5gLC0xKSxIKE4oV2IpLHthczpgYWAsaHJlZjp2VCx0YXJnZXQ6YF9ibGFua2AscmVsOmBub29wZW5lciBub3JlZmVycmVyYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbmAsImFyaWEtbGFiZWwiOmBHaXRIdWIgcmVwb3NpdG9yeWAsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgfSx7ZGVmYXVsdDpQKCgpPT5bSChzLHtpY29uOk4ocl8pLGNsYXNzOmBzaXplLTRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxWKGBwYCxfVCxbTihyKS5lcnJvcj8oUigpLEIocyx7a2V5OjAsaWNvbjpOKHVfKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWB9LG51bGwsOCxbYGljb25gXSkpOlRzKGBgLCEwKSxWKGBzcGFuYCx7Y2xhc3M6TyhOKHIpLmVycm9yP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDApfSxrKGEudmFsdWUpLDMpXSldKSxOKG4pLmlzQXV0aGVudGljYXRlZD8oUigpLEIoTih2dykse2tleToxLG1vZGVsVmFsdWU6TihpKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b1swXXx8PWU9PmooaSk/aS52YWx1ZT1lOm51bGx9LHtkZWZhdWx0OlAoKCk9PltIKE4oYncpLG51bGwse2RlZmF1bHQ6UCgoKT0+W0goTih4dykse3ZhbHVlOmBwcm92aWRlcnNgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1syXXx8PVtVKGBQcm92aWRlcnNgLC0xKV1dKSxfOjF9KSxIKE4oeHcpLHt2YWx1ZTpgdXNhZ2VgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1szXXx8PVtVKGBVc2FnZWAsLTEpXV0pLF86MX0pLEgoTih4dykse3ZhbHVlOmBjaGFydHNgfSx7ZGVmYXVsdDpQKCgpPT5bLi4ub1s0XXx8PVtVKGBDaGFydHNgLC0xKV1dKSxfOjF9KSxIKE4oeHcpLHt2YWx1ZTpgdGFyZ2V0c2B9LHtkZWZhdWx0OlAoKCk9PlsuLi5vWzVdfHw9W1UoYE1DUCAmIEFnZW50c2AsLTEpXV0pLF86MX0pXSksXzoxfSksSChOKHl3KSx7dmFsdWU6YHByb3ZpZGVyc2B9LHtkZWZhdWx0OlAoKCk9PltIKGx3KV0pLF86MX0pLEgoTih5dykse3ZhbHVlOmB1c2FnZWB9LHtkZWZhdWx0OlAoKCk9PltIKG9UKV0pLF86MX0pLEgoTih5dykse3ZhbHVlOmBjaGFydHNgfSx7ZGVmYXVsdDpQKCgpPT5bSChOKHQpKV0pLF86MX0pLEgoTih5dykse3ZhbHVlOmB0YXJnZXRzYH0se2RlZmF1bHQ6UCgoKT0+W0goX3cpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbFZhbHVlYF0pKTooUigpLEIoZ3gse2tleTowfSkpXSl9fX0pKTt5VC51c2UoSGcoKSkseVQuY29tcG9uZW50KGBGb250QXdlc29tZUljb25gLHdnKSx5VC5tb3VudChgI2FwcGApO2V4cG9ydHtWciBhcyAkLGt5IGFzIEEsWnQgYXMgQXQsVHkgYXMgQixnZSBhcyBCdCxxeSBhcyBDLHdyIGFzIEN0LFZ5IGFzIEQsb24gYXMgRHQsVXkgYXMgRSxGZSBhcyBFdCxieSBhcyBGLHluIGFzIEZ0LFogYXMgRyxzeSBhcyBILGZ5IGFzIEksbW4gYXMgSXQsY18gYXMgSixkXyBhcyBLLGd5IGFzIEwsTiBhcyBMdCxGeSBhcyBNLGVuIGFzIE10LEl5IGFzIE4sdW4gYXMgTnQsTnkgYXMgTyxqIGFzIE90LGR5IGFzIFAsQSBhcyBQdCxMIGFzIFEsQ3kgYXMgUixPIGFzIFJ0LFl5IGFzIFMsQ3IgYXMgU3QsR3kgYXMgVCxyYyBhcyBUdCxveSBhcyBVLGN5IGFzIFYsayBhcyBWdCxheSBhcyBXLHdnIGFzIFgsbl8gYXMgWSxhdSBhcyBaLEpiIGFzIF8sbWEgYXMgX3QsdncgYXMgYSxVIGFzIGF0LG5iIGFzIGIsYWMgYXMgYnQseUMgYXMgYyxTcyBhcyBjdCxzeCBhcyBkLGtzIGFzIGR0LFcgYXMgZXQsaXggYXMgZixRbiBhcyBmdCxYYiBhcyBnLFIgYXMgZ3QsWmIgYXMgaCx0YSBhcyBodCxidyBhcyBpLHogYXMgaXQsQXkgYXMgaixNIGFzIGp0LE95IGFzIGssSWUgYXMga3Qsc0MgYXMgbCx0YyBhcyBsdCxyeCBhcyBtLFppIGFzIG10LEV3IGFzIG4sQiBhcyBudCxJQyBhcyBvLEggYXMgb3QsYXggYXMgcCxlYSBhcyBwdCxoXyBhcyBxLHh3IGFzIHIsVHMgYXMgcnQsakMgYXMgcyxGIGFzIHN0LEF3IGFzIHQsViBhcyB0dCxvQyBhcyB1LFBhIGFzIHV0LHFiIGFzIHYsSSBhcyB2dCxLeSBhcyB3LFAgYXMgd3QsJHkgYXMgeCxFciBhcyB4dCx3YiBhcyB5LHVhIGFzIHl0LHd5IGFzIHoseGUgYXMgenR9Ow==", + ), + }, } diff --git a/webui/src/components/ProvidersView.vue b/webui/src/components/ProvidersView.vue index f659e08..b3ff21d 100644 --- a/webui/src/components/ProvidersView.vue +++ b/webui/src/components/ProvidersView.vue @@ -194,6 +194,11 @@ function healthBadgeLabel(p: AdminProviderView): string { return until ? `${p.healthState} (${until})` : p.healthState } +/** healthDetailClass matches the accordion-content detail row's text color to healthBadgeVariant's own trigger-row Badge color, rather than hardcoding text-destructive for every non-closed state: destructive (red) for 'open', muted (grey, the same neutral tone secondary conveys on the Badge) for 'half-open'. */ +function healthDetailClass(state: AdminProviderView['healthState']): string { + return state === 'open' ? 'text-destructive' : 'text-muted-foreground' +} + // --- model aliases (sortable DataTable, operator directive) --- // // The alias id gets the ModelChip copy treatment (an alias name IS the @@ -356,7 +361,7 @@ const aliasEmptyMessage = computed(() =>
Discovery health
-
{{ healthBadgeLabel(p) }}
+
{{ healthBadgeLabel(p) }}
Last error
diff --git a/webui/src/lib/format.spec.ts b/webui/src/lib/format.spec.ts index c90bc01..dfc6d50 100644 --- a/webui/src/lib/format.spec.ts +++ b/webui/src/lib/format.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { formatCompactCount, formatContextWindow, formatModelCostHover, refreshDetailLabel, refreshLabel } from './format' +import { formatCompactCount, formatContextWindow, formatModelCostHover, formatUntil, refreshDetailLabel, refreshLabel } from './format' const ZERO_TIME = '0001-01-01T00:00:00Z' @@ -98,6 +98,30 @@ describe('formatModelCostHover', () => { }) }) +// Discovery circuit breaker (feat/provider-health, round 3): openUntil's +// future-time counterpart to formatAgo's past-time "(Ns ago)". Only +// caller today is ProvidersView.vue's healthBadgeLabel, rendering the +// breaker's live "open (in Ns)" countdown. +describe('formatUntil', () => { + it('renders "" for the unset zero-time sentinel', () => { + expect(formatUntil(ZERO_TIME)).toBe('') + }) + + it('renders "" for undefined', () => { + expect(formatUntil(undefined)).toBe('') + }) + + it('renders "in Ns" for a future timestamp', () => { + const inFortyTwoSeconds = new Date(Date.now() + 42_000).toISOString() + expect(formatUntil(inFortyTwoSeconds)).toMatch(/^in \d+s$/) + }) + + it('renders "" for a timestamp already in the past — a stale poll must not show a negative countdown', () => { + const oneMinuteAgo = new Date(Date.now() - 60_000).toISOString() + expect(formatUntil(oneMinuteAgo)).toBe('') + }) +}) + // Usage-count compact display (v0.23 addendum): SI-style, 3 significant // figures, floor-not-round (the same honesty rule formatRatePercent // already applies to the success-rate badge — a count must never appear