Color names

This page may take a long time (up to 30 sec) to load.

<html> <head> <meta charset=“utf-8” /> <script src=“data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg==”></script> <script src=“data:application/x-javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAKICAgIGlmICh0eXBlb2Yod2luZG93KSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgLy8gbWFrZSBzdXJlIHBsb3RzIGRvbid0IGdldCBjcmVhdGVkIG91dHNpZGUgdGhlIG5ldHdvcmsgKGZvciBvbi1wcmVtKQogICAgICB3aW5kb3cuUExPVExZRU5WID0gd2luZG93LlBMT1RMWUVOViB8fCB7fTsKICAgICAgd2luZG93LlBMT1RMWUVOVi5CQVNFX1VSTCA9IHguYmFzZV91cmw7CiAgICB9CgogICAgdmFyIGdyYXBoRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgCiAgICAvLyBUT0RPOiBtb3ZlIHRoZSBjb250cm9sIHBhbmVsIGluamVjdGlvbiBzdHJhdGVneSBpbnNpZGUgaGVyZS4uLgogICAgSFRNTFdpZGdldHMuYWRkUG9zdFJlbmRlckhhbmRsZXIoZnVuY3Rpb24oKSB7CiAgICAgIAogICAgICAvLyBsb3dlciB0aGUgei1pbmRleCBvZiB0aGUgbW9kZWJhciB0byBwcmV2ZW50IGl0IGZyb20gaGlnaGphY2tpbmcgaG92ZXIKICAgICAgLy8gKFRPRE86IGRvIHRoaXMgdmlhIENTUz8pCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3BlbnNjaS9wbG90bHkvaXNzdWVzLzk1NgogICAgICAvLyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL3Byb3Bfc3R5bGVfemluZGV4LmFzcAogICAgICB2YXIgbW9kZWJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubW9kZWJhciIpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGViYXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbW9kZWJhcnNbaV0uc3R5bGUuekluZGV4ID0gMTsKICAgICAgfQogICAgfSk7CiAgICAgIAogICAgICAvLyBpbmplY3QgYSAiY29udHJvbCBwYW5lbCIgaG9sZGluZyBzZWxlY3RpemUvZHluYW1pYyBjb2xvciB3aWRnZXQocykKICAgIGlmICh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljICYmICFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgdmFyIGZsZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZmxleC5jbGFzcyA9ICJwbG90bHktY3Jvc3N0YWxrLWNvbnRyb2wtcGFuZWwiOwogICAgICBmbGV4LnN0eWxlID0gImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcCI7CiAgICAgIAogICAgICAvLyBpbmplY3QgdGhlIGNvbG91cnBpY2tlciBIVE1MIGNvbnRhaW5lciBpbnRvIHRoZSBmbGV4Ym94CiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgcGlja2VySW5wdXQuaWQgPSBlbC5pZCArICItY29sb3VycGlja2VyIjsKICAgICAgICBwaWNrZXJJbnB1dC5wbGFjZWhvbGRlciA9ICJhc2Rhc2QiOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgcGlja2VyTGFiZWwuZm9yID0gcGlja2VySW5wdXQuaWQ7CiAgICAgICAgcGlja2VyTGFiZWwuaW5uZXJIVE1MID0gIkJydXNoIGNvbG9yJm5ic3A7Jm5ic3A7IjsKICAgICAgICAKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VyTGFiZWwpOwogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJJbnB1dCk7CiAgICAgICAgZmxleC5hcHBlbmRDaGlsZChwaWNrZXJEaXYpOwogICAgICB9CiAgICAgIAogICAgICAvLyBpbmplY3Qgc2VsZWN0aXplIEhUTUwgY29udGFpbmVycyAob25lIGZvciBldmVyeSBjcm9zc3RhbGsgZ3JvdXApCiAgICAgIGlmICh4LnNlbGVjdGl6ZSkgewogICAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyh4LnNlbGVjdGl6ZSk7CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGNvbnRhaW5lci5pZCA9IGlkc1tpXTsKICAgICAgICAgIGNvbnRhaW5lci5zdHlsZSA9ICJ3aWR0aDogODAlOyBoZWlnaHQ6IDEwJSI7CiAgICAgICAgICBjb250YWluZXIuY2xhc3MgPSAiZm9ybS1ncm91cCBjcm9zc3RhbGstaW5wdXQtcGxvdGx5LWhpZ2hsaWdodCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgICBsYWJlbC5mb3IgPSBpZHNbaV07CiAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSB4LnNlbGVjdGl6ZVtpZHNbaV1dLmdyb3VwOwogICAgICAgICAgbGFiZWwuY2xhc3MgPSAiY29udHJvbC1sYWJlbCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBzZWxlY3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKICAgICAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7CiAgICAgICAgICAKICAgICAgICAgIHNlbGVjdERpdi5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxlY3REaXYpOwogICAgICAgICAgZmxleC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLy8gZmluYWxseSwgaW5zZXJ0IHRoZSBmbGV4Ym94IGluc2lkZSB0aGUgaHRtbHdpZGdldCBjb250YWluZXIsCiAgICAgIC8vIGJ1dCBiZWZvcmUgdGhlIHBsb3RseSBncmFwaCBkaXYKICAgICAgZ3JhcGhEaXYucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZmxleCwgZ3JhcGhEaXYpOwogICAgICAKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyID0gJCgiIyIgKyBwaWNrZXJJbnB1dC5pZCk7CiAgICAgICAgdmFyIGNvbG9ycyA9IHguaGlnaGxpZ2h0LmNvbG9yIHx8IFtdOwogICAgICAgIC8vIFRPRE86IGxldCB1c2VycyBzcGVjaWZ5IG9wdGlvbnM/CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICB2YWx1ZTogY29sb3JzWzBdLAogICAgICAgICAgc2hvd0NvbG91cjogImJvdGgiLAogICAgICAgICAgcGFsZXR0ZTogImxpbWl0ZWQiLAogICAgICAgICAgYWxsb3dlZENvbHM6IGNvbG9ycy5qb2luKCIgIiksCiAgICAgICAgICB3aWR0aDogIjIwJSIsCiAgICAgICAgICBoZWlnaHQ6ICIxMCUiCiAgICAgICAgfTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKHtjaGFuZ2VEZWxheTogMH0pOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInNldHRpbmdzIiwgb3B0cyk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigidmFsdWUiLCBvcHRzLnZhbHVlKTsKICAgICAgICAvLyBpbmZvcm0gY3Jvc3N0YWxrIGFib3V0IGEgY2hhbmdlIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjb2xvdXIKICAgICAgICB2YXIgZ3JwcyA9IHguaGlnaGxpZ2h0LmN0R3JvdXBzIHx8IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICB9CiAgICAgICAgcGlja2VyLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gcmVtb3ZlICJzZW5kRGF0YVRvQ2xvdWQiLCB1bmxlc3MgdXNlciBoYXMgc3BlY2lmaWVkIHRoZXkgd2FudCBpdAogICAgeC5jb25maWcgPSB4LmNvbmZpZyB8fCB7fTsKICAgIGlmICgheC5jb25maWcuY2xvdWQpIHsKICAgICAgeC5jb25maWcubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSA9IHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUgfHwgW107CiAgICAgIHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7CiAgICB9CiAgICAKICAgIC8vIGlmIG5vIHBsb3QgZXhpc3RzIHlldCwgY3JlYXRlIG9uZSB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uCiAgICBpZiAoIWluc3RhbmNlLnBsb3RseSkgewogICAgICAKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICAgIGluc3RhbmNlLnBsb3RseSA9IHRydWU7CiAgICAgIGluc3RhbmNlLmF1dG9zaXplID0geC5sYXlvdXQuYXV0b3NpemUgfHwgdHJ1ZTsKICAgICAgaW5zdGFuY2Uud2lkdGggPSB4LmxheW91dC53aWR0aDsKICAgICAgaW5zdGFuY2UuaGVpZ2h0ID0geC5sYXlvdXQuaGVpZ2h0OwogICAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgogICAgICAKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5wbG90KGdyYXBoRGl2LCB4KTsKICAgICAgCiAgICB9CiAgICAKICAgIC8vIFRyaWdnZXIgcGxvdGx5LmpzIGNhbGxzIGRlZmluZWQgdmlhIGBwbG90bHlQcm94eSgpYAogICAgcGxvdC50aGVuKGZ1bmN0aW9uKCkgewogICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgICAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInBsb3RseS1jYWxscyIsIGZ1bmN0aW9uKG1zZykgewogICAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobXNnLmlkKTsKICAgICAgICAgIGlmICghZ2QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBmaW5kIHBsb3RseSBncmFwaCB3aXRoIGlkOiAiICsgbXNnLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghUGxvdGx5W21zZy5tZXRob2RdKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXRob2QgIiArIG1zZy5tZXRob2QpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGFyZ3MgPSBbZ2RdLmNvbmNhdChtc2cuYXJncyk7CiAgICAgICAgICBQbG90bHlbbXNnLm1ldGhvZF0uYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogICAgCiAgICAvLyBBdHRhY2ggYXR0cmlidXRlcyAoZS5nLiwgImtleSIsICJ6IikgdG8gcGxvdGx5IGV2ZW50IGRhdGEKICAgIGZ1bmN0aW9uIGV2ZW50RGF0YVdpdGhLZXkoZXZlbnREYXRhKSB7CiAgICAgIGlmIChldmVudERhdGEgPT09IHVuZGVmaW5lZCB8fCAhZXZlbnREYXRhLmhhc093blByb3BlcnR5KCJwb2ludHMiKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBldmVudERhdGEucG9pbnRzLm1hcChmdW5jdGlvbihwdCkgewogICAgICAgIHZhciBvYmogPSB7CiAgICAgICAgICBjdXJ2ZU51bWJlcjogcHQuY3VydmVOdW1iZXIsIAogICAgICAgICAgcG9pbnROdW1iZXI6IHB0LnBvaW50TnVtYmVyLCAKICAgICAgICAgIHg6IHB0LngsCiAgICAgICAgICB5OiBwdC55CiAgICAgICAgfTsKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIC8vIEFkZCBvdGhlciBhdHRyaWJ1dGVzIGhlcmUsIGlmIGRlc2lyZWQKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdmFyIGF0dHJzVG9BdHRhY2ggPSBbImtleSIsICJ6Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gWyJ6Il07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgICAgLy8gcG9pbnROdW1iZXIgY2FuIGJlIGFuIGFycmF5IChlLmcuLCBoZWF0bWFwcykKICAgICAgICAgICAgICAvLyBUT0RPOiBjYW4gcG9pbnROdW1iZXIgYmUgM0Q/CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gdHlwZW9mIHB0LnBvaW50TnVtYmVyID09PSAibnVtYmVyIiA/IAogICAgICAgICAgICAgICAgYXR0cltwdC5wb2ludE51bWJlcl0gOiBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmo7CiAgICAgIH0pOwogICAgfQogICAgCiAgICAvLyBzZW5kIHVzZXIgaW5wdXQgZXZlbnQgZGF0YSB0byBzaGlueQogICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkgewogICAgICAvLyBodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC96b29tLWV2ZW50cy8KICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9yZWxheW91dCcsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKAogICAgICAgICAgIi5jbGllbnRWYWx1ZS1wbG90bHlfcmVsYXlvdXQtIiArIHguc291cmNlLCAKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGQpCiAgICAgICAgKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfaG92ZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X2hvdmVyLSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShldmVudERhdGFXaXRoS2V5KGQpKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2NsaWNrJywgZnVuY3Rpb24oZCkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoCiAgICAgICAgICAiLmNsaWVudFZhbHVlLXBsb3RseV9jbGljay0iICsgeC5zb3VyY2UsIAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnREYXRhV2l0aEtleShkKSkKICAgICAgICApOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9zZWxlY3RlZCcsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKAogICAgICAgICAgIi5jbGllbnRWYWx1ZS1wbG90bHlfc2VsZWN0ZWQtIiArIHguc291cmNlLCAKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVdpdGhLZXkoZCkpCiAgICAgICAgKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfdW5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50RGF0YSkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoIi5jbGllbnRWYWx1ZS1wbG90bHlfaG92ZXItIiArIHguc291cmNlLCBudWxsKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfZG91YmxlY2xpY2snLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtcGxvdGx5X2NsaWNrLSIgKyB4LnNvdXJjZSwgbnVsbCk7CiAgICAgIH0pOwogICAgICAvLyAncGxvdGx5X2Rlc2VsZWN0JyBpcyBjb2RlIGZvciBkb3VibGVjbGljayB3aGVuIGluIHNlbGVjdCBtb2RlCiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfZGVzZWxlY3QnLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtcGxvdGx5X3NlbGVjdGVkLSIgKyB4LnNvdXJjZSwgbnVsbCk7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9jbGljay0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICB9KTsKICAgIH0gCiAgICAKICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIHNlbGVjdGluZyBhIHBvaW50IG9mIGEgInNpbXBsZSIgdHJhY2UgbWVhbnM6IHNlbGVjdCB0aGUgCiAgICAgICAgLy8gZW50aXJlIGtleSBhdHRhY2hlZCB0byB0aGlzIHRyYWNlLCB3aGljaCBpcyB1c2VmdWwgZm9yLAogICAgICAgIC8vIHNheSBjbGlja2luZyBvbiBhIGZpdHRlZCBsaW5lIHRvIHNlbGVjdCBjb3JyZXNwb25kaW5nIG9ic2VydmF0aW9ucyAKICAgICAgICB2YXIga2V5ID0gdHJhY2UuX2lzU2ltcGxlS2V5ID8gdHJhY2Uua2V5IDogdHJhY2Uua2V5W3BvaW50c1tpXS5wb2ludE51bWJlcl07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gYXJyYXkgb2YgImV2ZW50IG9iamVjdHMiIHRyYWNraW5nIHRoZSBzZWxlY3Rpb24gaGlzdG9yeQogICAgICAgIC8vIHRoaXMgaXMgdXNlZCB0byBhdm9pZCBhZGRpbmcgcmVkdW5kYW50IHNlbGVjdGlvbnMKICAgICAgICB2YXIgc2VsZWN0aW9uSGlzdG9yeSA9IGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5nZXQoKSB8fCBbXTsKICAgICAgICAKICAgICAgICAvLyBDb25zdHJ1Y3QgYW4gZXZlbnQgb2JqZWN0ICJkZWZpbmluZyIgdGhlIGN1cnJlbnQgZXZlbnQuIAogICAgICAgIHZhciBldmVudCA9IHsKICAgICAgICAgIHJlY2VpdmVySUQ6IHRyYWNlTWFuYWdlci5nZC5pZCwKICAgICAgICAgIHBsb3RseVNlbGVjdGlvbkNvbG91cjogY3Jvc3N0YWxrLmdyb3VwKHNldCkudmFyKCJwbG90bHlTZWxlY3Rpb25Db2xvdXIiKS5nZXQoKQogICAgICAgIH07CiAgICAgICAgZXZlbnRbc2V0XSA9IGUudmFsdWU7CiAgICAgICAgLy8gVE9ETzogaXMgdGhlcmUgYSBzbWFydGVyIHdheSB0byBjaGVjayBvYmplY3QgZXF1YWxpdHk/CiAgICAgICAgaWYgKHNlbGVjdGlvbkhpc3RvcnkubGVuZ3RoID4gMCkgewogICAgICAgICAgdmFyIGV2ID0gSlNPTi5zdHJpbmdpZnkoZXZlbnQpOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzZWwgPSBKU09OLnN0cmluZ2lmeShzZWxlY3Rpb25IaXN0b3J5W2ldKTsKICAgICAgICAgICAgaWYgKHNlbCA9PSBldikgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBhY2N1bXVsYXRlIGhpc3RvcnkgZm9yIHBlcnNpc3RlbnQgc2VsZWN0aW9uCiAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICBzZWxlY3Rpb25IaXN0b3J5ID0gW2V2ZW50XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeS5wdXNoKGV2ZW50KTsKICAgICAgICB9CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChzZWxlY3Rpb25IaXN0b3J5KTsKICAgICAgICAKICAgICAgICAvLyBkbyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRyYWNlcywgZnJhbWVzLCBhbmQgdGhlIHNlbGVjdGl6ZSB3aWRnZXQKICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgZS52YWx1ZSk7CiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdGl6ZS9zZWxlY3RpemUuanMvYmxvYi9tYXN0ZXIvZG9jcy9hcGkubWQjbWV0aG9kc19pdGVtcwogICAgICAgIGlmICh4LnNlbGVjdGl6ZSkgewogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50IHx8IGUudmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgc2VsZWN0aXplLmNsZWFyKHRydWUpOwogICAgICAgICAgfQogICAgICAgICAgc2VsZWN0aXplLmFkZEl0ZW1zKGUudmFsdWUsIHRydWUpOwogICAgICAgICAgc2VsZWN0aXplLmNsb3NlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNlbGVjdGlvbi5vbigiY2hhbmdlIiwgc2VsZWN0aW9uQ2hhbmdlKTsKICAgICAgCiAgICAgIC8vIFNldCBhIGNyb3NzdGFsayB2YXJpYWJsZSBzZWxlY3Rpb24gdmFsdWUsIHRyaWdnZXJpbmcgYW4gdXBkYXRlCiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCBmdW5jdGlvbiB0dXJuT24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICBncmFwaERpdi5vbih4LmhpZ2hsaWdodC5vZmYsIGZ1bmN0aW9uIHR1cm5PZmYoZSkgewogICAgICAgIC8vIHJlbW92ZSBhbnkgdmlzdWFsIGNsdWVzCiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIC8vIHJlbW92ZSBhbnkgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5Iikuc2V0KG51bGwpOwogICAgICAgIC8vIHRyaWdnZXIgdGhlIGFjdHVhbCByZW1vdmFsIG9mIHNlbGVjdGlvbiB0cmFjZXMKICAgICAgICBzZWxlY3Rpb24uc2V0KG51bGwsIHtzZW5kZXI6IGVsfSk7CiAgICAgIH0pOwogICAgICAgICAgCiAgICAgIC8vIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIHNlbGVjdGl6ZSBzbyB0aGF0IHRoZXJlIGlzIGJpLWRpcmVjdGlvbmFsCiAgICAgIC8vIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgd2lkZ2V0IGFuZCBkaXJlY3QgbWFuaXB1bGF0aW9uIGV2ZW50cwogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgc2VsZWN0aXplSUQgPSBPYmplY3Qua2V5cyh4LnNlbGVjdGl6ZSlbaV07CiAgICAgICAgdmFyIGl0ZW1zID0geC5zZWxlY3RpemVbc2VsZWN0aXplSURdLml0ZW1zOwogICAgICAgIHZhciBmaXJzdCA9IFt7dmFsdWU6ICIiLCBsYWJlbDogIihBbGwpIn1dOwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgb3B0aW9uczogZmlyc3QuY29uY2F0KGl0ZW1zKSwKICAgICAgICAgIHNlYXJjaEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgdmFsdWVGaWVsZDogInZhbHVlIiwKICAgICAgICAgIGxhYmVsRmllbGQ6ICJsYWJlbCIsCiAgICAgICAgICBtYXhJdGVtczogNTAKICAgICAgICB9OwogICAgICAgIHZhciBzZWxlY3QgPSAkKCIjIiArIHNlbGVjdGl6ZUlEKS5maW5kKCJzZWxlY3QiKVswXTsKICAgICAgICB2YXIgc2VsZWN0aXplID0gJChzZWxlY3QpLnNlbGVjdGl6ZShvcHRzKVswXS5zZWxlY3RpemU7CiAgICAgICAgLy8gTk9URTogdGhpcyBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiAqZGlyZWN0bHkqIGFsdGVyaW5nIAogICAgICAgIC8vIGRyb3Bkb3duIGl0ZW1zCiAgICAgICAgc2VsZWN0aXplLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBjdXJyZW50SXRlbXMgPSB0cmFjZU1hbmFnZXIuZ3JvdXBTZWxlY3Rpb25zW3NldF0gfHwgW107CiAgICAgICAgICBpZiAoIXguaGlnaGxpZ2h0LnBlcnNpc3RlbnQpIHsKICAgICAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHNlbGVjdGl6ZS5yZW1vdmVJdGVtKGN1cnJlbnRJdGVtc1tpXSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHZhciBuZXdJdGVtcyA9IHNlbGVjdGl6ZS5pdGVtcy5maWx0ZXIoZnVuY3Rpb24oaWR4KSB7IAogICAgICAgICAgICByZXR1cm4gY3VycmVudEl0ZW1zLmluZGV4T2YoaWR4KSA8IDA7CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVTZWxlY3Rpb24oc2V0LCBuZXdJdGVtcyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJdGVtIGhhcyBiZWVuIHJlbW92ZWQuLi4KICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBsb2dpYyB3b24ndCB3b3JrIGZvciBkeW5hbWljYWxseSBjaGFuZ2luZyBwYWxldHRlIAogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbnVsbCk7CiAgICAgICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVTZWxlY3Rpb24oc2V0LCBzZWxlY3RpemUuaXRlbXMpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgICAgIAogICAgICAKICAgICAgCiAgICB9CiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgfHwgMTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpIDwgdGhpcy5nZC5kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHRyYWNlc1RvUmVtb3ZlLnB1c2goaSk7CiAgICB9CiAgICBQbG90bHkuZGVsZXRlVHJhY2VzKHRoaXMuZ2QsIHRyYWNlc1RvUmVtb3ZlKTsKICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSA9IGtleXM7CiAgfSBlbHNlIHsKICAgIC8vIGFkZCB0byB0aGUgZ3JvdXBTZWxlY3Rpb24sIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIGl0CiAgICAvLyBUT0RPOiBjYW4gdGhpcyBiZSByZW1vdmVkPwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0gdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdIHx8IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBrID0ga2V5c1tpXTsKICAgICAgaWYgKHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXS5pbmRleE9mKGspIDwgMCkgewogICAgICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXS5wdXNoKGspOwogICAgICB9CiAgICB9CiAgfQogIAogIGlmIChrZXlzID09PSBudWxsKSB7CiAgICAKICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IHRoaXMub3JpZ09wYWNpdHl9KTsKICAgIAogIH0gZWxzZSBpZiAoa2V5cy5sZW5ndGggPj0gMSkgewogICAgCiAgICAvLyBwbGFjZWhvbGRlciBmb3IgbmV3ICJzZWxlY3Rpb24gdHJhY2VzIgogICAgdmFyIHRyYWNlcyA9IFtdOwogICAgLy8gdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gUi9oaWdobGlnaHQuUgogICAgdmFyIHNlbGVjdGlvbkNvbG91ciA9IGNyb3NzdGFsay5ncm91cChncm91cCkudmFyKCJwbG90bHlTZWxlY3Rpb25Db2xvdXIiKS5nZXQoKSB8fCAKICAgICAgdGhpcy5oaWdobGlnaHQuY29sb3JbMF07CgogICAgLy8gc2VsZWN0aW9uIGJydXNoIGF0dHJpYnV0ZXMKICAgIHZhciBzZWxlY3RBdHRycyA9IE9iamVjdC5rZXlzKHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyBBcHBseSBzZWxlY3Rpb24gYnJ1c2ggYXR0cmlidXRlcyAoc3VwcGxpZWQgZnJvbSBSKQogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdEF0dHJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICB2YXIgYXR0ciA9IHNlbGVjdEF0dHJzW2pdOwogICAgICAgICAgdHJhY2VbYXR0cl0gPSB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZFthdHRyXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gaWYgaXQgaXMgZGVmaW5lZCwgb3ZlcnJpZGUgY29sb3Igd2l0aCB0aGUgImR5bmFtaWMgYnJ1c2ggY29sb3IiIgogICAgICAgIC8vIFRPRE86IERSWSB0aGlzIHVwCiAgICAgICAgdmFyIGQgPSB0aGlzLmdkLl9mdWxsRGF0YVtpXTsKICAgICAgICBpZiAoZC5tYXJrZXIpIHsKICAgICAgICAgIHRyYWNlLm1hcmtlciA9IHRyYWNlLm1hcmtlciB8fCB7fTsKICAgICAgICAgIHRyYWNlLm1hcmtlci5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UubWFya2VyLmNvbG9yIHx8IGQubWFya2VyLmNvbG9yOwogICAgICAgICAgCiAgICAgICAgICAvLyBhZG9wdCBhbnkgdXNlci1kZWZpbmVkIHN0eWxpbmcgZm9yIHRoZSBzZWxlY3Rpb24KICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkLm1hcmtlciB8fCB7fTsKICAgICAgICAgIHZhciBhdHRycyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkKTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdHJhY2UubWFya2VyW2F0dHJzW2pdXSA9IHNlbGVjdGVkW2F0dHJzW2pdXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRvcHQgYW55IHVzZXItZGVmaW5lZCBzdHlsaW5nIGZvciB0aGUgc2VsZWN0aW9uCiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZC5saW5lIHx8IHt9OwogICAgICAgICAgdmFyIGF0dHJzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWQpOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykgewogICAgICAgICAgICB0cmFjZS5saW5lW2F0dHJzW2pdXSA9IHNlbGVjdGVkW2F0dHJzW2pdXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRvcHQgYW55IHVzZXItZGVmaW5lZCBzdHlsaW5nIGZvciB0aGUgc2VsZWN0aW9uCiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZC50ZXh0Zm9udCB8fCB7fTsKICAgICAgICAgIHZhciBhdHRycyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkKTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdHJhY2UudGV4dGZvbnRbYXR0cnNbal1dID0gc2VsZWN0ZWRbYXR0cnNbal1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBhdHRhY2ggYSBzZW5zaWJsZSBuYW1lL2xlZ2VuZGdyb3VwCiAgICAgICAgdHJhY2UubmFtZSA9IHRyYWNlLm5hbWUgfHwga2V5cy5qb2luKCI8YnIgLz4iKTsKICAgICAgICB0cmFjZS5sZWdlbmRncm91cCA9IHRyYWNlLmxlZ2VuZGdyb3VwIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgCiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBtYXBwaW5nIGJldHdlZW4gdGhpcyBuZXcgdHJhY2UgYW5kIHRoZSB0cmFjZSBpdCB0YXJnZXRzCiAgICAgICAgLy8gKG5lY2Vzc2FyeSBmb3IgdXBkYXRpbmcgZnJhbWVzIHRvIHJlZmxlY3QgdGhlIHNlbGVjdGlvbiB0cmFjZXMpCiAgICAgICAgdHJhY2UuX29yaWdpbmFsSW5kZXggPSBpOwogICAgICAgIHRyYWNlLl9uZXdJbmRleCA9IHRoaXMuZ2QuX2Z1bGxEYXRhLmxlbmd0aCArIHRyYWNlcy5sZW5ndGg7CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgICAKICAgIGlmICh0cmFjZXMubGVuZ3RoID4gMCkgewogICAgICAKICAgICAgUGxvdGx5LmFkZFRyYWNlcyh0aGlzLmdkLCB0cmFjZXMpLnRoZW4oZnVuY3Rpb24oZ2QpIHsKICAgICAgICAvLyBpbmNyZW1lbnRhbGx5IGFkZCBzZWxlY3Rpb24gdHJhY2VzIHRvIGZyYW1lcwogICAgICAgIC8vICh0aGlzIGlzIGhlYXZpbHkgaW5zcGlyZWQgYnkgUGxvdGx5LlBsb3RzLm1vZGlmeUZyYW1lcygpIAogICAgICAgIC8vIGluIHNyYy9wbG90cy9wbG90cy5qcykKICAgICAgICB2YXIgX2hhc2ggPSBnZC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDsKICAgICAgICB2YXIgX2ZyYW1lcyA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzIHx8IFtdOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2ZyYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgCiAgICAgICAgICAvLyBhZGQgdG8gX2ZyYW1lc1tpXS50cmFjZXMgKmlmKiB0aGlzIGZyYW1lIHJlZmVyZW5jZXMgc2VsZWN0ZWQgdHJhY2UocykKICAgICAgICAgIHZhciBuZXdJbmRpY2VzID0gW107CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRyYWNlcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICB2YXIgdHIgPSB0cmFjZXNbal07CiAgICAgICAgICAgIGlmIChfZnJhbWVzW2ldLnRyYWNlcy5pbmRleE9mKHRyLl9vcmlnaW5hbEluZGV4KSA+IC0xKSB7CiAgICAgICAgICAgICAgbmV3SW5kaWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS50cmFjZXMucHVzaCh0ci5fbmV3SW5kZXgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uLi4KICAgICAgICAgIGlmIChuZXdJbmRpY2VzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgdmFyIGN0ciA9IDA7CiAgICAgICAgICB2YXIgbkZyYW1lVHJhY2VzID0gX2ZyYW1lc1tpXS5kYXRhLmxlbmd0aDsKICAgICAgICAgIAogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuRnJhbWVUcmFjZXM7IGorKykgewogICAgICAgICAgICB2YXIgZnJhbWVUcmFjZSA9IF9mcmFtZXNbaV0uZGF0YVtqXTsKICAgICAgICAgICAgaWYgKCFmcmFtZVRyYWNlLmtleSB8fCBmcmFtZVRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyhmcmFtZVRyYWNlKTsKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaEZ1bmMoZnJhbWVUcmFjZS5rZXksIGtleXMpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlID0gc3Vic2V0QXJyYXlBdHRycyhmcmFtZVRyYWNlLCBtYXRjaGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIGQgPSBnZC5fZnVsbERhdGFbbmV3SW5kaWNlc1tjdHJdXTsKICAgICAgICAgICAgICBpZiAoZC5tYXJrZXIpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UubWFya2VyID0gZC5tYXJrZXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChkLmxpbmUpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UubGluZSA9IGQubGluZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UudGV4dGZvbnQgPSBkLnRleHRmb250OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjdHIgPSBjdHIgKyAxOwogICAgICAgICAgICAgIF9mcmFtZXNbaV0uZGF0YS5wdXNoKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIC8vIHVwZGF0ZSBnZC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaAogICAgICAgICAgX2hhc2hbX2ZyYW1lc1tpXS5uYW1lXSA9IF9mcmFtZXNbaV07CiAgICAgICAgfQogICAgICAKICAgICAgfSk7CiAgICAgIAogICAgICAvLyBkaW0gdHJhY2VzIHRoYXQgaGF2ZSBhIHNldCBtYXRjaGluZyB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzCiAgICAgIHZhciB0cmFjZXNUb0RpbSA9IFtdLAogICAgICAgICAgb3BhY2l0aWVzID0gW10sCiAgICAgICAgICBzZXRzID0gT2JqZWN0LmtleXModGhpcy5ncm91cFNlbGVjdGlvbnMpLAogICAgICAgICAgbiA9IHRoaXMub3JpZ0RhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgdmFyIG9wYWNpdHkgPSB0aGlzLm9yaWdPcGFjaXR5W2ldIHx8IDE7CiAgICAgICAgLy8gaGF2ZSB3ZSBhbHJlYWR5IGRpbW1lZCB0aGlzIHRyYWNlPyBPciBpcyB0aGlzIGV2ZW4gd29ydGggZG9pbmc/CiAgICAgICAgaWYgKG9wYWNpdHkgIT09IHRoaXMuZ2QuX2Z1bGxEYXRhW2ldLm9wYWNpdHkgfHwgdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSA9PT0gMSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIC8vIGlzIHRoaXMgc2V0IGFuIGVsZW1lbnQgb2YgdGhlIHNldCBvZiBzZWxlY3Rpb24gc2V0cz8KICAgICAgICB2YXIgbWF0Y2hlcyA9IGZpbmRNYXRjaGVzKHNldHMsIFt0aGlzLmdkLmRhdGFbaV0uc2V0XSk7CiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSB7CiAgICAgICAgICB0cmFjZXNUb0RpbS5wdXNoKGkpOwogICAgICAgICAgb3BhY2l0aWVzLnB1c2gob3BhY2l0eSAqIHRoaXMuaGlnaGxpZ2h0Lm9wYWNpdHlEaW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgaWYgKHRyYWNlc1RvRGltLmxlbmd0aCA+IDApIHsKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7Im9wYWNpdHkiOiBvcGFjaXRpZXN9LCB0cmFjZXNUb0RpbSk7CiAgICAgIH0KICAgICAgCiAgICB9CiAgICAKICB9Cn07CgovKiAKTm90ZTogaW4gYWxsIG9mIHRoZXNlIG1hdGNoIGZ1bmN0aW9ucywgd2UgYXNzdW1lIG5lZWRsZVNldCAoaS5lLiB0aGUgc2VsZWN0ZWQga2V5cykKaXMgYSAxRCAob3IgZmxhdCkgYXJyYXkuIFRoZSByZWFsIGRpZmZlcmVuY2UgaXMgdGhlIG1lYW5pbmcgb2YgaGF5c3RhY2suCmZpbmRNYXRjaGVzKCkgZG9lcyB0aGUgdXN1YWwgdGhpbmcgeW91J2QgZXhwZWN0IGZvciAKbGlua2VkIGJydXNoaW5nIG9uIGEgc2NhdHRlcnBsb3QgbWF0cml4LiBmaW5kU2ltcGxlTWF0Y2hlcygpIHJldHVybnMgYSBtYXRjaCBpZmYgCmhheXN0YWNrIGlzIGEgc3Vic2V0IG9mIHRoZSBuZWVkbGVTZXQuIGZpbmROZXN0ZWRNYXRjaGVzKCkgcmV0dXJucyAKKi8KCmZ1bmN0aW9uIGdldE1hdGNoRnVuYyh0cmFjZSkgewogIHJldHVybiAodHJhY2UuX2lzTmVzdGVkS2V5KSA/IGZpbmROZXN0ZWRNYXRjaGVzIDogCiAgICAodHJhY2UuX2lzU2ltcGxlS2V5KSA/IGZpbmRTaW1wbGVNYXRjaGVzIDogZmluZE1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgImZsYXQiIGtleXMKZnVuY3Rpb24gZmluZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgaGF5c3RhY2suZm9yRWFjaChmdW5jdGlvbihvYmosIGkpIHsKICAgIGlmIChvYmogPT09IG51bGwgfHwgbmVlZGxlU2V0LmluZGV4T2Yob2JqKSA+PSAwKSB7CiAgICAgIG1hdGNoZXMucHVzaChpKTsKICAgIH0KICB9KTsKICByZXR1cm4gbWF0Y2hlczsKfQoKLy8gZmluZCBtYXRjaGVzIGZvciAic2ltcGxlIiBrZXlzCmZ1bmN0aW9uIGZpbmRTaW1wbGVNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2ggPSBoYXlzdGFjay5ldmVyeShmdW5jdGlvbih2YWwpIHsKICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgbmVlZGxlU2V0LmluZGV4T2YodmFsKSA+PSAwOwogIH0pOwogIC8vIHllcywgdGhpcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBvdGhlciB0aGFuIGNvbmZvcm1pbmcgCiAgLy8gdG8gdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBvdGhlciBtYXRjaCBmdW5jdGlvbnMKICByZXR1cm4gKG1hdGNoKSA/IFswXSA6IFtdCn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgYSAibmVzdGVkIiBoYXlzdGFjayAoMkQgYXJyYXlzKQpmdW5jdGlvbiBmaW5kTmVzdGVkTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoZXMgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgaGF5ID0gaGF5c3RhY2tbaV07CiAgICB2YXIgbWF0Y2ggPSBoYXkuZXZlcnkoZnVuY3Rpb24odmFsKSB7IAogICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsgCiAgICB9KTsKICAgIGlmIChtYXRjaCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfQogIHJldHVybiBtYXRjaGVzOwp9CgpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiAoCiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgJiYKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBPYmplY3QucHJvdG90eXBlCiAgKTsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXlBdHRycyhvYmosIGluZGljZXMpIHsKICB2YXIgbmV3T2JqID0ge307CiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKICAgIHZhciB2YWwgPSBvYmpba107CgogICAgaWYgKGsuY2hhckF0KDApID09PSAiXyIpIHsKICAgICAgbmV3T2JqW2tdID0gdmFsOwogICAgfSBlbHNlIGlmIChrID09PSAidHJhbnNmb3JtcyIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbC5tYXAoZnVuY3Rpb24odHJhbnNmb3JtKSB7CiAgICAgICAgcmV0dXJuIHN1YnNldEFycmF5QXR0cnModHJhbnNmb3JtLCBpbmRpY2VzKTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKGsgPT09ICJjb2xvcnNjYWxlIiAmJiBBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgbmV3T2JqW2tdID0gdmFsOwogICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHsKICAgICAgbmV3T2JqW2tdID0gc3Vic2V0QXJyYXlBdHRycyh2YWwsIGluZGljZXMpOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgbmV3T2JqW2tdID0gc3Vic2V0QXJyYXkodmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0KICB9KTsKICByZXR1cm4gbmV3T2JqOwp9CgpmdW5jdGlvbiBzdWJzZXRBcnJheShhcnIsIGluZGljZXMpIHsKICB2YXIgcmVzdWx0ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICByZXN1bHQucHVzaChhcnJbaW5kaWNlc1tpXV0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVtb3ZpbmcgcGxvdGx5J3MgYnJ1c2ggCmZ1bmN0aW9uIHJlbW92ZUJydXNoKGVsKSB7CiAgdmFyIG91dGxpbmVzID0gZWwucXVlcnlTZWxlY3RvckFsbCgiLnNlbGVjdC1vdXRsaW5lIik7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRsaW5lcy5sZW5ndGg7IGkrKykgewogICAgb3V0bGluZXNbaV0ucmVtb3ZlKCk7CiAgfQp9Cg==”></script> <script src=“data:application/x-javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw==”></script> <script src=“data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4zIHwgKGMpIDIwMDUsIDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMyIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSkrMT49MH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2lmKCFhfHwib2JqZWN0IiE9PW0udHlwZShhKXx8YS5ub2RlVHlwZXx8bS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhai5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9aWYoay5vd25MYXN0KWZvcihiIGluIGEpcmV0dXJuIGouY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxqLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aFtpLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZtLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UobywibXMtIikucmVwbGFjZShwLHEpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9MCxmPWEubGVuZ3RoLGc9cihhKTtpZihjKXtpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShuLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihyKE9iamVjdChhKSk/bS5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zi5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGcpcmV0dXJuIGcuY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPTAsZz1hLmxlbmd0aCxoPXIoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKylkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtlbHNlIGZvcihmIGluIGEpZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7cmV0dXJuIGUuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9ZiksbS5pc0Z1bmN0aW9uKGEpPyhjPWQuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fG0uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omt9KSxtLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHIoYSl7dmFyIGI9Imxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW0udHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iPT09Y3x8bS5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDoiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgcz1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtdLEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTj1NLnJlcGxhY2UoInciLCJ3IyIpLE89IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitOKyIpKXwpIitMKyIqXFxdIixQPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTysiKSopfC4qKVxcKXwpIixRPW5ldyBSZWdFeHAoTCsiKyIsImciKSxSPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxVPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChQKSxXPW5ldyBSZWdFeHAoIl4iK04rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1ApLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYT0vWyt+XS8sYmE9Lyd8XFwvZyxjYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksZGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGVhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3LHg7aWYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4sZD1kfHxbXSxrPWIubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIGQ7aWYoIWUmJnApe2lmKDExIT09ayYmKGY9Xy5leGVjKGEpKSlpZihqPWZbMV0pe2lmKDk9PT1rKXtpZihoPWIuZ2V0RWxlbWVudEJ5SWQoaiksIWh8fCFoLnBhcmVudE5vZGUpcmV0dXJuIGQ7aWYoaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2UgaWYoYi5vd25lckRvY3VtZW50JiYoaD1iLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaikpJiZ0KGIsaCkmJmguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNle2lmKGZbMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChqPWZbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTEhPT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYSwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3JhKG9bbF0pO3c9YWEudGVzdChhKSYmcGEoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGhhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gaWEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaWEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBwYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWdhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1nLmRvY3VtZW50RWxlbWVudCxlPWcuZGVmYXVsdFZpZXcsZSYmZSE9PWUudG9wJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixlYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGVhKSkscD0hZihnKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhZy5nZXRFbGVtZW50c0J5TmFtZXx8IWcuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGMmJmMucGFyZW50Tm9kZT9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuIHA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZy5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5wdXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgiOmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNoKCIuIy4rWyt+XSIpfSksamEoZnVuY3Rpb24oYSl7dmFyIGI9Zy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9JC50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZqYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3MhPScnXTp4Iiksci5wdXNoKCIhPSIsUCl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigifCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPSQudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fCQudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PWd8fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09Z3x8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PWc/LTE6Yj09PWc/MTplPy0xOmY/MTprP0ooayxhKS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlpLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWlbZF0pZCsrO3JldHVybiBkP2xhKGhbZF0saVtkXSk6aFtkXT09PXY/LTE6aVtkXT09PXY/MTowfSxnKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVSwiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFwfHxyJiZyLnRlc3QoYil8fHEmJnEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZ2EudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWdhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1nYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzppYSxtYXRjaDpYLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoY2EsZGEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGNhLGRhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8Z2EuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZ2EuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVi50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9Z2EuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShRLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7az1xW3VdfHwocVt1XT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLG09alswXT09PXcmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3csbixtXTticmVha319ZWxzZSBpZihzJiYoaj0oYlt1XXx8KGJbdV09e30pKVthXSkmJmpbMF09PT13KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJihzJiYoKGxbdV18fChsW3VdPXt9KSlbYV09W3csbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9pYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDppYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGNhLGRhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzppYShmdW5jdGlvbihhKXtyZXR1cm4gVy50ZXN0KGF8fCIiKXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBaLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om9hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpvYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6b2EoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6b2EoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW5hKGIpO2Z1bmN0aW9uIHFhKCl7fXFhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcWEsZz1nYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXsoIWN8fChlPVMuZXhlYyhoKSkpJiYoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1ULmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFIsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1YW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiByYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbdV18fChiW3VdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiB0YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB1YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB2YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXdhKGQpKSxlJiYhZVt1XSYmKGU9d2EoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dWEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dmEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXZhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj12YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24geGEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1zYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bc2EodGEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHdhKGk+MSYmdGEobSksaT4xJiZyYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFIsIiQxIiksYyxlPmkmJnhhKGEuc2xpY2UoaSxlKSksZj5lJiZ4YShhPWEuc2xpY2UoZSkpLGY+ZSYmcmEoYSkpfW0ucHVzaChjKX1yZXR1cm4gdGEobSl9ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbSxvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1qLHU9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdj13Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD11Lmxlbmd0aDtmb3IoayYmKGo9ZyE9PW4mJmcpO3EhPT14JiZudWxsIT0obD11W3FdKTtxKyspe2lmKGUmJmwpe209MDt3aGlsZShvPWFbbSsrXSlpZihvKGwsZyxoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXYpfWMmJigobD0hbyYmbCkmJnAtLSxmJiZyLnB1c2gobCkpfWlmKHArPXEsYyYmcSE9PXApe209MDt3aGlsZShvPWJbbSsrXSlvKHIscyxnLGgpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09Ri5jYWxsKGkpKTtzPXZhKHMpfUguYXBwbHkoaSxzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz12LGo9dCkscn07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eGEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHlhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9WC5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2EsZGEpLGFhLnRlc3QoalswXS50eXBlKSYmcGEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnJhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLGFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpvaW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJpbnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTttLmZpbmQ9cyxtLmV4cHI9cy5zZWxlY3RvcnMsbS5leHByWyI6Il09bS5leHByLnBzZXVkb3MsbS51bmlxdWU9cy51bmlxdWVTb3J0LG0udGV4dD1zLmdldFRleHQsbS5pc1hNTERvYz1zLmlzWE1MLG0uY29udGFpbnM9cy5jb250YWluczt2YXIgdD1tLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHU9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx2PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24gdyhhLGIsYyl7aWYobS5pc0Z1bmN0aW9uKGIpKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih2LnRlc3QoYikpcmV0dXJuIG0uZmlsdGVyKGIsYSxjKTtiPW0uZmlsdGVyKGIsYSl9cmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBtLmluQXJyYXkoYSxiKT49MCE9PWN9KX1tLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9tLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm0uZmluZC5tYXRjaGVzKGEsbS5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxtLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobShhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobS5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyltLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9tLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhdyh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdC50ZXN0KGEpP20oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgeCx5PWEuZG9jdW1lbnQsej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bS5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YS5jaGFyQXQoMCkmJiI+Ij09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOnouZXhlYyhhKSwhY3x8IWNbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHx4KS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihjWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBtP2JbMF06YixtLm1lcmdlKHRoaXMsbS5wYXJzZUhUTUwoY1sxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8Yjp5LCEwKSksdS50ZXN0KGNbMV0pJiZtLmlzUGxhaW5PYmplY3QoYikpZm9yKGMgaW4gYiltLmlzRnVuY3Rpb24odGhpc1tjXSk/dGhpc1tjXShiW2NdKTp0aGlzLmF0dHIoYyxiW2NdKTtyZXR1cm4gdGhpc31pZihkPXkuZ2V0RWxlbWVudEJ5SWQoY1syXSksZCYmZC5wYXJlbnROb2RlKXtpZihkLmlkIT09Y1syXSlyZXR1cm4geC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1kfXJldHVybiB0aGlzLmNvbnRleHQ9eSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIHgucmVhZHk/eC5yZWFkeShhKTphKG0pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG0ubWFrZUFycmF5KGEsdGhpcykpfTtBLnByb3RvdHlwZT1tLmZuLHg9bSh5KTt2YXIgQj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxDPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O20uZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9YVtiXTt3aGlsZShlJiY5IT09ZS5ub2RlVHlwZSYmKHZvaWQgMD09PWN8fDEhPT1lLm5vZGVUeXBlfHwhbShlKS5pcyhjKSkpMT09PWUubm9kZVR5cGUmJmQucHVzaChlKSxlPWVbYl07cmV0dXJuIGR9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSksbS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW0oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihtLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dC50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bShhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbS5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP20udW5pcXVlKGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/bS5pbkFycmF5KHRoaXNbMF0sbShhKSk6bS5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtLnVuaXF1ZShtLm1lcmdlKHRoaXMuZ2V0KCksbShhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBEKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1tLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50Om0ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW0ubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9bS5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKENbYV18fChlPW0udW5pcXVlKGUpKSxCLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEU9L1xTKy9nLEY9e307ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBtLmVhY2goYS5tYXRjaChFKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1tLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBlb2YgYT9GW2FdfHxHKGEpOm0uZXh0ZW5kKHt9LGEpO3ZhciBiLGMsZCxlLGYsZyxoPVtdLGk9IWEub25jZSYmW10saj1mdW5jdGlvbihsKXtmb3IoYz1hLm1lbW9yeSYmbCxkPSEwLGY9Z3x8MCxnPTAsZT1oLmxlbmd0aCxiPSEwO2gmJmU+ZjtmKyspaWYoaFtmXS5hcHBseShsWzBdLGxbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9Yj0hMSxoJiYoaT9pLmxlbmd0aCYmaihpLnNoaWZ0KCkpOmM/aD1bXTprLmRpc2FibGUoKSl9LGs9e2FkZDpmdW5jdGlvbigpe2lmKGgpe3ZhciBkPWgubGVuZ3RoOyFmdW5jdGlvbiBmKGIpe20uZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9bS50eXBlKGMpOyJmdW5jdGlvbiI9PT1kP2EudW5pcXVlJiZrLmhhcyhjKXx8aC5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PWQmJmYoYyl9KX0oYXJndW1lbnRzKSxiP2U9aC5sZW5ndGg6YyYmKGc9ZCxqKGMpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGgmJm0uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxjKXt2YXIgZDt3aGlsZSgoZD1tLmluQXJyYXkoYyxoLGQpKT4tMSloLnNwbGljZShkLDEpLGImJihlPj1kJiZlLS0sZj49ZCYmZi0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9tLmluQXJyYXkoYSxoKT4tMTohKCFofHwhaC5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBoPVtdLGU9MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGg9aT1jPXZvaWQgMCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFofSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9dm9pZCAwLGN8fGsuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiFpfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiFofHxkJiYhaXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxiP2kucHVzaChjKTpqKGMpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGt9LG0uZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1bWyJyZXNvbHZlIiwiZG9uZSIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIixtLkNhbGxiYWNrcygibWVtb3J5IildXSxjPSJwZW5kaW5nIixkPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIG0uRGVmZXJyZWQoZnVuY3Rpb24oYyl7bS5lYWNoKGIsZnVuY3Rpb24oYixmKXt2YXIgZz1tLmlzRnVuY3Rpb24oYVtiXSkmJmFbYl07ZVtmWzFdXShmdW5jdGlvbigpe3ZhciBhPWcmJmcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSk6Y1tmWzBdKyJXaXRoIl0odGhpcz09PWQ/Yy5wcm9taXNlKCk6dGhpcyxnP1thXTphcmd1bWVudHMpfSl9KSxhPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/bS5leHRlbmQoYSxkKTpkfX0sZT17fTtyZXR1cm4gZC5waXBlPWQudGhlbixtLmVhY2goYixmdW5jdGlvbihhLGYpe3ZhciBnPWZbMl0saD1mWzNdO2RbZlsxXV09Zy5hZGQsaCYmZy5hZGQoZnVuY3Rpb24oKXtjPWh9LGJbMV5hXVsyXS5kaXNhYmxlLGJbMl1bMl0ubG9jayksZVtmWzBdXT1mdW5jdGlvbigpe3JldHVybiBlW2ZbMF0rIldpdGgiXSh0aGlzPT09ZT9kOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWQuY2FsbChhcmd1bWVudHMpLGU9Yy5sZW5ndGgsZj0xIT09ZXx8YSYmbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZTowLGc9MT09PWY/YTptLkRlZmVycmVkKCksaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGUpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTplLGM9PT1pP2cubm90aWZ5V2l0aChiLGMpOi0tZnx8Zy5yZXNvbHZlV2l0aChiLGMpfX0saSxqLGs7aWYoZT4xKWZvcihpPW5ldyBBcnJheShlKSxqPW5ldyBBcnJheShlKSxrPW5ldyBBcnJheShlKTtlPmI7YisrKWNbYl0mJm0uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpP2NbYl0ucHJvbWlzZSgpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpLnByb2dyZXNzKGgoYixqLGkpKTotLWY7cmV0dXJuIGZ8fGcucmVzb2x2ZVdpdGgoayxjKSxnLnByb21pc2UoKX19KTt2YXIgSDttLmZuLnJlYWR5PWZ1bmN0aW9uKGEpe3JldHVybiBtLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLHRoaXN9LG0uZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP20ucmVhZHlXYWl0Kys6bS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8hLS1tLnJlYWR5V2FpdDohbS5pc1JlYWR5KXtpZigheS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KG0ucmVhZHkpO20uaXNSZWFkeT0hMCxhIT09ITAmJi0tbS5yZWFkeVdhaXQ+MHx8KEgucmVzb2x2ZVdpdGgoeSxbbV0pLG0uZm4udHJpZ2dlckhhbmRsZXImJihtKHkpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG0oeSkub2ZmKCJyZWFkeSIpKSl9fX0pO2Z1bmN0aW9uIEkoKXt5LmFkZEV2ZW50TGlzdGVuZXI/KHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKSk6KHkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSiksYS5kZXRhY2hFdmVudCgib25sb2FkIixKKSl9ZnVuY3Rpb24gSigpeyh5LmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWV2ZW50LnR5cGV8fCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpJiYoSSgpLG0ucmVhZHkoKSl9bS5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIpe2lmKCFIKWlmKEg9bS5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpc2V0VGltZW91dChtLnJlYWR5KTtlbHNlIGlmKHkuYWRkRXZlbnRMaXN0ZW5lcil5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSk7ZWxzZXt5LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik7dmFyIGM9ITE7dHJ5e2M9bnVsbD09YS5mcmFtZUVsZW1lbnQmJnkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGQpe31jJiZjLmRvU2Nyb2xsJiYhZnVuY3Rpb24gZSgpe2lmKCFtLmlzUmVhZHkpe3RyeXtjLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7cmV0dXJuIHNldFRpbWVvdXQoZSw1MCl9SSgpLG0ucmVhZHkoKX19KCl9cmV0dXJuIEgucHJvbWlzZShiKX07dmFyIEs9InVuZGVmaW5lZCIsTDtmb3IoTCBpbiBtKGspKWJyZWFrO2sub3duTGFzdD0iMCIhPT1MLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxtKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09SyYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChkKSl9KSxmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYobnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2goYil7ay5kZWxldGVFeHBhbmRvPSExfX1hPW51bGx9KCksbS5hY2NlcHREYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPW0ubm9EYXRhWyhhLm5vZGVOYW1lKyIgIikudG9Mb3dlckNhc2UoKV0sYz0rYS5ub2RlVHlwZXx8MTtyZXR1cm4gMSE9PWMmJjkhPT1jPyExOiFifHxiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifTt2YXIgTT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE49LyhbQS1aXSkvZztmdW5jdGlvbiBPKGEsYixjKXtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSl7dmFyIGQ9ImRhdGEtIitiLnJlcGxhY2UoTiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk0udGVzdChjKT9tLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31tLmRhdGEoYSxiLGMpfWVsc2UgYz12b2lkIDB9cmV0dXJuIGN9ZnVuY3Rpb24gUChhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbS5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExOwoKcmV0dXJuITB9ZnVuY3Rpb24gUShhLGIsZCxlKXtpZihtLmFjY2VwdERhdGEoYSkpe3ZhciBmLGcsaD1tLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9tLmNhY2hlOmEsaz1pP2FbaF06YVtoXSYmaDtpZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWEoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGNhKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2EoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWE6YmEpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJhLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJhLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJhLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFhLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmE7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRhKGEpe3ZhciBiPWVhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYT0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmE9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYT1uZXcgUmVnRXhwKCI8KD86IitlYSsiKVtcXHMvPl0iLCJpIiksaGE9L15ccysvLGlhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamE9LzwoW1x3Ol0rKS8sa2E9Lzx0Ym9keS9pLGxhPS88fCYjP1x3KzsvLG1hPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2E9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBhPS9edHJ1ZVwvKC4qKS8scWE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJhPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2E9ZGEoeSksdGE9c2EuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmEub3B0Z3JvdXA9cmEub3B0aW9uLHJhLnRib2R5PXJhLnRmb290PXJhLmNvbGdyb3VwPXJhLmNhcHRpb249cmEudGhlYWQscmEudGg9cmEudGQ7ZnVuY3Rpb24gdWEoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWEoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZhKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdhKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWEoYSl7dmFyIGI9cGEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGEoYikudGV4dD1hLnRleHQseWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRhLmlubmVySFRNTD1hLm91dGVySFRNTCx0YS5yZW1vdmVDaGlsZChmPXRhLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YShmKSxoPXVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmEoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWEoYSksZD1kfHx1YShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFhKGUsZFtnXSk7ZWxzZSBBYShhLGYpO3JldHVybiBkPXVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnphKGQsIWkmJnVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYShiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYS50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamEuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJhW2ldfHxyYS5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYSwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhhLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2EudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYS50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHVhKHAsImlucHV0IiksdmEpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXVhKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnphKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2EudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13YSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWEoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6YSh1YShjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmEsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWEudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2EudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoYSl8fHJhWyhqYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGlhLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YShiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWEodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5hLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YShpLCJzY3JpcHQiKSx4YSksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWEoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWEpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYS50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWEsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENhLERhPXt9O2Z1bmN0aW9uIEVhKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYShhKXt2YXIgYj15LGM9RGFbYV07cmV0dXJuIGN8fChjPUVhKGEsYiksIm5vbmUiIT09YyYmY3x8KENhPShDYXx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2FbMF0uY29udGVudFdpbmRvd3x8Q2FbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWEoYSxiKSxDYS5kZXRhY2goKSksRGFbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYT0vXm1hcmdpbi8sSGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYSxKYSxLYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYT1mdW5jdGlvbihiKXtyZXR1cm4gYi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lm9wZW5lcj9iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl06dm9pZCAwLGMmJigiIiE9PWd8fG0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1tLnN0eWxlKGEsYikpLEhhLnRlc3QoZykmJkdhLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMD09PWc/ZzpnKyIifSk6eS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoSWE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY3VycmVudFN0eWxlfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jW2JdOnZvaWQgMCxudWxsPT1nJiZoJiZoW2JdJiYoZz1oW2JdKSxIYS50ZXN0KGcpJiYhS2EudGVzdChiKSYmKGQ9aC5sZWZ0LGU9YS5ydW50aW1lU3R5bGUsZj1lJiZlLmxlZnQsZiYmKGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxoLmxlZnQ9ImZvbnRTaXplIj09PWI/IjFlbSI6ZyxnPWgucGl4ZWxMZWZ0KyJweCIsaC5sZWZ0PWQsZiYmKGUubGVmdD1mKSksdm9pZCAwPT09Zz9nOmcrIiJ8fCJhdXRvIn0pO2Z1bmN0aW9uIExhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3ZhciBjPWEoKTtpZihudWxsIT1jKXJldHVybiBjP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0hZnVuY3Rpb24oKXt2YXIgYixjLGQsZSxmLGcsaDtpZihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sYz1kJiZkLnN0eWxlKXtjLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsay5vcGFjaXR5PSIwLjUiPT09Yy5vcGFjaXR5LGsuY3NzRmxvYXQ9ISFjLmNzc0Zsb2F0LGIuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixiLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsay5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWIuc3R5bGUuYmFja2dyb3VuZENsaXAsay5ib3hTaXppbmc9IiI9PT1jLmJveFNpemluZ3x8IiI9PT1jLk1vekJveFNpemluZ3x8IiI9PT1jLldlYmtpdEJveFNpemluZyxtLmV4dGVuZChrLHtyZWxpYWJsZUhpZGRlbk9mZnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZyYmaSgpLGd9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWYmJmkoKSxmfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWUmJmkoKSxlfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWgmJmkoKSxofX0pO2Z1bmN0aW9uIGkoKXt2YXIgYixjLGQsaTtjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlJiYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLGIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLGU9Zj0hMSxoPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGU9IjElIiE9PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e30pLnRvcCxmPSI0cHgiPT09KGEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxpPWIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSksaS5zdHlsZS5jc3NUZXh0PWIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixpLnN0eWxlLm1hcmdpblJpZ2h0PWkuc3R5bGUud2lkdGg9IjAiLGIuc3R5bGUud2lkdGg9IjFweCIsaD0hcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS5tYXJnaW5SaWdodCksYi5yZW1vdmVDaGlsZChpKSksYi5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGk9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxpWzBdLnN0eWxlLmNzc1RleHQ9Im1hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MDtkaXNwbGF5Om5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0LGcmJihpWzBdLnN0eWxlLmRpc3BsYXk9IiIsaVsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixnPTA9PT1pWzBdLm9mZnNldEhlaWdodCksYy5yZW1vdmVDaGlsZChkKSl9fX0oKSxtLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciBNYT0vYWxwaGFcKFteKV0qXCkvaSxOYT0vb3BhY2l0eVxzKj1ccyooW14pXSopLyxPYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sUGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoLiopJCIsImkiKSxRYT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1MrIikiLCJpIiksUmE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFNhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxUYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIFVhKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1UYS5sZW5ndGg7d2hpbGUoZS0tKWlmKGI9VGFbZV0rYyxiIGluIGEpcmV0dXJuIGI7cmV0dXJuIGR9ZnVuY3Rpb24gVmEoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlUoZCkmJihmW2ddPW0uX2RhdGEoZCwib2xkZGlzcGxheSIsRmEoZC5ub2RlTmFtZSkpKSk6KGU9VShkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZtLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzptLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIFdhKGEsYixjKXt2YXIgZD1QYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIFhhKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1tLmNzcyhhLGMrVFtmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWWEoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUlhKGEpLGc9ay5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW0uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1KYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLEhhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoay5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK1hhKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1tLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPUphKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ay5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1tLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1tLmNzc1Byb3BzW2hdfHwobS5jc3NQcm9wc1toXT1VYShpLGgpKSxnPW0uY3NzSG9va3NbYl18fG0uY3NzSG9va3NbaF0sdm9pZCAwPT09YylyZXR1cm4gZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl07aWYoZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVFhLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQobS5jc3MoYSxiKSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIiE9PWZ8fG0uY3NzTnVtYmVyW2hdfHwoYys9InB4Iiksay5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpO3JldHVybiBiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVVhKGEuc3R5bGUsaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihmPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWYmJihmPUphKGEsYixkKSksIm5vcm1hbCI9PT1mJiZiIGluIFNhJiYoZj1TYVtiXSksIiI9PT1jfHxjPyhlPXBhcnNlRmxvYXQoZiksYz09PSEwfHxtLmlzTnVtZXJpYyhlKT9lfHwwOmYpOmZ9fSksbS5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/T2EudGVzdChtLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9tLnN3YXAoYSxSYSxmdW5jdGlvbigpe3JldHVybiBZYShhLGIsZCl9KTpZYShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJklhKGEpO3JldHVybiBXYShhLGMsZD9YYShhLGIsZCxrLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksay5vcGFjaXR5fHwobS5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTmEudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW0uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1tLnRyaW0oZi5yZXBsYWNlKE1hLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPU1hLnRlc3QoZik/Zi5yZXBsYWNlKE1hLGUpOmYrIiAiK2UpfX0pLG0uY3NzSG9va3MubWFyZ2luUmlnaHQ9TGEoay5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/bS5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LEphLFthLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxtLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj0ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgiICIpOltjXTs0PmQ7ZCsrKWVbYStUW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LEdhLnRlc3QoYSl8fChtLmNzc0hvb2tzW2ErYl0uc2V0PVdhKX0pLG0uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKG0uaXNBcnJheShiKSl7Zm9yKGQ9SWEoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09bS5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP20uc3R5bGUoYSxiLGMpOm0uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1UodGhpcyk/bSh0aGlzKS5zaG93KCk6bSh0aGlzKS5oaWRlKCl9KX19KTtmdW5jdGlvbiBaYShhLGIsYyxkLGUpewpyZXR1cm4gbmV3IFphLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bS5Ud2Vlbj1aYSxaYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlphLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJzd2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChtLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9WmEucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlphLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVphLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1tLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmEucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVphLnByb3RvdHlwZSxaYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFphLnByb3BIb29rcy5zY3JvbGxUb3A9WmEucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYS5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRhLF9hLGFiPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYj1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2I9L3F1ZXVlSG9va3MkLyxkYj1baWJdLGViPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJiLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJiLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGE9dm9pZCAwfSksJGE9bS5ub3coKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYihhLGIsYyl7Zm9yKHZhciBkLGU9KGViW2JdfHxbXSkuY29uY2F0KGViWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmEoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmEoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYi5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYShhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYihxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpiKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2IoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGIubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGF8fGZiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYXx8ZmIoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpiKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kYltmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGIsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYix7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlYltjXT1lYltjXXx8W10sZWJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYi51bnNoaWZ0KGEpOmRiLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtiKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2IudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2IoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdiKCJzaG93Iiksc2xpZGVVcDpnYigiaGlkZSIpLHNsaWRlVG9nZ2xlOmdiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGE9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYT12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYXx8KF9hPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2EpLF9hPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYj0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYixuYixvYj1tLmV4cHIuYXR0ckhhbmRsZSxwYj0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFiPWsuZ2V0U2V0QXR0cmlidXRlLHJiPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25iOm1iKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYiYmcWJ8fCFwYi50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFiP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmI9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYiYmcWJ8fCFwYi50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYiYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2JbYl18fG0uZmluZC5hdHRyO29iW2JdPXJiJiZxYnx8IXBiLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9iW2JdLG9iW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvYltiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmImJnFifHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1iJiZtYi5zZXQoYSxiLGMpfX0pLHFifHwobWI9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYi5pZD1vYi5uYW1lPW9iLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWIuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWIuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yj0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2IudGVzdChhLm5vZGVOYW1lKXx8dGIudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWI9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHViLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZiPW0ubm93KCksd2I9L1w/Lyx4Yj0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YixmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHliLHpiLEFiPS8jLiokLyxCYj0vKFs/Jl0pXz1bXiZdKi8sQ2I9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYj0vXig/OkdFVHxIRUFEKSQvLEZiPS9eXC9cLy8sR2I9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGI9e30sSWI9e30sSmI9IiovIi5jb25jYXQoIioiKTt0cnl7emI9bG9jYXRpb24uaHJlZn1jYXRjaChLYil7emI9eS5jcmVhdGVFbGVtZW50KCJhIiksemIuaHJlZj0iIix6Yj16Yi5ocmVmfXliPUdiLmV4ZWMoemIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYihhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emIsdHlwZToiR0VUIixpc0xvY2FsOkRiLnRlc3QoeWJbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05iKE5iKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5iKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxiKEhiKSxhamF4VHJhbnNwb3J0OkxiKEliKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNiLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpiKSsiIikucmVwbGFjZShBYiwiIikucmVwbGFjZShGYix5YlsxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdiLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWJbMV0mJmNbMl09PT15YlsyXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWJbM118fCgiaHR0cDoiPT09eWJbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWIoSGIsayxiLHYpLDI9PT10KXJldHVybiB2O2g9bS5ldmVudCYmay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWIudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdiLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJiLnRlc3QoZSk/ZS5yZXBsYWNlKEJiLCIkMV89Iit2YisrKTplKyh3Yi50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmIrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0piKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYihJYixrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9iKGssdixjKSksdT1QYihrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYj0vJTIwL2csUmI9L1xbXF0kLyxTYj0vXHI/XG4vZyxUYj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZiKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJiLnRlc3QoYSk/ZChhLGUpOlZiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFiLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYi50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2IsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmIoKXx8JGIoKX06WmI7dmFyIFdiPTAsWGI9e30sWWI9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhiKVhiW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYiYmIndpdGhDcmVkZW50aWFscyJpbiBZYixZYj1rLmFqYXg9ISFZYixZYiYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYjtpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhiW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGJbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmIoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGIoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2I9W10sYWM9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2IucG9wKCl8fG0uZXhwYW5kbysiXyIrdmIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWMudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2IucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmM9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiYylyZXR1cm4gYmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2M9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGMoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRjKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjYzt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjY30pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYShrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYShhLGIpLEhhLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWM9YS5qUXVlcnksZmM9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmMpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVjKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo=”></script> <link href=“data:text/css;charset=utf-8,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A” rel=“stylesheet” /> <script src=“data:application/x-javascript;base64,IWZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLl90eXBlcz17fSx0aGlzLl9zZXE9MH1yZXR1cm4gZShhLFt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl90eXBlc1thXTtjfHwoYz10aGlzLl90eXBlc1thXT17fSk7dmFyIGQ9InN1YiIrdGhpcy5fc2VxKys7cmV0dXJuIGNbZF09YixkfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3R5cGVzW2FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiKXtmb3IodmFyIGQgaW4gYylpZihjLmhhc093blByb3BlcnR5KGQpJiZjW2RdPT09YilyZXR1cm4gZGVsZXRlIGNbZF0sZDtyZXR1cm4hMX1pZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuISghY3x8IWNbYl0pJiYoZGVsZXRlIGNbYl0sYik7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGxpc3RlbmVyIil9fSx7a2V5OiJ0cmlnZ2VyIix2YWx1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fdHlwZXNbYV07Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmZFtlXS5jYWxsKGMsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWZ9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJmEuX19lc01vZHVsZT9hOntkZWZhdWx0OmF9fWZ1bmN0aW9uIGYoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBnKGEpe3ZhciBiPWEudmFyKCJmaWx0ZXJzZXQiKSxjPWIuZ2V0KCk7cmV0dXJuIGN8fChjPW5ldyBtLmRlZmF1bHQsYi5zZXQoYykpLGN9ZnVuY3Rpb24gaCgpe3JldHVybiByKyt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuRmlsdGVySGFuZGxlPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxqPWEoIi4vZXZlbnRzIiksaz1lKGopLGw9YSgiLi9maWx0ZXJzZXQiKSxtPWUobCksbj1hKCIuL2dyb3VwIiksbz1lKG4pLHA9YSgiLi91dGlsIikscT1kKHApLHI9MTtjLkZpbHRlckhhbmRsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgay5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5faWQ9ImZpbHRlciIraCgpLHRoaXMuc2V0R3JvdXAoYil9cmV0dXJuIGkoYSxbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYodGhpcy5fZ3JvdXAhPT1hJiYodGhpcy5fZ3JvdXB8fGEpJiYodGhpcy5fZmlsdGVyVmFyJiYodGhpcy5fZmlsdGVyVmFyLm9mZigiY2hhbmdlIix0aGlzLl92YXJPbkNoYW5nZVN1YiksdGhpcy5jbGVhcigpLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZmlsdGVyVmFyPW51bGwsdGhpcy5fZmlsdGVyU2V0PW51bGwpLHRoaXMuX2dyb3VwPWEsYSkpe2E9KDAsby5kZWZhdWx0KShhKSx0aGlzLl9maWx0ZXJTZXQ9ZyhhKSx0aGlzLl9maWx0ZXJWYXI9KDAsby5kZWZhdWx0KShhKS52YXIoImZpbHRlciIpO3ZhciBjPXRoaXMuX2ZpbHRlclZhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gcS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShhKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxhKSx0aGlzLl9vbkNoYW5nZShiKSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihhLGIpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGEpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksYX0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGE9PT1iPzA6YTxiPy0xOmE+Yj8xOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksZz1hKCIuL3V0aWwiKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLnJlc2V0KCl9cmV0dXJuIGYoYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcz17fSx0aGlzLl9rZXlzPXt9LHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fYWN0aXZlSGFuZGxlcz0wfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihhLGIpe251bGwhPT1iJiYoYj1iLnNsaWNlKDApLGIuc29ydChlKSk7dmFyIGM9KDAsZy5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbYV0sYiksZD1jLmFkZGVkLGY9Yy5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbYV09Yjtmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl0aGlzLl9rZXlzW2RbaF1dPSh0aGlzLl9rZXlzW2RbaF1dfHwwKSsxO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSsrKXRoaXMuX2tleXNbZltpXV0tLTt0aGlzLl91cGRhdGVWYWx1ZShiKX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyxiPU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09Yil0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2tleXNbYVtjXV07ZD09PWImJnRoaXMuX3ZhbHVlLnB1c2goYVtjXSl9fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbihhKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuX2hhbmRsZXNbYV0pe3ZhciBiPXRoaXMuX2hhbmRsZXNbYV07Ynx8KGI9W10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuX2tleXNbYltjXV0tLTtkZWxldGUgdGhpcy5faGFuZGxlc1thXSx0aGlzLl91cGRhdGVWYWx1ZSgpfX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9fSx7a2V5OiJfYWxsS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmtleXModGhpcy5fa2V5cyk7cmV0dXJuIGEuc29ydChlKSxhfX1dKSxhfSgpO2MuZGVmYXVsdD1ofSx7Ii4vdXRpbCI6MTF9XSw0OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZihhKXtpZihhJiYic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIGsuaGFzT3duUHJvcGVydHkoYSl8fChrW2FdPW5ldyBsKGEpKSxrW2FdO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgYT8idW5kZWZpbmVkIjpoKGEpKSYmYS5fdmFycyYmYS52YXIpcmV0dXJuIGE7aWYoQXJyYXkuaXNBcnJheShhKSYmMT09YS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYVswXSlyZXR1cm4gZihhWzBdKTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JvdXBOYW1lIGFyZ3VtZW50Iil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZGVmYXVsdD1mO3ZhciBpPWEoIi4vdmFyIiksaj1kKGkpO2IuX19jcm9zc3RhbGtfZ3JvdXBzPWIuX19jcm9zc3RhbGtfZ3JvdXBzfHx7fTt2YXIgaz1iLl9fY3Jvc3N0YWxrX2dyb3VwcyxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtlKHRoaXMsYSksdGhpcy5uYW1lPWIsdGhpcy5fdmFycz17fX1yZXR1cm4gZyhhLFt7a2V5OiJ2YXIiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoYSl8fCh0aGlzLl92YXJzW2FdPW5ldyBqLmRlZmF1bHQodGhpcyxhKSksdGhpcy5fdmFyc1thXX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFyIG5hbWUiKTtyZXR1cm4gdGhpcy5fdmFycy5oYXNPd25Qcm9wZXJ0eShhKX19XSksYX0oKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3ZhciI6MTJ9XSw1OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEpe3JldHVybiBrLnZhcihhKX1mdW5jdGlvbiBmKGEpe3JldHVybiBrLmhhcyhhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGc9YSgiLi9ncm91cCIpLGg9ZChnKSxpPWEoIi4vc2VsZWN0aW9uIiksaj1hKCIuL2ZpbHRlciIpO2EoIi4vaW5wdXQiKSxhKCIuL2lucHV0X3NlbGVjdGl6ZSIpLGEoIi4vaW5wdXRfY2hlY2tib3hncm91cCIpLGEoIi4vaW5wdXRfc2xpZGVyIik7dmFyIGs9KDAsaC5kZWZhdWx0KSgiZGVmYXVsdCIpO2IuU2hpbnkmJmIuU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInVwZGF0ZS1jbGllbnQtdmFsdWUiLGZ1bmN0aW9uKGEpeyJzdHJpbmciPT10eXBlb2YgYS5ncm91cD8oMCxoLmRlZmF1bHQpKGEuZ3JvdXApLnZhcihhLm5hbWUpLnNldChhLnZhbHVlKTplKGEubmFtZSkuc2V0KGEudmFsdWUpfSk7dmFyIGw9e2dyb3VwOmguZGVmYXVsdCx2YXI6ZSxoYXM6ZixTZWxlY3Rpb25IYW5kbGU6aS5TZWxlY3Rpb25IYW5kbGUsRmlsdGVySGFuZGxlOmouRmlsdGVySGFuZGxlfTtjLmRlZmF1bHQ9bCxiLmNyb3NzdGFsaz1sfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2dyb3VwIjo0LCIuL2lucHV0Ijo2LCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiOjcsIi4vaW5wdXRfc2VsZWN0aXplIjo4LCIuL2lucHV0X3NsaWRlciI6OSwiLi9zZWxlY3Rpb24iOjEwfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtpW2IuY2xhc3NOYW1lXT1iLGEuZG9jdW1lbnQmJiJjb21wbGV0ZSIhPT1hLmRvY3VtZW50LnJlYWR5U3RhdGU/aChmdW5jdGlvbigpe2QoKX0pOmEuZG9jdW1lbnQmJnNldFRpbWVvdXQoZCwxMDApfWZ1bmN0aW9uIGQoKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWlbYV07aCgiLiIrYi5jbGFzc05hbWUpLm5vdCgiLmNyb3NzdGFsay1pbnB1dC1ib3VuZCIpLmVhY2goZnVuY3Rpb24oYSxjKXtnKGIsYyl9KX0pfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFshIiMkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXFxdXmB7fH1+XSkvZywiXFwkMSIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aChhKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGIuaGFzQ2xhc3MoYykmJiFiLmhhc0NsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKSl7dmFyIGQ9aVtjXTtnKGQsYSl9fSl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWgoYikuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIitlKGIuaWQpKyInXSIpLGQ9SlNPTi5wYXJzZShjWzBdLmlubmVyVGV4dCksZj1hLmZhY3RvcnkoYixkKTtoKGIpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIsZiksaChiKS5hZGRDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMucmVnaXN0ZXI9Yjt2YXIgaD1hLmpRdWVyeSxpPXt9O2EuU2hpbnkmJiFmdW5jdGlvbigpe3ZhciBiPW5ldyBhLlNoaW55LklucHV0QmluZGluZyxjPWEualF1ZXJ5O2MuZXh0ZW5kKGIse2ZpbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMoYSkuZmluZCgiLmNyb3NzdGFsay1pbnB1dCIpfSxpbml0aWFsaXplOmZ1bmN0aW9uKGEpe2MoYSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHxmKGEpfSxnZXRJZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oYSl7fSxzZXRWYWx1ZTpmdW5jdGlvbihhLGIpe30scmVjZWl2ZU1lc3NhZ2U6ZnVuY3Rpb24oYSxiKXt9LHN1YnNjcmliZTpmdW5jdGlvbihhLGIpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikucmVzdW1lKCl9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikuc3VzcGVuZCgpfX0pLGEuU2hpbnkuaW5wdXRCaW5kaW5ncy5yZWdpc3RlcihiLCJjcm9zc3RhbGsuaW5wdXRCaW5kaW5nIil9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEpe2lmKGEmJmEuX19lc01vZHVsZSlyZXR1cm4gYTt2YXIgYj17fTtpZihudWxsIT1hKWZvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiYoYltjXT1hW2NdKTtyZXR1cm4gYi5kZWZhdWx0PWEsYn12YXIgZD1hKCIuL2lucHV0IiksZT1jKGQpLGY9YSgiLi9maWx0ZXIiKSxnPWIualF1ZXJ5O2UucmVnaXN0ZXIoe2NsYXNzTmFtZToiY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZi5GaWx0ZXJIYW5kbGUoYi5ncm91cCksZD12b2lkIDAsZT1nKGEpO3JldHVybiBlLm9uKCJjaGFuZ2UiLCJpbnB1dFt0eXBlPSdjaGVja2JveCddIixmdW5jdGlvbigpe3ZhciBhPWUuZmluZCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpjaGVja2VkIik7MD09PWEubGVuZ3RoPyhkPW51bGwsYy5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgZT17fTthLmVhY2goZnVuY3Rpb24oKXtiLm1hcFt0aGlzLnZhbHVlXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2VbYV09ITB9KX0pO3ZhciBmPU9iamVjdC5rZXlzKGUpO2Yuc29ydCgpLGQ9ZixjLnNldChmKX0oKX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7Yy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtkJiZjLnNldChkKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sODpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9dmFyIGQ9YSgiLi9pbnB1dCIpLGU9YyhkKSxmPWEoIi4vdXRpbCIpLGc9YyhmKSxoPWEoIi4vZmlsdGVyIiksaT1iLmpRdWVyeTtlLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zZWxlY3QiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1be3ZhbHVlOiIiLGxhYmVsOiIoQWxsKSJ9XSxkPWcuZGF0YWZyYW1lVG9EMyhiLml0ZW1zKSxlPXtvcHRpb25zOmMuY29uY2F0KGQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0sZj1pKGEpLmZpbmQoInNlbGVjdCIpWzBdLGo9aShmKS5zZWxlY3RpemUoZSlbMF0uc2VsZWN0aXplLGs9bmV3IGguRmlsdGVySGFuZGxlKGIuZ3JvdXApLGw9dm9pZCAwO3JldHVybiBqLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7MD09PWouaXRlbXMubGVuZ3RoPyhsPW51bGwsay5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgYT17fTtqLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yi5tYXBbY10uZm9yRWFjaChmdW5jdGlvbihiKXthW2JdPSEwfSl9KTt2YXIgYz1PYmplY3Qua2V5cyhhKTtjLnNvcnQoKSxsPWMsay5zZXQoYyl9KCl9KSx7c3VzcGVuZDpmdW5jdGlvbigpe2suY2xlYXIoKX0scmVzdW1lOmZ1bmN0aW9uKCl7bCYmay5zZXQobCl9fX19KX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9pbnB1dCI6NiwiLi91dGlsIjoxMX1dLDk6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9YS50b1N0cmluZygpO2MubGVuZ3RoPGI7KWM9IjAiK2M7cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIERhdGU/YS5nZXRVVENGdWxsWWVhcigpKyItIitkKGEuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitkKGEuZ2V0VVRDRGF0ZSgpLDIpOm51bGx9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9W10sZD0hMCxlPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIGcsaD1hW1N5bWJvbC5pdGVyYXRvcl0oKTshKGQ9KGc9aC5uZXh0KCkpLmRvbmUpJiYoYy5wdXNoKGcudmFsdWUpLCFifHxjLmxlbmd0aCE9PWIpO2Q9ITApO31jYXRjaChhKXtlPSEwLGY9YX1maW5hbGx5e3RyeXshZCYmaC5yZXR1cm4mJmgucmV0dXJuKCl9ZmluYWxseXtpZihlKXRocm93IGZ9fXJldHVybiBjfXJldHVybiBmdW5jdGlvbihiLGMpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGI7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChiKSlyZXR1cm4gYShiLGMpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksZz1hKCIuL2lucHV0IiksaD1jKGcpLGk9YSgiLi9maWx0ZXIiKSxqPWIualF1ZXJ5LGs9Yi5zdHJmdGltZTtoLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7dmFyIGE9aC5kYXRhKCJpb25SYW5nZVNsaWRlciIpLnJlc3VsdCxiPXZvaWQgMCxjPWguZGF0YSgiZGF0YS10eXBlIik7cmV0dXJuIGI9ImRhdGUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4gZShuZXcgRGF0ZSgrYSkpfToiZGF0ZXRpbWUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4rYS8xZTN9OmZ1bmN0aW9uKGEpe3JldHVybithfSwiZG91YmxlIj09PWguZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5vcHRpb25zLnR5cGU/W2IoYS5mcm9tKSxiKGEudG8pXTpiKGEuZnJvbSl9dmFyIGQ9bmV3IGkuRmlsdGVySGFuZGxlKGIuZ3JvdXApLGc9e30saD1qKGEpLmZpbmQoImlucHV0IiksbD1oLmRhdGEoImRhdGEtdHlwZSIpLG09aC5kYXRhKCJ0aW1lLWZvcm1hdCIpLG49dm9pZCAwO2lmKCJkYXRlIj09PWwpbj1rLnV0YygpLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9O2Vsc2UgaWYoImRhdGV0aW1lIj09PWwpe3ZhciBvPWguZGF0YSgidGltZXpvbmUiKTtuPW8/ay50aW1lem9uZShvKTprLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9fWguaW9uUmFuZ2VTbGlkZXIoZyk7dmFyIHA9bnVsbDtyZXR1cm4gaC5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihhKXtpZighaC5kYXRhKCJ1cGRhdGluZyIpJiYhaC5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciBlPWMoKSxnPWYoZSwyKSxpPWdbMF0saj1nWzFdLGs9W10sbD0wO2w8Yi52YWx1ZXMubGVuZ3RoO2wrKyl7dmFyIG09Yi52YWx1ZXNbbF07bT49aSYmbTw9aiYmay5wdXNoKGIua2V5c1tsXSl9ay5zb3J0KCksZC5zZXQoaykscD1rfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7ZC5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtwJiZkLnNldChwKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZihhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjLlNlbGVjdGlvbkhhbmRsZT12b2lkIDA7dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksaD1hKCIuL2V2ZW50cyIpLGk9ZShoKSxqPWEoIi4vZ3JvdXAiKSxrPWUoaiksbD1hKCIuL3V0aWwiKSxtPWQobCk7Yy5TZWxlY3Rpb25IYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IG0uU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPW0uZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5zZXRHcm91cChiKX1yZXR1cm4gZyhhLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLl9ncm91cCE9PWEmJih0aGlzLl9ncm91cHx8YSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1hLGEpKXt0aGlzLl92YXI9KDAsay5kZWZhdWx0KShhKS52YXIoInNlbGVjdGlvbiIpO3ZhciBjPXRoaXMuX3Zhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gbS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoYSx0aGlzLl9tZXJnZUV4dHJhSW5mbyhiKSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oYSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oYSxiKX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoYSxiKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxhfSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGUoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShiPjE/Yi0xOjApLGQ9MTtkPGI7ZCsrKWNbZC0xXT1hcmd1bWVudHNbZF07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBmJiZudWxsIT09Zilmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoYVtnXT1mW2ddKX1yZXR1cm4gYX1mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWlmKGFbYl08PWFbYi0xXSl0aHJvdyBuZXcgRXJyb3IoIkxpc3QgaXMgbm90IHNvcnRlZCBvciBjb250YWlucyBkdXBsaWNhdGUiKX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9MCxkPTA7YXx8KGE9W10pLGJ8fChiPVtdKTt2YXIgZT1bXSxnPVtdO2ZvcihmKGEpLGYoYik7YzxhLmxlbmd0aCYmZDxiLmxlbmd0aDspYVtjXT09PWJbZF0/KGMrKyxkKyspOmFbY108YltkXT9lLnB1c2goYVtjKytdKTpnLnB1c2goYltkKytdKTtyZXR1cm4gYzxhLmxlbmd0aCYmKGU9ZS5jb25jYXQoYS5zbGljZShjKSkpLGQ8Yi5sZW5ndGgmJihnPWcuY29uY2F0KGIuc2xpY2UoZCkpKSx7cmVtb3ZlZDplLGFkZGVkOmd9fWZ1bmN0aW9uIGgoYSl7dmFyIGI9W10sYz12b2lkIDA7Zm9yKHZhciBkIGluIGEpe2lmKGEuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChkKSwib2JqZWN0IiE9PWooYVtkXSl8fCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjJiZjIT09YVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO2M9YVtkXS5sZW5ndGh9Zm9yKHZhciBlPVtdLGY9dm9pZCAwLGc9MDtnPGM7ZysrKXtmPXt9O2Zvcih2YXIgaD0wO2g8Yi5sZW5ndGg7aCsrKWZbYltoXV09YVtiW2hdXVtnXTtlLnB1c2goZil9cmV0dXJuIGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZXh0ZW5kPWUsYy5jaGVja1NvcnRlZD1mLGMuZGlmZlNvcnRlZExpc3RzPWcsYy5kYXRhZnJhbWVUb0QzPWg7Yy5TdWJzY3JpcHRpb25UcmFja2VyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtkKHRoaXMsYSksdGhpcy5fZW1pdHRlcj1iLHRoaXMuX3N1YnM9e319cmV0dXJuIGkoYSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fZW1pdHRlci5vbihhLGIpO3JldHVybiB0aGlzLl9zdWJzW2NdPWEsY319LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9lbWl0dGVyLm9mZihhLGIpO3JldHVybiBjJiZkZWxldGUgdGhpcy5fc3Vic1tjXSxjfX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXthLl9lbWl0dGVyLm9mZihiW2NdLGMpfSl9fV0pLGF9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZShhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxoPWEoIi4vZXZlbnRzIiksaT1kKGgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyxkKXtlKHRoaXMsYSksdGhpcy5fZ3JvdXA9Yix0aGlzLl9uYW1lPWMsdGhpcy5fdmFsdWU9ZCx0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gZyhhLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihhLGMpe2lmKHRoaXMuX3ZhbHVlIT09YSl7dmFyIGQ9dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9YTt2YXIgZT17fTtpZihjJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGM/InVuZGVmaW5lZCI6ZihjKSkpZm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmKGVbZ109Y1tnXSk7ZS5vbGRWYWx1ZT1kLGUudmFsdWU9YSx0aGlzLl9ldmVudHMudHJpZ2dlcigiY2hhbmdlIixlLHRoaXMpLGIuU2hpbnkmJmIuU2hpbnkub25JbnB1dENoYW5nZSYmYi5TaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtIisobnVsbCE9PXRoaXMuX2dyb3VwLm5hbWU/dGhpcy5fZ3JvdXAubmFtZSsiLSI6IiIpK3RoaXMuX25hbWUsInVuZGVmaW5lZCI9PXR5cGVvZiBhP251bGw6YSl9fX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2V2ZW50cy5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9ldmVudHMub2ZmKGEsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWp9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9ldmVudHMiOjF9XX0se30sWzVdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3Jvc3N0YWxrLm1pbi5qcy5tYXA=”></script> <link href=“data:text/css;charset=utf-8,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A” rel=“stylesheet” /> <script src=“data:application/x-javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjMxLjIKKiBDb3B5cmlnaHQgMjAxMi0yMDE3LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGUuUGxvdGx5PXQoKX19KGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe2Z1bmN0aW9uIGkobyxzKXtpZighcltvXSl7aWYoIWVbb10pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKG8sITApO2lmKGEpcmV0dXJuIGEobywhMCk7dmFyIGM9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGMuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsY312YXIgdT1yW29dPXtleHBvcnRzOnt9fTtlW29dWzBdLmNhbGwodS5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciByPWVbb11bMV1bdF07cmV0dXJuIGkocj9yOnQpfSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL2xpYiIpLGk9eyJYLFggZGl2IjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLm1vZGViYXIiOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDt6LWluZGV4OjEwMDE7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7IiwiWCAubW9kZWJhci0taG92ZXIiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwOyIsIlggLm1vZGViYXItZ3JvdXA6Zmlyc3QtY2hpbGQiOiJtYXJnaW4tbGVmdDowcHg7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXItYnRuIHBhdGgiOiJmaWxsOnJnYmEoMCwzMSw5NSwwLjMpOyIsIlggLm1vZGViYXItYnRuLmFjdGl2ZSBwYXRoLFggLm1vZGViYXItYnRuOmhvdmVyIHBhdGgiOiJmaWxsOnJnYmEoMCwyMiw3MiwwLjUpOyIsIlggLm1vZGViYXItYnRuLm1vZGViYXItYnRuLS1sb2dvIjoicGFkZGluZzozcHggMXB4OyIsIlggLm1vZGViYXItYnRuLm1vZGViYXItYnRuLS1sb2dvIHBhdGgiOiJmaWxsOiM0NDdhZGIgIWltcG9ydGFudDsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC5zZWxlY3Qtb3V0bGluZSI6ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC5zZWxlY3Qtb3V0bGluZS0xIjoic3Ryb2tlOndoaXRlOyIsIlggLnNlbGVjdC1vdXRsaW5lLTIiOiJzdHJva2U6YmxhY2s7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWToiZm9udC1mYW1pbHk6J09wZW4gU2Fucyc7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDsiLCJZIHAiOiJtYXJnaW46MDsiLCJZIC5ub3RpZmllci1ub3RlIjoibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDsiLCJZIC5ub3RpZmllci1jbG9zZSI6ImNvbG9yOiNmZmY7b3BhY2l0eTowLjg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjczNX1dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxwYXRoOiJtODU3IDM1MHEwLTg3LTM0LTE2NnQtOTEtMTM3LTEzNy05Mi0xNjYtMzRxLTk2IDAtMTgzIDQxdC0xNDcgMTE0cS00IDYtNCAxM3Q1IDExbDc2IDc3cTYgNSAxNCA1IDktMSAxMy03IDQxLTUzIDEwMC04MnQxMjYtMjlxNTggMCAxMTAgMjN0OTIgNjEgNjEgOTEgMjIgMTExLTIyIDExMS02MSA5MS05MiA2MS0xMTAgMjNxLTU1IDAtMTA1LTIwdC05MC01N2w3Ny03N3ExNy0xNiA4LTM4LTEwLTIzLTMzLTIzaC0yNTBxLTE1IDAtMjUgMTF0LTExIDI1djI1MHEwIDI0IDIyIDMzIDIyIDEwIDM5LThsNzItNzJxNjAgNTcgMTM3IDg4dDE1OSAzMXE4NyAwIDE2Ni0zNHQxMzctOTIgOTEtMTM3IDM0LTE2NnoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxob21lOnt3aWR0aDo5MjguNixwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sImNhbWVyYS1yZXRybyI6e3dpZHRoOjFlMyxwYXRoOiJtNTE4IDM4NnEwIDgtNSAxM3QtMTMgNXEtMzcgMC02My0yN3QtMjYtNjNxMC04IDUtMTN0MTMtNSAxMiA1IDUgMTNxMCAyMyAxNiAzOHQzOCAxNnE4IDAgMTMgNXQ1IDEzeiBtMTI1LTczcTAtNTktNDItMTAxdC0xMDEtNDItMTAxIDQyLTQyIDEwMSA0MiAxMDEgMTAxIDQyIDEwMS00MiA0Mi0xMDF6IG0tNTcyLTMyMGg4NTh2NzFoLTg1OHYtNzF6IG02NDMgMzIwcTAgODktNjIgMTUydC0xNTIgNjItMTUxLTYyLTYzLTE1MiA2My0xNTEgMTUxLTYzIDE1MiA2MyA2MiAxNTF6IG0tNTcxIDM1OGgyMTR2NzJoLTIxNHYtNzJ6IG0tNzItMTA3aDg1OHYxNDNoLTQ2MmwtMzYtNzFoLTM2MHYtNzJ6IG05MjkgMTQzdi03MTRxMC0zMC0yMS01MXQtNTAtMjFoLTg1OHEtMjkgMC01MCAyMXQtMjEgNTF2NzE0cTAgMzAgMjEgNTF0NTAgMjFoODU4cTI5IDAgNTAtMjF0MjEtNTF6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbWJveDp7d2lkdGg6MWUzLHBhdGg6Im0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyeiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHBhbjp7d2lkdGg6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHpvb21fcGx1czp7d2lkdGg6MWUzLHBhdGg6Im0xIDc4N2wwLTg3NSA4NzUgMCAwIDg3NS04NzUgMHogbTY4Ny01MDBsLTE4NyAwIDAtMTg3LTEyNSAwIDAgMTg3LTE4OCAwIDAgMTI1IDE4OCAwIDAgMTg3IDEyNSAwIDAtMTg3IDE4NyAwIDAtMTI1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHpvb21fbWludXM6e3dpZHRoOjFlMyxwYXRoOiJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxhdXRvc2NhbGU6e3dpZHRoOjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx0b29sdGlwX2Jhc2ljOnt3aWR0aDoxNTAwLHBhdGg6Im0zNzUgNzI1bDAgMC0zNzUtMzc1IDM3NS0zNzQgMC0xIDExMjUgMCAwIDc1MC0xMTI1IDB6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LHBhdGg6Im0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0scGxvdGx5bG9nbzp7d2lkdGg6MTU0MixwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LCJ6LWF4aXMiOnt3aWR0aDoxZTMscGF0aDoibTgzMyA1bC0xNyAxMDh2NDFsLTEzMC02NSAxMzAtNjZjMCAwIDAgMzggMCAzOSAwLTEgMzYtMTQgMzktMjUgNC0xNS02LTIyLTE2LTMwLTE1LTEyLTM5LTE2LTU2LTIwLTkwLTIyLTE4Ny0yMy0yNzktMjMtMjYxIDAtMzQxIDM0LTM1MyA1OSAzIDYwIDIyOCAxMTAgMjI4IDExMC0xNDAtOC0zNTEtMzUtMzUxLTExNiAwLTEyMCAyOTMtMTQyIDQ3NC0xNDIgMTU1IDAgNDc3IDIyIDQ3NyAxNDIgMCA1MC03NCA3OS0xNjMgOTZ6IG0tMzc0IDk0Yy01OC01LTk5LTIxLTk5LTQwIDAtMjQgNjUtNDMgMTQ0LTQzIDc5IDAgMTQzIDE5IDE0MyA0MyAwIDE5LTQyIDM0LTk4IDQwdjIxNmg4N2wtMTMyIDEzNS0xMzMtMTM1aDg4di0yMTZ6IG0xNjcgNTE1aC0xMzZ2MWMxNiAxNiAzMSAzNCA0NiA1Mmw4NCAxMDl2NTRoLTIzMHYtNzFoMTI0di0xYy0xNi0xNy0yOC0zMi00NC01MWwtODktMTE0di01MWgyNDV2NzJ6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxwYXRoOiJtOTIyIDY2MGMtNSA0LTkgNy0xNCAxMS0zNTkgMjYzLTU4MC0zMS01ODAtMzFsLTEwMiAyOCA1OC00MDBjMCAxIDEgMSAyIDIgMTE4IDEwOCAzNTEgMjQ5IDM1MSAyNDlzLTYyIDI3LTEwMCA0MmM4OCA4MyAyMjIgMTgzIDM0NyAxMjIgMTYtOCAzMC0xNyA0NC0yNy0yIDEtNCAyLTYgNHogbTM2LTMyOWMwIDAgNjQgMjI5LTg4IDI5Ni02MiAyNy0xMjQgMTQtMTc1LTExIDE1Ny03OCAyMjUtMjA4IDI0OS0yNjYgOC0xOSAxMS0zMSAxMS0zMSAyIDUgNiAxNSAxMSAzMi01LTEzLTgtMjAtOC0yMHogbS03NzUtMjM5YzcwLTMxIDExNy01MCAxOTgtMzItMTIxIDgwLTE5OSAzNDYtMTk5IDM0NmwtOTYtMTUtNTgtMTJjMCAwIDU1LTIyNiAxNTUtMjg3eiBtNjAzIDEzM2wtMzE3LTEzOWMwIDAgNC00IDE5LTE0IDctNSAyNC0xNSAyNC0xNXMtMTc3LTE0Ny0zODkgNGMyMzUtMjg3IDUzNi0xMTIgNTM2LTExMmwzMS0yMiAxMDAgMjk5LTQtMXogbS0yOTgtMTUzYzYtNCAxNC05IDI0LTE1IDAgMC0xNyAxMC0yNCAxNXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxjYW1lcmE6e3dpZHRoOjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxtb3ZpZTp7d2lkdGg6MWUzLHBhdGg6Im05MzggNDEzbC0xODgtMTI1YzAgMzctMTcgNzEtNDQgOTQgNjQgMzggMTA3IDEwNyAxMDcgMTg3IDAgMTIxLTk4IDIxOS0yMTkgMjE5LTEyMSAwLTIxOS05OC0yMTktMjE5IDAtNjEgMjUtMTE3IDY2LTE1NmgtMTE1YzMwIDMzIDQ5IDc2IDQ5IDEyNSAwIDEwMy04NCAxODctMTg3IDE4N3MtMTg4LTg0LTE4OC0xODdjMC01NyAyNi0xMDcgNjUtMTQxLTM4LTIyLTY1LTYyLTY1LTEwOXYtMjUwYzAtNzAgNTYtMTI2IDEyNS0xMjZoNTAwYzY5IDAgMTI1IDU2IDEyNSAxMjZsMTg4LTEyNmMzNCAwIDYyIDI4IDYyIDYzdjM3NWMwIDM1LTI4IDYzLTYyIDYzeiBtLTc1MCAwYy02OSAwLTEyNSA1Ni0xMjUgMTI1czU2IDEyNSAxMjUgMTI1IDEyNS01NiAxMjUtMTI1LTU2LTEyNS0xMjUtMTI1eiBtNDA2LTFjLTg3IDAtMTU3IDcwLTE1NyAxNTcgMCA4NiA3MCAxNTYgMTU3IDE1NnMxNTYtNzAgMTU2LTE1Ni03MC0xNTctMTU2LTE1N3oiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEscGF0aDoibTUwMCA4MnYxMDdxMCA4LTUgMTN0LTEzIDVoLTEwN3EtOCAwLTEzLTV0LTUtMTN2LTEwN3EwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzeiBtMTQzIDM3NXEwIDQ5LTMxIDkxdC03NyA2NS05NSAyM3EtMTM2IDAtMjA3LTExOS05LTE0IDQtMjRsNzQtNTVxNC00IDEwLTQgOSAwIDE0IDcgMzAgMzggNDggNTEgMTkgMTQgNDggMTQgMjcgMCA0OC0xNXQyMS0zM3EwLTIxLTExLTM0dC0zOC0yNXEtMzUtMTYtNjUtNDh0LTI5LTcwdi0yMHEwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzcTAgMTAgMTIgMjd0MzAgMjhxMTggMTAgMjggMTZ0MjUgMTkgMjUgMjcgMTYgMzQgNyA0NXogbTIxNC0xMDdxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01OC0yMTYgNTgtMTU1IDE1Ni01OCAyMTUgNTggMjE1IDE1NSAxNTYgMjE2IDU4IDIxNS01OCAxNTYtMTU2IDU3LTIxNXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxkaXNrOnt3aWR0aDo4NTcuMSxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGxhc3NvOnt3aWR0aDoxMDMxLHBhdGg6Im0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHNlbGVjdGJveDp7d2lkdGg6MWUzLHBhdGg6Im0wIDg1MGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NWwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH19fSx7fV0sMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlIjoxMTM5fV0sNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9iYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhciI6ODY3fV0sNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6ODgwfV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjo2MDl9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6ODg5fV0sODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6OTEwfV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIjo5MjV9XSwxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyIjo5Mzd9XSwxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Ijo5NTJ9XSwxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvcmUiKX0seyIuLi9zcmMvY29yZSI6NzE3fV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlciIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlciI6MTE0MH1dLDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSI6MTE0MX1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiOjk2NX1dLDE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjo5NzV9XSwxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbSI6OTg2fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIjo5OTJ9XSwxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6OTk2fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb3JlIik7bi5yZWdpc3RlcihbdCgiLi9iYXIiKSx0KCIuL2JveCIpLHQoIi4vaGVhdG1hcCIpLHQoIi4vaGlzdG9ncmFtIiksdCgiLi9oaXN0b2dyYW0yZCIpLHQoIi4vaGlzdG9ncmFtMmRjb250b3VyIiksdCgiLi9waWUiKSx0KCIuL2NvbnRvdXIiKSx0KCIuL3NjYXR0ZXJ0ZXJuYXJ5IiksdCgiLi92aW9saW4iKSx0KCIuL3NjYXR0ZXIzZCIpLHQoIi4vc3VyZmFjZSIpLHQoIi4vbWVzaDNkIiksdCgiLi9zY2F0dGVyZ2VvIiksdCgiLi9jaG9yb3BsZXRoIiksdCgiLi9zY2F0dGVyZ2wiKSx0KCIuL3BvaW50Y2xvdWQiKSx0KCIuL2hlYXRtYXBnbCIpLHQoIi4vcGFyY29vcmRzIiksdCgiLi9zY2F0dGVybWFwYm94IiksdCgiLi9zYW5rZXkiKSx0KCIuL3RhYmxlIiksdCgiLi9jYXJwZXQiKSx0KCIuL3NjYXR0ZXJjYXJwZXQiKSx0KCIuL2NvbnRvdXJjYXJwZXQiKSx0KCIuL29obGMiKSx0KCIuL2NhbmRsZXN0aWNrIildKSxuLnJlZ2lzdGVyKFt0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IildKSxuLnJlZ2lzdGVyKFt0KCIuL2NhbGVuZGFycyIpXSksZS5leHBvcnRzPW59LHsiLi9hZ2dyZWdhdGUiOjMsIi4vYmFyIjo0LCIuL2JveCI6NSwiLi9jYWxlbmRhcnMiOjYsIi4vY2FuZGxlc3RpY2siOjcsIi4vY2FycGV0Ijo4LCIuL2Nob3JvcGxldGgiOjksIi4vY29udG91ciI6MTAsIi4vY29udG91cmNhcnBldCI6MTEsIi4vY29yZSI6MTIsIi4vZmlsdGVyIjoxMywiLi9ncm91cGJ5IjoxNCwiLi9oZWF0bWFwIjoxNSwiLi9oZWF0bWFwZ2wiOjE2LCIuL2hpc3RvZ3JhbSI6MTcsIi4vaGlzdG9ncmFtMmQiOjE4LCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MTksIi4vbWVzaDNkIjoyMSwiLi9vaGxjIjoyMiwiLi9wYXJjb29yZHMiOjIzLCIuL3BpZSI6MjQsIi4vcG9pbnRjbG91ZCI6MjUsIi4vc2Fua2V5IjoyNiwiLi9zY2F0dGVyM2QiOjI3LCIuL3NjYXR0ZXJjYXJwZXQiOjI4LCIuL3NjYXR0ZXJnZW8iOjI5LCIuL3NjYXR0ZXJnbCI6MzAsIi4vc2NhdHRlcm1hcGJveCI6MzEsIi4vc2NhdHRlcnRlcm5hcnkiOjMyLCIuL3NvcnQiOjMzLCIuL3N1cmZhY2UiOjM0LCIuL3RhYmxlIjozNSwiLi92aW9saW4iOjM2fV0sMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjEwMDJ9XSwyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9vaGxjIil9LHsiLi4vc3JjL3RyYWNlcy9vaGxjIjoxMDA3fV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiOjEwMTZ9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MTAyNn1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjEwMzV9XSwyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6MTA0MX1dLDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIjoxMDc0fV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6MTA3OX1dLDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjEwODh9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6MTA5NX1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjExMDJ9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjExMDl9XSwzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjExNDN9XSwzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjoxMTE4fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdGFibGUiKX0seyIuLi9zcmMvdHJhY2VzL3RhYmxlIjoxMTI2fV0sMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdmlvbGluIil9LHsiLi4vc3JjL3RyYWNlcy92aW9saW4iOjExMzN9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcihlLHIsbixhKXt2YXIgbz0xL3QuY2xpZW50SGVpZ2h0LHM9byooci1tKSxsPW8qKG4tdiksdT1wLmZsaXBYPzE6LTEsaD1wLmZsaXBZPzE6LTEsZD1NYXRoLlBJKnAucm90YXRlU3BlZWQseT1pKCk7aWYoMSZlKWEuc2hpZnQ/Yy5yb3RhdGUoeSwwLDAsLXMqZCk6Yy5yb3RhdGUoeSx1KmQqcywtaCpkKmwsMCk7ZWxzZSBpZigyJmUpYy5wYW4oeSwtcC50cmFuc2xhdGVTcGVlZCpzKmYscC50cmFuc2xhdGVTcGVlZCpsKmYsMCk7ZWxzZSBpZig0JmUpe3ZhciBiPXAuem9vbVNwZWVkKmwvd2luZG93LmlubmVySGVpZ2h0Kih5LWMubGFzdFQoKSkqNTA7Yy5wYW4oeSwwLDAsZiooTWF0aC5leHAoYiktMSkpfW09cix2PW4sZz1hfXQ9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciBuPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKG5bMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxuWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pLCJ6b29tTWluImluIGUmJihuWzBdPWUuem9vbU1pbiksInpvb21NYXgiaW4gZSYmKG5bMV09ZS56b29tTWF4KTt2YXIgYz1hKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOm59KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxmPTAsaD10LmNsaWVudFdpZHRoLGQ9dC5jbGllbnRIZWlnaHQscD17dmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9aSgpLHI9dGhpcy5kZWxheTtjLmlkbGUoZS1yKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTt2YXIgbj1lLTIqcjtjLnJlY2FsY01hdHJpeChuKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09aCYmdC5jbGllbnRIZWlnaHQ9PT1kO3JldHVybiBoPXQuY2xpZW50V2lkdGgsZD10LmNsaWVudEhlaWdodCxhPyFsOihmPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldE1hdHJpeChjLmxhc3RUKCksdCksYy5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TW9kZSh0KSxjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhuKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pO3ZhciBtPTAsdj0wLGc9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9O3JldHVybiBvKHQsciksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihlKXt2YXIgbj1sKGUuY2hhbmdlZFRvdWNoZXNbMF0sdCk7cigwLG5bMF0sblsxXSxnKSxyKDEsblswXSxuWzFdLGcpfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGUpe3ZhciBuPWwoZS5jaGFuZ2VkVG91Y2hlc1swXSx0KTtyKDEsblswXSxuWzFdLGcpfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24oZSl7bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMCxtLHYsZyl9KSxzKHQsZnVuY3Rpb24odCxlLHIpe3ZhciBuPXAuZmxpcFg/MTotMSxhPXAuZmxpcFk/MTotMSxvPWkoKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShvLDAsMCwtdCpuKk1hdGguUEkqcC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZXt2YXIgcz1wLnpvb21TcGVlZCphKmUvd2luZG93LmlubmVySGVpZ2h0KihvLWMubGFzdFQoKSkvMTAwO2MucGFuKG8sMCwwLGYqKE1hdGguZXhwKHMpLTEpKX19LCEwKSxwfWUuZXhwb3J0cz1uO3ZhciBpPXQoInJpZ2h0LW5vdyIpLGE9dCgiM2QtdmlldyIpLG89dCgibW91c2UtY2hhbmdlIikscz10KCJtb3VzZS13aGVlbCIpLGw9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iil9LHsiM2QtdmlldyI6MzgsIm1vdXNlLWNoYW5nZSI6NDYwLCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ2MSwibW91c2Utd2hlZWwiOjQ2MywicmlnaHQtbm93Ijo1MTF9XSwzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c31mdW5jdGlvbiBpKHQpe3Q9dHx8e307dmFyIGU9dC5leWV8fFswLDAsMV0scj10LmNlbnRlcnx8WzAsMCwwXSxpPXQudXB8fFswLDEsMF0sbD10LmRpc3RhbmNlTGltaXRzfHxbMCwxLzBdLGM9dC5tb2RlfHwidHVybnRhYmxlIix1PWEoKSxmPW8oKSxoPXMoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLGkpLGYuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxmLmxvb2tBdCgwLGUscixpKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIsaSksbmV3IG4oe3R1cm50YWJsZTp1LG9yYml0OmYsbWF0cml4Omh9LGMpfWUuZXhwb3J0cz1pO3ZhciBhPXQoInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciIpLG89dCgib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiKSxzPXQoIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlciIpLGw9bi5wcm90b3R5cGU7W1siZmx1c2giLDFdLFsiaWRsZSIsMV0sWyJsb29rQXQiLDRdLFsicm90YXRlIiw0XSxbInBhbiIsNF0sWyJ0cmFuc2xhdGUiLDRdLFsic2V0TWF0cml4IiwyXSxbInNldERpc3RhbmNlTGltaXRzIiwyXSxbInNldERpc3RhbmNlIiwyXV0uZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPVtdLG49MDtuPHRbMV07KytuKXIucHVzaCgiYSIrbik7dmFyIGk9InZhciBjYz10aGlzLl9jb250cm9sbGVyTGlzdDtmb3IodmFyIGk9MDtpPGNjLmxlbmd0aDsrK2kpe2NjW2ldLiIrdFswXSsiKCIrci5qb2luKCkrIil9IjtsW2VdPUZ1bmN0aW9uLmFwcGx5KG51bGwsci5jb25jYXQoaSkpfSksbC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlLnJlY2FsY01hdHJpeCh0KX0sbC5nZXREaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlKHQpfSxsLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2VMaW1pdHModCl9LGwubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlLmxhc3RUKCl9LGwuc2V0TW9kZT1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5fbW9kZSl7dmFyIGU9dGhpcy5fY29udHJvbGxlck5hbWVzLmluZGV4T2YodCk7aWYoIShlPDApKXt2YXIgcj10aGlzLl9hY3RpdmUsbj10aGlzLl9jb250cm9sbGVyTGlzdFtlXSxpPU1hdGgubWF4KHIubGFzdFQoKSxuLmxhc3RUKCkpO3IucmVjYWxjTWF0cml4KGkpLG4uc2V0TWF0cml4KGksci5jb21wdXRlZE1hdHJpeCksdGhpcy5fYWN0aXZlPW4sdGhpcy5fbW9kZT10LHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c319fSxsLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZX19LHsibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIjo0NTgsIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIjo0ODIsInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciI6NTQ2fV0sMzk6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oaSxhKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/YShuLGUoImQzLWFycmF5IiksZSgiZDMtY29sbGVjdGlvbiIpLGUoImQzLWludGVycG9sYXRlIikpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyIsImQzLWFycmF5IiwiZDMtY29sbGVjdGlvbiIsImQzLWludGVycG9sYXRlIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMsaS5kMyxpLmQzKX0odGhpcyxmdW5jdGlvbih0LGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7di5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pLGcuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuc291cmNlLG49dC50YXJnZXQ7Im51bWJlciI9PXR5cGVvZiByJiYocj10LnNvdXJjZT12W3Quc291cmNlXSksIm51bWJlciI9PXR5cGVvZiBuJiYobj10LnRhcmdldD12W3QudGFyZ2V0XSksdC5vcmlnaW5hbEluZGV4PWUsci5zb3VyY2VMaW5rcy5wdXNoKHQpLG4udGFyZ2V0TGlua3MucHVzaCh0KX0pfWZ1bmN0aW9uIGkoKXt2LmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLGYpLGUuc3VtKHQudGFyZ2V0TGlua3MsZikpfSl9ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxlPXYscj0wO2UubGVuZ3RoOyl0PVtdLGUuZm9yRWFjaChmdW5jdGlvbihlKXtlLng9cixlLmR4PWQsZS5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuaW5kZXhPZihlLnRhcmdldCk8MCYmdC5wdXNoKGUudGFyZ2V0KX0pfSksZT10LCsrcjtvKHIpLHMoKG1bMF0tZCkvKHItMSkpfWZ1bmN0aW9uIG8odCl7di5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc291cmNlTGlua3MubGVuZ3RofHwoZS54PXQtMSl9KX1mdW5jdGlvbiBzKHQpe3YuZm9yRWFjaChmdW5jdGlvbihlKXtlLngqPXR9KX1mdW5jdGlvbiBsKHQpe2Z1bmN0aW9uIG4oKXthLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUscixuLGE9MCxvPXQubGVuZ3RoO2Zvcih0LnNvcnQoaSksbj0wO248bzsrK24pZT10W25dLHI9YS1lLnkscj4wJiYoZS55Kz1yKSxhPWUueStlLmR5K3A7aWYoKHI9YS1wLW1bMV0pPjApZm9yKGE9ZS55LT1yLG49by0yO24+PTA7LS1uKWU9dFtuXSxyPWUueStlLmR5K3AtYSxyPjAmJihlLnktPXIpLGE9ZS55fSl9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LnktZS55fXZhciBhPXIubmVzdCgpLmtleShmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXModikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pOyFmdW5jdGlvbigpe3ZhciB0PWUubWluKGEsZnVuY3Rpb24odCl7cmV0dXJuKG1bMV0tKHQubGVuZ3RoLTEpKnApL2Uuc3VtKHQsZil9KTthLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZS55PXIsZS5keT1lLnZhbHVlKnR9KX0pLGcuZm9yRWFjaChmdW5jdGlvbihlKXtlLmR5PWUudmFsdWUqdH0pfSgpLG4oKTtmb3IodmFyIG89MTt0PjA7LS10KSFmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3JldHVybiB1KHQudGFyZ2V0KSp0LnZhbHVlfWEuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihuKXtuLmZvckVhY2goZnVuY3Rpb24obil7aWYobi5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBpPWUuc3VtKG4uc291cmNlTGlua3MscikvZS5zdW0obi5zb3VyY2VMaW5rcyxmKTtuLnkrPShpLXUobikpKnR9fSl9KX0obyo9Ljk5KSxuKCksZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0LnNvdXJjZSkqdC52YWx1ZX1hLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4udGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgaT1lLnN1bShuLnRhcmdldExpbmtzLHIpL2Uuc3VtKG4udGFyZ2V0TGlua3MsZik7bi55Kz0oaS11KG4pKSp0fX0pfSl9KG8pLG4oKX1mdW5jdGlvbiBjKCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiB0LnNvdXJjZS55LWUuc291cmNlLnl8fHQub3JpZ2luYWxJbmRleC1lLm9yaWdpbmFsSW5kZXh9ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0LnRhcmdldC55LWUudGFyZ2V0Lnl8fHQub3JpZ2luYWxJbmRleC1lLm9yaWdpbmFsSW5kZXh9di5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Iuc291cmNlTGlua3Muc29ydChlKSxyLnRhcmdldExpbmtzLnNvcnQodCl9KSx2LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9MCxyPTA7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc3k9ZSxlKz10LmR5fSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudHk9cixyKz10LmR5fSl9KX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnkrdC5keS8yfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWV9dmFyIGg9e30sZD0yNCxwPTgsbT1bMSwxXSx2PVtdLGc9W107cmV0dXJuIGgubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGgpOmR9LGgubm9kZVBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3QsaCk6cH0saC5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LGgpOnZ9LGgubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dCxoKTpnfSxoLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCxoKTptfSxoLmxheW91dD1mdW5jdGlvbihlKXtyZXR1cm4gdCgpLGkoKSxhKCksbChlKSxjKCksaH0saC5yZWxheW91dD1mdW5jdGlvbigpe3JldHVybiBjKCksaH0saC5saW5rPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcj10LnNvdXJjZS54K3Quc291cmNlLmR4LGk9dC50YXJnZXQueCxhPW4uaW50ZXJwb2xhdGVOdW1iZXIocixpKSxvPWEoZSkscz1hKDEtZSksbD10LnNvdXJjZS55K3Quc3ksYz1sK3QuZHksdT10LnRhcmdldC55K3QudHksZj11K3QuZHk7cmV0dXJuIk0iK3IrIiwiK2wrIkMiK28rIiwiK2wrIiAiK3MrIiwiK3UrIiAiK2krIiwiK3UrIkwiK2krIiwiK2YrIkMiK3MrIiwiK2YrIiAiK28rIiwiK2MrIiAiK3IrIiwiK2MrIloifXZhciBlPS41O3JldHVybiB0LmN1cnZhdHVyZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rcix0KTplfSx0fSxofTt0LnNhbmtleT1pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7ImQzLWFycmF5IjoxMTMsImQzLWNvbGxlY3Rpb24iOjExNCwiZDMtaW50ZXJwb2xhdGUiOjExOH1dLDQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9cy5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49YSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTtlPW8odCxbe2J1ZmZlcjpuLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksZS5fdHJpYW5nbGVCdWZmZXI9bixzLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9dmFyIGk9InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxhPXQoImdsLWJ1ZmZlciIpLG89dCgiZ2wtdmFvIikscz1uZXcgaTtlLmV4cG9ydHM9bn0seyJnbC1idWZmZXIiOjE1NiwiZ2wtdmFvIjoyNzcsIndlYWstbWFwIjo1NjZ9XSw0MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe2U9Im51bWJlciI9PXR5cGVvZiBlP2U6MSxyPXJ8fCI6ICI7dmFyIG49dC5zcGxpdCgvXHI/XG4vKSxhPVN0cmluZyhuLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCxuKXt2YXIgbz1uK2Uscz1TdHJpbmcobykubGVuZ3RoO3JldHVybiBpKG8sYS1zKStyK3R9KS5qb2luKCJcbiIpfXZhciBpPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPW59LHsicGFkLWxlZnQiOjQ4M31dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUrMSksbj0wO248dC5sZW5ndGg7KytuKXJbbl09dFtuXTtmb3IodmFyIG49MDtuPD10Lmxlbmd0aDsrK24pe2Zvcih2YXIgaT10Lmxlbmd0aDtpPD1lOysraSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGkrMS1uLHMpO3JbaV09b31pZihhLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVyblswXTtmb3IodmFyIHI9dFswXS5sZW5ndGgsaT1bdFswXV0sYT1bMF0sbz0xO288ZTsrK28paWYoaS5wdXNoKHRbb10pLG4oaSxyKSl7aWYoYS5wdXNoKG8pLGEubGVuZ3RoPT09cisxKXJldHVybiBhfWVsc2UgaS5wb3AoKTtyZXR1cm4gYX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUxN31dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaShlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksaT0wO2k8ci5sZW5ndGg7KytpKW5baV09ZVtyW2ldXTtyZXR1cm4gYShuKSp0PDF9KX1lLmV4cG9ydHM9bjt2YXIgaT10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGE9dCgiY2lyY3VtcmFkaXVzIil9LHtjaXJjdW1yYWRpdXM6ODcsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxMjN9XSw0NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYShpKHQsZSkpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImFscGhhLWNvbXBsZXgiKSxhPXQoInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSIpfSx7ImFscGhhLWNvbXBsZXgiOjQzLCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiOjUyNX1dLDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO2U9bnVsbD09ZT8xOk1hdGguZmxvb3IoZSk7Zm9yKHZhciByPUFycmF5KDIqZSksbj0wO248ZTtuKyspe2Zvcih2YXIgaT0tKDEvMCksYT0xLzAsbz1uLHM9dC5sZW5ndGg7bzxzO28rPWUpdFtvXT5pJiYoaT10W29dKSx0W29dPGEmJihhPXRbb10pO3Jbbl09YSxyW2Urbl09aX1yZXR1cm4gcn1lLmV4cG9ydHM9bn0se31dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7bnVsbD09ZSYmKGU9MSksbnVsbD09ciYmKHI9aSh0LGUpKTtmb3IodmFyIG49MDtuPGU7bisrKXt2YXIgYT1yW2Urbl0sbz1yW25dLHM9bixsPXQubGVuZ3RoO2lmKGE9PT0xLzAmJm89PT0tKDEvMCkpZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tKDEvMCkpZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWEtbztmb3Iocz1uO3M8bDtzKz1lKXRbc109MD09PWM/LjU6KHRbc10tbykvY319cmV0dXJuIHR9dmFyIGk9dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPW59LHsiYXJyYXktYm91bmRzIjo0NX1dLDQ3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBpKHQpe3JldHVybiByLkJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4haSh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLkFycmF5QnVmZmVyJiYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcodCk6ISF0JiYodCBpbnN0YW5jZW9mIERhdGFWaWV3fHwhISh0LmJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9ZnVuY3Rpb24gcyh0KXtpZih4LmlzRnVuY3Rpb24odCkpe2lmKE0pcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkscj1lLm1hdGNoKGspO3JldHVybiByJiZyWzFdfX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBjKHQpe2lmKE18fCF4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguaW5zcGVjdCh0KTt2YXIgZT1zKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIHUodCl7cmV0dXJuIGwoYyh0LmFjdHVhbCksMTI4KSsiICIrdC5vcGVyYXRvcisiICIrbChjKHQuZXhwZWN0ZWQpLDEyOCl9ZnVuY3Rpb24gZih0LGUscixuLGkpe3Rocm93IG5ldyBULkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gaCh0LGUpe3R8fGYodCwhMCxlLCI9PSIsVC5vayl9ZnVuY3Rpb24gZCh0LGUscixzKXtpZih0PT09ZSlyZXR1cm4hMDtpZihpKHQpJiZpKGUpKXJldHVybiAwPT09bih0LGUpO2lmKHguaXNEYXRlKHQpJiZ4LmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZih4LmlzUmVnRXhwKHQpJiZ4LmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYobyh0KSYmbyhlKSYmYSh0KT09PWEoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1uKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO3M9c3x8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX07dmFyIGw9cy5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4gbCE9PS0xJiZsPT09cy5leHBlY3RlZC5pbmRleE9mKGUpfHwocy5hY3R1YWwucHVzaCh0KSxzLmV4cGVjdGVkLnB1c2goZSksbSh0LGUscixzKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBwKHQpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbSh0LGUscixuKXtpZihudWxsPT09dHx8dm9pZCAwPT09dHx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuITE7aWYoeC5pc1ByaW1pdGl2ZSh0KXx8eC5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXAodCksYT1wKGUpO2lmKGkmJiFhfHwhaSYmYSlyZXR1cm4hMTtpZihpKXJldHVybiB0PXcuY2FsbCh0KSxlPXcuY2FsbChlKSxkKHQsZSxyKTt2YXIgbyxzLGw9QSh0KSxjPUEoZSk7aWYobC5sZW5ndGghPT1jLmxlbmd0aClyZXR1cm4hMTtmb3IobC5zb3J0KCksYy5zb3J0KCkscz1sLmxlbmd0aC0xO3M+PTA7cy0tKWlmKGxbc10hPT1jW3NdKXJldHVybiExO2ZvcihzPWwubGVuZ3RoLTE7cz49MDtzLS0paWYobz1sW3NdLCFkKHRbb10sZVtvXSxyLG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHYodCxlLHIpe2QodCxlLCEwKSYmZih0LGUsciwibm90RGVlcFN0cmljdEVxdWFsIix2KX1mdW5jdGlvbiBnKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiZlLmNhbGwoe30sdCk9PT0hMH1mdW5jdGlvbiB5KHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImJsb2NrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTsic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPXkoZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZmKGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBhPSJzdHJpbmciPT10eXBlb2YgbixvPSF0JiZ4LmlzRXJyb3IoaSkscz0hdCYmaSYmIXI7aWYoKG8mJmEmJmcoaSxyKXx8cykmJmYoaSxyLCJHb3QgdW53YW50ZWQgZXhjZXB0aW9uIituKSx0JiZpJiZyJiYhZyhpLHIpfHwhdCYmaSl0aHJvdyBpfXZhciB4PXQoInV0aWwvIiksXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHc9QXJyYXkucHJvdG90eXBlLnNsaWNlLE09ZnVuY3Rpb24oKXtyZXR1cm4iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lfSgpLFQ9ZS5leHBvcnRzPWgsaz0vXHMqZnVuY3Rpb25ccysoW15cKFxzXSopXHMqLztULkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT11KHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGU9dC5zdGFja1N0YXJ0RnVuY3Rpb258fGY7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9cyhlKSxhPW4uaW5kZXhPZigiXG4iK2kpO2lmKGE+PTApe3ZhciBvPW4uaW5kZXhPZigiXG4iLGErMSk7bj1uLnN1YnN0cmluZyhvKzEpfXRoaXMuc3RhY2s9bn19fSx4LmluaGVyaXRzKFQuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLFQuZmFpbD1mLFQub2s9aCxULmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZmKHQsZSxyLCI9PSIsVC5lcXVhbCl9LFQubm90RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PWUmJmYodCxlLHIsIiE9IixULm5vdEVxdWFsKX0sVC5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2QodCxlLCExKXx8Zih0LGUsciwiZGVlcEVxdWFsIixULmRlZXBFcXVhbCl9LFQuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtkKHQsZSwhMCl8fGYodCxlLHIsImRlZXBTdHJpY3RFcXVhbCIsVC5kZWVwU3RyaWN0RXF1YWwpfSxULm5vdERlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7CmQodCxlLCExKSYmZih0LGUsciwibm90RGVlcEVxdWFsIixULm5vdERlZXBFcXVhbCl9LFQubm90RGVlcFN0cmljdEVxdWFsPXYsVC5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJmYodCxlLHIsIj09PSIsVC5zdHJpY3RFcXVhbCl9LFQubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZmKHQsZSxyLCIhPT0iLFQubm90U3RyaWN0RXF1YWwpfSxULnRocm93cz1mdW5jdGlvbih0LGUscil7YighMCx0LGUscil9LFQuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtiKCExLHQsZSxyKX0sVC5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIEE9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KV8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InV0aWwvIjo1NTZ9XSw0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107aVtvXT1zfWlbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28paVtyXVtvXT0xO2Zvcih2YXIgYz1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PWEoaSxjKSxmPW4odVtyKzFdKTswPT09ZiYmKGY9MSk7Zm9yKHZhciBoPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbyloW29dPW4odVtvXSkvZjtyZXR1cm4gaH1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIil9LHsicm9idXN0LWxpbmVhci1zb2x2ZSI6NTE2fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtyZXR1cm4iPSI9PT10W2UtMl0/MjoiPSI9PT10W2UtMV0/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIDMqdC5sZW5ndGgvNC1uKHQpfWZ1bmN0aW9uIGEodCl7dmFyIGUscixpLGEsbyxzLGw9dC5sZW5ndGg7bz1uKHQpLHM9bmV3IGYoMypsLzQtbyksaT1vPjA/bC00Omw7dmFyIGM9MDtmb3IoZT0wLHI9MDtlPGk7ZSs9NCxyKz0zKWE9dVt0LmNoYXJDb2RlQXQoZSldPDwxOHx1W3QuY2hhckNvZGVBdChlKzEpXTw8MTJ8dVt0LmNoYXJDb2RlQXQoZSsyKV08PDZ8dVt0LmNoYXJDb2RlQXQoZSszKV0sc1tjKytdPWE+PjE2JjI1NSxzW2MrK109YT4+OCYyNTUsc1tjKytdPTI1NSZhO3JldHVybiAyPT09bz8oYT11W3QuY2hhckNvZGVBdChlKV08PDJ8dVt0LmNoYXJDb2RlQXQoZSsxKV0+PjQsc1tjKytdPTI1NSZhKToxPT09byYmKGE9dVt0LmNoYXJDb2RlQXQoZSldPDwxMHx1W3QuY2hhckNvZGVBdChlKzEpXTw8NHx1W3QuY2hhckNvZGVBdChlKzIpXT4+MixzW2MrK109YT4+OCYyNTUsc1tjKytdPTI1NSZhKSxzfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGNbdD4+MTgmNjNdK2NbdD4+MTImNjNdK2NbdD4+NiY2M10rY1s2MyZ0XX1mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG4saT1bXSxhPWU7YTxyO2ErPTMpbj0odFthXTw8MTYpKyh0W2ErMV08PDgpK3RbYSsyXSxpLnB1c2gobyhuKSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPXIlMyxpPSIiLGE9W10sbz0wLGw9ci1uO288bDtvKz0xNjM4MylhLnB1c2gocyh0LG8sbysxNjM4Mz5sP2w6bysxNjM4MykpO3JldHVybiAxPT09bj8oZT10W3ItMV0saSs9Y1tlPj4yXSxpKz1jW2U8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYoZT0odFtyLTJdPDw4KSt0W3ItMV0saSs9Y1tlPj4xMF0saSs9Y1tlPj40JjYzXSxpKz1jW2U8PDImNjNdLGkrPSI9IiksYS5wdXNoKGkpLGEuam9pbigiIil9ci5ieXRlTGVuZ3RoPWksci50b0J5dGVBcnJheT1hLHIuZnJvbUJ5dGVBcnJheT1sO2Zvcih2YXIgYz1bXSx1PVtdLGY9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksaD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZD0wLHA9aC5sZW5ndGg7ZDxwOysrZCljW2RdPWhbZF0sdVtoLmNoYXJDb2RlQXQoZCldPWQ7dVsiLSIuY2hhckNvZGVBdCgwKV09NjIsdVsiXyIuY2hhckNvZGVBdCgwKV09NjN9LHt9XSw1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9dmFyIGk9dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9yYXRpb25hbGl6ZSI6NjF9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9ZS5leHBvcnRzPW59LHt9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjYxfV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKGkodCkpcmV0dXJuIGU/Yyh0LG4oZSkpOlt0WzBdLmNsb25lKCksdFsxXS5jbG9uZSgpXTt2YXIgcix1LGY9MDtpZihhKHQpKXI9dC5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0KXI9cyh0KTtlbHNle2lmKDA9PT10KXJldHVybltvKDApLG8oMSldO2lmKHQ9PT1NYXRoLmZsb29yKHQpKXI9byh0KTtlbHNle2Zvcig7dCE9PU1hdGguZmxvb3IodCk7KXQqPU1hdGgucG93KDIsMjU2KSxmLT0yNTY7cj1vKHQpfX1pZihpKGUpKXIubXVsKGVbMV0pLHU9ZVswXS5jbG9uZSgpO2Vsc2UgaWYoYShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl1PXMoZSk7ZWxzZSBpZihlKWlmKGU9PT1NYXRoLmZsb29yKGUpKXU9byhlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxmKz0yNTY7dT1vKGUpfWVsc2UgdT1vKDEpO3JldHVybiBmPjA/cj1yLnNobG4oZik6ZjwwJiYodT11LnNobG4oLWYpKSxsKHIsdSl9dmFyIGk9dCgiLi9pcy1yYXQiKSxhPXQoIi4vbGliL2lzLWJuIiksbz10KCIuL2xpYi9udW0tdG8tYm4iKSxzPXQoIi4vbGliL3N0ci10by1ibiIpLGw9dCgiLi9saWIvcmF0aW9uYWxpemUiKSxjPXQoIi4vZGl2Iik7ZS5leHBvcnRzPW59LHsiLi9kaXYiOjUzLCIuL2lzLXJhdCI6NTUsIi4vbGliL2lzLWJuIjo1OSwiLi9saWIvbnVtLXRvLWJuIjo2MCwiLi9saWIvcmF0aW9uYWxpemUiOjYxLCIuL2xpYi9zdHItdG8tYm4iOjYyfV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZpKHRbMF0pJiZpKHRbMV0pfXZhciBpPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPW59LHsiLi9saWIvaXMtYm4iOjU5fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5jbXAobmV3IGkoMCkpfXZhciBpPXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY5fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsbj0wO2lmKDE9PT1lKW49clswXTtlbHNlIGlmKDI9PT1lKW49clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspe3ZhciBhPXJbaV07bis9YSpNYXRoLnBvdyg2NzEwODg2NCxpKX1yZXR1cm4gdC5zaWduPy1uOm59ZS5leHBvcnRzPW59LHt9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWEoaS5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1hKGkuaGkodCkpO3JldHVybiByPjIwPzUyOnIrMzJ9dmFyIGk9dCgiZG91YmxlLWJpdHMiKSxhPXQoImJpdC10d2lkZGxlIikuY291bnRUcmFpbGluZ1plcm9zO2UuZXhwb3J0cz1ufSx7ImJpdC10d2lkZGxlIjo2OCwiZG91YmxlLWJpdHMiOjEyNH1dLDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmQm9vbGVhbih0LndvcmRzKX10KCJibi5qcyIpO2UuZXhwb3J0cz1ufSx7ImJuLmpzIjo2OX1dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9YS5leHBvbmVudCh0KTtyZXR1cm4gZTw1Mj9uZXcgaSh0KTpuZXcgaSh0Kk1hdGgucG93KDIsNTItZSkpLnNobG4oZS01Mil9dmFyIGk9dCgiYm4uanMiKSxhPXQoImRvdWJsZS1iaXRzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY5LCJkb3VibGUtYml0cyI6MTI0fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWEodCksbj1hKGUpO2lmKDA9PT1yKXJldHVybltpKDApLGkoMSldO2lmKDA9PT1uKXJldHVybltpKDApLGkoMCldO248MCYmKHQ9dC5uZWcoKSxlPWUubmVnKCkpO3ZhciBvPXQuZ2NkKGUpO3JldHVybiBvLmNtcG4oMSk/W3QuZGl2KG8pLGUuZGl2KG8pXTpbdCxlXX12YXIgaT10KCIuL251bS10by1ibiIpLGE9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPW59LHsiLi9ibi1zaWduIjo1NiwiLi9udW0tdG8tYm4iOjYwfV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGkodCl9dmFyIGk9dCgiYm4uanMiKTtlLmV4cG9ydHM9bn0seyJibi5qcyI6Njl9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjYxfV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gaSh0WzBdKSppKHRbMV0pfXZhciBpPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9ibi1zaWduIjo1Nn1dLDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo2MX1dLDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgbj1lLmRpdm1vZChyKSxvPW4uZGl2LHM9aShvKSxsPW4ubW9kO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIHM7aWYocyl7dmFyIGM9YShzKSs0LHU9aShsLnNobG4oYykuZGl2Um91bmQocikpO3JldHVybiBzPDAmJih1PS11KSxzK3UqTWF0aC5wb3coMiwtYyl9dmFyIGY9ci5iaXRMZW5ndGgoKS1sLmJpdExlbmd0aCgpKzUzLHU9aShsLnNobG4oZikuZGl2Um91bmQocikpO3JldHVybiBmPDEwMjM/dSpNYXRoLnBvdygyLC1mKToodSo9TWF0aC5wb3coMiwtMTAyMykpKk1hdGgucG93KDIsMTAyMy1mKX12YXIgaT10KCIuL2xpYi9ibi10by1udW0iKSxhPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2JuLXRvLW51bSI6NTcsIi4vbGliL2N0eiI6NTh9XSw2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixhPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hIixpPyIuZ2V0KG0pIjoiW21dIl07cmV0dXJuIGE/ZS5pbmRleE9mKCJjIik8MD9vLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTpvLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6by5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP28ucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTpvLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9Iiksby5wdXNoKCJ9IiksYT9vLnB1c2goInJldHVybiAtMX07Iik6by5wdXNoKCJyZXR1cm4gaX07Iiksby5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybiB0Jj0tdCx0JiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCx0Pj4+PWUscj0odD4yNTUpPDwzLHQ+Pj49cixlfD1yLHI9KHQ+MTUpPDwyLHQ+Pj49cixlfD1yLHI9KHQ+Myk8PDEsdD4+Pj1yLChlfD1yKXx0Pj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtPXQ+Pj4xJjE0MzE2NTU3NjUsMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmdCkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0Jj02NTUzNSx0PTE2NzExOTM1Jih0fHQ8PDgpLHQ9MjUyNjQ1MTM1Jih0fHQ8PDQpLHQ9ODU4OTkzNDU5Jih0fHQ8PDIpLHQ9MTQzMTY1NTc2NSYodHx0PDwxKSxlJj02NTUzNSxlPTE2NzExOTM1JihlfGU8PDgpLGU9MjUyNjQ1MTM1JihlfGU8PDQpLGU9ODU4OTkzNDU5JihlfGU8PDIpLGU9MTQzMTY1NTc2NSYoZXxlPDwxKSx0fGU8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjE0MzE2NTU3NjUsdD04NTg5OTM0NTkmKHR8dD4+PjEpLHQ9MjUyNjQ1MTM1Jih0fHQ+Pj4yKSx0PTE2NzExOTM1Jih0fHQ+Pj40KSwodD02NTUzNSYodHx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCY9MTAyMyx0PTQyNzgxOTAzMzUmKHR8dDw8MTYpLHQ9MjUxNzE5Njk1Jih0fHQ8PDgpLHQ9MzI3MjM1NjAzNSYodHx0PDw0KSx0PTEyMjcxMzM1MTMmKHR8dDw8MiksZSY9MTAyMyxlPTQyNzgxOTAzMzUmKGV8ZTw8MTYpLGU9MjUxNzE5Njk1JihlfGU8PDgpLGU9MzI3MjM1NjAzNSYoZXxlPDw0KSxlPTEyMjcxMzM1MTMmKGV8ZTw8MiksdHw9ZTw8MSxyJj0xMDIzLHI9NDI3ODE5MDMzNSYocnxyPDwxNikscj0yNTE3MTk2OTUmKHJ8cjw8OCkscj0zMjcyMzU2MDM1JihyfHI8PDQpLHI9MTIyNzEzMzUxMyYocnxyPDwyKSx0fHI8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjEyMjcxMzM1MTMsdD0zMjcyMzU2MDM1Jih0fHQ+Pj4yKSx0PTI1MTcxOTY5NSYodHx0Pj4+NCksdD00Mjc4MTkwMzM1Jih0fHQ+Pj44KSwodD0xMDIzJih0fHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gaSh0LGUscil7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LndvcmRzKSlyZXR1cm4gdDt0aGlzLnNpZ249ITEsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCwibGUiIT09ZSYmImJlIiE9PWV8fChyPWUsZT0xMCksbnVsbCE9PXQmJnRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPGk7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSktNDg7bjw8PTQsbnw9bz49NDkmJm88PTU0P28tNDkrMTA6bz49MTcmJm88PTIyP28tMTcrMTA6MTUmb31yZXR1cm4gbn1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288YTtvKyspe3ZhciBzPXQuY2hhckNvZGVBdChvKS00ODtpKj1uLGkrPXM+PTQ5P3MtNDkrMTA6cz49MTc/cy0xNysxMDpzfXJldHVybiBpfWZ1bmN0aW9uIHModCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGkoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGkoMSkuaXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbCgpe3MuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBjKCl7cy5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHUoKXtzLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZigpe3MuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBoKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9aS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSB0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZCh0KXtoLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBpKDEpLmlzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludi5zaWduPSEwLHRoaXMubWludj10aGlzLm1pbnYubW9kKHRoaXMucil9Im9iamVjdCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1pOmUuQk49aSxpLkJOPWksaS53b3JkU2l6ZT0yNixpLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxuKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUsbik7ImhleCI9PT1lJiYoZT0xNikscihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIik7dmFyIGk9MDsiLSI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSwiLSI9PT10WzBdJiYodGhpcy5zaWduPSEwKSx0aGlzLnN0cmlwKCksImxlIj09PW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLG4pfSxpLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUsbil7dDwwJiYodGhpcy5zaWduPSEwLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09biYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUsbil9LGkucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLG4pe2lmKHIoIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgYT0wO2lmKCJiZSI9PT1uKWZvcih2YXIgaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpe3ZhciBzPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTY7dGhpcy53b3Jkc1tvXXw9czw8YSY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09cz4+PjI2LWEmNjcxMDg4NjMsYSs9MjQsYT49MjYmJihhLT0yNixvKyspfWVsc2UgaWYoImxlIj09PW4pZm9yKHZhciBpPTAsbz0wO2k8dC5sZW5ndGg7aSs9Myl7dmFyIHM9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNjt0aGlzLndvcmRzW29dfD1zPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1zPj4+MjYtYSY2NzEwODg2MyxhKz0yNCxhPj0yNiYmKGEtPTI2LG8rKyl9cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtNixpPTA7cj49ZTtyLT02KXt2YXIgbz1hKHQscixyKzYpO3RoaXMud29yZHNbaV18PW88PG4mNjcxMDg4NjMsdGhpcy53b3Jkc1tpKzFdfD1vPj4+MjYtbiY0MTk0MzAzLG4rPTI0LG4+PTI2JiYobi09MjYsaSsrKX1pZihyKzYhPT1lKXt2YXIgbz1hKHQsZSxyKzYpO3RoaXMud29yZHNbaV18PW88PG4mNjcxMDg4NjMsdGhpcy53b3Jkc1tpKzFdfD1vPj4+MjYtbiY0MTk0MzAzfXRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIscz1hJW4sbD1NYXRoLm1pbihhLGEtcykrcixjPTAsdT1yO3U8bDt1Kz1uKWM9byh0LHUsdStuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyk7aWYoMCE9PXMpe2Zvcih2YXIgZj0xLGM9byh0LHUsdC5sZW5ndGgsZSksdT0wO3U8czt1KyspZio9ZTt0aGlzLmltdWxuKGYpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpfX0saS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQuc2lnbj10aGlzLnNpZ24sdC5yZWQ9dGhpcy5yZWR9LGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxpLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGkucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5zaWduPSExKSx0aGlzfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBwPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLG09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sdj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe2lmKDE2PT09KHQ9dHx8MTApfHwiaGV4Ij09PXQpe2Zvcih2YXIgbj0iIixpPTAsZT0wfGV8fDEsYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSxsPSgxNjc3NzIxNSYoczw8aXxhKSkudG9TdHJpbmcoMTYpO2E9cz4+PjI0LWkmMTY3NzcyMTUsbj0wIT09YXx8byE9PXRoaXMubGVuZ3RoLTE/cFs2LWwubGVuZ3RoXStsK246bCtuLGkrPTIsaT49MjYmJihpLT0yNixvLS0pfWZvcigwIT09YSYmKG49YS50b1N0cmluZygxNikrbik7bi5sZW5ndGglZSE9MDspbj0iMCIrbjtyZXR1cm4gdGhpcy5zaWduJiYobj0iLSIrbiksbn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgYz1tW3RdLHU9dlt0XSxuPSIiLGY9dGhpcy5jbG9uZSgpO2ZvcihmLnNpZ249ITE7MCE9PWYuY21wbigwKTspe3ZhciBoPWYubW9kbih1KS50b1N0cmluZyh0KTtmPWYuaWRpdm4odSksbj0wIT09Zi5jbXBuKDApP3BbYy1oLmxlbmd0aF0raCtuOmgrbn1yZXR1cm4gMD09PXRoaXMuY21wbigwKSYmKG49IjAiK24pLHRoaXMuc2lnbiYmKG49Ii0iK24pLG59cighMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGkucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCl7dGhpcy5zdHJpcCgpO3ZhciBlPW5ldyBBcnJheSh0aGlzLmJ5dGVMZW5ndGgoKSk7ZVswXT0wO3ZhciByPXRoaXMuY2xvbmUoKTtpZigibGUiIT09dClmb3IodmFyIG49MDswIT09ci5jbXBuKDApO24rKyl7dmFyIGk9ci5hbmRsbigyNTUpO3IuaXNocm4oOCksZVtlLmxlbmd0aC1uLTFdPWl9ZWxzZSBmb3IodmFyIG49MDswIT09ci5jbXBuKDApO24rKyl7dmFyIGk9ci5hbmRsbigyNTUpO3IuaXNocm4oOCksZVtuXT1pfXJldHVybiBlfSxNYXRoLmNsejMyP2kucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9OmkucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxpLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PSgxJmUpJiZyKysscn0saS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sdD10aGlzLl9jb3VudEJpdHMoZSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt0fSxpLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmNtcG4oMCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0saS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuY21wbigwKSlyZXR1cm4gdGhpcy5jbG9uZSgpO3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5zaWduPSF0aGlzLnNpZ24sdH0saS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLnNpZ249dGhpcy5zaWdufHx0LnNpZ247dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxpLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3RoaXMuc2lnbj10aGlzLnNpZ24mJnQuc2lnbjt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxpLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3RoaXMuc2lnbj10aGlzLnNpZ258fHQuc2lnbjt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0saS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe3IoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTtmb3IodmFyIG49dC8yNnwwLGk9dCUyNjt0aGlzLmxlbmd0aDw9bjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzLndvcmRzW25dPWU/dGhpcy53b3Jkc1tuXXwxPDxpOnRoaXMud29yZHNbbl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5zaWduJiYhdC5zaWduKXt0aGlzLnNpZ249ITE7dmFyIGU9dGhpcy5pc3ViKHQpO3JldHVybiB0aGlzLnNpZ249IXRoaXMuc2lnbix0aGlzLl9ub3JtU2lnbigpfWlmKCF0aGlzLnNpZ24mJnQuc2lnbil7dC5zaWduPSExO3ZhciBlPXRoaXMuaXN1Yih0KTtyZXR1cm4gdC5zaWduPSEwLGUuX25vcm1TaWduKCl9dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGU9ci53b3Jkc1thXStuLndvcmRzW2FdK2k7dGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2fWZvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKXt2YXIgZT1yLndvcmRzW2FdK2k7dGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2fWlmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7YTxyLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1yLndvcmRzW2FdO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodC5zaWduJiYhdGhpcy5zaWduKXt0LnNpZ249ITE7dmFyIGU9dGhpcy5zdWIodCk7cmV0dXJuIHQuc2lnbj0hMCxlfWlmKCF0LnNpZ24mJnRoaXMuc2lnbil7dGhpcy5zaWduPSExO3ZhciBlPXQuc3ViKHRoaXMpO3JldHVybiB0aGlzLnNpZ249ITAsZX1yZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGkucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYodC5zaWduKXt0LnNpZ249ITE7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0LnNpZ249ITAsZS5fbm9ybVNpZ24oKX1pZih0aGlzLnNpZ24pcmV0dXJuIHRoaXMuc2lnbj0hMSx0aGlzLmlhZGQodCksdGhpcy5zaWduPSEwLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMuc2lnbj0hMSx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgZT1uLndvcmRzW29dLWkud29yZHNbb10rYTthPWU+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZX1mb3IoOzAhPT1hJiZvPG4ubGVuZ3RoO28rKyl7dmFyIGU9bi53b3Jkc1tvXSthO2E9ZT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlfWlmKDA9PT1hJiZvPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO288bi5sZW5ndGg7bysrKXRoaXMud29yZHNbb109bi53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksbiE9PXRoaXMmJih0aGlzLnNpZ249ITApLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX0saS5wcm90b3R5cGUuX3NtYWxsTXVsVG89ZnVuY3Rpb24odCxlKXtlLnNpZ249dC5zaWduIT09dGhpcy5zaWduLGUubGVuZ3RoPXRoaXMubGVuZ3RoK3QubGVuZ3RoO2Zvcih2YXIgcj0wLG49MDtuPGUubGVuZ3RoLTE7bisrKXtmb3IodmFyIGk9cj4+PjI2LGE9NjcxMDg4NjMmcixvPU1hdGgubWluKG4sdC5sZW5ndGgtMSkscz1NYXRoLm1heCgwLG4tdGhpcy5sZW5ndGgrMSk7czw9bztzKyspe3ZhciBsPW4tcyxjPTB8dGhpcy53b3Jkc1tsXSx1PTB8dC53b3Jkc1tzXSxmPWMqdSxoPTY3MTA4ODYzJmY7aT1pKyhmLzY3MTA4ODY0fDApfDAsaD1oK2F8MCxhPTY3MTA4ODYzJmgsaT1pKyhoPj4+MjYpfDB9ZS53b3Jkc1tuXT1hLHI9aX1yZXR1cm4gMCE9PXI/ZS53b3Jkc1tuXT1yOmUubGVuZ3RoLS0sZS5zdHJpcCgpfSxpLnByb3RvdHlwZS5fYmlnTXVsVG89ZnVuY3Rpb24odCxlKXtlLnNpZ249dC5zaWduIT09dGhpcy5zaWduLGUubGVuZ3RoPXRoaXMubGVuZ3RoK3QubGVuZ3RoO2Zvcih2YXIgcj0wLG49MCxpPTA7aTxlLmxlbmd0aC0xO2krKyl7dmFyIGE9bjtuPTA7Zm9yKHZhciBvPTY3MTA4ODYzJnIscz1NYXRoLm1pbihpLHQubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxpLXRoaXMubGVuZ3RoKzEpO2w8PXM7bCsrKXt2YXIgYz1pLWwsdT0wfHRoaXMud29yZHNbY10sZj0wfHQud29yZHNbbF0saD11KmYsZD02NzEwODg2MyZoO2E9YSsoaC82NzEwODg2NHwwKXwwLGQ9ZCtvfDAsbz02NzEwODg2MyZkLGE9YSsoZD4+PjI2KXwwLG4rPWE+Pj4yNixhJj02NzEwODg2M31lLndvcmRzW2ldPW8scj1hLGE9bn1yZXR1cm4gMCE9PXI/ZS53b3Jkc1tpXT1yOmUubGVuZ3RoLS0sZS5zdHJpcCgpfSxpLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmxlbmd0aCt0Lmxlbmd0aDw2Mz90aGlzLl9zbWFsbE11bFRvKHQsZSk6dGhpcy5fYmlnTXVsVG8odCxlKX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxpLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmNtcG4oMCl8fDA9PT10LmNtcG4oMCkpcmV0dXJuIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xLHRoaXM7dmFyIGU9dGhpcy5sZW5ndGgscj10Lmxlbmd0aDt0aGlzLnNpZ249dC5zaWduIT09dGhpcy5zaWduLHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoK3QubGVuZ3RoLHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV09MDtmb3IodmFyIG49dGhpcy5sZW5ndGgtMjtuPj0wO24tLSl7Zm9yKHZhciBpPTAsYT0wLG89TWF0aC5taW4obixyLTEpLHM9TWF0aC5tYXgoMCxuLWUrMSk7czw9bztzKyspe3ZhciBsPW4tcyxjPXRoaXMud29yZHNbbF0sdT10LndvcmRzW3NdLGY9Yyp1LGg9NjcxMDg4NjMmZjtpKz1mLzY3MTA4ODY0fDAsaCs9YSxhPTY3MTA4ODYzJmgsaSs9aD4+PjI2fXRoaXMud29yZHNbbl09YSx0aGlzLndvcmRzW24rMV0rPWksaT0wfWZvcih2YXIgaT0wLGw9MTtsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIGQ9dGhpcy53b3Jkc1tsXStpO3RoaXMud29yZHNbbF09NjcxMDg4NjMmZCxpPWQ+Pj4yNn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtyKCJudW1iZXIiPT10eXBlb2YgdCk7Zm9yKHZhciBlPTAsbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzLndvcmRzW25dKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbbl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW25dPWUsdGhpcy5sZW5ndGgrKyksdGhpc30saS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxpLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGkucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGkucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3IoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LG49KHQtZSkvMjYsaT02NzEwODg2Mz4+PjI2LWU8PDI2LWU7aWYoMCE9PWUpe2Zvcih2YXIgYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSZpLGw9dGhpcy53b3Jkc1tvXS1zPDxlO3RoaXMud29yZHNbb109bHxhLGE9cz4+PjI2LWV9YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09bil7Zm9yKHZhciBvPXRoaXMubGVuZ3RoLTE7bz49MDtvLS0pdGhpcy53b3Jkc1tvK25dPXRoaXMud29yZHNbb107Zm9yKHZhciBvPTA7bzxuO28rKyl0aGlzLndvcmRzW29dPTA7dGhpcy5sZW5ndGgrPW59cmV0dXJuIHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLG4pe3IoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9bjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pe3RoaXMubGVuZ3RoLT1vO2Zvcih2YXIgYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dfWVsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB1PTAsYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49aSk7Yy0tKXt2YXIgZj10aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxmPj4+YSx1PWYmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCksdGhpc30saS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxpLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGkucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe3IoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LG49KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PW4pJiYhISh0aGlzLndvcmRzW25dJmkpfSxpLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7cigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYsbj0odC1lKS8yNjtpZihyKCF0aGlzLnNpZ24sImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLDAhPT1lJiZuKyssdGhpcy5sZW5ndGg9TWF0aC5taW4obix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxpLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gcigibnVtYmVyIj09dHlwZW9mIHQpLHQ8MD90aGlzLmlzdWJuKC10KTp0aGlzLnNpZ24/MT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPHQ/KHRoaXMud29yZHNbMF09dC10aGlzLndvcmRzWzBdLHRoaXMuc2lnbj0hMSx0aGlzKToodGhpcy5zaWduPSExLHRoaXMuaXN1Ym4odCksdGhpcy5zaWduPSEwLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxpLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30saS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYocigibnVtYmVyIj09dHlwZW9mIHQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYodGhpcy5zaWduKXJldHVybiB0aGlzLnNpZ249ITEsdGhpcy5pYWRkbih0KSx0aGlzLnNpZ249ITAsdGhpczt0aGlzLndvcmRzWzBdLT10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0saS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxpLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2lnbj0hMSx0aGlzfSxpLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0saS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQubGVuZ3RoK247aWYodGhpcy53b3Jkcy5sZW5ndGg8YSl7Zm9yKHZhciBvPW5ldyBBcnJheShhKSxpPTA7aTx0aGlzLmxlbmd0aDtpKyspb1tpXT10aGlzLndvcmRzW2ldO3RoaXMud29yZHM9b31lbHNlIGk9dGhpcy5sZW5ndGg7Zm9yKHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDtmb3IodmFyIHM9MCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBsPXRoaXMud29yZHNbaStuXStzLGM9dC53b3Jkc1tpXSplO2wtPTY3MTA4ODYzJmMscz0obD4+MjYpLShjLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStuXT02NzEwODg2MyZsfWZvcig7aTx0aGlzLmxlbmd0aC1uO2krKyl7dmFyIGw9dGhpcy53b3Jkc1tpK25dK3M7cz1sPj4yNix0aGlzLndvcmRzW2krbl09NjcxMDg4NjMmbH1pZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO3Iocz09PS0xKSxzPTA7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBsPS10aGlzLndvcmRzW2ldK3M7cz1sPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmx9cmV0dXJuIHRoaXMuc2lnbj0hMCx0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksYT10LG89YS53b3Jkc1thLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGE9YS5zaGxuKHIpLG4uaXNobG4ociksbz1hLndvcmRzW2EubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWEubGVuZ3RoO2lmKCJtb2QiIT09ZSl7cz1uZXcgaShudWxsKSxzLmxlbmd0aD1sKzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8cy5sZW5ndGg7YysrKXMud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGEsMSxsKTt1LnNpZ258fChuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgZj1sLTE7Zj49MDtmLS0pe3ZhciBoPTY3MTA4ODY0Km4ud29yZHNbYS5sZW5ndGgrZl0rbi53b3Jkc1thLmxlbmd0aCtmLTFdO2ZvcihoPU1hdGgubWluKGgvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChhLGgsZik7bi5zaWduOyloLS0sbi5zaWduPSExLG4uX2lzaGxuc3VibXVsKGEsMSxmKSwwIT09bi5jbXBuKDApJiYobi5zaWduPSFuLnNpZ24pO3MmJihzLndvcmRzW2ZdPWgpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXNocm4ocikse2RpdjpzP3M6bnVsbCxtb2Q6bn19LGkucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUpe2lmKHIoMCE9PXQuY21wbigwKSksdGhpcy5zaWduJiYhdC5zaWduKXt2YXIgbixhLG89dGhpcy5uZWcoKS5kaXZtb2QodCxlKTtyZXR1cm4ibW9kIiE9PWUmJihuPW8uZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihhPTA9PT1vLm1vZC5jbXBuKDApP28ubW9kOnQuc3ViKG8ubW9kKSkse2RpdjpuLG1vZDphfX1pZighdGhpcy5zaWduJiZ0LnNpZ24pe3ZhciBuLG89dGhpcy5kaXZtb2QodC5uZWcoKSxlKTtyZXR1cm4ibW9kIiE9PWUmJihuPW8uZGl2Lm5lZygpKSx7ZGl2Om4sbW9kOm8ubW9kfX1yZXR1cm4gdGhpcy5zaWduJiZ0LnNpZ24/dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBpKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/ImRpdiI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgaSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGkodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxpLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsImRpdiIpLmRpdn0saS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiKS5tb2R9LGkucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKDA9PT1lLm1vZC5jbXBuKDApKXJldHVybiBlLmRpdjt2YXIgcj1lLmRpdi5zaWduP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnNocm4oMSksaT10LmFuZGxuKDEpLGE9ci5jbXAobik7cmV0dXJuIGE8MHx8MT09PWkmJjA9PT1hP2UuZGl2OmUuZGl2LnNpZ24/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGkucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7cih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxuPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKW49KGUqbit0aGlzLndvcmRzW2ldKSV0O3JldHVybiBufSxpLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtyKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxuPXRoaXMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXRoaXMud29yZHNbbl0rNjcxMDg4NjQqZTt0aGlzLndvcmRzW25dPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0saS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtyKCF0LnNpZ24pLHIoMCE9PXQuY21wbigwKSk7dmFyIGU9dGhpcyxuPXQuY2xvbmUoKTtlPWUuc2lnbj9lLm1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBhPW5ldyBpKDEpLG89bmV3IGkoMCkscz1uZXcgaSgwKSxsPW5ldyBpKDEpLGM9MDtlLmlzRXZlbigpJiZuLmlzRXZlbigpOyllLmlzaHJuKDEpLG4uaXNocm4oMSksKytjO2Zvcih2YXIgdT1uLmNsb25lKCksZj1lLmNsb25lKCk7MCE9PWUuY21wbigwKTspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pc2hybigxKSxhLmlzRXZlbigpJiZvLmlzRXZlbigpPyhhLmlzaHJuKDEpLG8uaXNocm4oMSkpOihhLmlhZGQodSkuaXNocm4oMSksby5pc3ViKGYpLmlzaHJuKDEpKTtmb3IoO24uaXNFdmVuKCk7KW4uaXNocm4oMSkscy5pc0V2ZW4oKSYmbC5pc0V2ZW4oKT8ocy5pc2hybigxKSxsLmlzaHJuKDEpKToocy5pYWRkKHUpLmlzaHJuKDEpLGwuaXN1YihmKS5pc2hybigxKSk7ZS5jbXAobik+PTA/KGUuaXN1YihuKSxhLmlzdWIocyksby5pc3ViKGwpKToobi5pc3ViKGUpLHMuaXN1YihhKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpuLmlzaGxuKGMpfX0saS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe3IoIXQuc2lnbikscigwIT09dC5jbXBuKDApKTt2YXIgZT10aGlzLG49dC5jbG9uZSgpO2U9ZS5zaWduP2UubW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGE9bmV3IGkoMSksbz1uZXcgaSgwKSxzPW4uY2xvbmUoKTtlLmNtcG4oMSk+MCYmbi5jbXBuKDEpPjA7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXNocm4oMSksYS5pc0V2ZW4oKT9hLmlzaHJuKDEpOmEuaWFkZChzKS5pc2hybigxKTtmb3IoO24uaXNFdmVuKCk7KW4uaXNocm4oMSksby5pc0V2ZW4oKT9vLmlzaHJuKDEpOm8uaWFkZChzKS5pc2hybigxKTtlLmNtcChuKT49MD8oZS5pc3ViKG4pLGEuaXN1YihvKSk6KG4uaXN1YihlKSxvLmlzdWIoYSkpfXJldHVybiAwPT09ZS5jbXBuKDEpP2E6b30saS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmNtcG4oMCkpcmV0dXJuIHQuY2xvbmUoKTtpZigwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLmNsb25lKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2Uuc2lnbj0hMSxyLnNpZ249ITE7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pc2hybigxKSxyLmlzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLmlzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pc2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pc2hsbihuKX0saS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEubW9kKHQpfSxpLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LGkucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxpLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxpLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtyKCJudW1iZXIiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixuPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9bil7Zm9yKHZhciBhPXRoaXMubGVuZ3RoO2E8bisxO2ErKyl0aGlzLndvcmRzW2FdPTA7cmV0dXJuIHRoaXMud29yZHNbbl18PWksdGhpcy5sZW5ndGg9bisxLHRoaXN9Zm9yKHZhciBvPWksYT1uOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpcy53b3Jkc1thXTtzKz1vLG89cz4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09c31yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30saS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoZSYmKHQ9LXQpLHRoaXMuc2lnbiYmIWUpcmV0dXJuLTE7aWYoIXRoaXMuc2lnbiYmZSlyZXR1cm4gMTt0Jj02NzEwODg2Myx0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXt2YXIgbj10aGlzLndvcmRzWzBdO3I9bj09PXQ/MDpuPHQ/LTE6MX1yZXR1cm4gdGhpcy5zaWduJiYocj0tcikscn0saS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc2lnbiYmIXQuc2lnbilyZXR1cm4tMTtpZighdGhpcy5zaWduJiZ0LnNpZ24pcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiB0aGlzLnNpZ24/LWU6ZX0saS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPXRoaXMud29yZHNbcl0saT10LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0saS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBoKHQpfSxpLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gcighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxyKCF0aGlzLnNpZ24sInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxpLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0saS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGkucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiByKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxpLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0saS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxpLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0saS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0saS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGkucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxpLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0saS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiByKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGkucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiByKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxpLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIGc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtzLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxzLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LHMucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pc2hybih0aGlzLm4sMCxlKX0scy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxuKGwscyksbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07ZS53b3Jkc1tlLmxlbmd0aCsrXT00MTk0MzAzJmk7Zm9yKHZhciBuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT10LndvcmRzW25dCjt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9dC53b3Jkc1tuLTEwXT1pPj4+MjIsdC5sZW5ndGgtPTl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZSxyPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LndvcmRzW25dO2U9NjQqaSxyKz05NzcqaSxlKz1yLzY3MTA4ODY0fDAsciY9NjcxMDg4NjMsdC53b3Jkc1tuXT1yLHI9ZX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxuKGMscyksbih1LHMpLG4oZixzKSxmLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KnQud29yZHNbcl0rZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0saS5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihnW2VdKXJldHVybiBnW2VdO3ZhciB0O2lmKCJrMjU2Ij09PWUpdD1uZXcgbDtlbHNlIGlmKCJwMjI0Ij09PWUpdD1uZXcgYztlbHNlIGlmKCJwMTkyIj09PWUpdD1uZXcgdTtlbHNle2lmKCJwMjU1MTkiIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitlKTt0PW5ldyBmfXJldHVybiBnW2VdPXQsdH0saC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7cighdC5zaWduLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHIodC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0saC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtyKCF0LnNpZ24mJiFlLnNpZ24sInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscih0LnJlZCYmdC5yZWQ9PT1lLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxoLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC5tb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LGgucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUuc2lnbj0hZS5zaWduLGUuaWFkZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0saC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0saC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LGgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxoLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LGgucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnNobG4oZSkpfSxoLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0saC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxoLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0KX0saC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxoLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYocihlJTI9PTEpLDM9PT1lKXt2YXIgbj10aGlzLm0uYWRkKG5ldyBpKDEpKS5pc2hybigyKSxhPXRoaXMucG93KHQsbik7cmV0dXJuIGF9Zm9yKHZhciBvPXRoaXMubS5zdWJuKDEpLHM9MDswIT09by5jbXBuKDApJiYwPT09by5hbmRsbigxKTspcysrLG8uaXNocm4oMSk7cigwIT09by5jbXBuKDApKTt2YXIgbD1uZXcgaSgxKS50b1JlZCh0aGlzKSxjPWwucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pc2hybigxKSxmPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZj1uZXcgaSgyKmYqZikudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGYsdSkuY21wKGMpOylmLnJlZElBZGQoYyk7Zm9yKHZhciBoPXRoaXMucG93KGYsbyksYT10aGlzLnBvdyh0LG8uYWRkbigxKS5pc2hybigxKSksZD10aGlzLnBvdyh0LG8pLHA9czswIT09ZC5jbXAobCk7KXtmb3IodmFyIG09ZCx2PTA7MCE9PW0uY21wKGwpO3YrKyltPW0ucmVkU3FyKCk7cih2PHApO3ZhciBnPXRoaXMucG93KGgsbmV3IGkoMSkuaXNobG4ocC12LTEpKTthPWEucmVkTXVsKGcpLGg9Zy5yZWRTcXIoKSxkPWQucmVkTXVsKGgpLHA9dn1yZXR1cm4gYX0saC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiBlLnNpZ24/KGUuc2lnbj0hMSx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0saC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoMD09PWUuY21wbigwKSlyZXR1cm4gbmV3IGkoMSk7Zm9yKHZhciBuPWUuY2xvbmUoKTswIT09bi5jbXBuKDApOylyLnB1c2gobi5hbmRsbigxKSksbi5pc2hybigxKTtmb3IodmFyIGE9dCxvPTA7bzxyLmxlbmd0aCYmMD09PXJbb107bysrLGE9dGhpcy5zcXIoYSkpO2lmKCsrbzxyLmxlbmd0aClmb3IodmFyIG49dGhpcy5zcXIoYSk7bzxyLmxlbmd0aDtvKyssbj10aGlzLnNxcihuKSkwIT09cltvXSYmKGE9dGhpcy5tdWwoYSxuKSk7cmV0dXJuIGF9LGgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0saC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LGkubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGQodCl9LG4oZCxoKSxkLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnNobG4odGhpcy5zaGlmdCkpfSxkLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKDA9PT10LmNtcG4oMCl8fDA9PT1lLmNtcG4oMCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYoMD09PXQuY21wbigwKXx8MD09PWUuY21wbigwKSlyZXR1cm4gbmV3IGkoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksYT1yLmlzdWIobikuaXNocm4odGhpcy5zaGlmdCksbz1hO3JldHVybiBhLmNtcCh0aGlzLm0pPj0wP289YS5pc3ViKHRoaXMubSk6YS5jbXBuKDApPDAmJihvPWEuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh2b2lkIDA9PT1lfHxlLHRoaXMpfSx7fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksZj0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbZisrXT1sW25dKTtpZigxJnIpe3ZhciBoPXVbMV07dVsxXT11WzBdLHVbMF09aH19fXJldHVybiBvfWUuZXhwb3J0cz1ufSx7fV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGkodCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wLHM9MCxsPXQubGVuZ3RoO3M8bDsrK3Mpe3ZhciBjPXRbc107aWYoIW4oZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbYSsrXT1jW3VdO2lbbysrXT1zfX1yZXR1cm4gb31mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBhPXQubGVuZ3RoLG89ZS5sZW5ndGg7aWYoIShhPD0wfHxvPD0wKSl7dmFyIHM9dFswXS5sZW5ndGg+Pj4xO2lmKCEoczw9MCkpe3ZhciBsLGM9Zi5tYWxsb2NEb3VibGUoMipzKmEpLHU9Zi5tYWxsb2NJbnQzMihhKTtpZigoYT1pKHQscyxjLHUpKT4wKXtpZigxPT09cyYmbiloLmluaXQoYSksbD1oLnN3ZWVwQ29tcGxldGUocyxyLDAsYSxjLHUsMCxhLGMsdSk7ZWxzZXt2YXIgcD1mLm1hbGxvY0RvdWJsZSgyKnMqbyksbT1mLm1hbGxvY0ludDMyKG8pO289aShlLHMscCxtKSxvPjAmJihoLmluaXQoYStvKSxsPTE9PT1zP2guc3dlZXBCaXBhcnRpdGUocyxyLDAsYSxjLHUsMCxvLHAsbSk6ZChzLHIsbixhLGMsdSxvLHAsbSksZi5mcmVlKHApLGYuZnJlZShtKSl9Zi5mcmVlKGMpLGYuZnJlZSh1KX1yZXR1cm4gbH19fWZ1bmN0aW9uIG8odCxlKXt1LnB1c2goW3QsZV0pfWZ1bmN0aW9uIHModCl7cmV0dXJuIHU9W10sYSh0LHQsbywhMCksdX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHU9W10sYSh0LGUsbywhMSksdX1mdW5jdGlvbiBjKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBzKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9hKHQsdCxlLCEwKTpsKHQsZSk7Y2FzZSAzOnJldHVybiBhKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19ZS5leHBvcnRzPWM7dmFyIHUsZj10KCJ0eXBlZGFycmF5LXBvb2wiKSxoPXQoIi4vbGliL3N3ZWVwIiksZD10KCIuL2xpYi9pbnRlcnNlY3QiKX0seyIuL2xpYi9pbnRlcnNlY3QiOjczLCIuL2xpYi9zd2VlcCI6NzcsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ImJydXRlRm9yY2UiKyh0PyJSZWQiOiJCbHVlIikrKGU/IkZsaXAiOiIiKSsocj8iRnVsbCI6IiIpLGk9WyJmdW5jdGlvbiAiLG4sIigiLHcuam9pbigpLCIpeyIsInZhciAiLGMsIj0yKiIsYSwiOyJdLGw9ImZvcih2YXIgaT0iK3UrIiwiK3ArIj0iK2MrIioiK3UrIjtpPCIrZisiOysraSwiK3ArIis9IitjKyIpe3ZhciB4MD0iK2grIlsiK28rIisiK3ArIl0seDE9IitoKyJbIitvKyIrIitwKyIrIithKyJdLHhpPSIrZCsiW2ldOyIsTT0iZm9yKHZhciBqPSIrbSsiLCIrYisiPSIrYysiKiIrbSsiO2o8Iit2KyI7KytqLCIrYisiKz0iK2MrIil7dmFyIHkwPSIrZysiWyIrbysiKyIrYisiXSwiKyhyPyJ5MT0iK2crIlsiK28rIisiK2IrIisiK2ErIl0sIjoiIikrInlpPSIreSsiW2pdOyI7cmV0dXJuIHQ/aS5wdXNoKGwsXywiOiIsTSk6aS5wdXNoKE0sXywiOiIsbCkscj9pLnB1c2goImlmKHkxPHgwfHx4MTx5MCljb250aW51ZTsiKTplP2kucHVzaCgiaWYoeTA8PXgwfHx4MTx5MCljb250aW51ZTsiKTppLnB1c2goImlmKHkwPHgwfHx4MTx5MCljb250aW51ZTsiKSxpLnB1c2goImZvcih2YXIgaz0iK28rIisxO2s8IithKyI7KytrKXt2YXIgcjA9IitoKyJbaysiK3ArIl0scjE9IitoKyJbaysiK2ErIisiK3ArIl0sYjA9IitnKyJbaysiK2IrIl0sYjE9IitnKyJbaysiK2ErIisiK2IrIl07aWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlICIrXysiO312YXIgIit4KyI9IitzKyIoIiksZT9pLnB1c2goInlpLHhpIik6aS5wdXNoKCJ4aSx5aSIpLGkucHVzaCgiKTtpZigiK3grIiE9PXZvaWQgMClyZXR1cm4gIit4KyI7fX19Iikse25hbWU6bixjb2RlOmkuam9pbigiIil9fWZ1bmN0aW9uIGkodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBhPW4oZSxyLHQpO2kucHVzaChhLmNvZGUpLG8ucHVzaCgicmV0dXJuICIrYS5uYW1lKyIoIit3LmpvaW4oKSsiKTsiKX12YXIgcj0iYnJ1dGVGb3JjZSIrKHQ/IkZ1bGwiOiJQYXJ0aWFsIiksaT1bXSxhPXcuc2xpY2UoKTt0fHxhLnNwbGljZSgzLDAsbCk7dmFyIG89WyJmdW5jdGlvbiAiK3IrIigiK2Euam9pbigpKyIpeyJdO28ucHVzaCgiaWYoIitmKyItIit1KyI+Iit2KyItIittKyIpeyIpLHQ/KGUoITAsITEpLG8ucHVzaCgifWVsc2V7IiksZSghMSwhMSkpOihvLnB1c2goImlmKCIrbCsiKXsiKSxlKCEwLCEwKSxvLnB1c2goIn1lbHNleyIpLGUoITAsITEpLG8ucHVzaCgifX1lbHNle2lmKCIrbCsiKXsiKSxlKCExLCEwKSxvLnB1c2goIn1lbHNleyIpLGUoITEsITEpLG8ucHVzaCgifSIpKSxvLnB1c2goIn19cmV0dXJuICIrcik7dmFyIHM9aS5qb2luKCIiKStvLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24ocykoKX12YXIgYT0iZCIsbz0iYXgiLHM9InZ2IixsPSJmcCIsYz0iZXMiLHU9InJzIixmPSJyZSIsaD0icmIiLGQ9InJpIixwPSJycCIsbT0iYnMiLHY9ImJlIixnPSJiYiIseT0iYmkiLGI9ImJwIix4PSJydiIsXz0iUSIsdz1bYSxvLHMsdSxmLGgsZCxtLHYsZyx5XTtyLnBhcnRpYWw9aSghMSksci5mdWxsPWkoITApfSx7fV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPTgqYy5sb2cyKGUrMSkqKHQrMSl8MCxuPWMubmV4dFBvdzIoaypyKTtFLmxlbmd0aDxuJiYobC5mcmVlKEUpLEU9bC5tYWxsb2NJbnQzMihuKSk7dmFyIGk9Yy5uZXh0UG93MihBKnIpO1M8aSYmKGwuZnJlZShTKSxTPWwubWFsbG9jRG91YmxlKGkpKX1mdW5jdGlvbiBpKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1rKnQ7RVtjXT1lLEVbYysxXT1yLEVbYysyXT1uLEVbYyszXT1pLEVbYys0XT1hLEVbYys1XT1vO3ZhciB1PUEqdDtTW3VdPXMsU1t1KzFdPWx9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTIqdCxoPWwqZixkPWNbaCtlXTt0OmZvcih2YXIgcD1pLG09aSpmO3A8YTsrK3AsbSs9Zil7dmFyIHY9b1ttK2VdLGc9b1ttK2UrdF07aWYoIShkPHZ8fGc8ZCkmJighbnx8ZCE9PXYpKXtmb3IodmFyIHk9c1twXSxiPWUrMTtiPHQ7KytiKXt2YXIgdj1vW20rYl0sZz1vW20rYit0XSx4PWNbaCtiXSxfPWNbaCtiK3RdO2lmKGc8eHx8Xzx2KWNvbnRpbnVlIHR9dmFyIHc7aWYodm9pZCAwIT09KHc9bj9yKHUseSk6cih5LHUpKSlyZXR1cm4gd319fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9Mip0LGY9cyp1LGg9bFtmK2VdO3Q6Zm9yKHZhciBkPW4scD1uKnU7ZDxpOysrZCxwKz11KXt2YXIgbT1vW2RdO2lmKG0hPT1jKXt2YXIgdj1hW3ArZV0sZz1hW3ArZSt0XTtpZighKGg8dnx8ZzxoKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXt2YXIgdj1hW3AreV0sZz1hW3AreSt0XSxiPWxbZit5XSx4PWxbZit5K3RdO2lmKGc8Ynx8eDx2KWNvbnRpbnVlIHR9dmFyIF89cihtLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19ZnVuY3Rpb24gcyh0LGUscixzLGwsYyx1LG0sTCl7bih0LHMrdSk7dmFyIEMsST0wLEQ9Mip0O2ZvcihpKEkrKywwLDAscywwLHUscj8xNjowLC0oMS8wKSwxLzApLHJ8fGkoSSsrLDAsMCx1LDAscywxLC0oMS8wKSwxLzApO0k+MDspe0ktPTE7dmFyIFA9SSprLHo9RVtQXSxPPUVbUCsxXSxSPUVbUCsyXSxGPUVbUCszXSxqPUVbUCs0XSxOPUVbUCs1XSxCPUkqQSxVPVNbQl0sVj1TW0IrMV0sSD0xJk4scT0hISgxNiZOKSxHPWwsWT1jLFg9bSxXPUw7aWYoSCYmKEc9bSxZPUwsWD1sLFc9YyksISgyJk4mJihSPV8odCx6LE8sUixHLFksViksTz49Uil8fDQmTiYmKE89dyh0LHosTyxSLEcsWSxVKSk+PVIpKXt2YXIgWj1SLU8sSj1qLUY7aWYocSl7aWYodCpaKihaK0opPHkpe2lmKHZvaWQgMCE9PShDPWQuc2NhbkNvbXBsZXRlKHQseixlLE8sUixHLFksRixqLFgsVykpKXJldHVybiBDO2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oWixKKTx2KXtpZih2b2lkIDAhPT0oQz1mKHQseixlLEgsTyxSLEcsWSxGLGosWCxXKSkpcmV0dXJuIEM7Y29udGludWV9aWYodCpaKko8Zyl7aWYodm9pZCAwIT09KEM9ZC5zY2FuQmlwYXJ0aXRlKHQseixlLEgsTyxSLEcsWSxGLGosWCxXKSkpcmV0dXJuIEM7Y29udGludWV9fXZhciBLPWIodCx6LE8sUixHLFksVSxWKTtpZihPPEspaWYodCooSy1PKTx2KXtpZih2b2lkIDAhPT0oQz1oKHQseisxLGUsTyxLLEcsWSxGLGosWCxXKSkpcmV0dXJuIEN9ZWxzZSBpZih6PT09dC0yKXtpZih2b2lkIDAhPT0oQz1IP2Quc3dlZXBCaXBhcnRpdGUodCxlLEYsaixYLFcsTyxLLEcsWSk6ZC5zd2VlcEJpcGFydGl0ZSh0LGUsTyxLLEcsWSxGLGosWCxXKSkpcmV0dXJuIEN9ZWxzZSBpKEkrKyx6KzEsTyxLLEYsaixILC0oMS8wKSwxLzApLGkoSSsrLHorMSxGLGosTyxLLDFeSCwtKDEvMCksMS8wKTtpZihLPFIpe3ZhciBRPXAodCx6LEYsaixYLFcpLCQ9WFtEKlErel0sdHQ9eCh0LHosUSxqLFgsVywkKTtpZih0dDxqJiZpKEkrKyx6LEssUix0dCxqLCg0fEgpKyhxPzE2OjApLCQsViksRjxRJiZpKEkrKyx6LEssUixGLFEsKDJ8SCkrKHE/MTY6MCksVSwkKSxRKzE9PT10dCl7aWYodm9pZCAwIT09KEM9cT9vKHQseixlLEssUixHLFksUSxYLFdbUV0pOmEodCx6LGUsSCxLLFIsRyxZLFEsWCxXW1FdKSkpcmV0dXJuIEN9ZWxzZSBpZihRPHR0KXt2YXIgZXQ7aWYocSl7aWYoZXQ9TSh0LHosSyxSLEcsWSwkKSxLPGV0KXt2YXIgcnQ9eCh0LHosSyxldCxHLFksJCk7aWYoej09PXQtMil7aWYoSzxydCYmdm9pZCAwIT09KEM9ZC5zd2VlcENvbXBsZXRlKHQsZSxLLHJ0LEcsWSxRLHR0LFgsVykpKXJldHVybiBDO2lmKHJ0PGV0JiZ2b2lkIDAhPT0oQz1kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxydCxldCxHLFksUSx0dCxYLFcpKSlyZXR1cm4gQ31lbHNlIEs8cnQmJmkoSSsrLHorMSxLLHJ0LFEsdHQsMTYsLSgxLzApLDEvMCkscnQ8ZXQmJihpKEkrKyx6KzEscnQsZXQsUSx0dCwwLC0oMS8wKSwxLzApLGkoSSsrLHorMSxRLHR0LHJ0LGV0LDEsLSgxLzApLDEvMCkpfX1lbHNlIGV0PUg/VCh0LHosSyxSLEcsWSwkKTpNKHQseixLLFIsRyxZLCQpLEs8ZXQmJih6PT09dC0yP0M9SD9kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLHR0LFgsVyxLLGV0LEcsWSk6ZC5zd2VlcEJpcGFydGl0ZSh0LGUsSyxldCxHLFksUSx0dCxYLFcpOihpKEkrKyx6KzEsSyxldCxRLHR0LEgsLSgxLzApLDEvMCksaShJKysseisxLFEsdHQsSyxldCwxXkgsLSgxLzApLDEvMCkpKX19fX19ZS5leHBvcnRzPXM7dmFyIGw9dCgidHlwZWRhcnJheS1wb29sIiksYz10KCJiaXQtdHdpZGRsZSIpLHU9dCgiLi9icnV0ZSIpLGY9dS5wYXJ0aWFsLGg9dS5mdWxsLGQ9dCgiLi9zd2VlcCIpLHA9dCgiLi9tZWRpYW4iKSxtPXQoIi4vcGFydGl0aW9uIiksdj0xMjgsZz0xPDwyMix5PTE8PDIyLGI9bSgiIShsbz49cDApJiYhKHAxPj1oaSkiLFsicDAiLCJwMSJdKSx4PW0oImxvPT09cDAiLFsicDAiXSksXz1tKCJsbzxwMCIsWyJwMCJdKSx3PW0oImhpPD1wMCIsWyJwMCJdKSxNPW0oImxvPD1wMCYmcDA8PWhpIixbInAwIl0pLFQ9bSgibG88cDAmJnAwPD1oaSIsWyJwMCJdKSxrPTYsQT0yLEU9bC5tYWxsb2NJbnQzMigxMDI0KSxTPWwubWFsbG9jRG91YmxlKDEwMjQpfSx7Ii4vYnJ1dGUiOjcyLCIuL21lZGlhbiI6NzQsIi4vcGFydGl0aW9uIjo3NSwiLi9zd2VlcCI6NzcsImJpdC10d2lkZGxlIjo2OCwidHlwZWRhcnJheS1wb29sIjo1NDl9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXtmb3IodmFyIG89Mip0LHM9byoocisxKStlLGw9cisxO2w8bjsrK2wscys9bylmb3IodmFyIGM9aVtzXSx1PWwsZj1vKihsLTEpO3U+ciYmaVtmK2VdPmM7LS11LGYtPW8pe2Zvcih2YXIgaD1mLGQ9ZitvLHA9MDtwPG87KytwLCsraCwrK2Qpe3ZhciBtPWlbaF07aVtoXT1pW2RdLGlbZF09bX12YXIgdj1hW3VdO2FbdV09YVt1LTFdLGFbdS0xXT12fX1mdW5jdGlvbiBpKHQsZSxyLGksYSxsKXtpZihpPD1yKzEpcmV0dXJuIHI7Zm9yKHZhciBjPXIsdT1pLGY9aStyPj4+MSxoPTIqdCxkPWYscD1hW2gqZitlXTtjPHU7KXtpZih1LWM8cyl7bih0LGUsYyx1LGEsbCkscD1hW2gqZitlXTticmVha312YXIgbT11LWMsdj1NYXRoLnJhbmRvbSgpKm0rY3wwLGc9YVtoKnYrZV0seT1NYXRoLnJhbmRvbSgpKm0rY3wwLGI9YVtoKnkrZV0seD1NYXRoLnJhbmRvbSgpKm0rY3wwLF89YVtoKngrZV07Zzw9Yj9fPj1iPyhkPXkscD1iKTpnPj1fPyhkPXYscD1nKTooZD14LHA9Xyk6Yj49Xz8oZD15LHA9Yik6Xz49Zz8oZD12LHA9Zyk6KGQ9eCxwPV8pO2Zvcih2YXIgdz1oKih1LTEpLE09aCpkLFQ9MDtUPGg7KytULCsrdywrK00pe3ZhciBrPWFbd107YVt3XT1hW01dLGFbTV09a312YXIgQT1sW3UtMV07bFt1LTFdPWxbZF0sbFtkXT1BLGQ9byh0LGUsYyx1LTEsYSxsLHApO2Zvcih2YXIgdz1oKih1LTEpLE09aCpkLFQ9MDtUPGg7KytULCsrdywrK00pe3ZhciBrPWFbd107YVt3XT1hW01dLGFbTV09a312YXIgQT1sW3UtMV07aWYobFt1LTFdPWxbZF0sbFtkXT1BLGY8ZCl7Zm9yKHU9ZC0xO2M8dSYmYVtoKih1LTEpK2VdPT09cDspdS09MTt1Kz0xfWVsc2V7aWYoIShkPGYpKWJyZWFrO2ZvcihjPWQrMTtjPHUmJmFbaCpjK2VdPT09cDspYys9MX19cmV0dXJuIG8odCxlLHIsZixhLGwsYVtoKmYrZV0pfWUuZXhwb3J0cz1pO3ZhciBhPXQoIi4vcGFydGl0aW9uIiksbz1hKCJsbzxwMCIsWyJwMCJdKSxzPTh9LHsiLi9wYXJ0aXRpb24iOjc1fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPSJhYmNkZWYiLnNwbGl0KCIiKS5jb25jYXQoZSksbj1bXTtyZXR1cm4gdC5pbmRleE9mKCJsbyIpPj0wJiZuLnB1c2goImxvPWVbaytuXSIpLHQuaW5kZXhPZigiaGkiKT49MCYmbi5wdXNoKCJoaT1lW2srb10iKSxyLnB1c2goaS5yZXBsYWNlKCJfIixuLmpvaW4oKSkucmVwbGFjZSgiJCIsdCkpLEZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKX1lLmV4cG9ydHM9bjt2YXIgaT0iZm9yKHZhciBqPTIqYSxrPWoqYyxsPWssbT1jLG49YixvPWErYixwPWM7ZD5wOysrcCxrKz1qKXt2YXIgXztpZigkKWlmKG09PT1wKW0rPTEsbCs9ajtlbHNle2Zvcih2YXIgcz0wO2o+czsrK3Mpe3ZhciB0PWVbaytzXTtlW2src109ZVtsXSxlW2wrK109dH12YXIgdT1mW3BdO2ZbcF09ZlttXSxmW20rK109dX19cmV0dXJuIG0ifSx7fV0sNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U8PTQqaD9pKDAsZS0xLHQpOmYoMCxlLTEsdCl9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTIqKHQrMSksaT10KzE7aTw9ZTsrK2kpe2Zvcih2YXIgYT1yW24rK10sbz1yW24rK10scz1pLGw9bi0yO3MtLSA+dDspe3ZhciBjPXJbbC0yXSx1PXJbbC0xXTtpZihjPGEpYnJlYWs7aWYoYz09PWEmJnU8bylicmVhaztyW2xdPWMscltsKzFdPXUsbC09Mn1yW2xdPWEscltsKzFdPW99fWZ1bmN0aW9uIGEodCxlLHIpe3QqPTIsZSo9Mjt2YXIgbj1yW3RdLGk9clt0KzFdO3JbdF09cltlXSxyW3QrMV09cltlKzFdLHJbZV09bixyW2UrMV09aX1mdW5jdGlvbiBvKHQsZSxyKXt0Kj0yLGUqPTIsclt0XT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gcyh0LGUscixuKXt0Kj0yLGUqPTIscio9Mjt2YXIgaT1uW3RdLGE9blt0KzFdO25bdF09bltlXSxuW3QrMV09bltlKzFdLG5bZV09bltyXSxuW2UrMV09bltyKzFdLG5bcl09aSxuW3IrMV09YX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dCo9MixlKj0yLGlbdF09aVtlXSxpW2VdPXIsaVt0KzFdPWlbZSsxXSxpW2UrMV09bn1mdW5jdGlvbiBjKHQsZSxyKXt0Kj0yLGUqPTI7dmFyIG49clt0XSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dCo9Mjt2YXIgaT1uW3RdO3JldHVybiBpPGV8fGk9PT1lJiZuW3QrMV08cn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj0oZS10KzEpLzZ8MCxkPXQrbixwPWUtbixtPXQrZT4+MSx2PW0tbixnPW0rbix5PWQsYj12LHg9bSxfPWcsdz1wLE09dCsxLFQ9ZS0xLGs9MDtjKHksYixyKSYmKGs9eSx5PWIsYj1rKSxjKF8sdyxyKSYmKGs9XyxfPXcsdz1rKSxjKHkseCxyKSYmKGs9eSx5PXgseD1rKSxjKGIseCxyKSYmKGs9YixiPXgseD1rKSxjKHksXyxyKSYmKGs9eSx5PV8sXz1rKSxjKHgsXyxyKSYmKGs9eCx4PV8sXz1rKSxjKGIsdyxyKSYmKGs9YixiPXcsdz1rKSxjKGIseCxyKSYmKGs9YixiPXgseD1rKSxjKF8sdyxyKSYmKGs9XyxfPXcsdz1rKTtmb3IodmFyIEE9clsyKmJdLEU9clsyKmIrMV0sUz1yWzIqX10sTD1yWzIqXysxXSxDPTIqeSxJPTIqeCxEPTIqdyxQPTIqZCx6PTIqbSxPPTIqcCxSPTA7UjwyOysrUil7dmFyIEY9cltDK1JdLGo9cltJK1JdLE49cltEK1JdO3JbUCtSXT1GLHJbeitSXT1qLHJbTytSXT1OfW8odix0LHIpLG8oZyxlLHIpO2Zvcih2YXIgQj1NO0I8PVQ7KytCKWlmKHUoQixBLEUscikpQiE9PU0mJmEoQixNLHIpLCsrTTtlbHNlIGlmKCF1KEIsUyxMLHIpKWZvcig7Oyl7aWYodShULFMsTCxyKSl7dShULEEsRSxyKT8ocyhCLE0sVCxyKSwrK00sLS1UKTooYShCLFQsciksLS1UKTticmVha31pZigtLVQ8QilicmVha31sKHQsTS0xLEEsRSxyKSxsKGUsVCsxLFMsTCxyKSxNLTItdDw9aD9pKHQsTS0yLHIpOmYodCxNLTIsciksZS0oVCsyKTw9aD9pKFQrMixlLHIpOmYoVCsyLGUsciksVC1NPD1oP2koTSxULHIpOmYoTSxULHIpfWUuZXhwb3J0cz1uO3ZhciBoPTMyfSx7fV0sNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1mLm5leHRQb3cyKHQpO3AubGVuZ3RoPGUmJih1LmZyZWUocCkscD11Lm1hbGxvY0ludDMyKGUpKSxtLmxlbmd0aDxlJiYodS5mcmVlKG0pLG09dS5tYWxsb2NJbnQzMihlKSksdi5sZW5ndGg8ZSYmKHUuZnJlZSh2KSx2PXUubWFsbG9jSW50MzIoZSkpLGcubGVuZ3RoPGUmJih1LmZyZWUoZyksZz11Lm1hbGxvY0ludDMyKGUpKSx5Lmxlbmd0aDxlJiYodS5mcmVlKHkpLHk9dS5tYWxsb2NJbnQzMihlKSksYi5sZW5ndGg8ZSYmKHUuZnJlZShiKSxiPXUubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTt4Lmxlbmd0aDxyJiYodS5mcmVlKHgpLHg9dS5tYWxsb2NEb3VibGUocikpfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ZVtuXSxhPXRbci0xXTt0W2ldPWEsZVthXT1pfWZ1bmN0aW9uIGEodCxlLHIsbil7dFtyXT1uLGVbbl09cn1mdW5jdGlvbiBvKHQsZSxyLG4sbyxzLGwsYyx1LGYpe2Zvcih2YXIgeT0wLGI9Mip0LF89dC0xLHc9Yi0xLE09cjtNPG47KytNKXt2YXIgVD1zW01dLGs9YipNO3hbeSsrXT1vW2srX10seFt5KytdPS0oVCsxKSx4W3krK109b1trK3ddLHhbeSsrXT1UfWZvcih2YXIgTT1sO008YzsrK00pe3ZhciBUPWZbTV0rZCxBPWIqTTt4W3krK109dVtBK19dLHhbeSsrXT0tVCx4W3krK109dVtBK3ddLHhbeSsrXT1UfXZhciBFPXk+Pj4xO2goeCxFKTtmb3IodmFyIFM9MCxMPTAsTT0wO008RTsrK00pe3ZhciBDPTB8eFsyKk0rMV07aWYoQz49ZClDPUMtZHwwLGkodixnLEwtLSxDKTtlbHNlIGlmKEM+PTApaShwLG0sUy0tLEMpO2Vsc2UgaWYoQzw9LWQpe0M9LUMtZHwwO2Zvcih2YXIgST0wO0k8UzsrK0kpe3ZhciBEPWUocFtJXSxDKTtpZih2b2lkIDAhPT1EKXJldHVybiBEfWEodixnLEwrKyxDKX1lbHNle0M9LUMtMXwwO2Zvcih2YXIgST0wO0k8TDsrK0kpe3ZhciBEPWUoQyx2W0ldKTtpZih2b2lkIDAhPT1EKXJldHVybiBEfWEocCxtLFMrKyxDKX19fWZ1bmN0aW9uIHModCxlLHIsbixvLHMsbCxjLHUsZil7Zm9yKHZhciBkPTAsXz0yKnQsdz10LTEsTT1fLTEsVD1yO1Q8bjsrK1Qpe3ZhciBrPXNbVF0rMTw8MSxBPV8qVDt4W2QrK109b1tBK3ddLHhbZCsrXT0tayx4W2QrK109b1tBK01dLHhbZCsrXT1rfWZvcih2YXIgVD1sO1Q8YzsrK1Qpe3ZhciBrPWZbVF0rMTw8MSxFPV8qVDt4W2QrK109dVtFK3ddLHhbZCsrXT0xfC1rLHhbZCsrXT11W0UrTV0seFtkKytdPTF8a312YXIgUz1kPj4+MTtoKHgsUyk7Zm9yKHZhciBMPTAsQz0wLEk9MCxUPTA7VDxTOysrVCl7dmFyIEQ9MHx4WzIqVCsxXSxQPTEmRDtpZihUPFMtMSYmRD4+MT09eFsyKlQrM10+PjEmJihQPTIsVCs9MSksRDwwKXtmb3IodmFyIHo9LShEPj4xKS0xLE89MDtPPEk7KytPKXt2YXIgUj1lKHlbT10seik7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09UClmb3IodmFyIE89MDtPPEw7KytPKXt2YXIgUj1lKHBbT10seik7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09UClmb3IodmFyIE89MDtPPEM7KytPKXt2YXIgUj1lKHZbT10seik7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09UD9hKHAsbSxMKysseik6MT09PVA/YSh2LGcsQysrLHopOjI9PT1QJiZhKHksYixJKysseil9ZWxzZXt2YXIgej0oRD4+MSktMTswPT09UD9pKHAsbSxMLS0seik6MT09PVA/aSh2LGcsQy0tLHopOjI9PT1QJiZpKHksYixJLS0seil9fX1mdW5jdGlvbiBsKHQsZSxyLG4sbyxzLGwsYyx1LGYsdixnKXt2YXIgeT0wLGI9Mip0LF89ZSx3PWUrdCxNPTEsVD0xO24/VD1kOk09ZDtmb3IodmFyIGs9bztrPHM7KytrKXt2YXIgQT1rK00sRT1iKms7eFt5KytdPWxbRStfXSx4W3krK109LUEseFt5KytdPWxbRSt3XSx4W3krK109QX1mb3IodmFyIGs9dTtrPGY7KytrKXt2YXIgQT1rK1QsUz1iKms7eFt5KytdPXZbUytfXSx4W3krK109LUF9dmFyIEw9eT4+PjE7aCh4LEwpO2Zvcih2YXIgQz0wLGs9MDtrPEw7KytrKXt2YXIgST0wfHhbMiprKzFdO2lmKEk8MCl7dmFyIEE9LUksRD0hMTtpZihBPj1kPyhEPSFuLEEtPWQpOihEPSEhbixBLT0xKSxEKWEocCxtLEMrKyxBKTtlbHNle3ZhciBQPWdbQV0sej1iKkEsTz12W3orZSsxXSxSPXZbeitlKzErdF07dDpmb3IodmFyIEY9MDtGPEM7KytGKXt2YXIgaj1wW0ZdLE49YipqO2lmKCEoUjxsW04rZSsxXXx8bFtOK2UrMSt0XTxPKSl7Zm9yKHZhciBCPWUrMjtCPHQ7KytCKWlmKHZbeitCK3RdPGxbTitCXXx8bFtOK0IrdF08dlt6K0JdKWNvbnRpbnVlIHQ7dmFyIFUsVj1jW2pdO2lmKHZvaWQgMCE9PShVPW4/cihQLFYpOnIoVixQKSkpcmV0dXJuIFV9fX19ZWxzZSBpKHAsbSxDLS0sSS1NKX19ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0wLG09Mip0LHY9ZSxnPWUrdCx5PW47eTxpOysreSl7dmFyIGI9eStkLF89bSp5O3hbZisrXT1hW18rdl0seFtmKytdPS1iLHhbZisrXT1hW18rZ10seFtmKytdPWJ9Zm9yKHZhciB5PXM7eTxsOysreSl7dmFyIGI9eSsxLHc9bSp5O3hbZisrXT1jW3crdl0seFtmKytdPS1ifXZhciBNPWY+Pj4xO2goeCxNKTtmb3IodmFyIFQ9MCx5PTA7eTxNOysreSl7dmFyIGs9MHx4WzIqeSsxXTtpZihrPDApe3ZhciBiPS1rO2lmKGI+PWQpcFtUKytdPWItZDtlbHNle2ItPTE7dmFyIEE9dVtiXSxFPW0qYixTPWNbRStlKzFdLEw9Y1tFK2UrMSt0XTt0OmZvcih2YXIgQz0wO0M8VDsrK0Mpe3ZhciBJPXBbQ10sRD1vW0ldO2lmKEQ9PT1BKWJyZWFrO3ZhciBQPW0qSTtpZighKEw8YVtQK2UrMV18fGFbUCtlKzErdF08Uykpe2Zvcih2YXIgej1lKzI7ejx0OysreilpZihjW0Ureit0XTxhW1Arel18fGFbUCt6K3RdPGNbRSt6XSljb250aW51ZSB0O3ZhciBPPXIoRCxBKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfX19fWVsc2V7Zm9yKHZhciBiPWstZCxDPVQtMTtDPj0wOy0tQylpZihwW0NdPT09Yil7Zm9yKHZhciB6PUMrMTt6PFQ7Kyt6KXBbei0xXT1wW3pdO2JyZWFrfS0tVH19fWUuZXhwb3J0cz17aW5pdDpuLHN3ZWVwQmlwYXJ0aXRlOm8sc3dlZXBDb21wbGV0ZTpzLHNjYW5CaXBhcnRpdGU6bCxzY2FuQ29tcGxldGU6Y307dmFyIHU9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCJiaXQtdHdpZGRsZSIpLGg9dCgiLi9zb3J0IiksZD0xPDwyOCxwPXUubWFsbG9jSW50MzIoMTAyNCksbT11Lm1hbGxvY0ludDMyKDEwMjQpLHY9dS5tYWxsb2NJbnQzMigxMDI0KSxnPXUubWFsbG9jSW50MzIoMTAyNCkseT11Lm1hbGxvY0ludDMyKDEwMjQpLGI9dS5tYWxsb2NJbnQzMigxMDI0KSx4PXUubWFsbG9jRG91YmxlKDgxOTIpfSx7Ii4vc29ydCI6NzYsImJpdC10d2lkZGxlIjo2OCwidHlwZWRhcnJheS1wb29sIjo1NDl9XSw3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQ+Wil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189aS5wcm90b3R5cGUsZX1mdW5jdGlvbiBpKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodCl9cmV0dXJuIGEodCxlLHIpfWZ1bmN0aW9uIGEodCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mKHQsZSxyKToic3RyaW5nIj09dHlwZW9mIHQ/Yyh0LGUpOmgodCl9ZnVuY3Rpb24gbyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBvKHQpLHQ8PTA/bih0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uKHQpLmZpbGwoZSxyKTpuKHQpLmZpbGwoZSk6bih0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBvKHQpLG4odDwwPzA6MHxkKHQpKX1mdW5jdGlvbiBjKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWV8fChlPSJ1dGY4IiksIWkuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfG0odCxlKSxhPW4ociksbz1hLndyaXRlKHQsZSk7cmV0dXJuIG8hPT1yJiYoYT1hLnNsaWNlKDAsbykpLGF9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8ZCh0Lmxlbmd0aCkscj1uKGUpLGk9MDtpPGU7aSs9MSlyW2ldPTI1NSZ0W2ldO3JldHVybiByfWZ1bmN0aW9uIGYodCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt2YXIgbjtyZXR1cm4gbj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUsciksbi5fX3Byb3RvX189aS5wcm90b3R5cGUsbn1mdW5jdGlvbiBoKHQpe2lmKGkuaXNCdWZmZXIodCkpe3ZhciBlPTB8ZCh0Lmxlbmd0aCkscj1uKGUpO3JldHVybiAwPT09ci5sZW5ndGg/cjoodC5jb3B5KHIsMCwwLGUpLHIpfWlmKHQpe2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fFkodC5sZW5ndGgpP24oMCk6dSh0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmQXJyYXkuaXNBcnJheSh0LmRhdGEpKXJldHVybiB1KHQuZGF0YSl9dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfWZ1bmN0aW9uIGQodCl7aWYodD49Wil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrWi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gcCh0KXtyZXR1cm4rdCE9dCYmKHQ9MCksaS5hbGxvYygrdCl9ZnVuY3Rpb24gbSh0LGUpe2lmKGkuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiB0LmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiB0JiYodD0iIit0KTt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2goZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBVKHQpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcSh0KS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBVKHQpLmxlbmd0aDtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYocj4+Pj0wLGU+Pj49MCxyPD1lKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gSSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIEwodGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEModGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQSh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBEKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiB5KHQsZSxyLG4sYSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9YT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGEpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighYSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1pLmZyb20oZSxuKSksaS5pc0J1ZmZlcihlKSlyZXR1cm4gMD09PWUubGVuZ3RoPy0xOmIodCxlLHIsbixhKTtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9hP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6Yih0LFtlXSxyLG4sYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gYih0LGUscixuLGkpe2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfXZhciBvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfXZhciBjO2lmKGkpe3ZhciB1PS0xO2ZvcihjPXI7YzxzO2MrKylpZihhKHQsYyk9PT1hKGUsdT09PS0xPzA6Yy11KSl7aWYodT09PS0xJiYodT1jKSxjLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlIHUhPT0tMSYmKGMtPWMtdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxjPXI7Yz49MDtjLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihhKHQsYytoKSE9PWEoZSxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBjfXJldHVybi0xfWZ1bmN0aW9uIHgodCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO2lmKGElMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIEcoVShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB3KHQsZSxyLG4pe3JldHVybiBHKFYoZSksdCxyLG4pfWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuIHcodCxlLHIsbil9ZnVuY3Rpb24gVCh0LGUscixuKXtyZXR1cm4gRyhxKGUpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBHKEgoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gQSh0LGUscil7cmV0dXJuIDA9PT1lJiZyPT09dC5sZW5ndGg/WC5mcm9tQnl0ZUFycmF5KHQpOlguZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIEUodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgYT10W2ldLG89bnVsbCxzPWE+MjM5PzQ6YT4yMjM/MzphPjE5MT8yOjE7aWYoaStzPD1yKXt2YXIgbCxjLHUsZjtzd2l0Y2gocyl7Y2FzZSAxOmE8MTI4JiYobz1hKTticmVhaztjYXNlIDI6bD10W2krMV0sMTI4PT0oMTkyJmwpJiYoZj0oMzEmYSk8PDZ8NjMmbCk+MTI3JiYobz1mKTticmVhaztjYXNlIDM6bD10W2krMV0sYz10W2krMl0sMTI4PT0oMTkyJmwpJiYxMjg9PSgxOTImYykmJihmPSgxNSZhKTw8MTJ8KDYzJmwpPDw2fDYzJmMpPjIwNDcmJihmPDU1Mjk2fHxmPjU3MzQzKSYmKG89Zik7YnJlYWs7Y2FzZSA0Omw9dFtpKzFdLGM9dFtpKzJdLHU9dFtpKzNdLDEyOD09KDE5MiZsKSYmMTI4PT0oMTkyJmMpJiYxMjg9PSgxOTImdSkmJihmPSgxNSZhKTw8MTh8KDYzJmwpPDwxMnwoNjMmYyk8PDZ8NjMmdSk+NjU1MzUmJmY8MTExNDExMiYmKG89Zil9fW51bGw9PT1vPyhvPTY1NTMzLHM9MSk6bz42NTUzNSYmKG8tPTY1NTM2LG4ucHVzaChvPj4+MTAmMTAyM3w1NTI5Niksbz01NjMyMHwxMDIzJm8pLG4ucHVzaChvKSxpKz1zfXJldHVybiBTKG4pfWZ1bmN0aW9uIFModCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9SilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7Zm9yKHZhciByPSIiLG49MDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz1KKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz1CKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIEQodCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBQKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiB6KHQsZSxyLG4sYSxvKXtpZighaS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoZT5hfHxlPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTyh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFIodCxlLHIsbixpKXtyZXR1cm4gZT0rZSxyPj4+PTAsaXx8Tyh0LGUsciw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxXLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIEYodCxlLHIsbixpKXtyZXR1cm4gZT0rZSxyPj4+PTAsaXx8Tyh0LGUsciw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFcud3JpdGUodCxlLHIsbiw1Miw4KSxyKzh9ZnVuY3Rpb24gaih0KXtpZih0PU4odCkucmVwbGFjZShLLCIiKSx0Lmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBCKHQpe3JldHVybiB0PDE2PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBVKHQsZSl7ZT1lfHwxLzA7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1udWxsLGE9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7YS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhazthLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7YS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIFYodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gcSh0KXtyZXR1cm4gWC50b0J5dGVBcnJheShqKHQpKX1mdW5jdGlvbiBHKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIFkodCl7cmV0dXJuIHQhPT10fXZhciBYPXQoImJhc2U2NC1qcyIpLFc9dCgiaWVlZTc1NCIpO3IuQnVmZmVyPWksci5TbG93QnVmZmVyPXAsci5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgWj0yMTQ3NDgzNjQ3O3Iua01heExlbmd0aD1aLGkuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGkuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZpW1N5bWJvbC5zcGVjaWVzXT09PWkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksaS5wb29sU2l6ZT04MTkyLGkuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGEodCxlLHIpfSxpLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsaS5fX3Byb3RvX189VWludDhBcnJheSxpLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcyh0LGUscil9LGkuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGkuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxpLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiZ0Ll9pc0J1ZmZlcj09PSEwfSxpLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZighaS5pc0J1ZmZlcih0KXx8IWkuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGE9MCxvPU1hdGgubWluKHIsbik7YTxvOysrYSlpZih0W2FdIT09ZVthXSl7cj10W2FdLG49ZVthXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LGkuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0saS5jb25jYXQ9ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBpLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49aS5hbGxvY1Vuc2FmZShlKSxhPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG89dFtyXTtpZighaS5pc0J1ZmZlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4sYSksYSs9by5sZW5ndGh9cmV0dXJuIG59LGkuYnl0ZUxlbmd0aD1tLGkucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxpLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZyh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KWcodGhpcyxlLGUrMyksZyh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZyh0aGlzLGUsZSs3KSxnKHRoaXMsZSsxLGUrNiksZyh0aGlzLGUrMixlKzUpLGcodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/RSh0aGlzLDAsdCk6di5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighaS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10fHwwPT09aS5jb21wYXJlKHRoaXMsdCl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD0iIixlPXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJih0PXRoaXMudG9TdHJpbmcoImhleCIsMCxlKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+ZSYmKHQrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK3QrIj4ifSxpLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoIWkuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPXQ/dC5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09YSYmKGE9dGhpcy5sZW5ndGgpLGU8MHx8cj50Lmxlbmd0aHx8bjwwfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1hJiZlPj1yKXJldHVybiAwO2lmKG4+PWEpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZihlPj4+PTAscj4+Pj0wLG4+Pj49MCxhPj4+PTAsdGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPWEtbixzPXItZSxsPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKG4sYSksdT10LnNsaWNlKGUsciksZj0wO2Y8bDsrK2YpaWYoY1tmXSE9PXVbZl0pe289Y1tmXSxzPXVbZl07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxpLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW5kZXhPZih0LGUscikhPT0tMX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHkodGhpcyx0LGUsciwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geSh0aGlzLHQsZSxyLCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIF8odGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHcodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gTSh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIFQodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBrKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEo9NDA5NjtpLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3Q9fn50LGU9dm9pZCAwPT09ZT9yOn5+ZSx0PDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksZTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1pLnByb3RvdHlwZSxufSxpLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fFAodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LGkucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8UCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0saS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxQKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0saS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxQKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LGkucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8UCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxpLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxpLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxpLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8UCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gaSo9MTI4LG4+PWkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LGkucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxQKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gaSo9MTI4LGE+PWkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxQKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/KDI1NS10aGlzW3RdKzEpKi0xOnRoaXNbdF19LGkucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fFAodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0saS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8UCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8UCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0saS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LGkucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxQKHQsNCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw0LHRoaXMubGVuZ3RoKSxXLnJlYWQodGhpcyx0LCExLDIzLDQpfSxpLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw4LHRoaXMubGVuZ3RoKSxXLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxpLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fFAodCw4LHRoaXMubGVuZ3RoKSxXLnJlYWQodGhpcyx0LCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCxyPj4+PTAsIW4pe3oodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKX12YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LGkucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLHI+Pj49MCwhbil7eih0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKS0xLDApfXZhciBpPXItMSxhPTEKO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0saS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGkucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0saS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGkucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxpLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGkucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGkucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0saS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMCxyKX0saS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMSxyKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEYodGhpcyx0LGUsITAscil9LGkucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBGKHRoaXMsdCxlLCExLHIpfSxpLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGksYT1uLXI7aWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcihpPWEtMTtpPj0wOy0taSl0W2krZV09dGhpc1tpK3JdO2Vsc2UgaWYoYTwxZTMpZm9yKGk9MDtpPGE7KytpKXRbaStlXT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixyK2EpLGUpO3JldHVybiBhfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09dC5sZW5ndGgpe3ZhciBhPXQuY2hhckNvZGVBdCgwKTthPDI1NiYmKHQ9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiB0JiYodCY9MjU1KTtpZihlPDB8fHRoaXMubGVuZ3RoPGV8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7ZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKTt2YXIgbztpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKG89ZTtvPHI7KytvKXRoaXNbb109dDtlbHNle3ZhciBzPWkuaXNCdWZmZXIodCk/dDpuZXcgaSh0LG4pLGw9cy5sZW5ndGg7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIEs9L1teK1wvMC05QS1aYS16LV9dL2d9LHsiYmFzZTY0LWpzIjo1MCxpZWVlNzU0OjI5NX1dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KGkpfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWZ1bmN0aW9uIHModCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIG49ISFvKHIsImRlbGF1bmF5IiwhMCksaT0hIW8ociwiaW50ZXJpb3IiLCEwKSxzPSEhbyhyLCJleHRlcmlvciIsITApLGg9ISFvKHIsImluZmluaXR5IiwhMSk7aWYoIWkmJiFzfHwwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGQ9bCh0LGUpO2lmKG58fGkhPT1zfHxoKXtmb3IodmFyIHA9Yyh0Lmxlbmd0aCxhKGUpKSxtPTA7bTxkLmxlbmd0aDsrK20pe3ZhciB2PWRbbV07cC5hZGRUcmlhbmdsZSh2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIG4mJnUodCxwKSxzP2k/aD9mKHAsMCxoKTpwLmNlbGxzKCk6ZihwLDEsaCk6ZihwLC0xKX1yZXR1cm4gZH12YXIgbD10KCIuL2xpYi9tb25vdG9uZSIpLGM9dCgiLi9saWIvdHJpYW5ndWxhdGlvbiIpLHU9dCgiLi9saWIvZGVsYXVuYXkiKSxmPXQoIi4vbGliL2ZpbHRlciIpO2UuZXhwb3J0cz1zfSx7Ii4vbGliL2RlbGF1bmF5Ijo4MCwiLi9saWIvZmlsdGVyIjo4MSwiLi9saWIvbW9ub3RvbmUiOjgyLCIuL2xpYi90cmlhbmd1bGF0aW9uIjo4M31dLDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLG8pe3ZhciBzPWUub3Bwb3NpdGUobixpKTtpZighKHM8MCkpe2lmKGk8bil7dmFyIGw9bjtuPWksaT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KG4saSl8fGEodFtuXSx0W2ldLHRbb10sdFtzXSk8MCYmci5wdXNoKG4saSl9fWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10saT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8aTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7dmFyIHU9bFtjXTtpZighKHU8cykmJiFlLmlzQ29uc3RyYWludChzLHUpKXtmb3IodmFyIGY9bFtjLTFdLGg9LTEsZD0xO2Q8bC5sZW5ndGg7ZCs9MilpZihsW2QtMV09PT11KXtoPWxbZF07YnJlYWt9aDwwfHxhKHRbc10sdFt1XSx0W2ZdLHRbaF0pPDAmJnIucHVzaChzLHUpfX1mb3IoO3IubGVuZ3RoPjA7KXtmb3IodmFyIHU9ci5wb3AoKSxzPXIucG9wKCksZj0tMSxoPS0xLGw9b1tzXSxwPTE7cDxsLmxlbmd0aDtwKz0yKXt2YXIgbT1sW3AtMV0sdj1sW3BdO209PT11P2g9djp2PT09dSYmKGY9bSl9ZjwwfHxoPDB8fChhKHRbc10sdFt1XSx0W2ZdLHRbaF0pPj0wfHwoZS5mbGlwKHMsdSksbih0LGUscixmLHMsaCksbih0LGUscixzLGgsZiksbih0LGUscixoLHUsZiksbih0LGUscix1LGYsaCkpKX19dmFyIGE9dCgicm9idXN0LWluLXNwaGVyZSIpWzRdO3QoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPWl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjg0LCJyb2J1c3QtaW4tc3BoZXJlIjo1MTV9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8pe3RoaXMuY2VsbHM9dCx0aGlzLm5laWdoYm9yPWUsdGhpcy5mbGFncz1uLHRoaXMuY29uc3RyYWludD1yLHRoaXMuYWN0aXZlPWksdGhpcy5uZXh0PWEsdGhpcy5ib3VuZGFyeT1vfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV18fHRbMl0tZVsyXX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPXQuY2VsbHMoKSxhPXIubGVuZ3RoLG89MDtvPGE7KytvKXt2YXIgcz1yW29dLGw9c1swXSxjPXNbMV0sdT1zWzJdO2M8dT9jPGwmJihzWzBdPWMsc1sxXT11LHNbMl09bCk6dTxsJiYoc1swXT11LHNbMV09bCxzWzJdPWMpfXIuc29ydChpKTtmb3IodmFyIGY9bmV3IEFycmF5KGEpLG89MDtvPGYubGVuZ3RoOysrbylmW29dPTA7dmFyIGg9W10sZD1bXSxwPW5ldyBBcnJheSgzKmEpLG09bmV3IEFycmF5KDMqYSksdj1udWxsO2UmJih2PVtdKTtmb3IodmFyIGc9bmV3IG4ocixwLG0sZixoLGQsdiksbz0wO288YTsrK28pZm9yKHZhciBzPXJbb10seT0wO3k8MzsrK3kpe3ZhciBsPXNbeV0sYz1zWyh5KzEpJTNdLGI9cFszKm8reV09Zy5sb2NhdGUoYyxsLHQub3Bwb3NpdGUoYyxsKSkseD1tWzMqbyt5XT10LmlzQ29uc3RyYWludChsLGMpO2I8MCYmKHg/ZC5wdXNoKG8pOihoLnB1c2gobyksZltvXT0xKSxlJiZ2LnB1c2goW2MsbCwtMV0pKX1yZXR1cm4gZ31mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1hKHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxscztmb3IodmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsZj1uLmNvbnN0cmFpbnQsaD1uLm5laWdoYm9yO3MubGVuZ3RoPjB8fGwubGVuZ3RoPjA7KXtmb3IoO3MubGVuZ3RoPjA7KXt2YXIgZD1zLnBvcCgpO2lmKGNbZF0hPT0taSl7Y1tkXT1pO2Zvcih2YXIgcD0odVtkXSwwKTtwPDM7KytwKXt2YXIgbT1oWzMqZCtwXTttPj0wJiYwPT09Y1ttXSYmKGZbMypkK3BdP2wucHVzaChtKToocy5wdXNoKG0pLGNbbV09aSkpfX19dmFyIHY9bDtsPXMscz12LGwubGVuZ3RoPTAsaT0taX12YXIgZz1vKHUsYyxlKTtyZXR1cm4gcj9nLmNvbmNhdChuLmJvdW5kYXJ5KTpnfXZhciBsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPXMsbi5wcm90b3R5cGUubG9jYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMCwwXTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBhPWUsbz1yLHM9bjtyZXR1cm4gcjxuP3I8ZSYmKGE9cixvPW4scz1lKTpuPGUmJihhPW4sbz1lLHM9ciksYTwwPy0xOih0WzBdPWEsdFsxXT1vLHRbMl09cyxsLmVxKHRoaXMuY2VsbHMsdCxpKSl9fSgpfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4NH1dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmlkeD1yLHRoaXMubG93ZXJJZHM9bix0aGlzLnVwcGVySWRzPWl9ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLnR5cGU9cix0aGlzLmlkeD1ufWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmFbMF0tZS5hWzBdfHx0LmFbMV0tZS5hWzFdfHx0LnR5cGUtZS50eXBlO3JldHVybiByP3I6dC50eXBlIT09cCYmKHI9ZCh0LmEsdC5iLGUuYikpP3I6dC5pZHgtZS5pZHh9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBkKHQuYSx0LmIsZSl9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcih2YXIgYT1oLmx0KGUsbixvKSxzPWguZ3QoZSxuLG8pLGw9YTtsPHM7KytsKXtmb3IodmFyIGM9ZVtsXSx1PWMubG93ZXJJZHMsZj11Lmxlbmd0aDtmPjEmJmQoclt1W2YtMl1dLHJbdVtmLTFdXSxuKT4wOyl0LnB1c2goW3VbZi0xXSx1W2YtMl0saV0pLGYtPTE7dS5sZW5ndGg9Zix1LnB1c2goaSk7Zm9yKHZhciBwPWMudXBwZXJJZHMsZj1wLmxlbmd0aDtmPjEmJmQocltwW2YtMl1dLHJbcFtmLTFdXSxuKTwwOyl0LnB1c2goW3BbZi0yXSxwW2YtMV0saV0pLGYtPTE7cC5sZW5ndGg9ZixwLnB1c2goaSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2QodC5hLHQuYixlLmEpOmQoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/ZCh0LmEsdC5iLGUuYik6ZChlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgaT1oLmxlKHQscixsKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbihyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49ci5hO3IuYT1yLmIsci5iPW47dmFyIGk9aC5lcSh0LHIsbCksYT10W2ldO3RbaS0xXS51cHBlcklkcz1hLnVwcGVySWRzLHQuc3BsaWNlKGksMSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUubGVuZ3RoLGw9W10sZj0wO2Y8cjsrK2YpbC5wdXNoKG5ldyBpKHRbZl0sbnVsbCxwLGYpKTtmb3IodmFyIGY9MDtmPG87KytmKXt2YXIgaD1lW2ZdLGQ9dFtoWzBdXSxnPXRbaFsxXV07ZFswXTxnWzBdP2wucHVzaChuZXcgaShkLGcsdixmKSxuZXcgaShnLGQsbSxmKSk6ZFswXT5nWzBdJiZsLnB1c2gobmV3IGkoZyxkLHYsZiksbmV3IGkoZCxnLG0sZikpfWwuc29ydChhKTtmb3IodmFyIHk9bFswXS5hWzBdLSgxK01hdGguYWJzKGxbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxiPVtuZXcgbihbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLHg9W10sZj0wLF89bC5sZW5ndGg7ZjxfOysrZil7dmFyIHc9bFtmXSxNPXcudHlwZTtNPT09cD9zKHgsYix0LHcuYSx3LmlkeCk6TT09PXY/YyhiLHQsdyk6dShiLHQsdyl9cmV0dXJuIHh9dmFyIGg9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxkPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdLHA9MCxtPTEsdj0yO2UuZXhwb3J0cz1mfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4NCwicm9idXN0LW9yaWVudGF0aW9uIjo1MTd9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MSxpPXQubGVuZ3RoO248aTtuKz0yKWlmKHRbbi0xXT09PWUmJnRbbl09PT1yKXJldHVybiB0W24tMV09dFtpLTJdLHRbbl09dFtpLTFdLHZvaWQodC5sZW5ndGg9aS0yKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxpPTA7aTx0OysraSlyW2ldPVtdO3JldHVybiBuZXcgbihyLGUpfXZhciBvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPWE7dmFyIHM9bi5wcm90b3R5cGU7cy5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXZhciBlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBlWzBdPU1hdGgubWluKHIsbiksZVsxXT1NYXRoLm1heChyLG4pLG8uZXEodGhpcy5lZGdlcyxlLHQpPj0wfX0oKSxzLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO2koblt0XSxlLHIpLGkobltlXSxyLHQpLGkobltyXSx0LGUpfSxzLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxzLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0scy5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxzLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0scy5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjg0fV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSw4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyKz10W2ldKmVbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTt2YXIgcj0odFswXS5sZW5ndGgsbyhbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSksaT1vKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBhPTA7YTxlOysrYSl7Zm9yKHZhciBsPTA7bDw9YTsrK2wpcltsXVthXT1yW2FdW2xdPTIqbih0W2FdLHRbbF0pO2lbYV09bih0W2FdLHRbYV0pfWZvcih2YXIgYz1zKHIsaSksdT0wLGY9Y1tlKzFdLGE9MDthPGYubGVuZ3RoOysrYSl1Kz1mW2FdO2Zvcih2YXIgaD1uZXcgQXJyYXkoZSksYT0wO2E8ZTsrK2Epe2Zvcih2YXIgZj1jW2FdLGQ9MCxsPTA7bDxmLmxlbmd0aDsrK2wpZCs9ZltsXTtoW2FdPWQvdX1yZXR1cm4gaH1mdW5jdGlvbiBhKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1vKFtlXSksbj1pKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qblthXTtyZXR1cm4gcn12YXIgbz10KCJkdXAiKSxzPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTthLmJhcnljZW5ldHJpYz1pLGUuZXhwb3J0cz1hfSx7ZHVwOjEyNSwicm9idXN0LWxpbmVhci1zb2x2ZSI6NTE2fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImNpcmN1bWNlbnRlciIpfSx7Y2lyY3VtY2VudGVyOjg2fV0sODg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH1lLmV4cG9ydHM9bn0se31dLDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9eCh0KSxyPWIoeShlKSx0KTtyZXR1cm4gcjwwP1tlLHcoZSwxLzApXTpyPjA/W3coZSwtKDEvMCkpLGVdOltlLGVdfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWVbbl0sYT10W2lbMF1dLG89dFtpWzFdXTtyW25dPVtNYXRoLm1pbihhWzBdLG9bMF0pLE1hdGgubWluKGFbMV0sb1sxXSksTWF0aC5tYXgoYVswXSxvWzBdKSxNYXRoLm1heChhWzFdLG9bMV0pXX1yZXR1cm4gcn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtlW3JdPVtuWzBdLG5bMV0sblswXSxuWzFdXX1yZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdihyLGZ1bmN0aW9uKHIsaSl7dmFyIGE9ZVtyXSxvPWVbaV07aWYoYVswXSE9PW9bMF0mJmFbMF0hPT1vWzFdJiZhWzFdIT09b1swXSYmYVsxXSE9PW9bMV0pe3ZhciBzPXRbYVswXV0sbD10W2FbMV1dLGM9dFtvWzBdXSx1PXRbb1sxXV07ZyhzLGwsYyx1KSYmbi5wdXNoKFtyLGldKX19KSxufWZ1bmN0aW9uIHModCxlLHIsbil7dmFyIGk9W107cmV0dXJuIHYocixuLGZ1bmN0aW9uKHIsbil7dmFyIGE9ZVtyXTtpZihhWzBdIT09biYmYVsxXSE9PW4pe3ZhciBvPXRbbl0scz10W2FbMF1dLGw9dFthWzFdXTtnKHMsbCxvLG8pJiZpLnB1c2goW3Isbl0pfX0pLGl9ZnVuY3Rpb24gbCh0LGUscixuLGkpe2Z1bmN0aW9uIGEoZSl7aWYoZT49dC5sZW5ndGgpcmV0dXJuIG9bZS10Lmxlbmd0aF07dmFyIHI9dFtlXTtyZXR1cm5beShyWzBdKSx5KHJbMV0pXX1mb3IodmFyIG89W10scz0wO3M8ci5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLGM9bFswXSx1PWxbMV0sZj1lW2NdLGg9ZVt1XSxkPU0oXyh0W2ZbMF1dKSxfKHRbZlsxXV0pLF8odFtoWzBdXSksXyh0W2hbMV1dKSk7aWYoZCl7dmFyIHA9by5sZW5ndGgrdC5sZW5ndGg7by5wdXNoKGQpLG4ucHVzaChbYyxwXSxbdSxwXSl9fW4uc29ydChmdW5jdGlvbih0LGUpe2lmKHRbMF0hPT1lWzBdKXJldHVybiB0WzBdLWVbMF07dmFyIHI9YSh0WzFdKSxuPWEoZVsxXSk7cmV0dXJuIGIoclswXSxuWzBdKXx8YihyWzFdLG5bMV0pfSk7Zm9yKHZhciBzPW4ubGVuZ3RoLTE7cz49MDstLXMpe3ZhciBtPW5bc10sYz1tWzBdLHY9ZVtjXSxnPXZbMF0seD12WzFdLHc9dFtnXSxUPXRbeF07aWYoKHdbMF0tVFswXXx8d1sxXS1UWzFdKTwwKXt2YXIgaz1nO2c9eCx4PWt9dlswXT1nO3ZhciBBLEU9dlsxXT1tWzFdO2ZvcihpJiYoQT12WzJdKTtzPjAmJm5bcy0xXVswXT09PWM7KXt2YXIgbT1uWy0tc10sUz1tWzFdO2k/ZS5wdXNoKFtFLFMsQV0pOmUucHVzaChbRSxTXSksRT1TfWk/ZS5wdXNoKFtFLHgsQV0pOmUucHVzaChbRSx4XSl9cmV0dXJuIG99ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBpPXQubGVuZ3RoK2UubGVuZ3RoLGE9bmV3IG0oaSksbz1yLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9ZVtzXSxjPW4obFswXSksdT1uKGxbMV0pO28ucHVzaChbY1swXSx1WzBdLGNbMV0sdVsxXV0pLHQucHVzaChbeChsWzBdKSx4KGxbMV0pXSl9dihvLGZ1bmN0aW9uKHQsZSl7YS5saW5rKHQsZSl9KTtmb3IodmFyIGY9MCxoPSEwLGQ9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXthLmZpbmQocyk9PT1zPyhkW3NdPWYsdFtmKytdPXRbc10pOihoPSExLGRbc109LTEpfWlmKHQubGVuZ3RoPWYsaClyZXR1cm4gbnVsbDtmb3IodmFyIHM9MDtzPGk7KytzKWRbc108MCYmKGRbc109ZFthLmZpbmQocyldKTtyZXR1cm4gZH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcj9yOnRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowfWZ1bmN0aW9uIGgodCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWVbaVswXV0sbz1lW2lbMV1dO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWlbMF0sbz1pWzFdO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9cj90LnNvcnQoZik6dC5zb3J0KHUpO2Zvcih2YXIgcz0xLG49MTtuPHQubGVuZ3RoOysrbil7dmFyIGw9dFtuLTFdLGM9dFtuXTsoY1swXSE9PWxbMF18fGNbMV0hPT1sWzFdfHxyJiZjWzJdIT09bFsyXSkmJih0W3MrK109Yyl9dC5sZW5ndGg9c319ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49aSh0LGUpLHU9byh0LGUsbiksZj1hKHQpLGQ9cyh0LGUsbixmKSxwPWwodCxlLHUsZCxyKSxtPWModCxwLGYpO3JldHVybiBoKGUsbSxyKSwhIW18fCh1Lmxlbmd0aD4wfHxkLmxlbmd0aD4wKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbixpPSExO2lmKHIpe249ZTtmb3IodmFyIGE9bmV3IEFycmF5KGUubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBzPWVbb107YVtvXT1bc1swXSxzWzFdLHJbb11dfWU9YX1mb3IoO2QodCxlLCEhcik7KWk9ITA7aWYociYmaSl7bi5sZW5ndGg9MCxyLmxlbmd0aD0wO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXt2YXIgcz1lW29dO24ucHVzaChbc1swXSxzWzFdXSksci5wdXNoKHNbMl0pfX1yZXR1cm4gaX1lLmV4cG9ydHM9cDt2YXIgbT10KCJ1bmlvbi1maW5kIiksdj10KCJib3gtaW50ZXJzZWN0IiksZz0odCgiY29tcGFyZS1jZWxsIiksdCgicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0IikpLHk9dCgiYmlnLXJhdCIpLGI9dCgiYmlnLXJhdC9jbXAiKSx4PXQoImJpZy1yYXQvdG8tZmxvYXQiKSxfPXQoInJhdC12ZWMiKSx3PXQoIm5leHRhZnRlciIpLE09dCgiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiKX0seyIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCI6OTAsImJpZy1yYXQiOjU0LCJiaWctcmF0L2NtcCI6NTIsImJpZy1yYXQvdG8tZmxvYXQiOjY2LCJib3gtaW50ZXJzZWN0Ijo3MSwiY29tcGFyZS1jZWxsIjoxMDAsbmV4dGFmdGVyOjQ3NywicmF0LXZlYyI6NTA0LCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjUyMCwidW5pb24tZmluZCI6NTUwfV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBzKGEodFswXSxlWzFdKSxhKHRbMV0sZVswXSkpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIGE9YyhlLHQpLHM9YyhpLHIpLGg9bihhLHMpO2lmKDA9PT1sKGgpKXJldHVybiBudWxsO3ZhciBkPWModCxyKSxwPW4ocyxkKSxtPW8ocCxoKTtyZXR1cm4gdSh0LGYoYSxtKSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiYmlnLXJhdC9tdWwiKSxvPXQoImJpZy1yYXQvZGl2Iikscz10KCJiaWctcmF0L3N1YiIpLGw9dCgiYmlnLXJhdC9zaWduIiksYz10KCJyYXQtdmVjL3N1YiIpLHU9dCgicmF0LXZlYy9hZGQiKSxmPXQoInJhdC12ZWMvbXVscyIpO3QoImJpZy1yYXQvdG8tZmxvYXQiKX0seyJiaWctcmF0L2RpdiI6NTMsImJpZy1yYXQvbXVsIjo2MywiYmlnLXJhdC9zaWduIjo2NCwiYmlnLXJhdC9zdWIiOjY1LCJiaWctcmF0L3RvLWZsb2F0Ijo2NiwicmF0LXZlYy9hZGQiOjUwMywicmF0LXZlYy9tdWxzIjo1MDUsInJhdC12ZWMvc3ViIjo1MDZ9XSw5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsbio9MjU1LGkqPTI1NSxvKj0yNTUpLHI9MjU1JmEociwwLDI1NSksbj0yNTUmYShuLDAsMjU1KSxpPTI1NSZhKGksMCwyNTUpLG89MjU1JmEobywwLDI1NSksMTY3NzcyMTYqcisobjw8MTYpKyhpPDw4KStvfWZ1bmN0aW9uIGkodCxlKXt0PSt0O3ZhciByPXQ+Pj4yNCxuPSgxNjcxMTY4MCZ0KT4+PjE2LGk9KDY1MjgwJnQpPj4+OCxhPTI1NSZ0O3JldHVybiBlPT09ITE/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19dmFyIGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9bixlLmV4cG9ydHMudG89bixlLmV4cG9ydHMuZnJvbT1pfSx7Y2xhbXA6ODh9XSw5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSw5MzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZSxuLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihpW3RdKWw9aVt0XS5zbGljZSgpLG49InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAsbj0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGY9dS5sZW5ndGgsaD1mPD00O2M9MSxoPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWYmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09ZiYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxuPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBkPWVbMV0sdT1kLnJlcGxhY2UoL2EkLywiIik7bj11O3ZhciBmPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09Zj9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09c1t0XSlyZXR1cm4gc1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLGQ9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2ZdPzE6bFtmXSxsPWwuc2xpY2UoMCxmKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLG49dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpbj0icmdiIixsPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF07ZWxzZSBpZihhKHQpKXt2YXIgcD1vKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PXA/KG49InJnYiIsbD1bcCxvKHQuZyx0LmdyZWVuLHQuRyksbyh0LmIsdC5ibHVlLHQuQildKToobj0iaHNsIixsPVtvKHQuaCx0Lmh1ZSx0LkgpLG8odC5zLHQuc2F0dXJhdGlvbix0LlMpLG8odC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9byh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxuPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7cmV0dXJue3NwYWNlOm4sdmFsdWVzOmwsYWxwaGE6Y319dmFyIGk9dCgiY29sb3ItbmFtZSIpLGE9dCgiaXMtcGxhaW4tb2JqIiksbz10KCJkZWZpbmVkIik7ZS5leHBvcnRzPW47dmFyIHM9e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjo5MixkZWZpbmVkOjEyMiwiaXMtcGxhaW4tb2JqIjozMDR9XSw5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1wYXJzZSIpLGk9dCgiY29sb3Itc3BhY2UvaHNsIiksYT10KCJjbGFtcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7bnVsbD09ZSYmKGU9ITApO3ZhciByPW4odCk7aWYoIXIuc3BhY2UpcmV0dXJuW107dmFyIG8scz1yLnZhbHVlcyxsPXMubGVuZ3RoO2ZvcihvPTA7bzxsO28rKylzW29dPWEoc1tvXSwwLDI1NSk7aWYoImgiPT09ci5zcGFjZVswXSYmKHM9aS5yZ2IocykpLGUpZm9yKG89MDtvPGw7bysrKXNbb10vPTI1NTtyZXR1cm4gcy5wdXNoKGEoci5hbHBoYSwwLDEpKSxzfX0se2NsYW1wOjg4LCJjb2xvci1wYXJzZSI6OTMsImNvbG9yLXNwYWNlL2hzbCI6OTV9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3JnYiIpO2UuZXhwb3J0cz17bmFtZToiaHNsIixtaW46WzAsMCwwXSxtYXg6WzM2MCwxMDAsMTAwXSxjaGFubmVsOlsiaHVlIiwic2F0dXJhdGlvbiIsImxpZ2h0bmVzcyJdLGFsaWFzOlsiSFNMIl0scmdiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10WzBdLzM2MCxzPXRbMV0vMTAwLGw9dFsyXS8xMDA7aWYoMD09PXMpcmV0dXJuIGE9MjU1KmwsW2EsYSxhXTtyPWw8LjU/bCooMStzKTpsK3MtbCpzLGU9MipsLXIsaT1bMCwwLDBdO2Zvcih2YXIgYz0wO2M8MztjKyspbj1vKzEvMyotKGMtMSksbjwwP24rKzpuPjEmJm4tLSxhPTYqbjwxP2UrNiooci1lKSpuOjIqbjwxP3I6MypuPDI/ZSsoci1lKSooMi8zLW4pKjY6ZSxpW2NdPTI1NSphO3JldHVybiBpfX0sbi5oc2w9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXS8yNTUsYT10WzFdLzI1NSxvPXRbMl0vMjU1LHM9TWF0aC5taW4oaSxhLG8pLGw9TWF0aC5tYXgoaSxhLG8pLGM9bC1zO3JldHVybiBsPT09cz9lPTA6aT09PWw/ZT0oYS1vKS9jOmE9PT1sP2U9Misoby1pKS9jOm89PT1sJiYoZT00KyhpLWEpL2MpLGU9TWF0aC5taW4oNjAqZSwzNjApLGU8MCYmKGUrPTM2MCksbj0ocytsKS8yLHI9bD09PXM/MDpuPD0uNT9jLyhsK3MpOmMvKDItbC1zKSxbZSwxMDAqciwxMDAqbl19fSx7Ii4vcmdiIjo5Nn1dLDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSw5NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17amV0Olt7aW5kZXg6MCxyZ2I6WzAsMCwxMzFdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsNjAsMTcwXX0se2luZGV4Oi4zNzUscmdiOls1LDI1NSwyNTVdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NSwyNTUsMF19LHtpbmRleDouODc1LHJnYjpbMjUwLDAsMF19LHtpbmRleDoxLHJnYjpbMTI4LDAsMF19XSxoc3Y6W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDouMTY5LHJnYjpbMjUzLDI1NSwyXX0se2luZGV4Oi4xNzMscmdiOlsyNDcsMjU1LDJdfSx7aW5kZXg6LjMzNyxyZ2I6WzAsMjUyLDRdfSx7aW5kZXg6LjM0MSxyZ2I6WzAsMjUyLDEwXX0se2luZGV4Oi41MDYscmdiOlsxLDI0OSwyNTVdfSx7aW5kZXg6LjY3MSxyZ2I6WzIsMCwyNTNdfSx7aW5kZXg6LjY3NSxyZ2I6WzgsMCwyNTNdfSx7aW5kZXg6LjgzOSxyZ2I6WzI1NSwwLDI1MV19LHtpbmRleDouODQzLHJnYjpbMjU1LDAsMjQ1XX0se2luZGV4OjEscmdiOlsyNTUsMCw2XX1dLGhvdDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMyxyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjEwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMCwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwyNTVdfV0sc3ByaW5nOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHN1bW1lcjpbe2luZGV4OjAscmdiOlswLDEyOCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMTAyXX1dLGF1dHVtbjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sd2ludGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzAsMjU1LDEyOF19XSxib25lOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zNzYscmdiOls4NCw4NCwxMTZdfSx7aW5kZXg6Ljc1MyxyZ2I6WzE2OSwyMDAsMjAwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb3BwZXI6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjgwNCxyZ2I6WzI1NSwxNjAsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMTk5LDEyN119XSxncmV5czpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0seWlnbmJ1Olt7aW5kZXg6MCxyZ2I6WzgsMjksODhdfSx7aW5kZXg6LjEyNSxyZ2I6WzM3LDUyLDE0OF19LHtpbmRleDouMjUscmdiOlszNCw5NCwxNjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI5LDE0NSwxOTJdfSx7aW5kZXg6LjUscmdiOls2NSwxODIsMTk2XX0se2luZGV4Oi42MjUscmdiOlsxMjcsMjA1LDE4N119LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE4MF19LHtpbmRleDouODc1LHJnYjpbMjM3LDI0OCwyMTddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjE3XX1dLGdyZWVuczpbe2luZGV4OjAscmdiOlswLDY4LDI3XX0se2luZGV4Oi4xMjUscmdiOlswLDEwOSw0NF19LHtpbmRleDouMjUscmdiOlszNSwxMzksNjldfSx7aW5kZXg6LjM3NSxyZ2I6WzY1LDE3MSw5M119LHtpbmRleDouNSxyZ2I6WzExNiwxOTYsMTE4XX0se2luZGV4Oi42MjUscmdiOlsxNjEsMjE3LDE1NV19LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE5Ml19LHtpbmRleDouODc1LHJnYjpbMjI5LDI0NSwyMjRdfSx7aW5kZXg6MSxyZ2I6WzI0NywyNTIsMjQ1XX1dLHlpb3JyZDpbe2luZGV4OjAscmdiOlsxMjgsMCwzOF19LHtpbmRleDouMTI1LHJnYjpbMTg5LDAsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMjI3LDI2LDI4XX0se2luZGV4Oi4zNzUscmdiOlsyNTIsNzgsNDJdfSx7aW5kZXg6LjUscmdiOlsyNTMsMTQxLDYwXX0se2luZGV4Oi42MjUscmdiOlsyNTQsMTc4LDc2XX0se2luZGV4Oi43NSxyZ2I6WzI1NCwyMTcsMTE4XX0se2luZGV4Oi44NzUscmdiOlsyNTUsMjM3LDE2MF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMDRdfV0sYmx1ZXJlZDpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJkYnU6W3tpbmRleDowLHJnYjpbNSwxMCwxNzJdfSx7aW5kZXg6LjM1LHJnYjpbMTA2LDEzNywyNDddfSx7aW5kZXg6LjUscmdiOlsxOTAsMTkwLDE5MF19LHtpbmRleDouNixyZ2I6WzIyMCwxNzAsMTMyXX0se2luZGV4Oi43LHJnYjpbMjMwLDE0NSw5MF19LHtpbmRleDoxLHJnYjpbMTc4LDEwLDI4XX1dLHBpY25pYzpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4Oi4xLHJnYjpbNTEsMTUzLDI1NV19LHtpbmRleDouMixyZ2I6WzEwMiwyMDQsMjU1XX0se2luZGV4Oi4zLHJnYjpbMTUzLDIwNCwyNTVdfSx7aW5kZXg6LjQscmdiOlsyMDQsMjA0LDI1NV19LHtpbmRleDouNSxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4Oi42LHJnYjpbMjU1LDIwNCwyNTVdfSx7aW5kZXg6LjcscmdiOlsyNTUsMTUzLDI1NV19LHtpbmRleDouOCxyZ2I6WzI1NSwxMDIsMjA0XX0se2luZGV4Oi45LHJnYjpbMjU1LDEwMiwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmFpbmJvdzpbe2luZGV4OjAscmdiOlsxNTAsMCw5MF19LHtpbmRleDouMTI1LHJnYjpbMCwwLDIwMF19LHtpbmRleDouMjUscmdiOlswLDI1LDI1NV19LHtpbmRleDouMzc1LHJnYjpbMCwxNTIsMjU1XX0se2luZGV4Oi41LHJnYjpbNDQsMjU1LDE1MF19LHtpbmRleDouNjI1LHJnYjpbMTUxLDI1NSwwXX0se2luZGV4Oi43NSxyZ2I6WzI1NSwyMzQsMF19LHtpbmRleDouODc1LHJnYjpbMjU1LDExMSwwXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHBvcnRsYW5kOlt7aW5kZXg6MCxyZ2I6WzEyLDUxLDEzMV19LHtpbmRleDouMjUscmdiOlsxMCwxMzYsMTg2XX0se2luZGV4Oi41LHJnYjpbMjQyLDIxMSw1Nl19LHtpbmRleDouNzUscmdiOlsyNDIsMTQzLDU2XX0se2luZGV4OjEscmdiOlsyMTcsMzAsMzBdfV0sYmxhY2tib2R5Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4yLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMTAsMF19LHtpbmRleDouNyxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsxNjAsMjAwLDI1NV19XSxlYXJ0aDpbe2luZGV4OjAscmdiOlswLDAsMTMwXX0se2luZGV4Oi4xLHJnYjpbMCwxODAsMTgwXX0se2luZGV4Oi4yLHJnYjpbNDAsMjEwLDQwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIzMCw1MF19LHtpbmRleDouNixyZ2I6WzEyMCw3MCwyMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sZWxlY3RyaWM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjE1LHJnYjpbMzAsMCwxMDBdfSx7aW5kZXg6LjQscmdiOlsxMjAsMCwxMDBdfSx7aW5kZXg6LjYscmdiOlsxNjAsOTAsMF19LHtpbmRleDouOCxyZ2I6WzIzMCwyMDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1MCwyMjBdfV0sYWxwaGE6W3tpbmRleDowLHJnYjpbMjU1LDI1NSwyNTUsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTUsMV19XSx2aXJpZGlzOlt7aW5kZXg6MCxyZ2I6WzY4LDEsODRdfSx7aW5kZXg6LjEzLHJnYjpbNzEsNDQsMTIyXX0se2luZGV4Oi4yNSxyZ2I6WzU5LDgxLDEzOV19LHtpbmRleDouMzgscmdiOls0NCwxMTMsMTQyXX0se2luZGV4Oi41LHJnYjpbMzMsMTQ0LDE0MV19LHtpbmRleDouNjMscmdiOlszOSwxNzMsMTI5XX0se2luZGV4Oi43NSxyZ2I6WzkyLDIwMCw5OV19LHtpbmRleDouODgscmdiOlsxNzAsMjIwLDUwXX0se2luZGV4OjEscmdiOlsyNTMsMjMxLDM3XX1dLGluZmVybm86W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMzEsMTIsNzJdfSx7aW5kZXg6LjI1LHJnYjpbODUsMTUsMTA5XX0se2luZGV4Oi4zOCxyZ2I6WzEzNiwzNCwxMDZdfSx7aW5kZXg6LjUscmdiOlsxODYsNTQsODVdfSx7aW5kZXg6LjYzLHJnYjpbMjI3LDg5LDUxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDAsMTBdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDIwMSw1MF19LHtpbmRleDoxLHJnYjpbMjUyLDI1NSwxNjRdfV0sbWFnbWE6W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMjgsMTYsNjhdfSx7aW5kZXg6LjI1LHJnYjpbNzksMTgsMTIzXX0se2luZGV4Oi4zOCxyZ2I6WzEyOSwzNywxMjldfSx7aW5kZXg6LjUscmdiOlsxODEsNTQsMTIyXX0se2luZGV4Oi42MyxyZ2I6WzIyOSw4MCwxMDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjUxLDEzNSw5N119LHtpbmRleDouODgscmdiOlsyNTQsMTk0LDEzNV19LHtpbmRleDoxLHJnYjpbMjUyLDI1MywxOTFdfV0scGxhc21hOlt7aW5kZXg6MCxyZ2I6WzEzLDgsMTM1XX0se2luZGV4Oi4xMyxyZ2I6Wzc1LDMsMTYxXX0se2luZGV4Oi4yNSxyZ2I6WzEyNSwzLDE2OF19LHtpbmRleDouMzgscmdiOlsxNjgsMzQsMTUwXX0se2luZGV4Oi41LHJnYjpbMjAzLDcwLDEyMV19LHtpbmRleDouNjMscmdiOlsyMjksMTA3LDkzXX0se2luZGV4Oi43NSxyZ2I6WzI0OCwxNDgsNjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjUzLDE5NSw0MF19LHtpbmRleDoxLHJnYjpbMjQwLDI0OSwzM119XSx3YXJtOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxNzIsMCwxODddfSx7aW5kZXg6LjI1LHJnYjpbMjE5LDAsMTcwXX0se2luZGV4Oi4zOCxyZ2I6WzI1NSwwLDEzMF19LHtpbmRleDouNSxyZ2I6WzI1NSw2Myw3NF19LHtpbmRleDouNjMscmdiOlsyNTUsMTIzLDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjM0LDE3NiwwXX0se2luZGV4Oi44OCxyZ2I6WzE5MCwyMjgsMF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzExNiwwLDIxOF19LHtpbmRleDouMjUscmdiOls5OCw3NCwyMzddfSx7aW5kZXg6LjM4LHJnYjpbNjgsMTQ2LDIzMV19LHtpbmRleDouNSxyZ2I6WzAsMjA0LDE5N119LHtpbmRleDouNjMscmdiOlswLDI0NywxNDZdfSx7aW5kZXg6Ljc1LHJnYjpbMCwyNTUsODhdfSx7aW5kZXg6Ljg4LHJnYjpbNDAsMjU1LDhdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSwicmFpbmJvdy1zb2Z0Ijpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEscmdiOlsxOTksMCwxODBdfSx7aW5kZXg6LjIscmdiOlsyNTUsMCwxMjFdfSx7aW5kZXg6LjMscmdiOlsyNTUsMTA4LDBdfSx7aW5kZXg6LjQscmdiOlsyMjIsMTk0LDBdfSx7aW5kZXg6LjUscmdiOlsxNTAsMjU1LDBdfSx7aW5kZXg6LjYscmdiOlswLDI1NSw1NV19LHtpbmRleDouNyxyZ2I6WzAsMjQ2LDE1MF19LHtpbmRleDouOCxyZ2I6WzUwLDE2NywyMjJdfSx7aW5kZXg6LjkscmdiOlsxMDMsNTEsMjM1XX0se2luZGV4OjEscmdiOlsxMjQsMCwxODZdfV0sYmF0aHltZXRyeTpbe2luZGV4OjAscmdiOls0MCwyNiw0NF19LHtpbmRleDouMTMscmdiOls1OSw0OSw5MF19LHtpbmRleDouMjUscmdiOls2NCw3NiwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNjMsMTEwLDE1MV19LHtpbmRleDouNSxyZ2I6WzcyLDE0MiwxNThdfSx7aW5kZXg6LjYzLHJnYjpbODUsMTc0LDE2M119LHtpbmRleDouNzUscmdiOlsxMjAsMjA2LDE2M119LHtpbmRleDouODgscmdiOlsxODcsMjMwLDE3Ml19LHtpbmRleDoxLHJnYjpbMjUzLDI1NCwyMDRdfV0sY2RvbTpbe2luZGV4OjAscmdiOls0NywxNSw2Ml19LHtpbmRleDouMTMscmdiOls4NywyMyw4Nl19LHtpbmRleDouMjUscmdiOlsxMzAsMjgsOTldfSx7aW5kZXg6LjM4LHJnYjpbMTcxLDQxLDk2XX0se2luZGV4Oi41LHJnYjpbMjA2LDY3LDg2XX0se2luZGV4Oi42MyxyZ2I6WzIzMCwxMDYsODRdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0OSwxMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5MywxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyMzcsMTc2XX1dLGNobG9yb3BoeWxsOlt7aW5kZXg6MCxyZ2I6WzE4LDM2LDIwXX0se2luZGV4Oi4xMyxyZ2I6WzI1LDYzLDQxXX0se2luZGV4Oi4yNSxyZ2I6WzI0LDkxLDU5XX0se2luZGV4Oi4zOCxyZ2I6WzEzLDExOSw3Ml19LHtpbmRleDouNSxyZ2I6WzE4LDE0OCw4MF19LHtpbmRleDouNjMscmdiOls4MCwxNzMsODldfSx7aW5kZXg6Ljc1LHJnYjpbMTMyLDE5NiwxMjJdfSx7aW5kZXg6Ljg4LHJnYjpbMTc1LDIyMSwxNjJdfSx7aW5kZXg6MSxyZ2I6WzIxNSwyNDksMjA4XX1dLGRlbnNpdHk6W3tpbmRleDowLHJnYjpbNTQsMTQsMzZdfSx7aW5kZXg6LjEzLHJnYjpbODksMjMsODBdfSx7aW5kZXg6LjI1LHJnYjpbMTEwLDQ1LDEzMl19LHtpbmRleDouMzgscmdiOlsxMjAsNzcsMTc4XX0se2luZGV4Oi41LHJnYjpbMTIwLDExMywyMTNdfSx7aW5kZXg6LjYzLHJnYjpbMTE1LDE1MSwyMjhdfSx7aW5kZXg6Ljc1LHJnYjpbMTM0LDE4NSwyMjddfSx7aW5kZXg6Ljg4LHJnYjpbMTc3LDIxNCwyMjddfSx7aW5kZXg6MSxyZ2I6WzIzMCwyNDEsMjQxXX1dLCJmcmVlc3VyZmFjZS1ibHVlIjpbe2luZGV4OjAscmdiOlszMCw0LDExMF19LHtpbmRleDouMTMscmdiOls0NywxNCwxNzZdfSx7aW5kZXg6LjI1LHJnYjpbNDEsNDUsMjM2XX0se2luZGV4Oi4zOCxyZ2I6WzI1LDk5LDIxMl19LHtpbmRleDouNSxyZ2I6WzY4LDEzMSwyMDBdfSx7aW5kZXg6LjYzLHJnYjpbMTE0LDE1NiwxOTddfSx7aW5kZXg6Ljc1LHJnYjpbMTU3LDE4MSwyMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjAwLDIwOCwyMTZdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLCJmcmVlc3VyZmFjZS1yZWQiOlt7aW5kZXg6MCxyZ2I6WzYwLDksMThdfSx7aW5kZXg6LjEzLHJnYjpbMTAwLDE3LDI3XX0se2luZGV4Oi4yNSxyZ2I6WzE0MiwyMCwyOV19LHtpbmRleDouMzgscmdiOlsxNzcsNDMsMjddfSx7aW5kZXg6LjUscmdiOlsxOTIsODcsNjNdfSx7aW5kZXg6LjYzLHJnYjpbMjA1LDEyNSwxMDVdfSx7aW5kZXg6Ljc1LHJnYjpbMjE2LDE2MiwxNDhdfSx7aW5kZXg6Ljg4LHJnYjpbMjI3LDE5OSwxOTNdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLG94eWdlbjpbe2luZGV4OjAscmdiOls2NCw1LDVdfSx7aW5kZXg6LjEzLHJnYjpbMTA2LDYsMTVdfSx7aW5kZXg6LjI1LHJnYjpbMTQ0LDI2LDddfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDY0LDNdfSx7aW5kZXg6LjUscmdiOlsxODgsMTAwLDRdfSx7aW5kZXg6LjYzLHJnYjpbMjA2LDEzNiwxMV19LHtpbmRleDouNzUscmdiOlsyMjAsMTc0LDI1XX0se2luZGV4Oi44OCxyZ2I6WzIzMSwyMTUsNDRdfSx7aW5kZXg6MSxyZ2I6WzI0OCwyNTQsMTA1XX1dLHBhcjpbe2luZGV4OjAscmdiOls1MSwyMCwyNF19LHtpbmRleDouMTMscmdiOls5MCwzMiwzNV19LHtpbmRleDouMjUscmdiOlsxMjksNDQsMzRdfSx7aW5kZXg6LjM4LHJnYjpbMTU5LDY4LDI1XX0se2luZGV4Oi41LHJnYjpbMTgyLDk5LDE5XX0se2luZGV4Oi42MyxyZ2I6WzE5OSwxMzQsMjJdfSx7aW5kZXg6Ljc1LHJnYjpbMjEyLDE3MSwzNV19LHtpbmRleDouODgscmdiOlsyMjEsMjEwLDU0XX0se2luZGV4OjEscmdiOlsyMjUsMjUzLDc1XX1dLHBoYXNlOlt7aW5kZXg6MCxyZ2I6WzE0NSwxMDUsMThdfSx7aW5kZXg6LjEzLHJnYjpbMTg0LDcxLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzE4Niw1OCwxMTVdfSx7aW5kZXg6LjM4LHJnYjpbMTYwLDcxLDE4NV19LHtpbmRleDouNSxyZ2I6WzExMCw5NywyMThdfSx7aW5kZXg6LjYzLHJnYjpbNTAsMTIzLDE2NF19LHtpbmRleDouNzUscmdiOlszMSwxMzEsMTEwXX0se2luZGV4Oi44OCxyZ2I6Wzc3LDEyOSwzNF19LHtpbmRleDoxLHJnYjpbMTQ1LDEwNSwxOF19XSxzYWxpbml0eTpbe2luZGV4OjAscmdiOls0MiwyNCwxMDhdfSx7aW5kZXg6LjEzLHJnYjpbMzMsNTAsMTYyXX0se2luZGV4Oi4yNSxyZ2I6WzE1LDkwLDE0NV19LHtpbmRleDouMzgscmdiOls0MCwxMTgsMTM3XX0se2luZGV4Oi41LHJnYjpbNTksMTQ2LDEzNV19LHtpbmRleDouNjMscmdiOls3OSwxNzUsMTI2XX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDMsMTA0XX0se2luZGV4Oi44OCxyZ2I6WzE5MywyMjEsMTAwXX0se2luZGV4OjEscmdiOlsyNTMsMjM5LDE1NF19XSx0ZW1wZXJhdHVyZTpbe2luZGV4OjAscmdiOls0LDM1LDUxXX0se2luZGV4Oi4xMyxyZ2I6WzIzLDUxLDEyMl19LHtpbmRleDouMjUscmdiOls4NSw1OSwxNTddfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDc5LDE0M119LHtpbmRleDouNSxyZ2I6WzE3NSw5NSwxMzBdfSx7aW5kZXg6LjYzLHJnYjpbMjIyLDExMiwxMDFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0Niw2Nl19LHtpbmRleDouODgscmdiOlsyNDksMTk2LDY1XX0se2luZGV4OjEscmdiOlsyMzIsMjUwLDkxXX1dLHR1cmJpZGl0eTpbe2luZGV4OjAscmdiOlszNCwzMSwyN119LHtpbmRleDouMTMscmdiOls2NSw1MCw0MV19LHtpbmRleDouMjUscmdiOls5OCw2OSw1Ml19LHtpbmRleDouMzgscmdiOlsxMzEsODksNTddfSx7aW5kZXg6LjUscmdiOlsxNjEsMTEyLDU5XX0se2luZGV4Oi42MyxyZ2I6WzE4NSwxNDAsNjZdfSx7aW5kZXg6Ljc1LHJnYjpbMjAyLDE3NCw4OF19LHtpbmRleDouODgscmdiOlsyMTYsMjA5LDEyNl19LHtpbmRleDoxLHJnYjpbMjMzLDI0NiwxNzFdfV0sInZlbG9jaXR5LWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzE3LDMyLDY0XX0se2luZGV4Oi4xMyxyZ2I6WzM1LDUyLDExNl19LHtpbmRleDouMjUscmdiOlsyOSw4MSwxNTZdfSx7aW5kZXg6LjM4LHJnYjpbMzEsMTEzLDE2Ml19LHtpbmRleDouNSxyZ2I6WzUwLDE0NCwxNjldfSx7aW5kZXg6LjYzLHJnYjpbODcsMTczLDE3Nl19LHtpbmRleDouNzUscmdiOlsxNDksMTk2LDE4OV19LHtpbmRleDouODgscmdiOlsyMDMsMjIxLDIxMV19LHtpbmRleDoxLHJnYjpbMjU0LDI1MSwyMzBdfV0sInZlbG9jaXR5LWdyZWVuIjpbe2luZGV4OjAscmdiOlsyMywzNSwxOV19LHtpbmRleDouMTMscmdiOlsyNCw2NCwzOF19LHtpbmRleDouMjUscmdiOlsxMSw5NSw0NV19LHtpbmRleDouMzgscmdiOlszOSwxMjMsMzVdfSx7aW5kZXg6LjUscmdiOls5NSwxNDYsMTJdfSx7aW5kZXg6LjYzLHJnYjpbMTUyLDE2NSwxOF19LHtpbmRleDouNzUscmdiOlsyMDEsMTg2LDY5XX0se2luZGV4Oi44OCxyZ2I6WzIzMywyMTYsMTM3XX0se2luZGV4OjEscmdiOlsyNTUsMjUzLDIwNV19XSxjdWJlaGVsaXg6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjA3LHJnYjpbMjIsNSw1OV19LHtpbmRleDouMTMscmdiOls2MCw0LDEwNV19LHtpbmRleDouMixyZ2I6WzEwOSwxLDEzNV19LHtpbmRleDouMjcscmdiOlsxNjEsMCwxNDddfSx7aW5kZXg6LjMzLHJnYjpbMjEwLDIsMTQyXX0se2luZGV4Oi40LHJnYjpbMjUxLDExLDEyM119LHtpbmRleDouNDcscmdiOlsyNTUsMjksOTddfSx7aW5kZXg6LjUzLHJnYjpbMjU1LDU0LDY5XX0se2luZGV4Oi42LHJnYjpbMjU1LDg1LDQ2XX0se2luZGV4Oi42NyxyZ2I6WzI1NSwxMjAsMzRdfSx7aW5kZXg6LjczLHJnYjpbMjU1LDE1NywzN119LHtpbmRleDouOCxyZ2I6WzI0MSwxOTEsNTddfSx7aW5kZXg6Ljg3LHJnYjpbMjI0LDIyMCw5M119LHtpbmRleDouOTMscmdiOlsyMTgsMjQxLDE0Ml19LHtpbmRleDoxLApyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGUscixuLGMsdSxmLGgsZCxwLG0sdjtpZih0fHwodD17fSksZD0odC5uc2hhZGVzfHw3MiktMSxoPXQuZm9ybWF0fHwiaGV4IixmPXQuY29sb3JtYXAsZnx8KGY9ImpldCIpLCJzdHJpbmciPT10eXBlb2YgZil7aWYoZj1mLnRvTG93ZXJDYXNlKCksIXNbZl0pdGhyb3cgRXJyb3IoZisiIG5vdCBhIHN1cHBvcnRlZCBjb2xvcnNjYWxlIik7dT1zW2ZdfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoZikpdGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGNvbG9ybWFwIG9wdGlvbiIsZik7dT1mLnNsaWNlKCl9aWYodS5sZW5ndGg+ZCl0aHJvdyBuZXcgRXJyb3IoZisiIG1hcCByZXF1aXJlcyBuc2hhZGVzIHRvIGJlIGF0IGxlYXN0IHNpemUgIit1Lmxlbmd0aCk7bT1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTp0LmFscGhhLnNsaWNlKCk6Im51bWJlciI9PXR5cGVvZiB0LmFscGhhP1t0LmFscGhhLHQuYWxwaGFdOlsxLDFdLGU9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5pbmRleCpkKX0pLG1bMF09TWF0aC5taW4oTWF0aC5tYXgobVswXSwwKSwxKSxtWzFdPU1hdGgubWluKE1hdGgubWF4KG1bMV0sMCksMSk7dmFyIGc9dS5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj11W2VdLmluZGV4LG49dVtlXS5yZ2Iuc2xpY2UoKTtyZXR1cm4gND09PW4ubGVuZ3RoJiZuWzNdPj0wJiZuWzNdPD0xP246KG5bM109bVswXSsobVsxXS1tWzBdKSpyLG4pfSkscD1bXTtmb3Iodj0wO3Y8ZS5sZW5ndGgtMTsrK3Ype2M9ZVt2KzFdLWVbdl0scj1nW3ZdLG49Z1t2KzFdO2Zvcih2YXIgeT0wO3k8Yzt5Kyspe3ZhciBiPXkvYztwLnB1c2goW01hdGgucm91bmQobChyWzBdLG5bMF0sYikpLE1hdGgucm91bmQobChyWzFdLG5bMV0sYikpLE1hdGgucm91bmQobChyWzJdLG5bMl0sYikpLGwoclszXSxuWzNdLGIpXSl9fXJldHVybiBwLnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KG1bMV0pKSwiaGV4Ij09PWg/cD1wLm1hcChhKToicmdiYVN0cmluZyI9PT1oP3A9cC5tYXAobyk6ImZsb2F0Ij09PWgmJihwPXAubWFwKGkpKSxwfWZ1bmN0aW9uIGkodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlLHI9IiMiLG49MDtuPDM7KytuKWU9dFtuXSxlPWUudG9TdHJpbmcoMTYpLHIrPSgiMDAiK2UpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4icmdiYSgiK3Quam9pbigiLCIpKyIpIn12YXIgcz10KCIuL2NvbG9yU2NhbGUiKSxsPXQoImxlcnAiKTtlLmV4cG9ydHM9bn0seyIuL2NvbG9yU2NhbGUiOjk3LGxlcnA6MzA5fV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49cyh0WzBdLC1lWzBdKSxpPXModFsxXSwtZVsxXSksYT1zKHJbMF0sLWVbMF0pLG89cyhyWzFdLC1lWzFdKSx1PWMobChuLGEpLGwoaSxvKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgcz1hKGUscixpKTtpZigwPT09cyl7dmFyIGw9byhhKHQsZSxyKSksYz1vKGEodCxlLGkpKTtpZihsPT09Yyl7aWYoMD09PWwpe3ZhciB1PW4odCxlLHIpO3JldHVybiB1PT09bih0LGUsaSk/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP2w+MD8tMTpuKHQsZSxpKT8tMToxOjA9PT1sP2M+MD8xOm4odCxlLHIpPzE6LTE6byhjLWwpfXZhciBmPWEodCxlLHIpO3JldHVybiBmPjA/cz4wJiZhKHQsZSxpKT4wPzE6LTE6ZjwwP3M+MHx8YSh0LGUsaSk+MD8xOi0xOmEodCxlLGkpPjA/MTpuKHQsZSxyKT8xOi0xfWUuZXhwb3J0cz1pO3ZhciBhPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLG89dCgic2lnbnVtIikscz10KCJ0d28tc3VtIiksbD10KCJyb2J1c3QtcHJvZHVjdCIpLGM9dCgicm9idXN0LXN1bSIpfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTE3LCJyb2J1c3QtcHJvZHVjdCI6NTE4LCJyb2J1c3Qtc3VtIjo1MjIsc2lnbnVtOjUyNCwidHdvLXN1bSI6NTQ4fV0sMTAwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQubGVuZ3RoLGk9dC5sZW5ndGgtZS5sZW5ndGg7aWYoaSlyZXR1cm4gaTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4gdFswXSt0WzFdLWVbMF0tZVsxXXx8YSh0WzBdLHRbMV0pLWEoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGk9byt0WzJdLShzK2VbMl0pKXJldHVybiBpO3ZhciBsPWEodFswXSx0WzFdKSxjPWEoZVswXSxlWzFdKTtyZXR1cm4gYShsLHRbMl0pLWEoYyxlWzJdKXx8YShsK3RbMl0sbyktYShjK2VbMl0scyk7Y2FzZSA0OnZhciB1PXRbMF0sZj10WzFdLGg9dFsyXSxkPXRbM10scD1lWzBdLG09ZVsxXSx2PWVbMl0sZz1lWzNdO3JldHVybiB1K2YraCtkLShwK20rditnKXx8YSh1LGYsaCxkKS1hKHAsbSx2LGcscCl8fGEodStmLHUraCx1K2QsZitoLGYrZCxoK2QpLWEocCttLHArdixwK2csbSt2LG0rZyx2K2cpfHxhKHUrZitoLHUrZitkLHUraCtkLGYraCtkKS1hKHArbSt2LHArbStnLHArditnLG0rditnKTtkZWZhdWx0OmZvcih2YXIgeT10LnNsaWNlKCkuc29ydChuKSxiPWUuc2xpY2UoKS5zb3J0KG4pLHg9MDt4PHI7Kyt4KWlmKGk9eVt4XS1iW3hdKXJldHVybiBpO3JldHVybiAwfX1lLmV4cG9ydHM9aTt2YXIgYT1NYXRoLm1pbn0se31dLDEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodCxlKXx8YSh0KS1hKGUpfXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1ufSx7ImNlbGwtb3JpZW50YXRpb24iOjg1LCJjb21wYXJlLWNlbGwiOjEwMH1dLDEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVybltbMF1dO3ZhciByPXRbMF0ubGVuZ3RoO3JldHVybiAwPT09cj9bXToxPT09cj9pKHQpOjI9PT1yP2EodCk6byh0LHIpfXZhciBpPXQoIi4vbGliL2NoMWQiKSxhPXQoIi4vbGliL2NoMmQiKSxvPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9jaDFkIjoxMDMsIi4vbGliL2NoMmQiOjEwNCwiLi9saWIvY2huZCI6MTA1fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX1lLmV4cG9ydHM9bn0se31dLDEwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWkodCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgbj1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107bltvXT1bYSxzXSxhPXN9cmV0dXJuIG59ZS5leHBvcnRzPW47dmFyIGk9dCgibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiKX0seyJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCI6NDU5fV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8ZS5sZW5ndGg7KytpKW5baV09dFtlW2ldXTtmb3IodmFyIGE9ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZS5pbmRleE9mKGkpPDAmJihuW2ErK109dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MDtpPHI7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGEubGVuZ3RoOysrbyl7dmFyIHM9YVtvXTtpZihzPG4pYVtvXT1lW3NdO2Vsc2V7cy09bjtmb3IodmFyIGw9MDtsPG47KytsKXM+PWVbbF0mJihzKz0xKTthW29dPXN9fXJldHVybiB0fWZ1bmN0aW9uIGEodCxlKXt0cnl7cmV0dXJuIG8odCwhMCl9Y2F0Y2goYyl7dmFyIHI9cyh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1uKHQsciksbD1vKGEsITApO3JldHVybiBpKGwscil9fWUuZXhwb3J0cz1hO3ZhciBvPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIikscz10KCJhZmZpbmUtaHVsbCIpfSx7ImFmZmluZS1odWxsIjo0MiwiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjI5Nn1dLDEwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLENQVjoidmVyZGUiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkoPyEuKlxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkW1xcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDU0s6ImN6ZWNob3Nsb3Zha2lhIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRbXFwuXT9yfFxcYmRbXFwuXT9yLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKSIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcikiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTURHOiJtYWRhZ2FzY2FyfG1hbGFnYXN5IixNV0k6Im1hbGF3aXxueWFzYSIsTVlTOiJtYWxheXNpYSIsTURWOiJtYWxkaXZlIixNTEk6IlxcYm1hbGlcXGIiLE1MVDoiXFxibWFsdGEiLE1ITDoibWFyc2hhbGwiLE1UUToibWFydGluaXF1ZSIsTVJUOiJtYXVyaXRhbmlhIixNVVM6Im1hdXJpdGl1cyIsTVlUOiJcXGJtYXlvdHRlIixNRVg6IlxcYm1leGljIixGU006ImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWQiLE1DTzoibW9uYWNvIixNTkc6Im1vbmdvbGlhIixNTkU6Il4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm8iLE1TUjoibW9udHNlcnJhdCIsTUFSOiJtb3JvY2NvfFxcYm1hcm9jIixNT1o6Im1vemFtYmlxdWUiLE1NUjoibXlhbm1hcnxidXJtYSIsTkFNOiJuYW1pYmlhIixOUlU6Im5hdXJ1IixOUEw6Im5lcGFsIixOTEQ6Il4oPyEuKlxcYmFudCkoPyEuKlxcYmNhcmliKS4qbmV0aGVybGFuZHMiLEFOVDoiXig/PS4qXFxiYW50KS4qKG5ldGhlcnxkdXRjaCkiLE5DTDoibmV3Lj9jYWxlZG9uaWEiLE5aTDoibmV3Lj96ZWFsYW5kIixOSUM6Im5pY2FyYWd1YSIsTkVSOiJcXGJuaWdlcig/IWlhKSIsTkdBOiJuaWdlcmlhIixOSVU6Im5pdWUiLE5GSzoibm9yZm9sayIsTU5QOiJtYXJpYW5hIixOT1I6Im5vcndheSIsT01OOiJcXGJvbWFufHRydWNpYWwiLFBBSzoiXig/IS4qZWFzdCkuKnBha2k/c3RhbiIsUExXOiJwYWxhdSIsUFNFOiJwYWxlc3RpbnxcXGJnYXphfHdlc3QuP2JhbmsiLFBBTjoicGFuYW1hIixQTkc6InBhcHVhfG5ldy4/Z3VpbmVhIixQUlk6InBhcmFndWF5IixQRVI6InBlcnUiLFBITDoicGhpbGlwcGluZXMiLFBDTjoicGl0Y2Fpcm4iLFBPTDoicG9sYW5kIixQUlQ6InBvcnR1Z2FsIixQUkk6InB1ZXJ0by4/cmljbyIsUUFUOiJxYXRhciIsS09SOiJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcYmtvcmVhKD8hLipkLipwLipyKSIsTURBOiJtb2xkb3Z8YihhfGUpc3NhcmFiaWEiLFJFVToicihlfFx4ZTkpdW5pb24iLFJPVToicihvfHV8b3UpbWFuaWEiLFJVUzoiXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcLj9zXFwuP3NcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljcyIsUldBOiJyd2FuZGEiLEJMTToiYmFydGgoZXxceGU5KWxlbXkiLFNITjoiaGVsZW5hIixLTkE6ImtpdHRzfFxcYm5ldmlzIixMQ0E6IlxcYmx1Y2lhIixNQUY6Il4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKSIsU1BNOiJtaXF1ZWxvbiIsVkNUOiJ2aW5jZW50IixXU006Il4oPyEuKmFtZXIpLipzYW1vYSIsU01SOiJzYW4uP21hcmlubyIsU1RQOiJcXGJzKGF8XHhlMylvLj90b20oZXxceGU5KSIsU0FVOiJcXGJzYVxcdyouP2FyYWJpYSIsU0VOOiJzZW5lZ2FsIixTUkI6Il4oPyEuKm1vbnRlKS4qc2VyYmlhIixTWUM6InNleWNoZWxsIixTTEU6InNpZXJyYSIsU0dQOiJzaW5nYXBvcmUiLFNYTToiXig/IS4qbWFydGluKSg/IS4qc2FiYSkuKm1hYXJ0ZW4iLFNWSzoiXig/IS4qY3plKS4qc2xvdmFrIixTVk46InNsb3ZlbmlhIixTTEI6InNvbG9tb24iLFNPTToic29tYWxpIixaQUY6InNvdXRoLmFmcmljYXxzXFxcXC4uP2FmcmljYSIsU0dTOiJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaCIsU1NEOiJcXGJzXFx3Ki4/c3VkYW4iLEVTUDoic3BhaW4iLExLQToic3JpLj9sYW5rYXxjZXlsb24iLFNETjoiXig/IS4qXFxicyg/IXUpKS4qc3VkYW4iLFNVUjoic3VyaW5hbXxkdXRjaC4/Z3VpYW5hIixTSk06InN2YWxiYXJkIixTV1o6InN3YXppbGFuZCIsU1dFOiJzd2VkZW4iLENIRToic3dpdHp8c3dpc3MiLFNZUjoic3lyaWEiLFRXTjoidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hIixUSks6InRhamlrIixUSEE6InRoYWlsYW5kfFxcYnNpYW0iLE1LRDoibWFjZWRvbmlhfGZ5cm9tIixUTFM6Il4oPz0uKmxlc3RlKS4qdGltb3J8Xig/PS4qZWFzdCkuKnRpbW9yIixUR086InRvZ28iLFRLTDoidG9rZWxhdSIsVE9OOiJ0b25nYSIsVFRPOiJ0cmluaWRhZHx0b2JhZ28iLFRVTjoidHVuaXNpYSIsVFVSOiJ0dXJrZXkiLFRLTToidHVya21lbiIsVENBOiJ0dXJrcyIsVFVWOiJ0dXZhbHUiLFVHQToidWdhbmRhIixVS1I6InVrcmFpbiIsQVJFOiJlbWlyYXRlc3xedVxcLj9hXFwuP2VcXC4/JHx1bml0ZWQuP2FyYWIuP2VtIixHQlI6InVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFwuP2tcXC4/JCIsVFpBOiJ0YW56YW5pYSIsVVNBOiJ1bml0ZWQuP3N0YXRlc1xcYig/IS4qaXNsYW5kcyl8XFxidVxcLj9zXFwuP2FcXC4/XFxifF5cXHMqdVxcLj9zXFwuP1xcYig/IS4qaXNsYW5kcykiLFVNSToibWlub3IuP291dGx5aW5nLj9pcyIsVVJZOiJ1cnVndWF5IixVWkI6InV6YmVrIixWVVQ6InZhbnVhdHV8bmV3Lj9oZWJyaWRlcyIsVkVOOiJ2ZW5lenVlbGEiLFZOTToiXig/IS4qcmVwdWJsaWMpLip2aWV0Lj9uYW18Xig/PS4qc29jaWFsaXN0KS4qdmlldC4/bmFtIixWR0I6Il4oPz0uKlxcYnVcXC4/XFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luIixWSVI6Il4oPz0uKlxcYnVcXC4/XFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luIixXTEY6ImZ1dHVuYXx3YWxsaXMiLEVTSDoid2VzdGVybi5zYWhhcmEiLFlFTToiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlNRDoiXig/PS4qcGVvKS4qeWVtZW58Xig/IS4qcmVwKSg/PS4qZGVtKS4qeWVtZW58Xig/PS4qc291dGgpLip5ZW1lbnxeKD89LiphZGVuKS4qeWVtZW58Xig/PS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWVVHOiJ5dWdvc2xhdmlhIixaTUI6InphbWJpYXxub3J0aGVybi4/cmhvZGVzaWEiLEVBWjoiemFuemliYXIiLFpXRToiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYSJ9fSx7fV0sMTA3OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD1NYXRoLnJvdW5kKHQpLHQ8MD8wOnQ+MjU1PzI1NTp0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8MD8wOnQ+MT8xOnR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbigiJSI9PT10W3QubGVuZ3RoLTFdP3BhcnNlRmxvYXQodCkvMTAwKjI1NTpwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaSgiJSI9PT10W3QubGVuZ3RoLTFdP3BhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9ZnVuY3Rpb24gbCh0KXt2YXIgZT10LnJlcGxhY2UoLyAvZywiIikudG9Mb3dlckNhc2UoKTtpZihlIGluIGMpcmV0dXJuIGNbZV0uc2xpY2UoKTtpZigiIyI9PT1lWzBdKXtpZig0PT09ZS5sZW5ndGgpe3ZhciByPXBhcnNlSW50KGUuc3Vic3RyKDEpLDE2KTtyZXR1cm4gcj49MCYmcjw9NDA5NT9bKDM4NDAmcik+PjR8KDM4NDAmcik+PjgsMjQwJnJ8KDI0MCZyKT4+NCwxNSZyfCgxNSZyKTw8NCwxXTpudWxsfWlmKDc9PT1lLmxlbmd0aCl7dmFyIHI9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTYpO3JldHVybiByPj0wJiZyPD0xNjc3NzIxNT9bKDE2NzExNjgwJnIpPj4xNiwoNjUyODAmcik+PjgsMjU1JnIsMV06bnVsbH1yZXR1cm4gbnVsbH12YXIgaT1lLmluZGV4T2YoIigiKSxsPWUuaW5kZXhPZigiKSIpO2lmKGkhPT0tMSYmbCsxPT09ZS5sZW5ndGgpe3ZhciB1PWUuc3Vic3RyKDAsaSksZj1lLnN1YnN0cihpKzEsbC0oaSsxKSkuc3BsaXQoIiwiKSxoPTE7c3dpdGNoKHUpe2Nhc2UicmdiYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlInJnYiI6cmV0dXJuIDMhPT1mLmxlbmd0aD9udWxsOlthKGZbMF0pLGEoZlsxXSksYShmWzJdKSxoXTtjYXNlImhzbGEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPW8oZi5wb3AoKSk7Y2FzZSJoc2wiOmlmKDMhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgZD0ocGFyc2VGbG9hdChmWzBdKSUzNjArMzYwKSUzNjAvMzYwLHA9byhmWzFdKSxtPW8oZlsyXSksdj1tPD0uNT9tKihwKzEpOm0rcC1tKnAsZz0yKm0tdjtyZXR1cm5bbigyNTUqcyhnLHYsZCsxLzMpKSxuKDI1NSpzKGcsdixkKSksbigyNTUqcyhnLHYsZC0xLzMpKSxoXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH12YXIgYz17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTt0cnl7ci5wYXJzZUNTU0NvbG9yPWx9Y2F0Y2godCl7fX0se31dLDEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLGM9KDErMippKSpsLHU9aSpsLGY9cyooMy0yKmkpLGg9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIGQ9dC5sZW5ndGgtMTtkPj0wOy0tZClhW2RdPWMqdFtkXSt1KmVbZF0rZipyW2RdK2gqbltkXTtyZXR1cm4gYX1yZXR1cm4gYyp0K3UqZStmKnIraCpufWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5kZXJpdmF0aXZlPW59LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1mdW5jdGlvbiBpKHQpe3ZhciBlPW5ldyBuO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldO2lmKCJhcnJheSI9PT1vfHwib2JqZWN0Ij09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2ldPSJhcnJheSIsZS5hcnJheUFyZ3MucHVzaChpKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKCJhcnJheSIraSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3MiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpfWVsc2UgaWYoInNjYWxhciI9PT1vKWUuc2NhbGFyQXJncy5wdXNoKGkpLGUuc2hpbUFyZ3MucHVzaCgic2NhbGFyIitpKTtlbHNlIGlmKCJpbmRleCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpO2lmKGk8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXgiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXgiKX1lbHNlIGlmKCJzaGFwZSI9PT1vKXtpZihlLnNoYXBlQXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihpPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IGJvZHkoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIik7aWYoaTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2ldLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpfWVsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVW5rbm93biBhcmd1bWVudCB0eXBlICIrcltpXSk7ZS5hcmdUeXBlc1tpXT0ib2Zmc2V0IixlLm9mZnNldEFyZ3MucHVzaCh7YXJyYXk6by5hcnJheSxvZmZzZXQ6by5vZmZzZXR9KSxlLm9mZnNldEFyZ0luZGV4LnB1c2goaSl9fWlmKGUuYXJyYXlBcmdzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHByZSgpIGJsb2NrIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2siKTtpZihlLnBvc3QuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9jayIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fCJjd2lzZSIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LGEoZSl9dmFyIGE9dCgiLi9saWIvdGh1bmsuanMiKTtlLmV4cG9ydHM9aX0seyIuL2xpYi90aHVuay5qcyI6MTExfV0sMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sYz1bXSx1PTAsZj0wO2ZvcihuPTA7bjxhOysrbiljLnB1c2goWyJpIixuLCI9MCJdLmpvaW4oIiIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWY9dSx1PXRbbl0sMD09PW4/Yy5wdXNoKFsiZCIsaSwicyIsbiwiPXQiLGksInAiLHVdLmpvaW4oIiIpKTpjLnB1c2goWyJkIixpLCJzIixuLCI9KHQiLGksInAiLHUsIi1zIixmLCIqdCIsaSwicCIsZiwiKSJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKCJ2YXIgIitjLmpvaW4oIiwiKSksbj1hLTE7bj49MDstLW4pdT10W25dLGwucHVzaChbImZvcihpIixuLCI9MDtpIixuLCI8cyIsdSwiOysraSIsbiwiKXsiXS5qb2luKCIiKSk7Zm9yKGwucHVzaChyKSxuPTA7bjxhOysrbil7Zm9yKGY9dSx1PXRbbl0saT0wO2k8bzsrK2kpbC5wdXNoKFsicCIsaSwiKz1kIixpLCJzIixuXS5qb2luKCIiKSk7cyYmKG4+MCYmbC5wdXNoKFsiaW5kZXhbIixmLCJdLT1zIixmXS5qb2luKCIiKSksbC5wdXNoKFsiKytpbmRleFsiLHUsIl0iXS5qb2luKCIiKSkpLGwucHVzaCgifSIpfXJldHVybiBsLmpvaW4oIlxuIil9ZnVuY3Rpb24gaSh0LGUscixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1yLmFycmF5QXJncy5sZW5ndGgscz1yLmJsb2NrU2l6ZSxsPXIuaW5kZXhBcmdzLmxlbmd0aD4wLGM9W10sdT0wO3U8bzsrK3UpYy5wdXNoKFsidmFyIG9mZnNldCIsdSwiPXAiLHVdLmpvaW4oIiIpKTtmb3IodmFyIHU9dDt1PGE7Kyt1KWMucHVzaChbImZvcih2YXIgaiIrdSsiPVNTWyIsZVt1XSwiXXwwO2oiLHUsIj4wOyl7Il0uam9pbigiIikpLGMucHVzaChbImlmKGoiLHUsIjwiLHMsIil7Il0uam9pbigiIikpLGMucHVzaChbInMiLGVbdV0sIj1qIix1XS5qb2luKCIiKSksYy5wdXNoKFsiaiIsdSwiPTAiXS5qb2luKCIiKSksYy5wdXNoKFsifWVsc2V7cyIsZVt1XSwiPSIsc10uam9pbigiIikpLGMucHVzaChbImoiLHUsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJmMucHVzaChbImluZGV4WyIsZVt1XSwiXT1qIix1XS5qb2luKCIiKSk7Zm9yKHZhciB1PTA7dTxvOysrdSl7Zm9yKHZhciBmPVsib2Zmc2V0Iit1XSxoPXQ7aDxhOysraClmLnB1c2goWyJqIixoLCIqdCIsdSwicCIsZVtoXV0uam9pbigiIikpO2MucHVzaChbInAiLHUsIj0oIixmLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX1jLnB1c2gobihlLHIsaSkpO2Zvcih2YXIgdT10O3U8YTsrK3UpYy5wdXNoKCJ9Iik7cmV0dXJuIGMuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj10LmJvZHksaT1bXSxhPVtdLG89MDtvPHQuYXJncy5sZW5ndGg7KytvKXt2YXIgcz10LmFyZ3Nbb107aWYoIShzLmNvdW50PD0wKSl7dmFyIGw9bmV3IFJlZ0V4cChzLm5hbWUsImciKSxjPSIiLHU9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZSJvZmZzZXQiOnZhciBmPWUub2Zmc2V0QXJnSW5kZXguaW5kZXhPZihvKTt1PWUub2Zmc2V0QXJnc1tmXS5hcnJheSxjPSIrcSIrZjtjYXNlImFycmF5IjpjPSJwIit1K2M7dmFyIGg9ImwiK28sZD0iYSIrdTtpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1t1XSkxPT09cy5jb3VudD8iZ2VuZXJpYyI9PT1yW3VdP3MubHZhbHVlPyhpLnB1c2goWyJ2YXIgIixoLCI9IixkLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGgpLGEucHVzaChbZCwiLnNldCgiLGMsIiwiLGgsIikiXS5qb2luKCIiKSkpOm49bi5yZXBsYWNlKGwsW2QsIi5nZXQoIixjLCIpIl0uam9pbigiIikpOm49bi5yZXBsYWNlKGwsW2QsIlsiLGMsIl0iXS5qb2luKCIiKSk6ImdlbmVyaWMiPT09clt1XT8oaS5wdXNoKFsidmFyICIsaCwiPSIsZCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxoKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCIuc2V0KCIsYywiLCIsaCwiKSJdLmpvaW4oIiIpKSk6KGkucHVzaChbInZhciAiLGgsIj0iLGQsIlsiLGMsIl0iXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxoKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCJbIixjLCJdPSIsaF0uam9pbigiIikpKTtlbHNle2Zvcih2YXIgcD1bcy5uYW1lXSxtPVtjXSx2PTA7djxNYXRoLmFicyhlLmFycmF5QmxvY2tJbmRpY2VzW3VdKTt2KyspcC5wdXNoKCJcXHMqXFxbKFteXFxdXSspXFxdIiksbS5wdXNoKCIkIisodisxKSsiKnQiK3UrImIiK3YpO2lmKGw9bmV3IFJlZ0V4cChwLmpvaW4oIiIpLCJnIiksYz1tLmpvaW4oIisiKSwiZ2VuZXJpYyI9PT1yW3VdKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhIik7bj1uLnJlcGxhY2UobCxbZCwiWyIsYywiXSJdLmpvaW4oIiIpKX1icmVhaztjYXNlInNjYWxhciI6bj1uLnJlcGxhY2UobCwiWSIrZS5zY2FsYXJBcmdzLmluZGV4T2YobykpO2JyZWFrO2Nhc2UiaW5kZXgiOm49bi5yZXBsYWNlKGwsImluZGV4Iik7YnJlYWs7Y2FzZSJzaGFwZSI6bj1uLnJlcGxhY2UobCwic2hhcGUiKX19fXJldHVybltpLmpvaW4oIlxuIiksbixhLmpvaW4oIlxuIildLmpvaW4oIlxuIikudHJpbSgpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cZCsvKTthPWE/YVswXToiIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT0idSIraS5jaGFyQXQoMSkrYTplW25dPWkuY2hhckF0KDApK2Esbj4wJiYocj1yJiZlW25dPT09ZVtuLTFdKX1yZXR1cm4gcj9lWzBdOmUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLGw9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksdT1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxmPTA7Zjx0LmFycmF5QXJncy5sZW5ndGg7KytmKXVbZl09ZVsyKmZdLGxbZl09ZVsyKmYrMV07Zm9yKHZhciBoPVtdLGQ9W10scD1bXSxtPVtdLHY9W10sZj0wO2Y8dC5hcnJheUFyZ3MubGVuZ3RoOysrZil7dC5hcnJheUJsb2NrSW5kaWNlc1tmXTwwPyhwLnB1c2goMCksbS5wdXNoKHIpLGgucHVzaChyKSxkLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2ZdKSk6KHAucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2ZdKSxtLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tmXStyKSxoLnB1c2goMCksZC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbZl0pKTtmb3IodmFyIGc9W10seT0wO3k8bFtmXS5sZW5ndGg7eSsrKXBbZl08PWxbZl1beV0mJmxbZl1beV08bVtmXSYmZy5wdXNoKGxbZl1beV0tcFtmXSk7di5wdXNoKGcpfWZvcih2YXIgYj1bIlNTIl0seD1bIid1c2Ugc3RyaWN0JyJdLF89W10seT0wO3k8cjsrK3kpXy5wdXNoKFsicyIseSwiPVNTWyIseSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIGY9MDtmPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2Ype2IucHVzaCgiYSIrZiksYi5wdXNoKCJ0IitmKSxiLnB1c2goInAiK2YpO2Zvcih2YXIgeT0wO3k8cjsrK3kpXy5wdXNoKFsidCIsZiwicCIseSwiPXQiLGYsIlsiLHBbZl0reSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIHk9MDt5PE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbZl0pOysreSlfLnB1c2goWyJ0IixmLCJiIix5LCI9dCIsZiwiWyIsaFtmXSt5LCJdIl0uam9pbigiIikpfWZvcih2YXIgZj0wO2Y8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2YpYi5wdXNoKCJZIitmKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmXy5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXtmb3IodmFyIHc9bmV3IEFycmF5KHIpLGY9MDtmPHI7KytmKXdbZl09IjAiO18ucHVzaChbImluZGV4PVsiLHcuam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcih2YXIgZj0wO2Y8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2Ype2Zvcih2YXIgTT10Lm9mZnNldEFyZ3NbZl0sVD1bXSx5PTA7eTxNLm9mZnNldC5sZW5ndGg7Kyt5KTAhPT1NLm9mZnNldFt5XSYmKDE9PT1NLm9mZnNldFt5XT9ULnB1c2goWyJ0IixNLmFycmF5LCJwIix5XS5qb2luKCIiKSk6VC5wdXNoKFtNLm9mZnNldFt5XSwiKnQiLE0uYXJyYXksInAiLHldLmpvaW4oIiIpKSk7MD09PVQubGVuZ3RoP18ucHVzaCgicSIrZisiPTAiKTpfLnB1c2goWyJxIixmLCI9IixULmpvaW4oIisiKV0uam9pbigiIikpfXZhciBrPWMoW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Xz1fLmNvbmNhdChrKSx4LnB1c2goInZhciAiK18uam9pbigiLCIpKTtmb3IodmFyIGY9MDtmPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2YpeC5wdXNoKCJwIitmKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ4LnB1c2gobyh0LnByZSx0LHUpKTt2YXIgQT1vKHQuYm9keSx0LHUpLEU9YSh2KTtFPHI/eC5wdXNoKGkoRSx2WzBdLHQsQSkpOngucHVzaChuKHZbMF0sdCxBKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJngucHVzaChvKHQucG9zdCx0LHUpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgIixlLCI6XG4iK3guam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIik7dmFyIFM9W3QuZnVuY05hbWV8fCJ1bm5hbWVkIiwiX2N3aXNlX2xvb3BfIixsWzBdLmpvaW4oInMiKSwibSIsRSxzKHUpXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsiZnVuY3Rpb24gIixTLCIoIixiLmpvaW4oIiwiKSwiKXsiLHguam9pbigiXG4iKSwifSByZXR1cm4gIixTXS5qb2luKCIiKSkoKX12YXIgYz10KCJ1bmlxIik7ZS5leHBvcnRzPWx9LHt1bmlxOjU1MX1dLDExMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10sbj10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLG4sIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgZj10LmFycmF5QXJnc1t1XTtyLnB1c2goWyJ0IixmLCI9YXJyYXkiLGYsIi5kdHlwZSwiLCJyIixmLCI9YXJyYXkiLGYsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2YpLGEucHVzaCgiciIrZiksby5wdXNoKCJ0IitmKSxvLnB1c2goInIiK2YrIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitmKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2YrIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitmKyIub2Zmc2V0fDAiKSx1PjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitmKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitmKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrIl0iKSl9dC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goImlmICghKCIrbC5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uYWxpdHkhJykiKSxlLnB1c2goImZvcih2YXIgc2hhcGVJbmRleD1hcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGgtIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiOyBzaGFwZUluZGV4LS0+MDspIHsiKSxlLnB1c2goImlmICghKCIrYy5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJykiKSxlLnB1c2goIn0iKSk7Zm9yKHZhciB1PTA7dTx0LnNjYWxhckFyZ3MubGVuZ3RoOysrdSlzLnB1c2goInNjYWxhciIrdC5zY2FsYXJBcmdzW3VdKTtyZXR1cm4gci5wdXNoKFsidHlwZT1bIixvLmpvaW4oIiwiKSwiXS5qb2luKCkiXS5qb2luKCIiKSksci5wdXNoKCJwcm9jPUNBQ0hFRFt0eXBlXSIpLGUucHVzaCgidmFyICIrci5qb2luKCIsIikpLGUucHVzaChbImlmKCFwcm9jKXsiLCJDQUNIRURbdHlwZV09cHJvYz1jb21waWxlKFsiLGEuam9pbigiLCIpLCJdKX0iLCJyZXR1cm4gcHJvYygiLHMuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XG4iK2Uuam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIiksbmV3IEZ1bmN0aW9uKCJjb21waWxlIixlLmpvaW4oIlxuIikpKGkuYmluZCh2b2lkIDAsdCkpfXZhciBpPXQoIi4vY29tcGlsZS5qcyIpO2UuZXhwb3J0cz1ufSx7Ii4vY29tcGlsZS5qcyI6MTEwfV0sMTEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEwOX1dLDExMzpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIG8odChlKSxyKX19ZnVuY3Rpb24gcih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1UPzEwOmE+PWs/NTphPj1BPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49VD8xMDphPj1rPzU6YT49QT8yOjEpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PVQ/aSo9MTA6YT49az9pKj01OmE+PUEmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgbz1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0scz1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD1lKHQpKSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19LGw9cyhvKSxjPWwucmlnaHQsdT1sLmxlZnQsZj1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPXIpO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGgtMSxhPXRbMF0sbz1uZXcgQXJyYXkoaTwwPzA6aSk7bjxpOylvW25dPWUoYSxhPXRbKytuXSk7cmV0dXJuIG99LGg9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGw9dC5sZW5ndGgsYz1lLmxlbmd0aCx1PW5ldyBBcnJheShsKmMpO2ZvcihudWxsPT1uJiYobj1yKSxpPW89MDtpPGw7KytpKWZvcihzPXRbaV0sYT0wO2E8YzsrK2EsKytvKXVbb109bihzLGVbYV0pO3JldHVybiB1fSxkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxwPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LG09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89LTEscz0wLGw9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9cCh0W29dKSl8fChuPXItcyxzKz1uLysrYSxsKz1uKihyLXMpKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9cChlKHRbb10sbyx0KSkpfHwobj1yLXMscys9bi8rK2EsbCs9biooci1zKSk7aWYoYT4xKXJldHVybiBsLyhhLTEpfSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bSh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19LHk9QXJyYXkucHJvdG90eXBlLGI9eS5zbGljZSx4PXkubWFwLF89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxNPWZ1bmN0aW9uKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfSxUPU1hdGguc3FydCg1MCksaz1NYXRoLnNxcnQoMTApLEE9TWF0aC5zcXJ0KDIpLEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGw9LTE7aWYoZT0rZSx0PSt0LHI9K3IsdD09PWUmJnI+MClyZXR1cm5bdF07aWYoKGk9ZTx0KSYmKGE9dCx0PWUsZT1hKSwwPT09KHM9bih0LGUscikpfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcih0PU1hdGguY2VpbCh0L3MpLGU9TWF0aC5mbG9vcihlL3MpLG89bmV3IEFycmF5KGE9TWF0aC5jZWlsKGUtdCsxKSk7KytsPGE7KW9bbF09KHQrbCkqcztlbHNlIGZvcih0PU1hdGguZmxvb3IodCpzKSxlPU1hdGguY2VpbChlKnMpLG89bmV3IEFycmF5KGE9TWF0aC5jZWlsKHQtZSsxKSk7KytsPGE7KW9bbF09KHQtbCkvcztyZXR1cm4gaSYmby5yZXZlcnNlKCksb30sUz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX0sTD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGEsbyxzPXQubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPWUodFthXSxhLHQpO3ZhciB1PXIobCksZj11WzBdLGg9dVsxXSxkPW4obCxmLGgpO0FycmF5LmlzQXJyYXkoZCl8fChkPWkoZixoLGQpLGQ9TShNYXRoLmNlaWwoZi9kKSpkLE1hdGguZmxvb3IoaC9kKSpkLGQpKTtmb3IodmFyIHA9ZC5sZW5ndGg7ZFswXTw9ZjspZC5zaGlmdCgpLC0tcDtmb3IoO2RbcC0xXT5oOylkLnBvcCgpLC0tcDt2YXIgbSx2PW5ldyBBcnJheShwKzEpO2ZvcihhPTA7YTw9cDsrK2EpbT12W2FdPVtdLG0ueDA9YT4wP2RbYS0xXTpmLG0ueDE9YTxwP2RbYV06aDtmb3IoYT0wO2E8czsrK2Epbz1sW2FdLGY8PW8mJm88PWgmJnZbYyhkLG8sMCxwKV0ucHVzaCh0W2FdKTtyZXR1cm4gdn12YXIgZT13LHI9ZyxuPVM7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpfKHIpLHQpOmV9LHQuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6XyhbZVswXSxlWzFdXSksdCk6cn0sdC50aHJlc2hvbGRzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6XyhBcnJheS5pc0FycmF5KGUpP2IuY2FsbChlKTplKSx0KTpufSx0fSxDPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1yJiYocj1wKSxuPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fG48MilyZXR1cm4rcih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rcih0W24tMV0sbi0xLHQpO3ZhciBuLGk9KG4tMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rcih0W2FdLGEsdCk7cmV0dXJuIG8rKCtyKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxJPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD14LmNhbGwodCxwKS5zb3J0KG8pLE1hdGguY2VpbCgoci1lKS8oMiooQyh0LC43NSktQyh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSp2KHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LFA9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmcj5uJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+biYmKG49cik7cmV0dXJuIG59LHo9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cCh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXAoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LE89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9LTEsYT1bXTtpZihudWxsPT1lKWZvcig7KytpPG47KWlzTmFOKHI9cCh0W2ldKSl8fGEucHVzaChyKTtlbHNlIGZvcig7KytpPG47KWlzTmFOKHI9cChlKHRbaV0saSx0KSkpfHxhLnB1c2gocik7cmV0dXJuIEMoYS5zb3J0KG8pLC41KX0sUj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihuPXRbaV0sZT1uLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfSxGPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJm4+ciYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZuPnImJihuPXIpO3JldHVybiBufSxqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSxOPWZ1bmN0aW9uKHQsZSl7aWYocj10Lmxlbmd0aCl7dmFyIHIsbixpPTAsYT0wLHM9dFthXTtmb3IobnVsbD09ZSYmKGU9byk7KytpPHI7KShlKG49dFtpXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9bixhPWkpO3JldHVybiAwPT09ZShzLHMpP2E6dm9pZCAwfX0sQj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPG47KShyPSt0W2ldKSYmKGErPXIpO2Vsc2UgZm9yKDsrK2k8bjspKHI9K2UodFtpXSxpLHQpKSYmKGErPXIpO3JldHVybiBhfSxWPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9Rih0LGEpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksbz0tMSxzPW5bZV09bmV3IEFycmF5KGkpOysrbzxpOylzW29dPXRbb11bZV07cmV0dXJuIG59LEg9ZnVuY3Rpb24oKXtyZXR1cm4gVihhcmd1bWVudHMpfTt0LmJpc2VjdD1jLHQuYmlzZWN0UmlnaHQ9Yyx0LmJpc2VjdExlZnQ9dSx0LmFzY2VuZGluZz1vLHQuYmlzZWN0b3I9cyx0LmNyb3NzPWgsdC5kZXNjZW5kaW5nPWQsdC5kZXZpYXRpb249dix0LmV4dGVudD1nLHQuaGlzdG9ncmFtPUwsdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPUksdC50aHJlc2hvbGRTY290dD1ELHQudGhyZXNob2xkU3R1cmdlcz1TLHQubWF4PVAsdC5tZWFuPXosdC5tZWRpYW49Tyx0Lm1lcmdlPVIsdC5taW49Rix0LnBhaXJzPWYsdC5wZXJtdXRlPWosdC5xdWFudGlsZT1DLHQucmFuZ2U9TSx0LnNjYW49Tix0LnNodWZmbGU9Qix0LnN1bT1VLHQudGlja3M9RSx0LnRpY2tJbmNyZW1lbnQ9bix0LnRpY2tTdGVwPWksdC50cmFuc3Bvc2U9Vix0LnZhcmlhbmNlPW0sdC56aXA9SCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoKXt9ZnVuY3Rpb24gcih0LHIpe3ZhciBuPW5ldyBlO2lmKHQgaW5zdGFuY2VvZiBlKXQuZWFjaChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLGE9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1yKWZvcig7KythPG87KW4uc2V0KGEsdFthXSk7ZWxzZSBmb3IoOysrYTxvOyluLnNldChyKGk9dFthXSxhLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIHMgaW4gdCluLnNldChzLHRbc10pO3JldHVybiBufWZ1bmN0aW9uIG4oKXtyZXR1cm57fX1mdW5jdGlvbiBpKHQsZSxyKXt0W2VdPXJ9ZnVuY3Rpb24gYSgpe3JldHVybiByKCl9ZnVuY3Rpb24gbyh0LGUscil7dC5zZXQoZSxyKX1mdW5jdGlvbiBzKCl7fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1uZXcgcztpZih0IGluc3RhbmNlb2Ygcyl0LmVhY2goZnVuY3Rpb24odCl7ci5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGgKO2lmKG51bGw9PWUpZm9yKDsrK248aTspci5hZGQodFtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLmFkZChlKHRbbl0sbix0KSl9cmV0dXJuIHJ9ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbixpLGEpe2lmKG4+PXUubGVuZ3RoKXJldHVybiBudWxsIT1zJiZlLnNvcnQocyksbnVsbCE9bD9sKGUpOmU7Zm9yKHZhciBvLGMsZixoPS0xLGQ9ZS5sZW5ndGgscD11W24rK10sbT1yKCksdj1pKCk7KytoPGQ7KShmPW0uZ2V0KG89cChjPWVbaF0pKyIiKSk/Zi5wdXNoKGMpOm0uc2V0KG8sW2NdKTtyZXR1cm4gbS5lYWNoKGZ1bmN0aW9uKGUscil7YSh2LHIsdChlLG4saSxhKSl9KSx2fWZ1bmN0aW9uIGUodCxyKXtpZigrK3I+dS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG4saT1mW3ItMV07cmV0dXJuIG51bGwhPWwmJnI+PXUubGVuZ3RoP249dC5lbnRyaWVzKCk6KG49W10sdC5lYWNoKGZ1bmN0aW9uKHQsaSl7bi5wdXNoKHtrZXk6aSx2YWx1ZXM6ZSh0LHIpfSl9KSksbnVsbCE9aT9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LmtleSxlLmtleSl9KTpufXZhciBzLGwsYyx1PVtdLGY9W107cmV0dXJuIGM9e29iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gdChlLDAsbixpKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHIpe3JldHVybiBlKHQociwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gdS5wdXNoKHQpLGN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBmW3UubGVuZ3RoLTFdPXQsY30sc29ydFZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gcz10LGN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gbD10LGN9fX0sdT1yLnByb3RvdHlwZTtzLnByb3RvdHlwZT1sLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6dS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0Kz0iIix0aGlzWyIkIit0XT10LHRoaXN9LHJlbW92ZTp1LnJlbW92ZSxjbGVhcjp1LmNsZWFyLHZhbHVlczp1LmtleXMsc2l6ZTp1LnNpemUsZW1wdHk6dS5lbXB0eSxlYWNoOnUuZWFjaH07dmFyIGY9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSxoPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sZD1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX07dC5uZXN0PWMsdC5zZXQ9bCx0Lm1hcD1yLHQua2V5cz1mLHQudmFsdWVzPWgsdC5lbnRyaWVzPWQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMTU6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbih0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9SS5leGVjKHQpKT8oZT1wYXJzZUludChlWzFdLDE2KSxuZXcgbChlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSkpOihlPUQuZXhlYyh0KSk/aShwYXJzZUludChlWzFdLDE2KSk6KGU9UC5leGVjKHQpKT9uZXcgbChlWzFdLGVbMl0sZVszXSwxKTooZT16LmV4ZWModCkpP25ldyBsKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPU8uZXhlYyh0KSk/YShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1SLmV4ZWModCkpP2EoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9Ri5leGVjKHQpKT9jKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9ai5leGVjKHQpKT9jKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6Ti5oYXNPd25Qcm9wZXJ0eSh0KT9pKE5bdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IGwodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIG48PTAmJih0PWU9cj1OYU4pLG5ldyBsKHQsZSxyLG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiByfHwodD1uKHQpKSx0Pyh0PXQucmdiKCksbmV3IGwodC5yLHQuZyx0LmIsdC5vcGFjaXR5KSk6bmV3IGx9ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/byh0KTpuZXcgbCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gbCh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGgodCxlLHIsbil9ZnVuY3Rpb24gdSh0KXtpZih0IGluc3RhbmNlb2YgaClyZXR1cm4gbmV3IGgodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygcnx8KHQ9bih0KSksIXQpcmV0dXJuIG5ldyBoO2lmKHQgaW5zdGFuY2VvZiBoKXJldHVybiB0O3Q9dC5yZ2IoKTt2YXIgZT10LnIvMjU1LGk9dC5nLzI1NSxhPXQuYi8yNTUsbz1NYXRoLm1pbihlLGksYSkscz1NYXRoLm1heChlLGksYSksbD1OYU4sYz1zLW8sdT0ocytvKS8yO3JldHVybiBjPyhsPWU9PT1zPyhpLWEpL2MrNiooaTxhKTppPT09cz8oYS1lKS9jKzI6KGUtaSkvYys0LGMvPXU8LjU/cytvOjItcy1vLGwqPTYwKTpjPXU+MCYmdTwxPzA6bCxuZXcgaChsLGMsdSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGYodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3UodCk6bmV3IGgodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIGgodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIHAodCl7aWYodCBpbnN0YW5jZW9mIHYpcmV0dXJuIG5ldyB2KHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE0pe3ZhciBlPXQuaCpCO3JldHVybiBuZXcgdih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBsfHwodD1vKHQpKTt2YXIgcj14KHQuciksbj14KHQuZyksaT14KHQuYiksYT1nKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvVikscz1nKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9IKTtyZXR1cm4gbmV3IHYoMTE2KnMtMTYsNTAwKihhLXMpLDIwMCoocy1nKCguMDE5MzMzOSpyKy4xMTkxOTIqbisuOTUwMzA0MSppKS9xKSksdC5vcGFjaXR5KX1mdW5jdGlvbiBtKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9wKHQpOm5ldyB2KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBnKHQpe3JldHVybiB0Plc/TWF0aC5wb3codCwxLzMpOnQvWCtHfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+WT90KnQqdDpYKih0LUcpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiB4KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIF8odCl7aWYodCBpbnN0YW5jZW9mIE0pcmV0dXJuIG5ldyBNKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHZ8fCh0PXAodCkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqVTtyZXR1cm4gbmV3IE0oZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gdyh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Xyh0KTpuZXcgTSh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gTSh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gVCh0KXtpZih0IGluc3RhbmNlb2YgQSlyZXR1cm4gbmV3IEEodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgbHx8KHQ9byh0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KHJ0Km4rdHQqZS1ldCpyKS8ocnQrdHQtZXQpLGE9bi1pLHM9KCQqKHItaSktSyphKS9RLGM9TWF0aC5zcXJ0KHMqcythKmEpLygkKmkqKDEtaSkpLHU9Yz9NYXRoLmF0YW4yKHMsYSkqVS0xMjA6TmFOO3JldHVybiBuZXcgQSh1PDA/dSszNjA6dSxjLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9UKHQpOm5ldyBBKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBBKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgRT1mdW5jdGlvbih0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9LFM9IlxccyooWystXT9cXGQrKVxccyoiLEw9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsST0vXiMoWzAtOWEtZl17M30pJC8sRD0vXiMoWzAtOWEtZl17Nn0pJC8sUD1uZXcgUmVnRXhwKCJecmdiXFwoIitbUyxTLFNdKyJcXCkkIiksej1uZXcgUmVnRXhwKCJecmdiXFwoIitbQyxDLENdKyJcXCkkIiksTz1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1MsUyxTLExdKyJcXCkkIiksUj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW0MsQyxDLExdKyJcXCkkIiksRj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbTCxDLENdKyJcXCkkIiksaj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0wsQyxDLExdKyJcXCkkIiksTj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtFKHIsbix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLEUobCxzLGUocix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IGwodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGwodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4gdD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksKDE9PT10PyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksRShoLGYsZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgaCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgbChkKHQ+PTI0MD90LTI0MDp0KzEyMCxpLG4pLGQodCxpLG4pLGQodDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIEI9TWF0aC5QSS8xODAsVT0xODAvTWF0aC5QSSxWPS45NTA0NyxIPTEscT0xLjA4ODgzLEc9NC8yOSxZPTYvMjksWD0zKlkqWSxXPVkqWSpZO0UodixtLGUocix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiB0PUgqeSh0KSxlPVYqeShlKSxyPXEqeShyKSxuZXcgbChiKDMuMjQwNDU0MiplLTEuNTM3MTM4NSp0LS40OTg1MzE0KnIpLGIoLS45NjkyNjYqZSsxLjg3NjAxMDgqdCsuMDQxNTU2KnIpLGIoLjA1NTY0MzQqZS0uMjA0MDI1OSp0KzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKSxFKE0sdyxlKHIse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0odGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKS5yZ2IoKX19KSk7dmFyIFo9LS4xNDg2MSxKPTEuNzgyNzcsSz0tLjI5MjI3LFE9LS45MDY0OSwkPTEuOTcyOTQsdHQ9JCpRLGV0PSQqSixydD1KKkstUSpaO0UoQSxrLGUocix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgQSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqQixlPSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgbCgyNTUqKGUrciooWipuK0oqaSkpLDI1NSooZStyKihLKm4rUSppKSksMjU1KihlK3IqKCQqbikpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9bix0LnJnYj1zLHQuaHNsPWYsdC5sYWI9bSx0LmhjbD13LHQuY3ViZWhlbGl4PWssT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMTY6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyByKGkpfWZ1bmN0aW9uIHIodCl7dGhpcy5fPXR9ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtpZihuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHIsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZigocj10W25dKS5uYW1lPT09ZSlyZXR1cm4gci52YWx1ZX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24paWYodFtuXS5uYW1lPT09ZSl7dFtuXT1vLHQ9dC5zbGljZSgwLG4pLmNvbmNhdCh0LnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiBudWxsIT1yJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpyfSksdH12YXIgbz17dmFsdWU6ZnVuY3Rpb24oKXt9fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cixvbjpmdW5jdGlvbih0LGUpe3ZhciByLG89dGhpcy5fLHM9bih0KyIiLG8pLGw9LTEsYz1zLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2w8YzspaWYocj0odD1zW2xdKS50eXBlKW9bcl09YShvW3JdLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKHIgaW4gbylvW3JdPWEob1tyXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2w8YzspaWYoKHI9KHQ9c1tsXSkudHlwZSkmJihyPWkob1tyXSx0Lm5hbWUpKSlyZXR1cm4gcn19LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHIodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihuPXRoaXMuX1t0XSxhPTAscj1uLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNzpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihpLGEpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9hKG4sZSgiZDMtcXVhZHRyZWUiKSxlKCJkMy1jb2xsZWN0aW9uIiksZSgiZDMtZGlzcGF0Y2giKSxlKCJkMy10aW1lciIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1xdWFkdHJlZSIsImQzLWNvbGxlY3Rpb24iLCJkMy1kaXNwYXRjaCIsImQzLXRpbWVyIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMsaS5kMyxpLmQzLGkuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIHModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC55fXZhciBmPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilpPW5bcl0sbys9aS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKWk9bltyXSxpLngtPW8saS55LT1zfXZhciBuO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkPWZ1bmN0aW9uKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KHQsZSxyLG4saSl7dmFyIGE9dC5kYXRhLG89dC5yLHM9bStvO3tpZighYSlyZXR1cm4gZT5oK3N8fG48aC1zfHxyPnArc3x8aTxwLXM7aWYoYS5pbmRleD5mLmluZGV4KXt2YXIgbD1oLWEueC1hLnZ4LHU9cC1hLnktYS52eSxnPWwqbCt1KnU7ZzxzKnMmJigwPT09bCYmKGw9ZCgpLGcrPWwqbCksMD09PXUmJih1PWQoKSxnKz11KnUpLGc9KHMtKGc9TWF0aC5zcXJ0KGcpKSkvZypjLGYudngrPShsKj1nKSoocz0obyo9bykvKHYrbykpLGYudnkrPSh1Kj1nKSpzLGEudngtPWwqKHM9MS1zKSxhLnZ5LT11KnMpfX19Zm9yKHZhciByLGksZixoLHAsbSx2LGc9cy5sZW5ndGgseT0wO3k8dTsrK3kpZm9yKGk9ZS5xdWFkdHJlZShzLGEsbykudmlzaXRBZnRlcihuKSxyPTA7cjxnOysrcilmPXNbcl0sbT1sW2YuaW5kZXhdLHY9bSptLGg9Zi54K2YudngscD1mLnkrZi52eSxpLnZpc2l0KHQpfWZ1bmN0aW9uIG4odCl7aWYodC5kYXRhKXJldHVybiB0LnI9bFt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBpKCl7aWYocyl7dmFyIGUscixuPXMubGVuZ3RoO2ZvcihsPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXNbZV0sbFtyLmluZGV4XT0rdChyLGUscyl9fXZhciBzLGwsYz0xLHU9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aChudWxsPT10PzE6K3QpKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cz10LGkoKX0sci5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHIpOnV9LHIuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3Qscik6Y30sci5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpoKCtlKSxpKCkscik6dH0scn0sbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiAxL01hdGgubWluKHBbdC5zb3VyY2UuaW5kZXhdLHBbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBuKGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxiOysrcilmb3IodmFyIGksYSxvLHMsbCxmLGgscD0wO3A8bjsrK3ApaT10W3BdLGE9aS5zb3VyY2Usbz1pLnRhcmdldCxzPW8ueCtvLnZ4LWEueC1hLnZ4fHxkKCksbD1vLnkrby52eS1hLnktYS52eXx8ZCgpLGY9TWF0aC5zcXJ0KHMqcytsKmwpLGY9KGYtdVtwXSkvZiplKmNbcF0scyo9ZixsKj1mLG8udngtPXMqKGg9bVtwXSksby52eS09bCpoLGEudngrPXMqKGg9MS1oKSxhLnZ5Kz1sKmh9ZnVuY3Rpb24gaSgpe2lmKGYpe3ZhciBlLG4saT1mLmxlbmd0aCxzPXQubGVuZ3RoLGg9ci5tYXAoZix2KTtmb3IoZT0wLHA9bmV3IEFycmF5KGkpO2U8czsrK2Upbj10W2VdLG4uaW5kZXg9ZSwib2JqZWN0IiE9dHlwZW9mIG4uc291cmNlJiYobi5zb3VyY2U9bChoLG4uc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBuLnRhcmdldCYmKG4udGFyZ2V0PWwoaCxuLnRhcmdldCkpLHBbbi5zb3VyY2UuaW5kZXhdPShwW24uc291cmNlLmluZGV4XXx8MCkrMSxwW24udGFyZ2V0LmluZGV4XT0ocFtuLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKGU9MCxtPW5ldyBBcnJheShzKTtlPHM7KytlKW49dFtlXSxtW2VdPXBbbi5zb3VyY2UuaW5kZXhdLyhwW24uc291cmNlLmluZGV4XStwW24udGFyZ2V0LmluZGV4XSk7Yz1uZXcgQXJyYXkocyksYSgpLHU9bmV3IEFycmF5KHMpLG8oKX19ZnVuY3Rpb24gYSgpe2lmKGYpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKWNbZV09K2codFtlXSxlLHQpfWZ1bmN0aW9uIG8oKXtpZihmKWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl1W2VdPSt5KHRbZV0sZSx0KX12YXIgYyx1LGYscCxtLHY9cyxnPWUseT1oKDMwKSxiPTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7Zj10LGkoKX0sbi5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkoKSxuKTp0fSxuLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQsbik6dn0sbi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LG4pOmJ9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpoKCt0KSxhKCksbik6Z30sbi5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmgoK3QpLG8oKSxuKTp5fSxufSx2PTEwLGc9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2EoKSx5LmNhbGwoInRpY2siLGwpLGM8dSYmKG0uc3RvcCgpLHkuY2FsbCgiZW5kIixsKSl9ZnVuY3Rpb24gYSgpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IoYys9KGgtYykqZixwLmVhY2goZnVuY3Rpb24odCl7dChjKX0pLGU9MDtlPG47KytlKXI9dFtlXSxudWxsPT1yLmZ4P3IueCs9ci52eCo9ZDooci54PXIuZngsci52eD0wKSxudWxsPT1yLmZ5P3IueSs9ci52eSo9ZDooci55PXIuZnksci52eT0wKX1mdW5jdGlvbiBvKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKGU9dFtyXSxlLmluZGV4PXIsaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9dipNYXRoLnNxcnQociksYT1yKmc7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9dmFyIGwsYz0xLHU9LjAwMSxmPTEtTWF0aC5wb3codSwxLzMwMCksaD0wLGQ9LjYscD1yLm1hcCgpLG09aS50aW1lcihlKSx5PW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtyZXR1cm4gbnVsbD09dCYmKHQ9W10pLG8oKSxsPXt0aWNrOmEscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBtLnJlc3RhcnQoZSksbH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBtLnN0b3AoKSxsfSxub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8oKSxwLmVhY2gocyksbCk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCk6Y30sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxsKTorZn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3QsbCk6aH0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0xLXQsbCk6MS1kfSxmb3JjZTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PWU/cC5yZW1vdmUodCk6cC5zZXQodCxzKGUpKSxsKTpwLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09bj9uPTEvMDpuKj1uLGM9MDtjPHU7KytjKXM9dFtjXSxpPWUtcy54LGE9ci1zLnksKG89aSppK2EqYSk8biYmKGw9cyxuPW8pO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHkub24odCxlKSxsKTp5Lm9uKHQpfX19LGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByLGw9YS5sZW5ndGgsZj1lLnF1YWR0cmVlKGEsYyx1KS52aXNpdEFmdGVyKG4pO2ZvcihzPXQscj0wO3I8bDsrK3Ipbz1hW3JdLGYudmlzaXQoaSl9ZnVuY3Rpb24gcigpe2lmKGEpe3ZhciB0LGUscj1hLmxlbmd0aDtmb3IobD1uZXcgQXJyYXkociksdD0wO3Q8cjsrK3QpZT1hW3RdLGxbZS5pbmRleF09K2YoZSx0LGEpfX1mdW5jdGlvbiBuKHQpe3ZhciBlLHIsbixpLGEsbz0wLHM9MDtpZih0Lmxlbmd0aCl7Zm9yKG49aT1hPTA7YTw0OysrYSkoZT10W2FdKSYmKHI9TWF0aC5hYnMoZS52YWx1ZSkpJiYobys9ZS52YWx1ZSxzKz1yLG4rPXIqZS54LGkrPXIqZS55KTt0Lng9bi9zLHQueT1pL3N9ZWxzZXtlPXQsZS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tvKz1sW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9b31mdW5jdGlvbiBpKHQsZSxyLG4pe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBpPXQueC1vLngsYT10Lnktby55LGM9bi1lLHU9aSppK2EqYTtpZihjKmMvdjx1KXJldHVybiB1PG0mJigwPT09aSYmKGk9ZCgpLHUrPWkqaSksMD09PWEmJihhPWQoKSx1Kz1hKmEpLHU8cCYmKHU9TWF0aC5zcXJ0KHAqdSkpLG8udngrPWkqdC52YWx1ZSpzL3Usby52eSs9YSp0LnZhbHVlKnMvdSksITA7aWYoISh0Lmxlbmd0aHx8dT49bSkpeyh0LmRhdGEhPT1vfHx0Lm5leHQpJiYoMD09PWkmJihpPWQoKSx1Kz1pKmkpLDA9PT1hJiYoYT1kKCksdSs9YSphKSx1PHAmJih1PU1hdGguc3FydChwKnUpKSk7ZG97dC5kYXRhIT09byYmKGM9bFt0LmRhdGEuaW5kZXhdKnMvdSxvLnZ4Kz1pKmMsby52eSs9YSpjKX13aGlsZSh0PXQubmV4dCl9fXZhciBhLG8scyxsLGY9aCgtMzApLHA9MSxtPTEvMCx2PS44MTtyZXR1cm4gdC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2E9dCxyKCl9LHQuc3RyZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpoKCtlKSxyKCksdCk6Zn0sdC5kaXN0YW5jZU1pbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lKmUsdCk6TWF0aC5zcXJ0KHApfSx0LmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUqZSx0KTpNYXRoLnNxcnQobSl9LHQudGhldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSplLHQpOk1hdGguc3FydCh2KX0sdH0seD1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG49MCxpPWEubGVuZ3RoO248aTsrK24pe3ZhciBsPWFbbl0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGY9TWF0aC5zcXJ0KGMqYyt1KnUpLGg9KHNbbl0tZikqb1tuXSp0L2Y7bC52eCs9YypoLGwudnkrPXUqaH19ZnVuY3Rpb24gaSgpe2lmKGEpe3ZhciBlLHI9YS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKXNbZV09K3QoYVtlXSxlLGEpLG9bZV09aXNOYU4oc1tlXSk/MDorbChhW2VdLGUsYSl9fXZhciBhLG8scyxsPWgoLjEpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1oKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2E9dCxpKCl9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpoKCt0KSxpKCksbik6bH0sbi5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpoKCtlKSxpKCksbik6dH0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxufSxfPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLGUudngrPShhW3JdLWUueCkqaVtyXSp0fWZ1bmN0aW9uIHIoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlpW2VdPWlzTmFOKGFbZV09K3QobltlXSxlLG4pKT8wOitvKG5bZV0sZSxuKX19dmFyIG4saSxhLG89aCguMSk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWgobnVsbD09dD8wOit0KSksZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxyKCl9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpoKCt0KSxyKCksZSk6b30sZS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246aCgrbikscigpLGUpOnR9LGV9LHc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGUscj0wLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sZS52eSs9KGFbcl0tZS55KSppW3JdKnR9ZnVuY3Rpb24gcigpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKWlbZV09aXNOYU4oYVtlXT0rdChuW2VdLGUsbikpPzA6K28obltlXSxlLG4pfX12YXIgbixpLGEsbz1oKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aChudWxsPT10PzA6K3QpKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHIoKX0sZS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmgoK3QpLHIoKSxlKTpvfSxlLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpoKCtuKSxyKCksZSk6dH0sZX07dC5mb3JjZUNlbnRlcj1mLHQuZm9yY2VDb2xsaWRlPXAsdC5mb3JjZUxpbms9bSx0LmZvcmNlTWFueUJvZHk9Yix0LmZvcmNlUmFkaWFsPXgsdC5mb3JjZVNpbXVsYXRpb249eSx0LmZvcmNlWD1fLHQuZm9yY2VZPXcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHsiZDMtY29sbGVjdGlvbiI6MTE0LCJkMy1kaXNwYXRjaCI6MTE2LCJkMy1xdWFkdHJlZSI6MTE5LCJkMy10aW1lciI6MTIwfV0sMTE4OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGksYSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2EobixlKCJkMy1jb2xvciIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1jb2xvciJdLGEpOmEoaS5kMz1pLmQzfHx7fSxpLmQzKX0odGhpcyxmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP24odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOkUoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBvKHQpe3JldHVybiAxPT0odD0rdCk/czpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/aShlLHIsdCk6RShpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP24odCxyKTpFKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhPXIubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpO2ZvcihuPTA7bjxhOysrbilpPWUucmdiKHJbbl0pLG9bbl09aS5yfHwwLHNbbl09aS5nfHwwLGxbbl09aS5ifHwwO3JldHVybiBvPXQobykscz10KHMpLGw9dChsKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPXModCksaS5iPWwodCksaSsiIn19fWZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX1mdW5jdGlvbiBmKHQpe3JldHVybiJub25lIj09PXQ/VTooX3x8KF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTT1kb2N1bWVudC5kZWZhdWx0VmlldyksXy5zdHlsZS50cmFuc2Zvcm09dCx0PU0uZ2V0Q29tcHV0ZWRTdHlsZSh3LmFwcGVuZENoaWxkKF8pLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHcucmVtb3ZlQ2hpbGQoXyksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksVigrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIG51bGw9PXQ/VTooVHx8KFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksVC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9VC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCxWKHQuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKSk6VSl9ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBhKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OlAodCxpKX0se2k6bC0yLHg6UChuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX1mdW5jdGlvbiBvKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrInJvdGF0ZSgiLG51bGwsbiktMix4OlAodCxlKX0pKTplJiZyLnB1c2goaShyKSsicm90YXRlKCIrZStuKX1mdW5jdGlvbiBzKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDpQKHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfWZ1bmN0aW9uIGwodCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDpQKHQscil9LHtpOnMtMix4OlAoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKSsic2NhbGUoIityKyIsIituKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10KGUpLHI9dChyKSxhKGUudHJhbnNsYXRlWCxlLnRyYW5zbGF0ZVksci50cmFuc2xhdGVYLHIudHJhbnNsYXRlWSxuLGkpLG8oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxzKGUuc2tld1gsci5za2V3WCxuLGkpLGwoZS5zY2FsZVgsZS5zY2FsZVksci5zY2FsZVgsci5zY2FsZVksbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKCIiKX19fWZ1bmN0aW9uIHAodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gbSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn1mdW5jdGlvbiB2KHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9cyhyLnMsbi5zKSxvPXMoci5sLG4ubCksbD1zKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PWwodCkscisiIn19fWZ1bmN0aW9uIHkodCxyKXt2YXIgbj1zKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPXModC5hLHIuYSksYT1zKHQuYixyLmIpLG89cyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1zKHIuYyxuLmMpLG89cyhyLmwsbi5sKSxsPXMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9bCh0KSxyKyIifX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBpKHIsaSl7dmFyIGE9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoaT1lLmN1YmVoZWxpeChpKSkuaCksbz1zKHIucyxpLnMpLGw9cyhyLmwsaS5sKSxjPXMoci5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLnM9byh0KSxyLmw9bChNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9Yyh0KSxyKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIF8sdyxNLFQsaz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksYT10W2ldLG89dFtpKzFdLHM9aT4wP3RbaS0xXToyKmEtbyxsPWk8ZS0xP3RbaSsyXToyKm8tYTtyZXR1cm4gcigobi1pL2UpKmUscyxhLG8sbCl9fSxBPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fSxFPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sUz1mdW5jdGlvbiB0KHIpe2Z1bmN0aW9uIG4odCxyKXt2YXIgbj1pKCh0PWUucmdiKHQpKS5yLChyPWUucmdiKHIpKS5yKSxhPWkodC5nLHIuZyksbz1pKHQuYixyLmIpLGw9cyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1uKGUpLHQuZz1hKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1sKGUpLHQrIiJ9fXZhciBpPW8ocik7cmV0dXJuIG4uZ2FtbWE9dCxufSgxKSxMPWwoayksQz1sKEEpLEk9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1qKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319LEQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlLT10LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUodCtlKm4pLHJ9fSxQPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9K3QsZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gdCtlKnJ9fSx6PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fSxpPXt9O251bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSk7Zm9yKHIgaW4gZSlyIGluIHQ/bltyXT1qKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19LE89L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFI9bmV3IFJlZ0V4cChPLnNvdXJjZSwiZyIpLEY9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1PLmxhc3RJbmRleD1SLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1PLmV4ZWModCkpJiYobj1SLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDpQKHIsbil9KSksYT1SLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT91KGxbMF0ueCk6YyhlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX0saj1mdW5jdGlvbih0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/RShyKTooIm51bWJlciI9PT1pP1A6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sUyk6RjpyIGluc3RhbmNlb2YgZS5jb2xvcj9TOnIgaW5zdGFuY2VvZiBEYXRlP0Q6QXJyYXkuaXNBcnJheShyKT9JOiJmdW5jdGlvbiIhPXR5cGVvZiByLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT96OlApKHQscil9LE49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19LEI9MTgwL01hdGguUEksVT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxWPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGw9dCpyK2UqbikmJihyLT10Kmwsbi09ZSpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLHQqbjxlKnImJih0PS10LGU9LWUsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkIsc2tld1g6TWF0aC5hdGFuKGwpKkIsc2NhbGVYOm8sc2NhbGVZOnN9fSxIPWQoZiwicHgsICIsInB4KSIsImRlZykiKSxxPWQoaCwiLCAiLCIpIiwiKSIpLEc9TWF0aC5TUVJUMixZPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDwxZS0xMiluPU1hdGgubG9nKGMvbykvRyxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqZixvKk1hdGguZXhwKEcqdCpuKV19O2Vsc2V7dmFyIGQ9TWF0aC5zcXJ0KGgpLGc9KGMqYy1vKm8rNCpoKS8oMipvKjIqZCkseT0oYypjLW8qby00KmgpLygyKmMqMipkKSxiPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZykseD1NYXRoLmxvZyhNYXRoLnNxcnQoeSp5KzEpLXkpO249KHgtYikvRyxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQqbixyPXAoYikscz1vLygyKmQpKihyKnYoRyplK2IpLW0oYikpO3JldHVybltpK3MqdSxhK3MqZixvKnIvcChHKmUrYildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSxYPWcoYSksVz1nKHMpLFo9YihhKSxKPWIocyksSz14KGEpLFE9eChzKSwkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXQobi8oZS0xKSk7cmV0dXJuIHJ9O3QuaW50ZXJwb2xhdGU9aix0LmludGVycG9sYXRlQXJyYXk9SSx0LmludGVycG9sYXRlQmFzaXM9ayx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9QSx0LmludGVycG9sYXRlRGF0ZT1ELHQuaW50ZXJwb2xhdGVOdW1iZXI9UCx0LmludGVycG9sYXRlT2JqZWN0PXosdC5pbnRlcnBvbGF0ZVJvdW5kPU4sdC5pbnRlcnBvbGF0ZVN0cmluZz1GLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9SCx0LmludGVycG9sYXRlVHJhbnNmb3JtU3ZnPXEsdC5pbnRlcnBvbGF0ZVpvb209WSx0LmludGVycG9sYXRlUmdiPVMsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPUwsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPUMsdC5pbnRlcnBvbGF0ZUhzbD1YLHQuaW50ZXJwb2xhdGVIc2xMb25nPVcsdC5pbnRlcnBvbGF0ZUxhYj15LHQuaW50ZXJwb2xhdGVIY2w9Wix0LmludGVycG9sYXRlSGNsTG9uZz1KLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9Syx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1RLHQucXVhbnRpemU9JCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1jb2xvciI6MTE1fV0sMTE5OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLmQzPWUuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscixuKXtpZihpc05hTihlKXx8aXNOYU4ocikpcmV0dXJuIHQ7dmFyIGksYSxvLHMsbCxjLHUsZixoLGQ9dC5fcm9vdCxwPXtkYXRhOm59LG09dC5feDAsdj10Ll95MCxnPXQuX3gxLHk9dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChjPWU+PShhPShtK2cpLzIpKT9tPWE6Zz1hLCh1PXI+PShvPSh2K3kpLzIpKT92PW86eT1vLGk9ZCwhKGQ9ZFtmPXU8PDF8Y10pKXJldHVybiBpW2ZdPXAsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLGw9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksZT09PXMmJnI9PT1sKXJldHVybiBwLm5leHQ9ZCxpP2lbZl09cDp0Ll9yb290PXAsdDtkb3tpPWk/aVtmXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9ZT49KGE9KG0rZykvMikpP209YTpnPWEsKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW99d2hpbGUoKGY9dTw8MXxjKT09KGg9KGw+PW8pPDwxfHM+PWEpKTtyZXR1cm4gaVtoXT1kLGlbZl09cCx0fWZ1bmN0aW9uIHIodCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxmPS0oMS8wKSxoPS0oMS8wKTtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmYmJihmPWkpLGE8dSYmKHU9YSksYT5oJiYoaD1hKSk7Zm9yKGY8YyYmKGM9dGhpcy5feDAsZj10aGlzLl94MSksaDx1JiYodT10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMsdSkuY292ZXIoZixoKSxuPTA7bjxvOysrbillKHRoaXMsc1tuXSxsW25dLHRbbl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1uZXcgcyhudWxsPT1lP2k6ZSxudWxsPT1yP2E6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P246bi5hZGRBbGwodCl9ZnVuY3Rpb24gcyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBjPWZ1bmN0aW9uKHQpe3ZhciByPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gZSh0aGlzLmNvdmVyKHIsbikscixuLHQpfSx1PWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcih0KSkrMSxhPShuPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKHI+dHx8dD5pfHxuPmV8fGU+YSkpcmV0dXJuIHRoaXM7dmFyIG8scyxsPWktcixjPXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KG4rYSkvMik8PDF8dDwocitpKS8yKXtjYXNlIDA6ZG97bz1uZXcgQXJyYXkoNCksb1tzXT1jLGM9b313aGlsZShsKj0yLGk9citsLGE9bitsLHQ+aXx8ZT5hKTticmVhaztjYXNlIDE6ZG97bz1uZXcgQXJyYXkoNCksb1tzXT1jLGM9b313aGlsZShsKj0yLHI9aS1sLGE9bitsLHI+dHx8ZT5hKTticmVhaztjYXNlIDI6ZG97bz1uZXcgQXJyYXkoNCksb1tzXT1jLGM9b313aGlsZShsKj0yLGk9citsLG49YS1sLHQ+aXx8bj5lKTticmVhaztjYXNlIDM6ZG97bz1uZXcgQXJyYXkoNCksb1tzXT1jLGM9b313aGlsZShsKj0yLHI9aS1sLG49YS1sLHI+dHx8bj5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30sZj1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSxoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9cix0aGlzLngxPW4sdGhpcy55MT1pfSxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PXRoaXMuX3gwLGY9dGhpcy5feTAsaD10aGlzLl94MSxwPXRoaXMuX3kxLG09W10sdj10aGlzLl9yb290O2Zvcih2JiZtLnB1c2gobmV3IGQodix1LGYsaCxwKSksbnVsbD09cj9yPTEvMDoodT10LXIsZj1lLXIsaD10K3IscD1lK3Iscio9cik7bD1tLnBvcCgpOylpZighKCEodj1sLm5vZGUpfHwoaT1sLngwKT5ofHwoYT1sLnkwKT5wfHwobz1sLngxKTx1fHwocz1sLnkxKTxmKSlpZih2Lmxlbmd0aCl7dmFyIGc9KGkrbykvMix5PShhK3MpLzI7bS5wdXNoKG5ldyBkKHZbM10sZyx5LG8scyksbmV3IGQodlsyXSxpLHksZyxzKSxuZXcgZCh2WzFdLGcsYSxvLHkpLG5ldyBkKHZbMF0saSxhLGcseSkpLChjPShlPj15KTw8MXx0Pj1nKSYmKGw9bVttLmxlbmd0aC0xXSxtW20ubGVuZ3RoLTFdPW1bbS5sZW5ndGgtMS1jXSxtW20ubGVuZ3RoLTEtY109bCl9ZWxzZXt2YXIgYj10LSt0aGlzLl94LmNhbGwobnVsbCx2LmRhdGEpLHg9ZS0rdGhpcy5feS5jYWxsKG51bGwsdi5kYXRhKSxfPWIqYit4Kng7aWYoXzxyKXt2YXIgdz1NYXRoLnNxcnQocj1fKTt1PXQtdyxmPWUtdyxoPXQrdyxwPWUrdyxuPXYuZGF0YX19cmV0dXJuIG59LG09ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLG09dGhpcy5feTAsdj10aGlzLl94MSxnPXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KHArdikvMikpP3A9czp2PXMsKHU9bz49KGw9KG0rZykvMikpP209bDpnPWwsZT1kLCEoZD1kW2Y9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKHI9ZSxoPWYpfWZvcig7ZC5kYXRhIT09dDspaWYobj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtmXT1pOmRlbGV0ZSBlW2ZdLChkPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZkPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhZC5sZW5ndGgmJihyP3JbaF09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LHY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sZz1mdW5jdGlvbigpe3ZhciB0PTAKO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0seT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgZChsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxuPWUueDAsaT1lLnkwLGE9ZS54MSxvPWUueTEpJiZsLmxlbmd0aCl7dmFyIGM9KG4rYSkvMix1PShpK28pLzI7KHI9bFszXSkmJnMucHVzaChuZXcgZChyLGMsdSxhLG8pKSwocj1sWzJdKSYmcy5wdXNoKG5ldyBkKHIsbix1LGMsbykpLChyPWxbMV0pJiZzLnB1c2gobmV3IGQocixjLGksYSx1KSksKHI9bFswXSkmJnMucHVzaChuZXcgZChyLG4saSxjLHUpKX1yZXR1cm4gdGhpc30sYj1mdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49W107Zm9yKHRoaXMuX3Jvb3QmJnIucHVzaChuZXcgZCh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1yLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGw9ZS54MSxjPWUueTEsdT0obytsKS8yLGY9KHMrYykvMjsoYT1pWzBdKSYmci5wdXNoKG5ldyBkKGEsbyxzLHUsZikpLChhPWlbMV0pJiZyLnB1c2gobmV3IGQoYSx1LHMsbCxmKSksKGE9aVsyXSkmJnIucHVzaChuZXcgZChhLG8sZix1LGMpKSwoYT1pWzNdKSYmci5wdXNoKG5ldyBkKGEsdSxmLGwsYykpfW4ucHVzaChlKX1mb3IoO2U9bi5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LHg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxfPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdz1vLnByb3RvdHlwZT1zLnByb3RvdHlwZTt3LmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PWwobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1sKGUpKTtyZXR1cm4gcn0sdy5hZGQ9Yyx3LmFkZEFsbD1yLHcuY292ZXI9dSx3LmRhdGE9Zix3LmV4dGVudD1oLHcuZmluZD1wLHcucmVtb3ZlPW0sdy5yZW1vdmVBbGw9bix3LnJvb3Q9dix3LnNpemU9Zyx3LnZpc2l0PXksdy52aXNpdEFmdGVyPWIsdy54PXgsdy55PV8sdC5xdWFkdHJlZT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sMTIwOltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLmQzPWUuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe3JldHVybiBnfHwoeChyKSxnPWIubm93KCkreSl9ZnVuY3Rpb24gcigpe2c9MH1mdW5jdGlvbiBuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1uZXcgbjtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxyKSxpfWZ1bmN0aW9uIGEoKXtlKCksKytoO2Zvcih2YXIgdCxyPXU7cjspKHQ9Zy1yLl90aW1lKT49MCYmci5fY2FsbC5jYWxsKG51bGwsdCkscj1yLl9uZXh0Oy0taH1mdW5jdGlvbiBvKCl7Zz0odj1iLm5vdygpKSt5LGg9ZD0wO3RyeXthKCl9ZmluYWxseXtoPTAsbCgpLGc9MH19ZnVuY3Rpb24gcygpe3ZhciB0PWIubm93KCksZT10LXY7ZT5tJiYoeS09ZSx2PXQpfWZ1bmN0aW9uIGwoKXtmb3IodmFyIHQsZSxyPXUsbj0xLzA7cjspci5fY2FsbD8obj5yLl90aW1lJiYobj1yLl90aW1lKSx0PXIscj1yLl9uZXh0KTooZT1yLl9uZXh0LHIuX25leHQ9bnVsbCxyPXQ/dC5fbmV4dD1lOnU9ZSk7Zj10LGMobil9ZnVuY3Rpb24gYyh0KXtpZighaCl7ZCYmKGQ9Y2xlYXJUaW1lb3V0KGQpKTt0LWc+MjQ/KHQ8MS8wJiYoZD1zZXRUaW1lb3V0KG8sdC1iLm5vdygpLXkpKSxwJiYocD1jbGVhckludGVydmFsKHApKSk6KHB8fCh2PWIubm93KCkscD1zZXRJbnRlcnZhbChzLG0pKSxoPTEseChvKSl9fXZhciB1LGYsaD0wLGQ9MCxwPTAsbT0xZTMsdj0wLGc9MCx5PTAsYj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx4PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O24ucHJvdG90eXBlPWkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLHJlc3RhcnQ6ZnVuY3Rpb24odCxyLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9lKCk6K24pKyhudWxsPT1yPzA6K3IpLHRoaXMuX25leHR8fGY9PT10aGlzfHwoZj9mLl9uZXh0PXRoaXM6dT10aGlzLGY9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixjKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGMoKSl9fTt2YXIgXz1mdW5jdGlvbih0LGUscil7dmFyIGk9bmV3IG47cmV0dXJuIGU9bnVsbD09ZT8wOitlLGkucmVzdGFydChmdW5jdGlvbihyKXtpLnN0b3AoKSx0KHIrZSl9LGUsciksaX0sdz1mdW5jdGlvbih0LHIsaSl7dmFyIGE9bmV3IG4sbz1yO3JldHVybiBudWxsPT1yPyhhLnJlc3RhcnQodCxyLGkpLGEpOihyPStyLGk9bnVsbD09aT9lKCk6K2ksYS5yZXN0YXJ0KGZ1bmN0aW9uIGUobil7bis9byxhLnJlc3RhcnQoZSxvKz1yLGkpLHQobil9LHIsaSksYSl9O3Qubm93PWUsdC50aW1lcj1pLHQudGltZXJGbHVzaD1hLHQudGltZW91dD1fLHQuaW50ZXJ2YWw9dyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDEyMTpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBuKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIG8odCl7cmV0dXJuIWlzTmFOKHQpfWZ1bmN0aW9uIHModCl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik8MD9uPWErMTppPWF9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9MTt0KmUlMTspZSo9MTA7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgciBpbiBlKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxyLHt2YWx1ZTplW3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBmKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4odCs9IiIpPT09X298fHRbMF09PT13bz93byt0OnR9ZnVuY3Rpb24gZCh0KXtyZXR1cm4odCs9IiIpWzBdPT09d28/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIHAodCl7cmV0dXJuIGgodClpbiB0aGlzLl99ZnVuY3Rpb24gbSh0KXtyZXR1cm4odD1oKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiB2KCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goZChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gZygpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24geSgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYigpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHR9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gdyh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPU1vLmxlbmd0aDtyPG47KytyKXt2YXIgaT1Nb1tyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19ZnVuY3Rpb24gTSgpe31mdW5jdGlvbiBUKCl7fWZ1bmN0aW9uIGsodCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZSxuPXIsaT0tMSxhPW4ubGVuZ3RoOysraTxhOykoZT1uW2ldLm9uKSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHR9dmFyIHI9W10sbj1uZXcgZjtyZXR1cm4gZS5vbj1mdW5jdGlvbihlLGkpe3ZhciBhLG89bi5nZXQoZSk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLHI9ci5zbGljZSgwLGE9ci5pbmRleE9mKG8pKS5jb25jYXQoci5zbGljZShhKzEpKSxuLnJlbW92ZShlKSksaSYmci5wdXNoKG4uc2V0KGUse29uOml9KSksdCl9LGV9ZnVuY3Rpb24gQSgpe2NvLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgdCxlPWNvLmV2ZW50O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIFModCl7Zm9yKHZhciBlPW5ldyBULHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7KytyPG47KWVbYXJndW1lbnRzW3JdXT1rKGUpO3JldHVybiBlLm9mPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt2YXIgYT1pLnNvdXJjZUV2ZW50PWNvLmV2ZW50O2kudGFyZ2V0PXQsY28uZXZlbnQ9aSxlW2kudHlwZV0uYXBwbHkocixuKX1maW5hbGx5e2NvLmV2ZW50PWF9fX0sZX1mdW5jdGlvbiBMKHQpe3JldHVybiBrbyh0LExvKSx0fWZ1bmN0aW9uIEModCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBBbyh0LHRoaXMpfX1mdW5jdGlvbiBJKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRW8odCx0aGlzKX19ZnVuY3Rpb24gRCh0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX1mdW5jdGlvbiBuKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfWZ1bmN0aW9uIGEoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX1mdW5jdGlvbiBvKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LHIpfWZ1bmN0aW9uIHMoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKX1yZXR1cm4gdD1jby5ucy5xdWFsaWZ5KHQpLG51bGw9PWU/dC5sb2NhbD9uOnI6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dC5sb2NhbD9zOm86dC5sb2NhbD9hOml9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1mdW5jdGlvbiB6KHQpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitjby5yZXF1b3RlKHQpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIE8odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBSKHQsZSl7ZnVuY3Rpb24gcigpe2Zvcih2YXIgcj0tMTsrK3I8aTspdFtyXSh0aGlzLGUpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHI9LTEsbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK3I8aTspdFtyXSh0aGlzLG4pfXQ9Tyh0KS5tYXAoRik7dmFyIGk9dC5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bjpyfWZ1bmN0aW9uIEYodCl7dmFyIGU9eih0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixQKGkrIiAiK3QpKSk6ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixQKGkucmVwbGFjZShlLCIgIikpKX19ZnVuY3Rpb24gaih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfWZ1bmN0aW9uIGEoKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9cmV0dXJuIG51bGw9PWU/bjoiZnVuY3Rpb24iPT10eXBlb2YgZT9hOml9ZnVuY3Rpb24gTih0LGUpe2Z1bmN0aW9uIHIoKXtkZWxldGUgdGhpc1t0XX1mdW5jdGlvbiBuKCl7dGhpc1t0XT1lfWZ1bmN0aW9uIGkoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn1yZXR1cm4gbnVsbD09ZT9yOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2k6bn1mdW5jdGlvbiBCKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUNvJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Dbz9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMocix0KX1mdW5jdGlvbiByKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Oih0PWNvLm5zLnF1YWxpZnkodCkpLmxvY2FsP3I6ZX1mdW5jdGlvbiBVKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVih0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU28odGhpcyx0KX19ZnVuY3Rpb24gcSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KHQ9aSksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fWZ1bmN0aW9uIEcodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBZKHQpe3JldHVybiBrbyh0LERvKSx0fWZ1bmN0aW9uIFgodCl7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24obixpLGEpe3ZhciBvLHM9dFthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9ciYmKHI9YSxlPTApLGk+PWUmJihlPWkrMSk7IShvPXNbZV0pJiYrK2U8bDspO3JldHVybiBvfX1mdW5jdGlvbiBXKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9dGhpc1tvXTtlJiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxlLiQpLGRlbGV0ZSB0aGlzW29dKX1mdW5jdGlvbiBpKCl7dmFyIGk9bChlLGZvKGFyZ3VtZW50cykpO24uY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzW29dPWksaS4kPXIpLGkuXz1lfWZ1bmN0aW9uIGEoKXt2YXIgZSxyPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrY28ucmVxdW90ZSh0KSsiJCIpO2Zvcih2YXIgbiBpbiB0aGlzKWlmKGU9bi5tYXRjaChyKSl7dmFyIGk9dGhpc1tuXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZVsxXSxpLGkuJCksZGVsZXRlIHRoaXNbbl19fXZhciBvPSJfX29uIit0LHM9dC5pbmRleE9mKCIuIiksbD1aO3M+MCYmKHQ9dC5zbGljZSgwLHMpKTt2YXIgYz1Qby5nZXQodCk7cmV0dXJuIGMmJih0PWMsbD1KKSxzP2U/aTpuOmU/TTphfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49Y28uZXZlbnQ7Y28uZXZlbnQ9cixlWzBdPXRoaXMuX19kYXRhX187dHJ5e3QuYXBwbHkodGhpcyxlKX1maW5hbGx5e2NvLmV2ZW50PW59fX1mdW5jdGlvbiBKKHQsZSl7dmFyIHI9Wih0LGUpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5yZWxhdGVkVGFyZ2V0O24mJihuPT09ZXx8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpKXx8ci5jYWxsKGUsdCl9fWZ1bmN0aW9uIEsodCl7dmFyIHI9Ii5kcmFnc3VwcHJlc3MtIisgKytPbyxpPSJjbGljayIrcixhPWNvLnNlbGVjdChuKHQpKS5vbigidG91Y2htb3ZlIityLEEpLm9uKCJkcmFnc3RhcnQiK3IsQSkub24oInNlbGVjdHN0YXJ0IityLEEpO2lmKG51bGw9PXpvJiYoem89ISgib25zZWxlY3RzdGFydCJpbiB0KSYmdyh0LnN0eWxlLCJ1c2VyU2VsZWN0IikpLHpvKXt2YXIgbz1lKHQpLnN0eWxlLHM9b1t6b107b1t6b109Im5vbmUifXJldHVybiBmdW5jdGlvbih0KXtpZihhLm9uKHIsbnVsbCksem8mJihvW3pvXT1zKSx0KXt2YXIgZT1mdW5jdGlvbigpe2Eub24oaSxudWxsKX07YS5vbihpLGZ1bmN0aW9uKCl7QSgpLGUoKX0sITApLHNldFRpbWVvdXQoZSwwKX19fWZ1bmN0aW9uIFEodCxlKXtlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgcj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihyLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1yLmNyZWF0ZVNWR1BvaW50KCk7aWYoUm88MCl7dmFyIGE9bih0KTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7cj1jby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciBvPXJbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7Um89IShvLmZ8fG8uZSksci5yZW1vdmUoKX19cmV0dXJuIFJvPyhpLng9ZS5wYWdlWCxpLnk9ZS5wYWdlWSk6KGkueD1lLmNsaWVudFgsaS55PWUuY2xpZW50WSksaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW2kueCxpLnldfXZhciBzPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1zLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1zLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gJCgpe3JldHVybiBjby5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfWZ1bmN0aW9uIHR0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBldCh0LGUscil7cmV0dXJuKGVbMF0tdFswXSkqKHJbMV0tdFsxXSktKGVbMV0tdFsxXSkqKHJbMF0tdFswXSl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/Tm86TWF0aC5hY29zKHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiB0PjE/Vm86dDwtMT8tVm86TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGl0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfWZ1bmN0aW9uIGF0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIG90KHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX1mdW5jdGlvbiBzdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fWZ1bmN0aW9uIGx0KCl7fWZ1bmN0aW9uIGN0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGN0Pyh0aGlzLmg9K3QsdGhpcy5zPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBjdD9uZXcgY3QodC5oLHQucyx0LmwpOk10KCIiK3QsVHQsY3QpOm5ldyBjdCh0LGUscil9ZnVuY3Rpb24gdXQodCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ+MzYwP3QtPTM2MDp0PDAmJih0Kz0zNjApLHQ8NjA/YSsoby1hKSp0LzYwOnQ8MTgwP286dDwyNDA/YSsoby1hKSooMjQwLXQpLzYwOmF9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqbih0KSl9dmFyIGEsbztyZXR1cm4gdD1pc05hTih0KT8wOih0JT0zNjApPDA/dCszNjA6dCxlPWlzTmFOKGUpPzA6ZTwwPzA6ZT4xPzE6ZSxyPXI8MD8wOnI+MT8xOnIsbz1yPD0uNT9yKigxK2UpOnIrZS1yKmUsYT0yKnItbyxuZXcgYnQoaSh0KzEyMCksaSh0KSxpKHQtMTIwKSl9ZnVuY3Rpb24gZnQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZnQ/KHRoaXMuaD0rdCx0aGlzLmM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGZ0P25ldyBmdCh0LmgsdC5jLHQubCk6dCBpbnN0YW5jZW9mIGR0P210KHQubCx0LmEsdC5iKTptdCgodD1rdCgodD1jby5yZ2IodCkpLnIsdC5nLHQuYikpLmwsdC5hLHQuYik6bmV3IGZ0KHQsZSxyKX1mdW5jdGlvbiBodCh0LGUscil7cmV0dXJuIGlzTmFOKHQpJiYodD0wKSxpc05hTihlKSYmKGU9MCksbmV3IGR0KHIsTWF0aC5jb3ModCo9SG8pKmUsTWF0aC5zaW4odCkqZSl9ZnVuY3Rpb24gZHQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZHQ/KHRoaXMubD0rdCx0aGlzLmE9K2Usdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGR0P25ldyBkdCh0LmwsdC5hLHQuYik6dCBpbnN0YW5jZW9mIGZ0P2h0KHQuaCx0LmMsdC5sKTprdCgodD1idCh0KSkucix0LmcsdC5iKTpuZXcgZHQodCxlLHIpfWZ1bmN0aW9uIHB0KHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIGk9dnQoaSkqUW8sbj12dChuKSokbyxhPXZ0KGEpKnRzLG5ldyBidCh5dCgzLjI0MDQ1NDIqaS0xLjUzNzEzODUqbi0uNDk4NTMxNCphKSx5dCgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSkseXQoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gbXQodCxlLHIpe3JldHVybiB0PjA/bmV3IGZ0KE1hdGguYXRhbjIocixlKSpxbyxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IGZ0KE5hTixOYU4sdCl9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBndCh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24geXQodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYnQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYnQ/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGJ0P25ldyBidCh0LnIsdC5nLHQuYik6TXQoIiIrdCxidCx1dCk6bmV3IGJ0KHQsZSxyKX1mdW5jdGlvbiB4dCh0KXtyZXR1cm4gbmV3IGJ0KHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiBfdCh0KXtyZXR1cm4geHQodCkrIiJ9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gTXQodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShFdChpWzBdKSxFdChpWzFdKSxFdChpWzJdKSl9cmV0dXJuKGE9bnMuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBUdCh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBjdChuLGksbCl9ZnVuY3Rpb24ga3QodCxlLHIpe3Q9QXQodCksZT1BdChlKSxyPUF0KHIpO3ZhciBuPWd0KCguNDEyNDU2NCp0Ky4zNTc1NzYxKmUrLjE4MDQzNzUqcikvUW8pLGk9Z3QoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpLyRvKTtyZXR1cm4gZHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1ndCgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvdHMpKSl9ZnVuY3Rpb24gQXQodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gRXQodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEx0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLEN0KGUscix0LG4pfX1mdW5jdGlvbiBDdCh0LGUscixuKXtmdW5jdGlvbiBpKCl7dmFyIHQsZT1sLnN0YXR1cztpZighZSYmRHQobCl8fGU+PTIwMCYmZTwzMDB8fDMwND09PWUpe3RyeXt0PXIuY2FsbChhLGwpfWNhdGNoKHQpe3JldHVybiB2b2lkIG8uZXJyb3IuY2FsbChhLHQpfW8ubG9hZC5jYWxsKGEsdCl9ZWxzZSBvLmVycm9yLmNhbGwoYSxsKX12YXIgYT17fSxvPWNvLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPXt9LGw9bmV3IFhNTEh0dHBSZXF1ZXN0LGM9bnVsbDtyZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBsfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpfHwobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9aTpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVhZHlTdGF0ZT4zJiZpKCl9LGwub25wcm9ncmVzcz1mdW5jdGlvbih0KXt2YXIgZT1jby5ldmVudDtjby5ldmVudD10O3RyeXtvLnByb2dyZXNzLmNhbGwoYSxsKX1maW5hbGx5e2NvLmV2ZW50PWV9fSxhLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9zW3RdOihudWxsPT1lP2RlbGV0ZSBzW3RdOnNbdF09ZSsiIixhKX0sYS5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCsiIixhKTplfSxhLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGEpOmN9LGEucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxhfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09ZnVuY3Rpb24oKXtyZXR1cm4gYS5zZW5kLmFwcGx5KGEsW3RdLmNvbmNhdChmbyhhcmd1bWVudHMpKSl9fSksYS5zZW5kPWZ1bmN0aW9uKHIsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSxsLm9wZW4ocix0LCEwKSxudWxsPT1lfHwiYWNjZXB0ImluIHN8fChzLmFjY2VwdD1lKyIsKi8qIiksbC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgdSBpbiBzKWwuc2V0UmVxdWVzdEhlYWRlcih1LHNbdV0pO3JldHVybiBudWxsIT1lJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShlKSxudWxsIT1jJiYobC5yZXNwb25zZVR5cGU9YyksbnVsbCE9aSYmYS5vbigiZXJyb3IiLGkpLm9uKCJsb2FkIixmdW5jdGlvbih0KXtpKG51bGwsdCl9KSxvLmJlZm9yZXNlbmQuY2FsbChhLGwpLGwuc2VuZChudWxsPT1uP251bGw6biksYX0sYS5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBsLmFib3J0KCksYX0sY28ucmViaW5kKGEsbywib24iKSxudWxsPT1uP2E6YS5nZXQoSXQobikpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH1mdW5jdGlvbiBEdCh0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fWZ1bmN0aW9uIFB0KHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT1yK2UsYT17Yzp0LHQ6aSxuOm51bGx9O3JldHVybiBhcz9hcy5uPWE6aXM9YSxhcz1hLG9zfHwoc3M9Y2xlYXJUaW1lb3V0KHNzKSxvcz0xLGxzKHp0KSksYX1mdW5jdGlvbiB6dCgpe3ZhciB0PU90KCksZT1SdCgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQoc3MpLHNzPXNldFRpbWVvdXQoenQsZSkpLG9zPTApOihvcz0xLGxzKHp0KSl9ZnVuY3Rpb24gT3QoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPWlzO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBSdCgpe2Zvcih2YXIgdCxlPWlzLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjppcz1lLm47cmV0dXJuIGFzPXQscn1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiBlLSh0P01hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIGp0KHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp4byg4LWUpKTtyZXR1cm57c2NhbGU6ZT44P2Z1bmN0aW9uKHQpe3JldHVybiB0L3J9OmZ1bmN0aW9uKHQpe3JldHVybiB0KnJ9LHN5bWJvbDp0fX1mdW5jdGlvbiBOdCh0KXt2YXIgZT10LmRlY2ltYWwscj10LnRob3VzYW5kcyxuPXQuZ3JvdXBpbmcsaT10LmN1cnJlbmN5LGE9biYmcj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPVtdLG89MCxzPW5bMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+ZSYmKHM9TWF0aC5tYXgoMSxlLWwpKSxhLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPmUpKTspcz1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKHIpfTp4O3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj11cy5leGVjKHQpLG49clsxXXx8IiAiLG89clsyXXx8Ij4iLHM9clszXXx8Ii0iLGw9cls0XXx8IiIsYz1yWzVdLHU9K3JbNl0sZj1yWzddLGg9cls4XSxkPXJbOV0scD0xLG09IiIsdj0iIixnPSExLHk9ITA7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKGN8fCIwIj09PW4mJiI9Ij09PW8pJiYoYz1uPSIwIixvPSI9IiksZCl7Y2FzZSJuIjpmPSEwLGQ9ImciO2JyZWFrO2Nhc2UiJSI6cD0xMDAsdj0iJSIsZD0iZiI7YnJlYWs7Y2FzZSJwIjpwPTEwMCx2PSIlIixkPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWwmJihtPSIwIitkLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eT0hMTtjYXNlImQiOmc9ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxkPSJyIn0iJCI9PT1sJiYobT1pWzBdLHY9aVsxXSksInIiIT1kfHxofHwoZD0iZyIpLG51bGwhPWgmJigiZyI9PWQ/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKToiZSIhPWQmJiJmIiE9ZHx8KGg9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkpKSxkPWZzLmdldChkKXx8QnQ7dmFyIGI9YyYmZjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9djtpZihnJiZ0JTEpcmV0dXJuIiI7dmFyIGk9dDwwfHwwPT09dCYmMS90PDA/KHQ9LXQsIi0iKToiLSI9PT1zPyIiOnM7aWYocDwwKXt2YXIgbD1jby5mb3JtYXRQcmVmaXgodCxoKTt0PWwuc2NhbGUodCkscj1sLnN5bWJvbCt2fWVsc2UgdCo9cDt0PWQodCxoKTt2YXIgeCxfLHc9dC5sYXN0SW5kZXhPZigiLiIpO2lmKHc8MCl7dmFyIE09eT90Lmxhc3RJbmRleE9mKCJlIik6LTE7TTwwPyh4PXQsXz0iIik6KHg9dC5zdWJzdHJpbmcoMCxNKSxfPXQuc3Vic3RyaW5nKE0pKX1lbHNlIHg9dC5zdWJzdHJpbmcoMCx3KSxfPWUrdC5zdWJzdHJpbmcodysxKTshYyYmZiYmKHg9YSh4LDEvMCkpO3ZhciBUPW0ubGVuZ3RoK3gubGVuZ3RoK18ubGVuZ3RoKyhiPzA6aS5sZW5ndGgpLGs9VDx1P25ldyBBcnJheShUPXUtVCsxKS5qb2luKG4pOiIiO3JldHVybiBiJiYoeD1hKGsreCxrLmxlbmd0aD91LV8ubGVuZ3RoOjEvMCkpLGkrPW0sdD14K18sKCI8Ij09PW8/aSt0K2s6Ij4iPT09bz9rK2krdDoiXiI9PT1vP2suc3Vic3RyaW5nKDAsVD4+PTEpK2krdCtrLnN1YnN0cmluZyhUKTppKyhiP3Q6ayt0KSkrcn19fWZ1bmN0aW9uIEJ0KHQpe3JldHVybiB0KyIifWZ1bmN0aW9uIFV0KCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1mdW5jdGlvbiBWdCh0LGUscil7ZnVuY3Rpb24gbihlKXt2YXIgcj10KGUpLG49YShyLDEpO3JldHVybiBlLXI8bi1lP3I6bn1mdW5jdGlvbiBpKHIpe3JldHVybiBlKHI9dChuZXcgZHMoci0xKSksMSkscn1mdW5jdGlvbiBhKHQscil7cmV0dXJuIGUodD1uZXcgZHMoK3QpLHIpLHR9ZnVuY3Rpb24gbyh0LG4sYSl7dmFyIG89aSh0KSxzPVtdO2lmKGE+MSlmb3IoO288bjspcihvKSVhfHxzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7ZWxzZSBmb3IoO288bjspcy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO3JldHVybiBzfWZ1bmN0aW9uIHModCxlLHIpe3RyeXtkcz1VdDt2YXIgbj1uZXcgVXQ7cmV0dXJuIG4uXz10LG8obixlLHIpfWZpbmFsbHl7ZHM9RGF0ZX19dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9aSx0Lm9mZnNldD1hLHQucmFuZ2U9bzt2YXIgbD10LnV0Yz1IdCh0KTtyZXR1cm4gbC5mbG9vcj1sLGwucm91bmQ9SHQobiksbC5jZWlsPUh0KGkpLGwub2Zmc2V0PUh0KGEpLGwucmFuZ2U9cyx0fWZ1bmN0aW9uIEh0KHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3RyeXtkcz1VdDt2YXIgbj1uZXcgVXQ7cmV0dXJuIG4uXz1lLHQobixyKS5ffWZpbmFsbHl7ZHM9RGF0ZX19fWZ1bmN0aW9uIHF0KHQpe2Z1bmN0aW9uIGUodCl7ZnVuY3Rpb24gZShlKXtmb3IodmFyIHIsaSxhLG89W10scz0tMSxsPTA7KytzPG47KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9bXNbcj10LmNoYXJBdCgrK3MpXSkmJihyPXQuY2hhckF0KCsrcykpLChhPVNbcl0pJiYocj1hKGUsbnVsbD09aT8iZSI9PT1yPyIgIjoiMCI6aSkpLG8ucHVzaChyKSxsPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGwscykpLG8uam9pbigiIil9dmFyIG49dC5sZW5ndGg7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIG49e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKHIobix0LGUsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsOyJwImluIG4mJihuLkg9bi5IJTEyKzEyKm4ucCk7dmFyIGk9bnVsbCE9bi5aJiZkcyE9PVV0LGE9bmV3KGk/VXQ6ZHMpO3JldHVybiJqImluIG4/YS5zZXRGdWxsWWVhcihuLnksMCxuLmopOiJXImluIG58fCJVImluIG4/KCJ3ImluIG58fChuLnc9IlciaW4gbj8xOjApLGEuc2V0RnVsbFllYXIobi55LDAsMSksYS5zZXRGdWxsWWVhcihuLnksMCwiVyJpbiBuPyhuLncrNiklNys3Km4uVy0oYS5nZXREYXkoKSs1KSU3Om4udys3Km4uVS0oYS5nZXREYXkoKSs2KSU3KSk6YS5zZXRGdWxsWWVhcihuLnksbi5tLG4uZCksYS5zZXRIb3VycyhuLkgrKG4uWi8xMDB8MCksbi5NK24uWiUxMDAsbi5TLG4uTCksaT9hLl86YX0sZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfWZ1bmN0aW9uIHIodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO3M8bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQocysrKSkpe2lmKG89ZS5jaGFyQXQocysrKSwhKGE9TFtvIGluIG1zP2UuY2hhckF0KHMrKyk6b10pfHwobj1hKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufWZ1bmN0aW9uIG4odCxlLHIpe3cubGFzdEluZGV4PTA7dmFyIG49dy5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9TS5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKHQsZSxyKXt4Lmxhc3RJbmRleD0wO3ZhciBuPXguZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PV8uZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYSh0LGUscil7QS5sYXN0SW5kZXg9MDt2YXIgbj1BLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1FLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG8odCxlLHIpe1QubGFzdEluZGV4PTA7dmFyIG49VC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09ay5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gcih0LFMuYy50b1N0cmluZygpLGUsbil9ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIHIodCxTLngudG9TdHJpbmcoKSxlLG4pfWZ1bmN0aW9uIGModCxlLG4pe3JldHVybiByKHQsUy5YLnRvU3RyaW5nKCksZSxuKX1mdW5jdGlvbiB1KHQsZSxyKXt2YXIgbj1iLmdldChlLnNsaWNlKHIscis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PW4/LTE6KHQucD1uLHIpfXZhciBmPXQuZGF0ZVRpbWUsaD10LmRhdGUsZD10LnRpbWUscD10LnBlcmlvZHMsbT10LmRheXMsdj10LnNob3J0RGF5cyxnPXQubW9udGhzLHk9dC5zaG9ydE1vbnRocztlLnV0Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3RyeXtkcz1VdDt2YXIgZT1uZXcgZHM7cmV0dXJuIGUuXz10LG4oZSl9ZmluYWxseXtkcz1EYXRlfX12YXIgbj1lKHQpO3JldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQpe3RyeXtkcz1VdDt2YXIgZT1uLnBhcnNlKHQpO3JldHVybiBlJiZlLl99ZmluYWxseXtkcz1EYXRlfX0sci50b1N0cmluZz1uLnRvU3RyaW5nLHJ9LGUubXVsdGk9ZS51dGMubXVsdGk9dWU7dmFyIGI9Y28ubWFwKCkseD1ZdChtKSxfPVh0KG0pLHc9WXQodiksTT1YdCh2KSxUPVl0KGcpLGs9WHQoZyksQT1ZdCh5KSxFPVh0KHkpO3AuZm9yRWFjaChmdW5jdGlvbih0LGUpe2Iuc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBTPXthOmZ1bmN0aW9uKHQpe3JldHVybiB2W3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBtW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB5W3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGdbdC5nZXRNb250aCgpXX0sYzplKGYpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBHdCgxK2hzLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIHBbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBHdChocy5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBHdChocy5tb25kYXlPZlllYXIodCksZSwyKX0seDplKGgpLFg6ZShkKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6bGUsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0sTD17YTpuLEE6aSxiOmEsQjpvLGM6cyxkOnJlLGU6cmUsSDppZSxJOmllLGo6bmUsTDpzZSxtOmVlLE06YWUscDp1LFM6b2UsVTpadCx3Old0LFc6SnQseDpsLFg6Yyx5OlF0LFk6S3QsWjokdCwiJSI6Y2V9O3JldHVybiBlfWZ1bmN0aW9uIEd0KHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIFl0KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChjby5yZXF1b3RlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gWHQodCl7Zm9yKHZhciBlPW5ldyBmLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5zZXQodFtyXS50b0xvd2VyQ2FzZSgpLHIpO3JldHVybiBlfWZ1bmN0aW9uIFd0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLdCh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRdCh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQueT10ZSgrblswXSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gJHQodCxlLHIpe3JldHVybi9eWystXVxkezR9JC8udGVzdChlPWUuc2xpY2UocixyKzUpKT8odC5aPS1lLHIrNSk6LTF9ZnVuY3Rpb24gdGUodCl7cmV0dXJuIHQrKHQ+Njg/MTkwMDoyZTMpfWZ1bmN0aW9uIGVlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiByZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuaj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzZSh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsZSh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkscj1lPjA/Ii0iOiIrIixuPXhvKGUpLzYwfDAsaT14byhlKSU2MDtyZXR1cm4gcitHdChuLCIwIiwyKStHdChpLCIwIiwyKX1mdW5jdGlvbiBjZSh0LGUscil7Z3MubGFzdEluZGV4PTA7dmFyIG49Z3MuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB1ZSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0tMTsrK3I8ZTspdFtyXVswXT10aGlzKHRbcl1bMF0pO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRbcl07IW5bMV0oZSk7KW49dFsrK3JdO3JldHVybiBuWzBdKGUpfX1mdW5jdGlvbiBmZSgpe31mdW5jdGlvbiBoZSh0LGUscil7dmFyIG49ci5zPXQrZSxpPW4tdCxhPW4taTtyLnQ9dC1hKyhlLWkpfWZ1bmN0aW9uIGRlKHQsZSl7dCYmX3MuaGFzT3duUHJvcGVydHkodC50eXBlKSYmX3NbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIHBlKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIG1lKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGUodFtyXSxlLDEpO2UucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZlKCl7ZnVuY3Rpb24gdCh0LGUpe3QqPUhvLGU9ZSpIby8yK05vLzQ7dmFyIHI9dC1uLG89cj49MD8xOi0xLHM9bypyLGw9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSx1PWEqYyxmPWkqbCt1Kk1hdGguY29zKHMpLGg9dSpvKk1hdGguc2luKHMpO01zLmFkZChNYXRoLmF0YW4yKGgsZikpLG49dCxpPWwsYT1jfXZhciBlLHIsbixpLGE7VHMucG9pbnQ9ZnVuY3Rpb24obyxzKXtUcy5wb2ludD10LG49KGU9bykqSG8saT1NYXRoLmNvcyhzPShyPXMpKkhvLzIrTm8vNCksYT1NYXRoLnNpbihzKX0sVHMubGluZUVuZD1mdW5jdGlvbigpe3QoZSxyKX19ZnVuY3Rpb24gZ2UodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiB5ZSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBiZSh0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24geGUodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBfZSh0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gd2UodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX1mdW5jdGlvbiBNZSh0KXtyZXR1cm5bTWF0aC5hdGFuMih0WzFdLHRbMF0pLG50KHRbMl0pXX1mdW5jdGlvbiBUZSh0LGUpe3JldHVybiB4byh0WzBdLWVbMF0pPEZvJiZ4byh0WzFdLWVbMV0pPEZvfWZ1bmN0aW9uIGtlKHQsZSl7dCo9SG87dmFyIHI9TWF0aC5jb3MoZSo9SG8pO0FlKHIqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKSl9ZnVuY3Rpb24gQWUodCxlLHIpeysra3MsRXMrPSh0LUVzKS9rcyxTcys9KGUtU3MpL2tzLExzKz0oci1Mcykva3N9ZnVuY3Rpb24gRWUoKXtmdW5jdGlvbiB0KHQsaSl7dCo9SG87dmFyIGE9TWF0aC5jb3MoaSo9SG8pLG89YSpNYXRoLmNvcyh0KSxzPWEqTWF0aC5zaW4odCksbD1NYXRoLnNpbihpKSxjPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChjPXIqbC1uKnMpKmMrKGM9bipvLWUqbCkqYysoYz1lKnMtcipvKSpjKSxlKm8rcipzK24qbCk7QXMrPWMsQ3MrPWMqKGUrKGU9bykpLElzKz1jKihyKyhyPXMpKSxEcys9Yyoobisobj1sKSksQWUoZSxyLG4pfXZhciBlLHIsbjtScy5wb2ludD1mdW5jdGlvbihpLGEpe2kqPUhvO3ZhciBvPU1hdGguY29zKGEqPUhvKTtlPW8qTWF0aC5jb3MoaSkscj1vKk1hdGguc2luKGkpLG49TWF0aC5zaW4oYSksUnMucG9pbnQ9dCxBZShlLHIsbil9fWZ1bmN0aW9uIFNlKCl7UnMucG9pbnQ9a2V9ZnVuY3Rpb24gTGUoKXtmdW5jdGlvbiB0KHQsZSl7dCo9SG87dmFyIHI9TWF0aC5jb3MoZSo9SG8pLG89cipNYXRoLmNvcyh0KSxzPXIqTWF0aC5zaW4odCksbD1NYXRoLnNpbihlKSxjPWkqbC1hKnMsdT1hKm8tbipsLGY9bipzLWkqbyxoPU1hdGguc3FydChjKmMrdSp1K2YqZiksZD1uKm8raSpzK2EqbCxwPWgmJi1ydChkKS9oLG09TWF0aC5hdGFuMihoLGQpO1BzKz1wKmMsenMrPXAqdSxPcys9cCpmLEFzKz1tLENzKz1tKihuKyhuPW8pKSxJcys9bSooaSsoaT1zKSksRHMrPW0qKGErKGE9bCkpLEFlKG4saSxhKX12YXIgZSxyLG4saSxhO1JzLnBvaW50PWZ1bmN0aW9uKG8scyl7ZT1vLHI9cyxScy5wb2ludD10LG8qPUhvO3ZhciBsPU1hdGguY29zKHMqPUhvKTtuPWwqTWF0aC5jb3MobyksaT1sKk1hdGguc2luKG8pLGE9TWF0aC5zaW4ocyksQWUobixpLGEpfSxScy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpLFJzLmxpbmVFbmQ9U2UsUnMucG9pbnQ9a2V9fWZ1bmN0aW9uIENlKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIEllKCl7cmV0dXJuITB9ZnVuY3Rpb24gRGUodCxlLHIsbixpKXt2YXIgYT1bXSxvPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihUZShyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO3M8ZTsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX12YXIgbD1uZXcgemUocix0LG51bGwsITApLGM9bmV3IHplKHIsbnVsbCxsLCExKTtsLm89YyxhLnB1c2gobCksby5wdXNoKGMpLGw9bmV3IHplKG4sdCxudWxsLCExKSxjPW5ldyB6ZShuLG51bGwsbCwhMCksbC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKX19KSxvLnNvcnQoZSksUGUoYSksUGUobyksYS5sZW5ndGgpe2Zvcih2YXIgcz0wLGw9cixjPW8ubGVuZ3RoO3M8YzsrK3Mpb1tzXS5lPWw9IWw7Zm9yKHZhciB1LGYsaD1hWzBdOzspe2Zvcih2YXIgZD1oLHA9ITA7ZC52OylpZigoZD1kLm4pPT09aClyZXR1cm47dT1kLnosaS5saW5lU3RhcnQoKTtkb3tpZihkLnY9ZC5vLnY9ITAsZC5lKXtpZihwKWZvcih2YXIgcz0wLGM9dS5sZW5ndGg7czxjOysrcylpLnBvaW50KChmPXVbc10pWzBdLGZbMV0pO2Vsc2UgbihkLngsZC5uLngsMSxpKTtkPWQubn1lbHNle2lmKHApe3U9ZC5wLno7Zm9yKHZhciBzPXUubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoZj11W3NdKVswXSxmWzFdKX1lbHNlIG4oZC54LGQucC54LC0xLGkpO2Q9ZC5wfWQ9ZC5vLHU9ZC56LHA9IXB9d2hpbGUoIWQudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBQZSh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUscixuPTAsaT10WzBdOysrbjxlOylpLm49cj10W25dLHIucD1pLGk9cjtpLm49cj10WzBdLHIucD1pfX1mdW5jdGlvbiB6ZSh0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIE9lKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEpe2Z1bmN0aW9uIG8oZSxyKXt2YXIgbj1pKGUscik7dChlPW5bMF0scj1uWzFdKSYmYS5wb2ludChlLHIpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1pKHQsZSk7di5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIGwoKXt5LnBvaW50PXMsdi5saW5lU3RhcnQoKX1mdW5jdGlvbiBjKCl7eS5wb2ludD1vLHYubGluZUVuZCgpfWZ1bmN0aW9uIHUodCxlKXttLnB1c2goW3QsZV0pO3ZhciByPWkodCxlKTt4LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gZigpe3gubGluZVN0YXJ0KCksbT1bXX1mdW5jdGlvbiBoKCl7dShtWzBdWzBdLG1bMF1bMV0pLHgubGluZUVuZCgpO3ZhciB0LGU9eC5jbGVhbigpLHI9Yi5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKG0ucG9wKCkscC5wdXNoKG0pLG09bnVsbCxuKWlmKDEmZSl7dD1yWzBdO3ZhciBpLG49dC5sZW5ndGgtMSxvPS0xO2lmKG4+MCl7Zm9yKF98fChhLnBvbHlnb25TdGFydCgpLF89ITApLGEubGluZVN0YXJ0KCk7KytvPG47KWEucG9pbnQoKGk9dFtvXSlbMF0saVsxXSk7YS5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJmUmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxkLnB1c2goci5maWx0ZXIoUmUpKX12YXIgZCxwLG0sdj1lKGEpLGc9aS5pbnZlcnQoblswXSxuWzFdKSx5PXtwb2ludDpvLGxpbmVTdGFydDpsLGxpbmVFbmQ6Yyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PXUseS5saW5lU3RhcnQ9Zix5LmxpbmVFbmQ9aCxkPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PW8seS5saW5lU3RhcnQ9bCx5LmxpbmVFbmQ9YyxkPWNvLm1lcmdlKGQpO3ZhciB0PVZlKGcscCk7ZC5sZW5ndGg/KF98fChhLnBvbHlnb25TdGFydCgpLF89ITApLERlKGQsamUsdCxyLGEpKTp0JiYoX3x8KGEucG9seWdvblN0YXJ0KCksXz0hMCksYS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxfJiYoYS5wb2x5Z29uRW5kKCksXz0hMSksZD1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2EucG9seWdvblN0YXJ0KCksYS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpLGEucG9seWdvbkVuZCgpfX0sYj1GZSgpLHg9ZShiKSxfPSExO3JldHVybiB5fX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBGZSgpe3ZhciB0LGU9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0scG9pbnQ6ZnVuY3Rpb24oZSxyKXt0LnB1c2goW2Uscl0pfSxsaW5lRW5kOk0sYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn0scmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfX19ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tVm8tRm86Vm8tdFsxXSktKChlPWUueClbMF08MD9lWzFdLVZvLUZvOlZvLWVbMV0pfWZ1bmN0aW9uIE5lKHQpe3ZhciBlLHI9TmFOLG49TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/Tm86LU5vLGw9eG8oYS1yKTt4byhsLU5vKTxGbz8odC5wb2ludChyLG49KG4rbykvMj4wP1ZvOi1WbyksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT1zJiZsPj1ObyYmKHhvKHItaSk8Rm8mJihyLT1pKkZvKSx4byhhLXMpPEZvJiYoYS09cypGbyksbj1CZShyLG4sYSxvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9YSxuPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fWZ1bmN0aW9uIEJlKHQsZSxyLG4pe3ZhciBpLGEsbz1NYXRoLnNpbih0LXIpO3JldHVybiB4byhvKT5Gbz9NYXRoLmF0YW4oKE1hdGguc2luKGUpKihhPU1hdGguY29zKG4pKSpNYXRoLnNpbihyKS1NYXRoLnNpbihuKSooaT1NYXRoLmNvcyhlKSkqTWF0aC5zaW4odCkpLyhpKmEqbykpOihlK24pLzJ9ZnVuY3Rpb24gVWUodCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqVm8sbi5wb2ludCgtTm8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQoTm8saSksbi5wb2ludChObywwKSxuLnBvaW50KE5vLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLU5vLC1pKSxuLnBvaW50KC1ObywwKSxuLnBvaW50KC1ObyxpKTtlbHNlIGlmKHhvKHRbMF0tZVswXSk+Rm8pe3ZhciBhPXRbMF08ZVswXT9ObzotTm87aT1yKmEvMixuLnBvaW50KC1hLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KGEsaSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gVmUodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPVtNYXRoLnNpbihyKSwtTWF0aC5jb3MociksMF0sYT0wLG89MDtNcy5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcyl7dmFyIGM9ZVtzXSx1PWMubGVuZ3RoO2lmKHUpZm9yKHZhciBmPWNbMF0saD1mWzBdLGQ9ZlsxXS8yK05vLzQscD1NYXRoLnNpbihkKSxtPU1hdGguY29zKGQpLHY9MTs7KXt2PT09dSYmKHY9MCksdD1jW3ZdO3ZhciBnPXRbMF0seT10WzFdLzIrTm8vNCxiPU1hdGguc2luKHkpLHg9TWF0aC5jb3MoeSksXz1nLWgsdz1fPj0wPzE6LTEsTT13Kl8sVD1NPk5vLGs9cCpiO2lmKE1zLmFkZChNYXRoLmF0YW4yKGsqdypNYXRoLnNpbihNKSxtKngraypNYXRoLmNvcyhNKSkpLGErPVQ/Xyt3KkJvOl8sVF5oPj1yXmc+PXIpe3ZhciBBPWJlKGdlKGYpLGdlKHQpKTt3ZShBKTt2YXIgRT1iZShpLEEpO3dlKEUpO3ZhciBTPShUXl8+PTA/LTE6MSkqbnQoRVsyXSk7KG4+U3x8bj09PVMmJihBWzBdfHxBWzFdKSkmJihvKz1UXl8+PTA/MTotMSl9aWYoIXYrKylicmVhaztoPWcscD1iLG09eCxmPXR9fXJldHVybihhPC1Gb3x8YTxGbyYmTXM8LUZvKV4xJm99ZnVuY3Rpb24gSGUodCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhlKT5hfWZ1bmN0aW9uIHIodCl7dmFyIHIsYSxsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oZixoKXt2YXIgZCxwPVtmLGhdLG09ZShmLGgpLHY9bz9tPzA6aShmLGgpOm0/aShmKyhmPDA/Tm86LU5vKSxoKTowO2lmKCFyJiYoYz1sPW0pJiZ0LmxpbmVTdGFydCgpLG0hPT1sJiYoZD1uKHIscCksKFRlKHIsZCl8fFRlKHAsZCkpJiYocFswXSs9Rm8scFsxXSs9Rm8sbT1lKHBbMF0scFsxXSkpKSxtIT09bCl1PTAsbT8odC5saW5lU3RhcnQoKSxkPW4ocCxyKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW4ocixwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLHI9ZDtlbHNlIGlmKHMmJnImJm9ebSl7dmFyIGc7diZhfHwhKGc9bihwLHIsITApKXx8KHU9MCxvPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoZ1swXVswXSxnWzBdWzFdKSx0LnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KGdbMF1bMF0sZ1swXVsxXSkpKX0hbXx8ciYmVGUocixwKXx8dC5wb2ludChwWzBdLHBbMV0pLHI9cCxsPW0sYT12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmdC5saW5lRW5kKCkscj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZsKTw8MX19fWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWdlKHQpLGk9Z2UoZSksbz1bMSwwLDBdLHM9YmUobixpKSxsPXllKHMscyksYz1zWzBdLHU9bC1jKmM7aWYoIXUpcmV0dXJuIXImJnQ7dmFyIGY9YSpsL3UsaD0tYSpjL3UsZD1iZShvLHMpLHA9X2UobyxmKTt4ZShwLF9lKHMsaCkpO3ZhciBtPWQsdj15ZShwLG0pLGc9eWUobSxtKSx5PXYqdi1nKih5ZShwLHApLTEpO2lmKCEoeTwwKSl7dmFyIGI9TWF0aC5zcXJ0KHkpLHg9X2UobSwoLXYtYikvZyk7aWYoeGUoeCxwKSx4PU1lKHgpLCFyKXJldHVybiB4O3ZhciBfLHc9dFswXSxNPWVbMF0sVD10WzFdLGs9ZVsxXTtNPHcmJihfPXcsdz1NLE09Xyk7dmFyIEE9TS13LEU9eG8oQS1Obyk8Rm8sUz1FfHxBPEZvO2lmKCFFJiZrPFQmJihfPVQsVD1rLGs9XyksUz9FP1Qraz4wXnhbMV08KHhvKHhbMF0tdyk8Rm8/VDprKTpUPD14WzFdJiZ4WzFdPD1rOkE+Tm9eKHc8PXhbMF0mJnhbMF08PU0pKXt2YXIgTD1fZShtLCgtditiKS9nKTtyZXR1cm4geGUoTCxwKSxbeCxNZShMKV19fX1mdW5jdGlvbiBpKGUscil7dmFyIG49bz90Ok5vLXQsaT0wO3JldHVybiBlPC1uP2l8PTE6ZT5uJiYoaXw9Mikscjwtbj9pfD00OnI+biYmKGl8PTgpLGl9dmFyIGE9TWF0aC5jb3ModCksbz1hPjAscz14byhhKT5GbztyZXR1cm4gT2UoZSxyLHZyKHQsNipIbyksbz9bMCwtdF06Wy1Obyx0LU5vXSl9ZnVuY3Rpb24gcWUodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG89aS5hLHM9aS5iLGw9by54LGM9by55LHU9cy54LGY9cy55LGg9MCxkPTEscD11LWwsbT1mLWM7aWYoYT10LWwscHx8IShhPjApKXtpZihhLz1wLHA8MCl7aWYoYTxoKXJldHVybjthPGQmJihkPWEpfWVsc2UgaWYocD4wKXtpZihhPmQpcmV0dXJuO2E+aCYmKGg9YSl9aWYoYT1yLWwscHx8IShhPDApKXtpZihhLz1wLHA8MCl7aWYoYT5kKXJldHVybjthPmgmJihoPWEpfWVsc2UgaWYocD4wKXtpZihhPGgpcmV0dXJuO2E8ZCYmKGQ9YSl9aWYoYT1lLWMsbXx8IShhPjApKXtpZihhLz1tLG08MCl7aWYoYTxoKXJldHVybjthPGQmJihkPWEpfWVsc2UgaWYobT4wKXtpZihhPmQpcmV0dXJuO2E+aCYmKGg9YSl9aWYoYT1uLWMsbXx8IShhPDApKXtpZihhLz1tLG08MCl7aWYoYT5kKXJldHVybjthPmgmJihoPWEpfWVsc2UgaWYobT4wKXtpZihhPGgpcmV0dXJuO2E8ZCYmKGQ9YSl9cmV0dXJuIGg+MCYmKGkuYT17eDpsK2gqcCx5OmMraCptfSksZDwxJiYoaS5iPXt4OmwrZCpwLHk6YytkKm19KSxpfX19fX19ZnVuY3Rpb24gR2UodCxlLHIsbil7ZnVuY3Rpb24gaShuLGkpe3JldHVybiB4byhuWzBdLXQpPEZvP2k+MD8wOjM6eG8oblswXS1yKTxGbz9pPjA/MjoxOnhvKG5bMV0tZSk8Rm8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbyh0LngsZS54KX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9aSh0LDEpLG49aShlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihzKXtmdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT0wLHI9di5sZW5ndGgsbj10WzFdLGk9MDtpPHI7KytpKWZvcih2YXIgYSxvPTEscz12W2ldLGw9cy5sZW5ndGgsYz1zWzBdO288bDsrK28pYT1zW29dLGNbMV08PW4/YVsxXT5uJiZldChjLGEsdCk+MCYmKytlOmFbMV08PW4mJmV0KGMsYSx0KTwwJiYtLWUsYz1hO3JldHVybiAwIT09ZX1mdW5jdGlvbiBjKGEscyxsLGMpe3ZhciB1PTAsZj0wO2lmKG51bGw9PWF8fCh1PWkoYSxsKSkhPT0oZj1pKHMsbCkpfHxvKGEscyk8MF5sPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/dDpyLHU+MT9uOmUpfXdoaWxlKCh1PSh1K2wrNCklNCkhPT1mKTtlbHNlIGMucG9pbnQoc1swXSxzWzFdKX1mdW5jdGlvbiB1KGksYSl7CnJldHVybiB0PD1pJiZpPD1yJiZlPD1hJiZhPD1ufWZ1bmN0aW9uIGYodCxlKXt1KHQsZSkmJnMucG9pbnQodCxlKX1mdW5jdGlvbiBoKCl7TC5wb2ludD1wLHYmJnYucHVzaChnPVtdKSxUPSEwLE09ITEsXz13PU5hTn1mdW5jdGlvbiBkKCl7bSYmKHAoeSxiKSx4JiZNJiZFLnJlam9pbigpLG0ucHVzaChFLmJ1ZmZlcigpKSksTC5wb2ludD1mLE0mJnMubGluZUVuZCgpfWZ1bmN0aW9uIHAodCxlKXt0PU1hdGgubWF4KC1qcyxNYXRoLm1pbihqcyx0KSksZT1NYXRoLm1heCgtanMsTWF0aC5taW4oanMsZSkpO3ZhciByPXUodCxlKTtpZih2JiZnLnB1c2goW3QsZV0pLFQpeT10LGI9ZSx4PXIsVD0hMSxyJiYocy5saW5lU3RhcnQoKSxzLnBvaW50KHQsZSkpO2Vsc2UgaWYociYmTSlzLnBvaW50KHQsZSk7ZWxzZXt2YXIgbj17YTp7eDpfLHk6d30sYjp7eDp0LHk6ZX19O1Mobik/KE18fChzLmxpbmVTdGFydCgpLHMucG9pbnQobi5hLngsbi5hLnkpKSxzLnBvaW50KG4uYi54LG4uYi55KSxyfHxzLmxpbmVFbmQoKSxrPSExKTpyJiYocy5saW5lU3RhcnQoKSxzLnBvaW50KHQsZSksaz0hMSl9Xz10LHc9ZSxNPXJ9dmFyIG0sdixnLHksYix4LF8sdyxNLFQsayxBPXMsRT1GZSgpLFM9cWUodCxlLHIsbiksTD17cG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cz1FLG09W10sdj1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cz1BLG09Y28ubWVyZ2UobSk7dmFyIGU9bChbdCxuXSkscj1rJiZlLGk9bS5sZW5ndGg7KHJ8fGkpJiYocy5wb2x5Z29uU3RhcnQoKSxyJiYocy5saW5lU3RhcnQoKSxjKG51bGwsbnVsbCwxLHMpLHMubGluZUVuZCgpKSxpJiZEZShtLGEsZSxjLHMpLHMucG9seWdvbkVuZCgpKSxtPXY9Zz1udWxsfX07cmV0dXJuIEx9fWZ1bmN0aW9uIFllKHQpe3ZhciBlPTAscj1Oby8zLG49bHIodCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKk5vLzE4MCxyPXRbMV0qTm8vMTgwKTpbZS9ObyoxODAsci9ObyoxODBdfSxpfWZ1bmN0aW9uIFhlKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPU1hdGguc3FydChhLTIqaSpNYXRoLnNpbihlKSkvaTtyZXR1cm5bcipNYXRoLnNpbih0Kj1pKSxvLXIqTWF0aC5jb3ModCldfXZhciBuPU1hdGguc2luKHQpLGk9KG4rTWF0aC5zaW4oZSkpLzIsYT0xK24qKDIqaS1uKSxvPU1hdGguc3FydChhKS9pO3JldHVybiByLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPW8tZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL2ksbnQoKGEtKHQqdCtyKnIpKmkqaSkvKDIqaSkpXX0scn1mdW5jdGlvbiBXZSgpe2Z1bmN0aW9uIHQodCxlKXtCcys9aSp0LW4qZSxuPXQsaT1lfXZhciBlLHIsbixpO0dzLnBvaW50PWZ1bmN0aW9uKGEsbyl7R3MucG9pbnQ9dCxlPW49YSxyPWk9b30sR3MubGluZUVuZD1mdW5jdGlvbigpe3QoZSxyKX19ZnVuY3Rpb24gWmUodCxlKXt0PFVzJiYoVXM9dCksdD5IcyYmKEhzPXQpLGU8VnMmJihWcz1lKSxlPnFzJiYocXM9ZSl9ZnVuY3Rpb24gSmUoKXtmdW5jdGlvbiB0KHQsZSl7by5wdXNoKCJNIix0LCIsIixlLGEpfWZ1bmN0aW9uIGUodCxlKXtvLnB1c2goIk0iLHQsIiwiLGUpLHMucG9pbnQ9cn1mdW5jdGlvbiByKHQsZSl7by5wdXNoKCJMIix0LCIsIixlKX1mdW5jdGlvbiBuKCl7cy5wb2ludD10fWZ1bmN0aW9uIGkoKXtvLnB1c2goIloiKX12YXIgYT1LZSg0LjUpLG89W10scz17cG9pbnQ6dCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtzLnBvaW50PWV9LGxpbmVFbmQ6bixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzLmxpbmVFbmQ9aX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3MubGluZUVuZD1uLHMucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGE9S2UodCksc30scmVzdWx0OmZ1bmN0aW9uKCl7aWYoby5sZW5ndGgpe3ZhciB0PW8uam9pbigiIik7cmV0dXJuIG89W10sdH19fTtyZXR1cm4gc31mdW5jdGlvbiBLZSh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBRZSh0LGUpe0VzKz10LFNzKz1lLCsrTHN9ZnVuY3Rpb24gJGUoKXtmdW5jdGlvbiB0KHQsbil7dmFyIGk9dC1lLGE9bi1yLG89TWF0aC5zcXJ0KGkqaSthKmEpO0NzKz1vKihlK3QpLzIsSXMrPW8qKHIrbikvMixEcys9byxRZShlPXQscj1uKX12YXIgZSxyO1hzLnBvaW50PWZ1bmN0aW9uKG4saSl7WHMucG9pbnQ9dCxRZShlPW4scj1pKX19ZnVuY3Rpb24gdHIoKXtYcy5wb2ludD1RZX1mdW5jdGlvbiBlcigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgcj10LW4sYT1lLWksbz1NYXRoLnNxcnQocipyK2EqYSk7Q3MrPW8qKG4rdCkvMixJcys9byooaStlKS8yLERzKz1vLG89aSp0LW4qZSxQcys9byoobit0KSx6cys9byooaStlKSxPcys9MypvLFFlKG49dCxpPWUpfXZhciBlLHIsbixpO1hzLnBvaW50PWZ1bmN0aW9uKGEsbyl7WHMucG9pbnQ9dCxRZShlPW49YSxyPWk9byl9LFhzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUscil9fWZ1bmN0aW9uIHJyKHQpe2Z1bmN0aW9uIGUoZSxyKXt0Lm1vdmVUbyhlK28sciksdC5hcmMoZSxyLG8sMCxCbyl9ZnVuY3Rpb24gcihlLHIpe3QubW92ZVRvKGUscikscy5wb2ludD1ufWZ1bmN0aW9uIG4oZSxyKXt0LmxpbmVUbyhlLHIpfWZ1bmN0aW9uIGkoKXtzLnBvaW50PWV9ZnVuY3Rpb24gYSgpe3QuY2xvc2VQYXRoKCl9dmFyIG89NC41LHM9e3BvaW50OmUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7cy5wb2ludD1yfSxsaW5lRW5kOmkscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cy5saW5lRW5kPWF9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzLmxpbmVFbmQ9aSxzLnBvaW50PWV9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBvPXQsc30scmVzdWx0Ok19O3JldHVybiBzfWZ1bmN0aW9uIG5yKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuKHM/bjpyKSh0KX1mdW5jdGlvbiByKGUpe3JldHVybiBvcihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9ZnVuY3Rpb24gbihlKXtmdW5jdGlvbiByKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIG4oKXtiPU5hTixULnBvaW50PWEsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiBhKHIsbil7dmFyIGE9Z2UoW3Isbl0pLG89dChyLG4pO2koYix4LHksXyx3LE0sYj1vWzBdLHg9b1sxXSx5PXIsXz1hWzBdLHc9YVsxXSxNPWFbMl0scyxlKSxlLnBvaW50KGIseCl9ZnVuY3Rpb24gbygpe1QucG9pbnQ9cixlLmxpbmVFbmQoKX1mdW5jdGlvbiBsKCl7bigpLFQucG9pbnQ9YyxULmxpbmVFbmQ9dX1mdW5jdGlvbiBjKHQsZSl7YShmPXQsaD1lKSxkPWIscD14LG09Xyx2PXcsZz1NLFQucG9pbnQ9YX1mdW5jdGlvbiB1KCl7aShiLHgseSxfLHcsTSxkLHAsZixtLHYsZyxzLGUpLFQubGluZUVuZD1vLG8oKX12YXIgZixoLGQscCxtLHYsZyx5LGIseCxfLHcsTSxUPXtwb2ludDpyLGxpbmVTdGFydDpuLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLFQubGluZVN0YXJ0PWx9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxULmxpbmVTdGFydD1ufX07cmV0dXJuIFR9ZnVuY3Rpb24gaShlLHIsbixzLGwsYyx1LGYsaCxkLHAsbSx2LGcpe3ZhciB5PXUtZSxiPWYtcix4PXkqeStiKmI7aWYoeD40KmEmJnYtLSl7dmFyIF89cytkLHc9bCtwLE09YyttLFQ9TWF0aC5zcXJ0KF8qXyt3KncrTSpNKSxrPU1hdGguYXNpbihNLz1UKSxBPXhvKHhvKE0pLTEpPEZvfHx4byhuLWgpPEZvPyhuK2gpLzI6TWF0aC5hdGFuMih3LF8pLEU9dChBLGspLFM9RVswXSxMPUVbMV0sQz1TLWUsST1MLXIsRD1iKkMteSpJOyhEKkQveD5hfHx4bygoeSpDK2IqSSkveC0uNSk+LjN8fHMqZCtsKnArYyptPG8pJiYoaShlLHIsbixzLGwsYyxTLEwsQSxfLz1ULHcvPVQsTSx2LGcpLGcucG9pbnQoUyxMKSxpKFMsTCxBLF8sdyxNLHUsZixoLGQscCxtLHYsZykpfX12YXIgYT0uNSxvPU1hdGguY29zKDMwKkhvKSxzPTE2O3JldHVybiBlLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0oYT10KnQpPjAmJjE2LGUpOk1hdGguc3FydChhKX0sZX1mdW5jdGlvbiBpcih0KXt2YXIgZT1ucihmdW5jdGlvbihlLHIpe3JldHVybiB0KFtlKnFvLHIqcW9dKX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gY3IoZSh0KSl9fWZ1bmN0aW9uIGFyKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gb3IodCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIHNyKHQpe3JldHVybiBscihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBscih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiB0PXModFswXSpIbyx0WzFdKkhvKSxbdFswXSpoK2wsYy10WzFdKmhdfWZ1bmN0aW9uIHIodCl7cmV0dXJuKHQ9cy5pbnZlcnQoKHRbMF0tbCkvaCwoYy10WzFdKS9oKSkmJlt0WzBdKnFvLHRbMV0qcW9dfWZ1bmN0aW9uIG4oKXtzPUNlKG89aHIoZyx5LGIpLGEpO3ZhciB0PWEobSx2KTtyZXR1cm4gbD1kLXRbMF0qaCxjPXArdFsxXSpoLGkoKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHUmJih1LnZhbGlkPSExLHU9bnVsbCksZX12YXIgYSxvLHMsbCxjLHUsZj1ucihmdW5jdGlvbih0LGUpe3JldHVybiB0PWEodCxlKSxbdFswXSpoK2wsYy10WzFdKmhdfSksaD0xNTAsZD00ODAscD0yNTAsbT0wLHY9MCxnPTAseT0wLGI9MCxfPUZzLHc9eCxNPW51bGwsVD1udWxsO3JldHVybiBlLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmKHUudmFsaWQ9ITEpLHU9Y3IoXyhvLGYodyh0KSkpKSx1LnZhbGlkPSEwLHV9LGUuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPW51bGw9PXQ/KE09dCxGcyk6SGUoKE09K3QpKkhvKSxpKCkpOk19LGUuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD10LHc9dD9HZSh0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp4LGkoKSk6VH0sZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxuKCkpOmh9LGUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sbigpKTpbZCxwXX0sZS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dFswXSUzNjAqSG8sdj10WzFdJTM2MCpIbyxuKCkpOlttKnFvLHYqcW9dfSxlLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpIbyx5PXRbMV0lMzYwKkhvLGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpIbzowLG4oKSk6W2cqcW8seSpxbyxiKnFvXX0sY28ucmViaW5kKGUsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmludmVydD1hLmludmVydCYmcixuKCl9fWZ1bmN0aW9uIGNyKHQpe3JldHVybiBvcih0LGZ1bmN0aW9uKGUscil7dC5wb2ludChlKkhvLHIqSG8pfSl9ZnVuY3Rpb24gdXIodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBmcih0LGUpe3JldHVyblt0Pk5vP3QtQm86dDwtTm8/dCtCbzp0LGVdfWZ1bmN0aW9uIGhyKHQsZSxyKXtyZXR1cm4gdD9lfHxyP0NlKHByKHQpLG1yKGUscikpOnByKHQpOmV8fHI/bXIoZSxyKTpmcn1mdW5jdGlvbiBkcih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSs9dCxbZT5Obz9lLUJvOmU8LU5vP2UrQm86ZSxyXX19ZnVuY3Rpb24gcHIodCl7dmFyIGU9ZHIodCk7cmV0dXJuIGUuaW52ZXJ0PWRyKC10KSxlfWZ1bmN0aW9uIG1yKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqcixsPU1hdGguc2luKHQpKnIsYz1NYXRoLnNpbihlKSx1PWMqbitzKmk7cmV0dXJuW01hdGguYXRhbjIobCphLXUqbyxzKm4tYyppKSxudCh1KmErbCpvKV19dmFyIG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKGUpLG89TWF0aC5zaW4oZSk7cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpyLGw9TWF0aC5zaW4odCkqcixjPU1hdGguc2luKGUpLHU9YyphLWwqbztyZXR1cm5bTWF0aC5hdGFuMihsKmErYypvLHMqbit1KmkpLG50KHUqbi1zKmkpXX0scn1mdW5jdGlvbiB2cih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPW8qZTtudWxsIT1pPyhpPWdyKHIsaSksYT1ncihyLGEpLChvPjA/aTxhOmk+YSkmJihpKz1vKkJvKSk6KGk9dCtvKkJvLGE9dC0uNSpsKTtmb3IodmFyIGMsdT1pO28+MD91PmE6dTxhO3UtPWwpcy5wb2ludCgoYz1NZShbciwtbipNYXRoLmNvcyh1KSwtbipNYXRoLnNpbih1KV0pKVswXSxjWzFdKX19ZnVuY3Rpb24gZ3IodCxlKXt2YXIgcj1nZShlKTtyWzBdLT10LHdlKHIpO3ZhciBuPXJ0KC1yWzFdKTtyZXR1cm4oKC1yWzJdPDA/LW46bikrMipNYXRoLlBJLUZvKSUoMipNYXRoLlBJKX1mdW5jdGlvbiB5cih0LGUscil7dmFyIG49Y28ucmFuZ2UodCxlLUZvLHIpLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGJyKHQsZSxyKXt2YXIgbj1jby5yYW5nZSh0LGUtRm8scikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KX19ZnVuY3Rpb24geHIodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIF9yKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiB3cih0LGUscixuKXt2YXIgaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPWkqTWF0aC5jb3ModCksYz1pKk1hdGguc2luKHQpLHU9bypNYXRoLmNvcyhyKSxmPW8qTWF0aC5zaW4ociksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoc3Qobi1lKStpKm8qc3Qoci10KSkpLGQ9MS9NYXRoLnNpbihoKSxwPWg/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zaW4odCo9aCkqZCxyPU1hdGguc2luKGgtdCkqZCxuPXIqbCtlKnUsaT1yKmMrZSpmLG89ciphK2UqcztyZXR1cm5bTWF0aC5hdGFuMihpLG4pKnFvLE1hdGguYXRhbjIobyxNYXRoLnNxcnQobipuK2kqaSkpKnFvXX06ZnVuY3Rpb24oKXtyZXR1cm5bdCpxbyxlKnFvXX07cmV0dXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIE1yKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBhPU1hdGguc2luKGkqPUhvKSxvPU1hdGguY29zKGkpLHM9eG8oKHQqPUhvKS1lKSxsPU1hdGguY29zKHMpO1dzKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPW4qYS1yKm8qbCkqcyksciphK24qbypsKSxlPXQscj1hLG49b312YXIgZSxyLG47WnMucG9pbnQ9ZnVuY3Rpb24oaSxhKXtlPWkqSG8scj1NYXRoLnNpbihhKj1Ibyksbj1NYXRoLmNvcyhhKSxacy5wb2ludD10fSxacy5saW5lRW5kPWZ1bmN0aW9uKCl7WnMucG9pbnQ9WnMubGluZUVuZD1NfX1mdW5jdGlvbiBUcih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9ZnVuY3Rpb24ga3IodCxlKXtmdW5jdGlvbiByKHQsZSl7bz4wP2U8LVZvK0ZvJiYoZT0tVm8rRm8pOmU+Vm8tRm8mJihlPVZvLUZvKTt2YXIgcj1vL01hdGgucG93KGkoZSksYSk7cmV0dXJuW3IqTWF0aC5zaW4oYSp0KSxvLXIqTWF0aC5jb3MoYSp0KV19dmFyIG49TWF0aC5jb3ModCksaT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oTm8vNCt0LzIpfSxhPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKG4vTWF0aC5jb3MoZSkpL01hdGgubG9nKGkoZSkvaSh0KSksbz1uKk1hdGgucG93KGkodCksYSkvYTtyZXR1cm4gYT8oci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1vLWUsbj10dChhKSpNYXRoLnNxcnQodCp0K3Iqcik7cmV0dXJuW01hdGguYXRhbjIodCxyKS9hLDIqTWF0aC5hdGFuKE1hdGgucG93KG8vbiwxL2EpKS1Wb119LHIpOkVyfWZ1bmN0aW9uIEFyKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPWEtZTtyZXR1cm5bcipNYXRoLnNpbihpKnQpLGEtcipNYXRoLmNvcyhpKnQpXX12YXIgbj1NYXRoLmNvcyh0KSxpPXQ9PT1lP01hdGguc2luKHQpOihuLU1hdGguY29zKGUpKS8oZS10KSxhPW4vaSt0O3JldHVybiB4byhpKTxGbz91cjooci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9pLGEtdHQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpXX0scil9ZnVuY3Rpb24gRXIodCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihOby80K2UvMikpXX1mdW5jdGlvbiBTcih0KXt2YXIgZSxyPXNyKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9Tm8qbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIExyKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKE5vLzQrZS8yKSksLXRdfWZ1bmN0aW9uIENyKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIElyKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIERyKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJmV0KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIFByKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHpyKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBPcih0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGY9blsxXS1jLGg9KHMqKGwtYyktZiooaS1hKSkvKGYqby1zKnUpO3JldHVybltpK2gqbyxsK2gqdV19ZnVuY3Rpb24gUnIodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9ZnVuY3Rpb24gRnIoKXthbih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24ganIodCl7dmFyIGU9c2wucG9wKCl8fG5ldyBGcjtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBOcih0KXtacih0KSxpbC5yZW1vdmUodCksc2wucHVzaCh0KSxhbih0KX1mdW5jdGlvbiBCcih0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07TnIodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnhvKHItbC5jaXJjbGUueCk8Rm8mJnhvKG4tbC5jaXJjbGUuY3kpPEZvOylhPWwuUCxzLnVuc2hpZnQobCksTnIobCksbD1hO3MudW5zaGlmdChsKSxacihsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeG8oci1jLmNpcmNsZS54KTxGbyYmeG8obi1jLmNpcmNsZS5jeSk8Rm87KW89Yy5OLHMucHVzaChjKSxOcihjKSxjPW87cy5wdXNoKGMpLFpyKGMpO3ZhciB1LGY9cy5sZW5ndGg7Zm9yKHU9MTt1PGY7Kyt1KWM9c1t1XSxsPXNbdS0xXSxlbihjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW2YtMV0sYy5lZGdlPSRyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxXcihsKSxXcihjKX1mdW5jdGlvbiBVcih0KXtmb3IodmFyIGUscixuLGksYT10Lngsbz10Lnkscz1pbC5fO3M7KWlmKChuPVZyKHMsbyktYSk+Rm8pcz1zLkw7ZWxzZXtpZighKChpPWEtSHIocyxvKSk+Rm8pKXtuPi1Gbz8oZT1zLlAscj1zKTppPi1Gbz8oZT1zLHI9cy5OKTplPXI9czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9dmFyIGw9anIodCk7aWYoaWwuaW5zZXJ0KGUsbCksZXx8cil7aWYoZT09PXIpcmV0dXJuIFpyKGUpLHI9anIoZS5zaXRlKSxpbC5pbnNlcnQobCxyKSxsLmVkZ2U9ci5lZGdlPSRyKGUuc2l0ZSxsLnNpdGUpLFdyKGUpLHZvaWQgV3Iocik7aWYoIXIpcmV0dXJuIHZvaWQobC5lZGdlPSRyKGUuc2l0ZSxsLnNpdGUpKTtacihlKSxacihyKTt2YXIgYz1lLnNpdGUsdT1jLngsZj1jLnksaD10LngtdSxkPXQueS1mLHA9ci5zaXRlLG09cC54LXUsdj1wLnktZixnPTIqKGgqdi1kKm0pLHk9aCpoK2QqZCxiPW0qbSt2KnYseD17eDoodip5LWQqYikvZyt1LHk6KGgqYi1tKnkpL2crZn07ZW4oci5lZGdlLGMscCx4KSxsLmVkZ2U9JHIoYyx0LG51bGwseCksci5lZGdlPSRyKHQscCxudWxsLHgpLFdyKGUpLFdyKHIpfX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLSgxLzApO3I9by5zaXRlO3ZhciBzPXIueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4sZj0xL2EtMS9jLGg9dS9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9mK246KG4rcykvMn1mdW5jdGlvbiBIcih0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBWcihyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIHFyKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gR3IodCl7Zm9yKHZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGY9dFswXVswXSxoPXRbMV1bMF0sZD10WzBdWzFdLHA9dFsxXVsxXSxtPW5sLHY9bS5sZW5ndGg7di0tOylpZigoYT1tW3ZdKSYmYS5wcmVwYXJlKCkpZm9yKHM9YS5lZGdlcyxsPXMubGVuZ3RoLG89MDtvPGw7KXU9c1tvXS5lbmQoKSxuPXUueCxpPXUueSxjPXNbKytvJWxdLnN0YXJ0KCksZT1jLngscj1jLnksKHhvKG4tZSk+Rm98fHhvKGktcik+Rm8pJiYocy5zcGxpY2UobywwLG5ldyBybih0bihhLnNpdGUsdSx4byhuLWYpPEZvJiZwLWk+Rm8/e3g6Zix5OnhvKGUtZik8Rm8/cjpwfTp4byhpLXApPEZvJiZoLW4+Rm8/e3g6eG8oci1wKTxGbz9lOmgseTpwfTp4byhuLWgpPEZvJiZpLWQ+Rm8/e3g6aCx5OnhvKGUtaCk8Rm8/cjpkfTp4byhpLWQpPEZvJiZuLWY+Rm8/e3g6eG8oci1kKTxGbz9lOmYseTpkfTpudWxsKSxhLnNpdGUsbnVsbCkpLCsrbCl9ZnVuY3Rpb24gWXIodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIFhyKCl7YW4odGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFdyKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxmPWEueS1zLGg9MioobCpmLWMqdSk7aWYoIShoPj0tam8pKXt2YXIgZD1sKmwrYypjLHA9dSp1K2YqZixtPShmKmQtYypwKS9oLHY9KGwqcC11KmQpL2gsZj12K3MsZz1sbC5wb3AoKXx8bmV3IFhyO2cuYXJjPXQsZy5zaXRlPWksZy54PW0rbyxnLnk9ZitNYXRoLnNxcnQobSptK3YqdiksZy5jeT1mLHQuY2lyY2xlPWc7Zm9yKHZhciB5PW51bGwsYj1vbC5fO2I7KWlmKGcueTxiLnl8fGcueT09PWIueSYmZy54PD1iLngpe2lmKCFiLkwpe3k9Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7eT1iO2JyZWFrfWI9Yi5SfW9sLmluc2VydCh5LGcpLHl8fChhbD1nKX19fX1mdW5jdGlvbiBacih0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoYWw9ZS5OKSxvbC5yZW1vdmUoZSksbGwucHVzaChlKSxhbihlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBKcih0KXtmb3IodmFyIGUscj1ybCxuPXFlKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOyllPXJbaV0sKCFLcihlLHQpfHwhbihlKXx8eG8oZS5hLngtZS5iLngpPEZvJiZ4byhlLmEueS1lLmIueSk8Rm8pJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGksMSkpfWZ1bmN0aW9uIEtyKHQsZSl7dmFyIHI9dC5iO2lmKHIpcmV0dXJuITA7dmFyIG4saSxhPXQuYSxvPWVbMF1bMF0scz1lWzFdWzBdLGw9ZVswXVsxXSxjPWVbMV1bMV0sdT10LmwsZj10LnIsaD11LngsZD11LnkscD1mLngsbT1mLnksdj0oaCtwKS8yLGc9KGQrbSkvMjtpZihtPT09ZCl7aWYodjxvfHx2Pj1zKXJldHVybjtpZihoPnApe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OnYseTpsfTtyPXt4OnYseTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6dix5OmN9O3I9e3g6dix5Omx9fX1lbHNlIGlmKG49KGgtcCkvKG0tZCksaT1nLW4qdixuPC0xfHxuPjEpaWYoaD5wKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDoobC1pKS9uLHk6bH07cj17eDooYy1pKS9uLHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OihjLWkpL24seTpjfTtyPXt4OihsLWkpL24seTpsfX1lbHNlIGlmKGQ8bSl7aWYoYSl7aWYoYS54Pj1zKXJldHVybn1lbHNlIGE9e3g6byx5Om4qbytpfTtyPXt4OnMseTpuKnMraX19ZWxzZXtpZihhKXtpZihhLng8bylyZXR1cm59ZWxzZSBhPXt4OnMseTpuKnMraX07cj17eDpvLHk6bipvK2l9fXJldHVybiB0LmE9YSx0LmI9ciwhMH1mdW5jdGlvbiBRcih0LGUpe3RoaXMubD10LHRoaXMucj1lLHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiAkcih0LGUscixuKXt2YXIgaT1uZXcgUXIodCxlKTtyZXR1cm4gcmwucHVzaChpKSxyJiZlbihpLHQsZSxyKSxuJiZlbihpLGUsdCxuKSxubFt0LmldLmVkZ2VzLnB1c2gobmV3IHJuKGksdCxlKSksbmxbZS5pXS5lZGdlcy5wdXNoKG5ldyBybihpLGUsdCkpLGl9ZnVuY3Rpb24gdG4odCxlLHIpe3ZhciBuPW5ldyBRcih0LG51bGwpO3JldHVybiBuLmE9ZSxuLmI9cixybC5wdXNoKG4pLG59ZnVuY3Rpb24gZW4odCxlLHIsbil7dC5hfHx0LmI/dC5sPT09cj90LmI9bjp0LmE9bjoodC5hPW4sdC5sPWUsdC5yPXIpfWZ1bmN0aW9uIHJuKHQsZSxyKXt2YXIgbj10LmEsaT10LmI7dGhpcy5lZGdlPXQsdGhpcy5zaXRlPWUsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LWUueSxyLngtZS54KTp0Lmw9PT1lP01hdGguYXRhbjIoaS54LW4ueCxuLnktaS55KTpNYXRoLmF0YW4yKG4ueC1pLngsaS55LW4ueSl9ZnVuY3Rpb24gbm4oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBhbih0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9ZSxuPWUuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBzbih0LGUpe3ZhciByPWUsbj1lLkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gbG4odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIGNuKHQsZSl7dmFyIHIsbixpLGE9dC5zb3J0KHVuKS5wb3AoKTtmb3Iocmw9W10sbmw9bmV3IEFycmF5KHQubGVuZ3RoKSxpbD1uZXcgbm4sb2w9bmV3IG5uOzspaWYoaT1hbCxhJiYoIWl8fGEueTxpLnl8fGEueT09PWkueSYmYS54PGkueCkpYS54PT09ciYmYS55PT09bnx8KG5sW2EuaV09bmV3IHFyKGEpLFVyKGEpLHI9YS54LG49YS55KSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztCcihpLmFyYyl9ZSYmKEpyKGUpLEdyKGUpKTt2YXIgbz17Y2VsbHM6bmwsZWRnZXM6cmx9O3JldHVybiBpbD1vbD1ybD1ubD1udWxsLG99ZnVuY3Rpb24gdW4odCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1mdW5jdGlvbiBmbih0LGUscil7cmV0dXJuKHQueC1yLngpKihlLnktdC55KS0odC54LWUueCkqKHIueS10LnkpfWZ1bmN0aW9uIGhuKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBwbigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gbW4odCxlLHIsbixpLGEpe2lmKCF0KGUscixuLGksYSkpe3ZhciBvPS41KihyK2kpLHM9LjUqKG4rYSksbD1lLm5vZGVzO2xbMF0mJm1uKHQsbFswXSxyLG4sbyxzKSxsWzFdJiZtbih0LGxbMV0sbyxuLGkscyksbFsyXSYmbW4odCxsWzJdLHIscyxvLGEpLGxbM10mJm1uKHQsbFszXSxvLHMsaSxhKX19ZnVuY3Rpb24gdm4odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGYsaCxkKXtpZighKHU+YXx8Zj5vfHxoPG58fGQ8aSkpe2lmKHA9Yy5wb2ludCl7dmFyIHAsbT1lLWMueCx2PXItYy55LGc9bSptK3YqdjtpZihnPGwpe3ZhciB5PU1hdGguc3FydChsPWcpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9cH19Zm9yKHZhciBiPWMubm9kZXMseD0uNSoodStoKSxfPS41KihmK2QpLHc9ZT49eCxNPXI+PV8sVD1NPDwxfHcsaz1UKzQ7VDxrOysrVClpZihjPWJbMyZUXSlzd2l0Y2goMyZUKXtjYXNlIDA6dChjLHUsZix4LF8pO2JyZWFrO2Nhc2UgMTp0KGMseCxmLGgsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8seCxkKTticmVhaztjYXNlIDM6dChjLHgsXyxoLGQpfX19KHQsbixpLGEsbyksc31mdW5jdGlvbiBnbih0LGUpe3Q9Y28ucmdiKHQpLGU9Y28ucmdiKGUpO3ZhciByPXQucixuPXQuZyxpPXQuYixhPWUuci1yLG89ZS5nLW4scz1lLmItaTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3d0KE1hdGgucm91bmQocithKnQpKSt3dChNYXRoLnJvdW5kKG4rbyp0KSkrd3QoTWF0aC5yb3VuZChpK3MqdCkpfX1mdW5jdGlvbiB5bih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPV9uKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHhuKHQsZSl7dmFyIHIsbixpLGE9dWwubGFzdEluZGV4PWZsLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj11bC5leGVjKHQpKSYmKG49ZmwuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OmJuKHIsbil9KSksYT1mbC5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gX24odCxlKXtmb3IodmFyIHIsbj1jby5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLW4+PTAmJiEocj1jby5pbnRlcnBvbGF0b3JzW25dKHQsZSkpOyk7cmV0dXJuIHJ9ZnVuY3Rpb24gd24odCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goX24odFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBNbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24gVG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gQW4odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gU24odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExuKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpWbyl9ZnVuY3Rpb24gSW4odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIERuKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gUG4odCxlKXt2YXIgcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/cj1lL0JvKk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpLGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqQm8vZSl9fWZ1bmN0aW9uIHpuKHQpe3JldHVybiB0fHwodD0xLjcwMTU4KSxmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX1mdW5jdGlvbiBPbih0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIFJuKHQsZSl7dD1jby5oY2wodCksZT1jby5oY2woZSk7dmFyIHI9dC5oLG49dC5jLGk9dC5sLGE9ZS5oLXIsbz1lLmMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuYzpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBodChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIEZuKHQsZSl7dD1jby5oc2wodCksZT1jby5oc2woZSk7dmFyIHI9dC5oLG49dC5zLGk9dC5sLGE9ZS5oLXIsbz1lLnMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuczpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiB1dChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIGpuKHQsZSl7dD1jby5sYWIodCksZT1jby5sYWIoZSk7dmFyIHI9dC5sLG49dC5hLGk9dC5iLGE9ZS5sLXIsbz1lLmEtbixzPWUuYi1pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcHQocithKnQsbitvKnQsaStzKnQpKyIifX1mdW5jdGlvbiBObih0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gQm4odCl7dmFyIGU9W3QuYSx0LmJdLHI9W3QuYyx0LmRdLG49Vm4oZSksaT1VbihlLHIpLGE9Vm4oSG4ocixlLC1pKSl8fDA7ZVswXSpyWzFdPHJbMF0qZVsxXSYmKGVbMF0qPS0xLGVbMV0qPS0xLG4qPS0xLGkqPS0xKSx0aGlzLnJvdGF0ZT0obj9NYXRoLmF0YW4yKGVbMV0sZVswXSk6TWF0aC5hdGFuMigtclswXSxyWzFdKSkqcW8sdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W24sYV0sdGhpcy5za2V3PWE/TWF0aC5hdGFuMihpLGEpKnFvOjB9ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBWbih0KXt2YXIgZT1NYXRoLnNxcnQoVW4odCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9ZnVuY3Rpb24gSG4odCxlLHIpe3JldHVybiB0WzBdKz1yKmVbMF0sdFsxXSs9ciplWzFdLHR9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIEduKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX1mdW5jdGlvbiBZbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaChxbihyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSkpOmUmJnIucHVzaChxbihyKSsicm90YXRlKCIrZSsiKSIpfWZ1bmN0aW9uIFhuKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2gocW4ocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSk6ZSYmci5wdXNoKHFuKHIpKyJza2V3WCgiK2UrIikiKX1mdW5jdGlvbiBXbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChxbihyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKHFuKHIpKyJzY2FsZSgiK2UrIikiKX1mdW5jdGlvbiBabih0LGUpe3ZhciByPVtdLG49W107cmV0dXJuIHQ9Y28udHJhbnNmb3JtKHQpLGU9Y28udHJhbnNmb3JtKGUpLEduKHQudHJhbnNsYXRlLGUudHJhbnNsYXRlLHIsbiksWW4odC5yb3RhdGUsZS5yb3RhdGUscixuKSxYbih0LnNrZXcsZS5za2V3LHIsbiksV24odC5zY2FsZSxlLnNjYWxlLHIsbiksdD1lPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspclsoZT1uW2ldKS5pXT1lLngodCk7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIEpuKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24gUW4odCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj10aShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uICRuKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gdGkodCxlKXtpZih0PT09ZSlyZXR1cm4gdDtmb3IodmFyIHI9JG4odCksbj0kbihlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gZWkodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiByaSh0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiBuaSh0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIGlpKHQpe3QuZml4ZWQmPS01fWZ1bmN0aW9uIGFpKHQsZSxyKXt2YXIgbj0wLGk9MDtpZih0LmNoYXJnZT0wLCF0LmxlYWYpZm9yKHZhciBhLG89dC5ub2RlcyxzPW8ubGVuZ3RoLGw9LTE7KytsPHM7KW51bGwhPShhPW9bbF0pJiYoYWkoYSxlLHIpLHQuY2hhcmdlKz1hLmNoYXJnZSxuKz1hLmNoYXJnZSphLmN4LGkrPWEuY2hhcmdlKmEuY3kpO2lmKHQucG9pbnQpe3QubGVhZnx8KHQucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSx0LnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBjPWUqclt0LnBvaW50LmluZGV4XTt0LmNoYXJnZSs9dC5wb2ludENoYXJnZT1jLG4rPWMqdC5wb2ludC54LGkrPWMqdC5wb2ludC55fXQuY3g9bi90LmNoYXJnZSx0LmN5PWkvdC5jaGFyZ2V9ZnVuY3Rpb24gb2kodCxlKXtyZXR1cm4gY28ucmViaW5kKHQsZSwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSx0Lm5vZGVzPXQsdC5saW5rcz1oaSx0fWZ1bmN0aW9uIHNpKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uIGxpKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiB1aSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBmaSh0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gaGkodCl7cmV0dXJuIGNvLm1lcmdlKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gbWkodCxlLHIpe3QueTA9ZSx0Lnk9cn1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gY28ucmFuZ2UodC5sZW5ndGgpfWZ1bmN0aW9uIGdpKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiB5aSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBiaSh0KXtyZXR1cm4gdC5yZWR1Y2UoeGksMCl9ZnVuY3Rpb24geGkodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIF9pKHQsZSl7cmV0dXJuIHdpKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gd2kodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gTWkodCl7cmV0dXJuW2NvLm1pbih0KSxjby5tYXgodCldfWZ1bmN0aW9uIFRpKHQsZSl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBraSh0LGUpe3ZhciByPXQuX3BhY2tfbmV4dDt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dCxlLl9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9ZX1mdW5jdGlvbiBBaSh0LGUpe3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIEVpKHQsZSl7dmFyIHI9ZS54LXQueCxuPWUueS10LnksaT10LnIrZS5yO3JldHVybi45OTkqaSppPnIqcituKm59ZnVuY3Rpb24gU2kodCl7ZnVuY3Rpb24gZSh0KXt1PU1hdGgubWluKHQueC10LnIsdSksZj1NYXRoLm1heCh0LngrdC5yLGYpLGg9TWF0aC5taW4odC55LXQucixoKSxkPU1hdGgubWF4KHQueSt0LnIsZCl9aWYoKHI9dC5jaGlsZHJlbikmJihjPXIubGVuZ3RoKSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1PTEvMCxmPS0oMS8wKSxoPTEvMCxkPS0oMS8wKTtpZihyLmZvckVhY2goTGkpLG49clswXSxuLng9LW4ucixuLnk9MCxlKG4pLGM+MSYmKGk9clsxXSxpLng9aS5yLGkueT0wLGUoaSksYz4yKSlmb3IoYT1yWzJdLERpKG4saSxhKSxlKGEpLGtpKG4sYSksbi5fcGFja19wcmV2PWEsa2koYSxpKSxpPW4uX3BhY2tfbmV4dCxvPTM7bzxjO28rKyl7RGkobixpLGE9cltvXSk7dmFyIHA9MCxtPTEsdj0xO2ZvcihzPWkuX3BhY2tfbmV4dDtzIT09aTtzPXMuX3BhY2tfbmV4dCxtKyspaWYoRWkocyxhKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKGw9bi5fcGFja19wcmV2O2whPT1zLl9wYWNrX3ByZXYmJiFFaShsLGEpO2w9bC5fcGFja19wcmV2LHYrKyk7cD8obTx2fHxtPT12JiZpLnI8bi5yP0FpKG4saT1zKTpBaShuPWwsaSksby0tKTooa2kobixhKSxpPWEsZShhKSl9dmFyIGc9KHUrZikvMix5PShoK2QpLzIsYj0wO2ZvcihvPTA7bzxjO28rKylhPXJbb10sYS54LT1nLGEueS09eSxiPU1hdGgubWF4KGIsYS5yK01hdGguc3FydChhLngqYS54K2EueSphLnkpKTt0LnI9YixyLmZvckVhY2goQ2kpfX1mdW5jdGlvbiBMaSh0KXt0Ll9wYWNrX25leHQ9dC5fcGFja19wcmV2PXR9ZnVuY3Rpb24gQ2kodCl7ZGVsZXRlIHQuX3BhY2tfbmV4dCxkZWxldGUgdC5fcGFja19wcmV2fWZ1bmN0aW9uIElpKHQsZSxyLG4pe3ZhciBpPXQuY2hpbGRyZW47aWYodC54PWUrPW4qdC54LHQueT1yKz1uKnQueSx0LnIqPW4saSlmb3IodmFyIGE9LTEsbz1pLmxlbmd0aDsrK2E8bzspSWkoaVthXSxlLHIsbil9ZnVuY3Rpb24gRGkodCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphO28qPW8sbio9bjt2YXIgbD0uNSsobi1vKS8oMipzKSxjPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoobitzKS0obi09cykqbi1vKm8pKS8oMipzKTtyLng9dC54K2wqaStjKmEsci55PXQueStsKmEtYyppfWVsc2Ugci54PXQueCtuLHIueT10Lnl9ZnVuY3Rpb24gUGkodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PWUucGFyZW50PzE6Mn1mdW5jdGlvbiB6aSh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlLmxlbmd0aD9lWzBdOnQudH1mdW5jdGlvbiBPaSh0KXt2YXIgZSxyPXQuY2hpbGRyZW47cmV0dXJuKGU9ci5sZW5ndGgpP3JbZS0xXTp0LnR9ZnVuY3Rpb24gUmkodCxlLHIpe3ZhciBuPXIvKGUuaS10LmkpO2UuYy09bixlLnMrPXIsdC5jKz1uLGUueis9cixlLm0rPXJ9ZnVuY3Rpb24gRmkodCl7Zm9yKHZhciBlLHI9MCxuPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOyllPWlbYV0sZS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9ZnVuY3Rpb24gamkodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gTmkodCl7cmV0dXJuIDErY28ubWF4KHQsZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pfWZ1bmN0aW9uIEJpKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0sMCkvdC5sZW5ndGh9ZnVuY3Rpb24gVWkodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZSYmZS5sZW5ndGg/VWkoZVswXSk6dH1mdW5jdGlvbiBWaSh0KXt2YXIgZSxyPXQuY2hpbGRyZW47cmV0dXJuIHImJihlPXIubGVuZ3RoKT9WaShyW2UtMV0pOnR9ZnVuY3Rpb24gSGkodCl7cmV0dXJue3g6dC54LHk6dC55LGR4OnQuZHgsZHk6dC5keX19ZnVuY3Rpb24gcWkodCxlKXt2YXIgcj10LngrZVszXSxuPXQueStlWzBdLGk9dC5keC1lWzFdLWVbM10sYT10LmR5LWVbMF0tZVsyXTtyZXR1cm4gaTwwJiYocis9aS8yLGk9MCksYTwwJiYobis9YS8yLGE9MCkse3g6cix5Om4sZHg6aSxkeTphfX1mdW5jdGlvbiBHaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gZTxyP1tlLHJdOltyLGVdfWZ1bmN0aW9uIFlpKHQpe3JldHVybiB0LnJhbmdlRXh0ZW50P3QucmFuZ2VFeHRlbnQoKTpHaSh0LnJhbmdlKCkpfWZ1bmN0aW9uIFhpKHQsZSxyLG4pe3ZhciBpPXIodFswXSx0WzFdKSxhPW4oZVswXSxlWzFdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIFdpKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgtMSxhPXRbbl0sbz10W2ldO3JldHVybiBvPGEmJihyPW4sbj1pLGk9cixyPWEsYT1vLG89ciksdFtuXT1lLmZsb29yKGEpLHRbaV09ZS5jZWlsKG8pLHR9ZnVuY3Rpb24gWmkodCl7cmV0dXJuIHQ/e2Zsb29yOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdCkqdH0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5jZWlsKGUvdCkqdH19OndsfWZ1bmN0aW9uIEppKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10sbz0wLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTE7Zm9yKHRbc108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzw9czspaS5wdXNoKHIodFtvLTFdLHRbb10pKSxhLnB1c2gobihlW28tMV0sZVtvXSkpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1jby5iaXNlY3QodCxlLDEscyktMTtyZXR1cm4gYVtyXShpW3JdKGUpKX19ZnVuY3Rpb24gS2kodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKT4yP0ppOlhpLGw9bj9LbjpKbjtyZXR1cm4gbz1pKHQsZSxsLHIpLHM9aShlLHQsbCxfbiksYX1mdW5jdGlvbiBhKHQpe3JldHVybiBvKHQpfXZhciBvLHM7cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBzKHQpfSxhLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLm1hcChOdW1iZXIpLGkoKSk6dH0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGkoKSk6ZX0sYS5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhLnJhbmdlKHQpLmludGVycG9sYXRlKE5uKX0sYS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkoKSk6bn0sYS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkoKSk6cn0sYS50aWNrcz1mdW5jdGlvbihlKXtyZXR1cm4gZWEodCxlKX0sYS50aWNrRm9ybWF0PWZ1bmN0aW9uKGUscil7cmV0dXJuIHJhKHQsZSxyKX0sYS5uaWNlPWZ1bmN0aW9uKGUpe3JldHVybiAkaSh0LGUpLGkoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEtpKHQsZSxyLG4pfSxpKCl9ZnVuY3Rpb24gUWkodCxlKXtyZXR1cm4gY28ucmViaW5kKHQsZSwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uICRpKHQsZSl7cmV0dXJuIFdpKHQsWmkodGEodCxlKVsyXSkpLFdpKHQsWmkodGEodCxlKVsyXSkpLHR9ZnVuY3Rpb24gdGEodCxlKXtudWxsPT1lJiYoZT0xMCk7dmFyIHI9R2kodCksbj1yWzFdLXJbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4vZSkvTWF0aC5MTjEwKSksYT1lL24qaTtyZXR1cm4gYTw9LjE1P2kqPTEwOmE8PS4zNT9pKj01OmE8PS43NSYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gZWEodCxlKXtyZXR1cm4gY28ucmFuZ2UuYXBwbHkoY28sdGEodCxlKSl9ZnVuY3Rpb24gcmEodCxlLHIpe3ZhciBuPXRhKHQsZSk7aWYocil7dmFyIGk9dXMuZXhlYyhyKTtpZihpLnNoaWZ0KCksInMiPT09aVs4XSl7dmFyIGE9Y28uZm9ybWF0UHJlZml4KE1hdGgubWF4KHhvKG5bMF0pLHhvKG5bMV0pKSk7cmV0dXJuIGlbN118fChpWzddPSIuIituYShhLnNjYWxlKG5bMl0pKSksaVs4XT0iZiIscj1jby5mb3JtYXQoaS5qb2luKCIiKSksZnVuY3Rpb24odCl7cmV0dXJuIHIoYS5zY2FsZSh0KSkrYS5zeW1ib2x9fWlbN118fChpWzddPSIuIitpYShpWzhdLG4pKSxyPWkuam9pbigiIil9ZWxzZSByPSIsLiIrbmEoblsyXSkrImYiO3JldHVybiBjby5mb3JtYXQocil9ZnVuY3Rpb24gbmEodCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9ZnVuY3Rpb24gaWEodCxlKXt2YXIgcj1uYShlWzJdKTtyZXR1cm4gdCBpbiBNbD9NYXRoLmFicyhyLW5hKE1hdGgubWF4KHhvKGVbMF0pLHhvKGVbMV0pKSkpKyArKCJlIiE9PXQpOnItMiooIiUiPT09dCl9ZnVuY3Rpb24gYWEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4ocj9NYXRoLmxvZyh0PDA/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhlKX1mdW5jdGlvbiBhKHQpe3JldHVybiByP01hdGgucG93KGUsdCk6LU1hdGgucG93KGUsLXQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHQoaShlKSl9cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBhKHQuaW52ZXJ0KGUpKX0sby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZVswXT49MCx0LmRvbWFpbigobj1lLm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59LG8uYmFzZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rcix0LmRvbWFpbihuLm1hcChpKSksbyk6ZX0sby5uaWNlPWZ1bmN0aW9uKCl7dmFyIGU9V2kobi5tYXAoaSkscj9NYXRoOmtsKTtyZXR1cm4gdC5kb21haW4oZSksbj1lLm1hcChhKSxvfSxvLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9R2kobiksbz1bXSxzPXRbMF0sbD10WzFdLGM9TWF0aC5mbG9vcihpKHMpKSx1PU1hdGguY2VpbChpKGwpKSxmPWUlMT8yOmU7aWYoaXNGaW5pdGUodS1jKSl7aWYocil7Zm9yKDtjPHU7YysrKWZvcih2YXIgaD0xO2g8ZjtoKyspby5wdXNoKGEoYykqaCk7by5wdXNoKGEoYykpfWVsc2UgZm9yKG8ucHVzaChhKGMpKTtjKys8dTspZm9yKHZhciBoPWYtMTtoPjA7aC0tKW8ucHVzaChhKGMpKmgpO2ZvcihjPTA7b1tjXTxzO2MrKyk7Zm9yKHU9by5sZW5ndGg7b1t1LTFdPmw7dS0tKTtvPW8uc2xpY2UoYyx1KX1yZXR1cm4gb30sby50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIFRsO2FyZ3VtZW50cy5sZW5ndGg8Mj9yPVRsOiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1jby5mb3JtYXQocikpO3ZhciBuPU1hdGgubWF4KDEsZSp0L28udGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbz10L2EoTWF0aC5yb3VuZChpKHQpKSk7cmV0dXJuIG8qZTxlLS41JiYobyo9ZSksbzw9bj9yKHQpOiIifX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFhKHQuY29weSgpLGUscixuKX0sUWkobyx0KX1mdW5jdGlvbiBvYSh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdChpKGUpKX12YXIgaT1zYShlKSxhPXNhKDEvZSk7cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBhKHQuaW52ZXJ0KGUpKX0sbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKChyPWUubWFwKE51bWJlcikpLm1hcChpKSksbik6cn0sbi50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gZWEocix0KX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJhKHIsdCxlKX0sbi5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBuLmRvbWFpbigkaShyLHQpKX0sbi5leHBvbmVudD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zYShlPW8pLGE9c2EoMS9lKSx0LmRvbWFpbihyLm1hcChpKSksbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG9hKHQuY29weSgpLGUscil9LFFpKG4sdCl9ZnVuY3Rpb24gc2EodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIGxhKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gYVsoKGkuZ2V0KHIpfHwoInJhbmdlIj09PWUudD9pLnNldChyLHQucHVzaChyKSk6TmFOKSktMSklYS5sZW5ndGhdfWZ1bmN0aW9uIG4oZSxyKXtyZXR1cm4gY28ucmFuZ2UodC5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStyKnR9KX12YXIgaSxhLG87cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0O3Q9W10saT1uZXcgZjtmb3IodmFyIGEsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOylpLmhhcyhhPW5bb10pfHxpLnNldChhLHQucHVzaChhKSk7cmV0dXJuIHJbZS50XS5hcHBseShyLGUuYSl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvPTAsZT17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxyKTphfSxyLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKGkscyl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKTt2YXIgbD1pWzBdLGM9aVsxXSx1PXQubGVuZ3RoPDI/KGw9KGwrYykvMiwwKTooYy1sKS8odC5sZW5ndGgtMStzKTtyZXR1cm4gYT1uKGwrdSpzLzIsdSksbz0wLGU9e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZVJvdW5kUG9pbnRzPWZ1bmN0aW9uKGkscyl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKTt2YXIgbD1pWzBdLGM9aVsxXSx1PXQubGVuZ3RoPDI/KGw9Yz1NYXRoLnJvdW5kKChsK2MpLzIpLDApOihjLWwpLyh0Lmxlbmd0aC0xK3MpfDA7cmV0dXJuIGE9bihsK01hdGgucm91bmQodSpzLzIrKGMtbC0odC5sZW5ndGgtMStzKSp1KS8yKSx1KSxvPTAsZT17dDoicmFuZ2VSb3VuZFBvaW50cyIsYTphcmd1bWVudHN9LHJ9LHIucmFuZ2VCYW5kcz1mdW5jdGlvbihpLHMsbCl7YXJndW1lbnRzLmxlbmd0aDwyJiYocz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihsPXMpO3ZhciBjPWlbMV08aVswXSx1PWlbYy0wXSxmPWlbMS1jXSxoPShmLXUpLyh0Lmxlbmd0aC1zKzIqbCk7cmV0dXJuIGE9bih1K2gqbCxoKSxjJiZhLnJldmVyc2UoKSxvPWgqKDEtcyksZT17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LHJ9LHIucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKGkscyxsKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9cyk7dmFyIGM9aVsxXTxpWzBdLHU9aVtjLTBdLGY9aVsxLWNdLGg9TWF0aC5mbG9vcigoZi11KS8odC5sZW5ndGgtcysyKmwpKTtyZXR1cm4gYT1uKHUrTWF0aC5yb3VuZCgoZi11LSh0Lmxlbmd0aC1zKSpoKS8yKSxoKSxjJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoaCooMS1zKSksZT17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gb30sci5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBHaShlLmFbMF0pfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbGEodCxlKX0sci5kb21haW4odCl9ZnVuY3Rpb24gY2EodCxlKXtmdW5jdGlvbiByKCl7dmFyIHI9MCxpPWUubGVuZ3RoO2ZvcihzPVtdOysrcjxpOylzW3ItMV09Y28ucXVhbnRpbGUodCxyL2kpO3JldHVybiBufWZ1bmN0aW9uIG4odCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiBlW2NvLmJpc2VjdChzLHQpXX12YXIgcztyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZS5tYXAoYSkuZmlsdGVyKG8pLnNvcnQoaSkscigpKTp0fSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscigpKTplfSxuLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBzfSxuLmludmVydEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmluZGV4T2YocikscjwwP1tOYU4sTmFOXTpbcj4wP3Nbci0xXTp0WzBdLHI8cy5sZW5ndGg/c1tyXTp0W3QubGVuZ3RoLTFdXX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNhKHQsZSl9LHIoKX1mdW5jdGlvbiB1YSh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gcltNYXRoLm1heCgwLE1hdGgubWluKG8sTWF0aC5mbG9vcihhKihlLXQpKSkpXX1mdW5jdGlvbiBpKCl7cmV0dXJuIGE9ci5sZW5ndGgvKGUtdCksbz1yLmxlbmd0aC0xLG59dmFyIGEsbztyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3JbMF0sZT0rcltyLmxlbmd0aC0xXSxpKCkpOlt0LGVdfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSgpKTpyfSxuLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gZT1yLmluZGV4T2YoZSksZT1lPDA/TmFOOmUvYSt0LFtlLGUrMS9hXX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHVhKHQsZSxyKX0saSgpfWZ1bmN0aW9uIGZhKHQsZSl7ZnVuY3Rpb24gcihyKXtpZihyPD1yKXJldHVybiBlW2NvLmJpc2VjdCh0LHIpXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscik6ZX0sci5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9ZS5pbmRleE9mKHIpLFt0W3ItMV0sdFtyXV19LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBmYSh0LGUpfSxyfWZ1bmN0aW9uIGhhKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuK3R9cmV0dXJuIGUuaW52ZXJ0PWUsZS5kb21haW49ZS5yYW5nZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yLm1hcChlKSxlKTp0fSxlLnRpY2tzPWZ1bmN0aW9uKGUpe3JldHVybiBlYSh0LGUpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcmEodCxlLHIpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaGEodCl9LGV9ZnVuY3Rpb24gZGEoKXtyZXR1cm4gMH1mdW5jdGlvbiBwYSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBtYSh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiB2YSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGdhKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHlhKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGJhKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiB4YSh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsZj10WzFdK2MsaD1lWzBdK2wsZD1lWzFdK2MscD0odStoKS8yLG09KGYrZCkvMix2PWgtdSxnPWQtZix5PXYqditnKmcsYj1yLW4seD11KmQtaCpmLF89KGc8MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCxiKmIqeS14KngpKSx3PSh4KmctdipfKS95LE09KC14KnYtZypfKS95LFQ9KHgqZyt2Kl8pL3ksaz0oLXgqditnKl8pL3ksQT13LXAsRT1NLW0sUz1ULXAsTD1rLW07cmV0dXJuIEEqQStFKkU+UypTK0wqTCYmKHc9VCxNPWspLFtbdy1sLE0tY10sW3cqci9iLE0qci9iXV19ZnVuY3Rpb24gX2EodCl7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiBvKCl7Yy5wdXNoKCJNIixhKHQodSkscykpfWZvcih2YXIgbCxjPVtdLHU9W10sZj0tMSxoPWUubGVuZ3RoLGQ9U3QocikscD1TdChuKTsrK2Y8aDspaS5jYWxsKHRoaXMsbD1lW2ZdLGYpP3UucHVzaChbK2QuY2FsbCh0aGlzLGwsZiksK3AuY2FsbCh0aGlzLGwsZildKTp1Lmxlbmd0aCYmKG8oKSx1PVtdKTtyZXR1cm4gdS5sZW5ndGgmJm8oKSxjLmxlbmd0aD9jLmpvaW4oIiIpOm51bGx9dmFyIHI9Q3Isbj1JcixpPUllLGE9d2Esbz1hLmtleSxzPS43O3JldHVybiBlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxlKTpyfSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxlKTppfSxlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2E9dDooYT1JbC5nZXQodCl8fHdhKS5rZXksZSk6b30sZS50ZW5zaW9uPWZ1bmN0aW9uKHQpewpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUpOnN9LGV9ZnVuY3Rpb24gd2EodCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKCJMIik6dCsiWiJ9ZnVuY3Rpb24gTWEodCl7cmV0dXJuIHQuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBUYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwoblswXSsobj10W2VdKVswXSkvMiwiViIsblsxXSk7cmV0dXJuIHI+MSYmaS5wdXNoKCJIIixuWzBdKSxpLmpvaW4oIiIpfWZ1bmN0aW9uIGthKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIlYiLChuPXRbZV0pWzFdLCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBBYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwobj10W2VdKVswXSwiViIsblsxXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gRWEodCxlKXtyZXR1cm4gdC5sZW5ndGg8ND93YSh0KTp0WzFdK0NhKHQuc2xpY2UoMSwtMSksSWEodCxlKSl9ZnVuY3Rpb24gU2EodCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9NYSh0KTp0WzBdK0NhKCh0LnB1c2godFswXSksdCksSWEoW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfWZ1bmN0aW9uIExhKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/d2EodCk6dFswXStDYSh0LElhKHQsZSkpfWZ1bmN0aW9uIENhKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gd2EodCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49IiIsaT10WzBdLGE9dFsxXSxvPWVbMF0scz1vLGw9MTtpZihyJiYobis9IlEiKyhhWzBdLTIqb1swXS8zKSsiLCIrKGFbMV0tMipvWzFdLzMpKyIsIithWzBdKyIsIithWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxhPXRbbF0sbCsrLG4rPSJDIisoaVswXStvWzBdKSsiLCIrKGlbMV0rb1sxXSkrIiwiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspYT10W2xdLHM9ZVtjXSxuKz0iUyIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9IlEiKyhhWzBdKzIqc1swXS8zKSsiLCIrKGFbMV0rMipzWzFdLzMpKyIsIit1WzBdKyIsIit1WzFdfXJldHVybiBufWZ1bmN0aW9uIElhKHQsZSl7Zm9yKHZhciByLG49W10saT0oMS1lKS8yLGE9dFswXSxvPXRbMV0scz0xLGw9dC5sZW5ndGg7KytzPGw7KXI9YSxhPW8sbz10W3NdLG4ucHVzaChbaSoob1swXS1yWzBdKSxpKihvWzFdLXJbMV0pXSk7cmV0dXJuIG59ZnVuY3Rpb24gRGEodCl7aWYodC5sZW5ndGg8MylyZXR1cm4gd2EodCk7dmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPW5bMF0sYT1uWzFdLG89W2ksaSxpLChuPXRbMV0pWzBdXSxzPVthLGEsYSxuWzFdXSxsPVtpLCIsIixhLCJMIixSYSh6bCxvKSwiLCIsUmEoemwscyldO2Zvcih0LnB1c2godFtyLTFdKTsrK2U8PXI7KW49dFtlXSxvLnNoaWZ0KCksby5wdXNoKG5bMF0pLHMuc2hpZnQoKSxzLnB1c2goblsxXSksRmEobCxvLHMpO3JldHVybiB0LnBvcCgpLGwucHVzaCgiTCIsbiksbC5qb2luKCIiKX1mdW5jdGlvbiBQYSh0KXtpZih0Lmxlbmd0aDw0KXJldHVybiB3YSh0KTtmb3IodmFyIGUscj1bXSxuPS0xLGk9dC5sZW5ndGgsYT1bMF0sbz1bMF07KytuPDM7KWU9dFtuXSxhLnB1c2goZVswXSksby5wdXNoKGVbMV0pO2ZvcihyLnB1c2goUmEoemwsYSkrIiwiK1JhKHpsLG8pKSwtLW47KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksRmEocixhLG8pO3JldHVybiByLmpvaW4oIiIpfWZ1bmN0aW9uIHphKHQpe2Zvcih2YXIgZSxyLG49LTEsaT10Lmxlbmd0aCxhPWkrNCxvPVtdLHM9W107KytuPDQ7KXI9dFtuJWldLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7Zm9yKGU9W1JhKHpsLG8pLCIsIixSYSh6bCxzKV0sLS1uOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksRmEoZSxvLHMpO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIE9hKHQsZSl7dmFyIHI9dC5sZW5ndGgtMTtpZihyKWZvcih2YXIgbixpLGE9dFswXVswXSxvPXRbMF1bMV0scz10W3JdWzBdLWEsbD10W3JdWzFdLW8sYz0tMTsrK2M8PXI7KW49dFtjXSxpPWMvcixuWzBdPWUqblswXSsoMS1lKSooYStpKnMpLG5bMV09ZSpuWzFdKygxLWUpKihvK2kqbCk7cmV0dXJuIERhKHQpfWZ1bmN0aW9uIFJhKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1mdW5jdGlvbiBGYSh0LGUscil7dC5wdXNoKCJDIixSYShEbCxlKSwiLCIsUmEoRGwsciksIiwiLFJhKFBsLGUpLCIsIixSYShQbCxyKSwiLCIsUmEoemwsZSksIiwiLFJhKHpsLHIpKX1mdW5jdGlvbiBqYSh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIE5hKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPWphKGksYSk7KytlPHI7KW5bZV09KG8rKG89amEoaT1hLGE9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufWZ1bmN0aW9uIEJhKHQpe2Zvcih2YXIgZSxyLG4saSxhPVtdLG89TmEodCkscz0tMSxsPXQubGVuZ3RoLTE7KytzPGw7KWU9amEodFtzXSx0W3MrMV0pLHhvKGUpPEZvP29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGk9cipyK24qbik+OSYmKGk9MyplL01hdGguc3FydChpKSxvW3NdPWkqcixvW3MrMV09aSpuKSk7Zm9yKHM9LTE7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9ZnVuY3Rpb24gVWEodCl7cmV0dXJuIHQubGVuZ3RoPDM/d2EodCk6dFswXStDYSh0LEJhKHQpKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGUscixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspZT10W2ldLHI9ZVswXSxuPWVbMV0tVm8sZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBIYSh0KXtmdW5jdGlvbiBlKGUpe2Z1bmN0aW9uIGwoKXttLnB1c2goIk0iLHModChnKSxmKSx1LGModCh2LnJldmVyc2UoKSksZiksIloiKX1mb3IodmFyIGgsZCxwLG09W10sdj1bXSxnPVtdLHk9LTEsYj1lLmxlbmd0aCx4PVN0KHIpLF89U3QoaSksdz1yPT09bj9mdW5jdGlvbigpe3JldHVybiBkfTpTdChuKSxNPWk9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OlN0KGEpOysreTxiOylvLmNhbGwodGhpcyxoPWVbeV0seSk/KHYucHVzaChbZD0reC5jYWxsKHRoaXMsaCx5KSxwPStfLmNhbGwodGhpcyxoLHkpXSksZy5wdXNoKFsrdy5jYWxsKHRoaXMsaCx5KSwrTS5jYWxsKHRoaXMsaCx5KV0pKTp2Lmxlbmd0aCYmKGwoKSx2PVtdLGc9W10pO3JldHVybiB2Lmxlbmd0aCYmbCgpLG0ubGVuZ3RoP20uam9pbigiIik6bnVsbH12YXIgcj1DcixuPUNyLGk9MCxhPUlyLG89SWUscz13YSxsPXMua2V5LGM9cyx1PSJMIixmPS43O3JldHVybiBlLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bj10LGUpOm59LGUueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxlKTpyfSxlLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9dCxlKTphfSxlLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZSk6aX0sZS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGUpOmF9LGUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGUpOm99LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/cz10OihzPUlsLmdldCh0KXx8d2EpLmtleSxjPXMucmV2ZXJzZXx8cyx1PXMuY2xvc2VkPyJNIjoiTCIsZSk6bH0sZS50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsZSk6Zn0sZX1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gR2EodCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIFlhKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tVm87cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fWZ1bmN0aW9uIFhhKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIFdhKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gWmEodCl7dmFyIGU9TWF0aC5zcXJ0KHQvTm8pO3JldHVybiJNMCwiK2UrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrZSsiWiJ9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIEthKHQsZSxyKXtyZXR1cm4ga28odCxVbCksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH1mdW5jdGlvbiBRYSh0LGUscixuKXt2YXIgaT10LmlkLGE9dC5uYW1lc3BhY2U7cmV0dXJuIEcodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24gJGEodCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gdG8odCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIGVvKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt2YXIgZT1tLmRlbGF5O2lmKGMudD1lK2wsZTw9dClyZXR1cm4gbyh0LWUpO2MuYz1vfWZ1bmN0aW9uIG8ocil7dmFyIGk9cC5hY3RpdmUsYT1wW2ldO2EmJihhLnRpbWVyLmM9bnVsbCxhLnRpbWVyLnQ9TmFOLC0tcC5jb3VudCxkZWxldGUgcFtpXSxhLmV2ZW50JiZhLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxhLmluZGV4KSk7Zm9yKHZhciBvIGluIHApaWYoK288bil7dmFyIGY9cFtvXTtmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tcC5jb3VudCxkZWxldGUgcFtvXX1jLmM9cyxQdChmdW5jdGlvbigpe3JldHVybiBjLmMmJnMocnx8MSkmJihjLmM9bnVsbCxjLnQ9TmFOKSwxfSwwLGwpLHAuYWN0aXZlPW4sbS5ldmVudCYmbS5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxkPVtdLG0udHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZkLnB1c2gobil9KSxoPW0uZWFzZSx1PW0uZHVyYXRpb259ZnVuY3Rpb24gcyhpKXtmb3IodmFyIGE9aS91LG89aChhKSxzPWQubGVuZ3RoO3M+MDspZFstLXNdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBtLmV2ZW50JiZtLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXAuY291bnQ/ZGVsZXRlIHBbbl06ZGVsZXRlIHRbcl0sMX12YXIgbCxjLHUsaCxkLHA9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxtPXBbbl07bXx8KGw9aS50aW1lLGM9UHQoYSwwLGwpLG09cFtuXT17dHdlZW46bmV3IGYsdGltZTpsLHRpbWVyOmMsZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3AuY291bnQpfWZ1bmN0aW9uIHJvKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KX1mdW5jdGlvbiBubyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSl9ZnVuY3Rpb24gaW8odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBhbyh0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdChlKX1mdW5jdGlvbiBpKHQscil7dmFyIG49dFsxXS10WzBdLGk9bi9yLGE9Y28uYmlzZWN0KEpsLGkpO3JldHVybiBhPT1KbC5sZW5ndGg/W2UueWVhcix0YSh0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC8zMTUzNmU2fSkscilbMl1dOmE/ZVtpL0psW2EtMV08SmxbYV0vaT9hLTE6YV06WyRsLHRhKHQscilbMl1dfXJldHVybiBuLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gb28odC5pbnZlcnQoZSkpfSxuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5kb21haW4oZSksbik6dC5kb21haW4oKS5tYXAob28pfSxuLm5pY2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixvbygrcisxKSxlKS5sZW5ndGh9dmFyIGE9bi5kb21haW4oKSxvPUdpKGEpLHM9bnVsbD09dD9pKG8sMTApOiJudW1iZXIiPT10eXBlb2YgdCYmaShvLHQpO3JldHVybiBzJiYodD1zWzBdLGU9c1sxXSksbi5kb21haW4oV2koYSxlPjE/e2Zsb29yOmZ1bmN0aW9uKGUpe2Zvcig7cihlPXQuZmxvb3IoZSkpOyllPW9vKGUtMSk7cmV0dXJuIGV9LGNlaWw6ZnVuY3Rpb24oZSl7Zm9yKDtyKGU9dC5jZWlsKGUpKTspZT1vbygrZSsxKTtyZXR1cm4gZX19OnQpKX0sbi50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciByPUdpKG4uZG9tYWluKCkpLGE9bnVsbD09dD9pKHIsMTApOiJudW1iZXIiPT10eXBlb2YgdD9pKHIsdCk6IXQucmFuZ2UmJlt7cmFuZ2U6dH0sZV07cmV0dXJuIGEmJih0PWFbMF0sZT1hWzFdKSx0LnJhbmdlKHJbMF0sb28oK3JbMV0rMSksZTwxPzE6ZSl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiByfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYW8odC5jb3B5KCksZSxyKX0sUWkobix0KX1mdW5jdGlvbiBvbyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gc28odCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIGxvKHQpe3ZhciBlPWhvLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShoby5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9dmFyIGNvPXt2ZXJzaW9uOiIzLjUuMTcifSx1bz1bXS5zbGljZSxmbz1mdW5jdGlvbih0KXtyZXR1cm4gdW8uY2FsbCh0KX0saG89dGhpcy5kb2N1bWVudDtpZihobyl0cnl7Zm8oaG8uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKHQpe2ZvPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtlXTtyZXR1cm4gcn19aWYoRGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0pLGhvKXRyeXtoby5jcmVhdGVFbGVtZW50KCJESVYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9Y2F0Y2godCl7dmFyIHBvPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsbW89cG8uc2V0QXR0cmlidXRlLHZvPXBvLnNldEF0dHJpYnV0ZU5TLGdvPXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUseW89Z28uc2V0UHJvcGVydHk7cG8uc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7bW8uY2FsbCh0aGlzLHQsZSsiIil9LHBvLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXt2by5jYWxsKHRoaXMsdCxlLHIrIiIpfSxnby5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7eW8uY2FsbCh0aGlzLHQsZSsiIixyKX19Y28uYXNjZW5kaW5nPWksY28uZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sY28ubWluPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJnI+biYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZyPm4mJihyPW4pfXJldHVybiByfSxjby5tYXg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmbj5yJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+ciYmKHI9bil9cmV0dXJuIHJ9LGNvLmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSxjby5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KW8ocj0rdFthXSkmJihuKz1yKTtlbHNlIGZvcig7KythPGk7KW8ocj0rZS5jYWxsKHQsdFthXSxhKSkmJihuKz1yKTtyZXR1cm4gbn0sY28ubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLHM9LTEsbD1pO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KW8ocj1hKHRbc10pKT9uKz1yOi0tbDtlbHNlIGZvcig7KytzPGk7KW8ocj1hKGUuY2FsbCh0LHRbc10scykpKT9uKz1yOi0tbDtpZihsKXJldHVybiBuL2x9LGNvLnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSxjby5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLHM9dC5sZW5ndGgsbD0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxzOylvKHI9YSh0W2xdKSkmJm4ucHVzaChyKTtlbHNlIGZvcig7KytsPHM7KW8ocj1hKGUuY2FsbCh0LHRbbF0sbCkpKSYmbi5wdXNoKHIpO2lmKG4ubGVuZ3RoKXJldHVybiBjby5xdWFudGlsZShuLnNvcnQoaSksLjUpfSxjby52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxzPTAsbD0wLGM9LTEsdT0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytjPGk7KW8ocj1hKHRbY10pKSYmKG49ci1zLHMrPW4vKyt1LGwrPW4qKHItcykpO2Vsc2UgZm9yKDsrK2M8aTspbyhyPWEoZS5jYWxsKHQsdFtjXSxjKSkpJiYobj1yLXMscys9bi8rK3UsbCs9biooci1zKSk7aWYodT4xKXJldHVybiBsLyh1LTEpfSxjby5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgdD1jby52YXJpYW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQ/TWF0aC5zcXJ0KHQpOnR9O3ZhciBibz1zKGkpO2NvLmJpc2VjdExlZnQ9Ym8ubGVmdCxjby5iaXNlY3Q9Y28uYmlzZWN0UmlnaHQ9Ym8ucmlnaHQsY28uYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHMoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGkodChlKSxyKX06dCl9LGNvLnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpeyhhPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihyPXQubGVuZ3RoLGE8MiYmKGU9MCkpO2Zvcih2YXIgbixpLGE9ci1lO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSxjby5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSxjby5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LGNvLnRyYW5zcG9zZT1mdW5jdGlvbih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPWNvLm1pbih0LGwpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59LGNvLnppcD1mdW5jdGlvbigpe3JldHVybiBjby50cmFuc3Bvc2UoYXJndW1lbnRzKX0sY28ua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LGNvLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGNvLmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LGNvLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKG49dFtpXSxlPW4ubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9O3ZhciB4bz1NYXRoLmFicztjby5yYW5nZT1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCx0PTApKSwoZS10KS9yPT0xLzApdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5nZSIpO3ZhciBuLGk9W10sYT1jKHhvKHIpKSxvPS0xO2lmKHQqPWEsZSo9YSxyKj1hLHI8MClmb3IoOyhuPXQrciorK28pPmU7KWkucHVzaChuL2EpO2Vsc2UgZm9yKDsobj10K3IqKytvKTxlOylpLnB1c2gobi9hKTtyZXR1cm4gaX0sY28ubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGY7aWYodCBpbnN0YW5jZW9mIGYpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ci5zZXQodCxlKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KXIuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOylyLnNldChlLmNhbGwodCxuPXRbaV0saSksbil9ZWxzZSBmb3IodmFyIG8gaW4gdClyLnNldChvLHRbb10pO3JldHVybiByfTt2YXIgX289Il9fcHJvdG9fXyIsd289IlwwIjt1KGYse2hhczpwLGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW2godCldfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fW2godCldPWV9LHJlbW92ZTptLGtleXM6dix2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh0aGlzLl9bZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goe2tleTpkKGUpLHZhbHVlOnRoaXMuX1tlXX0pO3JldHVybiB0fSxzaXplOmcsZW1wdHk6eSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsZChlKSx0aGlzLl9bZV0pfX0pLGNvLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbyxzKXtpZihzPj1hLmxlbmd0aClyZXR1cm4gbj9uLmNhbGwoaSxvKTpyP28uc29ydChyKTpvO2Zvcih2YXIgbCxjLHUsaCxkPS0xLHA9by5sZW5ndGgsbT1hW3MrK10sdj1uZXcgZjsrK2Q8cDspKGg9di5nZXQobD1tKGM9b1tkXSkpKT9oLnB1c2goYyk6di5zZXQobCxbY10pO3JldHVybiBlPyhjPWUoKSx1PWZ1bmN0aW9uKHIsbil7Yy5zZXQocix0KGUsbixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKHIsbil7Y1tyXT10KGUsbixzKX0pLHYuZm9yRWFjaCh1KSxjfWZ1bmN0aW9uIGUodCxyKXtpZihyPj1hLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1bXSxpPW9bcisrXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7bi5wdXNoKHtrZXk6dCx2YWx1ZXM6ZShpLHIpfSl9KSxpP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpKHQua2V5LGUua2V5KX0pOm59dmFyIHIsbixpPXt9LGE9W10sbz1bXTtyZXR1cm4gaS5tYXA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChyLGUsMCl9LGkuZW50cmllcz1mdW5jdGlvbihyKXtyZXR1cm4gZSh0KGNvLm1hcCxyLDApLDApfSxpLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gYS5wdXNoKHQpLGl9LGkuc29ydEtleXM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bYS5sZW5ndGgtMV09dCxpfSxpLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxpfSxpLnJvbGx1cD1mdW5jdGlvbih0KXtyZXR1cm4gbj10LGl9LGl9LGNvLnNldD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYjtpZih0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillLmFkZCh0W3JdKTtyZXR1cm4gZX0sdShiLHtoYXM6cCxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1toKHQrPSIiKV09ITAsdH0scmVtb3ZlOm0sdmFsdWVzOnYsc2l6ZTpnLGVtcHR5OnksZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLGQoZSkpfX0pLGNvLmJlaGF2aW9yPXt9LGNvLnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1fKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIE1vPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO2NvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBULGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09ayh0KTtyZXR1cm4gdH0sVC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sY28uZXZlbnQ9bnVsbCxjby5yZXF1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoVG8sIlxcJCYiKX07dmFyIFRvPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxrbz17fS5fX3Byb3RvX18/ZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX0sQW89ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKHQpfSxFbz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFNvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W3codCwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybihTbz1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX0pKHQsZSl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihBbz1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sRW89U2l6emxlLFNvPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLGNvLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBjby5zZWxlY3QoaG8uZG9jdW1lbnRFbGVtZW50KX07dmFyIExvPWNvLnNlbGVjdGlvbi5wcm90b3R5cGU9W107TG8uc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W107dD1DKHQpO2Zvcih2YXIgbz0tMSxzPXRoaXMubGVuZ3RoOysrbzxzOyl7YS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0obj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxjPW4ubGVuZ3RoOysrbDxjOykoaT1uW2xdKT8oZS5wdXNoKHI9dC5jYWxsKGksaS5fX2RhdGFfXyxsLG8pKSxyJiYiX19kYXRhX18iaW4gaSYmKHIuX19kYXRhX189aS5fX2RhdGFfXykpOmUucHVzaChudWxsKX1yZXR1cm4gTChhKX0sTG8uc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTt0PUkodCk7Zm9yKHZhciBpPS0xLGE9dGhpcy5sZW5ndGg7KytpPGE7KWZvcih2YXIgbz10aGlzW2ldLHM9LTEsbD1vLmxlbmd0aDsrK3M8bDspKHI9b1tzXSkmJihuLnB1c2goZT1mbyh0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIEwobil9O3ZhciBDbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSW89e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkNvLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07Y28ubnM9e3ByZWZpeDpJbyxxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpLHI9dDtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShyPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksSW8uaGFzT3duUHJvcGVydHkocik/e3NwYWNlOklvW3JdLGxvY2FsOnR9OnR9fSxMby5hdHRyPWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiB0PWNvLm5zLnF1YWxpZnkodCksdC5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUodCl9Zm9yKGUgaW4gdCl0aGlzLmVhY2goRChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEQodCxlKSl9LExvLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD1PKHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZigheih0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKFIoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChSKHQsZSkpfSxMby5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZihpPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7aTwyJiYoZT0iIik7Zm9yKHIgaW4gdCl0aGlzLmVhY2goaihyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKGk8Mil7dmFyIGE9dGhpcy5ub2RlKCk7cmV0dXJuIG4oYSkuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKGoodCxlLHIpKX0sTG8ucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goTihlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKE4odCxlKSl9LExvLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxMby5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LExvLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1CKHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LExvLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PUIodCksZT1DKGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxMby5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFUpfSxMby5kYXRhPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe3ZhciBuLGksYSxvPXQubGVuZ3RoLHU9ci5sZW5ndGgsaD1NYXRoLm1pbihvLHUpLGQ9bmV3IEFycmF5KHUpLHA9bmV3IEFycmF5KHUpLG09bmV3IEFycmF5KG8pO2lmKGUpe3ZhciB2LGc9bmV3IGYseT1uZXcgQXJyYXkobyk7Zm9yKG49LTE7KytuPG87KShpPXRbbl0pJiYoZy5oYXModj1lLmNhbGwoaSxpLl9fZGF0YV9fLG4pKT9tW25dPWk6Zy5zZXQodixpKSx5W25dPXYpO2ZvcihuPS0xOysrbjx1OykoaT1nLmdldCh2PWUuY2FsbChyLGE9cltuXSxuKSkpP2khPT0hMCYmKGRbbl09aSxpLl9fZGF0YV9fPWEpOnBbbl09VihhKSxnLnNldCh2LCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiB5JiZnLmdldCh5W25dKSE9PSEwJiYobVtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxoOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxkW25dPWkpOnBbbl09VihhKTtmb3IoO248dTsrK24pcFtuXT1WKHJbbl0pO2Zvcig7bjxvOysrbiltW25dPXRbbl19cC51cGRhdGU9ZCxwLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPW0ucGFyZW50Tm9kZT10LnBhcmVudE5vZGUscy5wdXNoKHApLGwucHVzaChkKSxjLnB1c2gobSl9dmFyIG4saSxhPS0xLG89dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShvPShuPXRoaXNbMF0pLmxlbmd0aCk7KythPG87KShpPW5bYV0pJiYodFthXT1pLl9fZGF0YV9fKTtyZXR1cm4gdH12YXIgcz1ZKFtdKSxsPUwoW10pLGM9TChbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2E8bzspcihuPXRoaXNbYV0sdC5jYWxsKG4sbi5wYXJlbnROb2RlLl9fZGF0YV9fLGEpKTtlbHNlIGZvcig7KythPG87KXIobj10aGlzW2FdLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxMby5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sTG8uZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1IKHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBMKGkpfSxMby5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD0tMSxlPXRoaXMubGVuZ3RoOysrdDxlOylmb3IodmFyIHIsbj10aGlzW3RdLGk9bi5sZW5ndGgtMSxhPW5baV07LS1pPj0wOykocj1uW2ldKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sTG8uc29ydD1mdW5jdGlvbih0KXt0PXEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgZT0tMSxyPXRoaXMubGVuZ3RoOysrZTxyOyl0aGlzW2VdLnNvcnQodCk7cmV0dXJuIHRoaXMub3JkZXIoKX0sTG8uZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gRyh0aGlzLGZ1bmN0aW9uKGUscixuKXt0LmNhbGwoZSxlLl9fZGF0YV9fLHIsbil9KX0sTG8uY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1mbyhhcmd1bWVudHMpO3JldHVybiB0LmFwcGx5KGVbMF09dGhpcyxlKSx0aGlzfSxMby5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sTG8ubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LExvLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBHKHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgRG89W107Y28uc2VsZWN0aW9uLmVudGVyPVksY28uc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1EbyxEby5hcHBlbmQ9TG8uYXBwZW5kLERvLmVtcHR5PUxvLmVtcHR5LERvLm5vZGU9TG8ubm9kZSxEby5jYWxsPUxvLmNhbGwsRG8uc2l6ZT1Mby5zaXplLERvLnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIEwobyl9LERvLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPVgodGhpcykpLExvLmluc2VydC5jYWxsKHRoaXMsdCxlKX0sY28uc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8ocj1bQW8odCxobyldLHIucGFyZW50Tm9kZT1oby5kb2N1bWVudEVsZW1lbnQpOihyPVt0XSxyLnBhcmVudE5vZGU9ZSh0KSksTChbcl0pfSxjby5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhlPWZvKEVvKHQsaG8pKSxlLnBhcmVudE5vZGU9aG8uZG9jdW1lbnRFbGVtZW50KTooZT1mbyh0KSxlLnBhcmVudE5vZGU9bnVsbCksTChbZV0pfSxMby5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7bjwyJiYoZT0hMSk7Zm9yKHIgaW4gdCl0aGlzLmVhY2goVyhyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVsiX19vbiIrdF0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKFcodCxlLHIpKX07dmFyIFBvPWNvLm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTtobyYmUG8uZm9yRWFjaChmdW5jdGlvbih0KXsib24iK3QgaW4gaG8mJlBvLnJlbW92ZSh0KX0pO3ZhciB6byxPbz0wO2NvLm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBRKHQsRSgpKX07dmFyIFJvPXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtjby50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9RSgpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBRKHQsbil9LGNvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLGEpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLG8pfWZ1bmN0aW9uIGUodCxlLG4sYSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7dmFyIHQscixuPWUoaCxtKTtuJiYodD1uWzBdLWJbMF0scj1uWzFdLWJbMV0scHw9dHxyLGI9bixkKHt0eXBlOiJkcmFnIix4Om5bMF0rY1swXSx5Om5bMV0rY1sxXSxkeDp0LGR5OnJ9KSl9ZnVuY3Rpb24gbCgpe2UoaCxtKSYmKGcub24oYSt2LG51bGwpLm9uKG8rdixudWxsKSx5KHApLGQoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBjLHU9dGhpcyxmPWNvLmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8Y28uZXZlbnQudGFyZ2V0LGg9dS5wYXJlbnROb2RlLGQ9ci5vZih1LGFyZ3VtZW50cykscD0wLG09dCgpLHY9Ii5kcmFnIisobnVsbD09bT8iIjoiLSIrbSksZz1jby5zZWxlY3QobihmKSkub24oYSt2LHMpLm9uKG8rdixsKSx5PUsoZiksYj1lKGgsbSk7aT8oYz1pLmFwcGx5KHUsYXJndW1lbnRzKSxjPVtjLngtYlswXSxjLnktYlsxXV0pOmM9WzAsMF0sZCh7dHlwZToiZHJhZ3N0YXJ0In0pfX12YXIgcj1TKHQsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiksaT1udWxsLGE9ZShNLGNvLm1vdXNlLG4sIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxvPWUoJCxjby50b3VjaCx4LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO3JldHVybiB0Lm9yaWdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LGNvLnJlYmluZCh0LHIsIm9uIil9LGNvLnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1FKCkudG91Y2hlcyksZT9mbyhlKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9USh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIEZvPTFlLTYsam89Rm8qRm8sTm89TWF0aC5QSSxCbz0yKk5vLFVvPUJvLUZvLFZvPU5vLzIsSG89Tm8vMTgwLHFvPTE4MC9ObyxHbz1NYXRoLlNRUlQyO2NvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8am8pbj1NYXRoLmxvZyhjL28pL0dvLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoR28qdCpuKV19O2Vsc2V7dmFyIGQ9TWF0aC5zcXJ0KGgpLHA9KGMqYy1vKm8rNCpoKS8oMipvKjIqZCksbT0oYypjLW8qby00KmgpLygyKmMqMipkKSx2PU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksZz1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO249KGctdikvR28scj1mdW5jdGlvbih0KXt2YXIgZT10Km4scj1hdCh2KSxzPW8vKDIqZCkqKHIqb3QoR28qZSt2KS1pdCh2KSk7cmV0dXJuW2krcyp1LGErcypmLG8qci9hdChHbyplK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sY28uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dC5vbihJLGYpLm9uKFhvKyIuem9vbSIsZCkub24oImRibGNsaWNrLnpvb20iLHApLm9uKHosaCl9ZnVuY3Rpb24gZSh0KXtyZXR1cm5bKHRbMF0tVC54KS9ULmssKHRbMV0tVC55KS9ULmtdfWZ1bmN0aW9uIHIodCl7cmV0dXJuW3RbMF0qVC5rK1QueCx0WzFdKlQuaytULnldfWZ1bmN0aW9uIGkodCl7VC5rPU1hdGgubWF4KEVbMF0sTWF0aC5taW4oRVsxXSx0KSl9ZnVuY3Rpb24gYSh0LGUpe2U9cihlKSxULngrPXRbMF0tZVswXSxULnkrPXRbMV0tZVsxXX1mdW5jdGlvbiBvKGUscixuLG8pe2UuX19jaGFydF9fPXt4OlQueCx5OlQueSxrOlQua30saShNYXRoLnBvdygyLG8pKSxhKHY9cixuKSxlPWNvLnNlbGVjdChlKSxMPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKEwpKSxlLmNhbGwodC5ldmVudCl9ZnVuY3Rpb24gcygpe18mJl8uZG9tYWluKHgucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtVC54KS9ULmt9KS5tYXAoeC5pbnZlcnQpKSxNJiZNLmRvbWFpbih3LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LVQueSkvVC5rfSkubWFwKHcuaW52ZXJ0KSl9ZnVuY3Rpb24gbCh0KXtDKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBjKHQpe3MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpULmssdHJhbnNsYXRlOltULngsVC55XX0pfWZ1bmN0aW9uIHUodCl7LS1DfHwodCh7dHlwZToiem9vbWVuZCJ9KSx2PW51bGwpfWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiB0KCl7cz0xLGEoY28ubW91c2UoaSksaCksYyhvKX1mdW5jdGlvbiByKCl7Zi5vbihELG51bGwpLm9uKFAsbnVsbCksZChzKSx1KG8pfXZhciBpPXRoaXMsbz1PLm9mKGksYXJndW1lbnRzKSxzPTAsZj1jby5zZWxlY3QobihpKSkub24oRCx0KS5vbihQLHIpLGg9ZShjby5tb3VzZShpKSksZD1LKGkpO0JsLmNhbGwoaSksbChvKX1mdW5jdGlvbiBoKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PWNvLnRvdWNoZXMocCk7cmV0dXJuIGQ9VC5rLHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkZW50aWZpZXIgaW4gdiYmKHZbdC5pZGVudGlmaWVyXT1lKHQpKX0pLHR9ZnVuY3Rpb24gcigpe3ZhciBlPWNvLmV2ZW50LnRhcmdldDtjby5zZWxlY3QoZSkub24oeCxuKS5vbihfLHMpLHcucHVzaChlKTtmb3IodmFyIHI9Y28uZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT0wLGE9ci5sZW5ndGg7aTxhOysraSl2W3JbaV0uaWRlbnRpZmllcl09bnVsbDt2YXIgbD10KCksYz1EYXRlLm5vdygpO2lmKDE9PT1sLmxlbmd0aCl7aWYoYy1iPDUwMCl7dmFyIHU9bFswXTtvKHAsdSx2W3UuaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhULmspL01hdGguTE4yKSsxKSxBKCl9Yj1jfWVsc2UgaWYobC5sZW5ndGg+MSl7dmFyIHU9bFswXSxmPWxbMV0saD11WzBdLWZbMF0sZD11WzFdLWZbMV07Zz1oKmgrZCpkfX1mdW5jdGlvbiBuKCl7dmFyIHQsZSxyLG4sbz1jby50b3VjaGVzKHApO0JsLmNhbGwocCk7Zm9yKHZhciBzPTAsbD1vLmxlbmd0aDtzPGw7KytzLG49bnVsbClpZihyPW9bc10sbj12W3IuaWRlbnRpZmllcl0pe2lmKGUpYnJlYWs7dD1yLGU9bn1pZihuKXt2YXIgdT0odT1yWzBdLXRbMF0pKnUrKHU9clsxXS10WzFdKSp1LGY9ZyYmTWF0aC5zcXJ0KHUvZyk7dD1bKHRbMF0rclswXSkvMiwodFsxXStyWzFdKS8yXSxlPVsoZVswXStuWzBdKS8yLChlWzFdK25bMV0pLzJdLGkoZipkKX1iPW51bGwsYSh0LGUpLGMobSl9ZnVuY3Rpb24gcygpe2lmKGNvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIGU9Y28uZXZlbnQuY2hhbmdlZFRvdWNoZXMscj0wLG49ZS5sZW5ndGg7cjxuOysrcilkZWxldGUgdltlW3JdLmlkZW50aWZpZXJdO2Zvcih2YXIgaSBpbiB2KXJldHVybiB2b2lkIHQoKX1jby5zZWxlY3RBbGwodykub24oeSxudWxsKSxNLm9uKEksZikub24oeixoKSxrKCksdShtKX12YXIgZCxwPXRoaXMsbT1PLm9mKHAsYXJndW1lbnRzKSx2PXt9LGc9MCx5PSIuem9vbS0iK2NvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIseD0idG91Y2htb3ZlIit5LF89InRvdWNoZW5kIit5LHc9W10sTT1jby5zZWxlY3QocCksaz1LKHApO3IoKSxsKG0pLE0ub24oSSxudWxsKS5vbih6LHIpfWZ1bmN0aW9uIGQoKXt2YXIgdD1PLm9mKHRoaXMsYXJndW1lbnRzKTt5P2NsZWFyVGltZW91dCh5KTooQmwuY2FsbCh0aGlzKSxtPWUodj1nfHxjby5tb3VzZSh0aGlzKSksbCh0KSkseT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eT1udWxsLHUodCl9LDUwKSxBKCksaShNYXRoLnBvdygyLC4wMDIqWW8oKSkqVC5rKSxhKHYsbSksYyh0KX1mdW5jdGlvbiBwKCl7dmFyIHQ9Y28ubW91c2UodGhpcykscj1NYXRoLmxvZyhULmspL01hdGguTE4yO28odGhpcyx0LGUodCksY28uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX12YXIgbSx2LGcseSxiLHgsXyx3LE0sVD17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9V28sTD0yNTAsQz0wLEk9Im1vdXNlZG93bi56b29tIixEPSJtb3VzZW1vdmUuem9vbSIsUD0ibW91c2V1cC56b29tIix6PSJ0b3VjaHN0YXJ0Lnpvb20iLE89Uyh0LCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO3JldHVybiBYb3x8KFhvPSJvbndoZWVsImluIGhvPyhZbz1mdW5jdGlvbigpe3JldHVybi1jby5ldmVudC5kZWx0YVkqKGNvLmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIpOiJvbm1vdXNld2hlZWwiaW4gaG8/KFlvPWZ1bmN0aW9uKCl7cmV0dXJuIGNvLmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KFlvPWZ1bmN0aW9uKCl7cmV0dXJuLWNvLmV2ZW50LmRldGFpbH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKSksdC5ldmVudD1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1PLm9mKHRoaXMsYXJndW1lbnRzKSxlPVQ7amw/Y28uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIixmdW5jdGlvbigpe1Q9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sbCh0KX0pLnR3ZWVuKCJ6b29tOnpvb20iLGZ1bmN0aW9uKCl7dmFyIHI9a1swXSxuPWtbMV0saT12P3ZbMF06ci8yLGE9dj92WzFdOm4vMixvPWNvLmludGVycG9sYXRlWm9vbShbKGktVC54KS9ULmssKGEtVC55KS9ULmssci9ULmtdLFsoaS1lLngpL2UuaywoYS1lLnkpL2UuayxyL2Uua10pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1vKGUpLHM9ci9uWzJdO3RoaXMuX19jaGFydF9fPVQ9e3g6aS1uWzBdKnMseTphLW5bMV0qcyxrOnN9LGModCl9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7dSh0KX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe3UodCl9KToodGhpcy5fX2NoYXJ0X189VCxsKHQpLGModCksdSh0KSl9KX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9e3g6K2VbMF0seTorZVsxXSxrOlQua30scygpLHQpOltULngsVC55XX0sdC5zY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD17eDpULngseTpULnksazpudWxsfSxpKCtlKSxzKCksdCk6VC5rfSx0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PWU/V286WytlWzBdLCtlWzFdXSx0KTpFfSx0LmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lJiZbK2VbMF0sK2VbMV1dLHQpOmd9LHQuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz1lJiZbK2VbMF0sK2VbMV1dLHQpOmt9LHQuZHVyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9K2UsdCk6TH0sdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPWUseD1lLmNvcHkoKSxUPXt4OjAseTowLGs6MX0sdCk6X30sdC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPWUsdz1lLmNvcHkoKSxUPXt4OjAseTowLGs6MX0sdCk6TX0sY28ucmViaW5kKHQsTywib24iKX07dmFyIFlvLFhvLFdvPVswLDEvMF07Y28uY29sb3I9bHQsbHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LGNvLmhzbD1jdDt2YXIgWm89Y3QucHJvdG90eXBlPW5ldyBsdDtaby5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxaby5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBjdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0sWm8ucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sY28uaGNsPWZ0O3ZhciBKbz1mdC5wcm90b3R5cGU9bmV3IGx0O0pvLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK0tvKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sSm8uZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1LbyooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LEpvLnJnYj1mdW5jdGlvbigpe3JldHVybiBodCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LGNvLmxhYj1kdDt2YXIgS289MTgsUW89Ljk1MDQ3LCRvPTEsdHM9MS4wODg4Myxlcz1kdC5wcm90b3R5cGU9bmV3IGx0O2VzLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZHQoTWF0aC5taW4oMTAwLHRoaXMubCtLbyooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sZXMuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZHQoTWF0aC5tYXgoMCx0aGlzLmwtS28qKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LGVzLnJnYj1mdW5jdGlvbigpe3JldHVybiBwdCh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LGNvLnJnYj1idDt2YXIgcnM9YnQucHJvdG90eXBlPW5ldyBsdDtycy5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGJ0KE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGJ0KGksaSxpKX0scnMuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgYnQodCp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxycy5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gVHQodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxycy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIit3dCh0aGlzLnIpK3d0KHRoaXMuZykrd3QodGhpcy5iKX07dmFyIG5zPWNvLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7bnMuZm9yRWFjaChmdW5jdGlvbih0LGUpe25zLnNldCh0LHh0KGUpKX0pLGNvLmZ1bmN0b3I9U3QsY28ueGhyPUx0KHgpLGNvLmRzdj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxyLGEpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGE9cixyPW51bGwpO3ZhciBvPUN0KHQsZSxudWxsPT1yP246aShyKSxhKTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZShudWxsPT0ocj10KT9uOmkodCkpOnJ9LG99ZnVuY3Rpb24gbih0KXtyZXR1cm4gci5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIucGFyc2UoZS5yZXNwb25zZVRleHQsdCl9fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcy50ZXN0KHQpPyciJyt0LnJlcGxhY2UoL1wiL2csJyIiJykrJyInOnR9dmFyIHM9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXSIpLGw9dC5jaGFyQ29kZUF0KDApO3JldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHIucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iik7bj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxyLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXtpZih1Pj1jKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT11O2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8YzspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXU9cisyO3ZhciBuPXQuY2hhckNvZGVBdChyKzEpO3JldHVybiAxMz09PW4/KGk9ITAsMTA9PT10LmNoYXJDb2RlQXQocisyKSYmKyt1KToxMD09PW4mJihpPSEwKSx0LnNsaWNlKGUrMSxyKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDt1PGM7KXt2YXIgbj10LmNoYXJDb2RlQXQodSsrKSxzPTE7aWYoMTA9PT1uKWk9ITA7ZWxzZSBpZigxMz09PW4paT0hMCwxMD09PXQuY2hhckNvZGVBdCh1KSYmKCsrdSwrK3MpO2Vsc2UgaWYobiE9PWwpY29udGludWU7cmV0dXJuIHQuc2xpY2UoZSx1LXMpfXJldHVybiB0LnNsaWNlKGUpfWZvcih2YXIgbixpLGE9e30sbz17fSxzPVtdLGM9dC5sZW5ndGgsdT0wLGY9MDsobj1yKCkpIT09bzspe2Zvcih2YXIgaD1bXTtuIT09YSYmbiE9PW87KWgucHVzaChuKSxuPXIoKTtlJiZudWxsPT0oaD1lKGgsZisrKSl8fHMucHVzaChoKX1yZXR1cm4gc30sci5mb3JtYXQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlWzBdKSlyZXR1cm4gci5mb3JtYXRSb3dzKGUpO3ZhciBuPW5ldyBiLGk9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCluLmhhcyhlKXx8aS5wdXNoKG4uYWRkKGUpKX0pLFtpLm1hcChvKS5qb2luKHQpXS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfSxyLmZvcm1hdFJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LHJ9LGNvLmNzdj1jby5kc3YoIiwiLCJ0ZXh0L2NzdiIpLGNvLnRzdj1jby5kc3YoIlx0IiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBpcyxhcyxvcyxzcyxscz10aGlzW3codGhpcywicmVxdWVzdEFuaW1hdGlvbkZyYW1lIildfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtjby50aW1lcj1mdW5jdGlvbigpe1B0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sY28udGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtPdCgpLFJ0KCl9LGNvLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfQo7dmFyIGNzPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdLm1hcChqdCk7Y28uZm9ybWF0UHJlZml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MDtyZXR1cm4odD0rdCkmJih0PDAmJih0Kj0tMSksZSYmKHQ9Y28ucm91bmQodCxGdCh0LGUpKSkscj0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2codCkvTWF0aC5MTjEwKSxyPU1hdGgubWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKHItMSkvMykpKSksY3NbOCtyLzNdfTt2YXIgdXM9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLGZzPWNvLm1hcCh7YjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyg4KX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9Y28ucm91bmQodCxGdCh0LGUpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLEZ0KHQqKDErMWUtMTUpLGUpKSkpfX0pLGhzPWNvLnRpbWU9e30sZHM9RGF0ZTtVdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7cHMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7cHMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe3BzLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe3BzLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtwcy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtwcy5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe3BzLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cHMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe3BzLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgcHM9RGF0ZS5wcm90b3R5cGU7aHMueWVhcj1WdChmdW5jdGlvbih0KXtyZXR1cm4gdD1ocy5kYXkodCksdC5zZXRNb250aCgwLDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSxocy55ZWFycz1ocy55ZWFyLnJhbmdlLGhzLnllYXJzLnV0Yz1ocy55ZWFyLnV0Yy5yYW5nZSxocy5kYXk9VnQoZnVuY3Rpb24odCl7dmFyIGU9bmV3IGRzKDJlMywwKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSxlfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSxocy5kYXlzPWhzLmRheS5yYW5nZSxocy5kYXlzLnV0Yz1ocy5kYXkudXRjLnJhbmdlLGhzLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1ocy55ZWFyKHQpO3JldHVybiBNYXRoLmZsb29yKCh0LWUtNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChmdW5jdGlvbih0LGUpe2U9Ny1lO3ZhciByPWhzW3RdPVZ0KGZ1bmN0aW9uKHQpe3JldHVybih0PWhzLmRheSh0KSkuc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKStlKSU3KSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Kk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXt2YXIgcj1ocy55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChocy5kYXlPZlllYXIodCkrKHIrZSklNykvNyktKHIhPT1lKX0pO2hzW3QrInMiXT1yLnJhbmdlLGhzW3QrInMiXS51dGM9ci51dGMucmFuZ2UsaHNbdCsiT2ZZZWFyIl09ZnVuY3Rpb24odCl7dmFyIHI9aHMueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoaHMuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpfX0pLGhzLndlZWs9aHMuc3VuZGF5LGhzLndlZWtzPWhzLnN1bmRheS5yYW5nZSxocy53ZWVrcy51dGM9aHMuc3VuZGF5LnV0Yy5yYW5nZSxocy53ZWVrT2ZZZWFyPWhzLnN1bmRheU9mWWVhcjt2YXIgbXM9eyItIjoiIixfOiIgIiwwOiIwIn0sdnM9L15ccypcZCsvLGdzPS9eJS87Y28ubG9jYWxlPWZ1bmN0aW9uKHQpe3JldHVybntudW1iZXJGb3JtYXQ6TnQodCksdGltZUZvcm1hdDpxdCh0KX19O3ZhciB5cz1jby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2NvLmZvcm1hdD15cy5udW1iZXJGb3JtYXQsY28uZ2VvPXt9LGZlLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24odCl7aGUodCx0aGlzLnQsYnMpLGhlKGJzLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWJzLnQ6dGhpcy5zPWJzLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBicz1uZXcgZmU7Y28uZ2VvLnN0cmVhbT1mdW5jdGlvbih0LGUpe3QmJnhzLmhhc093blByb3BlcnR5KHQudHlwZSk/eHNbdC50eXBlXSh0LGUpOmRlKHQsZSl9O3ZhciB4cz17RmVhdHVyZTpmdW5jdGlvbih0LGUpe2RlKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkZShyW25dLmdlb21ldHJ5LGUpfX0sX3M9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtwZSh0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGUocltuXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7bWUodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyltZShyW25dLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZGUocltuXSxlKX19O2NvLmdlby5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiB3cz0wLGNvLmdlby5zdHJlYW0odCxUcyksd3N9O3ZhciB3cyxNcz1uZXcgZmUsVHM9e3NwaGVyZTpmdW5jdGlvbigpe3dzKz00Kk5vfSxwb2ludDpNLGxpbmVTdGFydDpNLGxpbmVFbmQ6TSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtNcy5yZXNldCgpLFRzLmxpbmVTdGFydD12ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PTIqTXM7d3MrPXQ8MD80Kk5vK3Q6dCxUcy5saW5lU3RhcnQ9VHMubGluZUVuZD1Ucy5wb2ludD1NfX07Y28uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtiLnB1c2goeD1bdT10LGg9dF0pLGU8ZiYmKGY9ZSksZT5kJiYoZD1lKX1mdW5jdGlvbiBlKGUscil7dmFyIG49Z2UoW2UqSG8scipIb10pO2lmKGcpe3ZhciBpPWJlKGcsbiksYT1baVsxXSwtaVswXSwwXSxvPWJlKGEsaSk7d2Uobyksbz1NZShvKTt2YXIgbD1lLXAsYz1sPjA/MTotMSxtPW9bMF0qcW8qYyx2PXhvKGwpPjE4MDtpZih2XihjKnA8bSYmbTxjKmUpKXt2YXIgeT1vWzFdKnFvO3k+ZCYmKGQ9eSl9ZWxzZSBpZihtPShtKzM2MCklMzYwLTE4MCx2XihjKnA8bSYmbTxjKmUpKXt2YXIgeT0tb1sxXSpxbzt5PGYmJihmPXkpfWVsc2UgcjxmJiYoZj1yKSxyPmQmJihkPXIpO3Y/ZTxwP3ModSxlKT5zKHUsaCkmJihoPWUpOnMoZSxoKT5zKHUsaCkmJih1PWUpOmg+PXU/KGU8dSYmKHU9ZSksZT5oJiYoaD1lKSk6ZT5wP3ModSxlKT5zKHUsaCkmJihoPWUpOnMoZSxoKT5zKHUsaCkmJih1PWUpfWVsc2UgdChlLHIpO2c9bixwPWV9ZnVuY3Rpb24gcigpe18ucG9pbnQ9ZX1mdW5jdGlvbiBuKCl7eFswXT11LHhbMV09aCxfLnBvaW50PXQsZz1udWxsfWZ1bmN0aW9uIGkodCxyKXtpZihnKXt2YXIgbj10LXA7eSs9eG8obik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bn1lbHNlIG09dCx2PXI7VHMucG9pbnQodCxyKSxlKHQscil9ZnVuY3Rpb24gYSgpe1RzLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8oKXtpKG0sdiksVHMubGluZUVuZCgpLHhvKHkpPkZvJiYodT0tKGg9MTgwKSkseFswXT11LHhbMV09aCxnPW51bGx9ZnVuY3Rpb24gcyh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBlWzBdPD1lWzFdP2VbMF08PXQmJnQ8PWVbMV06dDxlWzBdfHxlWzFdPHR9dmFyIHUsZixoLGQscCxtLHYsZyx5LGIseCxfPXtwb2ludDp0LGxpbmVTdGFydDpyLGxpbmVFbmQ6bixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PWksXy5saW5lU3RhcnQ9YSxfLmxpbmVFbmQ9byx5PTAsVHMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtUcy5wb2x5Z29uRW5kKCksXy5wb2ludD10LF8ubGluZVN0YXJ0PXIsXy5saW5lRW5kPW4sTXM8MD8odT0tKGg9MTgwKSxmPS0oZD05MCkpOnk+Rm8/ZD05MDp5PC1GbyYmKGY9LTkwKSx4WzBdPXUseFsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKHQpe2Q9aD0tKHU9Zj0xLzApLGI9W10sY28uZ2VvLnN0cmVhbSh0LF8pO3ZhciBlPWIubGVuZ3RoO2lmKGUpe2Iuc29ydChsKTtmb3IodmFyIHIsbj0xLGk9YlswXSxhPVtpXTtuPGU7KytuKXI9YltuXSxjKHJbMF0saSl8fGMoclsxXSxpKT8ocyhpWzBdLHJbMV0pPnMoaVswXSxpWzFdKSYmKGlbMV09clsxXSkscyhyWzBdLGlbMV0pPnMoaVswXSxpWzFdKSYmKGlbMF09clswXSkpOmEucHVzaChpPXIpO2Zvcih2YXIgbyxyLHA9LSgxLzApLGU9YS5sZW5ndGgtMSxuPTAsaT1hW2VdO248PWU7aT1yLCsrbilyPWFbbl0sKG89cyhpWzFdLHJbMF0pKT5wJiYocD1vLHU9clswXSxoPWlbMV0pfXJldHVybiBiPXg9bnVsbCx1PT09MS8wfHxmPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3UsZl0sW2gsZF1dfX0oKSxjby5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7a3M9QXM9RXM9U3M9THM9Q3M9SXM9RHM9UHM9enM9T3M9MCxjby5nZW8uc3RyZWFtKHQsUnMpO3ZhciBlPVBzLHI9enMsbj1PcyxpPWUqZStyKnIrbipuO3JldHVybiBpPGpvJiYoZT1DcyxyPUlzLG49RHMsQXM8Rm8mJihlPUVzLHI9U3Msbj1McyksKGk9ZSplK3IqcituKm4pPGpvKT9bTmFOLE5hTl06W01hdGguYXRhbjIocixlKSpxbyxudChuL01hdGguc3FydChpKSkqcW9dfTt2YXIga3MsQXMsRXMsU3MsTHMsQ3MsSXMsRHMsUHMsenMsT3MsUnM9e3NwaGVyZTpNLHBvaW50OmtlLGxpbmVTdGFydDpFZSxsaW5lRW5kOlNlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JzLmxpbmVTdGFydD1MZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1JzLmxpbmVTdGFydD1FZX19LEZzPU9lKEllLE5lLFVlLFstTm8sLU5vLzJdKSxqcz0xZTk7Y28uZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiBpJiYoaS52YWxpZD0hMSksaT1hKHQpLGkudmFsaWQ9ITAsaX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUdlKHQ9K3NbMF1bMF0sZT0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0pLGkmJihpLnZhbGlkPSExLGk9bnVsbCksbyk6W1t0LGVdLFtyLG5dXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LChjby5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoWGUpfSkucmF3PVhlLGNvLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gY28uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LGNvLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBhPXRbMF0sbz10WzFdO3JldHVybiBlPW51bGwscihhLG8pLGV8fChuKGEsbyksZSl8fGkoYSxvKSxlfXZhciBlLHIsbixpLGE9Y28uZ2VvLmFsYmVycygpLG89Y28uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxzPWNvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LHIpe2U9W3Qscl19fTtyZXR1cm4gdC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLHI9YS50cmFuc2xhdGUoKSxuPSh0WzBdLXJbMF0pL2UsaT0odFsxXS1yWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmbj49LS40MjUmJm48LS4yMTQ/bzppPj0uMTY2JiZpPC4yMzQmJm4+PS0uMjE0JiZuPC0uMTE1P3M6YSkuaW52ZXJ0KHQpfSx0LnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1hLnN0cmVhbSh0KSxyPW8uc3RyZWFtKHQpLG49cy5zdHJlYW0odCk7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHQsaSl7ZS5wb2ludCh0LGkpLHIucG9pbnQodCxpKSxuLnBvaW50KHQsaSl9LHNwaGVyZTpmdW5jdGlvbigpe2Uuc3BoZXJlKCksci5zcGhlcmUoKSxuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCksbi5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHIubGluZUVuZCgpLG4ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCksbi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpLG4ucG9seWdvbkVuZCgpfX19LHQucHJlY2lzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbihlKSxvLnByZWNpc2lvbihlKSxzLnByZWNpc2lvbihlKSx0KTphLnByZWNpc2lvbigpfSx0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKGUpLG8uc2NhbGUoLjM1KmUpLHMuc2NhbGUoZSksdC50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGM9YS5zY2FsZSgpLHU9K2VbMF0sZj0rZVsxXTtyZXR1cm4gcj1hLnRyYW5zbGF0ZShlKS5jbGlwRXh0ZW50KFtbdS0uNDU1KmMsZi0uMjM4KmNdLFt1Ky40NTUqYyxmKy4yMzgqY11dKS5zdHJlYW0obCkucG9pbnQsbj1vLnRyYW5zbGF0ZShbdS0uMzA3KmMsZisuMjAxKmNdKS5jbGlwRXh0ZW50KFtbdS0uNDI1KmMrRm8sZisuMTIqYytGb10sW3UtLjIxNCpjLUZvLGYrLjIzNCpjLUZvXV0pLnN0cmVhbShsKS5wb2ludCxpPXMudHJhbnNsYXRlKFt1LS4yMDUqYyxmKy4yMTIqY10pLmNsaXBFeHRlbnQoW1t1LS4yMTQqYytGbyxmKy4xNjYqYytGb10sW3UtLjExNSpjLUZvLGYrLjIzNCpjLUZvXV0pLnN0cmVhbShsKS5wb2ludCx0fSx0LnNjYWxlKDEwNzApfTt2YXIgTnMsQnMsVXMsVnMsSHMscXMsR3M9e3BvaW50Ok0sbGluZVN0YXJ0Ok0sbGluZUVuZDpNLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0JzPTAsR3MubGluZVN0YXJ0PVdlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7R3MubGluZVN0YXJ0PUdzLmxpbmVFbmQ9R3MucG9pbnQ9TSxOcys9eG8oQnMvMil9fSxZcz17cG9pbnQ6WmUsbGluZVN0YXJ0Ok0sbGluZUVuZDpNLHBvbHlnb25TdGFydDpNLHBvbHlnb25FbmQ6TX0sWHM9e3BvaW50OlFlLGxpbmVTdGFydDokZSxsaW5lRW5kOnRyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1hzLmxpbmVTdGFydD1lcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe1hzLnBvaW50PVFlLFhzLmxpbmVTdGFydD0kZSxYcy5saW5lRW5kPXRyfX07Y28uZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHMmJmEucG9pbnRSYWRpdXMoK3MuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz1pKGEpKSxjby5nZW8uc3RyZWFtKHQsbykpLGEucmVzdWx0KCl9ZnVuY3Rpb24gZSgpe3JldHVybiBvPW51bGwsdH12YXIgcixuLGksYSxvLHM9NC41O3JldHVybiB0LmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIE5zPTAsY28uZ2VvLnN0cmVhbSh0LGkoR3MpKSxOc30sdC5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gRXM9U3M9THM9Q3M9SXM9RHM9UHM9enM9T3M9MCxjby5nZW8uc3RyZWFtKHQsaShYcykpLE9zP1tQcy9Pcyx6cy9Pc106RHM/W0NzL0RzLElzL0RzXTpMcz9bRXMvTHMsU3MvTHNdOltOYU4sTmFOXX0sdC5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIEhzPXFzPS0oVXM9VnM9MS8wKSxjby5nZW8uc3RyZWFtKHQsaShZcykpLFtbVXMsVnNdLFtIcyxxc11dfSx0LnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KHI9dCk/dC5zdHJlYW18fGlyKHQpOngsZSgpKTpyfSx0LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49dCk/bmV3IEplOm5ldyBycih0KSwiZnVuY3Rpb24iIT10eXBlb2YgcyYmYS5wb2ludFJhZGl1cyhzKSxlKCkpOm59LHQucG9pbnRSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTooYS5wb2ludFJhZGl1cygrZSksK2UpLHQpOnN9LHQucHJvamVjdGlvbihjby5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LGNvLmdlby50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpmdW5jdGlvbihlKXt2YXIgcj1uZXcgYXIoZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfX19LGFyLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sY28uZ2VvLnByb2plY3Rpb249c3IsY28uZ2VvLnByb2plY3Rpb25NdXRhdG9yPWxyLChjby5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKHVyKX0pLnJhdz11ci5pbnZlcnQ9dXIsY28uZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU9dChlWzBdKkhvLGVbMV0qSG8pLGVbMF0qPXFvLGVbMV0qPXFvLGV9cmV0dXJuIHQ9aHIodFswXSUzNjAqSG8sdFsxXSpIbyx0Lmxlbmd0aD4yP3RbMl0qSG86MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbnZlcnQoZVswXSpIbyxlWzFdKkhvKSxlWzBdKj1xbyxlWzFdKj1xbyxlfSxlfSxmci5pbnZlcnQ9dXIsY28uZ2VvLmNpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLGU9aHIoLXRbMF0qSG8sLXRbMV0qSG8sMCkuaW52ZXJ0LGk9W107cmV0dXJuIHIobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKHQscil7aS5wdXNoKHQ9ZSh0LHIpKSx0WzBdKj1xbyx0WzFdKj1xb319KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2ldfX12YXIgZSxyLG49WzAsMF0saT02O3JldHVybiB0Lm9yaWdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHQuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dnIoKGU9K24pKkhvLGkqSG8pLHQpOmV9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXZyKGUqSG8sKGk9K24pKkhvKSx0KTppfSx0LmFuZ2xlKDkwKX0sY28uZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpIbyxpPXRbMV0qSG8sYT1lWzFdKkhvLG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxmPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1mKm8pKnIrKHI9Yyp1LWwqZipzKSpyKSxsKnUrYypmKnMpfSxjby5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmUoKX19ZnVuY3Rpb24gZSgpe3JldHVybiBjby5yYW5nZShNYXRoLmNlaWwoYS92KSp2LGksdikubWFwKGgpLmNvbmNhdChjby5yYW5nZShNYXRoLmNlaWwoYy9nKSpnLGwsZykubWFwKGQpKS5jb25jYXQoY28ucmFuZ2UoTWF0aC5jZWlsKG4vcCkqcCxyLHApLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geG8odCV2KT5Gb30pLm1hcCh1KSkuY29uY2F0KGNvLnJhbmdlKE1hdGguY2VpbChzL20pKm0sbyxtKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHhvKHQlZyk+Rm99KS5tYXAoZikpfXZhciByLG4saSxhLG8scyxsLGMsdSxmLGgsZCxwPTEwLG09cCx2PTkwLGc9MzYwLHk9Mi41O3JldHVybiB0LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGUoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LHQub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChhKS5jb25jYXQoZChsKS5zbGljZSgxKSxoKGkpLnJldmVyc2UoKS5zbGljZSgxKSxkKGMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sdC5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5tYWpvckV4dGVudChlKS5taW5vckV4dGVudChlKTp0Lm1pbm9yRXh0ZW50KCl9LHQubWFqb3JFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K2VbMF1bMF0saT0rZVsxXVswXSxjPStlWzBdWzFdLGw9K2VbMV1bMV0sYT5pJiYoZT1hLGE9aSxpPWUpLGM+bCYmKGU9YyxjPWwsbD1lKSx0LnByZWNpc2lvbih5KSk6W1thLGNdLFtpLGxdXX0sdC5taW5vckV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXVswXSxyPStlWzFdWzBdLHM9K2VbMF1bMV0sbz0rZVsxXVsxXSxuPnImJihlPW4sbj1yLHI9ZSkscz5vJiYoZT1zLHM9byxvPWUpLHQucHJlY2lzaW9uKHkpKTpbW24sc10sW3Isb11dfSx0LnN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5tYWpvclN0ZXAoZSkubWlub3JTdGVwKGUpOnQubWlub3JTdGVwKCl9LHQubWFqb3JTdGVwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStlWzBdLGc9K2VbMV0sdCk6W3YsZ119LHQubWlub3JTdGVwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPStlWzBdLG09K2VbMV0sdCk6W3AsbV19LHQucHJlY2lzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStlLHU9eXIocyxvLDkwKSxmPWJyKG4scix5KSxoPXlyKGMsbCw5MCksZD1icihhLGkseSksdCk6eX0sdC5tYWpvckV4dGVudChbWy0xODAsLTkwK0ZvXSxbMTgwLDkwLUZvXV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAtRm9dLFsxODAsODArRm9dXSl9LGNvLmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIGUscixuPXhyLGk9X3I7cmV0dXJuIHQuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gY28uZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5zb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cixlPSJmdW5jdGlvbiI9PXR5cGVvZiByP251bGw6cix0KTpufSx0LnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLHQpOml9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dDowfSx0fSxjby5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd3IodFswXSpIbyx0WzFdKkhvLGVbMF0qSG8sZVsxXSpIbyl9LGNvLmdlby5sZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIFdzPTAsY28uZ2VvLnN0cmVhbSh0LFpzKSxXc307dmFyIFdzLFpzPXtzcGhlcmU6TSxwb2ludDpNLGxpbmVTdGFydDpNcixsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxKcz1UcihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyhjby5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEpzKX0pLnJhdz1Kczt2YXIgS3M9VHIoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hY29zKHQpO3JldHVybiBlJiZlL01hdGguc2luKGUpfSx4KTsoY28uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEtzKX0pLnJhdz1LcywoY28uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFllKGtyKX0pLnJhdz1rciwoY28uZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoQXIpfSkucmF3PUFyO3ZhciBRcz1UcihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pOyhjby5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoUXMpfSkucmF3PVFzLEVyLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1Wb119LChjby5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gU3IoRXIpfSkucmF3PUVyO3ZhciAkcz1UcihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyhjby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKCRzKX0pLnJhdz0kczt2YXIgdGw9VHIoZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pOyhjby5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBzcih0bCl9KS5yYXc9dGwsTHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1Wb119LChjby5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9U3IoTHIpLGU9dC5jZW50ZXIscj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/ZShbLXRbMV0sdFswXV0pOih0PWUoKSxbdFsxXSwtdFswXV0pfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6KHQ9cigpLFt0WzBdLHRbMV0sdFsyXS05MF0pfSxyKFswLDAsOTBdKX0pLnJhdz1Mcixjby5nZW9tPXt9LGNvLmdlb20uaHVsbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIGUsaT1TdChyKSxhPVN0KG4pLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goWytpLmNhbGwodGhpcyx0W2VdLGUpLCthLmNhbGwodGhpcyx0W2VdLGUpLGVdKTtmb3Iocy5zb3J0KFByKSxlPTA7ZTxvO2UrKylsLnB1c2goW3NbZV1bMF0sLXNbZV1bMV1dKTt2YXIgYz1EcihzKSx1PURyKGwpLGY9dVswXT09PWNbMF0saD11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxkPVtdO2ZvcihlPWMubGVuZ3RoLTE7ZT49MDstLWUpZC5wdXNoKHRbc1tjW2VdXVsyXV0pO2ZvcihlPStmO2U8dS5sZW5ndGgtaDsrK2UpZC5wdXNoKHRbc1t1W2VdXVsyXV0pO3JldHVybiBkfXZhciByPUNyLG49SXI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0KTooZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZSl9LGNvLmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4ga28odCxlbCksdH07dmFyIGVsPWNvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZWwuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sZWwuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sZWwuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9UnIodCksbD0tMSxjPXRoaXMubGVuZ3RoLVJyKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylvPWVbcl0senIobyx1LGkpPyh6cihhLHUsaSl8fHQucHVzaChPcihhLG8sdSxpKSksdC5wdXNoKG8pKTp6cihhLHUsaSkmJnQucHVzaChPcihhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBybCxubCxpbCxhbCxvbCxzbD1bXSxsbD1bXTtxci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KXQ9ZVtyXS5lZGdlLHQuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQoWXIpLGUubGVuZ3RofSxybi5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxubi5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9bG4odGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYob24odGhpcyxyKSx0PXIscj10LlUpLHIuQz0hMSxuLkM9ITAsc24odGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihzbih0aGlzLHIpLHQ9cixyPXQuVSksci5DPSExLG4uQz0hMCxvbih0aGlzLG4pKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9sbihvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKXtpZih0JiZ0LkMpcmV0dXJuIHZvaWQodC5DPSExKTtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKGU9aS5SLGUuQyYmKGUuQz0hMSxpLkM9ITAsb24odGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxzbih0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxvbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9aS5MLGUuQyYmKGUuQz0hMSxpLkM9ITAsc24odGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxvbih0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxzbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sY28uZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxuPXNbMF1bMF0saT1zWzBdWzFdLGE9c1sxXVswXSxvPXNbMV1bMV07cmV0dXJuIGNuKHIodCkscykuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ZhciBsPXIuZWRnZXMsYz1yLnNpdGU7KGVbc109bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XX0pOmMueD49biYmYy54PD1hJiZjLnk+PWkmJmMueTw9bz9bW24sb10sW2Esb10sW2EsaV0sW24saV1dOltdKS5wb2ludD10W3NdfSksZX1mdW5jdGlvbiByKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQoYSh0LGUpL0ZvKSpGbyx5Ok1hdGgucm91bmQobyh0LGUpL0ZvKSpGbyxpOmV9fSl9dmFyIG49Q3IsaT1JcixhPW4sbz1pLHM9Y2w7cmV0dXJuIHQ/ZSh0KTooZS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gY24ocih0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sZS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGNuKHIodCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYT1yLnNpdGUsbz1yLmVkZ2VzLnNvcnQoWXIpLHM9LTEsbD1vLmxlbmd0aCxjPW9bbC0xXS5lZGdlLHU9Yy5sPT09YT9jLnI6Yy5sOysrczxsOyljLGk9dSxjPW9bc10uZWRnZSx1PWMubD09PWE/Yy5yOmMubCxuPGkuaSYmbjx1LmkmJmZuKGEsaSx1KTwwJiZlLnB1c2goW3Rbbl0sdFtpLmldLHRbdS5pXV0pfSksZX0sZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVN0KG49dCksZSk6bn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVN0KGk9dCksZSk6aX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/Y2w6dCxlKTpzPT09Y2w/bnVsbDpzfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6cz09PWNsP251bGw6cyYmc1sxXX0sZSl9O3ZhciBjbD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtjby5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKHQpe3JldHVybiBjby5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXModCl9LGNvLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCx1PXQueTtpZihudWxsIT1sKWlmKHhvKGwtcikreG8odS1uKTwuMDEpYyh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIGY9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCxjKHQsZixsLHUsaSxhLG8scyksYyh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgYyh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIGModCxlLHIsbixpLG8scyxsKXt2YXIgYz0uNSooaStzKSx1PS41KihvK2wpLGY9cj49YyxoPW4+PXUsZD1oPDwxfGY7dC5sZWFmPSExLHQ9dC5ub2Rlc1tkXXx8KHQubm9kZXNbZF09cG4oKSksZj9pPWM6cz1jLGg/bz11Omw9dSxhKHQsZSxyLG4saSxvLHMsbCl9dmFyIHUsZixoLGQscCxtLHYsZyx5LGI9U3QocykseD1TdChsKTtpZihudWxsIT1lKW09ZSx2PXIsZz1uLHk9aTtlbHNlIGlmKGc9eT0tKG09dj0xLzApLGY9W10saD1bXSxwPXQubGVuZ3RoLG8pZm9yKGQ9MDtkPHA7KytkKXU9dFtkXSx1Lng8bSYmKG09dS54KSx1Lnk8diYmKHY9dS55KSx1Lng+ZyYmKGc9dS54KSx1Lnk+eSYmKHk9dS55KSxmLnB1c2godS54KSxoLnB1c2godS55KTtlbHNlIGZvcihkPTA7ZDxwOysrZCl7dmFyIF89K2IodT10W2RdLGQpLHc9K3godSxkKTtfPG0mJihtPV8pLHc8diYmKHY9dyksXz5nJiYoZz1fKSx3PnkmJih5PXcpLGYucHVzaChfKSxoLnB1c2godyl9dmFyIE09Zy1tLFQ9eS12O00+VD95PXYrTTpnPW0rVDt2YXIgaz1wbigpO2lmKGsuYWRkPWZ1bmN0aW9uKHQpe2Eoayx0LCtiKHQsKytkKSwreCh0LGQpLG0sdixnLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKHQpe21uKHQsayxtLHYsZyx5KX0say5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB2bihrLHRbMF0sdFsxXSxtLHYsZyx5KX0sZD0tMSxudWxsPT1lKXtmb3IoOysrZDxwOylhKGssdFtkXSxmW2RdLGhbZF0sbSx2LGcseSk7LS1kfWVsc2UgdC5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPXQ9dT1udWxsLGt9dmFyIG8scz1DcixsPUlyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhzPWhuLGw9ZG4sMz09PW8mJihpPXIsbj1lLHI9ZT0wKSxhKHQpKTooYS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsYSk6c30sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsYSk6bH0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxhKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxhKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxhKX0sY28uaW50ZXJwb2xhdGVSZ2I9Z24sY28uaW50ZXJwb2xhdGVPYmplY3Q9eW4sY28uaW50ZXJwb2xhdGVOdW1iZXI9Ym4sY28uaW50ZXJwb2xhdGVTdHJpbmc9eG47dmFyIHVsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxmbD1uZXcgUmVnRXhwKHVsLnNvdXJjZSwiZyIpO2NvLmludGVycG9sYXRlPV9uLGNvLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9ucy5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP2duOnhuOmUgaW5zdGFuY2VvZiBsdD9nbjpBcnJheS5pc0FycmF5KGUpP3duOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/eW46Ym4pKHQsZSl9XSxjby5pbnRlcnBvbGF0ZUFycmF5PXduO3ZhciBobD1mdW5jdGlvbigpe3JldHVybiB4fSxkbD1jby5tYXAoe2xpbmVhcjpobCxwb2x5OkxuLHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gQW59LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIEVufSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gQ259LGV4cDpmdW5jdGlvbigpe3JldHVybiBJbn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIERufSxlbGFzdGljOlBuLGJhY2s6em4sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX0pLHBsPWNvLm1hcCh7aW46eCxvdXQ6VG4sImluLW91dCI6a24sIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIGtuKFRuKHQpKX19KTtjby5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLHI9ZT49MD90LnNsaWNlKDAsZSk6dCxuPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIHI9ZGwuZ2V0KHIpfHxobCxuPXBsLmdldChuKXx8eCxNbihuKHIuYXBwbHkobnVsbCx1by5jYWxsKGFyZ3VtZW50cywxKSkpKX0sY28uaW50ZXJwb2xhdGVIY2w9Um4sY28uaW50ZXJwb2xhdGVIc2w9Rm4sY28uaW50ZXJwb2xhdGVMYWI9am4sY28uaW50ZXJwb2xhdGVSb3VuZD1Obixjby50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9aG8uY3JlYXRlRWxlbWVudE5TKGNvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4oY28udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpO3ZhciByPWUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEJuKHI/ci5tYXRyaXg6bWwpfSkodCl9LEJuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgbWw9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtjby5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1abixjby5sYXlvdXQ9e30sY28ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goUW4odFtyXSkpO3JldHVybiBlfX0sY28ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LGMsZixoLGQscD17fSxtPVtdLHY9Y28ucmFuZ2UoYSksZz1bXTtmb3Iocj1bXSxuPVtdLHQ9MCxoPS0xOysraDxhOyl7Zm9yKGM9MCxkPS0xOysrZDxhOyljKz1pW2hdW2RdO20ucHVzaChjKSxnLnB1c2goY28ucmFuZ2UoYSkpLHQrPWN9Zm9yKG8mJnYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvKG1bdF0sbVtlXSl9KSxzJiZnLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gcyhpW2VdW3RdLGlbZV1bcl0pfSl9KSx0PShCby11KmEpL3QsYz0wLGg9LTE7KytoPGE7KXtmb3IoZj1jLGQ9LTE7KytkPGE7KXt2YXIgeT12W2hdLGI9Z1t5XVtkXSx4PWlbeV1bYl0sXz1jLHc9Yys9eCp0O3BbeSsiLSIrYl09e2luZGV4Onksc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6dyx2YWx1ZTp4fX1uW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpjLHZhbHVlOm1beV19LGMrPXV9Zm9yKGg9LTE7KytoPGE7KWZvcihkPWgtMTsrK2Q8YTspe3ZhciBNPXBbaCsiLSIrZF0sVD1wW2QrIi0iK2hdOyhNLnZhbHVlfHxULnZhbHVlKSYmci5wdXNoKE0udmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0Ok19Ontzb3VyY2U6TSx0YXJnZXQ6VH0pfWwmJmUoKX1mdW5jdGlvbiBlKCl7ci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX12YXIgcixuLGksYSxvLHMsbCxjPXt9LHU9MDtyZXR1cm4gYy5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9KGk9dCkmJmkubGVuZ3RoLHI9bj1udWxsLGMpOml9LGMucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LHI9bj1udWxsLGMpOnV9LGMuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHI9bj1udWxsLGMpOm99LGMuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHI9bnVsbCxjKTpzfSxjLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxyJiZlKCksYyk6bH0sYy5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dCgpLHJ9LGMuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIG58fHQoKSxufSxjfSxjby5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL2c8bCl7aWYobDxtKXt2YXIgYz1lLmNoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxtKXt2YXIgYz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBlKHQpe3QucHg9Y28uZXZlbnQueCx0LnB5PWNvLmV2ZW50LnksbC5yZXN1bWUoKX12YXIgcixuLGksYSxvLHMsbD17fSxjPWNvLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSx1PVsxLDFdLGY9LjksaD12bCxkPWdsLHA9LTMwLG09eWwsdj0uMSxnPS42NCx5PVtdLGI9W107cmV0dXJuIGwudGljaz1mdW5jdGlvbigpe2lmKChpKj0uOTkpPC4wMDUpcmV0dXJuIHI9bnVsbCxjLmVuZCh7dHlwZToiZW5kIixhbHBoYTppPTB9KSwhMDt2YXIgZSxuLGwsaCxkLG0sZyx4LF8sdz15Lmxlbmd0aCxNPWIubGVuZ3RoO2ZvcihuPTA7bjxNOysrbilsPWJbbl0saD1sLnNvdXJjZSxkPWwudGFyZ2V0LHg9ZC54LWgueCxfPWQueS1oLnksKG09eCp4K18qXykmJihtPWkqb1tuXSooKG09TWF0aC5zcXJ0KG0pKS1hW25dKS9tLHgqPW0sXyo9bSxkLngtPXgqKGc9aC53ZWlnaHQrZC53ZWlnaHQ/aC53ZWlnaHQvKGgud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT1fKmcsaC54Kz14KihnPTEtZyksaC55Kz1fKmcpO2lmKChnPWkqdikmJih4PXVbMF0vMixfPXVbMV0vMixuPS0xLGcpKWZvcig7KytuPHc7KWw9eVtuXSxsLngrPSh4LWwueCkqZyxsLnkrPShfLWwueSkqZztpZihwKWZvcihhaShlPWNvLmdlb20ucXVhZHRyZWUoeSksaSxzKSxuPS0xOysrbjx3OykobD15W25dKS5maXhlZHx8ZS52aXNpdCh0KGwpKTtmb3Iobj0tMTsrK248dzspbD15W25dLGwuZml4ZWQ/KGwueD1sLnB4LGwueT1sLnB5KToobC54LT0obC5weC0obC5weD1sLngpKSpmLGwueS09KGwucHktKGwucHk9bC55KSkqZik7Yy50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTppfSl9LGwubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxsKTp5fSxsLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbCk6Yn0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbCk6dX0sbC5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxsKTpofSxsLmRpc3RhbmNlPWwubGlua0Rpc3RhbmNlLGwubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3QsbCk6ZH0sbC5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxsKTpmfSxsLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGwpOnB9LGwuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LGwpOk1hdGguc3FydChtKX0sbC5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSt0LGwpOnZ9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dCp0LGwpOk1hdGguc3FydChnKX0sbC5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxpP3Q+MD9pPXQ6KHIuYz1udWxsLHIudD1OYU4scj1udWxsLGMuZW5kKHt0eXBlOiJlbmQiLGFscGhhOmk9MH0pKTp0PjAmJihjLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6aT10fSkscj1QdChsLnRpY2spKSxsKTppfSxsLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2lmKCFyKXtmb3Iocj1uZXcgQXJyYXkoaSksbD0wO2w8aTsrK2wpcltsXT1bXTtmb3IobD0wO2w8YzsrK2wpe3ZhciBhPWJbbF07clthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksclthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPXJbZV0sbD0tMSx1PXMubGVuZ3RoOysrbDx1OylpZighaXNOYU4obz1zW2xdW3RdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSpufXZhciBlLHIsbixpPXkubGVuZ3RoLGM9Yi5sZW5ndGgsZj11WzBdLG09dVsxXTtmb3IoZT0wO2U8aTsrK2UpKG49eVtlXSkuaW5kZXg9ZSxuLndlaWdodD0wO2ZvcihlPTA7ZTxjOysrZSluPWJbZV0sIm51bWJlciI9PXR5cGVvZiBuLnNvdXJjZSYmKG4uc291cmNlPXlbbi5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIG4udGFyZ2V0JiYobi50YXJnZXQ9eVtuLnRhcmdldF0pLCsrbi5zb3VyY2Uud2VpZ2h0LCsrbi50YXJnZXQud2VpZ2h0O2ZvcihlPTA7ZTxpOysrZSluPXlbZV0saXNOYU4obi54KSYmKG4ueD10KCJ4IixmKSksaXNOYU4obi55KSYmKG4ueT10KCJ5IixtKSksaXNOYU4obi5weCkmJihuLnB4PW4ueCksaXNOYU4obi5weSkmJihuLnB5PW4ueSk7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IoZT0wO2U8YzsrK2UpYVtlXT0raC5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTxjOysrZSlhW2VdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZClmb3IoZT0wO2U8YzsrK2Upb1tlXT0rZC5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTxjOysrZSlvW2VdPWQ7aWYocz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IoZT0wO2U8aTsrK2Upc1tlXT0rcC5jYWxsKHRoaXMseVtlXSxlKTtlbHNlIGZvcihlPTA7ZTxpOysrZSlzW2VdPXA7cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYobnx8KG49Y28uYmVoYXZpb3IuZHJhZygpLm9yaWdpbih4KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixlaSkub24oImRyYWcuZm9yY2UiLGUpLm9uKCJkcmFnZW5kLmZvcmNlIixyaSkpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsbmkpLm9uKCJtb3VzZW91dC5mb3JjZSIsaWkpLmNhbGwobil9LGNvLnJlYmluZChsLGMsIm9uIil9O3ZhciB2bD0yMCxnbD0xLHlsPTEvMDtjby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1yLmNhbGwodCxhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtuJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSBuJiYoYS52YWx1ZT0rbi5jYWxsKHQsYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIGxpKGksZnVuY3Rpb24odCl7dmFyIHIsaTtlJiYocj10LmNoaWxkcmVuKSYmci5zb3J0KGUpLG4mJihpPXQucGFyZW50KSYmKGkudmFsdWUrPXQudmFsdWUpfSksc312YXIgZT1maSxyPWNpLG49dWk7cmV0dXJuIHQuc29ydD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQuY2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5yZXZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBuJiYoc2koZSxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLGxpKGUsZnVuY3Rpb24oZSl7dmFyIHI7ZS5jaGlsZHJlbnx8KGUudmFsdWU9K24uY2FsbCh0LGUsZS5kZXB0aCl8fDApLChyPWUucGFyZW50KSYmKHIudmFsdWUrPWUudmFsdWUpfSkpLGV9LHR9LGNvLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47aWYoZS54PXIsZS55PWUuZGVwdGgqaSxlLmR4PW4sZS5keT1pLGEmJihvPWEubGVuZ3RoKSl7dmFyIG8scyxsLGM9LTE7Zm9yKG49ZS52YWx1ZT9uL2UudmFsdWU6MDsrK2M8bzspdChzPWFbY10scixsPXMudmFsdWUqbixpKSxyKz1sfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW4sbj0wO2lmKHImJihpPXIubGVuZ3RoKSlmb3IodmFyIGksYT0tMTsrK2E8aTspbj1NYXRoLm1heChuLGUoclthXSkpO3JldHVybiAxK259ZnVuY3Rpb24gcihyLGEpe3ZhciBvPW4uY2FsbCh0aGlzLHIsYSk7cmV0dXJuIHQob1swXSwwLGlbMF0saVsxXS9lKG9bMF0pKSxvfXZhciBuPWNvLmxheW91dC5oaWVyYXJjaHkoKSxpPVsxLDFdO3JldHVybiByLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyKTppfSxvaShyLG4pfSxjby5sYXlvdXQucGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChvKXt2YXIgcyxsPW8ubGVuZ3RoLGM9by5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4rZS5jYWxsKHQscixuKX0pLHU9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxmPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS11LGg9TWF0aC5taW4oTWF0aC5hYnMoZikvbCwrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPWgqKGY8MD8tMToxKSxwPWNvLnN1bShjKSxtPXA/KGYtbCpkKS9wOjAsdj1jby5yYW5nZShsKSxnPVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PWJsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGNbZV0tY1t0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihvW3RdLG9bZV0pfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2dbdF09e2RhdGE6b1t0XSx2YWx1ZTpzPWNbdF0sc3RhcnRBbmdsZTp1LGVuZEFuZ2xlOnUrPXMqbStkLHBhZEFuZ2xlOmh9fSksZ312YXIgZT1OdW1iZXIscj1ibCxuPTAsaT1CbyxhPTA7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cix0KTplfSx0LnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHR9O3ZhciBibD17fTtjby5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHMsbCl7aWYoIShoPXMubGVuZ3RoKSlyZXR1cm4gczt2YXIgYz1zLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlLmNhbGwodCxyLG4pfSksdT1jLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm5bYS5jYWxsKHQsZSxyKSxvLmNhbGwodCxlLHIpXX0pfSksZj1yLmNhbGwodCx1LGwpO2M9Y28ucGVybXV0ZShjLGYpLHU9Y28ucGVybXV0ZSh1LGYpO3ZhciBoLGQscCxtLHY9bi5jYWxsKHQsdSxsKSxnPWNbMF0ubGVuZ3RoO2ZvcihwPTA7cDxnOysrcClmb3IoaS5jYWxsKHQsY1swXVtwXSxtPXZbcF0sdVswXVtwXVsxXSksZD0xO2Q8aDsrK2QpaS5jYWxsKHQsY1tkXVtwXSxtKz11W2QtMV1bcF1bMV0sdVtkXVtwXVsxXSk7cmV0dXJuIHN9dmFyIGU9eCxyPXZpLG49Z2ksaT1taSxhPWRpLG89cGk7cmV0dXJuIHQudmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXIsdCk6ZX0sdC5vcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhsLmdldChlKXx8dmksdCk6cn0sdC5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfbC5nZXQoZSl8fGdpLHQpOm59LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHQpOm99LHQub3V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdH07dmFyIHhsPWNvLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKHlpKSxhPXQubWFwKGJpKSxvPWNvLnJhbmdlKG4pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XS1pW2VdfSkscz0wLGw9MCxjPVtdLHU9W107Zm9yKGU9MDtlPG47KytlKXI9b1tlXSxzPGw/KHMrPWFbcl0sYy5wdXNoKHIpKToobCs9YVtyXSx1LnB1c2gocikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9LHJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGNvLnJhbmdlKHQubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6dml9KSxfbD1jby5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxmPXRbMF0saD1mLmxlbmd0aCxkPVtdO2ZvcihkWzBdPWw9Yz0wLHI9MTtyPGg7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1mW3JdWzBdLWZbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19ZFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8aDsrK3IpZFtyXS09YztyZXR1cm4gZH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOmdpfSk7Y28ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxhKXtmb3IodmFyIG8scyxsPVtdLGM9dC5tYXAocix0aGlzKSx1PW4uY2FsbCh0aGlzLGMsYSksZj1pLmNhbGwodGhpcyx1LGMsYSksYT0tMSxoPWMubGVuZ3RoLGQ9Zi5sZW5ndGgtMSxwPWU/MToxL2g7KythPGQ7KW89bFthXT1bXSxvLmR4PWZbYSsxXS0oby54PWZbYV0pLG8ueT0wO2lmKGQ+MClmb3IoYT0tMTsrK2E8aDspKHM9Y1thXSk+PXVbMF0mJnM8PXVbMV0mJihvPWxbY28uYmlzZWN0KGYscywxLGQpLTFdLG8ueSs9cCxvLnB1c2godFthXSkpO3JldHVybiBsfXZhciBlPSEwLHI9TnVtYmVyLG49TWksaT1faTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49U3QoZSksdCk6bn0sdC5iaW5zPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgZT9mdW5jdGlvbih0KXtyZXR1cm4gd2kodCxlKX06U3QoZSksdCk6aX0sdC5mcmVxdWVuY3k9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISFyLHQpOmV9LHR9LGNvLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxsaShzLGZ1bmN0aW9uKHQpe3Qucj0rdSh0LnZhbHVlKX0pLGxpKHMsU2kpLG4pe3ZhciBmPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKS8yO2xpKHMsZnVuY3Rpb24odCl7dC5yKz1mfSksbGkocyxTaSksbGkocyxmdW5jdGlvbih0KXt0LnItPWZ9KX0KcmV0dXJuIElpKHMsbC8yLGMvMixlPzE6MS9NYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKSxvfXZhciBlLHI9Y28ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoVGkpLG49MCxpPVsxLDFdO3JldHVybiB0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx0KTppfSx0LnJhZGl1cz1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT1yfHwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yOityLHQpOmV9LHQucGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZSx0KTpufSxvaSh0LHIpfSxjby5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxpKXt2YXIgdT1vLmNhbGwodGhpcyx0LGkpLGY9dVswXSxoPWUoZik7aWYobGkoaCxyKSxoLnBhcmVudC5tPS1oLnosc2koaCxuKSxjKXNpKGYsYSk7ZWxzZXt2YXIgZD1mLHA9ZixtPWY7c2koZixmdW5jdGlvbih0KXt0Lng8ZC54JiYoZD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPm0uZGVwdGgmJihtPXQpfSk7dmFyIHY9cyhkLHApLzItZC54LGc9bFswXS8ocC54K3MocCxkKS8yK3YpLHk9bFsxXS8obS5kZXB0aHx8MSk7c2koZixmdW5jdGlvbih0KXt0Lng9KHQueCt2KSpnLHQueT10LmRlcHRoKnl9KX1yZXR1cm4gdX1mdW5jdGlvbiBlKHQpe2Zvcih2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtudWxsIT0oZT1uLnBvcCgpKTspZm9yKHZhciBpLGE9ZS5jaGlsZHJlbixvPTAscz1hLmxlbmd0aDtvPHM7KytvKW4ucHVzaCgoYVtvXT1pPXtfOmFbb10scGFyZW50OmUsY2hpbGRyZW46KGk9YVtvXS5jaGlsZHJlbikmJmkuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9aSk7cmV0dXJuIHIuY2hpbGRyZW5bMF19ZnVuY3Rpb24gcih0KXt2YXIgZT10LmNoaWxkcmVuLHI9dC5wYXJlbnQuY2hpbGRyZW4sbj10Lmk/clt0LmktMV06bnVsbDtpZihlLmxlbmd0aCl7RmkodCk7dmFyIGE9KGVbMF0ueitlW2UubGVuZ3RoLTFdLnopLzI7bj8odC56PW4ueitzKHQuXyxuLl8pLHQubT10LnotYSk6dC56PWF9ZWxzZSBuJiYodC56PW4ueitzKHQuXyxuLl8pKTt0LnBhcmVudC5BPWkodCxuLHQucGFyZW50LkF8fHJbMF0pfWZ1bmN0aW9uIG4odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIGkodCxlLHIpe2lmKGUpe2Zvcih2YXIgbixpPXQsYT10LG89ZSxsPWkucGFyZW50LmNoaWxkcmVuWzBdLGM9aS5tLHU9YS5tLGY9by5tLGg9bC5tO289T2kobyksaT16aShpKSxvJiZpOylsPXppKGwpLGE9T2koYSksYS5hPXQsbj1vLnorZi1pLnotYytzKG8uXyxpLl8pLG4+MCYmKFJpKGppKG8sdCxyKSx0LG4pLGMrPW4sdSs9biksZis9by5tLGMrPWkubSxoKz1sLm0sdSs9YS5tO28mJiFPaShhKSYmKGEudD1vLGEubSs9Zi11KSxpJiYhemkobCkmJihsLnQ9aSxsLm0rPWMtaCxyPXQpfXJldHVybiByfWZ1bmN0aW9uIGEodCl7dC54Kj1sWzBdLHQueT10LmRlcHRoKmxbMV19dmFyIG89Y28ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscz1QaSxsPVsxLDFdLGM9bnVsbDtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsdCk6c30sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PShsPWUpP2E6bnVsbCx0KTpjP251bGw6bH0sdC5ub2RlU2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1udWxsPT0obD1lKT9udWxsOmEsdCk6Yz9sOm51bGx9LG9pKHQsbyl9LGNvLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGEpe3ZhciBvLHM9ZS5jYWxsKHRoaXMsdCxhKSxsPXNbMF0sYz0wO2xpKGwsZnVuY3Rpb24odCl7dmFyIGU9dC5jaGlsZHJlbjtlJiZlLmxlbmd0aD8odC54PUJpKGUpLHQueT1OaShlKSk6KHQueD1vP2MrPXIodCxvKTowLHQueT0wLG89dCl9KTt2YXIgdT1VaShsKSxmPVZpKGwpLGg9dS54LXIodSxmKS8yLGQ9Zi54K3IoZix1KS8yO3JldHVybiBsaShsLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtbC54KSpuWzBdLHQueT0obC55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtaCkvKGQtaCkqblswXSx0Lnk9KDEtKGwueT90LnkvbC55OjEpKSpuWzFdfSksc312YXIgZT1jby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPVBpLG49WzEsMV0saT0hMTtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPWUpLHQpOmk/bnVsbDpufSx0Lm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPWUpLHQpOmk/bjpudWxsfSxvaSh0LGUpfSxjby5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KW49KHI9dFtpXSkudmFsdWUqKGU8MD8wOmUpLHIuYXJlYT1pc05hTihuKXx8bjw9MD8wOm59ZnVuY3Rpb24gZShyKXt2YXIgYT1yLmNoaWxkcmVuO2lmKGEmJmEubGVuZ3RoKXt2YXIgbyxzLGwsYz1mKHIpLHU9W10saD1hLnNsaWNlKCkscD0xLzAsbT0ic2xpY2UiPT09ZD9jLmR4OiJkaWNlIj09PWQ/Yy5keToic2xpY2UtZGljZSI9PT1kPzEmci5kZXB0aD9jLmR5OmMuZHg6TWF0aC5taW4oYy5keCxjLmR5KTtmb3IodChoLGMuZHgqYy5keS9yLnZhbHVlKSx1LmFyZWE9MDsobD1oLmxlbmd0aCk+MDspdS5wdXNoKG89aFtsLTFdKSx1LmFyZWErPW8uYXJlYSwic3F1YXJpZnkiIT09ZHx8KHM9bih1LG0pKTw9cD8oaC5wb3AoKSxwPXMpOih1LmFyZWEtPXUucG9wKCkuYXJlYSxpKHUsbSxjLCExKSxtPU1hdGgubWluKGMuZHgsYy5keSksdS5sZW5ndGg9dS5hcmVhPTAscD0xLzApO3UubGVuZ3RoJiYoaSh1LG0sYywhMCksdS5sZW5ndGg9dS5hcmVhPTApLGEuZm9yRWFjaChlKX19ZnVuY3Rpb24gcihlKXt2YXIgbj1lLmNoaWxkcmVuO2lmKG4mJm4ubGVuZ3RoKXt2YXIgYSxvPWYoZSkscz1uLnNsaWNlKCksbD1bXTtmb3IodChzLG8uZHgqby5keS9lLnZhbHVlKSxsLmFyZWE9MDthPXMucG9wKCk7KWwucHVzaChhKSxsLmFyZWErPWEuYXJlYSxudWxsIT1hLnomJihpKGwsYS56P28uZHg6by5keSxvLCFzLmxlbmd0aCksbC5sZW5ndGg9bC5hcmVhPTApO24uZm9yRWFjaChyKX19ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcixuPXQuYXJlYSxpPTAsYT0xLzAsbz0tMSxzPXQubGVuZ3RoOysrbzxzOykocj10W29dLmFyZWEpJiYocjxhJiYoYT1yKSxyPmkmJihpPXIpKTtyZXR1cm4gbio9bixlKj1lLG4/TWF0aC5tYXgoZSppKnAvbixuLyhlKmEqcCkpOjEvMH1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpLGE9LTEsbz10Lmxlbmd0aCxzPXIueCxjPXIueSx1PWU/bCh0LmFyZWEvZSk6MDtpZihlPT1yLmR4KXtmb3IoKG58fHU+ci5keSkmJih1PXIuZHkpOysrYTxvOylpPXRbYV0saS54PXMsaS55PWMsaS5keT11LHMrPWkuZHg9TWF0aC5taW4oci54K3IuZHgtcyx1P2woaS5hcmVhL3UpOjApO2kuej0hMCxpLmR4Kz1yLngrci5keC1zLHIueSs9dSxyLmR5LT11fWVsc2V7Zm9yKChufHx1PnIuZHgpJiYodT1yLmR4KTsrK2E8bzspaT10W2FdLGkueD1zLGkueT1jLGkuZHg9dSxjKz1pLmR5PU1hdGgubWluKHIueStyLmR5LWMsdT9sKGkuYXJlYS91KTowKTtpLno9ITEsaS5keSs9ci55K3IuZHktYyxyLngrPXUsci5keC09dX19ZnVuY3Rpb24gYShuKXt2YXIgaT1vfHxzKG4pLGE9aVswXTtyZXR1cm4gYS54PWEueT0wLGEudmFsdWU/KGEuZHg9Y1swXSxhLmR5PWNbMV0pOmEuZHg9YS5keT0wLG8mJnMucmV2YWx1ZShhKSx0KFthXSxhLmR4KmEuZHkvYS52YWx1ZSksKG8/cjplKShhKSxoJiYobz1pKSxpfXZhciBvLHM9Y28ubGF5b3V0LmhpZXJhcmNoeSgpLGw9TWF0aC5yb3VuZCxjPVsxLDFdLHU9bnVsbCxmPUhpLGg9ITEsZD0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsYSk6Y30sYS5wYWRkaW5nPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9dC5jYWxsKGEsZSxlLmRlcHRoKTtyZXR1cm4gbnVsbD09cj9IaShlKTpxaShlLCJudW1iZXIiPT10eXBlb2Ygcj9bcixyLHIscl06cil9ZnVuY3Rpb24gcihlKXtyZXR1cm4gcWkoZSx0KX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdTt2YXIgbjtyZXR1cm4gZj1udWxsPT0odT10KT9IaToiZnVuY3Rpb24iPT0obj10eXBlb2YgdCk/ZToibnVtYmVyIj09PW4/KHQ9W3QsdCx0LHRdLHIpOnIsYX0sYS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10P01hdGgucm91bmQ6TnVtYmVyLGEpOmwhPU51bWJlcn0sYS5zdGlja3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dCxvPW51bGwsYSk6aH0sYS5yYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LGEpOnB9LGEubW9kZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10KyIiLGEpOmR9LG9pKGEscyl9LGNvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve3I9MipNYXRoLnJhbmRvbSgpLTEsbj0yKk1hdGgucmFuZG9tKCktMSxpPXIqcituKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciB0PWNvLnJhbmRvbS5ub3JtYWwuYXBwbHkoY28sYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19LGJhdGVzOmZ1bmN0aW9uKHQpe3ZhciBlPWNvLnJhbmRvbS5pcndpbkhhbGwodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKS90fX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sY28uc2NhbGU9e307dmFyIHdsPXtmbG9vcjp4LGNlaWw6eH07Y28uc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIEtpKFswLDFdLFswLDFdLF9uLCExKX07dmFyIE1sPXtzOjEsZzoxLHA6MSxyOjEsZToxfTtjby5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gYWEoY28uc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgVGw9Y28uZm9ybWF0KCIuMGUiKSxrbD17Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguY2VpbCgtdCl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguZmxvb3IoLXQpfX07Y28uc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIG9hKGNvLnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSxjby5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvLnNjYWxlLnBvdygpLmV4cG9uZW50KC41KX0sY28uc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBsYShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSxjby5zY2FsZS5jYXRlZ29yeTEwPWZ1bmN0aW9uKCl7cmV0dXJuIGNvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShBbCl9LGNvLnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gY28uc2NhbGUub3JkaW5hbCgpLnJhbmdlKEVsKX0sY28uc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gY28uc2NhbGUub3JkaW5hbCgpLnJhbmdlKFNsKX0sY28uc2NhbGUuY2F0ZWdvcnkyMGM9ZnVuY3Rpb24oKXtyZXR1cm4gY28uc2NhbGUub3JkaW5hbCgpLnJhbmdlKExsKX07dmFyIEFsPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKF90KSxFbD1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChfdCksU2w9WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKF90KSxMbD1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKF90KTtjby5zY2FsZS5xdWFudGlsZT1mdW5jdGlvbigpe3JldHVybiBjYShbXSxbXSl9LGNvLnNjYWxlLnF1YW50aXplPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKDAsMSxbMCwxXSl9LGNvLnNjYWxlLnRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiBmYShbLjVdLFswLDFdKX0sY28uc2NhbGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gaGEoWzAsMV0pfSxjby5zdmc9e30sY28uc3ZnLmFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1NYXRoLm1heCgwLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1WbyxmPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLVZvLGg9TWF0aC5hYnMoZi11KSxkPXU+Zj8wOjE7aWYoYzx0JiYocD1jLGM9dCx0PXApLGg+PVVvKXJldHVybiBlKGMsZCkrKHQ/ZSh0LDEtZCk6IiIpKyJaIjt2YXIgcCxtLHYsZyx5LGIseCxfLHcsTSxULGssQT0wLEU9MCxTPVtdO2lmKChnPSgrbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYodj1hPT09Q2w/TWF0aC5zcXJ0KHQqdCtjKmMpOithLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkfHwoRSo9LTEpLGMmJihFPW50KHYvYypNYXRoLnNpbihnKSkpLHQmJihBPW50KHYvdCpNYXRoLnNpbihnKSkpKSxjKXt5PWMqTWF0aC5jb3ModStFKSxiPWMqTWF0aC5zaW4odStFKSx4PWMqTWF0aC5jb3MoZi1FKSxfPWMqTWF0aC5zaW4oZi1FKTt2YXIgTD1NYXRoLmFicyhmLXUtMipFKTw9Tm8/MDoxO2lmKEUmJmJhKHksYix4LF8pPT09ZF5MKXt2YXIgQz0odStmKS8yO3k9YypNYXRoLmNvcyhDKSxiPWMqTWF0aC5zaW4oQykseD1fPW51bGx9fWVsc2UgeT1iPTA7aWYodCl7dz10Kk1hdGguY29zKGYtQSksTT10Kk1hdGguc2luKGYtQSksVD10Kk1hdGguY29zKHUrQSksaz10Kk1hdGguc2luKHUrQSk7dmFyIEk9TWF0aC5hYnModS1mKzIqQSk8PU5vPzA6MTtpZihBJiZiYSh3LE0sVCxrKT09PTEtZF5JKXt2YXIgRD0odStmKS8yO3c9dCpNYXRoLmNvcyhEKSxNPXQqTWF0aC5zaW4oRCksVD1rPW51bGx9fWVsc2Ugdz1NPTA7aWYoaD5GbyYmKHA9TWF0aC5taW4oTWF0aC5hYnMoYy10KS8yLCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe209dDxjXmQ/MDoxO3ZhciBQPXAsej1wO2lmKGg8Tm8pe3ZhciBPPW51bGw9PVQ/W3csTV06bnVsbD09eD9beSxiXTpPcihbeSxiXSxbVCxrXSxbeCxfXSxbdyxNXSksUj15LU9bMF0sRj1iLU9bMV0saj14LU9bMF0sTj1fLU9bMV0sQj0xL01hdGguc2luKE1hdGguYWNvcygoUipqK0YqTikvKE1hdGguc3FydChSKlIrRipGKSpNYXRoLnNxcnQoaipqK04qTikpKS8yKSxVPU1hdGguc3FydChPWzBdKk9bMF0rT1sxXSpPWzFdKTt6PU1hdGgubWluKHAsKHQtVSkvKEItMSkpLFA9TWF0aC5taW4ocCwoYy1VKS8oQisxKSl9aWYobnVsbCE9eCl7dmFyIFY9eGEobnVsbD09VD9bdyxNXTpbVCxrXSxbeSxiXSxjLFAsZCksSD14YShbeCxfXSxbdyxNXSxjLFAsZCk7cD09PVA/Uy5wdXNoKCJNIixWWzBdLCJBIixQLCIsIixQLCIgMCAwLCIsbSwiICIsVlsxXSwiQSIsYywiLCIsYywiIDAgIiwxLWReYmEoVlsxXVswXSxWWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksIiwiLGQsIiAiLEhbMV0sIkEiLFAsIiwiLFAsIiAwIDAsIixtLCIgIixIWzBdKTpTLnB1c2goIk0iLFZbMF0sIkEiLFAsIiwiLFAsIiAwIDEsIixtLCIgIixIWzBdKX1lbHNlIFMucHVzaCgiTSIseSwiLCIsYik7aWYobnVsbCE9VCl7dmFyIHE9eGEoW3ksYl0sW1Qsa10sdCwteixkKSxHPXhhKFt3LE1dLG51bGw9PXg/W3ksYl06W3gsX10sdCwteixkKTtwPT09ej9TLnB1c2goIkwiLEdbMF0sIkEiLHosIiwiLHosIiAwIDAsIixtLCIgIixHWzFdLCJBIix0LCIsIix0LCIgMCAiLGReYmEoR1sxXVswXSxHWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksIiwiLDEtZCwiICIscVsxXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pOlMucHVzaCgiTCIsR1swXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pfWVsc2UgUy5wdXNoKCJMIix3LCIsIixNKX1lbHNlIFMucHVzaCgiTSIseSwiLCIsYiksbnVsbCE9eCYmUy5wdXNoKCJBIixjLCIsIixjLCIgMCAiLEwsIiwiLGQsIiAiLHgsIiwiLF8pLFMucHVzaCgiTCIsdywiLCIsTSksbnVsbCE9VCYmUy5wdXNoKCJBIix0LCIsIix0LCIgMCAiLEksIiwiLDEtZCwiICIsVCwiLCIsayk7cmV0dXJuIFMucHVzaCgiWiIpLFMuam9pbigiIil9ZnVuY3Rpb24gZSh0LGUpe3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIit0fXZhciByPXBhLG49bWEsaT1kYSxhPUNsLG89dmEscz1nYSxsPXlhO3JldHVybiB0LmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVN0KGUpLHQpOnJ9LHQub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49U3QoZSksdCk6bn0sdC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9U3QoZSksdCk6aX0sdC5wYWRSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZT09Q2w/Q2w6U3QoZSksdCk6YX0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVN0KGUpLHQpOm99LHQuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9U3QoZSksdCk6c30sdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1TdChlKSx0KTpsfSx0LmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHQ9KCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGU9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3MuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVZvO3JldHVybltNYXRoLmNvcyhlKSp0LE1hdGguc2luKGUpKnRdfSx0fTt2YXIgQ2w9ImF1dG8iO2NvLnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIF9hKHgpfTt2YXIgSWw9Y28ubWFwKHtsaW5lYXI6d2EsImxpbmVhci1jbG9zZWQiOk1hLHN0ZXA6VGEsInN0ZXAtYmVmb3JlIjprYSwic3RlcC1hZnRlciI6QWEsYmFzaXM6RGEsImJhc2lzLW9wZW4iOlBhLCJiYXNpcy1jbG9zZWQiOnphLGJ1bmRsZTpPYSxjYXJkaW5hbDpMYSwiY2FyZGluYWwtb3BlbiI6RWEsImNhcmRpbmFsLWNsb3NlZCI6U2EsbW9ub3RvbmU6VWF9KTtJbC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZS5rZXk9dCxlLmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QodCl9KTt2YXIgRGw9WzAsMi8zLDEvMywwXSxQbD1bMCwxLzMsMi8zLDBdLHpsPVswLDEvNiwyLzMsMS82XTtjby5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1fYShWYSk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdH0sa2EucmV2ZXJzZT1BYSxBYS5yZXZlcnNlPWthLGNvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEhhKHgpfSxjby5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1IYShWYSk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sY28uc3ZnLmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBsPWUodGhpcyxhLHQscyksYz1lKHRoaXMsbyx0LHMpO3JldHVybiJNIitsLnAwK24obC5yLGwucDEsbC5hMS1sLmEwKSsocihsLGMpP2kobC5yLGwucDEsbC5yLGwucDApOmkobC5yLGwucDEsYy5yLGMucDApK24oYy5yLGMucDEsYy5hMS1jLmEwKStpKGMucixjLnAxLGwucixsLnAwKSkrIloifWZ1bmN0aW9uIGUodCxlLHIsbil7dmFyIGk9ZS5jYWxsKHQscixuKSxhPXMuY2FsbCh0LGksbiksbz1sLmNhbGwodCxpLG4pLVZvLHU9Yy5jYWxsKHQsaSxuKS1WbztyZXR1cm57cjphLGEwOm8sYTE6dSxwMDpbYSpNYXRoLmNvcyhvKSxhKk1hdGguc2luKG8pXSxwMTpbYSpNYXRoLmNvcyh1KSxhKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmEwPT1lLmEwJiZ0LmExPT1lLmExfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiJBIit0KyIsIit0KyIgMCAiKyArKHI+Tm8pKyIsMSAiK2V9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4iUSAwLDAgIitufXZhciBhPXhyLG89X3Iscz1xYSxsPXZhLGM9Z2E7cmV0dXJuIHQucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPVN0KGUpLHQpOnN9LHQuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVN0KGUpLHQpOmF9LHQudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVN0KGUpLHQpOm99LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1TdChlKSx0KTpsfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPVN0KGUpLHQpOmN9LHR9LGNvLnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxpKXt2YXIgYT1lLmNhbGwodGhpcyx0LGkpLG89ci5jYWxsKHRoaXMsdCxpKSxzPShhLnkrby55KS8yLGw9W2Ese3g6YS54LHk6c30se3g6by54LHk6c30sb107cmV0dXJuIGw9bC5tYXAobiksIk0iK2xbMF0rIkMiK2xbMV0rIiAiK2xbMl0rIiAiK2xbM119dmFyIGU9eHIscj1fcixuPUdhO3JldHVybiB0LnNvdXJjZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1TdChyKSx0KTplfSx0LnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1TdChlKSx0KTpyfSx0LnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0fSxjby5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9Y28uc3ZnLmRpYWdvbmFsKCksZT1HYSxyPXQucHJvamVjdGlvbjtyZXR1cm4gdC5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoWWEoZT10KSk6ZX0sdH0sY28uc3ZnLnN5bWJvbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4oT2wuZ2V0KGUuY2FsbCh0aGlzLHQsbikpfHxaYSkoci5jYWxsKHRoaXMsdCxuKSl9dmFyIGU9V2Escj1YYTtyZXR1cm4gdC50eXBlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVN0KHIpLHQpOmV9LHQuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1TdChlKSx0KTpyfSx0fTt2YXIgT2w9Y28ubWFwKHtjaXJjbGU6WmEsY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMipGbCkpLHI9ZSpGbDtyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L1JsKSxyPWUqUmwvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9SbCkscj1lKlJsLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTtjby5zdmcuc3ltYm9sVHlwZXM9T2wua2V5cygpO3ZhciBSbD1NYXRoLnNxcnQoMyksRmw9TWF0aC50YW4oMzAqSG8pO0xvLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj1qbHx8KytWbCxpPXRvKHQpLGE9W10sbz1ObHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOlNuLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxmPWMubGVuZ3RoOysrdTxmOykocj1jW3VdKSYmZW8ocix1LGksbixvKSxlLnB1c2gocil9cmV0dXJuIEthKGEsaSxuKX0sTG8uaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9CbDpKYSh0byh0KSkpfTt2YXIgamwsTmwsQmw9SmEodG8oKSksVWw9W10sVmw9MDtVbC5jYWxsPUxvLmNhbGwsVWwuZW1wdHk9TG8uZW1wdHksVWwubm9kZT1Mby5ub2RlLFVsLnNpemU9TG8uc2l6ZSxjby50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQudHJhbnNpdGlvbj9qbD90LnRyYW5zaXRpb24oZSk6dDpjby5zZWxlY3Rpb24oKS50cmFuc2l0aW9uKHQpfSxjby50cmFuc2l0aW9uLnByb3RvdHlwZT1VbCxVbC5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLG89W107dD1DKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KCJfX2RhdGFfXyJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxlbyhyLHUsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBLYShvLGEsaSl9LFVsLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1JKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGY9dGhpc1tjXSxoPS0xLGQ9Zi5sZW5ndGg7KytoPGQ7KWlmKG49ZltoXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxoLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIHA9LTEsbT1yLmxlbmd0aDsrK3A8bTspKGk9cltwXSkmJmVvKGkscCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBLYShsLHMsbyl9LFVsLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SCh0KSk7Zm9yKHZhciBhPTAsbz10aGlzLmxlbmd0aDthPG87YSsrKXtpLnB1c2goZT1bXSk7Zm9yKHZhciByPXRoaXNbYV0scz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIEthKGksdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LFVsLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOkcodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LFVsLmF0dHI9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUocyl9ZnVuY3Rpb24gbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMocy5zcGFjZSxzLmxvY2FsKX1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT10P3I6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZShzKTtyZXR1cm4gciE9PXQmJihlPW8ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShzLGUodCkpfSl9KX1mdW5jdGlvbiBhKHQpe3JldHVybiBudWxsPT10P246KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKHMuc3BhY2Uscy5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1vKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhzLnNwYWNlLHMubG9jYWwsZSh0KSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKGUgaW4gdCl0aGlzLmF0dHIoZSx0W2VdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3JtIj09dD9abjpfbixzPWNvLm5zLnF1YWxpZnkodCk7cmV0dXJuIFFhKHRoaXMsImF0dHIuIit0LGUscy5sb2NhbD9hOmkpfSxVbC5hdHRyVHdlZW49ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7dmFyIG49ZS5jYWxsKHRoaXMsdCxyLHRoaXMuZ2V0QXR0cmlidXRlKGkpKTtyZXR1cm4gbiYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxuKHQpKX19ZnVuY3Rpb24gbih0LHIpe3ZhciBuPWUuY2FsbCh0aGlzLHQscix0aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCkpO3JldHVybiBuJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxuKHQpKX19dmFyIGk9Y28ubnMucXVhbGlmeSh0KTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK3QsaS5sb2NhbD9uOnIpfSxVbC5zdHlsZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciBpLGE9bih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gYSE9PWUmJihpPV9uKGEsZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGkoZSkscil9KX0pfXZhciBvPWFyZ3VtZW50cy5sZW5ndGg7aWYobzwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe288MiYmKGU9IiIpO2ZvcihyIGluIHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1yZXR1cm4gUWEodGhpcywic3R5bGUuIit0LGUsYSl9LFVsLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkoaSxhKXt2YXIgbz1lLmNhbGwodGhpcyxpLGEsbih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIG8mJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxvKGUpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGkpfSxVbC50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBRYSh0aGlzLCJ0ZXh0Iix0LCRhKX0sVWwucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LFVsLmVhc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWNvLmVhc2UuYXBwbHkoY28sYXJndW1lbnRzKSksRyh0aGlzLGZ1bmN0aW9uKG4pe25bcl1bZV0uZWFzZT10fSkpfSxVbC5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSxVbC5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0sVWwuZWFjaD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPU5sLGE9amw7dHJ5e2psPXIsRyh0aGlzLGZ1bmN0aW9uKGUsaSxhKXtObD1lW25dW3JdLHQuY2FsbChlLGUuX19kYXRhX18saSxhKX0pfWZpbmFsbHl7Tmw9aSxqbD1hfX1lbHNlIEcodGhpcyxmdW5jdGlvbihpKXt2YXIgYT1pW25dW3JdOyhhLmV2ZW50fHwoYS5ldmVudD1jby5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKHQsZSl9KTtyZXR1cm4gdGhpc30sVWwudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbixpPXRoaXMuaWQsYT0rK1ZsLG89dGhpcy5uYW1lc3BhY2Uscz1bXSxsPTAsYz10aGlzLmxlbmd0aDtsPGM7bCsrKXtzLnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbbF0sdT0wLGY9ZS5sZW5ndGg7dTxmO3UrKykocj1lW3VdKSYmKG49cltvXVtpXSxlbyhyLHUsbyxhLHt0aW1lOm4udGltZSxlYXNlOm4uZWFzZSxkZWxheTpuLmRlbGF5K24uZHVyYXRpb24sZHVyYXRpb246bi5kdXJhdGlvbn0pKSx0LnB1c2gocil9cmV0dXJuIEthKHMsbyxhKX0sY28uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0LGM9Y28uc2VsZWN0KHRoaXMpLHU9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxoPW51bGw9PWw/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYscyk6Zi5kb21haW4oKTpsLGQ9bnVsbD09ZT9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYscyk6eDplLHA9Yy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLGYpLG09cC5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsRm8pLHY9Y28udHJhbnNpdGlvbihwLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLEZvKS5yZW1vdmUoKSxnPWNvLnRyYW5zaXRpb24ocC5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseT1NYXRoLm1heChpLDApK28sYj1ZaShmKSxfPWMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLGNvLnRyYW5zaXRpb24oXykpO20uYXBwZW5kKCJsaW5lIiksbS5hcHBlbmQoInRleHQiKTt2YXIgTSxULGssQSxFPW0uc2VsZWN0KCJsaW5lIiksUz1nLnNlbGVjdCgibGluZSIpLEw9cC5zZWxlY3QoInRleHQiKS50ZXh0KGQpLEM9bS5zZWxlY3QoInRleHQiKSxJPWcuc2VsZWN0KCJ0ZXh0IiksRD0idG9wIj09PW58fCJsZWZ0Ij09PW4/LTE6MTtpZigiYm90dG9tIj09PW58fCJ0b3AiPT09bj8odD1ybyxNPSJ4IixrPSJ5IixUPSJ4MiIsQT0ieTIiLEwuYXR0cigiZHkiLEQ8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIitEKmErIlYwSCIrYlsxXSsiViIrRCphKSk6KHQ9bm8sTT0ieSIsaz0ieCIsVD0ieTIiLEE9IngyIixMLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLEQ8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIitEKmErIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIrRCphKSksRS5hdHRyKEEsRCppKSxDLmF0dHIoayxEKnkpLFMuYXR0cihULDApLmF0dHIoQSxEKmkpLEkuYXR0cihNLDApLmF0dHIoayxEKnkpLGYucmFuZ2VCYW5kKXt2YXIgUD1mLHo9UC5yYW5nZUJhbmQoKS8yO3U9Zj1mdW5jdGlvbih0KXtyZXR1cm4gUCh0KSt6fX1lbHNlIHUucmFuZ2VCYW5kP3U9Zjp2LmNhbGwodCxmLHUpO20uY2FsbCh0LHUsZiksZy5jYWxsKHQsZixmKX0pfXZhciBlLHI9Y28uc2NhbGUubGluZWFyKCksbj1IbCxpPTYsYT02LG89MyxzPVsxMF0sbD1udWxsO3JldHVybiB0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5vcmllbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSBpbiBxbD9lKyIiOkhsLHQpOm59LHQudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1mbyhhcmd1bWVudHMpLHQpOnN9LHQudGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHQpOmx9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQudGlja1NpemU9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj8oaT0rZSxhPSthcmd1bWVudHNbci0xXSx0KTppfSx0LmlubmVyVGlja1NpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2UsdCk6aX0sdC5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStlLHQpOmF9LHQudGlja1BhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2UsdCk6b30sdC50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnR9LHR9O3ZhciBIbD0iYm90dG9tIixxbD17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2NvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49Y28uc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLGEpLG89bi5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxuLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgcz1uLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEobSx4KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIEdsW3RdfSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikscy5zdHlsZSgiZGlzcGxheSIsdC5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbCxmPWNvLnRyYW5zaXRpb24obiksaD1jby50cmFuc2l0aW9uKG8pO2MmJihsPVlpKGMpLGguYXR0cigieCIsbFswXSkuYXR0cigid2lkdGgiLGxbMV0tbFswXSkscihmKSksdSYmKGw9WWkodSksaC5hdHRyKCJ5IixsWzBdKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSksaShmKSksZShmKX0pfWZ1bmN0aW9uIGUodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitmWysvZSQvLnRlc3QodCldKyIsIitoWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIHIodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixmWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsZlsxXS1mWzBdKX1mdW5jdGlvbiBpKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsaFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixoWzFdLWhbMF0pfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiBhKCl7MzI9PWNvLmV2ZW50LmtleUNvZGUmJihMfHwoYj1udWxsLElbMF0tPWZbMV0sSVsxXS09aFsxXSxMPTIpLEEoKSl9ZnVuY3Rpb24gbSgpezMyPT1jby5ldmVudC5rZXlDb2RlJiYyPT1MJiYoSVswXSs9ZlsxXSxJWzFdKz1oWzFdLEw9MCxBKCkpfWZ1bmN0aW9uIHYoKXt2YXIgdD1jby5tb3VzZShfKSxuPSExO3gmJih0WzBdKz14WzBdLHRbMV0rPXhbMV0pLEx8fChjby5ldmVudC5hbHRLZXk/KGJ8fChiPVsoZlswXStmWzFdKS8yLChoWzBdK2hbMV0pLzJdKSxJWzBdPWZbKyh0WzBdPGJbMF0pXSxJWzFdPWhbKyh0WzFdPGJbMV0pXSk6Yj1udWxsKSxFJiZnKHQsYywwKSYmKHIoVCksbj0hMCksUyYmZyh0LHUsMSkmJihpKFQpLG49ITApLG4mJihlKFQpLE0oe3R5cGU6ImJydXNoIixtb2RlOkw/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuLGksYT1ZaShlKSxsPWFbMF0sYz1hWzFdLHU9SVtyXSxtPXI/aDpmLHY9bVsxXS1tWzBdO2lmKEwmJihsLT11LGMtPXYrdSksbj0ocj9wOmQpP01hdGgubWF4KGwsTWF0aC5taW4oYyx0W3JdKSk6dFtyXSxMP2k9KG4rPXUpK3Y6KGImJih1PU1hdGgubWF4KGwsTWF0aC5taW4oYywyKmJbcl0tbikpKSx1PG4/KGk9bixuPXUpOmk9dSksbVswXSE9bnx8bVsxXSE9aSlyZXR1cm4gcj9zPW51bGw6bz1udWxsLG1bMF09bixtWzFdPWksITB9ZnVuY3Rpb24geSgpe3YoKSxULnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5Iix0LmVtcHR5KCk/Im5vbmUiOm51bGwpLGNvLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLEQub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksQygpLE0oe3R5cGU6ImJydXNoZW5kIn0pfXZhciBiLHgsXz10aGlzLHc9Y28uc2VsZWN0KGNvLmV2ZW50LnRhcmdldCksTT1sLm9mKF8sYXJndW1lbnRzKSxUPWNvLnNlbGVjdChfKSxrPXcuZGF0dW0oKSxFPSEvXihufHMpJC8udGVzdChrKSYmYyxTPSEvXihlfHcpJC8udGVzdChrKSYmdSxMPXcuY2xhc3NlZCgiZXh0ZW50IiksQz1LKF8pLEk9Y28ubW91c2UoXyksRD1jby5zZWxlY3QobihfKSkub24oImtleWRvd24uYnJ1c2giLGEpLm9uKCJrZXl1cC5icnVzaCIsbSk7aWYoY28uZXZlbnQuY2hhbmdlZFRvdWNoZXM/RC5vbigidG91Y2htb3ZlLmJydXNoIix2KS5vbigidG91Y2hlbmQuYnJ1c2giLHkpOkQub24oIm1vdXNlbW92ZS5icnVzaCIsdikub24oIm1vdXNldXAuYnJ1c2giLHkpLFQuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksTClJWzBdPWZbMF0tSVswXSxJWzFdPWhbMF0tSVsxXTtlbHNlIGlmKGspe3ZhciBQPSsvdyQvLnRlc3Qoayksej0rL15uLy50ZXN0KGspO3g9W2ZbMS1QXS1JWzBdLGhbMS16XS1JWzFdXSxJWzBdPWZbUF0sSVsxXT1oW3pdfWVsc2UgY28uZXZlbnQuYWx0S2V5JiYoYj1JLnNsaWNlKCkpO1Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxjby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix3LnN0eWxlKCJjdXJzb3IiKSksTSh7dHlwZToiYnJ1c2hzdGFydCJ9KSx2KCl9dmFyIG8scyxsPVModCwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxjPW51bGwsdT1udWxsLGY9WzAsMF0saD1bMCwwXSxkPSEwLHA9ITAsbT1ZbFswXTtyZXR1cm4gdC5ldmVudD1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLm9mKHRoaXMsYXJndW1lbnRzKSxlPXt4OmYseTpoLGk6byxqOnN9LHI9dGhpcy5fX2NoYXJ0X198fGU7dGhpcy5fX2NoYXJ0X189ZSxqbD9jby5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe289ci5pLHM9ci5qLGY9ci54LGg9ci55LHQoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHI9d24oZixlLngpLG49d24oaCxlLnkpO3JldHVybiBvPXM9bnVsbCxmdW5jdGlvbihpKXtmPWUueD1yKGkpLGg9ZS55PW4oaSksdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bz1lLmkscz1lLmosdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSx0KHt0eXBlOiJicnVzaGVuZCJ9KX0pOih0KHt0eXBlOiJicnVzaHN0YXJ0In0pLHQoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksdCh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG09WWxbIWM8PDF8IXVdLHQpOmN9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLG09WWxbIWM8PDF8IXVdLHQpOnV9LHQuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMmJnU/KGQ9ISFlWzBdLHA9ISFlWzFdKTpjP2Q9ISFlOnUmJihwPSEhZSksdCk6YyYmdT9bZCxwXTpjP2Q6dT9wOm51bGx9LHQuZXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLGw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMmJihyPWVbMF0sbj1lWzFdLHUmJihyPXJbMF0sbj1uWzBdKSxvPVtyLG5dLGMuaW52ZXJ0JiYocj1jKHIpLG49YyhuKSksbjxyJiYobD1yLHI9bixuPWwpLHI9PWZbMF0mJm49PWZbMV18fChmPVtyLG5dKSksdSYmKGk9ZVswXSxhPWVbMV0sYyYmKGk9aVsxXSxhPWFbMV0pLHM9W2ksYV0sdS5pbnZlcnQmJihpPXUoaSksYT11KGEpKSxhPGkmJihsPWksaT1hLGE9bCksaT09aFswXSYmYT09aFsxXXx8KGg9W2ksYV0pKSx0KTooYyYmKG8/KHI9b1swXSxuPW9bMV0pOihyPWZbMF0sbj1mWzFdLGMuaW52ZXJ0JiYocj1jLmludmVydChyKSxuPWMuaW52ZXJ0KG4pKSxuPHImJihsPXIscj1uLG49bCkpKSx1JiYocz8oaT1zWzBdLGE9c1sxXSk6KGk9aFswXSxhPWhbMV0sdS5pbnZlcnQmJihpPXUuaW52ZXJ0KGkpLGE9dS5pbnZlcnQoYSkpLGE8aSYmKGw9aSxpPWEsYT1sKSkpLGMmJnU/W1tyLGldLFtuLGFdXTpjP1tyLG5dOnUmJltpLGFdKX0sdC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0LmVtcHR5KCl8fChmPVswLDBdLGg9WzAsMF0sbz1zPW51bGwpLHR9LHQuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWMmJmZbMF09PWZbMV18fCEhdSYmaFswXT09aFsxXX0sY28ucmViaW5kKHQsbCwib24iKX07dmFyIEdsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LFlsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLFhsPWhzLmZvcm1hdD15cy50aW1lRm9ybWF0LFdsPVhsLnV0YyxabD1XbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7WGwuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2lvOlpsLGlvLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LGlvLnRvU3RyaW5nPVpsLnRvU3RyaW5nLGhzLnNlY29uZD1WdChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGRzKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksaHMuc2Vjb25kcz1ocy5zZWNvbmQucmFuZ2UsaHMuc2Vjb25kcy51dGM9aHMuc2Vjb25kLnV0Yy5yYW5nZSxocy5taW51dGU9VnQoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkcyg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLGhzLm1pbnV0ZXM9aHMubWludXRlLnJhbmdlLGhzLm1pbnV0ZXMudXRjPWhzLm1pbnV0ZS51dGMucmFuZ2UsaHMuaG91cj1WdChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBkcygzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxocy5ob3Vycz1ocy5ob3VyLnJhbmdlLGhzLmhvdXJzLnV0Yz1ocy5ob3VyLnV0Yy5yYW5nZSxocy5tb250aD1WdChmdW5jdGlvbih0KXtyZXR1cm4gdD1ocy5kYXkodCksdC5zZXREYXRlKDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxocy5tb250aHM9aHMubW9udGgucmFuZ2UsaHMubW9udGhzLnV0Yz1ocy5tb250aC51dGMucmFuZ2U7dmFyIEpsPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sS2w9W1tocy5zZWNvbmQsMV0sW2hzLnNlY29uZCw1XSxbaHMuc2Vjb25kLDE1XSxbaHMuc2Vjb25kLDMwXSxbaHMubWludXRlLDFdLFtocy5taW51dGUsNV0sW2hzLm1pbnV0ZSwxNV0sW2hzLm1pbnV0ZSwzMF0sW2hzLmhvdXIsMV0sW2hzLmhvdXIsM10sW2hzLmhvdXIsNl0sW2hzLmhvdXIsMTJdLFtocy5kYXksMV0sW2hzLmRheSwyXSxbaHMud2VlaywxXSxbaHMubW9udGgsMV0sW2hzLm1vbnRoLDNdLFtocy55ZWFyLDFdXSxRbD1YbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsSWVdXSksJGw9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gY28ucmFuZ2UoTWF0aC5jZWlsKHQvcikqciwrZSxyKS5tYXAob28pfSxmbG9vcjp4LGNlaWw6eH07S2wueWVhcj1ocy55ZWFyLGhzLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKGNvLnNjYWxlLmxpbmVhcigpLEtsLFFsKX07dmFyIHRjPUtsLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxlYz1XbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKSYmMSE9dC5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sWyIlWSIsSWVdXSk7dGMueWVhcj1ocy55ZWFyLnV0Yyxocy5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gYW8oY28uc2NhbGUubGluZWFyKCksdGMsZWMpfSxjby50ZXh0PUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLGNvLmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwiYXBwbGljYXRpb24vanNvbiIsc28sZSl9LGNvLmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwidGV4dC9odG1sIixsbyxlKX0sY28ueG1sPUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kPyh0aGlzLmQzPWNvLHQoY28pKToib2JqZWN0Ij09dHlwZW9mIHImJnIuZXhwb3J0cz9yLmV4cG9ydHM9Y286dGhpcy5kMz1jb30oKX0se31dLDEyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnBvaW50PXQsdGhpcy5pbmRleD1lfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9dC5wb2ludCxuPWUucG9pbnQsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSl7dmFyIG89blthXS1yW2FdO2lmKG8pcmV0dXJuIG99cmV0dXJuIDB9ZnVuY3Rpb24gYSh0LGUscil7aWYoMT09PXQpcmV0dXJuIHI/W1stMSwwXV06W107dmFyIG49ZS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdFswXSxlXX0pO24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KTtmb3IodmFyIGk9bmV3IEFycmF5KHQtMSksYT0xO2E8dDsrK2Epe3ZhciBvPW5bYS0xXSxzPW5bYV07aVthLTFdPVtvWzFdLHNbMV1dfXJldHVybiByJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKSxpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgbz10WzBdLmxlbmd0aDtpZihvPDEpcmV0dXJuW107aWYoMT09PW8pcmV0dXJuIGEocix0LGUpO2Zvcih2YXIgYz1uZXcgQXJyYXkociksdT0xLGY9MDtmPHI7KytmKXtmb3IodmFyIGg9dFtmXSxkPW5ldyBBcnJheShvKzEpLHA9MCxtPTA7bTxvOysrbSl7dmFyIHY9aFttXTtkW21dPXYscCs9dip2fWRbb109cCxjW2ZdPW5ldyBuKGQsZiksdT1NYXRoLm1heChwLHUpfWwoYyxpKSxyPWMubGVuZ3RoO2Zvcih2YXIgZz1uZXcgQXJyYXkocitvKzEpLHk9bmV3IEFycmF5KHIrbysxKSxiPShvKzEpKihvKzEpKnUseD1uZXcgQXJyYXkobysxKSxmPTA7Zjw9bzsrK2YpeFtmXT0wO3hbb109YixnWzBdPXguc2xpY2UoKSx5WzBdPS0xO2Zvcih2YXIgZj0wO2Y8PW87KytmKXt2YXIgZD14LnNsaWNlKCk7ZFtmXT0xLGdbZisxXT1kLHlbZisxXT0tMX1mb3IodmFyIGY9MDtmPHI7KytmKXt2YXIgXz1jW2ZdO2dbZitvKzFdPV8ucG9pbnQseVtmK28rMV09Xy5pbmRleH12YXIgdz1zKGcsITEpO2lmKHc9ZT93LmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjw9bzsrK3Ipe3ZhciBuPXlbdFtyXV07aWYobjwwJiYrK2U+PTIpcmV0dXJuITE7dFtyXT1ufXJldHVybiEwfSk6dy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9bzsrK2Upe3ZhciByPXlbdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pLDEmbylmb3IodmFyIGY9MDtmPHcubGVuZ3RoOysrZil7dmFyIF89d1tmXSxkPV9bMF07X1swXT1fWzFdLF9bMV09ZH1yZXR1cm4gd312YXIgcz10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGw9dCgidW5pcSIpO2UuZXhwb3J0cz1vfSx7ImluY3JlbWVudGFsLWNvbnZleC1odWxsIjoyOTYsdW5pcTo1NTF9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBkWzBdPXQsZFsxXT1lLGhbMF19ZnVuY3Rpb24gbih0KXtyZXR1cm4gaFswXT10LGRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaFswXT10LGRbMV19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBkWzFdPXQsZFswXT1lLGhbMF19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaFswXT10LGRbMV19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gaFswXT10LGRbMF19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBwLndyaXRlVUludDMyTEUodCwwLCEwKSxwLndyaXRlVUludDMyTEUoZSw0LCEwKSxwLnJlYWREb3VibGVMRSgwLCEwKX1mdW5jdGlvbiBjKHQpe3JldHVybiBwLndyaXRlRG91YmxlTEUodCwwLCEwKSxwLnJlYWRVSW50MzJMRSgwLCEwKX1mdW5jdGlvbiB1KHQpe3JldHVybiBwLndyaXRlRG91YmxlTEUodCwwLCEwKSxwLnJlYWRVSW50MzJMRSg0LCEwKX12YXIgZj0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheSl7dmFyIGg9bmV3IEZsb2F0NjRBcnJheSgxKSxkPW5ldyBVaW50MzJBcnJheShoLmJ1ZmZlcik7aFswXT0xLGY9ITAsMTA3MjY5MzI0OD09PWRbMV0/KGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaFswXT10LFtkWzBdLGRbMV1dfSxlLmV4cG9ydHMucGFjaz1yLGUuZXhwb3J0cy5sbz1uLGUuZXhwb3J0cy5oaT1pKToxMDcyNjkzMjQ4PT09ZFswXT8oZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBoWzBdPXQsW2RbMV0sZFswXV19LGUuZXhwb3J0cy5wYWNrPWEsZS5leHBvcnRzLmxvPW8sZS5leHBvcnRzLmhpPXMpOmY9ITF9aWYoIWYpe3ZhciBwPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcC53cml0ZURvdWJsZUxFKHQsMCwhMCksW3AucmVhZFVJbnQzMkxFKDAsITApLHAucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9bCxlLmV4cG9ydHMubG89YyxlLmV4cG9ydHMuaGk9dX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0se2J1ZmZlcjo3OH1dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgaT0wfHRbcl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihyPT09dC5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1lO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09bih0LGUscisxKTtyZXR1cm4gb31mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2UibnVtYmVyIjppZih0PjApcmV0dXJuIGkoMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBuKHQsZSwwKX1yZXR1cm5bXX1lLmV4cG9ydHM9YX0se31dLDEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG49ZSYmZS5sZW5ndGgsYT1uP2VbMF0qcjp0Lmxlbmd0aCxzPWkodCwwLGEsciwhMCksbD1bXTtpZighcylyZXR1cm4gbDt2YXIgYyx1LGgsZCxwLG0sdjtpZihuJiYocz1mKHQsZSxzLHIpKSx0Lmxlbmd0aD44MCpyKXtjPWg9dFswXSx1PWQ9dFsxXTtmb3IodmFyIGc9cjtnPGE7Zys9cilwPXRbZ10sbT10W2crMV0scDxjJiYoYz1wKSxtPHUmJih1PW0pLHA+aCYmKGg9cCksbT5kJiYoZD1tKTt2PU1hdGgubWF4KGgtYyxkLXUpfXJldHVybiBvKHMsbCxyLGMsdSx2KSxsfWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1JKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPVMoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1TKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJncobyxvLm5leHQpJiYoTChvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwhdyhuLG4ubmV4dCkmJjAhPT1fKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihMKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClyZXR1cm4gbnVsbDtyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksZixoKXtpZih0KXshaCYmZiYmbSh0LG4saSxmKTtmb3IodmFyIGQscCx2PXQ7dC5wcmV2IT09dC5uZXh0OylpZihkPXQucHJldixwPXQubmV4dCxmP2wodCxuLGksZik6cyh0KSllLnB1c2goZC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKHAuaS9yKSxMKHQpLHQ9cC5uZXh0LHY9cC5uZXh0O2Vsc2UgaWYoKHQ9cCk9PT12KXtoPzE9PT1oPyh0PWModCxlLHIpLG8odCxlLHIsbixpLGYsMikpOjI9PT1oJiZ1KHQsZSxyLG4saSxmKTpvKGEodCksZSxyLG4saSxmLDEpO2JyZWFrfX19ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKF8oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoYihlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmXyhpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihfKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGY9ZyhzLGwsZSxyLG4pLGg9ZyhjLHUsZSxyLG4pLGQ9dC5uZXh0WjtkJiZkLno8PWg7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZiKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZfKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafWZvcihkPXQucHJldlo7ZCYmZC56Pj1mOyl7CmlmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmIoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJl8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshdyhpLGEpJiZNKGksbixuLm5leHQsYSkmJmsoaSxhKSYmayhhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksTChuKSxMKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ4KGwsYykpe3ZhciB1PUUobCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIG8scyxsLGMsdSxmPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsdT1pKHQsbCxjLG4sITEpLHU9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLGYucHVzaCh5KHUpKTtmb3IoZi5zb3J0KGgpLG89MDtvPGYubGVuZ3RoO28rKylkKGZbb10scikscj1hKHIsci5uZXh0KTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZCh0LGUpe2lmKGU9cCh0LGUpKXt2YXIgcj1FKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tKDEvMCk7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtmb3Iobj1yLm5leHQ7biE9PWM7KWk+PW4ueCYmbi54Pj11JiZiKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGh8fGw9PT1oJiZuLng+ci54KSYmayhuLHQpJiYocj1uLGg9bCksbj1uLm5leHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9ZyhpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsdihpKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwPT09cz8oaT1uLG49bi5uZXh0WixsLS0pOjAhPT1sJiZuP3Iuejw9bi56PyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKTooaT1yLHI9ci5uZXh0WixzLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpO3JldHVybiB0fWZ1bmN0aW9uIGcodCxlLHIsbixpKXtyZXR1cm4gdD0zMjc2NyoodC1yKS9pLGU9MzI3NjcqKGUtbikvaSx0PTE2NzExOTM1Jih0fHQ8PDgpLHQ9MjUyNjQ1MTM1Jih0fHQ8PDQpLHQ9ODU4OTkzNDU5Jih0fHQ8PDIpLHQ9MTQzMTY1NTc2NSYodHx0PDwxKSxlPTE2NzExOTM1JihlfGU8PDgpLGU9MjUyNjQ1MTM1JihlfGU8PDQpLGU9ODU4OTkzNDU5JihlfGU8PDIpLGU9MTQzMTY1NTc2NSYoZXxlPDwxKSx0fGU8PDF9ZnVuY3Rpb24geSh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFUKHQsZSkmJmsodCxlKSYmayhlLHQpJiZBKHQsZSl9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gTSh0LGUscixuKXtyZXR1cm4hISh3KHQsZSkmJncocixuKXx8dyh0LG4pJiZ3KHIsZSkpfHxfKHQsZSxyKT4wIT1fKHQsZSxuKT4wJiZfKHIsbix0KT4wIT1fKHIsbixlKT4wfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJk0ocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBfKHQucHJldix0LHQubmV4dCk8MD9fKHQsZSx0Lm5leHQpPj0wJiZfKHQsdC5wcmV2LGUpPj0wOl8odCxlLHQucHJldik8MHx8Xyh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1uZXcgQyh0LmksdC54LHQueSksbj1uZXcgQyhlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaT1uZXcgQyh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIEwodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBDKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBJKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLG4uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhJKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoSSh0LGMsdSxyKSl9dmFyIGY9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGg9bltzXSpyLGQ9bltzKzFdKnIscD1uW3MrMl0qcjtmKz1NYXRoLmFicygodFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSktKHRbaF0tdFtkXSkqKHRbcCsxXS10W2grMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1mPzA6TWF0aC5hYnMoKGYtbykvbyl9LG4uZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9fSx7fV0sMTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIGUpe2U9MDtmb3IodmFyIG49MDtuPHI7KytuKXt2YXIgYT10W25dO2U9TWF0aC5tYXgoZSxhWzBdLGFbMV0pfWU9MSsoMHxlKX1lfD0wO2Zvcih2YXIgbz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pb1tuXT1bXTtmb3IodmFyIG49MDtuPHI7KytuKXt2YXIgYT10W25dO29bYVswXV0ucHVzaChhWzFdKSxvW2FbMV1dLnB1c2goYVswXSl9Zm9yKHZhciBzPTA7czxlOysrcylpKG9bc10sZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7cmV0dXJuIG99ZS5leHBvcnRzPW47dmFyIGk9dCgidW5pcSIpfSx7dW5pcTo1NTF9XSwxMjg6W2Z1bmN0aW9uKGUscixuKXsoZnVuY3Rpb24obixpKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBvKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7Rz10fWZ1bmN0aW9uIGwodCl7Wj10fWZ1bmN0aW9uIGMoKXtyZXR1cm4gZnVuY3Rpb24oKXtxKGYpfX1mdW5jdGlvbiB1KCl7cmV0dXJuIGZ1bmN0aW9uKCl7c2V0VGltZW91dChmLDEpfX1mdW5jdGlvbiBmKCl7Zm9yKHZhciB0PTA7dDxXO3QrPTIpeygwLGV0W3RdKShldFt0KzFdKSxldFt0XT12b2lkIDAsZXRbdCsxXT12b2lkIDB9Vz0wfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10aGlzLG49bmV3IHRoaXMuY29uc3RydWN0b3IocCk7dm9pZCAwPT09bltpdF0mJlAobik7dmFyIGk9ci5fc3RhdGU7aWYoaSl7dmFyIGE9YXJndW1lbnRzW2ktMV07WihmdW5jdGlvbigpe0MoaSxuLGEsci5fcmVzdWx0KX0pfWVsc2UgQShyLG4sdCxlKTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQpe3ZhciBlPXRoaXM7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgcj1uZXcgZShwKTtyZXR1cm4gdyhyLHQpLHJ9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBtKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGYiKX1mdW5jdGlvbiB2KCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKX1mdW5jdGlvbiBnKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBsdC5lcnJvcj10LGx0fX1mdW5jdGlvbiB5KHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX1mdW5jdGlvbiBiKHQsZSxyKXtaKGZ1bmN0aW9uKHQpe3ZhciBuPSExLGk9eShyLGUsZnVuY3Rpb24ocil7bnx8KG49ITAsZSE9PXI/dyh0LHIpOlQodCxyKSl9LGZ1bmN0aW9uKGUpe258fChuPSEwLGsodCxlKSl9LCJTZXR0bGU6ICIrKHQuX2xhYmVsfHwiIHVua25vd24gcHJvbWlzZSIpKTshbiYmaSYmKG49ITAsayh0LGkpKX0sdCl9ZnVuY3Rpb24geCh0LGUpe2UuX3N0YXRlPT09b3Q/VCh0LGUuX3Jlc3VsdCk6ZS5fc3RhdGU9PT1zdD9rKHQsZS5fcmVzdWx0KTpBKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3codCxlKX0sZnVuY3Rpb24oZSl7ayh0LGUpfSl9ZnVuY3Rpb24gXyh0LGUscil7ZS5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJnI9PT1ydCYmY29uc3RydWN0b3IucmVzb2x2ZT09PW50P3godCxlKTpyPT09bHQ/ayh0LGx0LmVycm9yKTp2b2lkIDA9PT1yP1QodCxlKTpvKHIpP2IodCxlLHIpOlQodCxlKX1mdW5jdGlvbiB3KHQsZSl7dD09PWU/ayh0LG0oKSk6YShlKT9fKHQsZSxnKGUpKTpUKHQsZSl9ZnVuY3Rpb24gTSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRSh0KX1mdW5jdGlvbiBUKHQsZSl7dC5fc3RhdGU9PT1hdCYmKHQuX3Jlc3VsdD1lLHQuX3N0YXRlPW90LDAhPT10Ll9zdWJzY3JpYmVycy5sZW5ndGgmJlooRSx0KSl9ZnVuY3Rpb24gayh0LGUpe3QuX3N0YXRlPT09YXQmJih0Ll9zdGF0ZT1zdCx0Ll9yZXN1bHQ9ZSxaKE0sdCkpfWZ1bmN0aW9uIEEodCxlLHIsbil7dmFyIGk9dC5fc3Vic2NyaWJlcnMsYT1pLmxlbmd0aDt0Ll9vbmVycm9yPW51bGwsaVthXT1lLGlbYStvdF09cixpW2Erc3RdPW4sMD09PWEmJnQuX3N0YXRlJiZaKEUsdCl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuLGksYT10Ll9yZXN1bHQsbz0wO288ZS5sZW5ndGg7bys9MyluPWVbb10saT1lW28rcl0sbj9DKHIsbixpLGEpOmkoYSk7dC5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIFMoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gTCh0LGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtyZXR1cm4gY3QuZXJyb3I9dCxjdH19ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaSxhLHMsbCxjPW8ocik7aWYoYyl7aWYoaT1MKHIsbiksaT09PWN0PyhsPSEwLGE9aS5lcnJvcixpPW51bGwpOnM9ITAsZT09PWkpcmV0dXJuIHZvaWQgayhlLHYoKSl9ZWxzZSBpPW4scz0hMDtlLl9zdGF0ZSE9PWF0fHwoYyYmcz93KGUsaSk6bD9rKGUsYSk6dD09PW90P1QoZSxpKTp0PT09c3QmJmsoZSxpKSl9ZnVuY3Rpb24gSSh0LGUpe3RyeXtlKGZ1bmN0aW9uKGUpe3codCxlKX0sZnVuY3Rpb24oZSl7ayh0LGUpfSl9Y2F0Y2goZSl7ayh0LGUpfX1mdW5jdGlvbiBEKCl7cmV0dXJuIHV0Kyt9ZnVuY3Rpb24gUCh0KXt0W2l0XT11dCsrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHoodCl7cmV0dXJuIG5ldyBtdCh0aGlzLHQpLnByb21pc2V9ZnVuY3Rpb24gTyh0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgZShYKHQpP2Z1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7YSsrKWUucmVzb2x2ZSh0W2FdKS50aGVuKHIsbil9OmZ1bmN0aW9uKHQsZSl7ZShuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSl9ZnVuY3Rpb24gUih0KXt2YXIgZT10aGlzLHI9bmV3IGUocCk7cmV0dXJuIGsocix0KSxyfWZ1bmN0aW9uIEYoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIil9ZnVuY3Rpb24gaigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpfWZ1bmN0aW9uIE4odCl7dGhpc1tpdF09RCgpLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10scCE9PXQmJigiZnVuY3Rpb24iIT10eXBlb2YgdCYmRigpLHRoaXMgaW5zdGFuY2VvZiBOP0kodGhpcyx0KTpqKCkpfWZ1bmN0aW9uIEIodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KHApLHRoaXMucHJvbWlzZVtpdF18fFAodGhpcy5wcm9taXNlKSxYKGUpPyh0aGlzLl9pbnB1dD1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX3JlbWFpbmluZz1lLmxlbmd0aCx0aGlzLl9yZXN1bHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSwwPT09dGhpcy5sZW5ndGg/VCh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KToodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGh8fDAsdGhpcy5fZW51bWVyYXRlKCksMD09PXRoaXMuX3JlbWFpbmluZyYmVCh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOmsodGhpcy5wcm9taXNlLFUoKSl9ZnVuY3Rpb24gVSgpe3JldHVybiBuZXcgRXJyb3IoIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheSIpfWZ1bmN0aW9uIFYoKXt2YXIgdDtpZih2b2lkIDAhPT1pKXQ9aTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIGU9dC5Qcm9taXNlO2UmJiJbb2JqZWN0IFByb21pc2VdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnJlc29sdmUoKSkmJiFlLmNhc3R8fCh0LlByb21pc2U9cHQpfXZhciBIO0g9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9O3ZhciBxLEcsWSxYPUgsVz0wLFo9ZnVuY3Rpb24odCxlKXtldFtXXT10LGV0W1crMV09ZSwyPT09KFcrPTIpJiYoRz9HKGYpOlkoKSl9LEo9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCxLPUp8fHt9LFE9Sy5NdXRhdGlvbk9ic2VydmVyfHxLLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsJD0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PW4mJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwobiksdHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsLGV0PW5ldyBBcnJheSgxZTMpO1k9JD9mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe24ubmV4dFRpY2soZil9fSgpOlE/ZnVuY3Rpb24oKXt2YXIgdD0wLGU9bmV3IFEoZikscj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7cmV0dXJuIGUub2JzZXJ2ZShyLHtjaGFyYWN0ZXJEYXRhOiEwfSksZnVuY3Rpb24oKXtyLmRhdGE9dD0rK3QlMn19KCk6dHQ/ZnVuY3Rpb24oKXt2YXIgdD1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHQucG9ydDEub25tZXNzYWdlPWYsZnVuY3Rpb24oKXt0LnBvcnQyLnBvc3RNZXNzYWdlKDApfX0oKTp2b2lkIDA9PT1KJiYiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3RyeXt2YXIgdD1lLHI9dCgidmVydHgiKTtyZXR1cm4gcT1yLnJ1bk9uTG9vcHx8ci5ydW5PbkNvbnRleHQsYygpfWNhdGNoKHQpe3JldHVybiB1KCl9fSgpOnUoKTt2YXIgcnQ9aCxudD1kLGl0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygxNiksYXQ9dm9pZCAwLG90PTEsc3Q9MixsdD1uZXcgUyxjdD1uZXcgUyx1dD0wLGZ0PXosaHQ9TyxkdD1SLHB0PU47Ti5hbGw9ZnQsTi5yYWNlPWh0LE4ucmVzb2x2ZT1udCxOLnJlamVjdD1kdCxOLl9zZXRTY2hlZHVsZXI9cyxOLl9zZXRBc2FwPWwsTi5fYXNhcD1aLE4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOLHRoZW46cnQsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX07dmFyIG10PUI7Qi5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PWF0JiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxCLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09bnQpe3ZhciBpPWcodCk7aWYoaT09PXJ0JiZ0Ll9zdGF0ZSE9PWF0KXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1wdCl7dmFyIGE9bmV3IHIocCk7XyhhLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KGEsZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7ZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LEIucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PWF0JiYodGhpcy5fcmVtYWluaW5nLS0sdD09PXN0P2sobixyKTp0aGlzLl9yZXN1bHRbZV09ciksMD09PXRoaXMuX3JlbWFpbmluZyYmVChuLHRoaXMuX3Jlc3VsdCl9LEIucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO0EodCx2b2lkIDAsZnVuY3Rpb24odCl7ci5fc2V0dGxlZEF0KG90LGUsdCl9LGZ1bmN0aW9uKHQpe3IuX3NldHRsZWRBdChzdCxlLHQpfSl9O3ZhciB2dD1WLGd0PXtQcm9taXNlOnB0LHBvbHlmaWxsOnZ0fTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChmdW5jdGlvbigpe3JldHVybiBndH0pOnZvaWQgMCE9PXImJnIuZXhwb3J0cz9yLmV4cG9ydHM9Z3Q6dm9pZCAwIT09dGhpcyYmKHRoaXMuRVM2UHJvbWlzZT1ndCksdnQoKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZSgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ5Nn1dLDEyOTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBhKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdH1mdW5jdGlvbiBvKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09dH1lLmV4cG9ydHM9bixuLkV2ZW50RW1pdHRlcj1uLG4ucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLG4ucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwLG4uZGVmYXVsdE1heExpc3RlbmVycz0xMCxuLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoIWEodCl8fHQ8MHx8aXNOYU4odCkpdGhyb3cgVHlwZUVycm9yKCJuIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sbi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxsLGM7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSwiZXJyb3IiPT09dCYmKCF0aGlzLl9ldmVudHMuZXJyb3J8fG8odGhpcy5fZXZlbnRzLmVycm9yKSYmIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKXtpZigoZT1hcmd1bWVudHNbMV0paW5zdGFuY2VvZiBFcnJvcil0aHJvdyBlO3Rocm93IFR5cGVFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQuJyl9aWYocj10aGlzLl9ldmVudHNbdF0scyhyKSlyZXR1cm4hMTtpZihpKHIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6ci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHIuYXBwbHkodGhpcyxhKX1lbHNlIGlmKG8ocikpZm9yKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGM9ci5zbGljZSgpLG49Yy5sZW5ndGgsbD0wO2w8bjtsKyspY1tsXS5hcHBseSh0aGlzLGEpO3JldHVybiEwfSxuLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoIm5ld0xpc3RlbmVyIix0LGkoZS5saXN0ZW5lcik/ZS5saXN0ZW5lcjplKSx0aGlzLl9ldmVudHNbdF0/byh0aGlzLl9ldmVudHNbdF0pP3RoaXMuX2V2ZW50c1t0XS5wdXNoKGUpOnRoaXMuX2V2ZW50c1t0XT1bdGhpcy5fZXZlbnRzW3RdLGVdOnRoaXMuX2V2ZW50c1t0XT1lLG8odGhpcy5fZXZlbnRzW3RdKSYmIXRoaXMuX2V2ZW50c1t0XS53YXJuZWQmJihyPXModGhpcy5fbWF4TGlzdGVuZXJzKT9uLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dGhpcy5fbWF4TGlzdGVuZXJzKSYmcj4wJiZ0aGlzLl9ldmVudHNbdF0ubGVuZ3RoPnImJih0aGlzLl9ldmVudHNbdF0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuIix0aGlzLl9ldmVudHNbdF0ubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKSx0aGlzfSxuLnByb3RvdHlwZS5vbj1uLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixuLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxufHwobj0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj0hMTtyZXR1cm4gci5saXN0ZW5lcj1lLHRoaXMub24odCxyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxzO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxhPXIubGVuZ3RoLG49LTEscj09PWV8fGkoci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LGUpO2Vsc2UgaWYobyhyKSl7Zm9yKHM9YTtzLS0gPjA7KWlmKHJbc109PT1lfHxyW3NdLmxpc3RlbmVyJiZyW3NdLmxpc3RlbmVyPT09ZSl7bj1zO2JyZWFrfWlmKG48MClyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UobiwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsZSl9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZXZlbnRzPXt9OnRoaXMuX2V2ZW50c1t0XSYmZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoZSBpbiB0aGlzLl9ldmVudHMpInJlbW92ZUxpc3RlbmVyIiE9PWUmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9e30sdGhpc31pZihyPXRoaXMuX2V2ZW50c1t0XSxpKHIpKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyKTtlbHNlIGlmKHIpZm9yKDtyLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHJbci5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LG4ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF0/aSh0aGlzLl9ldmVudHNbdF0pP1t0aGlzLl9ldmVudHNbdF1dOnRoaXMuX2V2ZW50c1t0XS5zbGljZSgpOltdfSxuLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2V2ZW50cyl7dmFyIGU9dGhpcy5fZXZlbnRzW3RdO2lmKGkoZSkpcmV0dXJuIDE7aWYoZSlyZXR1cm4gZS5sZW5ndGh9cmV0dXJuIDB9LG4ubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVyQ291bnQoZSl9fSx7fV0sMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWV8fDAsaT1yfHwxO3JldHVybltbdFsxMl0rdFswXSx0WzEzXSt0WzFdLHRbMTRdK3RbMl0sdFsxNV0rdFszXV0sW3RbMTJdLXRbMF0sdFsxM10tdFsxXSx0WzE0XS10WzJdLHRbMTVdLXRbM11dLFt0WzEyXSt0WzRdLHRbMTNdK3RbNV0sdFsxNF0rdFs2XSx0WzE1XSt0WzddXSxbdFsxMl0tdFs0XSx0WzEzXS10WzVdLHRbMTRdLXRbNl0sdFsxNV0tdFs3XV0sW24qdFsxMl0rdFs4XSxuKnRbMTNdK3RbOV0sbip0WzE0XSt0WzEwXSxuKnRbMTVdK3RbMTFdXSxbaSp0WzEyXS10WzhdLGkqdFsxM10tdFs5XSxpKnRbMTRdLXRbMTBdLGkqdFsxNV0tdFsxMV1dXX1lLmV4cG9ydHM9bn0se31dLDEzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0se31dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImYiLCJ2YXIgcCA9IChmICYmIGYucHJvcGVydGllcyB8fCB7fSk7IHJldHVybiAiK2kodCkpfWZ1bmN0aW9uIGkodCl7aWYoIXQpcmV0dXJuInRydWUiO3ZhciBlPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiPT09ZT8iZmFsc2UiOiJ0cnVlIjoiKCIrKCI9PSI9PT1lP28odFsxXSx0WzJdLCI9PT0iLCExKToiIT0iPT09ZT9vKHRbMV0sdFsyXSwiIT09IiwhMSk6IjwiPT09ZXx8Ij4iPT09ZXx8Ijw9Ij09PWV8fCI+PSI9PT1lP28odFsxXSx0WzJdLGUsITApOiJhbnkiPT09ZT9zKHQuc2xpY2UoMSksInx8Iik6ImFsbCI9PT1lP3ModC5zbGljZSgxKSwiJiYiKToibm9uZSI9PT1lP3Uocyh0LnNsaWNlKDEpLCJ8fCIpKToiaW4iPT09ZT9sKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1lP3UobCh0WzFdLHQuc2xpY2UoMikpKToiaGFzIj09PWU/Yyh0WzFdKToiIWhhcyI9PT1lP3UoYyhbdFsxXV0pKToidHJ1ZSIpKyIpIn1mdW5jdGlvbiBhKHQpe3JldHVybiIkdHlwZSI9PT10PyJmLnR5cGUiOiIkaWQiPT09dD8iZi5pZCI6InBbIitKU09OLnN0cmluZ2lmeSh0KSsiXSJ9ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT1hKHQpLG89IiR0eXBlIj09PXQ/aC5pbmRleE9mKGUpOkpTT04uc3RyaW5naWZ5KGUpO3JldHVybihuPyJ0eXBlb2YgIitpKyI9PT0gdHlwZW9mICIrbysiJiYiOiIiKStpK3Irb31mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQubWFwKGkpLmpvaW4oZSl9ZnVuY3Rpb24gbCh0LGUpeyIkdHlwZSI9PT10JiYoZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaC5pbmRleE9mKHQpfSkpO3ZhciByPUpTT04uc3RyaW5naWZ5KGUuc29ydChmKSksbj1hKHQpO3JldHVybiBlLmxlbmd0aDw9MjAwP3IrIi5pbmRleE9mKCIrbisiKSAhPT0gLTEiOiJmdW5jdGlvbih2LCBhLCBpLCBqKSB7d2hpbGUgKGkgPD0gaikgeyB2YXIgbSA9IChpICsgaikgPj4gMTsgICAgaWYgKGFbbV0gPT09IHYpIHJldHVybiB0cnVlOyBpZiAoYVttXSA+IHYpIGogPSBtIC0gMTsgZWxzZSBpID0gbSArIDE7fXJldHVybiBmYWxzZTsgfSgiK24rIiwgIityKyIsMCwiKyhlLmxlbmd0aC0xKSsiKSJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIiBpbiBwIn1mdW5jdGlvbiB1KHQpe3JldHVybiIhKCIrdCsiKSJ9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1lLmV4cG9ydHM9bjt2YXIgaD1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl19LHt9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LSgxLzApLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgaShbMF0sWzBdLDApO2Nhc2UgMTppZigibnVtYmVyIj09dHlwZW9mIHQpe3ZhciBuPWEodCk7cmV0dXJuIG5ldyBpKG4sbiwwKX1yZXR1cm4gbmV3IGkodCxhKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbj1hKHQubGVuZ3RoKTtyZXR1cm4gbmV3IGkodCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoIik7cmV0dXJuIG5ldyBpKHQsZSxyKX19ZS5leHBvcnRzPW87dmFyIHM9dCgiY3ViaWMtaGVybWl0ZSIpLGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPWkucHJvdG90eXBlO2MuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bC5ndCh0aGlzLl90aW1lLHQpLTE7ZTw9MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fc3RhdGUuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbiksdGhpcy5fdmVsb2NpdHkuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbikpfSxjLmN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxpPWwubGUoZSx0KSxhPXRoaXMuX3NjcmF0Y2hbMF0sbz10aGlzLl9zdGF0ZSxjPXRoaXMuX3ZlbG9jaXR5LHU9dGhpcy5kaW1lbnNpb24sZj10aGlzLmJvdW5kcztpZihpPDApZm9yKHZhciBoPXUtMSxkPTA7ZDx1OysrZCwtLWgpYVtkXT1vW2hdO2Vsc2UgaWYoaT49ci0xKWZvcih2YXIgaD1vLmxlbmd0aC0xLHA9dC1lW3ItMV0sZD0wO2Q8dTsrK2QsLS1oKWFbZF09b1toXStwKmNbaF07ZWxzZXtmb3IodmFyIGg9dSooaSsxKS0xLG09ZVtpXSx2PWVbaSsxXSxnPXYtbXx8MSx5PXRoaXMuX3NjcmF0Y2hbMV0sYj10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxfPXRoaXMuX3NjcmF0Y2hbNF0sdz0hMCxkPTA7ZDx1OysrZCwtLWgpeVtkXT1vW2hdLHhbZF09Y1toXSpnLGJbZF09b1toK3VdLF9bZF09Y1toK3VdKmcsdz13JiZ5W2RdPT09YltkXSYmeFtkXT09PV9bZF0mJjA9PT14W2RdO2lmKHcpZm9yKHZhciBkPTA7ZDx1OysrZClhW2RdPXlbZF07ZWxzZSBzKHkseCxiLF8sKHQtbSkvZyxhKX1mb3IodmFyIE09ZlswXSxUPWZbMV0sZD0wO2Q8dTsrK2QpYVtkXT1uKE1bZF0sVFtkXSxhW2RdKTtyZXR1cm4gYX0sYy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG49bC5sZShlLHQpLGk9dGhpcy5fc2NyYXRjaFswXSxhPXRoaXMuX3N0YXRlLG89dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihuPj1yLTEpZm9yKHZhciB1PWEubGVuZ3RoLTEsZj0oZVtyLTFdLDApO2Y8YzsrK2YsLS11KWlbZl09b1t1XTtlbHNle2Zvcih2YXIgdT1jKihuKzEpLTEsaD1lW25dLGQ9ZVtuKzFdLHA9ZC1ofHwxLG09dGhpcy5fc2NyYXRjaFsxXSx2PXRoaXMuX3NjcmF0Y2hbMl0sZz10aGlzLl9zY3JhdGNoWzNdLHk9dGhpcy5fc2NyYXRjaFs0XSxiPSEwLGY9MDtmPGM7KytmLC0tdSltW2ZdPWFbdV0sZ1tmXT1vW3VdKnAsdltmXT1hW3UrY10seVtmXT1vW3UrY10qcCxiPWImJm1bZl09PT12W2ZdJiZnW2ZdPT09eVtmXSYmMD09PWdbZl07aWYoYilmb3IodmFyIGY9MDtmPGM7KytmKWlbZl09MDtlbHNle3MuZGVyaXZhdGl2ZShtLGcsdix5LCh0LWgpL3AsaSk7Zm9yKHZhciBmPTA7ZjxjOysrZilpW2ZdLz1wfX1yZXR1cm4gaX0sYy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LGMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0sYy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIGk9dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSxvPWkubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj0wO2Y8cjsrK2YpaS5wdXNoKGlbbysrXSksYS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKWkucHVzaChuKGxbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKSksYS5wdXNoKDApfX0sYy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIGk9dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSxvPWkubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxmPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taCl7dmFyIGQ9bihjW2gtMV0sdVtoLTFdLGFyZ3VtZW50c1toXSk7aS5wdXNoKGQpLGEucHVzaCgoZC1pW28rK10pKmYpfX19LGMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LGE9dGhpcy5ib3VuZHMsbz1hWzBdLHM9YVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2gobihvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLGkucHVzaCgwKX19LGMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgaT10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89aS5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGY9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgZD1hcmd1bWVudHNbaF07aS5wdXNoKG4obFtoLTFdLGNbaC0xXSxpW28rK10rZCkpLGEucHVzaChkKmYpfX19LGMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixpPXRoaXMuX3N0YXRlLGE9dGhpcy5fdmVsb2NpdHksbz1pLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXItMTtmPj0wOy0tZilpLnB1c2gobihsW2ZdLGNbZl0saVtvXSt1KmFbb10pKSxhLnB1c2goMCksbys9MX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NywiY3ViaWMtaGVybWl0ZSI6MTA4fV0sMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dD10fHx7fTt2YXIgZSxyLG49dC5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG89dC5mYW1pbHl8fCJzYW5zLXNlcmlmIixzPXQuc2hhcGV8fFs1MTIsNTEyXSxsPXQuc3RlcHx8WzMyLDMyXSxjPXBhcnNlRmxvYXQodC5zaXplKXx8MTYsdT10LmNoYXJzfHxbMzIsMTI2XSxmPU1hdGguZmxvb3IoKGxbMF0tYykvMiksaD10LnJhZGl1c3x8MS41KmYsZD1uZXcgYShjLGYsaCwwLG8pLHA9bnVsbD09dC5hbGlnbj8ib3B0aWNhbCI6dC5hbGlnbixtPW51bGw9PXQuZml0fHwxPT10LmZpdD8uNTp0LmZpdDtpZihBcnJheS5pc0FycmF5KHUpKXtpZigyPT09dS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdVswXSYmIm51bWJlciI9PXR5cGVvZiB1WzFdKXt2YXIgdj1bXTtmb3IoZT11WzBdLHI9MDtlPD11WzFdO2UrKyl2W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZShlKTt1PXZ9fWVsc2UgdT1TdHJpbmcodSkuc3BsaXQoIiIpO3M9cy5zbGljZSgpLG4ud2lkdGg9c1swXSxuLmhlaWdodD1zWzFdO3ZhciBnPW4uZ2V0Q29udGV4dCgiMmQiKTtnLmZpbGxTdHlsZT0iIzAwMCIsZy5maWxsUmVjdCgwLDAsbi53aWR0aCxuLmhlaWdodCksZy50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7dmFyIHk9bFswXSxiPWxbMV0seD0wLF89MCx3PWMvYixNPU1hdGgubWluKHUubGVuZ3RoLE1hdGguZmxvb3Ioc1swXS95KSpNYXRoLmNlaWwoc1sxXS9iKSksVD1kLmN0eC50ZXh0QWxpZ24saz1kLmJ1ZmZlcixBPWQubWlkZGxlO2ZvcihkLmN0eC50ZXh0QWxpZ249ImNlbnRlciIsZC5idWZmZXI9ZC5zaXplLzIsZT0wO2U8TTtlKyspaWYodVtlXSl7dmFyIEU9aSh1W2VdLG8sdyksUz0xLEw9WzAsMF07aWYobSl7dmFyIEM9bTtBcnJheS5pc0FycmF5KG0pJiYoQz1tW2VdKTt2YXIgST0uNSooRS5ib3VuZHNbM10tRS5ib3VuZHNbMV0pLEQ9LjUqKEUuYm91bmRzWzJdLUUuYm91bmRzWzBdKSxQPU1hdGgubWF4KEksRCksej1NYXRoLnNxcnQoSSpJK0QqRCksTz0uMzMzKkUucmFkaXVzKy4zMzMqUCsuMzMzKno7Uz1iKkMvKE8qYioyKSxkLmN0eC5mb250PWMqUysicHggIitvfWVsc2UgZC5jdHguZm9udD1jKyJweCAiK287cCYmKEw9Im9wdGljYWwiPT09cHx8cD09PSEwP1suNSp5LXkqRS5jZW50ZXJbMF0sLjUqYi1iKkUuY2VudGVyWzFdXTpbLjUqeS15KihFLmJvdW5kc1syXStFLmJvdW5kc1swXSkqLjUsLjUqYi1iKihFLmJvdW5kc1szXStFLmJvdW5kc1sxXSkqLjVdLGQubWlkZGxlPUErTFsxXSpTKTt2YXIgUj1kLmRyYXcodVtlXSk7Zy5wdXRJbWFnZURhdGEoUix4K0xbMF0qUyxfKSx4Kz1sWzBdLHg+c1swXS1sWzBdJiYoeD0wLF8rPWxbMV0pfXJldHVybiBkLmN0eC50ZXh0QWxpZ249VCxkLmJ1ZmZlcj1rLGQubWlkZGxlPUEsbn1mdW5jdGlvbiBpKHQsZSxyKXtpZihzW2VdJiZzW2VdW3RdKXJldHVybiBzW2VdW3RdO3ZhciBuPTIwMCpyLGk9byh0LHtzaXplOjIwMCxmb250U2l6ZTpuLGZvbnRGYW1pbHk6ZX0pO3NbZV18fChzW2VdPXt9KTt2YXIgYT17Y2VudGVyOltpLmNlbnRlclswXS8yMDAsaS5jZW50ZXJbMV0vMjAwXSxib3VuZHM6aS5ib3VuZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzIwMH0pLHJhZGl1czppLnJhZGl1cy8yMDB9O3JldHVybiBzW2VdW3RdPWEsYX12YXIgYT10KCJ0aW55LXNkZiIpLG89dCgib3B0aWNhbC1wcm9wZXJ0aWVzIik7ZS5leHBvcnRzPW47dmFyIHM9e319LHsib3B0aWNhbC1wcm9wZXJ0aWVzIjo0ODAsInRpbnktc2RmIjo1NDF9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbih0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBuKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbyh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfWZ1bmN0aW9uIGwodCxlKXtpZihlLmxlZnQpe3ZhciByPWwodCxlLmxlZnQpO2lmKHIpcmV0dXJuIHJ9dmFyIHI9dChlLmtleSxlLnZhbHVlKTtyZXR1cm4gcj9yOmUucmlnaHQ/bCh0LGUucmlnaHQpOnZvaWQgMH1mdW5jdGlvbiBjKHQsZSxyLG4pe2lmKGUodCxuLmtleSk8PTApe2lmKG4ubGVmdCl7dmFyIGk9Yyh0LGUscixuLmxlZnQpO2lmKGkpcmV0dXJuIGl9dmFyIGk9cihuLmtleSxuLnZhbHVlKTtpZihpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIGModCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT11KHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIHUodCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBmKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1mdW5jdGlvbiBoKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlLHIsbixzLGw9dC5sZW5ndGgtMTtsPj0wOy0tbCl7aWYoZT10W2xdLDA9PT1sKXJldHVybiB2b2lkKGUuX2NvbG9yPWcpO2lmKHI9dFtsLTFdLHIubGVmdD09PWUpe2lmKG49ci5yaWdodCxuLnJpZ2h0JiZuLnJpZ2h0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5yaWdodD1pKG4ucmlnaHQpLHIucmlnaHQ9bi5sZWZ0LG4ubGVmdD1yLG4ucmlnaHQ9cyxuLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1nLHIuX2NvbG9yPWcscy5fY29sb3I9ZyxvKHIpLG8obiksbD4xKXt2YXIgYz10W2wtMl07Yy5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmbi5sZWZ0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgYz10W2wtMl07Yy5sZWZ0PT09cj9jLmxlZnQ9czpjLnJpZ2h0PXN9cmV0dXJuIHZvaWQodFtsLTFdPXMpfWlmKG4uX2NvbG9yPT09Zyl7aWYoci5fY29sb3I9PT12KXJldHVybiByLl9jb2xvcj1nLHZvaWQoci5yaWdodD1hKHYsbikpO3IucmlnaHQ9YSh2LG4pO2NvbnRpbnVlfWlmKG49aShuKSxyLnJpZ2h0PW4ubGVmdCxuLmxlZnQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciBjPXRbbC0yXTtjLmxlZnQ9PT1yP2MubGVmdD1uOmMucmlnaHQ9bn10W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfWVsc2V7aWYobj1yLmxlZnQsbi5sZWZ0JiZuLmxlZnQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ubGVmdD1pKG4ubGVmdCksci5sZWZ0PW4ucmlnaHQsbi5yaWdodD1yLG4ubGVmdD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWcsci5fY29sb3I9ZyxzLl9jb2xvcj1nLG8ociksbyhuKSxsPjEpe3ZhciBjPXRbbC0yXTtjLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJm4ucmlnaHQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgYz10W2wtMl07Yy5yaWdodD09PXI/Yy5yaWdodD1zOmMubGVmdD1zfXJldHVybiB2b2lkKHRbbC0xXT1zKX1pZihuLl9jb2xvcj09PWcpe2lmKHIuX2NvbG9yPT09dilyZXR1cm4gci5fY29sb3I9Zyx2b2lkKHIubGVmdD1hKHYsbikpO3IubGVmdD1hKHYsbik7Y29udGludWV9aWYobj1pKG4pLHIubGVmdD1uLnJpZ2h0LG4ucmlnaHQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciBjPXRbbC0yXTtjLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW59dFtsLTFdPW4sdFtsXT1yLGwrMTx0Lmxlbmd0aD90W2wrMV09ZTp0LnB1c2goZSksbCs9Mn19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IHModHx8cCxudWxsKX1lLmV4cG9ydHM9bTt2YXIgdj0wLGc9MSx5PXMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2gocil9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx5Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLGk9dGhpcy5yb290LGw9W10sYz1bXTtpOyl7dmFyIHU9cih0LGkua2V5KTtsLnB1c2goaSksYy5wdXNoKHUpLGk9dTw9MD9pLmxlZnQ6aS5yaWdodH1sLnB1c2gobmV3IG4odix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIGY9bC5sZW5ndGgtMjtmPj0wOy0tZil7dmFyIGk9bFtmXTtjW2ZdPD0wP2xbZl09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxsW2YrMV0saS5yaWdodCxpLl9jb3VudCsxKTpsW2ZdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LGxbZisxXSxpLl9jb3VudCsxKX1mb3IodmFyIGY9bC5sZW5ndGgtMTtmPjE7LS1mKXt2YXIgaD1sW2YtMV0saT1sW2ZdO2lmKGguX2NvbG9yPT09Z3x8aS5fY29sb3I9PT1nKWJyZWFrO3ZhciBkPWxbZi0yXTtpZihkLmxlZnQ9PT1oKWlmKGgubGVmdD09PWkpe3ZhciBwPWQucmlnaHQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLmxlZnQ9aC5yaWdodCxoLl9jb2xvcj1nLGgucmlnaHQ9ZCxsW2YtMl09aCxsW2YtMV09aSxvKGQpLG8oaCksZj49Myl7dmFyIG09bFtmLTNdO20ubGVmdD09PWQ/bS5sZWZ0PWg6bS5yaWdodD1ofWJyZWFrfWguX2NvbG9yPWcsZC5yaWdodD1hKGcscCksZC5fY29sb3I9dixmLT0xfWVsc2V7dmFyIHA9ZC5yaWdodDtpZighcHx8cC5fY29sb3IhPT12KXtpZihoLnJpZ2h0PWkubGVmdCxkLl9jb2xvcj12LGQubGVmdD1pLnJpZ2h0LGkuX2NvbG9yPWcsaS5sZWZ0PWgsaS5yaWdodD1kLGxbZi0yXT1pLGxbZi0xXT1oLG8oZCksbyhoKSxvKGkpLGY+PTMpe3ZhciBtPWxbZi0zXTttLmxlZnQ9PT1kP20ubGVmdD1pOm0ucmlnaHQ9aX1icmVha31oLl9jb2xvcj1nLGQucmlnaHQ9YShnLHApLGQuX2NvbG9yPXYsZi09MX1lbHNlIGlmKGgucmlnaHQ9PT1pKXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLnJpZ2h0PWgubGVmdCxoLl9jb2xvcj1nLGgubGVmdD1kLGxbZi0yXT1oLGxbZi0xXT1pLG8oZCksbyhoKSxmPj0zKXt2YXIgbT1sW2YtM107bS5yaWdodD09PWQ/bS5yaWdodD1oOm0ubGVmdD1ofWJyZWFrfWguX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGYtPTF9ZWxzZXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoaC5sZWZ0PWkucmlnaHQsZC5fY29sb3I9dixkLnJpZ2h0PWkubGVmdCxpLl9jb2xvcj1nLGkucmlnaHQ9aCxpLmxlZnQ9ZCxsW2YtMl09aSxsW2YtMV09aCxvKGQpLG8oaCksbyhpKSxmPj0zKXt2YXIgbT1sW2YtM107bS5yaWdodD09PWQ/bS5yaWdodD1pOm0ubGVmdD1pfWJyZWFrfWguX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGYtPTF9fXJldHVybiBsWzBdLl9jb2xvcj1nLG5ldyBzKHIsbFswXSl9LHkuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGwodCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gYyhlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiB1KGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBmKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgZih0aGlzLHQpfX0pLHkuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgZih0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgZih0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgZih0aGlzLFtdKX0seS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx5Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSx5Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGYodGhpcyxuKX0seS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBmKHRoaXMsbil9LHkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGYodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBmKHRoaXMsW10pfSx5LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx5LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgYj1mLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxiLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sYi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgaT10Lmxlbmd0aC0yO2k+PTA7LS1pKXt2YXIgcj10W2ldO3IubGVmdD09PXRbaSsxXT9lW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtpKzFdLHIucmlnaHQsci5fY291bnQpOmVbaV09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtpKzFdLHIuX2NvdW50KX1pZihyPWVbZS5sZW5ndGgtMV0sci5sZWZ0JiZyLnJpZ2h0KXt2YXIgYT1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgbz1lW2EtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLG8ua2V5LG8udmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2EtMV0ua2V5PXIua2V5LGVbYS0xXS52YWx1ZT1yLnZhbHVlO2Zvcih2YXIgaT1lLmxlbmd0aC0yO2k+PWE7LS1pKXI9ZVtpXSxlW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbaSsxXSxyLl9jb3VudCk7ZVthLTFdLmxlZnQ9ZVthXX1pZihyPWVbZS5sZW5ndGgtMV0sci5fY29sb3I9PT12KXt2YXIgbD1lW2UubGVuZ3RoLTJdO2wubGVmdD09PXI/bC5sZWZ0PW51bGw6bC5yaWdodD09PXImJihsLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P2gocixyLmxlZnQpOnIucmlnaHQmJmgocixyLnJpZ2h0KSxyLl9jb2xvcj1nO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0uX2NvdW50LS07dmFyIGM9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZChlKSxjLmxlZnQ9PT1yP2MubGVmdD1udWxsOmMucmlnaHQ9bnVsbCxuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJrZXkiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLmtleX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxiLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNOZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ucmlnaHQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ubGVmdD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSksYi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgbihpLl9jb2xvcixpLmtleSx0LGkubGVmdCxpLnJpZ2h0LGkuX2NvdW50KTtmb3IodmFyIGE9ZS5sZW5ndGgtMjthPj0wOy0tYSlpPWVbYV0saS5sZWZ0PT09ZVthKzFdP3JbYV09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxyW2ErMV0saS5yaWdodCxpLl9jb3VudCk6clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxyW2ErMV0saS5fY291bnQpO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGIucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNQcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwxMzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKCIwLzAiKTtmb3IodmFyIGU9b1swXSxyPW8ubGVuZ3RoLTE7cj4wOy0tcillKz1vW3JdLyh0K3IpO3ZhciBuPXQrYSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfQp2YXIgaT1bLjk5OTk5OTk5OTk5OTgwOTksNjc2LjUyMDM2ODEyMTg4NTEsLTEyNTkuMTM5MjE2NzIyNDAyOCw3NzEuMzIzNDI4Nzc3NjUzMSwtMTc2LjYxNTAyOTE2MjE0MDYsMTIuNTA3MzQzMjc4Njg2OTA1LC0uMTM4NTcxMDk1MjY1NzIwMTIsOTk4NDM2OTU3ODAxOTU3MmUtMjEsMS41MDU2MzI3MzUxNDkzMTE2ZS03XSxhPTYwNy8xMjgsbz1bLjk5OTk5OTk5OTk5OTk5NzEsNTcuMTU2MjM1NjY1ODYyOTIsLTU5LjU5Nzk2MDM1NTQ3NTQ5LDE0LjEzNjA5Nzk3NDc0MTc0NiwtLjQ5MTkxMzgxNjA5NzYyMDIsMzM5OTQ2NDk5ODQ4MTE4OWUtMjAsNDY1MjM2Mjg5MjcwNDg1OGUtMjAsLTk4Mzc0NDc1MzA0ODc5NTZlLTIwLC4wMDAxNTgwODg3MDMyMjQ5MTI1LC0uMDAwMjEwMjY0NDQxNzI0MTA0ODgsLjAwMDIxNzQzOTYxODExNTIxMjY1LC0uMDAwMTY0MzE4MTA2NTM2NzYzOSw4NDQxODIyMzk4Mzg1Mjc1ZS0yMCwtMjYxOTA4Mzg0MDE1ODE0MDhlLTIxLDM2ODk5MTgyNjU5NTMxNjI1ZS0yMl07ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChuKGUpKTtlLT0xO2Zvcih2YXIgcj1pWzBdLGE9MTthPDk7YSsrKXIrPWlbYV0vKGUrYSk7dmFyIG89ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhvLGUrLjUpKk1hdGguZXhwKC1vKSpyfSxlLmV4cG9ydHMubG9nPW59LHt9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKCJQb2x5Z29uIj09PXQudHlwZSlyZXR1cm4gaSh0LmNvb3JkaW5hdGVzKTtpZigiTXVsdGlQb2x5Z29uIj09PXQudHlwZSl7Zm9yKHZhciBlPTAscj0wO3I8dC5jb29yZGluYXRlcy5sZW5ndGg7cisrKWUrPWkodC5jb29yZGluYXRlc1tyXSk7cmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaSh0KXt2YXIgZT0wO2lmKHQmJnQubGVuZ3RoPjApe2UrPU1hdGguYWJzKGEodFswXSkpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWUtPU1hdGguYWJzKGEodFtyXSkpfXJldHVybiBlfWZ1bmN0aW9uIGEodCl7dmFyIGU9MDtpZih0Lmxlbmd0aD4yKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aC0xO2krKylyPXRbaV0sbj10W2krMV0sZSs9byhuWzBdLXJbMF0pKigyK01hdGguc2luKG8oclsxXSkpK01hdGguc2luKG8oblsxXSkpKTtlPWUqcy5SQURJVVMqcy5SQURJVVMvMn1yZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXZhciBzPXQoIndnczg0Iik7ZS5leHBvcnRzLmdlb21ldHJ5PW4sZS5leHBvcnRzLnJpbmc9YX0se3dnczg0OjU3Mn1dLDEzODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtzd2l0Y2godCYmdC50eXBlfHxudWxsKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpyZXR1cm4gdC5mZWF0dXJlcz10LmZlYXR1cmVzLm1hcChpKG4sZSkpLHQ7Y2FzZSJGZWF0dXJlIjpyZXR1cm4gdC5nZW9tZXRyeT1uKHQuZ2VvbWV0cnksZSksdDtjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYSh0LGUpO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQocixlKX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiJQb2x5Z29uIj09PXQudHlwZT90LmNvb3JkaW5hdGVzPW8odC5jb29yZGluYXRlcyxlKToiTXVsdGlQb2x5Z29uIj09PXQudHlwZSYmKHQuY29vcmRpbmF0ZXM9dC5jb29yZGluYXRlcy5tYXAoaShvLGUpKSksdH1mdW5jdGlvbiBvKHQsZSl7ZT0hIWUsdFswXT1zKHRbMF0sIWUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXRbcl09cyh0W3JdLGUpO3JldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbCh0KT09PWU/dDp0LnJldmVyc2UoKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjLnJpbmcodCk+PTB9dmFyIGM9dCgiZ2VvanNvbi1hcmVhIik7ZS5leHBvcnRzPW59LHsiZ2VvanNvbi1hcmVhIjoxMzd9XSwxMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLG8sbCxjLHUpe2lmKHIvPWUsbi89ZSxjPj1yJiZ1PD1uKXJldHVybiB0O2lmKGM+bnx8dTxyKXJldHVybiBudWxsO2Zvcih2YXIgZj1bXSxoPTA7aDx0Lmxlbmd0aDtoKyspe3ZhciBkLHAsbT10W2hdLHY9bS5nZW9tZXRyeSxnPW0udHlwZTtpZihkPW0ubWluW29dLHA9bS5tYXhbb10sZD49ciYmcDw9bilmLnB1c2gobSk7ZWxzZSBpZighKGQ+bnx8cDxyKSl7dmFyIHk9MT09PWc/aSh2LHIsbixvKTphKHYscixuLG8sbCwzPT09Zyk7eS5sZW5ndGgmJmYucHVzaChzKG0udGFncyxnLHksbS5pZCkpfX1yZXR1cm4gZi5sZW5ndGg/ZjpudWxsfWZ1bmN0aW9uIGkodCxlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXSxzPW9bbl07cz49ZSYmczw9ciYmaS5wdXNoKG8pfXJldHVybiBpfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjLHUsZixoPTAsZD0wLHA9bnVsbCxtPXRbbF0sdj1tLmFyZWEsZz1tLmRpc3QseT1tLm91dGVyLGI9bS5sZW5ndGgseD1bXTtmb3IodT0wO3U8Yi0xO3UrKyljPXB8fG1bdV0scD1tW3UrMV0saD1kfHxjW25dLGQ9cFtuXSxoPGU/ZD5yPyh4LnB1c2goaShjLHAsZSksaShjLHAscikpLGF8fCh4PW8ocyx4LHYsZyx5KSkpOmQ+PWUmJngucHVzaChpKGMscCxlKSk6aD5yP2Q8ZT8oeC5wdXNoKGkoYyxwLHIpLGkoYyxwLGUpKSxhfHwoeD1vKHMseCx2LGcseSkpKTpkPD1yJiZ4LnB1c2goaShjLHAscikpOih4LnB1c2goYyksZDxlPyh4LnB1c2goaShjLHAsZSkpLGF8fCh4PW8ocyx4LHYsZyx5KSkpOmQ+ciYmKHgucHVzaChpKGMscCxyKSksYXx8KHg9byhzLHgsdixnLHkpKSkpO2M9bVtiLTFdLGg9Y1tuXSxoPj1lJiZoPD1yJiZ4LnB1c2goYyksZj14W3gubGVuZ3RoLTFdLGEmJmYmJih4WzBdWzBdIT09ZlswXXx8eFswXVsxXSE9PWZbMV0pJiZ4LnB1c2goeFswXSksbyhzLHgsdixnLHkpfXJldHVybiBzfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtyZXR1cm4gZS5sZW5ndGgmJihlLmFyZWE9cixlLmRpc3Q9bix2b2lkIDAhPT1pJiYoZS5vdXRlcj1pKSx0LnB1c2goZSkpLFtdfWUuZXhwb3J0cz1uO3ZhciBzPXQoIi4vZmVhdHVyZSIpfSx7Ii4vZmVhdHVyZSI6MTQxfV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1bXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKWkocix0LmZlYXR1cmVzW25dLGUpO2Vsc2UiRmVhdHVyZSI9PT10LnR5cGU/aShyLHQsZSk6aShyLHtnZW9tZXRyeTp0fSxlKTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQsZSxyKXtpZihudWxsIT09ZS5nZW9tZXRyeSl7dmFyIG4scyxsLHUsZj1lLmdlb21ldHJ5LGg9Zi50eXBlLGQ9Zi5jb29yZGluYXRlcyxwPWUucHJvcGVydGllcyxtPWUuaWQ7aWYoIlBvaW50Ij09PWgpdC5wdXNoKGMocCwxLFtvKGQpXSxtKSk7ZWxzZSBpZigiTXVsdGlQb2ludCI9PT1oKXQucHVzaChjKHAsMSxhKGQpLG0pKTtlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWgpdC5wdXNoKGMocCwyLFthKGQscildLG0pKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09aHx8IlBvbHlnb24iPT09aCl7Zm9yKGw9W10sbj0wO248ZC5sZW5ndGg7bisrKXU9YShkW25dLHIpLCJQb2x5Z29uIj09PWgmJih1Lm91dGVyPTA9PT1uKSxsLnB1c2godSk7dC5wdXNoKGMocCwiUG9seWdvbiI9PT1oPzM6MixsLG0pKX1lbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aCl7Zm9yKGw9W10sbj0wO248ZC5sZW5ndGg7bisrKWZvcihzPTA7czxkW25dLmxlbmd0aDtzKyspdT1hKGRbbl1bc10sciksdS5vdXRlcj0wPT09cyxsLnB1c2godSk7dC5wdXNoKGMocCwzLGwsbSkpfWVsc2V7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiIhPT1oKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKTtmb3Iobj0wO248Zi5nZW9tZXRyaWVzLmxlbmd0aDtuKyspaSh0LHtnZW9tZXRyeTpmLmdlb21ldHJpZXNbbl0scHJvcGVydGllczpwfSxyKX19fWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXIucHVzaChvKHRbbl0pKTtyZXR1cm4gZSYmKGwocixlKSxzKHIpKSxyfWZ1bmN0aW9uIG8odCl7dmFyIGU9TWF0aC5zaW4odFsxXSpNYXRoLlBJLzE4MCkscj10WzBdLzM2MCsuNSxuPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gbj1uPDA/MDpuPjE/MTpuLFtyLG4sMF19ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9MDthPHQubGVuZ3RoLTE7YSsrKWU9cnx8dFthXSxyPXRbYSsxXSxuKz1lWzBdKnJbMV0tclswXSplWzFdLGkrPU1hdGguYWJzKHJbMF0tZVswXSkrTWF0aC5hYnMoclsxXS1lWzFdKTt0LmFyZWE9TWF0aC5hYnMobi8yKSx0LmRpc3Q9aX1lLmV4cG9ydHM9bjt2YXIgbD10KCIuL3NpbXBsaWZ5IiksYz10KCIuL2ZlYXR1cmUiKX0seyIuL2ZlYXR1cmUiOjE0MSwiLi9zaW1wbGlmeSI6MTQzfV0sMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGE9e2lkOm58fG51bGwsdHlwZTplLGdlb21ldHJ5OnIsdGFnczp0fHxudWxsLG1pbjpbMS8wLDEvMF0sbWF4OlstKDEvMCksLSgxLzApXX07cmV0dXJuIGkoYSksYX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10Lm1pbixuPXQubWF4O2lmKDE9PT10LnR5cGUpYShyLG4sZSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylhKHIsbixlW2ldKTtyZXR1cm4gdH1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7aSsrKW49cltpXSx0WzBdPU1hdGgubWluKG5bMF0sdFswXSksZVswXT1NYXRoLm1heChuWzBdLGVbMF0pLHRbMV09TWF0aC5taW4oblsxXSx0WzFdKSxlWzFdPU1hdGgubWF4KG5bMV0sZVsxXSl9ZS5leHBvcnRzPW59LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBuZXcgaSh0LGUpfWZ1bmN0aW9uIGkodCxlKXtlPXRoaXMub3B0aW9ucz1sKE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSxlKTt2YXIgcj1lLmRlYnVnO3ImJmNvbnNvbGUudGltZSgicHJlcHJvY2VzcyBkYXRhIik7dmFyIG49MTw8ZS5tYXhab29tLGk9dSh0LGUudG9sZXJhbmNlLyhuKmUuZXh0ZW50KSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZCgicHJlcHJvY2VzcyBkYXRhIiksY29uc29sZS5sb2coImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCIsZS5pbmRleE1heFpvb20sZS5pbmRleE1heFBvaW50cyksY29uc29sZS50aW1lKCJnZW5lcmF0ZSB0aWxlcyIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSxpPWQoaSxlLmJ1ZmZlci9lLmV4dGVudCxvKSxpLmxlbmd0aCYmdGhpcy5zcGxpdFRpbGUoaSwwLDAsMCksciYmKGkubGVuZ3RoJiZjb25zb2xlLmxvZygiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoImdlbmVyYXRlIHRpbGVzIiksY29uc29sZS5sb2coInRpbGVzIGdlbmVyYXRlZDoiLHRoaXMudG90YWwsSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpKX1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuW3IsKHItdFswXSkqKGVbMV0tdFsxXSkvKGVbMF0tdFswXSkrdFsxXSwxXX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm5bKHItdFsxXSkqKGVbMF0tdFswXSkvKGVbMV0tdFsxXSkrdFswXSxyLDFdfWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dC5zb3VyY2U7aWYoMSE9PW4ubGVuZ3RoKXJldHVybiExO3ZhciBpPW5bMF07aWYoMyE9PWkudHlwZXx8aS5nZW9tZXRyeS5sZW5ndGg+MSlyZXR1cm4hMTt2YXIgYT1pLmdlb21ldHJ5WzBdLmxlbmd0aDtpZig1IT09YSlyZXR1cm4hMTtmb3IodmFyIG89MDtvPGE7bysrKXt2YXIgcz1mLnBvaW50KGkuZ2VvbWV0cnlbMF1bb10sZSx0LnoyLHQueCx0LnkpO2lmKHNbMF0hPT0tciYmc1swXSE9PWUrcnx8c1sxXSE9PS1yJiZzWzFdIT09ZStyKXJldHVybiExfXJldHVybiEwfWUuZXhwb3J0cz1uO3ZhciB1PXQoIi4vY29udmVydCIpLGY9dCgiLi90cmFuc2Zvcm0iKSxoPXQoIi4vY2xpcCIpLGQ9dCgiLi93cmFwIikscD10KCIuL3RpbGUiKTtpLnByb3RvdHlwZS5vcHRpb25zPXttYXhab29tOjE0LGluZGV4TWF4Wm9vbTo1LGluZGV4TWF4UG9pbnRzOjFlNSxzb2xpZENoaWxkcmVuOiExLHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxkZWJ1ZzowfSxpLnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGwsdSl7Zm9yKHZhciBmPVt0LGUscixuXSxkPXRoaXMub3B0aW9ucyxtPWQuZGVidWcsdj1udWxsO2YubGVuZ3RoOyl7bj1mLnBvcCgpLHI9Zi5wb3AoKSxlPWYucG9wKCksdD1mLnBvcCgpO3ZhciBnPTE8PGUseT1hKGUscixuKSxiPXRoaXMudGlsZXNbeV0seD1lPT09ZC5tYXhab29tPzA6ZC50b2xlcmFuY2UvKGcqZC5leHRlbnQpO2lmKCFiJiYobT4xJiZjb25zb2xlLnRpbWUoImNyZWF0aW9uIiksYj10aGlzLnRpbGVzW3ldPXAodCxnLHIsbix4LGU9PT1kLm1heFpvb20pLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLG0pKXttPjEmJihjb25zb2xlLmxvZygidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpIixlLHIsbixiLm51bUZlYXR1cmVzLGIubnVtUG9pbnRzLGIubnVtU2ltcGxpZmllZCksY29uc29sZS50aW1lRW5kKCJjcmVhdGlvbiIpKTt2YXIgXz0ieiIrZTt0aGlzLnN0YXRzW19dPSh0aGlzLnN0YXRzW19dfHwwKSsxLHRoaXMudG90YWwrK31pZihiLnNvdXJjZT10LGkpe2lmKGU9PT1kLm1heFpvb218fGU9PT1pKWNvbnRpbnVlO3ZhciB3PTE8PGktZTtpZihyIT09TWF0aC5mbG9vcihsL3cpfHxuIT09TWF0aC5mbG9vcih1L3cpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWQuaW5kZXhNYXhab29tfHxiLm51bVBvaW50czw9ZC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihkLnNvbGlkQ2hpbGRyZW58fCFjKGIsZC5leHRlbnQsZC5idWZmZXIpKXtiLnNvdXJjZT1udWxsLG0+MSYmY29uc29sZS50aW1lKCJjbGlwcGluZyIpO3ZhciBNLFQsayxBLEUsUyxMPS41KmQuYnVmZmVyL2QuZXh0ZW50LEM9LjUtTCxJPS41K0wsRD0xK0w7TT1UPWs9QT1udWxsLEU9aCh0LGcsci1MLHIrSSwwLG8sYi5taW5bMF0sYi5tYXhbMF0pLFM9aCh0LGcscitDLHIrRCwwLG8sYi5taW5bMF0sYi5tYXhbMF0pLEUmJihNPWgoRSxnLG4tTCxuK0ksMSxzLGIubWluWzFdLGIubWF4WzFdKSxUPWgoRSxnLG4rQyxuK0QsMSxzLGIubWluWzFdLGIubWF4WzFdKSksUyYmKGs9aChTLGcsbi1MLG4rSSwxLHMsYi5taW5bMV0sYi5tYXhbMV0pLEE9aChTLGcsbitDLG4rRCwxLHMsYi5taW5bMV0sYi5tYXhbMV0pKSxtPjEmJmNvbnNvbGUudGltZUVuZCgiY2xpcHBpbmciKSx0Lmxlbmd0aCYmKGYucHVzaChNfHxbXSxlKzEsMipyLDIqbiksZi5wdXNoKFR8fFtdLGUrMSwyKnIsMipuKzEpLGYucHVzaChrfHxbXSxlKzEsMipyKzEsMipuKSxmLnB1c2goQXx8W10sZSsxLDIqcisxLDIqbisxKSl9ZWxzZSBpJiYodj1lKX1yZXR1cm4gdn0saS5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGk9bi5leHRlbnQsbz1uLmRlYnVnLHM9MTw8dDtlPShlJXMrcyklczt2YXIgbD1hKHQsZSxyKTtpZih0aGlzLnRpbGVzW2xdKXJldHVybiBmLnRpbGUodGhpcy50aWxlc1tsXSxpKTtvPjEmJmNvbnNvbGUubG9nKCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCIsdCxlLHIpO2Zvcih2YXIgdSxoPXQsZD1lLHA9cjshdSYmaD4wOyloLS0sZD1NYXRoLmZsb29yKGQvMikscD1NYXRoLmZsb29yKHAvMiksdT10aGlzLnRpbGVzW2EoaCxkLHApXTtpZighdXx8IXUuc291cmNlKXJldHVybiBudWxsO2lmKG8+MSYmY29uc29sZS5sb2coImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCIsaCxkLHApLGModSxpLG4uYnVmZmVyKSlyZXR1cm4gZi50aWxlKHUsaSk7bz4xJiZjb25zb2xlLnRpbWUoImRyaWxsaW5nIGRvd24iKTt2YXIgbT10aGlzLnNwbGl0VGlsZSh1LnNvdXJjZSxoLGQscCx0LGUscik7aWYobz4xJiZjb25zb2xlLnRpbWVFbmQoImRyaWxsaW5nIGRvd24iKSxudWxsIT09bSl7dmFyIHY9MTw8dC1tO2w9YShtLE1hdGguZmxvb3IoZS92KSxNYXRoLmZsb29yKHIvdikpfXJldHVybiB0aGlzLnRpbGVzW2xdP2YudGlsZSh0aGlzLnRpbGVzW2xdLGkpOm51bGx9fSx7Ii4vY2xpcCI6MTM5LCIuL2NvbnZlcnQiOjE0MCwiLi90aWxlIjoxNDQsIi4vdHJhbnNmb3JtIjoxNDUsIi4vd3JhcCI6MTQ2fV0sMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGEsbyxzPWUqZSxsPXQubGVuZ3RoLGM9MCx1PWwtMSxmPVtdO2Zvcih0W2NdWzJdPTEsdFt1XVsyXT0xO3U7KXtmb3Iobj0wLHI9YysxO3I8dTtyKyspKGE9aSh0W3JdLHRbY10sdFt1XSkpPm4mJihvPXIsbj1hKTtuPnM/KHRbb11bMl09bixmLnB1c2goYyksZi5wdXNoKG8pLGM9byk6KHU9Zi5wb3AoKSxjPWYucG9wKCkpfX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbMF0sbz1yWzFdLHM9dFswXSxsPXRbMV0sYz1hLW4sdT1vLWk7aWYoMCE9PWN8fDAhPT11KXt2YXIgZj0oKHMtbikqYysobC1pKSp1KS8oYypjK3UqdSk7Zj4xPyhuPWEsaT1vKTpmPjAmJihuKz1jKmYsaSs9dSpmKX1yZXR1cm4gYz1zLW4sdT1sLWksYypjK3UqdX1lLmV4cG9ydHM9bn0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSxvKXtmb3IodmFyIHM9e2ZlYXR1cmVzOltdLG51bVBvaW50czowLG51bVNpbXBsaWZpZWQ6MCxudW1GZWF0dXJlczowLHNvdXJjZTpudWxsLHg6cix5Om4sejI6ZSx0cmFuc2Zvcm1lZDohMSxtaW46WzIsMV0sbWF4OlstMSwwXX0sbD0wO2w8dC5sZW5ndGg7bCsrKXtzLm51bUZlYXR1cmVzKyssaShzLHRbbF0sYSxvKTt2YXIgYz10W2xdLm1pbix1PXRbbF0ubWF4O2NbMF08cy5taW5bMF0mJihzLm1pblswXT1jWzBdKSxjWzFdPHMubWluWzFdJiYocy5taW5bMV09Y1sxXSksdVswXT5zLm1heFswXSYmKHMubWF4WzBdPXVbMF0pLHVbMV0+cy5tYXhbMV0mJihzLm1heFsxXT11WzFdKX1yZXR1cm4gc31mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpLG8scyxsLGM9ZS5nZW9tZXRyeSx1PWUudHlwZSxmPVtdLGg9cipyO2lmKDE9PT11KWZvcihpPTA7aTxjLmxlbmd0aDtpKyspZi5wdXNoKGNbaV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKWlmKHM9Y1tpXSxufHwhKDI9PT11JiZzLmRpc3Q8cnx8Mz09PXUmJnMuYXJlYTxoKSl7dmFyIGQ9W107Zm9yKG89MDtvPHMubGVuZ3RoO28rKylsPXNbb10sKG58fGxbMl0+aCkmJihkLnB1c2gobCksdC5udW1TaW1wbGlmaWVkKyspLHQubnVtUG9pbnRzKys7Mz09PXUmJmEoZCxzLm91dGVyKSxmLnB1c2goZCl9ZWxzZSB0Lm51bVBvaW50cys9cy5sZW5ndGg7aWYoZi5sZW5ndGgpe3ZhciBwPXtnZW9tZXRyeTpmLHR5cGU6dSx0YWdzOmUudGFnc3x8bnVsbH07bnVsbCE9PWUuaWQmJihwLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChwKX19ZnVuY3Rpb24gYSh0LGUpe28odCk8MD09PWUmJnQucmV2ZXJzZSgpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHIsbj0wLGk9MCxhPXQubGVuZ3RoLG89YS0xO2k8YTtvPWkrKyllPXRbaV0scj10W29dLG4rPShyWzBdLWVbMF0pKihlWzFdK3JbMV0pO3JldHVybiBufWUuZXhwb3J0cz1ufSx7fV0sMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4sYSxvPXQuejIscz10LngsbD10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGM9dC5mZWF0dXJlc1tyXSx1PWMuZ2VvbWV0cnk7aWYoMT09PWMudHlwZSlmb3Iobj0wO248dS5sZW5ndGg7bisrKXVbbl09aSh1W25dLGUsbyxzLGwpO2Vsc2UgZm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGY9dVtuXTtmb3IoYT0wO2E8Zi5sZW5ndGg7YSsrKWZbYV09aShmW2FdLGUsbyxzLGwpfX1yZXR1cm4gdC50cmFuc2Zvcm1lZD0hMCx0fWZ1bmN0aW9uIGkodCxlLHIsbixpKXtyZXR1cm5bTWF0aC5yb3VuZChlKih0WzBdKnItbikpLE1hdGgucm91bmQoZSoodFsxXSpyLWkpKV19ci50aWxlPW4sci5wb2ludD1pfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXQsYT1vKHQsMSwtMS1lLGUsMCxyLC0xLDIpLHM9byh0LDEsMS1lLDIrZSwwLHIsLTEsMik7cmV0dXJuKGF8fHMpJiYobj1vKHQsMSwtZSwxK2UsMCxyLC0xLDIpfHxbXSxhJiYobj1pKGEsMSkuY29uY2F0KG4pKSxzJiYobj1uLmNvbmNhdChpKHMsLTEpKSkpLG59ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLG89dFtuXSxsPW8udHlwZTtpZigxPT09bClpPWEoby5nZW9tZXRyeSxlKTtlbHNle2k9W107Zm9yKHZhciBjPTA7YzxvLmdlb21ldHJ5Lmxlbmd0aDtjKyspaS5wdXNoKGEoby5nZW9tZXRyeVtjXSxlKSl9ci5wdXNoKHMoby50YWdzLGwsaSxvLmlkKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPVtdO3IuYXJlYT10LmFyZWEsci5kaXN0PXQuZGlzdDtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goW3Rbbl1bMF0rZSx0W25dWzFdLHRbbl1bMl1dKTtyZXR1cm4gcn12YXIgbz10KCIuL2NsaXAiKSxzPXQoIi4vZmVhdHVyZSIpO2UuZXhwb3J0cz1ufSx7Ii4vY2xpcCI6MTM5LCIuL2ZlYXR1cmUiOjE0MX1dLDE0NzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nIik7aWYoZT1lfHx7fSwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOyJudW1iZXIiPT10eXBlb2YgZS53aWR0aCYmKHIud2lkdGg9ZS53aWR0aCksIm51bWJlciI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKCJ3ZWJnbCIpJiZhLnB1c2goImV4cGVyaW1lbnRhbC0iK3QpO2Zvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKG49ci5nZXRDb250ZXh0KGFbb10saSkpcmV0dXJuIG59Y2F0Y2godCl7bj1udWxsfXJldHVybiBufHxudWxsfWUuZXhwb3J0cz1ufSx7fV0sMTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiBpKHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPXUodCl9ZnVuY3Rpb24gYSgpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIGE9dC5wcmltYWxPZmZzZXQsbz10LnByaW1hbE1pbm9yLHM9dC5taXJyb3JPZmZzZXQsbD10Lm1pcnJvck1pbm9yLGM9bltlXSx1PTA7dTwzOysrdSlpZihlIT09dSl7dmFyIGY9YSxoPXMsZD1vLHA9bDtjJjE8PHUmJihmPXMsaD1hLGQ9bCxwPW8pLGZbdV09clswXVt1XSxoW3VdPXJbMV1bdV0saVt1XT4wPyhkW3VdPS0xLHBbdV09MCk6KGRbdV09MCxwW3VdPTEpfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bmV3IGkodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9ZS5leHBvcnRzPXM7dmFyIGw9dCgiLi9saWIvdGV4dC5qcyIpLGM9dCgiLi9saWIvbGluZXMuanMiKSx1PXQoIi4vbGliL2JhY2tncm91bmQuanMiKSxmPXQoIi4vbGliL2N1YmUuanMiKSxoPXQoIi4vbGliL3RpY2tzLmpzIiksZD1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSkscD1pLnByb3RvdHlwZTtwLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsbj1lLmJpbmQodGhpcywhMSxOdW1iZXIpLGk9ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksYT1lLmJpbmQodGhpcywhMSxTdHJpbmcpLG89ZS5iaW5kKHRoaXMsITAsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSxzPSExLHU9ITE7aWYoImJvdW5kcyJpbiB0KWZvcih2YXIgZj10LmJvdW5kcyxkPTA7ZDwyOysrZClmb3IodmFyIHA9MDtwPDM7KytwKWZbZF1bcF0hPT10aGlzLmJvdW5kc1tkXVtwXSYmKHU9ITApLHRoaXMuYm91bmRzW2RdW3BdPWZbZF1bcF07aWYoInRpY2tzImluIHQpe3I9dC50aWNrcyxzPSEwLHRoaXMuYXV0b1RpY2tzPSExO2Zvcih2YXIgZD0wO2Q8MzsrK2QpdGhpcy50aWNrU3BhY2luZ1tkXT0wfWVsc2UgbigidGlja1NwYWNpbmciKSYmKHRoaXMuYXV0b1RpY2tzPSEwLHU9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKCJ0aWNrcyJpbiB0fHwidGlja1NwYWNpbmciaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSx1PSEwLHM9ITAsdGhpcy5fZmlyc3RJbml0PSExKSx1JiZ0aGlzLmF1dG9UaWNrcyYmKHI9aC5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZykscz0hMCkscyl7Zm9yKHZhciBkPTA7ZDwzOysrZClyW2RdLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pO2guZXF1YWwocix0aGlzLnRpY2tzKT9zPSExOnRoaXMudGlja3M9cn1pKCJ0aWNrRW5hYmxlIiksYSgidGlja0ZvbnQiKSYmKHM9ITApLG4oInRpY2tTaXplIiksbigidGlja0FuZ2xlIiksbigidGlja1BhZCIpLG8oInRpY2tDb2xvciIpO3ZhciBtPWEoImxhYmVscyIpO2EoImxhYmVsRm9udCIpJiYobT0hMCksaSgibGFiZWxFbmFibGUiKSxuKCJsYWJlbFNpemUiKSxuKCJsYWJlbFBhZCIpLG8oImxhYmVsQ29sb3IiKSxpKCJsaW5lRW5hYmxlIiksaSgibGluZU1pcnJvciIpLG4oImxpbmVXaWR0aCIpLG8oImxpbmVDb2xvciIpLGkoImxpbmVUaWNrRW5hYmxlIiksaSgibGluZVRpY2tNaXJyb3IiKSxuKCJsaW5lVGlja0xlbmd0aCIpLG4oImxpbmVUaWNrV2lkdGgiKSxvKCJsaW5lVGlja0NvbG9yIiksaSgiZ3JpZEVuYWJsZSIpLG4oImdyaWRXaWR0aCIpLG8oImdyaWRDb2xvciIpLGkoInplcm9FbmFibGUiKSxvKCJ6ZXJvTGluZUNvbG9yIiksbigiemVyb0xpbmVXaWR0aCIpLGkoImJhY2tncm91bmRFbmFibGUiKSxvKCJiYWNrZ3JvdW5kQ29sb3IiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihtfHxzKSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PWwodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZzJiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9Yyh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIG09W25ldyBhLG5ldyBhLG5ldyBhXSx2PVswLDAsMF0sZz17bW9kZWw6ZCx2aWV3OmQscHJvamVjdGlvbjpkfTtwLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHAuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxwLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciB5PVswLDAsMF0sYj1bMCwwLDBdLHg9WzAsMCwwXTtwLmRyYXc9ZnVuY3Rpb24odCl7dD10fHxnO2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8ZCxpPXQudmlld3x8ZCxhPXQucHJvamVjdGlvbnx8ZCxzPXRoaXMuYm91bmRzLGw9ZihyLGksYSxzKSxjPWwuY3ViZUVkZ2VzLHU9bC5heGlzLGg9aVsxMl0scD1pWzEzXSxfPWlbMTRdLHc9aVsxNV0sTT10aGlzLnBpeGVsUmF0aW8qKGFbM10qaCthWzddKnArYVsxMV0qXythWzE1XSp3KS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQsVD0wO1Q8MzsrK1QpdGhpcy5sYXN0Q3ViZVByb3BzLmN1YmVFZGdlc1tUXT1jW1RdLHRoaXMubGFzdEN1YmVQcm9wcy5heGlzW1RdPXVbVF07Zm9yKHZhciBrPW0sVD0wO1Q8MzsrK1QpbyhtW1RdLFQsdGhpcy5ib3VuZHMsYyx1KTtmb3IodmFyIGU9dGhpcy5nbCxBPXYsVD0wO1Q8MzsrK1QpdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW1RdP0FbVF09dVtUXTpBW1RdPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsaSxhLHMsQSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLGksYSx0aGlzKTtmb3IodmFyIFQ9MDtUPDM7KytUKXt2YXIgRT1bMCwwLDBdO3VbVF0+MD9FW1RdPXNbMV1bVF06RVtUXT1zWzBdW1RdO2Zvcih2YXIgUz0wO1M8MjsrK1Mpe3ZhciBMPShUKzErUyklMyxDPShUKzErKDFeUykpJTM7dGhpcy5ncmlkRW5hYmxlW0xdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZChMLEMsdGhpcy5ib3VuZHMsRSx0aGlzLmdyaWRDb2xvcltMXSx0aGlzLmdyaWRXaWR0aFtMXSp0aGlzLnBpeGVsUmF0aW8pfWZvcih2YXIgUz0wO1M8MjsrK1Mpe3ZhciBMPShUKzErUyklMyxDPShUKzErKDFeUykpJTM7dGhpcy56ZXJvRW5hYmxlW0NdJiZzWzBdW0NdPD0wJiZzWzFdW0NdPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyhMLEMsdGhpcy5ib3VuZHMsRSx0aGlzLnplcm9MaW5lQ29sb3JbQ10sdGhpcy56ZXJvTGluZVdpZHRoW0NdKnRoaXMucGl4ZWxSYXRpbyl9fWZvcih2YXIgVD0wO1Q8MzsrK1Qpe3RoaXMubGluZUVuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKFQsdGhpcy5ib3VuZHMsa1tUXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbVF0sdGhpcy5saW5lV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShULHRoaXMuYm91bmRzLGtbVF0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW1RdLHRoaXMubGluZVdpZHRoW1RdKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBJPW4oeSxrW1RdLnByaW1hbE1pbm9yKSxEPW4oYixrW1RdLm1pcnJvck1pbm9yKSxQPXRoaXMubGluZVRpY2tMZW5ndGgsUz0wO1M8MzsrK1Mpe3ZhciB6PU0vcls1KlNdO0lbU10qPVBbU10qeixEW1NdKj1QW1NdKnp9dGhpcy5saW5lVGlja0VuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhULGtbVF0ucHJpbWFsT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW1RdLHRoaXMubGluZVRpY2tXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoVCxrW1RdLm1pcnJvck9mZnNldCxELHRoaXMubGluZVRpY2tDb2xvcltUXSx0aGlzLmxpbmVUaWNrV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl90ZXh0LmJpbmQocixpLGEsdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIFQ9MDtUPDM7KytUKXtmb3IodmFyIE89a1tUXS5wcmltYWxNaW5vcixSPW4oeCxrW1RdLnByaW1hbE9mZnNldCksUz0wO1M8MzsrK1MpdGhpcy5saW5lVGlja0VuYWJsZVtUXSYmKFJbU10rPU0qT1tTXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW1NdLDApL3JbNSpTXSk7aWYodGhpcy50aWNrRW5hYmxlW1RdKXtmb3IodmFyIFM9MDtTPDM7KytTKVJbU10rPU0qT1tTXSp0aGlzLnRpY2tQYWRbU10vcls1KlNdO3RoaXMuX3RleHQuZHJhd1RpY2tzKFQsdGhpcy50aWNrU2l6ZVtUXSx0aGlzLnRpY2tBbmdsZVtUXSxSLHRoaXMudGlja0NvbG9yW1RdKX1pZih0aGlzLmxhYmVsRW5hYmxlW1RdKXtmb3IodmFyIFM9MDtTPDM7KytTKVJbU10rPU0qT1tTXSp0aGlzLmxhYmVsUGFkW1NdL3JbNSpTXTtSW1RdKz0uNSooc1swXVtUXStzWzFdW1RdKSx0aGlzLl90ZXh0LmRyYXdMYWJlbChULHRoaXMubGFiZWxTaXplW1RdLHRoaXMubGFiZWxBbmdsZVtUXSxSLHRoaXMubGFiZWxDb2xvcltUXSl9fX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7Ii4vbGliL2JhY2tncm91bmQuanMiOjE0OSwiLi9saWIvY3ViZS5qcyI6MTUwLCIuL2xpYi9saW5lcy5qcyI6MTUxLCIuL2xpYi90ZXh0LmpzIjoxNTMsIi4vbGliL3RpY2tzLmpzIjoxNTR9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W10scj1bXSxpPTAsbD0wO2w8MzsrK2wpZm9yKHZhciBjPShsKzEpJTMsdT0obCsyKSUzLGY9WzAsMCwwXSxoPVswLDAsMF0sZD0tMTtkPD0xO2QrPTIpe3IucHVzaChpLGkrMixpKzEsaSsxLGkrMixpKzMpLGZbbF09ZCxoW2xdPWQ7Zm9yKHZhciBwPS0xO3A8PTE7cCs9Mil7ZltjXT1wO2Zvcih2YXIgbT0tMTttPD0xO20rPTIpZlt1XT1tLGUucHVzaChmWzBdLGZbMV0sZlsyXSxoWzBdLGhbMV0saFsyXSksaSs9MX12YXIgdj1jO2M9dSx1PXZ9dmFyIGc9YSh0LG5ldyBGbG9hdDMyQXJyYXkoZSkpLHk9YSh0LG5ldyBVaW50MTZBcnJheShyKSx0LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSxiPW8odCxbe2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI0fSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI0fV0seSkseD1zKHQpO3JldHVybiB4LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx4LmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTEsbmV3IG4odCxnLGIseCl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC12YW8iKSxzPXQoIi4vc2hhZGVycyIpLmJnLGw9bi5wcm90b3R5cGU7bC5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxpW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6YX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTUyLCJnbC1idWZmZXIiOjE1NiwiZ2wtdmFvIjoyNzd9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MDtlPG0ubGVuZ3RoOysrZSlpZih0PWwucG9zaXRpdmUodCxtW2VdKSx0Lmxlbmd0aDwzKXJldHVybiAwO2Zvcih2YXIgcj10WzBdLG49clswXS9yWzNdLGk9clsxXS9yWzNdLGE9MCxlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIG89dFtlXSxzPXRbZSsxXSxjPW9bMF0vb1szXSx1PW9bMV0vb1szXSxmPXNbMF0vc1szXSxoPXNbMV0vc1szXSxkPWMtbixwPXUtaSx2PWYtbixnPWgtaTthKz1NYXRoLmFicyhkKmctcCp2KX1yZXR1cm4gYX1mdW5jdGlvbiBhKHQsZSxyLGEpe3ModSxlLHQpLHModSxyLHUpO2Zvcih2YXIgbD0wLG09MDttPDI7KyttKXtkWzJdPWFbbV1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7ZFsxXT1hW2JdWzFdO2Zvcih2YXIgeD0wO3g8MjsrK3gpZFswXT1hW3hdWzBdLG4oZltsXSxkLHUpLGwrPTF9fWZvcih2YXIgXz0tMSxtPTA7bTw4OysrbSl7Zm9yKHZhciB3PWZbbV1bM10sTT0wO008MzsrK00paFttXVtNXT1mW21dW01dL3c7dzwwJiYoXzwwP189bTpoW21dWzJdPGhbX11bMl0mJihfPW0pKX1pZihfPDApe189MDtmb3IodmFyIFQ9MDtUPDM7KytUKXtmb3IodmFyIGs9KFQrMiklMyxBPShUKzEpJTMsRT0tMSxTPS0xLEw9MDtMPDI7KytMKXt2YXIgQz1MPDxULEk9QysoTDw8aykrKDEtTDw8QSksRD1DKygxLUw8PGspKyhMPDxBKTtjKGhbQ10saFtJXSxoW0RdLHApPDB8fChMP0U9MTpTPTEpfWlmKEU8MHx8UzwwKVM+RSYmKF98PTE8PFQpO2Vsc2V7Zm9yKHZhciBMPTA7TDwyOysrTCl7dmFyIEM9TDw8VCxJPUMrKEw8PGspKygxLUw8PEEpLEQ9QysoMS1MPDxrKSsoTDw8QSksUD1pKFtmW0NdLGZbSV0sZltEXSxmW0MrKDE8PGspKygxPDxBKV1dKTtMP0U9UDpTPVB9Uz5FJiYoX3w9MTw8VCl9fX1mb3IodmFyIHo9N15fLE89LTEsbT0wO208ODsrK20pbSE9PV8mJm0hPT16JiYoTzwwP089bTpoW09dWzFdPmhbbV1bMV0mJihPPW0pKTtmb3IodmFyIFI9LTEsbT0wO208MzsrK20pe3ZhciBGPU9eMTw8bTtpZihGIT09XyYmRiE9PXope1I8MCYmKFI9Rik7dmFyIEE9aFtGXTtBWzBdPGhbUl1bMF0mJihSPUYpfX1mb3IodmFyIGo9LTEsbT0wO208MzsrK20pe3ZhciBGPU9eMTw8bTtpZihGIT09XyYmRiE9PXomJkYhPT1SKXtqPDAmJihqPUYpO3ZhciBBPWhbRl07QVswXT5oW2pdWzBdJiYoaj1GKX19dmFyIE49djtOWzBdPU5bMV09TlsyXT0wLE5bby5sb2cyKFJeTyldPU8mUixOW28ubG9nMihPXmopXT1PJmo7dmFyIEI9N15qO0I9PT1ffHxCPT09ej8oQj03XlIsTltvLmxvZzIoal5CKV09QiZqKTpOW28ubG9nMihSXkIpXT1CJlI7Zm9yKHZhciBVPWcsVj1fLFQ9MDtUPDM7KytUKVVbVF09ViYxPDxUPy0xOjE7cmV0dXJuIHl9ZS5leHBvcnRzPWE7dmFyIG89dCgiYml0LXR3aWRkbGUiKSxzPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxsPSh0KCJnbC1tYXQ0L2ludmVydCIpLHQoInNwbGl0LXBvbHlnb24iKSksYz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSx1PW5ldyBBcnJheSgxNiksZj0obmV3IEFycmF5KDE2KSxuZXcgQXJyYXkoOCkpLGg9bmV3IEFycmF5KDgpLGQ9bmV3IEFycmF5KDMpLHA9WzAsMCwwXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDg7Kyt0KWZbdF09WzEsMSwxLDFdLGhbdF09WzEsMSwxXX0oKTt2YXIgbT1bWzAsMCwxLDAsMF0sWzAsMCwtMSwxLDBdLFswLC0xLDAsMSwwXSxbMCwxLDAsMSwwXSxbLTEsMCwwLDEsMF0sWzEsMCwwLDEsMF1dLHY9WzEsMSwxXSxnPVswLDAsMF0seT17Y3ViZUVkZ2VzOnYsYXhpczpnfX0seyJiaXQtdHdpZGRsZSI6NjgsImdsLW1hdDQvaW52ZXJ0IjoxODUsImdsLW1hdDQvbXVsdGlwbHkiOjE4Nywicm9idXN0LW9yaWVudGF0aW9uIjo1MTcsInNwbGl0LXBvbHlnb24iOjUzNX1dLDE1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy52ZXJ0QnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMudGlja0NvdW50PWksdGhpcy50aWNrT2Zmc2V0PWEsdGhpcy5ncmlkQ291bnQ9byx0aGlzLmdyaWRPZmZzZXQ9c31mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1bXSxpPVswLDAsMF0sbz1bMCwwLDBdLHU9WzAsMCwwXSxmPVswLDAsMF07bi5wdXNoKDAsMCwxLDAsMSwxLDAsMCwtMSwwLDAsLTEsMCwxLDEsMCwxLC0xKTtmb3IodmFyIGg9MDtoPDM7KytoKXtmb3IodmFyIGQ9bi5sZW5ndGgvM3wwLHA9MDtwPHJbaF0ubGVuZ3RoOysrcCl7dmFyIG09K3JbaF1bcF0ueDtuLnB1c2gobSwwLDEsbSwxLDEsbSwwLC0xLG0sMCwtMSxtLDEsMSxtLDEsLTEpfXZhciB2PW4ubGVuZ3RoLzN8MDtpW2hdPWQsb1toXT12LWQ7Zm9yKHZhciBkPW4ubGVuZ3RoLzN8MCxnPTA7ZzxyW2hdLmxlbmd0aDsrK2cpe3ZhciBtPStyW2hdW2ddLng7bi5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX12YXIgdj1uLmxlbmd0aC8zfDA7dVtoXT1kLGZbaF09di1kfXZhciB5PXModCxuZXcgRmxvYXQzMkFycmF5KG4pKSxiPWwodCxbe2J1ZmZlcjp5LHR5cGU6dC5GTE9BVCxzaXplOjMsc3RyaWRlOjAsb2Zmc2V0OjB9XSkseD1jKHQpO3JldHVybiB4LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxuZXcgYSh0LHksYix4LG8saSxmLHUpfWUuZXhwb3J0cz1vO3ZhciBzPXQoImdsLWJ1ZmZlciIpLGw9dCgiZ2wtdmFvIiksYz10KCIuL3NoYWRlcnMiKS5saW5lLHU9WzAsMCwwXSxmPVswLDAsMF0saD1bMCwwLDBdLGQ9WzAsMCwwXSxwPVsxLDFdLG09YS5wcm90b3R5cGU7bS5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXMubW9kZWw9dCx0aGlzLnNoYWRlci51bmlmb3Jtcy52aWV3PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbj1yLHBbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgscFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuU2hhcGU9cCx0aGlzLnZhby5iaW5kKCl9LG0uZHJhd0F4aXNMaW5lPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9bihmKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9ZixzW3RdPWVbMV1bdF0tZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9czt2YXIgbD1pKGQscik7bFt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bCx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1hO3ZhciBjPW4oaCk7Y1sodCsyKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Yyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpO3ZhciBjPW4oaCk7Y1sodCsxKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Yyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxtLmRyYXdBeGlzVGlja3M9ZnVuY3Rpb24odCxlLHIsaSxhKXtpZih0aGlzLnRpY2tDb3VudFt0XSl7dmFyIG89bih1KTtvW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YTt2YXIgcz1uKGgpO3NbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pfX0sbS5kcmF3R3JpZD1mdW5jdGlvbih0LGUscixhLG8scyl7aWYodGhpcy5ncmlkQ291bnRbdF0pe3ZhciBsPW4oZik7bFtlXT1yWzFdW2VdLXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWw7dmFyIGM9aShkLGEpO2NbZV0rPXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PWM7dmFyIHA9bih1KTtwW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXA7dmFyIG09bihoKTttW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1tLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1zLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmdyaWRDb3VudFt0XSx0aGlzLmdyaWRPZmZzZXRbdF0pfX0sbS5kcmF3WmVybz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9bihmKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9bCxsW3RdPXJbMV1bdF0tclswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bDt2YXIgYz1pKGQsYSk7Y1t0XSs9clswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9Yzt2YXIgdT1uKGgpO3VbZV09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXUsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPXMsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy52ZXJ0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTUyLCJnbC1idWZmZXIiOjE1NiwiZ2wtdmFvIjoyNzd9XSwxNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIik7ci5saW5lPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcblxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xuICB2ZWMzIG1pbm9yID0gcG9zaXRpb24ueSAqIG1pbm9yQXhpcztcblxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XG4gIHZlYzMgcFBvc2l0aW9uID0gcHJvamVjdCh2UG9zaXRpb24pO1xuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xuXG4gIHZlYzIgc2NyZWVuID0gbm9ybWFsaXplKChvZmZzZXQgLSBwUG9zaXRpb24pLnh5ICogc2NyZWVuU2hhcGUpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcbn1cbiIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTtyLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCwiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBheGlzO1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgYW5nbGUsIHBpeGVsU2NhbGU7XG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcblxudm9pZCBtYWluKCkgeyAgXG4gIC8vQ29tcHV0ZSBwbGFuZSBvZmZzZXRcbiAgdmVjMiBwbGFuZUNvb3JkID0gcG9zaXRpb24ueHkgKiBwaXhlbFNjYWxlO1xuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHZpZXdPZmZzZXQgPSAyLjAgKiBwbGFuZVhmb3JtICogcGxhbmVDb29yZCAvIHJlc29sdXRpb247XG5cbiAgLy9Db21wdXRlIHdvcmxkIG9mZnNldFxuICBmbG9hdCBheGlzRGlzdGFuY2UgPSBwb3NpdGlvbi56O1xuICB2ZWMzIGRhdGFQb3NpdGlvbiA9IGF4aXNEaXN0YW5jZSAqIGF4aXMgKyBvZmZzZXQ7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xuICBcbiAgLy9Db21wdXRlIGNsaXAgcG9zaXRpb25cbiAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG5cbiAgLy9BcHBseSB0ZXh0IG9mZnNldCBpbiBjbGlwIGNvb3JkaW5hdGVzXG4gIGNsaXBQb3NpdGlvbiArPSB2ZWM0KHZpZXdPZmZzZXQsIDAsIDApO1xuXG4gIC8vRG9uZVxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbn0iLCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSIsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07ci5iZz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBlbmFibGU7XG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGRvdChub3JtYWwsIGVuYWJsZSkgPiAwLjApIHtcbiAgICB2ZWMzIG5Qb3NpdGlvbiA9IG1peChib3VuZHNbMF0sIGJvdW5kc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSk7XG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9XG4gIGNvbG9yQ2hhbm5lbCA9IGFicyhub3JtYWwpO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcblxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvckNoYW5uZWwueCAqIGNvbG9yc1swXSArIFxuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSIsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MjYxfV0sMTUzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH1mdW5jdGlvbiBpKHQsZSl7dHJ5e3JldHVybiBsKHQsZSl9Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUud2FybigiZXJyb3IgdmVjdG9yaXppbmcgdGV4dDoiLHQpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX1mdW5jdGlvbiBhKHQsZSxyLGksYSxsKXt2YXIgdT1vKHQpLGY9cyh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9Yyh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgZD1uZXcgbih0LGgsdSxmKTtyZXR1cm4gZC51cGRhdGUoZSxyLGksYSxsKSxkfWUuZXhwb3J0cz1hO3ZhciBvPXQoImdsLWJ1ZmZlciIpLHM9dCgiZ2wtdmFvIiksbD10KCJ2ZWN0b3JpemUtdGV4dCIpLGM9dCgiLi9zaGFkZXJzIikudGV4dCx1PXdpbmRvd3x8ci5nbG9iYWx8fHt9LGY9dS5fX1RFWFRfQ0FDSEV8fHt9O3UuX19URVhUX0NBQ0hFPXt9O3ZhciBoPW4ucHJvdG90eXBlLGQ9WzAsMF07aC5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGk9dGhpcy5zaGFkZXIudW5pZm9ybXM7aS5tb2RlbD10LGkudmlldz1lLGkucHJvamVjdGlvbj1yLGkucGl4ZWxTY2FsZT1uLGRbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsZFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1kfSxoLnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGEpe2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIGE9ZltyXTthfHwoYT1mW3JdPXt9KTt2YXIgbz1hW2VdO298fChvPWFbZV09aShlLHt0cmlhbmdsZXM6ITAsZm9udDpyLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSJ9KSk7Zm9yKHZhciBsPShufHwxMikvMTIsYz1vLnBvc2l0aW9ucyx1PW8uY2VsbHMsaD0wLGQ9dS5sZW5ndGg7aDxkOysraClmb3IodmFyIHA9dVtoXSxtPTI7bT49MDstLW0pe3ZhciB2PWNbcFttXV07cy5wdXNoKGwqdlswXSwtbCp2WzFdLHQpfX1mb3IodmFyIHM9KHRoaXMuZ2wsW10pLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdLGg9WzAsMCwwXSxkPTA7ZDwzOysrZCl7dVtkXT1zLmxlbmd0aC8zfDAsbyguNSoodFswXVtkXSt0WzFdW2RdKSxlW2RdLHIpLGhbZF09KHMubGVuZ3RoLzN8MCktdVtkXSxsW2RdPXMubGVuZ3RoLzN8MDtmb3IodmFyIHA9MDtwPG5bZF0ubGVuZ3RoOysrcCluW2RdW3BdLnRleHQmJm8obltkXVtwXS54LG5bZF1bcF0udGV4dCxuW2RdW3BdLmZvbnR8fGEsbltkXVtwXS5mb250U2l6ZXx8MTIpO2NbZF09KHMubGVuZ3RoLzN8MCktbFtkXX10aGlzLmJ1ZmZlci51cGRhdGUocyksdGhpcy50aWNrT2Zmc2V0PWwsdGhpcy50aWNrQ291bnQ9Yyx0aGlzLmxhYmVsT2Zmc2V0PXUsdGhpcy5sYWJlbENvdW50PWh9O3ZhciBwPVswLDAsMF07aC5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0aGlzLnRpY2tDb3VudFt0XSl7dmFyIGE9cDthWzBdPWFbMV09YVsyXT0wLGFbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pfX07dmFyIG09WzAsMCwwXTtoLmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9bSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMubGFiZWxDb3VudFt0XSx0aGlzLmxhYmVsT2Zmc2V0W3RdKSl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL3NoYWRlcnMiOjE1MixfcHJvY2Vzczo0OTYsImdsLWJ1ZmZlciI6MTU2LCJnbC12YW8iOjI3NywidmVjdG9yaXplLXRleHQiOjU2MX1dLDE1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCsiIixuPXIuaW5kZXhPZigiLiIpLGk9MDtuPj0wJiYoaT1yLmxlbmd0aC1uLTEpO3ZhciBhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZCh0KmUqYSkscz1vKyIiO2lmKHMuaW5kZXhPZigiZSIpPj0wKXJldHVybiBzO3ZhciBsPW8vYSxjPW8lYTtvPDA/KGw9MHwtTWF0aC5jZWlsKGwpLGM9MHwtYyk6KGw9MHxNYXRoLmZsb29yKGwpLGN8PTApO3ZhciB1PSIiK2w7aWYobzwwJiYodT0iLSIrdSksaSl7Zm9yKHZhciBmPSIiK2M7Zi5sZW5ndGg8aTspZj0iMCIrZjtyZXR1cm4gdSsiLiIrZn1yZXR1cm4gdX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2Zvcih2YXIgbz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfXIuY3JlYXRlPWksci5lcXVhbD1hfSx7fV0sMTU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfWZ1bmN0aW9uIGkodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPDM7KythKXtmb3IodmFyIG89cCxzPW0sbD0wO2w8MzsrK2wpc1tsXT1vW2xdPXJbbF07c1szXT1vWzNdPTEsc1thXSs9MSxmKHMscyxlKSxzWzNdPDAmJih0W2FdPTEvMCksb1thXS09MSxmKG8sbyxlKSxvWzNdPDAmJih0W2FdPTEvMCk7dmFyIGM9KG9bMF0vb1szXS1zWzBdL3NbM10pKm4sdT0ob1sxXS9vWzNdLXNbMV0vc1szXSkqaTt0W2FdPS4yNSpNYXRoLnNxcnQoYypjK3UqdSl9cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUscixuLGEpe3ZhciBmPWUubW9kZWx8fGgscD1lLnZpZXd8fGgsbT1lLnByb2plY3Rpb258fGgseT10LmJvdW5kcyxhPWF8fGwoZixwLG0seSksYj1hLmF4aXM7YS5lZGdlcztjKGQscCxmKSxjKGQsbSxkKTtmb3IodmFyIHg9dixfPTA7XzwzOysrXyl4W19dLmxvPTEvMCx4W19dLmhpPS0oMS8wKSx4W19dLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgdz1vKHUoZCxkKSk7dShkLGQpO2Zvcih2YXIgTT0wO008MzsrK00pe3ZhciBUPShNKzEpJTMsaz0oTSsyKSUzLEE9Zzt0OmZvcih2YXIgXz0wO188MjsrK18pe3ZhciBFPVtdO2lmKGJbTV08MCE9ISFfKXtBW01dPXlbX11bTV07Zm9yKHZhciBTPTA7UzwyOysrUyl7QVtUXT15W1NeX11bVF07Zm9yKHZhciBMPTA7TDwyOysrTClBW2tdPXlbTF5TXl9dW2tdLEUucHVzaChBLnNsaWNlKCkpfWZvcih2YXIgUz0wO1M8dy5sZW5ndGg7KytTKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPXMucG9zaXRpdmUoRSx3W1NdKX1mb3IodmFyIFM9MDtTPEUubGVuZ3RoOysrUylmb3IodmFyIGs9RVtTXSxDPWkoZyxkLGsscixuKSxMPTA7TDwzOysrTCl4W0xdLmxvPU1hdGgubWluKHhbTF0ubG8sa1tMXSkseFtMXS5oaT1NYXRoLm1heCh4W0xdLmhpLGtbTF0pLEwhPT1NJiYoeFtMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbih4W0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKENbTF0pKSl9fX1yZXR1cm4geH1lLmV4cG9ydHM9YTt2YXIgbz10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIikscz10KCJzcGxpdC1wb2x5Z29uIiksbD10KCIuL2xpYi9jdWJlLmpzIiksYz10KCJnbC1tYXQ0L211bHRpcGx5IiksdT10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGY9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksaD1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksZD1uZXcgRmxvYXQzMkFycmF5KDE2KSxwPVswLDAsMCwxXSxtPVswLDAsMCwxXSx2PVtuZXcgbigxLzAsLSgxLzApLDEvMCksbmV3IG4oMS8wLC0oMS8wKSwxLzApLG5ldyBuKDEvMCwtKDEvMCksMS8wKV0sZz1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjE1MCwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MTMwLCJnbC1tYXQ0L211bHRpcGx5IjoxODcsImdsLW1hdDQvdHJhbnNwb3NlIjoxOTUsImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6MjgzLCJzcGxpdC1wb2x5Z29uIjo1MzV9XSwKMTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmdsPXQsdGhpcy50eXBlPWUsdGhpcy5oYW5kbGU9cix0aGlzLmxlbmd0aD1uLHRoaXMudXNhZ2U9aX1mdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt2YXIgbz1pLmxlbmd0aCppLkJZVEVTX1BFUl9FTEVNRU5UO2lmKGE8MClyZXR1cm4gdC5idWZmZXJEYXRhKGUsaSxuKSxvO2lmKG8rYT5yKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJZiByZXNpemluZyBidWZmZXIsIG11c3Qgbm90IHNwZWNpZnkgb2Zmc2V0Iik7cmV0dXJuIHQuYnVmZmVyU3ViRGF0YShlLGEsaSkscn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPWwubWFsbG9jKHQubGVuZ3RoLGUpLG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpcltpXT10W2ldO3JldHVybiByfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9ZnVuY3Rpb24gcyh0LGUscixpKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLGk9aXx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB0eXBlIGZvciB3ZWJnbCBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkFSUkFZX0JVRkZFUiBvciBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiIpO2lmKGkhPT10LkRZTkFNSUNfRFJBVyYmaSE9PXQuU1RBVElDX0RSQVcmJmkhPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVciKTt2YXIgYT10LmNyZWF0ZUJ1ZmZlcigpLG89bmV3IG4odCxyLGEsMCxpKTtyZXR1cm4gby51cGRhdGUoZSksb312YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5IiksZj1bInVpbnQ4IiwidWludDhfY2xhbXBlZCIsInVpbnQxNiIsInVpbnQzMiIsImludDgiLCJpbnQxNiIsImludDMyIiwiZmxvYXQzMiJdLGg9bi5wcm90b3R5cGU7aC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGgudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxoLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmdm9pZCAwIT09dC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihmLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXtyPWdsLmdldEV4dGVuc2lvbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpJiYidWludDE2IiE9PXI/InVpbnQzMiI6InVpbnQxNiJ9aWYocj09PXQuZHR5cGUmJm8odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWkodGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgbj1sLm1hbGxvYyh0LnNpemUscikscz11KG4sdC5zaGFwZSk7Yy5hc3NpZ24ocyx0KSx0aGlzLmxlbmd0aD1lPDA/aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLG4sZSk6aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLG4uc3ViYXJyYXkoMCx0LnNpemUpLGUpLGwuZnJlZShuKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaDtoPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/YSh0LCJ1aW50MTYiKTphKHQsImZsb2F0MzIiKSx0aGlzLmxlbmd0aD1lPDA/aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGgsZSk6aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGguc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbC5mcmVlKGgpfWVsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWkodGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZSIpO2lmKGU+PTApdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlciIpO3R8PTAsdDw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1zfSx7bmRhcnJheTo0NzYsIm5kYXJyYXktb3BzIjo0NzAsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMTU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNGUzOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLzEuMC9udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfX0seyIuLzEuMC9udW1iZXJzIjoxNTd9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVySGk9cix0aGlzLmJ1ZmZlckxvPW4sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0sdGhpcy5udW1Qb2ludHM9MCx0aGlzLmNvbG9yPVswLDAsMCwxXX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9YSh0LmdsLGwudmVydGV4LGwuZnJhZ21lbnQpLGk9byh0LmdsKSxzPW8odC5nbCksYz1uZXcgbih0LHIsaSxzKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPYmplY3QoYyksY312YXIgYT10KCJnbC1zaGFkZXIiKSxvPXQoImdsLWJ1ZmZlciIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCIuL2xpYi9zaGFkZXJzIik7ZS5leHBvcnRzPWk7dmFyIGM9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXSx1PW4ucHJvdG90eXBlO3UuZHJhdz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLGU9bmV3IEZsb2F0MzJBcnJheShbMCwwXSkscj1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxuPW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLGk9WzEsMV07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIscz10aGlzLmJvdW5kcyxsPXRoaXMubnVtUG9pbnRzO2lmKGwpe3ZhciB1PWEuZ2wsZj1hLmRhdGFCb3gsaD1hLnZpZXdCb3gsZD1hLnBpeGVsUmF0aW8scD1zWzJdLXNbMF0sbT1zWzNdLXNbMV0sdj1mWzJdLWZbMF0sZz1mWzNdLWZbMV0seT0yKnAvdixiPTIqbS9nLHg9KHNbMF0tZlswXS0uNSp2KS9wLF89KHNbMV0tZlsxXS0uNSpnKS9tO3RbMF09eSx0WzFdPWIsZVswXT15LXRbMF0sZVsxXT1iLXRbMV0sclswXT14LHJbMV09XyxuWzBdPXgtclswXSxuWzFdPV8tclsxXTt2YXIgdz1oWzJdLWhbMF0sTT1oWzNdLWhbMV07aVswXT0yKmQvdyxpWzFdPTIqZC9NLG8uYmluZCgpLG8udW5pZm9ybXMuc2NhbGVIaT10LG8udW5pZm9ybXMuc2NhbGVMbz1lLG8udW5pZm9ybXMudHJhbnNsYXRlSGk9cixvLnVuaWZvcm1zLnRyYW5zbGF0ZUxvPW4sby51bmlmb3Jtcy5waXhlbFNjYWxlPWksby51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLHRoaXMuYnVmZmVyTG8uYmluZCgpLG8uYXR0cmlidXRlcy5wb3NpdGlvbkxvLnBvaW50ZXIodS5GTE9BVCwhMSwxNiwwKSx0aGlzLmJ1ZmZlckhpLmJpbmQoKSxvLmF0dHJpYnV0ZXMucG9zaXRpb25IaS5wb2ludGVyKHUuRkxPQVQsITEsMTYsMCksby5hdHRyaWJ1dGVzLnBpeGVsT2Zmc2V0LnBvaW50ZXIodS5GTE9BVCwhMSwxNiw4KSx1LmRyYXdBcnJheXModS5UUklBTkdMRVMsMCxsKmMubGVuZ3RoKX19fSgpLHUuZHJhd1BpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHUucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlLHIsbixpPXQucG9zaXRpb25zfHxbXSxhPXQuZXJyb3JzfHxbXSxvPTE7ImxpbmVXaWR0aCJpbiB0JiYobz0rdC5saW5lV2lkdGgpO3ZhciBsPTU7ImNhcFNpemUiaW4gdCYmKGw9K3QuY2FwU2l6ZSksdGhpcy5jb2xvcj0odC5jb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpO3ZhciB1PXRoaXMuYm91bmRzPVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLGY9dGhpcy5udW1Qb2ludHM9aS5sZW5ndGg+PjE7Zm9yKGU9MDtlPGY7KytlKXI9aVsyKmVdLG49aVsyKmUrMV0sdVswXT1NYXRoLm1pbihyLHVbMF0pLHVbMV09TWF0aC5taW4obix1WzFdKSx1WzJdPU1hdGgubWF4KHIsdVsyXSksdVszXT1NYXRoLm1heChuLHVbM10pO3VbMl09PT11WzBdJiYodVsyXSs9MSksdVszXT09PXVbMV0mJih1WzNdKz0xKTt2YXIgaD0xLyh1WzJdLXVbMF0pLGQ9MS8odVszXS11WzFdKSxwPXVbMF0sbT11WzFdLHY9cy5tYWxsb2NGbG9hdDY0KGYqYy5sZW5ndGgqNCksZz1zLm1hbGxvY0Zsb2F0MzIoZipjLmxlbmd0aCo0KSx5PXMubWFsbG9jRmxvYXQzMihmKmMubGVuZ3RoKjQpLGI9MDtmb3IoZT0wO2U8ZjsrK2Upe3I9aVsyKmVdLG49aVsyKmUrMV07Zm9yKHZhciB4PWFbNCplXSxfPWFbNCplKzFdLHc9YVs0KmUrMl0sTT1hWzQqZSszXSxUPTA7VDxjLmxlbmd0aDsrK1Qpe3ZhciBrPWNbVF0sQT1rWzBdLEU9a1sxXTtBPDA/QSo9eDpBPjAmJihBKj1fKSxFPDA/RSo9dzpFPjAmJihFKj1NKSx2W2IrK109aCooci1wK0EpLHZbYisrXT1kKihuLW0rRSksdltiKytdPW8qa1syXSsobCtvKSprWzRdLHZbYisrXT1vKmtbM10rKGwrbykqa1s1XX19Zm9yKGU9MDtlPHYubGVuZ3RoO2UrKylnW2VdPXZbZV0seVtlXT12W2VdLWdbZV07dGhpcy5idWZmZXJIaS51cGRhdGUoZyksdGhpcy5idWZmZXJMby51cGRhdGUoeSkscy5mcmVlKHYpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckhpLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckxvLmRpc3Bvc2UoKX19LHsiLi9saWIvc2hhZGVycyI6MTYwLCJnbC1idWZmZXIiOjE1NiwiZ2wtc2hhZGVyIjoyNjEsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMTYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXt2ZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGk7XG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbkxvO1xuYXR0cmlidXRlIHZlYzIgcGl4ZWxPZmZzZXQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8sIHBpeGVsU2NhbGU7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHNjclBvc2l0aW9uID0gdmVjMyhcbiAgICAgICAgIHByb2plY3Qoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvKSxcbiAgICAgICAgIDEpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgc2NyUG9zaXRpb24ueHkgKyBzY3JQb3NpdGlvbi56ICogcGl4ZWxTY2FsZSAqIHBpeGVsT2Zmc2V0LFxuICAgIDAsXG4gICAgc2NyUG9zaXRpb24ueik7XG59XG4iLGZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGNvbG9yLmEsIGNvbG9yLmEpO1xufVxuIn19LHt9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9bix0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sdGhpcy5jbGlwQm91bmRzPVtbLSgxLzApLC0oMS8wKSwtKDEvMCldLFsxLzAsMS8wLDEvMF1dLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5jYXBTaXplPVsxMCwxMCwxMF0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXSx0aGlzLmxpbmVPZmZzZXQ9WzAsMCwwXSx0aGlzLm9wYWNpdHk9MX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWZ1bmN0aW9uIGEodCxlLHIsbil7Zm9yKHZhciBpPWhbbl0sYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdO3QucHVzaChlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxyWzNdLG9bMF0sb1sxXSxvWzJdKX1yZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmdsLHI9cyhlKSxpPWwoZSxbe2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6NCxvZmZzZXQ6MTIsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6Mjgsc3RyaWRlOjQwfV0pLGE9YyhlKTthLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxhLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxhLmF0dHJpYnV0ZXMub2Zmc2V0LmxvY2F0aW9uPTI7dmFyIG89bmV3IG4oZSxyLGksYSk7cmV0dXJuIG8udXBkYXRlKHQpLG99ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtYnVmZmVyIiksbD10KCJnbC12YW8iKSxjPXQoIi4vc2hhZGVycy9pbmRleCIpLHU9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGY9bi5wcm90b3R5cGU7Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LGYuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sZi5kcmF3VHJhbnNwYXJlbnQ9Zi5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8dSxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fHU7ci5tb2RlbD10Lm1vZGVsfHx1LHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxvPW5bMTNdLHM9blsxNF0sbD1uWzE1XSxjPXRoaXMucGl4ZWxSYXRpbyooaVszXSphK2lbN10qbytpWzExXSpzK2lbMTVdKmwpL2UuZHJhd2luZ0J1ZmZlckhlaWdodDt0aGlzLnZhby5iaW5kKCk7Zm9yKHZhciBmPTA7ZjwzOysrZillLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aFtmXSksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSpjLHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9KG4rZSklMyxvPVswLDAsMF07b1thXT1pLHIucHVzaChvKX10W2VdPXJ9cmV0dXJuIHR9KCk7Zi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KTt2YXIgZT10LmNvbG9yfHxbWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLHI9dC5wb3NpdGlvbixuPXQuZXJyb3I7aWYoQXJyYXkuaXNBcnJheShlWzBdKXx8KGU9W2UsZSxlXSksciYmbil7dmFyIG89W10scz1yLmxlbmd0aCxsPTA7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7KytjKXt0aGlzLmxpbmVPZmZzZXRbY109bDt0OmZvcih2YXIgdT0wO3U8czsrK3Upe2Zvcih2YXIgZj1yW3VdLGg9MDtoPDM7KytoKWlmKGlzTmFOKGZbaF0pfHwhaXNGaW5pdGUoZltoXSkpY29udGludWUgdDt2YXIgZD1uW3VdLHA9ZVtjXTtpZihBcnJheS5pc0FycmF5KHBbMF0pJiYocD1lW3VdKSwzPT09cC5sZW5ndGgmJihwPVtwWzBdLHBbMV0scFsyXSwxXSksIWlzTmFOKGRbMF1bY10pJiYhaXNOYU4oZFsxXVtjXSkpe2lmKGRbMF1bY108MCl7dmFyIG09Zi5zbGljZSgpO21bY10rPWRbMF1bY10sby5wdXNoKGZbMF0sZlsxXSxmWzJdLHBbMF0scFsxXSxwWzJdLHBbM10sMCwwLDAsbVswXSxtWzFdLG1bMl0scFswXSxwWzFdLHBbMl0scFszXSwwLDAsMCksaSh0aGlzLmJvdW5kcyxtKSxsKz0yK2EobyxtLHAsYyl9aWYoZFsxXVtjXT4wKXt2YXIgbT1mLnNsaWNlKCk7bVtjXSs9ZFsxXVtjXSxvLnB1c2goZlswXSxmWzFdLGZbMl0scFswXSxwWzFdLHBbMl0scFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxwWzBdLHBbMV0scFsyXSxwWzNdLDAsMCwwKSxpKHRoaXMuYm91bmRzLG0pLGwrPTIrYShvLG0scCxjKX19fXRoaXMubGluZUNvdW50W2NdPWwtdGhpcy5saW5lT2Zmc2V0W2NdfXRoaXMuYnVmZmVyLnVwZGF0ZShvKX19LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjE2NywiZ2wtYnVmZmVyIjoxNTYsImdsLXZhbyI6MTY1fV0sMTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXMiKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIGE9cltpXTtpZihhLmJ1ZmZlcil7dmFyIG89YS5idWZmZXIscz1hLnNpemV8fDQsbD1hLnR5cGV8fHQuRkxPQVQsYz0hIWEubm9ybWFsaXplZCx1PWEuc3RyaWRlfHwwLGY9YS5vZmZzZXR8fDA7by5iaW5kKCksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxzLGwsYyx1LGYpfWVsc2V7aWYoIm51bWJlciI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogSW52YWxpZCB2ZXJ0ZXggYXR0cmlidXRlIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZXt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19ZS5leHBvcnRzPW59LHt9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi9kby1iaW5kLmpzIik7bi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe2EodGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sbi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1pfSx7Ii4vZG8tYmluZC5qcyI6MTYyfV0sMTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgaSh0LGUsZS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKX12YXIgbz10KCIuL2RvLWJpbmQuanMiKTtuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0saS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbyh0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBhPXRbaV07Im51bWJlciI9PXR5cGVvZiBhP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLDEsYSkpOkFycmF5LmlzQXJyYXkoYSkmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLGEubGVuZ3RoLGFbMF0sYVsxXSxhWzJdLGFbM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWF9LHsiLi9kby1iaW5kLmpzIjoxNjJ9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBuKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybiBzPWw/YSh0LGwpOm8odCkscy51cGRhdGUoZSxyLGkpLHN9dmFyIGE9dCgiLi9saWIvdmFvLW5hdGl2ZS5qcyIpLG89dCgiLi9saWIvdmFvLWVtdWxhdGVkLmpzIik7ZS5leHBvcnRzPWl9LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjoxNjMsIi4vbGliL3Zhby1uYXRpdmUuanMiOjE2NH1dLDE2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGNhcFNpemU7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB3b3JsZFBvc2l0aW9uICAgICAgID0gKHdvcmxkUG9zaXRpb24gLyB3b3JsZFBvc2l0aW9uLncpICsgdmVjNChjYXBTaXplICogb2Zmc2V0LCAwLjApO1xuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XG4gIGZyYWdQb3NpdGlvbiAgICAgICAgPSBwb3NpdGlvbjtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZnJhZ1Bvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKGZyYWdQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6Im9mZnNldCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MjYxLGdsc2xpZnk6MTY2fV0sMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiBpKHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTt5PW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7eVtuXT1pfX1mdW5jdGlvbiBvKHQpe3N3aXRjaCh0KXtjYXNlIHA6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBtOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIHY6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2UgZzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhKXtpZighbilyZXR1cm4gbnVsbDt2YXIgbz1kKHQsZSxyLGksbik7cmV0dXJuIG8ubWFnRmlsdGVyPXQuTkVBUkVTVCxvLm1pbkZpbHRlcj10Lk5FQVJFU1Qsby5taXBTYW1wbGVzPTEsby5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLGEsdC5URVhUVVJFXzJELG8uaGFuZGxlLDApLG99ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gYyh0KXt2YXIgZT1uKHQuZ2wpLHI9dC5nbCxhPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSxjPXQuX3NoYXBlWzBdLHU9dC5fc2hhcGVbMV0sZj10LmNvbG9yLmxlbmd0aCxoPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwscD10Ll91c2VEZXB0aCxtPXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLGEpO2Zvcih2YXIgdj0wO3Y8ZjsrK3YpdC5jb2xvclt2XT1zKHIsYyx1LG0sci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArdik7MD09PWY/KHQuX2NvbG9yX3JiPWwocixjLHUsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxoJiZoLmRyYXdCdWZmZXJzV0VCR0woeVswXSkpOmY+MSYmaC5kcmF3QnVmZmVyc1dFQkdMKHlbZl0pO3ZhciBnPXIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7Zz9kP3QuZGVwdGg9cyhyLGMsdSxnLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6cCYmKHQuZGVwdGg9cyhyLGMsdSxyLlVOU0lHTkVEX1NIT1JULHIuREVQVEhfQ09NUE9ORU5ULHIuREVQVEhfQVRUQUNITUVOVCkpOnAmJmQ/dC5fZGVwdGhfcmI9bChyLGMsdSxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOnA/dC5fZGVwdGhfcmI9bChyLGMsdSxyLkRFUFRIX0NPTVBPTkVOVDE2LHIuREVQVEhfQVRUQUNITUVOVCk6ZCYmKHQuX2RlcHRoX3JiPWwocixjLHUsci5TVEVOQ0lMX0lOREVYLHIuU1RFTkNJTF9BVFRBQ0hNRU5UKSk7dmFyIGI9ci5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHIuRlJBTUVCVUZGRVIpO2lmKGIhPT1yLkZSQU1FQlVGRkVSX0NPTVBMRVRFKXt0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpO2Zvcih2YXIgdj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSxpKHIsZSksbyhiKX1pKHIsZSl9ZnVuY3Rpb24gdSh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgbD0wO2w8aTsrK2wpdGhpcy5jb2xvcltsXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIHU9dGhpcyxmPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhmLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHUuaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPWYsYyh0aGlzKX1mdW5jdGlvbiBmKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBhPXQuZ2wscz1hLmdldFBhcmFtZXRlcihhLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnN8fHI8MHx8cj5zKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBsPW4oYSksYz0wO2M8dC5jb2xvci5sZW5ndGg7KytjKXQuY29sb3JbY10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihhLmJpbmRSZW5kZXJidWZmZXIoYS5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYoYS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmYS5yZW5kZXJidWZmZXJTdG9yYWdlKGEuUkVOREVSQlVGRkVSLGEuU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciB1PWEuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhhLkZSQU1FQlVGRkVSKTt1IT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLGkoYSxsKSxvKHUpKSxpKGEsbCl9fWZ1bmN0aW9uIGgodCxlLHIsbil7cHx8KHA9dC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCxtPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5ULHY9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMsZz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UKTt2YXIgaT10LmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZmZXJzIik7aWYoIXkmJmkmJmEodCxpKSxBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKSwibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIG89dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5vfHxyPDB8fHI+byl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTtuPW58fHt9O3ZhciBzPTE7aWYoImNvbG9yImluIG4pe2lmKChzPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVzdCBzcGVjaWZ5IGEgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIGNvbG9ycyIpO2lmKHM+MSl7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7aWYocz50LmdldFBhcmFtZXRlcihpLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAiK3MrIiBkcmF3IGJ1ZmZlcnMiKX19dmFyIGw9dC5VTlNJR05FRF9CWVRFLGM9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iik7aWYobi5mbG9hdCYmcz4wKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzIik7bD10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmcz4wJiZjJiYobD10LkZMT0FUKTt2YXIgZj0hMDsiZGVwdGgiaW4gbiYmKGY9ISFuLmRlcHRoKTt2YXIgaD0hMTtyZXR1cm4ic3RlbmNpbCJpbiBuJiYoaD0hIW4uc3RlbmNpbCksbmV3IHUodCxlLHIsbCxzLGYsaCxpKX12YXIgZD10KCJnbC10ZXh0dXJlMmQiKTtlLmV4cG9ydHM9aDt2YXIgcCxtLHYsZyx5PW51bGwsYj11LnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMiIpO3ZhciBlPTB8dFswXSxyPTB8dFsxXTtyZXR1cm4gZih0aGlzLGUsciksW2Uscl19LGVudW1lcmFibGU6ITF9LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxmKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxmKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxiLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGIuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjoyNzN9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49byhlKXx8Im9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKSIsbD0idW5rbm93biB0eXBlIjt2b2lkIDAhPT1yJiYobD1yPT09YS5GUkFHTUVOVF9TSEFERVI/ImZyYWdtZW50IjoidmVydGV4Iik7Zm9yKHZhciBjPWkoIkVycm9yIGNvbXBpbGluZyAlcyBzaGFkZXIgJXM6XG4iLGwsbiksdT1pKCIlcyVzIixjLHQpLGY9dC5zcGxpdCgiXG4iKSxoPXt9LGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtpZigiIiE9PXApe3ZhciBtPXBhcnNlSW50KHAuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4obSkpdGhyb3cgbmV3IEVycm9yKGkoIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLHApKTtoW21dPXB9fWZvcih2YXIgdj1zKGUpLnNwbGl0KCJcbiIpLGQ9MDtkPHYubGVuZ3RoO2QrKylpZihoW2QrM118fGhbZCsyXXx8aFtkKzFdKXt2YXIgZz12W2RdO2lmKGMrPWcrIlxuIixoW2QrMV0pe3ZhciB5PWhbZCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPWkoIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19dmFyIGk9dCgic3ByaW50Zi1qcyIpLnNwcmludGYsYT10KCJnbC1jb25zdGFudHMvbG9va3VwIiksbz10KCJnbHNsLXNoYWRlci1uYW1lIikscz10KCJhZGQtbGluZS1udW1iZXJzIik7ZS5leHBvcnRzPW59LHsiYWRkLWxpbmUtbnVtYmVycyI6NDEsImdsLWNvbnN0YW50cy9sb29rdXAiOjE1OCwiZ2xzbC1zaGFkZXItbmFtZSI6Mjg1LCJzcHJpbnRmLWpzIjo1MzZ9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0sdGhpcy5waWNrT2Zmc2V0PTB9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1sKHIsdS52ZXJ0ZXgsdS5mcmFnbWVudCksYT1sKHIsdS5waWNrVmVydGV4LHUucGlja0ZyYWdtZW50KSxvPWMocikscz1jKHIpLGY9YyhyKSxoPWMociksZD1uZXcgbih0LGksYSxvLHMsZixoKTtyZXR1cm4gZC51cGRhdGUoZSksdC5hZGRPYmplY3QoZCksZH1lLmV4cG9ydHM9aTt2YXIgYT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLG89dCgiaW90YS1hcnJheSIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCJnbC1zaGFkZXIiKSxjPXQoImdsLWJ1ZmZlciIpLHU9dCgiLi9saWIvc2hhZGVycyIpLGY9bi5wcm90b3R5cGUsaD1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2YuZHJhdz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLmJvdW5kcyxpPXRoaXMubnVtVmVydGljZXM7aWYoIShpPD0wKSl7dmFyIGE9ZS5nbCxvPWUuZGF0YUJveCxzPW5bMl0tblswXSxsPW5bM10tblsxXSxjPW9bMl0tb1swXSx1PW9bM10tb1sxXTt0WzBdPTIqcy9jLHRbNF09MipsL3UsdFs2XT0yKihuWzBdLW9bMF0pL2MtMSx0WzddPTIqKG5bMV0tb1sxXSkvdS0xLHIuYmluZCgpO3ZhciBmPXIudW5pZm9ybXM7Zi52aWV3VHJhbnNmb3JtPXQsZi5zaGFwZT10aGlzLnNoYXBlO3ZhciBoPXIuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxoLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksaC53ZWlnaHQucG9pbnRlcihhLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGguY29sb3IucG9pbnRlcihhLlVOU0lHTkVEX0JZVEUsITApLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUywwLGkpfX19KCksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwLDAsMF07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMucGlja1NoYWRlcixhPXRoaXMuYm91bmRzLG89dGhpcy5udW1WZXJ0aWNlcztpZighKG88PTApKXt2YXIgcz1uLmdsLGw9bi5kYXRhQm94LGM9YVsyXS1hWzBdLHU9YVszXS1hWzFdLGY9bFsyXS1sWzBdLGg9bFszXS1sWzFdO3RbMF09MipjL2YsdFs0XT0yKnUvaCx0WzZdPTIqKGFbMF0tbFswXSkvZi0xLHRbN109MiooYVsxXS1sWzFdKS9oLTE7Zm9yKHZhciBkPTA7ZDw0OysrZCllW2RdPXI+PjgqZCYyNTU7dGhpcy5waWNrT2Zmc2V0PXIsaS5iaW5kKCk7dmFyIHA9aS51bmlmb3JtcztwLnZpZXdUcmFuc2Zvcm09dCxwLnBpY2tPZmZzZXQ9ZSxwLnNoYXBlPXRoaXMuc2hhcGU7dmFyIG09aS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxtLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksbS53ZWlnaHQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuaWRCdWZmZXIuYmluZCgpLG0ucGlja0lkLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsMCxvKSxyK3RoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdO2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMueERhdGEscz10aGlzLnlEYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvW2EldGhpcy5zaGFwZVswXV0sc1thL3RoaXMuc2hhcGVbMF18MF1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10LnNoYXBlfHxbMCwwXSxyPXQueHx8byhlWzBdKSxuPXQueXx8byhlWzFdKSxpPXQuenx8bmV3IEZsb2F0MzJBcnJheShlWzBdKmVbMV0pO3RoaXMueERhdGE9cix0aGlzLnlEYXRhPW47dmFyIGw9dC5jb2xvckxldmVsc3x8WzBdLGM9dC5jb2xvclZhbHVlc3x8WzAsMCwwLDFdLHU9bC5sZW5ndGgsZj10aGlzLmJvdW5kcyxkPWZbMF09clswXSxwPWZbMV09blswXSxtPWZbMl09cltyLmxlbmd0aC0xXSx2PWZbM109bltuLmxlbmd0aC0xXSxnPTEvKG0tZCkseT0xLyh2LXApLGI9ZVswXSx4PWVbMV07dGhpcy5zaGFwZT1bYix4XTt2YXIgXz0oYi0xKSooeC0xKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPV87Zm9yKHZhciB3PXMubWFsbG9jVWludDgoNCpfKSxNPXMubWFsbG9jRmxvYXQzMigyKl8pLFQ9cy5tYWxsb2NVaW50OCgyKl8pLGs9cy5tYWxsb2NVaW50MzIoXyksQT0wLEU9MDtFPHgtMTsrK0UpZm9yKHZhciBTPXkqKG5bRV0tcCksTD15KihuW0UrMV0tcCksQz0wO0M8Yi0xOysrQylmb3IodmFyIEk9ZyoocltDXS1kKSxEPWcqKHJbQysxXS1kKSxQPTA7UDxoLmxlbmd0aDtQKz0yKXt2YXIgeixPLFIsRixqPWhbUF0sTj1oW1ArMV0sQj0oRStOKSpiKyhDK2opLFU9aVtCXSxWPWEubGUobCxVKTtpZihWPDApej1jWzBdLE89Y1sxXSxSPWNbMl0sRj1jWzNdO2Vsc2UgaWYoVj09PXUtMSl6PWNbNCp1LTRdLE89Y1s0KnUtM10sUj1jWzQqdS0yXSxGPWNbNCp1LTFdO2Vsc2V7dmFyIEg9KFUtbFtWXSkvKGxbVisxXS1sW1ZdKSxxPTEtSCxHPTQqVixZPTQqKFYrMSk7ej1xKmNbR10rSCpjW1ldLE89cSpjW0crMV0rSCpjW1krMV0sUj1xKmNbRysyXStIKmNbWSsyXSxGPXEqY1tHKzNdK0gqY1tZKzNdfXdbNCpBXT0yNTUqeix3WzQqQSsxXT0yNTUqTyx3WzQqQSsyXT0yNTUqUix3WzQqQSszXT0yNTUqRixNWzIqQV09LjUqSSsuNSpELE1bMipBKzFdPS41KlMrLjUqTCxUWzIqQV09aixUWzIqQSsxXT1OLGtbQV09RSpiK0MsQSs9MX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShNKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoVCksCnRoaXMuY29sb3JCdWZmZXIudXBkYXRlKHcpLHRoaXMuaWRCdWZmZXIudXBkYXRlKGspLHMuZnJlZShNKSxzLmZyZWUodykscy5mcmVlKFQpLHMuZnJlZShrKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlci5kaXNwb3NlKCksdGhpcy53ZWlnaHRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjE3MSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjE3MiwiZ2wtYnVmZmVyIjoxNTYsImdsLXNoYWRlciI6MjYxLCJpb3RhLWFycmF5IjozMDAsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZnJhZ21lbnQ6InByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iLHZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHZQb3NpdGlvbi54eSwgMCwgdlBvc2l0aW9uLnopO1xufVxuIixwaWNrRnJhZ21lbnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiIscGlja1ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4ifX0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4NF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjg0fV0sMTczOltmdW5jdGlvbih0LGUscil7ci5saW5lVmVydGV4PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhSGksIGFMbywgZEhpLCBkTG87XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmFyeWluZyB2ZWMyIGRpcmVjdGlvbjtcblxuXG52ZWMyIHByb2plY3RfMV8wKHZlYzIgc2NIaSwgdmVjMiB0ckhpLCB2ZWMyIHNjTG8sIHZlYzIgdHJMbywgdmVjMiBwb3NIaSwgdmVjMiBwb3NMbykge1xuICByZXR1cm4gKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvO1xufVxuXG5cbnZlYzIgcHJvamVjdF8yXzEodmVjMiBzY0hpLCB2ZWMyIHNjTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIHNjSGkgKiBwb3NIaVxuICAgICAgICsgc2NMbyAqIHBvc0hpXG4gICAgICAgKyBzY0hpICogcG9zTG9cbiAgICAgICArIHNjTG8gKiBwb3NMbztcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHAgPSBwcm9qZWN0XzFfMChzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIGFIaSwgYUxvKTtcbiAgdmVjMiBkaXIgPSBwcm9qZWN0XzJfMShzY2FsZUhpLCBzY2FsZUxvLCBkSGksIGRMbyk7XG4gIHZlYzIgbiA9IDAuNSAqIHdpZHRoICogbm9ybWFsaXplKHNjcmVlblNoYXBlLnl4ICogdmVjMihkaXIueSwgLWRpci54KSkgLyBzY3JlZW5TaGFwZS54eTtcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKHNjcmVlblNoYXBlLnh5ICogZGlyKTtcbiAgaWYoZGlyLnggPCAwLjAgfHwgKGRpci54ID09IDAuMCAmJiBkaXIueSA8IDAuMCkpIHtcbiAgICBkaXJlY3Rpb24gPSAtdGFuZ2VudDtcbiAgfSBlbHNlIHtcbiAgICBkaXJlY3Rpb24gPSB0YW5nZW50O1xuICB9XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwICsgbiwgMC4wLCAxLjApO1xufSIsci5saW5lRnJhZ21lbnQ9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xudW5pZm9ybSBmbG9hdCBkYXNoTGVuZ3RoO1xuXG52YXJ5aW5nIHZlYzIgZGlyZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHQgPSBmcmFjdChkb3QoZGlyZWN0aW9uLCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaExlbmd0aCk7XG4gIHZlYzQgcGNvbG9yID0gY29sb3IgKiB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgMC4wKSkucjtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwY29sb3IucmdiICogcGNvbG9yLmEsIHBjb2xvci5hKTtcbn0iLHIubWl0cmVWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFIaSwgYUxvO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cblxudmVjMiBwcm9qZWN0XzFfMCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcCA9IHByb2plY3RfMV8wKHNjYWxlSGksIHRyYW5zbGF0ZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVMbywgYUhpLCBhTG8pO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocCwgMC4wLCAxLjApO1xuICBnbF9Qb2ludFNpemUgPSByYWRpdXM7XG59IixyLm1pdHJlRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGxlbmd0aChnbF9Qb2ludENvb3JkLnh5IC0gMC41KSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiLCBjb2xvci5hKTtcbn0iLHIucGlja1ZlcnRleD0icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUhpLCBhTG8sIGRIaTtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2swLCBwaWNrMTtcblxudW5pZm9ybSB2ZWMyIHNjYWxlSGksIHRyYW5zbGF0ZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVMbywgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IHdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgcGlja0EsIHBpY2tCO1xuXG5cbnZlYzIgcHJvamVjdF8xXzAodmVjMiBzY0hpLCB2ZWMyIHRySGksIHZlYzIgc2NMbywgdmVjMiB0ckxvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiAocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NIaVxuICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG87XG59XG5cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHAgPSBwcm9qZWN0XzFfMChzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIGFIaSwgYUxvKTtcbiAgdmVjMiBuID0gd2lkdGggKiBub3JtYWxpemUoc2NyZWVuU2hhcGUueXggKiB2ZWMyKGRIaS55LCAtZEhpLngpKSAvIHNjcmVlblNoYXBlLnh5O1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocCArIG4sIDAsIDEpO1xuICBwaWNrQSA9IHBpY2swO1xuICBwaWNrQiA9IHBpY2sxO1xufSIsci5waWNrRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBwaWNrQSwgcGlja0I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBmcmFnSWQgPSB2ZWM0KHBpY2tBLnh5eiwgMC4wKTtcbiAgaWYocGlja0IudyA+IHBpY2tBLncpIHtcbiAgICBmcmFnSWQueHl6ID0gcGlja0IueHl6O1xuICB9XG5cbiAgZnJhZ0lkICs9IHBpY2tPZmZzZXQ7XG5cbiAgZnJhZ0lkLnkgKz0gZmxvb3IoZnJhZ0lkLnggLyAyNTYuMCk7XG4gIGZyYWdJZC54IC09IGZsb29yKGZyYWdJZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLnogKz0gZmxvb3IoZnJhZ0lkLnkgLyAyNTYuMCk7XG4gIGZyYWdJZC55IC09IGZsb29yKGZyYWdJZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkLncgKz0gZmxvb3IoZnJhZ0lkLnogLyAyNTYuMCk7XG4gIGZyYWdJZC56IC09IGZsb29yKGZyYWdJZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59IixyLmZpbGxWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFIaSwgYUxvLCBkSGk7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIHByb2plY3RBeGlzO1xudW5pZm9ybSBmbG9hdCBwcm9qZWN0VmFsdWUsIGRlcHRoO1xuXG5cbnZlYzIgcHJvamVjdF8xXzAodmVjMiBzY0hpLCB2ZWMyIHRySGksIHZlYzIgc2NMbywgdmVjMiB0ckxvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiAocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NIaVxuICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG87XG59XG5cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHAgPSBwcm9qZWN0XzFfMChzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIGFIaSwgYUxvKTtcbiAgaWYoZEhpLnkgPCAwLjAgfHwgKGRIaS55ID09IDAuMCAmJiBkSGkueCA8IDAuMCkpIHtcbiAgICBpZihkb3QocCwgcHJvamVjdEF4aXMpIDwgcHJvamVjdFZhbHVlKSB7XG4gICAgICBwID0gcCAqICgxLjAgLSBhYnMocHJvamVjdEF4aXMpKSArIHByb2plY3RBeGlzICogcHJvamVjdFZhbHVlO1xuICAgIH1cbiAgfVxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocCwgZGVwdGgsIDEpO1xufSIsci5maWxsRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogY29sb3IuYSwgY29sb3IuYSk7XG59In0se31dLDE3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsKXt0aGlzLnBsb3Q9dCx0aGlzLmRhc2hQYXR0ZXJuPWUsdGhpcy5saW5lQnVmZmVySGk9cix0aGlzLmxpbmVCdWZmZXJMbz1uLHRoaXMucGlja0J1ZmZlcj1pLHRoaXMubGluZVNoYWRlcj1hLHRoaXMubWl0cmVTaGFkZXI9byx0aGlzLmZpbGxTaGFkZXI9cyx0aGlzLnBpY2tTaGFkZXI9bCx0aGlzLnVzaW5nRGFzaGVzPSExLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMud2lkdGg9MSx0aGlzLmNvbG9yPVswLDAsMSwxXSx0aGlzLmZpbGw9WyExLCExLCExLCExXSx0aGlzLmZpbGxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRhdGE9bnVsbCx0aGlzLm51bVBvaW50cz0wLHRoaXMudmVydENvdW50PTAsdGhpcy5waWNrT2Zmc2V0PTB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmdsLGk9cyhyKSxhPXMociksYz1zKHIpLHU9bChyLFsxLDFdKSxoPW8ocixmLmxpbmVWZXJ0ZXgsZi5saW5lRnJhZ21lbnQpLGQ9byhyLGYubWl0cmVWZXJ0ZXgsZi5taXRyZUZyYWdtZW50KSxwPW8ocixmLmZpbGxWZXJ0ZXgsZi5maWxsRnJhZ21lbnQpLG09byhyLGYucGlja1ZlcnRleCxmLnBpY2tGcmFnbWVudCksdj1uZXcgbih0LHUsaSxhLGMsaCxkLHAsbSk7cmV0dXJuIHQuYWRkT2JqZWN0KHYpLHYudXBkYXRlKGUpLHZ9ZS5leHBvcnRzPWE7dmFyIG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoImdsLXRleHR1cmUyZCIpLGM9dCgibmRhcnJheSIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksZj10KCIuL2xpYi9zaGFkZXJzIiksaD1uLnByb3RvdHlwZTtoLnNldFByb2plY3Rpb25Nb2RlbD1mdW5jdGlvbigpe3ZhciB0PXtzY2FsZUhpOm5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLHNjYWxlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlSGk6bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksc2NyZWVuU2hhcGU6WzAsMF19O3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuYm91bmRzLHI9dGhpcy5wbG90LnZpZXdCb3gsbj10aGlzLnBsb3QuZGF0YUJveCxpPWVbMl0tZVswXSxhPWVbM10tZVsxXSxvPW5bMl0tblswXSxzPW5bM10tblsxXSxsPXJbMl0tclswXSxjPXJbM10tclsxXSx1PTIqaS9vLGY9MiphL3MsaD0oZVswXS1uWzBdLS41Km8pL2ksZD0oZVsxXS1uWzFdLS41KnMpL2E7cmV0dXJuIHQuc2NhbGVIaVswXT11LHQuc2NhbGVIaVsxXT1mLHQuc2NhbGVMb1swXT11LXQuc2NhbGVIaVswXSx0LnNjYWxlTG9bMV09Zi10LnNjYWxlSGlbMV0sdC50cmFuc2xhdGVIaVswXT1oLHQudHJhbnNsYXRlSGlbMV09ZCx0LnRyYW5zbGF0ZUxvWzBdPWgtdC50cmFuc2xhdGVIaVswXSx0LnRyYW5zbGF0ZUxvWzFdPWQtdC50cmFuc2xhdGVIaVsxXSx0LnNjcmVlblNoYXBlWzBdPWwsdC5zY3JlZW5TaGFwZVsxXT1jLHR9fSgpLGguc2V0UHJvamVjdGlvblVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dC5zY2FsZUhpPWUuc2NhbGVIaSx0LnNjYWxlTG89ZS5zY2FsZUxvLHQudHJhbnNsYXRlSGk9ZS50cmFuc2xhdGVIaSx0LnRyYW5zbGF0ZUxvPWUudHJhbnNsYXRlTG8sdC5zY3JlZW5TaGFwZT1lLnNjcmVlblNoYXBlfSxoLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwXSxlPVstMSwwXSxyPVswLDFdLG49WzAsLTFdO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMudmVydENvdW50O2lmKGkpe3ZhciBhPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksbz10aGlzLnBsb3Qscz10aGlzLndpZHRoLGw9by5nbCxjPW8ucGl4ZWxSYXRpbyx1PXRoaXMuY29sb3IsZj10aGlzLmZpbGxTaGFkZXIuYXR0cmlidXRlczt0aGlzLmxpbmVCdWZmZXJMby5iaW5kKCksZi5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgaD10aGlzLmZpbGw7aWYoaFswXXx8aFsxXXx8aFsyXXx8aFszXSl7dmFyIGQ9dGhpcy5maWxsU2hhZGVyO2QuYmluZCgpO3ZhciBwPWQudW5pZm9ybXM7dGhpcy5zZXRQcm9qZWN0aW9uVW5pZm9ybXMocCxhKSxwLmRlcHRoPW8ubmV4dERlcHRoVmFsdWUoKSxmLmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCksZi5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZGVwdGhNYXNrKCEwKSxsLmVuYWJsZShsLkRFUFRIX1RFU1QpO3ZhciBtPXRoaXMuZmlsbENvbG9yO2hbMF0mJihwLmNvbG9yPW1bMF0scC5wcm9qZWN0QXhpcz1lLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGhbMV0mJihwLmNvbG9yPW1bMV0scC5wcm9qZWN0QXhpcz1uLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGhbMl0mJihwLmNvbG9yPW1bMl0scC5wcm9qZWN0QXhpcz10LHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGhbM10mJihwLmNvbG9yPW1bM10scC5wcm9qZWN0QXhpcz1yLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGwuZGVwdGhNYXNrKCExKSxsLmRpc2FibGUobC5ERVBUSF9URVNUKX12YXIgdj10aGlzLmxpbmVTaGFkZXI7di5iaW5kKCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLHYuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHYuYXR0cmlidXRlcy5kTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgZz12LnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKGcsYSksZy5jb2xvcj11LGcud2lkdGg9cypjLGcuZGFzaFBhdHRlcm49dGhpcy5kYXNoUGF0dGVybi5iaW5kKCksZy5kYXNoTGVuZ3RoPXRoaXMuZGFzaExlbmd0aCpjO3ZhciB5PXYuYXR0cmlidXRlcztpZih5LmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCkseS5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZHJhd0FycmF5cyhsLlRSSUFOR0xFUywwLGkpLHM+MiYmIXRoaXMudXNpbmdEYXNoZXMpe3ZhciBiPXRoaXMubWl0cmVTaGFkZXI7dGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGIuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDQ4LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKSxiLmJpbmQoKTt2YXIgeD1iLnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKHgsYSkseC5jb2xvcj11LHgucmFkaXVzPXMqYyxiLmF0dHJpYnV0ZXMuYUhpLnBvaW50ZXIobC5GTE9BVCwhMSw0OCwwKSxsLmRyYXdBcnJheXMobC5QT0lOVFMsMCxpLzN8MCl9fX19KCksaC5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy52ZXJ0Q291bnQsbj10aGlzLm51bVBvaW50cztpZih0aGlzLnBpY2tPZmZzZXQ9ZSwhcilyZXR1cm4gZStuO3ZhciBpPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksYT10aGlzLnBsb3Qsbz10aGlzLndpZHRoLHM9YS5nbCxsPWEucGlja1BpeGVsUmF0aW8sYz10aGlzLnBpY2tTaGFkZXIsdT10aGlzLnBpY2tCdWZmZXI7dFswXT0yNTUmZSx0WzFdPWU+Pj44JjI1NSx0WzJdPWU+Pj4xNiYyNTUsdFszXT1lPj4+MjQsYy5iaW5kKCk7dmFyIGY9Yy51bmlmb3Jtczt0aGlzLnNldFByb2plY3Rpb25Vbmlmb3JtcyhmLGkpLGYud2lkdGg9bypsLGYucGlja09mZnNldD10O3ZhciBoPWMuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5saW5lQnVmZmVySGkuYmluZCgpLGguYUhpLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSxoLmRIaS5wb2ludGVyKHMuRkxPQVQsITEsMTYsOCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGguYUxvLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSx1LmJpbmQoKSxoLnBpY2swLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExLDgsMCksaC5waWNrMS5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSw4LDQpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLHIpLGUrbn19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLm51bVBvaW50cztpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLmRhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlLHIsbixhLG8scz10aGlzLnBsb3QuZ2w7dGhpcy5jb2xvcj0odC5jb2xvcnx8WzAsMCwxLDFdKS5zbGljZSgpLHRoaXMud2lkdGg9Kyh0LndpZHRofHwxKSx0aGlzLmZpbGw9KHQuZmlsbHx8WyExLCExLCExLCExXSkuc2xpY2UoKSx0aGlzLmZpbGxDb2xvcj1pKHQuZmlsbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGY9dC5kYXNoZXN8fFsxXSxoPTA7Zm9yKGU9MDtlPGYubGVuZ3RoOysrZSloKz1mW2VdO3ZhciBkPXUubWFsbG9jVWludDgoaCk7bj0wO3ZhciBwPTI1NTtmb3IoZT0wO2U8Zi5sZW5ndGg7KytlKXtmb3Iocj0wO3I8ZltlXTsrK3IpZFtuKytdPXA7cF49MjU1fXRoaXMuZGFzaFBhdHRlcm4uZGlzcG9zZSgpLHRoaXMudXNpbmdEYXNoZXM9Zi5sZW5ndGg+MSx0aGlzLmRhc2hQYXR0ZXJuPWwocyxjKGQsW2gsMSw0XSxbMSwwLDBdKSksdGhpcy5kYXNoUGF0dGVybi5taW5GaWx0ZXI9cy5ORUFSRVNULHRoaXMuZGFzaFBhdHRlcm4ubWFnRmlsdGVyPXMuTkVBUkVTVCx0aGlzLmRhc2hMZW5ndGg9aCx1LmZyZWUoZCk7dmFyIG09dC5wb3NpdGlvbnM7dGhpcy5kYXRhPW07dmFyIHY9dGhpcy5ib3VuZHM7dlswXT12WzFdPTEvMCx2WzJdPXZbM109LSgxLzApO3ZhciBnPXRoaXMubnVtUG9pbnRzPW0ubGVuZ3RoPj4+MTtpZigwIT09Zyl7Zm9yKGU9MDtlPGc7KytlKWE9bVsyKmVdLG89bVsyKmUrMV0saXNOYU4oYSl8fGlzTmFOKG8pfHwodlswXT1NYXRoLm1pbih2WzBdLGEpLHZbMV09TWF0aC5taW4odlsxXSxvKSx2WzJdPU1hdGgubWF4KHZbMl0sYSksdlszXT1NYXRoLm1heCh2WzNdLG8pKTt2WzBdPT09dlsyXSYmKHZbMl0rPTEpLHZbM109PT12WzFdJiYodlszXSs9MSk7dmFyIHk9dS5tYWxsb2NGbG9hdDY0KDI0KihnLTEpKSxiPXUubWFsbG9jRmxvYXQzMigyNCooZy0xKSkseD11Lm1hbGxvY0Zsb2F0MzIoMjQqKGctMSkpLF89dS5tYWxsb2NVaW50MzIoMTIqKGctMSkpLHc9Yi5sZW5ndGgsTT1fLmxlbmd0aDtuPWc7Zm9yKHZhciBUPTA7bj4xOyl7dmFyIGs9LS1uO2E9bVsyKm5dLG89bVsyKm4rMV07dmFyIEE9ay0xLEU9bVsyKkFdLFM9bVsyKkErMV07aWYoIShpc05hTihhKXx8aXNOYU4obyl8fGlzTmFOKEUpfHxpc05hTihTKSkpe1QrPTEsYT0oYS12WzBdKS8odlsyXS12WzBdKSxvPShvLXZbMV0pLyh2WzNdLXZbMV0pLEU9KEUtdlswXSkvKHZbMl0tdlswXSksUz0oUy12WzFdKS8odlszXS12WzFdKTt2YXIgTD1FLWEsQz1TLW8sST1rfDE8PDI0LEQ9ay0xLFA9ayx6PWstMXwxPDwyNDt5Wy0td109LUMseVstLXddPS1MLHlbLS13XT1vLHlbLS13XT1hLF9bLS1NXT1JLF9bLS1NXT1ELHlbLS13XT1DLHlbLS13XT1MLHlbLS13XT1TLHlbLS13XT1FLF9bLS1NXT1QLF9bLS1NXT16LHlbLS13XT0tQyx5Wy0td109LUwseVstLXddPVMseVstLXddPUUsX1stLU1dPVAsX1stLU1dPXoseVstLXddPUMseVstLXddPUwseVstLXddPVMseVstLXddPUUsX1stLU1dPVAsX1stLU1dPXoseVstLXddPS1DLHlbLS13XT0tTCx5Wy0td109byx5Wy0td109YSxfWy0tTV09SSxfWy0tTV09RCx5Wy0td109Qyx5Wy0td109TCx5Wy0td109byx5Wy0td109YSxfWy0tTV09SSxfWy0tTV09RH19Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyliW2VdPXlbZV0seFtlXT15W2VdLWJbZV07dGhpcy52ZXJ0Q291bnQ9NipULHRoaXMubGluZUJ1ZmZlckhpLnVwZGF0ZShiLnN1YmFycmF5KHcpKSx0aGlzLmxpbmVCdWZmZXJMby51cGRhdGUoeC5zdWJhcnJheSh3KSksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShfLnN1YmFycmF5KE0pKSx1LmZyZWUoeSksdS5mcmVlKGIpLHUuZnJlZSh4KSx1LmZyZWUoXyl9fSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpLHRoaXMubGluZUJ1ZmZlckxvLmRpc3Bvc2UoKSx0aGlzLmxpbmVCdWZmZXJIaS5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMubWl0cmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMuZmlsbFNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmRhc2hQYXR0ZXJuLmRpc3Bvc2UoKX19LHsiLi9saWIvc2hhZGVycyI6MTczLCJnbC1idWZmZXIiOjE1NiwiZ2wtc2hhZGVyIjoyNjEsImdsLXRleHR1cmUyZCI6MjczLG5kYXJyYXk6NDc2LCJ0eXBlZGFycmF5LXBvb2wiOjU0OX1dLDE3NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG5leHRQb3NpdGlvbjtcbmF0dHJpYnV0ZSBmbG9hdCBhcmNMZW5ndGgsIGxpbmVXaWR0aDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBwcm9qZWN0ZWQgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0YW5nZW50Q2xpcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5leHRQb3NpdGlvbiAtIHBvc2l0aW9uLCAwLjApO1xuICB2ZWMyIHRhbmdlbnQgPSBub3JtYWxpemUoc2NyZWVuU2hhcGUgKiB0YW5nZW50Q2xpcC54eSk7XG4gIHZlYzIgb2Zmc2V0ID0gMC41ICogcGl4ZWxSYXRpbyAqIGxpbmVXaWR0aCAqIHZlYzIodGFuZ2VudC55LCAtdGFuZ2VudC54KSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwcm9qZWN0ZWQueHkgKyBwcm9qZWN0ZWQudyAqIG9mZnNldCwgcHJvamVjdGVkLnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiIsYT1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5leHRQb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJhcmNMZW5ndGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImxpbmVXaWR0aCIsdHlwZToiZmxvYXQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpLCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyAgICAgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgICAgIGRhc2hTY2FsZTtcbnVuaWZvcm0gZmxvYXQgICAgIG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjMyAgICB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCAgIHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0ICAgIGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZFBvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGZsb2F0IGRhc2hXZWlnaHQgPSB0ZXh0dXJlMkQoZGFzaFRleHR1cmUsIHZlYzIoZGFzaFNjYWxlICogcGl4ZWxBcmNMZW5ndGgsIDApKS5yO1xuICBpZihkYXNoV2VpZ2h0IDwgMC41KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3IgKiBvcGFjaXR5O1xufVxuIixudWxsLGEpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpLCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbiNkZWZpbmUgRkxPQVRfTUFYICAxLjcwMTQxMTg0ZTM4XG4jZGVmaW5lIEZMT0FUX01JTiAgMS4xNzU0OTQzNWUtMzhcblxubG93cCB2ZWM0IGVuY29kZV9mbG9hdF8xXzAoaGlnaHAgZmxvYXQgdikge1xuICBoaWdocCBmbG9hdCBhdiA9IGFicyh2KTtcblxuICAvL0hhbmRsZSBzcGVjaWFsIGNhc2VzXG4gIGlmKGF2IDwgRkxPQVRfTUlOKSB7XG4gICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgfSBlbHNlIGlmKHYgPiBGTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgxMjcuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9IGVsc2UgaWYodiA8IC1GTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgyNTUuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9XG5cbiAgaGlnaHAgdmVjNCBjID0gdmVjNCgwLDAsMCwwKTtcblxuICAvL0NvbXB1dGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhXG4gIGhpZ2hwIGZsb2F0IGUgPSBmbG9vcihsb2cyKGF2KSk7XG4gIGhpZ2hwIGZsb2F0IG0gPSBhdiAqIHBvdygyLjAsIC1lKSAtIDEuMDtcbiAgXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuICBcbiAgLy9VbnBhY2sgZXhwb25lbnRcbiAgaGlnaHAgZmxvYXQgZWJpYXMgPSBlICsgMTI3LjA7XG4gIGNbMF0gPSBmbG9vcihlYmlhcyAvIDIuMCk7XG4gIGViaWFzIC09IGNbMF0gKiAyLjA7XG4gIGNbMV0gKz0gZmxvb3IoZWJpYXMpICogMTI4LjA7IFxuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZFBvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLzI1NS4wLCBlbmNvZGVfZmxvYXRfMV8wKHBpeGVsQXJjTGVuZ3RoKS54eXopO1xufSIsbnVsbCxhKX19LHsiZ2wtc2hhZGVyIjoyNjF9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPDM7KytuKXt2YXIgaT10W25dLWVbbl07cis9aSppfXJldHVybiBNYXRoLnNxcnQocil9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0scj0wO3I8MzsrK3IpZVswXVtyXT1NYXRoLm1heCh0WzBdW3JdLGVbMF1bcl0pLGVbMV1bcl09TWF0aC5taW4odFsxXVtyXSxlWzFdW3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSxyLG4pe3RoaXMuYXJjTGVuZ3RoPXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuaW5kZXg9cix0aGlzLmRhdGFDb29yZGluYXRlPW59ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5idWZmZXI9bix0aGlzLnZhbz1pLHRoaXMuY2xpcEJvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnBvaW50cz1bXSx0aGlzLmFyY0xlbmd0aD1bXSx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5ib3VuZHM9W1swLDAsMF0sWzAsMCwwXV0sdGhpcy5waWNrSWQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMudGV4dHVyZT1hLHRoaXMuZGFzaFNjYWxlPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1tKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBuPXYoZSk7bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbi5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG4uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixuLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsbi5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBpPWwoZSksYT1jKGUsW3tidWZmZXI6aSxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjppLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSkscz1kKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLGY9MDtmPDEwMjQ7KytmKXMuZGF0YVtmXT0yNTU7dmFyIGg9dShlLHMpO2gud3JhcD1lLlJFUEVBVDt2YXIgcD1uZXcgbyhlLHIsbixpLGEsaCk7cmV0dXJuIHAudXBkYXRlKHQpLHB9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZ2wtYnVmZmVyIiksYz10KCJnbC12YW8iKSx1PXQoImdsLXRleHR1cmUyZCIpLGY9dCgiZ2xzbC1yZWFkLWZsb2F0IiksaD10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGQ9dCgibmRhcnJheSIpLHA9dCgiLi9saWIvc2hhZGVycyIpLG09cC5jcmVhdGVTaGFkZXIsdj1wLmNyZWF0ZVBpY2tTaGFkZXIsZz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0seT1vLnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHkuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGcsdmlldzp0LnZpZXd8fGcscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGcsY2xpcEJvdW5kczppKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zyx2aWV3OnQudmlld3x8Zyxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZyxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczppKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpfSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIGk9ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHkpO3ZhciBhPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGEpe3ZhciBvPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0scz10LmxpbmVXaWR0aHx8MSxsPVtdLGM9W10sdT1bXSxmPTAscD0wLG09W1sxLzAsMS8wLDEvMF0sWy0oMS8wKSwtKDEvMCksLSgxLzApXV0sdj0hMTt0OmZvcihlPTE7ZTxhLmxlbmd0aDsrK2Upe3ZhciBnPWFbZS0xXSx5PWFbZV07Zm9yKGMucHVzaChmKSx1LnB1c2goZy5zbGljZSgpKSxyPTA7cjwzOysrcil7aWYoaXNOYU4oZ1tyXSl8fGlzTmFOKHlbcl0pfHwhaXNGaW5pdGUoZ1tyXSl8fCFpc0Zpbml0ZSh5W3JdKSl7aWYoIWkmJmwubGVuZ3RoPjApe2Zvcih2YXIgYj0wO2I8MjQ7KytiKWwucHVzaChsW2wubGVuZ3RoLTEyXSk7cCs9Mix2PSEwfWNvbnRpbnVlIHR9bVswXVtyXT1NYXRoLm1pbihtWzBdW3JdLGdbcl0seVtyXSksbVsxXVtyXT1NYXRoLm1heChtWzFdW3JdLGdbcl0seVtyXSl9dmFyIHgsXztBcnJheS5pc0FycmF5KG9bMF0pPyh4PW9bZS0xXSxfPW9bZV0pOng9Xz1vLDM9PT14Lmxlbmd0aCYmKHg9W3hbMF0seFsxXSx4WzJdLDFdKSwzPT09Xy5sZW5ndGgmJihfPVtfWzBdLF9bMV0sX1syXSwxXSk7dmFyIHc7dz1BcnJheS5pc0FycmF5KHMpP3NbZS0xXTpzO3ZhciBNPWY7aWYoZis9bihnLHkpLHYpe2ZvcihyPTA7cjwyOysrcilsLnB1c2goZ1swXSxnWzFdLGdbMl0seVswXSx5WzFdLHlbMl0sTSx3LHhbMF0seFsxXSx4WzJdLHhbM10pO3ArPTIsdj0hMX1sLnB1c2goZ1swXSxnWzFdLGdbMl0seVswXSx5WzFdLHlbMl0sTSx3LHhbMF0seFsxXSx4WzJdLHhbM10sZ1swXSxnWzFdLGdbMl0seVswXSx5WzFdLHlbMl0sTSwtdyx4WzBdLHhbMV0seFsyXSx4WzNdLHlbMF0seVsxXSx5WzJdLGdbMF0sZ1sxXSxnWzJdLGYsLXcsX1swXSxfWzFdLF9bMl0sX1szXSx5WzBdLHlbMV0seVsyXSxnWzBdLGdbMV0sZ1syXSxmLHcsX1swXSxfWzFdLF9bMl0sX1szXSkscCs9NH1pZih0aGlzLmJ1ZmZlci51cGRhdGUobCksYy5wdXNoKGYpLHUucHVzaChhW2EubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPW0sdGhpcy52ZXJ0ZXhDb3VudD1wLHRoaXMucG9pbnRzPXUsdGhpcy5hcmNMZW5ndGg9YywiZGFzaGVzImluIHQpe3ZhciBUPXQuZGFzaGVzLGs9VC5zbGljZSgpO2ZvcihrLnVuc2hpZnQoMCksZT0xO2U8ay5sZW5ndGg7KytlKWtbZV09a1tlLTFdK2tbZV07dmFyIEE9ZChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKTtmb3IoZT0wO2U8MjU2OysrZSl7Zm9yKHI9MDtyPDQ7KytyKUEuc2V0KGUsMCxyLDApOzEmaC5sZShrLGtbay5sZW5ndGgtMV0qZS8yNTUpP0Euc2V0KGUsMCwwLDApOkEuc2V0KGUsMCwwLDI1NSl9dGhpcy50ZXh0dXJlLnNldFBpeGVscyhBKX19fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mKHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9aC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgYSh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sbz0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLHM9MS1vLGw9WzAsMCwwXSxjPTA7YzwzOysrYylsW2NdPXMqbltjXStvKmlbY107dmFyIHU9TWF0aC5taW4obzwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBhKGUsbCx1LHRoaXMucG9pbnRzW3VdKX19LHsiLi9saWIvc2hhZGVycyI6MTc1LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjcsImdsLWJ1ZmZlciI6MTU2LCJnbC10ZXh0dXJlMmQiOjI3MywiZ2wtdmFvIjoyNzcsImdsc2wtcmVhZC1mbG9hdCI6Mjg0LG5kYXJyYXk6NDc2fV0sMTc3OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKmEtaSpuO3JldHVybiBvPyhvPTEvbyx0WzBdPWEqbyx0WzFdPS1uKm8sdFsyXT0taSpvLHRbM109cipvLHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxNzg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9dSpvLXMqYyxoPS11KmErcypsLGQ9YyphLW8qbCxwPXIqZituKmgraSpkO3JldHVybiBwPyhwPTEvcCx0WzBdPWYqcCx0WzFdPSgtdSpuK2kqYykqcCx0WzJdPShzKm4taSpvKSpwLHRbM109aCpwLHRbNF09KHUqci1pKmwpKnAsdFs1XT0oLXMqcitpKmEpKnAsdFs2XT1kKnAsdFs3XT0oLWMqcituKmwpKnAsdFs4XT0obypyLW4qYSkqcCx0KTpudWxsfWUuZXhwb3J0cz1ufSx7fV0sMTc5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9ZS5leHBvcnRzPW59LHt9XSwxODA6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWUuZXhwb3J0cz1ufSx7fV0sMTgxOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGY9dFsxMF0saD10WzExXSxkPXRbMTJdLHA9dFsxM10sbT10WzE0XSx2PXRbMTVdO3JldHVybihlKm8tciphKSooZip2LWgqbSktKGUqcy1uKmEpKih1KnYtaCpwKSsoZSpsLWkqYSkqKHUqbS1mKnApKyhyKnMtbipvKSooYyp2LWgqZCktKHIqbC1pKm8pKihjKm0tZipkKSsobipsLWkqcykqKGMqcC11KmQpfWUuZXhwb3J0cz1ufSx7fV0sMTgyOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksYz1yKm8sdT1uKm8sZj1uKnMsaD1pKm8sZD1pKnMscD1pKmwsbT1hKm8sdj1hKnMsZz1hKmw7cmV0dXJuIHRbMF09MS1mLXAsdFsxXT11K2csdFsyXT1oLXYsdFszXT0wLHRbNF09dS1nLHRbNV09MS1jLXAsdFs2XT1kK20sdFs3XT0wLHRbOF09aCt2LHRbOV09ZC1tLHRbMTBdPTEtYy1mLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWUuZXhwb3J0cz1ufSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxmPW4qbCxoPW4qYyxkPWkqbCxwPWkqYyxtPWEqYyx2PW8qcyxnPW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShkK20pLHRbMV09Zit5LHRbMl09aC1nLHRbM109MCx0WzRdPWYteSx0WzVdPTEtKHUrbSksdFs2XT1wK3YsdFs3XT0wLHRbOF09aCtnLHRbOV09cC12LHRbMTBdPTEtKHUrZCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH1lLmV4cG9ydHM9bn0se31dLDE4NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0sZD1lWzExXSxwPWVbMTJdLG09ZVsxM10sdj1lWzE0XSxnPWVbMTVdLHk9cipzLW4qbyxiPXIqbC1pKm8seD1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsTT1pKmMtYSpsLFQ9dSptLWYqcCxrPXUqdi1oKnAsQT11KmctZCpwLEU9Zip2LWgqbSxTPWYqZy1kKm0sTD1oKmctZCp2LEM9eSpMLWIqUyt4KkUrXypBLXcqaytNKlQ7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKlMrYypFKSpDLHRbMV09KGkqUy1uKkwtYSpFKSpDLHRbMl09KG0qTS12KncrZypfKSpDLHRbM109KGgqdy1mKk0tZCpfKSpDLHRbNF09KGwqQS1vKkwtYyprKSpDLHRbNV09KHIqTC1pKkErYSprKSpDLHRbNl09KHYqeC1wKk0tZypiKSpDLHRbN109KHUqTS1oKngrZCpiKSpDLHRbOF09KG8qUy1zKkErYypUKSpDLHRbOV09KG4qQS1yKlMtYSpUKSpDLHRbMTBdPShwKnctbSp4K2cqeSkqQyx0WzExXT0oZip4LXUqdy1kKnkpKkMsdFsxMl09KHMqay1vKkUtbCpUKSpDLHRbMTNdPShyKkUtbiprK2kqVCkqQyx0WzE0XT0obSpiLXAqXy12KnkpKkMsdFsxNV09KHUqXy1mKmIraCp5KSpDLHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxODY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhLG8scyxsLGMsdSxmLGgsZCxwLG09ZVswXSx2PWVbMV0sZz1lWzJdLHk9blswXSxiPW5bMV0seD1uWzJdLF89clswXSx3PXJbMV0sTT1yWzJdO3JldHVybiBNYXRoLmFicyhtLV8pPDFlLTYmJk1hdGguYWJzKHYtdyk8MWUtNiYmTWF0aC5hYnMoZy1NKTwxZS02P2kodCk6KGY9bS1fLGg9di13LGQ9Zy1NLHA9MS9NYXRoLnNxcnQoZipmK2gqaCtkKmQpLGYqPXAsaCo9cCxkKj1wLGE9YipkLXgqaCxvPXgqZi15KmQscz15KmgtYipmLHA9TWF0aC5zcXJ0KGEqYStvKm8rcypzKSxwPyhwPTEvcCxhKj1wLG8qPXAscyo9cCk6KGE9MCxvPTAscz0wKSxsPWgqcy1kKm8sYz1kKmEtZipzLHU9ZipvLWgqYSxwPU1hdGguc3FydChsKmwrYypjK3UqdSkscD8ocD0xL3AsbCo9cCxjKj1wLHUqPXApOihsPTAsYz0wLHU9MCksdFswXT1hLHRbMV09bCx0WzJdPWYsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1oLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPWQsdFsxMV09MCx0WzEyXT0tKGEqbStvKnYrcypnKSx0WzEzXT0tKGwqbStjKnYrdSpnKSx0WzE0XT0tKGYqbStoKnYrZCpnKSx0WzE1XT0xLHQpfXZhciBpPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9bn0seyIuL2lkZW50aXR5IjoxODR9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLGQ9ZVsxMF0scD1lWzExXSxtPWVbMTJdLHY9ZVsxM10sZz1lWzE0XSx5PWVbMTVdLGI9clswXSx4PXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT1iKm4reCpzK18qZit3Km0sdFsxXT1iKmkreCpsK18qaCt3KnYsdFsyXT1iKmEreCpjK18qZCt3KmcsdFszXT1iKm8reCp1K18qcCt3KnksYj1yWzRdLHg9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09YipuK3gqcytfKmYrdyptLHRbNV09YippK3gqbCtfKmgrdyp2LHRbNl09YiphK3gqYytfKmQrdypnLHRbN109YipvK3gqdStfKnArdyp5LGI9cls4XSx4PXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09YipuK3gqcytfKmYrdyptLHRbOV09YippK3gqbCtfKmgrdyp2LHRbMTBdPWIqYSt4KmMrXypkK3cqZyx0WzExXT1iKm8reCp1K18qcCt3KnksYj1yWzEyXSx4PXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT1iKm4reCpzK18qZit3Km0sdFsxM109YippK3gqbCtfKmgrdyp2LHRbMTRdPWIqYSt4KmMrXypkK3cqZyx0WzE1XT1iKm8reCp1K18qcCt3KnksdH1lLmV4cG9ydHM9bn0se31dLDE4ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH1lLmV4cG9ydHM9bn0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoLGQscCxtLHYsZyx5LGIseCxfLHcsTSxULGssQSxFLFM9blswXSxMPW5bMV0sQz1uWzJdLEk9TWF0aC5zcXJ0KFMqUytMKkwrQypDKTtyZXR1cm4gTWF0aC5hYnMoSSk8MWUtNj9udWxsOihJPTEvSSxTKj1JLEwqPUksQyo9SSxpPU1hdGguc2luKHIpLGE9TWF0aC5jb3Mociksbz0xLWEscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdLGY9ZVs0XSxoPWVbNV0sZD1lWzZdLHA9ZVs3XSxtPWVbOF0sdj1lWzldLGc9ZVsxMF0seT1lWzExXSxiPVMqUypvK2EseD1MKlMqbytDKmksXz1DKlMqby1MKmksdz1TKkwqby1DKmksTT1MKkwqbythLFQ9QypMKm8rUyppLGs9UypDKm8rTCppLEE9TCpDKm8tUyppLEU9QypDKm8rYSx0WzBdPXMqYitmKngrbSpfLHRbMV09bCpiK2gqeCt2Kl8sdFsyXT1jKmIrZCp4K2cqXyx0WzNdPXUqYitwKngreSpfLHRbNF09cyp3K2YqTSttKlQsdFs1XT1sKncraCpNK3YqVCx0WzZdPWMqdytkKk0rZypULHRbN109dSp3K3AqTSt5KlQsdFs4XT1zKmsrZipBK20qRSx0WzldPWwqaytoKkErdipFLHRbMTBdPWMqaytkKkErZypFLHRbMTFdPXUqaytwKkEreSpFLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHQpfWUuZXhwb3J0cz1ufSx7fV0sMTkwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2Yqbix0WzddPWwqaStoKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1mKmktcypuLHRbMTFdPWgqaS1sKm4sdH1lLmV4cG9ydHM9bn0se31dLDE5MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO3JldHVybiBlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmktYypuLHRbMV09byppLXUqbix0WzJdPXMqaS1mKm4sdFszXT1sKmktaCpuLHRbOF09YSpuK2MqaSx0WzldPW8qbit1KmksdFsxMF09cypuK2YqaSx0WzExXT1sKm4raCppLHR9ZS5leHBvcnRzPW59LHt9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGY9ZVs2XSxoPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStmKm4sdFszXT1sKmkraCpuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1mKmktcypuLHRbN109aCppLWwqbix0fWUuZXhwb3J0cz1ufSx7fV0sMTkzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH1lLmV4cG9ydHM9bn0se31dLDE5NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLGQscCxtPXJbMF0sdj1yWzFdLGc9clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKnYrZVs4XSpnK2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKnYrZVs5XSpnK2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKnYrZVsxMF0qZytlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSp2K2VbMTFdKmcrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0sZD1lWzEwXSxwPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1kLHRbMTFdPXAsdFsxMl09biptK3MqditmKmcrZVsxMl0sdFsxM109aSptK2wqditoKmcrZVsxM10sdFsxNF09YSptK2MqditkKmcrZVsxNF0sdFsxNV09byptK3UqditwKmcrZVsxNV0pLHR9ZS5leHBvcnRzPW59LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fWUuZXhwb3J0cz1ufSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dFswXT0xL2VbMF07YnJlYWs7Y2FzZSA0OmkodCxlKTticmVhaztjYXNlIDk6YSh0LGUpO2JyZWFrO2Nhc2UgMTY6byh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJjdXJyZW50bHkgc3VwcG9ydHMgbWF0cmljZXMgdXAgdG8gNHg0Iil9cmV0dXJuIHR9ZS5leHBvcnRzPW47dmFyIGk9dCgiZ2wtbWF0Mi9pbnZlcnQiKSxhPXQoImdsLW1hdDMvaW52ZXJ0Iiksbz10KCJnbC1tYXQ0L2ludmVydCIpfSx7ImdsLW1hdDIvaW52ZXJ0IjoxNzcsImdsLW1hdDMvaW52ZXJ0IjoxNzgsImdsLW1hdDQvaW52ZXJ0IjoxODV9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXtyLmdsTWF0cml4PXQoIi4vZ2wtbWF0cml4L2NvbW1vbi5qcyIpLHIubWF0Mj10KCIuL2dsLW1hdHJpeC9tYXQyLmpzIiksci5tYXQyZD10KCIuL2dsLW1hdHJpeC9tYXQyZC5qcyIpLHIubWF0Mz10KCIuL2dsLW1hdHJpeC9tYXQzLmpzIiksci5tYXQ0PXQoIi4vZ2wtbWF0cml4L21hdDQuanMiKSxyLnF1YXQ9dCgiLi9nbC1tYXRyaXgvcXVhdC5qcyIpLHIudmVjMj10KCIuL2dsLW1hdHJpeC92ZWMyLmpzIiksci52ZWMzPXQoIi4vZ2wtbWF0cml4L3ZlYzMuanMiKSxyLnZlYzQ9dCgiLi9nbC1tYXRyaXgvdmVjNC5qcyIpfSx7Ii4vZ2wtbWF0cml4L2NvbW1vbi5qcyI6MTk4LCIuL2dsLW1hdHJpeC9tYXQyLmpzIjoxOTksIi4vZ2wtbWF0cml4L21hdDJkLmpzIjoyMDAsIi4vZ2wtbWF0cml4L21hdDMuanMiOjIwMSwiLi9nbC1tYXRyaXgvbWF0NC5qcyI6MjAyLCIuL2dsLW1hdHJpeC9xdWF0LmpzIjoyMDMsIi4vZ2wtbWF0cml4L3ZlYzIuanMiOjIwNCwiLi9nbC1tYXRyaXgvdmVjMy5qcyI6MjA1LCIuL2dsLW1hdHJpeC92ZWM0LmpzIjoyMDZ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtuLkVQU0lMT049MWUtNixuLkFSUkFZX1RZUEU9InVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDMyQXJyYXk/RmxvYXQzMkFycmF5OkFycmF5LG4uUkFORE9NPU1hdGgucmFuZG9tLG4uRU5BQkxFX1NJTUQ9ITEsbi5TSU1EX0FWQUlMQUJMRT1uLkFSUkFZX1RZUEU9PT1GbG9hdDMyQXJyYXkmJiJTSU1EImluIHRoaXMsbi5VU0VfU0lNRD1uLkVOQUJMRV9TSU1EJiZuLlNJTURfQVZBSUxBQkxFLG4uc2V0TWF0cml4QXJyYXlUeXBlPWZ1bmN0aW9uKHQpe24uQVJSQVlfVFlQRT10fTt2YXIgaT1NYXRoLlBJLzE4MDtuLnRvUmFkaWFuPWZ1bmN0aW9uKHQpe3JldHVybiB0Kml9LG4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKX0sZS5leHBvcnRzPW59LHt9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9e307aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDQpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX0saS5jb3B5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0fSxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGFbMF09dCxhWzFdPWUsYVsyXT1yLGFbM109aSxhfSxpLnNldD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdH0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXTt0WzFdPWVbMl0sdFsyXT1yfWVsc2UgdFswXT1lWzBdLHRbMV09ZVsyXSx0WzJdPWVbMV0sdFszXT1lWzNdO3JldHVybiB0fSxpLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKmEtaSpuO3JldHVybiBvPyhvPTEvbyx0WzBdPWEqbyx0WzFdPS1uKm8sdFsyXT0taSpvLHRbM109cipvLHQpOm51bGx9LGkuYWRqb2ludD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHRbMF09ZVszXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT1yLHR9LGkuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0qdFszXS10WzJdKnRbMV19LGkubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXSxjPXJbMl0sdT1yWzNdO3JldHVybiB0WzBdPW4qcythKmwsdFsxXT1pKnMrbypsLHRbMl09bipjK2EqdSx0WzNdPWkqYytvKnUsdH0saS5tdWw9aS5tdWx0aXBseSxpLnJvdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipsK2Eqcyx0WzFdPWkqbCtvKnMsdFsyXT1uKi1zK2EqbCx0WzNdPWkqLXMrbypsLHR9LGkuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1uKnMsdFsxXT1pKnMsdFsyXT1hKmwsdFszXT1vKmwsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09LXIsdFszXT1uLHR9LGkuZnJvbVNjYWxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09MCx0WzJdPTAsdFszXT1lWzFdLHR9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQyKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiKSJ9LGkuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikpfSxpLkxEVT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFsyXT1uWzJdL25bMF0sclswXT1uWzBdLHJbMV09blsxXSxyWzNdPW5bM10tdFsyXSpyWzFdLFt0LGUscl19LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5leGFjdEVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXX0saS5lcXVhbHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9ZVszXQo7cmV0dXJuIE1hdGguYWJzKHItcyk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKHMpKSYmTWF0aC5hYnMoaS1sKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMobCkpJiZNYXRoLmFicyhhLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhjKSkmJk1hdGguYWJzKG8tdSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG8pLE1hdGguYWJzKHUpKX0saS5tdWx0aXBseVNjYWxhcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9LGkubXVsdGlwbHlTY2FsYXJBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5OH1dLDIwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPTAsdFs1XT0wLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSg2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZX0saS5jb3B5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPTAsdFs1XT0wLHR9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHM9bmV3IG4uQVJSQVlfVFlQRSg2KTtyZXR1cm4gc1swXT10LHNbMV09ZSxzWzJdPXIsc1szXT1pLHNbNF09YSxzWzVdPW8sc30saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0WzRdPWEsdFs1XT1vLHR9LGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ciphLW4qaTtyZXR1cm4gbD8obD0xL2wsdFswXT1hKmwsdFsxXT0tbipsLHRbMl09LWkqbCx0WzNdPXIqbCx0WzRdPShpKnMtYSpvKSpsLHRbNV09KG4qby1yKnMpKmwsdCk6bnVsbH0saS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXSp0WzNdLXRbMV0qdFsyXX0saS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9clswXSx1PXJbMV0sZj1yWzJdLGg9clszXSxkPXJbNF0scD1yWzVdO3JldHVybiB0WzBdPW4qYythKnUsdFsxXT1pKmMrbyp1LHRbMl09bipmK2EqaCx0WzNdPWkqZitvKmgsdFs0XT1uKmQrYSpwK3MsdFs1XT1pKmQrbypwK2wsdH0saS5tdWw9aS5tdWx0aXBseSxpLnJvdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKnUrYSpjLHRbMV09aSp1K28qYyx0WzJdPW4qLWMrYSp1LHRbM109aSotYytvKnUsdFs0XT1zLHRbNV09bCx0fSxpLnNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1yWzBdLHU9clsxXTtyZXR1cm4gdFswXT1uKmMsdFsxXT1pKmMsdFsyXT1hKnUsdFszXT1vKnUsdFs0XT1zLHRbNV09bCx0fSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9clswXSx1PXJbMV07cmV0dXJuIHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPW4qYythKnUrcyx0WzVdPWkqYytvKnUrbCx0fSxpLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0tcix0WzNdPW4sdFs0XT0wLHRbNV09MCx0fSxpLmZyb21TY2FsaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPTAsdFsyXT0wLHRbM109ZVsxXSx0WzRdPTAsdFs1XT0wLHR9LGkuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPWVbMF0sdFs1XT1lWzFdLHR9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQyZCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiKSJ9LGkuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpKzEpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0WzRdPWVbNF0tcls0XSx0WzVdPWVbNV0tcls1XSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0WzRdPWVbNF0qcix0WzVdPWVbNV0qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHRbNF09ZVs0XStyWzRdKm4sdFs1XT1lWzVdK3JbNV0qbix0fSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV19LGkuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sbD10WzVdLGM9ZVswXSx1PWVbMV0sZj1lWzJdLGg9ZVszXSxkPWVbNF0scD1lWzVdO3JldHVybiBNYXRoLmFicyhyLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhjKSkmJk1hdGguYWJzKGktdSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKHUpKSYmTWF0aC5hYnMoYS1mKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMoZikpJiZNYXRoLmFicyhvLWgpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhoKSkmJk1hdGguYWJzKHMtZCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHMpLE1hdGguYWJzKGQpKSYmTWF0aC5hYnMobC1wKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobCksTWF0aC5hYnMocCkpfSxlLmV4cG9ydHM9aX0seyIuL2NvbW1vbi5qcyI6MTk4fV0sMjAxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4uQVJSQVlfVFlQRSg5KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0saS5mcm9tTWF0ND1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbNF0sdFs0XT1lWzVdLHRbNV09ZVs2XSx0WzZdPWVbOF0sdFs3XT1lWzldLHRbOF09ZVsxMF0sdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDkpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdH0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCxjKXt2YXIgdT1uZXcgbi5BUlJBWV9UWVBFKDkpO3JldHVybiB1WzBdPXQsdVsxXT1lLHVbMl09cix1WzNdPWksdVs0XT1hLHVbNV09byx1WzZdPXMsdVs3XT1sLHVbOF09Yyx1fSxpLnNldD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHRbNF09YSx0WzVdPW8sdFs2XT1zLHRbN109bCx0WzhdPWMsdH0saS5pZGVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzVdO3RbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1yLHRbNV09ZVs3XSx0WzZdPW4sdFs3XT1pfWVsc2UgdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF07cmV0dXJuIHR9LGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9dSpvLXMqYyxoPS11KmErcypsLGQ9YyphLW8qbCxwPXIqZituKmgraSpkO3JldHVybiBwPyhwPTEvcCx0WzBdPWYqcCx0WzFdPSgtdSpuK2kqYykqcCx0WzJdPShzKm4taSpvKSpwLHRbM109aCpwLHRbNF09KHUqci1pKmwpKnAsdFs1XT0oLXMqcitpKmEpKnAsdFs2XT1kKnAsdFs3XT0oLWMqcituKmwpKnAsdFs4XT0obypyLW4qYSkqcCx0KTpudWxsfSxpLmFkam9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF07cmV0dXJuIHRbMF09byp1LXMqYyx0WzFdPWkqYy1uKnUsdFsyXT1uKnMtaSpvLHRbM109cypsLWEqdSx0WzRdPXIqdS1pKmwsdFs1XT1pKmEtcipzLHRbNl09YSpjLW8qbCx0WzddPW4qbC1yKmMsdFs4XT1yKm8tbiphLHR9LGkuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdO3JldHVybiBlKihjKmEtbypsKStyKigtYyppK28qcykrbioobCppLWEqcyl9LGkubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPXJbMF0sZD1yWzFdLHA9clsyXSxtPXJbM10sdj1yWzRdLGc9cls1XSx5PXJbNl0sYj1yWzddLHg9cls4XTtyZXR1cm4gdFswXT1oKm4rZCpvK3AqYyx0WzFdPWgqaStkKnMrcCp1LHRbMl09aCphK2QqbCtwKmYsdFszXT1tKm4rdipvK2cqYyx0WzRdPW0qaSt2KnMrZyp1LHRbNV09bSphK3YqbCtnKmYsdFs2XT15Km4rYipvK3gqYyx0WzddPXkqaStiKnMreCp1LHRbOF09eSphK2IqbCt4KmYsdH0saS5tdWw9aS5tdWx0aXBseSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9clswXSxkPXJbMV07cmV0dXJuIHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09aCpuK2QqbytjLHRbN109aCppK2Qqcyt1LHRbOF09aCphK2QqbCtmLHR9LGkucm90YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1NYXRoLnNpbihyKSxkPU1hdGguY29zKHIpO3JldHVybiB0WzBdPWQqbitoKm8sdFsxXT1kKmkraCpzLHRbMl09ZCphK2gqbCx0WzNdPWQqby1oKm4sdFs0XT1kKnMtaCppLHRbNV09ZCpsLWgqYSx0WzZdPWMsdFs3XT11LHRbOF09Zix0fSxpLnNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gdFswXT1uKmVbMF0sdFsxXT1uKmVbMV0sdFsyXT1uKmVbMl0sdFszXT1pKmVbM10sdFs0XT1pKmVbNF0sdFs1XT1pKmVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdH0saS5mcm9tVHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT1lWzBdLHRbN109ZVsxXSx0WzhdPTEsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPS1yLHRbNF09bix0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT1lWzFdLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSxpLmZyb21NYXQyZD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09MCx0WzNdPWVbMl0sdFs0XT1lWzNdLHRbNV09MCx0WzZdPWVbNF0sdFs3XT1lWzVdLHRbOF09MSx0fSxpLmZyb21RdWF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxmPW4qcyxoPWkqbyxkPWkqcyxwPWkqbCxtPWEqbyx2PWEqcyxnPWEqbDtyZXR1cm4gdFswXT0xLWYtcCx0WzNdPXUtZyx0WzZdPWgrdix0WzFdPXUrZyx0WzRdPTEtYy1wLHRbN109ZC1tLHRbMl09aC12LHRbNV09ZCttLHRbOF09MS1jLWYsdH0saS5ub3JtYWxGcm9tTWF0ND1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxmPWVbOV0saD1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV0seT1yKnMtbipvLGI9cipsLWkqbyx4PXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxNPWkqYy1hKmwsVD11Km0tZipwLGs9dSp2LWgqcCxBPXUqZy1kKnAsRT1mKnYtaCptLFM9ZipnLWQqbSxMPWgqZy1kKnYsQz15KkwtYipTK3gqRStfKkEtdyprK00qVDtyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqUytjKkUpKkMsdFsxXT0obCpBLW8qTC1jKmspKkMsdFsyXT0obypTLXMqQStjKlQpKkMsdFszXT0oaSpTLW4qTC1hKkUpKkMsdFs0XT0ocipMLWkqQSthKmspKkMsdFs1XT0obipBLXIqUy1hKlQpKkMsdFs2XT0obSpNLXYqdytnKl8pKkMsdFs3XT0odip4LXAqTS1nKmIpKkMsdFs4XT0ocCp3LW0qeCtnKnkpKkMsdCk6bnVsbH0saS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuIm1hdDMoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIsICIrdFs0XSsiLCAiK3RbNV0rIiwgIit0WzZdKyIsICIrdFs3XSsiLCAiK3RbOF0rIikifSxpLmZyb2I9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0WzBdLDIpK01hdGgucG93KHRbMV0sMikrTWF0aC5wb3codFsyXSwyKStNYXRoLnBvdyh0WzNdLDIpK01hdGgucG93KHRbNF0sMikrTWF0aC5wb3codFs1XSwyKStNYXRoLnBvdyh0WzZdLDIpK01hdGgucG93KHRbN10sMikrTWF0aC5wb3codFs4XSwyKSl9LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdFs0XT1lWzRdK3JbNF0sdFs1XT1lWzVdK3JbNV0sdFs2XT1lWzZdK3JbNl0sdFs3XT1lWzddK3JbN10sdFs4XT1lWzhdK3JbOF0sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHRbNF09ZVs0XS1yWzRdLHRbNV09ZVs1XS1yWzVdLHRbNl09ZVs2XS1yWzZdLHRbN109ZVs3XS1yWzddLHRbOF09ZVs4XS1yWzhdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5tdWx0aXBseVNjYWxhcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHRbNF09ZVs0XSpyLHRbNV09ZVs1XSpyLHRbNl09ZVs2XSpyLHRbN109ZVs3XSpyLHRbOF09ZVs4XSpyLHR9LGkubXVsdGlwbHlTY2FsYXJBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdFs0XT1lWzRdK3JbNF0qbix0WzVdPWVbNV0rcls1XSpuLHRbNl09ZVs2XStyWzZdKm4sdFs3XT1lWzddK3JbN10qbix0WzhdPWVbOF0rcls4XSpuLHR9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM10mJnRbNF09PT1lWzRdJiZ0WzVdPT09ZVs1XSYmdFs2XT09PWVbNl0mJnRbN109PT1lWzddJiZ0WzhdPT09ZVs4XX0saS5lcXVhbHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdLHM9dFs0XSxsPXRbNV0sYz10WzZdLHU9dFs3XSxmPXRbOF0saD1lWzBdLGQ9ZVsxXSxwPWVbMl0sbT1lWzNdLHY9ZVs0XSxnPWVbNV0seT10WzZdLGI9ZVs3XSx4PWVbOF07cmV0dXJuIE1hdGguYWJzKHItaCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKGgpKSYmTWF0aC5hYnMoaS1kKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMoZCkpJiZNYXRoLmFicyhhLXApPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhwKSkmJk1hdGguYWJzKG8tbSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG8pLE1hdGguYWJzKG0pKSYmTWF0aC5hYnMocy12KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMocyksTWF0aC5hYnModikpJiZNYXRoLmFicyhsLWcpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhsKSxNYXRoLmFicyhnKSkmJk1hdGguYWJzKGMteSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGMpLE1hdGguYWJzKHkpKSYmTWF0aC5hYnModS1iKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnModSksTWF0aC5hYnMoYikpJiZNYXRoLmFicyhmLXgpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhmKSxNYXRoLmFicyh4KSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTh9XSwyMDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9e3NjYWxhcjp7fSxTSU1EOnt9fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCxjLHUsZixoLGQscCxtLHYpe3ZhciBnPW5ldyBuLkFSUkFZX1RZUEUoMTYpO3JldHVybiBnWzBdPXQsZ1sxXT1lLGdbMl09cixnWzNdPWksZ1s0XT1hLGdbNV09byxnWzZdPXMsZ1s3XT1sLGdbOF09YyxnWzldPXUsZ1sxMF09ZixnWzExXT1oLGdbMTJdPWQsZ1sxM109cCxnWzE0XT1tLGdbMTVdPXYsZ30saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxkLHAsbSx2KXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHRbNF09YSx0WzVdPW8sdFs2XT1zLHRbN109bCx0WzhdPWMsdFs5XT11LHRbMTBdPWYsdFsxMV09aCx0WzEyXT1kLHRbMTNdPXAsdFsxNF09bSx0WzE1XT12LHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLnNjYWxhci50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9LGkuU0lNRC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZjtyZXR1cm4gcj1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMCksbj1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCksaT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCksYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMTIpLG89U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShyLG4sMCwxLDQsNSkscz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKGksYSwwLDEsNCw1KSxsPVNJTUQuRmxvYXQzMng0LnNodWZmbGUobyxzLDAsMiw0LDYpLGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShvLHMsMSwzLDUsNyksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLGwpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsNCxjKSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUocixuLDIsMyw2LDcpLHM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShpLGEsMiwzLDYsNyksdT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8scywwLDIsNCw2KSxmPVNJTUQuRmxvYXQzMng0LnNodWZmbGUobyxzLDEsMyw1LDcpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCx1KSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLGYpLHR9LGkudHJhbnNwb3NlPW4uVVNFX1NJTUQ/aS5TSU1ELnRyYW5zcG9zZTppLnNjYWxhci50cmFuc3Bvc2UsaS5zY2FsYXIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLGQ9ZVsxMV0scD1lWzEyXSxtPWVbMTNdLHY9ZVsxNF0sZz1lWzE1XSx5PXIqcy1uKm8sYj1yKmwtaSpvLHg9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLE09aSpjLWEqbCxUPXUqbS1mKnAsaz11KnYtaCpwLEE9dSpnLWQqcCxFPWYqdi1oKm0sUz1mKmctZCptLEw9aCpnLWQqdixDPXkqTC1iKlMreCpFK18qQS13KmsrTSpUO3JldHVybiBDPyhDPTEvQyx0WzBdPShzKkwtbCpTK2MqRSkqQyx0WzFdPShpKlMtbipMLWEqRSkqQyx0WzJdPShtKk0tdip3K2cqXykqQyx0WzNdPShoKnctZipNLWQqXykqQyx0WzRdPShsKkEtbypMLWMqaykqQyx0WzVdPShyKkwtaSpBK2EqaykqQyx0WzZdPSh2KngtcCpNLWcqYikqQyx0WzddPSh1Kk0taCp4K2QqYikqQyx0WzhdPShvKlMtcypBK2MqVCkqQyx0WzldPShuKkEtcipTLWEqVCkqQyx0WzEwXT0ocCp3LW0qeCtnKnkpKkMsdFsxMV09KGYqeC11KnctZCp5KSpDLHRbMTJdPShzKmstbypFLWwqVCkqQyx0WzEzXT0ocipFLW4qaytpKlQpKkMsdFsxNF09KG0qYi1wKl8tdip5KSpDLHRbMTVdPSh1Kl8tZipiK2gqeSkqQyx0KTpudWxsfSxpLlNJTUQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGYsaD1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMCksZD1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCkscD1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCksbT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMTIpO3JldHVybiBvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaCxkLDAsMSw0LDUpLG49U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShwLG0sMCwxLDQsNSkscj1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8sbiwwLDIsNCw2KSxuPVNJTUQuRmxvYXQzMng0LnNodWZmbGUobixvLDEsMyw1LDcpLG89U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShoLGQsMiwzLDYsNyksYT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHAsbSwyLDMsNiw3KSxpPVNJTUQuRmxvYXQzMng0LnNodWZmbGUobyxhLDAsMiw0LDYpLGE9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShhLG8sMSwzLDUsNyksbz1TSU1ELkZsb2F0MzJ4NC5tdWwoaSxhKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxzPVNJTUQuRmxvYXQzMng0Lm11bChuLG8pLGw9U0lNRC5GbG9hdDMyeDQubXVsKHIsbyksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMiwzLDAsMSkscz1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKG4sbykscyksbD1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKHIsbyksbCksbD1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGwsMiwzLDAsMSksbz1TSU1ELkZsb2F0MzJ4NC5tdWwobixpKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxzPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYSxvKSxzKSx1PVNJTUQuRmxvYXQzMng0Lm11bChyLG8pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHM9U0lNRC5GbG9hdDMyeDQuc3ViKHMsU0lNRC5GbG9hdDMyeDQubXVsKGEsbykpLHU9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChyLG8pLHUpLHU9U0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDIsMywwLDEpLG89U0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUobiwyLDMsMCwxKSxhKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxpPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoaSwyLDMsMCwxKSxzPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoaSxvKSxzKSxjPVNJTUQuRmxvYXQzMng0Lm11bChyLG8pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHM9U0lNRC5GbG9hdDMyeDQuc3ViKHMsU0lNRC5GbG9hdDMyeDQubXVsKGksbykpLGM9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChyLG8pLGMpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLG89U0lNRC5GbG9hdDMyeDQubXVsKHIsbiksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMiksYz1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsbyksYyksdT1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKGksbyksdSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMiwzLDAsMSksYz1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKGEsbyksYyksdT1TSU1ELkZsb2F0MzJ4NC5zdWIodSxTSU1ELkZsb2F0MzJ4NC5tdWwoaSxvKSksbz1TSU1ELkZsb2F0MzJ4NC5tdWwocixhKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxsPVNJTUQuRmxvYXQzMng0LnN1YihsLFNJTUQuRmxvYXQzMng0Lm11bChpLG8pKSxjPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobixvKSxjKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxsPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoaSxvKSxsKSxjPVNJTUQuRmxvYXQzMng0LnN1YihjLFNJTUQuRmxvYXQzMng0Lm11bChuLG8pKSxvPVNJTUQuRmxvYXQzMng0Lm11bChyLGkpLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDEsMCwzLDIpLGw9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChhLG8pLGwpLHU9U0lNRC5GbG9hdDMyeDQuc3ViKHUsU0lNRC5GbG9hdDMyeDQubXVsKG4sbykpLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLGw9U0lNRC5GbG9hdDMyeDQuc3ViKGwsU0lNRC5GbG9hdDMyeDQubXVsKGEsbykpLHU9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChuLG8pLHUpLGY9U0lNRC5GbG9hdDMyeDQubXVsKHIscyksZj1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShmLDIsMywwLDEpLGYpLGY9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwxLDAsMywyKSxmKSxvPVNJTUQuRmxvYXQzMng0LnJlY2lwcm9jYWxBcHByb3hpbWF0aW9uKGYpLGY9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0LmFkZChvLG8pLFNJTUQuRmxvYXQzMng0Lm11bChmLFNJTUQuRmxvYXQzMng0Lm11bChvLG8pKSksKGY9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShmLDAsMCwwLDApKT8oU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLFNJTUQuRmxvYXQzMng0Lm11bChmLHMpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsU0lNRC5GbG9hdDMyeDQubXVsKGYsbCkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5tdWwoZixjKSksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwxMixTSU1ELkZsb2F0MzJ4NC5tdWwoZix1KSksdCk6bnVsbH0saS5pbnZlcnQ9bi5VU0VfU0lNRD9pLlNJTUQuaW52ZXJ0Omkuc2NhbGFyLmludmVydCxpLnNjYWxhci5hZGpvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLGQ9ZVsxMV0scD1lWzEyXSxtPWVbMTNdLHY9ZVsxNF0sZz1lWzE1XTtyZXR1cm4gdFswXT1zKihoKmctZCp2KS1mKihsKmctYyp2KSttKihsKmQtYypoKSx0WzFdPS0obiooaCpnLWQqdiktZiooaSpnLWEqdikrbSooaSpkLWEqaCkpLHRbMl09bioobCpnLWMqdiktcyooaSpnLWEqdikrbSooaSpjLWEqbCksdFszXT0tKG4qKGwqZC1jKmgpLXMqKGkqZC1hKmgpK2YqKGkqYy1hKmwpKSx0WzRdPS0obyooaCpnLWQqdiktdSoobCpnLWMqdikrcCoobCpkLWMqaCkpLHRbNV09ciooaCpnLWQqdiktdSooaSpnLWEqdikrcCooaSpkLWEqaCksdFs2XT0tKHIqKGwqZy1jKnYpLW8qKGkqZy1hKnYpK3AqKGkqYy1hKmwpKSx0WzddPXIqKGwqZC1jKmgpLW8qKGkqZC1hKmgpK3UqKGkqYy1hKmwpLHRbOF09byooZipnLWQqbSktdSoocypnLWMqbSkrcCoocypkLWMqZiksdFs5XT0tKHIqKGYqZy1kKm0pLXUqKG4qZy1hKm0pK3AqKG4qZC1hKmYpKSx0WzEwXT1yKihzKmctYyptKS1vKihuKmctYSptKStwKihuKmMtYSpzKSx0WzExXT0tKHIqKHMqZC1jKmYpLW8qKG4qZC1hKmYpK3UqKG4qYy1hKnMpKSx0WzEyXT0tKG8qKGYqdi1oKm0pLXUqKHMqdi1sKm0pK3AqKHMqaC1sKmYpKSx0WzEzXT1yKihmKnYtaCptKS11KihuKnYtaSptKStwKihuKmgtaSpmKSx0WzE0XT0tKHIqKHMqdi1sKm0pLW8qKG4qdi1pKm0pK3AqKG4qbC1pKnMpKSx0WzE1XT1yKihzKmgtbCpmKS1vKihuKmgtaSpmKSt1KihuKmwtaSpzKSx0fSxpLlNJTUQuYWRqb2ludD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmLGgsZCxwLHI9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKTtyZXR1cm4gdT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHIsbiwwLDEsNCw1KSxzPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaSxhLDAsMSw0LDUpLG89U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZSh1LHMsMCwyLDQsNikscz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHMsdSwxLDMsNSw3KSx1PVNJTUQuRmxvYXQzMng0LnNodWZmbGUocixuLDIsMyw2LDcpLGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShpLGEsMiwzLDYsNyksbD1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHUsYywwLDIsNCw2KSxjPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoYyx1LDEsMyw1LDcpLHU9U0lNRC5GbG9hdDMyeDQubXVsKGwsYyksdT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMSwwLDMsMiksZj1TSU1ELkZsb2F0MzJ4NC5tdWwocyx1KSxoPVNJTUQuRmxvYXQzMng0Lm11bChvLHUpLHU9U0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDIsMywwLDEpLGY9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChzLHUpLGYpLGg9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLHUpLGgpLGg9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDIsMywwLDEpLHU9U0lNRC5GbG9hdDMyeDQubXVsKHMsbCksdT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMSwwLDMsMiksZj1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGMsdSksZikscD1TSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwyLDMsMCwxKSxmPVNJTUQuRmxvYXQzMng0LnN1YihmLFNJTUQuRmxvYXQzMng0Lm11bChjLHUpKSxwPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSxwKSxwPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUocCwyLDMsMCwxKSx1PVNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMiwzLDAsMSksYyksdT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMSwwLDMsMiksbD1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGwsMiwzLDAsMSksZj1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGwsdSksZiksZD1TSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwyLDMsMCwxKSxmPVNJTUQuRmxvYXQzMng0LnN1YihmLFNJTUQuRmxvYXQzMng0Lm11bChsLHUpKSxkPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSxkKSxkPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwyLDMsMCwxKSx1PVNJTUQuRmxvYXQzMng0Lm11bChvLHMpLHU9U0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDEsMCwzLDIpLGQ9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChjLHUpLGQpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChsLHUpLHApLHU9U0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDIsMywwLDEpLGQ9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChjLHUpLGQpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKHAsU0lNRC5GbG9hdDMyeDQubXVsKGwsdSkpLHU9U0lNRC5GbG9hdDMyeDQubXVsKG8sYyksdT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMSwwLDMsMiksaD1TSU1ELkZsb2F0MzJ4NC5zdWIoaCxTSU1ELkZsb2F0MzJ4NC5tdWwobCx1KSksZD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKHMsdSksZCksdT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMiwzLDAsMSksaD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGwsdSksaCksZD1TSU1ELkZsb2F0MzJ4NC5zdWIoZCxTSU1ELkZsb2F0MzJ4NC5tdWwocyx1KSksdT1TSU1ELkZsb2F0MzJ4NC5tdWwobyxsKSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwxLDAsMywyKSxoPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYyx1KSxoKSxwPVNJTUQuRmxvYXQzMng0LnN1YihwLFNJTUQuRmxvYXQzMng0Lm11bChzLHUpKSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwyLDMsMCwxKSxoPVNJTUQuRmxvYXQzMng0LnN1YihoLFNJTUQuRmxvYXQzMng0Lm11bChjLHUpKSxwPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwocyx1KSxwKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDAsZiksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LGgpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxkKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLHApLHR9LGkuYWRqb2ludD1uLlVTRV9TSU1EP2kuU0lNRC5hZGpvaW50Omkuc2NhbGFyLmFkam9pbnQsaS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGY9dFsxMF0saD10WzExXSxkPXRbMTJdLHA9dFsxM10sbT10WzE0XSx2PXRbMTVdO3JldHVybihlKm8tciphKSooZip2LWgqbSktKGUqcy1uKmEpKih1KnYtaCpwKSsoZSpsLWkqYSkqKHUqbS1mKnApKyhyKnMtbipvKSooYyp2LWgqZCktKHIqbC1pKm8pKihjKm0tZipkKSsobipsLWkqcykqKGMqcC11KmQpfSxpLlNJTUQubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwxMikscz1TSU1ELkZsb2F0MzJ4NC5sb2FkKHIsMCksbD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywwLDAsMCwwKSxuKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywxLDEsMSwxKSxpKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywyLDIsMiwyKSxhKSxTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDMsMywzLDMpLG8pKSkpO1NJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxsKTt2YXIgYz1TSU1ELkZsb2F0MzJ4NC5sb2FkKHIsNCksdT1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywwLDAsMCwwKSxuKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywxLDEsMSwxKSxpKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDIsMiwyKSxhKSxTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDMsMywzLDMpLG8pKSkpO1NJTUQuRmxvYXQzMng0LnN0b3JlKHQsNCx1KTt2YXIgZj1TSU1ELkZsb2F0MzJ4NC5sb2FkKHIsOCksaD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwwLDAsMCwwKSxuKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwxLDEsMSwxKSxpKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwyLDIsMiwyKSxhKSxTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShmLDMsMywzLDMpLG8pKSkpO1NJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxoKTt2YXIgZD1TSU1ELkZsb2F0MzJ4NC5sb2FkKHIsMTIpLHA9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGQsMCwwLDAsMCksbiksU0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGQsMSwxLDEsMSksaSksU0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGQsMiwyLDIsMiksYSksU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwzLDMsMywzKSxvKSkpKTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwxMixwKSx0fSxpLnNjYWxhci5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxkPWVbMTBdLHA9ZVsxMV0sbT1lWzEyXSx2PWVbMTNdLGc9ZVsxNF0seT1lWzE1XSxiPXJbMF0seD1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09YipuK3gqcytfKmYrdyptLHRbMV09YippK3gqbCtfKmgrdyp2LHRbMl09YiphK3gqYytfKmQrdypnLHRbM109YipvK3gqdStfKnArdyp5LGI9cls0XSx4PXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPWIqbit4KnMrXypmK3cqbSx0WzVdPWIqaSt4KmwrXypoK3cqdix0WzZdPWIqYSt4KmMrXypkK3cqZyx0WzddPWIqbyt4KnUrXypwK3cqeSxiPXJbOF0seD1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPWIqbit4KnMrXypmK3cqbSx0WzldPWIqaSt4KmwrXypoK3cqdix0WzEwXT1iKmEreCpjK18qZCt3KmcsdFsxMV09YipvK3gqdStfKnArdyp5LGI9clsxMl0seD1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09YipuK3gqcytfKmYrdyptLHRbMTNdPWIqaSt4KmwrXypoK3cqdix0WzE0XT1iKmEreCpjK18qZCt3KmcsdFsxNV09YipvK3gqdStfKnArdyp5LHR9LGkubXVsdGlwbHk9bi5VU0VfU0lNRD9pLlNJTUQubXVsdGlwbHk6aS5zY2FsYXIubXVsdGlwbHksaS5tdWw9aS5tdWx0aXBseSxpLnNjYWxhci50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLGQscCxtPXJbMF0sdj1yWzFdLGc9clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKnYrZVs4XSpnK2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKnYrZVs5XSpnK2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKnYrZVsxMF0qZytlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSp2K2VbMTFdKmcrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0sZD1lWzEwXSxwPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1kLHRbMTFdPXAsdFsxMl09biptK3MqditmKmcrZVsxMl0sdFsxM109aSptK2wqditoKmcrZVsxM10sdFsxNF09YSptK2MqditkKmcrZVsxNF0sdFsxNV09byptK3UqditwKmcrZVsxNV0pLHR9LGkuU0lNRC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwxMikscz1TSU1ELkZsb2F0MzJ4NChyWzBdLHJbMV0sclsyXSwwKTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSksbj1TSU1ELkZsb2F0MzJ4NC5tdWwobixTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMCwwLDAsMCkpLGk9U0lNRC5GbG9hdDMyeDQubXVsKGksU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDEsMSwxLDEpKSxhPVNJTUQuRmxvYXQzMng0Lm11bChhLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywyLDIsMiwyKSk7dmFyIGw9U0lNRC5GbG9hdDMyeDQuYWRkKG4sU0lNRC5GbG9hdDMyeDQuYWRkKGksU0lNRC5GbG9hdDMyeDQuYWRkKGEsbykpKTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwxMixsKSx0fSxpLnRyYW5zbGF0ZT1uLlVTRV9TSU1EP2kuU0lNRC50cmFuc2xhdGU6aS5zY2FsYXIudHJhbnNsYXRlLGkuc2NhbGFyLnNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fSxpLlNJTUQuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPVNJTUQuRmxvYXQzMng0KHJbMF0sclsxXSxyWzJdLDApO3JldHVybiBuPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDAsU0lNRC5GbG9hdDMyeDQubXVsKG4sU0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDAsMCwwLDApKSksaT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0Lm11bChpLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDEsMSwxKSkpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5tdWwoYSxTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMiwyLDIsMikpKSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fSxpLnNjYWxlPW4uVVNFX1NJTUQ/aS5TSU1ELnNjYWxlOmkuc2NhbGFyLnNjYWxlLGkucm90YXRlPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgsZCxwLG0sdixnLHksYix4LF8sdyxNLFQsayxBLEUsUyxMPWlbMF0sQz1pWzFdLEk9aVsyXSxEPU1hdGguc3FydChMKkwrQypDK0kqSSk7cmV0dXJuIE1hdGguYWJzKEQpPG4uRVBTSUxPTj9udWxsOihEPTEvRCxMKj1ELEMqPUQsSSo9RCxhPU1hdGguc2luKHIpLG89TWF0aC5jb3Mocikscz0xLW8sbD1lWzBdLGM9ZVsxXSx1PWVbMl0sZj1lWzNdLGg9ZVs0XSxkPWVbNV0scD1lWzZdLG09ZVs3XSx2PWVbOF0sZz1lWzldLHk9ZVsxMF0sYj1lWzExXSx4PUwqTCpzK28sXz1DKkwqcytJKmEsdz1JKkwqcy1DKmEsTT1MKkMqcy1JKmEsVD1DKkMqcytvLGs9SSpDKnMrTCphLEE9TCpJKnMrQyphLEU9QypJKnMtTCphLFM9SSpJKnMrbyx0WzBdPWwqeCtoKl8rdip3LHRbMV09Yyp4K2QqXytnKncsdFsyXT11KngrcCpfK3kqdyx0WzNdPWYqeCttKl8rYip3LHRbNF09bCpNK2gqVCt2KmssdFs1XT1jKk0rZCpUK2cqayx0WzZdPXUqTStwKlQreSprLHRbN109ZipNK20qVCtiKmssdFs4XT1sKkEraCpFK3YqUyx0WzldPWMqQStkKkUrZypTLHRbMTBdPXUqQStwKkUreSpTLHRbMTFdPWYqQSttKkUrYipTLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHQpfSxpLnNjYWxhci5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fSxpLlNJTUQucm90YXRlWD1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5zaW4ocikpLGk9U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5jb3MocikpO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTt2YXIgYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCksbz1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCk7cmV0dXJuIFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsNCxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsaSksU0lNRC5GbG9hdDMyeDQubXVsKG8sbikpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsU0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGkpLFNJTUQuRmxvYXQzMng0Lm11bChhLG4pKSksdH0saS5yb3RhdGVYPW4uVVNFX1NJTUQ/aS5TSU1ELnJvdGF0ZVg6aS5zY2FsYXIucm90YXRlWCxpLnNjYWxhci5yb3RhdGVZPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppLWMqbix0WzFdPW8qaS11Km4sdFsyXT1zKmktZipuLHRbM109bCppLWgqbix0WzhdPWEqbitjKmksdFs5XT1vKm4rdSppLHRbMTBdPXMqbitmKmksdFsxMV09bCpuK2gqaSx0fSxpLlNJTUQucm90YXRlWT1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5zaW4ocikpLGk9U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5jb3MocikpO2UhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTt2YXIgYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMCksbz1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCk7cmV0dXJuIFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKGEsaSksU0lNRC5GbG9hdDMyeDQubXVsKG8sbikpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsU0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChhLG4pLFNJTUQuRmxvYXQzMng0Lm11bChvLGkpKSksdH0saS5yb3RhdGVZPW4uVVNFX1NJTUQ/aS5TSU1ELnJvdGF0ZVk6aS5zY2FsYXIucm90YXRlWSxpLnNjYWxhci5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGY9ZVs2XSxoPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStmKm4sdFszXT1sKmkraCpuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1mKmktcypuLHRbN109aCppLWwqbix0fSxpLlNJTUQucm90YXRlWj1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5zaW4ocikpLGk9U0lNRC5GbG9hdDMyeDQuc3BsYXQoTWF0aC5jb3MocikpO2UhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7dmFyIGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLG89U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpO3JldHVybiBTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDAsU0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChhLGkpLFNJTUQuRmxvYXQzMng0Lm11bChvLG4pKSksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwobyxpKSxTSU1ELkZsb2F0MzJ4NC5tdWwoYSxuKSkpLHR9LGkucm90YXRlWj1uLlVTRV9TSU1EP2kuU0lNRC5yb3RhdGVaOmkuc2NhbGFyLnJvdGF0ZVosaS5mcm9tVHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT1lWzBdLHRbMTNdPWVbMV0sdFsxNF09ZVsyXSx0WzE1XT0xLHR9LGkuZnJvbVNjYWxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWVbMV0sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPWVbMl0sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1yWzBdLGw9clsxXSxjPXJbMl0sdT1NYXRoLnNxcnQocypzK2wqbCtjKmMpO3JldHVybiBNYXRoLmFicyh1KTxuLkVQU0lMT04/bnVsbDoodT0xL3Uscyo9dSxsKj11LGMqPXUsaT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLG89MS1hLHRbMF09cypzKm8rYSx0WzFdPWwqcypvK2MqaSx0WzJdPWMqcypvLWwqaSx0WzNdPTAsdFs0XT1zKmwqby1jKmksdFs1XT1sKmwqbythLHRbNl09YypsKm8rcyppLHRbN109MCx0WzhdPXMqYypvK2wqaSx0WzldPWwqYypvLXMqaSx0WzEwXT1jKmMqbythLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0KX0saS5mcm9tWFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW4sdFs2XT1yLHRbN109MCx0WzhdPTAsdFs5XT0tcix0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLmZyb21ZUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT0wLHRbMl09LXIsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPXIsdFs5XT0wLHRbMTBdPW4sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuZnJvbVpSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109MCx0WzRdPS1yLHRbNV09bix0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcm9tUm90YXRpb25UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxmPW4qbCxoPW4qYyxkPWkqbCxwPWkqYyxtPWEqYyx2PW8qcyxnPW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShkK20pLHRbMV09Zit5LHRbMl09aC1nLHRbM109MCx0WzRdPWYteSx0WzVdPTEtKHUrbSksdFs2XT1wK3YsdFs3XT0wLHRbOF09aCtnLHRbOV09cC12LHRbMTBdPTEtKHUrZCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9LGkuZ2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzEyXSx0WzFdPWVbMTNdLHRbMl09ZVsxNF0sdH0saS5nZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0rZVs1XStlWzEwXSxuPTA7cmV0dXJuIHI+MD8obj0yKk1hdGguc3FydChyKzEpLHRbM109LjI1Km4sdFswXT0oZVs2XS1lWzldKS9uLHRbMV09KGVbOF0tZVsyXSkvbix0WzJdPShlWzFdLWVbNF0pL24pOmVbMF0+ZVs1XSZlWzBdPmVbMTBdPyhuPTIqTWF0aC5zcXJ0KDErZVswXS1lWzVdLWVbMTBdKSx0WzNdPShlWzZdLWVbOV0pL24sdFswXT0uMjUqbix0WzFdPShlWzFdK2VbNF0pL24sdFsyXT0oZVs4XStlWzJdKS9uKTplWzVdPmVbMTBdPyhuPTIqTWF0aC5zcXJ0KDErZVs1XS1lWzBdLWVbMTBdKSx0WzNdPShlWzhdLWVbMl0pL24sdFswXT0oZVsxXStlWzRdKS9uLHRbMV09LjI1Km4sdFsyXT0oZVs2XStlWzldKS9uKToobj0yKk1hdGguc3FydCgxK2VbMTBdLWVbMF0tZVs1XSksdFszXT0oZVsxXS1lWzRdKS9uLHRbMF09KGVbOF0rZVsyXSkvbix0WzFdPShlWzZdK2VbOV0pL24sdFsyXT0uMjUqbiksdH0saS5mcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM10sbD1pK2ksYz1hK2EsdT1vK28sZj1pKmwsaD1pKmMsZD1pKnUscD1hKmMsbT1hKnUsdj1vKnUsZz1zKmwseT1zKmMsYj1zKnUseD1uWzBdLF89blsxXSx3PW5bMl07cmV0dXJuIHRbMF09KDEtKHArdikpKngsdFsxXT0oaCtiKSp4LHRbMl09KGQteSkqeCx0WzNdPTAsdFs0XT0oaC1iKSpfLHRbNV09KDEtKGYrdikpKl8sdFs2XT0obStnKSpfLHRbN109MCx0WzhdPShkK3kpKncsdFs5XT0obS1nKSp3LHRbMTBdPSgxLShmK3ApKSp3LHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fSxpLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVPcmlnaW49ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9YSthLHU9bytvLGY9cytzLGg9YSpjLGQ9YSp1LHA9YSpmLG09byp1LHY9bypmLGc9cypmLHk9bCpjLGI9bCp1LHg9bCpmLF89blswXSx3PW5bMV0sTT1uWzJdLFQ9aVswXSxrPWlbMV0sQT1pWzJdO3JldHVybiB0WzBdPSgxLShtK2cpKSpfLHRbMV09KGQreCkqXyx0WzJdPShwLWIpKl8sdFszXT0wLHRbNF09KGQteCkqdyx0WzVdPSgxLShoK2cpKSp3LHRbNl09KHYreSkqdyx0WzddPTAsdFs4XT0ocCtiKSpNLHRbOV09KHYteSkqTSx0WzEwXT0oMS0oaCttKSkqTSx0WzExXT0wLHRbMTJdPXJbMF0rVC0odFswXSpUK3RbNF0qayt0WzhdKkEpLHRbMTNdPXJbMV0ray0odFsxXSpUK3RbNV0qayt0WzldKkEpLHRbMTRdPXJbMl0rQS0odFsyXSpUK3RbNl0qayt0WzEwXSpBKSx0WzE1XT0xLHR9LGkuZnJvbVF1YXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGY9bipzLGg9aSpvLGQ9aSpzLHA9aSpsLG09YSpvLHY9YSpzLGc9YSpsO3JldHVybiB0WzBdPTEtZi1wLHRbMV09dStnLHRbMl09aC12LHRbM109MCx0WzRdPXUtZyx0WzVdPTEtYy1wLHRbNl09ZCttLHRbN109MCx0WzhdPWgrdix0WzldPWQtbSx0WzEwXT0xLWMtZix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcnVzdHVtPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKHItZSksbD0xLyhpLW4pLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0yKmEqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0yKmEqbCx0WzZdPTAsdFs3XT0wLHRbOF09KHIrZSkqcyx0WzldPShpK24pKmwsdFsxMF09KG8rYSkqYyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09byphKjIqYyx0WzE1XT0wLHR9LGkucGVyc3BlY3RpdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH0saS5wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1NYXRoLnRhbihlLnVwRGVncmVlcypNYXRoLlBJLzE4MCksYT1NYXRoLnRhbihlLmRvd25EZWdyZWVzKk1hdGguUEkvMTgwKSxvPU1hdGgudGFuKGUubGVmdERlZ3JlZXMqTWF0aC5QSS8xODApLHM9TWF0aC50YW4oZS5yaWdodERlZ3JlZXMqTWF0aC5QSS8xODApLGw9Mi8obytzKSxjPTIvKGkrYSk7cmV0dXJuIHRbMF09bCx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1jLHRbNl09MCx0WzddPTAsdFs4XT0tKChvLXMpKmwqLjUpLHRbOV09KGktYSkqYyouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fSxpLm9ydGhvPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH0saS5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdSxmLGgsZCxwLG0sdj1lWzBdLGc9ZVsxXSx5PWVbMl0sYj1hWzBdLHg9YVsxXSxfPWFbMl0sdz1yWzBdLE09clsxXSxUPXJbMl07cmV0dXJuIE1hdGguYWJzKHYtdyk8bi5FUFNJTE9OJiZNYXRoLmFicyhnLU0pPG4uRVBTSUxPTiYmTWF0aC5hYnMoeS1UKTxuLkVQU0lMT04/aS5pZGVudGl0eSh0KTooaD12LXcsZD1nLU0scD15LVQsbT0xL01hdGguc3FydChoKmgrZCpkK3AqcCksaCo9bSxkKj1tLHAqPW0sbz14KnAtXypkLHM9XypoLWIqcCxsPWIqZC14KmgsbT1NYXRoLnNxcnQobypvK3MqcytsKmwpLG0/KG09MS9tLG8qPW0scyo9bSxsKj1tKToobz0wLHM9MCxsPTApLGM9ZCpsLXAqcyx1PXAqby1oKmwsZj1oKnMtZCpvLG09TWF0aC5zcXJ0KGMqYyt1KnUrZipmKSxtPyhtPTEvbSxjKj1tLHUqPW0sZio9bSk6KGM9MCx1PTAsZj0wKSx0WzBdPW8sdFsxXT1jLHRbMl09aCx0WzNdPTAsdFs0XT1zLHRbNV09dSx0WzZdPWQsdFs3XT0wLHRbOF09bCx0WzldPWYsdFsxMF09cCx0WzExXT0wLHRbMTJdPS0obyp2K3MqZytsKnkpLHRbMTNdPS0oYyp2K3UqZytmKnkpLHRbMTRdPS0oaCp2K2QqZytwKnkpLHRbMTVdPTEsdCl9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9LGkuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpK01hdGgucG93KHRbNl0sMikrTWF0aC5wb3codFs3XSwyKStNYXRoLnBvdyh0WzhdLDIpK01hdGgucG93KHRbOV0sMikrTWF0aC5wb3codFsxMF0sMikrTWF0aC5wb3codFsxMV0sMikrTWF0aC5wb3codFsxMl0sMikrTWF0aC5wb3codFsxM10sMikrTWF0aC5wb3codFsxNF0sMikrTWF0aC5wb3codFsxNV0sMikpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHRbNl09ZVs2XStyWzZdLHRbN109ZVs3XStyWzddLHRbOF09ZVs4XStyWzhdLAp0WzldPWVbOV0rcls5XSx0WzEwXT1lWzEwXStyWzEwXSx0WzExXT1lWzExXStyWzExXSx0WzEyXT1lWzEyXStyWzEyXSx0WzEzXT1lWzEzXStyWzEzXSx0WzE0XT1lWzE0XStyWzE0XSx0WzE1XT1lWzE1XStyWzE1XSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdFs0XT1lWzRdLXJbNF0sdFs1XT1lWzVdLXJbNV0sdFs2XT1lWzZdLXJbNl0sdFs3XT1lWzddLXJbN10sdFs4XT1lWzhdLXJbOF0sdFs5XT1lWzldLXJbOV0sdFsxMF09ZVsxMF0tclsxMF0sdFsxMV09ZVsxMV0tclsxMV0sdFsxMl09ZVsxMl0tclsxMl0sdFsxM109ZVsxM10tclsxM10sdFsxNF09ZVsxNF0tclsxNF0sdFsxNV09ZVsxNV0tclsxNV0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdFs0XT1lWzRdKnIsdFs1XT1lWzVdKnIsdFs2XT1lWzZdKnIsdFs3XT1lWzddKnIsdFs4XT1lWzhdKnIsdFs5XT1lWzldKnIsdFsxMF09ZVsxMF0qcix0WzExXT1lWzExXSpyLHRbMTJdPWVbMTJdKnIsdFsxM109ZVsxM10qcix0WzE0XT1lWzE0XSpyLHRbMTVdPWVbMTVdKnIsdH0saS5tdWx0aXBseVNjYWxhckFuZEFkZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0WzRdPWVbNF0rcls0XSpuLHRbNV09ZVs1XStyWzVdKm4sdFs2XT1lWzZdK3JbNl0qbix0WzddPWVbN10rcls3XSpuLHRbOF09ZVs4XStyWzhdKm4sdFs5XT1lWzldK3JbOV0qbix0WzEwXT1lWzEwXStyWzEwXSpuLHRbMTFdPWVbMTFdK3JbMTFdKm4sdFsxMl09ZVsxMl0rclsxMl0qbix0WzEzXT1lWzEzXStyWzEzXSpuLHRbMTRdPWVbMTRdK3JbMTRdKm4sdFsxNV09ZVsxNV0rclsxNV0qbix0fSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzddPT09ZVs3XSYmdFs4XT09PWVbOF0mJnRbOV09PT1lWzldJiZ0WzEwXT09PWVbMTBdJiZ0WzExXT09PWVbMTFdJiZ0WzEyXT09PWVbMTJdJiZ0WzEzXT09PWVbMTNdJiZ0WzE0XT09PWVbMTRdJiZ0WzE1XT09PWVbMTVdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz10WzRdLGw9dFs1XSxjPXRbNl0sdT10WzddLGY9dFs4XSxoPXRbOV0sZD10WzEwXSxwPXRbMTFdLG09dFsxMl0sdj10WzEzXSxnPXRbMTRdLHk9dFsxNV0sYj1lWzBdLHg9ZVsxXSxfPWVbMl0sdz1lWzNdLE09ZVs0XSxUPWVbNV0saz1lWzZdLEE9ZVs3XSxFPWVbOF0sUz1lWzldLEw9ZVsxMF0sQz1lWzExXSxJPWVbMTJdLEQ9ZVsxM10sUD1lWzE0XSx6PWVbMTVdO3JldHVybiBNYXRoLmFicyhyLWIpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhiKSkmJk1hdGguYWJzKGkteCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKHgpKSYmTWF0aC5hYnMoYS1fKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMoXykpJiZNYXRoLmFicyhvLXcpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyh3KSkmJk1hdGguYWJzKHMtTSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHMpLE1hdGguYWJzKE0pKSYmTWF0aC5hYnMobC1UKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobCksTWF0aC5hYnMoVCkpJiZNYXRoLmFicyhjLWspPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhjKSxNYXRoLmFicyhrKSkmJk1hdGguYWJzKHUtQSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHUpLE1hdGguYWJzKEEpKSYmTWF0aC5hYnMoZi1FKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoZiksTWF0aC5hYnMoRSkpJiZNYXRoLmFicyhoLVMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhoKSxNYXRoLmFicyhTKSkmJk1hdGguYWJzKGQtTCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGQpLE1hdGguYWJzKEwpKSYmTWF0aC5hYnMocC1DKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMocCksTWF0aC5hYnMoQykpJiZNYXRoLmFicyhtLUkpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhtKSxNYXRoLmFicyhJKSkmJk1hdGguYWJzKHYtRCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHYpLE1hdGguYWJzKEQpKSYmTWF0aC5hYnMoZy1QKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoZyksTWF0aC5hYnMoUCkpJiZNYXRoLmFicyh5LXopPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyh5KSxNYXRoLmFicyh6KSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTh9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9dCgiLi9tYXQzLmpzIiksYT10KCIuL3ZlYzMuanMiKSxvPXQoIi4vdmVjNC5qcyIpLHM9e307cy5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0scy5yb3RhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHQ9YS5jcmVhdGUoKSxlPWEuZnJvbVZhbHVlcygxLDAsMCkscj1hLmZyb21WYWx1ZXMoMCwxLDApO3JldHVybiBmdW5jdGlvbihuLGksbyl7dmFyIGw9YS5kb3QoaSxvKTtyZXR1cm4gbDwtLjk5OTk5OT8oYS5jcm9zcyh0LGUsaSksYS5sZW5ndGgodCk8MWUtNiYmYS5jcm9zcyh0LHIsaSksYS5ub3JtYWxpemUodCx0KSxzLnNldEF4aXNBbmdsZShuLHQsTWF0aC5QSSksbik6bD4uOTk5OTk5PyhuWzBdPTAsblsxXT0wLG5bMl09MCxuWzNdPTEsbik6KGEuY3Jvc3ModCxpLG8pLG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109MStsLHMubm9ybWFsaXplKG4sbikpfX0oKSxzLnNldEF4ZXM9ZnVuY3Rpb24oKXt2YXIgdD1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gdFswXT1uWzBdLHRbM109blsxXSx0WzZdPW5bMl0sdFsxXT1pWzBdLHRbNF09aVsxXSx0WzddPWlbMl0sdFsyXT0tclswXSx0WzVdPS1yWzFdLHRbOF09LXJbMl0scy5ub3JtYWxpemUoZSxzLmZyb21NYXQzKGUsdCkpfX0oKSxzLmNsb25lPW8uY2xvbmUscy5mcm9tVmFsdWVzPW8uZnJvbVZhbHVlcyxzLmNvcHk9by5jb3B5LHMuc2V0PW8uc2V0LHMuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxzLnNldEF4aXNBbmdsZT1mdW5jdGlvbih0LGUscil7cio9LjU7dmFyIG49TWF0aC5zaW4ocik7cmV0dXJuIHRbMF09biplWzBdLHRbMV09biplWzFdLHRbMl09biplWzJdLHRbM109TWF0aC5jb3MociksdH0scy5nZXRBeGlzQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj0yKk1hdGguYWNvcyhlWzNdKSxuPU1hdGguc2luKHIvMik7cmV0dXJuIDAhPW4/KHRbMF09ZVswXS9uLHRbMV09ZVsxXS9uLHRbMl09ZVsyXS9uKToodFswXT0xLHRbMV09MCx0WzJdPTApLHJ9LHMuYWRkPW8uYWRkLHMubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXSxjPXJbMl0sdT1yWzNdO3JldHVybiB0WzBdPW4qdStvKnMraSpjLWEqbCx0WzFdPWkqdStvKmwrYSpzLW4qYyx0WzJdPWEqdStvKmMrbipsLWkqcyx0WzNdPW8qdS1uKnMtaSpsLWEqYyx0fSxzLm11bD1zLm11bHRpcGx5LHMuc2NhbGU9by5zY2FsZSxzLnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3IqPS41O3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCtvKnMsdFsxXT1pKmwrYSpzLHRbMl09YSpsLWkqcyx0WzNdPW8qbC1uKnMsdH0scy5yb3RhdGVZPWZ1bmN0aW9uKHQsZSxyKXtyKj0uNTt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwtYSpzLHRbMV09aSpsK28qcyx0WzJdPWEqbCtuKnMsdFszXT1vKmwtaSpzLHR9LHMucm90YXRlWj1mdW5jdGlvbih0LGUscil7cio9LjU7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipsK2kqcyx0WzFdPWkqbC1uKnMsdFsyXT1hKmwrbypzLHRbM109bypsLWEqcyx0fSxzLmNhbGN1bGF0ZVc9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl07cmV0dXJuIHRbMF09cix0WzFdPW4sdFsyXT1pLHRbM109TWF0aC5zcXJ0KE1hdGguYWJzKDEtcipyLW4qbi1pKmkpKSx0fSxzLmRvdD1vLmRvdCxzLmxlcnA9by5sZXJwLHMuc2xlcnA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10sZD1yWzBdLHA9clsxXSxtPXJbMl0sdj1yWzNdO3JldHVybiBhPWMqZCt1KnArZiptK2gqdixhPDAmJihhPS1hLGQ9LWQscD0tcCxtPS1tLHY9LXYpLDEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9biksdFswXT1zKmMrbCpkLHRbMV09cyp1K2wqcCx0WzJdPXMqZitsKm0sdFszXT1zKmgrbCp2LHR9LHMuc3FsZXJwPWZ1bmN0aW9uKCl7dmFyIHQ9cy5jcmVhdGUoKSxlPXMuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKHIsbixpLGEsbyxsKXtyZXR1cm4gcy5zbGVycCh0LG4sbyxsKSxzLnNsZXJwKGUsaSxhLGwpLHMuc2xlcnAocix0LGUsMipsKigxLWwpKSxyfX0oKSxzLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmEscz1vPzEvbzowO3JldHVybiB0WzBdPS1yKnMsdFsxXT0tbipzLHRbMl09LWkqcyx0WzNdPWEqcyx0fSxzLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPWVbM10sdH0scy5sZW5ndGg9by5sZW5ndGgscy5sZW49cy5sZW5ndGgscy5zcXVhcmVkTGVuZ3RoPW8uc3F1YXJlZExlbmd0aCxzLnNxckxlbj1zLnNxdWFyZWRMZW5ndGgscy5ub3JtYWxpemU9by5ub3JtYWxpemUscy5mcm9tTWF0Mz1mdW5jdGlvbih0LGUpe3ZhciByLG49ZVswXStlWzRdK2VbOF07aWYobj4wKXI9TWF0aC5zcXJ0KG4rMSksdFszXT0uNSpyLHI9LjUvcix0WzBdPShlWzVdLWVbN10pKnIsdFsxXT0oZVs2XS1lWzJdKSpyLHRbMl09KGVbMV0tZVszXSkqcjtlbHNle3ZhciBpPTA7ZVs0XT5lWzBdJiYoaT0xKSxlWzhdPmVbMyppK2ldJiYoaT0yKTt2YXIgYT0oaSsxKSUzLG89KGkrMiklMztyPU1hdGguc3FydChlWzMqaStpXS1lWzMqYSthXS1lWzMqbytvXSsxKSx0W2ldPS41KnIscj0uNS9yLHRbM109KGVbMyphK29dLWVbMypvK2FdKSpyLHRbYV09KGVbMyphK2ldK2VbMyppK2FdKSpyLHRbb109KGVbMypvK2ldK2VbMyppK29dKSpyfXJldHVybiB0fSxzLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4icXVhdCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSxzLmV4YWN0RXF1YWxzPW8uZXhhY3RFcXVhbHMscy5lcXVhbHM9by5lcXVhbHMsZS5leHBvcnRzPXN9LHsiLi9jb21tb24uanMiOjE5OCwiLi9tYXQzLmpzIjoyMDEsIi4vdmVjMy5qcyI6MjA1LCIuL3ZlYzQuanMiOjIwNn1dLDIwNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoMik7cmV0dXJuIHRbMF09MCx0WzFdPTAsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDIpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGV9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLkFSUkFZX1RZUEUoMik7cmV0dXJuIHJbMF09dCxyWzFdPWUscn0saS5jb3B5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdH0saS5zZXQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWUsdFsxXT1yLHR9LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHR9LGkubXVsPWkubXVsdGlwbHksaS5kaXZpZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0fSxpLmRpdj1pLmRpdmlkZSxpLmNlaWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdH0saS5mbG9vcj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguZmxvb3IoZVswXSksdFsxXT1NYXRoLmZsb29yKGVbMV0pLHR9LGkubWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0fSxpLm1heD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdH0saS5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGgucm91bmQoZVswXSksdFsxXT1NYXRoLnJvdW5kKGVbMV0pLHR9LGkuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0fSxpLnNjYWxlQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdH0saS5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfSxpLmRpc3Q9aS5kaXN0YW5jZSxpLnNxdWFyZWREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXTtyZXR1cm4gcipyK24qbn0saS5zcXJEaXN0PWkuc3F1YXJlZERpc3RhbmNlLGkubGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBNYXRoLnNxcnQoZSplK3Iqcil9LGkubGVuPWkubGVuZ3RoLGkuc3F1YXJlZExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtyZXR1cm4gZSplK3Iqcn0saS5zcXJMZW49aS5zcXVhcmVkTGVuZ3RoLGkubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0fSxpLmludmVyc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdH0saS5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXIqcituKm47cmV0dXJuIGk+MCYmKGk9MS9NYXRoLnNxcnQoaSksdFswXT1lWzBdKmksdFsxXT1lWzFdKmkpLHR9LGkuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19LGkuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0qclsxXS1lWzFdKnJbMF07cmV0dXJuIHRbMF09dFsxXT0wLHRbMl09bix0fSxpLmxlcnA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHR9LGkucmFuZG9tPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqbi5SQU5ET00oKSpNYXRoLlBJO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmUsdFsxXT1NYXRoLnNpbihyKSplLHR9LGkudHJhbnNmb3JtTWF0Mj1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbMl0qaSx0WzFdPXJbMV0qbityWzNdKmksdH0saS50cmFuc2Zvcm1NYXQyZD1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbMl0qaStyWzRdLHRbMV09clsxXSpuK3JbM10qaStyWzVdLHR9LGkudHJhbnNmb3JtTWF0Mz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbM10qaStyWzZdLHRbMV09clsxXSpuK3JbNF0qaStyWzddLHR9LGkudHJhbnNmb3JtTWF0ND1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdH0saS5mb3JFYWNoPWZ1bmN0aW9uKCl7dmFyIHQ9aS5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSxhLG8pe3ZhciBzLGw7Zm9yKHJ8fChyPTIpLG58fChuPTApLGw9aT9NYXRoLm1pbihpKnIrbixlLmxlbmd0aCk6ZS5sZW5ndGgscz1uO3M8bDtzKz1yKXRbMF09ZVtzXSx0WzFdPWVbcysxXSxhKHQsdCxvKSxlW3NdPXRbMF0sZVtzKzFdPXRbMV07cmV0dXJuIGV9fSgpLGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJ2ZWMyKCIrdFswXSsiLCAiK3RbMV0rIikifSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX0saS5lcXVhbHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBNYXRoLmFicyhyLWEpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhhKSkmJk1hdGguYWJzKGktbyk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5OH1dLDIwNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoMyk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSgzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uZXcgbi5BUlJBWV9UWVBFKDMpO3JldHVybiBpWzBdPXQsaVsxXT1lLGlbMl09cixpfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH0saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHR9LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHR9LGkubXVsPWkubXVsdGlwbHksaS5kaXZpZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0fSxpLmRpdj1pLmRpdmlkZSxpLmNlaWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdH0saS5mbG9vcj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguZmxvb3IoZVswXSksdFsxXT1NYXRoLmZsb29yKGVbMV0pLHRbMl09TWF0aC5mbG9vcihlWzJdKSx0fSxpLm1pbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9LGkubWF4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdH0saS5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGgucm91bmQoZVswXSksdFsxXT1NYXRoLnJvdW5kKGVbMV0pLHRbMl09TWF0aC5yb3VuZChlWzJdKSx0fSxpLnNjYWxlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH0saS5zY2FsZUFuZEFkZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdH0saS5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX0saS5kaXN0PWkuZGlzdGFuY2UsaS5zcXVhcmVkRGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfSxpLnNxckRpc3Q9aS5zcXVhcmVkRGlzdGFuY2UsaS5sZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4pfSxpLmxlbj1pLmxlbmd0aCxpLnNxdWFyZWRMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBlKmUrcipyK24qbn0saS5zcXJMZW49aS5zcXVhcmVkTGVuZ3RoLGkubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHR9LGkuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0fSxpLm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO3JldHVybiBhPjAmJihhPTEvTWF0aC5zcXJ0KGEpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphKSx0fSxpLmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX0saS5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fSxpLmxlcnA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fSxpLmhlcm1pdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWEqYSxzPW8qKDIqYS0zKSsxLGw9byooYS0yKSthLGM9byooYS0xKSx1PW8qKDMtMiphKTtyZXR1cm4gdFswXT1lWzBdKnMrclswXSpsK25bMF0qYytpWzBdKnUsdFsxXT1lWzFdKnMrclsxXSpsK25bMV0qYytpWzFdKnUsdFsyXT1lWzJdKnMrclsyXSpsK25bMl0qYytpWzJdKnUsdH0saS5iZXppZXI9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTEtYSxzPW8qbyxsPWEqYSxjPXMqbyx1PTMqYSpzLGY9MypsKm8saD1sKmE7cmV0dXJuIHRbMF09ZVswXSpjK3JbMF0qdStuWzBdKmYraVswXSpoLHRbMV09ZVsxXSpjK3JbMV0qdStuWzFdKmYraVsxXSpoLHRbMl09ZVsyXSpjK3JbMl0qdStuWzJdKmYraVsyXSpoLHR9LGkucmFuZG9tPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqbi5SQU5ET00oKSpNYXRoLlBJLGk9MipuLlJBTkRPTSgpLTEsYT1NYXRoLnNxcnQoMS1pKmkpKmU7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqYSx0WzFdPU1hdGguc2luKHIpKmEsdFsyXT1pKmUsdH0saS50cmFuc2Zvcm1NYXQ0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV07cmV0dXJuIG89b3x8MSx0WzBdPShyWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSkvbyx0WzFdPShyWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSkvbyx0WzJdPShyWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0pL28sdH0saS50cmFuc2Zvcm1NYXQzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl07cmV0dXJuIHRbMF09bipyWzBdK2kqclszXSthKnJbNl0sdFsxXT1uKnJbMV0raSpyWzRdK2Eqcls3XSx0WzJdPW4qclsyXStpKnJbNV0rYSpyWzhdLHR9LGkudHJhbnNmb3JtUXVhdD1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixkPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrZCotbytmKi1sLWgqLXMsdFsxXT1mKmMrZCotcytoKi1vLXUqLWwsdFsyXT1oKmMrZCotbCt1Ki1zLWYqLW8sdH0saS5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W107cmV0dXJuIGlbMF09ZVswXS1yWzBdLGlbMV09ZVsxXS1yWzFdLGlbMl09ZVsyXS1yWzJdLGFbMF09aVswXSxhWzFdPWlbMV0qTWF0aC5jb3MobiktaVsyXSpNYXRoLnNpbihuKSxhWzJdPWlbMV0qTWF0aC5zaW4obikraVsyXSpNYXRoLmNvcyhuKSx0WzBdPWFbMF0rclswXSx0WzFdPWFbMV0rclsxXSx0WzJdPWFbMl0rclsyXSx0fSxpLnJvdGF0ZVk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9W10sYT1bXTtyZXR1cm4gaVswXT1lWzBdLXJbMF0saVsxXT1lWzFdLXJbMV0saVsyXT1lWzJdLXJbMl0sYVswXT1pWzJdKk1hdGguc2luKG4pK2lbMF0qTWF0aC5jb3MobiksYVsxXT1pWzFdLGFbMl09aVsyXSpNYXRoLmNvcyhuKS1pWzBdKk1hdGguc2luKG4pLHRbMF09YVswXStyWzBdLHRbMV09YVsxXStyWzFdLHRbMl09YVsyXStyWzJdLHR9LGkucm90YXRlWj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdO3JldHVybiBpWzBdPWVbMF0tclswXSxpWzFdPWVbMV0tclsxXSxpWzJdPWVbMl0tclsyXSxhWzBdPWlbMF0qTWF0aC5jb3MobiktaVsxXSpNYXRoLnNpbihuKSxhWzFdPWlbMF0qTWF0aC5zaW4obikraVsxXSpNYXRoLmNvcyhuKSxhWzJdPWlbMl0sdFswXT1hWzBdK3JbMF0sdFsxXT1hWzFdK3JbMV0sdFsyXT1hWzJdK3JbMl0sdH0saS5mb3JFYWNoPWZ1bmN0aW9uKCl7dmFyIHQ9aS5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSxhLG8pe3ZhciBzLGw7Zm9yKHJ8fChyPTMpLG58fChuPTApLGw9aT9NYXRoLm1pbihpKnIrbixlLmxlbmd0aCk6ZS5sZW5ndGgscz1uO3M8bDtzKz1yKXRbMF09ZVtzXSx0WzFdPWVbcysxXSx0WzJdPWVbcysyXSxhKHQsdCxvKSxlW3NdPXRbMF0sZVtzKzFdPXRbMV0sZVtzKzJdPXRbMl07cmV0dXJuIGV9fSgpLGkuYW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLmZyb21WYWx1ZXModFswXSx0WzFdLHRbMl0pLG49aS5mcm9tVmFsdWVzKGVbMF0sZVsxXSxlWzJdKTtpLm5vcm1hbGl6ZShyLHIpLGkubm9ybWFsaXplKG4sbik7dmFyIGE9aS5kb3QocixuKTtyZXR1cm4gYT4xPzA6TWF0aC5hY29zKGEpfSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4idmVjMygiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiKSJ9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXX0saS5lcXVhbHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSYmTWF0aC5hYnMoaS1zKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMocykpJiZNYXRoLmFicyhhLWwpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTh9XSwyMDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9e307aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGFbMF09dCxhWzFdPWUsYVsyXT1yLGFbM109aSxhfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0fSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0WzNdPWVbM10qclszXSx0fSxpLm11bD1pLm11bHRpcGx5LGkuZGl2aWRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdFszXT1lWzNdL3JbM10sdH0saS5kaXY9aS5kaXZpZGUsaS5jZWlsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHRbM109TWF0aC5jZWlsKGVbM10pLHR9LGkuZmxvb3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmZsb29yKGVbMF0pLHRbMV09TWF0aC5mbG9vcihlWzFdKSx0WzJdPU1hdGguZmxvb3IoZVsyXSksdFszXT1NYXRoLmZsb29yKGVbM10pLHR9LGkubWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9LGkubWF4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9LGkucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLnJvdW5kKGVbMF0pLHRbMV09TWF0aC5yb3VuZChlWzFdKSx0WzJdPU1hdGgucm91bmQoZVsyXSksdFszXT1NYXRoLnJvdW5kKGVbM10pLHR9LGkuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fSxpLnNjYWxlQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHR9LGkuZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSthKmEpfSxpLmRpc3Q9aS5kaXN0YW5jZSxpLnNxdWFyZWREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gcipyK24qbitpKmkrYSphfSxpLnNxckRpc3Q9aS5zcXVhcmVkRGlzdGFuY2UsaS5sZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9LGkubGVuPWkubGVuZ3RoLGkuc3F1YXJlZExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBlKmUrcipyK24qbitpKml9LGkuc3FyTGVuPWkuc3F1YXJlZExlbmd0aCxpLm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHR9LGkuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0WzNdPTEvZVszXSx0fSxpLm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7cmV0dXJuIG8+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1yKm8sdFsxXT1uKm8sdFsyXT1pKm8sdFszXT1hKm8pLHR9LGkuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX0saS5sZXJwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9LGkucmFuZG9tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MSx0WzBdPW4uUkFORE9NKCksdFsxXT1uLlJBTkRPTSgpLHRbMl09bi5SQU5ET00oKSx0WzNdPW4uUkFORE9NKCksaS5ub3JtYWxpemUodCx0KSxpLnNjYWxlKHQsdCxlKSx0fSxpLnRyYW5zZm9ybU1hdDQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9LGkudHJhbnNmb3JtUXVhdD1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixkPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrZCotbytmKi1sLWgqLXMsdFsxXT1mKmMrZCotcytoKi1vLXUqLWwsdFsyXT1oKmMrZCotbCt1Ki1zLWYqLW8sdFszXT1lWzNdLHR9LGkuZm9yRWFjaD1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGksYSxvKXt2YXIgcyxsO2ZvcihyfHwocj00KSxufHwobj0wKSxsPWk/TWF0aC5taW4oaSpyK24sZS5sZW5ndGgpOmUubGVuZ3RoLHM9bjtzPGw7cys9cil0WzBdPWVbc10sdFsxXT1lW3MrMV0sdFsyXT1lW3MrMl0sdFszXT1lW3MrM10sYSh0LHQsbyksZVtzXT10WzBdLGVbcysxXT10WzFdLGVbcysyXT10WzJdLGVbcyszXT10WzNdO3JldHVybiBlfX0oKSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4idmVjNCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdO3JldHVybiBNYXRoLmFicyhyLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGktbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKSYmTWF0aC5hYnMoYS1jKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMoYykpJiZNYXRoLmFicyhvLXUpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyh1KSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTh9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIGkodCxlLHIsaSxhKXtmb3IodmFyIG89bihpLG4ocixuKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmFbMF0qKDErb1swXSksLjUqYVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gYSh0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsbj0wLGk9MDtpPDI7KytpKXIrPU1hdGgucG93KGVbaV0tdFswXVtpXSwyKSxuKz1NYXRoLnBvdyhlW2ldLXRbMV1baV0sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLG49TWF0aC5zcXJ0KG4pLHIrbjwxZS02P1sxLDBdOltuLyhyK24pLHIvKG4rcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIGE9WzAsMF07cmV0dXJuIGModFswXSx0WzFdLHRbMl0sZSxhKSxsKHQsYSl9cmV0dXJuW119ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWZ1bmN0aW9uIHModCxlLHIsbixzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9MDt1PHQubGVuZ3RoOysrdSljW3VdPWkodFt1XSxyLG4scyxsKTtmb3IodmFyIGY9MCxoPTEvMCx1PTA7dTxjLmxlbmd0aDsrK3Upe2Zvcih2YXIgZD0wLHA9MDtwPDI7KytwKWQrPU1hdGgucG93KGNbdV1bcF0tZVtwXSwyKTtkPGgmJihoPWQsZj11KX1mb3IodmFyIG09YShjLGUpLHY9MCx1PTA7dTwzOysrdSl7aWYobVt1XTwtLjAwMXx8bVt1XT4xLjAwMDEpcmV0dXJuIG51bGw7dis9bVt1XX1yZXR1cm4gTWF0aC5hYnModi0xKT4uMDAxP251bGw6W2Ysbyh0LG0pLG1dfXZhciBsPXQoImJhcnljZW50cmljIiksYz10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZS5leHBvcnRzPXN9LHtiYXJ5Y2VudHJpYzo0OSwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDk1fV0sMjA4OltmdW5jdGlvbih0LGUscil7dmFyIG49InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iO3IubWVzaFNoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBtX3Bvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9ub3JtYWwgICAgICAgICA9IG5vcm1hbDtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gICAtIHBvc2l0aW9uO1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXJfMV8xKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuXG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuICBcbiAgaWYoIWdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBjb29rVG9ycmFuY2VTcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihmX2RhdGEsIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iLGZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xufSIsZnJhZ21lbnQ6bixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0ICBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59IixmcmFnbWVudDpuLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLDEpO1xufVxuIixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7fV0sMjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxkLHAsbSx2LGcseSxiLHgsXyx3LE0sVCxrLEEpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLmxpbmVTaGFkZXI9bix0aGlzLnBvaW50U2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPWEsdGhpcy5wb2ludFBpY2tTaGFkZXI9byx0aGlzLmNvbnRvdXJTaGFkZXI9cyx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWwsdGhpcy50cmlhbmdsZUNvbG9ycz11LHRoaXMudHJpYW5nbGVOb3JtYWxzPWgsdGhpcy50cmlhbmdsZVVWcz1mLHRoaXMudHJpYW5nbGVJZHM9Yyx0aGlzLnRyaWFuZ2xlVkFPPWQsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9cCx0aGlzLmVkZ2VDb2xvcnM9dix0aGlzLmVkZ2VVVnM9Zyx0aGlzLmVkZ2VJZHM9bSx0aGlzLmVkZ2VWQU89eSx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9Yix0aGlzLnBvaW50Q29sb3JzPV8sdGhpcy5wb2ludFVWcz13LHRoaXMucG9pbnRTaXplcz1NLHRoaXMucG9pbnRJZHM9eCx0aGlzLnBvaW50VkFPPVQsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPWssdGhpcy5jb250b3VyVkFPPUEsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstKDEvMCksLSgxLzApLC0oMS8wKV1dLHRoaXMuY2xpcEJvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLl9tb2RlbD1QLHRoaXMuX3ZpZXc9UCx0aGlzLl9wcm9qZWN0aW9uPVAsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT13KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIF8ocixbMjU2LDI1Niw0XSxbNCwwLDFdKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDtmb3IodmFyIGE9dC5sZW5ndGgsaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXt2YXIgZT1wKHQsRS52ZXJ0ZXgsRS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIGwodCl7dmFyIGU9cCh0LFMudmVydGV4LFMuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIGModCl7dmFyIGU9cCh0LEwudmVydGV4LEwuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiB1KHQpe3ZhciBlPXAodCxDLnZlcnRleCxDLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBmKHQpe3ZhciBlPXAodCxJLnZlcnRleCxJLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gaCh0KXt2YXIgZT1wKHQsRC52ZXJ0ZXgsRC5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ZnVuY3Rpb24gZCh0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoZT10LHQ9ZS5nbCk7dmFyIHI9cyh0KSxpPWwodCksYT1jKHQpLG89dSh0KSxkPWYodCkscD1oKHQpLHk9Zyh0LF8obmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt5LmdlbmVyYXRlTWlwbWFwKCkseS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix5Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYj1tKHQpLHg9bSh0KSx3PW0odCksTT1tKHQpLFQ9bSh0KSxrPXYodCxbe2J1ZmZlcjpiLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6VCx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6M31dKSxBPW0odCksRT1tKHQpLFM9bSh0KSxMPW0odCksQz12KHQsW3tidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkwsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxJPW0odCksRD1tKHQpLFA9bSh0KSx6PW0odCksTz1tKHQpLFI9dih0LFt7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpPLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpQLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEY9bSh0KSxqPXYodCxbe2J1ZmZlcjpGLHR5cGU6dC5GTE9BVCxzaXplOjN9XSksTj1uZXcgbih0LHkscixpLGEsbyxkLHAsYixULHgsdyxNLGssQSxMLEUsUyxDLEksTyxELFAseixSLEYsaik7cmV0dXJuIE4udXBkYXRlKGUpLE59dmFyIHA9dCgiZ2wtc2hhZGVyIiksbT10KCJnbC1idWZmZXIiKSx2PXQoImdsLXZhbyIpLGc9dCgiZ2wtdGV4dHVyZTJkIikseT10KCJub3JtYWxzIiksYj10KCJnbC1tYXQ0L211bHRpcGx5IikseD10KCJnbC1tYXQ0L2ludmVydCIpLF89dCgibmRhcnJheSIpLHc9dCgiY29sb3JtYXAiKSxNPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIiksVD10KCJ0eXBlZGFycmF5LXBvb2wiKSxrPXQoIi4vbGliL3NoYWRlcnMiKSxBPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxFPWsubWVzaFNoYWRlcixTPWsud2lyZVNoYWRlcixMPWsucG9pbnRTaGFkZXIsQz1rLnBpY2tTaGFkZXIsST1rLnBvaW50UGlja1NoYWRlcixEPWsuY29udG91clNoYWRlcixQPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx6PW4ucHJvdG90eXBlO3ouaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx6LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHoucGlja1Nsb3RzPTEsei5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx6LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdHx8IXRoaXMuY29udG91ckVuYWJsZSlyZXR1cm4gdm9pZCh0aGlzLmNvbnRvdXJDb3VudD0wKTtmb3IodmFyIGU9TSh0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89VC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgZj1jWzBdOzI9PT1jLmxlbmd0aCYmKGY9Y1t1XSk7Zm9yKHZhciBoPW5bZl1bMF0sZD1uW2ZdWzFdLHA9aVtmXSxtPTEtcCx2PXRoaXMucG9zaXRpb25zW2hdLGc9dGhpcy5wb3NpdGlvbnNbZF0seT0wO3k8MzsrK3kpb1tzKytdPXAqdlt5XSttKmdbeV19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLFQuZnJlZShvKX0sei51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9ZyhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoaSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgcz1bXSxsPVtdLGM9W10sdT1bXSxmPVtdLGg9W10sZD1bXSxwPVtdLG09W10sdj1bXSxiPVtdLHg9W10sXz1bXSx3PVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciBNPXQudmVydGV4Tm9ybWFscyxUPXQuY2VsbE5vcm1hbHMsaz12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixBPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFUJiYoVD15LmZhY2VOb3JtYWxzKHIsbixBKSksClR8fE18fChNPXkudmVydGV4Tm9ybWFscyhyLG4saykpO3ZhciBFPXQudmVydGV4Q29sb3JzLFM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxDPXQudmVydGV4VVZzLEk9dC52ZXJ0ZXhJbnRlbnNpdHksRD10LmNlbGxVVnMsUD10LmNlbGxJbnRlbnNpdHksej0xLzAsTz0tKDEvMCk7aWYoIUMmJiFEKWlmKEkpaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpej0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sTz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPEkubGVuZ3RoOysrUil7dmFyIEY9SVtSXTt6PU1hdGgubWluKHosRiksTz1NYXRoLm1heChPLEYpfWVsc2UgaWYoUClmb3IodmFyIFI9MDtSPFAubGVuZ3RoOysrUil7dmFyIEY9UFtSXTt6PU1hdGgubWluKHosRiksTz1NYXRoLm1heChPLEYpfWVsc2UgZm9yKHZhciBSPTA7UjxuLmxlbmd0aDsrK1Ipe3ZhciBGPW5bUl1bMl07ej1NYXRoLm1pbih6LEYpLE89TWF0aC5tYXgoTyxGKX10aGlzLmludGVuc2l0eT1JP0k6UD9hKHIsbi5sZW5ndGgsUCk6byhuKTt2YXIgaj10LnBvaW50U2l6ZXMsTj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXTtmb3IodmFyIFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIEI9bltSXSxVPTA7VTwzOysrVSkhaXNOYU4oQltVXSkmJmlzRmluaXRlKEJbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0sQltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0sQltVXSkpO3ZhciBWPTAsSD0wLHE9MDt0OmZvcih2YXIgUj0wO1I8ci5sZW5ndGg7KytSKXt2YXIgRz1yW1JdO3N3aXRjaChHLmxlbmd0aCl7Y2FzZSAxOmZvcih2YXIgWT1HWzBdLEI9bltZXSxVPTA7VTwzOysrVSlpZihpc05hTihCW1VdKXx8IWlzRmluaXRlKEJbVV0pKWNvbnRpbnVlIHQ7di5wdXNoKEJbMF0sQlsxXSxCWzJdKTt2YXIgWDtYPUU/RVtZXTpTP1NbUl06TCwzPT09WC5sZW5ndGg/Yi5wdXNoKFhbMF0sWFsxXSxYWzJdLDEpOmIucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKTt2YXIgVztXPUM/Q1tZXTpJP1soSVtZXS16KS8oTy16KSwwXTpEP0RbUl06UD9bKFBbUl0teikvKE8teiksMF06WyhCWzJdLXopLyhPLXopLDBdLHgucHVzaChXWzBdLFdbMV0pLGo/Xy5wdXNoKGpbWV0pOl8ucHVzaChOKSx3LnB1c2goUikscSs9MTticmVhaztjYXNlIDI6Zm9yKHZhciBVPTA7VTwyOysrVSlmb3IodmFyIFk9R1tVXSxCPW5bWV0sWj0wO1o8MzsrK1opaWYoaXNOYU4oQltaXSl8fCFpc0Zpbml0ZShCW1pdKSljb250aW51ZSB0O2Zvcih2YXIgVT0wO1U8MjsrK1Upe3ZhciBZPUdbVV0sQj1uW1ldO2gucHVzaChCWzBdLEJbMV0sQlsyXSk7dmFyIFg7WD1FP0VbWV06Uz9TW1JdOkwsMz09PVgubGVuZ3RoP2QucHVzaChYWzBdLFhbMV0sWFsyXSwxKTpkLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSk7dmFyIFc7Vz1DP0NbWV06ST9bKElbWV0teikvKE8teiksMF06RD9EW1JdOlA/WyhQW1JdLXopLyhPLXopLDBdOlsoQlsyXS16KS8oTy16KSwwXSxwLnB1c2goV1swXSxXWzFdKSxtLnB1c2goUil9SCs9MTticmVhaztjYXNlIDM6Zm9yKHZhciBVPTA7VTwzOysrVSlmb3IodmFyIFk9R1tVXSxCPW5bWV0sWj0wO1o8MzsrK1opaWYoaXNOYU4oQltaXSl8fCFpc0Zpbml0ZShCW1pdKSljb250aW51ZSB0O2Zvcih2YXIgVT0wO1U8MzsrK1Upe3ZhciBZPUdbVV0sQj1uW1ldO3MucHVzaChCWzBdLEJbMV0sQlsyXSk7dmFyIFg7WD1FP0VbWV06Uz9TW1JdOkwsMz09PVgubGVuZ3RoP2wucHVzaChYWzBdLFhbMV0sWFsyXSwxKTpsLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSk7dmFyIFc7Vz1DP0NbWV06ST9bKElbWV0teikvKE8teiksMF06RD9EW1JdOlA/WyhQW1JdLXopLyhPLXopLDBdOlsoQlsyXS16KS8oTy16KSwwXSx1LnB1c2goV1swXSxXWzFdKTt2YXIgSjtKPU0/TVtZXTpUW1JdLGMucHVzaChKWzBdLEpbMV0sSlsyXSksZi5wdXNoKFIpfVYrPTF9fXRoaXMucG9pbnRDb3VudD1xLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PVYsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUodiksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoeCksdGhpcy5wb2ludFNpemVzLnVwZGF0ZShfKSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkodykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoaCksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZShkKSx0aGlzLmVkZ2VVVnMudXBkYXRlKHApLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KG0pKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZSh1KSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUoYyksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGYpKX19LHouZHJhd1RyYW5zcGFyZW50PXouZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8UCxuPXQudmlld3x8UCxpPXQucHJvamVjdGlvbnx8UCxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3RoaXMudGV4dHVyZS5iaW5kKDApO3ZhciBsPW5ldyBBcnJheSgxNik7YihsLHMudmlldyxzLm1vZGVsKSxiKGwscy5wcm9qZWN0aW9uLGwpLHgobCxsKTtmb3IodmFyIG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109bFsxMitvXS9sWzE1XTtmb3IodmFyIGM9bFsxNV0sbz0wO288MzsrK28pYys9dGhpcy5saWdodFBvc2l0aW9uW29dKmxbNCpvKzNdO2Zvcih2YXIgbz0wO288MzsrK28pe2Zvcih2YXIgdT1sWzEyK29dLGY9MDtmPDM7KytmKXUrPWxbNCpmK29dKnRoaXMubGlnaHRQb3NpdGlvbltmXTtzLmxpZ2h0UG9zaXRpb25bb109dS9jfWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgaD10aGlzLnRyaVNoYWRlcjtoLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9aWYodGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCl7dmFyIGg9dGhpcy5saW5lU2hhZGVyO2guYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKX1pZih0aGlzLnBvaW50Q291bnQ+MCl7dmFyIGg9dGhpcy5wb2ludFNoYWRlcjtoLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpfWlmKHRoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjApe3ZhciBoPXRoaXMuY29udG91clNoYWRlcjtoLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCl9fSx6LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxQLG49dC52aWV3fHxQLGk9dC5wcm9qZWN0aW9ufHxQLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEscGlja0lkOnRoaXMucGlja0lkLzI1NX0sbD10aGlzLnBpY2tTaGFkZXI7aWYobC5iaW5kKCksbC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApe3ZhciBsPXRoaXMucG9pbnRQaWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCl9fSx6LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO2Zvcih2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnMsaT1uZXcgQXJyYXkoci5sZW5ndGgpLGE9MDthPHIubGVuZ3RoOysrYSlpW2FdPW5bclthXV07dmFyIG89QShpLFt0LmNvb3JkWzBdLHRoaXMuX3Jlc29sdXRpb25bMV0tdC5jb29yZFsxXV0sdGhpcy5fbW9kZWwsdGhpcy5fdmlldyx0aGlzLl9wcm9qZWN0aW9uLHRoaXMuX3Jlc29sdXRpb24pO2lmKCFvKXJldHVybiBudWxsO2Zvcih2YXIgcz1vWzJdLGw9MCxhPTA7YTxyLmxlbmd0aDsrK2EpbCs9c1thXSp0aGlzLmludGVuc2l0eVtyW2FdXTtyZXR1cm57cG9zaXRpb246b1sxXSxpbmRleDpyW29bMF1dLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6bCxkYXRhQ29vcmRpbmF0ZTp0aGlzLnBvc2l0aW9uc1tyW29bMF1dXX19LHouZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMubGluZVNoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50UGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJTaGFkZXIuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZH0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjoyMDcsIi4vbGliL3NoYWRlcnMiOjIwOCxjb2xvcm1hcDo5OCwiZ2wtYnVmZmVyIjoxNTYsImdsLW1hdDQvaW52ZXJ0IjoxODUsImdsLW1hdDQvbXVsdGlwbHkiOjE4NywiZ2wtc2hhZGVyIjoyNjEsImdsLXRleHR1cmUyZCI6MjczLCJnbC12YW8iOjI3NyxuZGFycmF5OjQ3Nixub3JtYWxzOjQ3OCwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjUyNiwidHlwZWRhcnJheS1wb29sIjo1NDl9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5nbDtyZXR1cm4gbmV3IG4odCxhKGUsWzAsMCwwLDEsMSwwLDEsMV0pLG8oZSxzLmJveFZlcnQscy5saW5lRnJhZykpfWUuZXhwb3J0cz1pO3ZhciBhPXQoImdsLWJ1ZmZlciIpLG89dCgiZ2wtc2hhZGVyIikscz10KCIuL3NoYWRlcnMiKSxsPW4ucHJvdG90eXBlO2wuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxsLmRyYXdCb3g9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4saSxhLG8pe3ZhciBzPXRoaXMucGxvdCxsPXRoaXMuc2hhZGVyLGM9cy5nbDt0WzBdPXIsdFsxXT1uLGVbMF09aSxlWzFdPWEsbC51bmlmb3Jtcy5sbz10LGwudW5pZm9ybXMuaGk9ZSxsLnVuaWZvcm1zLmNvbG9yPW8sYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX19KCksbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyMTMsImdsLWJ1ZmZlciI6MTU2LCJnbC1zaGFkZXIiOjIxNn1dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LmdsO3JldHVybiBuZXcgbih0LG8oZSkscyhlLGMuZ3JpZFZlcnQsYy5ncmlkRnJhZykscyhlLGMudGlja1ZlcnQsYy5ncmlkRnJhZykpfWUuZXhwb3J0cz1hO3ZhciBvPXQoImdsLWJ1ZmZlciIpLHM9dCgiZ2wtc2hhZGVyIiksbD10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGM9dCgiLi9zaGFkZXJzIiksdT1uLnByb3RvdHlwZTt1LmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMucGxvdCxpPXRoaXMudmJvLGE9dGhpcy5zaGFkZXIsbz10aGlzLnRpY2tzLHM9bi5nbCxsPW4uX3RpY2tCb3VuZHMsYz1uLmRhdGFCb3gsdT1uLnZpZXdCb3gsZj1uLmdyaWRMaW5lV2lkdGgsaD1uLmdyaWRMaW5lQ29sb3IsZD1uLmdyaWRMaW5lRW5hYmxlLHA9bi5waXhlbFJhdGlvLG09MDttPDI7KyttKXt2YXIgdj1sW21dLGc9bFttKzJdLHk9Zy12LGI9LjUqKGNbbSsyXStjW21dKSx4PWNbbSsyXS1jW21dO2VbbV09Mip5L3gsdFttXT0yKih2LWIpL3h9YS5iaW5kKCksaS5iaW5kKCksYS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksYS51bmlmb3Jtcy5kYXRhU2hpZnQ9dCxhLnVuaWZvcm1zLmRhdGFTY2FsZT1lO2Zvcih2YXIgXz0wLG09MDttPDI7KyttKXtyWzBdPXJbMV09MCxyW21dPTEsYS51bmlmb3Jtcy5kYXRhQXhpcz1yLGEudW5pZm9ybXMubGluZVdpZHRoPWZbbV0vKHVbbSsyXS11W21dKSpwLGEudW5pZm9ybXMuY29sb3I9aFttXTt2YXIgdz02Km9bbV0ubGVuZ3RoO2RbbV0mJncmJnMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUyxfLHcpLF8rPXd9fX0oKSx1LmRyYXdUaWNrTWFya3M9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzEsMF0sbj1bMCwxXSxhPVswLDBdLG89WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMucGxvdCxjPXRoaXMudmJvLHU9dGhpcy50aWNrU2hhZGVyLGY9dGhpcy50aWNrcyxoPXMuZ2wsZD1zLl90aWNrQm91bmRzLHA9cy5kYXRhQm94LG09cy52aWV3Qm94LHY9cy5waXhlbFJhdGlvLGc9cy5zY3JlZW5Cb3gseT1nWzJdLWdbMF0sYj1nWzNdLWdbMV0seD1tWzJdLW1bMF0sXz1tWzNdLW1bMV0sdz0wO3c8MjsrK3cpe3ZhciBNPWRbd10sVD1kW3crMl0saz1ULU0sQT0uNSoocFt3KzJdK3Bbd10pLEU9cFt3KzJdLXBbd107ZVt3XT0yKmsvRSx0W3ddPTIqKE0tQSkvRX1lWzBdKj14L3ksdFswXSo9eC95LGVbMV0qPV8vYix0WzFdKj1fL2IsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEw9cy50aWNrTWFya0xlbmd0aCxDPXMudGlja01hcmtXaWR0aCxJPXMudGlja01hcmtDb2xvcixEPTYqZlswXS5sZW5ndGgsUD1NYXRoLm1pbihsLmdlKGZbMF0sKHBbMF0tZFswXSkvKGRbMl0tZFswXSksaSksZlswXS5sZW5ndGgpLHo9TWF0aC5taW4obC5ndChmWzBdLChwWzJdLWRbMF0pLyhkWzJdLWRbMF0pLGkpLGZbMF0ubGVuZ3RoKSxPPTArNipQLFI9NipNYXRoLm1heCgwLHotUCksRj1NYXRoLm1pbihsLmdlKGZbMV0sKHBbMV0tZFsxXSkvKGRbM10tZFsxXSksaSksZlsxXS5sZW5ndGgpLGo9TWF0aC5taW4obC5ndChmWzFdLChwWzNdLWRbMV0pLyhkWzNdLWRbMV0pLGkpLGZbMV0ubGVuZ3RoKSxOPUQrNipGLEI9NipNYXRoLm1heCgwLGotRik7YVswXT0yKihtWzBdLUxbMV0pL3ktMSxhWzFdPShtWzNdK21bMV0pL2ItMSxvWzBdPUxbMV0qdi95LG9bMV09Q1sxXSp2L2IsQiYmKFMuY29sb3I9SVsxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1hLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxOLEIpKSxhWzBdPShtWzJdK21bMF0pL3ktMSxhWzFdPTIqKG1bMV0tTFswXSkvYi0xLG9bMF09Q1swXSp2L3ksb1sxXT1MWzBdKnYvYixSJiYoUy5jb2xvcj1JWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWEsaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLE8sUikpLGFbMF09MioobVsyXStMWzNdKS95LTEsYVsxXT0obVszXSttWzFdKS9iLTEsb1swXT1MWzNdKnYveSxvWzFdPUNbM10qdi9iLEImJihTLmNvbG9yPUlbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9YSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsTixCKSksYVswXT0obVsyXSttWzBdKS95LTEsYVsxXT0yKihtWzNdK0xbMl0pL2ItMSxvWzBdPUNbMl0qdi95LG9bMV09TFsyXSp2L2IsUiYmKFMuY29sb3I9SVsyXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1hLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxPLFIpKX19KCksdS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgdD1bMSwxLC0xLC0xLDEsLTFdLGU9WzEsLTEsMSwxLC0xLC0xXTtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXIudGlja3MsaT1yLmJvdW5kcyxhPW5ldyBGbG9hdDMyQXJyYXkoMTgqKG5bMF0ubGVuZ3RoK25bMV0ubGVuZ3RoKSksbz0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLHM9W1tdLFtdXSxsPTA7bDwyOysrbClmb3IodmFyIGM9c1tsXSx1PW5bbF0sZj1pW2xdLGg9aVtsKzJdLGQ9MDtkPHUubGVuZ3RoOysrZCl7dmFyIHA9KHVbZF0ueC1mKS8oaC1mKTtjLnB1c2gocCk7Zm9yKHZhciBtPTA7bTw2OysrbSlhW28rK109cCxhW28rK109dFttXSxhW28rK109ZVttXX10aGlzLnRpY2tzPXMsdGhpcy52Ym8udXBkYXRlKGEpfX0oKSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudGlja1NoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjEzLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjE1LCJnbC1idWZmZXIiOjE1NiwiZ2wtc2hhZGVyIjoyMTZ9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5nbDtyZXR1cm4gbmV3IG4odCxhKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxvKGUscy5saW5lVmVydCxzLmxpbmVGcmFnKSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoIi4vc2hhZGVycyIpLGw9bi5wcm90b3R5cGU7bC5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGwuZHJhd0xpbmU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5wbG90LGM9dGhpcy5zaGFkZXIsdT1sLmdsO3RbMF09cix0WzFdPW4sZVswXT1pLGVbMV09YSxjLnVuaWZvcm1zLnN0YXJ0PXQsYy51bmlmb3Jtcy5lbmQ9ZSxjLnVuaWZvcm1zLndpZHRoPW8qbC5waXhlbFJhdGlvLGMudW5pZm9ybXMuY29sb3I9cyx1LmRyYXdBcnJheXModS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oKSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIxMywiZ2wtYnVmZmVyIjoxNTYsImdsLXNoYWRlciI6MjE2fV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPSJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iO2UuZXhwb3J0cz17bGluZVZlcnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZlYzIgcGVycCh2ZWMyIHYpIHtcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcbn1cblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4ob2Zmc2V0ICsgMC41ICogd2lkdGggKiBkZWx0YSAqIGNvb3JkLngpLCAwLCAxKTtcbn1cbiIsbGluZUZyYWc6bix0ZXh0VmVydDoiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHRleHRDb29yZGluYXRlO1xuXG51bmlmb3JtIHZlYzIgZGF0YVNjYWxlLCBkYXRhU2hpZnQsIGRhdGFBeGlzLCBzY3JlZW5PZmZzZXQsIHRleHRTY2FsZTtcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgZGF0YU9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS56O1xuICB2ZWMyIGdseXBoT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLnh5O1xuICBtYXQyIGdseXBoTWF0cml4ID0gbWF0Mihjb3MoYW5nbGUpLCBzaW4oYW5nbGUpLCAtc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7XG4gIHZlYzIgc2NyZWVuQ29vcmRpbmF0ZSA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFPZmZzZXQgKyBkYXRhU2hpZnQpICtcbiAgICBnbHlwaE1hdHJpeCAqIGdseXBoT2Zmc2V0ICogdGV4dFNjYWxlICsgc2NyZWVuT2Zmc2V0O1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuQ29vcmRpbmF0ZSwgMCwgMSk7XG59XG4iLHRleHRGcmFnOm4sZ3JpZFZlcnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiIsZ3JpZEZyYWc6bixib3hWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIGxvLCBoaTtcblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG1peChsbywgaGksIGNvb3JkKSksIDAsIDEpO1xufVxuIix0aWNrVmVydDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBkYXRhQ29vcmQ7XG5cbnVuaWZvcm0gdmVjMiBkYXRhQXhpcywgZGF0YVNoaWZ0LCBkYXRhU2NhbGUsIHNjcmVlbk9mZnNldCwgdGlja1NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICsgdGlja1NjYWxlKmRhdGFDb29yZC55eiArIHNjcmVlbk9mZnNldCwgMCwgMSk7XG59XG4ifX0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrT2Zmc2V0PVtbXSxbXV0sdGhpcy50aWNrWD1bW10sW11dLHRoaXMubGFiZWxPZmZzZXQ9WzAsMF0sdGhpcy5sYWJlbENvdW50PVswLDBdfWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5nbDtyZXR1cm4gbmV3IG4odCxhKGUpLG8oZSxjLnRleHRWZXJ0LGMudGV4dEZyYWcpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXNoYWRlciIpLHM9dCgidGV4dC1jYWNoZSIpLGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIi4vc2hhZGVycyIpLHU9bi5wcm90b3R5cGU7dS5kcmF3VGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXRoaXMucGxvdCxhPXRoaXMuc2hhZGVyLG89dGhpcy50aWNrWFtuXSxzPXRoaXMudGlja09mZnNldFtuXSxjPWkuZ2wsdT1pLnZpZXdCb3gsZj1pLmRhdGFCb3gsaD1pLnNjcmVlbkJveCxkPWkucGl4ZWxSYXRpbyxwPWkudGlja0VuYWJsZSxtPWkudGlja1BhZCx2PWkudGlja0NvbG9yLGc9aS50aWNrQW5nbGUseT1pLmxhYmVsRW5hYmxlLGI9aS5sYWJlbFBhZCx4PWkubGFiZWxDb2xvcixfPWkubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbbl0sTT10aGlzLmxhYmVsQ291bnRbbl0sVD1sLmx0KG8sZltuXSksaz1sLmxlKG8sZltuKzJdKTt0WzBdPXRbMV09MCx0W25dPTEsZVtuXT0odVsyK25dK3Vbbl0pLyhoWzIrbl0taFtuXSktMTt2YXIgQT0yL2hbMisoMV5uKV0taFsxXm5dO2VbMV5uXT1BKnVbMV5uXS0xLHBbbl0mJihlWzFebl0tPUEqZCptW25dLFQ8ayYmc1trXT5zW1RdJiYoYS51bmlmb3Jtcy5kYXRhQXhpcz10LGEudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsYS51bmlmb3Jtcy5jb2xvcj12W25dLGEudW5pZm9ybXMuYW5nbGU9Z1tuXSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRVMsc1tUXSxzW2tdLXNbVF0pKSkseVtuXSYmTSYmKGVbMV5uXS09QSpkKmJbbl0sYS51bmlmb3Jtcy5kYXRhQXhpcz1yLGEudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsYS51bmlmb3Jtcy5jb2xvcj14W25dLGEudW5pZm9ybXMuYW5nbGU9X1tuXSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRVMsdyxNKSksZVsxXm5dPUEqdVsyKygxXm4pXS0xLHBbbisyXSYmKGVbMV5uXSs9QSpkKm1bbisyXSxUPGsmJnNba10+c1tUXSYmKGEudW5pZm9ybXMuZGF0YUF4aXM9dCxhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9dltuKzJdLGEudW5pZm9ybXMuYW5nbGU9Z1tuKzJdLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFUyxzW1RdLHNba10tc1tUXSkpKSx5W24rMl0mJk0mJihlWzFebl0rPUEqZCpiW24rMl0sYS51bmlmb3Jtcy5kYXRhQXhpcz1yLGEudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsYS51bmlmb3Jtcy5jb2xvcj14W24rMl0sYS51bmlmb3Jtcy5hbmdsZT1fW24rMl0sYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVTLHcsTSkpfX0oKSx1LmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksdS5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMuc2hhZGVyLGE9bi5fdGlja0JvdW5kcyxvPW4uZGF0YUJveCxzPW4uc2NyZWVuQm94LGw9bi52aWV3Qm94O2kuYmluZCgpO2Zvcih2YXIgYz0wO2M8MjsrK2Mpe3ZhciB1PWFbY10sZj1hW2MrMl0saD1mLXUsZD0uNSoob1tjKzJdK29bY10pLHA9b1tjKzJdLW9bY10sbT1sW2NdLHY9bFtjKzJdLGc9di1tLHk9c1tjXSxiPXNbYysyXSx4PWIteTtlW2NdPTIqaC9wKmcveCx0W2NdPTIqKHUtZCkvcCpnL3h9clsxXT0yKm4ucGl4ZWxSYXRpby8oc1szXS1zWzFdKSxyWzBdPXJbMV0qKHNbM10tc1sxXSkvKHNbMl0tc1swXSksaS51bmlmb3Jtcy5kYXRhU2NhbGU9ZSxpLnVuaWZvcm1zLmRhdGFTaGlmdD10LGkudW5pZm9ybXMudGV4dFNjYWxlPXIsdGhpcy52Ym8uYmluZCgpLGkuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9fSgpLHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz1bXSxsPXQudGlja3MsYz10LmJvdW5kcztmb3IoYT0wO2E8MjsrK2Epe3ZhciB1PVtNYXRoLmZsb29yKG8ubGVuZ3RoLzMpXSxmPVstKDEvMCldLGg9bFthXTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXt2YXIgZD1oW2VdLHA9ZC54LG09ZC50ZXh0LHY9ZC5mb250fHwic2Fucy1zZXJpZiI7aT1kLmZvbnRTaXplfHwxMjtmb3IodmFyIGc9MS8oY1thKzJdLWNbYV0pLHk9Y1thXSxiPW0uc3BsaXQoIlxuIikseD0wO3g8Yi5sZW5ndGg7eCsrKWZvcihuPXModixiW3hdKS5kYXRhLHI9MDtyPG4ubGVuZ3RoO3IrPTIpby5wdXNoKG5bcl0qaSwtbltyKzFdKmkteCppKjEuMiwocC15KSpnKTt1LnB1c2goTWF0aC5mbG9vcihvLmxlbmd0aC8zKSksZi5wdXNoKHApfXRoaXMudGlja09mZnNldFthXT11LHRoaXMudGlja1hbYV09Zn1mb3IoYT0wO2E8MjsrK2Epe2Zvcih0aGlzLmxhYmVsT2Zmc2V0W2FdPU1hdGguZmxvb3Ioby5sZW5ndGgvMyksbj1zKHQubGFiZWxGb250W2FdLHQubGFiZWxzW2FdLHt0ZXh0QWxpZ246ImNlbnRlciJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbYV0sZT0wO2U8bi5sZW5ndGg7ZSs9MilvLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbYV09TWF0aC5mbG9vcihvLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W2FdfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Ioby5sZW5ndGgvMyksbj1zKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKW8ucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKG8ubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKG8pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIxMywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjIxNSwiZ2wtYnVmZmVyIjoxNTYsImdsLXNoYWRlciI6MjE2LCJ0ZXh0LWNhY2hlIjoyMjN9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4NH1dLDIxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGEodCxlLHIsaSxhKXt2YXIgbz1uZXcgbih0KTtyZXR1cm4gby51cGRhdGUoZSxyLGksYSksb312YXIgbz10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxzPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksbD10KCIuL2xpYi9yZWZsZWN0IiksYz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSx1PXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGY9dCgiLi9saWIvR0xFcnJvciIpLGg9bi5wcm90b3R5cGU7aC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgdCxlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LGguZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0saC51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSgpe2QucHJvZ3JhbT1jLnByb2dyYW0ocCxkLl92cmVmLGQuX2ZyZWYsXyx3KTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClTW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGQucHJvZ3JhbSxyW3RdLm5hbWUpfWlmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGg9dDt0PWgudmVydGV4LGU9aC5mcmFnbWVudCxyPWgudW5pZm9ybXMsbj1oLmF0dHJpYnV0ZXN9dmFyIGQ9dGhpcyxwPWQuZ2wsbT1kLl92cmVmO2QuX3ZyZWY9Yy5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksbSYmbS5kaXNwb3NlKCksZC52ZXJ0U2hhZGVyPWQuX3ZyZWYuc2hhZGVyO3ZhciB2PXRoaXMuX2ZyZWY7aWYoZC5fZnJlZj1jLnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLHYmJnYuZGlzcG9zZSgpLGQuZnJhZ1NoYWRlcj1kLl9mcmVmLnNoYWRlciwhcnx8IW4pe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsZC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGQudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB5PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGYoeSwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIreSl9cj1yfHx1LnVuaWZvcm1zKHAsZyksbj1ufHx1LmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9bj1uLnNsaWNlKCksbi5zb3J0KGkpO3ZhciBiLHg9W10sXz1bXSx3PVtdO2ZvcihiPTA7YjxuLmxlbmd0aDsrK2Ipe3ZhciBNPW5bYl07aWYoTS50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHxNLnR5cGUuY2hhckF0KE0udHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksQT0wO0E8VDsrK0Epa1tBXT13Lmxlbmd0aCxfLnB1c2goTS5uYW1lKyJbIitBKyJdIiksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP3cucHVzaChNLmxvY2F0aW9uK0EpOkFycmF5LmlzQXJyYXkoTS5sb2NhdGlvbikmJk0ubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uW0FdP3cucHVzaCgwfE0ubG9jYXRpb25bQV0pOncucHVzaCgtMSk7eC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgeC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6W3cubGVuZ3RoXX0pLF8ucHVzaChNLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgTS5sb2NhdGlvbj93LnB1c2goMHxNLmxvY2F0aW9uKTp3LnB1c2goLTEpfXZhciBFPTA7Zm9yKGI9MDtiPHcubGVuZ3RoOysrYilpZih3W2JdPDApe2Zvcig7dy5pbmRleE9mKEUpPj0wOylFKz0xO3dbYl09RX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2EoKSxkLl9yZWxpbms9YSxkLnR5cGVzPXt1bmlmb3JtczpsKHIpLGF0dHJpYnV0ZXM6bChuKX0sZC5hdHRyaWJ1dGVzPXMocCxkLHgsdyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInVuaWZvcm1zIixvKHAsZCxyLFMpKX0sZS5leHBvcnRzPWF9LHsiLi9saWIvR0xFcnJvciI6MjE3LCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MjE4LCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjIxOSwiLi9saWIvcmVmbGVjdCI6MjIwLCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjIyMSwiLi9saWIvc2hhZGVyLWNhY2hlIjoyMjJ9XSwyMTc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX1mdW5jdGlvbiBpKHQsZSxyLGksYSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLGM9W10sdT0wO3U8YTsrK3UpbC5wdXNoKCJ4Iit1KSxjLnB1c2goIngiK3UpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmKHYsIitjLmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2ErImZ2KHYseDApfSIpO3ZhciBmPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksaD1uZXcgbih0LGUscixpLGEsZik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpW3JdKSxmKHQsaVtyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIGEodCxlLHIsbixhLG8scyl7Zm9yKHZhciBsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSlpKHQsZSxyW3VdLG4sYSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGE7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcih2YXIgZT0wO2U8YTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsaSxvLHMpe2U9ZXx8dC5GTE9BVCxpPSEhaSxvPW98fGEqYSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxhOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxhLGUsaSxvLHMrbCphKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGEpLGg9dFsidmVydGV4QXR0cmliIithKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGk9MDtpPGE7KytpKXt2YXIgbz1uW3JbaV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2ldKTtlbHNle2Zvcih2YXIgcz0wO3M8YTsrK3MpZltzXT1lW2EqaStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgbz17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGY9dS5uYW1lLGg9dS50eXBlLGQ9dS5sb2NhdGlvbnM7c3dpdGNoKGgpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOmkodCxlLGRbMF0sbiwxLG8sZik7YnJlYWs7ZGVmYXVsdDppZihoLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgcD1oLmNoYXJDb2RlQXQoaC5sZW5ndGgtMSktNDg7aWYocDwyfHxwPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitmKyI6ICIraCk7aSh0LGUsZFswXSxuLHAsbyxmKX1lbHNle2lmKCEoaC5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IHMoIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitmKyI6ICIraCk7dmFyIHA9aC5jaGFyQ29kZUF0KGgubGVuZ3RoLTEpLTQ4O2lmKHA8Mnx8cD40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO2EodCxlLGQsbixwLG8sZil9fX1yZXR1cm4gb31lLmV4cG9ydHM9bzt2YXIgcz10KCIuL0dMRXJyb3IiKSxsPW4ucHJvdG90eXBlO2wucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5fZ2wsbz1pLl9sb2NhdGlvbnNbaS5faW5kZXhdO2EudmVydGV4QXR0cmliUG9pbnRlcihvLGkuX2RpbWVuc2lvbix0fHxhLkZMT0FULCEhZSxyfHwwLG58fDApLGEuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobyl9LGwuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6MjE3fV0sMjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigieSIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiB5fSIpKHQpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSxyLGEpe2Z1bmN0aW9uIGwocil7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2wiLCJ3cmFwcGVyIiwibG9jYXRpb25zIiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdsLmdldFVuaWZvcm0od3JhcHBlci5wcm9ncmFtLGxvY2F0aW9uc1siK3IrIl0pfSIpKHQsZSxhKX1mdW5jdGlvbiBjKHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGk9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGk8Mnx8aT40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIityKTtyZXR1cm4iZ2wudW5pZm9ybU1hdHJpeCIraSsiZnYobG9jYXRpb25zWyIrZSsiXSxmYWxzZSxvYmoiK3QrIikifXRocm93IG5ldyBzKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIityKX12YXIgaT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoaTwyfHxpPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2krIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIitpKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgcygiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gdSh0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm5bW3QsZV1dO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLGE9dDtwYXJzZUludChuKSsiIj09PW4/YSs9IlsiK24rIl0iOmErPSIuIituLCJvYmplY3QiPT10eXBlb2YgaT9yLnB1c2guYXBwbHkocix1KGEsaSkpOnIucHVzaChbYSxpXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZihlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPXUoIiIsZSksbz0wO288aS5sZW5ndGg7KytvKXt2YXIgcz1pW29dLGw9c1swXSxmPXNbMV07YVtmXSYmbi5wdXNoKGMobCxmLHJbZl0udHlwZSkpfXJldHVybiBuLnB1c2goInJldHVybiBvYmp9IiksbmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKSh0LGEpfWZ1bmN0aW9uIGgodCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpyZXR1cm4gMDtjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgcygiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9pKHIsITEpOmkociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBpKHIqciwwKX10aHJvdyBuZXcgcygiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fWZ1bmN0aW9uIGQodCxlLGkpe2lmKCJvYmplY3QiPT10eXBlb2YgaSl7dmFyIG89cChpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bihvKSxzZXQ6ZihpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2UgYVtpXT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bChpKSxzZXQ6ZihpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOnRbZV09aChyW2ldLnR5cGUpfWZ1bmN0aW9uIHAodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWQoZSxyLHRbcl0pfWVsc2V7ZT17fTtmb3IodmFyIG4gaW4gdClkKGUsbix0W25dKX1yZXR1cm4gZX12YXIgbT1vKHIsITApO3JldHVybntnZXQ6bihwKG0pKSxzZXQ6ZihtKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19dmFyIG89dCgiLi9yZWZsZWN0Iikscz10KCIuL0dMRXJyb3IiKTtlLmV4cG9ydHM9YX0seyIuL0dMRXJyb3IiOjIxNywiLi9yZWZsZWN0IjoyMjB9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoIi4iKSxvPXIscz0wO3M8YS5sZW5ndGg7KytzKXt2YXIgbD1hW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciBjPTE7YzxsLmxlbmd0aDsrK2Mpe3ZhciB1PXBhcnNlSW50KGxbY10pO2M8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyh1IGluIG98fChjPGwubGVuZ3RoLTE/b1t1XT1bXTpvW3VdPXt9KSxvPW9bdV0pOm9bdV09ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9ZS5leHBvcnRzPW59LHt9XSwyMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCFzKXt2YXIgcj1PYmplY3Qua2V5cyhvKTtzPXt9O2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO3NbdFtpXV09b1tpXX19cmV0dXJuIHNbZV19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksaT1bXSxhPTA7YTxyOysrYSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYobyl7dmFyIHM9bih0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKWkucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2UgaS5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxpPVtdLGE9MDthPHI7KythKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGEpO28mJmkucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpuKHQsby50eXBlKX0pfXJldHVybiBpfXIudW5pZm9ybXM9aSxyLmF0dHJpYnV0ZXM9YTt2YXIgbz17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0scz1udWxsfSx7fV0sMjIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShuLHIpLHQuY29tcGlsZVNoYWRlcihuKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIobix0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIGk9dC5nZXRTaGFkZXJJbmZvTG9nKG4pO3RyeXt2YXIgYT1mKGkscixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IHUoaSwiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIraSl9dGhyb3cgbmV3IHUoaSxhLnNob3J0LGEubG9uZyl9cmV0dXJuIG59ZnVuY3Rpb24gbyh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKGEsZSksdC5hdHRhY2hTaGFkZXIoYSxyKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbyl0LmJpbmRBdHRyaWJMb2NhdGlvbihhLGlbb10sbltvXSk7aWYodC5saW5rUHJvZ3JhbShhKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKGEsdC5MSU5LX1NUQVRVUykpe3ZhciBzPXQuZ2V0UHJvZ3JhbUluZm9Mb2coYSk7dGhyb3cgbmV3IHUocywiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK3MpfXJldHVybiBhfWZ1bmN0aW9uIHModCl7dmFyIGU9ZC5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBpKHQpLGQuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIHModCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3JldHVybiBzKHQpLmdldFByb2dyYW0oZSxyLG4saSl9ci5zaGFkZXI9bCxyLnByb2dyYW09Yzt2YXIgdT10KCIuL0dMRXJyb3IiKSxmPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGg9InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXAsZD1uZXcgaCxwPTA7bi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBtPWkucHJvdG90eXBlO20uZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxpPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbz1pW2VdO2lmKG8mJnIuaXNTaGFkZXIoby5zaGFkZXIpKW8uY291bnQrPTE7ZWxzZXt2YXIgcz1hKHIsdCxlKTtvPWlbZV09bmV3IG4ocCsrLGUsdCxzLFtdLDEsdGhpcyl9cmV0dXJuIG99LG0uZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLG4uam9pbigiOiIpXS5qb2luKCJAIiksYT10aGlzLnByb2dyYW1zW2ldO3JldHVybiBhJiZ0aGlzLmdsLmlzUHJvZ3JhbShhKXx8KHRoaXMucHJvZ3JhbXNbaV09YT1vKHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixuKSx0LnByb2dyYW1zLnB1c2goaSksZS5wcm9ncmFtcy5wdXNoKGkpKSxhfX0seyIuL0dMRXJyb3IiOjIxNywiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjksIndlYWttYXAtc2hpbSI6NTY5fV0sMjIzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT10LmNlbGxzLHI9dC5wb3NpdGlvbnMsbj1uZXcgRmxvYXQzMkFycmF5KDYqZS5sZW5ndGgpLGk9MCxhPTAsbz0wO288ZS5sZW5ndGg7KytvKWZvcih2YXIgcz1lW29dLGw9MDtsPDM7KytsKXt2YXIgYz1yW3NbbF1dO25baSsrXT1jWzBdLG5baSsrXT1jWzFdKzEuNCxhPU1hdGgubWF4KGNbMF0sYSl9cmV0dXJue2RhdGE6bixzaGFwZTphfX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgcj1yfHx7fSxvPXNbdF07b3x8KG89c1t0XT17IiAiOntkYXRhOm5ldyBGbG9hdDMyQXJyYXkoMCksc2hhcGU6LjJ9fSk7dmFyIGw9b1tlXTtpZighbClpZihlLmxlbmd0aDw9MXx8IS9cZC8udGVzdChlKSlsPW9bZV09bihhKGUse3RyaWFuZ2xlczohMCxmb250OnQsdGV4dEFsaWduOnIudGV4dEFsaWdufHwibGVmdCIsdGV4dEJhc2VsaW5lOiJhbHBoYWJldGljIn0pKTtlbHNle2Zvcih2YXIgYz1lLnNwbGl0KC8oXGR8XHMpLyksdT1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxoPTAsZD0wO2Q8Yy5sZW5ndGg7KytkKXVbZF09aSh0LGNbZF0pLGYrPXVbZF0uZGF0YS5sZW5ndGgsaCs9dVtkXS5zaGFwZSxkPjAmJihoKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KGYpLG09MCx2PS0uNSpoLGQ9MDtkPHUubGVuZ3RoOysrZCl7Zm9yKHZhciBnPXVbZF0uZGF0YSx5PTA7eTxnLmxlbmd0aDt5Kz0yKXBbbSsrXT1nW3ldK3YscFttKytdPWdbeSsxXTt2Kz11W2RdLnNoYXBlKy4wMn1sPW9bZV09e2RhdGE6cCxzaGFwZTpofX1yZXR1cm4gbH1lLmV4cG9ydHM9aTt2YXIgYT10KCJ2ZWN0b3JpemUtdGV4dCIpLG89d2luZG93fHxyLmdsb2JhbHx8e30scz1vLl9fVEVYVF9DQUNIRXx8e307by5fX1RFWFRfQ0FDSEU9e319KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0OTYsInZlY3Rvcml6ZS10ZXh0Ijo1NjF9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZ2w9dCx0aGlzLnBpY2tCdWZmZXI9ZSx0aGlzLnNjcmVlbkJveD1bMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0sdGhpcy52aWV3Qm94PVswLDAsMCwwXSx0aGlzLmRhdGFCb3g9Wy0xMCwtMTAsMTAsMTBdLHRoaXMuZ3JpZExpbmVFbmFibGU9WyEwLCEwXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLnRpY2tBbmdsZT1bMCwwLDAsMF0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITAsITBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlQ2VudGVyPVswLDBdLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bMCwwLDAsMF0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bNCw0XSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITAsITAsITAsITBdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsyLDIsMiwyXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWQ9bnVsbCx0aGlzLnRleHQ9bnVsbCx0aGlzLmxpbmU9bnVsbCx0aGlzLmJveD1udWxsLHRoaXMub2JqZWN0cz1bXSx0aGlzLm92ZXJsYXlzPVtdLHRoaXMuX3RpY2tCb3VuZHM9WzEvMCwxLzAsLSgxLzApLC0oMS8wKV0sdGhpcy5zdGF0aWM9ITEsdGhpcy5kaXJ0eT0hMSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLnBpY2tEZWxheT0xMjAsdGhpcy5waWNrUmFkaXVzPTEwLHRoaXMuX3BpY2tUaW1lb3V0PW51bGwsdGhpcy5fZHJhd1BpY2s9dGhpcy5kcmF3UGljay5iaW5kKHRoaXMpLHRoaXMuX2RlcHRoQ291bnRlcj0wfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXQuc2xpY2UoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPXMoZSxbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSksaT1uZXcgbihlLHIpO3JldHVybiBpLmdyaWQ9bChpKSxpLnRleHQ9YyhpKSxpLmxpbmU9dShpKSxpLmJveD1mKGkpLGkudXBkYXRlKHQpLGl9ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiLi9saWIvZ3JpZCIpLGM9dCgiLi9saWIvdGV4dCIpLHU9dCgiLi9saWIvbGluZSIpLGY9dCgiLi9saWIvYm94IiksaD1uLnByb3RvdHlwZTtoLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0saC5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxoLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxoLmRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7dGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLAp0LmRlcHRoTWFzayghMSksdC5lbmFibGUodC5CTEVORCksdC5ibGVuZEVxdWF0aW9uKHQuRlVOQ19BREQsdC5GVU5DX0FERCksdC5ibGVuZEZ1bmModC5PTkUsdC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pO3ZhciBjPXRoaXMuYm9yZGVyQ29sb3I7dC5jbGVhckNvbG9yKGNbMF0qY1szXSxjWzFdKmNbM10sY1syXSpjWzNdLGNbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCksdC5zY2lzc29yKHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKSx0LnZpZXdwb3J0KHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKTt2YXIgdT10aGlzLmJhY2tncm91bmRDb2xvcjt0LmNsZWFyQ29sb3IodVswXSp1WzNdLHVbMV0qdVszXSx1WzJdKnVbM10sdVszXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpLGEuZHJhdygpO3ZhciBmPXRoaXMuemVyb0xpbmVFbmFibGUsaD10aGlzLnplcm9MaW5lQ29sb3IsZD10aGlzLnplcm9MaW5lV2lkdGg7aWYoZlswXXx8ZlsxXSl7by5iaW5kKCk7Zm9yKHZhciBwPTA7cDwyOysrcClpZihmW3BdJiZuW3BdPD0wJiZuW3ArMl0+PTApe3ZhciBtPWVbcF0tbltwXSooZVtwKzJdLWVbcF0pLyhuW3ArMl0tbltwXSk7MD09PXA/by5kcmF3TGluZShtLGVbMV0sbSxlWzNdLGRbcF0saFtwXSk6by5kcmF3TGluZShlWzBdLG0sZVsyXSxtLGRbcF0saFtwXSl9fWZvcih2YXIgcD0wO3A8bC5sZW5ndGg7KytwKWxbcF0uZHJhdygpO3Qudmlld3BvcnQoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdGhpcy5ncmlkLmRyYXdUaWNrTWFya3MoKSxvLmJpbmQoKTt2YXIgdj10aGlzLmJvcmRlckxpbmVFbmFibGUsZz10aGlzLmJvcmRlckxpbmVXaWR0aCx5PXRoaXMuYm9yZGVyTGluZUNvbG9yO3ZbMV0mJm8uZHJhd0xpbmUoclswXSxyWzFdLS41KmdbMV0qaSxyWzBdLHJbM10rLjUqZ1szXSppLGdbMV0seVsxXSksdlswXSYmby5kcmF3TGluZShyWzBdLS41KmdbMF0qaSxyWzFdLHJbMl0rLjUqZ1syXSppLHJbMV0sZ1swXSx5WzBdKSx2WzNdJiZvLmRyYXdMaW5lKHJbMl0sclsxXS0uNSpnWzFdKmksclsyXSxyWzNdKy41KmdbM10qaSxnWzNdLHlbM10pLHZbMl0mJm8uZHJhd0xpbmUoclswXS0uNSpnWzBdKmksclszXSxyWzJdKy41KmdbMl0qaSxyWzNdLGdbMl0seVsyXSkscy5iaW5kKCk7Zm9yKHZhciBwPTA7cDwyOysrcClzLmRyYXdUaWNrcyhwKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO2Zvcih2YXIgYj10aGlzLm92ZXJsYXlzLHA9MDtwPGIubGVuZ3RoOysrcCliW3BdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fX0oKSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbDt0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fX0oKSxoLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fX0oKSxoLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0saC5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGguc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsbz0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9vLDEwLDEwL29dKSx0aGlzLmJvcmRlckNvbG9yPSh0LmJvcmRlckNvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9KHQuYmFja2dyb3VuZENvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUVuYWJsZT0odC5ncmlkTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lV2lkdGg9KHQuZ3JpZExpbmVXaWR0aHx8WzEsMV0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUNvbG9yPWkodC5ncmlkTGluZUNvbG9yfHxbWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0pLHRoaXMuemVyb0xpbmVFbmFibGU9KHQuemVyb0xpbmVFbmFibGV8fFshMCwhMF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZVdpZHRoPSh0Lnplcm9MaW5lV2lkdGh8fFs0LDRdKS5zbGljZSgpLHRoaXMuemVyb0xpbmVDb2xvcj1pKHQuemVyb0xpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tNYXJrTGVuZ3RoPSh0LnRpY2tNYXJrTGVuZ3RofHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrTWFya1dpZHRoPSh0LnRpY2tNYXJrV2lkdGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrQ29sb3I9aSh0LnRpY2tNYXJrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpdGxlQ2VudGVyPSh0LnRpdGxlQ2VudGVyfHxbLjUqKG5bMF0rblsyXSkvciwoblszXSsxMjApL3JdKS5zbGljZSgpLHRoaXMudGl0bGVFbmFibGU9ISgidGl0bGVFbmFibGUiaW4gdCYmIXQudGl0bGVFbmFibGUpLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9aSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj1pKHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9aSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBzPXQudGlja3N8fFtbXSxbXV0sbD10aGlzLl90aWNrQm91bmRzO2xbMF09bFsxXT0xLzAsbFsyXT1sWzNdPS0oMS8wKTtmb3IodmFyIGM9MDtjPDI7KytjKXt2YXIgdT1zW2NdLnNsaWNlKDApOzAhPT11Lmxlbmd0aCYmKHUuc29ydChhKSxsW2NdPU1hdGgubWluKGxbY10sdVswXS54KSxsW2MrMl09TWF0aC5tYXgobFtjKzJdLHVbdS5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpsLHRpY2tzOnN9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6bCx0aWNrczpzLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih2YXIgdD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxoLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0saC5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0saC5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxoLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjIxMCwiLi9saWIvZ3JpZCI6MjExLCIuL2xpYi9saW5lIjoyMTIsIi4vbGliL3RleHQiOjIxNCwiZ2wtc2VsZWN0LXN0YXRpYyI6MjYwfV0sMjI1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xudmFyeWluZyB2ZWMyIHV2O1xudm9pZCBtYWluKCkge1xuICB1diA9IHBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAsIDEpO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI2MX1dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW51bGw7dHJ5e3I9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkscnx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUoKXtpZighdyYmRy5hdXRvUmVzaXplKXt2YXIgdD1NLnBhcmVudE5vZGUsZT0xLHI9MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8oZT10LmNsaWVudFdpZHRoLHI9dC5jbGllbnRIZWlnaHQpOihlPXdpbmRvdy5pbm5lcldpZHRoLHI9d2luZG93LmlubmVySGVpZ2h0KTt2YXIgbj0wfE1hdGguY2VpbChlKkcucGl4ZWxSYXRpbyksaT0wfE1hdGguY2VpbChyKkcucGl4ZWxSYXRpbyk7aWYobiE9PU0ud2lkdGh8fGkhPT1NLmhlaWdodCl7TS53aWR0aD1uLE0uaGVpZ2h0PWk7dmFyIGE9TS5zdHlsZTthLnBvc2l0aW9uPWEucG9zaXRpb258fCJhYnNvbHV0ZSIsYS5sZWZ0PSIwcHgiLGEudG9wPSIwcHgiLGEud2lkdGg9ZSsicHgiLGEuaGVpZ2h0PXIrInB4IixOPSEwfX19ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1PLmxlbmd0aCxlPWoubGVuZ3RoLHI9MDtyPGU7KytyKUZbcl09MDt0OmZvcih2YXIgcj0wO3I8dDsrK3Ipe3ZhciBuPU9bcl0saT1uLnBpY2tTbG90cztpZihpKXtmb3IodmFyIGE9MDthPGU7KythKWlmKEZbYV0raTwyNTUpe1Jbcl09YSxuLnNldFBpY2tCYXNlKEZbYV0rMSksRlthXSs9aTtjb250aW51ZSB0fXZhciBvPWgoayxxKTtSW3JdPWUsai5wdXNoKG8pLEYucHVzaChpKSxuLnNldFBpY2tCYXNlKDEpLGUrPTF9ZWxzZSBSW3JdPS0xfWZvcig7ZT4wJiYwPT09RltlLTFdOylGLnBvcCgpLGoucG9wKCkuZGlzcG9zZSgpfWZ1bmN0aW9uIHMoKXtpZihHLmNvbnRleHRMb3N0KXJldHVybiEwO2suaXNDb250ZXh0TG9zdCgpJiYoRy5jb250ZXh0TG9zdD0hMCxHLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxHLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxHLm9uY29udGV4dGxvc3MmJkcub25jb250ZXh0bG9zcygpKX1mdW5jdGlvbiBiKCl7aWYoIXMoKSl7ay5jb2xvck1hc2soITAsITAsITAsITApLGsuZGVwdGhNYXNrKCEwKSxrLmRpc2FibGUoay5CTEVORCksay5lbmFibGUoay5ERVBUSF9URVNUKTtmb3IodmFyIHQ9Ty5sZW5ndGgsZT1qLmxlbmd0aCxyPTA7cjxlOysrcil7dmFyIG49altyXTtuLnNoYXBlPVksbi5iZWdpbigpO2Zvcih2YXIgaT0wO2k8dDsrK2kpaWYoUltpXT09PXIpe3ZhciBhPU9baV07YS5kcmF3UGljayYmKGEucGl4ZWxSYXRpbz0xLGEuZHJhd1BpY2soSCkpfW4uZW5kKCl9fX1mdW5jdGlvbiB4KCl7aWYoIXMoKSl7ZSgpO3ZhciB0PUcuY2FtZXJhLnRpY2soKTtILnZpZXc9Ry5jYW1lcmEubWF0cml4LE49Tnx8dCxCPUJ8fHQsRC5waXhlbFJhdGlvPUcucGl4ZWxSYXRpbyx6LnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvO3ZhciByPU8ubGVuZ3RoLG49WlswXSxpPVpbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0oMS8wKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wucGl4ZWxSYXRpbz1HLnBpeGVsUmF0aW8sbC5heGVzPUcuYXhlcyxOPU58fCEhbC5kaXJ0eSxCPUJ8fCEhbC5kaXJ0eTt2YXIgYz1sLmJvdW5kcztpZihjKWZvcih2YXIgZj1jWzBdLGg9Y1sxXSxkPTA7ZDwzOysrZCluW2RdPU1hdGgubWluKG5bZF0sZltkXSksaVtkXT1NYXRoLm1heChpW2RdLGhbZF0pfXZhciBtPUcuYm91bmRzO2lmKEcuYXV0b0JvdW5kcylmb3IodmFyIGQ9MDtkPDM7KytkKXtpZihpW2RdPG5bZF0pbltkXT0tMSxpW2RdPTE7ZWxzZXtuW2RdPT09aVtkXSYmKG5bZF0tPTEsaVtkXSs9MSk7dmFyIGc9LjA1KihpW2RdLW5bZF0pO25bZF09bltkXS1nLGlbZF09aVtkXStnfW1bMF1bZF09bltkXSxtWzFdW2RdPWlbZF19Zm9yKHZhciB5PSExLGQ9MDtkPDM7KytkKXk9eXx8SlswXVtkXSE9PW1bMF1bZF18fEpbMV1bZF0hPT1tWzFdW2RdLEpbMF1bZF09bVswXVtkXSxKWzFdW2RdPW1bMV1bZF07aWYoQj1CfHx5LE49Tnx8eSl7aWYoeSl7Zm9yKHZhciB4PVswLDAsMF0sbz0wO288MzsrK28peFtvXT1hKChtWzFdW29dLW1bMF1bb10pLzEwKTtELmF1dG9UaWNrcz9ELnVwZGF0ZSh7Ym91bmRzOm0sdGlja1NwYWNpbmc6eH0pOkQudXBkYXRlKHtib3VuZHM6bX0pfXZhciBfPWsuZHJhd2luZ0J1ZmZlcldpZHRoLHc9ay5kcmF3aW5nQnVmZmVySGVpZ2h0O3FbMF09XyxxWzFdPXcsWVswXT0wfE1hdGgubWF4KF8vRy5waXhlbFJhdGlvLDEpLFlbMV09MHxNYXRoLm1heCh3L0cucGl4ZWxSYXRpbywxKSx2KFUsRy5mb3Z5LF8vdyxHLnpOZWFyLEcuekZhcik7Zm9yKHZhciBvPTA7bzwxNjsrK28pVltvXT0wO1ZbMTVdPTE7Zm9yKHZhciBNPTAsbz0wO288MzsrK28pTT1NYXRoLm1heChNLG1bMV1bb10tbVswXVtvXSk7Zm9yKHZhciBvPTA7bzwzOysrbylHLmF1dG9TY2FsZT9WWzUqb109Ry5hc3BlY3Rbb10vKG1bMV1bb10tbVswXVtvXSk6Vls1Km9dPTEvTSxHLmF1dG9DZW50ZXImJihWWzEyK29dPS41Ki1WWzUqb10qKG1bMF1bb10rbVsxXVtvXSkpO2Zvcih2YXIgbz0wO288cjsrK28pe3ZhciBsPU9bb107bC5heGVzQm91bmRzPW0sRy5jbGlwVG9Cb3VuZHMmJihsLmNsaXBCb3VuZHM9bSl9RS5vYmplY3QmJihHLnNuYXBUb0RhdGE/ei5wb3NpdGlvbj1FLmRhdGFDb29yZGluYXRlOnoucG9zaXRpb249RS5kYXRhUG9zaXRpb24sei5ib3VuZHM9bSksQiYmKEI9ITEsYigpKSxHLmF4ZXNQaXhlbHM9dShHLmF4ZXMsSCxfLHcpLEcub25yZW5kZXImJkcub25yZW5kZXIoKSxrLmJpbmRGcmFtZWJ1ZmZlcihrLkZSQU1FQlVGRkVSLG51bGwpLGsudmlld3BvcnQoMCwwLF8sdyk7dmFyIFQ9Ry5jbGVhckNvbG9yO2suY2xlYXJDb2xvcihUWzBdLFRbMV0sVFsyXSxUWzNdKSxrLmNsZWFyKGsuQ09MT1JfQlVGRkVSX0JJVHxrLkRFUFRIX0JVRkZFUl9CSVQpLGsuZGVwdGhNYXNrKCEwKSxrLmNvbG9yTWFzayghMCwhMCwhMCwhMCksay5lbmFibGUoay5ERVBUSF9URVNUKSxrLmRlcHRoRnVuYyhrLkxFUVVBTCksay5kaXNhYmxlKGsuQkxFTkQpLGsuZGlzYWJsZShrLkNVTExfRkFDRSk7dmFyIEE9ITE7RC5lbmFibGUmJihBPUF8fEQuaXNUcmFuc3BhcmVudCgpLEQuZHJhdyhIKSksei5heGVzPUQsRS5vYmplY3QmJnouZHJhdyhIKSxrLmRpc2FibGUoay5DVUxMX0ZBQ0UpO2Zvcih2YXIgbz0wO288cjsrK28pe3ZhciBsPU9bb107bC5heGVzPUQsbC5waXhlbFJhdGlvPUcucGl4ZWxSYXRpbyxsLmlzT3BhcXVlJiZsLmlzT3BhcXVlKCkmJmwuZHJhdyhIKSxsLmlzVHJhbnNwYXJlbnQmJmwuaXNUcmFuc3BhcmVudCgpJiYoQT0hMCl9aWYoQSl7Uy5zaGFwZT1xLFMuYmluZCgpLGsuY2xlYXIoay5ERVBUSF9CVUZGRVJfQklUKSxrLmNvbG9yTWFzayghMSwhMSwhMSwhMSksay5kZXB0aE1hc2soITApLGsuZGVwdGhGdW5jKGsuTEVTUyksRC5lbmFibGUmJkQuaXNUcmFuc3BhcmVudCgpJiZELmRyYXdUcmFuc3BhcmVudChIKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wuaXNPcGFxdWUmJmwuaXNPcGFxdWUoKSYmbC5kcmF3KEgpfWsuZW5hYmxlKGsuQkxFTkQpLGsuYmxlbmRFcXVhdGlvbihrLkZVTkNfQUREKSxrLmJsZW5kRnVuYyhrLk9ORSxrLk9ORV9NSU5VU19TUkNfQUxQSEEpLGsuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxrLmRlcHRoTWFzayghMSksay5jbGVhckNvbG9yKDAsMCwwLDApLGsuY2xlYXIoay5DT0xPUl9CVUZGRVJfQklUKSxELmlzVHJhbnNwYXJlbnQoKSYmRC5kcmF3VHJhbnNwYXJlbnQoSCk7Zm9yKHZhciBvPTA7bzxyOysrbyl7dmFyIGw9T1tvXTtsLmlzVHJhbnNwYXJlbnQmJmwuaXNUcmFuc3BhcmVudCgpJiZsLmRyYXdUcmFuc3BhcmVudChIKX1rLmJpbmRGcmFtZWJ1ZmZlcihrLkZSQU1FQlVGRkVSLG51bGwpLGsuYmxlbmRGdW5jKGsuT05FLGsuT05FX01JTlVTX1NSQ19BTFBIQSksay5kaXNhYmxlKGsuREVQVEhfVEVTVCksTC5iaW5kKCksUy5jb2xvclswXS5iaW5kKDApLEwudW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxwKGspLGsuZGlzYWJsZShrLkJMRU5EKX1OPSExO2Zvcih2YXIgbz0wO288cjsrK28pT1tvXS5kaXJ0eT0hMX19fWZ1bmN0aW9uIF8oKXt3fHxHLmNvbnRleHRMb3N0fHwocmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pLHgoKSl9dD10fHx7fTt2YXIgdz0hMSxNPSh0LnBpeGVsUmF0aW98fHBhcnNlRmxvYXQod2luZG93LmRldmljZVBpeGVsUmF0aW8pLHQuY2FudmFzKTtpZighTSlpZihNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXt2YXIgVD10LmNvbnRhaW5lcjtULmFwcGVuZENoaWxkKE0pfWVsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChNKTt2YXIgaz10LmdsO2lmKGt8fChrPWkoTSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSksIWspdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkIik7dmFyIEE9dC5ib3VuZHN8fFtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLEU9bmV3IG4sUz1kKGssW2suZHJhd2luZ0J1ZmZlcldpZHRoLGsuZHJhd2luZ0J1ZmZlckhlaWdodF0se3ByZWZlckZsb2F0OiF5fSksTD1nKGspLEM9dC5jYW1lcmF8fHtleWU6WzIsMCwwXSxjZW50ZXI6WzAsMCwwXSx1cDpbMCwxLDBdLHpvb21NaW46LjEsem9vbU1heDoxMDAsbW9kZToidHVybnRhYmxlIn0sST10LmF4ZXN8fHt9LEQ9YyhrLEkpO0QuZW5hYmxlPSFJLmRpc2FibGU7dmFyIFA9dC5zcGlrZXN8fHt9LHo9ZihrLFApLE89W10sUj1bXSxGPVtdLGo9W10sTj0hMCxCPSEwLFU9bmV3IEFycmF5KDE2KSxWPW5ldyBBcnJheSgxNiksSD17dmlldzpudWxsLHByb2plY3Rpb246VSxtb2RlbDpWfSxCPSEwLHE9W2suZHJhd2luZ0J1ZmZlcldpZHRoLGsuZHJhd2luZ0J1ZmZlckhlaWdodF0sRz17Z2w6ayxjb250ZXh0TG9zdDohMSxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb3x8cGFyc2VGbG9hdCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksY2FudmFzOk0sc2VsZWN0aW9uOkUsY2FtZXJhOmwoTSxDKSxheGVzOkQsYXhlc1BpeGVsczpudWxsLHNwaWtlczp6LGJvdW5kczpBLG9iamVjdHM6TyxzaGFwZTpxLGFzcGVjdDp0LmFzcGVjdFJhdGlvfHxbMSwxLDFdLHBpY2tSYWRpdXM6dC5waWNrUmFkaXVzfHwxMCx6TmVhcjp0LnpOZWFyfHwuMDEsekZhcjp0LnpGYXJ8fDFlMyxmb3Z5OnQuZm92eXx8TWF0aC5QSS80LGNsZWFyQ29sb3I6dC5jbGVhckNvbG9yfHxbMCwwLDAsMF0sYXV0b1Jlc2l6ZTpvKHQuYXV0b1Jlc2l6ZSksYXV0b0JvdW5kczpvKHQuYXV0b0JvdW5kcyksYXV0b1NjYWxlOiEhdC5hdXRvU2NhbGUsYXV0b0NlbnRlcjpvKHQuYXV0b0NlbnRlciksY2xpcFRvQm91bmRzOm8odC5jbGlwVG9Cb3VuZHMpLHNuYXBUb0RhdGE6ISF0LnNuYXBUb0RhdGEsb25zZWxlY3Q6dC5vbnNlbGVjdHx8bnVsbCxvbnJlbmRlcjp0Lm9ucmVuZGVyfHxudWxsLG9uY2xpY2s6dC5vbmNsaWNrfHxudWxsLGNhbWVyYVBhcmFtczpILG9uY29udGV4dGxvc3M6bnVsbCxtb3VzZUxpc3RlbmVyOm51bGx9LFk9W2suZHJhd2luZ0J1ZmZlcldpZHRoL0cucGl4ZWxSYXRpb3wwLGsuZHJhd2luZ0J1ZmZlckhlaWdodC9HLnBpeGVsUmF0aW98MF07Ry5hdXRvUmVzaXplJiZlKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZSksRy51cGRhdGU9ZnVuY3Rpb24odCl7d3x8KHQ9dHx8e30sTj0hMCxCPSEwKX0sRy5hZGQ9ZnVuY3Rpb24odCl7d3x8KHQuYXhlcz1ELE8ucHVzaCh0KSxSLnB1c2goLTEpLE49ITAsQj0hMCxyKCkpfSxHLnJlbW92ZT1mdW5jdGlvbih0KXtpZighdyl7dmFyIGU9Ty5pbmRleE9mKHQpO2U8MHx8KE8uc3BsaWNlKGUsMSksUi5wb3AoKSxOPSEwLEI9ITAscigpKX19LEcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF3JiYodz0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixlKSxNLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHMpLEcubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFHLmNvbnRleHRMb3N0KSl7RC5kaXNwb3NlKCksei5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxPLmxlbmd0aDsrK3QpT1t0XS5kaXNwb3NlKCk7Uy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxqLmxlbmd0aDsrK3Qpalt0XS5kaXNwb3NlKCk7TC5kaXNwb3NlKCksaz1udWxsLEQ9bnVsbCx6PW51bGwsTz1bXX19O3ZhciBYPSExLFc9MDtHLm1vdXNlTGlzdGVuZXI9bShNLGZ1bmN0aW9uKHQsZSxyKXtpZighdyl7dmFyIG49ai5sZW5ndGgsaT1PLmxlbmd0aCxhPUUub2JqZWN0O0UuZGlzdGFuY2U9MS8wLEUubW91c2VbMF09ZSxFLm1vdXNlWzFdPXIsRS5vYmplY3Q9bnVsbCxFLnNjcmVlbj1udWxsLEUuZGF0YUNvb3JkaW5hdGU9RS5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZXKVg9ITA7ZWxzZXtYJiYoQj0hMCksWD0hMTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgbD1qW3NdLnF1ZXJ5KGUsWVsxXS1yLTEsRy5waWNrUmFkaXVzKTtpZihsKXtpZihsLmRpc3RhbmNlPkUuZGlzdGFuY2UpY29udGludWU7Zm9yKHZhciBjPTA7YzxpOysrYyl7dmFyIHU9T1tjXTtpZihSW2NdPT09cyl7dmFyIGY9dS5waWNrKGwpO2YmJihFLmJ1dHRvbnM9dCxFLnNjcmVlbj1sLmNvb3JkLEUuZGlzdGFuY2U9bC5kaXN0YW5jZSxFLm9iamVjdD11LEUuaW5kZXg9Zi5kaXN0YW5jZSxFLmRhdGFQb3NpdGlvbj1mLnBvc2l0aW9uLEUuZGF0YUNvb3JkaW5hdGU9Zi5kYXRhQ29vcmRpbmF0ZSxFLmRhdGE9ZixvPSEwKX19fX19YSYmYSE9PUUub2JqZWN0JiYoYS5oaWdobGlnaHQmJmEuaGlnaGxpZ2h0KG51bGwpLE49ITApLEUub2JqZWN0JiYoRS5vYmplY3QuaGlnaGxpZ2h0JiZFLm9iamVjdC5oaWdobGlnaHQoRS5kYXRhKSxOPSEwKSxvPW98fEUub2JqZWN0IT09YSxvJiZHLm9uc2VsZWN0JiZHLm9uc2VsZWN0KEUpLDEmdCYmISgxJlcpJiZHLm9uY2xpY2smJkcub25jbGljayhFKSxXPXR9fSksTS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixzKTt2YXIgWj1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXSxKPVtaWzBdLnNsaWNlKCksWlsxXS5zbGljZSgpXTtyZXR1cm4gXygpLEcucmVkcmF3PWZ1bmN0aW9uKCl7d3x8KE49ITAseCgpKX0sR31lLmV4cG9ydHM9czt2YXIgbD10KCIzZC12aWV3LWNvbnRyb2xzIiksYz10KCJnbC1heGVzM2QiKSx1PXQoImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIiksZj10KCJnbC1zcGlrZXMzZCIpLGg9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGQ9dCgiZ2wtZmJvIikscD10KCJhLWJpZy10cmlhbmdsZSIpLG09dCgibW91c2UtY2hhbmdlIiksdj10KCJnbC1tYXQ0L3BlcnNwZWN0aXZlIiksZz10KCIuL2xpYi9zaGFkZXIiKSx5PXQoImlzLW1vYmlsZSIpKCl9LHsiLi9saWIvc2hhZGVyIjoyMjUsIjNkLXZpZXctY29udHJvbHMiOjM3LCJhLWJpZy10cmlhbmdsZSI6NDAsImdsLWF4ZXMzZCI6MTQ4LCJnbC1heGVzM2QvcHJvcGVydGllcyI6MTU1LCJnbC1mYm8iOjE2OCwiZ2wtbWF0NC9wZXJzcGVjdGl2ZSI6MTg4LCJnbC1zZWxlY3Qtc3RhdGljIjoyNjAsImdsLXNwaWtlczNkIjoyNzAsImlzLW1vYmlsZSI6MzAzLCJtb3VzZS1jaGFuZ2UiOjQ2MH1dLDIyNzpbZnVuY3Rpb24odCxlLHIpe3IucG9pbnRWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIGNvKSB7XG4gIGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4O1xuICBoaWdocCBmbG9hdCBiID0gNzguMjMzO1xuICBoaWdocCBmbG9hdCBjID0gNDM3NTguNTQ1MztcbiAgaGlnaHAgZmxvYXQgZCA9IGRvdChjby54eSwgdmVjMihhLCBiKSk7XG4gIGhpZ2hwIGZsb2F0IGUgPSBtb2QoZCwgMy4xNCk7XG4gIHJldHVybiBmcmFjdChzaW4oZSkgKiBjKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICAgIC8vIGlmIHdlIGRvbid0IGppdHRlciB0aGUgcG9pbnQgc2l6ZSBhIGJpdCwgb3ZlcmFsbCBwb2ludCBjbG91ZFxuICAgIC8vIHNhdHVyYXRpb24gJ2p1bXBzJyBvbiB6b29taW5nLCB3aGljaCBpcyBkaXN0dXJiaW5nIGFuZCBjb25mdXNpbmdcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplICogKCgxOS41ICsgcmFuZChwb3NpdGlvbikpIC8gMjAuMCk7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgLy8gZ2V0IHRoZSBzYW1lIHNxdWFyZSBzdXJmYWNlIGFzIGNpcmNsZSB3b3VsZCBiZVxuICAgIGdsX1BvaW50U2l6ZSAqPSAwLjg4NjtcbiAgfVxufSIsci5wb2ludEZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cztcbiAgdmVjNCBiYXNlQ29sb3I7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgaWYoY2VudGVyRnJhY3Rpb24gPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgY2VudGVyRnJhY3Rpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gICAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xuICB9XG59XG4iLHIucGlja1ZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiIsci5waWNrRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59XG4ifSx7fV0sMjI4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vbGliL0dMRXJyb3IiOjIyOSwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjIzMCwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjoyMzEsIi4vbGliL3JlZmxlY3QiOjIzMiwiLi9saWIvcnVudGltZS1yZWZsZWN0IjoyMzMsIi4vbGliL3NoYWRlci1jYWNoZSI6MjM0LGR1cDoyMTZ9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE3fV0sMjMwOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjI5LGR1cDoyMTh9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE5XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyMjksIi4vcmVmbGVjdCI6MjMyLGR1cDoyMTl9XSwyMzI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjIwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjIwfV0sMjMzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIyMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIyMX1dLDIzNDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMjJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjIyOSxkdXA6MjIyLCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjE2OSwid2Vha21hcC1zaGltIjo1Njl9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aD4+PjE7Zm9yKHI9MDtyPGk7cisrKXt2YXIgYT10WzIqcl0sbz10WzIqcisxXTthPj1lWzBdJiZhPD1lWzJdJiZvPj1lWzFdJiZvPD1lWzNdJiZuKyt9cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuZ2wsaT1zKHIpLGE9cyhyKSxsPW8ocixjLnBvaW50VmVydGV4LGMucG9pbnRGcmFnbWVudCksdT1vKHIsYy5waWNrVmVydGV4LGMucGlja0ZyYWdtZW50KSxmPW5ldyBuKHQsaSxhLGwsdSk7cmV0dXJuIGYudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGYpLGZ9dmFyIG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoInR5cGVkYXJyYXktcG9vbCIpLGM9dCgiLi9saWIvc2hhZGVyIik7ZS5leHBvcnRzPWE7dmFyIHU9bi5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXZhciByO3Q9dHx8e30sdGhpcy5zaXplTWluPWUoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9ZSgic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9ZSgiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1lKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9ZSgiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPWUoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LGE9dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4sbz10LnBvc2l0aW9ucyxzPWk/bzpsLm1hbGxvY0Zsb2F0MzIoby5sZW5ndGgpLGM9YT90LmlkVG9JbmRleDpsLm1hbGxvY0ludDMyKG4pO2lmKGl8fHMuc2V0KG8pLCFhKWZvcihzLnNldChvKSxyPTA7cjxuO3IrKyljW3JdPXI7dGhpcy5wb2ludHM9byx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUocyksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxsLmZyZWUocyksYXx8bC5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dm9pZCAwIT09cixhPW4/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG89dGhpcy5wbG90LmdsLHM9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gcjt2YXIgbD1zWzJdLXNbMF0sYz1zWzNdLXNbMV0sdT1pKHRoaXMucG9pbnRzLHMpLGY9dGhpcy5wbG90LnBpY2tQaXhlbFJhdGlvKk1hdGgubWF4KE1hdGgubWluKHRoaXMuc2l6ZU1pbkNhcCx0aGlzLnNpemVNaW4pLE1hdGgubWluKHRoaXMuc2l6ZU1heCx0aGlzLnNpemVNYXgvTWF0aC5wb3codSwuMzMzMzMpKSk7dFswXT0yL2wsdFs0XT0yL2MsdFs2XT0tMipzWzBdL2wtMSx0WzddPS0yKnNbMV0vYy0xLHRoaXMub2Zmc2V0QnVmZmVyLmJpbmQoKSxhLmJpbmQoKSxhLmF0dHJpYnV0ZXMucG9zaXRpb24ucG9pbnRlcigpLGEudW5pZm9ybXMubWF0cml4PXQsYS51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLGEudW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixhLnVuaWZvcm1zLnBvaW50Q2xvdWQ9Zjw1LGEudW5pZm9ybXMucG9pbnRTaXplPWYsYS51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj1NYXRoLm1pbigxLE1hdGgubWF4KDAsTWF0aC5zcXJ0KDEtdGhpcy5hcmVhUmF0aW8pKSksbiYmKGVbMF09MjU1JnIsZVsxXT1yPj44JjI1NSxlWzJdPXI+PjE2JjI1NSxlWzNdPXI+PjI0JjI1NSx0aGlzLnBpY2tCdWZmZXIuYmluZCgpLGEuYXR0cmlidXRlcy5waWNrSWQucG9pbnRlcihvLlVOU0lHTkVEX0JZVEUpLGEudW5pZm9ybXMucGlja09mZnNldD1lLHRoaXMucGlja09mZnNldD1yKTt2YXIgaD1vLmdldFBhcmFtZXRlcihvLkJMRU5EKSxkPW8uZ2V0UGFyYW1ldGVyKG8uRElUSEVSKTtyZXR1cm4gaCYmIXRoaXMuYmxlbmQmJm8uZGlzYWJsZShvLkJMRU5EKSxkJiZvLmRpc2FibGUoby5ESVRIRVIpLG8uZHJhd0FycmF5cyhvLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksaCYmIXRoaXMuYmxlbmQmJm8uZW5hYmxlKG8uQkxFTkQpLGQmJm8uZW5hYmxlKG8uRElUSEVSKSxyK3RoaXMucG9pbnRDb3VudH19KCksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjoyMjcsImdsLWJ1ZmZlciI6MTU2LCJnbC1zaGFkZXIiOjIyOCwidHlwZWRhcnJheS1wb29sIjo1NDl9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1lWzBdLHU9ZVsxXSxmPWVbMl0saD1lWzNdLGQ9clswXSxwPXJbMV0sbT1yWzJdLHY9clszXTtyZXR1cm4gYT1jKmQrdSpwK2YqbStoKnYsYTwwJiYoYT0tYSxkPS1kLHA9LXAsbT0tbSx2PS12KSwxLWE+MWUtNj8oaT1NYXRoLmFjb3MoYSksbz1NYXRoLnNpbihpKSxzPU1hdGguc2luKCgxLW4pKmkpL28sbD1NYXRoLnNpbihuKmkpL28pOihzPTEtbixsPW4pLHRbMF09cypjK2wqZCx0WzFdPXMqdStsKnAsdFsyXT1zKmYrbCptLHRbM109cypoK2wqdix0fWUuZXhwb3J0cz1ufSx7fV0sMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmVydGV4OiJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5cbnZlYzQgY29tcHV0ZVBvc2l0aW9uXzFfMCh2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvLCB2ZWMyIHNjSGksIHZlYzIgc2NMbywgdmVjMiB0ckhpLCB2ZWMyIHRyTG8pIHtcbiAgcmV0dXJuIHZlYzQoKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gIFx0XHRcdC8vRklYTUU6IHRoaXMgdGhpbmd5IGRvZXMgbm90IGdpdmUgbm90aWNlYWJsZSBwcmVjaXNpb24gZ2FpbiwgbmVlZCB0ZXN0XG4gICAgICAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NIaVxuICAgICAgICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvXG4gICAgICAgICAgICAsIDAsIDEpO1xufVxuXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyO1xuYXR0cmlidXRlIHZlYzIgY2hhciwgY29sb3I7XG5cbi8vdGhpcyBpcyA2NC1iaXQgZm9ybSBvZiBzY2FsZSBhbmQgdHJhbnNsYXRlXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IHZpZXdCb3g7XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xuXG52YXJ5aW5nIHZlYzQgY2hhckNvbG9yLCBib3JkZXJDb2xvcjtcbnZhcnlpbmcgdmVjMiBjaGFySWQ7XG52YXJ5aW5nIHZlYzIgcG9pbnRDb29yZDtcbnZhcnlpbmcgZmxvYXQgcG9pbnRTaXplO1xudmFyeWluZyBmbG9hdCBib3JkZXJXaWR0aDtcblxuXG52b2lkIG1haW4oKSB7XG4gIGNoYXJDb2xvciA9IHRleHR1cmUyRChwYWxldHRlLCB2ZWMyKGNvbG9yLnggLyAyNTUuLCAwKSk7XG4gIGJvcmRlckNvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoY29sb3IueSAvIDI1NS4sIDApKTtcblxuICBnbF9Qb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcbiAgcG9pbnRTaXplID0gc2l6ZSAqIHBpeGVsUmF0aW87XG5cbiAgY2hhcklkID0gY2hhcjtcbiAgYm9yZGVyV2lkdGggPSBib3JkZXI7XG5cbiAgZ2xfUG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25fMV8wKFxuICAgIHBvc2l0aW9uSGksIHBvc2l0aW9uTG8sXG4gICAgc2NhbGVIaSwgc2NhbGVMbyxcbiAgICB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8pO1xuXG4gIHBvaW50Q29vcmQgPSB2aWV3Qm94Lnh5ICsgKHZpZXdCb3guencgLSB2aWV3Qm94Lnh5KSAqIChnbF9Qb3NpdGlvbi54eSAqIC41ICsgLjUpO1xufVxuIixmcmFnbWVudDoicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgY2hhcnM7XG51bmlmb3JtIHZlYzIgY2hhcnNTaGFwZTtcbnVuaWZvcm0gZmxvYXQgY2hhcnNTdGVwLCBwaXhlbFJhdGlvLCBjaGFyT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgYm9yZGVyQ29sb3I7XG52YXJ5aW5nIHZlYzQgY2hhckNvbG9yO1xudmFyeWluZyB2ZWMyIGNoYXJJZDtcbnZhcnlpbmcgdmVjMiBwb2ludENvb3JkO1xudmFyeWluZyBmbG9hdCBwb2ludFNpemU7XG52YXJ5aW5nIGZsb2F0IGJvcmRlcldpZHRoO1xuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgcG9pbnRVViA9IChwb2ludENvb3JkIC0gZ2xfRnJhZ0Nvb3JkLnh5ICsgcG9pbnRTaXplICogLjUpIC8gcG9pbnRTaXplO1xuXHRwb2ludFVWLnggPSAxLiAtIHBvaW50VVYueDtcblx0dmVjMiB0ZXhDb29yZCA9ICgoY2hhcklkICsgcG9pbnRVVikgKiBjaGFyc1N0ZXApIC8gY2hhcnNTaGFwZTtcblx0ZmxvYXQgZGlzdCA9IHRleHR1cmUyRChjaGFycywgdGV4Q29vcmQpLnI7XG5cblx0Ly9tYXgtZGlzdGFuY2UgYWxwaGFcblx0aWYgKGRpc3QgPCAxZS0yKVxuXHRcdGRpc2NhcmQ7XG5cblx0ZmxvYXQgZ2FtbWEgPSAuMDA0NSAqIGNoYXJzU3RlcCAvIHBvaW50U2l6ZTtcblxuICAgIC8vbnVsbC1ib3JkZXIgY2FzZVxuIFx0aWYgKGJvcmRlcldpZHRoICogYm9yZGVyQ29sb3IuYSA9PSAwLikge1xuXHRcdGZsb2F0IGNoYXJBbXQgPSBzbW9vdGhzdGVwKC43NDggLSBnYW1tYSwgLjc0OCArIGdhbW1hLCBkaXN0KTtcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KGNoYXJDb2xvci5yZ2IsIGNoYXJBbXQqY2hhckNvbG9yLmEpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZsb2F0IGRpZiA9IDUuICogcGl4ZWxSYXRpbyAqIGJvcmRlcldpZHRoIC8gcG9pbnRTaXplO1xuXHRmbG9hdCBib3JkZXJMZXZlbCA9IC43NDggLSBkaWYgKiAuNTtcblx0ZmxvYXQgY2hhckxldmVsID0gLjc0OCArIGRpZiAqIC41O1xuXG5cdGZsb2F0IGJvcmRlckFtdCA9IHNtb290aHN0ZXAoYm9yZGVyTGV2ZWwgLSBnYW1tYSwgYm9yZGVyTGV2ZWwgKyBnYW1tYSwgZGlzdCk7XG5cdGZsb2F0IGNoYXJBbXQgPSBzbW9vdGhzdGVwKGNoYXJMZXZlbCAtIGdhbW1hLCBjaGFyTGV2ZWwgKyBnYW1tYSwgZGlzdCk7XG5cblx0dmVjNCBjb2xvciA9IGJvcmRlckNvbG9yO1xuXHRjb2xvci5hICo9IGJvcmRlckFtdDtcblxuXHRnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IsIGNoYXJDb2xvciwgY2hhckFtdCk7XG59XG4iLHBpY2tWZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgdmVjNCBpZDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblxudmVjNCBjb21wdXRlUG9zaXRpb25fMV8wKHZlYzIgcG9zSGksIHZlYzIgcG9zTG8sIHZlYzIgc2NIaSwgdmVjMiBzY0xvLCB2ZWMyIHRySGksIHZlYzIgdHJMbykge1xuICByZXR1cm4gdmVjNCgocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgXHRcdFx0Ly9GSVhNRTogdGhpcyB0aGluZ3kgZG9lcyBub3QgZ2l2ZSBub3RpY2VhYmxlIHByZWNpc2lvbiBnYWluLCBuZWVkIHRlc3RcbiAgICAgICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG9cbiAgICAgICAgICAgICwgMCwgMSk7XG59XG5cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IGZyYWdJZCA9IGlkICsgcGlja09mZnNldDtcblxuICBmcmFnSWQueSArPSBmbG9vcihmcmFnSWQueCAvIDI1Ni4wKTtcbiAgZnJhZ0lkLnggLT0gZmxvb3IoZnJhZ0lkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQueiArPSBmbG9vcihmcmFnSWQueSAvIDI1Ni4wKTtcbiAgZnJhZ0lkLnkgLT0gZmxvb3IoZnJhZ0lkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQudyArPSBmbG9vcihmcmFnSWQueiAvIDI1Ni4wKTtcbiAgZnJhZ0lkLnogLT0gZmxvb3IoZnJhZ0lkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcblxuICBnbF9Qb2ludFNpemUgPSBzaXplICogLjI1ICogcGl4ZWxSYXRpbztcblxuICBnbF9Qb3NpdGlvbiA9IGNvbXB1dGVQb3NpdGlvbl8xXzAoXG4gICAgcG9zaXRpb25IaSwgcG9zaXRpb25MbyxcbiAgICBzY2FsZUhpLCBzY2FsZUxvLFxuICAgIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbyk7XG59XG4iLHBpY2tGcmFnbWVudDoicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufVxuIn19LHt9XSwyMzg6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4NH1dLDIzOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTZdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2xpYi9HTEVycm9yIjoyNDAsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyNDEsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjQyLCIuL2xpYi9yZWZsZWN0IjoyNDMsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjQ0LCIuL2xpYi9zaGFkZXItY2FjaGUiOjI0NSxkdXA6MjE2fV0sMjQwOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxN11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxN31dLDI0MTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMThdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjI0MCxkdXA6MjE4fV0sMjQyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxOV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjQwLCIuL3JlZmxlY3QiOjI0MyxkdXA6MjE5fV0sMjQzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIyMF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIyMH1dLDI0NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMjFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMjF9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjIyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyNDAsZHVwOjIyMiwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjksIndlYWttYXAtc2hpbSI6NTY5fV0sMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHk9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sYj1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX1mdW5jdGlvbiBpKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8sbCl7dmFyIGM9bC5kdHlwZSx1PWwuc2hhcGUuc2xpY2UoKTtpZih1Lmxlbmd0aDwyfHx1Lmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2QiKTt2YXIgZj0wLGg9MCxkPXModSxsLnN0cmlkZS5zbGljZSgpKTsiZmxvYXQzMiI9PT1jP2Y9dC5GTE9BVDoiZmxvYXQ2NCI9PT1jPyhmPXQuRkxPQVQsZD0hMSxjPSJmbG9hdDMyIik6InVpbnQ4Ij09PWM/Zj10LlVOU0lHTkVEX0JZVEU6KGY9dC5VTlNJR05FRF9CWVRFLGQ9ITEsYz0idWludDgiKTtpZigyPT09dS5sZW5ndGgpaD10LkxVTUlOQU5DRSx1PVt1WzBdLHVbMV0sMV0sbD1wKGwuZGF0YSx1LFtsLnN0cmlkZVswXSxsLnN0cmlkZVsxXSwxXSxsLm9mZnNldCk7ZWxzZXtpZigzIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09dVsyXSloPXQuQUxQSEE7ZWxzZSBpZigyPT09dVsyXSloPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PXVbMl0paD10LlJHQjtlbHNle2lmKDQhPT11WzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTtoPXQuUkdCQX11WzJdfWlmKGghPT10LkxVTUlOQU5DRSYmaCE9PXQuQUxQSEF8fGkhPT10LkxVTUlOQU5DRSYmaSE9PXQuQUxQSEF8fChoPWkpLGghPT1pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbmNvbXBhdGlibGUgdGV4dHVyZSBmb3JtYXQgZm9yIHNldFBpeGVscyIpO3ZhciBnPWwuc2l6ZSx5PW8uaW5kZXhPZihuKTwwO2lmKHkmJm8ucHVzaChuKSxmPT09YSYmZCkwPT09bC5vZmZzZXQmJmwuZGF0YS5sZW5ndGg9PT1nP3k/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGksdVswXSx1WzFdLDAsaSxhLGwuZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGUscix1WzBdLHVbMV0saSxhLGwuZGF0YSk6eT90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG4saSx1WzBdLHVbMV0sMCxpLGEsbC5kYXRhLnN1YmFycmF5KGwub2Zmc2V0LGwub2Zmc2V0K2cpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG4sZSxyLHVbMF0sdVsxXSxpLGEsbC5kYXRhLnN1YmFycmF5KGwub2Zmc2V0LGwub2Zmc2V0K2cpKTtlbHNle3ZhciBiO2I9YT09PXQuRkxPQVQ/di5tYWxsb2NGbG9hdDMyKGcpOnYubWFsbG9jVWludDgoZyk7dmFyIF89cChiLHUsW3VbMl0sdVsyXSp1WzBdLDFdKTtmPT09dC5GTE9BVCYmYT09PXQuVU5TSUdORURfQllURT94KF8sbCk6bS5hc3NpZ24oXyxsKSx5P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixpLHVbMF0sdVsxXSwwLGksYSxiLnN1YmFycmF5KDAsZykpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixlLHIsdVswXSx1WzFdLGksYSxiLnN1YmFycmF5KDAsZykpLGE9PT10LkZMT0FUP3YuZnJlZUZsb2F0MzIoYik6di5mcmVlVWludDgoYil9fWZ1bmN0aW9uIGModCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBzPWModCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgbyh0LHMsZSxyLG4saSl9ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIHM9Yyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBvKHQscyxyLG4saSxhKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9ZS5kdHlwZSxuPWUuc2hhcGUuc2xpY2UoKSxpPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoblswXTwwfHxuWzBdPml8fG5bMV08MHx8blsxXT5pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3ZhciBhPXMobixlLnN0cmlkZS5zbGljZSgpKSxsPTA7ImZsb2F0MzIiPT09cj9sPXQuRkxPQVQ6ImZsb2F0NjQiPT09cj8obD10LkZMT0FULGE9ITEscj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1yP2w9dC5VTlNJR05FRF9CWVRFOihsPXQuVU5TSUdORURfQllURSxhPSExLHI9InVpbnQ4Iik7dmFyIHU9MDtpZigyPT09bi5sZW5ndGgpdT10LkxVTUlOQU5DRSxuPVtuWzBdLG5bMV0sMV0sZT1wKGUuZGF0YSxuLFtlLnN0cmlkZVswXSxlLnN0cmlkZVsxXSwxXSxlLm9mZnNldCk7ZWxzZXtpZigzIT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09blsyXSl1PXQuQUxQSEE7ZWxzZSBpZigyPT09blsyXSl1PXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PW5bMl0pdT10LlJHQjtlbHNle2lmKDQhPT1uWzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTt1PXQuUkdCQX19bCE9PXQuRkxPQVR8fHQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHwobD10LlVOU0lHTkVEX0JZVEUsYT0hMSk7dmFyIGYsaCxkPWUuc2l6ZTtpZihhKWY9MD09PWUub2Zmc2V0JiZlLmRhdGEubGVuZ3RoPT09ZD9lLmRhdGE6ZS5kYXRhLnN1YmFycmF5KGUub2Zmc2V0LGUub2Zmc2V0K2QpO2Vsc2V7dmFyIGc9W25bMl0sblsyXSpuWzBdLDFdO2g9di5tYWxsb2MoZCxyKTt2YXIgeT1wKGgsbixnLDApOyJmbG9hdDMyIiE9PXImJiJmbG9hdDY0IiE9PXJ8fGwhPT10LlVOU0lHTkVEX0JZVEU/bS5hc3NpZ24oeSxlKTp4KHksZSksZj1oLnN1YmFycmF5KDAsZCl9dmFyIGI9Yyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHUsblswXSxuWzFdLDAsdSxsLGYpLGF8fHYuZnJlZShoKSxuZXcgbyh0LGIsblswXSxuWzFdLHUsbCl9ZnVuY3Rpb24gZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNaXNzaW5nIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIik7aWYoZ3x8bih0KSwibnVtYmVyIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlyZXR1cm4gdSh0LGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdfHx0LlJHQkEsYXJndW1lbnRzWzRdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzFdKSlyZXR1cm4gdSh0LDB8YXJndW1lbnRzWzFdWzBdLDB8YXJndW1lbnRzWzFdWzFdLGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZigib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1sxXSl7dmFyIGU9YXJndW1lbnRzWzFdLHI9aShlKT9lOmUucmF3O2lmKHIpcmV0dXJuIGYodCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBoKHQsZSl9dGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3IiKX12YXIgcD10KCJuZGFycmF5IiksbT10KCJuZGFycmF5LW9wcyIpLHY9dCgidHlwZWRhcnJheS1wb29sIik7ZS5leHBvcnRzPWQ7dmFyIGc9bnVsbCx5PW51bGwsYj1udWxsLHg9ZnVuY3Rpb24odCxlKXttLm11bHModCxlLDI1NSl9LF89by5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXyx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbAo7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmZy5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSx5LmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZnLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHkuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsdCksdGhpcy5fbWFnRmlsdGVyPXR9fSxtaXBTYW1wbGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYW5pc29TYW1wbGVzO2lmKHRoaXMuX2FuaXNvU2FtcGxlcz0wfE1hdGgubWF4KHQsMSksZSE9PXRoaXMuX2FuaXNvU2FtcGxlcyl7dmFyIHI9dGhpcy5nbC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksYi5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGIuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1QsdCksdGhpcy5fd3JhcFQ9dH19LHdyYXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3QsdF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1ucyIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYoYi5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIil9ZWxzZSB0PVswfHQsMHx0XTtyZXR1cm4gYSh0aGlzLDB8dFswXSwwfHRbMV0pLFswfHRbMF0sMHx0WzFdXX19LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxhKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsYSh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLF8uYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LF8uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LF8uZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LF8uc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obj1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbj1ufHwwO3ZhciBvPWkodCk/dDp0LnJhdztpZihvKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihuKTwwPyhhLnRleEltYWdlMkQoYS5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLG8pLHRoaXMuX21pcExldmVscy5wdXNoKG4pKTphLnRleFN1YkltYWdlMkQoYS5URVhUVVJFXzJELG4sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxvKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm58fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm58fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTtsKGEsZSxyLG4sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NzYsIm5kYXJyYXktb3BzIjo0NzAsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhKXthPD00Kmg/aSgwLGEtMSx0LGUscixuKTpmKDAsYS0xLHQsZSxyLG4pfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe2Zvcih2YXIgbz10KzE7bzw9ZTsrK28pe2Zvcih2YXIgcz1yW29dLGw9blsyKm9dLGM9blsyKm8rMV0sdT1pW29dLGY9YVtvXSxoPW87aD50Oyl7dmFyIGQ9cltoLTFdLHA9blsyKihoLTEpXTtpZigoZC1zfHxsLXApPj0wKWJyZWFrO3JbaF09ZCxuWzIqaF09cCxuWzIqaCsxXT1uWzIqaC0xXSxpW2hdPWlbaC0xXSxhW2hdPWFbaC0xXSxoLT0xfXJbaF09cyxuWzIqaF09bCxuWzIqaCsxXT1jLGlbaF09dSxhW2hdPWZ9fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3ZhciBvPXJbdF0scz1uWzIqdF0sbD1uWzIqdCsxXSxjPWlbdF0sdT1hW3RdO3JbdF09cltlXSxuWzIqdF09blsyKmVdLG5bMip0KzFdPW5bMiplKzFdLGlbdF09aVtlXSxhW3RdPWFbZV0scltlXT1vLG5bMiplXT1zLG5bMiplKzFdPWwsaVtlXT1jLGFbZV09dX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyW3RdPXJbZV0sblsyKnRdPW5bMiplXSxuWzIqdCsxXT1uWzIqZSsxXSxpW3RdPWlbZV0sYVt0XT1hW2VdfWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dmFyIHM9blt0XSxsPWlbMip0XSxjPWlbMip0KzFdLHU9YVt0XSxmPW9bdF07blt0XT1uW2VdLGlbMip0XT1pWzIqZV0saVsyKnQrMV09aVsyKmUrMV0sYVt0XT1hW2VdLG9bdF09b1tlXSxuW2VdPW5bcl0saVsyKmVdPWlbMipyXSxpWzIqZSsxXT1pWzIqcisxXSxhW2VdPWFbcl0sb1tlXT1vW3JdLG5bcl09cyxpWzIqcl09bCxpWzIqcisxXT1jLGFbcl09dSxvW3JdPWZ9ZnVuY3Rpb24gbCh0LGUscixuLGksYSxvLHMsbCxjLHUpe3NbdF09c1tlXSxsWzIqdF09bFsyKmVdLGxbMip0KzFdPWxbMiplKzFdLGNbdF09Y1tlXSx1W3RdPXVbZV0sc1tlXT1yLGxbMiplXT1uLGxbMiplKzFdPWksY1tlXT1hLHVbZV09b31mdW5jdGlvbiBjKHQsZSxyLG4saSl7cmV0dXJuKHJbdF0tcltlXXx8blsyKmVdLW5bMip0XXx8aVt0XS1pW2VdKTwwfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oZS1hW3RdfHxvWzIqdF0tcnx8aS1zW3RdKTwwfWZ1bmN0aW9uIGYodCxlLHIsbixkLHApe3ZhciBtPShlLXQrMSkvNnwwLHY9dCttLGc9ZS1tLHk9dCtlPj4xLGI9eS1tLHg9eSttLF89dix3PWIsTT15LFQ9eCxrPWcsQT10KzEsRT1lLTEsUz0wO2MoXyx3LHIsbixkLHApJiYoUz1fLF89dyx3PVMpLGMoVCxrLHIsbixkLHApJiYoUz1ULFQ9ayxrPVMpLGMoXyxNLHIsbixkLHApJiYoUz1fLF89TSxNPVMpLGModyxNLHIsbixkLHApJiYoUz13LHc9TSxNPVMpLGMoXyxULHIsbixkLHApJiYoUz1fLF89VCxUPVMpLGMoTSxULHIsbixkLHApJiYoUz1NLE09VCxUPVMpLGModyxrLHIsbixkLHApJiYoUz13LHc9ayxrPVMpLGModyxNLHIsbixkLHApJiYoUz13LHc9TSxNPVMpLGMoVCxrLHIsbixkLHApJiYoUz1ULFQ9ayxrPVMpO3ZhciBMPXJbd10sQz1uWzIqd10sST1uWzIqdysxXSxEPWRbd10sUD1wW3ddLHo9cltUXSxPPW5bMipUXSxSPW5bMipUKzFdLEY9ZFtUXSxqPXBbVF0sTj1fLEI9TSxVPWssVj12LEg9eSxxPWcsRz1yW05dLFk9cltCXSxYPXJbVV07cltWXT1HLHJbSF09WSxyW3FdPVg7Zm9yKHZhciBXPTA7VzwyOysrVyl7dmFyIFo9blsyKk4rV10sSj1uWzIqQitXXSxLPW5bMipVK1ddO25bMipWK1ddPVosblsyKkgrV109SixuWzIqcStXXT1LfXZhciBRPWRbTl0sJD1kW0JdLHR0PWRbVV07ZFtWXT1RLGRbSF09JCxkW3FdPXR0O3ZhciBldD1wW05dLHJ0PXBbQl0sbnQ9cFtVXTtwW1ZdPWV0LHBbSF09cnQscFtxXT1udCxvKGIsdCxyLG4sZCxwKSxvKHgsZSxyLG4sZCxwKTtmb3IodmFyIGl0PUE7aXQ8PUU7KytpdClpZih1KGl0LEwsQyxJLEQscixuLGQpKWl0IT09QSYmYShpdCxBLHIsbixkLHApLCsrQTtlbHNlIGlmKCF1KGl0LHosTyxSLEYscixuLGQpKWZvcig7Oyl7aWYodShFLHosTyxSLEYscixuLGQpKXt1KEUsTCxDLEksRCxyLG4sZCk/KHMoaXQsQSxFLHIsbixkLHApLCsrQSwtLUUpOihhKGl0LEUscixuLGQscCksLS1FKTticmVha31pZigtLUU8aXQpYnJlYWt9bCh0LEEtMSxMLEMsSSxELFAscixuLGQscCksbChlLEUrMSx6LE8sUixGLGoscixuLGQscCksQS0yLXQ8PWg/aSh0LEEtMixyLG4sZCxwKTpmKHQsQS0yLHIsbixkLHApLGUtKEUrMik8PWg/aShFKzIsZSxyLG4sZCxwKTpmKEUrMixlLHIsbixkLHApLEUtQTw9aD9pKEEsRSxyLG4sZCxwKTpmKEEsRSxyLG4sZCxwKX1lLmV4cG9ydHM9bjt2YXIgaD0zMn0se31dLDI0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXIsYz1yO2M8bjsrK2Mpe3ZhciB1PXRbMipjXSxmPXRbMipjKzFdLGg9ZVtjXTtpPD11JiZ1PD1vJiZhPD1mJiZmPD1zJiYoYz09PWw/bCs9MToodFsyKmNdPXRbMipsXSx0WzIqYysxXT10WzIqbCsxXSxlW2NdPWVbbF0sdFsyKmxdPXUsdFsyKmwrMV09ZixlW2xdPWgsbCs9MSkpfXJldHVybiBsfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMucGl4ZWxTaXplPXQsdGhpcy5vZmZzZXQ9ZSx0aGlzLmNvdW50PXJ9ZnVuY3Rpb24gYSh0LGUscixhKXtmdW5jdGlvbiBsKGksYSxvLHMsYyx1KXt2YXIgZj0uNSpvLGg9cysxLGQ9Yy1zO3JbeF09ZCxiW3grK109dTtmb3IodmFyIHA9MDtwPDI7KytwKWZvcih2YXIgbT0wO208MjsrK20pe3ZhciB2PWkrcCpmLGc9YSttKmYseT1uKHQsZSxoLGMsdixnLHYrZixnK2YpO2lmKHkhPT1oKXtpZih5LWg+PU1hdGgubWF4KC45KmQsMzIpKXt2YXIgXz1jK3M+Pj4xO2wodixnLGYsaCxfLHUrMSksaD1ffWwodixnLGYsaCx5LHUrMSksaD15fX19dmFyIGM9dC5sZW5ndGg+Pj4xO2lmKGM8MSlyZXR1cm5bXTtlfHwoZT1BcnJheShjKSkscnx8KHI9QXJyYXkoYykpLGF8fChhPVtdKTtmb3IodmFyIHU9MDt1PGM7Kyt1KWVbdV09dTtpZighYS5sZW5ndGh8fGEubGVuZ3RoPDR8fGFbMF0+PWFbMl18fGFbMV0+PWFbM10pe3ZhciBmPXModCwyKTtmWzBdPT09ZlsyXSYmKGZbMl0rPTEpLGZbMV09PT1mWzNdJiYoZlszXSs9MSksYVswXT1mWzBdLGFbMV09ZlsxXSxhWzJdPWZbMl0sYVszXT1mWzNdfXZhciBoPWFbMF0sZD1hWzFdLHA9YVsyXSxtPWFbM10sdj0xLyhwLWgpLGc9MS8obS1kKSx5PU1hdGgubWF4KHAtaCxtLWQpLGI9bmV3IEludDMyQXJyYXkoYykseD0wO2woaCxkLHksMCxjLDApLG8oYix0LGUscixjKTtmb3IodmFyIF89W10sdz0wLE09Yyx4PWMtMTt4Pj0wOy0teCl7dFsyKnhdPSh0WzIqeF0taCkqdix0WzIqeCsxXT0odFsyKngrMV0tZCkqZzt2YXIgVD1iW3hdO1QhPT13JiYoXy5wdXNoKG5ldyBpKHkqTWF0aC5wb3coLjUsVCkseCsxLE0tKHgrMSkpKSxNPXgrMSx3PVQpfXJldHVybiBfLnB1c2gobmV3IGkoeSpNYXRoLnBvdyguNSxUKzEpLDAsTSkpLF99dmFyIG89dCgiLi9saWIvc29ydCIpLHM9dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWF9LHsiLi9saWIvc29ydCI6MjQ3LCJhcnJheS1ib3VuZHMiOjQ1fV0sMjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLnNpemVCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5pZEJ1ZmZlcj1vLHRoaXMuY2hhckJ1ZmZlcj1zLHRoaXMucG9pbnRDb3VudD0wLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGwsdGhpcy5zY2FsZXM9W10sdGhpcy54Q29vcmRzPVtdLHRoaXMuY2hhckNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNoYXJUZXh0dXJlPW0odGhpcy5wbG90LmdsLHRoaXMuY2hhckNhbnZhcyksdGhpcy5jaGFyU3RlcD00MDAsdGhpcy5jaGFyRml0PS4yNTUsdGhpcy5zbmFwVGhyZXNob2xkPTFlNCx0aGlzLnBhbGV0dGVUZXh0dXJlPW0odGhpcy5wbG90LmdsLFsyNTYsMV0pfWZ1bmN0aW9uIGkoKXt2YXIgdD10aGlzLnBsb3QsZT10LnZpZXdCb3gscj10LmRhdGFCb3gsbj10LnBpeGVsUmF0aW8saT1yWzJdLXJbMF0sYT1yWzNdLXJbMV0sYz0yL2ksdT0yL2EsZj0tclswXS0uNSppLGg9LXJbMV0tLjUqYTtfWzBdPWMsd1swXT1jLV9bMF0sX1sxXT11LHdbMV09dS1fWzFdLE1bMF09ZixUWzBdPWYtTVswXSxNWzFdPWgsVFsxXT1oLU1bMV07dmFyIGQ9ZVsyXS1lWzBdLHA9ZVszXS1lWzFdO289TWF0aC5taW4oaS9kLGEvcCksa1swXT0yKm4vZCxrWzFdPTIqbi9wLHM9clswXSxsPXJbMl19ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuZ2wsaT1jKHIsaC52ZXJ0ZXgsaC5mcmFnbWVudCksYT1jKHIsaC5waWNrVmVydGV4LGgucGlja0ZyYWdtZW50KSxvPXUocikscz11KHIpLGw9dShyKSxmPXUociksZD11KHIpLHA9bmV3IG4odCxpLGEsbyxzLGwsZixkKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH1lLmV4cG9ydHM9YTt2YXIgbyxzLGwsYz10KCJnbC1zaGFkZXIiKSx1PXQoImdsLWJ1ZmZlciIpLGY9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCIuL2xpYi9zaGFkZXJzIiksZD10KCJzbmFwLXBvaW50cy0yZCIpLHA9dCgiZm9udC1hdGxhcy1zZGYiKSxtPXQoImdsLXRleHR1cmUyZCIpLHY9dCgiY29sb3ItaWQiKSxnPXQoIm5kYXJyYXkiKSx5PXQoImNsYW1wIiksYj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHg9bi5wcm90b3R5cGUsXz1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSx3PW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLE09bmV3IEZsb2F0MzJBcnJheShbMCwwXSksVD1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxrPVswLDBdLEE9WzAsMCwwLDBdO3guZHJhd1BpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPXRoaXMucGxvdCxuPXRoaXMucG9pbnRDb3VudCxhPW4+dGhpcy5zbmFwVGhyZXNob2xkO2lmKCFuKXJldHVybiB0O2kuY2FsbCh0aGlzKTt2YXIgYz1yLmdsLHU9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsZj1jLmlzRW5hYmxlZChjLkJMRU5EKTtpZih1LmJpbmQoKSxlKXt0aGlzLnBpY2tPZmZzZXQ9dDtmb3IodmFyIGg9MDtoPDQ7KytoKUFbaF09dD4+OCpoJjI1NTt1LnVuaWZvcm1zLnBpY2tPZmZzZXQ9QSx0aGlzLmlkQnVmZmVyLmJpbmQoKSx1LmF0dHJpYnV0ZXMuaWQucG9pbnRlcihjLlVOU0lHTkVEX0JZVEUsITEpfWVsc2UgYy5ibGVuZEZ1bmNTZXBhcmF0ZShjLlNSQ19BTFBIQSxjLk9ORV9NSU5VU19TUkNfQUxQSEEsYy5PTkUsYy5PTkVfTUlOVVNfU1JDX0FMUEhBKSxjLmJsZW5kQ29sb3IoMCwwLDAsMSksZnx8Yy5lbmFibGUoYy5CTEVORCksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksdS5hdHRyaWJ1dGVzLmNvbG9yLnBvaW50ZXIoYy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmNoYXJCdWZmZXIuYmluZCgpLHUuYXR0cmlidXRlcy5jaGFyLnBvaW50ZXIoYy5VTlNJR05FRF9CWVRFLCExKSx1LnVuaWZvcm1zLmNoYXJzPXRoaXMuY2hhclRleHR1cmUuYmluZCgwKSx1LnVuaWZvcm1zLmNoYXJzU2hhcGU9W3RoaXMuY2hhckNhbnZhcy53aWR0aCx0aGlzLmNoYXJDYW52YXMuaGVpZ2h0XSx1LnVuaWZvcm1zLmNoYXJzU3RlcD10aGlzLmNoYXJTdGVwLHUudW5pZm9ybXMucGFsZXR0ZT10aGlzLnBhbGV0dGVUZXh0dXJlLmJpbmQoMSk7dGhpcy5zaXplQnVmZmVyLmJpbmQoKSx1LmF0dHJpYnV0ZXMuc2l6ZS5wb2ludGVyKGMuRkxPQVQsITEsOCwwKSxlfHx1LmF0dHJpYnV0ZXMuYm9yZGVyLnBvaW50ZXIoYy5GTE9BVCwhMSw4LDQpLHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLHUuYXR0cmlidXRlcy5wb3NpdGlvbkhpLnBvaW50ZXIoYy5GTE9BVCwhMSwxNiwwKSx1LmF0dHJpYnV0ZXMucG9zaXRpb25Mby5wb2ludGVyKGMuRkxPQVQsITEsMTYsOCksdS51bmlmb3Jtcy5waXhlbFJhdGlvPXIucGl4ZWxSYXRpbyx1LnVuaWZvcm1zLnNjYWxlSGk9Xyx1LnVuaWZvcm1zLnNjYWxlTG89dyx1LnVuaWZvcm1zLnRyYW5zbGF0ZUhpPU0sdS51bmlmb3Jtcy50cmFuc2xhdGVMbz1ULHUudW5pZm9ybXMudmlld0JveD1yLnZpZXdCb3g7dmFyIGQ9dGhpcy5zY2FsZXM7aWYoYSlmb3IodmFyIHA9ZC5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIG09ZFtwXTtpZighKG0ucGl4ZWxTaXplJiZtLnBpeGVsU2l6ZTwxLjI1Km8mJnA+MSkpe3ZhciB2PW0ub2Zmc2V0LGc9bS5jb3VudCt2LHk9Yi5nZSh0aGlzLnhDb29yZHMscyx2LGctMSkseD1iLmx0KHRoaXMueENvb3JkcyxsLHksZy0xKSsxO3g+eSYmYy5kcmF3QXJyYXlzKGMuUE9JTlRTLHkseC15KX19ZWxzZSBjLmRyYXdBcnJheXMoYy5QT0lOVFMsMCxuKTtpZihlKXJldHVybiB0K247Zj9jLmJsZW5kRnVuYyhjLk9ORSxjLk9ORV9NSU5VU19TUkNfQUxQSEEpOmMuZGlzYWJsZShjLkJMRU5EKX0seC5kcmF3PXguZHJhd1BpY2sseC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXQucG9zaXRpb25zfHxbXSxyPXQuY29sb3JzfHxbXSxuPXQuZ2x5cGhzfHxbXSxpPXQuc2l6ZXN8fFtdLGE9dC5ib3JkZXJXaWR0aHN8fFtdLG89dC5ib3JkZXJDb2xvcnN8fFtdLHM9dGhpcy5wbG90LmdsLGw9dGhpcy5wb2ludENvdW50LGM9bD50aGlzLnNuYXBUaHJlc2hvbGQ7aWYobnVsbCE9dC5wb3NpdGlvbnMpe3RoaXMucG9pbnRzPWUsbD10aGlzLnBvaW50cy5sZW5ndGgvMixjPWw+dGhpcy5zbmFwVGhyZXNob2xkO3ZhciB1PWYubWFsbG9jRmxvYXQzMigyKmwpLGg9Zi5tYWxsb2NGbG9hdDY0KDIqbCksbT1mLm1hbGxvY1VpbnQzMihsKSxiPWYubWFsbG9jRmxvYXQzMig0KmwpO2guc2V0KHRoaXMucG9pbnRzKSxjJiYodGhpcy5pMmlkeCYmZi5mcmVlKHRoaXMuaTJpZHgpLHRoaXMuaTJpZHg9Zi5tYWxsb2NJbnQzMihsKSx0aGlzLnNjYWxlcz1kKGgsdGhpcy5pMmlkeCx1KSksdGhpcy5wb2ludENvdW50PWw7Zm9yKHZhciB4PTA7eDxsOysreCl7dmFyIF89Yz90aGlzLmkyaWR4W3hdOng7bVt4XT1fO3ZhciB3PWVbMipfXSxNPWVbMipfKzFdO2JbNCp4XT13LGJbNCp4KzFdPU0sYls0KngrMl09dy1iWzQqeF0sYls0KngrM109TS1iWzQqeCsxXSx0aGlzLnhDb29yZHNbeF09d310aGlzLmlkQnVmZmVyLnVwZGF0ZShtKSx0aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShiKSxmLmZyZWUoYiksZi5mcmVlKG0pLGYuZnJlZShoKSxmLmZyZWUodSl9Zm9yKHZhciBUPWYubWFsbG9jRmxvYXQzMigyKmwpLGs9Zi5tYWxsb2NVaW50OCgyKmwpLEE9Zi5tYWxsb2NVaW50OCgyKmwpLEU9e30sUz1bXSxMPVtdLEM9W10seD0wLEk9bCxEPTA7eDxJOysreCl7dmFyIFA9WzI1NSpyWzQqeF0sMjU1KnJbNCp4KzFdLDI1NSpyWzQqeCsyXSwyNTUqcls0KngrM11dLHo9dihQLCExKTtudWxsPT1FW3pdJiYoRVt6XT1EKyssTC5wdXNoKFBbMF0pLEwucHVzaChQWzFdKSxMLnB1c2goUFsyXSksTC5wdXNoKFBbM10pKSxTLnB1c2goeiksbyYmby5sZW5ndGgmJihQPVsyNTUqb1s0KnhdLDI1NSpvWzQqeCsxXSwyNTUqb1s0KngrMl0sMjU1Km9bNCp4KzNdXSx6PXYoUCwhMSksbnVsbD09RVt6XSYmKEVbel09RCsrLEwucHVzaChQWzBdKSxMLnB1c2goUFsxXSksTC5wdXNoKFBbMl0pLEwucHVzaChQWzNdKSksQy5wdXNoKHopKX1mb3IodmFyIE89e30seD0wLEk9bCxEPTA7eDxJO3grKyl7dmFyIFI9blt4XTtudWxsPT1PW1JdJiYoT1tSXT1EKyspfWZvcih2YXIgRj0wLHg9MCxJPWkubGVuZ3RoO3g8STsrK3gpaVt4XT5GJiYoRj1pW3hdKTt2YXIgaj10aGlzLmNoYXJTdGVwO3RoaXMuY2hhclN0ZXA9eShNYXRoLmNlaWwoNCpGKSwxMjgsNzY4KTt2YXIgTj1PYmplY3Qua2V5cyhPKSxCPXRoaXMuY2hhclN0ZXAsVT1NYXRoLmZsb29yKEIvMiksVj1zLmdldFBhcmFtZXRlcihzLk1BWF9URVhUVVJFX1NJWkUpLEg9Vi9CKihWL0IpLHE9TWF0aC5taW4oVixCKk4ubGVuZ3RoKSxHPU1hdGgubWluKFYsQipNYXRoLmNlaWwoQipOLmxlbmd0aC9WKSksWT1NYXRoLmZsb29yKHEvQik7Ti5sZW5ndGg+SCYmY29uc29sZS53YXJuKCJnbC1zY2F0dGVyMmQtZmFuY3k6IG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzIG1vcmUgdGhhbiBtYXhpbXVtIHRleHR1cmUgc2l6ZS4gVHJ5IHJlZHVjaW5nIGl0LiIpLHRoaXMuY2hhcnMmJnRoaXMuY2hhcnMrIiI9PU4rIiImJnRoaXMuY2hhclN0ZXA9PWp8fCh0aGlzLmNoYXJDYW52YXM9cCh7Y2FudmFzOnRoaXMuY2hhckNhbnZhcyxmYW1pbHk6InNhbnMtc2VyaWYiLHNpemU6VSxzaGFwZTpbcSxHXSxzdGVwOltCLEJdLGNoYXJzOk4sYWxpZ246ITAsZml0OnRoaXMuY2hhckZpdH0pLHRoaXMuY2hhcnM9Tik7Zm9yKHZhciB4PTA7eDxsOysreCl7dmFyIF89Yz90aGlzLmkyaWR4W3hdOngsWD1pW19dLFc9YVtfXTtUWzIqeF09MipYLFRbMip4KzFdPVc7dmFyIHo9U1tfXSxaPUVbel07a1syKnhdPVo7dmFyIEo9Q1tfXSxLPUVbSl07a1syKngrMV09Szt2YXIgUj1uW19dLFE9T1tSXTtBWzIqeCsxXT1NYXRoLmZsb29yKFEvWSksQVsyKnhdPVElWX10aGlzLnNpemVCdWZmZXIudXBkYXRlKFQpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKGspLHRoaXMuY2hhckJ1ZmZlci51cGRhdGUoQSksdGhpcy5jaGFyVGV4dHVyZS5zaGFwZT1bdGhpcy5jaGFyQ2FudmFzLndpZHRoLHRoaXMuY2hhckNhbnZhcy5oZWlnaHRdLHRoaXMuY2hhckNhbnZhcyYmdGhpcy5jaGFyQ2FudmFzLndpZHRoJiZ0aGlzLmNoYXJUZXh0dXJlLnNldFBpeGVscyh0aGlzLmNoYXJDYW52YXMpLHRoaXMucGFsZXR0ZVRleHR1cmUuc2V0UGl4ZWxzKGcoTC5zbGljZSgwLDEwMjQpLFsyNTYsMSw0XSkpLGYuZnJlZShUKSxmLmZyZWUoayksZi5mcmVlKEEpfSx4LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNpemVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY2hhckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjM3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjM4LGNsYW1wOjg4LCJjb2xvci1pZCI6OTEsImZvbnQtYXRsYXMtc2RmIjoxMzQsImdsLWJ1ZmZlciI6MTU2LCJnbC1zaGFkZXIiOjIzOSwiZ2wtdGV4dHVyZTJkIjoyNDYsbmRhcnJheTo0NzYsInNuYXAtcG9pbnRzLTJkIjoyNDgsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMjUwOltmdW5jdGlvbih0LGUscil7ci5wb2ludFZlcnRleD0icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZSwgdXNlV2VpZ2h0O1xuXG52YXJ5aW5nIGZsb2F0IGZyYWdXZWlnaHQ7XG5cblxudmVjNCBwZnhfMV8wKHZlYzIgc2NhbGVIaSwgdmVjMiBzY2FsZUxvLCB2ZWMyIHRyYW5zbGF0ZUhpLCB2ZWMyIHRyYW5zbGF0ZUxvLCB2ZWMyIHBvc2l0aW9uSGksIHZlYzIgcG9zaXRpb25Mbykge1xuICByZXR1cm4gdmVjNCgocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlSGlcbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkhpICsgdHJhbnNsYXRlSGkpICogc2NhbGVMb1xuICAgICAgICAgICAgKyAocG9zaXRpb25MbyArIHRyYW5zbGF0ZUxvKSAqIHNjYWxlTG8sIDAuMCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHBmeF8xXzAoc2NhbGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvLCBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvKTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmcmFnV2VpZ2h0ID0gbWl4KDEuMCwgd2VpZ2h0LCB1c2VXZWlnaHQpO1xufSIsci5wb2ludEZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xuXG52YXJ5aW5nIGZsb2F0IGZyYWdXZWlnaHQ7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wKmdsX1BvaW50Q29vcmQueHktMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICB2ZWM0IGJhc2VDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIHNtb290aFN0ZXAocmFkaXVzLCBjZW50ZXJGcmFjdGlvbikpO1xuICBmbG9hdCBhbHBoYSA9IDEuMCAtIHBvdygxLjAgLSBiYXNlQ29sb3IuYSwgZnJhZ1dlaWdodCk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZUNvbG9yLnJnYiAqIGFscGhhLCBhbHBoYSk7XG59XG4iLHIucGlja1ZlcnRleD0icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjNCBwZnhfMV8wKHZlYzIgc2NhbGVIaSwgdmVjMiBzY2FsZUxvLCB2ZWMyIHRyYW5zbGF0ZUhpLCB2ZWMyIHRyYW5zbGF0ZUxvLCB2ZWMyIHBvc2l0aW9uSGksIHZlYzIgcG9zaXRpb25Mbykge1xuICByZXR1cm4gdmVjNCgocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlSGlcbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkhpICsgdHJhbnNsYXRlSGkpICogc2NhbGVMb1xuICAgICAgICAgICAgKyAocG9zaXRpb25MbyArIHRyYW5zbGF0ZUxvKSAqIHNjYWxlTG8sIDAuMCwgMS4wKTtcbn1cblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbztcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfUG9zaXRpb24gPSBwZnhfMV8wKHNjYWxlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbywgcG9zaXRpb25IaSwgcG9zaXRpb25Mbyk7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZnJhZ0lkID0gaWQ7XG59IixyLnBpY2tGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn0ifSx7fV0sMjUxOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzg0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6ODR9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjQ3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjQ3fV0sMjUzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzI0OF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vbGliL3NvcnQiOjI1MiwiYXJyYXktYm91bmRzIjo0NSxkdXA6MjQ4fV0sMjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5wbG90PXQsdGhpcy5wb3NpdGlvbkJ1ZmZlckhpPWUsdGhpcy5wb3NpdGlvbkJ1ZmZlckxvPXIsdGhpcy5waWNrQnVmZmVyPW4sdGhpcy53ZWlnaHRCdWZmZXI9aSx0aGlzLnNoYWRlcj1hLHRoaXMucGlja1NoYWRlcj1vLHRoaXMuc2NhbGVzPVtdLHRoaXMuc2l6ZT0xMix0aGlzLmJvcmRlclNpemU9MSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbG9yPVsxLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsLHRoaXMueENvb3Jkcz1udWxsLHRoaXMuc25hcFBvaW50cz0hMH1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5nbCxpPW8ocikscz1vKHIpLGw9byhyKSxjPW8ociksZj1hKHIsdS5wb2ludFZlcnRleCx1LnBvaW50RnJhZ21lbnQpLGg9YShyLHUucGlja1ZlcnRleCx1LnBpY2tGcmFnbWVudCksZD1uZXcgbih0LGkscyxsLGMsZixoKTtyZXR1cm4gZC51cGRhdGUoZSksdC5hZGRPYmplY3QoZCksZH12YXIgYT10KCJnbC1zaGFkZXIiKSxvPXQoImdsLWJ1ZmZlciIpLHM9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxsPXQoInNuYXAtcG9pbnRzLTJkIiksYz10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PXQoIi4vbGliL3NoYWRlciIpLGY9dCgiYXJyYXktbm9ybWFsaXplIiksaD10KCJhcnJheS1ib3VuZHMiKTtlLmV4cG9ydHM9aTt2YXIgZD1uLnByb3RvdHlwZSxwPW5ldyBGbG9hdDMyQXJyYXkoMiksbT1uZXcgRmxvYXQzMkFycmF5KDIpLHY9bmV3IEZsb2F0MzJBcnJheSgyKSxnPW5ldyBGbG9hdDMyQXJyYXkoMikseT1bMCwwLDAsMF07ZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlckhpLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyTG8uZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy54Q29vcmRzJiZjLmZyZWUodGhpcy54Q29vcmRzKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSxkLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9aWYodD10fHx7fSx0aGlzLnNpemU9ZSgic2l6ZSIsMTIpLHRoaXMuY29sb3I9ZSgiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlclNpemU9ZSgiYm9yZGVyU2l6ZSIsMSksdGhpcy5ib3JkZXJDb2xvcj1lKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuc25hcFBvaW50cz1lKCJzbmFwUG9pbnRzIiwhMCksbnVsbCE9dC5wb3NpdGlvbnMpe3RoaXMueENvb3JkcyYmYy5mcmVlKHRoaXMueENvb3JkcyksdGhpcy5wb2ludHM9dC5wb3NpdGlvbnM7dmFyIHI9dGhpcy5wb2ludHMubGVuZ3RoPj4+MSxuPWMubWFsbG9jSW50MzIociksaT1jLm1hbGxvY0Zsb2F0MzIociksYT1jLm1hbGxvY0Zsb2F0NjQoMipyKTtpZihhLnNldCh0aGlzLnBvaW50cyksdGhpcy5zbmFwUG9pbnRzKXRoaXMuc2NhbGVzPWwoYSxuLGksdGhpcy5ib3VuZHMpO2Vsc2V7dGhpcy5ib3VuZHM9aChhLDIpLGYoYSwyLHRoaXMuYm91bmRzKTtmb3IodmFyIG89MDtvPHI7bysrKW5bb109byxpW29dPTF9dmFyIHM9Yy5tYWxsb2NGbG9hdDY0KHIpLHU9Yy5tYWxsb2NGbG9hdDMyKDIqciksZD1jLm1hbGxvY0Zsb2F0MzIoMipyKTt1LnNldChhKTtmb3IodmFyIG89MCxwPTA7bzxyO28rKyxwKz0yKWRbcF09YVtwXS11W3BdLGRbcCsxXT1hW3ArMV0tdVtwKzFdLHNbb109YVtwXTt0aGlzLnBvc2l0aW9uQnVmZmVySGkudXBkYXRlKHUpLHRoaXMucG9zaXRpb25CdWZmZXJMby51cGRhdGUoZCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShuKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoaSksYy5mcmVlKHUpLGMuZnJlZShkKSxjLmZyZWUoaSksYy5mcmVlKGEpLGMuZnJlZShuKSx0aGlzLnhDb29yZHM9cyx0aGlzLnBvaW50Q291bnQ9cix0aGlzLnBpY2tPZmZzZXQ9MH19LGQuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9dGhpcy5wbG90LG49ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsaT10aGlzLnNjYWxlcyxhPXRoaXMucG9zaXRpb25CdWZmZXJIaSxvPXRoaXMucG9zaXRpb25CdWZmZXJMbyxzPXRoaXMucGlja0J1ZmZlcixsPXRoaXMuYm91bmRzLGM9dGhpcy5zaXplLHU9dGhpcy5ib3JkZXJTaXplLGY9ci5nbCxoPWU/ci5waWNrUGl4ZWxSYXRpbzpyLnBpeGVsUmF0aW8sZD1yLnZpZXdCb3gsYj1yLmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgeD1sWzJdLWxbMF0sXz1sWzNdLWxbMV0sdz1iWzJdLWJbMF0sTT1iWzNdLWJbMV0sVD0oZFsyXS1kWzBdKSpoL3IucGl4ZWxSYXRpbyxrPShkWzNdLWRbMV0pKmgvci5waXhlbFJhdGlvLEE9dGhpcy5waXhlbFNpemU9TWF0aC5taW4ody9ULE0vayksRT0yKngvdyxTPTIqXy9NO3BbMF09RSxwWzFdPVMsbVswXT1FLXBbMF0sbVsxXT1TLXBbMV07dmFyIEw9KGxbMF0tYlswXS0uNSp3KS94LEM9KGxbMV0tYlsxXS0uNSpNKS9fO3ZbMF09TCx2WzFdPUMsZ1swXT1MLXZbMF0sZ1sxXT1DLXZbMV0sbi5iaW5kKCksbi51bmlmb3Jtcy5zY2FsZUhpPXAsbi51bmlmb3Jtcy5zY2FsZUxvPW0sbi51bmlmb3Jtcy50cmFuc2xhdGVIaT12LG4udW5pZm9ybXMudHJhbnNsYXRlTG89ZyxuLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isbi51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLG4udW5pZm9ybXMucG9pbnRTaXplPWgqKGMrdSksbi51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj0wPT09dGhpcy5ib3JkZXJTaXplPzI6Yy8oYyt1KzEuMjUpLGEuYmluZCgpLG4uYXR0cmlidXRlcy5wb3NpdGlvbkhpLnBvaW50ZXIoKSxvLmJpbmQoKSxuLmF0dHJpYnV0ZXMucG9zaXRpb25Mby5wb2ludGVyKCksZT8odGhpcy5waWNrT2Zmc2V0PXQseVswXT0yNTUmdCx5WzFdPXQ+PjgmMjU1LHlbMl09dD4+MTYmMjU1LHlbM109dD4+MjQmMjU1LG4udW5pZm9ybXMucGlja09mZnNldD15LHMuYmluZCgpLG4uYXR0cmlidXRlcy5waWNrSWQucG9pbnRlcihmLlVOU0lHTkVEX0JZVEUpKToobi51bmlmb3Jtcy51c2VXZWlnaHQ9MSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksbi5hdHRyaWJ1dGVzLndlaWdodC5wb2ludGVyKCkpO3ZhciBJPSEwO2lmKHRoaXMuc25hcFBvaW50cylmb3IodmFyIEQ9aS5sZW5ndGgtMTtEPj0wO0QtLSl7dmFyIFA9aVtEXTtpZighKFAucGl4ZWxTaXplPEEmJkQ+MSkpe3ZhciB6PXRoaXMuZ2V0VmlzaWJsZVJhbmdlKFApLE89elswXSxSPXpbMV07Uj5PJiZmLmRyYXdBcnJheXMoZi5QT0lOVFMsTyxSLU8pLCFlJiZJJiYoST0hMSxuLnVuaWZvcm1zLnVzZVdlaWdodD0wKX19ZWxzZSBmLmRyYXdBcnJheXMoZi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpO3JldHVybiB0K3RoaXMucG9pbnRDb3VudH0sZC5nZXRWaXNpYmxlUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LmRhdGFCb3gscj10aGlzLmJvdW5kcyxuPXRoaXMucGl4ZWxTaXplLGk9dGhpcy5zaXplLGE9dGhpcy5wbG90LnBpeGVsUmF0aW8sbz1yWzJdLXJbMF07clszXSxyWzFdO2lmKCF0KWZvcih2YXIgdCxsPXRoaXMuc2NhbGVzLmxlbmd0aC0xO2w+PTAmJih0PXRoaXMuc2NhbGVzW2xdLHQucGl4ZWxTaXplPG4mJmw+MSk7bC0tKTt2YXIgYz10aGlzLnhDb29yZHMsdT0oZVswXS1yWzBdLW4qaSphKS9vLGY9KGVbMl0tclswXStuKmkqYSkvbyxoPXQub2Zmc2V0LGQ9dC5jb3VudCtoLHA9cy5nZShjLHUsaCxkLTEpO3JldHVybltwLHMubHQoYyxmLHAsZC0xKSsxXX0sZC5kcmF3UGljaz1kLmRyYXcsZC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLXRoaXMucGlja09mZnNldDtyZXR1cm4gbjwwfHxuPj10aGlzLnBvaW50Q291bnQ/bnVsbDp7b2JqZWN0OnRoaXMscG9pbnRJZDpuLGRhdGFDb29yZDpbdGhpcy5wb2ludHNbMipuXSx0aGlzLnBvaW50c1syKm4rMV1dfX19LHsiLi9saWIvc2hhZGVyIjoyNTAsImFycmF5LWJvdW5kcyI6NDUsImFycmF5LW5vcm1hbGl6ZSI6NDYsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNTEsImdsLWJ1ZmZlciI6MTU2LCJnbC1zaGFkZXIiOjI2MSwic25hcC1wb2ludHMtMmQiOjI1MywidHlwZWRhcnJheS1wb29sIjo1NDl9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWFbZV07aWYocnx8KHI9YVtlXT17fSksdCBpbiByKXJldHVybiByW3RdO2Zvcih2YXIgbj1pKHQse3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZX0pLG89aSh0LHt0cmlhbmdsZXM6ITAsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lSGVpZ2h0OjEsZm9udDplfSkscz1bWzEvMCwxLzBdLFstKDEvMCksLSgxLzApXV0sbD0wO2w8bi5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IodmFyIGM9bi5wb3NpdGlvbnNbbF0sdT0wO3U8MjsrK3Upc1swXVt1XT1NYXRoLm1pbihzWzBdW3VdLGNbdV0pLHNbMV1bdV09TWF0aC5tYXgoc1sxXVt1XSxjW3VdKTtyZXR1cm4gclt0XT1bbyxuLHNdfXZhciBpPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPW47dmFyIGE9e319LHsidmVjdG9yaXplLXRleHQiOjU2MX1dLDI1NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pKHQsZSksbj1yLmF0dHJpYnV0ZXM7cmV0dXJuIG4ucG9zaXRpb24ubG9jYXRpb249MCxuLmNvbG9yLmxvY2F0aW9uPTEsbi5nbHlwaC5sb2NhdGlvbj0yLG4uaWQubG9jYXRpb249MyxyfXZhciBpPXQoImdsLXNoYWRlciIpLGE9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpICAgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2aWV3UG9zaXRpb24gPSB2aWV3UG9zaXRpb24gLyB2aWV3UG9zaXRpb24udztcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQuYmdyLCBpZC5iZ3IpIDwgMC4wMDEpIHtcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixzPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgbHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgY2xpcENlbnRlciAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xuICB9XG59XG4iLGw9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBkaXNjYXJkO1xuICB9IGVsc2Uge1xuICAgIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbiAgfVxufVxuIixjPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG4gIH1cbn0iLHU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxmPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0saD17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGQ9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6YSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sbT17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LHY9e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtyLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZil9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxoKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQscCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsbSl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCx2KX19LHsiZ2wtc2hhZGVyIjoyNjF9XSwyNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbihpLGksciksbihpLGksZSksbihpLGksdCl9ZnVuY3Rpb24gYSh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxvLHMsbCxjLHUsZixoKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9byx0aGlzLmdseXBoQnVmZmVyPXMsdGhpcy5pZEJ1ZmZlcj1sLHRoaXMudmFvPWMsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPXUsdGhpcy5waWNrT3J0aG9TaGFkZXI9Zix0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWgsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBhKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLSgxLzApLC0oMS8wKSwtKDEvMCldXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLSgxLzApLC0oMS8wKSwtKDEvMCldLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stKDEvMCksLSgxLzApLC0oMS8wKV0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBzKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1MLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9ZnVuY3Rpb24gZih0LGUscixuLGEpe3ZhciBvLGY9ZS5heGVzUHJvamVjdCxoPWUuZ2wsZD10LnVuaWZvcm1zLHA9ci5tb2RlbHx8eCxtPXIudmlld3x8eCx2PXIucHJvamVjdGlvbnx8eCx5PWUuYXhlc0JvdW5kcyxiPXUoZS5jbGlwQm91bmRzKTtvPWUuYXhlcz9lLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzOlsxLDEsMV0sd1swXT0yL2guZHJhd2luZ0J1ZmZlcldpZHRoLHdbMV09Mi9oLmRyYXdpbmdCdWZmZXJIZWlnaHQsdC5iaW5kKCksZC52aWV3PW0sZC5wcm9qZWN0aW9uPXYsZC5zY3JlZW5TaXplPXcsZC5oaWdobGlnaHRJZD1lLmhpZ2hsaWdodElkLGQuaGlnaGxpZ2h0U2NhbGU9ZS5oaWdobGlnaHRTY2FsZSxkLmNsaXBCb3VuZHM9YixkLnBpY2tHcm91cD1lLnBpY2tJZC8yNTUsZC5waXhlbFJhdGlvPWUucGl4ZWxSYXRpbztmb3IodmFyIF89MDtfPDM7KytfKWlmKGZbX10mJmUucHJvamVjdE9wYWNpdHlbX108MT09PW4pe2Quc2NhbGU9ZS5wcm9qZWN0U2NhbGVbX10sZC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbX107Zm9yKHZhciBMPUUsQz0wO0M8MTY7KytDKUxbQ109MDtmb3IodmFyIEM9MDtDPDQ7KytDKUxbNSpDXT0xO0xbNSpfXT0wLG9bX108MD9MWzEyK19dPXlbMF1bX106TFsxMitfXT15WzFdW19dLGcoTCxwLEwpLGQubW9kZWw9TDt2YXIgST0oXysxKSUzLEQ9KF8rMiklMyxQPXMoTSksej1zKFQpO1BbSV09MSx6W0RdPTE7dmFyIE89aSh2LG0scCxsKGssUCkpLFI9aSh2LG0scCxsKEEseikpO2lmKE1hdGguYWJzKE9bMV0pPk1hdGguYWJzKFJbMV0pKXt2YXIgRj1PO089UixSPUYsRj1QLFA9eix6PUY7dmFyIGo9STtJPUQsRD1qfU9bMF08MCYmKFBbSV09LTEpLFJbMV0+MCYmKHpbRF09LTEpO2Zvcih2YXIgTj0wLEI9MCxDPTA7Qzw0OysrQylOKz1NYXRoLnBvdyhwWzQqSStDXSwyKSxCKz1NYXRoLnBvdyhwWzQqRCtDXSwyKTtQW0ldLz1NYXRoLnNxcnQoTikseltEXS89TWF0aC5zcXJ0KEIpLGQuYXhlc1swXT1QLGQuYXhlc1sxXT16LGQuZnJhZ0NsaXBCb3VuZHNbMF09YyhTLGJbMF0sXywtMWU4KSxkLmZyYWdDbGlwQm91bmRzWzFdPWMoUyxiWzFdLF8sMWU4KSxlLnZhby5kcmF3KGguVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihoLmxpbmVXaWR0aChlLmxpbmVXaWR0aCksZS52YW8uZHJhdyhoLkxJTkVTLGUubGluZVZlcnRleENvdW50LGUudmVydGV4Q291bnQpKX19ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG89ci5nbDtpZihyLnZhby5iaW5kKCksaT09PXIub3BhY2l0eTwxfHxhKXt0LmJpbmQoKTt2YXIgcz10LnVuaWZvcm1zO3MubW9kZWw9bi5tb2RlbHx8eCxzLnZpZXc9bi52aWV3fHx4LHMucHJvamVjdGlvbj1uLnByb2plY3Rpb258fHgsd1swXT0yL28uZHJhd2luZ0J1ZmZlcldpZHRoLHdbMV09Mi9vLmRyYXdpbmdCdWZmZXJIZWlnaHQscy5zY3JlZW5TaXplPXcscy5oaWdobGlnaHRJZD1yLmhpZ2hsaWdodElkLHMuaGlnaGxpZ2h0U2NhbGU9ci5oaWdobGlnaHRTY2FsZSxzLmZyYWdDbGlwQm91bmRzPUQscy5jbGlwQm91bmRzPXIuYXhlcy5ib3VuZHMscy5vcGFjaXR5PXIub3BhY2l0eSxzLnBpY2tHcm91cD1yLnBpY2tJZC8yNTUscy5waXhlbFJhdGlvPXIucGl4ZWxSYXRpbyxyLnZhby5kcmF3KG8uVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChyLmxpbmVXaWR0aCksci52YW8uZHJhdyhvLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKX1mKGUscixuLGksYSksci52YW8udW5iaW5kKCl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmdsLHI9eS5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPXkuY3JlYXRlT3J0aG8oZSksaT15LmNyZWF0ZVByb2plY3QoZSksYT15LmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxzPXkuY3JlYXRlUGlja09ydGhvKGUpLGw9eS5jcmVhdGVQaWNrUHJvamVjdChlKSxjPXAoZSksdT1wKGUpLGY9cChlKSxoPXAoZSksZD1tKGUsW3tidWZmZXI6YyxzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOnUsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpmLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6aCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSx2PW5ldyBvKGUscixuLGksYyx1LGYsaCxkLGEscyxsKTtyZXR1cm4gdi51cGRhdGUodCksdn12YXIgcD10KCJnbC1idWZmZXIiKSxtPXQoImdsLXZhbyIpLHY9dCgidHlwZWRhcnJheS1wb29sIiksZz10KCJnbC1tYXQ0L211bHRpcGx5IikseT10KCIuL2xpYi9zaGFkZXJzIiksYj10KCIuL2xpYi9nbHlwaHMiKSx4PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtlLmV4cG9ydHM9ZDt2YXIgXz1vLnByb3RvdHlwZTtfLnBpY2tTbG90cz0xLF8uc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sXy5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5PDEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RPcGFjaXR5W3RdPDEpcmV0dXJuITA7cmV0dXJuITF9LF8uaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wYWNpdHk+PTEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RPcGFjaXR5W3RdPj0xKXJldHVybiEwO3JldHVybiExfTt2YXIgdz1bMCwwXSxNPVswLDAsMF0sVD1bMCwwLDBdLGs9WzAsMCwwLDFdLEE9WzAsMCwwLDFdLEU9eC5zbGljZSgpLFM9WzAsMCwwXSxMPVtbMCwwLDBdLFswLDAsMF1dLEM9Wy0xZTgsLTFlOCwtMWU4XSxJPVsxZTgsMWU4LDFlOF0sRD1bQyxJXTtfLmRyYXc9ZnVuY3Rpb24odCl7aCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCwhMSwhMSl9LF8uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe2godGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsITAsITEpfSxfLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe2godGhpcy51c2VPcnRobz90aGlzLnBpY2tPcnRob1NoYWRlcjp0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlcix0aGlzLnBpY2tQcm9qZWN0U2hhZGVyLHRoaXMsdCwhMSwhMCl9LF8ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sXy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sXy51cGRhdGU9ZnVuY3Rpb24odCl7aWYodD10fHx7fSwicGVyc3BlY3RpdmUiaW4gdCYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYoInByb2plY3RPcGFjaXR5ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX0ib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksdGhpcy5kaXJ0eT0hMDt2YXIgbj10LnBvc2l0aW9uO2lmKG4pe3ZhciBpPXQuZm9udHx8Im5vcm1hbCIsYT10LmFsaWdubWVudHx8WzAsMF0sbz1bMS8wLDEvMCwxLzBdLHM9Wy0oMS8wKSwtKDEvMCksLSgxLzApXSxsPXQuZ2x5cGgsYz10LmNvbG9yLHU9dC5zaXplLGY9dC5hbmdsZSxoPXQubGluZUNvbG9yLGQ9MCxwPTAsbT0wLGc9bi5sZW5ndGg7dDpmb3IodmFyIHk9MDt5PGc7Kyt5KXtmb3IodmFyIHg9blt5XSxfPTA7XzwzOysrXylpZihpc05hTih4W19dKXx8IWlzRmluaXRlKHhbX10pKWNvbnRpbnVlIHQ7dmFyIHc7dz1BcnJheS5pc0FycmF5KGwpP2IobFt5XSxpKTpsP2IobCxpKTpiKCJcdTI1Y2YiLGkpO3ZhciBNPXdbMF0sVD13WzFdLGs9d1syXTtwKz0zKk0uY2VsbHMubGVuZ3RoLG0rPTIqVC5lZGdlcy5sZW5ndGh9dmFyIEE9cCttLEU9di5tYWxsb2NGbG9hdCgzKkEpLFM9di5tYWxsb2NGbG9hdCg0KkEpLEw9di5tYWxsb2NGbG9hdCgyKkEpLEM9di5tYWxsb2NVaW50MzIoQSksST1bMCxhWzFdXSxEPTAsUD1wLHo9WzAsMCwwLDFdLE89WzAsMCwwLDFdLFI9QXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShjWzBdKSxGPUFycmF5LmlzQXJyYXkoaCkmJkFycmF5LmlzQXJyYXkoaFswXSk7dDpmb3IodmFyIHk9MDt5PGc7Kyt5KXtmb3IodmFyIHg9blt5XSxfPTA7XzwzOysrXyl7aWYoaXNOYU4oeFtfXSl8fCFpc0Zpbml0ZSh4W19dKSl7ZCs9MTtjb250aW51ZSB0fXNbX109TWF0aC5tYXgoc1tfXSx4W19dKSxvW19dPU1hdGgubWluKG9bX10seFtfXSl9dmFyIHc7dz1BcnJheS5pc0FycmF5KGwpP2IobFt5XSxpKTpsP2IobCxpKTpiKCJcdTI1Y2YiLGkpO3ZhciBNPXdbMF0sVD13WzFdLGs9d1syXTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgajtpZihqPVI/Y1t5XTpjLDM9PT1qLmxlbmd0aCl7Zm9yKHZhciBfPTA7XzwzOysrXyl6W19dPWpbX107elszXT0xfWVsc2UgaWYoND09PWoubGVuZ3RoKWZvcih2YXIgXz0wO188NDsrK18peltfXT1qW19dfWVsc2UgelswXT16WzFdPXpbMl09MCx6WzNdPTE7aWYoQXJyYXkuaXNBcnJheShoKSl7dmFyIGo7aWYoaj1GP2hbeV06aCwzPT09ai5sZW5ndGgpe2Zvcih2YXIgXz0wO188MzsrK18pT1tfXT1qW19dO09bX109MQp9ZWxzZSBpZig0PT09ai5sZW5ndGgpZm9yKHZhciBfPTA7Xzw0OysrXylPW19dPWpbX119ZWxzZSBPWzBdPU9bMV09T1syXT0wLE9bM109MTt2YXIgTj0uNTtBcnJheS5pc0FycmF5KHUpP049K3VbeV06dT9OPSt1OnRoaXMudXNlT3J0aG8mJihOPTEyKTt2YXIgQj0wO0FycmF5LmlzQXJyYXkoZik/Qj0rZlt5XTpmJiYoQj0rZik7Zm9yKHZhciBVPU1hdGguY29zKEIpLFY9TWF0aC5zaW4oQikseD1uW3ldLF89MDtfPDM7KytfKXNbX109TWF0aC5tYXgoc1tfXSx4W19dKSxvW19dPU1hdGgubWluKG9bX10seFtfXSk7YVswXTwwP0lbMF09YVswXSooMStrWzFdWzBdKTphWzBdPjAmJihJWzBdPS1hWzBdKigxK2tbMF1bMF0pKTtmb3IodmFyIEg9TS5jZWxscyxxPU0ucG9zaXRpb25zLF89MDtfPEgubGVuZ3RoOysrXylmb3IodmFyIEc9SFtfXSxZPTA7WTwzOysrWSl7Zm9yKHZhciBYPTA7WDwzOysrWClFWzMqRCtYXT14W1hdO2Zvcih2YXIgWD0wO1g8NDsrK1gpU1s0KkQrWF09eltYXTtDW0RdPWQ7dmFyIFc9cVtHW1ldXTtMWzIqRF09TiooVSpXWzBdLVYqV1sxXStJWzBdKSxMWzIqRCsxXT1OKihWKldbMF0rVSpXWzFdK0lbMV0pLEQrPTF9Zm9yKHZhciBIPVQuZWRnZXMscT1ULnBvc2l0aW9ucyxfPTA7XzxILmxlbmd0aDsrK18pZm9yKHZhciBHPUhbX10sWT0wO1k8MjsrK1kpe2Zvcih2YXIgWD0wO1g8MzsrK1gpRVszKlArWF09eFtYXTtmb3IodmFyIFg9MDtYPDQ7KytYKVNbNCpQK1hdPU9bWF07Q1tQXT1kO3ZhciBXPXFbR1tZXV07TFsyKlBdPU4qKFUqV1swXS1WKldbMV0rSVswXSksTFsyKlArMV09TiooVipXWzBdK1UqV1sxXStJWzFdKSxQKz0xfWQrPTF9dGhpcy52ZXJ0ZXhDb3VudD1wLHRoaXMubGluZVZlcnRleENvdW50PW0sdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoRSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoUyksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUobmV3IFVpbnQzMkFycmF5KEMpKSx2LmZyZWUoRSksdi5mcmVlKFMpLHYuZnJlZShMKSx2LmZyZWUoQyksdGhpcy5ib3VuZHM9W28sc10sdGhpcy5wb2ludHM9bix0aGlzLnBvaW50Q291bnQ9bi5sZW5ndGh9fSxfLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7Ii4vbGliL2dseXBocyI6MjU1LCIuL2xpYi9zaGFkZXJzIjoyNTYsImdsLWJ1ZmZlciI6MTU2LCJnbC1tYXQ0L211bHRpcGx5IjoxODcsImdsLXZhbyI6Mjc3LCJ0eXBlZGFycmF5LXBvb2wiOjU0OX1dLDI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJveFZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iLHIuYm94RnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIn0se31dLDI1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuaW5uZXJGaWxsPSExLHRoaXMuaW5uZXJDb2xvcj1bMCwwLDAsLjI1XSx0aGlzLm91dGVyRmlsbD0hMCx0aGlzLm91dGVyQ29sb3I9WzAsMCwwLC41XSx0aGlzLmJvcmRlcldpZHRoPTEwfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10LmdsLGk9byhyLFswLDAsMCwxLDEsMCwxLDFdKSxsPWEocixzLmJveFZlcnRleCxzLmJveEZyYWdtZW50KSxjPW5ldyBuKHQsaSxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9dmFyIGE9dCgiZ2wtc2hhZGVyIiksbz10KCJnbC1idWZmZXIiKSxzPXQoIi4vbGliL3NoYWRlcnMiKTtlLmV4cG9ydHM9aTt2YXIgbD1uLnByb3RvdHlwZTtsLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxmPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0saD0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLGQ9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxwPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoZj1NYXRoLm1heChmLGNbMF0pLGg9TWF0aC5tYXgoaCxjWzFdKSxkPU1hdGgubWluKGQsY1syXSkscD1NYXRoLm1pbihwLGNbM10pLCEoZDxmfHxwPGgpKXtvLmJpbmQoKTt2YXIgbT1zWzJdLXNbMF0sdj1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLG0saCxpKSxvLmRyYXdCb3goMCxoLGYscCxpKSxvLmRyYXdCb3goMCxwLG0sdixpKSxvLmRyYXdCb3goZCxoLG0scCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChmLGgsZCxwLG4pLHI+MCl7dmFyIGc9cip1O28uZHJhd0JveChmLWcsaC1nLGQrZyxoK2csYSksby5kcmF3Qm94KGYtZyxwLWcsZCtnLHArZyxhKSxvLmRyYXdCb3goZi1nLGgtZyxmK2cscCtnLGEpLG8uZHJhd0JveChkLWcsaC1nLGQrZyxwK2csYSl9fX19LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjU4LCJnbC1idWZmZXIiOjE1NiwiZ2wtc2hhZGVyIjoyNjF9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBpKHQsbyh0LGUpLHMubWFsbG9jVWludDgoZVswXSplWzFdKjQpKX1lLmV4cG9ydHM9YTt2YXIgbz10KCJnbC1mYm8iKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgibmRhcnJheSIpLGM9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93Mix1PXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV81NV9hcmcwXzwyNTV8fF9pbmxpbmVfNTVfYXJnMV88MjU1fHxfaW5saW5lXzU1X2FyZzJfPDI1NXx8X2lubGluZV81NV9hcmczXzwyNTUpe3ZhciBfaW5saW5lXzU1X2w9X2lubGluZV81NV9hcmc0Xy1faW5saW5lXzU1X2FyZzZfWzBdLF9pbmxpbmVfNTVfYT1faW5saW5lXzU1X2FyZzVfLV9pbmxpbmVfNTVfYXJnNl9bMV0sX2lubGluZV81NV9mPV9pbmxpbmVfNTVfbCpfaW5saW5lXzU1X2wrX2lubGluZV81NV9hKl9pbmxpbmVfNTVfYTtfaW5saW5lXzU1X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzU1X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzU1X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV81NV9hcmc2X1sxXSl9fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfNTVfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnNV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNTVfYXJnNl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbIl9pbmxpbmVfNTVfYSIsIl9pbmxpbmVfNTVfZiIsIl9pbmxpbmVfNTVfbCJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19jbG9zZXN0RDIiLCJ0aGlzX2Nsb3Nlc3RYIiwidGhpc19jbG9zZXN0WSJdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KSxmPWkucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtzLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1zLm1hbGxvY1VpbnQ4KGMociplKjQpKSxpPTA7aTxyKmUqNDsrK2kpbltpXT0yNTV9cmV0dXJuIHR9fX0pLGYuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LGYuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LGYucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBpPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLCJudW1iZXIiIT10eXBlb2YgciYmKHI9MSk7dmFyIGE9MHxNYXRoLm1pbihNYXRoLm1heCh0LXIsMCksaVswXSksbz0wfE1hdGgubWluKE1hdGgubWF4KHQrciwwKSxpWzBdKSxzPTB8TWF0aC5taW4oTWF0aC5tYXgoZS1yLDApLGlbMV0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlK3IsMCksaVsxXSk7aWYobzw9YXx8Yzw9cylyZXR1cm4gbnVsbDt2YXIgZj1bby1hLGMtc10saD1sKHRoaXMuYnVmZmVyLFtmWzBdLGZbMV0sNF0sWzQsNCppWzBdLDFdLDQqKGEraVswXSpzKSksZD11KGguaGkoZlswXSxmWzFdLDEpLHIscikscD1kWzBdLG09ZFsxXTtyZXR1cm4gcDwwfHxNYXRoLnBvdyh0aGlzLnJhZGl1cywyKTxkWzJdP251bGw6bmV3IG4ocCthfDAsbStzfDAsaC5nZXQocCxtLDApLFtoLmdldChwLG0sMSksaC5nZXQocCxtLDIpLGguZ2V0KHAsbSwzKV0sTWF0aC5zcXJ0KGRbMl0pKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbCYmKHRoaXMuZmJvLmRpc3Bvc2UoKSxzLmZyZWUodGhpcy5idWZmZXIpLHRoaXMuZ2w9bnVsbCx0aGlzLl9yZWFkVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSl9fSx7ImJpdC10d2lkZGxlIjo2OCwiY3dpc2UvbGliL3dyYXBwZXIiOjExMiwiZ2wtZmJvIjoxNjgsbmRhcnJheTo0NzYsInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sMjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5nbD10LHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGEodCxlLHIsaSxhKXt2YXIgbz1uZXcgbih0KTtyZXR1cm4gby51cGRhdGUoZSxyLGksYSksb312YXIgbz10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxzPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksbD10KCIuL2xpYi9yZWZsZWN0IiksYz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSx1PXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGY9dCgiLi9saWIvR0xFcnJvciIpLGg9bi5wcm90b3R5cGU7aC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSxoLnVwZGF0ZT1mdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKCl7ZC5wcm9ncmFtPWMucHJvZ3JhbShwLGQuX3ZyZWYsZC5fZnJlZix4LF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZC5wcm9ncmFtLHJbdF0ubmFtZSl9aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgaD10O3Q9aC52ZXJ0ZXgsZT1oLmZyYWdtZW50LHI9aC51bmlmb3JtcyxuPWguYXR0cmlidXRlc312YXIgZD10aGlzLHA9ZC5nbCxtPWQuX3ZyZWY7ZC5fdnJlZj1jLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxtJiZtLmRpc3Bvc2UoKSxkLnZlcnRTaGFkZXI9ZC5fdnJlZi5zaGFkZXI7dmFyIHY9dGhpcy5fZnJlZjtpZihkLl9mcmVmPWMuc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksdiYmdi5kaXNwb3NlKCksZC5mcmFnU2hhZGVyPWQuX2ZyZWYuc2hhZGVyLCFyfHwhbil7dmFyIGc9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIoZyxkLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKGcsZC52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKGcpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIoZyxwLkxJTktfU1RBVFVTKSl7dmFyIHk9cC5nZXRQcm9ncmFtSW5mb0xvZyhnKTt0aHJvdyBuZXcgZih5LCJFcnJvciBsaW5raW5nIHByb2dyYW06Iit5KX1yPXJ8fHUudW5pZm9ybXMocCxnKSxuPW58fHUuYXR0cmlidXRlcyhwLGcpLHAuZGVsZXRlUHJvZ3JhbShnKX1uPW4uc2xpY2UoKSxuLnNvcnQoaSk7Zm9yKHZhciBiPVtdLHg9W10sXz1bXSx3PTA7dzxuLmxlbmd0aDsrK3cpe3ZhciBNPW5bd107aWYoTS50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHxNLnR5cGUuY2hhckF0KE0udHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksQT0wO0E8VDsrK0Epa1tBXT1fLmxlbmd0aCx4LnB1c2goTS5uYW1lKyJbIitBKyJdIiksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP18ucHVzaChNLmxvY2F0aW9uK0EpOkFycmF5LmlzQXJyYXkoTS5sb2NhdGlvbikmJk0ubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uW0FdP18ucHVzaCgwfE0ubG9jYXRpb25bQV0pOl8ucHVzaCgtMSk7Yi5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgYi5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6W18ubGVuZ3RoXX0pLHgucHVzaChNLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgTS5sb2NhdGlvbj9fLnB1c2goMHxNLmxvY2F0aW9uKTpfLnB1c2goLTEpfWZvcih2YXIgRT0wLHc9MDt3PF8ubGVuZ3RoOysrdylpZihfW3ddPDApe2Zvcig7Xy5pbmRleE9mKEUpPj0wOylFKz0xO19bd109RX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2EoKSxkLl9yZWxpbms9YSxkLnR5cGVzPXt1bmlmb3JtczpsKHIpLGF0dHJpYnV0ZXM6bChuKX0sZC5hdHRyaWJ1dGVzPXMocCxkLGIsXyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInVuaWZvcm1zIixvKHAsZCxyLFMpKX0sZS5leHBvcnRzPWF9LHsiLi9saWIvR0xFcnJvciI6MjYyLCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MjYzLCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjI2NCwiLi9saWIvcmVmbGVjdCI6MjY1LCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjI2NiwiLi9saWIvc2hhZGVyLWNhY2hlIjoyNjd9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE3fV0sMjYzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjYyLGR1cDoyMTh9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE5XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyNjIsIi4vcmVmbGVjdCI6MjY1LGR1cDoyMTl9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjIwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjIwfV0sMjY2OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIyMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIyMX1dLDI2NzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMjJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjI2MixkdXA6MjIyLCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjE2OSwid2Vha21hcC1zaGltIjo1Njl9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9ZS5leHBvcnRzPWk7dmFyIGE9bi5wcm90b3R5cGU7YS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHRoaXMuY2VudGVyPSh0LmNlbnRlcnx8WzEvMCwxLzBdKS5zbGljZSgpLHRoaXMucGxvdC5zZXRPdmVybGF5RGlydHkoKX0sYS5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbmFibGUsZT10aGlzLndpZHRoLHI9dGhpcy5jb2xvcixuPXRoaXMuY2VudGVyLGk9dGhpcy5wbG90LGE9aS5saW5lLG89aS5kYXRhQm94LHM9aS52aWV3Qm94O2lmKGEuYmluZCgpLG9bMF08PW5bMF0mJm5bMF08PW9bMl0mJm9bMV08PW5bMV0mJm5bMV08PW9bM10pe3ZhciBsPXNbMF0rKG5bMF0tb1swXSkvKG9bMl0tb1swXSkqKHNbMl0tc1swXSksYz1zWzFdKyhuWzFdLW9bMV0pLyhvWzNdLW9bMV0pKihzWzNdLXNbMV0pO3RbMF0mJmEuZHJhd0xpbmUobCxjLHNbMF0sYyxlWzBdLHJbMF0pLHRbMV0mJmEuZHJhd0xpbmUobCxjLGwsc1sxXSxlWzFdLHJbMV0pLHRbMl0mJmEuZHJhd0xpbmUobCxjLHNbMl0sYyxlWzJdLHJbMl0pLHRbM10mJmEuZHJhd0xpbmUobCxjLGwsc1szXSxlWzNdLHJbM10pfX0sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7fV0sMjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZlcnRleFBvc2l0aW9uID0gbWl4KGNvb3JkaW5hdGVzWzBdLFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcblxuICB2ZWM0IGNsaXBQb3MgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgMS4wKTtcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcbiAgdmVjMiBsaW5lT2Zmc2V0ID0gbm9ybWFsaXplKHZlYzIoZGVsdGEueSwgLWRlbHRhLngpKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XG4gIGZyYWdDb2xvciAgICAgPSBjb2xvci54ICogY29sb3JzWzBdICsgY29sb3IueSAqIGNvbG9yc1sxXSArIGNvbG9yLnogKiBjb2xvcnNbMl07XG59XG4iLCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufSIsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWMzIn0se25hbWU6IndlaWdodCIsdHlwZToiZmxvYXQifV0pfX0seyJnbC1zaGFkZXIiOjI2MX1dLDI3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIodCxlLHIsbixhLG8pe3ZhciBzPVt0LGUsciwwLDAsMCwxXTtzW24rM109MSxzW25dPWEsaS5wdXNoLmFwcGx5KGkscyksc1s2XT0tMSxpLnB1c2guYXBwbHkoaSxzKSxzW25dPW8saS5wdXNoLmFwcGx5KGkscyksaS5wdXNoLmFwcGx5KGkscyksc1s2XT0xLGkucHVzaC5hcHBseShpLHMpLHNbbl09YSxpLnB1c2guYXBwbHkoaSxzKX12YXIgaT1bXTtyKDAsMCwwLDAsMCwxKSxyKDAsMCwwLDEsMCwxKSxyKDAsMCwwLDIsMCwxKSxyKDEsMCwwLDEsLTEsMSkscigxLDAsMCwyLC0xLDEpLHIoMCwxLDAsMCwtMSwxKSxyKDAsMSwwLDIsLTEsMSkscigwLDAsMSwwLC0xLDEpLHIoMCwwLDEsMSwtMSwxKTt2YXIgbD1hKHQsaSksYz1vKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PXModCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBmPW5ldyBuKHQsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSxmfXZhciBhPXQoImdsLWJ1ZmZlciIpLG89dCgiZ2wtdmFvIikscz10KCIuL3NoYWRlcnMvaW5kZXgiKTtlLmV4cG9ydHM9aTt2YXIgbD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYz1uLnByb3RvdHlwZSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMF07Yy5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGMuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe30sYy5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnZhbyxuPXRoaXMuc2hhZGVyO3IuYmluZCgpLG4uYmluZCgpO3ZhciBpLGE9dC5tb2RlbHx8bCxvPXQudmlld3x8bCxzPXQucHJvamVjdGlvbnx8bDt0aGlzLmF4ZXMmJihpPXRoaXMuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXMpO2Zvcih2YXIgYz11LGQ9ZixwPTA7cDwzOysrcClpJiZpW3BdPDA/KGNbcF09dGhpcy5ib3VuZHNbMF1bcF0sZFtwXT10aGlzLmJvdW5kc1sxXVtwXSk6KGNbcF09dGhpcy5ib3VuZHNbMV1bcF0sZFtwXT10aGlzLmJvdW5kc1swXVtwXSk7aFswXT1lLmRyYXdpbmdCdWZmZXJXaWR0aCxoWzFdPWUuZHJhd2luZ0J1ZmZlckhlaWdodCxuLnVuaWZvcm1zLm1vZGVsPWEsbi51bmlmb3Jtcy52aWV3PW8sbi51bmlmb3Jtcy5wcm9qZWN0aW9uPXMsbi51bmlmb3Jtcy5jb29yZGluYXRlcz1bdGhpcy5wb3NpdGlvbixjLGRdLG4udW5pZm9ybXMuY29sb3JzPXRoaXMuY29sb3JzLG4udW5pZm9ybXMuc2NyZWVuU2hhcGU9aDtmb3IodmFyIHA9MDtwPDM7KytwKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW3BdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbcF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KnApLHRoaXMuZHJhd1NpZGVzW3BdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqcCkpO3IudW5iaW5kKCl9LGMudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJigiYm91bmRzImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksInBvc2l0aW9uImluIHQmJih0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24pLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwiY29sb3JzImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksImVuYWJsZWQiaW4gdCYmKHRoaXMuZW5hYmxlZD10LmVuYWJsZWQpLCJkcmF3U2lkZXMiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjI2OSwiZ2wtYnVmZmVyIjoxNTYsImdsLXZhbyI6Mjc3fV0sMjcxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSB2ZWMzIGY7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB3b3JsZENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiIsYT0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5cblxuZmxvYXQgYmVja21hbm5TcGVjdWxhcl8xXzEoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uXzJfMChkb3Qoc3VyZmFjZU5vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbikpLCByb3VnaG5lc3MpO1xufVxuXG5cblxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XG51bmlmb3JtIGZsb2F0IGNvbnRvdXJUaW50O1xudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoa2lsbCA+IDAuMCB8fFxuICAgIGFueShsZXNzVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRDb29yZGluYXRlLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKHN1cmZhY2VOb3JtYWwpO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZXllRGlyZWN0aW9uKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWF4KGJlY2ttYW5uU3BlY3VsYXJfMV8xKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBzdGVwKHZlcnRleENvbG9yLCAuNSkgKiB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSkgKyBzdGVwKC41LCB2ZXJ0ZXhDb2xvcikgKiB2Q29sb3I7XG5cbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG1peChsaXRDb2xvciwgY29udG91ckNvbG9yLCBjb250b3VyVGludCkgKiBvcGFjaXR5O1xufVxuIixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIGZsb2F0IGY7XG5cbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQoZGF0YUNvb3JkaW5hdGUsIDEuMCk7XG5cbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNsaXBQb3NpdGlvbi56ID0gY2xpcFBvc2l0aW9uLnogKyB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGY7XG4gIGtpbGwgPSAtMS4wO1xuICB3b3JsZENvb3JkaW5hdGUgPSBkYXRhQ29vcmRpbmF0ZTtcbiAgcGxhbmVDb29yZGluYXRlID0gdXYuenc7XG5cbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xuXG4gIC8vRG9uJ3QgZG8gbGlnaHRpbmcgZm9yIGNvbnRvdXJzXG4gIHN1cmZhY2VOb3JtYWwgICA9IHZlYzMoMSwwLDApO1xuICBleWVEaXJlY3Rpb24gICAgPSB2ZWMzKDAsMSwwKTtcbiAgbGlnaHREaXJlY3Rpb24gID0gdmVjMygwLDAsMSk7XG59XG4iLHM9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZihraWxsID4gMC4wIHx8XG4gICAgYW55KGxlc3NUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgdmVjMiB1eCA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnggLyBzaGFwZS54KTtcbiAgdmVjMiB1eSA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnkgLyBzaGFwZS55KTtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIHV4LngsIHV5LngsIHV4LnkgKyAodXkueS8xNi4wKSk7XG59XG4iO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxpLGEsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxpLHMsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxvLGEsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxvLHMsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfX0seyJnbC1zaGFkZXIiOjI2MX1dLDI3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX1mdW5jdGlvbiBpKHQpe3ZhciBlPXgoW3koe2NvbG9ybWFwOnQsbnNoYWRlczpSLGZvcm1hdDoicmdiYSJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLDI1NSp0WzNdXX0pXSk7cmV0dXJuIGIuZGl2c2VxKGUsMjU1KSxlfWZ1bmN0aW9uIGEodCxlLHIsaSxhLG8scyxsLGMsdSxmLGgsZCxwKXt0aGlzLmdsPXQsdGhpcy5zaGFwZT1lLHRoaXMuYm91bmRzPXIsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPWksdGhpcy5fcGlja1NoYWRlcj1hLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9byx0aGlzLl92YW89cyx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9Zix0aGlzLl9jb250b3VyVkFPPWgsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBuKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1wLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstKDEvMCksLSgxLzApLC0oMS8wKV1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtfKGcubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLF8oZy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksXyhnLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stKDEvMCksLSgxLzApLC0oMS8wKV0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpc3x8aixvPWUuc2hvd1N1cmZhY2Uscz1lLnNob3dDb250b3VyO2ZvcihyPTA7cjwzOysrcilmb3Iobz1vfHxlLnN1cmZhY2VQcm9qZWN0W3JdLG49MDtuPDM7KytuKXM9c3x8ZS5jb250b3VyUHJvamVjdFtyXVtuXTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPU4ucHJvamVjdGlvbnNbcl07Zm9yKG49MDtuPDE2OysrbilsW25dPTA7Zm9yKG49MDtuPDQ7KytuKWxbNSpuXT0xO2xbNSpyXT0wLGxbMTIrcl09ZS5heGVzQm91bmRzWysoYVtyXT4wKV1bcl0sTShsLHQubW9kZWwsbCk7dmFyIGM9Ti5jbGlwQm91bmRzW3JdO2ZvcihpPTA7aTwyOysraSlmb3Iobj0wO248MzsrK24pY1tpXVtuXT10LmNsaXBCb3VuZHNbaV1bbl07Y1swXVtyXT0tMWU4LGNbMV1bcl09MWU4fXJldHVybiBOLnNob3dTdXJmYWNlPW8sTi5zaG93Q29udG91cj1zLE59ZnVuY3Rpb24gcyh0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49QjtuLm1vZGVsPXQubW9kZWx8fFAsbi52aWV3PXQudmlld3x8UCxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxQLG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPVQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBpPTA7aTwyOysraSlmb3IodmFyIGE9bi5jbGlwQm91bmRzW2ldLHM9MDtzPDM7KytzKWFbc109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2ldW3NdLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPVYsbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBsPVU7Zm9yKE0obCxuLnZpZXcsbi5tb2RlbCksTShsLG4ucHJvamVjdGlvbixsKSxUKGwsbCksaT0wO2k8MzsrK2kpbi5leWVQb3NpdGlvbltpXT1sWzEyK2ldL2xbMTVdO3ZhciBjPWxbMTVdO2ZvcihpPTA7aTwzOysraSljKz10aGlzLmxpZ2h0UG9zaXRpb25baV0qbFs0KmkrM107Zm9yKGk9MDtpPDM7KytpKXt2YXIgdT1sWzEyK2ldO2ZvcihzPTA7czwzOysrcyl1Kz1sWzQqcytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bc107bi5saWdodFBvc2l0aW9uW2ldPXUvY312YXIgZj1vKG4sdGhpcyk7aWYoZi5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD1mLnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPWYuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZihmLnNob3dDb250b3VyJiYhZSl7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBkPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGQuYmluZCgpLGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPU9baV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbaV0pLHM9MDtzPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytzKXRoaXMuX2NvbnRvdXJDb3VudHNbaV1bc10mJihzPT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtpXSk6MCE9PXMmJnMtMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV18fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbaV0pLGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtzXSxkLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW3NdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW3NdKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLm1vZGVsPWYucHJvamVjdGlvbnNbaV0saC51bmlmb3Jtcy5jbGlwQm91bmRzPWYuY2xpcEJvdW5kc1tpXSxzPTA7czwzOysrcylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW3NdKXtoLnVuaWZvcm1zLnBlcm11dGF0aW9uPU9bc10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbc10pO2Zvcih2YXIgcD0wO3A8dGhpcy5jb250b3VyTGV2ZWxzW3NdLmxlbmd0aDsrK3ApcD09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbc10/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3Jbc10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbc10pOjAhPT1wJiZwLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW3NdfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3Jbc10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W3NdKSxoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbc11bcF0sZC5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tzXVtwXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tzXVtwXSl9Zm9yKGQ9dGhpcy5fZHluYW1pY1ZBTyxkLmJpbmQoKSxpPTA7aTwzOysraSlpZigwIT09dGhpcy5fZHluYW1pY0NvdW50c1tpXSlmb3IoaC51bmlmb3Jtcy5tb2RlbD1uLm1vZGVsLGgudW5pZm9ybXMuY2xpcEJvdW5kcz1uLmNsaXBCb3VuZHMsaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1PW2ldLHIubGluZVdpZHRoKHRoaXMuZHluYW1pY1dpZHRoW2ldKSxoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0saC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0sZC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkscz0wO3M8MzsrK3MpdGhpcy5jb250b3VyUHJvamVjdFtzXVtpXSYmKGgudW5pZm9ybXMubW9kZWw9Zi5wcm9qZWN0aW9uc1tzXSxoLnVuaWZvcm1zLmNsaXBCb3VuZHM9Zi5jbGlwQm91bmRzW3NdLGQuZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtkLnVuYmluZCgpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5zaGFwZS5zbGljZSgpLG49dC5zaGFwZS5zbGljZSgpO2IuYXNzaWduKHQubG8oMSwxKS5oaShyWzBdLHJbMV0pLGUpLGIuYXNzaWduKHQubG8oMSkuaGkoclswXSwxKSxlLmhpKHJbMF0sMSkpLGIuYXNzaWduKHQubG8oMSxuWzFdLTEpLmhpKHJbMF0sMSksZS5sbygwLHJbMV0tMSkuaGkoclswXSwxKSksYi5hc3NpZ24odC5sbygwLDEpLmhpKDEsclsxXSksZS5oaSgxKSksYi5hc3NpZ24odC5sbyhuWzBdLTEsMSkuaGkoMSxyWzFdKSxlLmxvKHJbMF0tMSkpLHQuc2V0KDAsMCxlLmdldCgwLDApKSx0LnNldCgwLG5bMV0tMSxlLmdldCgwLHJbMV0tMSkpLHQuc2V0KG5bMF0tMSwwLGUuZ2V0KHJbMF0tMSwwKSksdC5zZXQoblswXS0xLG5bMV0tMSxlLmdldChyWzBdLTEsclsxXS0xKSl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1tlKHRbMF0pLGUodFsxXSksZSh0WzJdKV06W2UodCksZSh0KSxlKHQpXX1mdW5jdGlvbiB1KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzM9PT10Lmxlbmd0aD9bdFswXSx0WzFdLHRbMl0sMV06W3RbMF0sdFsxXSx0WzJdLHRbM11dOlswLDAsMCwxXX1mdW5jdGlvbiBmKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuW3UodFswXSksdSh0WzFdKSx1KHRbMl0pXTt2YXIgZT11KHQpO3JldHVybltlLnNsaWNlKCksZS5zbGljZSgpLGUuc2xpY2UoKV19fWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5nbCxyPVMoZSksbj1DKGUpLGk9TChlKSxvPUkoZSkscz1wKGUpLGw9bShlLFt7YnVmZmVyOnMsc2l6ZTo0LHN0cmlkZTpELG9mZnNldDowfSx7YnVmZmVyOnMsc2l6ZTozLHN0cmlkZTpELG9mZnNldDoxNn0se2J1ZmZlcjpzLHNpemU6MyxzdHJpZGU6RCxvZmZzZXQ6Mjh9XSksYz1wKGUpLHU9bShlLFt7YnVmZmVyOmMsc2l6ZTo0LHN0cmlkZToyMCxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MSxzdHJpZGU6MjAsb2Zmc2V0OjE2fV0pLGY9cChlKSxoPW0oZSxbe2J1ZmZlcjpmLHNpemU6Mix0eXBlOmUuRkxPQVR9XSksZD12KGUsMSxSLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO2QubWluRmlsdGVyPWUuTElORUFSLGQubWFnRmlsdGVyPWUuTElORUFSO3ZhciBnPW5ldyBhKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLHMsbCxkLGksbyxjLHUsZixoKSx5PXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciBiIGluIHQpeVtiXT10W2JdO3JldHVybiB5LmNvbG9ybWFwPXkuY29sb3JtYXB8fCJqZXQiLGcudXBkYXRlKHkpLGd9ZS5leHBvcnRzPWg7dmFyIGQ9dCgiYml0LXR3aWRkbGUiKSxwPXQoImdsLWJ1ZmZlciIpLG09dCgiZ2wtdmFvIiksdj10KCJnbC10ZXh0dXJlMmQiKSxnPXQoInR5cGVkYXJyYXktcG9vbCIpLHk9dCgiY29sb3JtYXAiKSxiPXQoIm5kYXJyYXktb3BzIikseD10KCJuZGFycmF5LXBhY2siKSxfPXQoIm5kYXJyYXkiKSx3PXQoInN1cmZhY2UtbmV0cyIpLE09dCgiZ2wtbWF0NC9tdWx0aXBseSIpLFQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxrPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksQT10KCJuZGFycmF5LWdyYWRpZW50IiksRT10KCIuL2xpYi9zaGFkZXJzIiksUz1FLmNyZWF0ZVNoYWRlcixMPUUuY3JlYXRlQ29udG91clNoYWRlcixDPUUuY3JlYXRlUGlja1NoYWRlcixJPUUuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsRD00MCxQPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx6PVtbMCwwXSxbMCwxXSxbMSwwXSxbMSwxXSxbMSwwXSxbMCwxXV0sTz1bWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF1dOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzsrK3Qpe3ZhciBlPU9bdF0scj0odCsxKSUzLG49KHQrMiklMztlW3IrMF09MSxlW24rM109MSxlW3QrNl09MX19KCk7dmFyIFI9MjU2LEY9YS5wcm90b3R5cGU7Ri5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxGLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5fY29udG91ckNvdW50c1t0XS5sZW5ndGg+MHx8dGhpcy5fZHluYW1pY0NvdW50c1t0XT4wKXJldHVybiEwO3JldHVybiExfSxGLnBpY2tTbG90cz0xLEYuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIGo9WzAsMCwwXSxOPXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbUC5zbGljZSgpLFAuc2xpY2UoKSxQLnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX0sQj17bW9kZWw6UCx2aWV3OlAscHJvamVjdGlvbjpQLGludmVyc2VNb2RlbDpQLnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxVPVAuc2xpY2UoKSxWPVsxLDAsMCwwLDEsMCwwLDAsMV07Ri5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwodGhpcyx0LCExKX0sRi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbCh0aGlzLHQsITApfTt2YXIgSD17bW9kZWw6UCx2aWV3OlAscHJvamVjdGlvbjpQLGludmVyc2VNb2RlbDpQLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAscGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07Ri5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1IO3IubW9kZWw9dC5tb2RlbHx8UCxyLnZpZXc9dC52aWV3fHxQLHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fFAsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLnBlcm11dGF0aW9uPVY7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIHM9byhyLHRoaXMpO2lmKHMuc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHMuc2hvd0NvbnRvdXIpe3ZhciBsPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cjt2YXIgYz10aGlzLl9jb250b3VyVkFPO2ZvcihjLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0pLGwudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLGMuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKGwudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSxsLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe2wudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSk7Zm9yKHZhciB1PTA7dTx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrdSl0aGlzLl9jb250b3VyQ291bnRzW2FdW3VdJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW3VdLGMuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bdV0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bdV0pKX1jLnVuYmluZCgpfX0sRi5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGY9dT9hOjEtYSxoPTA7aDwyOysraClmb3IodmFyIGQ9aD9sOjEtbCxwPWkrdSxtPXMraCx2PWYqZCxnPTA7ZzwzOysrZyljW2ddKz10aGlzLl9maWVsZFtnXS5nZXQocCxtKSp2O2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLGI9MDtiPDM7KytiKWlmKHlbYl09ay5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbYl0sY1tiXSkseVtiXTwwKXRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGg+MCYmKHlbYl09MCk7ZWxzZSBpZih5W2JdPHRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGgtMSl7dmFyIHg9dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl1dLF89dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl0rMV07TWF0aC5hYnMoeC1jW2JdKT5NYXRoLmFicyhfLWNbYl0pJiYoeVtiXSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sZz0wO2c8MzsrK2cpci5kYXRhQ29vcmRpbmF0ZVtnXT10aGlzLl9maWVsZFtnXS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sRi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPWModC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPWModC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PWModC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9Zih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1jKHQuY29udG91clByb2plY3QsZnVuY3Rpb24odCl7cmV0dXJuIGModCxCb29sZWFuKX0pKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9Zih0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD1jKHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Yyh0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITEKO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksImZpZWxkImluIHR8fCJjb29yZHMiaW4gdCl7dmFyIG49KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7bj50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKGcuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9Zy5tYWxsb2NGbG9hdChkLm5leHRQb3cyKG4pKSksdGhpcy5fZmllbGRbMl09Xyh0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksbCh0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGE9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYoZy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1nLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1fKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIHM9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkocyl8fDMhPT1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgY29vcmRpbmF0ZXMgZm9yIHgveSIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9c1tvXTtmb3IoeT0wO3k8MjsrK3kpaWYodS5zaGFwZVt5XSE9PWFbeV0pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGUiKTtsKHRoaXMuX2ZpZWxkW29dLHUpfX1lbHNlIGlmKHQudGlja3Mpe3ZhciBoPXQudGlja3M7aWYoIUFycmF5LmlzQXJyYXkoaCl8fDIhPT1oLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3MiKTtmb3Iobz0wO288MjsrK28pe3ZhciBwPWhbb107aWYoKEFycmF5LmlzQXJyYXkocCl8fHAubGVuZ3RoKSYmKHA9XyhwKSkscC5zaGFwZVswXSE9PWFbb10pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2sgbGVuZ3RoIik7dmFyIG09XyhwLmRhdGEsYSk7bS5zdHJpZGVbb109cC5zdHJpZGVbMF0sbS5zdHJpZGVbMV5vXT0wLGwodGhpcy5fZmllbGRbb10sbSl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgdj1bMCwwXTt2W29dPTEsdGhpcy5fZmllbGRbb109Xyh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSx2LDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciB5PTA7eTxhWzBdOysreSl0aGlzLl9maWVsZFswXS5zZXQoeSsxLDAseSk7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChhWzBdKzEsMCxhWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCkseT0wO3k8YVsxXTsrK3kpdGhpcy5fZmllbGRbMV0uc2V0KDAseSsxLHkpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGFbMV0rMSxhWzFdLTEpfXZhciBiPXRoaXMuX2ZpZWxkLHg9XyhnLm1hbGxvY0Zsb2F0KDMqYlsyXS5zaXplKjIpLFszLGFbMF0rMixhWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbylBKHgucGljayhvKSxiW29dLCJtaXJyb3IiKTt2YXIgTT1fKGcubWFsbG9jRmxvYXQoMypiWzJdLnNpemUpLFthWzBdKzIsYVsxXSsyLDNdKTtmb3Iobz0wO288YVswXSsyOysrbylmb3IoeT0wO3k8YVsxXSsyOysreSl7dmFyIFQ9eC5nZXQoMCxvLHksMCksaz14LmdldCgwLG8seSwxKSxFPXguZ2V0KDEsbyx5LDApLFM9eC5nZXQoMSxvLHksMSksTD14LmdldCgyLG8seSwwKSxDPXguZ2V0KDIsbyx5LDEpLEk9RSpDLVMqTCxEPUwqay1DKlQsUD1UKlMtaypFLE89TWF0aC5zcXJ0KEkqSStEKkQrUCpQKTtPPDFlLTg/KE89TWF0aC5tYXgoTWF0aC5hYnMoSSksTWF0aC5hYnMoRCksTWF0aC5hYnMoUCkpLE88MWUtOD8oUD0xLEQ9ST0wLE89MSk6Tz0xL08pOk89MS9NYXRoLnNxcnQoTyksTS5zZXQobyx5LDAsSSpPKSxNLnNldChvLHksMSxEKk8pLE0uc2V0KG8seSwyLFAqTyl9Zy5mcmVlKHguZGF0YSk7dmFyIFI9WzEvMCwxLzAsMS8wXSxGPVstKDEvMCksLSgxLzApLC0oMS8wKV0saj0xLzAsTj0tKDEvMCksQj0oYVswXS0xKSooYVsxXS0xKSo2LFU9Zy5tYWxsb2NGbG9hdChkLm5leHRQb3cyKDEwKkIpKSxWPTAsSD0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHk9MDt5PGFbMV0tMTsrK3kpe2Zvcih2YXIgcT0wO3E8MjsrK3EpZm9yKHZhciBHPTA7RzwyOysrRylmb3IodmFyIFk9MDtZPDM7KytZKXt2YXIgWD10aGlzLl9maWVsZFtZXS5nZXQoMStvK3EsMSt5K0cpO2lmKGlzTmFOKFgpfHwhaXNGaW5pdGUoWCkpY29udGludWUgdH1mb3IoWT0wO1k8NjsrK1kpe3ZhciBXPW8reltZXVswXSxaPXkreltZXVsxXSxKPXRoaXMuX2ZpZWxkWzBdLmdldChXKzEsWisxKSxLPXRoaXMuX2ZpZWxkWzFdLmdldChXKzEsWisxKTtYPXRoaXMuX2ZpZWxkWzJdLmdldChXKzEsWisxKTt2YXIgUT1YO0k9TS5nZXQoVysxLForMSwwKSxEPU0uZ2V0KFcrMSxaKzEsMSksUD1NLmdldChXKzEsWisxLDIpLHQuaW50ZW5zaXR5JiYoUT10LmludGVuc2l0eS5nZXQoVyxaKSksVVtWKytdPVcsVVtWKytdPVosVVtWKytdPUosVVtWKytdPUssVVtWKytdPVgsVVtWKytdPTAsVVtWKytdPVEsVVtWKytdPUksVVtWKytdPUQsVVtWKytdPVAsUlswXT1NYXRoLm1pbihSWzBdLEopLFJbMV09TWF0aC5taW4oUlsxXSxLKSxSWzJdPU1hdGgubWluKFJbMl0sWCksaj1NYXRoLm1pbihqLFEpLEZbMF09TWF0aC5tYXgoRlswXSxKKSxGWzFdPU1hdGgubWF4KEZbMV0sSyksRlsyXT1NYXRoLm1heChGWzJdLFgpLE49TWF0aC5tYXgoTixRKSxIKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihqPSt0LmludGVuc2l0eUJvdW5kc1swXSxOPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288VjtvKz0xMClVW29dPShVW29dLWopLyhOLWopO3RoaXMuX3ZlcnRleENvdW50PUgsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoVS5zdWJhcnJheSgwLFYpKSxnLmZyZWVGbG9hdChVKSxnLmZyZWUoTS5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1qJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PU58fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1baixOXX1pZigibGV2ZWxzImluIHQpe3ZhciAkPXQubGV2ZWxzO2ZvcigkPUFycmF5LmlzQXJyYXkoJFswXSk/JC5zbGljZSgpOltbXSxbXSwkXSxvPTA7bzwzOysrbykkW29dPSRbb10uc2xpY2UoKSwkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dDpmb3Iobz0wO288MzsrK28pe2lmKCRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoeT0wO3k8JFtvXS5sZW5ndGg7Kyt5KWlmKCRbb11beV0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11beV0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPSR9aWYocil7Yj10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciB0dD1bXSxldD0wO2V0PDM7KytldCl7JD10aGlzLmNvbnRvdXJMZXZlbHNbZXRdO3ZhciBydD1bXSxudD1bXSxpdD1bMCwwLDBdO2ZvcihvPTA7bzwkLmxlbmd0aDsrK28pe3ZhciBhdD13KHRoaXMuX2ZpZWxkW2V0XSwkW29dKTtydC5wdXNoKHR0Lmxlbmd0aC81fDApLEg9MDt0OmZvcih5PTA7eTxhdC5jZWxscy5sZW5ndGg7Kyt5KXt2YXIgb3Q9YXQuY2VsbHNbeV07Zm9yKFk9MDtZPDI7KytZKXt2YXIgc3Q9YXQucG9zaXRpb25zW290W1ldXSxsdD1zdFswXSxjdD0wfE1hdGguZmxvb3IobHQpLHV0PWx0LWN0LGZ0PXN0WzFdLGh0PTB8TWF0aC5mbG9vcihmdCksZHQ9ZnQtaHQscHQ9ITE7ZTpmb3IodmFyIG10PTA7bXQ8MzsrK210KXtpdFttdF09MDt2YXIgdnQ9KGV0K210KzEpJTM7Zm9yKHE9MDtxPDI7KytxKXt2YXIgZ3Q9cT91dDoxLXV0O2ZvcihXPTB8TWF0aC5taW4oTWF0aC5tYXgoY3QrcSwwKSxhWzBdKSxHPTA7RzwyOysrRyl7dmFyIHl0PUc/ZHQ6MS1kdDtpZihaPTB8TWF0aC5taW4oTWF0aC5tYXgoaHQrRywwKSxhWzFdKSxYPW10PDI/dGhpcy5fZmllbGRbdnRdLmdldChXLFopOih0aGlzLmludGVuc2l0eS5nZXQoVyxaKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWCl8fGlzTmFOKFgpKXtwdD0hMDticmVhayBlfXZhciBidD1ndCp5dDtpdFttdF0rPWJ0Klh9fX1pZihwdCl7aWYoWT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KXR0LnBvcCgpO0gtPTF9Y29udGludWUgdH10dC5wdXNoKGl0WzBdLGl0WzFdLHN0WzBdLHN0WzFdLGl0WzJdKSxIKz0xfX1udC5wdXNoKEgpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW2V0XT1ydCx0aGlzLl9jb250b3VyQ291bnRzW2V0XT1udH12YXIgX3Q9Zy5tYWxsb2NGbG9hdCh0dC5sZW5ndGgpO2ZvcihvPTA7bzx0dC5sZW5ndGg7KytvKV90W29dPXR0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKF90KSxnLmZyZWVGbG9hdChfdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGkodC5jb2xvcm1hcCkpfSxGLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zaGFkZXIuZGlzcG9zZSgpLHRoaXMuX3Zhby5kaXNwb3NlKCksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29sb3JNYXAuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljVkFPLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PDM7Kyt0KWcuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW3RdLmRhdGEpfSxGLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IodmFyIGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO3ZhciByO2lmKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbix0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1nLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBzPShvKzEpJTMsbD0obysyKSUzLGM9dGhpcy5fZmllbGRbb10sdT10aGlzLl9maWVsZFtzXSxmPXRoaXMuX2ZpZWxkW2xdLGg9KHRoaXMuaW50ZW5zaXR5LHcoYyxyW29dKSksZD1oLmNlbGxzLHA9aC5wb3NpdGlvbnM7Zm9yKHRoaXMuX2R5bmFtaWNPZmZzZXRzW29dPW4sZT0wO2U8ZC5sZW5ndGg7KytlKWZvcih2YXIgbT1kW2VdLHY9MDt2PDI7Kyt2KXt2YXIgeT1wW21bdl1dLGI9K3lbMF0seD0wfGIsXz0wfE1hdGgubWluKHgrMSxpWzBdKSxNPWIteCxUPTEtTSxrPSt5WzFdLEE9MHxrLEU9MHxNYXRoLm1pbihBKzEsaVsxXSksUz1rLUEsTD0xLVMsQz1UKkwsST1UKlMsRD1NKkwsUD1NKlMsej1DKnUuZ2V0KHgsQSkrSSp1LmdldCh4LEUpK0QqdS5nZXQoXyxBKStQKnUuZ2V0KF8sRSksTz1DKmYuZ2V0KHgsQSkrSSpmLmdldCh4LEUpK0QqZi5nZXQoXyxBKStQKmYuZ2V0KF8sRSk7aWYoaXNOYU4oeil8fGlzTmFOKE8pKXt2JiYobi09MSk7YnJlYWt9YVsyKm4rMF09eixhWzIqbisxXT1PLG4rPTF9dGhpcy5fZHluYW1pY0NvdW50c1tvXT1uLXRoaXMuX2R5bmFtaWNPZmZzZXRzW29dfWVsc2UgdGhpcy5keW5hbWljTGV2ZWxbb109TmFOLHRoaXMuX2R5bmFtaWNDb3VudHNbb109MDt0aGlzLl9keW5hbWljQnVmZmVyLnVwZGF0ZShhLnN1YmFycmF5KDAsMipuKSksZy5mcmVlRmxvYXQoYSl9fX0seyIuL2xpYi9zaGFkZXJzIjoyNzEsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NywiYml0LXR3aWRkbGUiOjY4LGNvbG9ybWFwOjk4LCJnbC1idWZmZXIiOjE1NiwiZ2wtbWF0NC9pbnZlcnQiOjE4NSwiZ2wtbWF0NC9tdWx0aXBseSI6MTg3LCJnbC10ZXh0dXJlMmQiOjI3MywiZ2wtdmFvIjoyNzcsbmRhcnJheTo0NzYsIm5kYXJyYXktZ3JhZGllbnQiOjQ2NywibmRhcnJheS1vcHMiOjQ3MCwibmRhcnJheS1wYWNrIjo0NzEsInN1cmZhY2UtbmV0cyI6NTQwLCJ0eXBlZGFycmF5LXBvb2wiOjU0OX1dLDI3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Y9W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSxnPVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLHk9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMsbCl7dmFyIGM9bC5kdHlwZSx1PWwuc2hhcGUuc2xpY2UoKTtpZih1Lmxlbmd0aDwyfHx1Lmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2QiKTt2YXIgZj0wLGg9MCx2PW8odSxsLnN0cmlkZS5zbGljZSgpKTsiZmxvYXQzMiI9PT1jP2Y9dC5GTE9BVDoiZmxvYXQ2NCI9PT1jPyhmPXQuRkxPQVQsdj0hMSxjPSJmbG9hdDMyIik6InVpbnQ4Ij09PWM/Zj10LlVOU0lHTkVEX0JZVEU6KGY9dC5VTlNJR05FRF9CWVRFLHY9ITEsYz0idWludDgiKTtpZigyPT09dS5sZW5ndGgpaD10LkxVTUlOQU5DRSx1PVt1WzBdLHVbMV0sMV0sbD1kKGwuZGF0YSx1LFtsLnN0cmlkZVswXSxsLnN0cmlkZVsxXSwxXSxsLm9mZnNldCk7ZWxzZXtpZigzIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09dVsyXSloPXQuQUxQSEE7ZWxzZSBpZigyPT09dVsyXSloPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PXVbMl0paD10LlJHQjtlbHNle2lmKDQhPT11WzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTtoPXQuUkdCQX11WzJdfWlmKGghPT10LkxVTUlOQU5DRSYmaCE9PXQuQUxQSEF8fGkhPT10LkxVTUlOQU5DRSYmaSE9PXQuQUxQSEF8fChoPWkpLGghPT1pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbmNvbXBhdGlibGUgdGV4dHVyZSBmb3JtYXQgZm9yIHNldFBpeGVscyIpO3ZhciBnPWwuc2l6ZSx5PXMuaW5kZXhPZihuKTwwO2lmKHkmJnMucHVzaChuKSxmPT09YSYmdikwPT09bC5vZmZzZXQmJmwuZGF0YS5sZW5ndGg9PT1nP3k/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGksdVswXSx1WzFdLDAsaSxhLGwuZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGUscix1WzBdLHVbMV0saSxhLGwuZGF0YSk6eT90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG4saSx1WzBdLHVbMV0sMCxpLGEsbC5kYXRhLnN1YmFycmF5KGwub2Zmc2V0LGwub2Zmc2V0K2cpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG4sZSxyLHVbMF0sdVsxXSxpLGEsbC5kYXRhLnN1YmFycmF5KGwub2Zmc2V0LGwub2Zmc2V0K2cpKTtlbHNle3ZhciB4O3g9YT09PXQuRkxPQVQ/bS5tYWxsb2NGbG9hdDMyKGcpOm0ubWFsbG9jVWludDgoZyk7dmFyIF89ZCh4LHUsW3VbMl0sdVsyXSp1WzBdLDFdKTtmPT09dC5GTE9BVCYmYT09PXQuVU5TSUdORURfQllURT9iKF8sbCk6cC5hc3NpZ24oXyxsKSx5P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixpLHVbMF0sdVsxXSwwLGksYSx4LnN1YmFycmF5KDAsZykpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixlLHIsdVswXSx1WzFdLGksYSx4LnN1YmFycmF5KDAsZykpLGE9PT10LkZMT0FUP20uZnJlZUZsb2F0MzIoeCk6bS5mcmVlVWludDgoeCl9fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIG89dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+b3x8cjwwfHxyPm8pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBzPWwodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgYSh0LHMsZSxyLG4saSl9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1sKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAscixyLG4sZSksbmV3IGEodCxpLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LHIsbil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWUuZHR5cGUsbj1lLnNoYXBlLnNsaWNlKCksaT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG5bMF08MHx8blswXT5pfHxuWzFdPDB8fG5bMV0+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgcz1vKG4sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxzPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUscz0hMSxyPSJ1aW50OCIpO3ZhciB1PTA7aWYoMj09PW4ubGVuZ3RoKXU9dC5MVU1JTkFOQ0Usbj1bblswXSxuWzFdLDFdLGU9ZChlLmRhdGEsbixbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW5bMl0pdT10LkFMUEhBO2Vsc2UgaWYoMj09PW5bMl0pdT10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1uWzJdKXU9dC5SR0I7ZWxzZXtpZig0IT09blsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7dT10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGM9dC5VTlNJR05FRF9CWVRFLHM9ITEpO3ZhciBmLGgsdj1lLnNpemU7aWYocylmPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PXY/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCt2KTtlbHNle3ZhciBnPVtuWzJdLG5bMl0qblswXSwxXTtoPW0ubWFsbG9jKHYscik7dmFyIHk9ZChoLG4sZywwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP3AuYXNzaWduKHksZSk6Yih5LGUpLGY9aC5zdWJhcnJheSgwLHYpfXZhciB4PWwodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx1LG5bMF0sblsxXSwwLHUsYyxmKSxzfHxtLmZyZWUoaCksbmV3IGEodCx4LG5bMF0sblsxXSx1LGMpfWZ1bmN0aW9uIGgodCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO2lmKHZ8fG4odCksIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIGModCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIGModCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXTtpZihlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHxlIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8ZSBpbnN0YW5jZW9mIEltYWdlRGF0YSlyZXR1cm4gdSh0LGUsYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKGUuc2hhcGUmJmUuZGF0YSYmZS5zdHJpZGUpcmV0dXJuIGYodCxlKX10aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpfXZhciBkPXQoIm5kYXJyYXkiKSxwPXQoIm5kYXJyYXktb3BzIiksbT10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9aDt2YXIgdj1udWxsLGc9bnVsbCx5PW51bGwsYj1mdW5jdGlvbih0LGUpe3AubXVscyh0LGUsMjU1KX0seD1hLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4LHttaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJnYuaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSksZy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmdi5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxnLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPWdsLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7ciYmdGhpcy5nbC50ZXhQYXJhbWV0ZXJmKHRoaXMuZ2wuVEVYVFVSRV8yRCxyLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULHRoaXMuX2FuaXNvU2FtcGxlcyl9cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc319LHdyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSx5LmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCkseS5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zIik7Zm9yKHZhciBlPTA7ZTwyOysrZSlpZih5LmluZGV4T2YodFtlXSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBpKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLGkodGhpcyx0LHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxpKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkseC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0seC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0seC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5nbDtpZih0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhuPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxuPW58fDAsdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfHx0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG4pPDA/KGkudGV4SW1hZ2UyRChpLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobikpOmkudGV4U3ViSW1hZ2UyRChpLlRFWFRVUkVfMkQsbixlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLHQpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+bnx8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+bnx8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kcyIpO3MoaSxlLHIsbix0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdGhpcy5fbWlwTGV2ZWxzLHQpfX19LHtuZGFycmF5OjQ3NiwibmRhcnJheS1vcHMiOjQ3MCwidHlwZWRhcnJheS1wb29sIjo1NDl9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTYyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTYyfV0sMjc1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzE2M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vZG8tYmluZC5qcyI6Mjc0LGR1cDoxNjN9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTY0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9kby1iaW5kLmpzIjoyNzQsZHVwOjE2NH1dLDI3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBvLHM9dC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7cmV0dXJuIG89cz9pKHQscyk6YSh0KSxvLnVwZGF0ZShlLHIsbiksb312YXIgaT10KCIuL2xpYi92YW8tbmF0aXZlLmpzIiksYT10KCIuL2xpYi92YW8tZW11bGF0ZWQuanMiKTtlLmV4cG9ydHM9bn0seyIuL2xpYi92YW8tZW11bGF0ZWQuanMiOjI3NSwiLi9saWIvdmFvLW5hdGl2ZS5qcyI6Mjc2fV0sMjc4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fWUuZXhwb3J0cz1ufSx7fV0sMjc5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1lLmV4cG9ydHM9bn0se31dLDI4MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4pfWUuZXhwb3J0cz1ufSx7fV0sMjgxOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9ZS5leHBvcnRzPW59LHt9XSwyODI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpLHR9ZS5leHBvcnRzPW59LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fWUuZXhwb3J0cz1ufSx7fV0sMjg0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gaVswXT1uLGlbMV09cixpWzJdPWUsaVszXT10LGFbMF19ZS5leHBvcnRzPW47dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCksYT1uZXcgRmxvYXQzMkFycmF5KGkuYnVmZmVyKX0se31dLDI4NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDppKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PW4udHlwZSl7dmFyIG89bi5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/YShsKTpsKS50cmltKCl9fX19dmFyIGk9dCgiZ2xzbC10b2tlbml6ZXIiKSxhPXQoImF0b2ItbGl0ZSIpO2UuZXhwb3J0cz1ufSx7ImF0b2ItbGl0ZSI6NDgsImdsc2wtdG9rZW5pemVyIjoyOTJ9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUodCl7dC5sZW5ndGgmJlYucHVzaCh7dHlwZTpNW0JdLGRhdGE6dCxwb3NpdGlvbjpHLGxpbmU6SCxjb2x1bW46cX0pfWZ1bmN0aW9uIHIodCl7aj0wLFcrPXQsRj1XLmxlbmd0aDtmb3IodmFyIGU7Tz1XW2pdLGo8Rjspe3N3aXRjaChlPWosQil7Y2FzZSBmOmo9UygpO2JyZWFrO2Nhc2UgaDpqPUUoKTticmVhaztjYXNlIGQ6aj1BKCk7YnJlYWs7Y2FzZSBwOmo9TCgpO2JyZWFrO2Nhc2UgbTpqPUQoKTticmVhaztjYXNlIHc6aj1JKCk7YnJlYWs7Y2FzZSB2Omo9UCgpO2JyZWFrO2Nhc2UgdTpqPXooKTticmVhaztjYXNlIHg6aj1rKCk7YnJlYWs7Y2FzZSBjOmo9VCgpfWlmKGUhPT1qKXN3aXRjaChXW2VdKXtjYXNlIlxuIjpxPTAsKytIO2JyZWFrO2RlZmF1bHQ6KytxfX1yZXR1cm4gTis9aixXPVcuc2xpY2UoaiksVn1mdW5jdGlvbiBuKHQpe3JldHVybiBVLmxlbmd0aCYmZShVLmpvaW4oIiIpKSxCPV8sZSgiKGVvZikiKSxWfWZ1bmN0aW9uIFQoKXtyZXR1cm4gVT1VLmxlbmd0aD9bXTpVLCIvIj09PVImJiIqIj09PU8/KEc9TitqLTEsQj1mLFI9TyxqKzEpOiIvIj09PVImJiIvIj09PU8/KEc9TitqLTEsQj1oLFI9TyxqKzEpOiIjIj09PU8/KEI9ZCxHPU4raixqKTovXHMvLnRlc3QoTyk/KEI9eCxHPU4raixqKTooWT0vXGQvLnRlc3QoTyksWD0vW15cd19dLy50ZXN0KE8pLEc9TitqLEI9WT9tOlg/cDp1LGopfWZ1bmN0aW9uIGsoKXtyZXR1cm4vW15cc10vZy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9YyxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIEEoKXtyZXR1cm4iXHIiIT09TyYmIlxuIiE9PU98fCJcXCI9PT1SPyhVLnB1c2goTyksUj1PLGorMSk6KGUoVS5qb2luKCIiKSksQj1jLGopfWZ1bmN0aW9uIEUoKXtyZXR1cm4gQSgpfWZ1bmN0aW9uIFMoKXtyZXR1cm4iLyI9PT1PJiYiKiI9PT1SPyhVLnB1c2goTyksZShVLmpvaW4oIiIpKSxCPWMsaisxKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIEwoKXtpZigiLiI9PT1SJiYvXGQvLnRlc3QoTykpcmV0dXJuIEI9dixqO2lmKCIvIj09PVImJiIqIj09PU8pcmV0dXJuIEI9ZixqO2lmKCIvIj09PVImJiIvIj09PU8pcmV0dXJuIEI9aCxqO2lmKCIuIj09PU8mJlUubGVuZ3RoKXtmb3IoO0MoVSk7KTtyZXR1cm4gQj12LGp9aWYoIjsiPT09T3x8IikiPT09T3x8IigiPT09Tyl7aWYoVS5sZW5ndGgpZm9yKDtDKFUpOyk7cmV0dXJuIGUoTyksQj1jLGorMX12YXIgdD0yPT09VS5sZW5ndGgmJiI9IiE9PU87aWYoL1tcd19cZFxzXS8udGVzdChPKXx8dCl7Zm9yKDtDKFUpOyk7cmV0dXJuIEI9YyxqfXJldHVybiBVLnB1c2goTyksUj1PLGorMX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgcixuLGk9MDs7KXtpZihyPWEuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgraSkuam9pbigiIikpLG49YVtyXSxyPT09LTEpe2lmKGktLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO249dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBlKG4pLEcrPW4ubGVuZ3RoLFU9VS5zbGljZShuLmxlbmd0aCksVS5sZW5ndGh9fWZ1bmN0aW9uIEkoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9YyxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIEQoKXtyZXR1cm4iLiI9PT1PPyhVLnB1c2goTyksQj12LFI9TyxqKzEpOi9bZUVdLy50ZXN0KE8pPyhVLnB1c2goTyksQj12LFI9TyxqKzEpOiJ4Ij09PU8mJjE9PT1VLmxlbmd0aCYmIjAiPT09VVswXT8oQj13LFUucHVzaChPKSxSPU8saisxKTovW15cZF0vLnRlc3QoTyk/KGUoVS5qb2luKCIiKSksQj1jLGopOihVLnB1c2goTyksUj1PLGorMSl9ZnVuY3Rpb24gUCgpe3JldHVybiJmIj09PU8mJihVLnB1c2goTyksUj1PLGorPTEpLC9bZUVdLy50ZXN0KE8pPyhVLnB1c2goTyksUj1PLGorMSk6Ii0iPT09TyYmL1tlRV0vLnRlc3QoUik/KFUucHVzaChPKSxSPU8saisxKTovW15cZF0vLnRlc3QoTyk/KGUoVS5qb2luKCIiKSksQj1jLGopOihVLnB1c2goTyksUj1PLGorMSl9ZnVuY3Rpb24geigpe2lmKC9bXlxkXHdfXS8udGVzdChPKSl7dmFyIHQ9VS5qb2luKCIiKTtyZXR1cm4gQj1KLmluZGV4T2YodCk+LTE/YjpaLmluZGV4T2YodCk+LTE/eTpnLGUoVS5qb2luKCIiKSksQj1jLGp9cmV0dXJuIFUucHVzaChPKSxSPU8saisxfXZhciBPLFIsRixqPTAsTj0wLEI9YyxVPVtdLFY9W10sSD0xLHE9MCxHPTAsWT0hMSxYPSExLFc9IiI7dD10fHx7fTt2YXIgWj1vLEo9aTtyZXR1cm4iMzAwIGVzIj09PXQudmVyc2lvbiYmKFo9bCxKPXMpLGZ1bmN0aW9uKHQpe3JldHVybiBWPVtdLG51bGwhPT10P3IodC5yZXBsYWNlP3QucmVwbGFjZSgvXHJcbi9nLCJcbiIpOnQpOm4oKX19ZS5leHBvcnRzPW47dmFyIGk9dCgiLi9saWIvbGl0ZXJhbHMiKSxhPXQoIi4vbGliL29wZXJhdG9ycyIpLG89dCgiLi9saWIvYnVpbHRpbnMiKSxzPXQoIi4vbGliL2xpdGVyYWxzLTMwMGVzIiksbD10KCIuL2xpYi9idWlsdGlucy0zMDBlcyIpLGM9OTk5LHU9OTk5OSxmPTAsaD0xLGQ9MixwPTMsbT00LHY9NSxnPTYseT03LGI9OCx4PTksXz0xMCx3PTExLE09WyJibG9jay1jb21tZW50IiwibGluZS1jb21tZW50IiwicHJlcHJvY2Vzc29yIiwib3BlcmF0b3IiLCJpbnRlZ2VyIiwiZmxvYXQiLCJpZGVudCIsImJ1aWx0aW4iLCJrZXl3b3JkIiwid2hpdGVzcGFjZSIsImVvZiIsImludGVnZXIiXX0seyIuL2xpYi9idWlsdGlucyI6Mjg4LCIuL2xpYi9idWlsdGlucy0zMDBlcyI6Mjg3LCIuL2xpYi9saXRlcmFscyI6MjkwLCIuL2xpYi9saXRlcmFscy0zMDBlcyI6Mjg5LCIuL2xpYi9vcGVyYXRvcnMiOjI5MX1dLDI4NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vYnVpbHRpbnMiKTtuPW4uc2xpY2UoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSxlLmV4cG9ydHM9bi5jb25jYXQoWyJnbF9WZXJ0ZXhJRCIsImdsX0luc3RhbmNlSUQiLCJnbF9Qb3NpdGlvbiIsImdsX1BvaW50U2l6ZSIsImdsX0ZyYWdDb29yZCIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfUG9pbnRDb29yZCIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWluUHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9EZXB0aFJhbmdlIiwidHJ1bmMiLCJyb3VuZCIsInJvdW5kRXZlbiIsImlzbmFuIiwiaXNpbmYiLCJmbG9hdEJpdHNUb0ludCIsImZsb2F0Qml0c1RvVWludCIsImludEJpdHNUb0Zsb2F0IiwidWludEJpdHNUb0Zsb2F0IiwicGFja1Nub3JtMngxNiIsInVucGFja1Nub3JtMngxNiIsInBhY2tVbm9ybTJ4MTYiLCJ1bnBhY2tVbm9ybTJ4MTYiLCJwYWNrSGFsZjJ4MTYiLCJ1bnBhY2tIYWxmMngxNiIsIm91dGVyUHJvZHVjdCIsInRyYW5zcG9zZSIsImRldGVybWluYW50IiwiaW52ZXJzZSIsInRleHR1cmUiLCJ0ZXh0dXJlU2l6ZSIsInRleHR1cmVQcm9qIiwidGV4dHVyZUxvZCIsInRleHR1cmVPZmZzZXQiLCJ0ZXhlbEZldGNoIiwidGV4ZWxGZXRjaE9mZnNldCIsInRleHR1cmVQcm9qT2Zmc2V0IiwidGV4dHVyZUxvZE9mZnNldCIsInRleHR1cmVQcm9qTG9kIiwidGV4dHVyZVByb2pMb2RPZmZzZXQiLCJ0ZXh0dXJlR3JhZCIsInRleHR1cmVHcmFkT2Zmc2V0IiwidGV4dHVyZVByb2pHcmFkIiwidGV4dHVyZVByb2pHcmFkT2Zmc2V0Il0pfSx7Ii4vYnVpbHRpbnMiOjI4OH1dLDI4ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImFicyIsImFjb3MiLCJhbGwiLCJhbnkiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjbGFtcCIsImNvcyIsImNyb3NzIiwiZEZkeCIsImRGZHkiLCJkZWdyZWVzIiwiZGlzdGFuY2UiLCJkb3QiLCJlcXVhbCIsImV4cCIsImV4cDIiLCJmYWNlZm9yd2FyZCIsImZsb29yIiwiZnJhY3QiLCJnbF9CYWNrQ29sb3IiLCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9CYWNrTGlnaHRQcm9kdWN0IiwiZ2xfQmFja01hdGVyaWFsIiwiZ2xfQmFja1NlY29uZGFyeUNvbG9yIiwiZ2xfQ2xpcFBsYW5lIiwiZ2xfQ2xpcFZlcnRleCIsImdsX0NvbG9yIiwiZ2xfRGVwdGhSYW5nZSIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRXllUGxhbmVRIiwiZ2xfRXllUGxhbmVSIiwiZ2xfRXllUGxhbmVTIiwiZ2xfRXllUGxhbmVUIiwiZ2xfRm9nIiwiZ2xfRm9nQ29vcmQiLCJnbF9Gb2dGcmFnQ29vcmQiLCJnbF9Gb2dQYXJhbWV0ZXJzIiwiZ2xfRnJhZ0NvbG9yIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJhZ0RhdGEiLCJnbF9GcmFnRGVwdGgiLCJnbF9GcmFnRGVwdGhFWFQiLCJnbF9Gcm9udENvbG9yIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfRnJvbnRMaWdodFByb2R1Y3QiLCJnbF9Gcm9udE1hdGVyaWFsIiwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciIsImdsX0xpZ2h0TW9kZWwiLCJnbF9MaWdodE1vZGVsUGFyYW1ldGVycyIsImdsX0xpZ2h0TW9kZWxQcm9kdWN0cyIsImdsX0xpZ2h0UHJvZHVjdHMiLCJnbF9MaWdodFNvdXJjZSIsImdsX0xpZ2h0U291cmNlUGFyYW1ldGVycyIsImdsX01hdGVyaWFsUGFyYW1ldGVycyIsImdsX01heENsaXBQbGFuZXMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTWF4TGlnaHRzIiwiZ2xfTWF4VGV4dHVyZUNvb3JkcyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZVVuaXRzIiwiZ2xfTWF4VmFyeWluZ0Zsb2F0cyIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTW9kZWxWaWV3TWF0cml4IiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9NdWx0aVRleENvb3JkMCIsImdsX011bHRpVGV4Q29vcmQxIiwiZ2xfTXVsdGlUZXhDb29yZDIiLCJnbF9NdWx0aVRleENvb3JkMyIsImdsX011bHRpVGV4Q29vcmQ0IiwiZ2xfTXVsdGlUZXhDb29yZDUiLCJnbF9NdWx0aVRleENvb3JkNiIsImdsX011bHRpVGV4Q29vcmQ3IiwiZ2xfTm9ybWFsIiwiZ2xfTm9ybWFsTWF0cml4IiwiZ2xfTm9ybWFsU2NhbGUiLCJnbF9PYmplY3RQbGFuZVEiLCJnbF9PYmplY3RQbGFuZVIiLCJnbF9PYmplY3RQbGFuZVMiLCJnbF9PYmplY3RQbGFuZVQiLCJnbF9Qb2ludCIsImdsX1BvaW50Q29vcmQiLCJnbF9Qb2ludFBhcmFtZXRlcnMiLCJnbF9Qb2ludFNpemUiLCJnbF9Qb3NpdGlvbiIsImdsX1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX1NlY29uZGFyeUNvbG9yIiwiZ2xfVGV4Q29vcmQiLCJnbF9UZXh0dXJlRW52Q29sb3IiLCJnbF9UZXh0dXJlTWF0cml4IiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2UiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2UiLCJnbF9WZXJ0ZXgiLCJncmVhdGVyVGhhbiIsImdyZWF0ZXJUaGFuRXF1YWwiLCJpbnZlcnNlc3FydCIsImxlbmd0aCIsImxlc3NUaGFuIiwibGVzc1RoYW5FcXVhbCIsImxvZyIsImxvZzIiLCJtYXRyaXhDb21wTXVsdCIsIm1heCIsIm1pbiIsIm1peCIsIm1vZCIsIm5vcm1hbGl6ZSIsIm5vdCIsIm5vdEVxdWFsIiwicG93IiwicmFkaWFucyIsInJlZmxlY3QiLCJyZWZyYWN0Iiwic2lnbiIsInNpbiIsInNtb290aHN0ZXAiLCJzcXJ0Iiwic3RlcCIsInRhbiIsInRleHR1cmUyRCIsInRleHR1cmUyRExvZCIsInRleHR1cmUyRFByb2oiLCJ0ZXh0dXJlMkRQcm9qTG9kIiwidGV4dHVyZUN1YmUiLCJ0ZXh0dXJlQ3ViZUxvZCIsInRleHR1cmUyRExvZEVYVCIsInRleHR1cmUyRFByb2pMb2RFWFQiLCJ0ZXh0dXJlQ3ViZUxvZEVYVCIsInRleHR1cmUyREdyYWRFWFQiLCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsInRleHR1cmVDdWJlR3JhZEVYVCJdfSx7fV0sMjg5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saXRlcmFscyIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFsibGF5b3V0IiwiY2VudHJvaWQiLCJzbW9vdGgiLCJjYXNlIiwibWF0MngyIiwibWF0MngzIiwibWF0Mng0IiwibWF0M3gyIiwibWF0M3gzIiwibWF0M3g0IiwibWF0NHgyIiwibWF0NHgzIiwibWF0NHg0IiwidWludCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjI5MH1dLDI5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ2b2lkIiwiYm9vbCIsInRydWUiLCJmYWxzZSIsImRpc2NhcmQiLCJyZXR1cm4iLCJtYXQyIiwibWF0MyIsIm1hdDQiLCJ2ZWMyIiwidmVjMyIsInZlYzQiLCJpdmVjMiIsIml2ZWMzIiwiaXZlYzQiLCJidmVjMiIsImJ2ZWMzIiwiYnZlYzQiLCJzYW1wbGVyMUQiLCJzYW1wbGVyMkQiLCJzYW1wbGVyM0QiLCJzYW1wbGVyQ3ViZSIsInNhbXBsZXIxRFNoYWRvdyIsInNhbXBsZXIyRFNoYWRvdyIsInN0cnVjdCIsImFzbSIsImNsYXNzIiwidW5pb24iLCJlbnVtIiwidHlwZWRlZiIsInRlbXBsYXRlIiwidGhpcyIsInBhY2tlZCIsImdvdG8iLCJzd2l0Y2giLCJkZWZhdWx0IiwiaW5saW5lIiwibm9pbmxpbmUiLCJ2b2xhdGlsZSIsInB1YmxpYyIsInN0YXRpYyIsImV4dGVybiIsImV4dGVybmFsIiwiaW50ZXJmYWNlIiwibG9uZyIsInNob3J0IiwiZG91YmxlIiwiaGFsZiIsImZpeGVkIiwidW5zaWduZWQiLCJpbnB1dCIsIm91dHB1dCIsImh2ZWMyIiwiaHZlYzMiLCJodmVjNCIsImR2ZWMyIiwiZHZlYzMiLCJkdmVjNCIsImZ2ZWMyIiwiZnZlYzMiLCJmdmVjNCIsInNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyM0RSZWN0Iiwic2FtcGxlcjJEUmVjdFNoYWRvdyIsInNpemVvZiIsImNhc3QiLCJuYW1lc3BhY2UiLCJ1c2luZyJdfSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiPDw9IiwiPj49IiwiKysiLCItLSIsIjw8IiwiPj4iLCI8PSIsIj49IiwiPT0iLCIhPSIsIiYmIiwifHwiLCIrPSIsIi09IiwiKj0iLCIvPSIsIiU9IiwiJj0iLCJeXiIsIl49IiwifD0iLCIoIiwiKSIsIlsiLCJdIiwiLiIsIiEiLCJ+IiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8IiwiPiIsIiYiLCJeIiwifCIsIj8iLCI6IiwiPSIsIiwiLCI7IiwieyIsIn0iXX0se31dLDI5MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pKGUpLG49W107cmV0dXJuIG49bi5jb25jYXQocih0KSksbj1uLmNvbmNhdChyKG51bGwpKX12YXIgaT10KCIuL2luZGV4Iik7ZS5leHBvcnRzPW59LHsiLi9pbmRleCI6Mjg2fV0sMjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGE9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1hWzBdLGU9YVsxXSxyPWFbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgbz0wO288dGhpcy5kKnRoaXMuZDtvKyspe3ZhciBzPWFbaStvXSxsPWFbaStvKzFdO24ucHVzaChzPT09bD9udWxsOmEuc3ViYXJyYXkocyxsKSl9dmFyIGM9YVtpK24ubGVuZ3RoXSx1PWFbaStuLmxlbmd0aCsxXTt0aGlzLmtleXM9YS5zdWJhcnJheShjLHUpLHRoaXMuYmJveGVzPWEuc3ViYXJyYXkodSksdGhpcy5pbnNlcnQ9dGhpcy5faW5zZXJ0UmVhZG9ubHl9ZWxzZXt0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBmPTA7Zjx0aGlzLmQqdGhpcy5kO2YrKyluLnB1c2goW10pO3RoaXMua2V5cz1bXSx0aGlzLmJib3hlcz1bXX10aGlzLm49ZSx0aGlzLmV4dGVudD10LHRoaXMucGFkZGluZz1yLHRoaXMuc2NhbGU9ZS90LHRoaXMudWlkPTA7dmFyIGg9ci9lKnQ7dGhpcy5taW49LWgsdGhpcy5tYXg9dCtofWUuZXhwb3J0cz1uO3ZhciBpPTM7bi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LG4ucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seT1mdW5jdGlvbigpe3Rocm93IkNhbm5vdCBpbnNlcnQgaW50byBhIEdyaWRJbmRleCBjcmVhdGVkIGZyb20gYW4gQXJyYXlCdWZmZXIuIn0sbi5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5taW4sYT10aGlzLm1heDtpZih0PD1pJiZlPD1pJiZhPD1yJiZhPD1uKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBvPVtdLHM9e307cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8scyksb30sbi5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10aGlzLmNlbGxzW2ldO2lmKG51bGwhPT1zKWZvcih2YXIgbD10aGlzLmtleXMsYz10aGlzLmJib3hlcyx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBmPXNbdV07aWYodm9pZCAwPT09b1tmXSl7dmFyIGg9NCpmO3Q8PWNbaCsyXSYmZTw9Y1toKzNdJiZyPj1jW2grMF0mJm4+PWNbaCsxXT8ob1tmXT0hMCxhLnB1c2gobFtmXSkpOm9bZl09ITF9fX0sbi5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksZj1zO2Y8PWM7ZisrKWZvcih2YXIgaD1sO2g8PXU7aCsrKXt2YXIgZD10aGlzLmQqaCtmO2lmKGkuY2FsbCh0aGlzLHQsZSxyLG4sZCxhLG8pKXJldHVybn19LG4ucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSxuLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJheUJ1ZmZlcilyZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtmb3IodmFyIHQ9dGhpcy5jZWxscyxlPWkrdGhpcy5jZWxscy5sZW5ndGgrMSsxLHI9MCxuPTA7bjx0aGlzLmNlbGxzLmxlbmd0aDtuKyspcis9dGhpcy5jZWxsc1tuXS5sZW5ndGg7dmFyIGE9bmV3IEludDMyQXJyYXkoZStyK3RoaXMua2V5cy5sZW5ndGgrdGhpcy5iYm94ZXMubGVuZ3RoKTthWzBdPXRoaXMuZXh0ZW50LGFbMV09dGhpcy5uLGFbMl09dGhpcy5wYWRkaW5nO2Zvcih2YXIgbz1lLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTthW2krc109byxhLnNldChsLG8pLG8rPWwubGVuZ3RofXJldHVybiBhW2krdC5sZW5ndGhdPW8sYS5zZXQodGhpcy5rZXlzLG8pLG8rPXRoaXMua2V5cy5sZW5ndGgsYVtpK3QubGVuZ3RoKzFdPW8sYS5zZXQodGhpcy5iYm94ZXMsbyksbys9dGhpcy5iYm94ZXMubGVuZ3RoLGEuYnVmZmVyfX0se31dLDI5NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJpcy1icm93c2VyIik7bj0iZnVuY3Rpb24iPT10eXBlb2Ygci5tYXRjaE1lZGlhPyFyLm1hdGNoTWVkaWEoIihob3Zlcjogbm9uZSkiKS5tYXRjaGVzOmksZS5leHBvcnRzPW59KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiaXMtYnJvd3NlciI6MzAxfV0sMjk1OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEsZD10W2UrZl07Zm9yKGYrPWgsYT1kJigxPDwtdSktMSxkPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKGQ/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihkPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsZj11Pj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDphLTEscD1uPzE6LTEsbT1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSxlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpLGUqbD49MiYmKG8rKyxsLz0yKSxvK2Y+PXU/KHM9MCxvPXUpOm8rZj49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9Zik6KHM9ZSpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitkXT0yNTUmcyxkKz1wLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK2RdPTI1NSZvLGQrPXAsby89MjU2LGMtPTgpO3RbcitkLXBdfD0xMjgqbX19LHt9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVsiZnVuY3Rpb24gb3JpZW50KCl7dmFyIHR1cGxlPXRoaXMudHVwbGU7cmV0dXJuIHRlc3QoIl0scj0wO3I8PXQ7KytyKXI+MCYmZS5wdXNoKCIsIiksZS5wdXNoKCJ0dXBsZVsiLHIsIl0iKTtlLnB1c2goIil9cmV0dXJuIG9yaWVudCIpO3ZhciBuPW5ldyBGdW5jdGlvbigidGVzdCIsZS5qb2luKCIiKSksaT1jW3QrMV07cmV0dXJuIGl8fChpPWMpLG4oaSl9ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5kaW1lbnNpb249dCx0aGlzLnZlcnRpY2VzPWUsdGhpcy5zaW1wbGljZXM9cix0aGlzLmludGVyaW9yPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmJvdW5kYXJ5fSksdGhpcy50dXBsZT1uZXcgQXJyYXkodCsxKTtmb3IodmFyIG49MDtuPD10Oysrbil0aGlzLnR1cGxlW25dPXRoaXMudmVydGljZXNbbl07dmFyIGk9Zlt0XTtpfHwoaT1mW3RdPW8odCkpLHRoaXMub3JpZW50PWl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcigiTXVzdCBpbnB1dCBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIGE9dC5zbGljZSgwLGkrMSksbz1jLmFwcGx5KHZvaWQgMCxhKTtpZigwPT09byl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uIik7Zm9yKHZhciBsPW5ldyBBcnJheShpKzEpLHU9MDt1PD1pOysrdSlsW3VdPXU7bzwwJiYobFswXT0xLGxbMV09MCk7Zm9yKHZhciBmPW5ldyBuKGwsbmV3IEFycmF5KGkrMSksITEpLGg9Zi5hZGphY2VudCxkPW5ldyBBcnJheShpKzIpLHU9MDt1PD1pOysrdSl7Zm9yKHZhciBwPWwuc2xpY2UoKSxtPTA7bTw9aTsrK20pbT09PXUmJihwW21dPS0xKTt2YXIgdj1wWzBdO3BbMF09cFsxXSxwWzFdPXY7dmFyIGc9bmV3IG4ocCxuZXcgQXJyYXkoaSsxKSwhMCk7aFt1XT1nLGRbdV09Z31kW2krMV09Zjtmb3IodmFyIHU9MDt1PD1pOysrdSlmb3IodmFyIHA9aFt1XS52ZXJ0aWNlcyx5PWhbdV0uYWRqYWNlbnQsbT0wO208PWk7KyttKXt2YXIgYj1wW21dO2lmKGI8MCl5W21dPWY7ZWxzZSBmb3IodmFyIHg9MDt4PD1pOysreCloW3hdLnZlcnRpY2VzLmluZGV4T2YoYik8MCYmKHlbbV09aFt4XSl9Zm9yKHZhciBfPW5ldyBzKGksYSxkKSx3PSEhZSx1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX1lLmV4cG9ydHM9bDt2YXIgYz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSx1PXQoInNpbXBsaWNpYWwtY29tcGxleCIpLmNvbXBhcmVDZWxscztuLnByb3RvdHlwZS5mbGlwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlc1swXTt0aGlzLnZlcnRpY2VzWzBdPXRoaXMudmVydGljZXNbMV0sCnRoaXMudmVydGljZXNbMV09dDt2YXIgZT10aGlzLmFkamFjZW50WzBdO3RoaXMuYWRqYWNlbnRbMF09dGhpcy5hZGphY2VudFsxXSx0aGlzLmFkamFjZW50WzFdPWV9O3ZhciBmPVtdLGg9cy5wcm90b3R5cGU7aC5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7dD1vLnBvcCgpO2Zvcih2YXIgcz0odC52ZXJ0aWNlcyx0LmFkamFjZW50KSxsPTA7bDw9cjsrK2wpe3ZhciBjPXNbbF07aWYoYy5ib3VuZGFyeSYmIShjLmxhc3RWaXNpdGVkPD0tbikpe2Zvcih2YXIgdT1jLnZlcnRpY2VzLGY9MDtmPD1yOysrZil7dmFyIGg9dVtmXTtpW2ZdPWg8MD9lOmFbaF19dmFyIGQ9dGhpcy5vcmllbnQoKTtpZihkPjApcmV0dXJuIGM7Yy5sYXN0VmlzaXRlZD0tbiwwPT09ZCYmby5wdXNoKGMpfX19cmV0dXJuIG51bGx9LGgud2Fsaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsYT10aGlzLnR1cGxlLG89ZT90aGlzLmludGVyaW9yLmxlbmd0aCpNYXRoLnJhbmRvbSgpfDA6dGhpcy5pbnRlcmlvci5sZW5ndGgtMSxzPXRoaXMuaW50ZXJpb3Jbb107dDpmb3IoOyFzLmJvdW5kYXJ5Oyl7Zm9yKHZhciBsPXMudmVydGljZXMsYz1zLmFkamFjZW50LHU9MDt1PD1uOysrdSlhW3VdPWlbbFt1XV07cy5sYXN0VmlzaXRlZD1yO2Zvcih2YXIgdT0wO3U8PW47Kyt1KXt2YXIgZj1jW3VdO2lmKCEoZi5sYXN0VmlzaXRlZD49cikpe3ZhciBoPWFbdV07YVt1XT10O3ZhciBkPXRoaXMub3JpZW50KCk7aWYoYVt1XT1oLGQ8MCl7cz1mO2NvbnRpbnVlIHR9Zi5ib3VuZGFyeT9mLmxhc3RWaXNpdGVkPS1yOmYubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSxoLmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxvPXRoaXMuZGltZW5zaW9uLHM9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsZj1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGg9W107Zi5sZW5ndGg+MDspe3ZhciBlPWYucG9wKCksZD1lLnZlcnRpY2VzLHA9ZS5hZGphY2VudCxtPWQuaW5kZXhPZihyKTtpZighKG08MCkpZm9yKHZhciB2PTA7djw9bzsrK3YpaWYodiE9PW0pe3ZhciBnPXBbdl07aWYoZy5ib3VuZGFyeSYmIShnLmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9Zy52ZXJ0aWNlcztpZihnLmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgYj0wLHg9MDt4PD1vOysreCl5W3hdPDA/KGI9eCxsW3hdPXQpOmxbeF09c1t5W3hdXTt2YXIgXz10aGlzLm9yaWVudCgpO2lmKF8+MCl7eVtiXT1yLGcuYm91bmRhcnk9ITEsYy5wdXNoKGcpLGYucHVzaChnKSxnLmxhc3RWaXNpdGVkPXI7Y29udGludWV9Zy5sYXN0VmlzaXRlZD0tcn12YXIgdz1nLmFkamFjZW50LE09ZC5zbGljZSgpLFQ9cC5zbGljZSgpLGs9bmV3IG4oTSxULCEwKTt1LnB1c2goayk7dmFyIEE9dy5pbmRleE9mKGUpO2lmKCEoQTwwKSl7d1tBXT1rLFRbbV09ZyxNW3ZdPS0xLFRbdl09ZSxwW3ZdPWssay5mbGlwKCk7Zm9yKHZhciB4PTA7eDw9bzsrK3gpe3ZhciBFPU1beF07aWYoIShFPDB8fEU9PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShvLTEpLEw9MCxDPTA7Qzw9bzsrK0Mpe3ZhciBJPU1bQ107STwwfHxDPT09eHx8KFNbTCsrXT1JKX1oLnB1c2gobmV3IGkoUyxrLHgpKX19fX19fWguc29ydChhKTtmb3IodmFyIHY9MDt2KzE8aC5sZW5ndGg7dis9Mil7dmFyIEQ9aFt2XSxQPWhbdisxXSx6PUQuaW5kZXgsTz1QLmluZGV4O3o8MHx8TzwwfHwoRC5jZWxsLmFkamFjZW50W0QuaW5kZXhdPVAuY2VsbCxQLmNlbGwuYWRqYWNlbnRbUC5pbmRleF09RC5jZWxsKX19LGguaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcztyLnB1c2godCk7dmFyIG49dGhpcy53YWxrKHQsZSk7aWYobil7Zm9yKHZhciBpPXRoaXMuZGltZW5zaW9uLGE9dGhpcy50dXBsZSxvPTA7bzw9aTsrK28pe3ZhciBzPW4udmVydGljZXNbb107YVtvXT1zPDA/dDpyW3NdfXZhciBsPXRoaXMub3JpZW50KGEpO2w8MHx8KDAhPT1sfHwobj10aGlzLmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeShuLHQpKSkmJnRoaXMuYWRkUGVha3ModCxuKX19LGguYm91bmRhcnk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5kaW1lbnNpb24sZT1bXSxyPXRoaXMuc2ltcGxpY2VzLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBhPXJbaV07aWYoYS5ib3VuZGFyeSl7Zm9yKHZhciBvPW5ldyBBcnJheSh0KSxzPWEudmVydGljZXMsbD0wLGM9MCx1PTA7dTw9dDsrK3Upc1t1XT49MD9vW2wrK109c1t1XTpjPTEmdTtpZihjPT09KDEmdCkpe3ZhciBmPW9bMF07b1swXT1vWzFdLG9bMV09Zn1lLnB1c2gobyl9fXJldHVybiBlfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUxNywic2ltcGxpY2lhbC1jb21wbGV4Ijo1Mjh9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0se31dLDI5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dGhpcy5taWQ9dCx0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXIsdGhpcy5sZWZ0UG9pbnRzPW4sdGhpcy5yaWdodFBvaW50cz1pLHRoaXMuY291bnQ9KGU/ZS5jb3VudDowKSsocj9yLmNvdW50OjApK24ubGVuZ3RofWZ1bmN0aW9uIGkodCxlKXt0Lm1pZD1lLm1pZCx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0LmxlZnRQb2ludHM9ZS5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ZS5yaWdodFBvaW50cyx0LmNvdW50PWUuY291bnR9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXAoZSk7dC5taWQ9ci5taWQsdC5sZWZ0PXIubGVmdCx0LnJpZ2h0PXIucmlnaHQsdC5sZWZ0UG9pbnRzPXIubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPXIucmlnaHRQb2ludHMsdC5jb3VudD1yLmNvdW50fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LmludGVydmFscyhbXSk7ci5wdXNoKGUpLGEodCxyKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pLG49ci5pbmRleE9mKGUpO3JldHVybiBuPDA/eTooci5zcGxpY2UobiwxKSxhKHQsciksYil9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmdFtuXVswXTw9ZTsrK24pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmdFtuXVsxXT49ZTstLW4pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj1lKHRbcl0pO2lmKG4pcmV0dXJuIG59fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLWVbMF07cmV0dXJuIHI/cjp0WzFdLWVbMV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXRbMV0tZVsxXTtyZXR1cm4gcj9yOnRbMF0tZVswXX1mdW5jdGlvbiBwKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChmKTtmb3IodmFyIGk9ZVtlLmxlbmd0aD4+MV0sYT1bXSxvPVtdLHM9W10scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08aT9hLnB1c2gobCk6aTxsWzBdP28ucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KGgpLHUuc29ydChkKSxuZXcgbihpLHAoYSkscChvKSxjLHUpfWZ1bmN0aW9uIG0odCl7dGhpcy5yb290PXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IG0odCYmMCE9PXQubGVuZ3RoP3AodCk6bnVsbCl9dmFyIGc9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx5PTAsYj0xO2UuZXhwb3J0cz12O3ZhciB4PW4ucHJvdG90eXBlO3guaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSx4Lmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9cChbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD1wKFt0XSk7ZWxzZXt2YXIgcj1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGgpLG49Zy5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsZCk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UobiwwLHQpfX0seC5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZCl7aWYoIXRoaXMubGVmdClyZXR1cm4geTtpZig0Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMubGVmdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1yPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLGIpOihyPT09YiYmKHRoaXMuY291bnQtPTEpLHIpfWlmKHRbMF0+dGhpcy5taWQpe2lmKCF0aGlzLnJpZ2h0KXJldHVybiB5O2lmKDQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMucmlnaHQucmVtb3ZlKHQpO3JldHVybiAyPT09cj8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYik6KHI9PT1iJiYodGhpcy5jb3VudC09MSkscil9aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/Mjp5O2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgbj10aGlzLGE9dGhpcy5sZWZ0O2EucmlnaHQ7KW49YSxhPWEucmlnaHQ7aWYobj09PXRoaXMpYS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIG89dGhpcy5sZWZ0LHI9dGhpcy5yaWdodDtuLmNvdW50LT1hLmNvdW50LG4ucmlnaHQ9YS5sZWZ0LGEubGVmdD1vLGEucmlnaHQ9cn1pKHRoaXMsYSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/aSh0aGlzLHRoaXMubGVmdCk6aSh0aGlzLHRoaXMucmlnaHQpO3JldHVybiBifWZvcih2YXIgbz1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGgpO288dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW29dWzBdPT09dFswXTsrK28paWYodGhpcy5sZWZ0UG9pbnRzW29dPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKG8sMSk7Zm9yKHZhciByPWcuZ2UodGhpcy5yaWdodFBvaW50cyx0LGQpO3I8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbcl1bMV09PT10WzFdOysrcilpZih0aGlzLnJpZ2h0UG9pbnRzW3JdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UociwxKSxifXJldHVybiB5fSx4LnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpe3ZhciByPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSk7aWYocilyZXR1cm4gcn1yZXR1cm4gbCh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXtpZih0aGlzLnJpZ2h0KXt2YXIgcj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKTtpZihyKXJldHVybiByfXJldHVybiBjKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gdSh0aGlzLmxlZnRQb2ludHMsZSl9LHgucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0KXt2YXIgbj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscik7aWYobilyZXR1cm4gbn1pZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0KXt2YXIgbj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpO2lmKG4pcmV0dXJuIG59cmV0dXJuIGU8dGhpcy5taWQ/bCh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP2ModGhpcy5yaWdodFBvaW50cyx0LHIpOnUodGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgXz1tLnByb3RvdHlwZTtfLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IG4odFswXSxudWxsLG51bGwsW3RdLFt0XSl9LF8ucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksZSE9PXl9cmV0dXJuITF9LF8ucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0sXy5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6Njd9XSwyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX1lLmV4cG9ydHM9bn0se31dLDMwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDMwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKG51bGw9PXR8fCEodC5faXNCdWZmZXJ8fHQuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHQpKSl9fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCh0PW5hdmlnYXRvci51c2VyQWdlbnQpLHQmJnQuaGVhZGVycyYmInN0cmluZyI9PXR5cGVvZiB0LmhlYWRlcnNbInVzZXItYWdlbnQiXSYmKHQ9dC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0pLCJzdHJpbmciPT10eXBlb2YgdCYmKC8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2kudGVzdCh0KXx8LzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1wtKG58dSl8YzU1XC98Y2FwaXxjY3dhfGNkbVwtfGNlbGx8Y2h0bXxjbGRjfGNtZFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXC01fGdcLW1vfGdvKFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFwtKG18cHx0KXxoZWlcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXC1jfGh0KGMoXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XC18XC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XC8pfGtsb258a3B0IHxrd2NcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XC8oa3xsfHUpfDUwfDU0fFwtW2Etd10pfGxpYnd8bHlueHxtMVwtd3xtM2dhfG01MFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XC1nfHFhXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFwtWzItN118aVwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXC18b298cFwtKXxzZGtcL3xzZShjKFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFwtfHNoYXJ8c2llKFwtfG0pfHNrXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcLXx2XC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcLXx0ZGdcLXx0ZWwoaXxtKXx0aW1cLXx0XC1tb3x0byhwbHxzaCl8dHMoNzB8bVwtfG0zfG01KXx0eFwtOXx1cChcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcLXx5b3VyfHpldG98enRlXC0vaS50ZXN0KHQuc3Vic3RyKDAsNCkpKX1lLmV4cG9ydHM9bn0se31dLDMwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PW4uY2FsbCh0KSYmKG51bGw9PT0oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpfHxlPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSl9fSx7fV0sMzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhKXtyZXR1cm4gbmV3IGkodCxlLHIsbixhKX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7ZT1lfHxhLHI9cnx8byxpPWl8fEFycmF5LHRoaXMubm9kZVNpemU9bnx8NjQsdGhpcy5wb2ludHM9dCx0aGlzLmlkcz1uZXcgaSh0Lmxlbmd0aCksdGhpcy5jb29yZHM9bmV3IGkoMip0Lmxlbmd0aCk7Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspdGhpcy5pZHNbbF09bCx0aGlzLmNvb3Jkc1syKmxdPWUodFtsXSksdGhpcy5jb29yZHNbMipsKzFdPXIodFtsXSk7cyh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0aGlzLm5vZGVTaXplLDAsdGhpcy5pZHMubGVuZ3RoLTEsMCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBvKHQpe3JldHVybiB0WzFdfXZhciBzPXQoIi4vc29ydCIpLGw9dCgiLi9yYW5nZSIpLGM9dCgiLi93aXRoaW4iKTtlLmV4cG9ydHM9bixpLnByb3RvdHlwZT17cmFuZ2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGwodGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sd2l0aGluOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYyh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscix0aGlzLm5vZGVTaXplKX19fSx7Ii4vcmFuZ2UiOjMwNiwiLi9zb3J0IjozMDcsIi4vd2l0aGluIjozMDh9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBmPWMucG9wKCksaD1jLnBvcCgpLGQ9Yy5wb3AoKTtpZihoLWQ8PW8pZm9yKHZhciBwPWQ7cDw9aDtwKyspcz1lWzIqcF0sbD1lWzIqcCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtwXSk7ZWxzZXt2YXIgbT1NYXRoLmZsb29yKChkK2gpLzIpO3M9ZVsyKm1dLGw9ZVsyKm0rMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbbV0pO3ZhciB2PShmKzEpJTI7KDA9PT1mP3I8PXM6bjw9bCkmJihjLnB1c2goZCksYy5wdXNoKG0tMSksYy5wdXNoKHYpKSwoMD09PWY/aT49czphPj1sKSYmKGMucHVzaChtKzEpLGMucHVzaChoKSxjLnB1c2godikpfX1yZXR1cm4gdX1lLmV4cG9ydHM9bn0se31dLDMwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLGEsbyxzKXtpZighKG8tYTw9cikpe3ZhciBsPU1hdGguZmxvb3IoKGErbykvMik7aSh0LGUsbCxhLG8scyUyKSxuKHQsZSxyLGEsbC0xLHMrMSksbih0LGUscixsKzEsbyxzKzEpfX1mdW5jdGlvbiBpKHQsZSxyLG4sbyxzKXtmb3IoO28+bjspe2lmKG8tbj42MDApe3ZhciBsPW8tbisxLGM9ci1uKzEsdT1NYXRoLmxvZyhsKSxmPS41Kk1hdGguZXhwKDIqdS8zKSxoPS41Kk1hdGguc3FydCh1KmYqKGwtZikvbCkqKGMtbC8yPDA/LTE6MSk7aSh0LGUscixNYXRoLm1heChuLE1hdGguZmxvb3Ioci1jKmYvbCtoKSksTWF0aC5taW4obyxNYXRoLmZsb29yKHIrKGwtYykqZi9sK2gpKSxzKX12YXIgZD1lWzIqcitzXSxwPW4sbT1vO2ZvcihhKHQsZSxuLHIpLGVbMipvK3NdPmQmJmEodCxlLG4sbyk7cDxtOyl7Zm9yKGEodCxlLHAsbSkscCsrLG0tLTtlWzIqcCtzXTxkOylwKys7Zm9yKDtlWzIqbStzXT5kOyltLS19ZVsyKm4rc109PT1kP2EodCxlLG4sbSk6KG0rKyxhKHQsZSxtLG8pKSxtPD1yJiYobj1tKzEpLHI8PW0mJihvPW0tMSl9fWZ1bmN0aW9uIGEodCxlLHIsbil7byh0LHIsbiksbyhlLDIqciwyKm4pLG8oZSwyKnIrMSwyKm4rMSl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWUuZXhwb3J0cz1ufSx7fV0sMzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhLG8pe2Zvcih2YXIgcz1bMCx0Lmxlbmd0aC0xLDBdLGw9W10sYz1hKmE7cy5sZW5ndGg7KXt2YXIgdT1zLnBvcCgpLGY9cy5wb3AoKSxoPXMucG9wKCk7aWYoZi1oPD1vKWZvcih2YXIgZD1oO2Q8PWY7ZCsrKWkoZVsyKmRdLGVbMipkKzFdLHIsbik8PWMmJmwucHVzaCh0W2RdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGgrZikvMiksbT1lWzIqcF0sdj1lWzIqcCsxXTtpKG0sdixyLG4pPD1jJiZsLnB1c2godFtwXSk7dmFyIGc9KHUrMSklMjsoMD09PXU/ci1hPD1tOm4tYTw9dikmJihzLnB1c2goaCkscy5wdXNoKHAtMSkscy5wdXNoKGcpKSwoMD09PXU/cithPj1tOm4rYT49dikmJihzLnB1c2gocCsxKSxzLnB1c2goZikscy5wdXNoKGcpKX19cmV0dXJuIGx9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT10LXIsYT1lLW47cmV0dXJuIGkqaSthKmF9ZS5leHBvcnRzPW59LHt9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9ZS5leHBvcnRzPW59LHt9XSwzMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByO2lmKGYodCkpe3ZhciBsLGM9dC5zdG9wcyYmIm9iamVjdCI9PXR5cGVvZiB0LnN0b3BzWzBdWzBdLHU9Y3x8dm9pZCAwIT09dC5wcm9wZXJ0eSxoPWN8fCF1LGQ9dC50eXBlfHxlfHwiZXhwb25lbnRpYWwiO2lmKCJleHBvbmVudGlhbCI9PT1kKWw9bztlbHNlIGlmKCJpbnRlcnZhbCI9PT1kKWw9YTtlbHNlIGlmKCJjYXRlZ29yaWNhbCI9PT1kKWw9aTtlbHNle2lmKCJpZGVudGl0eSIhPT1kKXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlICInK2QrJyInKTtsPXN9aWYoYyl7Zm9yKHZhciBwPXt9LG09W10sdj0wO3Y8dC5zdG9wcy5sZW5ndGg7disrKXt2YXIgZz10LnN0b3BzW3ZdO3ZvaWQgMD09PXBbZ1swXS56b29tXSYmKHBbZ1swXS56b29tXT17em9vbTpnWzBdLnpvb20sdHlwZTp0LnR5cGUscHJvcGVydHk6dC5wcm9wZXJ0eSxzdG9wczpbXX0pLHBbZ1swXS56b29tXS5zdG9wcy5wdXNoKFtnWzBdLnZhbHVlLGdbMV1dKX1mb3IodmFyIHkgaW4gcCltLnB1c2goW3BbeV0uem9vbSxuKHBbeV0pXSk7cj1mdW5jdGlvbihlLHIpe3JldHVybiBvKHtzdG9wczptLGJhc2U6dC5iYXNlfSxlKShlLHIpfSxyLmlzRmVhdHVyZUNvbnN0YW50PSExLHIuaXNab29tQ29uc3RhbnQ9ITF9ZWxzZSBoPyhyPWZ1bmN0aW9uKGUpe3JldHVybiBsKHQsZSl9LHIuaXNGZWF0dXJlQ29uc3RhbnQ9ITAsci5pc1pvb21Db25zdGFudD0hMSk6KHI9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbCh0LHJbdC5wcm9wZXJ0eV0pfSxyLmlzRmVhdHVyZUNvbnN0YW50PSExLHIuaXNab29tQ29uc3RhbnQ9ITApfWVsc2Ugcj1mdW5jdGlvbigpe3JldHVybiB0fSxyLmlzRmVhdHVyZUNvbnN0YW50PSEwLHIuaXNab29tQ29uc3RhbnQ9ITA7cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5zdG9wcy5sZW5ndGg7cisrKWlmKGU9PT10LnN0b3BzW3JdWzBdKXJldHVybiB0LnN0b3BzW3JdWzFdO3JldHVybiB0LnN0b3BzWzBdWzFdfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQuc3RvcHMubGVuZ3RoJiYhKGU8dC5zdG9wc1tyXVswXSk7cisrKTtyZXR1cm4gdC5zdG9wc1tNYXRoLm1heChyLTEsMCldWzFdfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09dC5iYXNlP3QuYmFzZToxLG49MDs7KXtpZihuPj10LnN0b3BzLmxlbmd0aClicmVhaztpZihlPD10LnN0b3BzW25dWzBdKWJyZWFrO24rK31yZXR1cm4gMD09PW4/dC5zdG9wc1tuXVsxXTpuPT09dC5zdG9wcy5sZW5ndGg/dC5zdG9wc1tuLTFdWzFdOmwoZSxyLHQuc3RvcHNbbi0xXVswXSx0LnN0b3BzW25dWzBdLHQuc3RvcHNbbi0xXVsxXSx0LnN0b3BzW25dWzFdKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbCh0LGUscixuLGksYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGk/ZnVuY3Rpb24oKXt2YXIgbz1pLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpLHM9YS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKTtyZXR1cm4gbCh0LGUscixuLG8scyl9OmkubGVuZ3RoP3UodCxlLHIsbixpLGEpOmModCxlLHIsbixpLGEpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvLHM9bi1yLGw9dC1yO3JldHVybiBvPTE9PT1lP2wvczooTWF0aC5wb3coZSxsKS0xKS8oTWF0aC5wb3coZSxzKS0xKSxpKigxLW8pK2Eqb31mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wO3M8aS5sZW5ndGg7cysrKW9bc109Yyh0LGUscixuLGlbc10sYVtzXSk7cmV0dXJuIG99ZnVuY3Rpb24gZih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0LnN0b3BzfHwiaWRlbnRpdHkiPT09dC50eXBlKX1lLmV4cG9ydHMuaXNGdW5jdGlvbkRlZmluaXRpb249ZixlLmV4cG9ydHMuaW50ZXJwb2xhdGVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsImV4cG9uZW50aWFsIil9LGUuZXhwb3J0c1sicGllY2V3aXNlLWNvbnN0YW50Il09ZnVuY3Rpb24odCl7cmV0dXJuIG4odCwiaW50ZXJ2YWwiKX19LHt9XSwzMTE6W2Z1bmN0aW9uKHQsZSxyKXt0KCJwYXRoIik7ZS5leHBvcnRzPXtkZWJ1Zzp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGxvd3AgdmVjNCB1X2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjtcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3Bvcywgc3RlcCgzMjc2Ny4wLCBhX3Bvcy54KSwgMSk7XG59XG4ifSxmaWxsOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxjaXJjbGU6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xudmFyeWluZyBsb3dwIGZsb2F0IHZfYW50aWFsaWFzYmx1cjtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZmxvYXQgdCA9IHNtb290aHN0ZXAoMS4wIC0gbWF4KGJsdXIsIHZfYW50aWFsaWFzYmx1ciksIDEuMCwgbGVuZ3RoKHZfZXh0cnVkZSkpO1xuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKDEuMCAtIHQpICogb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7XG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xudW5pZm9ybSBmbG9hdCB1X2RldmljZXBpeGVscmF0aW87XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG52YXJ5aW5nIGxvd3AgZmxvYXQgdl9hbnRpYWxpYXNibHVyO1xuXG52b2lkIG1haW4odm9pZCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxuICAgIHZfZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcblxuICAgIHZlYzIgZXh0cnVkZSA9IHZfZXh0cnVkZSAqIHJhZGl1cyAqIHVfZXh0cnVkZV9zY2FsZTtcbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGZsb29yKGFfcG9zICogMC41KSwgMCwgMSk7XG5cbiAgICBpZiAodV9zY2FsZV93aXRoX21hcCkge1xuICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiBnbF9Qb3NpdGlvbi53O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBtaW5pbXVtIGJsdXIgZGlzdGFuY2UgdGhhdCBzZXJ2ZXMgYXMgYSBmYXV4LWFudGlhbGlhc2luZyBmb3JcbiAgICAvLyB0aGUgY2lyY2xlLiBzaW5jZSBibHVyIGlzIGEgcmF0aW8gb2YgdGhlIGNpcmNsZSdzIHNpemUgYW5kIHRoZSBpbnRlbnQgaXNcbiAgICAvLyB0byBrZWVwIHRoZSBibHVyIGF0IHJvdWdobHkgMXB4LCB0aGUgdHdvIGFyZSBpbnZlcnNlbHkgcmVsYXRlZC5cbiAgICB2X2FudGlhbGlhc2JsdXIgPSAxLjAgLyB1X2RldmljZXBpeGVscmF0aW8gLyByYWRpdXM7XG59XG4ifSxsaW5lOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gbG93cCB2ZWM0IHVfY29sb3I7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O1xudW5pZm9ybSBmbG9hdCB1X2JsdXI7XG5cbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl9saW5ld2lkdGgucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfbGluZXdpZHRoLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X2xpbmV3aWR0aC5zKVxuICAgIGZsb2F0IGJsdXIgPSB1X2JsdXIgKiB2X2dhbW1hX3NjYWxlO1xuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl9saW5ld2lkdGgudCAtIGJsdXIpLCB2X2xpbmV3aWR0aC5zIC0gZGlzdCkgLyBibHVyLCAwLjAsIDEuMCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogKGFscGhhICogdV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2xpbmV3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2dhcHdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYW50aWFsaWFzaW5nO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfZXh0cmE7XG51bmlmb3JtIG1hdDIgdV9hbnRpYWxpYXNpbmdtYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9vZmZzZXQ7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9ibHVyO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xuXG4gICAgLy8gV2Ugc3RvcmUgdGhlIHRleHR1cmUgbm9ybWFscyBpbiB0aGUgbW9zdCBpbnNpZ25pZmljYW50IGJpdFxuICAgIC8vIHRyYW5zZm9ybSB5IHNvIHRoYXQgMCA9PiAtMSBhbmQgMSA9PiAxXG4gICAgLy8gSW4gdGhlIHRleHR1cmUgbm9ybWFsLCB4IGlzIDAgaWYgdGhlIG5vcm1hbCBwb2ludHMgc3RyYWlnaHQgdXAvZG93biBhbmQgMSBpZiBpdCdzIGEgcm91bmQgY2FwXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gbW9kKGFfcG9zLCAyLjApO1xuICAgIG5vcm1hbC55ID0gc2lnbihub3JtYWwueSAtIDAuNSk7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICBmbG9hdCBpbnNldCA9IHVfZ2Fwd2lkdGggKyAodV9nYXB3aWR0aCA+IDAuMCA/IHVfYW50aWFsaWFzaW5nIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSB1X2dhcHdpZHRoICsgdV9saW5ld2lkdGggKiAodV9nYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyB1X2FudGlhbGlhc2luZztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldCA9IHVfb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZXh0dXJlIG5vcm1hbCBiaXQgb2YgdGhlIHBvc2l0aW9uIGJlZm9yZSBzY2FsaW5nIGl0IHdpdGggdGhlXG4gICAgLy8gbW9kZWwvdmlldyBtYXRyaXguXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgKG9mZnNldCArIGRpc3QpIC8gdV9yYXRpbywgMC4wLCAxLjApO1xuXG4gICAgLy8gcG9zaXRpb24gb2YgeSBvbiB0aGUgc2NyZWVuXG4gICAgZmxvYXQgeSA9IGdsX1Bvc2l0aW9uLnkgLyBnbF9Qb3NpdGlvbi53O1xuXG4gICAgLy8gaG93IG11Y2ggZmVhdHVyZXMgYXJlIHNxdWlzaGVkIGluIHRoZSB5IGRpcmVjdGlvbiBieSB0aGUgdGlsdFxuICAgIGZsb2F0IHNxdWlzaF9zY2FsZSA9IGxlbmd0aChhX2V4dHJ1ZGUpIC8gbGVuZ3RoKHVfYW50aWFsaWFzaW5nbWF0cml4ICogYV9leHRydWRlKTtcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiBhbGwgZGlyZWN0aW9ucyBieSB0aGUgcGVyc3BlY3RpdmVuZXNzXG4gICAgZmxvYXQgcGVyc3BlY3RpdmVfc2NhbGUgPSAxLjAgLyAoMS4wIC0gbWluKHkgKiB1X2V4dHJhLCAwLjkpKTtcblxuICAgIHZfbGluZXdpZHRoID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbiAgICB2X2dhbW1hX3NjYWxlID0gcGVyc3BlY3RpdmVfc2NhbGUgKiBzcXVpc2hfc2NhbGU7XG59XG4ifSxsaW5lcGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfYmx1cjtcblxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gZmxvYXQgdV9mYWRlO1xudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfbGluZXdpZHRoLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X2xpbmV3aWR0aC50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl9saW5ld2lkdGgucylcbiAgICBmbG9hdCBibHVyID0gdV9ibHVyICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfbGluZXdpZHRoLnQgLSBibHVyKSwgdl9saW5ld2lkdGgucyAtIGRpc3QpIC8gYmx1ciwgMC4wLCAxLjApO1xuXG4gICAgZmxvYXQgeF9hID0gbW9kKHZfbGluZXNvZmFyIC8gdV9wYXR0ZXJuX3NpemVfYS54LCAxLjApO1xuICAgIGZsb2F0IHhfYiA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2IueCwgMS4wKTtcbiAgICBmbG9hdCB5X2EgPSAwLjUgKyAodl9ub3JtYWwueSAqIHZfbGluZXdpZHRoLnMgLyB1X3BhdHRlcm5fc2l6ZV9hLnkpO1xuICAgIGZsb2F0IHlfYiA9IDAuNSArICh2X25vcm1hbC55ICogdl9saW5ld2lkdGgucyAvIHVfcGF0dGVybl9zaXplX2IueSk7XG4gICAgdmVjMiBwb3NfYSA9IG1peCh1X3BhdHRlcm5fdGxfYSwgdV9wYXR0ZXJuX2JyX2EsIHZlYzIoeF9hLCB5X2EpKTtcbiAgICB2ZWMyIHBvc19iID0gbWl4KHVfcGF0dGVybl90bF9iLCB1X3BhdHRlcm5fYnJfYiwgdmVjMih4X2IsIHlfYikpO1xuXG4gICAgdmVjNCBjb2xvciA9IG1peCh0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2EpLCB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2IpLCB1X2ZhZGUpO1xuXG4gICAgYWxwaGEgKj0gdV9vcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBhbHBoYTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXG4vLyBsb25nIGRpc3RhbmNlcyBmb3IgbG9uZyBzZWdtZW50cy4gVXNlIHRoaXMgdmFsdWUgdG8gdW5zY2FsZSB0aGUgZGlzdGFuY2UuXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2xpbmV3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2dhcHdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYW50aWFsaWFzaW5nO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfZXh0cmE7XG51bmlmb3JtIG1hdDIgdV9hbnRpYWxpYXNpbmdtYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9vZmZzZXQ7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgLy8gV2Ugc3RvcmUgdGhlIHRleHR1cmUgbm9ybWFscyBpbiB0aGUgbW9zdCBpbnNpZ25pZmljYW50IGJpdFxuICAgIC8vIHRyYW5zZm9ybSB5IHNvIHRoYXQgMCA9PiAtMSBhbmQgMSA9PiAxXG4gICAgLy8gSW4gdGhlIHRleHR1cmUgbm9ybWFsLCB4IGlzIDAgaWYgdGhlIG5vcm1hbCBwb2ludHMgc3RyYWlnaHQgdXAvZG93biBhbmQgMSBpZiBpdCdzIGEgcm91bmQgY2FwXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gbW9kKGFfcG9zLCAyLjApO1xuICAgIG5vcm1hbC55ID0gc2lnbihub3JtYWwueSAtIDAuNSk7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICBmbG9hdCBpbnNldCA9IHVfZ2Fwd2lkdGggKyAodV9nYXB3aWR0aCA+IDAuMCA/IHVfYW50aWFsaWFzaW5nIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSB1X2dhcHdpZHRoICsgdV9saW5ld2lkdGggKiAodV9nYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyB1X2FudGlhbGlhc2luZztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldCA9IHVfb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZXh0dXJlIG5vcm1hbCBiaXQgb2YgdGhlIHBvc2l0aW9uIGJlZm9yZSBzY2FsaW5nIGl0IHdpdGggdGhlXG4gICAgLy8gbW9kZWwvdmlldyBtYXRyaXguXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgKG9mZnNldCArIGRpc3QpIC8gdV9yYXRpbywgMC4wLCAxLjApO1xuICAgIHZfbGluZXNvZmFyID0gYV9saW5lc29mYXI7XG5cbiAgICAvLyBwb3NpdGlvbiBvZiB5IG9uIHRoZSBzY3JlZW5cbiAgICBmbG9hdCB5ID0gZ2xfUG9zaXRpb24ueSAvIGdsX1Bvc2l0aW9uLnc7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gdGhlIHkgZGlyZWN0aW9uIGJ5IHRoZSB0aWx0XG4gICAgZmxvYXQgc3F1aXNoX3NjYWxlID0gbGVuZ3RoKGFfZXh0cnVkZSkgLyBsZW5ndGgodV9hbnRpYWxpYXNpbmdtYXRyaXggKiBhX2V4dHJ1ZGUpO1xuXG4gICAgLy8gaG93IG11Y2ggZmVhdHVyZXMgYXJlIHNxdWlzaGVkIGluIGFsbCBkaXJlY3Rpb25zIGJ5IHRoZSBwZXJzcGVjdGl2ZW5lc3NcbiAgICBmbG9hdCBwZXJzcGVjdGl2ZV9zY2FsZSA9IDEuMCAvICgxLjAgLSBtaW4oeSAqIHVfZXh0cmEsIDAuOSkpO1xuXG4gICAgdl9saW5ld2lkdGggPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBwZXJzcGVjdGl2ZV9zY2FsZSAqIHNxdWlzaF9zY2FsZTtcbn1cbiJ9LGxpbmVzZGZwYXR0ZXJuOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gbG93cCB2ZWM0IHVfY29sb3I7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O1xuXG51bmlmb3JtIGZsb2F0IHVfYmx1cjtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG51bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X2xpbmV3aWR0aC5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl9saW5ld2lkdGgudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfbGluZXdpZHRoLnMpXG4gICAgZmxvYXQgYmx1ciA9IHVfYmx1ciAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X2xpbmV3aWR0aC50IC0gYmx1ciksIHZfbGluZXdpZHRoLnMgLSBkaXN0KSAvIGJsdXIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHNkZmRpc3RfYSA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9hKS5hO1xuICAgIGZsb2F0IHNkZmRpc3RfYiA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9iKS5hO1xuICAgIGZsb2F0IHNkZmRpc3QgPSBtaXgoc2RmZGlzdF9hLCBzZGZkaXN0X2IsIHVfbWl4KTtcbiAgICBhbHBoYSAqPSBzbW9vdGhzdGVwKDAuNSAtIHVfc2RmZ2FtbWEsIDAuNSArIHVfc2RmZ2FtbWEsIHNkZmRpc3QpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIChhbHBoYSAqIHVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9saW5ld2lkdGg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9nYXB3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2FudGlhbGlhc2luZztcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3RleF95X2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjtcbnVuaWZvcm0gZmxvYXQgdV90ZXhfeV9iO1xudW5pZm9ybSBmbG9hdCB1X2V4dHJhO1xudW5pZm9ybSBtYXQyIHVfYW50aWFsaWFzaW5nbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfb2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuICAgIC8vIFdlIHN0b3JlIHRoZSB0ZXh0dXJlIG5vcm1hbHMgaW4gdGhlIG1vc3QgaW5zaWduaWZpY2FudCBiaXRcbiAgICAvLyB0cmFuc2Zvcm0geSBzbyB0aGF0IDAgPT4gLTEgYW5kIDEgPT4gMVxuICAgIC8vIEluIHRoZSB0ZXh0dXJlIG5vcm1hbCwgeCBpcyAwIGlmIHRoZSBub3JtYWwgcG9pbnRzIHN0cmFpZ2h0IHVwL2Rvd24gYW5kIDEgaWYgaXQncyBhIHJvdW5kIGNhcFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IG1vZChhX3BvcywgMi4wKTtcbiAgICBub3JtYWwueSA9IHNpZ24obm9ybWFsLnkgLSAwLjUpO1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgZmxvYXQgaW5zZXQgPSB1X2dhcHdpZHRoICsgKHVfZ2Fwd2lkdGggPiAwLjAgPyB1X2FudGlhbGlhc2luZyA6IDAuMCk7XG4gICAgZmxvYXQgb3V0c2V0ID0gdV9nYXB3aWR0aCArIHVfbGluZXdpZHRoICogKHVfZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgdV9hbnRpYWxpYXNpbmc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQgPSB1X29mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGV4dHVyZSBub3JtYWwgYml0IG9mIHRoZSBwb3NpdGlvbiBiZWZvcmUgc2NhbGluZyBpdCB3aXRoIHRoZVxuICAgIC8vIG1vZGVsL3ZpZXcgbWF0cml4LlxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIChvZmZzZXQgKyBkaXN0KSAvIHVfcmF0aW8sIDAuMCwgMS4wKTtcblxuICAgIHZfdGV4X2EgPSB2ZWMyKGFfbGluZXNvZmFyICogdV9wYXR0ZXJuc2NhbGVfYS54LCBub3JtYWwueSAqIHVfcGF0dGVybnNjYWxlX2EueSArIHVfdGV4X3lfYSk7XG4gICAgdl90ZXhfYiA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9iLngsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYi55ICsgdV90ZXhfeV9iKTtcblxuICAgIC8vIHBvc2l0aW9uIG9mIHkgb24gdGhlIHNjcmVlblxuICAgIGZsb2F0IHkgPSBnbF9Qb3NpdGlvbi55IC8gZ2xfUG9zaXRpb24udztcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiB0aGUgeSBkaXJlY3Rpb24gYnkgdGhlIHRpbHRcbiAgICBmbG9hdCBzcXVpc2hfc2NhbGUgPSBsZW5ndGgoYV9leHRydWRlKSAvIGxlbmd0aCh1X2FudGlhbGlhc2luZ21hdHJpeCAqIGFfZXh0cnVkZSk7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gYWxsIGRpcmVjdGlvbnMgYnkgdGhlIHBlcnNwZWN0aXZlbmVzc1xuICAgIGZsb2F0IHBlcnNwZWN0aXZlX3NjYWxlID0gMS4wIC8gKDEuMCAtIG1pbih5ICogdV9leHRyYSwgMC45KSk7XG5cbiAgICB2X2xpbmV3aWR0aCA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IHBlcnNwZWN0aXZlX3NjYWxlICogc3F1aXNoX3NjYWxlO1xufVxuIn0sb3V0bGluZTp7CmZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCB2ZWM0IG91dGxpbmVfY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9wb3MgLSBnbF9GcmFnQ29vcmQueHkpO1xuICAgIGZsb2F0IGFscGhhID0gc21vb3Roc3RlcCgxLjAsIDAuMCwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gb3V0bGluZV9jb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG5cbnZhcnlpbmcgdmVjMiB2X3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBvdXRsaW5lX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XG59XG4ifSxvdXRsaW5lcGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSwgdV9wYXR0ZXJuX2JyX2EsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiwgdV9wYXR0ZXJuX2JyX2IsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICAvLyBmaW5kIGRpc3RhbmNlIHRvIG91dGxpbmUgZm9yIGFscGhhIGludGVycG9sYXRpb25cblxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9wb3MgLSBnbF9GcmFnQ29vcmQueHkpO1xuICAgIGZsb2F0IGFscGhhID0gc21vb3Roc3RlcCgxLjAsIDAuMCwgZGlzdCk7XG4gICAgXG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIGFscGhhICogdV9vcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2ZWMyIHNjYWxlZF9zaXplX2EgPSB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hO1xuICAgIHZlYzIgc2NhbGVkX3NpemVfYiA9IHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2I7XG5cbiAgICAvLyB0aGUgY29ycmVjdCBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAvL1xuICAgIC8vIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiBob3cgbWFueSBwaXhlbHMgYXJlIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmRcbiAgICAvLyB0aGUgZWRnZSBvZiB0aGUgdGlsZTpcbiAgICAvLyB2ZWMyIG9mZnNldCA9IG1vZChwaXhlbF9jb29yZCwgc2l6ZSlcbiAgICAvL1xuICAgIC8vIEF0IGhpZ2ggem9vbSBsZXZlbHMgdGhlcmUgYXJlIGEgdG9uIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW5cbiAgICAvLyBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2ZcbiAgICAvLyBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cbiAgICAvL1xuICAgIC8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XG4gICAgLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXG4gICAgLy8gcGl4ZWxfY29vcmRfbG93ZXIgPSBtb2QocGl4ZWxfY29vcmQsIDJeMTYpXG4gICAgLy9cbiAgICAvLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XG4gICAgdmVjMiBvZmZzZXRfYSA9IG1vZChtb2QobW9kKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHNjYWxlZF9zaXplX2EpICogMjU2LjAsIHNjYWxlZF9zaXplX2EpICogMjU2LjAgKyB1X3BpeGVsX2Nvb3JkX2xvd2VyLCBzY2FsZWRfc2l6ZV9hKTtcbiAgICB2ZWMyIG9mZnNldF9iID0gbW9kKG1vZChtb2QodV9waXhlbF9jb29yZF91cHBlciwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCArIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHNjYWxlZF9zaXplX2IpO1xuXG4gICAgdl9wb3NfYSA9ICh1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzICogYV9wb3MgKyBvZmZzZXRfYSkgLyBzY2FsZWRfc2l6ZV9hO1xuICAgIHZfcG9zX2IgPSAodV90aWxlX3VuaXRzX3RvX3BpeGVscyAqIGFfcG9zICsgb2Zmc2V0X2IpIC8gc2NhbGVkX3NpemVfYjtcblxuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0scGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hLCB1X3BhdHRlcm5fYnJfYSwgaW1hZ2Vjb29yZCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcblxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iLCB1X3BhdHRlcm5fYnJfYiwgaW1hZ2Vjb29yZF9iKTtcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogdV9vcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZlYzIgc2NhbGVkX3NpemVfYSA9IHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2E7XG4gICAgdmVjMiBzY2FsZWRfc2l6ZV9iID0gdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYjtcblxuICAgIC8vIHRoZSBjb3JyZWN0IG9mZnNldCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkLlxuICAgIC8vXG4gICAgLy8gVGhlIG9mZnNldCBkZXBlbmRzIG9uIGhvdyBtYW55IHBpeGVscyBhcmUgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luIGFuZFxuICAgIC8vIHRoZSBlZGdlIG9mIHRoZSB0aWxlOlxuICAgIC8vIHZlYzIgb2Zmc2V0ID0gbW9kKHBpeGVsX2Nvb3JkLCBzaXplKVxuICAgIC8vXG4gICAgLy8gQXQgaGlnaCB6b29tIGxldmVscyB0aGVyZSBhcmUgYSB0b24gb2YgcGl4ZWxzIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpblxuICAgIC8vIGFuZCB0aGUgZWRnZSBvZiB0aGUgdGlsZS4gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZlxuICAgIC8vIHByZWNpc2lvbiBmb3IgaGlnaHAgZmxvYXRzLiBXZSBuZWVkIG1vcmUgdGhhbiB0aGF0LlxuICAgIC8vXG4gICAgLy8gVGhlIHBpeGVsX2Nvb3JkIGlzIHBhc3NlZCBpbiBhcyB0d28gMTYgYml0IHZhbHVlczpcbiAgICAvLyBwaXhlbF9jb29yZF91cHBlciA9IGZsb29yKHBpeGVsX2Nvb3JkIC8gMl4xNilcbiAgICAvLyBwaXhlbF9jb29yZF9sb3dlciA9IG1vZChwaXhlbF9jb29yZCwgMl4xNilcbiAgICAvL1xuICAgIC8vIFRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHNob3VsZCBwcmVzZXJ2ZSB0aGlzIHByZWNpc2lvbjpcbiAgICB2ZWMyIG9mZnNldF9hID0gbW9kKG1vZChtb2QodV9waXhlbF9jb29yZF91cHBlciwgc2NhbGVkX3NpemVfYSkgKiAyNTYuMCwgc2NhbGVkX3NpemVfYSkgKiAyNTYuMCArIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHNjYWxlZF9zaXplX2EpO1xuICAgIHZlYzIgb2Zmc2V0X2IgPSBtb2QobW9kKG1vZCh1X3BpeGVsX2Nvb3JkX3VwcGVyLCBzY2FsZWRfc2l6ZV9iKSAqIDI1Ni4wLCBzY2FsZWRfc2l6ZV9iKSAqIDI1Ni4wICsgdV9waXhlbF9jb29yZF9sb3dlciwgc2NhbGVkX3NpemVfYik7XG5cbiAgICB2X3Bvc19hID0gKHVfdGlsZV91bml0c190b19waXhlbHMgKiBhX3BvcyArIG9mZnNldF9hKSAvIHNjYWxlZF9zaXplX2E7XG4gICAgdl9wb3NfYiA9ICh1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzICogYV9wb3MgKyBvZmZzZXRfYikgLyBzY2FsZWRfc2l6ZV9iO1xufVxuIn0scmFzdGVyOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5MDtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5MTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UwO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7XG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O1xudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfaGlnaDtcblxudW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO1xudW5pZm9ybSBmbG9hdCB1X2NvbnRyYXN0X2ZhY3RvcjtcbnVuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0cztcblxudm9pZCBtYWluKCkge1xuXG4gICAgLy8gcmVhZCBhbmQgY3Jvc3MtZmFkZSBjb2xvcnMgZnJvbSB0aGUgbWFpbiBhbmQgcGFyZW50IHRpbGVzXG4gICAgdmVjNCBjb2xvcjAgPSB0ZXh0dXJlMkQodV9pbWFnZTAsIHZfcG9zMCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZTEsIHZfcG9zMSk7XG4gICAgdmVjNCBjb2xvciA9IGNvbG9yMCAqIHVfb3BhY2l0eTAgKyBjb2xvcjEgKiB1X29wYWNpdHkxO1xuICAgIHZlYzMgcmdiID0gY29sb3IucmdiO1xuXG4gICAgLy8gc3BpblxuICAgIHJnYiA9IHZlYzMoXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnh5eiksXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnp4eSksXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnl6eCkpO1xuXG4gICAgLy8gc2F0dXJhdGlvblxuICAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcbiAgICByZ2IgKz0gKGF2ZXJhZ2UgLSByZ2IpICogdV9zYXR1cmF0aW9uX2ZhY3RvcjtcblxuICAgIC8vIGNvbnRyYXN0XG4gICAgcmdiID0gKHJnYiAtIDAuNSkgKiB1X2NvbnRyYXN0X2ZhY3RvciArIDAuNTtcblxuICAgIC8vIGJyaWdodG5lc3NcbiAgICB2ZWMzIHVfaGlnaF92ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3cpO1xuICAgIHZlYzMgdV9sb3dfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KHVfaGlnaF92ZWMsIHVfbG93X3ZlYywgcmdiKSwgY29sb3IuYSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3RsX3BhcmVudDtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7XG51bmlmb3JtIGZsb2F0IHVfYnVmZmVyX3NjYWxlO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5cbnZhcnlpbmcgdmVjMiB2X3BvczA7XG52YXJ5aW5nIHZlYzIgdl9wb3MxO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zMCA9ICgoKGFfdGV4dHVyZV9wb3MgLyAzMjc2Ny4wKSAtIDAuNSkgLyB1X2J1ZmZlcl9zY2FsZSApICsgMC41O1xuICAgIHZfcG9zMSA9ICh2X3BvczAgKiB1X3NjYWxlX3BhcmVudCkgKyB1X3RsX3BhcmVudDtcbn1cbiJ9LGljb246e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9mYWRldGV4dHVyZTtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7XG5cbnZhcnlpbmcgdmVjMiB2X3RleDtcbnZhcnlpbmcgdmVjMiB2X2ZhZGVfdGV4O1xuXG52b2lkIG1haW4oKSB7XG4gICAgbG93cCBmbG9hdCBhbHBoYSA9IHRleHR1cmUyRCh1X2ZhZGV0ZXh0dXJlLCB2X2ZhZGVfdGV4KS5hICogdV9vcGFjaXR5O1xuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4KSAqIGFscGhhO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxuXG4vLyBtYXRyaXggaXMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb24uXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3pvb207XG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfd2l0aF9tYXA7XG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xuXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIHZlYzIgdl9mYWRlX3RleDtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgYV90ZXggPSBhX3RleHR1cmVfcG9zLnh5O1xuICAgIG1lZGl1bXAgZmxvYXQgYV9sYWJlbG1pbnpvb20gPSBhX2RhdGFbMF07XG4gICAgbWVkaXVtcCB2ZWMyIGFfem9vbSA9IGFfZGF0YS5wcTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbWluem9vbSA9IGFfem9vbVswXTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbWF4em9vbSA9IGFfem9vbVsxXTtcblxuICAgIC8vIHVfem9vbSBpcyB0aGUgY3VycmVudCB6b29tIGxldmVsIGFkanVzdGVkIGZvciB0aGUgY2hhbmdlIGluIGZvbnQgc2l6ZVxuICAgIG1lZGl1bXAgZmxvYXQgeiA9IDIuMCAtIHN0ZXAoYV9taW56b29tLCB1X3pvb20pIC0gKDEuMCAtIHN0ZXAoYV9tYXh6b29tLCB1X3pvb20pKTtcblxuICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChhX29mZnNldCAvIDY0LjApO1xuICAgIGlmICh1X3JvdGF0ZV93aXRoX21hcCkge1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIGV4dHJ1ZGUsIDAsIDEpO1xuICAgICAgICBnbF9Qb3NpdGlvbi56ICs9IHogKiBnbF9Qb3NpdGlvbi53O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKSArIHZlYzQoZXh0cnVkZSwgMCwgMCk7XG4gICAgfVxuXG4gICAgdl90ZXggPSBhX3RleCAvIHVfdGV4c2l6ZTtcbiAgICB2X2ZhZGVfdGV4ID0gdmVjMihhX2xhYmVsbWluem9vbSAvIDI1NS4wLCAwLjApO1xufVxuIn0sc2RmOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfZmFkZXRleHR1cmU7XG51bmlmb3JtIGxvd3AgdmVjNCB1X2NvbG9yO1xudW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2J1ZmZlcjtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2dhbW1hO1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIHZlYzIgdl9mYWRlX3RleDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIGxvd3AgZmxvYXQgZGlzdCA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4KS5hO1xuICAgIGxvd3AgZmxvYXQgZmFkZV9hbHBoYSA9IHRleHR1cmUyRCh1X2ZhZGV0ZXh0dXJlLCB2X2ZhZGVfdGV4KS5hO1xuICAgIGxvd3AgZmxvYXQgZ2FtbWEgPSB1X2dhbW1hICogdl9nYW1tYV9zY2FsZTtcbiAgICBsb3dwIGZsb2F0IGFscGhhID0gc21vb3Roc3RlcCh1X2J1ZmZlciAtIGdhbW1hLCB1X2J1ZmZlciArIGdhbW1hLCBkaXN0KSAqIGZhZGVfYWxwaGE7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogKGFscGhhICogdV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MztcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX29mZnNldDtcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cblxuLy8gbWF0cml4IGlzIGZvciB0aGUgdmVydGV4IHBvc2l0aW9uLlxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV96b29tO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3dpdGhfbWFwO1xudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9waXRjaDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2JlYXJpbmc7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xuXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIHZlYzIgdl9mYWRlX3RleDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgYV90ZXggPSBhX3RleHR1cmVfcG9zLnh5O1xuICAgIG1lZGl1bXAgZmxvYXQgYV9sYWJlbG1pbnpvb20gPSBhX2RhdGFbMF07XG4gICAgbWVkaXVtcCB2ZWMyIGFfem9vbSA9IGFfZGF0YS5wcTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbWluem9vbSA9IGFfem9vbVswXTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbWF4em9vbSA9IGFfem9vbVsxXTtcblxuICAgIC8vIHVfem9vbSBpcyB0aGUgY3VycmVudCB6b29tIGxldmVsIGFkanVzdGVkIGZvciB0aGUgY2hhbmdlIGluIGZvbnQgc2l6ZVxuICAgIG1lZGl1bXAgZmxvYXQgeiA9IDIuMCAtIHN0ZXAoYV9taW56b29tLCB1X3pvb20pIC0gKDEuMCAtIHN0ZXAoYV9tYXh6b29tLCB1X3pvb20pKTtcblxuICAgIC8vIHBpdGNoLWFsaWdubWVudDogbWFwXG4gICAgLy8gcm90YXRpb24tYWxpZ25tZW50OiBtYXAgfCB2aWV3cG9ydFxuICAgIGlmICh1X3BpdGNoX3dpdGhfbWFwKSB7XG4gICAgICAgIGxvd3AgZmxvYXQgYW5nbGUgPSB1X3JvdGF0ZV93aXRoX21hcCA/IChhX2RhdGFbMV0gLyAyNTYuMCAqIDIuMCAqIFBJKSA6IHVfYmVhcmluZztcbiAgICAgICAgbG93cCBmbG9hdCBhc2luID0gc2luKGFuZ2xlKTtcbiAgICAgICAgbG93cCBmbG9hdCBhY29zID0gY29zKGFuZ2xlKTtcbiAgICAgICAgbWF0MiBSb3RhdGlvbk1hdHJpeCA9IG1hdDIoYWNvcywgYXNpbiwgLTEuMCAqIGFzaW4sIGFjb3MpO1xuICAgICAgICB2ZWMyIG9mZnNldCA9IFJvdGF0aW9uTWF0cml4ICogYV9vZmZzZXQ7XG4gICAgICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChvZmZzZXQgLyA2NC4wKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyBleHRydWRlLCAwLCAxKTtcbiAgICAgICAgZ2xfUG9zaXRpb24ueiArPSB6ICogZ2xfUG9zaXRpb24udztcbiAgICAvLyBwaXRjaC1hbGlnbm1lbnQ6IHZpZXdwb3J0XG4gICAgLy8gcm90YXRpb24tYWxpZ25tZW50OiBtYXBcbiAgICB9IGVsc2UgaWYgKHVfcm90YXRlX3dpdGhfbWFwKSB7XG4gICAgICAgIC8vIGZvcmVzaG9ydGVuaW5nIGZhY3RvciB0byBhcHBseSBvbiBwaXRjaGVkIG1hcHNcbiAgICAgICAgLy8gYXMgYSBsYWJlbCBnb2VzIGZyb20gaG9yaXpvbnRhbCA8PT4gdmVydGljYWwgaW4gYW5nbGVcbiAgICAgICAgLy8gaXQgZ29lcyBmcm9tIDAlIGZvcmVzaG9ydGVuaW5nIHRvIHVwIHRvIGFyb3VuZCA3MCUgZm9yZXNob3J0ZW5pbmdcbiAgICAgICAgbG93cCBmbG9hdCBwaXRjaGZhY3RvciA9IDEuMCAtIGNvcyh1X3BpdGNoICogc2luKHVfcGl0Y2ggKiAwLjc1KSk7XG5cbiAgICAgICAgbG93cCBmbG9hdCBsaW5lYW5nbGUgPSBhX2RhdGFbMV0gLyAyNTYuMCAqIDIuMCAqIFBJO1xuXG4gICAgICAgIC8vIHVzZSB0aGUgbGluZWFuZ2xlIHRvIHBvc2l0aW9uIHBvaW50cyBhLGIgYWxvbmcgdGhlIGxpbmVcbiAgICAgICAgLy8gcHJvamVjdCB0aGUgcG9pbnRzIGFuZCBjYWxjdWxhdGUgdGhlIGxhYmVsIGFuZ2xlIGluIHByb2plY3RlZCBzcGFjZVxuICAgICAgICAvLyB0aGlzIGNhbGN1bGF0aW9uIGFsbG93cyBsYWJlbHMgdG8gYmUgcmVuZGVyZWQgdW5za2V3ZWQgb24gcGl0Y2hlZCBtYXBzXG4gICAgICAgIHZlYzQgYSA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgICAgIHZlYzQgYiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoY29zKGxpbmVhbmdsZSksc2luKGxpbmVhbmdsZSkpLCAwLCAxKTtcbiAgICAgICAgbG93cCBmbG9hdCBhbmdsZSA9IGF0YW4oKGJbMV0vYlszXSAtIGFbMV0vYVszXSkvdV9hc3BlY3RfcmF0aW8sIGJbMF0vYlszXSAtIGFbMF0vYVszXSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYXNpbiA9IHNpbihhbmdsZSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYWNvcyA9IGNvcyhhbmdsZSk7XG4gICAgICAgIG1hdDIgUm90YXRpb25NYXRyaXggPSBtYXQyKGFjb3MsIC0xLjAgKiBhc2luLCBhc2luLCBhY29zKTtcblxuICAgICAgICB2ZWMyIG9mZnNldCA9IFJvdGF0aW9uTWF0cml4ICogKHZlYzIoKDEuMC1waXRjaGZhY3RvcikrKHBpdGNoZmFjdG9yKmNvcyhhbmdsZSoyLjApKSwgMS4wKSAqIGFfb2Zmc2V0KTtcbiAgICAgICAgdmVjMiBleHRydWRlID0gdV9leHRydWRlX3NjYWxlICogKG9mZnNldCAvIDY0LjApO1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSkgKyB2ZWM0KGV4dHJ1ZGUsIDAsIDApO1xuICAgICAgICBnbF9Qb3NpdGlvbi56ICs9IHogKiBnbF9Qb3NpdGlvbi53O1xuICAgIC8vIHBpdGNoLWFsaWdubWVudDogdmlld3BvcnRcbiAgICAvLyByb3RhdGlvbi1hbGlnbm1lbnQ6IHZpZXdwb3J0XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmVjMiBleHRydWRlID0gdV9leHRydWRlX3NjYWxlICogKGFfb2Zmc2V0IC8gNjQuMCk7XG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKSArIHZlYzQoZXh0cnVkZSwgMCwgMCk7XG4gICAgfVxuXG4gICAgdl9nYW1tYV9zY2FsZSA9IChnbF9Qb3NpdGlvbi53IC0gMC41KTtcblxuICAgIHZfdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdl9mYWRlX3RleCA9IHZlYzIoYV9sYWJlbG1pbnpvb20gLyAyNTUuMCwgMC4wKTtcbn1cbiJ9LGNvbGxpc2lvbmJveDp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfem9vbTtcbnVuaWZvcm0gZmxvYXQgdV9tYXh6b29tO1xuXG52YXJ5aW5nIGZsb2F0IHZfbWF4X3pvb207XG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VtZW50X3pvb207XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIGZsb2F0IGFscGhhID0gMC41O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDEuMCwgMC4wLCAxLjApICogYWxwaGE7XG5cbiAgICBpZiAodl9wbGFjZW1lbnRfem9vbSA+IHVfem9vbSkge1xuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcbiAgICB9XG5cbiAgICBpZiAodV96b29tID49IHZfbWF4X3pvb20pIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGEgKiAwLjI1O1xuICAgIH1cblxuICAgIGlmICh2X3BsYWNlbWVudF96b29tID49IHVfbWF4em9vbSkge1xuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDEuMCkgKiBhbHBoYSAqIDAuMjtcbiAgICB9XG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTtcbmF0dHJpYnV0ZSB2ZWMyIGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlO1xuXG52YXJ5aW5nIGZsb2F0IHZfbWF4X3pvb207XG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VtZW50X3pvb207XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIGFfZXh0cnVkZSAvIHVfc2NhbGUsIDAuMCwgMS4wKTtcblxuICAgIHZfbWF4X3pvb20gPSBhX2RhdGEueDtcbiAgICB2X3BsYWNlbWVudF96b29tID0gYV9kYXRhLnk7XG59XG4ifX0sZS5leHBvcnRzLnV0aWw9ImZsb2F0IGV2YWx1YXRlX3pvb21fZnVuY3Rpb25fMShjb25zdCB2ZWM0IHZhbHVlcywgY29uc3QgZmxvYXQgdCkge1xuICAgIGlmICh0IDwgMS4wKSB7XG4gICAgICAgIHJldHVybiBtaXgodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHQpO1xuICAgIH0gZWxzZSBpZiAodCA8IDIuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB0IC0gMS4wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlc1syXSwgdmFsdWVzWzNdLCB0IC0gMi4wKTtcbiAgICB9XG59XG52ZWM0IGV2YWx1YXRlX3pvb21fZnVuY3Rpb25fNChjb25zdCB2ZWM0IHZhbHVlMCwgY29uc3QgdmVjNCB2YWx1ZTEsIGNvbnN0IHZlYzQgdmFsdWUyLCBjb25zdCB2ZWM0IHZhbHVlMywgY29uc3QgZmxvYXQgdCkge1xuICAgIGlmICh0IDwgMS4wKSB7XG4gICAgICAgIHJldHVybiBtaXgodmFsdWUwLCB2YWx1ZTEsIHQpO1xuICAgIH0gZWxzZSBpZiAodCA8IDIuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlMSwgdmFsdWUyLCB0IC0gMS4wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlMiwgdmFsdWUzLCB0IC0gMi4wKTtcbiAgICB9XG59XG4ifSx7cGF0aDo0ODV9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubWVzc2FnZT0odD90KyI6ICI6IiIpK2kuYXBwbHkoaSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLG51bGwhPT1lJiZ2b2lkIDAhPT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfXZhciBpPXQoInV0aWwiKS5mb3JtYXQ7ZS5leHBvcnRzPW59LHt1dGlsOjU1Nn1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9YXJndW1lbnRzW2VdO2Zvcih2YXIgbiBpbiByKXRbbl09cltuXX1yZXR1cm4gdH19LHt9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/ImJvb2xlYW4iOkFycmF5LmlzQXJyYXkodCk/ImFycmF5IjpudWxsPT09dD8ibnVsbCI6dHlwZW9mIHR9fSx7fV0sMzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH19LHt9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGE9dCgiLi4vdXRpbC9leHRlbmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHI9dCgiLi92YWxpZGF0ZV9mdW5jdGlvbiIpLG89dCgiLi92YWxpZGF0ZV9vYmplY3QiKSxzPXsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6dCgiLi92YWxpZGF0ZV9hcnJheSIpLGJvb2xlYW46dCgiLi92YWxpZGF0ZV9ib29sZWFuIiksbnVtYmVyOnQoIi4vdmFsaWRhdGVfbnVtYmVyIiksY29sb3I6dCgiLi92YWxpZGF0ZV9jb2xvciIpLGNvbnN0YW50czp0KCIuL3ZhbGlkYXRlX2NvbnN0YW50cyIpLGVudW06dCgiLi92YWxpZGF0ZV9lbnVtIiksZmlsdGVyOnQoIi4vdmFsaWRhdGVfZmlsdGVyIiksZnVuY3Rpb246dCgiLi92YWxpZGF0ZV9mdW5jdGlvbiIpLGxheWVyOnQoIi4vdmFsaWRhdGVfbGF5ZXIiKSxvYmplY3Q6dCgiLi92YWxpZGF0ZV9vYmplY3QiKSxzb3VyY2U6dCgiLi92YWxpZGF0ZV9zb3VyY2UiKSxzdHJpbmc6dCgiLi92YWxpZGF0ZV9zdHJpbmciKX0sbD1lLnZhbHVlLGM9ZS52YWx1ZVNwZWMsdT1lLmtleSxmPWUuc3R5bGVTcGVjLGg9ZS5zdHlsZTtpZigic3RyaW5nIj09PWkobCkmJiJAIj09PWxbMF0pe2lmKGYuJHZlcnNpb24+NylyZXR1cm5bbmV3IG4odSxsLCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgiKV07aWYoIShsIGluIGguY29uc3RhbnRzKSlyZXR1cm5bbmV3IG4odSxsLCdjb25zdGFudCAiJXMiIG5vdCBmb3VuZCcsbCldO2U9YSh7fSxlLHt2YWx1ZTpoLmNvbnN0YW50c1tsXX0pfXJldHVybiBjLmZ1bmN0aW9uJiYib2JqZWN0Ij09PWkobCk/cihlKTpjLnR5cGUmJnNbYy50eXBlXT9zW2MudHlwZV0oZSk6byhhKHt9LGUse3ZhbHVlU3BlYzpjLnR5cGU/ZltjLnR5cGVdOmN9KSl9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC9leHRlbmQiOjMxMywiLi4vdXRpbC9nZXRfdHlwZSI6MzE0LCIuL3ZhbGlkYXRlX2FycmF5IjozMTcsIi4vdmFsaWRhdGVfYm9vbGVhbiI6MzE4LCIuL3ZhbGlkYXRlX2NvbG9yIjozMTksIi4vdmFsaWRhdGVfY29uc3RhbnRzIjozMjAsIi4vdmFsaWRhdGVfZW51bSI6MzIxLCIuL3ZhbGlkYXRlX2ZpbHRlciI6MzIyLCIuL3ZhbGlkYXRlX2Z1bmN0aW9uIjozMjMsIi4vdmFsaWRhdGVfbGF5ZXIiOjMyNSwiLi92YWxpZGF0ZV9udW1iZXIiOjMyNywiLi92YWxpZGF0ZV9vYmplY3QiOjMyOCwiLi92YWxpZGF0ZV9zb3VyY2UiOjMzMCwiLi92YWxpZGF0ZV9zdHJpbmciOjMzMX1dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuL3ZhbGlkYXRlIiksYT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxvPXQuc3R5bGUscz10LnN0eWxlU3BlYyxsPXQua2V5LGM9dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fGk7aWYoImFycmF5IiE9PW4oZSkpcmV0dXJuW25ldyBhKGwsZSwiYXJyYXkgZXhwZWN0ZWQsICVzIGZvdW5kIixuKGUpKV07aWYoci5sZW5ndGgmJmUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuW25ldyBhKGwsZSwiYXJyYXkgbGVuZ3RoICVkIGV4cGVjdGVkLCBsZW5ndGggJWQgZm91bmQiLHIubGVuZ3RoLGUubGVuZ3RoKV07aWYoclsibWluLWxlbmd0aCJdJiZlLmxlbmd0aDxyWyJtaW4tbGVuZ3RoIl0pcmV0dXJuW25ldyBhKGwsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICVkIGV4cGVjdGVkLCBsZW5ndGggJWQgZm91bmQiLHJbIm1pbi1sZW5ndGgiXSxlLmxlbmd0aCldO3ZhciB1PXt0eXBlOnIudmFsdWV9O3MuJHZlcnNpb248NyYmKHUuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT1uKHIudmFsdWUpJiYodT1yLnZhbHVlKTtmb3IodmFyIGY9W10saD0wO2g8ZS5sZW5ndGg7aCsrKWY9Zi5jb25jYXQoYyh7YXJyYXk6ZSxhcnJheUluZGV4OmgsdmFsdWU6ZVtoXSx2YWx1ZVNwZWM6dSxzdHlsZTpvLHN0eWxlU3BlYzpzLGtleTpsKyJbIitoKyJdIn0pKTtyZXR1cm4gZn19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuLi91dGlsL2dldF90eXBlIjozMTQsIi4vdmFsaWRhdGUiOjMxNn1dLDMxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxhPW4oZSk7cmV0dXJuImJvb2xlYW4iIT09YT9bbmV3IGkocixlLCJib29sZWFuIGV4cGVjdGVkLCAlcyBmb3VuZCIsYSldOltdfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMTIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMxNH1dLDMxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL2dldF90eXBlIiksYT10KCJjc3Njb2xvcnBhcnNlciIpLnBhcnNlQ1NTQ29sb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxvPWkocik7cmV0dXJuInN0cmluZyIhPT1vP1tuZXcgbihlLHIsImNvbG9yIGV4cGVjdGVkLCAlcyBmb3VuZCIsbyldOm51bGw9PT1hKHIpP1tuZXcgbihlLHIsJ2NvbG9yIGV4cGVjdGVkLCAiJXMiIGZvdW5kJyxyKV06W119fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzE0LGNzc2NvbG9ycGFyc2VyOjEwN31dLDMyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL2dldF90eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtpZih0LnN0eWxlU3BlYy4kdmVyc2lvbj43KXJldHVybiByP1tuZXcgbihlLHIsImNvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCIpXTpbXTt2YXIgYT1pKHIpO2lmKCJvYmplY3QiIT09YSlyZXR1cm5bbmV3IG4oZSxyLCJvYmplY3QgZXhwZWN0ZWQsICVzIGZvdW5kIixhKV07dmFyIG89W107Zm9yKHZhciBzIGluIHIpIkAiIT09c1swXSYmby5wdXNoKG5ldyBuKGUrIi4iK3MscltzXSwnY29uc3RhbnRzIG11c3Qgc3RhcnQgd2l0aCAiQCInKSk7cmV0dXJuIG99fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzE0fV0sMzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLGE9dC52YWx1ZVNwZWMsbz1bXTtyZXR1cm4gYS52YWx1ZXMuaW5kZXhPZihpKHIpKT09PS0xJiZvLnB1c2gobmV3IG4oZSxyLCJleHBlY3RlZCBvbmUgb2YgWyVzXSwgJXMgZm91bmQiLGEudmFsdWVzLmpvaW4oIiwgIikscikpLG99fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzE1fV0sMzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4vdmFsaWRhdGVfZW51bSIpLGE9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLG89dCgiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe3ZhciByLHM9ZS52YWx1ZSxsPWUua2V5LGM9ZS5zdHlsZVNwZWMsdT1bXTtpZigiYXJyYXkiIT09YShzKSlyZXR1cm5bbmV3IG4obCxzLCJhcnJheSBleHBlY3RlZCwgJXMgZm91bmQiLGEocykpXTtpZihzLmxlbmd0aDwxKXJldHVybltuZXcgbihsLHMsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaCh1PXUuY29uY2F0KGkoe2tleTpsKyJbMF0iLHZhbHVlOnNbMF0sdmFsdWVTcGVjOmMuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLG8oc1swXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpzLmxlbmd0aD49MiYmIiR0eXBlIj09c1sxXSYmdS5wdXNoKG5ldyBuKGwscywnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIiVzIicsc1swXSkpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPXMubGVuZ3RoJiZ1LnB1c2gobmV3IG4obCxzLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICIlcyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnLHNbMF0pKTtjYXNlImluIjpjYXNlIiFpbiI6cy5sZW5ndGg+PTImJihyPWEoc1sxXSksInN0cmluZyIhPT1yP3UucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZ1LnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpKTtmb3IodmFyIGY9MjtmPHMubGVuZ3RoO2YrKylyPWEoc1tmXSksIiR0eXBlIj09c1sxXT91PXUuY29uY2F0KGkoe2tleTpsKyJbIitmKyJdIix2YWx1ZTpzW2ZdLHZhbHVlU3BlYzpjLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyI9PT1yJiYiQCI9PT1zW2ZdWzBdP3UucHVzaChuZXcgbihsKyJbIitmKyJdIixzW2ZdLCJmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGEgY29uc3RhbnQiKSk6InN0cmluZyIhPT1yJiYibnVtYmVyIiE9PXImJiJib29sZWFuIiE9PXImJnUucHVzaChuZXcgbihsKyJbIitmKyJdIixzW2ZdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgJXMgZm91bmQiLHIpKTticmVhaztjYXNlImFueSI6Y2FzZSJhbGwiOmNhc2Uibm9uZSI6Zm9yKGY9MTtmPHMubGVuZ3RoO2YrKyl1PXUuY29uY2F0KHQoe2tleTpsKyJbIitmKyJdIix2YWx1ZTpzW2ZdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOnI9YShzWzFdKSwyIT09cy5sZW5ndGg/dS5wdXNoKG5ldyBuKGwscywnZmlsdGVyIGFycmF5IGZvciAiJXMiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJyxzWzBdKSk6InN0cmluZyIhPT1yP3UucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZ1LnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpfXJldHVybiB1fX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMTIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMxNCwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzE1LCIuL3ZhbGlkYXRlX2VudW0iOjMyMX1dLDMyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL2dldF90eXBlIiksYT10KCIuL3ZhbGlkYXRlIiksbz10KCIuL3ZhbGlkYXRlX29iamVjdCIpLHM9dCgiLi92YWxpZGF0ZV9hcnJheSIpLGw9dCgiLi92YWxpZGF0ZV9udW1iZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1bXSxhPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQocyh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpyfSkpLCJhcnJheSI9PT1pKGEpJiYwPT09YS5sZW5ndGgmJmUucHVzaChuZXcgbih0LmtleSxhLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX1mdW5jdGlvbiByKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1pKHIpKXJldHVybltuZXcgbihzLHIsImFycmF5IGV4cGVjdGVkLCAlcyBmb3VuZCIsaShyKSldO2lmKDIhPT1yLmxlbmd0aClyZXR1cm5bbmV3IG4ocyxyLCJhcnJheSBsZW5ndGggJWQgZXhwZWN0ZWQsIGxlbmd0aCAlZCBmb3VuZCIsMixyLmxlbmd0aCldO3ZhciBoPWkoclswXSk7aWYodXx8KHU9aCksaCE9PXUpcmV0dXJuW25ldyBuKHMsciwiJXMgc3RvcCBrZXkgdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3Aga2V5IHR5cGUgJXMiLGgsdSldO2lmKCJvYmplY3QiPT09aCl7aWYodm9pZCAwPT09clswXS56b29tKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbSIpXTtpZih2b2lkIDA9PT1yWzBdLnZhbHVlKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUiKV07ZT1lLmNvbmNhdChvKHtrZXk6cysiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206bCx2YWx1ZTpjfX0pKX1lbHNlIGU9ZS5jb25jYXQoKGQ/bDpjKSh7a2V5OnMrIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSk7cmV0dXJuIGU9ZS5jb25jYXQoYSh7a2V5OnMrIlsxXSIsdmFsdWU6clsxXSx2YWx1ZVNwZWM6ZixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSwibnVtYmVyIj09PWkoclswXSkmJigicGllY2V3aXNlLWNvbnN0YW50Ij09PWYuZnVuY3Rpb24mJnJbMF0lMSE9MCYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiem9vbSBsZXZlbCBmb3IgcGllY2V3aXNlLWNvbnN0YW50IGZ1bmN0aW9ucyBtdXN0IGJlIGFuIGludGVnZXIiKSksMCE9PXQuYXJyYXlJbmRleCYmclswXTx0LmFycmF5W3QuYXJyYXlJbmRleC0xXVswXSYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiYXJyYXkgc3RvcHMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIikpKSxlfWZ1bmN0aW9uIGModCl7dmFyIGU9W10scj1pKHQudmFsdWUpO3JldHVybiJudW1iZXIiIT09ciYmInN0cmluZyIhPT1yJiYiYXJyYXkiIT09ciYmZS5wdXNoKG5ldyBuKHQua2V5LHQudmFsdWUsInByb3BlcnR5IHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZyBvciBhcnJheSIpKSxlfXZhciB1LGY9dC52YWx1ZVNwZWMsaD12b2lkIDAhPT10LnZhbHVlLnByb3BlcnR5fHwib2JqZWN0Ij09PXUsZD12b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5fHwib2JqZWN0Ij09PXUscD1vKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmV9fSk7cmV0dXJuIHQuc3R5bGVTcGVjLiR2ZXJzaW9uPj04JiYoaCYmIXQudmFsdWVTcGVjWyJwcm9wZXJ0eS1mdW5jdGlvbiJdP3AucHVzaChuZXcgbih0LmtleSx0LnZhbHVlLCJwcm9wZXJ0eSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKTpkJiYhdC52YWx1ZVNwZWNbInpvb20tZnVuY3Rpb24iXSYmcC5wdXNoKG5ldyBuKHQua2V5LHQudmFsdWUsInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSkpLHB9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzE0LCIuL3ZhbGlkYXRlIjozMTYsIi4vdmFsaWRhdGVfYXJyYXkiOjMxNywiLi92YWxpZGF0ZV9udW1iZXIiOjMyNywiLi92YWxpZGF0ZV9vYmplY3QiOjMyOH1dLDMyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuL3ZhbGlkYXRlX3N0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksYT1pKHQpO3JldHVybiBhLmxlbmd0aD9hOihlLmluZGV4T2YoIntmb250c3RhY2t9Iik9PT0tMSYmYS5wdXNoKG5ldyBuKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7Zm9udHN0YWNrfSIgdG9rZW4nKSksZS5pbmRleE9mKCJ7cmFuZ2V9Iik9PT0tMSYmYS5wdXNoKG5ldyBuKHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSxhKX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuL3ZhbGlkYXRlX3N0cmluZyI6MzMxfV0sMzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQiKSxhPXQoIi4vdmFsaWRhdGVfb2JqZWN0Iiksbz10KCIuL3ZhbGlkYXRlX2ZpbHRlciIpLHM9dCgiLi92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSIpLGw9dCgiLi92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHkiKSxjPXQoIi4uL3V0aWwvZXh0ZW5kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSx1PXQua2V5LGY9dC5zdHlsZSxoPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgbih1LHIsJ2VpdGhlciAidHlwZSIgb3IgInJlZiIgaXMgcmVxdWlyZWQnKSk7dmFyIGQ9aShyLnR5cGUpLHA9aShyLnJlZik7aWYoci5pZClmb3IodmFyIG09MDttPHQuYXJyYXlJbmRleDttKyspe3ZhciB2PWYubGF5ZXJzW21dO2kodi5pZCk9PT1pKHIuaWQpJiZlLnB1c2gobmV3IG4odSxyLmlkLCdkdXBsaWNhdGUgbGF5ZXIgaWQgIiVzIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJWQnLHIuaWQsdi5pZC5fX2xpbmVfXykpfWlmKCJyZWYiaW4gcil7WyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwiZmlsdGVyIiwibGF5b3V0Il0uZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgbih1LHJbdF0sJyIlcyIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVycycsdCkpfSk7dmFyIGc7Zi5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkPT1wJiYoZz10KX0pLGc/Zy5yZWY/ZS5wdXNoKG5ldyBuKHUsci5yZWYsInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyIikpOmQ9aShnLnR5cGUpOmUucHVzaChuZXcgbih1LHIucmVmLCdyZWYgbGF5ZXIgIiVzIiBub3QgZm91bmQnLHApKX1lbHNlIGlmKCJiYWNrZ3JvdW5kIiE9PWQpaWYoci5zb3VyY2Upe3ZhciB5PWYuc291cmNlcyYmZi5zb3VyY2VzW3Iuc291cmNlXTt5PyJ2ZWN0b3IiPT15LnR5cGUmJiJyYXN0ZXIiPT1kP2UucHVzaChuZXcgbih1LHIuc291cmNlLCdsYXllciAiJXMiIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZScsci5pZCkpOiJyYXN0ZXIiPT15LnR5cGUmJiJyYXN0ZXIiIT1kP2UucHVzaChuZXcgbih1LHIuc291cmNlLCdsYXllciAiJXMiIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZScsci5pZCkpOiJ2ZWN0b3IiIT15LnR5cGV8fHJbInNvdXJjZS1sYXllciJdfHxlLnB1c2gobmV3IG4odSxyLCdsYXllciAiJXMiIG11c3Qgc3BlY2lmeSBhICJzb3VyY2UtbGF5ZXIiJyxyLmlkKSk6ZS5wdXNoKG5ldyBuKHUsci5zb3VyY2UsJ3NvdXJjZSAiJXMiIG5vdCBmb3VuZCcsci5zb3VyY2UpKX1lbHNlIGUucHVzaChuZXcgbih1LHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoYSh7a2V5OnUsdmFsdWU6cix2YWx1ZVNwZWM6aC5sYXllcixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7ZmlsdGVyOm8sbGF5b3V0OmZ1bmN0aW9uKHQpe3JldHVybiBhKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIGwoYyh7bGF5ZXJUeXBlOmR9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBhKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIHMoYyh7bGF5ZXJUeXBlOmR9LHQpKX19fSl9fX0pKX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuLi91dGlsL2V4dGVuZCI6MzEzLCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50IjozMTUsIi4vdmFsaWRhdGVfZmlsdGVyIjozMjIsIi4vdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5IjozMjYsIi4vdmFsaWRhdGVfb2JqZWN0IjozMjgsIi4vdmFsaWRhdGVfcGFpbnRfcHJvcGVydHkiOjMyOX1dLDMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3ZhbGlkYXRlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC5zdHlsZSxhPXQuc3R5bGVTcGVjLG89dC52YWx1ZSxzPXQub2JqZWN0S2V5LGw9YVsibGF5b3V0XyIrdC5sYXllclR5cGVdO2lmKHQudmFsdWVTcGVjfHxsW3NdKXt2YXIgYz1bXTtyZXR1cm4ic3ltYm9sIj09PXQubGF5ZXJUeXBlJiYoImljb24taW1hZ2UiPT09cyYmciYmIXIuc3ByaXRlP2MucHVzaChuZXcgaShlLG8sJ3VzZSBvZiAiaWNvbi1pbWFnZSIgcmVxdWlyZXMgYSBzdHlsZSAic3ByaXRlIiBwcm9wZXJ0eScpKToidGV4dC1maWVsZCI9PT1zJiZyJiYhci5nbHlwaHMmJmMucHVzaChuZXcgaShlLG8sJ3VzZSBvZiAidGV4dC1maWVsZCIgcmVxdWlyZXMgYSBzdHlsZSAiZ2x5cGhzIiBwcm9wZXJ0eScpKSksYy5jb25jYXQobih7a2V5OnQua2V5LHZhbHVlOm8sdmFsdWVTcGVjOnQudmFsdWVTcGVjfHxsW3NdLHN0eWxlOnIsc3R5bGVTcGVjOmF9KSl9cmV0dXJuW25ldyBpKGUsbywndW5rbm93biBwcm9wZXJ0eSAiJXMiJyxzKV19fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi92YWxpZGF0ZSI6MzE2fV0sMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxpPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLGE9dC52YWx1ZVNwZWMsbz1uKHIpO3JldHVybiJudW1iZXIiIT09bz9bbmV3IGkoZSxyLCJudW1iZXIgZXhwZWN0ZWQsICVzIGZvdW5kIixvKV06Im1pbmltdW0iaW4gYSYmcjxhLm1pbmltdW0/W25ldyBpKGUsciwiJXMgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICVzIixyLGEubWluaW11bSldOiJtYXhpbXVtImluIGEmJnI+YS5tYXhpbXVtP1tuZXcgaShlLHIsIiVzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAlcyIscixhLm1heGltdW0pXTpbXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuLi91dGlsL2dldF90eXBlIjozMTR9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGE9dCgiLi92YWxpZGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbz10LnZhbHVlU3BlYyxzPXQub2JqZWN0RWxlbWVudFZhbGlkYXRvcnN8fHt9LGw9dC5zdHlsZSxjPXQuc3R5bGVTcGVjLHU9W10sZj1pKHIpO2lmKCJvYmplY3QiIT09ZilyZXR1cm5bbmV3IG4oZSxyLCJvYmplY3QgZXhwZWN0ZWQsICVzIGZvdW5kIixmKV07Zm9yKHZhciBoIGluIHIpe3ZhciBkPWguc3BsaXQoIi4iKVswXSxwPW8mJihvW2RdfHxvWyIqIl0pLG09c1tkXXx8c1siKiJdO3B8fG0/dT11LmNvbmNhdCgobXx8YSkoe2tleTooZT9lKyIuIjplKStoLHZhbHVlOnJbaF0sdmFsdWVTcGVjOnAsc3R5bGU6bCxzdHlsZVNwZWM6YyxvYmplY3Q6cixvYmplY3RLZXk6aH0pKToiIiE9PWUmJjEhPT1lLnNwbGl0KCIuIikubGVuZ3RoJiZ1LnB1c2gobmV3IG4oZSxyW2hdLCd1bmtub3duIHByb3BlcnR5ICIlcyInLGgpKX1mb3IoZCBpbiBvKW9bZF0ucmVxdWlyZWQmJnZvaWQgMD09PW9bZF0uZGVmYXVsdCYmdm9pZCAwPT09cltkXSYmdS5wdXNoKG5ldyBuKGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJXMiJyxkKSk7cmV0dXJuIHV9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMxMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzE0LCIuL3ZhbGlkYXRlIjozMTZ9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZGF0ZSIpLGk9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQuc3R5bGUsYT10LnN0eWxlU3BlYyxvPXQudmFsdWUscz10Lm9iamVjdEtleSxsPWFbInBhaW50XyIrdC5sYXllclR5cGVdLGM9cy5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtyZXR1cm4gYyYmbFtjWzFdXSYmbFtjWzFdXS50cmFuc2l0aW9uP24oe2tleTplLHZhbHVlOm8sdmFsdWVTcGVjOmEudHJhbnNpdGlvbixzdHlsZTpyLHN0eWxlU3BlYzphfSk6dC52YWx1ZVNwZWN8fGxbc10/bih7a2V5OnQua2V5LHZhbHVlOm8sdmFsdWVTcGVjOnQudmFsdWVTcGVjfHxsW3NdLHN0eWxlOnIsc3R5bGVTcGVjOmF9KTpbbmV3IGkoZSxvLCd1bmtub3duIHByb3BlcnR5ICIlcyInLHMpXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuL3ZhbGlkYXRlIjozMTZ9XSwzMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCIpLGE9dCgiLi92YWxpZGF0ZV9vYmplY3QiKSxvPXQoIi4vdmFsaWRhdGVfZW51bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXkscz10LnN0eWxlU3BlYyxsPXQuc3R5bGU7aWYoIWUudHlwZSlyZXR1cm5bbmV3IG4ocixlLCcidHlwZSIgaXMgcmVxdWlyZWQnKV07c3dpdGNoKGkoZS50eXBlKSl7Y2FzZSJ2ZWN0b3IiOmNhc2UicmFzdGVyIjp2YXIgYz1bXTtpZihjPWMuY29uY2F0KGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX3RpbGUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6c30pKSwidXJsImluIGUpZm9yKHZhciB1IGluIGUpWyJ0eXBlIiwidXJsIiwidGlsZVNpemUiXS5pbmRleE9mKHUpPDAmJmMucHVzaChuZXcgbihyKyIuIit1LGVbdV0sJ2Egc291cmNlIHdpdGggYSAidXJsIiBwcm9wZXJ0eSBtYXkgbm90IGluY2x1ZGUgYSAiJXMiIHByb3BlcnR5Jyx1KSk7cmV0dXJuIGM7Y2FzZSJnZW9qc29uIjpyZXR1cm4gYSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6cy5zb3VyY2VfZ2VvanNvbixzdHlsZTpsLHN0eWxlU3BlYzpzfSk7Y2FzZSJ2aWRlbyI6cmV0dXJuIGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX3ZpZGVvLHN0eWxlOmwsc3R5bGVTcGVjOnN9KTtjYXNlImltYWdlIjpyZXR1cm4gYSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6cy5zb3VyY2VfaW1hZ2Usc3R5bGU6bCxzdHlsZVNwZWM6c30pO2RlZmF1bHQ6cmV0dXJuIG8oe2tleTpyKyIudHlwZSIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOlsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXX0sc3R5bGU6bCxzdHlsZVNwZWM6c30pfX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzEyLCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50IjozMTUsIi4vdmFsaWRhdGVfZW51bSI6MzIxLCIuL3ZhbGlkYXRlX29iamVjdCI6MzI4fV0sMzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxpPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LGE9bihlKTtyZXR1cm4ic3RyaW5nIiE9PWE/W25ldyBpKHIsZSwic3RyaW5nIGV4cGVjdGVkLCAlcyBmb3VuZCIsYSldOltdfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMTIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMxNH1dLDMzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZT1lfHxsO3ZhciByPVtdO3JldHVybiByPXIuY29uY2F0KHMoe2tleToiIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczpjfX0pKSxlLiR2ZXJzaW9uPjcmJnQuY29uc3RhbnRzJiYocj1yLmNvbmNhdChvKHtrZXk6ImNvbnN0YW50cyIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksaShyKX1mdW5jdGlvbiBpKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIG89dCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMiKSxzPXQoIi4vdmFsaWRhdGUvdmFsaWRhdGUiKSxsPXQoIi4uL3JlZmVyZW5jZS9sYXRlc3QubWluIiksYz10KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX2dseXBoc191cmwiKTtuLnNvdXJjZT1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlIikpLG4ubGF5ZXI9YSh0KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyIikpLG4uZmlsdGVyPWEodCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXIiKSksbi5wYWludFByb3BlcnR5PWEodCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSIpKSxuLmxheW91dFByb3BlcnR5PWEodCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHkiKSksZS5leHBvcnRzPW59LHsiLi4vcmVmZXJlbmNlL2xhdGVzdC5taW4iOjMzMywiLi92YWxpZGF0ZS92YWxpZGF0ZSI6MzE2LCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbnN0YW50cyI6MzIwLAoiLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXIiOjMyMiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsIjozMjQsIi4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5ZXIiOjMyNSwiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHkiOjMyNiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSI6MzI5LCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSI6MzMwfV0sMzMzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vdjgubWluLmpzb24iKX0seyIuL3Y4Lm1pbi5qc29uIjozMzR9XSwzMzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3RpbGUiLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV90aWxlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJ2ZWN0b3IiLCJyYXN0ZXIiXX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJnZW9qc29uIl19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTR9LGJ1ZmZlcjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjY0fSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozfSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDAwfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn19LHNvdXJjZV92aWRlbzp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOlsidmlkZW8iXX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJpbWFnZSJdfSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbImZpbGwiLCJsaW5lIiwic3ltYm9sIiwiY2lyY2xlIiwicmFzdGVyIiwiYmFja2dyb3VuZCJdfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHJlZjp7dHlwZToic3RyaW5nIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0saW50ZXJhY3RpdmU6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifSwicGFpbnQuKiI6e3R5cGU6InBhaW50In19LGxheW91dDpbImxheW91dF9maWxsIiwibGF5b3V0X2xpbmUiLCJsYXlvdXRfY2lyY2xlIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfYmFja2dyb3VuZCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9maWxsOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLGRlZmF1bHQ6ImJ1dHQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsiYmV2ZWwiLCJyb3VuZCIsIm1pdGVyIl0sZGVmYXVsdDoibWl0ZXIifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6Im1pdGVyIn1dfSwibGluZS1yb3VuZC1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjA1LGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsicG9pbnQiLCJsaW5lIl0sZGVmYXVsdDoicG9pbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbeyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInN5bWJvbC1hdm9pZC1lZGdlcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITF9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdmFsdWVzOlsibm9uZSIsImJvdGgiLCJ3aWR0aCIsImhlaWdodCJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tdGV4dC1maXQtcGFkZGluZyI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlswLDAsMCwwXSx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiLCJpY29uLXRleHQtZml0IiwidGV4dC1maWVsZCJdfSwiaWNvbi1pbWFnZSI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdG9rZW5zOiEwfSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWZpZWxkIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiIiLHRva2VuczohMH0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWxldHRlci1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImNlbnRlciIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1tYXgtYW5nbGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDUsdW5pdHM6ImRlZ3JlZXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InRleHQtcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0seyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsdW5pdHM6ImVtcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczpbIj09IiwiIT0iLCI+IiwiPj0iLCI8IiwiPD0iLCJpbiIsIiFpbiIsImFsbCIsImFueSIsIm5vbmUiLCJoYXMiLCIhaGFzIl19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXX0sY29sb3Jfb3BlcmF0aW9uOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJsaWdodGVuIiwic2F0dXJhdGUiLCJzcGluIiwiZmFkZSIsIm1peCJdfSxmdW5jdGlvbjp7c3RvcHM6e3R5cGU6ImFycmF5IixyZXF1aXJlZDohMCx2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJleHBvbmVudGlhbCIsImludGVydmFsIiwiY2F0ZWdvcmljYWwiXSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjIsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxwYWludDpbInBhaW50X2ZpbGwiLCJwYWludF9saW5lIiwicGFpbnRfY2lyY2xlIiwicGFpbnRfc3ltYm9sIiwicGFpbnRfcmFzdGVyIiwicGFpbnRfYmFja2dyb3VuZCJdLHBhaW50X2ZpbGw6eyJmaWxsLWFudGlhbGlhcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITB9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XX0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dfSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC10cmFuc2xhdGUiXX0sImZpbGwtcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XX0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl19LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoibGluZSB3aWR0aHMiLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV19LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9jaXJjbGU6eyJjaXJjbGUtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXX0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIn19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl19LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbInRleHQtZmllbGQiLCJ0ZXh0LXRyYW5zbGF0ZSJdfX0scGFpbnRfcmFzdGVyOnsicmFzdGVyLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIn0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoibWlsbGlzZWNvbmRzIn19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV19LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19fX0se31dLDMzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiEhKGkoKSYmYSgpJiZvKCkmJnMoKSYmbCgpJiZjKCkmJnUoKSYmZih0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKX1mdW5jdGlvbiBpKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnR9ZnVuY3Rpb24gYSgpe3JldHVybiBBcnJheS5wcm90b3R5cGUmJkFycmF5LnByb3RvdHlwZS5ldmVyeSYmQXJyYXkucHJvdG90eXBlLmZpbHRlciYmQXJyYXkucHJvdG90eXBlLmZvckVhY2gmJkFycmF5LnByb3RvdHlwZS5pbmRleE9mJiZBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5tYXAmJkFycmF5LnByb3RvdHlwZS5zb21lJiZBcnJheS5wcm90b3R5cGUucmVkdWNlJiZBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQmJkFycmF5LmlzQXJyYXl9ZnVuY3Rpb24gbygpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfWZ1bmN0aW9uIHMoKXtyZXR1cm4gT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zfWZ1bmN0aW9uIGwoKXtyZXR1cm4iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT059ZnVuY3Rpb24gYygpe3JldHVybiJXb3JrZXIiaW4gd2luZG93fWZ1bmN0aW9uIHUoKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHZvaWQgMD09PWRbdF0mJihkW3RdPWgodCkpLGRbdF19ZnVuY3Rpb24gaCh0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyPU9iamVjdC5jcmVhdGUobi53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gci5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsZS5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9lLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIscil8fGUucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5zdXBwb3J0c0NvbnRleHQ/ZS5zdXBwb3J0c0NvbnRleHQoIndlYmdsIixyKXx8ZS5zdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fGUuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixyKX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPW46d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1uKTt2YXIgZD17fTtuLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0se31dLDMzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGF5b3V0VmVydGV4QXJyYXlUeXBlO3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IGU7dmFyIHI9dC5lbGVtZW50QXJyYXlUeXBlO3ImJih0aGlzLmVsZW1lbnRBcnJheT1uZXcgcik7dmFyIG49dC5lbGVtZW50QXJyYXlUeXBlMjtuJiYodGhpcy5lbGVtZW50QXJyYXkyPW5ldyBuKSx0aGlzLnBhaW50VmVydGV4QXJyYXlzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheVR5cGVzLGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdH0pfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxuLnByb3RvdHlwZS5oYXNDYXBhY2l0eUZvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgrdDw9bi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSH0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LG4ucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEFycmF5LnRyaW0oKSx0aGlzLmVsZW1lbnRBcnJheSYmdGhpcy5lbGVtZW50QXJyYXkudHJpbSgpLHRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnRyaW0oKTtmb3IodmFyIHQgaW4gdGhpcy5wYWludFZlcnRleEFycmF5cyl0aGlzLnBhaW50VmVydGV4QXJyYXlzW3RdLnRyaW0oKX0sbi5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue2xheW91dFZlcnRleEFycmF5OnRoaXMubGF5b3V0VmVydGV4QXJyYXkuc2VyaWFsaXplKCksZWxlbWVudEFycmF5OnRoaXMuZWxlbWVudEFycmF5JiZ0aGlzLmVsZW1lbnRBcnJheS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXkyOnRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlzOmkubWFwT2JqZWN0KHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KX19LG4ucHJvdG90eXBlLmdldFRyYW5zZmVyYWJsZXM9ZnVuY3Rpb24odCl7dC5wdXNoKHRoaXMubGF5b3V0VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5JiZ0LnB1c2godGhpcy5lbGVtZW50QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5MiYmdC5wdXNoKHRoaXMuZWxlbWVudEFycmF5Mi5hcnJheUJ1ZmZlcik7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMpdC5wdXNoKHRoaXMucGFpbnRWZXJ0ZXhBcnJheXNbZV0uYXJyYXlCdWZmZXIpfX0seyIuLi91dGlsL3V0aWwiOjQ1MH1dLDMzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXI9dC5sYXllcix0aGlzLmNoaWxkTGF5ZXJzPXQuY2hpbGRMYXllcnMsdGhpcy50eXBlPXRoaXMubGF5ZXIudHlwZSx0aGlzLmZlYXR1cmVzPVtdLHRoaXMuaWQ9dGhpcy5sYXllci5pZCx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5zb3VyY2VMYXllcj10aGlzLmxheWVyLnNvdXJjZUxheWVyLHRoaXMuc291cmNlTGF5ZXJJbmRleD10LnNvdXJjZUxheWVySW5kZXgsdGhpcy5taW5ab29tPXRoaXMubGF5ZXIubWluem9vbSx0aGlzLm1heFpvb209dGhpcy5sYXllci5tYXh6b29tLHRoaXMucGFpbnRBdHRyaWJ1dGVzPWkodGhpcyksdC5hcnJheXMpe3ZhciBlPXRoaXMucHJvZ3JhbUludGVyZmFjZXM7dGhpcy5idWZmZXJHcm91cHM9dS5tYXBPYmplY3QodC5hcnJheXMsZnVuY3Rpb24ocixuKXt2YXIgaT1lW25dLGE9dC5wYWludFZlcnRleEFycmF5VHlwZXNbbl07cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYyh0LHtsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6aS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUuc2VyaWFsaXplKCksZWxlbWVudEFycmF5VHlwZTppLmVsZW1lbnRBcnJheVR5cGUmJmkuZWxlbWVudEFycmF5VHlwZS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXlUeXBlMjppLmVsZW1lbnRBcnJheVR5cGUyJiZpLmVsZW1lbnRBcnJheVR5cGUyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlUeXBlczphfSl9KX0pfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LnByb2dyYW1JbnRlcmZhY2VzKXtmb3IodmFyIG49ZVtyXT17fSxpPTA7aTx0LmNoaWxkTGF5ZXJzLmxlbmd0aDtpKyspe25bdC5jaGlsZExheWVyc1tpXS5pZF09e2F0dHJpYnV0ZXM6W10sdW5pZm9ybXM6W10sZGVmaW5lczpbXSx2ZXJ0ZXhQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX0sZnJhZ21lbnRQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX19fXZhciBzPXQucHJvZ3JhbUludGVyZmFjZXNbcl07aWYocy5wYWludEF0dHJpYnV0ZXMpZm9yKHZhciBsPTA7bDxzLnBhaW50QXR0cmlidXRlcy5sZW5ndGg7bCsrKXt2YXIgYz1zLnBhaW50QXR0cmlidXRlc1tsXTtjLm11bHRpcGxpZXI9Yy5tdWx0aXBsaWVyfHwxO2Zvcih2YXIgZj0wO2Y8dC5jaGlsZExheWVycy5sZW5ndGg7ZisrKXt2YXIgZD10LmNoaWxkTGF5ZXJzW2ZdLHA9bltkLmlkXSxtPWMubmFtZTtoKCJhXyI9PT1jLm5hbWUuc2xpY2UoMCwyKSk7dmFyIHYsZz1jLm5hbWUuc2xpY2UoMik7aWYocC5mcmFnbWVudFByYWdtYXMuaW5pdGlhbGl6ZVtnXT0iIixkLmlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudChjLnBhaW50UHJvcGVydHkpKXAudW5pZm9ybXMucHVzaChjKSxwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109cC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXT1bInVuaWZvcm0iLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbV0uam9pbigiICIpKyI7IixwLmZyYWdtZW50UHJhZ21hcy5pbml0aWFsaXplW2ddPXAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVsie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGcsIj0iLG1dLmpvaW4oIiAiKSsiO1xuIjtlbHNlIGlmKGQuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50KGMucGFpbnRQcm9wZXJ0eSkpe3AuYXR0cmlidXRlcy5wdXNoKHUuZXh0ZW5kKHt9LGMse25hbWU6bX0pKSx2PVsidmFyeWluZyIsIntwcmVjaXNpb259Iiwie3R5cGV9IixnXS5qb2luKCIgIikrIjtcbiI7dmFyIHk9W3AuZnJhZ21lbnRQcmFnbWFzLmRlZmluZVtnXSwiYXR0cmlidXRlIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLG1dLmpvaW4oIiAiKSsiO1xuIjtwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109dixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYreSxwLnZlcnRleFByYWdtYXMuaW5pdGlhbGl6ZVtnXT1bZywiPSIsbSwiLyIsYy5tdWx0aXBsaWVyLnRvRml4ZWQoMSldLmpvaW4oIiAiKSsiO1xuIn1lbHNle2Zvcih2YXIgYj0idV8iK20uc2xpY2UoMikrIl90Iix4PWQuZ2V0UGFpbnRWYWx1ZVN0b3Bab29tTGV2ZWxzKGMucGFpbnRQcm9wZXJ0eSksXz0wO188eC5sZW5ndGgmJnhbX108dC56b29tOylfKys7Zm9yKHZhciB3PU1hdGgubWF4KDAsTWF0aC5taW4oeC5sZW5ndGgtNCxfLTIpKSxNPVtdLFQ9MDtUPDQ7VCsrKU0ucHVzaCh4W01hdGgubWluKHcrVCx4Lmxlbmd0aC0xKV0pO3Y9WyJ2YXJ5aW5nIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGddLmpvaW4oIiAiKSsiO1xuIixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYrWyJ1bmlmb3JtIiwibG93cCIsImZsb2F0IixiXS5qb2luKCIgIikrIjtcbiIscC5mcmFnbWVudFByYWdtYXMuZGVmaW5lW2ddPXYscC51bmlmb3Jtcy5wdXNoKHUuZXh0ZW5kKHt9LGMse25hbWU6YixnZXRWYWx1ZTpvKGMsdyksY29tcG9uZW50czoxfSkpO3ZhciBrPWMuY29tcG9uZW50cztpZigxPT09aylwLmF0dHJpYnV0ZXMucHVzaCh1LmV4dGVuZCh7fSxjLHtnZXRWYWx1ZTphKGMsTSksaXNGdW5jdGlvbjohMCxjb21wb25lbnRzOjQqa30pKSxwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddKz1bImF0dHJpYnV0ZSIsIntwcmVjaXNpb259IiwidmVjNCIsbV0uam9pbigiICIpKyI7XG4iLHAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVtnLCI9IiwiZXZhbHVhdGVfem9vbV9mdW5jdGlvbl8xKCIrbSsiLCAiK2IrIikiLCIvIixjLm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4iO2Vsc2V7Zm9yKHZhciBBPVtdLEU9MDtFPDQ7RSsrKUEucHVzaChtK0UpLHAuYXR0cmlidXRlcy5wdXNoKHUuZXh0ZW5kKHt9LGMse2dldFZhbHVlOmEoYyxbTVtFXV0pLGlzRnVuY3Rpb246ITAsbmFtZTptK0V9KSkscC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXSs9WyJhdHRyaWJ1dGUiLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbStFXS5qb2luKCIgIikrIjtcbiI7cC52ZXJ0ZXhQcmFnbWFzLmluaXRpYWxpemVbZ109W2csIiA9ICIsImV2YWx1YXRlX3pvb21fZnVuY3Rpb25fNCgiK0Euam9pbigiLCAiKSsiLCAiK2IrIikiLCIvIixjLm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4ifX19fX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZ2V0VmFsdWUocix1LmV4dGVuZCh7fSxuLHt6b29tOmVbMF19KSxpKTtmb3IodmFyIGE9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dO2EucHVzaCh0LmdldFZhbHVlKHIsdS5leHRlbmQoe30sbix7em9vbTpzfSksaSlbMF0pfXJldHVybiBhfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5nZXRQYWludEludGVycG9sYXRpb25UKHQucGFpbnRQcm9wZXJ0eSxuLnpvb20pO3JldHVybltNYXRoLm1heCgwLE1hdGgubWluKDQsaS1lKSldfX12YXIgcz10KCJmZWF0dXJlLWZpbHRlciIpLGw9dCgiLi9hcnJheV9ncm91cCIpLGM9dCgiLi9idWZmZXJfZ3JvdXAiKSx1PXQoIi4uL3V0aWwvdXRpbCIpLGY9dCgiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiKSxoPXQoImFzc2VydCIpO2UuZXhwb3J0cz1uLG4uY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoe2ZpbGw6dCgiLi9idWNrZXQvZmlsbF9idWNrZXQiKSxsaW5lOnQoIi4vYnVja2V0L2xpbmVfYnVja2V0IiksY2lyY2xlOnQoIi4vYnVja2V0L2NpcmNsZV9idWNrZXQiKSxzeW1ib2w6dCgiLi9idWNrZXQvc3ltYm9sX2J1Y2tldCIpfVtlLmxheWVyLnR5cGVdKShlKX0sbi5FWFRFTlQ9ODE5MixuLnByb3RvdHlwZS5wb3B1bGF0ZUFycmF5cz1mdW5jdGlvbigpe3RoaXMuY3JlYXRlQXJyYXlzKCksdGhpcy5yZWNhbGN1bGF0ZVN0eWxlTGF5ZXJzKCk7Zm9yKHZhciB0PTA7dDx0aGlzLmZlYXR1cmVzLmxlbmd0aDt0KyspdGhpcy5hZGRGZWF0dXJlKHRoaXMuZmVhdHVyZXNbdF0pO3RoaXMudHJpbUFycmF5cygpfSxuLnByb3RvdHlwZS5wcmVwYXJlQXJyYXlHcm91cD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYXJyYXlHcm91cHNbdF0sbj1yLmxlbmd0aCYmcltyLmxlbmd0aC0xXTtyZXR1cm4gbiYmbi5oYXNDYXBhY2l0eUZvcihlKXx8KG49bmV3IGwoe2xheW91dFZlcnRleEFycmF5VHlwZTp0aGlzLnByb2dyYW1JbnRlcmZhY2VzW3RdLmxheW91dFZlcnRleEFycmF5VHlwZSxlbGVtZW50QXJyYXlUeXBlOnRoaXMucHJvZ3JhbUludGVyZmFjZXNbdF0uZWxlbWVudEFycmF5VHlwZSxlbGVtZW50QXJyYXlUeXBlMjp0aGlzLnByb2dyYW1JbnRlcmZhY2VzW3RdLmVsZW1lbnRBcnJheVR5cGUyLHBhaW50VmVydGV4QXJyYXlUeXBlczp0aGlzLnBhaW50VmVydGV4QXJyYXlUeXBlc1t0XX0pLG4uaW5kZXg9ci5sZW5ndGgsci5wdXNoKG4pKSxufSxuLnByb3RvdHlwZS5jcmVhdGVBcnJheXM9ZnVuY3Rpb24oKXt0aGlzLmFycmF5R3JvdXBzPXt9LHRoaXMucGFpbnRWZXJ0ZXhBcnJheVR5cGVzPXt9O2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1JbnRlcmZhY2VzKXt0aGlzLmFycmF5R3JvdXBzW3RdPVtdO3ZhciBlPXRoaXMucGFpbnRWZXJ0ZXhBcnJheVR5cGVzW3RdPXt9LHI9dGhpcy5wYWludEF0dHJpYnV0ZXNbdF07Zm9yKHZhciBpIGluIHIpZVtpXT1uZXcgbi5WZXJ0ZXhBcnJheVR5cGUocltpXS5hdHRyaWJ1dGVzKX19LG4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVmZmVyR3JvdXBzKWZvcih2YXIgcj10aGlzLmJ1ZmZlckdyb3Vwc1tlXSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXS5kZXN0cm95KHQpfSxuLnByb3RvdHlwZS50cmltQXJyYXlzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYXJyYXlHcm91cHMpZm9yKHZhciBlPXRoaXMuYXJyYXlHcm91cHNbdF0scj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0udHJpbSgpfSxuLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYXJyYXlHcm91cHMpZm9yKHZhciBlPXRoaXMuYXJyYXlHcm91cHNbdF0scj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmlzRW1wdHkoKSlyZXR1cm4hMTtyZXR1cm4hMH0sbi5wcm90b3R5cGUuZ2V0VHJhbnNmZXJhYmxlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5hcnJheUdyb3Vwcylmb3IodmFyIHI9dGhpcy5hcnJheUdyb3Vwc1tlXSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXS5nZXRUcmFuc2ZlcmFibGVzKHQpfSxuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLnBhaW50QXR0cmlidXRlc1tlXVtuLmlkXS51bmlmb3JtcyxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD1yW3MubmFtZV07dFsidW5pZm9ybSIrcy5jb21wb25lbnRzKyJmdiJdKGwscy5nZXRWYWx1ZShuLGkpKX19LG4ucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybntsYXllcklkOnRoaXMubGF5ZXIuaWQsem9vbTp0aGlzLnpvb20sYXJyYXlzOnUubWFwT2JqZWN0KHRoaXMuYXJyYXlHcm91cHMsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSl9KSxwYWludFZlcnRleEFycmF5VHlwZXM6dS5tYXBPYmplY3QodGhpcy5wYWludFZlcnRleEFycmF5VHlwZXMsZnVuY3Rpb24odCl7cmV0dXJuIHUubWFwT2JqZWN0KHQsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KX0pLGNoaWxkTGF5ZXJJZHM6dGhpcy5jaGlsZExheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KX19LG4ucHJvdG90eXBlLmNyZWF0ZUZpbHRlcj1mdW5jdGlvbigpe3RoaXMuZmlsdGVyfHwodGhpcy5maWx0ZXI9cyh0aGlzLmxheWVyLmZpbHRlcikpfTt2YXIgZD17bGFzdEludGVnZXJab29tOjEvMCxsYXN0SW50ZWdlclpvb21UaW1lOjAsbGFzdFpvb206MH07bi5wcm90b3R5cGUucmVjYWxjdWxhdGVTdHlsZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5jaGlsZExheWVycy5sZW5ndGg7dCsrKXRoaXMuY2hpbGRMYXllcnNbdF0ucmVjYWxjdWxhdGUodGhpcy56b29tLGQpfSxuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0aGlzLmNoaWxkTGF5ZXJzLmxlbmd0aDthKyspZm9yKHZhciBvPXRoaXMuY2hpbGRMYXllcnNbYV0scz10aGlzLmFycmF5R3JvdXBzW3RdLGw9bi5pbmRleDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PWMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGY9Yy5wYWludFZlcnRleEFycmF5c1tvLmlkXTtmLnJlc2l6ZSh1KTtmb3IodmFyIGg9dGhpcy5wYWludEF0dHJpYnV0ZXNbdF1bby5pZF0uYXR0cmlidXRlcyxkPTA7ZDxoLmxlbmd0aDtkKyspZm9yKHZhciBwPWhbZF0sbT1wLmdldFZhbHVlKG8sZSxyKSx2PXAubXVsdGlwbGllcnx8MSxnPXAuY29tcG9uZW50c3x8MSx5PWw9PT1uLmluZGV4P2k6MCxiPXk7Yjx1O2IrKylmb3IodmFyIHg9Zi5nZXQoYiksXz0wO188ZztfKyspe3ZhciB3PWc+MT9wLm5hbWUrXzpwLm5hbWU7eFt3XT1tW19dKnZ9fX0sbi5WZXJ0ZXhBcnJheVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmKHttZW1iZXJzOnQsYWxpZ25tZW50OjR9KX0sbi5FbGVtZW50QXJyYXlUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih7bWVtYmVyczpbe3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljZXMiLGNvbXBvbmVudHM6dHx8M31dfSl9fSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0NDgsIi4uL3V0aWwvdXRpbCI6NDUwLCIuL2FycmF5X2dyb3VwIjozMzYsIi4vYnVja2V0L2NpcmNsZV9idWNrZXQiOjMzOCwiLi9idWNrZXQvZmlsbF9idWNrZXQiOjMzOSwiLi9idWNrZXQvbGluZV9idWNrZXQiOjM0MCwiLi9idWNrZXQvc3ltYm9sX2J1Y2tldCI6MzQxLCIuL2J1ZmZlcl9ncm91cCI6MzQzLGFzc2VydDo0NywiZmVhdHVyZS1maWx0ZXIiOjEzMn1dLDMzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7aS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vYnVja2V0IiksYT10KCIuLi8uLi91dGlsL3V0aWwiKSxvPXQoIi4uL2xvYWRfZ2VvbWV0cnkiKSxzPWkuRVhURU5UO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWEuaW5oZXJpdChpLHt9KSxuLnByb3RvdHlwZS5hZGRDaXJjbGVWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9LG4ucHJvdG90eXBlLnByb2dyYW1JbnRlcmZhY2VzPXtjaXJjbGU6e2xheW91dFZlcnRleEFycmF5VHlwZTpuZXcgaS5WZXJ0ZXhBcnJheVR5cGUoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dKSxlbGVtZW50QXJyYXlUeXBlOm5ldyBpLkVsZW1lbnRBcnJheVR5cGUscGFpbnRBdHRyaWJ1dGVzOlt7bmFtZToiYV9jb2xvciIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZ2V0UGFpbnRWYWx1ZSgiY2lyY2xlLWNvbG9yIixlLHIpfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJjaXJjbGUtY29sb3IifSx7bmFtZToiYV9yYWRpdXMiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MTYiLGlzTGF5ZXJDb25zdGFudDohMSxnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiY2lyY2xlLXJhZGl1cyIsZSxyKV19LG11bHRpcGxpZXI6MTAscGFpbnRQcm9wZXJ0eToiY2lyY2xlLXJhZGl1cyJ9LHtuYW1lOiJhX2JsdXIiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MTYiLGlzTGF5ZXJDb25zdGFudDohMSxnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiY2lyY2xlLWJsdXIiLGUscildfSxtdWx0aXBsaWVyOjEwLHBhaW50UHJvcGVydHk6ImNpcmNsZS1ibHVyIn0se25hbWU6ImFfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQxNiIsaXNMYXllckNvbnN0YW50OiExLGdldFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdC5nZXRQYWludFZhbHVlKCJjaXJjbGUtb3BhY2l0eSIsZSxyKV19LG11bHRpcGxpZXI6MjU1LHBhaW50UHJvcGVydHk6ImNpcmNsZS1vcGFjaXR5In1dfX0sbi5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9e3pvb206dGhpcy56b29tfSxyPW8odCksbj10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjaXJjbGUiLDApLGk9bi5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgbD0wO2w8clthXS5sZW5ndGg7bCsrKXt2YXIgYz1yW2FdW2xdLngsdT1yW2FdW2xdLnk7aWYoIShjPDB8fGM+PXN8fHU8MHx8dT49cykpe3ZhciBmPXRoaXMucHJlcGFyZUFycmF5R3JvdXAoImNpcmNsZSIsNCksaD1mLmxheW91dFZlcnRleEFycmF5LGQ9dGhpcy5hZGRDaXJjbGVWZXJ0ZXgoaCxjLHUsLTEsLTEpO3RoaXMuYWRkQ2lyY2xlVmVydGV4KGgsYyx1LDEsLTEpLHRoaXMuYWRkQ2lyY2xlVmVydGV4KGgsYyx1LDEsMSksdGhpcy5hZGRDaXJjbGVWZXJ0ZXgoaCxjLHUsLTEsMSksZi5lbGVtZW50QXJyYXkuZW1wbGFjZUJhY2soZCxkKzEsZCsyKSxmLmVsZW1lbnRBcnJheS5lbXBsYWNlQmFjayhkLGQrMyxkKzIpfX10aGlzLnBvcHVsYXRlUGFpbnRBcnJheXMoImNpcmNsZSIsZSx0LnByb3BlcnRpZXMsbixpKX19LHsiLi4vLi4vdXRpbC91dGlsIjo0NTAsIi4uL2J1Y2tldCI6MzM3LCIuLi9sb2FkX2dlb21ldHJ5IjozNDV9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uL2J1Y2tldCIpLGE9dCgiLi4vLi4vdXRpbC91dGlsIiksbz10KCIuLi9sb2FkX2dlb21ldHJ5Iikscz10KCJlYXJjdXQiKSxsPXQoIi4uLy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1hLmluaGVyaXQoaSx7fSksbi5wcm90b3R5cGUucHJvZ3JhbUludGVyZmFjZXM9e2ZpbGw6e2xheW91dFZlcnRleEFycmF5VHlwZTpuZXcgaS5WZXJ0ZXhBcnJheVR5cGUoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dKSxlbGVtZW50QXJyYXlUeXBlOm5ldyBpLkVsZW1lbnRBcnJheVR5cGUoMSksZWxlbWVudEFycmF5VHlwZTI6bmV3IGkuRWxlbWVudEFycmF5VHlwZSgyKSxwYWludEF0dHJpYnV0ZXM6W3tuYW1lOiJhX2NvbG9yIixjb21wb25lbnRzOjQsdHlwZToiVWludDgiLGdldFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5nZXRQYWludFZhbHVlKCJmaWxsLWNvbG9yIixlLHIpfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJmaWxsLWNvbG9yIn0se25hbWU6ImFfb3V0bGluZV9jb2xvciIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZ2V0UGFpbnRWYWx1ZSgiZmlsbC1vdXRsaW5lLWNvbG9yIixlLHIpfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJmaWxsLW91dGxpbmUtY29sb3IifSx7bmFtZToiYV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDgiLGdldFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdC5nZXRQYWludFZhbHVlKCJmaWxsLW9wYWNpdHkiLGUscildfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJmaWxsLW9wYWNpdHkifV19fSxuLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKHQpLHI9bChlLDUwMCksbj10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJmaWxsIiwwKSxpPW4ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGE9MDthPHIubGVuZ3RoO2ErKyl0aGlzLmFkZFBvbHlnb24oclthXSk7dGhpcy5wb3B1bGF0ZVBhaW50QXJyYXlzKCJmaWxsIix7em9vbTp0aGlzLnpvb219LHQucHJvcGVydGllcyxuLGkpfSxuLnByb3RvdHlwZS5hZGRQb2x5Z29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllKz10W3JdLmxlbmd0aDtmb3IodmFyIG49dGhpcy5wcmVwYXJlQXJyYXlHcm91cCgiZmlsbCIsZSksaT1bXSxhPVtdLG89bi5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdO2w+MCYmYS5wdXNoKGkubGVuZ3RoLzIpO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGg9bi5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhmLngsZi55KTt1Pj0xJiZuLmVsZW1lbnRBcnJheTIuZW1wbGFjZUJhY2soaC0xLGgpLGkucHVzaChmLngpLGkucHVzaChmLnkpfX1mb3IodmFyIGQ9cyhpLGEpLHA9MDtwPGQubGVuZ3RoO3ArKyluLmVsZW1lbnRBcnJheS5lbXBsYWNlQmFjayhkW3BdK28pfX0seyIuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzIjo0MzgsIi4uLy4uL3V0aWwvdXRpbCI6NDUwLCIuLi9idWNrZXQiOjMzNywiLi4vbG9hZF9nZW9tZXRyeSI6MzQ1LGVhcmN1dDoxMjZ9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uL2J1Y2tldCIpLGE9dCgiLi4vLi4vdXRpbC91dGlsIiksbz10KCIuLi9sb2FkX2dlb21ldHJ5Iikscz1pLkVYVEVOVCxsPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLGM9TWF0aC5wb3coMiwxNCkvLjU7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse30pLG4ucHJvdG90eXBlLmFkZExpbmVWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7cmV0dXJuIHQuZW1wbGFjZUJhY2soZS54PDwxfG4sZS55PDwxfGksTWF0aC5yb3VuZCg2MypyLngpKzEyOCxNYXRoLnJvdW5kKDYzKnIueSkrMTI4LDErKDA9PT1hPzA6YTwwPy0xOjEpfCguNSpvJjYzKTw8MiwuNSpvPj42KX0sbi5wcm90b3R5cGUucHJvZ3JhbUludGVyZmFjZXM9e2xpbmU6e2xheW91dFZlcnRleEFycmF5VHlwZTpuZXcgaS5WZXJ0ZXhBcnJheVR5cGUoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZGF0YSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4In1dKSxlbGVtZW50QXJyYXlUeXBlOm5ldyBpLkVsZW1lbnRBcnJheVR5cGV9fSxuLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKHQsMTUpLHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLmFkZExpbmUoZVtyXSx0aGlzLmxheWVyLmxheW91dFsibGluZS1qb2luIl0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtY2FwIl0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtbWl0ZXItbGltaXQiXSx0aGlzLmxheWVyLmxheW91dFsibGluZS1yb3VuZC1saW1pdCJdKX0sbi5wcm90b3R5cGUuYWRkTGluZT1mdW5jdGlvbih0LGUscixuLGkpewpmb3IodmFyIGE9dC5sZW5ndGg7YT4yJiZ0W2EtMV0uZXF1YWxzKHRbYS0yXSk7KWEtLTtpZighKHQubGVuZ3RoPDIpKXsiYmV2ZWwiPT09ZSYmKG49MS4wNSk7dmFyIG89cy8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LGM9dFswXSx1PXRbYS0xXSxmPWMuZXF1YWxzKHUpO2lmKHRoaXMucHJlcGFyZUFycmF5R3JvdXAoImxpbmUiLDEwKmEpLDIhPT1hfHwhZil7dGhpcy5kaXN0YW5jZT0wO3ZhciBoLGQscCxtLHYsZyx5LGI9cix4PWY/ImJ1dHQiOnIsXz0hMDt0aGlzLmUxPXRoaXMuZTI9dGhpcy5lMz0tMSxmJiYoaD10W2EtMl0sdj1jLnN1YihoKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdz0wO3c8YTt3KyspaWYoIShwPWYmJnc9PT1hLTE/dFsxXTp0W3crMV0pfHwhdFt3XS5lcXVhbHMocCkpe3YmJihtPXYpLGgmJihkPWgpLGg9dFt3XSx2PXA/cC5zdWIoaCkuX3VuaXQoKS5fcGVycCgpOm0sbT1tfHx2O3ZhciBNPW0uYWRkKHYpLl91bml0KCksVD1NLngqdi54K00ueSp2Lnksaz0xL1QsQT1UPGwmJmQmJnA7aWYoQSYmdz4wKXt2YXIgRT1oLmRpc3QoZCk7aWYoRT4yKm8pe3ZhciBTPWguc3ViKGguc3ViKGQpLl9tdWx0KG8vRSkuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPVMuZGlzdChkKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoUyx0aGlzLmRpc3RhbmNlLG0ubXVsdCgxKSwwLDAsITEpLGQ9U319dmFyIEw9ZCYmcCxDPUw/ZTpwP2I6eDtpZihMJiYicm91bmQiPT09QyYmKGs8aT9DPSJtaXRlciI6azw9MiYmKEM9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09QyYmaz5uJiYoQz0iYmV2ZWwiKSwiYmV2ZWwiPT09QyYmKGs+MiYmKEM9ImZsaXBiZXZlbCIpLGs8biYmKEM9Im1pdGVyIikpLGQmJih0aGlzLmRpc3RhbmNlKz1oLmRpc3QoZCkpLCJtaXRlciI9PT1DKU0uX211bHQoayksdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSk7ZWxzZSBpZigiZmxpcGJldmVsIj09PUMpe2lmKGs+MTAwKU09di5jbG9uZSgpO2Vsc2V7dmFyIEk9bS54KnYueS1tLnkqdi54PjA/LTE6MSxEPWsqbS5hZGQodikubWFnKCkvbS5zdWIodikubWFnKCk7TS5fcGVycCgpLl9tdWx0KEQqSSl9dGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxNLm11bHQoLTEpLDAsMCwhMSl9ZWxzZSBpZigiYmV2ZWwiPT09Q3x8ImZha2Vyb3VuZCI9PT1DKXt2YXIgUD1tLngqdi55LW0ueSp2Lng+MCx6PS1NYXRoLnNxcnQoayprLTEpO2lmKFA/KHk9MCxnPXopOihnPTAseT16KSxffHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoaCx0aGlzLmRpc3RhbmNlLG0sZyx5LCExKSwiZmFrZXJvdW5kIj09PUMpe2Zvcih2YXIgTyxSPU1hdGguZmxvb3IoOCooLjUtKFQtLjUpKSksRj0wO0Y8UjtGKyspTz12Lm11bHQoKEYrMSkvKFIrMSkpLl9hZGQobSkuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KGgsdGhpcy5kaXN0YW5jZSxPLFApO3RoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoaCx0aGlzLmRpc3RhbmNlLE0sUCk7Zm9yKHZhciBqPVItMTtqPj0wO2otLSlPPW0ubXVsdCgoaisxKS8oUisxKSkuX2FkZCh2KS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoaCx0aGlzLmRpc3RhbmNlLE8sUCl9cCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSx2LC1nLC15LCExKX1lbHNlImJ1dHQiPT09Qz8oX3x8dGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSx2LDAsMCwhMSkpOiJzcXVhcmUiPT09Qz8oX3x8KHRoaXMuYWRkQ3VycmVudFZlcnRleChoLHRoaXMuZGlzdGFuY2UsbSwxLDEsITEpLHRoaXMuZTE9dGhpcy5lMj0tMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCExKSk6InJvdW5kIj09PUMmJihffHwodGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSxtLDEsMSwhMCksdGhpcy5lMT10aGlzLmUyPS0xKSxwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KGgsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCEwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoaCx0aGlzLmRpc3RhbmNlLHYsMCwwLCExKSkpO2lmKEEmJnc8YS0xKXt2YXIgTj1oLmRpc3QocCk7aWYoTj4yKm8pe3ZhciBCPWguYWRkKHAuc3ViKGgpLl9tdWx0KG8vTikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUIuZGlzdChoKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQix0aGlzLmRpc3RhbmNlLHYubXVsdCgxKSwwLDAsITEpLGg9Qn19Xz0hMX19fX0sbi5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz1hPzE6MCxsPXRoaXMuYXJyYXlHcm91cHMubGluZVt0aGlzLmFycmF5R3JvdXBzLmxpbmUubGVuZ3RoLTFdLHU9bC5sYXlvdXRWZXJ0ZXhBcnJheSxmPWwuZWxlbWVudEFycmF5O289ci5jbG9uZSgpLG4mJm8uX3N1YihyLnBlcnAoKS5fbXVsdChuKSksdGhpcy5lMz10aGlzLmFkZExpbmVWZXJ0ZXgodSx0LG8scywwLG4sZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmZi5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxvPXIubXVsdCgtMSksaSYmby5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSx0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleCh1LHQsbyxzLDEsLWksZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmZi5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPmMvMiYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCx0aGlzLmRpc3RhbmNlLHIsbixpLGEpKX0sbi5wcm90b3R5cGUuYWRkUGllU2xpY2VWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bj8xOjA7cj1yLm11bHQobj8tMToxKTt2YXIgYT10aGlzLmFycmF5R3JvdXBzLmxpbmVbdGhpcy5hcnJheUdyb3Vwcy5saW5lLmxlbmd0aC0xXSxvPWEubGF5b3V0VmVydGV4QXJyYXkscz1hLmVsZW1lbnRBcnJheTt0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleChvLHQsciwwLGksMCxlKSx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiZzLmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxuP3RoaXMuZTI9dGhpcy5lMzp0aGlzLmUxPXRoaXMuZTN9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDUwLCIuLi9idWNrZXQiOjMzNywiLi4vbG9hZF9nZW9tZXRyeSI6MzQ1fV0sMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9dC5zeW1ib2xRdWFkc0FycmF5LHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9dC5zeW1ib2xJbnN0YW5jZXNBcnJheSx0aGlzLnNkZkljb25zPXQuc2RmSWNvbnMsdGhpcy5pY29uc05lZWRMaW5lYXI9dC5pY29uc05lZWRMaW5lYXIsdGhpcy5hZGp1c3RlZFRleHRTaXplPXQuYWRqdXN0ZWRUZXh0U2l6ZSx0aGlzLmFkanVzdGVkSWNvblNpemU9dC5hZGp1c3RlZEljb25TaXplLHRoaXMuZm9udHN0YWNrPXQuZm9udHN0YWNrfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwsYyx1KXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCg2NCpuKSxNYXRoLnJvdW5kKDY0KmkpLGEvNCxvLzQsMTAqKGN8fDApLHUsMTAqKHN8fDApLDEwKk1hdGgubWluKGx8fDI1LDI1KSl9dmFyIGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoIi4uL2J1Y2tldCIpLHM9dCgiLi4vLi4vc3ltYm9sL2FuY2hvciIpLGw9dCgiLi4vLi4vc3ltYm9sL2dldF9hbmNob3JzIiksYz10KCIuLi8uLi91dGlsL3Rva2VuIiksdT10KCIuLi8uLi9zeW1ib2wvcXVhZHMiKSxmPXQoIi4uLy4uL3N5bWJvbC9zaGFwaW5nIiksaD10KCIuLi8uLi9zeW1ib2wvcmVzb2x2ZV90ZXh0IiksZD10KCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyIpLHA9dCgiLi4vLi4vc3ltYm9sL2NsaXBfbGluZSIpLG09dCgiLi4vLi4vdXRpbC91dGlsIiksdj10KCIuLi9sb2FkX2dlb21ldHJ5IiksZz10KCIuLi8uLi9zeW1ib2wvY29sbGlzaW9uX2ZlYXR1cmUiKSx5PWYuc2hhcGVUZXh0LGI9Zi5zaGFwZUljb24seD11LmdldEdseXBoUXVhZHMsXz11LmdldEljb25RdWFkcyx3PW8uRVhURU5UO2UuZXhwb3J0cz1uLG4uTUFYX1FVQURTPTY1NTM1LG4ucHJvdG90eXBlPW0uaW5oZXJpdChvLHt9KSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1vLnByb3RvdHlwZS5zZXJpYWxpemUuYXBwbHkodGhpcyk7cmV0dXJuIHQuc2RmSWNvbnM9dGhpcy5zZGZJY29ucyx0Lmljb25zTmVlZExpbmVhcj10aGlzLmljb25zTmVlZExpbmVhcix0LmFkanVzdGVkVGV4dFNpemU9dGhpcy5hZGp1c3RlZFRleHRTaXplLHQuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmFkanVzdGVkSWNvblNpemUsdC5mb250c3RhY2s9dGhpcy5mb250c3RhY2ssdH07dmFyIE09bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX29mZnNldCIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfdGV4dHVyZV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0pLFQ9bmV3IG8uRWxlbWVudEFycmF5VHlwZTtuLnByb3RvdHlwZS5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLngsZS55LE1hdGgucm91bmQoci54KSxNYXRoLnJvdW5kKHIueSksMTAqbiwxMCppKX0sbi5wcm90b3R5cGUucHJvZ3JhbUludGVyZmFjZXM9e2dseXBoOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6TSxlbGVtZW50QXJyYXlUeXBlOlR9LGljb246e2xheW91dFZlcnRleEFycmF5VHlwZTpNLGVsZW1lbnRBcnJheVR5cGU6VH0sY29sbGlzaW9uQm94OntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9XSl9fSxuLnByb3RvdHlwZS5wb3B1bGF0ZUFycmF5cz1mdW5jdGlvbih0LGUscil7dmFyIG49e2xhc3RJbnRlZ2VyWm9vbToxLzAsbGFzdEludGVnZXJab29tVGltZTowLGxhc3Rab29tOjB9O3RoaXMuYWRqdXN0ZWRUZXh0TWF4U2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJ0ZXh0LXNpemUiLHt6b29tOjE4LHpvb21IaXN0b3J5Om59KSx0aGlzLmFkanVzdGVkVGV4dFNpemU9dGhpcy5sYXllci5nZXRMYXlvdXRWYWx1ZSgidGV4dC1zaXplIix7em9vbTp0aGlzLnpvb20rMSx6b29tSGlzdG9yeTpufSksdGhpcy5hZGp1c3RlZEljb25NYXhTaXplPXRoaXMubGF5ZXIuZ2V0TGF5b3V0VmFsdWUoImljb24tc2l6ZSIse3pvb206MTgsem9vbUhpc3Rvcnk6bn0pLHRoaXMuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJpY29uLXNpemUiLHt6b29tOnRoaXMuem9vbSsxLHpvb21IaXN0b3J5Om59KTt2YXIgaT01MTIqdGhpcy5vdmVyc2NhbGluZzt0aGlzLnRpbGVQaXhlbFJhdGlvPXcvaSx0aGlzLmNvbXBhcmVUZXh0PXt9LHRoaXMuaWNvbnNOZWVkTGluZWFyPSExLHRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aDt2YXIgYT10aGlzLmxheWVyLmxheW91dCxvPXRoaXMuZmVhdHVyZXMscz10aGlzLnRleHRGZWF0dXJlcyxsPS41LHU9LjU7c3dpdGNoKGFbInRleHQtYW5jaG9yIl0pe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6bD0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6bD0wfXN3aXRjaChhWyJ0ZXh0LWFuY2hvciJdKXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOnU9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOnU9MH1mb3IodmFyIGY9InJpZ2h0Ij09PWFbInRleHQtanVzdGlmeSJdPzE6ImxlZnQiPT09YVsidGV4dC1qdXN0aWZ5Il0/MDouNSxoPTI0KmFbInRleHQtbGluZS1oZWlnaHQiXSxwPSJsaW5lIiE9PWFbInN5bWJvbC1wbGFjZW1lbnQiXT8yNCphWyJ0ZXh0LW1heC13aWR0aCJdOjAsZz0yNCphWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0seD1bMjQqYVsidGV4dC1vZmZzZXQiXVswXSwyNCphWyJ0ZXh0LW9mZnNldCJdWzFdXSxfPXRoaXMuZm9udHN0YWNrPWFbInRleHQtZm9udCJdLmpvaW4oIiwiKSxNPVtdLFQ9MDtUPG8ubGVuZ3RoO1QrKylNLnB1c2godihvW1RdKSk7aWYoImxpbmUiPT09YVsic3ltYm9sLXBsYWNlbWVudCJdKXt2YXIgaz1kKG8scyxNKTtNPWsuZ2VvbWV0cmllcyxvPWsuZmVhdHVyZXMscz1rLnRleHRGZWF0dXJlc31mb3IodmFyIEEsRSxTPTA7UzxvLmxlbmd0aDtTKyspaWYoTVtTXSl7aWYoQT1zW1NdP3koc1tTXSxlW19dLHAsaCxsLHUsZixnLHgpOm51bGwsYVsiaWNvbi1pbWFnZSJdKXt2YXIgTD1jKG9bU10ucHJvcGVydGllcyxhWyJpY29uLWltYWdlIl0pLEM9cltMXTtFPWIoQyxhKSxDJiYodm9pZCAwPT09dGhpcy5zZGZJY29ucz90aGlzLnNkZkljb25zPUMuc2RmOnRoaXMuc2RmSWNvbnMhPT1DLnNkZiYmbS53YXJuT25jZSgiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLDEhPT1DLnBpeGVsUmF0aW8/dGhpcy5pY29uc05lZWRMaW5lYXI9ITA6MD09PWFbImljb24tcm90YXRlIl0mJnRoaXMubGF5ZXIuaXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudCgiaWNvbi1yb3RhdGUiKXx8KHRoaXMuaWNvbnNOZWVkTGluZWFyPSEwKSl9ZWxzZSBFPW51bGw7KEF8fEUpJiZ0aGlzLmFkZEZlYXR1cmUoTVtTXSxBLEUsb1tTXSl9dGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aCx0aGlzLnBsYWNlRmVhdHVyZXModCx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyksdGhpcy50cmltQXJyYXlzKCl9LG4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXllci5sYXlvdXQsYT10aGlzLmFkanVzdGVkVGV4dFNpemUvMjQsbz12b2lkIDAhPT10aGlzLmFkanVzdGVkVGV4dE1heFNpemU/dGhpcy5hZGp1c3RlZFRleHRNYXhTaXplOnRoaXMuYWRqdXN0ZWRUZXh0U2l6ZSxjPXRoaXMudGlsZVBpeGVsUmF0aW8qYSx1PXRoaXMudGlsZVBpeGVsUmF0aW8qby8yNCxmPXRoaXMudGlsZVBpeGVsUmF0aW8qdGhpcy5hZGp1c3RlZEljb25TaXplLGg9dGhpcy50aWxlUGl4ZWxSYXRpbyppWyJzeW1ib2wtc3BhY2luZyJdLGQ9aVsic3ltYm9sLWF2b2lkLWVkZ2VzIl0sbT1pWyJ0ZXh0LXBhZGRpbmciXSp0aGlzLnRpbGVQaXhlbFJhdGlvLHY9aVsiaWNvbi1wYWRkaW5nIl0qdGhpcy50aWxlUGl4ZWxSYXRpbyxnPWlbInRleHQtbWF4LWFuZ2xlIl0vMTgwKk1hdGguUEkseT0ibWFwIj09PWlbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il0mJiJsaW5lIj09PWlbInN5bWJvbC1wbGFjZW1lbnQiXSxiPSJtYXAiPT09aVsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09aVsic3ltYm9sLXBsYWNlbWVudCJdLHg9aVsidGV4dC1hbGxvdy1vdmVybGFwIl18fGlbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxpWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8aVsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0sXz0ibGluZSI9PT1pWyJzeW1ib2wtcGxhY2VtZW50Il0sTT1oLzI7XyYmKHQ9cCh0LDAsMCx3LHcpKTtmb3IodmFyIFQ9MDtUPHQubGVuZ3RoO1QrKyl7dmFyIGssQT10W1RdO2s9Xz9sKEEsaCxnLGUsciwyNCx1LHRoaXMub3ZlcnNjYWxpbmcsdyk6W25ldyBzKEFbMF0ueCxBWzBdLnksMCldO2Zvcih2YXIgRT0wLFM9ay5sZW5ndGg7RTxTO0UrKyl7dmFyIEw9a1tFXTtpZighKGUmJl8mJnRoaXMuYW5jaG9ySXNUb29DbG9zZShlLnRleHQsTSxMKSkpe3ZhciBDPSEoTC54PDB8fEwueD53fHxMLnk8MHx8TC55PncpO2lmKCFkfHxDKXt2YXIgST1DfHx4O3RoaXMuYWRkU3ltYm9sSW5zdGFuY2UoTCxBLGUscix0aGlzLmxheWVyLEksdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheS5sZW5ndGgsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxuLmluZGV4LHRoaXMuc291cmNlTGF5ZXJJbmRleCx0aGlzLmluZGV4LGMsbSx5LGYsdixiLHt6b29tOnRoaXMuem9vbX0sbi5wcm9wZXJ0aWVzKX19fX19LG4ucHJvdG90eXBlLmFuY2hvcklzVG9vQ2xvc2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29tcGFyZVRleHQ7aWYodCBpbiBuKXtmb3IodmFyIGk9blt0XSxhPWkubGVuZ3RoLTE7YT49MDthLS0paWYoci5kaXN0KGlbYV0pPGUpcmV0dXJuITB9ZWxzZSBuW3RdPVtdO3JldHVybiBuW3RdLnB1c2gociksITF9LG4ucHJvdG90eXBlLnBsYWNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKSx0aGlzLmNyZWF0ZUFycmF5cygpO3ZhciByPXRoaXMubGF5ZXIubGF5b3V0LG49dC5tYXhTY2FsZSxpPSJtYXAiPT09clsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09clsic3ltYm9sLXBsYWNlbWVudCJdLGE9Im1hcCI9PT1yWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdJiYibGluZSI9PT1yWyJzeW1ib2wtcGxhY2VtZW50Il07aWYoclsidGV4dC1hbGxvdy1vdmVybGFwIl18fHJbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8clsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0pe3ZhciBvPXRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkudG9BcnJheSh0aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXgsdGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleCkscz10LmFuZ2xlLGw9TWF0aC5zaW4ocyksYz1NYXRoLmNvcyhzKTt0aGlzLnNvcnRlZFN5bWJvbEluc3RhbmNlcz1vLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4obCp0LmFuY2hvclBvaW50WCtjKnQuYW5jaG9yUG9pbnRZfDApLShsKmUuYW5jaG9yUG9pbnRYK2MqZS5hbmNob3JQb2ludFl8MCl8fGUuaW5kZXgtdC5pbmRleH0pfWZvcih2YXIgdT10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXg7dTx0aGlzLnN5bWJvbEluc3RhbmNlc0VuZEluZGV4O3UrKyl7dmFyIGY9dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXM/dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXNbdS10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXhdOnRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZ2V0KHUpLGg9e2JveFN0YXJ0SW5kZXg6Zi50ZXh0Qm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpmLnRleHRCb3hFbmRJbmRleH0sZD17Ym94U3RhcnRJbmRleDpmLmljb25Cb3hTdGFydEluZGV4LGJveEVuZEluZGV4OmYuaWNvbkJveEVuZEluZGV4fSxwPSEoZi50ZXh0Qm94U3RhcnRJbmRleD09PWYudGV4dEJveEVuZEluZGV4KSxtPSEoZi5pY29uQm94U3RhcnRJbmRleD09PWYuaWNvbkJveEVuZEluZGV4KSx2PXJbInRleHQtb3B0aW9uYWwiXXx8IXAsZz1yWyJpY29uLW9wdGlvbmFsIl18fCFtLHk9cD90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShoLHJbInRleHQtYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlLGI9bT90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShkLHJbImljb24tYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlO3Z8fGc/IWcmJnk/eT1NYXRoLm1heChiLHkpOiF2JiZiJiYoYj1NYXRoLm1heChiLHkpKTpiPXk9TWF0aC5tYXgoYix5KSxwJiYodC5pbnNlcnRDb2xsaXNpb25GZWF0dXJlKGgseSxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXSkseTw9biYmdGhpcy5hZGRTeW1ib2xzKCJnbHlwaCIsZi5nbHlwaFF1YWRTdGFydEluZGV4LGYuZ2x5cGhRdWFkRW5kSW5kZXgseSxyWyJ0ZXh0LWtlZXAtdXByaWdodCJdLGksdC5hbmdsZSkpLG0mJih0Lmluc2VydENvbGxpc2lvbkZlYXR1cmUoZCxiLHJbImljb24taWdub3JlLXBsYWNlbWVudCJdKSxiPD1uJiZ0aGlzLmFkZFN5bWJvbHMoImljb24iLGYuaWNvblF1YWRTdGFydEluZGV4LGYuaWNvblF1YWRFbmRJbmRleCxiLHJbImljb24ta2VlcC11cHJpZ2h0Il0sYSx0LmFuZ2xlKSl9ZSYmdGhpcy5hZGRUb0RlYnVnQnVmZmVycyh0KX0sbi5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5wcmVwYXJlQXJyYXlHcm91cCh0LDQqKHItZSkpLGM9bC5lbGVtZW50QXJyYXksdT1sLmxheW91dFZlcnRleEFycmF5LGY9dGhpcy56b29tLGg9TWF0aC5tYXgoTWF0aC5sb2cobikvTWF0aC5MTjIrZiwwKSxkPWU7ZDxyO2QrKyl7dmFyIHA9dGhpcy5zeW1ib2xRdWFkc0FycmF5LmdldChkKS5TeW1ib2xRdWFkLG09KHAuYW5jaG9yQW5nbGUrcytNYXRoLlBJKSUoMipNYXRoLlBJKTtpZighKGEmJm8mJihtPD1NYXRoLlBJLzJ8fG0+MypNYXRoLlBJLzIpKSl7dmFyIHY9cC50bCxnPXAudHIseT1wLmJsLGI9cC5icix4PXAudGV4LF89cC5hbmNob3JQb2ludCx3PU1hdGgubWF4KGYrTWF0aC5sb2cocC5taW5TY2FsZSkvTWF0aC5MTjIsaCksTT1NYXRoLm1pbihmK01hdGgubG9nKHAubWF4U2NhbGUpL01hdGguTE4yLDI1KTtpZighKE08PXcpKXt3PT09aCYmKHc9MCk7dmFyIFQ9TWF0aC5yb3VuZChwLmdseXBoQW5nbGUvKDIqTWF0aC5QSSkqMjU2KSxrPWkodSxfLngsXy55LHYueCx2LnkseC54LHgueSx3LE0saCxUKTtpKHUsXy54LF8ueSxnLngsZy55LHgueCt4LncseC55LHcsTSxoLFQpLGkodSxfLngsXy55LHkueCx5LnkseC54LHgueSt4LmgsdyxNLGgsVCksaSh1LF8ueCxfLnksYi54LGIueSx4LngreC53LHgueSt4LmgsdyxNLGgsVCksYy5lbXBsYWNlQmFjayhrLGsrMSxrKzIpLGMuZW1wbGFjZUJhY2soaysxLGsrMixrKzMpfX19fSxuLnByb3RvdHlwZS51cGRhdGVJY29ucz1mdW5jdGlvbih0KXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKTt2YXIgZT10aGlzLmxheWVyLmxheW91dFsiaWNvbi1pbWFnZSJdO2lmKGUpZm9yKHZhciByPTA7cjx0aGlzLmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBuPWModGhpcy5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLGUpO24mJih0W25dPSEwKX19LG4ucHJvdG90eXBlLnVwZGF0ZUZvbnQ9ZnVuY3Rpb24odCl7dGhpcy5yZWNhbGN1bGF0ZVN0eWxlTGF5ZXJzKCk7dmFyIGU9dGhpcy5sYXllci5sYXlvdXRbInRleHQtZm9udCJdLHI9dFtlXT10W2VdfHx7fTt0aGlzLnRleHRGZWF0dXJlcz1oKHRoaXMuZmVhdHVyZXMsdGhpcy5sYXllci5sYXlvdXQscil9LG4ucHJvdG90eXBlLmFkZFRvRGVidWdCdWZmZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjb2xsaXNpb25Cb3giLDApLHI9ZS5sYXlvdXRWZXJ0ZXhBcnJheSxuPS10LmFuZ2xlLGk9dC55U3RyZXRjaCxvPXRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzRW5kSW5kZXg7bysrKXt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5LmdldChvKTtzLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnMudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6cy50ZXh0Qm94RW5kSW5kZXh9LHMuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6cy5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpzLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBsPTA7bDwyO2wrKyl7dmFyIGM9c1swPT09bD8idGV4dENvbGxpc2lvbkZlYXR1cmUiOiJpY29uQ29sbGlzaW9uRmVhdHVyZSJdO2lmKGMpZm9yKHZhciB1PWMuYm94U3RhcnRJbmRleDt1PGMuYm94RW5kSW5kZXg7dSsrKXt2YXIgZj10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldCh1KSxoPWYuYW5jaG9yUG9pbnQsZD1uZXcgYShmLngxLGYueTEqaSkuX3JvdGF0ZShuKSxwPW5ldyBhKGYueDIsZi55MSppKS5fcm90YXRlKG4pLG09bmV3IGEoZi54MSxmLnkyKmkpLl9yb3RhdGUobiksdj1uZXcgYShmLngyLGYueTIqaSkuX3JvdGF0ZShuKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMjUsdGhpcy56b29tK01hdGgubG9nKGYubWF4U2NhbGUpL01hdGguTE4yKSkseT1NYXRoLm1heCgwLE1hdGgubWluKDI1LHRoaXMuem9vbStNYXRoLmxvZyhmLnBsYWNlbWVudFNjYWxlKS9NYXRoLkxOMikpO3RoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsaCxkLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixoLHAsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGgscCxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsaCx2LGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixoLHYsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGgsbSxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsaCxtLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixoLGQsZyx5KX19fX0sbi5wcm90b3R5cGUuYWRkU3ltYm9sSW5zdGFuY2U9ZnVuY3Rpb24odCxlLHIsaSxhLG8scyxsLGMsdSxmLGgsZCxwLHYseSxiLHcsTSl7dmFyIFQsayxBLEUsUyxMLEMsSTtpZihyJiYoQz1vP3godCxyLGgsZSxhLHApOltdLFM9bmV3IGcobCxlLHQsYyx1LGYscixoLGQscCwhMSkpLFQ9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aCxDJiZDLmxlbmd0aClmb3IodmFyIEQ9MDtEPEMubGVuZ3RoO0QrKyl0aGlzLmFkZFN5bWJvbFF1YWQoQ1tEXSk7az10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoO3ZhciBQPVM/Uy5ib3hTdGFydEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHo9Uz9TLmJveEVuZEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2kmJihJPW8/Xyh0LGksdixlLGEsYixyLHcsTSk6W10sTD1uZXcgZyhsLGUsdCxjLHUsZixpLHYseSxiLCEwKSksQT10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoLEkmJjE9PT1JLmxlbmd0aCYmdGhpcy5hZGRTeW1ib2xRdWFkKElbMF0pLEU9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aDt2YXIgTz1MP0wuYm94U3RhcnRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxSPUw/TC5ib3hFbmRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtyZXR1cm4gRT5uLk1BWF9RVUFEUyYmbS53YXJuT25jZSgiVG9vIG1hbnkgc3ltYm9scyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLGs+bi5NQVhfUVVBRFMmJm0ud2Fybk9uY2UoIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZW1wbGFjZUJhY2soUCx6LE8sUixULGssQSxFLHQueCx0Lnkscyl9LG4ucHJvdG90eXBlLmFkZFN5bWJvbFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3ltYm9sUXVhZHNBcnJheS5lbXBsYWNlQmFjayh0LmFuY2hvclBvaW50LngsdC5hbmNob3JQb2ludC55LHQudGwueCx0LnRsLnksdC50ci54LHQudHIueSx0LmJsLngsdC5ibC55LHQuYnIueCx0LmJyLnksdC50ZXguaCx0LnRleC53LHQudGV4LngsdC50ZXgueSx0LmFuY2hvckFuZ2xlLHQuZ2x5cGhBbmdsZSx0Lm1heFNjYWxlLHQubWluU2NhbGUpfX0seyIuLi8uLi9zeW1ib2wvYW5jaG9yIjozOTksIi4uLy4uL3N5bWJvbC9jbGlwX2xpbmUiOjQwMSwiLi4vLi4vc3ltYm9sL2NvbGxpc2lvbl9mZWF0dXJlIjo0MDMsIi4uLy4uL3N5bWJvbC9nZXRfYW5jaG9ycyI6NDA1LCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyI6NDA4LCIuLi8uLi9zeW1ib2wvcXVhZHMiOjQwOSwiLi4vLi4vc3ltYm9sL3Jlc29sdmVfdGV4dCI6NDEwLCIuLi8uLi9zeW1ib2wvc2hhcGluZyI6NDExLCIuLi8uLi91dGlsL3Rva2VuIjo0NDksIi4uLy4uL3V0aWwvdXRpbCI6NDUwLCIuLi9idWNrZXQiOjMzNywiLi4vbG9hZF9nZW9tZXRyeSI6MzQ1LCJwb2ludC1nZW9tZXRyeSI6NDkzfV0sMzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcix0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9ZS5tZW1iZXJzLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy50eXBlPXIsdGhpcy5hcnJheVR5cGU9ZX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy50eXBlXTt0aGlzLmJ1ZmZlcj90LmJpbmRCdWZmZXIoZSx0aGlzLmJ1ZmZlcik6KHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUsdGhpcy5idWZmZXIpLHQuYnVmZmVyRGF0YShlLHRoaXMuYXJyYXlCdWZmZXIsdC5TVEFUSUNfRFJBVyksdGhpcy5hcnJheUJ1ZmZlcj1udWxsKX07dmFyIGk9e0ludDg6IkJZVEUiLFVpbnQ4OiJVTlNJR05FRF9CWVRFIixJbnQxNjoiU0hPUlQiLFVpbnQxNjoiVU5TSUdORURfU0hPUlQifTtuLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxhPWVbbi5uYW1lXTt2b2lkIDAhPT1hJiZ0LnZlcnRleEF0dHJpYlBvaW50ZXIoYSxuLmNvbXBvbmVudHMsdFtpW24udHlwZV1dLCExLHRoaXMuYXJyYXlUeXBlLmJ5dGVzUGVyRWxlbWVudCxuLm9mZnNldCl9fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVyJiZ0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcil9LG4uQnVmZmVyVHlwZT17VkVSVEVYOiJBUlJBWV9CVUZGRVIiLEVMRU1FTlQ6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIn19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPW5ldyBhKHQubGF5b3V0VmVydGV4QXJyYXksZS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUsYS5CdWZmZXJUeXBlLlZFUlRFWCksdC5lbGVtZW50QXJyYXkmJih0aGlzLmVsZW1lbnRCdWZmZXI9bmV3IGEodC5lbGVtZW50QXJyYXksZS5lbGVtZW50QXJyYXlUeXBlLGEuQnVmZmVyVHlwZS5FTEVNRU5UKSk7dmFyIHIsbj10aGlzLnZhb3M9e307dC5lbGVtZW50QXJyYXkyJiYodGhpcy5lbGVtZW50QnVmZmVyMj1uZXcgYSh0LmVsZW1lbnRBcnJheTIsZS5lbGVtZW50QXJyYXlUeXBlMixhLkJ1ZmZlclR5cGUuRUxFTUVOVCkscj10aGlzLnNlY29uZFZhb3M9e30pLHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24oaSxzKXtyZXR1cm4gbltzXT1uZXcgbyx0LmVsZW1lbnRBcnJheTImJihyW3NdPW5ldyBvKSxuZXcgYShpLGUucGFpbnRWZXJ0ZXhBcnJheVR5cGVzW3NdLGEuQnVmZmVyVHlwZS5WRVJURVgpfSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL2J1ZmZlciIpLG89dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3kodCksdGhpcy5lbGVtZW50QnVmZmVyJiZ0aGlzLmVsZW1lbnRCdWZmZXIuZGVzdHJveSh0KSx0aGlzLmVsZW1lbnRCdWZmZXIyJiZ0aGlzLmVsZW1lbnRCdWZmZXIyLmRlc3Ryb3kodCk7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzKXRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzW2VdLmRlc3Ryb3kodCk7Zm9yKHZhciByIGluIHRoaXMudmFvcyl0aGlzLnZhb3Nbcl0uZGVzdHJveSh0KTtmb3IodmFyIG4gaW4gdGhpcy5zZWNvbmRWYW9zKXRoaXMuc2Vjb25kVmFvc1tuXS5kZXN0cm95KHQpfX0seyIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCI6MzY1LCIuLi91dGlsL3V0aWwiOjQ1MCwiLi9idWZmZXIiOjM0Mn1dLDM0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZih0LmdyaWQpe3ZhciBuPXQsaT1lO3Q9bi5jb29yZCxlPW4ub3ZlcnNjYWxpbmcsdGhpcy5ncmlkPW5ldyBwKG4uZ3JpZCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgVChuLmZlYXR1cmVJbmRleEFycmF5KSx0aGlzLnJhd1RpbGVEYXRhPWksdGhpcy5idWNrZXRMYXllcklEcz1uLmJ1Y2tldExheWVySURzfWVsc2UgdGhpcy5ncmlkPW5ldyBwKGYsMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgVDt0aGlzLmNvb3JkPXQsdGhpcy5vdmVyc2NhbGluZz1lLHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LU1hdGgubG9nKGUpL01hdGguTE4yLHRoaXMuc2V0Q29sbGlzaW9uVGlsZShyKX1mdW5jdGlvbiBpKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlLXR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdFsibGluZS1nYXAtd2lkdGgiXT4wP3RbImxpbmUtZ2FwLXdpZHRoIl0rMip0WyJsaW5lLXdpZHRoIl06dFsibGluZS13aWR0aCJdfWZ1bmN0aW9uIHModCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7ZT1jLmNvbnZlcnQoZSksInZpZXdwb3J0Ij09PXImJmUuX3JvdGF0ZSgtbik7Zm9yKHZhciBhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD1bXSx1PTA7dTxzLmxlbmd0aDt1KyspbC5wdXNoKHNbdV0uc3ViKGUuX211bHQoaSkpKTthLnB1c2gobCl9cmV0dXJuIGF9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBjKDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzLTFdLHU9YVtzXSxmPWFbcysxXSxoPTA9PT1zP246dS5zdWIobCkuX3VuaXQoKS5fcGVycCgpLGQ9cz09PWEubGVuZ3RoLTE/bjpmLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCkscD1oLl9hZGQoZCkuX3VuaXQoKSxtPXAueCpkLngrcC55KmQueTtwLl9tdWx0KDEvbSksby5wdXNoKHAuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKG8pfXJldHVybiByfXZhciBjPXQoInBvaW50LWdlb21ldHJ5IiksdT10KCIuL2xvYWRfZ2VvbWV0cnkiKSxmPXQoIi4vYnVja2V0IikuRVhURU5ULGg9dCgiZmVhdHVyZS1maWx0ZXIiKSxkPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IikscD10KCJncmlkLWluZGV4IiksbT10KCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiKSx2PXQoInZlY3Rvci10aWxlIiksZz10KCJwYmYiKSx5PXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksYj10KCIuLi91dGlsL3V0aWwiKS5hcnJheXNJbnRlcnNlY3QseD10KCIuLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyIpLF89eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50LHc9eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLE09eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUsVD1uZXcgZCh7bWVtYmVyczpbe3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In1dfSk7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2soZSxyLG4pO2Zvcih2YXIgYT11KHQpLG89MDtvPGEubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWFbb10sbD1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBmPXNbY107bFswXT1NYXRoLm1pbihsWzBdLGYueCksbFsxXT1NYXRoLm1pbihsWzFdLGYueSksbFsyXT1NYXRoLm1heChsWzJdLGYueCksbFszXT1NYXRoLm1heChsWzNdLGYueSl9dGhpcy5ncmlkLmluc2VydChpLGxbMF0sbFsxXSxsWzJdLGxbM10pfX0sbi5wcm90b3R5cGUuc2V0Q29sbGlzaW9uVGlsZT1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvblRpbGU9dH0sbi5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2Nvb3JkOnRoaXMuY29vcmQsb3ZlcnNjYWxpbmc6dGhpcy5vdmVyc2NhbGluZyxncmlkOnRoaXMuZ3JpZC50b0FycmF5QnVmZmVyKCksZmVhdHVyZUluZGV4QXJyYXk6dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5zZXJpYWxpemUoKSxidWNrZXRMYXllcklEczp0aGlzLmJ1Y2tldExheWVySURzfTtyZXR1cm57ZGF0YTp0LHRyYW5zZmVyYWJsZXM6W3QuZ3JpZCx0LmZlYXR1cmVJbmRleEFycmF5LmFycmF5QnVmZmVyXX19LG4ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dGhpcy52dExheWVyc3x8KHRoaXMudnRMYXllcnM9bmV3IHYuVmVjdG9yVGlsZShuZXcgZyhuZXcgVWludDhBcnJheSh0aGlzLnJhd1RpbGVEYXRhKSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IG0odGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSk7dmFyIHI9e30sbj10LnBhcmFtc3x8e30scz1mL3QudGlsZVNpemUvdC5zY2FsZSxsPWgobi5maWx0ZXIpLHU9MDtmb3IodmFyIGQgaW4gZSl7dmFyIHA9ZVtkXSx5PXAucGFpbnQsYj0wOyJsaW5lIj09PXAudHlwZT9iPW8oeSkvMitNYXRoLmFicyh5WyJsaW5lLW9mZnNldCJdKStpKHlbImxpbmUtdHJhbnNsYXRlIl0pOiJmaWxsIj09PXAudHlwZT9iPWkoeVsiZmlsbC10cmFuc2xhdGUiXSk6ImNpcmNsZSI9PT1wLnR5cGUmJihiPXlbImNpcmNsZS1yYWRpdXMiXStpKHlbImNpcmNsZS10cmFuc2xhdGUiXSkpLHU9TWF0aC5tYXgodSxiKnMpfWZvcih2YXIgeD10LnF1ZXJ5R2VvbWV0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGModC54LHQueSl9KX0pLF89MS8wLHc9MS8wLE09LSgxLzApLFQ9LSgxLzApLGs9MDtrPHgubGVuZ3RoO2srKylmb3IodmFyIEE9eFtrXSxFPTA7RTxBLmxlbmd0aDtFKyspe3ZhciBTPUFbRV07Xz1NYXRoLm1pbihfLFMueCksdz1NYXRoLm1pbih3LFMueSksTT1NYXRoLm1heChNLFMueCksVD1NYXRoLm1heChULFMueSl9dmFyIEw9dGhpcy5ncmlkLnF1ZXJ5KF8tdSx3LXUsTSt1LFQrdSk7TC5zb3J0KGEpLHRoaXMuZmlsdGVyTWF0Y2hpbmcocixMLHRoaXMuZmVhdHVyZUluZGV4QXJyYXkseCxsLG4ubGF5ZXJzLGUsdC5iZWFyaW5nLHMpO3ZhciBDPXRoaXMuY29sbGlzaW9uVGlsZS5xdWVyeVJlbmRlcmVkU3ltYm9scyhfLHcsTSxULHQuc2NhbGUpO3JldHVybiBDLnNvcnQoKSx0aGlzLmZpbHRlck1hdGNoaW5nKHIsQyx0aGlzLmNvbGxpc2lvblRpbGUuY29sbGlzaW9uQm94QXJyYXkseCxsLG4ubGF5ZXJzLGUsdC5iZWFyaW5nLHMpLHJ9LG4ucHJvdG90eXBlLmZpbHRlck1hdGNoaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhLGMsZixoKXtmb3IodmFyIGQscD0wO3A8ZS5sZW5ndGg7cCsrKXt2YXIgbT1lW3BdO2lmKG0hPT1kKXtkPW07dmFyIHY9ci5nZXQobSksZz10aGlzLmJ1Y2tldExheWVySURzW3YuYnVja2V0SW5kZXhdO2lmKCFhfHxiKGEsZykpe3ZhciB4PXRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUodi5zb3VyY2VMYXllckluZGV4KSxUPXRoaXMudnRMYXllcnNbeF0saz1ULmZlYXR1cmUodi5mZWF0dXJlSW5kZXgpO2lmKGkoaykpZm9yKHZhciBBPW51bGwsRT0wO0U8Zy5sZW5ndGg7RSsrKXt2YXIgUz1nW0VdO2lmKCEoYSYmYS5pbmRleE9mKFMpPDApKXt2YXIgTD1jW1NdO2lmKEwpe3ZhciBDO2lmKCJzeW1ib2wiIT09TC50eXBlKXtBfHwoQT11KGspKTt2YXIgST1MLnBhaW50O2lmKCJsaW5lIj09PUwudHlwZSl7Qz1zKG4sSVsibGluZS10cmFuc2xhdGUiXSxJWyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSxmLGgpO3ZhciBEPW8oSSkvMipoO2lmKElbImxpbmUtb2Zmc2V0Il0mJihBPWwoQSxJWyJsaW5lLW9mZnNldCJdKmgpKSwhTShDLEEsRCkpY29udGludWV9ZWxzZSBpZigiZmlsbCI9PT1MLnR5cGUpe2lmKEM9cyhuLElbImZpbGwtdHJhbnNsYXRlIl0sSVsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0sZixoKSwhdyhDLEEpKWNvbnRpbnVlfWVsc2UgaWYoImNpcmNsZSI9PT1MLnR5cGUpe0M9cyhuLElbImNpcmNsZS10cmFuc2xhdGUiXSxJWyJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciJdLGYsaCk7dmFyIFA9SVsiY2lyY2xlLXJhZGl1cyJdKmg7aWYoIV8oQyxBLFApKWNvbnRpbnVlfX12YXIgej1uZXcgeShrLHRoaXMueix0aGlzLngsdGhpcy55KTt6LmxheWVyPUwuc2VyaWFsaXplKHtpbmNsdWRlUmVmUHJvcGVydGllczohMH0pO3ZhciBPPXRbU107dm9pZCAwPT09TyYmKE89dFtTXT1bXSksTy5wdXNoKHopfX19fX19fX0seyIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiOjQ0MCwiLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMiOjQ0NSwiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiOjQ0OCwiLi4vdXRpbC91dGlsIjo0NTAsIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIjo0NTEsIi4vYnVja2V0IjozMzcsIi4vbG9hZF9nZW9tZXRyeSI6MzQ1LCJmZWF0dXJlLWZpbHRlciI6MTMyLCJncmlkLWluZGV4IjoyOTMscGJmOjQ4NywicG9pbnQtZ2VvbWV0cnkiOjQ5MywidmVjdG9yLXRpbGUiOjU1N31dLDM0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybnttaW46LTEqTWF0aC5wb3coMix0LTEpLG1heDpNYXRoLnBvdygyLHQtMSktMX19dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL2J1Y2tldCIpLkVYVEVOVCxvPXQoImFzc2VydCIpLHM9ezE1Om4oMTUpLDE2Om4oMTYpfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1zW2V8fDE2XTtvKHIpO2Zvcih2YXIgbj1hL3QuZXh0ZW50LGw9dC5sb2FkR2VvbWV0cnkoKSxjPTA7YzxsLmxlbmd0aDtjKyspZm9yKHZhciB1PWxbY10sZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgaD11W2ZdO2gueD1NYXRoLnJvdW5kKGgueCpuKSxoLnk9TWF0aC5yb3VuZChoLnkqbiksKGgueDxyLm1pbnx8aC54PnIubWF4fHxoLnk8ci5taW58fGgueT5yLm1heCkmJmkud2Fybk9uY2UoIkdlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplIil9cmV0dXJuIGx9fSx7Ii4uL3V0aWwvdXRpbCI6NDUwLCIuL2J1Y2tldCI6MzM3LGFzc2VydDo0N31dLDM0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmNvbHVtbj10LHRoaXMucm93PWUsdGhpcy56b29tPXJ9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuY29sdW1uLHRoaXMucm93LHRoaXMuem9vbSl9LHpvb21UbzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl96b29tVG8odCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LF96b29tVG86ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0LXRoaXMuem9vbSk7cmV0dXJuIHRoaXMuY29sdW1uKj1lLHRoaXMucm93Kj1lLHRoaXMuem9vbT10LHRoaXN9LF9zdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC56b29tVG8odGhpcy56b29tKSx0aGlzLmNvbHVtbi09dC5jb2x1bW4sdGhpcy5yb3ctPXQucm93LHRoaXN9fX0se31dLDM0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX1lLmV4cG9ydHM9bjt2YXIgaT10KCIuLi91dGlsL3V0aWwiKS53cmFwO24ucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oaSh0aGlzLmxuZywtMTgwLDE4MCksdGhpcy5sYXQpfSxuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubG5nLHRoaXMubGF0XX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0KCIrdGhpcy5sbmcrIiwgIit0aGlzLmxhdCsiKSJ9LG4uY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpBcnJheS5pc0FycmF5KHQpP25ldyBuKHRbMF0sdFsxXSk6dH19LHsiLi4vdXRpbC91dGlsIjo0NTB9XSwzNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3QmJihlP3RoaXMuZXh0ZW5kKHQpLmV4dGVuZChlKTo0PT09dC5sZW5ndGg/dGhpcy5leHRlbmQoW3RbMF0sdFsxXV0pLmV4dGVuZChbdFsyXSx0WzNdXSk6dGhpcy5leHRlbmQodFswXSkuZXh0ZW5kKHRbMV0pKX1lLmV4cG9ydHM9bjt2YXIgaT10KCIuL2xuZ19sYXQiKTtuLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsYT10aGlzLl9zdyxvPXRoaXMuX25lO2lmKHQgaW5zdGFuY2VvZiBpKWU9dCxyPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBuKSlyZXR1cm4gdD90aGlzLmV4dGVuZChpLmNvbnZlcnQodCl8fG4uY29udmVydCh0KSk6dGhpcztpZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBhfHxvPyhhLmxuZz1NYXRoLm1pbihlLmxuZyxhLmxuZyksYS5sYXQ9TWF0aC5taW4oZS5sYXQsYS5sYXQpLG8ubG5nPU1hdGgubWF4KHIubG5nLG8ubG5nKSxvLmxhdD1NYXRoLm1heChyLmxhdCxvLmxhdCkpOih0aGlzLl9zdz1uZXcgaShlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IGkoci5sbmcsci5sYXQpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sZ2V0Tm9ydGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sZ2V0U291dGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9fSxuLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4odCl9fSx7Ii4vbG5nX2xhdCI6MzQ3fV0sMzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnRpbGVTaXplPTUxMix0aGlzLl9taW5ab29tPXR8fDAsdGhpcy5fbWF4Wm9vbT1lfHwyMix0aGlzLmxhdFJhbmdlPVstODUuMDUxMTMsODUuMDUxMTNdLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2NlbnRlcj1uZXcgaSgwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9hbHRpdHVkZT0xLjUsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwfXZhciBpPXQoIi4vbG5nX2xhdCIpLGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoIi4vY29vcmRpbmF0ZSIpLHM9dCgiLi4vdXRpbC91dGlsIikud3JhcCxsPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKSxjPXQoIi4uL3NvdXJjZS90aWxlX2Nvb3JkIiksdT10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCxmPXQoImdsLW1hdHJpeCIpLGg9Zi52ZWM0LGQ9Zi5tYXQ0LHA9Zi5tYXQyO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtnZXQgbWluWm9vbSgpe3JldHVybiB0aGlzLl9taW5ab29tfSxzZXQgbWluWm9vbSh0KXt0aGlzLl9taW5ab29tIT09dCYmKHRoaXMuX21pblpvb209dCx0aGlzLnpvb209TWF0aC5tYXgodGhpcy56b29tLHQpKX0sZ2V0IG1heFpvb20oKXtyZXR1cm4gdGhpcy5fbWF4Wm9vbX0sc2V0IG1heFpvb20odCl7dGhpcy5fbWF4Wm9vbSE9PXQmJih0aGlzLl9tYXhab29tPXQsdGhpcy56b29tPU1hdGgubWluKHRoaXMuem9vbSx0KSl9LGdldCB3b3JsZFNpemUoKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxnZXQgY2VudGVyUG9pbnQoKXtyZXR1cm4gdGhpcy5zaXplLl9kaXYoMil9LGdldCBzaXplKCl7cmV0dXJuIG5ldyBhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxnZXQgYmVhcmluZygpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxzZXQgYmVhcmluZyh0KXt2YXIgZT0tcyh0LC0xODAsMTgwKSpNYXRoLlBJLzE4MDt0aGlzLmFuZ2xlIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5hbmdsZT1lLHRoaXMuX2NhbGNNYXRyaWNlcygpLHRoaXMucm90YXRpb25NYXRyaXg9cC5jcmVhdGUoKSxwLnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5hbmdsZSkpfSxnZXQgcGl0Y2goKXtyZXR1cm4gdGhpcy5fcGl0Y2gvTWF0aC5QSSoxODB9LHNldCBwaXRjaCh0KXt2YXIgZT1NYXRoLm1pbig2MCx0KS8xODAqTWF0aC5QSTt0aGlzLl9waXRjaCE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3BpdGNoPWUsdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxnZXQgYWx0aXR1ZGUoKXtyZXR1cm4gdGhpcy5fYWx0aXR1ZGV9LHNldCBhbHRpdHVkZSh0KXt2YXIgZT1NYXRoLm1heCguNzUsdCk7dGhpcy5fYWx0aXR1ZGUhPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9hbHRpdHVkZT1lLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sZ2V0IHpvb20oKXtyZXR1cm4gdGhpcy5fem9vbX0sc2V0IHpvb20odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5fY29uc3RyYWluKCkpfSxnZXQgY2VudGVyKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sc2V0IGNlbnRlcih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5fY29uc3RyYWluKCkpfSxjb3ZlcmluZ1pvb21MZXZlbDpmdW5jdGlvbih0KXtyZXR1cm4odC5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLnpvb20rdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZS90LnRpbGVTaXplKSl9LGNvdmVyaW5nVGlsZXM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3ZlcmluZ1pvb21MZXZlbCh0KSxyPWU7aWYoZTx0Lm1pbnpvb20pcmV0dXJuW107ZT50Lm1heHpvb20mJihlPXQubWF4em9vbSk7dmFyIG49dGhpcyxpPW4ubG9jYXRpb25Db29yZGluYXRlKG4uY2VudGVyKS5fem9vbVRvKGUpLG89bmV3IGEoaS5jb2x1bW4tLjUsaS5yb3ctLjUpO3JldHVybiBjLmNvdmVyKGUsW24ucG9pbnRDb29yZGluYXRlKG5ldyBhKDAsMCkpLl96b29tVG8oZSksbi5wb2ludENvb3JkaW5hdGUobmV3IGEobi53aWR0aCwwKSkuX3pvb21UbyhlKSxuLnBvaW50Q29vcmRpbmF0ZShuZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuX3pvb21UbyhlKSxuLnBvaW50Q29vcmRpbmF0ZShuZXcgYSgwLG4uaGVpZ2h0KSkuX3pvb21UbyhlKV0sdC5yZXBhcnNlT3ZlcnNjYWxlZD9yOmUpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gby5kaXN0KHQpLW8uZGlzdChlKX0pfSxyZXNpemU6ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnBpeGVsc1RvR0xVbml0cz1bMi90LC0yL2VdLHRoaXMuX2NhbGNNYXRyaWNlcygpLHRoaXMuX2NvbnN0cmFpbigpfSxnZXQgdW5tb2RpZmllZCgpe3JldHVybiB0aGlzLl91bm1vZGlmaWVkfSx6b29tU2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LHNjYWxlWm9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodGhpcy5sbmdYKHQubG5nLGUpLHRoaXMubGF0WSh0LmxhdCxlKSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0aGlzLnhMbmcodC54LGUpLHRoaXMueUxhdCh0LnksZSkpfSxnZXQgeCgpe3JldHVybiB0aGlzLmxuZ1godGhpcy5jZW50ZXIubG5nKX0sZ2V0IHkoKXtyZXR1cm4gdGhpcy5sYXRZKHRoaXMuY2VudGVyLmxhdCl9LGdldCBwb2ludCgpe3JldHVybiBuZXcgYSh0aGlzLngsdGhpcy55KX0sbG5nWDpmdW5jdGlvbih0LGUpe3JldHVybigxODArdCkqKGV8fHRoaXMud29ybGRTaXplKS8zNjB9LGxhdFk6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpKihlfHx0aGlzLndvcmxkU2l6ZSkvMzYwfSx4TG5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDM2MCp0LyhlfHx0aGlzLndvcmxkU2l6ZSktMTgwfSx5TGF0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9MTgwLTM2MCp0LyhlfHx0aGlzLndvcmxkU2l6ZSk7cmV0dXJuIDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChyKk1hdGguUEkvMTgwKSktOTB9LHBhbkJ5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2VudGVyUG9pbnQuX2FkZCh0KTt0aGlzLmNlbnRlcj10aGlzLnBvaW50TG9jYXRpb24oZSl9LHNldExvY2F0aW9uQXRQb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpLG49dGhpcy5wb2ludENvb3JkaW5hdGUoZSksaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSxhPW4uX3N1YihyKTt0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuY2VudGVyPXRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKGkuX3N1YihhKSl9LGxvY2F0aW9uUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpKX0scG9pbnRMb2NhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxsb2NhdGlvbkNvb3JkaW5hdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy56b29tU2NhbGUodGhpcy50aWxlWm9vbSkvdGhpcy53b3JsZFNpemUscj1pLmNvbnZlcnQodCk7cmV0dXJuIG5ldyBvKHRoaXMubG5nWChyLmxuZykqZSx0aGlzLmxhdFkoci5sYXQpKmUsdGhpcy50aWxlWm9vbSl9LGNvb3JkaW5hdGVMb2NhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnpvb21TY2FsZSh0Lnpvb20pO3JldHVybiBuZXcgaSh0aGlzLnhMbmcodC5jb2x1bW4sZSksdGhpcy55TGF0KHQucm93LGUpKX0scG9pbnRDb29yZGluYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0LngsdC55LDAsMV0scj1bdC54LHQueSwxLDFdO2gudHJhbnNmb3JtTWF0NChlLGUsdGhpcy5waXhlbE1hdHJpeEludmVyc2UpLGgudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBuPWVbM10saT1yWzNdLGE9ZVswXS9uLHM9clswXS9pLGM9ZVsxXS9uLHU9clsxXS9pLGY9ZVsyXS9uLGQ9clsyXS9pLHA9Zj09PWQ/MDooMC1mKS8oZC1mKSxtPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKHRoaXMudGlsZVpvb20pO3JldHVybiBuZXcgbyhsKGEscyxwKS9tLGwoYyx1LHApL20sdGhpcy50aWxlWm9vbSl9LGNvb3JkaW5hdGVQb2ludDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLndvcmxkU2l6ZS90aGlzLnpvb21TY2FsZSh0Lnpvb20pLHI9W3QuY29sdW1uKmUsdC5yb3cqZSwwLDFdO3JldHVybiBoLnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpLG5ldyBhKHJbMF0vclszXSxyWzFdL3JbM10pfSxjYWxjdWxhdGVQb3NNYXRyaXg6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xLzApLHQgaW5zdGFuY2VvZiBjJiYodD10LnRvQ29vcmRpbmF0ZShlKSk7dmFyIHI9TWF0aC5taW4odC56b29tLGUpLG49dGhpcy53b3JsZFNpemUvTWF0aC5wb3coMixyKSxpPW5ldyBGbG9hdDY0QXJyYXkoMTYpO3JldHVybiBkLmlkZW50aXR5KGkpLGQudHJhbnNsYXRlKGksaSxbdC5jb2x1bW4qbix0LnJvdypuLDBdKSxkLnNjYWxlKGksaSxbbi91LG4vdSwxXSksZC5tdWx0aXBseShpLHRoaXMucHJvak1hdHJpeCxpKSxuZXcgRmxvYXQzMkFycmF5KGkpfSxfY29uc3RyYWluOmZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIHQsZSxyLG4saSxvLHMsbCxjPXRoaXMuc2l6ZSx1PXRoaXMuX3VubW9kaWZpZWQ7dGhpcy5sYXRSYW5nZSYmKHQ9dGhpcy5sYXRZKHRoaXMubGF0UmFuZ2VbMV0pLGU9dGhpcy5sYXRZKHRoaXMubGF0UmFuZ2VbMF0pLGk9ZS10PGMueT9jLnkvKGUtdCk6MCksdGhpcy5sbmdSYW5nZSYmKHI9dGhpcy5sbmdYKHRoaXMubG5nUmFuZ2VbMF0pLG49dGhpcy5sbmdYKHRoaXMubG5nUmFuZ2VbMV0pLG89bi1yPGMueD9jLngvKG4tcik6MCk7dmFyIGY9TWF0aC5tYXgob3x8MCxpfHwwKTtpZihmKXJldHVybiB0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgYShvPyhuK3IpLzI6dGhpcy54LGk/KGUrdCkvMjp0aGlzLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKGYpLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGg9dGhpcy55LGQ9Yy55LzI7aC1kPHQmJihsPXQrZCksaCtkPmUmJihsPWUtZCl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHA9dGhpcy54LG09Yy54LzI7cC1tPHImJihzPXIrbSkscCttPm4mJihzPW4tbSl9dm9pZCAwPT09cyYmdm9pZCAwPT09bHx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyBhKHZvaWQgMCE9PXM/czp0aGlzLngsdm9pZCAwIT09bD9sOnRoaXMueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sX2NhbGNNYXRyaWNlczpmdW5jdGlvbigpe2lmKHRoaXMuaGVpZ2h0KXt2YXIgdD1NYXRoLmF0YW4oLjUvdGhpcy5hbHRpdHVkZSksZT1NYXRoLnNpbih0KSp0aGlzLmFsdGl0dWRlL01hdGguc2luKE1hdGguUEkvMi10aGlzLl9waXRjaC10KSxyPU1hdGguY29zKE1hdGguUEkvMi10aGlzLl9waXRjaCkqZSt0aGlzLmFsdGl0dWRlLG49bmV3IEZsb2F0NjRBcnJheSgxNik7aWYoZC5wZXJzcGVjdGl2ZShuLDIqTWF0aC5hdGFuKHRoaXMuaGVpZ2h0LzIvdGhpcy5hbHRpdHVkZSksdGhpcy53aWR0aC90aGlzLmhlaWdodCwuMSxyKSxkLnRyYW5zbGF0ZShuLG4sWzAsMCwtdGhpcy5hbHRpdHVkZV0pLGQuc2NhbGUobixuLFsxLC0xLDEvdGhpcy5oZWlnaHRdKSxkLnJvdGF0ZVgobixuLHRoaXMuX3BpdGNoKSxkLnJvdGF0ZVoobixuLHRoaXMuYW5nbGUpLGQudHJhbnNsYXRlKG4sbixbLXRoaXMueCwtdGhpcy55LDBdKSx0aGlzLnByb2pNYXRyaXg9bixuPWQuY3JlYXRlKCksZC5zY2FsZShuLG4sW3RoaXMud2lkdGgvMiwtdGhpcy5oZWlnaHQvMiwxXSksZC50cmFuc2xhdGUobixuLFsxLC0xLDBdKSx0aGlzLnBpeGVsTWF0cml4PWQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksbix0aGlzLnByb2pNYXRyaXgpLCEobj1kLmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLnBpeGVsTWF0cml4KSkpdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gaW52ZXJ0IG1hdHJpeCIpO3RoaXMucGl4ZWxNYXRyaXhJbnZlcnNlPW59fX19LHsiLi4vZGF0YS9idWNrZXQiOjMzNywiLi4vc291cmNlL3RpbGVfY29vcmQiOjM3NywiLi4vdXRpbC9pbnRlcnBvbGF0ZSI6NDQ0LCIuLi91dGlsL3V0aWwiOjQ1MCwiLi9jb29yZGluYXRlIjozNDYsIi4vbG5nX2xhdCI6MzQ3LCJnbC1tYXRyaXgiOjE5NywicG9pbnQtZ2VvbWV0cnkiOjQ5M31dLDM1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17IiAiOlsxNixbXV0sIiEiOlsxMCxbNSwyMSw1LDcsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCciJzpbMTYsWzQsMjEsNCwxNCwtMSwtMSwxMiwyMSwxMiwxNF1dLCIjIjpbMjEsWzExLDI1LDQsLTcsLTEsLTEsMTcsMjUsMTAsLTcsLTEsLTEsNCwxMiwxOCwxMiwtMSwtMSwzLDYsMTcsNl1dLCQ6WzIwLFs4LDI1LDgsLTQsLTEsLTEsMTIsMjUsMTIsLTQsLTEsLTEsMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLCIlIjpbMjQsWzIxLDIxLDMsMCwtMSwtMSw4LDIxLDEwLDE5LDEwLDE3LDksMTUsNywxNCw1LDE0LDMsMTYsMywxOCw0LDIwLDYsMjEsOCwyMSwxMCwyMCwxMywxOSwxNiwxOSwxOSwyMCwyMSwyMSwtMSwtMSwxNyw3LDE1LDYsMTQsNCwxNCwyLDE2LDAsMTgsMCwyMCwxLDIxLDMsMjEsNSwxOSw3LDE3LDddXSwiJiI6WzI2LFsyMywxMiwyMywxMywyMiwxNCwyMSwxNCwyMCwxMywxOSwxMSwxNyw2LDE1LDMsMTMsMSwxMSwwLDcsMCw1LDEsNCwyLDMsNCwzLDYsNCw4LDUsOSwxMiwxMywxMywxNCwxNCwxNiwxNCwxOCwxMywyMCwxMSwyMSw5LDIwLDgsMTgsOCwxNiw5LDEzLDExLDEwLDE2LDMsMTgsMSwyMCwwLDIyLDAsMjMsMSwyMywyXV0sIiciOlsxMCxbNSwxOSw0LDIwLDUsMjEsNiwyMCw2LDE4LDUsMTYsNCwxNV1dLCIoIjpbMTQsWzExLDI1LDksMjMsNywyMCw1LDE2LDQsMTEsNCw3LDUsMiw3LC0yLDksLTUsMTEsLTddXSwiKSI6WzE0LFszLDI1LDUsMjMsNywyMCw5LDE2LDEwLDExLDEwLDcsOSwyLDcsLTIsNSwtNSwzLC03XV0sIioiOlsxNixbOCwyMSw4LDksLTEsLTEsMywxOCwxMywxMiwtMSwtMSwxMywxOCwzLDEyXV0sIisiOlsyNixbMTMsMTgsMTMsMCwtMSwtMSw0LDksMjIsOV1dLCIsIjpbMTAsWzYsMSw1LDAsNCwxLDUsMiw2LDEsNiwtMSw1LC0zLDQsLTRdXSwiLSI6WzI2LFs0LDksMjIsOV1dLCIuIjpbMTAsWzUsMiw0LDEsNSwwLDYsMSw1LDJdXSwiLyI6WzIyLFsyMCwyNSwyLC03XV0sMDpbMjAsWzksMjEsNiwyMCw0LDE3LDMsMTIsMyw5LDQsNCw2LDEsOSwwLDExLDAsMTQsMSwxNiw0LDE3LDksMTcsMTIsMTYsMTcsMTQsMjAsMTEsMjEsOSwyMV1dLAoxOlsyMCxbNiwxNyw4LDE4LDExLDIxLDExLDBdXSwyOlsyMCxbNCwxNiw0LDE3LDUsMTksNiwyMCw4LDIxLDEyLDIxLDE0LDIwLDE1LDE5LDE2LDE3LDE2LDE1LDE1LDEzLDEzLDEwLDMsMCwxNywwXV0sMzpbMjAsWzUsMjEsMTYsMjEsMTAsMTMsMTMsMTMsMTUsMTIsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDQ6WzIwLFsxMywyMSwzLDcsMTgsNywtMSwtMSwxMywyMSwxMywwXV0sNTpbMjAsWzE1LDIxLDUsMjEsNCwxMiw1LDEzLDgsMTQsMTEsMTQsMTQsMTMsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDY6WzIwLFsxNiwxOCwxNSwyMCwxMiwyMSwxMCwyMSw3LDIwLDUsMTcsNCwxMiw0LDcsNSwzLDcsMSwxMCwwLDExLDAsMTQsMSwxNiwzLDE3LDYsMTcsNywxNiwxMCwxNCwxMiwxMSwxMywxMCwxMyw3LDEyLDUsMTAsNCw3XV0sNzpbMjAsWzE3LDIxLDcsMCwtMSwtMSwzLDIxLDE3LDIxXV0sODpbMjAsWzgsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNCw3LDEzLDExLDEyLDE0LDExLDE2LDksMTcsNywxNyw0LDE2LDIsMTUsMSwxMiwwLDgsMCw1LDEsNCwyLDMsNCwzLDcsNCw5LDYsMTEsOSwxMiwxMywxMywxNSwxNCwxNiwxNiwxNiwxOCwxNSwyMCwxMiwyMSw4LDIxXV0sOTpbMjAsWzE2LDE0LDE1LDExLDEzLDksMTAsOCw5LDgsNiw5LDQsMTEsMywxNCwzLDE1LDQsMTgsNiwyMCw5LDIxLDEwLDIxLDEzLDIwLDE1LDE4LDE2LDE0LDE2LDksMTUsNCwxMywxLDEwLDAsOCwwLDUsMSw0LDNdXSwiOiI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCI7IjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIjwiOlsyNCxbMjAsMTgsNCw5LDIwLDBdXSwiPSI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sIj4iOlsyNCxbNCwxOCwyMCw5LDQsMF1dLCI/IjpbMTgsWzMsMTYsMywxNyw0LDE5LDUsMjAsNywyMSwxMSwyMSwxMywyMCwxNCwxOSwxNSwxNywxNSwxNSwxNCwxMywxMywxMiw5LDEwLDksNywtMSwtMSw5LDIsOCwxLDksMCwxMCwxLDksMl1dLCJAIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSwiWyI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLCJcXCI6WzE0LFswLDIxLDE0LC0zXV0sIl0iOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLCJeIjpbMTYsWzYsMTUsOCwxOCwxMCwxNSwtMSwtMSwzLDEyLDgsMTcsMTMsMTIsLTEsLTEsOCwxNyw4LDBdXSxfOlsxNixbMCwtMiwxNiwtMl1dLCJgIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSwieyI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLCJ8IjpbOCxbNCwyNSw0LC03XV0sIn0iOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sIn4iOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpPWl8fDE7dmFyIGEsbyxzLGwsYyx1LGYsaCxkPVtdO2ZvcihhPTAsbz10Lmxlbmd0aDthPG87YSsrKWlmKGM9blt0W2FdXSl7Zm9yKGg9bnVsbCxzPTAsbD1jWzFdLmxlbmd0aDtzPGw7cys9MiljWzFdW3NdPT09LTEmJmNbMV1bcysxXT09PS0xP2g9bnVsbDoodT1lK2NbMV1bc10qaSxmPXItY1sxXVtzKzFdKmksaCYmZC5wdXNoKGgueCxoLnksdSxmKSxoPXt4OnUseTpmfSk7ZSs9Y1swXSppfXJldHVybiBkfX0se31dLDM1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmV4cG9ydHM9e307bi52ZXJzaW9uPXQoIi4uL3BhY2thZ2UuanNvbiIpLnZlcnNpb24sbi5NYXA9dCgiLi91aS9tYXAiKSxuLkNvbnRyb2w9dCgiLi91aS9jb250cm9sL2NvbnRyb2wiKSxuLk5hdmlnYXRpb249dCgiLi91aS9jb250cm9sL25hdmlnYXRpb24iKSxuLkdlb2xvY2F0ZT10KCIuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlIiksbi5BdHRyaWJ1dGlvbj10KCIuL3VpL2NvbnRyb2wvYXR0cmlidXRpb24iKSxuLlBvcHVwPXQoIi4vdWkvcG9wdXAiKSxuLk1hcmtlcj10KCIuL3VpL21hcmtlciIpLG4uU3R5bGU9dCgiLi9zdHlsZS9zdHlsZSIpLG4uTG5nTGF0PXQoIi4vZ2VvL2xuZ19sYXQiKSxuLkxuZ0xhdEJvdW5kcz10KCIuL2dlby9sbmdfbGF0X2JvdW5kcyIpLG4uUG9pbnQ9dCgicG9pbnQtZ2VvbWV0cnkiKSxuLkV2ZW50ZWQ9dCgiLi91dGlsL2V2ZW50ZWQiKSxuLnV0aWw9dCgiLi91dGlsL3V0aWwiKSxuLnN1cHBvcnRlZD10KCIuL3V0aWwvYnJvd3NlciIpLnN1cHBvcnRlZDt2YXIgaT10KCIuL3V0aWwvYWpheCIpO24udXRpbC5nZXRKU09OPWkuZ2V0SlNPTixuLnV0aWwuZ2V0QXJyYXlCdWZmZXI9aS5nZXRBcnJheUJ1ZmZlcjt2YXIgYT10KCIuL3V0aWwvY29uZmlnIik7bi5jb25maWc9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiYWNjZXNzVG9rZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5BQ0NFU1NfVE9LRU59LHNldDpmdW5jdGlvbih0KXthLkFDQ0VTU19UT0tFTj10fX0pfSx7Ii4uL3BhY2thZ2UuanNvbiI6NDUyLCIuL2dlby9sbmdfbGF0IjozNDcsIi4vZ2VvL2xuZ19sYXRfYm91bmRzIjozNDgsIi4vc3R5bGUvc3R5bGUiOjM4NiwiLi91aS9jb250cm9sL2F0dHJpYnV0aW9uIjo0MTcsIi4vdWkvY29udHJvbC9jb250cm9sIjo0MTgsIi4vdWkvY29udHJvbC9nZW9sb2NhdGUiOjQxOSwiLi91aS9jb250cm9sL25hdmlnYXRpb24iOjQyMCwiLi91aS9tYXAiOjQyOSwiLi91aS9tYXJrZXIiOjQzMCwiLi91aS9wb3B1cCI6NDMxLCIuL3V0aWwvYWpheCI6NDMzLCIuL3V0aWwvYnJvd3NlciI6NDM0LCIuL3V0aWwvY29uZmlnIjo0MzksIi4vdXRpbC9ldmVudGVkIjo0NDIsIi4vdXRpbC91dGlsIjo0NTAsInBvaW50LWdlb21ldHJ5Ijo0OTN9XSwzNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17ZGVmaW5lOnt9LGluaXRpYWxpemU6e319LHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtuKCJ1XyI9PT1pLm5hbWUuc2xpY2UoMCwyKSk7dmFyIGE9IntwcmVjaXNpb259ICIrKDE9PT1pLmNvbXBvbmVudHM/ImZsb2F0IjoidmVjIitpLmNvbXBvbmVudHMpO2UuZGVmaW5lW2kubmFtZS5zbGljZSgyKV09InVuaWZvcm0gIithKyIgIitpLm5hbWUrIjtcbiIsZS5pbml0aWFsaXplW2kubmFtZS5zbGljZSgyKV09YSsiICIraS5uYW1lLnNsaWNlKDIpKyIgPSAiK2kubmFtZSsiO1xuIn1yZXR1cm4gZX19LHthc3NlcnQ6NDd9XSwzNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4scz10LmdsLGw9dC50cmFuc2Zvcm0sYz1yLnBhaW50WyJiYWNrZ3JvdW5kLWNvbG9yIl0sdT1yLnBhaW50WyJiYWNrZ3JvdW5kLXBhdHRlcm4iXSxmPXIucGFpbnRbImJhY2tncm91bmQtb3BhY2l0eSJdLGg9dT90LnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHUuZnJvbSwhMCk6bnVsbCxkPXU/dC5zcHJpdGVBdGxhcy5nZXRQb3NpdGlvbih1LnRvLCEwKTpudWxsO2lmKHQuc2V0RGVwdGhTdWJsYXllcigwKSxoJiZkKXtpZih0LmlzT3BhcXVlUGFzcylyZXR1cm47bj10LnVzZVByb2dyYW0oInBhdHRlcm4iKSxzLnVuaWZvcm0xaShuLnVfaW1hZ2UsMCkscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX3RsX2EsaC50bCkscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX2JyX2EsaC5icikscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX3RsX2IsZC50bCkscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX2JyX2IsZC5icikscy51bmlmb3JtMWYobi51X29wYWNpdHksZikscy51bmlmb3JtMWYobi51X21peCx1LnQpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl9zaXplX2EsaC5zaXplKSxzLnVuaWZvcm0yZnYobi51X3BhdHRlcm5fc2l6ZV9iLGQuc2l6ZSkscy51bmlmb3JtMWYobi51X3NjYWxlX2EsdS5mcm9tU2NhbGUpLHMudW5pZm9ybTFmKG4udV9zY2FsZV9iLHUudG9TY2FsZSkscy5hY3RpdmVUZXh0dXJlKHMuVEVYVFVSRTApLHQuc3ByaXRlQXRsYXMuYmluZChzLCEwKSx0LnRpbGVFeHRlbnRQYXR0ZXJuVkFPLmJpbmQocyxuLHQudGlsZUV4dGVudEJ1ZmZlcil9ZWxzZXtpZih0LmlzT3BhcXVlUGFzcyE9PSgxPT09Y1szXSkpcmV0dXJuO3ZhciBwPWEoW3tuYW1lOiJ1X2NvbG9yIixjb21wb25lbnRzOjR9LHtuYW1lOiJ1X29wYWNpdHkiLGNvbXBvbmVudHM6MX1dKTtuPXQudXNlUHJvZ3JhbSgiZmlsbCIsW10scCxwKSxzLnVuaWZvcm00ZnYobi51X2NvbG9yLGMpLHMudW5pZm9ybTFmKG4udV9vcGFjaXR5LGYpLHQudGlsZUV4dGVudFZBTy5iaW5kKHMsbix0LnRpbGVFeHRlbnRCdWZmZXIpfXMuZGlzYWJsZShzLlNURU5DSUxfVEVTVCk7Zm9yKHZhciBtPWwuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6b30pLHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIGc9bVt2XTtpZihoJiZkKXt2YXIgeT17Y29vcmQ6Zyx0aWxlU2l6ZTpvfTtzLnVuaWZvcm0xZihuLnVfdGlsZV91bml0c190b19waXhlbHMsMS9pKHksMSx0LnRyYW5zZm9ybS50aWxlWm9vbSkpO3ZhciBiPXkudGlsZVNpemUqTWF0aC5wb3coMix0LnRyYW5zZm9ybS50aWxlWm9vbS15LmNvb3JkLnopLHg9YiooeS5jb29yZC54K2cudypNYXRoLnBvdygyLHkuY29vcmQueikpLF89Yip5LmNvb3JkLnk7cy51bmlmb3JtMmYobi51X3BpeGVsX2Nvb3JkX3VwcGVyLHg+PjE2LF8+PjE2KSxzLnVuaWZvcm0yZihuLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmeCw2NTUzNSZfKX1zLnVuaWZvcm1NYXRyaXg0ZnYobi51X21hdHJpeCwhMSx0LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZykpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsdC50aWxlRXh0ZW50QnVmZmVyLmxlbmd0aCl9cy5zdGVuY2lsTWFzaygwKSxzLnN0ZW5jaWxGdW5jKHMuRVFVQUwsMTI4LDEyOCl9dmFyIGk9dCgiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIiksYT10KCIuL2NyZWF0ZV91bmlmb3JtX3ByYWdtYXMiKSxvPTUxMjtlLmV4cG9ydHM9bn0seyIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiOjM3MSwiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIjozNTJ9XSwzNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZighdC5pc09wYXF1ZVBhc3Mpe3ZhciBhPXQuZ2w7dC5zZXREZXB0aFN1YmxheWVyKDApLHQuZGVwdGhNYXNrKCExKSxhLmRpc2FibGUoYS5TVEVOQ0lMX1RFU1QpO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dLGw9ZS5nZXRUaWxlKHMpLGM9bC5nZXRCdWNrZXQocik7aWYoYyl7dmFyIHU9Yy5idWZmZXJHcm91cHMuY2lyY2xlO2lmKHUpe3ZhciBmPWMucGFpbnRBdHRyaWJ1dGVzLmNpcmNsZVtyLmlkXSxoPXQudXNlUHJvZ3JhbSgiY2lyY2xlIixmLmRlZmluZXMsZi52ZXJ0ZXhQcmFnbWFzLGYuZnJhZ21lbnRQcmFnbWFzKTsibWFwIj09PXIucGFpbnRbImNpcmNsZS1waXRjaC1zY2FsZSJdPyhhLnVuaWZvcm0xaShoLnVfc2NhbGVfd2l0aF9tYXAsITApLGEudW5pZm9ybTJmKGgudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSp0LnRyYW5zZm9ybS5hbHRpdHVkZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0qdC50cmFuc2Zvcm0uYWx0aXR1ZGUpKTooYS51bmlmb3JtMWkoaC51X3NjYWxlX3dpdGhfbWFwLCExKSxhLnVuaWZvcm0yZnYoaC51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzKSksYS51bmlmb3JtMWYoaC51X2RldmljZXBpeGVscmF0aW8saS5kZXZpY2VQaXhlbFJhdGlvKSxhLnVuaWZvcm1NYXRyaXg0ZnYoaC51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChzLnBvc01hdHJpeCxsLHIucGFpbnRbImNpcmNsZS10cmFuc2xhdGUiXSxyLnBhaW50WyJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciJdKSksYy5zZXRVbmlmb3JtcyhhLCJjaXJjbGUiLGgscix7em9vbTp0LnRyYW5zZm9ybS56b29tfSk7Zm9yKHZhciBkPTA7ZDx1Lmxlbmd0aDtkKyspe3ZhciBwPXVbZF07cC52YW9zW3IuaWRdLmJpbmQoYSxoLHAubGF5b3V0VmVydGV4QnVmZmVyLHAuZWxlbWVudEJ1ZmZlcixwLnBhaW50VmVydGV4QnVmZmVyc1tyLmlkXSksYS5kcmF3RWxlbWVudHMoYS5UUklBTkdMRVMsMypwLmVsZW1lbnRCdWZmZXIubGVuZ3RoLGEuVU5TSUdORURfU0hPUlQsMCl9fX19fX12YXIgaT10KCIuLi91dGlsL2Jyb3dzZXIiKTtlLmV4cG9ydHM9bn0seyIuLi91dGlsL2Jyb3dzZXIiOjQzNH1dLDM1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBpPXQuZ2w7aS5lbmFibGUoaS5TVEVOQ0lMX1RFU1QpO2Zvcih2YXIgYT10LnVzZVByb2dyYW0oImNvbGxpc2lvbmJveCIpLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXSxsPWUuZ2V0VGlsZShzKSxjPWwuZ2V0QnVja2V0KHIpO2lmKGMpe3ZhciB1PWMuYnVmZmVyR3JvdXBzLmNvbGxpc2lvbkJveDtpZih1JiZ1Lmxlbmd0aCl7dmFyIGY9dVswXTswIT09Zi5sYXlvdXRWZXJ0ZXhCdWZmZXIubGVuZ3RoJiYoaS51bmlmb3JtTWF0cml4NGZ2KGEudV9tYXRyaXgsITEscy5wb3NNYXRyaXgpLHQuZW5hYmxlVGlsZUNsaXBwaW5nTWFzayhzKSx0LmxpbmVXaWR0aCgxKSxpLnVuaWZvcm0xZihhLnVfc2NhbGUsTWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLWwuY29vcmQueikpLGkudW5pZm9ybTFmKGEudV96b29tLDEwKnQudHJhbnNmb3JtLnpvb20pLGkudW5pZm9ybTFmKGEudV9tYXh6b29tLDEwKihsLmNvb3JkLnorMSkpLGYudmFvc1tyLmlkXS5iaW5kKGksYSxmLmxheW91dFZlcnRleEJ1ZmZlciksaS5kcmF3QXJyYXlzKGkuTElORVMsMCxmLmxheW91dFZlcnRleEJ1ZmZlci5sZW5ndGgpKX19fX1lLmV4cG9ydHM9bn0se31dLDM1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZighdC5pc09wYXF1ZVBhc3MmJnQub3B0aW9ucy5kZWJ1Zylmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylpKHQsZSxyW25dKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj10LmdsO24uZGlzYWJsZShuLlNURU5DSUxfVEVTVCksdC5saW5lV2lkdGgoMSpvLmRldmljZVBpeGVsUmF0aW8pO3ZhciBpPXIucG9zTWF0cml4LGY9dC51c2VQcm9ncmFtKCJkZWJ1ZyIpO24udW5pZm9ybU1hdHJpeDRmdihmLnVfbWF0cml4LCExLGkpLG4udW5pZm9ybTRmKGYudV9jb2xvciwxLDAsMCwxKSx0LmRlYnVnVkFPLmJpbmQobixmLHQuZGVidWdCdWZmZXIpLG4uZHJhd0FycmF5cyhuLkxJTkVfU1RSSVAsMCx0LmRlYnVnQnVmZmVyLmxlbmd0aCk7Zm9yKHZhciBoPWEoci50b1N0cmluZygpLDUwLDIwMCw1KSxkPW5ldyB0LlBvc0FycmF5LHA9MDtwPGgubGVuZ3RoO3ArPTIpZC5lbXBsYWNlQmFjayhoW3BdLGhbcCsxXSk7dmFyIG09bmV3IGMoZC5zZXJpYWxpemUoKSx0LlBvc0FycmF5LnNlcmlhbGl6ZSgpLGMuQnVmZmVyVHlwZS5WRVJURVgpOyhuZXcgdSkuYmluZChuLGYsbSksbi51bmlmb3JtNGYoZi51X2NvbG9yLDEsMSwxLDEpO2Zvcih2YXIgdj1lLmdldFRpbGUocikudGlsZVNpemUsZz1sLyhNYXRoLnBvdygyLHQudHJhbnNmb3JtLnpvb20tci56KSp2KSx5PVtbLTEsLTFdLFstMSwxXSxbMSwtMV0sWzEsMV1dLGI9MDtiPHkubGVuZ3RoO2IrKyl7dmFyIHg9eVtiXTtuLnVuaWZvcm1NYXRyaXg0ZnYoZi51X21hdHJpeCwhMSxzLnRyYW5zbGF0ZShbXSxpLFtnKnhbMF0sZyp4WzFdLDBdKSksbi5kcmF3QXJyYXlzKG4uTElORVMsMCxtLmxlbmd0aCl9bi51bmlmb3JtNGYoZi51X2NvbG9yLDAsMCwwLDEpLG4udW5pZm9ybU1hdHJpeDRmdihmLnVfbWF0cml4LCExLGkpLG4uZHJhd0FycmF5cyhuLkxJTkVTLDAsbS5sZW5ndGgpfXZhciBhPXQoIi4uL2xpYi9kZWJ1Z3RleHQiKSxvPXQoIi4uL3V0aWwvYnJvd3NlciIpLHM9dCgiZ2wtbWF0cml4IikubWF0NCxsPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGM9dCgiLi4vZGF0YS9idWZmZXIiKSx1PXQoIi4vdmVydGV4X2FycmF5X29iamVjdCIpO2UuZXhwb3J0cz1ufSx7Ii4uL2RhdGEvYnVja2V0IjozMzcsIi4uL2RhdGEvYnVmZmVyIjozNDIsIi4uL2xpYi9kZWJ1Z3RleHQiOjM1MCwiLi4vdXRpbC9icm93c2VyIjo0MzQsIi4vdmVydGV4X2FycmF5X29iamVjdCI6MzY1LCJnbC1tYXRyaXgiOjE5N31dLDM1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBvPXQuZ2w7by5lbmFibGUoby5TVEVOQ0lMX1RFU1QpO3ZhciBzO2lmKHM9IXIucGFpbnRbImZpbGwtcGF0dGVybiJdJiYoci5pc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQoImZpbGwtY29sb3IiKSYmci5pc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQoImZpbGwtb3BhY2l0eSIpJiYxPT09ci5wYWludFsiZmlsbC1jb2xvciJdWzNdJiYxPT09ci5wYWludFsiZmlsbC1vcGFjaXR5Il0pLHQuaXNPcGFxdWVQYXNzPT09cyl7dC5zZXREZXB0aFN1YmxheWVyKDEpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKWkodCxlLHIsbltsXSl9aWYoIXQuaXNPcGFxdWVQYXNzJiZyLnBhaW50WyJmaWxsLWFudGlhbGlhcyJdKXt0LmxpbmVXaWR0aCgyKSx0LmRlcHRoTWFzayghMSk7dmFyIGM9ci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKTsoY3x8IXIucGFpbnRbImZpbGwtcGF0dGVybiJdKSYmYz90LnNldERlcHRoU3VibGF5ZXIoMik6dC5zZXREZXB0aFN1YmxheWVyKDApO2Zvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKWEodCxlLHIsblt1XSl9fWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ZS5nZXRUaWxlKG4pLGE9aS5nZXRCdWNrZXQocik7aWYoYSl7dmFyIHM9YS5idWZmZXJHcm91cHMuZmlsbDtpZihzKXt2YXIgbCxjPXQuZ2wsdT1yLnBhaW50WyJmaWxsLXBhdHRlcm4iXTtpZih1KWw9dC51c2VQcm9ncmFtKCJwYXR0ZXJuIiksbyh1LHIucGFpbnRbImZpbGwtb3BhY2l0eSJdLGksbix0LGwpLGMuYWN0aXZlVGV4dHVyZShjLlRFWFRVUkUwKSx0LnNwcml0ZUF0bGFzLmJpbmQoYywhMCk7ZWxzZXt2YXIgZj1hLnBhaW50QXR0cmlidXRlcy5maWxsW3IuaWRdO2w9dC51c2VQcm9ncmFtKCJmaWxsIixmLmRlZmluZXMsZi52ZXJ0ZXhQcmFnbWFzLGYuZnJhZ21lbnRQcmFnbWFzKSxhLnNldFVuaWZvcm1zKGMsImZpbGwiLGwscix7em9vbTp0LnRyYW5zZm9ybS56b29tfSl9Yy51bmlmb3JtTWF0cml4NGZ2KGwudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgobi5wb3NNYXRyaXgsaSxyLnBhaW50WyJmaWxsLXRyYW5zbGF0ZSJdLHIucGFpbnRbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSksdC5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrKG4pO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgZD1zW2hdO2QudmFvc1tyLmlkXS5iaW5kKGMsbCxkLmxheW91dFZlcnRleEJ1ZmZlcixkLmVsZW1lbnRCdWZmZXIsZC5wYWludFZlcnRleEJ1ZmZlcnNbci5pZF0pLGMuZHJhd0VsZW1lbnRzKGMuVFJJQU5HTEVTLGQuZWxlbWVudEJ1ZmZlci5sZW5ndGgsYy5VTlNJR05FRF9TSE9SVCwwKX19fX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPWUuZ2V0VGlsZShuKSxhPWkuZ2V0QnVja2V0KHIpO2lmKGEpe3ZhciBzLGw9dC5nbCxjPWEuYnVmZmVyR3JvdXBzLmZpbGwsdT1yLnBhaW50WyJmaWxsLXBhdHRlcm4iXSxmPXIucGFpbnRbImZpbGwtb3BhY2l0eSJdLGg9ci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKTtpZih1JiYhaClzPXQudXNlUHJvZ3JhbSgib3V0bGluZXBhdHRlcm4iKSxsLnVuaWZvcm0yZihzLnVfd29ybGQsbC5kcmF3aW5nQnVmZmVyV2lkdGgsbC5kcmF3aW5nQnVmZmVySGVpZ2h0KTtlbHNle3ZhciBkPWEucGFpbnRBdHRyaWJ1dGVzLmZpbGxbci5pZF07cz10LnVzZVByb2dyYW0oIm91dGxpbmUiLGQuZGVmaW5lcyxkLnZlcnRleFByYWdtYXMsZC5mcmFnbWVudFByYWdtYXMpLGwudW5pZm9ybTJmKHMudV93b3JsZCxsLmRyYXdpbmdCdWZmZXJXaWR0aCxsLmRyYXdpbmdCdWZmZXJIZWlnaHQpLGwudW5pZm9ybTFmKHMudV9vcGFjaXR5LGYpLGEuc2V0VW5pZm9ybXMobCwiZmlsbCIscyxyLHt6b29tOnQudHJhbnNmb3JtLnpvb219KX1sLnVuaWZvcm1NYXRyaXg0ZnYocy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChuLnBvc01hdHJpeCxpLHIucGFpbnRbImZpbGwtdHJhbnNsYXRlIl0sci5wYWludFsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0pKSx1JiZvKHUsZixpLG4sdCxzKSx0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2sobik7Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBtPWNbcF07bS5zZWNvbmRWYW9zW3IuaWRdLmJpbmQobCxzLG0ubGF5b3V0VmVydGV4QnVmZmVyLG0uZWxlbWVudEJ1ZmZlcjIsbS5wYWludFZlcnRleEJ1ZmZlcnNbci5pZF0pLGwuZHJhd0VsZW1lbnRzKGwuTElORVMsMiptLmVsZW1lbnRCdWZmZXIyLmxlbmd0aCxsLlVOU0lHTkVEX1NIT1JULDApfX19ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG89aS5nbCxsPWkuc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24odC5mcm9tLCEwKSxjPWkuc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24odC50bywhMCk7aWYobCYmYyl7by51bmlmb3JtMWkoYS51X2ltYWdlLDApLG8udW5pZm9ybTJmdihhLnVfcGF0dGVybl90bF9hLGwudGwpLG8udW5pZm9ybTJmdihhLnVfcGF0dGVybl9icl9hLGwuYnIpLG8udW5pZm9ybTJmdihhLnVfcGF0dGVybl90bF9iLGMudGwpLG8udW5pZm9ybTJmdihhLnVfcGF0dGVybl9icl9iLGMuYnIpLG8udW5pZm9ybTFmKGEudV9vcGFjaXR5LGUpLG8udW5pZm9ybTFmKGEudV9taXgsdC50KSxvLnVuaWZvcm0xZihhLnVfdGlsZV91bml0c190b19waXhlbHMsMS9zKHIsMSxpLnRyYW5zZm9ybS50aWxlWm9vbSkpLG8udW5pZm9ybTJmdihhLnVfcGF0dGVybl9zaXplX2EsbC5zaXplKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fc2l6ZV9iLGMuc2l6ZSksby51bmlmb3JtMWYoYS51X3NjYWxlX2EsdC5mcm9tU2NhbGUpLG8udW5pZm9ybTFmKGEudV9zY2FsZV9iLHQudG9TY2FsZSk7dmFyIHU9ci50aWxlU2l6ZSpNYXRoLnBvdygyLGkudHJhbnNmb3JtLnRpbGVab29tLXIuY29vcmQueiksZj11KihyLmNvb3JkLngrbi53Kk1hdGgucG93KDIsci5jb29yZC56KSksaD11KnIuY29vcmQueTtvLnVuaWZvcm0yZihhLnVfcGl4ZWxfY29vcmRfdXBwZXIsZj4+MTYsaD4+MTYpLG8udW5pZm9ybTJmKGEudV9waXhlbF9jb29yZF9sb3dlciw2NTUzNSZmLDY1NTM1JmgpLG8uYWN0aXZlVGV4dHVyZShvLlRFWFRVUkUwKSxpLnNwcml0ZUF0bGFzLmJpbmQobywhMCl9fXZhciBzPXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpO2UuZXhwb3J0cz1ufSx7Ii4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyI6MzcxfV0sMzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvYnJvd3NlciIpLGk9dCgiZ2wtbWF0cml4IikubWF0MixhPXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtpZighdC5pc09wYXF1ZVBhc3Mpe3Quc2V0RGVwdGhTdWJsYXllcigwKSx0LmRlcHRoTWFzayghMSk7dmFyIHM9dC5nbDtpZihzLmVuYWJsZShzLlNURU5DSUxfVEVTVCksIShyLnBhaW50WyJsaW5lLXdpZHRoIl08PTApKXt2YXIgbD0xL24uZGV2aWNlUGl4ZWxSYXRpbyxjPXIucGFpbnRbImxpbmUtYmx1ciJdK2wsdT1yLnBhaW50WyJsaW5lLWNvbG9yIl0sZj10LnRyYW5zZm9ybSxoPWkuY3JlYXRlKCk7aS5zY2FsZShoLGgsWzEsTWF0aC5jb3MoZi5fcGl0Y2gpXSksaS5yb3RhdGUoaCxoLHQudHJhbnNmb3JtLmFuZ2xlKTt2YXIgZCxwLG0sdixnLHk9TWF0aC5zcXJ0KGYuaGVpZ2h0KmYuaGVpZ2h0LzQqKDErZi5hbHRpdHVkZSpmLmFsdGl0dWRlKSksYj1mLmhlaWdodC8yKk1hdGgudGFuKGYuX3BpdGNoKSx4PSh5K2IpL3ktMSxfPXIucGFpbnRbImxpbmUtZGFzaGFycmF5Il0sdz1yLnBhaW50WyJsaW5lLXBhdHRlcm4iXTtpZihfKWQ9dC51c2VQcm9ncmFtKCJsaW5lc2RmcGF0dGVybiIpLHMudW5pZm9ybTFmKGQudV9saW5ld2lkdGgsci5wYWludFsibGluZS13aWR0aCJdLzIpLHMudW5pZm9ybTFmKGQudV9nYXB3aWR0aCxyLnBhaW50WyJsaW5lLWdhcC13aWR0aCJdLzIpLHMudW5pZm9ybTFmKGQudV9hbnRpYWxpYXNpbmcsbC8yKSxzLnVuaWZvcm0xZihkLnVfYmx1cixjKSxzLnVuaWZvcm00ZnYoZC51X2NvbG9yLHUpLHMudW5pZm9ybTFmKGQudV9vcGFjaXR5LHIucGFpbnRbImxpbmUtb3BhY2l0eSJdKSxwPXQubGluZUF0bGFzLmdldERhc2goXy5mcm9tLCJyb3VuZCI9PT1yLmxheW91dFsibGluZS1jYXAiXSksbT10LmxpbmVBdGxhcy5nZXREYXNoKF8udG8sInJvdW5kIj09PXIubGF5b3V0WyJsaW5lLWNhcCJdKSxzLnVuaWZvcm0xaShkLnVfaW1hZ2UsMCkscy5hY3RpdmVUZXh0dXJlKHMuVEVYVFVSRTApLHQubGluZUF0bGFzLmJpbmQocykscy51bmlmb3JtMWYoZC51X3RleF95X2EscC55KSxzLnVuaWZvcm0xZihkLnVfdGV4X3lfYixtLnkpLHMudW5pZm9ybTFmKGQudV9taXgsXy50KSxzLnVuaWZvcm0xZihkLnVfZXh0cmEseCkscy51bmlmb3JtMWYoZC51X29mZnNldCwtci5wYWludFsibGluZS1vZmZzZXQiXSkscy51bmlmb3JtTWF0cml4MmZ2KGQudV9hbnRpYWxpYXNpbmdtYXRyaXgsITEsaCk7ZWxzZSBpZih3KXtpZih2PXQuc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24ody5mcm9tLCEwKSxnPXQuc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24ody50bywhMCksIXZ8fCFnKXJldHVybjtkPXQudXNlUHJvZ3JhbSgibGluZXBhdHRlcm4iKSxzLnVuaWZvcm0xaShkLnVfaW1hZ2UsMCkscy5hY3RpdmVUZXh0dXJlKHMuVEVYVFVSRTApLHQuc3ByaXRlQXRsYXMuYmluZChzLCEwKSxzLnVuaWZvcm0xZihkLnVfbGluZXdpZHRoLHIucGFpbnRbImxpbmUtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfZ2Fwd2lkdGgsci5wYWludFsibGluZS1nYXAtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfYW50aWFsaWFzaW5nLGwvMikscy51bmlmb3JtMWYoZC51X2JsdXIsYykscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3RsX2Esdi50bCkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX2JyX2Esdi5icikscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3RsX2IsZy50bCkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX2JyX2IsZy5icikscy51bmlmb3JtMWYoZC51X2ZhZGUsdy50KSxzLnVuaWZvcm0xZihkLnVfb3BhY2l0eSxyLnBhaW50WyJsaW5lLW9wYWNpdHkiXSkscy51bmlmb3JtMWYoZC51X2V4dHJhLHgpLHMudW5pZm9ybTFmKGQudV9vZmZzZXQsLXIucGFpbnRbImxpbmUtb2Zmc2V0Il0pLHMudW5pZm9ybU1hdHJpeDJmdihkLnVfYW50aWFsaWFzaW5nbWF0cml4LCExLGgpfWVsc2UgZD10LnVzZVByb2dyYW0oImxpbmUiKSxzLnVuaWZvcm0xZihkLnVfbGluZXdpZHRoLHIucGFpbnRbImxpbmUtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfZ2Fwd2lkdGgsci5wYWludFsibGluZS1nYXAtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfYW50aWFsaWFzaW5nLGwvMikscy51bmlmb3JtMWYoZC51X2JsdXIsYykscy51bmlmb3JtMWYoZC51X2V4dHJhLHgpLHMudW5pZm9ybTFmKGQudV9vZmZzZXQsLXIucGFpbnRbImxpbmUtb2Zmc2V0Il0pLHMudW5pZm9ybU1hdHJpeDJmdihkLnVfYW50aWFsaWFzaW5nbWF0cml4LCExLGgpLHMudW5pZm9ybTRmdihkLnVfY29sb3IsdSkscy51bmlmb3JtMWYoZC51X29wYWNpdHksci5wYWludFsibGluZS1vcGFjaXR5Il0pO2Zvcih2YXIgTT0wO008by5sZW5ndGg7TSsrKXt2YXIgVD1vW01dLGs9ZS5nZXRUaWxlKFQpLEE9ay5nZXRCdWNrZXQocik7aWYoQSl7dmFyIEU9QS5idWZmZXJHcm91cHMubGluZTtpZihFKXt0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2soVCk7dmFyIFM9dC50cmFuc2xhdGVQb3NNYXRyaXgoVC5wb3NNYXRyaXgsayxyLnBhaW50WyJsaW5lLXRyYW5zbGF0ZSJdLHIucGFpbnRbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKTtzLnVuaWZvcm1NYXRyaXg0ZnYoZC51X21hdHJpeCwhMSxTKTt2YXIgTD0xL2EoaywxLHQudHJhbnNmb3JtLnpvb20pO2lmKF8pe3ZhciBDPXAud2lkdGgqXy5mcm9tU2NhbGUsST1tLndpZHRoKl8udG9TY2FsZSxEPVsxL2EoayxDLHQudHJhbnNmb3JtLnRpbGVab29tKSwtcC5oZWlnaHQvMl0sUD1bMS9hKGssSSx0LnRyYW5zZm9ybS50aWxlWm9vbSksLW0uaGVpZ2h0LzJdLHo9dC5saW5lQXRsYXMud2lkdGgvKDI1NipNYXRoLm1pbihDLEkpKm4uZGV2aWNlUGl4ZWxSYXRpbykvMjtzLnVuaWZvcm0xZihkLnVfcmF0aW8sTCkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuc2NhbGVfYSxEKSxzLnVuaWZvcm0yZnYoZC51X3BhdHRlcm5zY2FsZV9iLFApLHMudW5pZm9ybTFmKGQudV9zZGZnYW1tYSx6KX1lbHNlIHc/KHMudW5pZm9ybTFmKGQudV9yYXRpbyxMKSxzLnVuaWZvcm0yZnYoZC51X3BhdHRlcm5fc2l6ZV9hLFthKGssdi5zaXplWzBdKncuZnJvbVNjYWxlLHQudHJhbnNmb3JtLnRpbGVab29tKSxnLnNpemVbMV1dKSxzLnVuaWZvcm0yZnYoZC51X3BhdHRlcm5fc2l6ZV9iLFthKGssZy5zaXplWzBdKncudG9TY2FsZSx0LnRyYW5zZm9ybS50aWxlWm9vbSksZy5zaXplWzFdXSkpOnMudW5pZm9ybTFmKGQudV9yYXRpbyxMKTtmb3IodmFyIE89MDtPPEUubGVuZ3RoO08rKyl7dmFyIFI9RVtPXTtSLnZhb3Nbci5pZF0uYmluZChzLGQsUi5sYXlvdXRWZXJ0ZXhCdWZmZXIsUi5lbGVtZW50QnVmZmVyKSxzLmRyYXdFbGVtZW50cyhzLlRSSUFOR0xFUywzKlIuZWxlbWVudEJ1ZmZlci5sZW5ndGgscy5VTlNJR05FRF9TSE9SVCwwKX19fX19fX19LHsiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIjozNzEsIi4uL3V0aWwvYnJvd3NlciI6NDM0LCJnbC1tYXRyaXgiOjE5N31dLDM1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKCF0LmlzT3BhcXVlUGFzcyl7dmFyIGE9dC5nbDthLmVuYWJsZShhLkRFUFRIX1RFU1QpLHQuZGVwdGhNYXNrKCEwKSxhLmRlcHRoRnVuYyhhLkxFU1MpO2Zvcih2YXIgbz1uLmxlbmd0aCYmblswXS56LHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXTt0LnNldERlcHRoU3VibGF5ZXIobC56LW8pLGkodCxlLHIsbCl9YS5kZXB0aEZ1bmMoYS5MRVFVQUwpfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXQuZ2w7aS5kaXNhYmxlKGkuU1RFTkNJTF9URVNUKTt2YXIgYz1lLmdldFRpbGUobiksdT10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgobixlLm1heHpvb20pLGY9dC51c2VQcm9ncmFtKCJyYXN0ZXIiKTtpLnVuaWZvcm1NYXRyaXg0ZnYoZi51X21hdHJpeCwhMSx1KSxpLnVuaWZvcm0xZihmLnVfYnJpZ2h0bmVzc19sb3csci5wYWludFsicmFzdGVyLWJyaWdodG5lc3MtbWluIl0pLGkudW5pZm9ybTFmKGYudV9icmlnaHRuZXNzX2hpZ2gsci5wYWludFsicmFzdGVyLWJyaWdodG5lc3MtbWF4Il0pLGkudW5pZm9ybTFmKGYudV9zYXR1cmF0aW9uX2ZhY3RvcixzKHIucGFpbnRbInJhc3Rlci1zYXR1cmF0aW9uIl0pKSxpLnVuaWZvcm0xZihmLnVfY29udHJhc3RfZmFjdG9yLG8oci5wYWludFsicmFzdGVyLWNvbnRyYXN0Il0pKSxpLnVuaWZvcm0zZnYoZi51X3NwaW5fd2VpZ2h0cyxhKHIucGFpbnRbInJhc3Rlci1odWUtcm90YXRlIl0pKTt2YXIgaCxkLHA9Yy5zb3VyY2UmJmMuc291cmNlLmZpbmRMb2FkZWRQYXJlbnQobiwwLHt9KSxtPWwoYyxwLHIsdC50cmFuc2Zvcm0pO2kuYWN0aXZlVGV4dHVyZShpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxjLnRleHR1cmUpLGkuYWN0aXZlVGV4dHVyZShpLlRFWFRVUkUxKSxwPyhpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxwLnRleHR1cmUpLGg9TWF0aC5wb3coMixwLmNvb3JkLnotYy5jb29yZC56KSxkPVtjLmNvb3JkLngqaCUxLGMuY29vcmQueSpoJTFdKTooaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsYy50ZXh0dXJlKSxtWzFdPTApLGkudW5pZm9ybTJmdihmLnVfdGxfcGFyZW50LGR8fFswLDBdKSxpLnVuaWZvcm0xZihmLnVfc2NhbGVfcGFyZW50LGh8fDEpLGkudW5pZm9ybTFmKGYudV9idWZmZXJfc2NhbGUsMSksaS51bmlmb3JtMWYoZi51X29wYWNpdHkwLG1bMF0pLGkudW5pZm9ybTFmKGYudV9vcGFjaXR5MSxtWzFdKSxpLnVuaWZvcm0xaShmLnVfaW1hZ2UwLDApLGkudW5pZm9ybTFpKGYudV9pbWFnZTEsMSk7dmFyIHY9Yy5ib3VuZHNCdWZmZXJ8fHQucmFzdGVyQm91bmRzQnVmZmVyOyhjLmJvdW5kc1ZBT3x8dC5yYXN0ZXJCb3VuZHNWQU8pLmJpbmQoaSxmLHYpLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsdi5sZW5ndGgpfWZ1bmN0aW9uIGEodCl7dCo9TWF0aC5QSS8xODA7dmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KTtyZXR1cm5bKDIqcisxKS8zLCgtTWF0aC5zcXJ0KDMpKmUtcisxKS8zLChNYXRoLnNxcnQoMykqZS1yKzEpLzNdfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ+MD8xLygxLXQpOjErdH1mdW5jdGlvbiBzKHQpe3JldHVybiB0PjA/MS0xLygxLjAwMS10KTotdH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPVsxLDBdLGE9ci5wYWludFsicmFzdGVyLWZhZGUtZHVyYXRpb24iXTtpZih0LnNvdXJjZSYmYT4wKXt2YXIgbz0obmV3IERhdGUpLmdldFRpbWUoKSxzPShvLXQudGltZUFkZGVkKS9hLGw9ZT8oby1lLnRpbWVBZGRlZCkvYTotMSx1PW4uY292ZXJpbmdab29tTGV2ZWwodC5zb3VyY2UpLGY9ISFlJiZNYXRoLmFicyhlLmNvb3JkLnotdSk+TWF0aC5hYnModC5jb29yZC56LXUpOyFlfHxmPyhpWzBdPWMuY2xhbXAocywwLDEpLGlbMV09MS1pWzBdKTooaVswXT1jLmNsYW1wKDEtbCwwLDEpLGlbMV09MS1pWzBdKX12YXIgaD1yLnBhaW50WyJyYXN0ZXItb3BhY2l0eSJdO3JldHVybiBpWzBdKj1oLGlbMV0qPWgsaX12YXIgYz10KCIuLi91dGlsL3V0aWwiKSx1PXQoIi4uL3V0aWwvc3RydWN0X2FycmF5Iik7ZS5leHBvcnRzPW4sbi5SYXN0ZXJCb3VuZHNBcnJheT1uZXcgdSh7bWVtYmVyczpbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfSx7bmFtZToiYV90ZXh0dXJlX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dfSl9LHsiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiOjQ0OCwiLi4vdXRpbC91dGlsIjo0NTB9XSwzNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZighdC5pc09wYXF1ZVBhc3Mpe3ZhciBhPSEoci5sYXlvdXRbInRleHQtYWxsb3ctb3ZlcmxhcCJdfHxyLmxheW91dFsiaWNvbi1hbGxvdy1vdmVybGFwIl18fHIubGF5b3V0WyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8ci5sYXlvdXRbImljb24taWdub3JlLXBsYWNlbWVudCJdKSxvPXQuZ2w7YT9vLmRpc2FibGUoby5TVEVOQ0lMX1RFU1QpOm8uZW5hYmxlKG8uU1RFTkNJTF9URVNUKSx0LnNldERlcHRoU3VibGF5ZXIoMCksdC5kZXB0aE1hc2soITEpLG8uZGlzYWJsZShvLkRFUFRIX1RFU1QpLGkodCxlLHIsbiwhMSxyLnBhaW50WyJpY29uLXRyYW5zbGF0ZSJdLHIucGFpbnRbImljb24tdHJhbnNsYXRlLWFuY2hvciJdLHIubGF5b3V0WyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdLHIubGF5b3V0WyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdLHIubGF5b3V0WyJpY29uLXNpemUiXSxyLnBhaW50WyJpY29uLWhhbG8td2lkdGgiXSxyLnBhaW50WyJpY29uLWhhbG8tY29sb3IiXSxyLnBhaW50WyJpY29uLWhhbG8tYmx1ciJdLHIucGFpbnRbImljb24tb3BhY2l0eSJdLHIucGFpbnRbImljb24tY29sb3IiXSksaSh0LGUscixuLCEwLHIucGFpbnRbInRleHQtdHJhbnNsYXRlIl0sci5wYWludFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0sci5sYXlvdXRbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il0sci5sYXlvdXRbInRleHQtcGl0Y2gtYWxpZ25tZW50Il0sci5sYXlvdXRbInRleHQtc2l6ZSJdLHIucGFpbnRbInRleHQtaGFsby13aWR0aCJdLHIucGFpbnRbInRleHQtaGFsby1jb2xvciJdLHIucGFpbnRbInRleHQtaGFsby1ibHVyIl0sci5wYWludFsidGV4dC1vcGFjaXR5Il0sci5wYWludFsidGV4dC1jb2xvciJdKSxvLmVuYWJsZShvLkRFUFRIX1RFU1QpLGUubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmcyh0LGUscixuKX19ZnVuY3Rpb24gaSh0LGUscixuLGksbyxzLGwsYyx1LGYsaCxkLHAsbSl7Zm9yKHZhciB2PTA7djxuLmxlbmd0aDt2Kyspe3ZhciBnPWUuZ2V0VGlsZShuW3ZdKSx5PWcuZ2V0QnVja2V0KHIpO2lmKHkpe3ZhciBiPXkuYnVmZmVyR3JvdXBzLHg9aT9iLmdseXBoOmIuaWNvbjt4Lmxlbmd0aCYmKHQuZW5hYmxlVGlsZUNsaXBwaW5nTWFzayhuW3ZdKSxhKHQscixuW3ZdLnBvc01hdHJpeCxnLHkseCxpLGl8fHkuc2RmSWNvbnMsIWkmJnkuaWNvbnNOZWVkTGluZWFyLGk/eS5hZGp1c3RlZFRleHRTaXplOnkuYWRqdXN0ZWRJY29uU2l6ZSx5LmZvbnRzdGFjayxvLHMsbCxjLHUsZixoLGQscCxtKSl9fX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhLHMsYyx1LGYsaCxkLHAsbSx2LGcseSxiLHgsXyx3KXt2YXIgTSxULGssQT10LmdsLEU9dC50cmFuc2Zvcm0sUz0ibWFwIj09PW0sTD0ibWFwIj09PXYsQz1zPzI0OjEsST1nL0M7aWYoTD8oVD1sKG4sMSx0LnRyYW5zZm9ybS56b29tKSpJLGs9MS9NYXRoLmNvcyhFLl9waXRjaCksTT1bVCxUXSk6KFQ9dC50cmFuc2Zvcm0uYWx0aXR1ZGUqSSxrPTEsTT1bRS5waXhlbHNUb0dMVW5pdHNbMF0qVCxFLnBpeGVsc1RvR0xVbml0c1sxXSpUXSksc3x8dC5zdHlsZS5zcHJpdGUubG9hZGVkKCkpe3ZhciBEPXQudXNlUHJvZ3JhbShjPyJzZGYiOiJpY29uIik7aWYoQS51bmlmb3JtTWF0cml4NGZ2KEQudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgocixuLGQscCkpLEEudW5pZm9ybTFpKEQudV9yb3RhdGVfd2l0aF9tYXAsUyksQS51bmlmb3JtMWkoRC51X3BpdGNoX3dpdGhfbWFwLEwpLEEudW5pZm9ybTJmdihELnVfZXh0cnVkZV9zY2FsZSxNKSxBLmFjdGl2ZVRleHR1cmUoQS5URVhUVVJFMCksQS51bmlmb3JtMWkoRC51X3RleHR1cmUsMCkscyl7dmFyIFA9aCYmdC5nbHlwaFNvdXJjZS5nZXRHbHlwaEF0bGFzKGgpO2lmKCFQKXJldHVybjtQLnVwZGF0ZVRleHR1cmUoQSksQS51bmlmb3JtMmYoRC51X3RleHNpemUsUC53aWR0aC80LFAuaGVpZ2h0LzQpfWVsc2V7dmFyIHo9dC5vcHRpb25zLnJvdGF0aW5nfHx0Lm9wdGlvbnMuem9vbWluZyxPPTEhPT1JfHxvLmRldmljZVBpeGVsUmF0aW8hPT10LnNwcml0ZUF0bGFzLnBpeGVsUmF0aW98fHUsUj1MfHx0LnRyYW5zZm9ybS5waXRjaDt0LnNwcml0ZUF0bGFzLmJpbmQoQSxjfHx6fHxPfHxSKSxBLnVuaWZvcm0yZihELnVfdGV4c2l6ZSx0LnNwcml0ZUF0bGFzLndpZHRoLzQsdC5zcHJpdGVBdGxhcy5oZWlnaHQvNCl9dmFyIEY9TWF0aC5sb2coZy9mKS9NYXRoLkxOMnx8MDtBLnVuaWZvcm0xZihELnVfem9vbSwxMCoodC50cmFuc2Zvcm0uem9vbS1GKSksQS5hY3RpdmVUZXh0dXJlKEEuVEVYVFVSRTEpLHQuZnJhbWVIaXN0b3J5LmJpbmQoQSksQS51bmlmb3JtMWkoRC51X2ZhZGV0ZXh0dXJlLDEpO3ZhciBqO2lmKGMpe3ZhciBOPS4xMDUqQy9nL28uZGV2aWNlUGl4ZWxSYXRpbztpZih5KXtBLnVuaWZvcm0xZihELnVfZ2FtbWEsKDEuMTkqeC9JLzgrTikqayksQS51bmlmb3JtNGZ2KEQudV9jb2xvcixiKSxBLnVuaWZvcm0xZihELnVfb3BhY2l0eSxfKSxBLnVuaWZvcm0xZihELnVfYnVmZmVyLCg2LXkvSSkvOCk7Zm9yKHZhciBCPTA7QjxhLmxlbmd0aDtCKyspaj1hW0JdLGoudmFvc1tlLmlkXS5iaW5kKEEsRCxqLmxheW91dFZlcnRleEJ1ZmZlcixqLmVsZW1lbnRCdWZmZXIpLEEuZHJhd0VsZW1lbnRzKEEuVFJJQU5HTEVTLDMqai5lbGVtZW50QnVmZmVyLmxlbmd0aCxBLlVOU0lHTkVEX1NIT1JULDApfUEudW5pZm9ybTFmKEQudV9nYW1tYSxOKmspLEEudW5pZm9ybTRmdihELnVfY29sb3IsdyksQS51bmlmb3JtMWYoRC51X29wYWNpdHksXyksQS51bmlmb3JtMWYoRC51X2J1ZmZlciwuNzUpLEEudW5pZm9ybTFmKEQudV9waXRjaCxFLnBpdGNoLzM2MCoyKk1hdGguUEkpLEEudW5pZm9ybTFmKEQudV9iZWFyaW5nLEUuYmVhcmluZy8zNjAqMipNYXRoLlBJKSxBLnVuaWZvcm0xZihELnVfYXNwZWN0X3JhdGlvLEUud2lkdGgvRS5oZWlnaHQpO2Zvcih2YXIgVT0wO1U8YS5sZW5ndGg7VSsrKWo9YVtVXSxqLnZhb3NbZS5pZF0uYmluZChBLEQsai5sYXlvdXRWZXJ0ZXhCdWZmZXIsai5lbGVtZW50QnVmZmVyKSxBLmRyYXdFbGVtZW50cyhBLlRSSUFOR0xFUywzKmouZWxlbWVudEJ1ZmZlci5sZW5ndGgsQS5VTlNJR05FRF9TSE9SVCwwKX1lbHNle0EudW5pZm9ybTFmKEQudV9vcGFjaXR5LF8pO2Zvcih2YXIgVj0wO1Y8YS5sZW5ndGg7VisrKWo9YVtWXSxqLnZhb3NbZS5pZF0uYmluZChBLEQsai5sYXlvdXRWZXJ0ZXhCdWZmZXIsai5lbGVtZW50QnVmZmVyKSxBLmRyYXdFbGVtZW50cyhBLlRSSUFOR0xFUywzKmouZWxlbWVudEJ1ZmZlci5sZW5ndGgsQS5VTlNJR05FRF9TSE9SVCwwKX19fXZhciBvPXQoIi4uL3V0aWwvYnJvd3NlciIpLHM9dCgiLi9kcmF3X2NvbGxpc2lvbl9kZWJ1ZyIpLGw9dCgiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIik7ZS5leHBvcnRzPW59LHsiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIjozNzEsIi4uL3V0aWwvYnJvd3NlciI6NDM0LCIuL2RyYXdfY29sbGlzaW9uX2RlYnVnIjozNTV9XSwzNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuY2hhbmdlVGltZXM9bmV3IEZsb2F0NjRBcnJheSgyNTYpLHRoaXMuY2hhbmdlT3BhY2l0aWVzPW5ldyBVaW50OEFycmF5KDI1NiksdGhpcy5vcGFjaXRpZXM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDI1NiksdGhpcy5hcnJheT1uZXcgVWludDhBcnJheSh0aGlzLm9wYWNpdGllcy5idWZmZXIpLHRoaXMuZmFkZUR1cmF0aW9uPTMwMCx0aGlzLnByZXZpb3VzWm9vbT0wLHRoaXMuZmlyc3RGcmFtZT0hMH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5yZWNvcmQ9ZnVuY3Rpb24odCl7dmFyIGU9RGF0ZS5ub3coKTt0aGlzLmZpcnN0RnJhbWUmJihlPTAsdGhpcy5maXJzdEZyYW1lPSExKSx0PU1hdGguZmxvb3IoMTAqdCk7dmFyIHI7aWYodDx0aGlzLnByZXZpb3VzWm9vbSlmb3Iocj10KzE7cjw9dGhpcy5wcmV2aW91c1pvb207cisrKXRoaXMuY2hhbmdlVGltZXNbcl09ZSx0aGlzLmNoYW5nZU9wYWNpdGllc1tyXT10aGlzLm9wYWNpdGllc1tyXTtlbHNlIGZvcihyPXQ7cj50aGlzLnByZXZpb3VzWm9vbTtyLS0pdGhpcy5jaGFuZ2VUaW1lc1tyXT1lLHRoaXMuY2hhbmdlT3BhY2l0aWVzW3JdPXRoaXMub3BhY2l0aWVzW3JdO2ZvcihyPTA7cjwyNTY7cisrKXt2YXIgbj1lLXRoaXMuY2hhbmdlVGltZXNbcl0saT1uL3RoaXMuZmFkZUR1cmF0aW9uKjI1NTt0aGlzLm9wYWNpdGllc1tyXT1yPD10P3RoaXMuY2hhbmdlT3BhY2l0aWVzW3JdK2k6dGhpcy5jaGFuZ2VPcGFjaXRpZXNbcl0taX10aGlzLmNoYW5nZWQ9ITAsdGhpcy5wcmV2aW91c1pvb209dH0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt0aGlzLnRleHR1cmU/KHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdGhpcy5jaGFuZ2VkJiYodC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCwyNTYsMSx0LkFMUEhBLHQuVU5TSUdORURfQllURSx0aGlzLmFycmF5KSx0aGlzLmNoYW5nZWQ9ITEpKToodGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5ORUFSRVNUKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5BTFBIQSwyNTYsMSwwLHQuQUxQSEEsdC5VTlNJR05FRF9CWVRFLHRoaXMuYXJyYXkpKX19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuYnl0ZXM9NCx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCp0aGlzLmJ5dGVzKSx0aGlzLnBvc2l0aW9ucz17fX12YXIgaT10KCIuLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5zZXRTcHJpdGU9ZnVuY3Rpb24odCl7dGhpcy5zcHJpdGU9dH0sbi5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK2U7cmV0dXJuIHRoaXMucG9zaXRpb25zW3JdfHwodGhpcy5wb3NpdGlvbnNbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMucG9zaXRpb25zW3JdfSxuLnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT83OjAsbj0yKnIrMTtpZih0aGlzLm5leHRSb3crbj50aGlzLmhlaWdodClyZXR1cm4gaS53YXJuT25jZSgiTGluZUF0bGFzIG91dCBvZiBzcGFjZSIpLG51bGw7Zm9yKHZhciBhPTAsbz0wO288dC5sZW5ndGg7bysrKWErPXRbb107Zm9yKHZhciBzPXRoaXMud2lkdGgvYSxsPXMvMixjPXQubGVuZ3RoJTI9PTEsdT0tcjt1PD1yO3UrKylmb3IodmFyIGY9dGhpcy5uZXh0Um93K3IrdSxoPXRoaXMud2lkdGgqZixkPWM/LXRbdC5sZW5ndGgtMV06MCxwPXRbMF0sbT0xLHY9MDt2PHRoaXMud2lkdGg7disrKXtmb3IoO3A8di9zOylkPXAscCs9dFttXSxjJiZtPT09dC5sZW5ndGgtMSYmKHArPXRbMF0pLG0rKzt2YXIgZyx5PU1hdGguYWJzKHYtZCpzKSxiPU1hdGguYWJzKHYtcCpzKSx4PU1hdGgubWluKHksYiksXz1tJTI9PTE7aWYoZSl7dmFyIHc9cj91L3IqKGwrMSk6MDtpZihfKXt2YXIgTT1sLU1hdGguYWJzKHcpO2c9TWF0aC5zcXJ0KHgqeCtNKk0pfWVsc2UgZz1sLU1hdGguc3FydCh4Kngrdyp3KX1lbHNlIGc9KF8/MTotMSkqeDt0aGlzLmRhdGFbMys0KihoK3YpXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxnKzEyOCkpfXZhciBUPXt5Oih0aGlzLm5leHRSb3crcisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqci90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1uLHRoaXMuZGlydHk9ITAsVH0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt0aGlzLnRleHR1cmU/KHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsdC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSkpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5SRVBFQVQpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LlJFUEVBVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0LkxJTkVBUiksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0LkxJTkVBUiksdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHQuUkdCQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKX19LHsiLi4vdXRpbC91dGlsIjo0NTB9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZ2w9dCx0aGlzLnRyYW5zZm9ybT1lLHRoaXMucmV1c2FibGVUZXh0dXJlcz17fSx0aGlzLnByZUZib3M9e30sdGhpcy5mcmFtZUhpc3Rvcnk9bmV3IG8sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPXMubWF4VW5kZXJ6b29taW5nK3MubWF4T3Zlcnpvb21pbmcrMSx0aGlzLmRlcHRoRXBzaWxvbj0xL01hdGgucG93KDIsMTYpLHRoaXMubGluZVdpZHRoUmFuZ2U9dC5nZXRQYXJhbWV0ZXIodC5BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpfXZhciBpPXQoIi4uL3V0aWwvYnJvd3NlciIpLGE9dCgiZ2wtbWF0cml4IikubWF0NCxvPXQoIi4vZnJhbWVfaGlzdG9yeSIpLHM9dCgiLi4vc291cmNlL3NvdXJjZV9jYWNoZSIpLGw9dCgiLi4vZGF0YS9idWNrZXQiKS5FWFRFTlQsYz10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKSx1PXQoIi4uL3V0aWwvdXRpbCIpLGY9dCgiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiKSxoPXQoIi4uL2RhdGEvYnVmZmVyIiksZD10KCIuL3ZlcnRleF9hcnJheV9vYmplY3QiKSxwPXQoIi4vZHJhd19yYXN0ZXIiKS5SYXN0ZXJCb3VuZHNBcnJheSxtPXQoIi4vY3JlYXRlX3VuaWZvcm1fcHJhZ21hcyIpO2UuZXhwb3J0cz1uLHUuZXh0ZW5kKG4ucHJvdG90eXBlLHQoIi4vcGFpbnRlci91c2VfcHJvZ3JhbSIpKSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsO3RoaXMud2lkdGg9dCppLmRldmljZVBpeGVsUmF0aW8sdGhpcy5oZWlnaHQ9ZSppLmRldmljZVBpeGVsUmF0aW8sci52aWV3cG9ydCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LG4ucHJvdG90eXBlLnNldHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0LnZlcmJvc2U9ITAsdC5lbmFibGUodC5CTEVORCksdC5ibGVuZEZ1bmModC5PTkUsdC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx0LmVuYWJsZSh0LlNURU5DSUxfVEVTVCksdC5lbmFibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFUVVBTCksdGhpcy5fZGVwdGhNYXNrPSExLHQuZGVwdGhNYXNrKCExKTt2YXIgZT10aGlzLlBvc0FycmF5PW5ldyBmKHttZW1iZXJzOlt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XX0pLHI9bmV3IGU7ci5lbXBsYWNlQmFjaygwLDApLHIuZW1wbGFjZUJhY2sobCwwKSxyLmVtcGxhY2VCYWNrKDAsbCksci5lbXBsYWNlQmFjayhsLGwpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1uZXcgaChyLnNlcmlhbGl6ZSgpLGUuc2VyaWFsaXplKCksaC5CdWZmZXJUeXBlLlZFUlRFWCksdGhpcy50aWxlRXh0ZW50VkFPPW5ldyBkLHRoaXMudGlsZUV4dGVudFBhdHRlcm5WQU89bmV3IGQ7dmFyIG49bmV3IGU7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sobCwwKSxuLmVtcGxhY2VCYWNrKGwsbCksbi5lbXBsYWNlQmFjaygwLGwpLG4uZW1wbGFjZUJhY2soMCwwKSx0aGlzLmRlYnVnQnVmZmVyPW5ldyBoKG4uc2VyaWFsaXplKCksZS5zZXJpYWxpemUoKSxoLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLmRlYnVnVkFPPW5ldyBkO3ZhciBpPW5ldyBwO2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayhsLDAsMzI3NjcsMCksaS5lbXBsYWNlQmFjaygwLGwsMCwzMjc2NyksaS5lbXBsYWNlQmFjayhsLGwsMzI3NjcsMzI3NjcpLHRoaXMucmFzdGVyQm91bmRzQnVmZmVyPW5ldyBoKGkuc2VyaWFsaXplKCkscC5zZXJpYWxpemUoKSxoLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnJhc3RlckJvdW5kc1ZBTz1uZXcgZH0sbi5wcm90b3R5cGUuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dC5jbGVhckNvbG9yKDAsMCwwLDApLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUKX0sbi5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0LmNsZWFyU3RlbmNpbCgwKSx0LnN0ZW5jaWxNYXNrKDI1NSksdC5jbGVhcih0LlNURU5DSUxfQlVGRkVSX0JJVCl9LG4ucHJvdG90eXBlLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QuY2xlYXJEZXB0aCgxKSx0aGlzLmRlcHRoTWFzayghMCksdC5jbGVhcih0LkRFUFRIX0JVRkZFUl9CSVQpfSxuLnByb3RvdHlwZS5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtlLmNvbG9yTWFzayghMSwhMSwhMSwhMSksdGhpcy5kZXB0aE1hc2soITEpLGUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLGUuZW5hYmxlKGUuU1RFTkNJTF9URVNUKSxlLnN0ZW5jaWxNYXNrKDI0OCksZS5zdGVuY2lsT3AoZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpO3ZhciByPTE7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPXRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbaS5pZF09cisrPDwzO2Uuc3RlbmNpbEZ1bmMoZS5BTFdBWVMsYSwyNDgpO3ZhciBvPW0oW3tuYW1lOiJ1X2NvbG9yIixjb21wb25lbnRzOjR9LHtuYW1lOiJ1X29wYWNpdHkiLGNvbXBvbmVudHM6MX1dKSxzPXRoaXMudXNlUHJvZ3JhbSgiZmlsbCIsW10sbyxvKTtlLnVuaWZvcm1NYXRyaXg0ZnYocy51X21hdHJpeCwhMSxpLnBvc01hdHJpeCksdGhpcy50aWxlRXh0ZW50VkFPLmJpbmQoZSxzLHRoaXMudGlsZUV4dGVudEJ1ZmZlciksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVfU1RSSVAsMCx0aGlzLnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX1lLnN0ZW5jaWxNYXNrKDApLGUuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx0aGlzLmRlcHRoTWFzayghMCksZS5lbmFibGUoZS5ERVBUSF9URVNUKX0sbi5wcm90b3R5cGUuZW5hYmxlVGlsZUNsaXBwaW5nTWFzaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO2Uuc3RlbmNpbEZ1bmMoZS5FUVVBTCx0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3QuaWRdLDI0OCl9LG4ucHJvdG90eXBlLnByZXBhcmVCdWZmZXJzPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5iaW5kRGVmYXVsdEZyYW1lYnVmZmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpfTt2YXIgdj17c3ltYm9sOnQoIi4vZHJhd19zeW1ib2wiKSxjaXJjbGU6dCgiLi9kcmF3X2NpcmNsZSIpLGxpbmU6dCgiLi9kcmF3X2xpbmUiKSxmaWxsOnQoIi4vZHJhd19maWxsIikscmFzdGVyOnQoIi4vZHJhd19yYXN0ZXIiKSxiYWNrZ3JvdW5kOnQoIi4vZHJhd19iYWNrZ3JvdW5kIiksZGVidWc6dCgiLi9kcmF3X2RlYnVnIil9O24ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbih0LGUpe3RoaXMuc3R5bGU9dCx0aGlzLm9wdGlvbnM9ZSx0aGlzLmxpbmVBdGxhcz10LmxpbmVBdGxhcyx0aGlzLnNwcml0ZUF0bGFzPXQuc3ByaXRlQXRsYXMsdGhpcy5zcHJpdGVBdGxhcy5zZXRTcHJpdGUodC5zcHJpdGUpLHRoaXMuZ2x5cGhTb3VyY2U9dC5nbHlwaFNvdXJjZSx0aGlzLmZyYW1lSGlzdG9yeS5yZWNvcmQodGhpcy50cmFuc2Zvcm0uem9vbSksdGhpcy5wcmVwYXJlQnVmZmVycygpLHRoaXMuY2xlYXJDb2xvcigpLHRoaXMuY2xlYXJEZXB0aCgpLHRoaXMuc2hvd092ZXJkcmF3SW5zcGVjdG9yKGUuc2hvd092ZXJkcmF3SW5zcGVjdG9yKSwKdGhpcy5kZXB0aFJhbmdlPSh0Ll9vcmRlci5sZW5ndGgrMikqdGhpcy5udW1TdWJsYXllcnMqdGhpcy5kZXB0aEVwc2lsb24sdGhpcy5yZW5kZXJQYXNzKHtpc09wYXF1ZVBhc3M6ITB9KSx0aGlzLnJlbmRlclBhc3Moe2lzT3BhcXVlUGFzczohMX0pfSxuLnByb3RvdHlwZS5yZW5kZXJQYXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3R5bGUuX2dyb3VwcyxyPXQuaXNPcGFxdWVQYXNzO3RoaXMuY3VycmVudExheWVyPXI/dGhpcy5zdHlsZS5fb3JkZXIubGVuZ3RoOi0xO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaSxhPWVbcj9lLmxlbmd0aC0xLW46bl0sbz10aGlzLnN0eWxlLnNvdXJjZXNbYS5zb3VyY2VdLHM9W107aWYobyl7Zm9yKHM9by5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxpPTA7aTxzLmxlbmd0aDtpKyspc1tpXS5wb3NNYXRyaXg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHNbaV0sby5tYXh6b29tKTt0aGlzLmNsZWFyU3RlbmNpbCgpLG8ucHJlcGFyZSYmby5wcmVwYXJlKCksby5pc1RpbGVDbGlwcGVkJiZ0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhzKX1mb3Iocj8odGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfHx0aGlzLmdsLmRpc2FibGUodGhpcy5nbC5CTEVORCksdGhpcy5pc09wYXF1ZVBhc3M9ITApOih0aGlzLmdsLmVuYWJsZSh0aGlzLmdsLkJMRU5EKSx0aGlzLmlzT3BhcXVlUGFzcz0hMSxzLnJldmVyc2UoKSksaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbD1hW3I/YS5sZW5ndGgtMS1pOmldO3RoaXMuY3VycmVudExheWVyKz1yPy0xOjEsdGhpcy5yZW5kZXJMYXllcih0aGlzLG8sbCxzKX1vJiZ2LmRlYnVnKHRoaXMsbyxzKX19LG4ucHJvdG90eXBlLmRlcHRoTWFzaz1mdW5jdGlvbih0KXt0IT09dGhpcy5fZGVwdGhNYXNrJiYodGhpcy5fZGVwdGhNYXNrPXQsdGhpcy5nbC5kZXB0aE1hc2sodCkpfSxuLnByb3RvdHlwZS5yZW5kZXJMYXllcj1mdW5jdGlvbih0LGUscixuKXtyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pfHwoImJhY2tncm91bmQiPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsdltyLnR5cGVdKHQsZSxyLG4pKX0sbi5wcm90b3R5cGUuc2V0RGVwdGhTdWJsYXllcj1mdW5jdGlvbih0KXt2YXIgZT0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb24scj1lLTErdGhpcy5kZXB0aFJhbmdlO3RoaXMuZ2wuZGVwdGhSYW5nZShyLGUpfSxuLnByb3RvdHlwZS50cmFuc2xhdGVQb3NNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7aWYoIXJbMF0mJiFyWzFdKXJldHVybiB0O2lmKCJ2aWV3cG9ydCI9PT1uKXt2YXIgaT1NYXRoLnNpbigtdGhpcy50cmFuc2Zvcm0uYW5nbGUpLG89TWF0aC5jb3MoLXRoaXMudHJhbnNmb3JtLmFuZ2xlKTtyPVtyWzBdKm8tclsxXSppLHJbMF0qaStyWzFdKm9dfXZhciBzPVtjKGUsclswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxjKGUsclsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSxsPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBhLnRyYW5zbGF0ZShsLHQscyksbH0sbi5wcm90b3R5cGUuc2F2ZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yZXVzYWJsZVRleHR1cmVzW3Quc2l6ZV07ZT9lLnB1c2godCk6dGhpcy5yZXVzYWJsZVRleHR1cmVzW3Quc2l6ZV09W3RdfSxuLnByb3RvdHlwZS5nZXRUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmV1c2FibGVUZXh0dXJlc1t0XTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lLnBvcCgpOm51bGx9LG4ucHJvdG90eXBlLmxpbmVXaWR0aD1mdW5jdGlvbih0KXt0aGlzLmdsLmxpbmVXaWR0aCh1LmNsYW1wKHQsdGhpcy5saW5lV2lkdGhSYW5nZVswXSx0aGlzLmxpbmVXaWR0aFJhbmdlWzFdKSl9LG4ucHJvdG90eXBlLnNob3dPdmVyZHJhd0luc3BlY3Rvcj1mdW5jdGlvbih0KXtpZih0fHx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Ipe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10O3ZhciBlPXRoaXMuZ2w7aWYodCl7ZS5ibGVuZEZ1bmMoZS5DT05TVEFOVF9DT0xPUixlLk9ORSk7ZS5ibGVuZENvbG9yKDEvOCwxLzgsMS84LDApLGUuY2xlYXJDb2xvcigwLDAsMCwxKSxlLmNsZWFyKGUuQ09MT1JfQlVGRkVSX0JJVCl9ZWxzZSBlLmJsZW5kRnVuYyhlLk9ORSxlLk9ORV9NSU5VU19TUkNfQUxQSEEpfX19LHsiLi4vZGF0YS9idWNrZXQiOjMzNywiLi4vZGF0YS9idWZmZXIiOjM0MiwiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIjozNzEsIi4uL3NvdXJjZS9zb3VyY2VfY2FjaGUiOjM3NSwiLi4vdXRpbC9icm93c2VyIjo0MzQsIi4uL3V0aWwvc3RydWN0X2FycmF5Ijo0NDgsIi4uL3V0aWwvdXRpbCI6NDUwLCIuL2NyZWF0ZV91bmlmb3JtX3ByYWdtYXMiOjM1MiwiLi9kcmF3X2JhY2tncm91bmQiOjM1MywiLi9kcmF3X2NpcmNsZSI6MzU0LCIuL2RyYXdfZGVidWciOjM1NiwiLi9kcmF3X2ZpbGwiOjM1NywiLi9kcmF3X2xpbmUiOjM1OCwiLi9kcmF3X3Jhc3RlciI6MzU5LCIuL2RyYXdfc3ltYm9sIjozNjAsIi4vZnJhbWVfaGlzdG9yeSI6MzYxLCIuL3BhaW50ZXIvdXNlX3Byb2dyYW0iOjM2NCwiLi92ZXJ0ZXhfYXJyYXlfb2JqZWN0IjozNjUsImdsLW1hdHJpeCI6MTk3fV0sMzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC8jcHJhZ21hIG1hcGJveDogKFtcd10rKSAoW1x3XSspIChbXHddKykgKFtcd10rKS9nLGZ1bmN0aW9uKHQscixuLGksYSl7cmV0dXJuIGVbcl1bYV0ucmVwbGFjZSgve3R5cGV9L2csaSkucmVwbGFjZSgve3ByZWNpc2lvbn0vZyxuKX0pfXZhciBpPXQoImFzc2VydCIpLGE9dCgiLi4vLi4vdXRpbC91dGlsIiksbz10KCJtYXBib3gtZ2wtc2hhZGVycyIpLHM9by51dGlsO2UuZXhwb3J0cy5fY3JlYXRlUHJvZ3JhbT1mdW5jdGlvbih0LGUscixsKXtmb3IodmFyIGM9dGhpcy5nbCx1PWMuY3JlYXRlUHJvZ3JhbSgpLGY9b1t0XSxoPSIjZGVmaW5lIE1BUEJPWF9HTF9KUztcbiIsZD0wO2Q8ZS5sZW5ndGg7ZCsrKWgrPSIjZGVmaW5lICIrZVtkXSsiO1xuIjt2YXIgcD1jLmNyZWF0ZVNoYWRlcihjLkZSQUdNRU5UX1NIQURFUik7Yy5zaGFkZXJTb3VyY2UocCxuKGgrZi5mcmFnbWVudFNvdXJjZSxsKSksYy5jb21waWxlU2hhZGVyKHApLGkoYy5nZXRTaGFkZXJQYXJhbWV0ZXIocCxjLkNPTVBJTEVfU1RBVFVTKSxjLmdldFNoYWRlckluZm9Mb2cocCkpLGMuYXR0YWNoU2hhZGVyKHUscCk7dmFyIG09Yy5jcmVhdGVTaGFkZXIoYy5WRVJURVhfU0hBREVSKTtjLnNoYWRlclNvdXJjZShtLG4oaCtzK2YudmVydGV4U291cmNlLHIpKSxjLmNvbXBpbGVTaGFkZXIobSksaShjLmdldFNoYWRlclBhcmFtZXRlcihtLGMuQ09NUElMRV9TVEFUVVMpLGMuZ2V0U2hhZGVySW5mb0xvZyhtKSksYy5hdHRhY2hTaGFkZXIodSxtKSxjLmxpbmtQcm9ncmFtKHUpLGkoYy5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsYy5MSU5LX1NUQVRVUyksYy5nZXRQcm9ncmFtSW5mb0xvZyh1KSk7Zm9yKHZhciB2PXt9LGc9Yy5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsYy5BQ1RJVkVfQVRUUklCVVRFUykseT0wO3k8Zzt5Kyspe3ZhciBiPWMuZ2V0QWN0aXZlQXR0cmliKHUseSk7dltiLm5hbWVdPWMuZ2V0QXR0cmliTG9jYXRpb24odSxiLm5hbWUpfWZvcih2YXIgeD17fSxfPWMuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LGMuQUNUSVZFX1VOSUZPUk1TKSx3PTA7dzxfO3crKyl7dmFyIE09Yy5nZXRBY3RpdmVVbmlmb3JtKHUsdyk7eFtNLm5hbWVdPWMuZ2V0VW5pZm9ybUxvY2F0aW9uKHUsTS5uYW1lKX1yZXR1cm4gYS5leHRlbmQoe3Byb2dyYW06dSxkZWZpbml0aW9uOmYsYXR0cmlidXRlczp2LG51bUF0dHJpYnV0ZXM6Z30sdix4KX0sZS5leHBvcnRzLl9jcmVhdGVQcm9ncmFtQ2FjaGVkPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIGk9SlNPTi5zdHJpbmdpZnkoe25hbWU6dCxkZWZpbmVzOmUsdmVydGV4UHJhZ21hczpyLGZyYWdtZW50UHJhZ21hczpufSk7cmV0dXJuIHRoaXMuY2FjaGVbaV18fCh0aGlzLmNhY2hlW2ldPXRoaXMuX2NyZWF0ZVByb2dyYW0odCxlLHIsbikpLHRoaXMuY2FjaGVbaV19LGUuZXhwb3J0cy51c2VQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZ2w7ZT1lfHxbXSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3ImJihlPWUuY29uY2F0KCJPVkVSRFJBV19JTlNQRUNUT1IiKSk7dmFyIGE9dGhpcy5fY3JlYXRlUHJvZ3JhbUNhY2hlZCh0LGUscixuKTtyZXR1cm4gdGhpcy5jdXJyZW50UHJvZ3JhbSE9PWEmJihpLnVzZVByb2dyYW0oYS5wcm9ncmFtKSx0aGlzLmN1cnJlbnRQcm9ncmFtPWEpLGF9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDUwLGFzc2VydDo0NywibWFwYm94LWdsLXNoYWRlcnMiOjMxMX1dLDM2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kVmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcjI9bnVsbCx0aGlzLmJvdW5kRWxlbWVudEJ1ZmZlcj1udWxsLHRoaXMudmFvPW51bGx9dmFyIGk9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PXQuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0LmV4dFZlcnRleEFycmF5T2JqZWN0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpKTt2YXIgYT0hdGhpcy52YW98fHRoaXMuYm91bmRQcm9ncmFtIT09ZXx8dGhpcy5ib3VuZFZlcnRleEJ1ZmZlciE9PXJ8fHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIyIT09aXx8dGhpcy5ib3VuZEVsZW1lbnRCdWZmZXIhPT1uOyF0LmV4dFZlcnRleEFycmF5T2JqZWN0fHxhP3RoaXMuZnJlc2hCaW5kKHQsZSxyLG4saSk6dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pfSxuLnByb3RvdHlwZS5mcmVzaEJpbmQ9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzPWUubnVtQXR0cmlidXRlcztpZih0LmV4dFZlcnRleEFycmF5T2JqZWN0KXRoaXMudmFvJiZ0aGlzLmRlc3Ryb3kodCksdGhpcy52YW89dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLHQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHRoaXMudmFvKSxvPTAsdGhpcy5ib3VuZFByb2dyYW09ZSx0aGlzLmJvdW5kVmVydGV4QnVmZmVyPXIsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcjI9YSx0aGlzLmJvdW5kRWxlbWVudEJ1ZmZlcj1uO2Vsc2V7bz10LmN1cnJlbnROdW1BdHRyaWJ1dGVzfHwwO2Zvcih2YXIgbD1zO2w8bztsKyspaSgwIT09bCksdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobCl9Zm9yKHZhciBjPW87YzxzO2MrKyl0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpO3IuYmluZCh0KSxyLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHQsZSksYSYmKGEuYmluZCh0KSxhLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHQsZSkpLG4mJm4uYmluZCh0KSx0LmN1cnJlbnROdW1BdHRyaWJ1dGVzPXN9LG4ucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmV4dFZlcnRleEFycmF5T2JqZWN0O2UmJmUuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZXh0VmVydGV4QXJyYXlPYmplY3Q7ZSYmdGhpcy52YW8mJihlLmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX19LHthc3NlcnQ6NDd9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZT1lfHx7fSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXIsdGhpcy5fZGF0YT1lLmRhdGEsdm9pZCAwIT09ZS5tYXh6b29tJiYodGhpcy5tYXh6b29tPWUubWF4em9vbSksZS50eXBlJiYodGhpcy50eXBlPWUudHlwZSk7dmFyIG49cy90aGlzLnRpbGVTaXplO3RoaXMud29ya2VyT3B0aW9ucz1hLmV4dGVuZCh7c291cmNlOnRoaXMuaWQsY2x1c3RlcjplLmNsdXN0ZXJ8fCExLGdlb2pzb25WdE9wdGlvbnM6e2J1ZmZlcjoodm9pZCAwIT09ZS5idWZmZXI/ZS5idWZmZXI6MTI4KSpuLHRvbGVyYW5jZToodm9pZCAwIT09ZS50b2xlcmFuY2U/ZS50b2xlcmFuY2U6LjM3NSkqbixleHRlbnQ6cyxtYXhab29tOnRoaXMubWF4em9vbX0sc3VwZXJjbHVzdGVyT3B0aW9uczp7bWF4Wm9vbTpNYXRoLm1pbihlLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKXx8dGhpcy5tYXh6b29tLTEsZXh0ZW50OnMscmFkaXVzOihlLmNsdXN0ZXJSYWRpdXN8fDUwKSpuLGxvZzohMX19LGUud29ya2VyT3B0aW9ucyksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbih0KXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7dGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvZXZlbnRlZCIpLGE9dCgiLi4vdXRpbC91dGlsIiksbz10KCJyZXNvbHZlLXVybCIpLHM9dCgiLi4vZGF0YS9idWNrZXQiKS5FWFRFTlQ7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse3R5cGU6Imdlb2pzb24iLG1pbnpvb206MCxtYXh6b29tOjE4LHRpbGVTaXplOjUxMixpc1RpbGVDbGlwcGVkOiEwLHJlcGFyc2VPdmVyc2NhbGVkOiEwLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXR9LHNldERhdGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RhdGE9dCx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7dGhpcy5maXJlKCJjaGFuZ2UiKX0uYmluZCh0aGlzKSksdGhpc30sX3VwZGF0ZVdvcmtlckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9YS5leHRlbmQoe30sdGhpcy53b3JrZXJPcHRpb25zKSxyPXRoaXMuX2RhdGE7InN0cmluZyI9PXR5cGVvZiByP2UudXJsPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P28od2luZG93LmxvY2F0aW9uLmhyZWYscik6cjplLmRhdGE9SlNPTi5zdHJpbmdpZnkociksdGhpcy53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCh0aGlzLnR5cGUrIi5sb2FkRGF0YSIsZSxmdW5jdGlvbihlKXt0aGlzLl9sb2FkZWQ9ITAsdChlKX0uYmluZCh0aGlzKSl9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jb29yZC56PnRoaXMubWF4em9vbT9NYXRoLnBvdygyLHQuY29vcmQuei10aGlzLm1heHpvb20pOjEsbj17dHlwZTp0aGlzLnR5cGUsdWlkOnQudWlkLGNvb3JkOnQuY29vcmQsem9vbTp0LmNvb3JkLnosbWF4Wm9vbTp0aGlzLm1heHpvb20sdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxzb3VyY2U6dGhpcy5pZCxvdmVyc2NhbGluZzpyLGFuZ2xlOnRoaXMubWFwLnRyYW5zZm9ybS5hbmdsZSxwaXRjaDp0aGlzLm1hcC50cmFuc2Zvcm0ucGl0Y2gsc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCgibG9hZCB0aWxlIixuLGZ1bmN0aW9uKHIsbil7aWYodC51bmxvYWRWZWN0b3JEYXRhKHRoaXMubWFwLnBhaW50ZXIpLCF0LmFib3J0ZWQpcmV0dXJuIHI/ZShyKToodC5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnN0eWxlKSx0LnJlZG9XaGVuRG9uZSYmKHQucmVkb1doZW5Eb25lPSExLHQucmVkb1BsYWNlbWVudCh0aGlzKSksZShudWxsKSl9LmJpbmQodGhpcyksdGhpcy53b3JrZXJJRCl9LGFib3J0VGlsZTpmdW5jdGlvbih0KXt0LmFib3J0ZWQ9ITB9LHVubG9hZFRpbGU6ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKHRoaXMubWFwLnBhaW50ZXIpLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmUgdGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0sZnVuY3Rpb24oKXt9LHQud29ya2VySUQpfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi91dGlsL2V2ZW50ZWQiOjQ0MiwiLi4vdXRpbC91dGlsIjo0NTAsInJlc29sdmUtdXJsIjo1MTB9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ciYmKHRoaXMubG9hZEdlb0pTT049ciksZi5jYWxsKHRoaXMsdCxlKX12YXIgaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoIi4uL3V0aWwvYWpheCIpLG89dCgiZ2VvanNvbi1yZXdpbmQiKSxzPXQoIi4vZ2VvanNvbl93cmFwcGVyIiksbD10KCJ2dC1wYmYiKSxjPXQoInN1cGVyY2x1c3RlciIpLHU9dCgiZ2VvanNvbi12dCIpLGY9dCgiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGYse19nZW9KU09OSW5kZXhlczp7fSxsb2FkVmVjdG9yRGF0YTpmdW5jdGlvbih0LGUpe3ZhciByPXQuc291cmNlLG49dC5jb29yZDtpZighdGhpcy5fZ2VvSlNPTkluZGV4ZXNbcl0pcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgaT10aGlzLl9nZW9KU09OSW5kZXhlc1tyXS5nZXRUaWxlKE1hdGgubWluKG4ueix0Lm1heFpvb20pLG4ueCxuLnkpO2lmKCFpKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGE9bmV3IHMoaS5mZWF0dXJlcyk7YS5uYW1lPSJfZ2VvanNvblRpbGVMYXllciI7dmFyIG89bCh7bGF5ZXJzOntfZ2VvanNvblRpbGVMYXllcjphfX0pOzA9PT1vLmJ5dGVPZmZzZXQmJm8uYnl0ZUxlbmd0aD09PW8uYnVmZmVyLmJ5dGVMZW5ndGh8fChvPW5ldyBVaW50OEFycmF5KG8pKSxlKG51bGwse3RpbGU6YSxyYXdUaWxlRGF0YTpvLmJ1ZmZlcn0pfSxsb2FkRGF0YTpmdW5jdGlvbih0LGUpe3ZhciByPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI/ZShyKToib2JqZWN0IiE9dHlwZW9mIG4/ZShuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOihvKG4sITApLHZvaWQgdGhpcy5faW5kZXhEYXRhKG4sdCxmdW5jdGlvbihyLG4pe2lmKHIpcmV0dXJuIGUocik7dGhpcy5fZ2VvSlNPTkluZGV4ZXNbdC5zb3VyY2VdPW4sZShudWxsKX0uYmluZCh0aGlzKSkpfS5iaW5kKHRoaXMpO3RoaXMubG9hZEdlb0pTT04odCxyKX0sbG9hZEdlb0pTT046ZnVuY3Rpb24odCxlKXtpZih0LnVybClhLmdldEpTT04odC51cmwsZSk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIHQuZGF0YSlyZXR1cm4gZShuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO3RyeXtyZXR1cm4gZShudWxsLEpTT04ucGFyc2UodC5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIGUobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKX19fSxfaW5kZXhEYXRhOmZ1bmN0aW9uKHQsZSxyKXt0cnl7ZS5jbHVzdGVyP3IobnVsbCxjKGUuc3VwZXJjbHVzdGVyT3B0aW9ucykubG9hZCh0LmZlYXR1cmVzKSk6cihudWxsLHUodCxlLmdlb2pzb25WdE9wdGlvbnMpKX1jYXRjaCh0KXtyZXR1cm4gcih0KX19fSl9LHsiLi4vdXRpbC9hamF4Ijo0MzMsIi4uL3V0aWwvdXRpbCI6NDUwLCIuL2dlb2pzb25fd3JhcHBlciI6MzY4LCIuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UiOjM3OSwiZ2VvanNvbi1yZXdpbmQiOjEzOCwiZ2VvanNvbi12dCI6MTQyLHN1cGVyY2x1c3Rlcjo1MzgsInZ0LXBiZiI6NTYzfV0sMzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuZXh0ZW50PXN9ZnVuY3Rpb24gaSh0KXtpZih0aGlzLnR5cGU9dC50eXBlLDE9PT10LnR5cGUpe3RoaXMucmF3R2VvbWV0cnk9W107Zm9yKHZhciBlPTA7ZTx0Lmdlb21ldHJ5Lmxlbmd0aDtlKyspdGhpcy5yYXdHZW9tZXRyeS5wdXNoKFt0Lmdlb21ldHJ5W2VdXSl9ZWxzZSB0aGlzLnJhd0dlb21ldHJ5PXQuZ2VvbWV0cnk7dGhpcy5wcm9wZXJ0aWVzPXQudGFncyx0aGlzLmV4dGVudD1zfXZhciBhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCJ2ZWN0b3ItdGlsZSIpLlZlY3RvclRpbGVGZWF0dXJlLHM9dCgiLi4vZGF0YS9idWNrZXQiKS5FWFRFTlQ7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodGhpcy5mZWF0dXJlc1t0XSl9LGkucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7Zm9yKHZhciByPXRbZV0sbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKHJbaV1bMF0scltpXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChuKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0saS5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tKDEvMCksbj0xLzAsaT0tKDEvMCksYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGkucHJvdG90eXBlLnRvR2VvSlNPTj1vLnByb3RvdHlwZS50b0dlb0pTT059LHsiLi4vZGF0YS9idWNrZXQiOjMzNywicG9pbnQtZ2VvbWV0cnkiOjQ5MywidmVjdG9yLXRpbGUiOjU1N31dLDM2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXIsdGhpcy51cmw9ZS51cmwsdGhpcy5jb29yZGluYXRlcz1lLmNvb3JkaW5hdGVzLGMuZ2V0SW1hZ2UoZS51cmwsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuaW1hZ2U9cix0aGlzLmltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5tYXAuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUoImxvYWQiKSx0aGlzLm1hcCYmdGhpcy5zZXRDb29yZGluYXRlcyhlLmNvb3JkaW5hdGVzKX0uYmluZCh0aGlzKSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL3RpbGVfY29vcmQiKSxvPXQoIi4uL2dlby9sbmdfbGF0Iikscz10KCJwb2ludC1nZW9tZXRyeSIpLGw9dCgiLi4vdXRpbC9ldmVudGVkIiksYz10KCIuLi91dGlsL2FqYXgiKSx1PXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGY9dCgiLi4vcmVuZGVyL2RyYXdfcmFzdGVyIikuUmFzdGVyQm91bmRzQXJyYXksaD10KCIuLi9kYXRhL2J1ZmZlciIpLGQ9dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQobCx7bWluem9vbTowLG1heHpvb206MjIsdGlsZVNpemU6NTEyLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5pbWFnZSYmdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKX0sc2V0Q29vcmRpbmF0ZXM6ZnVuY3Rpb24odCl7dGhpcy5jb29yZGluYXRlcz10O3ZhciBlPXRoaXMubWFwLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShvLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLG49dGhpcy5jZW50ZXJDb29yZD1pLmdldENvb3JkaW5hdGVzQ2VudGVyKHIpO3JldHVybiBuLmNvbHVtbj1NYXRoLnJvdW5kKG4uY29sdW1uKSxuLnJvdz1NYXRoLnJvdW5kKG4ucm93KSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPW4uem9vbSx0aGlzLl9jb29yZD1uZXcgYShuLnpvb20sbi5jb2x1bW4sbi5yb3cpLHRoaXMuX3RpbGVDb29yZHM9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8obi56b29tKTtyZXR1cm4gbmV3IHMoTWF0aC5yb3VuZCgoZS5jb2x1bW4tbi5jb2x1bW4pKnUpLE1hdGgucm91bmQoKGUucm93LW4ucm93KSp1KSl9KSx0aGlzLmZpcmUoImNoYW5nZSIpLHRoaXN9LF9zZXRUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuX3ByZXBhcmVkPSExLHRoaXMudGlsZT10O3ZhciBlPW5ldyBmO2UuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1swXS54LHRoaXMuX3RpbGVDb29yZHNbMF0ueSwwLDApLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1sxXS54LHRoaXMuX3RpbGVDb29yZHNbMV0ueSwzMjc2NywwKSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbM10ueCx0aGlzLl90aWxlQ29vcmRzWzNdLnksMCwzMjc2NyksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzJdLngsdGhpcy5fdGlsZUNvb3Jkc1syXS55LDMyNzY3LDMyNzY3KSx0aGlzLnRpbGUuYnVja2V0cz17fSx0aGlzLnRpbGUuYm91bmRzQnVmZmVyPW5ldyBoKGUuc2VyaWFsaXplKCksZi5zZXJpYWxpemUoKSxoLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnRpbGUuYm91bmRzVkFPPW5ldyBkLHRoaXMudGlsZS5zdGF0ZT0ibG9hZGVkIn0scHJlcGFyZTpmdW5jdGlvbigpe2lmKHRoaXMuX2xvYWRlZCYmdGhpcy5pbWFnZSYmdGhpcy5pbWFnZS5jb21wbGV0ZSYmdGhpcy50aWxlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLGU9dC5nbDt0aGlzLl9wcmVwYXJlZD8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmltYWdlKSk6KHRoaXMudGlsZS50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGlsZS50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5pbWFnZSkpfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLl9jb29yZCYmdGhpcy5fY29vcmQudG9TdHJpbmcoKT09PXQuY29vcmQudG9TdHJpbmcoKT8odGhpcy5fc2V0VGlsZSh0KSxlKG51bGwpKToodC5zdGF0ZT0iZXJyb3JlZCIsZShudWxsKSl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsdXJsczp0aGlzLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi9kYXRhL2J1ZmZlciI6MzQyLCIuLi9nZW8vbG5nX2xhdCI6MzQ3LCIuLi9yZW5kZXIvZHJhd19yYXN0ZXIiOjM1OSwiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiOjM2NSwiLi4vdXRpbC9hamF4Ijo0MzMsIi4uL3V0aWwvZXZlbnRlZCI6NDQyLCIuLi91dGlsL3V0aWwiOjQ1MCwiLi90aWxlX2Nvb3JkIjozNzcsInBvaW50LWdlb21ldHJ5Ijo0OTN9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC91dGlsIiksaT10KCIuLi91dGlsL2FqYXgiKSxhPXQoIi4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVTb3VyY2VVUkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBpPW4ucGljayhyLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxlKG51bGwsaSl9O3QudXJsP2kuZ2V0SlNPTihvKHQudXJsKSxyKTphLmZyYW1lKHIuYmluZChudWxsLG51bGwsdCkpfX0seyIuLi91dGlsL2FqYXgiOjQzMywiLi4vdXRpbC9icm93c2VyIjo0MzQsIi4uL3V0aWwvbWFwYm94Ijo0NDcsIi4uL3V0aWwvdXRpbCI6NDUwfV0sMzcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2RhdGEvYnVja2V0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSoobi5FWFRFTlQvKHQudGlsZVNpemUqTWF0aC5wb3coMixyLXQuY29vcmQueikpKX19LHsiLi4vZGF0YS9idWNrZXQiOjMzN31dLDM3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5jb29yZCxuPWUuY29vcmQ7cmV0dXJuIHIuei1uLnp8fHIueS1uLnl8fHIudy1uLnd8fHIueC1uLnh9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9dFswXXx8e30scj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2Zvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldLG89ZVtpXTtpZih2b2lkIDA9PT1vKW89ZVtpXT1hO2Vsc2UgZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspby5wdXNoKGFbc10pfX1yZXR1cm4gZX12YXIgYT10KCIuL3RpbGVfY29vcmQiKTtyLnJlbmRlcmVkPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD10LnRpbGVzSW4ocik7bC5zb3J0KG4pO2Zvcih2YXIgYz1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBmPWxbdV07Zi50aWxlLmZlYXR1cmVJbmRleCYmYy5wdXNoKGYudGlsZS5mZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6Zi5xdWVyeUdlb21ldHJ5LHNjYWxlOmYuc2NhbGUsdGlsZVNpemU6Zi50aWxlLnRpbGVTaXplLGJlYXJpbmc6cyxwYXJhbXM6YX0sZSkpfXJldHVybiBpKGMpfSxyLnNvdXJjZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGk9e30sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9bmV3IGEoTWF0aC5taW4ocy5zb3VyY2VNYXhab29tLHMuY29vcmQueikscy5jb29yZC54LHMuY29vcmQueSwwKS5pZDtpW2xdfHwoaVtsXT0hMCxzLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59fSx7Ii4vdGlsZV9jb29yZCI6Mzc3fV0sMzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9cixpLmV4dGVuZCh0aGlzLGkucGljayhlLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpLHMoZSxmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIHRoaXMuZmlyZSgiZXJyb3IiLHQpO2kuZXh0ZW5kKHRoaXMsZSksdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9hamF4Iiksbz10KCIuLi91dGlsL2V2ZW50ZWQiKSxzPXQoIi4vbG9hZF90aWxlanNvbiIpLGw9dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVUaWxlVVJMO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChvLHttaW56b29tOjAsbWF4em9vbToyMixyb3VuZFpvb206ITAsc2NoZW1lOiJ4eXoiLHRpbGVTaXplOjUxMixfbG9hZGVkOiExLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXR9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyYXN0ZXIiLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsbil7aWYoZGVsZXRlIHQucmVxdWVzdCwhdC5hYm9ydGVkKXtpZihyKXJldHVybiBlKHIpO3ZhciBpPXRoaXMubWFwLnBhaW50ZXIuZ2w7dC50ZXh0dXJlPXRoaXMubWFwLnBhaW50ZXIuZ2V0VGV4dHVyZShuLndpZHRoKSx0LnRleHR1cmU/KGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhTdWJJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLDAsMCxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pKToodC50ZXh0dXJlPWkuY3JlYXRlVGV4dHVyZSgpLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUlOX0ZJTFRFUixpLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUFHX0ZJTFRFUixpLkxJTkVBUiksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9TLGkuQ0xBTVBfVE9fRURHRSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9ULGkuQ0xBTVBfVE9fRURHRSksaS5waXhlbFN0b3JlaShpLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwhMCksaS50ZXhJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLGkuUkdCQSxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pLHQudGV4dHVyZS5zaXplPW4ud2lkdGgpLGkuZ2VuZXJhdGVNaXBtYXAoaS5URVhUVVJFXzJEKSx0aGlzLm1hcC5hbmltYXRpb25Mb29wLnNldCh0aGlzLm1hcC5zdHlsZS5yYXN0ZXJGYWRlRHVyYXRpb24pLHQuc3RhdGU9ImxvYWRlZCIsZShudWxsKX19dmFyIG49bCh0LmNvb3JkLnVybCh0aGlzLnRpbGVzLG51bGwsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO3QucmVxdWVzdD1hLmdldEltYWdlKG4sci5iaW5kKHRoaXMpKX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGV4dHVyZSh0LnRleHR1cmUpfX0pfSx7Ii4uL3V0aWwvYWpheCI6NDMzLCIuLi91dGlsL2V2ZW50ZWQiOjQ0MiwiLi4vdXRpbC9tYXBib3giOjQ0NywiLi4vdXRpbC91dGlsIjo0NTAsIi4vbG9hZF90aWxlanNvbiI6MzcwfV0sMzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvdXRpbCIpLGk9e3ZlY3Rvcjp0KCIuLi9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlIikscmFzdGVyOnQoIi4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UiKSxnZW9qc29uOnQoIi4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSIpLHZpZGVvOnQoIi4uL3NvdXJjZS92aWRlb19zb3VyY2UiKSxpbWFnZTp0KCIuLi9zb3VyY2UvaW1hZ2Vfc291cmNlIil9O3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPW5ldyBpW2UudHlwZV0odCxlLHIpLGUuaWQhPT10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrdCsiIGluc3RlYWQgb2YgIitlLmlkKTtyZXR1cm4gbi5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGUpLGV9LHIuZ2V0VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XX0sci5zZXRUeXBlPWZ1bmN0aW9uKHQsZSl7aVt0XT1lfX0seyIuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UiOjM2NiwiLi4vc291cmNlL2ltYWdlX3NvdXJjZSI6MzY5LCIuLi9zb3VyY2UvcmFzdGVyX3RpbGVfc291cmNlIjozNzMsIi4uL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UiOjM3OCwiLi4vc291cmNlL3ZpZGVvX3NvdXJjZSI6MzgwLCIuLi91dGlsL3V0aWwiOjQ1MH1dLDM3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXI7dmFyIG49dGhpcy5fc291cmNlPW8uY3JlYXRlKHQsZSxyKS5vbigibG9hZCIsZnVuY3Rpb24oKXt0aGlzLm1hcCYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodGhpcy5tYXApLHRoaXMuX3NvdXJjZUxvYWRlZD0hMCx0aGlzLnRpbGVTaXplPW4udGlsZVNpemUsdGhpcy5taW56b29tPW4ubWluem9vbSx0aGlzLm1heHpvb209bi5tYXh6b29tLHRoaXMucm91bmRab29tPW4ucm91bmRab29tLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9bi5yZXBhcnNlT3ZlcnNjYWxlZCx0aGlzLmlzVGlsZUNsaXBwZWQ9bi5pc1RpbGVDbGlwcGVkLHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbix0aGlzLnZlY3RvckxheWVySWRzPW4udmVjdG9yTGF5ZXJJZHMsdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpLm9uKCJlcnJvciIsZnVuY3Rpb24odCl7dGhpcy5fc291cmNlRXJyb3JlZD0hMCx0aGlzLmZpcmUoImVycm9yIix0KX0uYmluZCh0aGlzKSkub24oImNoYW5nZSIsZnVuY3Rpb24oKXt0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSx0aGlzLm1hcCYmdGhpcy5tYXAuc3R5bGUucmFzdGVyRmFkZUR1cmF0aW9uKSx0aGlzLmZpcmUoImNoYW5nZSIpfS5iaW5kKHRoaXMpKTt0aGlzLl90aWxlcz17fSx0aGlzLl9jYWNoZT1uZXcgdSgwLHRoaXMudW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXIuem9vbVRvKE1hdGgubWluKHQueixlKSk7cmV0dXJue3g6KG4uY29sdW1uLSh0LngrdC53Kk1hdGgucG93KDIsdC56KSkpKmQseToobi5yb3ctdC55KSpkfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQlMzItZSUzMn12YXIgbz10KCIuL3NvdXJjZSIpLHM9dCgiLi90aWxlIiksbD10KCIuLi91dGlsL2V2ZW50ZWQiKSxjPXQoIi4vdGlsZV9jb29yZCIpLHU9dCgiLi4vdXRpbC9scnVfY2FjaGUiKSxmPXQoIi4uL2dlby9jb29yZGluYXRlIiksaD10KCIuLi91dGlsL3V0aWwiKSxkPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ubWF4T3Zlcnpvb21pbmc9MTAsbi5tYXhVbmRlcnpvb21pbmc9MyxuLnByb3RvdHlwZT1oLmluaGVyaXQobCx7b25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5vbkFkZCYmdGhpcy5fc291cmNlLm9uQWRkKHQpfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VFcnJvcmVkKXJldHVybiEwO2lmKCF0aGlzLl9zb3VyY2VMb2FkZWQpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZigibG9hZGVkIiE9PWUuc3RhdGUmJiJlcnJvcmVkIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0KX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHByZXBhcmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKXJldHVybiB0aGlzLl9zb3VyY2UucHJlcGFyZSgpfSxnZXRJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoYSl9LGdldFJlbmRlcmFibGVJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJZHMoKS5maWx0ZXIodGhpcy5faXNJZFJlbmRlcmFibGUpfSxfaXNJZFJlbmRlcmFibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdLmlzUmVuZGVyYWJsZSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdfSxyZWxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZS5yZXNldCgpO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ImxvYWRpbmciIT09ZS5zdGF0ZSYmKGUuc3RhdGU9InJlbG9hZGluZyIpLHRoaXMubG9hZFRpbGUodGhpcy5fdGlsZXNbdF0sdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsdGhpcy5fdGlsZXNbdF0pKX19LF90aWxlTG9hZGVkOmZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zdGF0ZT0iZXJyb3JlZCIsdGhpcy5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KSx2b2lkIHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KTt0LnNvdXJjZT10aGlzLHQudGltZUFkZGVkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0fSksdGhpcy5fc291cmNlLmZpcmUoInRpbGUubG9hZCIse3RpbGU6dH0pfSxnZXRUaWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQuaWQpfSxnZXRUaWxlQnlJRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF19LGdldFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHQuem9vbSt0LnNjYWxlWm9vbSh0LnRpbGVTaXplL3RoaXMudGlsZVNpemUpfSxmaW5kTG9hZGVkQ2hpbGRyZW46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07aWYoIShyW2ldfHwhYS5pc1JlbmRlcmFibGUoKXx8YS5jb29yZC56PD10Lnp8fGEuY29vcmQuej5lKSl7dmFyIG89TWF0aC5wb3coMixNYXRoLm1pbihhLmNvb3JkLnosdGhpcy5tYXh6b29tKS1NYXRoLm1pbih0LnosdGhpcy5tYXh6b29tKSk7aWYoTWF0aC5mbG9vcihhLmNvb3JkLngvbyk9PT10LngmJk1hdGguZmxvb3IoYS5jb29yZC55L28pPT09dC55KWZvcihyW2ldPSEwLG49ITA7YSYmYS5jb29yZC56LTE+dC56Oyl7dmFyIHM9YS5jb29yZC5wYXJlbnQodGhpcy5tYXh6b29tKS5pZDthPXRoaXMuX3RpbGVzW3NdLGEmJmEuaXNSZW5kZXJhYmxlKCkmJihkZWxldGUgcltpXSxyW3NdPSEwKX19fXJldHVybiBufSxmaW5kTG9hZGVkUGFyZW50OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC56LTE7bj49ZTtuLS0pe3Q9dC5wYXJlbnQodGhpcy5tYXh6b29tKTt2YXIgaT10aGlzLl90aWxlc1t0LmlkXTtpZihpJiZpLmlzUmVuZGVyYWJsZSgpKXJldHVybiByW3QuaWRdPSEwLGk7aWYodGhpcy5fY2FjaGUuaGFzKHQuaWQpKXJldHVybiB0aGlzLmFkZFRpbGUodCksclt0LmlkXT0hMCx0aGlzLl90aWxlc1t0LmlkXX19LHVwZGF0ZUNhY2hlU2l6ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwodC53aWR0aC90LnRpbGVTaXplKSsxLHI9TWF0aC5jZWlsKHQuaGVpZ2h0L3QudGlsZVNpemUpKzEsbj1lKnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShNYXRoLmZsb29yKDUqbikpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQpe3ZhciByLGksYTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0KTt2YXIgbz0odGhpcy5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLmdldFpvb20odCkpLHM9TWF0aC5tYXgoby1uLm1heE92ZXJ6b29taW5nLHRoaXMubWluem9vbSksbD1NYXRoLm1heChvK24ubWF4VW5kZXJ6b29taW5nLHRoaXMubWluem9vbSksdT17fSxmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3RoaXMuX2NvdmVyZWRUaWxlcz17fTt2YXIgZD10aGlzLnVzZWQ/dC5jb3ZlcmluZ1RpbGVzKHRoaXMuX3NvdXJjZSk6W107Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylpPWRbcl0sYT10aGlzLmFkZFRpbGUoaSksdVtpLmlkXT0hMCxhLmlzUmVuZGVyYWJsZSgpfHx0aGlzLmZpbmRMb2FkZWRDaGlsZHJlbihpLGwsdSl8fHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMsdSk7Zm9yKHZhciBwPXt9LG09T2JqZWN0LmtleXModSksdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgZz1tW3ZdO2k9Yy5mcm9tSUQoZyksYT10aGlzLl90aWxlc1tnXSxhJiZhLnRpbWVBZGRlZD5mLShlfHwwKSYmKHRoaXMuZmluZExvYWRlZENoaWxkcmVuKGksbCx1KSYmKHVbZ109ITApLHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMscCkpfXZhciB5O2Zvcih5IGluIHApdVt5XXx8KHRoaXMuX2NvdmVyZWRUaWxlc1t5XT0hMCk7Zm9yKHkgaW4gcCl1W3ldPSEwO3ZhciBiPWgua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsdSk7Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl0aGlzLnJlbW92ZVRpbGUoK2Jbcl0pO3RoaXMudHJhbnNmb3JtPXR9fSxhZGRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3QuaWRdO2lmKGUpcmV0dXJuIGU7dmFyIHI9dC53cmFwcGVkKCk7aWYoZT10aGlzLl90aWxlc1tyLmlkXSxlfHwoZT10aGlzLl9jYWNoZS5nZXQoci5pZCkpJiZ0aGlzLl9yZWRvUGxhY2VtZW50JiZ0aGlzLl9yZWRvUGxhY2VtZW50KGUpLCFlKXt2YXIgbj10LnosaT1uPnRoaXMubWF4em9vbT9NYXRoLnBvdygyLG4tdGhpcy5tYXh6b29tKToxO2U9bmV3IHMocix0aGlzLnRpbGVTaXplKmksdGhpcy5tYXh6b29tKSx0aGlzLmxvYWRUaWxlKGUsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsZSkpfXJldHVybiBlLnVzZXMrKyx0aGlzLl90aWxlc1t0LmlkXT1lLHRoaXMuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSx0aGlzLl9zb3VyY2UuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSxlfSxyZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLGUudXNlcz4wfHwoZS5pc1JlbmRlcmFibGUoKT90aGlzLl9jYWNoZS5hZGQoZS5jb29yZC53cmFwcGVkKCkuaWQsZSk6KGUuYWJvcnRlZD0hMCx0aGlzLmFib3J0VGlsZShlKSx0aGlzLnVubG9hZFRpbGUoZSkpKSl9LGNsZWFyVGlsZXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5yZW1vdmVUaWxlKHQpO3RoaXMuX2NhY2hlLnJlc2V0KCl9LHRpbGVzSW46ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9dGhpcy5nZXRJZHMoKSxuPTEvMCxhPTEvMCxvPS0oMS8wKSxzPS0oMS8wKSxsPXRbMF0uem9vbSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV07bj1NYXRoLm1pbihuLGguY29sdW1uKSxhPU1hdGgubWluKGEsaC5yb3cpLG89TWF0aC5tYXgobyxoLmNvbHVtbikscz1NYXRoLm1heChzLGgucm93KX1mb3IodmFyIHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIG09dGhpcy5fdGlsZXNbcltwXV0sdj1jLmZyb21JRChyW3BdKSxnPVtpKHYsbS5zb3VyY2VNYXhab29tLG5ldyBmKG4sYSxsKSksaSh2LG0uc291cmNlTWF4Wm9vbSxuZXcgZihvLHMsbCkpXTtpZihnWzBdLng8ZCYmZ1swXS55PGQmJmdbMV0ueD49MCYmZ1sxXS55Pj0wKXtmb3IodmFyIHk9W10sYj0wO2I8dC5sZW5ndGg7YisrKXkucHVzaChpKHYsbS5zb3VyY2VNYXhab29tLHRbYl0pKTt2YXIgeD1lW20uY29vcmQuaWRdO3ZvaWQgMD09PXgmJih4PWVbbS5jb29yZC5pZF09e3RpbGU6bSxjb29yZDp2LHF1ZXJ5R2VvbWV0cnk6W10sc2NhbGU6TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLW0uY29vcmQueil9KSx4LnF1ZXJ5R2VvbWV0cnkucHVzaCh5KX19dmFyIF89W107Zm9yKHZhciB3IGluIGUpXy5wdXNoKGVbd10pO3JldHVybiBffSxyZWRvUGxhY2VtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2V0SWRzKCksZT0wO2U8dC5sZW5ndGg7ZSsrKXt0aGlzLmdldFRpbGVCeUlEKHRbZV0pLnJlZG9QbGFjZW1lbnQodGhpcyl9fSxnZXRWaXNpYmxlQ29vcmRpbmF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGMuZnJvbUlEKX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi9nZW8vY29vcmRpbmF0ZSI6MzQ2LCIuLi91dGlsL2V2ZW50ZWQiOjQ0MiwiLi4vdXRpbC9scnVfY2FjaGUiOjQ0NiwiLi4vdXRpbC91dGlsIjo0NTAsIi4vc291cmNlIjozNzQsIi4vdGlsZSI6Mzc2LCIuL3RpbGVfY29vcmQiOjM3N31dLDM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmNvb3JkPXQsdGhpcy51aWQ9YS51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9ZSx0aGlzLnNvdXJjZU1heFpvb209cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5zdGF0ZT0ibG9hZGluZyJ9ZnVuY3Rpb24gaSh0LGUpe2lmKGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUuZ2V0TGF5ZXIodFtuXS5sYXllcklkKTtpZihpKXt2YXIgcz1vLmNyZWF0ZShhLmV4dGVuZCh7bGF5ZXI6aSxjaGlsZExheWVyczp0W25dLmNoaWxkTGF5ZXJJZHMubWFwKGUuZ2V0TGF5ZXIuYmluZChlKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSl9LHRbbl0pKTtyW3MuaWRdPXN9fXJldHVybiByfX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL2RhdGEvYnVja2V0Iikscz10KCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiKSxsPXQoInZlY3Rvci10aWxlIiksYz10KCJwYmYiKSx1PXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksZj10KCJmZWF0dXJlLWZpbHRlciIpLGg9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIiksZD10KCIuLi9zeW1ib2wvY29sbGlzaW9uX2JveCIpLHA9dCgiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiKSxtPXQoIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17bG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlPSJsb2FkZWQiLHQmJih0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBkKHQuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuY29sbGlzaW9uVGlsZT1uZXcgaCh0LmNvbGxpc2lvblRpbGUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSksdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheT1uZXcgcCh0LnN5bWJvbEluc3RhbmNlc0FycmF5KSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9bmV3IG0odC5zeW1ib2xRdWFkc0FycmF5KSx0aGlzLmZlYXR1cmVJbmRleD1uZXcgcyh0LmZlYXR1cmVJbmRleCx0LnJhd1RpbGVEYXRhLHRoaXMuY29sbGlzaW9uVGlsZSksdGhpcy5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhLHRoaXMuYnVja2V0cz1pKHQuYnVja2V0cyxlKSl9LHJlbG9hZFN5bWJvbERhdGE6ZnVuY3Rpb24odCxlLHIpe2lmKCJ1bmxvYWRlZCIhPT10aGlzLnN0YXRlKXt0aGlzLmNvbGxpc2lvblRpbGU9bmV3IGgodC5jb2xsaXNpb25UaWxlLHRoaXMuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuZmVhdHVyZUluZGV4LnNldENvbGxpc2lvblRpbGUodGhpcy5jb2xsaXNpb25UaWxlKTtmb3IodmFyIG4gaW4gdGhpcy5idWNrZXRzKXt2YXIgbz10aGlzLmJ1Y2tldHNbbl07InN5bWJvbCI9PT1vLnR5cGUmJihvLmRlc3Ryb3koZS5nbCksZGVsZXRlIHRoaXMuYnVja2V0c1tuXSl9YS5leHRlbmQodGhpcy5idWNrZXRzLGkodC5idWNrZXRzLHIpKX19LHVubG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dGhpcy5idWNrZXRzW2VdLmRlc3Ryb3kodC5nbCl9dGhpcy5jb2xsaXNpb25Cb3hBcnJheT1udWxsLHRoaXMuc3ltYm9sUXVhZHNBcnJheT1udWxsLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9bnVsbCx0aGlzLmNvbGxpc2lvblRpbGU9bnVsbCx0aGlzLmZlYXR1cmVJbmRleD1udWxsLHRoaXMucmF3VGlsZURhdGE9bnVsbCx0aGlzLmJ1Y2tldHM9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHJlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3RoaXMucmVsb2FkU3ltYm9sRGF0YShyLHQubWFwLnBhaW50ZXIsdC5tYXAuc3R5bGUpLHQuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0aGlzfSksdGhpcy5zdGF0ZT0ibG9hZGVkIix0aGlzLnJlZG9XaGVuRG9uZSYmKHRoaXMucmVkb1BsYWNlbWVudCh0KSx0aGlzLnJlZG9XaGVuRG9uZT0hMSl9aWYoImxvYWRlZCIhPT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGUpcmV0dXJuIHZvaWQodGhpcy5yZWRvV2hlbkRvbmU9ITApO3RoaXMuc3RhdGU9InJlbG9hZGluZyIsdC5kaXNwYXRjaGVyLnNlbmQoInJlZG8gcGxhY2VtZW50Iix7dWlkOnRoaXMudWlkLHNvdXJjZTp0LmlkLGFuZ2xlOnQubWFwLnRyYW5zZm9ybS5hbmdsZSxwaXRjaDp0Lm1hcC50cmFuc2Zvcm0ucGl0Y2gsc2hvd0NvbGxpc2lvbkJveGVzOnQubWFwLnNob3dDb2xsaXNpb25Cb3hlc30sZS5iaW5kKHRoaXMpLHRoaXMud29ya2VySUQpfSxnZXRCdWNrZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0cyYmdGhpcy5idWNrZXRzW3QucmVmfHx0LmlkXX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMucmF3VGlsZURhdGEpe3RoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBsLlZlY3RvclRpbGUobmV3IGMobmV3IFVpbnQ4QXJyYXkodGhpcy5yYXdUaWxlRGF0YSkpKS5sYXllcnMpO3ZhciByPXRoaXMudnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXJ8fHRoaXMudnRMYXllcnNbZS5zb3VyY2VMYXllcl07aWYocilmb3IodmFyIG49ZihlLmZpbHRlciksaT17ejp0aGlzLmNvb3JkLnoseDp0aGlzLmNvb3JkLngseTp0aGlzLmNvb3JkLnl9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89ci5mZWF0dXJlKGEpO2lmKG4obykpe3ZhciBzPW5ldyB1KG8sdGhpcy5jb29yZC56LHRoaXMuY29vcmQueCx0aGlzLmNvb3JkLnkpO3MudGlsZT1pLHQucHVzaChzKX19fX0saXNSZW5kZXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV9fX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiOjM0NCwiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giOjQwMiwiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIjo0MDQsIi4uL3N5bWJvbC9zeW1ib2xfaW5zdGFuY2VzIjo0MTMsIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiOjQxNCwiLi4vdXRpbC91dGlsIjo0NTAsIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIjo0NTEsImZlYXR1cmUtZmlsdGVyIjoxMzIscGJmOjQ4NywidmVjdG9yLXRpbGUiOjU1N31dLDM3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2woIWlzTmFOKHQpJiZ0Pj0wJiZ0JTE9PTApLGwoIWlzTmFOKGUpJiZlPj0wJiZlJTE9PTApLGwoIWlzTmFOKHIpJiZyPj0wJiZyJTE9PTApLGlzTmFOKG4pJiYobj0wKSx0aGlzLno9K3QsdGhpcy54PStlLHRoaXMueT0rcix0aGlzLnc9K24sKG4qPTIpPDAmJihuPW4qLTEtMSk7dmFyIGk9MTw8dGhpcy56O3RoaXMuaWQ9MzIqKGkqaSpuK2kqdGhpcy55K3RoaXMueCkrdGhpcy56LHRoaXMucG9zTWF0cml4PW51bGx9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0pbj0xPDxhLTEsaSs9KGUmbj8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX1mdW5jdGlvbiBhKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIG8odCxlLHIsbixpKXt2YXIgYT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSxjPWUuZHgvZS5keSx1PXQuZHg+MCxmPWUuZHg8MCxoPWE7aDxvO2grKyl7dmFyIGQ9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksaCt1LXQueTApKSt0LngwLHA9YypNYXRoLm1heCgwLE1hdGgubWluKGUuZHksaCtmLWUueTApKStlLngwO2koTWF0aC5mbG9vcihwKSxNYXRoLmNlaWwoZCksaCl9fWZ1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBsLGM9YSh0LGUpLHU9YShlLHIpLGY9YShyLHQpO2MuZHk+dS5keSYmKGw9YyxjPXUsdT1sKSxjLmR5PmYuZHkmJihsPWMsYz1mLGY9bCksdS5keT5mLmR5JiYobD11LHU9ZixmPWwpLGMuZHkmJm8oZixjLG4saSxzKSx1LmR5JiZvKGYsdSxuLGkscyl9dmFyIGw9dCgiYXNzZXJ0IiksYz10KCJ3aG9vdHMtanMiKSx1PXQoIi4uL2dlby9jb29yZGluYXRlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56KyIvIit0aGlzLngrIi8iK3RoaXMueX0sbi5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKHRoaXMueix0KSxyPU1hdGgucG93KDIsZSksbj10aGlzLnksaT10aGlzLngrcip0aGlzLnc7cmV0dXJuIG5ldyB1KGksbixlKX0sbi5mcm9tSUQ9ZnVuY3Rpb24odCl7dmFyIGU9dCUzMixyPTE8PGUsaT0odC1lKS8zMixhPWklcixvPShpLWEpL3IlcixzPU1hdGguZmxvb3IoaS8ocipyKSk7cmV0dXJuIHMlMiE9MCYmKHM9cyotMS0xKSxzLz0yLG5ldyBuKGUsYSxvLHMpfSxuLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLGE9aSh0aGlzLnosdGhpcy54LHRoaXMueSk7cmV0dXJuIHRbKHRoaXMueCt0aGlzLnkpJXQubGVuZ3RoXS5yZXBsYWNlKCJ7cHJlZml4fSIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZSgie3p9IixNYXRoLm1pbih0aGlzLnosZXx8dGhpcy56KSkucmVwbGFjZSgie3h9Iix0aGlzLngpLnJlcGxhY2UoInt5fSIsInRtcyI9PT1yP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpLnJlcGxhY2UoIntxdWFka2V5fSIsYSkucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIsbil9LG4ucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuej9udWxsOnRoaXMuej50P25ldyBuKHRoaXMuei0xLHRoaXMueCx0aGlzLnksdGhpcy53KTpuZXcgbih0aGlzLnotMSxNYXRoLmZsb29yKHRoaXMueC8yKSxNYXRoLmZsb29yKHRoaXMueS8yKSx0aGlzLncpfSxuLnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueix0aGlzLngsdGhpcy55LDApfSxuLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLno+PXQpcmV0dXJuW25ldyBuKHRoaXMueisxLHRoaXMueCx0aGlzLnksdGhpcy53KV07dmFyIGU9dGhpcy56KzEscj0yKnRoaXMueCxpPTIqdGhpcy55O3JldHVybltuZXcgbihlLHIsaSx0aGlzLncpLG5ldyBuKGUscisxLGksdGhpcy53KSxuZXcgbihlLHIsaSsxLHRoaXMudyksbmV3IG4oZSxyKzEsaSsxLHRoaXMudyldfSxuLmNvdmVyPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcyxsLGM7aWYoaT49MCYmaTw9YSlmb3Iocz10O3M8ZTtzKyspbD0ocyVhK2EpJWEsYz1uZXcgbihyLGwsaSxNYXRoLmZsb29yKHMvYSkpLG9bYy5pZF09Y312YXIgYT0xPDx0LG89e307cmV0dXJuIHMoZVswXSxlWzFdLGVbMl0sMCxhLGkpLHMoZVsyXSxlWzNdLGVbMF0sMCxhLGkpLE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb1t0XX0pfX0seyIuLi9nZW8vY29vcmRpbmF0ZSI6MzQ2LGFzc2VydDo0Nywid2hvb3RzLWpzIjo1NzN9XSwzNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYodGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1yLGEuZXh0ZW5kKHRoaXMsYS5waWNrKGUsWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSksdGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7dHlwZToidmVjdG9yIn0sZSksNTEyIT09dGhpcy50aWxlU2l6ZSl0aHJvdyBuZXcgRXJyb3IoInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyIik7byhlLGZ1bmN0aW9uKHQsZSl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix0KTthLmV4dGVuZCh0aGlzLGUpLHRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL2V2ZW50ZWQiKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89dCgiLi9sb2FkX3RpbGVqc29uIikscz10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVRpbGVVUkw7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse21pbnpvb206MCxtYXh6b29tOjIyLHNjaGVtZToieHl6Iix0aWxlU2l6ZTo1MTIscmVwYXJzZU92ZXJzY2FsZWQ6ITAsaXNUaWxlQ2xpcHBlZDohMCxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLm1hcD10fSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLG4pe2lmKCF0LmFib3J0ZWQpe2lmKHIpcmV0dXJuIGUocik7dC5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnN0eWxlKSx0LnJlZG9XaGVuRG9uZSYmKHQucmVkb1doZW5Eb25lPSExLHQucmVkb1BsYWNlbWVudCh0aGlzKSksZShudWxsKSx0LnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZSh0LHQucmVsb2FkQ2FsbGJhY2spLHQucmVsb2FkQ2FsbGJhY2s9bnVsbCl9fXZhciBuPXQuY29vcmQuej50aGlzLm1heHpvb20/TWF0aC5wb3coMix0LmNvb3JkLnotdGhpcy5tYXh6b29tKToxLGk9e3VybDpzKHQuY29vcmQudXJsKHRoaXMudGlsZXMsdGhpcy5tYXh6b29tLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksdWlkOnQudWlkLGNvb3JkOnQuY29vcmQsem9vbTp0LmNvb3JkLnosdGlsZVNpemU6dGhpcy50aWxlU2l6ZSpuLHNvdXJjZTp0aGlzLmlkLG92ZXJzY2FsaW5nOm4sYW5nbGU6dGhpcy5tYXAudHJhbnNmb3JtLmFuZ2xlLHBpdGNoOnRoaXMubWFwLnRyYW5zZm9ybS5waXRjaCxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzfTt0LndvcmtlcklEPyJsb2FkaW5nIj09PXQuc3RhdGU/dC5yZWxvYWRDYWxsYmFjaz1lOihpLnJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSx0LndvcmtlcklEKSk6dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCgibG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSl9LGFib3J0VGlsZTpmdW5jdGlvbih0KXt0aGlzLmRpc3BhdGNoZXIuc2VuZCgiYWJvcnQgdGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sdW5sb2FkVGlsZTpmdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEodGhpcy5tYXAucGFpbnRlciksdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZSB0aWxlIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfX0pfSx7Ii4uL3V0aWwvZXZlbnRlZCI6NDQyLCIuLi91dGlsL21hcGJveCI6NDQ3LCIuLi91dGlsL3V0aWwiOjQ1MCwiLi9sb2FkX3RpbGVqc29uIjozNzB9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5hY3Rvcj10LHRoaXMuc3R5bGVMYXllcnM9ZSxyJiYodGhpcy5sb2FkVmVjdG9yRGF0YT1yKSx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319dmFyIGk9dCgiLi4vdXRpbC9hamF4IiksYT10KCJ2ZWN0b3ItdGlsZSIpLG89dCgicGJmIikscz10KCIuL3dvcmtlcl90aWxlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe3JldHVybiBkZWxldGUgdGhpcy5sb2FkaW5nW25dW2ldLHQ/ZSh0KTpyPyhhLmRhdGE9ci50aWxlLGEucGFyc2UoYS5kYXRhLHRoaXMuc3R5bGVMYXllcnMuZ2V0TGF5ZXJGYW1pbGllcygpLHRoaXMuYWN0b3Isci5yYXdUaWxlRGF0YSxlKSx0aGlzLmxvYWRlZFtuXT10aGlzLmxvYWRlZFtuXXx8e30sCnZvaWQodGhpcy5sb2FkZWRbbl1baV09YSkpOmUobnVsbCxudWxsKX12YXIgbj10LnNvdXJjZSxpPXQudWlkO3RoaXMubG9hZGluZ1tuXXx8KHRoaXMubG9hZGluZ1tuXT17fSk7dmFyIGE9dGhpcy5sb2FkaW5nW25dW2ldPW5ldyBzKHQpO2EuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YSh0LHIuYmluZCh0aGlzKSl9LHJlbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZFt0LnNvdXJjZV0sbj10LnVpZDtpZihyJiZyW25dKXt2YXIgaT1yW25dO2kucGFyc2UoaS5kYXRhLHRoaXMuc3R5bGVMYXllcnMuZ2V0TGF5ZXJGYW1pbGllcygpLHRoaXMuYWN0b3IsdC5yYXdUaWxlRGF0YSxlKX19LGFib3J0VGlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdbdC5zb3VyY2VdLHI9dC51aWQ7ZSYmZVtyXSYmZVtyXS5hYm9ydCYmKGVbcl0uYWJvcnQoKSxkZWxldGUgZVtyXSl9LHJlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWRbdC5zb3VyY2VdLHI9dC51aWQ7ZSYmZVtyXSYmZGVsZXRlIGVbcl19LGxvYWRWZWN0b3JEYXRhOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKHQpcmV0dXJuIGUodCk7dmFyIG49bmV3IGEuVmVjdG9yVGlsZShuZXcgbyhuZXcgVWludDhBcnJheShyKSkpO2UodCx7dGlsZTpuLHJhd1RpbGVEYXRhOnJ9KX12YXIgbj1pLmdldEFycmF5QnVmZmVyKHQudXJsLHIuYmluZCh0aGlzKSk7cmV0dXJuIGZ1bmN0aW9uKCl7bi5hYm9ydCgpfX0scmVkb1BsYWNlbWVudDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkW3Quc291cmNlXSxuPXRoaXMubG9hZGluZ1t0LnNvdXJjZV0saT10LnVpZDtpZihyJiZyW2ldKXt2YXIgYT1yW2ldLG89YS5yZWRvUGxhY2VtZW50KHQuYW5nbGUsdC5waXRjaCx0LnNob3dDb2xsaXNpb25Cb3hlcyk7by5yZXN1bHQmJmUobnVsbCxvLnJlc3VsdCxvLnRyYW5zZmVyYWJsZXMpfWVsc2UgbiYmbltpXSYmKG5baV0uYW5nbGU9dC5hbmdsZSl9fX0seyIuLi91dGlsL2FqYXgiOjQzMywiLi93b3JrZXJfdGlsZSI6MzgyLHBiZjo0ODcsInZlY3Rvci10aWxlIjo1NTd9XSwzODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuaWQ9dCx0aGlzLnVybHM9ZS51cmxzLHRoaXMuY29vcmRpbmF0ZXM9ZS5jb29yZGluYXRlcyxjLmdldFZpZGVvKGUudXJscyxmdW5jdGlvbih0LHIpe2lmKHQpcmV0dXJuIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7dGhpcy52aWRlbz1yLHRoaXMudmlkZW8ubG9vcD0hMDt2YXIgbjt0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7bj10aGlzLm1hcC5zdHlsZS5hbmltYXRpb25Mb29wLnNldCgxLzApLHRoaXMubWFwLl9yZXJlbmRlcigpfS5iaW5kKHRoaXMpKSx0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixmdW5jdGlvbigpe3RoaXMubWFwLnN0eWxlLmFuaW1hdGlvbkxvb3AuY2FuY2VsKG4pfS5iaW5kKHRoaXMpKSx0aGlzLm1hcCYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXMoZS5jb29yZGluYXRlcykpLHRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoIi4vdGlsZV9jb29yZCIpLG89dCgiLi4vZ2VvL2xuZ19sYXQiKSxzPXQoInBvaW50LWdlb21ldHJ5IiksbD10KCIuLi91dGlsL2V2ZW50ZWQiKSxjPXQoIi4uL3V0aWwvYWpheCIpLHU9dCgiLi4vZGF0YS9idWNrZXQiKS5FWFRFTlQsZj10KCIuLi9yZW5kZXIvZHJhd19yYXN0ZXIiKS5SYXN0ZXJCb3VuZHNBcnJheSxoPXQoIi4uL2RhdGEvYnVmZmVyIiksZD10KCIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChsLHttaW56b29tOjAsbWF4em9vbToyMix0aWxlU2l6ZTo1MTIscm91bmRab29tOiEwLGdldFZpZGVvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW99LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwfHwodGhpcy5tYXA9dCx0aGlzLnZpZGVvJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSkpfSxzZXRDb29yZGluYXRlczpmdW5jdGlvbih0KXt0aGlzLmNvb3JkaW5hdGVzPXQ7dmFyIGU9dGhpcy5tYXAscj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFuc2Zvcm0ubG9jYXRpb25Db29yZGluYXRlKG8uY29udmVydCh0KSkuem9vbVRvKDApfSksbj10aGlzLmNlbnRlckNvb3JkPWkuZ2V0Q29vcmRpbmF0ZXNDZW50ZXIocik7cmV0dXJuIG4uY29sdW1uPU1hdGgucm91bmQobi5jb2x1bW4pLG4ucm93PU1hdGgucm91bmQobi5yb3cpLHRoaXMubWluem9vbT10aGlzLm1heHpvb209bi56b29tLHRoaXMuX2Nvb3JkPW5ldyBhKG4uem9vbSxuLmNvbHVtbixuLnJvdyksdGhpcy5fdGlsZUNvb3Jkcz1yLm1hcChmdW5jdGlvbih0KXt2YXIgZT10Lnpvb21UbyhuLnpvb20pO3JldHVybiBuZXcgcyhNYXRoLnJvdW5kKChlLmNvbHVtbi1uLmNvbHVtbikqdSksTWF0aC5yb3VuZCgoZS5yb3ctbi5yb3cpKnUpKX0pLHRoaXMuZmlyZSgiY2hhbmdlIiksdGhpc30sX3NldFRpbGU6ZnVuY3Rpb24odCl7dGhpcy5fcHJlcGFyZWQ9ITEsdGhpcy50aWxlPXQ7dmFyIGU9bmV3IGY7ZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzBdLngsdGhpcy5fdGlsZUNvb3Jkc1swXS55LDAsMCksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzFdLngsdGhpcy5fdGlsZUNvb3Jkc1sxXS55LDMyNzY3LDApLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1szXS54LHRoaXMuX3RpbGVDb29yZHNbM10ueSwwLDMyNzY3KSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbMl0ueCx0aGlzLl90aWxlQ29vcmRzWzJdLnksMzI3NjcsMzI3NjcpLHRoaXMudGlsZS5idWNrZXRzPXt9LHRoaXMudGlsZS5ib3VuZHNCdWZmZXI9bmV3IGgoZS5zZXJpYWxpemUoKSxmLnNlcmlhbGl6ZSgpLGguQnVmZmVyVHlwZS5WRVJURVgpLHRoaXMudGlsZS5ib3VuZHNWQU89bmV3IGQsdGhpcy50aWxlLnN0YXRlPSJsb2FkZWQifSxwcmVwYXJlOmZ1bmN0aW9uKCl7aWYoISh0aGlzLnZpZGVvLnJlYWR5U3RhdGU8MikmJnRoaXMudGlsZSl7dmFyIHQ9dGhpcy5tYXAucGFpbnRlci5nbDt0aGlzLl9wcmVwYXJlZD8odC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLHQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCwwLDAsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMuX3ByZXBhcmVkPSEwLHRoaXMudGlsZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGlsZS50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy52aWRlbykpLHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWV9fSxsb2FkVGlsZTpmdW5jdGlvbih0LGUpe3RoaXMuX2Nvb3JkJiZ0aGlzLl9jb29yZC50b1N0cmluZygpPT09dC5jb29yZC50b1N0cmluZygpPyh0aGlzLl9zZXRUaWxlKHQpLGUobnVsbCkpOih0LnN0YXRlPSJlcnJvcmVkIixlKG51bGwpKX0sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InZpZGVvIix1cmxzOnRoaXMudXJscyxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi9kYXRhL2J1ZmZlciI6MzQyLCIuLi9nZW8vbG5nX2xhdCI6MzQ3LCIuLi9yZW5kZXIvZHJhd19yYXN0ZXIiOjM1OSwiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiOjM2NSwiLi4vdXRpbC9hamF4Ijo0MzMsIi4uL3V0aWwvZXZlbnRlZCI6NDQyLCIuLi91dGlsL3V0aWwiOjQ1MCwiLi90aWxlX2Nvb3JkIjozNzcsInBvaW50LWdlb21ldHJ5Ijo0OTN9XSwzODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnNlbGY9dCx0aGlzLmFjdG9yPW5ldyBhKHQsdGhpcyk7dmFyIGU9e2dldExheWVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheWVyc30uYmluZCh0aGlzKSxnZXRMYXllckZhbWlsaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJGYW1pbGllc30uYmluZCh0aGlzKX07dGhpcy53b3JrZXJTb3VyY2VzPXt2ZWN0b3I6bmV3IGwodGhpcy5hY3RvcixlKSxnZW9qc29uOm5ldyBjKHRoaXMuYWN0b3IsZSl9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSl0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciBzb3VyY2Ugd2l0aCBuYW1lICInK3QrJyIgYWxyZWFkeSByZWdpc3RlcmVkLicpO3RoaXMud29ya2VyU291cmNlc1t0XT1uZXcgcih0aGlzLmFjdG9yLGUpfS5iaW5kKHRoaXMpfWZ1bmN0aW9uIGkodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpe3ZhciBuPXRbcl0saT1uLnJlZnx8bi5pZCxhPXRbaV07YS5sYXlvdXQmJiJub25lIj09PWEubGF5b3V0LnZpc2liaWxpdHl8fChlW2ldPWVbaV18fFtdLHI9PT1pP2VbaV0udW5zaGlmdChuKTplW2ldLnB1c2gobikpfXJldHVybiBlfXZhciBhPXQoIi4uL3V0aWwvYWN0b3IiKSxvPXQoIi4uL3N0eWxlL3N0eWxlX2xheWVyIikscz10KCIuLi91dGlsL3V0aWwiKSxsPXQoIi4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSIpLGM9dCgiLi9nZW9qc29uX3dvcmtlcl9zb3VyY2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfSxzLmV4dGVuZChuLnByb3RvdHlwZSx7InNldCBsYXllcnMiOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9by5jcmVhdGUodCx0LnJlZiYmci5sYXllcnNbdC5yZWZdKTtlLnVwZGF0ZVBhaW50VHJhbnNpdGlvbnMoe30se3RyYW5zaXRpb246ITF9KSxyLmxheWVyc1tlLmlkXT1lfXRoaXMubGF5ZXJzPXt9O2Zvcih2YXIgcj10aGlzLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdOyJmaWxsIiE9PXMudHlwZSYmImxpbmUiIT09cy50eXBlJiYiY2lyY2xlIiE9PXMudHlwZSYmInN5bWJvbCIhPT1zLnR5cGV8fChzLnJlZj9uLnB1c2goYSk6ZShzKSl9Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspZSh0W25bbF1dKTt0aGlzLmxheWVyRmFtaWxpZXM9aSh0aGlzLmxheWVycyl9LCJ1cGRhdGUgbGF5ZXJzIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPWEubGF5ZXJzW3QucmVmXTthLmxheWVyc1t0LmlkXT9hLmxheWVyc1t0LmlkXS5zZXQodCxlKTphLmxheWVyc1t0LmlkXT1vLmNyZWF0ZSh0LGUpLGEubGF5ZXJzW3QuaWRdLnVwZGF0ZVBhaW50VHJhbnNpdGlvbnMoe30se3RyYW5zaXRpb246ITF9KX12YXIgcixuLGE9dGhpcztmb3IociBpbiB0KW49dFtyXSxuLnJlZiYmZShuKTtmb3IociBpbiB0KW49dFtyXSxuLnJlZnx8ZShuKTt0aGlzLmxheWVyRmFtaWxpZXM9aSh0aGlzLmxheWVycyl9LCJsb2FkIHRpbGUiOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbcl0ubG9hZFRpbGUodCxlKX0sInJlbG9hZCB0aWxlIjpmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZXx8InZlY3RvciI7dGhpcy53b3JrZXJTb3VyY2VzW3JdLnJlbG9hZFRpbGUodCxlKX0sImFib3J0IHRpbGUiOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZXx8InZlY3RvciI7dGhpcy53b3JrZXJTb3VyY2VzW2VdLmFib3J0VGlsZSh0KX0sInJlbW92ZSB0aWxlIjpmdW5jdGlvbih0KXt2YXIgZT10LnR5cGV8fCJ2ZWN0b3IiO3RoaXMud29ya2VyU291cmNlc1tlXS5yZW1vdmVUaWxlKHQpfSwicmVkbyBwbGFjZW1lbnQiOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbcl0ucmVkb1BsYWNlbWVudCh0LGUpfSwibG9hZCB3b3JrZXIgc291cmNlIjpmdW5jdGlvbih0LGUpe3RyeXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyh0LnVybCksZSgpfWNhdGNoKHQpe2UodCl9fX0pfSx7Ii4uL3N0eWxlL3N0eWxlX2xheWVyIjozODksIi4uL3V0aWwvYWN0b3IiOjQzMiwiLi4vdXRpbC91dGlsIjo0NTAsIi4vZ2VvanNvbl93b3JrZXJfc291cmNlIjozNjcsIi4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSI6Mzc5fV0sMzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5jb29yZD10LmNvb3JkLHRoaXMudWlkPXQudWlkLHRoaXMuem9vbT10Lnpvb20sdGhpcy50aWxlU2l6ZT10LnRpbGVTaXplLHRoaXMuc291cmNlPXQuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5waXRjaD10LnBpdGNoLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzfWZ1bmN0aW9uIGkodCl7cmV0dXJuIXQuaXNFbXB0eSgpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9ZnVuY3Rpb24gbyh0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCl0W3JdLmdldFRyYW5zZmVyYWJsZXMoZSk7cmV0dXJuIGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5pZH12YXIgbD10KCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiKSxjPXQoIi4uL3N5bWJvbC9jb2xsaXNpb25fdGlsZSIpLHU9dCgiLi4vZGF0YS9idWNrZXQiKSxmPXQoIi4uL3N5bWJvbC9jb2xsaXNpb25fYm94IiksaD10KCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiKSxkPXQoIi4uL3V0aWwvdXRpbCIpLHA9dCgiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiKSxtPXQoIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0LGUscixuLHYpe2Z1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5mZWF0dXJlKHIpO24uaW5kZXg9cjtmb3IodmFyIGkgaW4gZSllW2ldLmZpbHRlcihuKSYmZVtpXS5mZWF0dXJlcy5wdXNoKG4pfX1mdW5jdGlvbiB5KHQpe2lmKHQpcmV0dXJuIHYodCk7aWYoMj09PSsrTil7Zm9yKHZhciBlPXoubGVuZ3RoLTE7ZT49MDtlLS0pYihTLHpbZV0pO3goKX19ZnVuY3Rpb24gYih0LGUpe2lmKGUucG9wdWxhdGVBcnJheXMoayxqLEYpLCJzeW1ib2wiIT09ZS50eXBlKWZvcih2YXIgcj0wO3I8ZS5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbj1lLmZlYXR1cmVzW3JdO0EuaW5zZXJ0KG4sbi5pbmRleCxlLnNvdXJjZUxheWVySW5kZXgsZS5pbmRleCl9ZS5mZWF0dXJlcz1udWxsfWZ1bmN0aW9uIHgoKXtTLnN0YXR1cz0iZG9uZSIsUy5yZWRvUGxhY2VtZW50QWZ0ZXJEb25lJiYoUy5yZWRvUGxhY2VtZW50KFMuYW5nbGUsUy5waXRjaCxudWxsKSxTLnJlZG9QbGFjZW1lbnRBZnRlckRvbmU9ITEpO3ZhciB0PUEuc2VyaWFsaXplKCksZT1rLnNlcmlhbGl6ZSgpLHI9Uy5jb2xsaXNpb25Cb3hBcnJheS5zZXJpYWxpemUoKSxzPVMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuc2VyaWFsaXplKCksbD1TLnN5bWJvbFF1YWRzQXJyYXkuc2VyaWFsaXplKCksYz1bbl0uY29uY2F0KHQudHJhbnNmZXJhYmxlcykuY29uY2F0KGUudHJhbnNmZXJhYmxlcyksdT1QLmZpbHRlcihpKTt2KG51bGwse2J1Y2tldHM6dS5tYXAoYSksZmVhdHVyZUluZGV4OnQuZGF0YSxjb2xsaXNpb25UaWxlOmUuZGF0YSxjb2xsaXNpb25Cb3hBcnJheTpyLHN5bWJvbEluc3RhbmNlc0FycmF5OnMsc3ltYm9sUXVhZHNBcnJheTpsLHJhd1RpbGVEYXRhOm59LG8odSkuY29uY2F0KGMpKX10aGlzLnN0YXR1cz0icGFyc2luZyIsdGhpcy5kYXRhPXQsdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgZix0aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5PW5ldyBwLHRoaXMuc3ltYm9sUXVhZHNBcnJheT1uZXcgbTt2YXIgXyx3LE0sVCxrPW5ldyBjKHRoaXMuYW5nbGUsdGhpcy5waXRjaCx0aGlzLmNvbGxpc2lvbkJveEFycmF5KSxBPW5ldyBsKHRoaXMuY29vcmQsdGhpcy5vdmVyc2NhbGluZyxrLHQubGF5ZXJzKSxFPW5ldyBoKHQubGF5ZXJzP09iamVjdC5rZXlzKHQubGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSxTPXRoaXMsTD17fSxDPXt9LEk9MDtmb3IodmFyIEQgaW4gZSl3PWVbRF1bMF0sdy5zb3VyY2U9PT10aGlzLnNvdXJjZSYmKHcucmVmfHx3Lm1pbnpvb20mJnRoaXMuem9vbTx3Lm1pbnpvb218fHcubWF4em9vbSYmdGhpcy56b29tPj13Lm1heHpvb218fHcubGF5b3V0JiYibm9uZSI9PT13LmxheW91dC52aXNpYmlsaXR5fHx0LmxheWVycyYmIXQubGF5ZXJzW3cuc291cmNlTGF5ZXJdfHwoVD11LmNyZWF0ZSh7bGF5ZXI6dyxpbmRleDpJKyssY2hpbGRMYXllcnM6ZVtEXSx6b29tOnRoaXMuem9vbSxvdmVyc2NhbGluZzp0aGlzLm92ZXJzY2FsaW5nLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LHN5bWJvbFF1YWRzQXJyYXk6dGhpcy5zeW1ib2xRdWFkc0FycmF5LHN5bWJvbEluc3RhbmNlc0FycmF5OnRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXksc291cmNlTGF5ZXJJbmRleDpFLmVuY29kZSh3LnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiKX0pLFQuY3JlYXRlRmlsdGVyKCksTFt3LmlkXT1ULHQubGF5ZXJzJiYoTT13LnNvdXJjZUxheWVyLENbTV09Q1tNXXx8e30sQ1tNXVt3LmlkXT1UKSkpO2lmKHQubGF5ZXJzKWZvcihNIGluIEMpMT09PXcudmVyc2lvbiYmZC53YXJuT25jZSgnVmVjdG9yIHRpbGUgc291cmNlICInK3RoaXMuc291cmNlKyciIGxheWVyICInK00rJyIgZG9lcyBub3QgdXNlIHZlY3RvciB0aWxlIHNwZWMgdjIgYW5kIHRoZXJlZm9yZSBtYXkgaGF2ZSBzb21lIHJlbmRlcmluZyBlcnJvcnMuJyksKHc9dC5sYXllcnNbTV0pJiZnKHcsQ1tNXSk7ZWxzZSBnKHQsTCk7dmFyIFA9W10sej10aGlzLnN5bWJvbEJ1Y2tldHM9W10sTz1bXTtBLmJ1Y2tldExheWVySURzPXt9O2Zvcih2YXIgUiBpbiBMKVQ9TFtSXSwwIT09VC5mZWF0dXJlcy5sZW5ndGgmJihBLmJ1Y2tldExheWVySURzW1QuaW5kZXhdPVQuY2hpbGRMYXllcnMubWFwKHMpLFAucHVzaChUKSwic3ltYm9sIj09PVQudHlwZT96LnB1c2goVCk6Ty5wdXNoKFQpKTt2YXIgRj17fSxqPXt9LE49MDtpZih6Lmxlbmd0aD4wKXtmb3IoXz16Lmxlbmd0aC0xO18+PTA7Xy0tKXpbX10udXBkYXRlSWNvbnMoRikseltfXS51cGRhdGVGb250KGopO2Zvcih2YXIgQiBpbiBqKWpbQl09T2JqZWN0LmtleXMoaltCXSkubWFwKE51bWJlcik7Rj1PYmplY3Qua2V5cyhGKSxyLnNlbmQoImdldCBnbHlwaHMiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOmp9LGZ1bmN0aW9uKHQsZSl7aj1lLHkodCl9KSxGLmxlbmd0aD9yLnNlbmQoImdldCBpY29ucyIse2ljb25zOkZ9LGZ1bmN0aW9uKHQsZSl7Rj1lLHkodCl9KTp5KCl9Zm9yKF89Ty5sZW5ndGgtMTtfPj0wO18tLSliKHRoaXMsT1tfXSk7aWYoMD09PXoubGVuZ3RoKXJldHVybiB4KCl9LG4ucHJvdG90eXBlLnJlZG9QbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJkb25lIiE9PXRoaXMuc3RhdHVzKXJldHVybiB0aGlzLnJlZG9QbGFjZW1lbnRBZnRlckRvbmU9ITAsdGhpcy5hbmdsZT10LHt9O2Zvcih2YXIgbj1uZXcgYyh0LGUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSkscz10aGlzLnN5bWJvbEJ1Y2tldHMsbD1zLmxlbmd0aC0xO2w+PTA7bC0tKXNbbF0ucGxhY2VGZWF0dXJlcyhuLHIpO3ZhciB1PW4uc2VyaWFsaXplKCksZj1zLmZpbHRlcihpKTtyZXR1cm57cmVzdWx0OntidWNrZXRzOmYubWFwKGEpLGNvbGxpc2lvblRpbGU6dS5kYXRhfSx0cmFuc2ZlcmFibGVzOm8oZikuY29uY2F0KHUudHJhbnNmZXJhYmxlcyl9fX0seyIuLi9kYXRhL2J1Y2tldCI6MzM3LCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiOjM0NCwiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giOjQwMiwiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIjo0MDQsIi4uL3N5bWJvbC9zeW1ib2xfaW5zdGFuY2VzIjo0MTMsIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiOjQxNCwiLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyIjo0NDAsIi4uL3V0aWwvdXRpbCI6NDUwfV0sMzgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLm49MCx0aGlzLnRpbWVzPVtdfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aW1lcz10aGlzLnRpbWVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lPj0obmV3IERhdGUpLmdldFRpbWUoKX0pLCF0aGlzLnRpbWVzLmxlbmd0aH0sbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVzLnB1c2goe2lkOnRoaXMubix0aW1lOnQrKG5ldyBEYXRlKS5nZXRUaW1lKCl9KSx0aGlzLm4rK30sbi5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKHQpe3RoaXMudGltZXM9dGhpcy50aW1lcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQhPT10fSl9fSx7fV0sMzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5iYXNlPXQsdGhpcy5yZXRpbmE9cy5kZXZpY2VQaXhlbFJhdGlvPjE7dmFyIGU9dGhpcy5yZXRpbmE/IkAyeCI6IiI7by5nZXRKU09OKGwodCxlLCIuanNvbiIpLGZ1bmN0aW9uKHQsZSl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuZGF0YT1lLHRoaXMuaW1nJiZ0aGlzLmZpcmUoImxvYWQiKX0uYmluZCh0aGlzKSksby5nZXRJbWFnZShsKHQsZSwiLnBuZyIpLGZ1bmN0aW9uKHQsZSl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO2Zvcih2YXIgcj1lLmdldERhdGEoKSxuPWUuZGF0YT1uZXcgVWludDhBcnJheShyLmxlbmd0aCksaT0wO2k8ci5sZW5ndGg7aSs9NCl7dmFyIGE9cltpKzNdLzI1NTtuW2krMF09cltpKzBdKmEsbltpKzFdPXJbaSsxXSphLG5baSsyXT1yW2krMl0qYSxuW2krM109cltpKzNdfXRoaXMuaW1nPWUsdGhpcy5kYXRhJiZ0aGlzLmZpcmUoImxvYWQiKX0uYmluZCh0aGlzKSl9ZnVuY3Rpb24gaSgpe312YXIgYT10KCIuLi91dGlsL2V2ZW50ZWQiKSxvPXQoIi4uL3V0aWwvYWpheCIpLHM9dCgiLi4vdXRpbC9icm93c2VyIiksbD10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVNwcml0ZVVSTDtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEpLG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJhc2V9LG4ucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZGF0YXx8IXRoaXMuaW1nKX0sbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7aWYocy5kZXZpY2VQaXhlbFJhdGlvPjEhPT10aGlzLnJldGluYSl7dmFyIHQ9bmV3IG4odGhpcy5iYXNlKTt0Lm9uKCJsb2FkIixmdW5jdGlvbigpe3RoaXMuaW1nPXQuaW1nLHRoaXMuZGF0YT10LmRhdGEsdGhpcy5yZXRpbmE9dC5yZXRpbmF9LmJpbmQodGhpcykpfX0saS5wcm90b3R5cGU9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MCxwaXhlbFJhdGlvOjEsc2RmOiExfSxuLnByb3RvdHlwZS5nZXRTcHJpdGVQb3NpdGlvbj1mdW5jdGlvbih0KXtpZighdGhpcy5sb2FkZWQoKSlyZXR1cm4gbmV3IGk7dmFyIGU9dGhpcy5kYXRhJiZ0aGlzLmRhdGFbdF07cmV0dXJuIGUmJnRoaXMuaW1nP2U6bmV3IGl9fSx7Ii4uL3V0aWwvYWpheCI6NDMzLCIuLi91dGlsL2Jyb3dzZXIiOjQzNCwiLi4vdXRpbC9ldmVudGVkIjo0NDIsIi4uL3V0aWwvbWFwYm94Ijo0NDd9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzY29sb3JwYXJzZXIiKS5wYXJzZUNTU0NvbG9yLGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL3N0eWxlX2Z1bmN0aW9uIiksbz17fTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZihhLmlzRnVuY3Rpb25EZWZpbml0aW9uKGUpKXJldHVybiBpLmV4dGVuZCh7fSxlLHtzdG9wczplLnN0b3BzLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZVswXSx0KGVbMV0pXX0pfSk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZighb1tlXSl7dmFyIHI9bihlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sb3IgIitlKTtvW2VdPVtyWzBdLzI1NSpyWzNdLHJbMV0vMjU1KnJbM10sclsyXS8yNTUqclszXSxyWzNdXX1yZXR1cm4gb1tlXX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sb3IgIitlKX19LHsiLi4vdXRpbC91dGlsIjo0NTAsIi4vc3R5bGVfZnVuY3Rpb24iOjM4OCxjc3Njb2xvcnBhcnNlcjoxMDd9XSwzODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5hbmltYXRpb25Mb29wPWV8fG5ldyBtLHRoaXMuZGlzcGF0Y2hlcj1uZXcgcChyfHwxLHRoaXMpLHRoaXMuc3ByaXRlQXRsYXM9bmV3IGwoMTAyNCwxMDI0KSx0aGlzLmxpbmVBdGxhcz1uZXcgYygyNTYsNTEyKSx0aGlzLl9sYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5fZ3JvdXBzPVtdLHRoaXMuc291cmNlcz17fSx0aGlzLnpvb21IaXN0b3J5PXt9LHUuYmluZEFsbChbIl9mb3J3YXJkU291cmNlRXZlbnQiLCJfZm9yd2FyZFRpbGVFdmVudCIsIl9mb3J3YXJkTGF5ZXJFdmVudCIsIl9yZWRvUGxhY2VtZW50Il0sdGhpcyksdGhpcy5fcmVzZXRVcGRhdGVzKCk7dmFyIG49ZnVuY3Rpb24odCxlKXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7aWYoIXYuZW1pdEVycm9ycyh0aGlzLHYoZSkpKXt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5zdHlsZXNoZWV0PWUsdGhpcy51cGRhdGVDbGFzc2VzKCk7dmFyIHI9ZS5zb3VyY2VzO2Zvcih2YXIgbiBpbiByKXRoaXMuYWRkU291cmNlKG4scltuXSk7ZS5zcHJpdGUmJih0aGlzLnNwcml0ZT1uZXcgbyhlLnNwcml0ZSksdGhpcy5zcHJpdGUub24oImxvYWQiLHRoaXMuZmlyZS5iaW5kKHRoaXMsImNoYW5nZSIpKSksdGhpcy5nbHlwaFNvdXJjZT1uZXcgcyhlLmdseXBocyksdGhpcy5fcmVzb2x2ZSgpLHRoaXMuZmlyZSgibG9hZCIpfX0uYmluZCh0aGlzKTsic3RyaW5nIj09dHlwZW9mIHQ/Zi5nZXRKU09OKGgodCksbik6ZC5mcmFtZShuLmJpbmQodGhpcyxudWxsLHQpKSx0aGlzLm9uKCJzb3VyY2UubG9hZCIsZnVuY3Rpb24odCl7dmFyIGU9dC5zb3VyY2U7aWYoZSYmZS52ZWN0b3JMYXllcklkcylmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKXt2YXIgbj10aGlzLl9sYXllcnNbcl07bi5zb3VyY2U9PT1lLmlkJiZ0aGlzLl92YWxpZGF0ZUxheWVyKG4pfX0pfXZhciBpPXQoIi4uL3V0aWwvZXZlbnRlZCIpLGE9dCgiLi9zdHlsZV9sYXllciIpLG89dCgiLi9pbWFnZV9zcHJpdGUiKSxzPXQoIi4uL3N5bWJvbC9nbHlwaF9zb3VyY2UiKSxsPXQoIi4uL3N5bWJvbC9zcHJpdGVfYXRsYXMiKSxjPXQoIi4uL3JlbmRlci9saW5lX2F0bGFzIiksdT10KCIuLi91dGlsL3V0aWwiKSxmPXQoIi4uL3V0aWwvYWpheCIpLGg9dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVTdHlsZVVSTCxkPXQoIi4uL3V0aWwvYnJvd3NlciIpLHA9dCgiLi4vdXRpbC9kaXNwYXRjaGVyIiksbT10KCIuL2FuaW1hdGlvbl9sb29wIiksdj10KCIuL3ZhbGlkYXRlX3N0eWxlIiksZz10KCIuLi9zb3VyY2Uvc291cmNlIikseT10KCIuLi9zb3VyY2UvcXVlcnlfZmVhdHVyZXMiKSxiPXQoIi4uL3NvdXJjZS9zb3VyY2VfY2FjaGUiKSx4PXQoIi4vc3R5bGVfc3BlYyIpLF89dCgiLi9zdHlsZV9mdW5jdGlvbiIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXUuaW5oZXJpdChpLHtfbG9hZGVkOiExLF92YWxpZGF0ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlc1t0LnNvdXJjZV07dC5zb3VyY2VMYXllciYmZSYmZS52ZWN0b3JMYXllcklkcyYmZS52ZWN0b3JMYXllcklkcy5pbmRleE9mKHQuc291cmNlTGF5ZXIpPT09LTEmJnRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjpuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJyt0LnNvdXJjZUxheWVyKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytlLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJyt0LmlkKyciJyl9KX0sbG9hZGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVzLnNvdXJjZXMpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VzKWlmKCF0aGlzLnNvdXJjZXNbdF0ubG9hZGVkKCkpcmV0dXJuITE7cmV0dXJuISh0aGlzLnNwcml0ZSYmIXRoaXMuc3ByaXRlLmxvYWRlZCgpKX0sX3Jlc29sdmU6ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuX2xheWVycz17fSx0aGlzLl9vcmRlcj10aGlzLnN0eWxlc2hlZXQubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2Zvcih2YXIgcj0wO3I8dGhpcy5zdHlsZXNoZWV0LmxheWVycy5sZW5ndGg7cisrKWU9dGhpcy5zdHlsZXNoZWV0LmxheWVyc1tyXSxlLnJlZnx8KHQ9YS5jcmVhdGUoZSksdGhpcy5fbGF5ZXJzW3QuaWRdPXQsdC5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KSk7Zm9yKHZhciBuPTA7bjx0aGlzLnN0eWxlc2hlZXQubGF5ZXJzLmxlbmd0aDtuKyspaWYoZT10aGlzLnN0eWxlc2hlZXQubGF5ZXJzW25dLGUucmVmKXt2YXIgaT10aGlzLmdldExheWVyKGUucmVmKTt0PWEuY3JlYXRlKGUsaSksdGhpcy5fbGF5ZXJzW3QuaWRdPXQsdC5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KX10aGlzLl9ncm91cExheWVycygpLHRoaXMuX3VwZGF0ZVdvcmtlckxheWVycygpfSxfZ3JvdXBMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLl9ncm91cHM9W107Zm9yKHZhciBlPTA7ZTx0aGlzLl9vcmRlci5sZW5ndGg7KytlKXt2YXIgcj10aGlzLl9sYXllcnNbdGhpcy5fb3JkZXJbZV1dO3QmJnIuc291cmNlPT09dC5zb3VyY2V8fCh0PVtdLHQuc291cmNlPXIuc291cmNlLHRoaXMuX2dyb3Vwcy5wdXNoKHQpKSx0LnB1c2gocil9fSxfdXBkYXRlV29ya2VyTGF5ZXJzOmZ1bmN0aW9uKHQpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QodD8idXBkYXRlIGxheWVycyI6InNldCBsYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSl9LF9zZXJpYWxpemVMYXllcnM6ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9vcmRlcjtmb3IodmFyIGU9W10scj17aW5jbHVkZVJlZlByb3BlcnRpZXM6ITB9LG49MDtuPHQubGVuZ3RoO24rKyllLnB1c2godGhpcy5fbGF5ZXJzW3Rbbl1dLnNlcmlhbGl6ZShyKSk7cmV0dXJuIGV9LF9hcHBseUNsYXNzZXM6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9sb2FkZWQpe3Q9dHx8W10sZT1lfHx7dHJhbnNpdGlvbjohMH07dmFyIHI9dGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb258fHt9LG49dGhpcy5fdXBkYXRlcy5hbGxQYWludFByb3BzP3RoaXMuX2xheWVyczp0aGlzLl91cGRhdGVzLnBhaW50UHJvcHM7Zm9yKHZhciBpIGluIG4pe3ZhciBhPXRoaXMuX2xheWVyc1tpXSxvPXRoaXMuX3VwZGF0ZXMucGFpbnRQcm9wc1tpXTtpZih0aGlzLl91cGRhdGVzLmFsbFBhaW50UHJvcHN8fG8uYWxsKWEudXBkYXRlUGFpbnRUcmFuc2l0aW9ucyh0LGUscix0aGlzLmFuaW1hdGlvbkxvb3ApO2Vsc2UgZm9yKHZhciBzIGluIG8pdGhpcy5fbGF5ZXJzW2ldLnVwZGF0ZVBhaW50VHJhbnNpdGlvbihzLHQsZSxyLHRoaXMuYW5pbWF0aW9uTG9vcCl9fX0sX3JlY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZXMpdGhpcy5zb3VyY2VzW2VdLnVzZWQ9ITE7dGhpcy5fdXBkYXRlWm9vbUhpc3RvcnkodCksdGhpcy5yYXN0ZXJGYWRlRHVyYXRpb249MzAwO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpe3ZhciBuPXRoaXMuX2xheWVyc1tyXTtuLnJlY2FsY3VsYXRlKHQsdGhpcy56b29tSGlzdG9yeSksIW4uaXNIaWRkZW4odCkmJm4uc291cmNlJiYodGhpcy5zb3VyY2VzW24uc291cmNlXS51c2VkPSEwKX1NYXRoLmZsb29yKHRoaXMueikhPT1NYXRoLmZsb29yKHQpJiZ0aGlzLmFuaW1hdGlvbkxvb3Auc2V0KDMwMCksdGhpcy56PXQsdGhpcy5maXJlKCJ6b29tIil9LF91cGRhdGVab29tSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnpvb21IaXN0b3J5O3ZvaWQgMD09PWUubGFzdEludGVnZXJab29tJiYoZS5sYXN0SW50ZWdlclpvb209TWF0aC5mbG9vcih0KSxlLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCxlLmxhc3Rab29tPXQpLE1hdGguZmxvb3IoZS5sYXN0Wm9vbSk8TWF0aC5mbG9vcih0KT8oZS5sYXN0SW50ZWdlclpvb209TWF0aC5mbG9vcih0KSxlLmxhc3RJbnRlZ2VyWm9vbVRpbWU9RGF0ZS5ub3coKSk6TWF0aC5mbG9vcihlLmxhc3Rab29tKT5NYXRoLmZsb29yKHQpJiYoZS5sYXN0SW50ZWdlclpvb209TWF0aC5mbG9vcih0KzEpLGUubGFzdEludGVnZXJab29tVGltZT1EYXRlLm5vdygpKSxlLmxhc3Rab29tPXR9LF9jaGVja0xvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nIil9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLl91cGRhdGVzLmNoYW5nZWQpcmV0dXJuIHRoaXM7aWYodGhpcy5fdXBkYXRlcy5hbGxMYXllcnMpdGhpcy5fZ3JvdXBMYXllcnMoKSx0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMoKTtlbHNle3ZhciByPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZXMubGF5ZXJzKTtyLmxlbmd0aCYmdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHIpfXZhciBuLGk9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlcy5zb3VyY2VzKTtmb3Iobj0wO248aS5sZW5ndGg7bisrKXRoaXMuX3JlbG9hZFNvdXJjZShpW25dKTtmb3Iobj0wO248dGhpcy5fdXBkYXRlcy5ldmVudHMubGVuZ3RoO24rKyl7dmFyIGE9dGhpcy5fdXBkYXRlcy5ldmVudHNbbl07dGhpcy5maXJlKGFbMF0sYVsxXSl9cmV0dXJuIHRoaXMuX2FwcGx5Q2xhc3Nlcyh0LGUpLHRoaXMuX3VwZGF0ZXMuY2hhbmdlZCYmdGhpcy5maXJlKCJjaGFuZ2UiKSx0aGlzLl9yZXNldFVwZGF0ZXMoKSx0aGlzfSxfcmVzZXRVcGRhdGVzOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlcz17ZXZlbnRzOltdLGxheWVyczp7fSxzb3VyY2VzOnt9LHBhaW50UHJvcHM6e319fSxhZGRTb3VyY2U6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlc1t0XSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKGUpKyIuIik7cmV0dXJuWyJ2ZWN0b3IiLCJyYXN0ZXIiLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdLmluZGV4T2YoZS50eXBlKT49MCYmdGhpcy5faGFuZGxlRXJyb3JzKHYuc291cmNlLCJzb3VyY2VzLiIrdCxlKT90aGlzOihlPW5ldyBiKHQsZSx0aGlzLmRpc3BhdGNoZXIpLHRoaXMuc291cmNlc1t0XT1lLGUuc3R5bGU9dGhpcyxlLm9uKCJsb2FkIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vbigiY2hhbmdlIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9uKCJ0aWxlLmFkZCIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub24oInRpbGUubG9hZCIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub24oInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLnJlbW92ZSIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub24oInRpbGUuc3RhdHMiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLHRoaXMuX3VwZGF0ZXMuZXZlbnRzLnB1c2goWyJzb3VyY2UuYWRkIix7c291cmNlOmV9XSksdGhpcy5fdXBkYXRlcy5jaGFuZ2VkPSEwLHRoaXMpfSxyZW1vdmVTb3VyY2U6ZnVuY3Rpb24odCl7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDA9PT10aGlzLnNvdXJjZXNbdF0pdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEIik7dmFyIGU9dGhpcy5zb3VyY2VzW3RdO3JldHVybiBkZWxldGUgdGhpcy5zb3VyY2VzW3RdLGRlbGV0ZSB0aGlzLl91cGRhdGVzLnNvdXJjZXNbdF0sZS5vZmYoImxvYWQiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub2ZmKCJlcnJvciIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vZmYoImNoYW5nZSIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vZmYoInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUubG9hZCIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub2ZmKCJ0aWxlLmVycm9yIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUucmVtb3ZlIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUuc3RhdHMiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLHRoaXMuX3VwZGF0ZXMuZXZlbnRzLnB1c2goWyJzb3VyY2UucmVtb3ZlIix7c291cmNlOmV9XSksdGhpcy5fdXBkYXRlcy5jaGFuZ2VkPSEwLHRoaXN9LGdldFNvdXJjZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VzW3RdJiZ0aGlzLnNvdXJjZXNbdF0uZ2V0U291cmNlKCl9LGFkZExheWVyOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSwhKHQgaW5zdGFuY2VvZiBhKSl7aWYodGhpcy5faGFuZGxlRXJyb3JzKHYubGF5ZXIsImxheWVycy4iK3QuaWQsdCwhMSx7YXJyYXlJbmRleDotMX0pKXJldHVybiB0aGlzO3ZhciByPXQucmVmJiZ0aGlzLmdldExheWVyKHQucmVmKTt0PWEuY3JlYXRlKHQscil9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGF5ZXIodCksdC5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KSx0aGlzLl9sYXllcnNbdC5pZF09dCx0aGlzLl9vcmRlci5zcGxpY2UoZT90aGlzLl9vcmRlci5pbmRleE9mKGUpOjEvMCwwLHQuaWQpLHRoaXMuX3VwZGF0ZXMuYWxsTGF5ZXJzPSEwLHQuc291cmNlJiYodGhpcy5fdXBkYXRlcy5zb3VyY2VzW3Quc291cmNlXT0hMCksdGhpcy5fdXBkYXRlcy5ldmVudHMucHVzaChbImxheWVyLmFkZCIse2xheWVyOnR9XSksdGhpcy51cGRhdGVDbGFzc2VzKHQuaWQpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBlPXRoaXMuX2xheWVyc1t0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gbGF5ZXIgd2l0aCB0aGlzIElEIik7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbcl0ucmVmPT09dCYmdGhpcy5yZW1vdmVMYXllcihyKTtyZXR1cm4gZS5vZmYoImVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCksZGVsZXRlIHRoaXMuX2xheWVyc1t0XSxkZWxldGUgdGhpcy5fdXBkYXRlcy5sYXllcnNbdF0sZGVsZXRlIHRoaXMuX3VwZGF0ZXMucGFpbnRQcm9wc1t0XSx0aGlzLl9vcmRlci5zcGxpY2UodGhpcy5fb3JkZXIuaW5kZXhPZih0KSwxKSx0aGlzLl91cGRhdGVzLmFsbExheWVycz0hMCx0aGlzLl91cGRhdGVzLmV2ZW50cy5wdXNoKFsibGF5ZXIucmVtb3ZlIix7bGF5ZXI6ZX1dKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0UmVmZXJlbnRMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExheWVyKHQpO3JldHVybiBlLnJlZiYmKGU9dGhpcy5nZXRMYXllcihlLnJlZikpLGV9LHNldExheWVyWm9vbVJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KTtyZXR1cm4gbi5taW56b29tPT09ZSYmbi5tYXh6b29tPT09cj90aGlzOihudWxsIT1lJiYobi5taW56b29tPWUpLG51bGwhPXImJihuLm1heHpvb209ciksdGhpcy5fdXBkYXRlTGF5ZXIobikpfSxzZXRGaWx0ZXI6ZnVuY3Rpb24odCxlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KTtyZXR1cm4gbnVsbCE9PWUmJnRoaXMuX2hhbmRsZUVycm9ycyh2LmZpbHRlciwibGF5ZXJzLiIrci5pZCsiLmZpbHRlciIsZSk/dGhpczp1LmRlZXBFcXVhbChyLmZpbHRlcixlKT90aGlzOihyLmZpbHRlcj11LmNsb25lKGUpLHRoaXMuX3VwZGF0ZUxheWVyKHIpKX0sZ2V0RmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJlZmVyZW50TGF5ZXIodCkuZmlsdGVyfSxzZXRMYXlvdXRQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmdldFJlZmVyZW50TGF5ZXIodCk7cmV0dXJuIHUuZGVlcEVxdWFsKG4uZ2V0TGF5b3V0UHJvcGVydHkoZSkscik/dGhpczoobi5zZXRMYXlvdXRQcm9wZXJ0eShlLHIpLHRoaXMuX3VwZGF0ZUxheWVyKG4pKX0sZ2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRSZWZlcmVudExheWVyKHQpLmdldExheW91dFByb3BlcnR5KGUpfSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcih0KTtpZih1LmRlZXBFcXVhbChpLmdldFBhaW50UHJvcGVydHkoZSxuKSxyKSlyZXR1cm4gdGhpczt2YXIgYT1pLmlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudChlKTtyZXR1cm4gaS5zZXRQYWludFByb3BlcnR5KGUscixuKSwhKHImJl8uaXNGdW5jdGlvbkRlZmluaXRpb24ocikmJiIkem9vbSIhPT1yLnByb3BlcnR5JiZ2b2lkIDAhPT1yLnByb3BlcnR5KSYmYXx8KHRoaXMuX3VwZGF0ZXMubGF5ZXJzW3RdPSEwLGkuc291cmNlJiYodGhpcy5fdXBkYXRlcy5zb3VyY2VzW2kuc291cmNlXT0hMCkpLHRoaXMudXBkYXRlQ2xhc3Nlcyh0LGUpfSxnZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5nZXRMYXllcih0KS5nZXRQYWludFByb3BlcnR5KGUscil9LHVwZGF0ZUNsYXNzZXM6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdCl7dmFyIHI9dGhpcy5fdXBkYXRlcy5wYWludFByb3BzO3JbdF18fChyW3RdPXt9KSxyW3RdW2V8fCJhbGwiXT0hMH1lbHNlIHRoaXMuX3VwZGF0ZXMuYWxsUGFpbnRQcm9wcz0hMDtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHUuZmlsdGVyT2JqZWN0KHt2ZXJzaW9uOnRoaXMuc3R5bGVzaGVldC52ZXJzaW9uLG5hbWU6dGhpcy5zdHlsZXNoZWV0Lm5hbWUsbWV0YWRhdGE6dGhpcy5zdHlsZXNoZWV0Lm1ldGFkYXRhLGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnUubWFwT2JqZWN0KHRoaXMuc291cmNlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pLGxheWVyczp0aGlzLl9vcmRlci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0sdGhpcyl9LGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSl9LF91cGRhdGVMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlcy5sYXllcnNbdC5pZF09ITAsdC5zb3VyY2UmJih0aGlzLl91cGRhdGVzLnNvdXJjZXNbdC5zb3VyY2VdPSEwKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpc30sX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX29yZGVyLmxlbmd0aC0xO3I+PTA7ci0tKWZvcih2YXIgbj10aGlzLl9vcmRlcltyXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV1bbl07aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyllLnB1c2goYVtvXSl9cmV0dXJuIGV9LHF1ZXJ5UmVuZGVyZWRGZWF0dXJlczpmdW5jdGlvbih0LGUscixuKXtlJiZlLmZpbHRlciYmdGhpcy5faGFuZGxlRXJyb3JzKHYuZmlsdGVyLCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyIixlLmZpbHRlciwhMCk7dmFyIGk9e307aWYoZSYmZS5sYXllcnMpZm9yKHZhciBhPTA7YTxlLmxheWVycy5sZW5ndGg7YSsrKXt2YXIgbz1lLmxheWVyc1thXTtpW3RoaXMuX2xheWVyc1tvXS5zb3VyY2VdPSEwfXZhciBzPVtdO2Zvcih2YXIgbCBpbiB0aGlzLnNvdXJjZXMpaWYoIWUubGF5ZXJzfHxpW2xdKXt2YXIgYz10aGlzLnNvdXJjZXNbbF0sdT15LnJlbmRlcmVkKGMsdGhpcy5fbGF5ZXJzLHQsZSxyLG4pO3MucHVzaCh1KX1yZXR1cm4gdGhpcy5fZmxhdHRlblJlbmRlcmVkRmVhdHVyZXMocyl9LHF1ZXJ5U291cmNlRmVhdHVyZXM6ZnVuY3Rpb24odCxlKXtlJiZlLmZpbHRlciYmdGhpcy5faGFuZGxlRXJyb3JzKHYuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsZS5maWx0ZXIsITApO3ZhciByPXRoaXMuc291cmNlc1t0XTtyZXR1cm4gcj95LnNvdXJjZShyLGUpOltdfSxhZGRTb3VyY2VUeXBlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZy5nZXRUeXBlKHQpP3IobmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCAiJyt0KyciIGFscmVhZHkgZXhpc3RzLicpKTooZy5zZXRUeXBlKHQsZSksZS53b3JrZXJTb3VyY2VVUkw/dm9pZCB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkIHdvcmtlciBzb3VyY2UiLHtuYW1lOnQsdXJsOmUud29ya2VyU291cmNlVVJMfSxyKTpyKG51bGwsbnVsbCkpfSxfaGFuZGxlRXJyb3JzOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bj92LnRocm93RXJyb3JzOnYuZW1pdEVycm9ycyxvPXQuY2FsbCh2LHUuZXh0ZW5kKHtrZXk6ZSxzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOnIsc3R5bGVTcGVjOnh9LGkpKTtyZXR1cm4gYS5jYWxsKHYsdGhpcyxvKX0sX3JlbW92ZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKX0sX3JlbG9hZFNvdXJjZTpmdW5jdGlvbih0KXt0aGlzLnNvdXJjZXNbdF0ucmVsb2FkKCl9LF91cGRhdGVTb3VyY2VzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZXMpdGhpcy5zb3VyY2VzW2VdLnVwZGF0ZSh0KX0sX3JlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VzKXRoaXMuc291cmNlc1t0XS5yZWRvUGxhY2VtZW50JiZ0aGlzLnNvdXJjZXNbdF0ucmVkb1BsYWNlbWVudCgpfSxfZm9yd2FyZFNvdXJjZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgic291cmNlLiIrdC50eXBlLHUuZXh0ZW5kKHtzb3VyY2U6dC50YXJnZXQuZ2V0U291cmNlKCl9LHQpKX0sX2ZvcndhcmRUaWxlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSx1LmV4dGVuZCh7c291cmNlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkTGF5ZXJFdmVudDpmdW5jdGlvbih0KXt0aGlzLmZpcmUoImxheWVyLiIrdC50eXBlLHUuZXh0ZW5kKHtsYXllcjp7aWQ6dC50YXJnZXQuaWR9fSx0KSl9LCJnZXQgc3ByaXRlIGpzb24iOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zcHJpdGU7ci5sb2FkZWQoKT9lKG51bGwse3Nwcml0ZTpyLmRhdGEscmV0aW5hOnIucmV0aW5hfSk6ci5vbigibG9hZCIsZnVuY3Rpb24oKXtlKG51bGwse3Nwcml0ZTpyLmRhdGEscmV0aW5hOnIucmV0aW5hfSl9KX0sImdldCBpY29ucyI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNwcml0ZSxuPXRoaXMuc3ByaXRlQXRsYXM7ci5sb2FkZWQoKT8obi5zZXRTcHJpdGUociksbi5hZGRJY29ucyh0Lmljb25zLGUpKTpyLm9uKCJsb2FkIixmdW5jdGlvbigpe24uc2V0U3ByaXRlKHIpLG4uYWRkSWNvbnModC5pY29ucyxlKX0pfSwiZ2V0IGdseXBocyI6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscixuKXt0JiZjb25zb2xlLmVycm9yKHQpLGFbbl09ciwwPT09LS1pJiZlKG51bGwsYSl9dmFyIG49dC5zdGFja3MsaT1PYmplY3Qua2V5cyhuKS5sZW5ndGgsYT17fTtmb3IodmFyIG8gaW4gbil0aGlzLmdseXBoU291cmNlLmdldFNpbXBsZUdseXBocyhvLG5bb10sdC51aWQscil9fSl9LHsiLi4vcmVuZGVyL2xpbmVfYXRsYXMiOjM2MiwiLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzIjozNzIsIi4uL3NvdXJjZS9zb3VyY2UiOjM3NCwiLi4vc291cmNlL3NvdXJjZV9jYWNoZSI6Mzc1LCIuLi9zeW1ib2wvZ2x5cGhfc291cmNlIjo0MDcsIi4uL3N5bWJvbC9zcHJpdGVfYXRsYXMiOjQxMiwiLi4vdXRpbC9hamF4Ijo0MzMsIi4uL3V0aWwvYnJvd3NlciI6NDM0LCIuLi91dGlsL2Rpc3BhdGNoZXIiOjQ0MSwiLi4vdXRpbC9ldmVudGVkIjo0NDIsIi4uL3V0aWwvbWFwYm94Ijo0NDcsIi4uL3V0aWwvdXRpbCI6NDUwLCIuL2FuaW1hdGlvbl9sb29wIjozODMsIi4vaW1hZ2Vfc3ByaXRlIjozODQsIi4vc3R5bGVfZnVuY3Rpb24iOjM4OCwiLi9zdHlsZV9sYXllciI6Mzg5LCIuL3N0eWxlX3NwZWMiOjM5NiwiLi92YWxpZGF0ZV9zdHlsZSI6Mzk4fV0sMzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnZhbHVlPXMuY2xvbmUoZSksdGhpcy5pc0Z1bmN0aW9uPWEuaXNGdW5jdGlvbkRlZmluaXRpb24oZSksdGhpcy5qc29uPUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpO3ZhciByPSJjb2xvciI9PT10LnR5cGUmJnRoaXMudmFsdWU/byh0aGlzLnZhbHVlKTplO2lmKHRoaXMuY2FsY3VsYXRlPWFbdC5mdW5jdGlvbnx8InBpZWNld2lzZS1jb25zdGFudCJdKHIpLHRoaXMuaXNGZWF0dXJlQ29uc3RhbnQ9dGhpcy5jYWxjdWxhdGUuaXNGZWF0dXJlQ29uc3RhbnQsdGhpcy5pc1pvb21Db25zdGFudD10aGlzLmNhbGN1bGF0ZS5pc1pvb21Db25zdGFudCwicGllY2V3aXNlLWNvbnN0YW50Ij09PXQuZnVuY3Rpb24mJnQudHJhbnNpdGlvbiYmKHRoaXMuY2FsY3VsYXRlPWkodGhpcy5jYWxjdWxhdGUpKSwhdGhpcy5pc0ZlYXR1cmVDb25zdGFudCYmIXRoaXMuaXNab29tQ29uc3RhbnQpe3RoaXMuc3RvcFpvb21MZXZlbHM9W107Zm9yKHZhciBuPVtdLGw9dGhpcy52YWx1ZS5zdG9wcyxjPTA7Yzx0aGlzLnZhbHVlLnN0b3BzLmxlbmd0aDtjKyspe3ZhciB1PWxbY11bMF0uem9vbTt0aGlzLnN0b3Bab29tTGV2ZWxzLmluZGV4T2YodSk8MCYmKHRoaXMuc3RvcFpvb21MZXZlbHMucHVzaCh1KSxuLnB1c2goW3Usbi5sZW5ndGhdKSl9dGhpcy5jYWxjdWxhdGVJbnRlcnBvbGF0aW9uVD1hLmludGVycG9sYXRlZCh7c3RvcHM6bixiYXNlOmUuYmFzZX0pfX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLGksYSxvPWUuem9vbSxzPWUuem9vbUhpc3RvcnksbD1lLmR1cmF0aW9uLGM9byUxLHU9TWF0aC5taW4oKERhdGUubm93KCktcy5sYXN0SW50ZWdlclpvb21UaW1lKS9sLDEpLGY9MTtyZXR1cm4gbz5zLmxhc3RJbnRlZ2VyWm9vbT8obj1jKygxLWMpKnUsZio9MixpPXQoe3pvb206by0xfSxyKSxhPXQoe3pvb206b30scikpOihuPTEtKDEtdSkqYyxhPXQoe3pvb206b30sciksaT10KHt6b29tOm8rMX0sciksZi89Miksdm9pZCAwPT09aXx8dm9pZCAwPT09YT92b2lkIDA6e2Zyb206aSxmcm9tU2NhbGU6Zix0bzphLHRvU2NhbGU6MSx0Om59fX12YXIgYT10KCIuL3N0eWxlX2Z1bmN0aW9uIiksbz10KCIuL3BhcnNlX2NvbG9yIikscz10KCIuLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bn0seyIuLi91dGlsL3V0aWwiOjQ1MCwiLi9wYXJzZV9jb2xvciI6Mzg1LCIuL3N0eWxlX2Z1bmN0aW9uIjozODh9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsLWZ1bmN0aW9uIik7ci5pbnRlcnBvbGF0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnRlcnBvbGF0ZWQodCkscj1mdW5jdGlvbih0LHIpe3JldHVybiBlKHQmJnQuem9vbSxyfHx7fSl9O3JldHVybiByLmlzRmVhdHVyZUNvbnN0YW50PWUuaXNGZWF0dXJlQ29uc3RhbnQsci5pc1pvb21Db25zdGFudD1lLmlzWm9vbUNvbnN0YW50LHJ9LHJbInBpZWNld2lzZS1jb25zdGFudCJdPWZ1bmN0aW9uKHQpe3ZhciBlPW5bInBpZWNld2lzZS1jb25zdGFudCJdKHQpLHI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0JiZ0Lnpvb20scnx8e30pfTtyZXR1cm4gci5pc0ZlYXR1cmVDb25zdGFudD1lLmlzRmVhdHVyZUNvbnN0YW50LHIuaXNab29tQ29uc3RhbnQ9ZS5pc1pvb21Db25zdGFudCxyfSxyLmlzRnVuY3Rpb25EZWZpbml0aW9uPW4uaXNGdW5jdGlvbkRlZmluaXRpb259LHsibWFwYm94LWdsLWZ1bmN0aW9uIjozMTB9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc2V0KHQsZSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC52YWx1ZX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4vc3R5bGVfdHJhbnNpdGlvbiIpLHM9dCgiLi9zdHlsZV9kZWNsYXJhdGlvbiIpLGw9dCgiLi9zdHlsZV9zcGVjIiksYz10KCIuL3ZhbGlkYXRlX3N0eWxlIiksdT10KCIuL3BhcnNlX2NvbG9yIiksZj10KCIuLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bjtuLmNyZWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcoe2JhY2tncm91bmQ6dCgiLi9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyIiksY2lyY2xlOnQoIi4vc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyIiksZmlsbDp0KCIuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXIiKSxsaW5lOnQoIi4vc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllciIpLHJhc3Rlcjp0KCIuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllciIpLHN5bWJvbDp0KCIuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllciIpfVsocnx8ZSkudHlwZV0pKGUscil9LG4ucHJvdG90eXBlPWEuaW5oZXJpdChmLHtzZXQ6ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5yZWY9dC5yZWYsdGhpcy5tZXRhZGF0YT10Lm1ldGFkYXRhLHRoaXMudHlwZT0oZXx8dCkudHlwZSx0aGlzLnNvdXJjZT0oZXx8dCkuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9KGV8fHQpWyJzb3VyY2UtbGF5ZXIiXSx0aGlzLm1pbnpvb209KGV8fHQpLm1pbnpvb20sdGhpcy5tYXh6b29tPShlfHx0KS5tYXh6b29tLHRoaXMuZmlsdGVyPShlfHx0KS5maWx0ZXIsdGhpcy5wYWludD17fSx0aGlzLmxheW91dD17fSx0aGlzLl9wYWludFNwZWNpZmljYXRpb25zPWxbInBhaW50XyIrdGhpcy50eXBlXSx0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucz1sWyJsYXlvdXRfIit0aGlzLnR5cGVdLHRoaXMuX3BhaW50VHJhbnNpdGlvbnM9e30sdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9ucz17fSx0aGlzLl9wYWludERlY2xhcmF0aW9ucz17fSx0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnM9e30sdGhpcy5fbGF5b3V0RnVuY3Rpb25zPXt9O3ZhciByLG47Zm9yKHZhciBpIGluIHQpe3ZhciBhPWkubWF0Y2goL15wYWludCg/OlwuKC4qKSk/JC8pO2lmKGEpe3ZhciBvPWFbMV18fCIiO2ZvcihyIGluIHRbaV0pdGhpcy5zZXRQYWludFByb3BlcnR5KHIsdFtpXVtyXSxvKX19aWYodGhpcy5yZWYpdGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zPWUuX2xheW91dERlY2xhcmF0aW9ucztlbHNlIGZvcihuIGluIHQubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkobix0LmxheW91dFtuXSk7Zm9yKHIgaW4gdGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9ucyl0aGlzLnBhaW50W3JdPXRoaXMuZ2V0UGFpbnRWYWx1ZShyKTtmb3IobiBpbiB0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucyl0aGlzLl91cGRhdGVMYXlvdXRWYWx1ZShuKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKWRlbGV0ZSB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07ZWxzZXt2YXIgcj0ibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3Q7aWYodGhpcy5faGFuZGxlRXJyb3JzKGMubGF5b3V0UHJvcGVydHkscix0LGUpKXJldHVybjt0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF09bmV3IHModGhpcy5fbGF5b3V0U3BlY2lmaWNhdGlvbnNbdF0sZSl9dGhpcy5fdXBkYXRlTGF5b3V0VmFsdWUodCl9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF0mJnRoaXMuX2xheW91dERlY2xhcmF0aW9uc1t0XS52YWx1ZX0sZ2V0TGF5b3V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2xheW91dFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zW3RdO3JldHVybiBpP2kuY2FsY3VsYXRlKGUscik6bi5kZWZhdWx0fSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsocj8nWyJwYWludC4nK3IrJyJdLic6Ii5wYWludC4iKSt0O2lmKGEuZW5kc1dpdGgodCwiLXRyYW5zaXRpb24iKSlpZih0aGlzLl9wYWludFRyYW5zaXRpb25PcHRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50VHJhbnNpdGlvbk9wdGlvbnNbcnx8IiJdPXt9KSxudWxsPT09ZXx8dm9pZCAwPT09ZSlkZWxldGUgdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF07ZWxzZXtpZih0aGlzLl9oYW5kbGVFcnJvcnMoYy5wYWludFByb3BlcnR5LG4sdCxlKSlyZXR1cm47dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF09ZX1lbHNlIGlmKHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXT17fSksbnVsbD09PWV8fHZvaWQgMD09PWUpZGVsZXRlIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXVt0XTtlbHNle2lmKHRoaXMuX2hhbmRsZUVycm9ycyhjLnBhaW50UHJvcGVydHksbix0LGUpKXJldHVybjt0aGlzLl9wYWludERlY2xhcmF0aW9uc1tyfHwiIl1bdF09bmV3IHModGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9uc1t0XSxlKX19LGdldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwiIixhLmVuZHNXaXRoKHQsIi10cmFuc2l0aW9uIik/dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXSYmdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXVt0XTp0aGlzLl9wYWludERlY2xhcmF0aW9uc1tlXSYmdGhpcy5fcGFpbnREZWNsYXJhdGlvbnNbZV1bdF0mJnRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2VdW3RdLnZhbHVlfSxnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gaT9pLmNhbGN1bGF0ZShlLHIpOiJjb2xvciI9PT1uLnR5cGUmJm4uZGVmYXVsdD91KG4uZGVmYXVsdCk6bi5kZWZhdWx0fSxnZXRQYWludFZhbHVlU3RvcFpvb21MZXZlbHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gZT9lLmRlY2xhcmF0aW9uLnN0b3Bab29tTGV2ZWxzOltdfSxnZXRQYWludEludGVycG9sYXRpb25UOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhaW50VHJhbnNpdGlvbnNbdF0uZGVjbGFyYXRpb24uY2FsY3VsYXRlSW50ZXJwb2xhdGlvblQoe3pvb206ZX0pfSxpc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4hZXx8ZS5kZWNsYXJhdGlvbi5pc0ZlYXR1cmVDb25zdGFudH0saXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07cmV0dXJuIWV8fGUuaXNGZWF0dXJlQ29uc3RhbnR9LGlzUGFpbnRWYWx1ZVpvb21Db25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdO3JldHVybiFlfHxlLmRlY2xhcmF0aW9uLmlzWm9vbUNvbnN0YW50fSxpc0hpZGRlbjpmdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8KCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8KCJub25lIj09PXRoaXMubGF5b3V0LnZpc2liaWxpdHl8fDA9PT10aGlzLnBhaW50W3RoaXMudHlwZSsiLW9wYWNpdHkiXSkpfSx1cGRhdGVQYWludFRyYW5zaXRpb25zOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1hLmV4dGVuZCh7fSx0aGlzLl9wYWludERlY2xhcmF0aW9uc1siIl0pLG89MDtvPHQubGVuZ3RoO28rKylhLmV4dGVuZChpLHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3Rbb11dKTt2YXIgcztmb3IocyBpbiBpKXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbihzLGlbc10sZSxyLG4pO2ZvcihzIGluIHRoaXMuX3BhaW50VHJhbnNpdGlvbnMpcyBpbiBpfHx0aGlzLl9hcHBseVBhaW50RGVjbGFyYXRpb24ocyxudWxsLGUscixuKX0sdXBkYXRlUGFpbnRUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zWyIiXVt0XSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2Vbb11dO3MmJnNbdF0mJihhPXNbdF0pfXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbih0LGEscixuLGkpfSxyZWNhbGN1bGF0ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLl9wYWludFRyYW5zaXRpb25zKXRoaXMucGFpbnRbcl09dGhpcy5nZXRQYWludFZhbHVlKHIse3pvb206dCx6b29tSGlzdG9yeTplfSk7Zm9yKHZhciBuIGluIHRoaXMuX2xheW91dEZ1bmN0aW9ucyl0aGlzLmxheW91dFtuXT10aGlzLmdldExheW91dFZhbHVlKG4se3pvb206dCx6b29tSGlzdG9yeTplfSl9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgZT17aWQ6dGhpcy5pZCxyZWY6dGhpcy5yZWYsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbX07Zm9yKHZhciByIGluIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zKXtlWyIiPT09cj8icGFpbnQiOiJwYWludC4iK3JdPWEubWFwT2JqZWN0KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3JdLGkpfXJldHVybighdGhpcy5yZWZ8fHQmJnQuaW5jbHVkZVJlZlByb3BlcnRpZXMpJiZhLmV4dGVuZChlLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OmEubWFwT2JqZWN0KHRoaXMuX2xheW91dERlY2xhcmF0aW9ucyxpKX0pLGEuZmlsdGVyT2JqZWN0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09dCYmISgibGF5b3V0Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSl9LF9hcHBseVBhaW50RGVjbGFyYXRpb246ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbD1yLnRyYW5zaXRpb24/dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTp2b2lkIDAsYz10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdO2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1lfHwoZT1uZXcgcyhjLGMuZGVmYXVsdCkpLCFsfHxsLmRlY2xhcmF0aW9uLmpzb24hPT1lLmpzb24pe3ZhciB1PWEuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sbix0aGlzLmdldFBhaW50UHJvcGVydHkodCsiLXRyYW5zaXRpb24iKSksZj10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdPW5ldyBvKGMsZSxsLHUpO2YuaW5zdGFudCgpfHwoZi5sb29wSUQ9aS5zZXQoZi5lbmRUaW1lLURhdGUubm93KCkpKSxsJiZpLmNhbmNlbChsLmxvb3BJRCl9fSxfdXBkYXRlTGF5b3V0VmFsdWU6ZnVuY3Rpb24odCl7CnZhciBlPXRoaXMuX2xheW91dERlY2xhcmF0aW9uc1t0XTtlJiZlLmlzRnVuY3Rpb24/dGhpcy5fbGF5b3V0RnVuY3Rpb25zW3RdPSEwOihkZWxldGUgdGhpcy5fbGF5b3V0RnVuY3Rpb25zW3RdLHRoaXMubGF5b3V0W3RdPXRoaXMuZ2V0TGF5b3V0VmFsdWUodCkpfSxfaGFuZGxlRXJyb3JzOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBjLmVtaXRFcnJvcnModGhpcyx0LmNhbGwoYyx7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpsLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfX0pKX19KX0seyIuLi91dGlsL2V2ZW50ZWQiOjQ0MiwiLi4vdXRpbC91dGlsIjo0NTAsIi4vcGFyc2VfY29sb3IiOjM4NSwiLi9zdHlsZV9kZWNsYXJhdGlvbiI6Mzg3LCIuL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXIiOjM5MCwiLi9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXIiOjM5MSwiLi9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyIjozOTIsIi4vc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllciI6MzkzLCIuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllciI6Mzk0LCIuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllciI6Mzk1LCIuL3N0eWxlX3NwZWMiOjM5NiwiLi9zdHlsZV90cmFuc2l0aW9uIjozOTcsIi4vdmFsaWRhdGVfc3R5bGUiOjM5OH1dLDM5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHt9KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ1MCwiLi4vc3R5bGVfbGF5ZXIiOjM4OX1dLDM5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHt9KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ1MCwiLi4vc3R5bGVfbGF5ZXIiOjM4OX1dLDM5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO24ucHJvdG90eXBlPWkuaW5oZXJpdChhLHtnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuZ2V0UGFpbnRWYWx1ZS5jYWxsKHRoaXMsImZpbGwtY29sb3IiLGUscik6YS5wcm90b3R5cGUuZ2V0UGFpbnRWYWx1ZS5jYWxsKHRoaXMsdCxlLHIpfSxnZXRQYWludFZhbHVlU3RvcFpvb21MZXZlbHM6ZnVuY3Rpb24odCl7cmV0dXJuImZpbGwtb3V0bGluZS1jb2xvciI9PT10JiZ2b2lkIDA9PT10aGlzLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpP2EucHJvdG90eXBlLmdldFBhaW50VmFsdWVTdG9wWm9vbUxldmVscy5jYWxsKHRoaXMsImZpbGwtY29sb3IiKTphLnByb3RvdHlwZS5nZXRQYWludFZhbHVlU3RvcFpvb21MZXZlbHMuY2FsbCh0aGlzLGFyZ3VtZW50cyl9LGdldFBhaW50SW50ZXJwb2xhdGlvblQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuZ2V0UGFpbnRJbnRlcnBvbGF0aW9uVC5jYWxsKHRoaXMsImZpbGwtY29sb3IiLGUpOmEucHJvdG90eXBlLmdldFBhaW50SW50ZXJwb2xhdGlvblQuY2FsbCh0aGlzLHQsZSl9LGlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudDpmdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50LmNhbGwodGhpcywiZmlsbC1jb2xvciIpOmEucHJvdG90eXBlLmlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudC5jYWxsKHRoaXMsdCl9LGlzUGFpbnRWYWx1ZVpvb21Db25zdGFudDpmdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50LmNhbGwodGhpcywiZmlsbC1jb2xvciIpOmEucHJvdG90eXBlLmlzUGFpbnRWYWx1ZVpvb21Db25zdGFudC5jYWxsKHRoaXMsdCl9fSksZS5leHBvcnRzPW59LHsiLi4vLi4vdXRpbC91dGlsIjo0NTAsIi4uL3N0eWxlX2xheWVyIjozODl9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uLy4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vc3R5bGVfbGF5ZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7Z2V0UGFpbnRWYWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49YS5wcm90b3R5cGUuZ2V0UGFpbnRWYWx1ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobiYmImxpbmUtZGFzaGFycmF5Ij09PXQpe3ZhciBpPU1hdGguZmxvb3IoZS56b29tKTt0aGlzLl9mbG9vcmVkWm9vbSE9PWkmJih0aGlzLl9mbG9vcmVkWm9vbT1pLHRoaXMuX2Zsb29yZWRMaW5lV2lkdGg9dGhpcy5nZXRQYWludFZhbHVlKCJsaW5lLXdpZHRoIixlLHIpKSxuLmZyb21TY2FsZSo9dGhpcy5fZmxvb3JlZExpbmVXaWR0aCxuLnRvU2NhbGUqPXRoaXMuX2Zsb29yZWRMaW5lV2lkdGh9cmV0dXJuIG59fSl9LHsiLi4vLi4vdXRpbC91dGlsIjo0NTAsIi4uL3N0eWxlX2xheWVyIjozODl9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uLy4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vc3R5bGVfbGF5ZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7fSl9LHsiLi4vLi4vdXRpbC91dGlsIjo0NTAsIi4uL3N0eWxlX2xheWVyIjozODl9XSwzOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uLy4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vc3R5bGVfbGF5ZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7aXNIaWRkZW46ZnVuY3Rpb24oKXtpZihhLnByb3RvdHlwZS5pc0hpZGRlbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITA7dmFyIHQ9MD09PXRoaXMucGFpbnRbInRleHQtb3BhY2l0eSJdfHwhdGhpcy5sYXlvdXRbInRleHQtZmllbGQiXSxlPTA9PT10aGlzLnBhaW50WyJpY29uLW9wYWNpdHkiXXx8IXRoaXMubGF5b3V0WyJpY29uLWltYWdlIl07cmV0dXJuISghdHx8IWUpfSxnZXRMYXlvdXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuKCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIhPT10fHwibGluZSIhPT10aGlzLmdldExheW91dFZhbHVlKCJzeW1ib2wtcGxhY2VtZW50IixlLHIpfHx0aGlzLmdldExheW91dFByb3BlcnR5KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSYmKCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIhPT10fHwibGluZSIhPT10aGlzLmdldExheW91dFZhbHVlKCJzeW1ib2wtcGxhY2VtZW50IixlLHIpfHx0aGlzLmdldExheW91dFByb3BlcnR5KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpKT8idGV4dC1waXRjaC1hbGlnbm1lbnQiIT09dHx8dGhpcy5nZXRMYXlvdXRQcm9wZXJ0eSgidGV4dC1waXRjaC1hbGlnbm1lbnQiKT9hLnByb3RvdHlwZS5nZXRMYXlvdXRWYWx1ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5nZXRMYXlvdXRWYWx1ZSgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKToibWFwIn19KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ1MCwiLi4vc3R5bGVfbGF5ZXIiOjM4OX1dLDM5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgibWFwYm94LWdsLXN0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdC5taW4iKX0seyJtYXBib3gtZ2wtc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0Lm1pbiI6MzMzfV0sMzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5kZWNsYXJhdGlvbj1lLHRoaXMuc3RhcnRUaW1lPXRoaXMuZW5kVGltZT0obmV3IERhdGUpLmdldFRpbWUoKSwicGllY2V3aXNlLWNvbnN0YW50Ij09PXQuZnVuY3Rpb24mJnQudHJhbnNpdGlvbj90aGlzLmludGVycD1pOnRoaXMuaW50ZXJwPW9bdC50eXBlXSx0aGlzLm9sZFRyYW5zaXRpb249cix0aGlzLmR1cmF0aW9uPW4uZHVyYXRpb258fDAsdGhpcy5kZWxheT1uLmRlbGF5fHwwLHRoaXMuaW5zdGFudCgpfHwodGhpcy5lbmRUaW1lPXRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb24rdGhpcy5kZWxheSx0aGlzLmVhc2U9YS5lYXNlQ3ViaWNJbk91dCksciYmci5lbmRUaW1lPD10aGlzLnN0YXJ0VGltZSYmZGVsZXRlIHIub2xkVHJhbnNpdGlvbn1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09KHQmJnQudG8pfHx2b2lkIDA9PT0oZSYmZS50byk/dm9pZCAwOntmcm9tOnQudG8sZnJvbVNjYWxlOnQudG9TY2FsZSx0bzplLnRvLHRvU2NhbGU6ZS50b1NjYWxlLHQ6cn19dmFyIGE9dCgiLi4vdXRpbC91dGlsIiksbz10KCIuLi91dGlsL2ludGVycG9sYXRlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuaW5zdGFudD1mdW5jdGlvbigpe3JldHVybiF0aGlzLm9sZFRyYW5zaXRpb258fCF0aGlzLmludGVycHx8MD09PXRoaXMuZHVyYXRpb24mJjA9PT10aGlzLmRlbGF5fSxuLnByb3RvdHlwZS5jYWxjdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRlY2xhcmF0aW9uLmNhbGN1bGF0ZShhLmV4dGVuZCh7fSx0LHtkdXJhdGlvbjp0aGlzLmR1cmF0aW9ufSksZSk7aWYodGhpcy5pbnN0YW50KCkpcmV0dXJuIHI7dmFyIG49dC50aW1lfHxEYXRlLm5vdygpO2lmKG48dGhpcy5lbmRUaW1lKXt2YXIgaT10aGlzLm9sZFRyYW5zaXRpb24uY2FsY3VsYXRlKGEuZXh0ZW5kKHt9LHQse3RpbWU6dGhpcy5zdGFydFRpbWV9KSxlKSxvPXRoaXMuZWFzZSgobi10aGlzLnN0YXJ0VGltZS10aGlzLmRlbGF5KS90aGlzLmR1cmF0aW9uKTtyPXRoaXMuaW50ZXJwKGkscixvKX1yZXR1cm4gcn19LHsiLi4vdXRpbC9pbnRlcnBvbGF0ZSI6NDQ0LCIuLi91dGlsL3V0aWwiOjQ1MH1dLDM5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgibWFwYm94LWdsLXN0eWxlLXNwZWMvbGliL3ZhbGlkYXRlX3N0eWxlLm1pbiIpLGUuZXhwb3J0cy5lbWl0RXJyb3JzPWZ1bmN0aW9uKHQsZSl7aWYoZSYmZS5sZW5ndGgpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQuZmlyZSgiZXJyb3IiLHtlcnJvcjpuZXcgRXJyb3IoZVtyXS5tZXNzYWdlKX0pO3JldHVybiEwfXJldHVybiExfSxlLmV4cG9ydHMudGhyb3dFcnJvcnM9ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRocm93IG5ldyBFcnJvcihlW3JdLm1lc3NhZ2UpfX0seyJtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluIjozMzJ9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLmFuZ2xlPXIsdm9pZCAwIT09biYmKHRoaXMuc2VnbWVudD1uKX12YXIgaT10KCJwb2ludC1nZW9tZXRyeSIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfX0seyJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbby0xXSxmPXRbb10saD10W28rMV07aWYoIWgpcmV0dXJuITE7dmFyIGQ9dS5hbmdsZVRvKGYpLWYuYW5nbGVUbyhoKTtmb3IoZD1NYXRoLmFicygoZCszKk1hdGguUEkpJSgyKk1hdGguUEkpLU1hdGguUEkpLGwucHVzaCh7ZGlzdGFuY2U6cyxhbmdsZURlbHRhOmR9KSxjKz1kO3MtbFswXS5kaXN0YW5jZT5uOyljLT1sLnNoaWZ0KCkuYW5nbGVEZWx0YTtpZihjPmkpcmV0dXJuITE7bysrLHMrPWYuZGlzdChoKX1yZXR1cm4hMH1lLmV4cG9ydHM9bn0se31dLDQwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGwsYz10W3NdLHU9MDt1PGMubGVuZ3RoLTE7dSsrKXt2YXIgZj1jW3VdLGg9Y1t1KzFdO2YueDxlJiZoLng8ZXx8KGYueDxlP2Y9bmV3IGkoZSxmLnkrKGgueS1mLnkpKigoZS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueDxlJiYoaD1uZXcgaShlLGYueSsoaC55LWYueSkqKChlLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCkpLGYueTxyJiZoLnk8cnx8KGYueTxyP2Y9bmV3IGkoZi54KyhoLngtZi54KSooKHItZi55KS8oaC55LWYueSkpLHIpLl9yb3VuZCgpOmgueTxyJiYoaD1uZXcgaShmLngrKGgueC1mLngpKigoci1mLnkpLyhoLnktZi55KSkscikuX3JvdW5kKCkpLGYueD49biYmaC54Pj1ufHwoZi54Pj1uP2Y9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueD49biYmKGg9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk+PWEmJmgueT49YXx8KGYueT49YT9mPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKTpoLnk+PWEmJihoPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKSksbCYmZi5lcXVhbHMobFtsLmxlbmd0aC0xXSl8fChsPVtmXSxvLnB1c2gobCkpLGwucHVzaChoKSkpKSl9cmV0dXJuIG99dmFyIGk9dCgicG9pbnQtZ2VvbWV0cnkiKTtlLmV4cG9ydHM9bn0seyJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz1lLmV4cG9ydHM9bmV3IG4oe21lbWJlcnM6W3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFkifSx7dHlwZToiSW50MTYiLG5hbWU6IngxIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDIifSx7dHlwZToiSW50MTYiLG5hbWU6InkyIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6Im1heFNjYWxlIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJiYm94MCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYmJveDEifSx7dHlwZToiSW50MTYiLG5hbWU6ImJib3gyIn0se3R5cGU6IkludDE2IixuYW1lOiJiYm94MyJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJwbGFjZW1lbnRTY2FsZSJ9XX0pO2kuZXh0ZW5kQWxsKG8ucHJvdG90eXBlLlN0cnVjdFR5cGUucHJvdG90eXBlLHtnZXQgYW5jaG9yUG9pbnQoKXtyZXR1cm4gbmV3IGEodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0NDgsIi4uL3V0aWwvdXRpbCI6NDUwLCJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1vLnRvcCpzLWwsaD1vLmJvdHRvbSpzK2wsZD1vLmxlZnQqcy1sLHA9by5yaWdodCpzK2w7aWYodGhpcy5ib3hTdGFydEluZGV4PXQubGVuZ3RoLGMpe3ZhciBtPWgtZix2PXAtZDtpZihtPjApaWYobT1NYXRoLm1heCgxMCpzLG0pLHUpe3ZhciBnPWVbci5zZWdtZW50KzFdLnN1YihlW3Iuc2VnbWVudF0pLl91bml0KCkuX211bHQodikseT1bci5zdWIoZyksci5hZGQoZyldO3RoaXMuX2FkZExpbmVDb2xsaXNpb25Cb3hlcyh0LHksciwwLHYsbSxuLGksYSl9ZWxzZSB0aGlzLl9hZGRMaW5lQ29sbGlzaW9uQm94ZXModCxlLHIsci5zZWdtZW50LHYsbSxuLGksYSl9ZWxzZSB0LmVtcGxhY2VCYWNrKHIueCxyLnksZCxmLHAsaCwxLzAsbixpLGEsMCwwLDAsMCwwKTt0aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9hZGRMaW5lQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWEvMix1PU1hdGguZmxvb3IoaS9jKSxmPS1hLzIsaD10aGlzLmJveGVzLGQ9cixwPW4rMSxtPWY7ZG97aWYoLS1wPDApcmV0dXJuIGg7bS09ZVtwXS5kaXN0KGQpLGQ9ZVtwXX13aGlsZShtPi1pLzIpO2Zvcih2YXIgdj1lW3BdLmRpc3QoZVtwKzFdKSxnPTA7Zzx1O2crKyl7Zm9yKHZhciB5PS1pLzIrZypjO20rdjx5Oyl7aWYobSs9diwrK3ArMT49ZS5sZW5ndGgpcmV0dXJuIGg7dj1lW3BdLmRpc3QoZVtwKzFdKX12YXIgYj15LW0seD1lW3BdLF89ZVtwKzFdLHc9Xy5zdWIoeCkuX3VuaXQoKS5fbXVsdChiKS5fYWRkKHgpLl9yb3VuZCgpLE09TWF0aC5tYXgoTWF0aC5hYnMoeS1mKS1jLzIsMCksVD1pLzIvTTt0LmVtcGxhY2VCYWNrKHcueCx3LnksLWEvMiwtYS8yLGEvMixhLzIsVCxvLHMsbCwwLDAsMCwwLDApfXJldHVybiBofX0se31dLDQwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBuPXQ7cj1lLHQ9bi5hbmdsZSxlPW4ucGl0Y2gsdGhpcy5ncmlkPW5ldyBvKG4uZ3JpZCksdGhpcy5pZ25vcmVkR3JpZD1uZXcgbyhuLmlnbm9yZWRHcmlkKX1lbHNlIHRoaXMuZ3JpZD1uZXcgbyhhLDEyLDYpLHRoaXMuaWdub3JlZEdyaWQ9bmV3IG8oYSwxMiwwKTt0aGlzLmFuZ2xlPXQsdGhpcy5waXRjaD1lO3ZhciBpPU1hdGguc2luKHQpLHM9TWF0aC5jb3ModCk7aWYodGhpcy5yb3RhdGlvbk1hdHJpeD1bcywtaSxpLHNdLHRoaXMucmV2ZXJzZVJvdGF0aW9uTWF0cml4PVtzLGksLWksc10sdGhpcy55U3RyZXRjaD0xL01hdGguY29zKGUvMTgwKk1hdGguUEkpLHRoaXMueVN0cmV0Y2g9TWF0aC5wb3codGhpcy55U3RyZXRjaCwxLjMpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9ciwwPT09ci5sZW5ndGgpe3IuZW1wbGFjZUJhY2soKTtyLmVtcGxhY2VCYWNrKDAsMCwwLC0zMjc2NywwLDMyNzY3LDMyNzY3LDAsMCwwLDAsMCwwLDAsMCwwKSxyLmVtcGxhY2VCYWNrKGEsMCwwLC0zMjc2NywwLDMyNzY3LDMyNzY3LDAsMCwwLDAsMCwwLDAsMCwwKSxyLmVtcGxhY2VCYWNrKDAsMCwtMzI3NjcsMCwzMjc2NywwLDMyNzY3LDAsMCwwLDAsMCwwLDAsMCwwKSxyLmVtcGxhY2VCYWNrKDAsYSwtMzI3NjcsMCwzMjc2NywwLDMyNzY3LDAsMCwwLDAsMCwwLDAsMCwwKX10aGlzLnRlbXBDb2xsaXNpb25Cb3g9ci5nZXQoMCksdGhpcy5lZGdlcz1bci5nZXQoMSksci5nZXQoMiksci5nZXQoMyksci5nZXQoNCldfXZhciBpPXQoInBvaW50LWdlb21ldHJ5IiksYT10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCxvPXQoImdyaWQtaW5kZXgiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17YW5nbGU6dGhpcy5hbmdsZSxwaXRjaDp0aGlzLnBpdGNoLGdyaWQ6dGhpcy5ncmlkLnRvQXJyYXlCdWZmZXIoKSxpZ25vcmVkR3JpZDp0aGlzLmlnbm9yZWRHcmlkLnRvQXJyYXlCdWZmZXIoKX07cmV0dXJue2RhdGE6dCx0cmFuc2ZlcmFibGVzOlt0LmdyaWQsdC5pZ25vcmVkR3JpZF19fSxuLnByb3RvdHlwZS5taW5TY2FsZT0uMjUsbi5wcm90b3R5cGUubWF4U2NhbGU9MixuLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkZlYXR1cmU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLmNvbGxpc2lvbkJveEFycmF5LGE9dGhpcy5taW5TY2FsZSxvPXRoaXMucm90YXRpb25NYXRyaXgscz10aGlzLnlTdHJldGNoLGw9dC5ib3hTdGFydEluZGV4O2w8dC5ib3hFbmRJbmRleDtsKyspe3ZhciBjPW4uZ2V0KGwpLHU9Yy5hbmNob3JQb2ludC5fbWF0TXVsdChvKSxmPXUueCxoPXUueSxkPWYrYy54MSxwPWgrYy55MSpzLG09ZitjLngyLHY9aCtjLnkyKnM7aWYoYy5iYm94MD1kLGMuYmJveDE9cCxjLmJib3gyPW0sYy5iYm94Mz12LCFlKWZvcih2YXIgZz10aGlzLmdyaWQucXVlcnkoZCxwLG0sdikseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgYj1uLmdldChnW3ldKSx4PWIuYW5jaG9yUG9pbnQuX21hdE11bHQobyk7aWYoKGE9dGhpcy5nZXRQbGFjZW1lbnRTY2FsZShhLHUsYyx4LGIpKT49dGhpcy5tYXhTY2FsZSlyZXR1cm4gYX1pZihyKXt2YXIgXztpZih0aGlzLmFuZ2xlKXt2YXIgdz10aGlzLnJldmVyc2VSb3RhdGlvbk1hdHJpeCxNPW5ldyBpKGMueDEsYy55MSkubWF0TXVsdCh3KSxUPW5ldyBpKGMueDIsYy55MSkubWF0TXVsdCh3KSxrPW5ldyBpKGMueDEsYy55MikubWF0TXVsdCh3KSxBPW5ldyBpKGMueDIsYy55MikubWF0TXVsdCh3KTtfPXRoaXMudGVtcENvbGxpc2lvbkJveCxfLmFuY2hvclBvaW50WD1jLmFuY2hvclBvaW50LngsXy5hbmNob3JQb2ludFk9Yy5hbmNob3JQb2ludC55LF8ueDE9TWF0aC5taW4oTS54LFQueCxrLngsQS54KSxfLnkxPU1hdGgubWluKE0ueSxULngsay54LEEueCksXy54Mj1NYXRoLm1heChNLngsVC54LGsueCxBLngpLF8ueTI9TWF0aC5tYXgoTS55LFQueCxrLngsQS54KSxfLm1heFNjYWxlPWMubWF4U2NhbGV9ZWxzZSBfPWM7Zm9yKHZhciBFPTA7RTx0aGlzLmVkZ2VzLmxlbmd0aDtFKyspe3ZhciBTPXRoaXMuZWRnZXNbRV07aWYoKGE9dGhpcy5nZXRQbGFjZW1lbnRTY2FsZShhLGMuYW5jaG9yUG9pbnQsXyxTLmFuY2hvclBvaW50LFMpKT49dGhpcy5tYXhTY2FsZSlyZXR1cm4gYX19fXJldHVybiBhfSxuLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXt9LHM9W10sbD10aGlzLmNvbGxpc2lvbkJveEFycmF5LGM9dGhpcy5yb3RhdGlvbk1hdHJpeCx1PW5ldyBpKHQsZSkuX21hdE11bHQoYyksZj10aGlzLnRlbXBDb2xsaXNpb25Cb3g7Zi5hbmNob3JYPXUueCxmLmFuY2hvclk9dS55LGYueDE9MCxmLnkxPTAsZi54Mj1yLXQsZi55Mj1uLWUsZi5tYXhTY2FsZT1hLGE9Zi5tYXhTY2FsZTtmb3IodmFyIGg9W3UueCtmLngxL2EsdS55K2YueTEvYSp0aGlzLnlTdHJldGNoLHUueCtmLngyL2EsdS55K2YueTIvYSp0aGlzLnlTdHJldGNoXSxkPXRoaXMuZ3JpZC5xdWVyeShoWzBdLGhbMV0saFsyXSxoWzNdKSxwPXRoaXMuaWdub3JlZEdyaWQucXVlcnkoaFswXSxoWzFdLGhbMl0saFszXSksbT0wO208cC5sZW5ndGg7bSsrKWQucHVzaChwW21dKTtmb3IodmFyIHY9MDt2PGQubGVuZ3RoO3YrKyl7dmFyIGc9bC5nZXQoZFt2XSkseT1nLnNvdXJjZUxheWVySW5kZXgsYj1nLmZlYXR1cmVJbmRleDtpZih2b2lkIDA9PT1vW3ldJiYob1t5XT17fSksIW9beV1bYl0pe3ZhciB4PWcuYW5jaG9yUG9pbnQubWF0TXVsdChjKTt0aGlzLmdldFBsYWNlbWVudFNjYWxlKHRoaXMubWluU2NhbGUsdSxmLHgsZyk+PWEmJihvW3ldW2JdPSEwLHMucHVzaChkW3ZdKSl9fXJldHVybiBzfSxuLnByb3RvdHlwZS5nZXRQbGFjZW1lbnRTY2FsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUueC1uLngsbz1lLnktbi55LHM9KGkueDEtci54MikvYSxsPShpLngyLXIueDEpL2EsYz0oaS55MS1yLnkyKSp0aGlzLnlTdHJldGNoL28sdT0oaS55Mi1yLnkxKSp0aGlzLnlTdHJldGNoL287KGlzTmFOKHMpfHxpc05hTihsKSkmJihzPWw9MSksKGlzTmFOKGMpfHxpc05hTih1KSkmJihjPXU9MSk7dmFyIGY9TWF0aC5taW4oTWF0aC5tYXgocyxsKSxNYXRoLm1heChjLHUpKSxoPWkubWF4U2NhbGUsZD1yLm1heFNjYWxlO3JldHVybiBmPmgmJihmPWgpLGY+ZCYmKGY9ZCksZj50JiZmPj1pLnBsYWNlbWVudFNjYWxlJiYodD1mKSx0fSxuLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25GZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49cj90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxpPXRoaXMuY29sbGlzaW9uQm94QXJyYXksYT10LmJveFN0YXJ0SW5kZXg7YTx0LmJveEVuZEluZGV4O2ErKyl7dmFyIG89aS5nZXQoYSk7by5wbGFjZW1lbnRTY2FsZT1lLGU8dGhpcy5tYXhTY2FsZSYmbi5pbnNlcnQoYSxvLmJib3gwLG8uYmJveDEsby5iYm94MixvLmJib3gzKX19fSx7Ii4uL2RhdGEvYnVja2V0IjozMzcsImdyaWQtaW5kZXgiOjI5MywicG9pbnQtZ2VvbWV0cnkiOjQ5M31dLDQwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSxvLHMsbCxjKXt2YXIgdT1uPy42Km8qczowLGY9TWF0aC5tYXgobj9uLnJpZ2h0LW4ubGVmdDowLGE/YS5yaWdodC1hLmxlZnQ6MCksaD0wPT09dFswXS54fHx0WzBdLng9PT1jfHwwPT09dFswXS55fHx0WzBdLnk9PT1jO2UtZipzPGUvNCYmKGU9ZipzK2UvNCk7dmFyIGQ9MipvO3JldHVybiBpKHQsaD9lLzIqbCVlOihmLzIrZCkqcypsJWUsZSx1LHIsZipzLGgsITEsYyl9ZnVuY3Rpb24gaSh0LGUscixuLGwsYyx1LGYsaCl7Zm9yKHZhciBkPWMvMixwPTAsbT0wO208dC5sZW5ndGgtMTttKyspcCs9dFttXS5kaXN0KHRbbSsxXSk7Zm9yKHZhciB2PTAsZz1lLXIseT1bXSxiPTA7Yjx0Lmxlbmd0aC0xO2IrKyl7Zm9yKHZhciB4PXRbYl0sXz10W2IrMV0sdz14LmRpc3QoXyksTT1fLmFuZ2xlVG8oeCk7ZytyPHYrdzspe2crPXI7dmFyIFQ9KGctdikvdyxrPWEoeC54LF8ueCxUKSxBPWEoeC55LF8ueSxUKTtpZihrPj0wJiZrPGgmJkE+PTAmJkE8aCYmZy1kPj0wJiZnK2Q8PXApe3ZhciBFPW5ldyBvKGssQSxNLGIpLl9yb3VuZCgpO24mJiFzKHQsRSxjLG4sbCl8fHkucHVzaChFKX19dis9d31yZXR1cm4gZnx8eS5sZW5ndGh8fHV8fCh5PWkodCx2LzIscixuLGwsYyx1LCEwLGgpKSx5fXZhciBhPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKSxvPXQoIi4uL3N5bWJvbC9hbmNob3IiKSxzPXQoIi4vY2hlY2tfbWF4X2FuZ2xlIik7ZS5leHBvcnRzPW59LHsiLi4vc3ltYm9sL2FuY2hvciI6Mzk5LCIuLi91dGlsL2ludGVycG9sYXRlIjo0NDQsIi4vY2hlY2tfbWF4X2FuZ2xlIjo0MDB9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMud2lkdGg9byx0aGlzLmhlaWdodD1vLHRoaXMuYmluPW5ldyBpKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuaW5kZXg9e30sdGhpcy5pZHM9e30sdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQpfXZhciBpPXQoInNoZWxmLXBhY2siKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89MTI4O2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbigpe3ZhciB0LGUscixuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLmlkcyl0PWkuc3BsaXQoIiMiKSxlPXRbMF0scj10WzFdLG5bZV18fChuW2VdPVtdKSxuW2VdLnB1c2gocik7cmV0dXJuIG59LG4ucHJvdG90eXBlLmdldFJlY3RzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49e307Zm9yKHZhciBpIGluIHRoaXMuaWRzKXQ9aS5zcGxpdCgiIyIpLGU9dFswXSxyPXRbMV0sbltlXXx8KG5bZV09e30pLG5bZV1bcl09dGhpcy5pbmRleFtpXTtyZXR1cm4gbn0sbi5wcm90b3R5cGUuYWRkR2x5cGg9ZnVuY3Rpb24odCxlLHIsbil7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZSsiIyIrci5pZDtpZih0aGlzLmluZGV4W2ldKXJldHVybiB0aGlzLmlkc1tpXS5pbmRleE9mKHQpPDAmJnRoaXMuaWRzW2ldLnB1c2godCksdGhpcy5pbmRleFtpXTtpZighci5iaXRtYXApcmV0dXJuIG51bGw7dmFyIG89ci53aWR0aCsyKm4scz1yLmhlaWdodCsyKm4sbD1vKzIsYz1zKzI7bCs9NC1sJTQsYys9NC1jJTQ7dmFyIHU9dGhpcy5iaW4ucGFja09uZShsLGMpO2lmKHV8fCh0aGlzLnJlc2l6ZSgpLHU9dGhpcy5iaW4ucGFja09uZShsLGMpKSwhdSlyZXR1cm4gYS53YXJuT25jZSgiZ2x5cGggYml0bWFwIG92ZXJmbG93IiksbnVsbDt0aGlzLmluZGV4W2ldPXUsdGhpcy5pZHNbaV09W3RdO2Zvcih2YXIgZj10aGlzLmRhdGEsaD1yLmJpdG1hcCxkPTA7ZDxzO2QrKylmb3IodmFyIHA9dGhpcy53aWR0aCoodS55K2QrMSkrdS54KzEsbT1vKmQsdj0wO3Y8bzt2KyspZltwK3ZdPWhbbSt2XTtyZXR1cm4gdGhpcy5kaXJ0eT0hMCx1fSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndpZHRoLGU9dGhpcy5oZWlnaHQ7aWYoISh0Pj0yMDQ4fHxlPj0yMDQ4KSl7dGhpcy50ZXh0dXJlJiYodGhpcy5nbCYmdGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGwpLHRoaXMud2lkdGgqPTQsdGhpcy5oZWlnaHQqPTQsdGhpcy5iaW4ucmVzaXplKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO2Zvcih2YXIgcj1uZXcgQXJyYXlCdWZmZXIodGhpcy53aWR0aCp0aGlzLmhlaWdodCksbj0wO248ZTtuKyspe3ZhciBpPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIsZSpuLHQpO25ldyBVaW50OEFycmF5KHIsZSpuKjQsdCkuc2V0KGkpfXRoaXMuZGF0YT1uZXcgVWludDhBcnJheShyKX19LG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dGhpcy5nbD10LHRoaXMudGV4dHVyZT90LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5BTFBIQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsdC5BTFBIQSx0LlVOU0lHTkVEX0JZVEUsbnVsbCkpfSxuLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3RoaXMuYmluZCh0KSx0aGlzLmRpcnR5JiYodC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LHQuQUxQSEEsdC5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSksdGhpcy5kaXJ0eT0hMSl9fSx7Ii4uL3V0aWwvdXRpbCI6NDUwLCJzaGVsZi1wYWNrIjo1MjN9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnVybD10JiZvKHQpLHRoaXMuYXRsYXNlcz17fSx0aGlzLnN0YWNrcz17fSx0aGlzLmxvYWRpbmc9e319ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5hZHZhbmNlPXQuYWR2YW5jZSx0aGlzLmxlZnQ9dC5sZWZ0LXItMSx0aGlzLnRvcD10LnRvcCtyKzEsdGhpcy5yZWN0PWV9ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gbj1ufHwiYWJjIixyLnJlcGxhY2UoIntzfSIsblt0Lmxlbmd0aCVuLmxlbmd0aF0pLnJlcGxhY2UoIntmb250c3RhY2t9Iix0KS5yZXBsYWNlKCJ7cmFuZ2V9IixlKX12YXIgbz10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZUdseXBoc1VSTCxzPXQoIi4uL3V0aWwvYWpheCIpLmdldEFycmF5QnVmZmVyLGw9dCgiLi4vdXRpbC9nbHlwaHMiKSxjPXQoIi4uL3N5bWJvbC9nbHlwaF9hdGxhcyIpLHU9dCgicGJmIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZ2V0U2ltcGxlR2x5cGhzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PXRoaXMuc3RhY2tzW3RdJiYodGhpcy5zdGFja3NbdF09e30pLHZvaWQgMD09PXRoaXMuYXRsYXNlc1t0XSYmKHRoaXMuYXRsYXNlc1t0XT1uZXcgYyk7Zm9yKHZhciBhLG89e30scz10aGlzLnN0YWNrc1t0XSxsPXRoaXMuYXRsYXNlc1t0XSx1PXt9LGY9MCxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBkPWVbaF07aWYoYT1NYXRoLmZsb29yKGQvMjU2KSxzW2FdKXt2YXIgcD1zW2FdLmdseXBoc1tkXSxtPWwuYWRkR2x5cGgocix0LHAsMyk7cCYmKG9bZF09bmV3IGkocCxtLDMpKX1lbHNlIHZvaWQgMD09PXVbYV0mJih1W2FdPVtdLGYrKyksdVthXS5wdXNoKGQpfWZ8fG4odm9pZCAwLG8sdCk7dmFyIHY9ZnVuY3Rpb24oZSxhLHMpe2lmKCFlKWZvcih2YXIgYz10aGlzLnN0YWNrc1t0XVthXT1zLnN0YWNrc1swXSxoPTA7aDx1W2FdLmxlbmd0aDtoKyspe3ZhciBkPXVbYV1baF0scD1jLmdseXBoc1tkXSxtPWwuYWRkR2x5cGgocix0LHAsMyk7cCYmKG9bZF09bmV3IGkocCxtLDMpKX0tLWZ8fG4odm9pZCAwLG8sdCl9LmJpbmQodGhpcyk7Zm9yKHZhciBnIGluIHUpdGhpcy5sb2FkUmFuZ2UodCxnLHYpfSxuLnByb3RvdHlwZS5sb2FkUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKDI1NiplPjY1NTM1KXJldHVybiByKCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkIik7dm9pZCAwPT09dGhpcy5sb2FkaW5nW3RdJiYodGhpcy5sb2FkaW5nW3RdPXt9KTt2YXIgbj10aGlzLmxvYWRpbmdbdF07aWYobltlXSluW2VdLnB1c2gocik7ZWxzZXtuW2VdPVtyXTt2YXIgaT0yNTYqZSsiLSIrKDI1NiplKzI1NSksbz1hKHQsaSx0aGlzLnVybCk7cyhvLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPSF0JiZuZXcgbChuZXcgdShuZXcgVWludDhBcnJheShyKSkpLGE9MDthPG5bZV0ubGVuZ3RoO2ErKyluW2VdW2FdKHQsZSxpKTtkZWxldGUgbltlXX0pfX0sbi5wcm90b3R5cGUuZ2V0R2x5cGhBdGxhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdGxhc2VzW3RdfX0seyIuLi9zeW1ib2wvZ2x5cGhfYXRsYXMiOjQwNiwiLi4vdXRpbC9hamF4Ijo0MzMsIi4uL3V0aWwvZ2x5cGhzIjo0NDMsIi4uL3V0aWwvbWFwYm94Ijo0NDcscGJmOjQ4N31dLDQwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4obil7dS5wdXNoKHRbbl0pLGYucHVzaChyW25dKSxoLnB1c2goZVtuXSksZCsrfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWNbdF07cmV0dXJuIGRlbGV0ZSBjW3RdLGNbZV09bixmW25dWzBdLnBvcCgpLGZbbl1bMF09ZltuXVswXS5jb25jYXQoclswXSksbn1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj1sW2VdO3JldHVybiBkZWxldGUgbFtlXSxsW3RdPW4sZltuXVswXS5zaGlmdCgpLGZbbl1bMF09clswXS5jb25jYXQoZltuXVswXSksbn1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9dmFyIHMsbD17fSxjPXt9LHU9W10sZj1bXSxoPVtdLGQ9MDtmb3Iocz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgcD1yW3NdLG09ZVtzXTtpZihtKXt2YXIgdj1vKG0scCksZz1vKG0scCwhMCk7aWYodiBpbiBjJiZnIGluIGwmJmNbdl0hPT1sW2ddKXt2YXIgeT1hKHYsZyxwKSxiPWkodixnLGZbeV0pO2RlbGV0ZSBsW3ZdLGRlbGV0ZSBjW2ddLGNbbyhtLGZbYl0sITApXT1iLGZbeV09bnVsbH1lbHNlIHYgaW4gYz9pKHYsZyxwKTpnIGluIGw/YSh2LGcscCk6KG4ocyksbFt2XT1kLTEsY1tnXT1kLTEpfWVsc2UgbihzKX1yZXR1cm57ZmVhdHVyZXM6dSx0ZXh0RmVhdHVyZXM6aCxnZW9tZXRyaWVzOmZ9fX0se31dLDQwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLGMpe3RoaXMuYW5jaG9yUG9pbnQ9dCx0aGlzLnRsPWUsdGhpcy50cj1yLHRoaXMuYmw9bix0aGlzLmJyPWksdGhpcy50ZXg9YSx0aGlzLmFuY2hvckFuZ2xlPW8sdGhpcy5nbHlwaEFuZ2xlPXMsdGhpcy5taW5TY2FsZT1sLHRoaXMubWF4U2NhbGU9Y31mdW5jdGlvbiBpKHQsZSxyLGksYSxvLGMsdSxmKXt2YXIgaCxkLHAsbSx2PWUuaW1hZ2UucmVjdCxnPWEubGF5b3V0LHk9ZS5sZWZ0LTEsYj15K3Yudy9lLmltYWdlLnBpeGVsUmF0aW8seD1lLnRvcC0xLF89eCt2LmgvZS5pbWFnZS5waXhlbFJhdGlvO2lmKCJub25lIiE9PWdbImljb24tdGV4dC1maXQiXSYmYyl7dmFyIHc9Yi15LE09Xy14LFQ9Z1sidGV4dC1zaXplIl0vMjQsaz1jLmxlZnQqVCxBPWMucmlnaHQqVCxFPWMudG9wKlQsUz1jLmJvdHRvbSpULEw9QS1rLEM9Uy1FLEk9Z1siaWNvbi10ZXh0LWZpdC1wYWRkaW5nIl1bMF0sRD1nWyJpY29uLXRleHQtZml0LXBhZGRpbmciXVsxXSxQPWdbImljb24tdGV4dC1maXQtcGFkZGluZyJdWzJdLHo9Z1siaWNvbi10ZXh0LWZpdC1wYWRkaW5nIl1bM10sTz0id2lkdGgiPT09Z1siaWNvbi10ZXh0LWZpdCJdPy41KihDLU0pOjAsUj0iaGVpZ2h0Ij09PWdbImljb24tdGV4dC1maXQiXT8uNSooTC13KTowLEY9IndpZHRoIj09PWdbImljb24tdGV4dC1maXQiXXx8ImJvdGgiPT09Z1siaWNvbi10ZXh0LWZpdCJdP0w6dyxqPSJoZWlnaHQiPT09Z1siaWNvbi10ZXh0LWZpdCJdfHwiYm90aCI9PT1nWyJpY29uLXRleHQtZml0Il0/QzpNO2g9bmV3IHMoaytSLXosRStPLUkpLGQ9bmV3IHMoaytSK0QrRixFK08tSSkscD1uZXcgcyhrK1IrRCtGLEUrTytQK2opLG09bmV3IHMoaytSLXosRStPK1Arail9ZWxzZSBoPW5ldyBzKHkseCksZD1uZXcgcyhiLHgpLHA9bmV3IHMoYixfKSxtPW5ldyBzKHksXyk7dmFyIE49YS5nZXRMYXlvdXRWYWx1ZSgiaWNvbi1yb3RhdGUiLHUsZikqTWF0aC5QSS8xODA7aWYobyl7dmFyIEI9aVt0LnNlZ21lbnRdO2lmKHQueT09PUIueSYmdC54PT09Qi54JiZ0LnNlZ21lbnQrMTxpLmxlbmd0aCl7dmFyIFU9aVt0LnNlZ21lbnQrMV07Tis9TWF0aC5hdGFuMih0LnktVS55LHQueC1VLngpK01hdGguUEl9ZWxzZSBOKz1NYXRoLmF0YW4yKHQueS1CLnksdC54LUIueCl9aWYoTil7dmFyIFY9TWF0aC5zaW4oTiksSD1NYXRoLmNvcyhOKSxxPVtILC1WLFYsSF07aD1oLm1hdE11bHQocSksZD1kLm1hdE11bHQocSksbT1tLm1hdE11bHQocSkscD1wLm1hdE11bHQocSl9cmV0dXJuW25ldyBuKG5ldyBzKHQueCx0LnkpLGgsZCxtLHAsZS5pbWFnZS5yZWN0LDAsMCxsLDEvMCldfWZ1bmN0aW9uIGEodCxlLHIsaSxhLGMpe2Zvcih2YXIgdT1hLmxheW91dFsidGV4dC1yb3RhdGUiXSpNYXRoLlBJLzE4MCxmPWEubGF5b3V0WyJ0ZXh0LWtlZXAtdXByaWdodCJdLGg9ZS5wb3NpdGlvbmVkR2x5cGhzLGQ9W10scD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1oW3BdLHY9bS5nbHlwaCxnPXYucmVjdDtpZihnKXt2YXIgeSxiPShtLngrdi5hZHZhbmNlLzIpKnIseD1sO2M/KHk9W10seD1vKHksdCxiLGksdC5zZWdtZW50LCEwKSxmJiYoeD1NYXRoLm1pbih4LG8oeSx0LGIsaSx0LnNlZ21lbnQsITEpKSkpOnk9W3thbmNob3JQb2ludDpuZXcgcyh0LngsdC55KSxvZmZzZXQ6MCxhbmdsZTowLG1heFNjYWxlOjEvMCxtaW5TY2FsZTpsfV07Zm9yKHZhciBfPW0ueCt2LmxlZnQsdz1tLnktdi50b3AsTT1fK2cudyxUPXcrZy5oLGs9bmV3IHMoXyx3KSxBPW5ldyBzKE0sdyksRT1uZXcgcyhfLFQpLFM9bmV3IHMoTSxUKSxMPTA7TDx5Lmxlbmd0aDtMKyspe3ZhciBDPXlbTF0sST1rLEQ9QSxQPUUsej1TO2lmKHUpe3ZhciBPPU1hdGguc2luKHUpLFI9TWF0aC5jb3ModSksRj1bUiwtTyxPLFJdO0k9SS5tYXRNdWx0KEYpLEQ9RC5tYXRNdWx0KEYpLFA9UC5tYXRNdWx0KEYpLHo9ei5tYXRNdWx0KEYpfXZhciBqPU1hdGgubWF4KEMubWluU2NhbGUseCksTj0odC5hbmdsZStDLm9mZnNldCsyKk1hdGguUEkpJSgyKk1hdGguUEkpLEI9KEMuYW5nbGUrQy5vZmZzZXQrMipNYXRoLlBJKSUoMipNYXRoLlBJKTtkLnB1c2gobmV3IG4oQy5hbmNob3JQb2ludCxJLEQsUCx6LGcsTixCLGosQy5tYXhTY2FsZSkpfX19cmV0dXJuIGR9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG89IWE7cjwwJiYoYT0hYSksYSYmaSsrO3ZhciBjPW5ldyBzKGUueCxlLnkpLHU9bltpXSxmPTEvMDtyPU1hdGguYWJzKHIpO2Zvcih2YXIgaD1sOzspe3ZhciBkPWMuZGlzdCh1KSxwPXIvZCxtPU1hdGguYXRhbjIodS55LWMueSx1LngtYy54KTtpZihhfHwobSs9TWF0aC5QSSksdC5wdXNoKHthbmNob3JQb2ludDpjLG9mZnNldDpvP01hdGguUEk6MCxtaW5TY2FsZTpwLG1heFNjYWxlOmYsYW5nbGU6KG0rMipNYXRoLlBJKSUoMipNYXRoLlBJKX0pLHA8PWgpYnJlYWs7Zm9yKGM9dTtjLmVxdWFscyh1KTspaWYoaSs9YT8xOi0xLCEodT1uW2ldKSlyZXR1cm4gcDt2YXIgdj11LnN1YihjKS5fdW5pdCgpO2M9Yy5zdWIodi5fbXVsdChkKSksZj1wfXJldHVybiBofXZhciBzPXQoInBvaW50LWdlb21ldHJ5Iik7ZS5leHBvcnRzPXtnZXRJY29uUXVhZHM6aSxnZXRHbHlwaFF1YWRzOmEsU3ltYm9sUXVhZDpufTt2YXIgbD0uNX0seyJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1pKHRbYV0ucHJvcGVydGllcyxlWyJ0ZXh0LWZpZWxkIl0pO2lmKHMpe3M9cy50b1N0cmluZygpO3ZhciBsPWVbInRleHQtdHJhbnNmb3JtIl07InVwcGVyY2FzZSI9PT1sP3M9cy50b0xvY2FsZVVwcGVyQ2FzZSgpOiJsb3dlcmNhc2UiPT09bCYmKHM9cy50b0xvY2FsZUxvd2VyQ2FzZSgpKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylyW3MuY2hhckNvZGVBdChjKV09ITA7blthXT1zfWVsc2UgblthXT1udWxsfXJldHVybiBufXZhciBpPXQoIi4uL3V0aWwvdG9rZW4iKTtlLmV4cG9ydHM9bn0seyIuLi91dGlsL3Rva2VuIjo0NDl9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmNvZGVQb2ludD10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMuZ2x5cGg9bn1mdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLnBvc2l0aW9uZWRHbHlwaHM9dCx0aGlzLnRleHQ9ZSx0aGlzLnRvcD1yLHRoaXMuYm90dG9tPW4sdGhpcy5sZWZ0PWksdGhpcy5yaWdodD1hfWZ1bmN0aW9uIGEodCxlLHIsYSxzLGwsYyx1LGYpe2Zvcih2YXIgaD1bXSxkPW5ldyBpKGgsdCxmWzFdLGZbMV0sZlswXSxmWzBdKSxwPTAsbT0wO208dC5sZW5ndGg7bSsrKXt2YXIgdj10LmNoYXJDb2RlQXQobSksZz1lW3ZdO2cmJihoLnB1c2gobmV3IG4odixwLC0xNyxnKSkscCs9Zy5hZHZhbmNlK3UpfXJldHVybiEhaC5sZW5ndGgmJihvKGQsZSxhLHIscyxsLGMsZiksZCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSxvLGMpe3ZhciB1PW51bGwsZD0wLHA9MCxtPTAsdj0wLGc9dC5wb3NpdGlvbmVkR2x5cGhzO2lmKG4pZm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBiPWdbeV07aWYoYi54LT1kLGIueSs9ciptLGIueD5uJiZudWxsIT09dSl7dmFyIHg9Z1t1KzFdLng7dj1NYXRoLm1heCh4LHYpO2Zvcih2YXIgXz11KzE7Xzw9eTtfKyspZ1tfXS55Kz1yLGdbX10ueC09eDtpZihvKXt2YXIgdz11O2ZbZ1t1XS5jb2RlUG9pbnRdJiZ3LS0scyhnLGUscCx3LG8pfXA9dSsxLHU9bnVsbCxkKz14LG0rK31oW2IuY29kZVBvaW50XSYmKHU9eSl9dmFyIE09Z1tnLmxlbmd0aC0xXSxUPU0ueCtlW00uY29kZVBvaW50XS5hZHZhbmNlO3Y9TWF0aC5tYXgodixUKTt2YXIgaz0obSsxKSpyO3MoZyxlLHAsZy5sZW5ndGgtMSxvKSxsKGcsbyxpLGEsdixyLG0sYyksdC50b3ArPS1hKmssdC5ib3R0b209dC50b3Arayx0LmxlZnQrPS1pKnYsdC5yaWdodD10LmxlZnQrdn1mdW5jdGlvbiBzKHQsZSxyLG4saSl7Zm9yKHZhciBhPWVbdFtuXS5jb2RlUG9pbnRdLmFkdmFuY2Usbz0odFtuXS54K2EpKmkscz1yO3M8PW47cysrKXRbc10ueC09b31mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPShlLXIpKmkrc1swXSxjPSgtbioobysxKSsuNSkqYStzWzFdLHU9MDt1PHQubGVuZ3RoO3UrKyl0W3VdLngrPWwsdFt1XS55Kz1jfWZ1bmN0aW9uIGModCxlKXtpZighdHx8IXQucmVjdClyZXR1cm4gbnVsbDt2YXIgcj1lWyJpY29uLW9mZnNldCJdWzBdLG49ZVsiaWNvbi1vZmZzZXQiXVsxXSxpPXItdC53aWR0aC8yLGE9aSt0LndpZHRoLG89bi10LmhlaWdodC8yO3JldHVybiBuZXcgdSh0LG8sbyt0LmhlaWdodCxpLGEpfWZ1bmN0aW9uIHUodCxlLHIsbixpKXt0aGlzLmltYWdlPXQsdGhpcy50b3A9ZSx0aGlzLmJvdHRvbT1yLHRoaXMubGVmdD1uLHRoaXMucmlnaHQ9aX1lLmV4cG9ydHM9e3NoYXBlVGV4dDphLHNoYXBlSWNvbjpjfTt2YXIgZj17MzI6ITAsODIwMzohMH0saD17MzI6ITAsMzg6ITAsNDM6ITAsNDU6ITAsNDc6ITAsMTczOiEwLDE4MzohMCw4MjAzOiEwLDgyMDg6ITAsODIxMTohMH19LHt9XSw0MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuYmluPW5ldyBvKHQsZSksdGhpcy5pbWFnZXM9e30sdGhpcy5kYXRhPSExLHRoaXMudGV4dHVyZT0wLHRoaXMuZmlsdGVyPTAsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBpKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGYsaCxkPW4qZStyLHA9cyphK287aWYodSlmb3IocC09YSxoPS0xO2g8PWM7aCsrLGQ9KChoK2MpJWMrbikqZStyLHArPWEpZm9yKGY9LTE7Zjw9bDtmKyspaVtwK2ZdPXRbZCsoZitsKSVsXTtlbHNlIGZvcihoPTA7aDxjO2grKyxkKz1lLHArPWEpZm9yKGY9MDtmPGw7ZisrKWlbcCtmXT10W2QrZl19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RoaXMucmVjdD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yLHRoaXMuc2RmPW4sdGhpcy5waXhlbFJhdGlvPWl9dmFyIG89dCgic2hlbGYtcGFjayIpLHM9dCgiLi4vdXRpbC9icm93c2VyIiksbD10KCIuLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5hbGxvY2F0ZUltYWdlPWZ1bmN0aW9uKHQsZSl7dC89dGhpcy5waXhlbFJhdGlvLGUvPXRoaXMucGl4ZWxSYXRpbzt2YXIgcj10KzIrKDQtKHQrMiklNCksbj1lKzIrKDQtKGUrMiklNCksaT10aGlzLmJpbi5wYWNrT25lKHIsbik7cmV0dXJuIGk/aToobC53YXJuT25jZSgiU3ByaXRlQXRsYXMgb3V0IG9mIHNwYWNlLiIpLG51bGwpfSxuLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaW1hZ2VzW3RdKXJldHVybiB0aGlzLmltYWdlc1t0XTtpZighdGhpcy5zcHJpdGUpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5zcHJpdGUuZ2V0U3ByaXRlUG9zaXRpb24odCk7aWYoIXIud2lkdGh8fCFyLmhlaWdodClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLmFsbG9jYXRlSW1hZ2Uoci53aWR0aCxyLmhlaWdodCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9bmV3IGEobixyLndpZHRoL3IucGl4ZWxSYXRpbyxyLmhlaWdodC9yLnBpeGVsUmF0aW8sci5zZGYsci5waXhlbFJhdGlvL3RoaXMucGl4ZWxSYXRpbyk7cmV0dXJuIHRoaXMuaW1hZ2VzW3RdPWksdGhpcy5jb3B5KG4scixlKSxpfSxuLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0SW1hZ2UodCxlKSxuPXImJnIucmVjdDtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1yLndpZHRoKnIucGl4ZWxSYXRpbyxhPXIuaGVpZ2h0KnIucGl4ZWxSYXRpbztyZXR1cm57c2l6ZTpbci53aWR0aCxyLmhlaWdodF0sdGw6WyhuLngrMSkvdGhpcy53aWR0aCwobi55KzEpL3RoaXMuaGVpZ2h0XSxicjpbKG4ueCsxK2kpL3RoaXMud2lkdGgsKG4ueSsxK2EpL3RoaXMuaGVpZ2h0XX19LG4ucHJvdG90eXBlLmFsbG9jYXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGF0YSl7dmFyIHQ9TWF0aC5mbG9vcih0aGlzLndpZHRoKnRoaXMucGl4ZWxSYXRpbyksZT1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KnRoaXMucGl4ZWxSYXRpbyk7dGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheSh0KmUpO2Zvcih2YXIgcj0wO3I8dGhpcy5kYXRhLmxlbmd0aDtyKyspdGhpcy5kYXRhW3JdPTB9fSxuLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnNwcml0ZS5pbWcuZGF0YSl7dmFyIG49bmV3IFVpbnQzMkFycmF5KHRoaXMuc3ByaXRlLmltZy5kYXRhLmJ1ZmZlcik7dGhpcy5hbGxvY2F0ZSgpO3ZhciBhPXRoaXMuZGF0YTtpKG4sdGhpcy5zcHJpdGUuaW1nLndpZHRoLGUueCxlLnksYSx0aGlzLndpZHRoKnRoaXMucGl4ZWxSYXRpbywodC54KzEpKnRoaXMucGl4ZWxSYXRpbywodC55KzEpKnRoaXMucGl4ZWxSYXRpbyxlLndpZHRoLGUuaGVpZ2h0LHIpLHRoaXMuZGlydHk9ITB9fSxuLnByb3RvdHlwZS5zZXRTcHJpdGU9ZnVuY3Rpb24odCl7dCYmKHRoaXMucGl4ZWxSYXRpbz1zLmRldmljZVBpeGVsUmF0aW8+MT8yOjEsdGhpcy5jYW52YXMmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvKSksdGhpcy5zcHJpdGU9dH0sbi5wcm90b3R5cGUuYWRkSWNvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLmdldEltYWdlKHRbcl0pO2UobnVsbCx0aGlzLmltYWdlcyl9LG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMTt0aGlzLnRleHR1cmU/dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKToodGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSkscj0hMCk7dmFyIG49ZT90LkxJTkVBUjp0Lk5FQVJFU1Q7biE9PXRoaXMuZmlsdGVyJiYodC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUixuKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLG4pLHRoaXMuZmlsdGVyPW4pLHRoaXMuZGlydHkmJih0aGlzLmFsbG9jYXRlKCkscj90LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvLHRoaXMuaGVpZ2h0KnRoaXMucGl4ZWxSYXRpbywwLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCp0aGlzLnBpeGVsUmF0aW8sdGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpLHRoaXMuZGlydHk9ITEpfX0seyIuLi91dGlsL2Jyb3dzZXIiOjQzNCwiLi4vdXRpbC91dGlsIjo0NTAsInNoZWxmLXBhY2siOjUyM31dLDQxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpLGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCJwb2ludC1nZW9tZXRyeSIpLG89ZS5leHBvcnRzPW5ldyBuKHttZW1iZXJzOlt7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhRdWFkU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImdseXBoUXVhZEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvblF1YWRTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvblF1YWRFbmRJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFkifSx7dHlwZToiSW50OCIsbmFtZToiaW5kZXgifV19KTtpLmV4dGVuZEFsbChvLnByb3RvdHlwZS5TdHJ1Y3RUeXBlLnByb3RvdHlwZSx7Z2V0IGFuY2hvclBvaW50KCl7cmV0dXJuIG5ldyBhKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX19KX0seyIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDQ4LCIuLi91dGlsL3V0aWwiOjQ1MCwicG9pbnQtZ2VvbWV0cnkiOjQ5M31dLDQxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpLGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgiLi9xdWFkcyIpLlN5bWJvbFF1YWQscz1lLmV4cG9ydHM9bmV3IG4oe21lbWJlcnM6W3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFkifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGxYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InRsWSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0clgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidHJZIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImJsWCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJibFkifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiYnJYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImJyWSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGV4SCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGV4VyJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGV4WCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGV4WSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJhbmNob3JBbmdsZSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJnbHlwaEFuZ2xlIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6Im1heFNjYWxlIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6Im1pblNjYWxlIn1dfSk7aS5leHRlbmRBbGwocy5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUse2dldCBhbmNob3JQb2ludCgpe3JldHVybiBuZXcgYSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LGdldCBTeW1ib2xRdWFkKCl7cmV0dXJuIG5ldyBvKHRoaXMuYW5jaG9yUG9pbnQsbmV3IGEodGhpcy50bFgsdGhpcy50bFkpLG5ldyBhKHRoaXMudHJYLHRoaXMudHJZKSxuZXcgYSh0aGlzLmJsWCx0aGlzLmJsWSksbmV3IGEodGhpcy5iclgsdGhpcy5iclkpLHt4OnRoaXMudGV4WCx5OnRoaXMudGV4WSxoOnRoaXMudGV4SCx3OnRoaXMudGV4VyxoZWlnaHQ6dGhpcy50ZXhILHdpZHRoOnRoaXMudGV4V30sdGhpcy5hbmNob3JBbmdsZSx0aGlzLmdseXBoQW5nbGUsdGhpcy5taW5TY2FsZSx0aGlzLm1heFNjYWxlKX19KX0seyIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDQ4LCIuLi91dGlsL3V0aWwiOjQ1MCwiLi9xdWFkcyI6NDA5LCJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvZG9tIiksaT10KCJwb2ludC1nZW9tZXRyeSIpLGE9e3Njcm9sbFpvb206dCgiLi9oYW5kbGVyL3Njcm9sbF96b29tIiksYm94Wm9vbTp0KCIuL2hhbmRsZXIvYm94X3pvb20iKSxkcmFnUm90YXRlOnQoIi4vaGFuZGxlci9kcmFnX3JvdGF0ZSIpLGRyYWdQYW46dCgiLi9oYW5kbGVyL2RyYWdfcGFuIiksa2V5Ym9hcmQ6dCgiLi9oYW5kbGVyL2tleWJvYXJkIiksZG91YmxlQ2xpY2tab29tOnQoIi4vaGFuZGxlci9kYmxjbGlja196b29tIiksdG91Y2hab29tUm90YXRlOnQoIi4vaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZSIpfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe2coIm1vdXNlb3V0Iix0KX1mdW5jdGlvbiBvKGUpe3Quc3RvcCgpLF89bi5tb3VzZVBvcyhiLGUpLGcoIm1vdXNlZG93biIsZSl9ZnVuY3Rpb24gcyhlKXt2YXIgcj10LmRyYWdSb3RhdGUmJnQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO3gmJiFyJiZnKCJjb250ZXh0bWVudSIseCkseD1udWxsLGcoIm1vdXNldXAiLGUpfWZ1bmN0aW9uIGwoZSl7aWYoISh0LmRyYWdQYW4mJnQuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUmJnQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKSl7Zm9yKHZhciByPWUudG9FbGVtZW50fHxlLnRhcmdldDtyJiZyIT09Yjspcj1yLnBhcmVudE5vZGU7cj09PWImJmcoIm1vdXNlbW92ZSIsZSl9fWZ1bmN0aW9uIGMoZSl7dC5zdG9wKCkseSgidG91Y2hzdGFydCIsZSksIWUudG91Y2hlc3x8ZS50b3VjaGVzLmxlbmd0aD4xfHwodz8oY2xlYXJUaW1lb3V0KHcpLHc9bnVsbCxnKCJkYmxjbGljayIsZSkpOnc9c2V0VGltZW91dChkLDMwMCkpfWZ1bmN0aW9uIHUodCl7eSgidG91Y2htb3ZlIix0KX1mdW5jdGlvbiBmKHQpe3koInRvdWNoZW5kIix0KX1mdW5jdGlvbiBoKHQpe3koInRvdWNoY2FuY2VsIix0KX1mdW5jdGlvbiBkKCl7dz1udWxsfWZ1bmN0aW9uIHAodCl7bi5tb3VzZVBvcyhiLHQpLmVxdWFscyhfKSYmZygiY2xpY2siLHQpfWZ1bmN0aW9uIG0odCl7ZygiZGJsY2xpY2siLHQpLHQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiB2KHQpe3g9dCx0LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gZyhlLHIpe3ZhciBpPW4ubW91c2VQb3MoYixyKTtyZXR1cm4gdC5maXJlKGUse2xuZ0xhdDp0LnVucHJvamVjdChpKSxwb2ludDppLG9yaWdpbmFsRXZlbnQ6cn0pfWZ1bmN0aW9uIHkoZSxyKXt2YXIgYT1uLnRvdWNoUG9zKGIsciksbz1hLnJlZHVjZShmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5hZGQoZS5kaXYobi5sZW5ndGgpKX0sbmV3IGkoMCwwKSk7cmV0dXJuIHQuZmlyZShlLHtsbmdMYXQ6dC51bnByb2plY3QobykscG9pbnQ6byxsbmdMYXRzOmEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnVucHJvamVjdChlKX0sdGhpcykscG9pbnRzOmEsb3JpZ2luYWxFdmVudDpyfSl9dmFyIGI9dC5nZXRDYW52YXNDb250YWluZXIoKSx4PW51bGwsXz1udWxsLHc9bnVsbDtmb3IodmFyIE0gaW4gYSl0W01dPW5ldyBhW01dKHQsZSksZS5pbnRlcmFjdGl2ZSYmZVtNXSYmdFtNXS5lbmFibGUoKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixyLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbywhMSksYi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixjLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdSwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsaCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsbSwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdiwhMSl9fSx7Ii4uL3V0aWwvZG9tIjo0MzYsIi4vaGFuZGxlci9ib3hfem9vbSI6NDIxLCIuL2hhbmRsZXIvZGJsY2xpY2tfem9vbSI6NDIyLCIuL2hhbmRsZXIvZHJhZ19wYW4iOjQyMywiLi9oYW5kbGVyL2RyYWdfcm90YXRlIjo0MjQsIi4vaGFuZGxlci9rZXlib2FyZCI6NDI1LCIuL2hhbmRsZXIvc2Nyb2xsX3pvb20iOjQyNiwiLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlIjo0MjcsInBvaW50LWdlb21ldHJ5Ijo0OTN9XSw0MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC91dGlsIiksaT10KCIuLi91dGlsL2ludGVycG9sYXRlIiksYT10KCIuLi91dGlsL2Jyb3dzZXIiKSxvPXQoIi4uL2dlby9sbmdfbGF0Iikscz10KCIuLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxsPXQoInBvaW50LWdlb21ldHJ5IiksYz1lLmV4cG9ydHM9ZnVuY3Rpb24oKXt9O24uZXh0ZW5kKGMucHJvdG90eXBlLHtnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uY2VudGVyfSxzZXRDZW50ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcjp0fSxlKSx0aGlzfSxwYW5CeTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLG4uZXh0ZW5kKHtvZmZzZXQ6bC5jb252ZXJ0KHQpLm11bHQoLTEpfSxlKSxyKSx0aGlzfSxwYW5UbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKG4uZXh0ZW5kKHtjZW50ZXI6dH0sZSkscil9LGdldFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uem9vbX0sc2V0Wm9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7em9vbTp0fSxlKSx0aGlzfSx6b29tVG86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVhc2VUbyhuLmV4dGVuZCh7em9vbTp0fSxlKSxyKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpKzEsdCxlKSx0aGlzfSx6b29tT3V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpLTEsdCxlKSx0aGlzfSxnZXRCZWFyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmJlYXJpbmd9LHNldEJlYXJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2JlYXJpbmc6dH0sZSksdGhpc30scm90YXRlVG86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVhc2VUbyhuLmV4dGVuZCh7YmVhcmluZzp0fSxlKSxyKX0scmVzZXROb3J0aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJvdGF0ZVRvKDAsbi5leHRlbmQoe2R1cmF0aW9uOjFlM30sdCksZSksdGhpc30sc25hcFRvTm9ydGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpPHRoaXMuX2JlYXJpbmdTbmFwP3RoaXMucmVzZXROb3J0aCh0LGUpOnRoaXN9LGdldFBpdGNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNofSxzZXRQaXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGl0Y2g6dH0sZSksdGhpc30sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSxyKXtlPW4uZXh0ZW5kKHtwYWRkaW5nOjAsb2Zmc2V0OlswLDBdLG1heFpvb206MS8wfSxlKSx0PXMuY29udmVydCh0KTt2YXIgaT1sLmNvbnZlcnQoZS5vZmZzZXQpLGE9dGhpcy50cmFuc2Zvcm0sbz1hLnByb2plY3QodC5nZXROb3J0aFdlc3QoKSksYz1hLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSksdT1jLnN1YihvKSxmPShhLndpZHRoLTIqZS5wYWRkaW5nLTIqTWF0aC5hYnMoaS54KSkvdS54LGg9KGEuaGVpZ2h0LTIqZS5wYWRkaW5nLTIqTWF0aC5hYnMoaS55KSkvdS55O3JldHVybiBlLmNlbnRlcj1hLnVucHJvamVjdChvLmFkZChjKS5kaXYoMikpLGUuem9vbT1NYXRoLm1pbihhLnNjYWxlWm9vbShhLnNjYWxlKk1hdGgubWluKGYsaCkpLGUubWF4Wm9vbSksZS5iZWFyaW5nPTAsZS5saW5lYXI/dGhpcy5lYXNlVG8oZSxyKTp0aGlzLmZseVRvKGUscil9LGp1bXBUbzpmdW5jdGlvbih0LGUpe3RoaXMuc3RvcCgpO3ZhciByPXRoaXMudHJhbnNmb3JtLG49ITEsaT0hMSxhPSExO3JldHVybiJ6b29tImluIHQmJnIuem9vbSE9PSt0Lnpvb20mJihuPSEwLHIuem9vbT0rdC56b29tKSwKImNlbnRlciJpbiB0JiYoci5jZW50ZXI9by5jb252ZXJ0KHQuY2VudGVyKSksImJlYXJpbmciaW4gdCYmci5iZWFyaW5nIT09K3QuYmVhcmluZyYmKGk9ITAsci5iZWFyaW5nPSt0LmJlYXJpbmcpLCJwaXRjaCJpbiB0JiZyLnBpdGNoIT09K3QucGl0Y2gmJihhPSEwLHIucGl0Y2g9K3QucGl0Y2gpLHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKS5maXJlKCJtb3ZlIixlKSxuJiZ0aGlzLmZpcmUoInpvb21zdGFydCIsZSkuZmlyZSgiem9vbSIsZSkuZmlyZSgiem9vbWVuZCIsZSksaSYmdGhpcy5maXJlKCJyb3RhdGUiLGUpLGEmJnRoaXMuZmlyZSgicGl0Y2giLGUpLHRoaXMuZmlyZSgibW92ZWVuZCIsZSl9LGVhc2VUbzpmdW5jdGlvbih0LGUpe3RoaXMuc3RvcCgpLHQ9bi5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOm4uZWFzZX0sdCk7dmFyIHIsYSxzPXRoaXMudHJhbnNmb3JtLGM9bC5jb252ZXJ0KHQub2Zmc2V0KSx1PXRoaXMuZ2V0Wm9vbSgpLGY9dGhpcy5nZXRCZWFyaW5nKCksaD10aGlzLmdldFBpdGNoKCksZD0iem9vbSJpbiB0Pyt0Lnpvb206dSxwPSJiZWFyaW5nImluIHQ/dGhpcy5fbm9ybWFsaXplQmVhcmluZyh0LmJlYXJpbmcsZik6ZixtPSJwaXRjaCJpbiB0Pyt0LnBpdGNoOmg7ImNlbnRlciJpbiB0PyhyPW8uY29udmVydCh0LmNlbnRlciksYT1zLmNlbnRlclBvaW50LmFkZChjKSk6ImFyb3VuZCJpbiB0PyhyPW8uY29udmVydCh0LmFyb3VuZCksYT1zLmxvY2F0aW9uUG9pbnQocikpOihhPXMuY2VudGVyUG9pbnQuYWRkKGMpLHI9cy5wb2ludExvY2F0aW9uKGEpKTt2YXIgdj1zLmxvY2F0aW9uUG9pbnQocik7cmV0dXJuIHQuYW5pbWF0ZT09PSExJiYodC5kdXJhdGlvbj0wKSx0aGlzLnpvb21pbmc9ZCE9PXUsdGhpcy5yb3RhdGluZz1mIT09cCx0aGlzLnBpdGNoaW5nPW0hPT1oLHQubm9Nb3ZlU3RhcnR8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLnpvb21pbmcmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IixlKSxjbGVhclRpbWVvdXQodGhpcy5fb25FYXNlRW5kKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKHQpe3RoaXMuem9vbWluZyYmKHMuem9vbT1pKHUsZCx0KSksdGhpcy5yb3RhdGluZyYmKHMuYmVhcmluZz1pKGYscCx0KSksdGhpcy5waXRjaGluZyYmKHMucGl0Y2g9aShoLG0sdCkpLHMuc2V0TG9jYXRpb25BdFBvaW50KHIsdi5hZGQoYS5zdWIodikuX211bHQodCkpKSx0aGlzLmZpcmUoIm1vdmUiLGUpLHRoaXMuem9vbWluZyYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dC5kZWxheUVuZEV2ZW50cz90aGlzLl9vbkVhc2VFbmQ9c2V0VGltZW91dCh0aGlzLl9lYXNlVG9FbmQuYmluZCh0aGlzLGUpLHQuZGVsYXlFbmRFdmVudHMpOnRoaXMuX2Vhc2VUb0VuZChlKX0uYmluZCh0aGlzKSx0KSx0aGlzfSxfZWFzZVRvRW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbWluZzt0aGlzLnpvb21pbmc9ITEsdGhpcy5yb3RhdGluZz0hMSx0aGlzLnBpdGNoaW5nPSExLGUmJnRoaXMuZmlyZSgiem9vbWVuZCIsdCksdGhpcy5maXJlKCJtb3ZlZW5kIix0KX0sZmx5VG86ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPShrKmstVCpUKyh0Py0xOjEpKkwqTCpBKkEpLygyKih0P2s6VCkqTCpBKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBhKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIGModCl7cmV0dXJuIGEodCkvcyh0KX10aGlzLnN0b3AoKSx0PW4uZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOm4uZWFzZX0sdCk7dmFyIHU9dGhpcy50cmFuc2Zvcm0sZj1sLmNvbnZlcnQodC5vZmZzZXQpLGg9dGhpcy5nZXRab29tKCksZD10aGlzLmdldEJlYXJpbmcoKSxwPXRoaXMuZ2V0UGl0Y2goKSxtPSJjZW50ZXIiaW4gdD9vLmNvbnZlcnQodC5jZW50ZXIpOnRoaXMuZ2V0Q2VudGVyKCksdj0iem9vbSJpbiB0Pyt0Lnpvb206aCxnPSJiZWFyaW5nImluIHQ/dGhpcy5fbm9ybWFsaXplQmVhcmluZyh0LmJlYXJpbmcsZCk6ZCx5PSJwaXRjaCJpbiB0Pyt0LnBpdGNoOnA7TWF0aC5hYnModS5jZW50ZXIubG5nKStNYXRoLmFicyhtLmxuZyk+MTgwJiYodS5jZW50ZXIubG5nPjAmJm0ubG5nPDA/bS5sbmcrPTM2MDp1LmNlbnRlci5sbmc8MCYmbS5sbmc+MCYmKG0ubG5nLT0zNjApKTt2YXIgYj11Lnpvb21TY2FsZSh2LWgpLHg9dS5wb2ludCxfPSJjZW50ZXIiaW4gdD91LnByb2plY3QobSkuc3ViKGYuZGl2KGIpKTp4LHc9dS53b3JsZFNpemUsTT10LmN1cnZlLFQ9TWF0aC5tYXgodS53aWR0aCx1LmhlaWdodCksaz1UL2IsQT1fLnN1Yih4KS5tYWcoKTtpZigibWluWm9vbSJpbiB0KXt2YXIgRT1uLmNsYW1wKE1hdGgubWluKHQubWluWm9vbSxoLHYpLHUubWluWm9vbSx1Lm1heFpvb20pLFM9VC91Lnpvb21TY2FsZShFLWgpO009TWF0aC5zcXJ0KFMvQSoyKX12YXIgTD1NKk0sQz1yKDApLEk9ZnVuY3Rpb24odCl7cmV0dXJuIHMoQykvcyhDK00qdCl9LEQ9ZnVuY3Rpb24odCl7cmV0dXJuIFQqKChzKEMpKmMoQytNKnQpLWEoQykpL0wpL0F9LFA9KHIoMSktQykvTTtpZihNYXRoLmFicyhBKTwxZS02KXtpZihNYXRoLmFicyhULWspPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKHQpO3ZhciB6PWs8VD8tMToxO1A9TWF0aC5hYnMoTWF0aC5sb2coay9UKSkvTSxEPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKHoqTSp0KX19aWYoImR1cmF0aW9uImluIHQpdC5kdXJhdGlvbj0rdC5kdXJhdGlvbjtlbHNle3ZhciBPPSJzY3JlZW5TcGVlZCJpbiB0Pyt0LnNjcmVlblNwZWVkL006K3Quc3BlZWQ7dC5kdXJhdGlvbj0xZTMqUC9PfXJldHVybiB0aGlzLnpvb21pbmc9ITAsZCE9PWcmJih0aGlzLnJvdGF0aW5nPSEwKSxwIT09eSYmKHRoaXMucGl0Y2hpbmc9ITApLHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLmZpcmUoInpvb21zdGFydCIsZSksdGhpcy5fZWFzZShmdW5jdGlvbih0KXt2YXIgcj10KlAsbj1EKHIpO3Uuem9vbT1oK3Uuc2NhbGVab29tKDEvSShyKSksdS5jZW50ZXI9dS51bnByb2plY3QoeC5hZGQoXy5zdWIoeCkubXVsdChuKSksdyksdGhpcy5yb3RhdGluZyYmKHUuYmVhcmluZz1pKGQsZyx0KSksdGhpcy5waXRjaGluZyYmKHUucGl0Y2g9aShwLHksdCkpLHRoaXMuZmlyZSgibW92ZSIsZSksdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dGhpcy56b29taW5nPSExLHRoaXMucm90YXRpbmc9ITEsdGhpcy5waXRjaGluZz0hMSx0aGlzLmZpcmUoInpvb21lbmQiLGUpLHRoaXMuZmlyZSgibW92ZWVuZCIsZSl9LHQpLHRoaXN9LGlzRWFzaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hYm9ydEZufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fib3J0Rm4mJih0aGlzLl9hYm9ydEZuKCksdGhpcy5fZmluaXNoRWFzZSgpKSx0aGlzfSxfZWFzZTpmdW5jdGlvbih0LGUscil7dGhpcy5fZmluaXNoRm49ZSx0aGlzLl9hYm9ydEZuPWEudGltZWQoZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsci5lYXNpbmcoZSkpLDE9PT1lJiZ0aGlzLl9maW5pc2hFYXNlKCl9LHIuYW5pbWF0ZT09PSExPzA6ci5kdXJhdGlvbix0aGlzKX0sX2ZpbmlzaEVhc2U6ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fYWJvcnRGbjt2YXIgdD10aGlzLl9maW5pc2hGbjtkZWxldGUgdGhpcy5fZmluaXNoRm4sdC5jYWxsKHRoaXMpfSxfbm9ybWFsaXplQmVhcmluZzpmdW5jdGlvbih0LGUpe3Q9bi53cmFwKHQsLTE4MCwxODApO3ZhciByPU1hdGguYWJzKHQtZSk7cmV0dXJuIE1hdGguYWJzKHQtMzYwLWUpPHImJih0LT0zNjApLE1hdGguYWJzKHQrMzYwLWUpPHImJih0Kz0zNjApLHR9LF91cGRhdGVFYXNpbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2lmKHRoaXMuZWFzZSl7dmFyIGE9dGhpcy5lYXNlLG89KERhdGUubm93KCktYS5zdGFydCkvYS5kdXJhdGlvbixzPWEuZWFzaW5nKG8rLjAxKS1hLmVhc2luZyhvKSxsPS4yNy9NYXRoLnNxcnQocypzKzFlLTQpKi4wMSxjPU1hdGguc3FydCguMDcyOS1sKmwpO2k9bi5iZXppZXIobCxjLC4yNSwxKX1lbHNlIGk9cj9uLmJlemllci5hcHBseShuLHIpOm4uZWFzZTtyZXR1cm4gdGhpcy5lYXNlPXtzdGFydDoobmV3IERhdGUpLmdldFRpbWUoKSx0bzpNYXRoLnBvdygyLGUpLGR1cmF0aW9uOnQsZWFzaW5nOml9LGl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjM0NywiLi4vZ2VvL2xuZ19sYXRfYm91bmRzIjozNDgsIi4uL3V0aWwvYnJvd3NlciI6NDM0LCIuLi91dGlsL2ludGVycG9sYXRlIjo0NDQsIi4uL3V0aWwvdXRpbCI6NDUwLCJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9dmFyIGk9dCgiLi9jb250cm9sIiksYT10KCIuLi8uLi91dGlsL2RvbSIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW4sbi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXTtuLmF0dHJpYnV0aW9uJiZlLmluZGV4T2Yobi5hdHRyaWJ1dGlvbik8MCYmZS5wdXNoKG4uYXR0cmlidXRpb24pfXJldHVybiBlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSxlPWUuZmlsdGVyKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXIrMTtuPGUubGVuZ3RoO24rKylpZihlW25dLmluZGV4T2YodCk+PTApcmV0dXJuITE7cmV0dXJuITB9KSxlLmpvaW4oIiB8ICIpfSxuLnByb3RvdHlwZT1vLmluaGVyaXQoaSx7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbS1yaWdodCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1hLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWIiLHQuZ2V0Q29udGFpbmVyKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0Lm9uKCJzb3VyY2UubG9hZCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcykpLHQub24oInNvdXJjZS5jaGFuZ2UiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpKSx0Lm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzKSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmsuYmluZCh0aGlzKSksZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5zdHlsZSYmKHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9bi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZyh0aGlzLl9tYXAuc3R5bGUuc291cmNlcykpLHRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtYXBib3gtaW1wcm92ZS1tYXAiKVswXSx0aGlzLl91cGRhdGVFZGl0TGluaygpfSxfdXBkYXRlRWRpdExpbms6ZnVuY3Rpb24oKXtpZih0aGlzLl9lZGl0TGluayl7dmFyIHQ9dGhpcy5fbWFwLmdldENlbnRlcigpO3RoaXMuX2VkaXRMaW5rLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwLWZlZWRiYWNrLyMvIit0LmxuZysiLyIrdC5sYXQrIi8iK01hdGgucm91bmQodGhpcy5fbWFwLmdldFpvb20oKSsxKX19fSl9LHsiLi4vLi4vdXRpbC9kb20iOjQzNiwiLi4vLi4vdXRpbC91dGlsIjo0NTAsIi4vY29udHJvbCI6NDE4fV0sNDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi8uLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9dGhpcy5fY29udGFpbmVyPXRoaXMub25BZGQodCk7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucG9zaXRpb24pe3ZhciByPXRoaXMub3B0aW9ucy5wb3NpdGlvbixuPXQuX2NvbnRyb2xDb3JuZXJzW3JdO2UuY2xhc3NOYW1lKz0iIG1hcGJveGdsLWN0cmwiLHIuaW5kZXhPZigiYm90dG9tIikhPT0tMT9uLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vblJlbW92ZSYmdGhpcy5vblJlbW92ZSh0aGlzLl9tYXApLHRoaXMuX21hcD1udWxsLHRoaXN9fSxpLmV4dGVuZChuLnByb3RvdHlwZSxhKX0seyIuLi8uLi91dGlsL2V2ZW50ZWQiOjQ0MiwiLi4vLi4vdXRpbC91dGlsIjo0NTB9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtzLnNldE9wdGlvbnModGhpcyx0KX12YXIgaT10KCIuL2NvbnRyb2wiKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uO3ZhciBsPXtlbmFibGVIaWdoQWNjdXJhY3k6ITEsdGltZW91dDo2ZTN9O24ucHJvdG90eXBlPXMuaW5oZXJpdChpLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLWdyb3VwIix0LmdldENvbnRhaW5lcigpKTtyZXR1cm4gYS5zdXBwb3J0c0dlb2xvY2F0aW9uPyh0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPW8uY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrR2VvbG9jYXRlLmJpbmQodGhpcykpLGUpOmV9LF9vbkNvbnRleHRNZW51OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sX29uQ2xpY2tHZW9sb2NhdGU6ZnVuY3Rpb24oKXtuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX3N1Y2Nlc3MuYmluZCh0aGlzKSx0aGlzLl9lcnJvci5iaW5kKHRoaXMpLGwpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaC5iaW5kKHRoaXMpLDFlNCl9LF9zdWNjZXNzOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbdC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlXSx6b29tOjE3LGJlYXJpbmc6MCxwaXRjaDowfSksdGhpcy5maXJlKCJnZW9sb2NhdGUiLHQpLHRoaXMuX2ZpbmlzaCgpfSxfZXJyb3I6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJlcnJvciIsdCksdGhpcy5fZmluaXNoKCl9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9fSl9LHsiLi4vLi4vdXRpbC9icm93c2VyIjo0MzQsIi4uLy4uL3V0aWwvZG9tIjo0MzYsIi4uLy4uL3V0aWwvdXRpbCI6NDUwLCIuL2NvbnRyb2wiOjQxOH1dLDQyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Muc2V0T3B0aW9ucyh0aGlzLHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KHQudHlwZSx7YnV0dG9uOjIsYnV0dG9uczoyLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxkZXRhaWw6dC5kZXRhaWwsdmlldzp0LnZpZXcsc2NyZWVuWDp0LnNjcmVlblgsc2NyZWVuWTp0LnNjcmVlblksY2xpZW50WDp0LmNsaWVudFgsY2xpZW50WTp0LmNsaWVudFksbW92ZW1lbnRYOnQubW92ZW1lbnRYLG1vdmVtZW50WTp0Lm1vdmVtZW50WSxjdHJsS2V5OnQuY3RybEtleSxzaGlmdEtleTp0LnNoaWZ0S2V5LGFsdEtleTp0LmFsdEtleSxtZXRhS2V5OnQubWV0YUtleX0pfXZhciBhPXQoIi4vY29udHJvbCIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXMuaW5oZXJpdChhLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9Im1hcGJveGdsLWN0cmwiLHI9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLGUrIi1ncm91cCIsdC5nZXRDb250YWluZXIoKSk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fb25Db250ZXh0TWVudS5iaW5kKHRoaXMpKSx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20taW4iLHQuem9vbUluLmJpbmQodCkpLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20tb3V0Iix0Lnpvb21PdXQuYmluZCh0KSksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oZSsiLWljb24gIitlKyItY29tcGFzcyIsdC5yZXNldE5vcnRoLmJpbmQodCkpLHRoaXMuX2NvbXBhc3NBcnJvdz1vLmNyZWF0ZSgiZGl2IiwiYXJyb3ciLHRoaXMuX2NvbXBhc3MpLHRoaXMuX2NvbXBhc3MuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkNvbXBhc3NEb3duLmJpbmQodGhpcykpLHRoaXMuX29uQ29tcGFzc01vdmU9dGhpcy5fb25Db21wYXNzTW92ZS5iaW5kKHRoaXMpLHRoaXMuX29uQ29tcGFzc1VwPXRoaXMuX29uQ29tcGFzc1VwLmJpbmQodGhpcyksdC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cuYmluZCh0aGlzKSksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSxyfSxfb25Db250ZXh0TWVudTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LF9vbkNvbXBhc3NEb3duOmZ1bmN0aW9uKHQpezA9PT10LmJ1dHRvbiYmKG8uZGlzYWJsZURyYWcoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uQ29tcGFzc01vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uQ29tcGFzc1VwKSx0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzTW92ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJih0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzVXA6ZnVuY3Rpb24odCl7MD09PXQuYnV0dG9uJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbkNvbXBhc3NNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbkNvbXBhc3NVcCksby5lbmFibGVEcmFnKCksdGhpcy5fZWwuZGlzcGF0Y2hFdmVudChpKHQpKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGUpe3ZhciByPW8uY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gci50eXBlPSJidXR0b24iLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSkscn0sX3JvdGF0ZUNvbXBhc3NBcnJvdzpmdW5jdGlvbigpe3ZhciB0PSJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH19KX0seyIuLi8uLi91dGlsL2RvbSI6NDM2LCIuLi8uLi91dGlsL3V0aWwiOjQ1MCwiLi9jb250cm9sIjo0MTh9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj10LmdldENvbnRhaW5lcigpLG8uYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxvPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCExKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3Quc2hpZnRLZXkmJjA9PT10LmJ1dHRvbiYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSxpLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9hY3RpdmU9ITApfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1pLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtYm94em9vbSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tc3RhcnQiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxhPU1hdGgubWF4KGUueCxyLngpLG89TWF0aC5taW4oZS55LHIueSkscz1NYXRoLm1heChlLnksci55KTtpLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsInRyYW5zbGF0ZSgiK24rInB4LCIrbysicHgpIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWEtbisicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9cy1vKyJweCJ9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7aWYoMD09PXQuYnV0dG9uKXt2YXIgZT10aGlzLl9zdGFydFBvcyxyPWkubW91c2VQb3ModGhpcy5fZWwsdCksbj1uZXcgYSh0aGlzLl9tYXAudW5wcm9qZWN0KGUpLHRoaXMuX21hcC51bnByb2plY3QocikpO3RoaXMuX2ZpbmlzaCgpLGUueD09PXIueCYmZS55PT09ci55P3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCk6dGhpcy5fbWFwLmZpdEJvdW5kcyhuLHtsaW5lYXI6ITB9KS5maXJlKCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDp0LGJveFpvb21Cb3VuZHM6bn0pfX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCkpfSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYodGhpcy5fYm94LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksaS5lbmFibGVEcmFnKCl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9fX0seyIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjM0OCwiLi4vLi4vdXRpbC9kb20iOjQzNiwiLi4vLi4vdXRpbC91dGlsIjo0NTB9XSw0MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9vbkRibENsaWNrPXRoaXMuX29uRGJsQ2xpY2suYmluZCh0aGlzKX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZT17X2VuYWJsZWQ6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRibENsaWNrKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9tYXAub2ZmKCJkYmxjbGljayIsdGhpcy5fb25EYmxDbGljayksdGhpcy5fZW5hYmxlZD0hMSl9LF9vbkRibENsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfX19LHt9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjMsMSk7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLF9hY3RpdmU6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2lnbm9yZUV2ZW50KHQpfHx0aGlzLmlzQWN0aXZlKCl8fCh0LnRvdWNoZXM/KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCkpOihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSksdGhpcy5fYWN0aXZlPSExLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX3Bvcz1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHRoaXMuX2luZXJ0aWE9W1tEYXRlLm5vdygpLHRoaXMuX3Bvc11dKX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoImRyYWdzdGFydCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLHQpKTt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHI9dGhpcy5fbWFwO3Iuc3RvcCgpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbRGF0ZS5ub3coKSxlXSksci50cmFuc2Zvcm0uc2V0TG9jYXRpb25BdFBvaW50KHIudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odGhpcy5fcG9zKSxlKSx0aGlzLl9maXJlRXZlbnQoImRyYWciLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsdCksdGhpcy5fcG9zPWUsdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uVXA6ZnVuY3Rpb24odCl7aWYodGhpcy5pc0FjdGl2ZSgpKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT1mdW5jdGlvbigpe3RoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCl9LmJpbmQodGhpcykscj10aGlzLl9pbmVydGlhO2lmKHIubGVuZ3RoPDIpcmV0dXJuIHZvaWQgZSgpO3ZhciBuPXJbci5sZW5ndGgtMV0saT1yWzBdLGE9blsxXS5zdWIoaVsxXSkscz0oblswXS1pWzBdKS8xZTM7aWYoMD09PXN8fG5bMV0uZXF1YWxzKGlbMV0pKXJldHVybiB2b2lkIGUoKTt2YXIgbD1hLm11bHQoLjMvcyksYz1sLm1hZygpO2M+MTQwMCYmKGM9MTQwMCxsLl91bml0KCkuX211bHQoYykpO3ZhciB1PWMvNzUwLGY9bC5tdWx0KC11LzIpO3RoaXMuX21hcC5wYW5CeShmLHtkdXJhdGlvbjoxZTMqdSxlYXNpbmc6byxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkpfSxfb25Ub3VjaEVuZDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKSl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9LF9pZ25vcmVFdmVudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYoZS5ib3hab29tJiZlLmJveFpvb20uaXNBY3RpdmUoKSlyZXR1cm4hMDtpZihlLmRyYWdSb3RhdGUmJmUuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKHQudG91Y2hlcylyZXR1cm4gdC50b3VjaGVzLmxlbmd0aD4xO2lmKHQuY3RybEtleSlyZXR1cm4hMDtyZXR1cm4ibW91c2Vtb3ZlIj09PXQudHlwZT90LmJ1dHRvbnMmITE6MCE9PXQuYnV0dG9ufSxfZHJhaW5JbmVydGlhQnVmZmVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1EYXRlLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX19fSx7Ii4uLy4uL3V0aWwvZG9tIjo0MzYsIi4uLy4uL3V0aWwvdXRpbCI6NDUwfV0sNDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgcz1vLmJlemllcigwLDAsLjI1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uRG93biksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9pZ25vcmVFdmVudCh0KSYmIXRoaXMuaXNBY3RpdmUoKSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9pbmVydGlhPVtbRGF0ZS5ub3coKSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpXV0sdGhpcy5fc3RhcnRQb3M9dGhpcy5fcG9zPWkubW91c2VQb3ModGhpcy5fZWwsdCksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7dmFyIGU9dGhpcy5fc3RhcnRQb3Muc3ViKHRoaXMuX2NlbnRlcik7ZS5tYWcoKTwyMDAmJih0aGlzLl9jZW50ZXI9dGhpcy5fc3RhcnRQb3MuYWRkKG5ldyBhKC0yMDAsMCkuX3JvdGF0ZShlLmFuZ2xlKCkpKSksdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZXN0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCkpO3ZhciBlPXRoaXMuX21hcDtlLnN0b3AoKTt2YXIgcj10aGlzLl9wb3Msbj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGE9dGhpcy5fY2VudGVyLG89ci5zdWIoYSkuYW5nbGVXaXRoKG4uc3ViKGEpKS9NYXRoLlBJKjE4MCxzPWUuZ2V0QmVhcmluZygpLW8sbD10aGlzLl9pbmVydGlhLGM9bFtsLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxsLnB1c2goW0RhdGUubm93KCksZS5fbm9ybWFsaXplQmVhcmluZyhzLGNbMV0pXSksZS50cmFuc2Zvcm0uYmVhcmluZz1zLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLHRoaXMuX3Bvcz1ufX0sX29uVXA6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2lnbm9yZUV2ZW50KHQpJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuaXNBY3RpdmUoKSkpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7dmFyIGU9dGhpcy5fbWFwLHI9ZS5nZXRCZWFyaW5nKCksbj10aGlzLl9pbmVydGlhLGk9ZnVuY3Rpb24oKXtNYXRoLmFicyhyKTx0aGlzLl9iZWFyaW5nU25hcD9lLnJlc2V0Tm9ydGgoe25vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSk6dGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KX0uYmluZCh0aGlzKTtpZihuLmxlbmd0aDwyKXJldHVybiB2b2lkIGkoKTt2YXIgYT1uWzBdLG89bltuLmxlbmd0aC0xXSxsPW5bbi5sZW5ndGgtMl0sYz1lLl9ub3JtYWxpemVCZWFyaW5nKHIsbFsxXSksdT1vWzFdLWFbMV0sZj11PDA/LTE6MSxoPShvWzBdLWFbMF0pLzFlMztpZigwPT09dXx8MD09PWgpcmV0dXJuIHZvaWQgaSgpO3ZhciBkPU1hdGguYWJzKHUqKC4yNS9oKSk7ZD4xODAmJihkPTE4MCk7dmFyIHA9ZC8xODA7Yys9ZipkKihwLzIpLE1hdGguYWJzKGUuX25vcm1hbGl6ZUJlYXJpbmcoYywwKSk8dGhpcy5fYmVhcmluZ1NuYXAmJihjPWUuX25vcm1hbGl6ZUJlYXJpbmcoMCxjKSksZS5yb3RhdGVUbyhjLHtkdXJhdGlvbjoxZTMqcCxlYXNpbmc6cyxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9tYXAuZmlyZSh0LHtvcmlnaW5hbEV2ZW50OmV9KX0sX2lnbm9yZUV2ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZihlLmJveFpvb20mJmUuYm94Wm9vbS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKGUuZHJhZ1BhbiYmZS5kcmFnUGFuLmlzQWN0aXZlKCkpcmV0dXJuITA7aWYodC50b3VjaGVzKXJldHVybiB0LnRvdWNoZXMubGVuZ3RoPjE7dmFyIHI9dC5jdHJsS2V5PzE6MixuPXQuY3RybEtleT8wOjI7cmV0dXJuIm1vdXNlbW92ZSI9PT10LnR5cGU/dC5idXR0b25zJjA9PT1yOnQuYnV0dG9uIT09bn0sX2RyYWluSW5lcnRpYUJ1ZmZlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9pbmVydGlhLGU9RGF0ZS5ub3coKTt0Lmxlbmd0aD4wJiZlLXRbMF1bMF0+MTYwOyl0LnNoaWZ0KCl9fX0seyIuLi8uLi91dGlsL2RvbSI6NDM2LCIuLi8uLi91dGlsL3V0aWwiOjQ1MCwicG9pbnQtZ2VvbWV0cnkiOjQ5M31dLDQyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fb25LZXlEb3duPXRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBlPXRoaXMuX21hcCxyPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCFlLmlzRWFzaW5nKCkpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplLnpvb21UbyhNYXRoLnJvdW5kKGUuZ2V0Wm9vbSgpKSsodC5zaGlmdEtleT8yOjEpLHIpO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOmUuem9vbVRvKE1hdGgucm91bmQoZS5nZXRab29tKCkpLSh0LnNoaWZ0S2V5PzI6MSkscik7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtiZWFyaW5nOmUuZ2V0QmVhcmluZygpLTJ9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbLTgwLDBdLHIpKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/ZS5lYXNlVG8oe2JlYXJpbmc6ZS5nZXRCZWFyaW5nKCkrMn0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFs4MCwwXSxyKSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtwaXRjaDplLmdldFBpdGNoKCkrNX0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFswLC04MF0scikpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9lLmVhc2VUbyh7cGl0Y2g6TWF0aC5tYXgoZS5nZXRQaXRjaCgpLTUsMCl9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbMCw4MF0scikpfX19fX0se31dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW47dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOiIiLGw9cy5pbmRleE9mKCJmaXJlZm94IikhPT0tMSxjPXMuaW5kZXhPZigic2FmYXJpIikhPT0tMSYmcy5pbmRleE9mKCJjaHJvbSIpPT09LTE7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbmFibGVkPSExKX0sX29uV2hlZWw6ZnVuY3Rpb24odCl7dmFyIGU7IndoZWVsIj09PXQudHlwZT8oZT10LmRlbHRhWSxsJiZ0LmRlbHRhTW9kZT09PXdpbmRvdy5XaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTCYmKGUvPWEuZGV2aWNlUGl4ZWxSYXRpbyksdC5kZWx0YU1vZGU9PT13aW5kb3cuV2hlZWxFdmVudC5ET01fREVMVEFfTElORSYmKGUqPTQwKSk6Im1vdXNld2hlZWwiPT09dC50eXBlJiYoZT0tdC53aGVlbERlbHRhWSxjJiYoZS89MykpO3ZhciByPWEubm93KCksbj1yLSh0aGlzLl90aW1lfHwwKTt0aGlzLl9wb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl90aW1lPXIsMCE9PWUmJmUlNC4wMDAyNDQxNDA2MjU9PTA/KHRoaXMuX3R5cGU9IndoZWVsIixlPU1hdGguZmxvb3IoZS80KSk6MCE9PWUmJk1hdGguYWJzKGUpPDQ/dGhpcy5fdHlwZT0idHJhY2twYWQiOm4+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPWUsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKG4qZSk8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxlKz10aGlzLl9sYXN0VmFsdWUpKSx0LnNoaWZ0S2V5JiZlJiYoZS89NCksdGhpcy5fdHlwZSYmdGhpcy5fem9vbSgtZSx0KSx0LnByZXZlbnREZWZhdWx0KCl9LF9vblRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLl90eXBlPSJ3aGVlbCIsdGhpcy5fem9vbSgtdGhpcy5fbGFzdFZhbHVlKX0sX3pvb206ZnVuY3Rpb24odCxlKXtpZigwIT09dCl7dmFyIHI9dGhpcy5fbWFwLG49Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModC8xMDApKSk7dDwwJiYwIT09biYmKG49MS9uKTt2YXIgaT1yLmVhc2U/ci5lYXNlLnRvOnIudHJhbnNmb3JtLnNjYWxlLGE9ci50cmFuc2Zvcm0uc2NhbGVab29tKGkqbik7ci56b29tVG8oYSx7ZHVyYXRpb246MCxhcm91bmQ6ci51bnByb2plY3QodGhpcy5fcG9zKSxkZWxheUVuZEV2ZW50czoyMDB9LHtvcmlnaW5hbEV2ZW50OmV9KX19fX0seyIuLi8uLi91dGlsL2Jyb3dzZXIiOjQzNCwiLi4vLi4vdXRpbC9kb20iOjQzNiwiLi4vLi4vdXRpbC91dGlsIjo0NTB9XSw0Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjE1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQpLHRoaXMuX2VuYWJsZWQ9ITEpfSxkaXNhYmxlUm90YXRpb246ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSEwfSxlbmFibGVSb3RhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LF9vblN0YXJ0OmZ1bmN0aW9uKHQpe2lmKDI9PT10LnRvdWNoZXMubGVuZ3RoKXt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ZS5zdWIociksdGhpcy5fc3RhcnRTY2FsZT10aGlzLl9tYXAudHJhbnNmb3JtLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz10aGlzLl9tYXAudHJhbnNmb3JtLmJlYXJpbmcsdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMuX29uRW5kLCExKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoMj09PXQudG91Y2hlcy5sZW5ndGgpe3ZhciBlPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuYWRkKHIpLmRpdigyKSxhPWUuc3ViKHIpLG89YS5tYWcoKS90aGlzLl9zdGFydFZlYy5tYWcoKSxzPXRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ/MDoxODAqYS5hbmdsZVdpdGgodGhpcy5fc3RhcnRWZWMpL01hdGguUEksbD10aGlzLl9tYXA7aWYodGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIGM9e2R1cmF0aW9uOjAsYXJvdW5kOmwudW5wcm9qZWN0KG4pfTsicm90YXRlIj09PXRoaXMuX2dlc3R1cmVJbnRlbnQmJihjLmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK3MpLCJ6b29tIiE9PXRoaXMuX2dlc3R1cmVJbnRlbnQmJiJyb3RhdGUiIT09dGhpcy5fZ2VzdHVyZUludGVudHx8KGMuem9vbT1sLnRyYW5zZm9ybS5zY2FsZVpvb20odGhpcy5fc3RhcnRTY2FsZSpvKSksbC5zdG9wKCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYS5wdXNoKFtEYXRlLm5vdygpLG8sbl0pLGwuZWFzZVRvKGMse29yaWdpbmFsRXZlbnQ6dH0pfWVsc2V7dmFyIHU9TWF0aC5hYnMoMS1vKT4uMTU7TWF0aC5hYnMocyk+ND90aGlzLl9nZXN0dXJlSW50ZW50PSJyb3RhdGUiOnUmJih0aGlzLl9nZXN0dXJlSW50ZW50PSJ6b29tIiksdGhpcy5fZ2VzdHVyZUludGVudCYmKHRoaXMuX3N0YXJ0VmVjPWEsdGhpcy5fc3RhcnRTY2FsZT1sLnRyYW5zZm9ybS5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9bC50cmFuc2Zvcm0uYmVhcmluZyl9dC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uRW5kOmZ1bmN0aW9uKHQpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWEscj10aGlzLl9tYXA7aWYoZS5sZW5ndGg8MilyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgbj1lW2UubGVuZ3RoLTFdLGk9ZVswXSxhPXIudHJhbnNmb3JtLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKm5bMV0pLHM9ci50cmFuc2Zvcm0uc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqaVsxXSksbD1hLXMsYz0oblswXS1pWzBdKS8xZTMsdT1uWzJdO2lmKDA9PT1jfHxhPT09cylyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgZj0uMTUqbC9jO01hdGguYWJzKGYpPjIuNSYmKGY9Zj4wPzIuNTotMi41KTt2YXIgaD0xZTMqTWF0aC5hYnMoZi8oMTIqLjE1KSksZD1hK2YqaC8yZTM7ZDwwJiYoZD0wKSxyLmVhc2VUbyh7em9vbTpkLGR1cmF0aW9uOmgsZWFzaW5nOm8sYXJvdW5kOnIudW5wcm9qZWN0KHUpfSx7b3JpZ2luYWxFdmVudDp0fSl9LF9kcmFpbkluZXJ0aWFCdWZmZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPURhdGUubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfX19LHsiLi4vLi4vdXRpbC9kb20iOjQzNiwiLi4vLi4vdXRpbC91dGlsIjo0NTB9XSw0Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYmluZEFsbChbIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO24ucHJvdG90eXBlPXthZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksZGVsZXRlIHRoaXMuX21hcCx0aGlzfSxfb25IYXNoQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9bG9jYXRpb24uaGFzaC5yZXBsYWNlKCIjIiwiIikuc3BsaXQoIi8iKTtyZXR1cm4gdC5sZW5ndGg+PTMmJih0aGlzLl9tYXAuanVtcFRvKHtjZW50ZXI6Wyt0WzJdLCt0WzFdXSx6b29tOit0WzBdLGJlYXJpbmc6Kyh0WzNdfHwwKX0pLCEwKX0sX3VwZGF0ZUhhc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Q2VudGVyKCksZT10aGlzLl9tYXAuZ2V0Wm9vbSgpLHI9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxuPU1hdGgubWF4KDAsTWF0aC5jZWlsKE1hdGgubG9nKGUpL01hdGguTE4yKSksaT0iIyIrTWF0aC5yb3VuZCgxMDAqZSkvMTAwKyIvIit0LmxhdC50b0ZpeGVkKG4pKyIvIit0LmxuZy50b0ZpeGVkKG4pKyhyPyIvIitNYXRoLnJvdW5kKDEwKnIpLzEwOiIiKTt3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoIiIsIiIsaSl9fX0seyIuLi91dGlsL3V0aWwiOjQ1MH1dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXZhciBpPXQoIi4uL3V0aWwvY2FudmFzIiksYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL3V0aWwvYnJvd3NlciIpLHM9dCgiLi4vdXRpbC9icm93c2VyIikud2luZG93LGw9dCgiLi4vdXRpbC9ldmVudGVkIiksYz10KCIuLi91dGlsL2RvbSIpLHU9dCgiLi4vc3R5bGUvc3R5bGUiKSxmPXQoIi4uL3N0eWxlL2FuaW1hdGlvbl9sb29wIiksaD10KCIuLi9yZW5kZXIvcGFpbnRlciIpLGQ9dCgiLi4vZ2VvL3RyYW5zZm9ybSIpLHA9dCgiLi9oYXNoIiksbT10KCIuL2JpbmRfaGFuZGxlcnMiKSx2PXQoIi4vY2FtZXJhIiksZz10KCIuLi9nZW8vbG5nX2xhdCIpLHk9dCgiLi4vZ2VvL2xuZ19sYXRfYm91bmRzIiksYj10KCJwb2ludC1nZW9tZXRyeSIpLHg9dCgiLi9jb250cm9sL2F0dHJpYnV0aW9uIiksXz17Y2VudGVyOlswLDBdLHpvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxtaW5ab29tOjAsbWF4Wm9vbToyMCxpbnRlcmFjdGl2ZTohMCxzY3JvbGxab29tOiEwLGJveFpvb206ITAsZHJhZ1JvdGF0ZTohMCxkcmFnUGFuOiEwLGtleWJvYXJkOiEwLGRvdWJsZUNsaWNrWm9vbTohMCx0b3VjaFpvb21Sb3RhdGU6ITAsYmVhcmluZ1NuYXA6NyxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCx3b3JrZXJDb3VudDpNYXRoLm1heChvLmhhcmR3YXJlQ29uY3VycmVuY3ktMSwxKX0sdz1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodD1hLmV4dGVuZCh7fSxfLHQpLHQud29ya2VyQ291bnQ8MSl0aHJvdyBuZXcgRXJyb3IoIndvcmtlckNvdW50IG11c3QgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4iKTt0aGlzLl9pbnRlcmFjdGl2ZT10LmludGVyYWN0aXZlLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj10LnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl90cmFja1Jlc2l6ZT10LnRyYWNrUmVzaXplLHRoaXMuX3dvcmtlckNvdW50PXQud29ya2VyQ291bnQsdGhpcy5fYmVhcmluZ1NuYXA9dC5iZWFyaW5nU25hcCwic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyP3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0LmNvbnRhaW5lcik6dGhpcy5fY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuYW5pbWF0aW9uTG9vcD1uZXcgZix0aGlzLnRyYW5zZm9ybT1uZXcgZCh0Lm1pblpvb20sdC5tYXhab29tKSx0Lm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHModC5tYXhCb3VuZHMpLGEuYmluZEFsbChbIl9mb3J3YXJkU3R5bGVFdmVudCIsIl9mb3J3YXJkU291cmNlRXZlbnQiLCJfZm9yd2FyZExheWVyRXZlbnQiLCJfZm9yd2FyZFRpbGVFdmVudCIsIl9vblN0eWxlTG9hZCIsIl9vblN0eWxlQ2hhbmdlIiwiX29uU291cmNlQWRkIiwiX29uU291cmNlUmVtb3ZlIiwiX29uU291cmNlVXBkYXRlIiwiX29uV2luZG93T25saW5lIiwiX29uV2luZG93UmVzaXplIiwiX3VwZGF0ZSIsIl9yZW5kZXIiXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMub24oIm1vdmUiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITEpKSx0aGlzLm9uKCJ6b29tIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCEwKSksdGhpcy5vbigibW92ZWVuZCIsZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkxvb3Auc2V0KDMwMCksdGhpcy5fcmVyZW5kZXIoKX0uYmluZCh0aGlzKSksdm9pZCAwIT09cyYmKHMuYWRkRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksbSh0aGlzLHQpLHRoaXMuX2hhc2g9dC5oYXNoJiYobmV3IHApLmFkZFRvKHRoaXMpLHRoaXMuX2hhc2gmJnRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpfHx0aGlzLmp1bXBUbyh7Y2VudGVyOnQuY2VudGVyLHpvb206dC56b29tLGJlYXJpbmc6dC5iZWFyaW5nLHBpdGNoOnQucGl0Y2h9KSx0aGlzLnN0YWNrcz17fSx0aGlzLl9jbGFzc2VzPVtdLHRoaXMucmVzaXplKCksdC5jbGFzc2VzJiZ0aGlzLnNldENsYXNzZXModC5jbGFzc2VzKSx0LnN0eWxlJiZ0aGlzLnNldFN0eWxlKHQuc3R5bGUpLHQuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IHgodC5hdHRyaWJ1dGlvbkNvbnRyb2wpKTt2YXIgZT10aGlzLmZpcmUuYmluZCh0aGlzLCJlcnJvciIpO3RoaXMub24oInN0eWxlLmVycm9yIixlKSx0aGlzLm9uKCJzb3VyY2UuZXJyb3IiLGUpLHRoaXMub24oInRpbGUuZXJyb3IiLGUpLHRoaXMub24oImxheWVyLmVycm9yIixlKX07YS5leHRlbmQody5wcm90b3R5cGUsbCksYS5leHRlbmQody5wcm90b3R5cGUsdi5wcm90b3R5cGUpLGEuZXh0ZW5kKHcucHJvdG90eXBlLHthZGRDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZFRvKHRoaXMpLHRoaXN9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NsYXNzZXMuaW5kZXhPZih0KT49MHx8IiI9PT10P3RoaXM6KHRoaXMuX2NsYXNzZXMucHVzaCh0KSx0aGlzLl9jbGFzc09wdGlvbnM9ZSx0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnVwZGF0ZUNsYXNzZXMoKSx0aGlzLl91cGRhdGUoITApKX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9jbGFzc2VzLmluZGV4T2YodCk7cmV0dXJuIHI8MHx8IiI9PT10P3RoaXM6KHRoaXMuX2NsYXNzZXMuc3BsaWNlKHIsMSksdGhpcy5fY2xhc3NPcHRpb25zPWUsdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS51cGRhdGVDbGFzc2VzKCksdGhpcy5fdXBkYXRlKCEwKSl9LHNldENsYXNzZXM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7bisrKSIiIT09dFtuXSYmKHJbdFtuXV09ITApO3JldHVybiB0aGlzLl9jbGFzc2VzPU9iamVjdC5rZXlzKHIpLHRoaXMuX2NsYXNzT3B0aW9ucz1lLHRoaXMuc3R5bGUmJnRoaXMuc3R5bGUudXBkYXRlQ2xhc3NlcygpLHRoaXMuX3VwZGF0ZSghMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jbGFzc2VzLmluZGV4T2YodCk+PTB9LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xhc3Nlc30scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0fHwzMDApLHRoaXMuX2NhbnZhcy5yZXNpemUodCxlKSx0aGlzLnRyYW5zZm9ybS5yZXNpemUodCxlKSx0aGlzLnBhaW50ZXIucmVzaXplKHQsZSksdGhpcy5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJtb3ZlIikuZmlyZSgicmVzaXplIikuZmlyZSgibW92ZWVuZCIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgeSh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyBiKDAsMCkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odGhpcy50cmFuc2Zvcm0uc2l6ZSkpO3JldHVybih0aGlzLnRyYW5zZm9ybS5hbmdsZXx8dGhpcy50cmFuc2Zvcm0ucGl0Y2gpJiYodC5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgYih0aGlzLnRyYW5zZm9ybS5zaXplLngsMCkpKSx0LmV4dGVuZCh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyBiKDAsdGhpcy50cmFuc2Zvcm0uc2l6ZS55KSkpKSx0fSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9eS5jb252ZXJ0KHQpO3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtlLmdldFdlc3QoKSxlLmdldEVhc3QoKV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W2UuZ2V0U291dGgoKSxlLmdldE5vcnRoKCldLHRoaXMudHJhbnNmb3JtLl9jb25zdHJhaW4oKSx0aGlzLl91cGRhdGUoKX1lbHNlIG51bGwhPT10JiZ2b2lkIDAhPT10fHwodGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2U9W10sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W10sdGhpcy5fdXBkYXRlKCkpO3JldHVybiB0aGlzfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PT10fHx2b2lkIDA9PT10PzA6dCk+PTAmJnQ8PXRoaXMudHJhbnNmb3JtLm1heFpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKTx0JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblpvb20gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxzZXRNYXhab29tOmZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PT10fHx2b2lkIDA9PT10PzIwOnQpPj10aGlzLnRyYW5zZm9ybS5taW5ab29tJiZ0PD0yMClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGJldHdlZW4gdGhlIGN1cnJlbnQgbWluWm9vbSBhbmQgMjAsIGluY2x1c2l2ZSIpfSxwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGcuY29udmVydCh0KSl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihiLmNvbnZlcnQodCkpfSxxdWVyeVJlbmRlcmVkRmVhdHVyZXM6ZnVuY3Rpb24oKXt2YXIgdCxlPXt9O3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aD8odD1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV0pOjE9PT1hcmd1bWVudHMubGVuZ3RoJiZmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJ8fEFycmF5LmlzQXJyYXkodCl9KGFyZ3VtZW50c1swXSk/dD1hcmd1bWVudHNbMF06MT09PWFyZ3VtZW50cy5sZW5ndGgmJihlPWFyZ3VtZW50c1swXSksdGhpcy5zdHlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXModGhpcy5fbWFrZVF1ZXJ5R2VvbWV0cnkodCksZSx0aGlzLnRyYW5zZm9ybS56b29tLHRoaXMudHJhbnNmb3JtLmFuZ2xlKX0sX21ha2VRdWVyeUdlb21ldHJ5OmZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVtiLmNvbnZlcnQoWzAsMF0pLGIuY29udmVydChbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XSldKTt2YXIgZTtpZih0IGluc3RhbmNlb2YgYnx8Im51bWJlciI9PXR5cGVvZiB0WzBdKWU9W2IuY29udmVydCh0KV07ZWxzZXt2YXIgcj1bYi5jb252ZXJ0KHRbMF0pLGIuY29udmVydCh0WzFdKV07ZT1bclswXSxuZXcgYihyWzFdLngsclswXS55KSxyWzFdLG5ldyBiKHJbMF0ueCxyWzFdLnkpLHJbMF1dfXJldHVybiBlPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUodCl9LmJpbmQodGhpcykpfSxxdWVyeVNvdXJjZUZlYXR1cmVzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUub2ZmKCJsb2FkIix0aGlzLl9vblN0eWxlTG9hZCkub2ZmKCJlcnJvciIsdGhpcy5fZm9yd2FyZFN0eWxlRXZlbnQpLm9mZigiY2hhbmdlIix0aGlzLl9vblN0eWxlQ2hhbmdlKS5vZmYoInNvdXJjZS5hZGQiLHRoaXMuX29uU291cmNlQWRkKS5vZmYoInNvdXJjZS5yZW1vdmUiLHRoaXMuX29uU291cmNlUmVtb3ZlKS5vZmYoInNvdXJjZS5sb2FkIix0aGlzLl9vblNvdXJjZVVwZGF0ZSkub2ZmKCJzb3VyY2UuZXJyb3IiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub2ZmKCJzb3VyY2UuY2hhbmdlIix0aGlzLl9vblNvdXJjZVVwZGF0ZSkub2ZmKCJsYXllci5hZGQiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vZmYoImxheWVyLnJlbW92ZSIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpLm9mZigibGF5ZXIuZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vZmYoInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUucmVtb3ZlIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUubG9hZCIsdGhpcy5fdXBkYXRlKS5vZmYoInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5zdGF0cyIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkuX3JlbW92ZSgpLHRoaXMub2ZmKCJyb3RhdGUiLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpLHRoaXMub2ZmKCJwaXRjaCIsdGhpcy5zdHlsZS5fcmVkb1BsYWNlbWVudCkpLHQ/KHRoaXMuc3R5bGU9dCBpbnN0YW5jZW9mIHU/dDpuZXcgdSh0LHRoaXMuYW5pbWF0aW9uTG9vcCx0aGlzLl93b3JrZXJDb3VudCksCnRoaXMuc3R5bGUub24oImxvYWQiLHRoaXMuX29uU3R5bGVMb2FkKS5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRTdHlsZUV2ZW50KS5vbigiY2hhbmdlIix0aGlzLl9vblN0eWxlQ2hhbmdlKS5vbigic291cmNlLmFkZCIsdGhpcy5fb25Tb3VyY2VBZGQpLm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl9vblNvdXJjZVJlbW92ZSkub24oInNvdXJjZS5sb2FkIix0aGlzLl9vblNvdXJjZVVwZGF0ZSkub24oInNvdXJjZS5lcnJvciIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vbigic291cmNlLmNoYW5nZSIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9uKCJsYXllci5hZGQiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vbigibGF5ZXIucmVtb3ZlIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oImxheWVyLmVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5yZW1vdmUiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLmxvYWQiLHRoaXMuX3VwZGF0ZSkub24oInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLnN0YXRzIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KSx0aGlzLm9uKCJyb3RhdGUiLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpLHRoaXMub24oInBpdGNoIix0aGlzLnN0eWxlLl9yZWRvUGxhY2VtZW50KSx0aGlzKToodGhpcy5zdHlsZT1udWxsLHRoaXMpfSxnZXRTdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGFkZFNvdXJjZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sYWRkU291cmNlVHlwZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LHJlbW92ZVNvdXJjZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRTb3VyY2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxhZGRMYXllcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVMYXllcih0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxzZXRGaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGaWx0ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LHNldExheWVyWm9vbVJhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSxyKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Q2FudmFzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sZ2V0Q2FudmFzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRFbGVtZW50KCl9LF9zZXR1cENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1jLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9bmV3IGkodGhpcyxlKTt2YXIgcj10aGlzLl9jb250cm9sQ29udGFpbmVyPWMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksbj10aGlzLl9jb250cm9sQ29ybmVycz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09Yy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LHIpfSl9LF9zZXR1cFBhaW50ZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYW52YXMuZ2V0V2ViR0xDb250ZXh0KHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcn0pO2lmKCF0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjpuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIil9KTt0aGlzLnBhaW50ZXI9bmV3IGgodCx0aGlzLnRyYW5zZm9ybSl9LF9jb250ZXh0TG9zdDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZnJhbWVJZCYmby5jYW5jZWxGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLmZpcmUoIndlYmdsY29udGV4dGxvc3QiLHtvcmlnaW5hbEV2ZW50OnR9KX0sX2NvbnRleHRSZXN0b3JlZDpmdW5jdGlvbih0KXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZSgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OnR9KX0sbG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEoIXRoaXMuc3R5bGV8fCF0aGlzLnN0eWxlLmxvYWRlZCgpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLl9yZXJlbmRlcigpLHRoaXMpOnRoaXN9LF9yZW5kZXI6ZnVuY3Rpb24oKXt0cnl7dGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSYmKHRoaXMuX3N0eWxlRGlydHk9ITEsdGhpcy5zdHlsZS51cGRhdGUodGhpcy5fY2xhc3Nlcyx0aGlzLl9jbGFzc09wdGlvbnMpLHRoaXMuX2NsYXNzT3B0aW9ucz1udWxsLHRoaXMuc3R5bGUuX3JlY2FsY3VsYXRlKHRoaXMudHJhbnNmb3JtLnpvb20pKSx0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7ZGVidWc6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcix2ZXJ0aWNlczp0aGlzLnZlcnRpY2VzLHJvdGF0aW5nOnRoaXMucm90YXRpbmcsem9vbWluZzp0aGlzLnpvb21pbmd9KSx0aGlzLmZpcmUoInJlbmRlciIpLHRoaXMubG9hZGVkKCkmJiF0aGlzLl9sb2FkZWQmJih0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJsb2FkIikpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmFuaW1hdGlvbkxvb3Auc3RvcHBlZCgpfHwodGhpcy5fc3R5bGVEaXJ0eT0hMCksKHRoaXMuX3NvdXJjZXNEaXJ0eXx8dGhpcy5fcmVwYWludHx8dGhpcy5fc3R5bGVEaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCl9Y2F0Y2godCl7dGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxvLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09cyYmcy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKTt2YXIgdD10aGlzLnBhaW50ZXIuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0Lmxvc2VDb250ZXh0KCksbih0aGlzLl9jYW52YXNDb250YWluZXIpLG4odGhpcy5fY29udHJvbENvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpfSxfcmVyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9by5mcmFtZSh0aGlzLl9yZW5kZXIpKX0sX2ZvcndhcmRTdHlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgic3R5bGUuIit0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkU291cmNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSxhLmV4dGVuZCh7c3R5bGU6dC50YXJnZXR9LHQpKX0sX2ZvcndhcmRMYXllckV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkVGlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9vblN0eWxlTG9hZDpmdW5jdGlvbih0KXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpLHRoaXMuc3R5bGUudXBkYXRlKHRoaXMuX2NsYXNzZXMse3RyYW5zaXRpb246ITF9KSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU3R5bGVDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKCEwKSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU291cmNlQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc291cmNlO2Uub25BZGQmJmUub25BZGQodGhpcyksdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KHQpfSxfb25Tb3VyY2VSZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zb3VyY2U7ZS5vblJlbW92ZSYmZS5vblJlbW92ZSh0aGlzKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vblNvdXJjZVVwZGF0ZTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGUoKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vbldpbmRvd09ubGluZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfb25XaW5kb3dSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5zdG9wKCkucmVzaXplKCkuX3VwZGF0ZSgpfX0pLGEuZXh0ZW5kQWxsKHcucHJvdG90eXBlLHtfc2hvd1RpbGVCb3VuZGFyaWVzOiExLGdldCBzaG93VGlsZUJvdW5kYXJpZXMoKXtyZXR1cm4gdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxzZXQgc2hvd1RpbGVCb3VuZGFyaWVzKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LF9zaG93Q29sbGlzaW9uQm94ZXM6ITEsZ2V0IHNob3dDb2xsaXNpb25Cb3hlcygpe3JldHVybiB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LHNldCBzaG93Q29sbGlzaW9uQm94ZXModCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQoKSl9LF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6ITEsZ2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcigpe3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LHNldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IodCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0sX3JlcGFpbnQ6ITEsZ2V0IHJlcGFpbnQoKXtyZXR1cm4gdGhpcy5fcmVwYWludH0sc2V0IHJlcGFpbnQodCl7dGhpcy5fcmVwYWludD10LHRoaXMuX3VwZGF0ZSgpfSxfdmVydGljZXM6ITEsZ2V0IHZlcnRpY2VzKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2VzfSxzZXQgdmVydGljZXModCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX19KX0seyIuLi9nZW8vbG5nX2xhdCI6MzQ3LCIuLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjM0OCwiLi4vZ2VvL3RyYW5zZm9ybSI6MzQ5LCIuLi9yZW5kZXIvcGFpbnRlciI6MzYzLCIuLi9zdHlsZS9hbmltYXRpb25fbG9vcCI6MzgzLCIuLi9zdHlsZS9zdHlsZSI6Mzg2LCIuLi91dGlsL2Jyb3dzZXIiOjQzNCwiLi4vdXRpbC9jYW52YXMiOjQzNSwiLi4vdXRpbC9kb20iOjQzNiwiLi4vdXRpbC9ldmVudGVkIjo0NDIsIi4uL3V0aWwvdXRpbCI6NDUwLCIuL2JpbmRfaGFuZGxlcnMiOjQxNSwiLi9jYW1lcmEiOjQxNiwiLi9jb250cm9sL2F0dHJpYnV0aW9uIjo0MTcsIi4vaGFzaCI6NDI4LCJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0fHwodD1pLmNyZWF0ZSgiZGl2IikpLHQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFya2VyIiksdGhpcy5fZWw9dCx0aGlzLl9vZmZzZXQ9by5jb252ZXJ0KGUmJmUub2Zmc2V0fHxbMCwwXSksdGhpcy5fdXBkYXRlPXRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvZG9tIiksYT10KCIuLi9nZW8vbG5nX2xhdCIpLG89dCgicG9pbnQtZ2VvbWV0cnkiKTtuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbCksdC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcD1udWxsKTt2YXIgdD10aGlzLl9lbC5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnJlbW92ZUNoaWxkKHRoaXMuX2VsKSx0aGlzfSxnZXRMbmdMYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxzZXRMbmdMYXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1hLmNvbnZlcnQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbH0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7aS5zZXRUcmFuc2Zvcm0odGhpcy5fZWwsInRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX19fSx7Ii4uL2dlby9sbmdfbGF0IjozNDcsIi4uL3V0aWwvZG9tIjo0MzYsInBvaW50LWdlb21ldHJ5Ijo0OTN9XSw0MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpLnNldE9wdGlvbnModGhpcyx0KSxpLmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xpY2tDbG9zZSJdLHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9ldmVudGVkIiksbz10KCIuLi91dGlsL2RvbSIpLHM9dCgiLi4vZ2VvL2xuZ19sYXQiKTtuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7b3B0aW9uczp7Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2smJnRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRhaW5lciYmKHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUoImNsb3NlIiksdGhpc30sZ2V0TG5nTGF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sc2V0TG5nTGF0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9cy5jb252ZXJ0KHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHNldFRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSl9LHNldEhUTUw6ZnVuY3Rpb24odCl7dmFyIGUscj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKG4uaW5uZXJIVE1MPXQ7Oyl7aWYoIShlPW4uZmlyc3RDaGlsZCkpYnJlYWs7ci5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHIpfSxzZXRET01Db250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfY3JlYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9by5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249by5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiZ0aGlzLl9sbmdMYXQmJnRoaXMuX2NvbnRlbnQpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1vLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKTt2YXIgdD10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLnJvdW5kKCksZT10aGlzLm9wdGlvbnMuYW5jaG9yO2lmKCFlKXt2YXIgcj10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsbj10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2U9dC55PG4/WyJ0b3AiXTp0Lnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtbj9bImJvdHRvbSJdOltdLHQueDxyLzI/ZS5wdXNoKCJsZWZ0Iik6dC54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtci8yJiZlLnB1c2goInJpZ2h0IiksZT0wPT09ZS5sZW5ndGg/ImJvdHRvbSI6ZS5qb2luKCItIil9dmFyIGk9e3RvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifSxhPXRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3Q7Zm9yKHZhciBzIGluIGkpYS5yZW1vdmUoIm1hcGJveGdsLXBvcHVwLWFuY2hvci0iK3MpO2EuYWRkKCJtYXBib3hnbC1wb3B1cC1hbmNob3ItIitlKSxvLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsaVtlXSsiIHRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX0sX29uQ2xpY2tDbG9zZTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjM0NywiLi4vdXRpbC9kb20iOjQzNiwiLi4vdXRpbC9ldmVudGVkIjo0NDIsIi4uL3V0aWwvdXRpbCI6NDUwfV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsdGhpcy5yZWNlaXZlPXRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyKXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiI8cmVzcG9uc2U+IixpZDpTdHJpbmcoaSksZXJyb3I6dD9TdHJpbmcodCk6bnVsbCxkYXRhOmV9LHIpfXZhciByLG49dC5kYXRhLGk9bi5pZDtpZigiPHJlc3BvbnNlPiI9PT1uLnR5cGUpcj10aGlzLmNhbGxiYWNrc1tuLmlkXSxkZWxldGUgdGhpcy5jYWxsYmFja3Nbbi5pZF0sciYmcihuLmVycm9yfHxudWxsLG4uZGF0YSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudFtuLnR5cGVdKXRoaXMucGFyZW50W24udHlwZV0obi5kYXRhLGUuYmluZCh0aGlzKSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzKXt2YXIgYT1uLnR5cGUuc3BsaXQoIi4iKTt0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzW2FbMF1dW2FbMV1dKG4uZGF0YSxlLmJpbmQodGhpcykpfWVsc2UgdGhpcy5wYXJlbnRbbi50eXBlXShuLmRhdGEpfSxuLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2k9dGhpcy5jYWxsYmFja0lEKytdPXIpLHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDpTdHJpbmcoaSksZGF0YTplfSxuKX0sbi5wcm90b3R5cGUucG9zdE1lc3NhZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh0LGUpfX0se31dLDQzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXQsZS5wcm90b2NvbD09PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZlLmhvc3Q9PT1kb2N1bWVudC5sb2NhdGlvbi5ob3N0fXIuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpLHIub25lcnJvcj1mdW5jdGlvbih0KXtlKHQpfSxyLm9ubG9hZD1mdW5jdGlvbigpe2lmKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCYmci5yZXNwb25zZSl7dmFyIHQ7dHJ5e3Q9SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsdCl9ZWxzZSBlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRBcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5vbmVycm9yPWZ1bmN0aW9uKHQpe2UodCl9LHIub25sb2FkPWZ1bmN0aW9uKCl7ci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlP2UobnVsbCxyLnJlc3BvbnNlKTplKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmdldEFycmF5QnVmZmVyKHQsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBuPW5ldyBJbWFnZTtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSwod2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGk9bmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHIpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3JldHVybiBuLnNyYz0od2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKGkpLG4uZ2V0RGF0YT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGU9dC5nZXRDb250ZXh0KCIyZCIpO3JldHVybiB0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHQsZS5kcmF3SW1hZ2UobiwwLDApLGUuZ2V0SW1hZ2VEYXRhKDAsMCxuLndpZHRoLG4uaGVpZ2h0KS5kYXRhfSxufSl9LHIuZ2V0VmlkZW89ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO3Iub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwscil9O2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtuKHRbaV0pfHwoci5jcm9zc09yaWdpbj0iQW5vbnltb3VzIiksYS5zcmM9dFtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gcn0scn19LHt9XSw0MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci53aW5kb3c9d2luZG93LGUuZXhwb3J0cy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSl9KCk7dmFyIG49d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lO3IuZnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9O3ZhciBpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lO3IuY2FuY2VsRnJhbWU9ZnVuY3Rpb24odCl7aSh0KX0sci50aW1lZD1mdW5jdGlvbih0LG4saSl7ZnVuY3Rpb24gYShsKXtvfHwobD1lLmV4cG9ydHMubm93KCksbD49cytuP3QuY2FsbChpLDEpOih0LmNhbGwoaSwobC1zKS9uKSxyLmZyYW1lKGEpKSl9aWYoIW4pcmV0dXJuIHQuY2FsbChpLDEpLG51bGw7dmFyIG89ITEscz1lLmV4cG9ydHMubm93KCk7cmV0dXJuIHIuZnJhbWUoYSksZnVuY3Rpb24oKXtvPSEwfX0sci5zdXBwb3J0ZWQ9dCgibWFwYm94LWdsLXN1cHBvcnRlZCIpLHIuaGFyZHdhcmVDb25jdXJyZW5jeT1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGV2aWNlUGl4ZWxSYXRpbyIse2dldDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb319KSxyLnN1cHBvcnRzV2VicD0hMTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTthLm9ubG9hZD1mdW5jdGlvbigpe3Iuc3VwcG9ydHNXZWJwPSEwfSxhLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9IixyLnN1cHBvcnRzR2VvbG9jYXRpb249ISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHsibWFwYm94LWdsLXN1cHBvcnRlZCI6MzM1fV0sNDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0JiZlJiYodGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNhbnZhcy5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jYW52YXMiKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0Ll9jb250ZXh0TG9zdC5iaW5kKHQpLCExKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdC5fY29udGV4dFJlc3RvcmVkLmJpbmQodCksITEpLHRoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLDApLGUuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpKX12YXIgaT10KCIuLi91dGlsIiksYT10KCJtYXBib3gtZ2wtc3VwcG9ydGVkIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5jYW52YXMud2lkdGg9cip0LHRoaXMuY2FudmFzLmhlaWdodD1yKmUsdGhpcy5jYW52YXMuc3R5bGUud2lkdGg9dCsicHgiLHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodD1lKyJweCJ9LG4ucHJvdG90eXBlLmdldFdlYkdMQ29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD1pLmV4dGVuZCh7fSx0LGEud2ViR0xDb250ZXh0QXR0cmlidXRlcyksdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHQpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHQpfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfX0seyIuLi91dGlsIjo0NTAsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOjMzNX1dLDQzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBzKXJldHVybiB0W2VdfWZ1bmN0aW9uIGkodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKX12YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpO3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBlJiYobi5jbGFzc05hbWU9ZSksciYmci5hcHBlbmRDaGlsZChuKSxufTt2YXIgbyxzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxsPW4oWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7ci5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe2wmJihvPXNbbF0sc1tsXT0ibm9uZSIpfSxyLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiYoc1tsXT1vKX07dmFyIGM9bihbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtyLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbY109ZX0sci5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaSwhMCl9LDApfSxyLm1vdXNlUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZT1lLnRvdWNoZXM/ZS50b3VjaGVzWzBdOmUsbmV3IGEoZS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXIudG9wLXQuY2xpZW50VG9wKX0sci50b3VjaFBvcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49W10saT0wO2k8ZS50b3VjaGVzLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKGUudG91Y2hlc1tpXS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS50b3VjaGVzW2ldLmNsaWVudFktci50b3AtdC5jbGllbnRUb3ApKTtyZXR1cm4gbn19LHsicG9pbnQtZ2VvbWV0cnkiOjQ5M31dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ3ZWJ3b3JraWZ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHQoIi4uLy4uL3NvdXJjZS93b3JrZXIiKSl9fSx7Ii4uLy4uL3NvdXJjZS93b3JrZXIiOjM4MSx3ZWJ3b3JraWZ5OjU3MX1dLDQzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxyPXRbb10sbis9KHIueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn12YXIgYT10KCJxdWlja3NlbGVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbyxzLGw9W10sYz0wO2M8cjtjKyspe3ZhciB1PWkodFtjXSk7MCE9PXUmJih0W2NdLmFyZWE9TWF0aC5hYnModSksdm9pZCAwPT09cyYmKHM9dTwwKSxzPT09dTwwPyhvJiZsLnB1c2gobyksbz1bdFtjXV0pOm8ucHVzaCh0W2NdKSl9aWYobyYmbC5wdXNoKG8pLGU+MSlmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKylsW2ZdLmxlbmd0aDw9ZXx8KGEobFtmXSxlLDEsbFtmXS5sZW5ndGgtMSxuKSxsW2ZdPWxbZl0uc2xpY2UoMCxlKSk7cmV0dXJuIGx9fSx7cXVpY2tzZWxlY3Q6NTAyfV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITB9fSx7fV0sNDQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX12YXIgaT10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCBpbiB0aGlzLl9zdHJpbmdUb051bWJlciksdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0PHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCksdGhpcy5fbnVtYmVyVG9TdHJpbmdbdF19fSx7YXNzZXJ0OjQ3fV0sNDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wO2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPW5ldyBvLGk9bmV3IGEobixlKTtpLm5hbWU9IldvcmtlciAiK3IsdGhpcy5hY3RvcnMucHVzaChpKX19dmFyIGk9dCgiLi91dGlsIiksYT10KCIuL2FjdG9yIiksbz10KCIuL3dlYl93b3JrZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YnJvYWRjYXN0OmZ1bmN0aW9uKHQsZSxyKXtyPXJ8fGZ1bmN0aW9uKCl7fSxpLmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHIsbil7ci5zZW5kKHQsZSxuKX0scil9LHNlbmQ6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIm51bWJlciIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIsaSksbn0scmVtb3ZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmFjdG9ycy5sZW5ndGg7dCsrKXRoaXMuYWN0b3JzW3RdLnRhcmdldC50ZXJtaW5hdGUoKTt0aGlzLmFjdG9ycz1bXX19fSx7Ii4vYWN0b3IiOjQzMiwiLi91dGlsIjo0NTAsIi4vd2ViX3dvcmtlciI6NDM3fV0sNDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdXRpbCIpLGk9e29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX2V2ZW50c1t0XT10aGlzLl9ldmVudHNbdF18fFtdLHRoaXMuX2V2ZW50c1t0XS5wdXNoKGUpLHRoaXN9LG9mZjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzLHRoaXM7aWYoIXRoaXMubGlzdGVucyh0KSlyZXR1cm4gdGhpcztpZihlKXt2YXIgcj10aGlzLl9ldmVudHNbdF0uaW5kZXhPZihlKTtyPj0wJiZ0aGlzLl9ldmVudHNbdF0uc3BsaWNlKHIsMSksdGhpcy5fZXZlbnRzW3RdLmxlbmd0aHx8ZGVsZXRlIHRoaXMuX2V2ZW50c1t0XX1lbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF07cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihuKXt0aGlzLm9mZih0LHIpLGUuY2FsbCh0aGlzLG4pfS5iaW5kKHRoaXMpO3JldHVybiB0aGlzLm9uKHQsciksdGhpc30sZmlyZTpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLmxpc3RlbnModCkpcmV0dXJuIG4uZW5kc1dpdGgodCwiZXJyb3IiKSYmY29uc29sZS5lcnJvcihlJiZlLmVycm9yfHxlfHwiRW1wdHkgZXJyb3IgZXZlbnQiKSx0aGlzO2U9bi5leHRlbmQoe30sZSksbi5leHRlbmQoZSx7dHlwZTp0LHRhcmdldDp0aGlzfSk7Zm9yKHZhciByPXRoaXMuX2V2ZW50c1t0XS5zbGljZSgpLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyxlKTtyZXR1cm4gdGhpc30sbGlzdGVuczpmdW5jdGlvbih0KXtyZXR1cm4hKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pfX07ZS5leHBvcnRzPWl9LHsiLi91dGlsIjo0NTB9XSw0NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc3RhY2tzPXQucmVhZEZpZWxkcyhpLFtdLGUpfWZ1bmN0aW9uIGkodCxlLHIpe2lmKDE9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKGEse2dseXBoczp7fX0pO2UucHVzaChuKX19ZnVuY3Rpb24gYSh0LGUscil7aWYoMT09PXQpZS5uYW1lPXIucmVhZFN0cmluZygpO2Vsc2UgaWYoMj09PXQpZS5yYW5nZT1yLnJlYWRTdHJpbmcoKTtlbHNlIGlmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKG8se30pO2UuZ2x5cGhzW24uaWRdPW59fWZ1bmN0aW9uIG8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1lLmV4cG9ydHM9bn0se31dLDQ0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9ZS5leHBvcnRzPW4sbi5udW1iZXI9bixuLnZlYzI9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKV19LG4uY29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKSxuKHRbMl0sZVsyXSxyKSxuKHRbM10sZVszXSxyKV19LG4uYXJyYXk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGkpe3JldHVybiBuKHQsZVtpXSxyKX0pfX0se31dLDQ0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIGk9dFtuXSxhPTA7YTxlLmxlbmd0aDthKyspZm9yKHZhciBvPWVbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2lmKGQoaSxsKSlyZXR1cm4hMDtpZih1KGwsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKHQsZSl7aWYoMT09PXQubGVuZ3RoJiYxPT09dFswXS5sZW5ndGgpcmV0dXJuIGgoZSx0WzBdWzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoaCh0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxsPTA7bDxvLmxlbmd0aDtsKyspaWYoaChlLG9bbF0pKXJldHVybiEwO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKWlmKHMobyxlW2NdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07aWYocy5sZW5ndGg+PTMpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspaWYoZChzLGlbbF0pKXJldHVybiEwO2lmKG8ocyxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKHModCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZih1KGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZih1KHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKyl7dmFyIG89ZVthXSxzPWVbYSsxXTtpZihjKG4saSxvLHMpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBsKHQscixuKSE9PWwoZSxyLG4pJiZsKHQsZSxyKSE9PWwodCxlLG4pfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKXtpZihmKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKyl7cj10W29dO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpfXJldHVybiBhfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZS5leHBvcnRzPXttdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50Om4sbXVsdGlQb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbjppLG11bHRpUG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZTphfX0se31dLDQ0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSl0aGlzLm9uUmVtb3ZlKHRoaXMuZGF0YVt0XSk7cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LG4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaGFzKHQpKXRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSx0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCk7ZWxzZSBpZih0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciByPXRoaXMuZ2V0KHRoaXMub3JkZXJbMF0pO3ImJnRoaXMub25SZW1vdmUocil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLmRhdGF9LG4ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmRlcn0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gbnVsbDt2YXIgZT10aGlzLmRhdGFbdF07cmV0dXJuIGRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGV9LG4ucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLmdldCh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfX0se31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZighKHI9cnx8by5BQ0NFU1NfVE9LRU4pJiZvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO2lmKHQ9dC5yZXBsYWNlKC9ebWFwYm94OlwvXC8vLG8uQVBJX1VSTCtlKSx0Kz10LmluZGV4T2YoIj8iKSE9PS0xPyImYWNjZXNzX3Rva2VuPSI6Ij9hY2Nlc3NfdG9rZW49IixvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXtpZigicyI9PT1yWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wgSlMsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO3QrPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdD8iPyIrdDoiIn1mdW5jdGlvbiBhKHQpe3JldHVybiB0LmFjY2Vzc190b2tlbiYmInRrLiI9PT10LmFjY2Vzc190b2tlbi5zbGljZSgwLDMpP2MuZXh0ZW5kKHt9LHQse2FjY2Vzc190b2tlbjpvLkFDQ0VTU19UT0tFTn0pOnR9dmFyIG89dCgiLi9jb25maWciKSxzPXQoIi4vYnJvd3NlciIpLGw9dCgidXJsIiksYz10KCIuL3V0aWwiKTtlLmV4cG9ydHMubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLnBhcnNlKHQpO3JldHVybiJtYXBib3g6IiE9PXIucHJvdG9jb2w/dDpuKCJtYXBib3g6LyIrci5wYXRobmFtZStpKHIucXVlcnkpLCIvc3R5bGVzL3YxLyIsZSl9LGUuZXhwb3J0cy5ub3JtYWxpemVTb3VyY2VVUkw9ZnVuY3Rpb24odCxlKXtyZXR1cm4ibWFwYm94OiIhPT1sLnBhcnNlKHQpLnByb3RvY29sP3Q6bih0KyIuanNvbiIsIi92NC8iLGUpKyImc2VjdXJlIn0sZS5leHBvcnRzLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe3ZhciByPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09ci5wcm90b2NvbD90Om4oIm1hcGJveDovLyIrci5wYXRobmFtZS5zcGxpdCgiLyIpWzFdKyIve2ZvbnRzdGFja30ve3JhbmdlfS5wYmYiK2koci5xdWVyeSksIi9mb250cy92MS8iLGUpfSxlLmV4cG9ydHMubm9ybWFsaXplU3ByaXRlVVJMPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09by5wcm90b2NvbD8oby5wYXRobmFtZSs9ZStyLGwuZm9ybWF0KG8pKTpuKCJtYXBib3g6LyIrby5wYXRobmFtZSsiL3Nwcml0ZSIrZStyK2koby5xdWVyeSksIi9zdHlsZXMvdjEvIixhKX0sZS5leHBvcnRzLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWwucGFyc2UodCwhMCk7aWYoIWUpcmV0dXJuIHQ7aWYoIm1hcGJveDoiIT09bC5wYXJzZShlKS5wcm90b2NvbClyZXR1cm4gdDt2YXIgaT1zLnN1cHBvcnRzV2VicD8iLndlYnAiOiIkMSIsbz1zLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PXI/IkAyeCI6IiI7cmV0dXJuIGwuZm9ybWF0KHtwcm90b2NvbDpuLnByb3RvY29sLGhvc3RuYW1lOm4uaG9zdG5hbWUscGF0aG5hbWU6bi5wYXRobmFtZS5yZXBsYWNlKC8oXC4oPzpwbmd8anBnKVxkKikvLG8raSkscXVlcnk6YShuLnF1ZXJ5KX0pfX0seyIuL2Jyb3dzZXIiOjQzNCwiLi9jb25maWciOjQzOSwiLi91dGlsIjo0NTAsdXJsOjU1M31dLDQ0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXtoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByKCl7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5tZW1iZXJzPWUucHJvdG90eXBlLm1lbWJlcnN9dmFyIG49SlNPTi5zdHJpbmdpZnkodCk7aWYodltuXSlyZXR1cm4gdltuXTt2b2lkIDA9PT10LmFsaWdubWVudCYmKHQuYWxpZ25tZW50PTEpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpO3ZhciBzPTAsYz0wLGc9WyJVaW50OCJdO3JldHVybiBlLnByb3RvdHlwZS5tZW1iZXJzPXQubWVtYmVycy5tYXAoZnVuY3Rpb24ocil7cj17bmFtZTpyLm5hbWUsdHlwZTpyLnR5cGUsY29tcG9uZW50czpyLmNvbXBvbmVudHN8fDF9LHAoci5uYW1lLmxlbmd0aCkscChyLnR5cGUgaW4gbSksZy5pbmRleE9mKHIudHlwZSk8MCYmZy5wdXNoKHIudHlwZSk7dmFyIG49byhyLnR5cGUpO2M9TWF0aC5tYXgoYyxuKSxyLm9mZnNldD1zPWEocyxNYXRoLm1heCh0LmFsaWdubWVudCxuKSk7Zm9yKHZhciBpPTA7aTxyLmNvbXBvbmVudHM7aSsrKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxyLm5hbWUrKDE9PT1yLmNvbXBvbmVudHM/IiI6aSkse2dldDp1KHIsaSksc2V0OmYocixpKX0pO3JldHVybiBzKz1uKnIuY29tcG9uZW50cyxyfSksZS5wcm90b3R5cGUuYWxpZ25tZW50PXQuYWxpZ25tZW50LGUucHJvdG90eXBlLnNpemU9YShzLE1hdGgubWF4KGMsdC5hbGlnbm1lbnQpKSxyLnNlcmlhbGl6ZT1pLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHIucHJvdG90eXBlLlN0cnVjdFR5cGU9ZSxyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9ZS5wcm90b3R5cGUuc2l6ZSxyLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1sKGUucHJvdG90eXBlLm1lbWJlcnMsZS5wcm90b3R5cGUuc2l6ZSksci5wcm90b3R5cGUuX3VzZWRUeXBlcz1nLHZbbl09cixyfWZ1bmN0aW9uIGkoKXtyZXR1cm57bWVtYmVyczp0aGlzLnByb3RvdHlwZS5TdHJ1Y3RUeXBlLnByb3RvdHlwZS5tZW1iZXJzLGFsaWdubWVudDp0aGlzLnByb3RvdHlwZS5TdHJ1Y3RUeXBlLnByb3RvdHlwZS5hbGlnbm1lbnQsYnl0ZXNQZXJFbGVtZW50OnRoaXMucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudH19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBNYXRoLmNlaWwodC9lKSplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG1bdF0uQllURVNfUEVSX0VMRU1FTlR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPSJ2YXIgaSA9IHRoaXMubGVuZ3RoO1xudGhpcy5yZXNpemUodGhpcy5sZW5ndGggKyAxKTtcbiIsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbD10W2FdLGM9byhsLnR5cGUpO3IuaW5kZXhPZihjKTwwJiYoci5wdXNoKGMpLGkrPSJ2YXIgbyIrYy50b0ZpeGVkKDApKyIgPSBpICogIisoZS9jKS50b0ZpeGVkKDApKyI7XG4iKTtmb3IodmFyIHU9MDt1PGwuY29tcG9uZW50czt1Kyspe3ZhciBmPSJ2IituLmxlbmd0aCxoPSJvIitjLnRvRml4ZWQoMCkrIiArICIrKGwub2Zmc2V0L2MrdSkudG9GaXhlZCgwKTtpKz0idGhpcy4iK3MobC50eXBlKSsiWyIraCsiXSA9ICIrZisiO1xuIixuLnB1c2goZil9fXJldHVybiBpKz0icmV0dXJuIGk7IixuZXcgRnVuY3Rpb24obixpKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9InRoaXMuX3BvcyIrbyh0LnR5cGUpLnRvRml4ZWQoMCksbj0odC5vZmZzZXQvbyh0LnR5cGUpK2UpLnRvRml4ZWQoMCksaT1yKyIgKyAiK247cmV0dXJuInRoaXMuX3N0cnVjdEFycmF5LiIrcyh0LnR5cGUpKyJbIitpKyJdIn1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbXSwicmV0dXJuICIrYyh0LGUpKyI7Iil9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBuZXcgRnVuY3Rpb24oWyJ4Il0sYyh0LGUpKyIgPSB4OyIpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLl9zdHJ1Y3RBcnJheT10LHRoaXMuX3BvczE9ZSp0aGlzLnNpemUsdGhpcy5fcG9zMj10aGlzLl9wb3MxLzIsdGhpcy5fcG9zND10aGlzLl9wb3MxLzQsdGhpcy5fcG9zOD10aGlzLl9wb3MxLzh9ZnVuY3Rpb24gZCh0KXt2b2lkIDAhPT10Pyh0aGlzLmFycmF5QnVmZmVyPXQuYXJyYXlCdWZmZXIsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5jYXBhY2l0eT10aGlzLmFycmF5QnVmZmVyLmJ5dGVMZW5ndGgvdGhpcy5ieXRlc1BlckVsZW1lbnQsdGhpcy5fcmVmcmVzaFZpZXdzKCkpOih0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApKX12YXIgcD10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bjt2YXIgbT17SW50ODpJbnQ4QXJyYXksVWludDg6VWludDhBcnJheSxVaW50OENsYW1wZWQ6VWludDhDbGFtcGVkQXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXksRmxvYXQ2NDpGbG9hdDY0QXJyYXl9LHY9e307ZC5wcm90b3R5cGUuREVGQVVMVF9DQVBBQ0lUWT0xMjgsZC5wcm90b3R5cGUuUkVTSVpFX01VTFRJUExJRVI9NSxkLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmltKCkse2xlbmd0aDp0aGlzLmxlbmd0aCxhcnJheUJ1ZmZlcjp0aGlzLmFycmF5QnVmZmVyfX0sZC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGhpcy5TdHJ1Y3RUeXBlKHRoaXMsdCl9LGQucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LGQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD10LHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IodGhpcy5jYXBhY2l0eSp0aGlzLlJFU0laRV9NVUxUSVBMSUVSKSx0aGlzLkRFRkFVTFRfQ0FQQUNJVFkpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSxkLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLl91c2VkVHlwZXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpcy5fdXNlZFR5cGVzW3RdO3RoaXNbcyhlKV09bmV3IG1bZV0odGhpcy5hcnJheUJ1ZmZlcil9fSxkLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXt2YXIgaT10aGlzLmdldChuKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSx7YXNzZXJ0OjQ3fV0sNDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZS5yZXBsYWNlKC97KFtee31dKyl9L2csZnVuY3Rpb24oZSxyKXtyZXR1cm4gciBpbiB0P3Rbcl06IiJ9KX1lLmV4cG9ydHM9bn0se31dLDQ1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bml0YmV6aWVyIiksaT10KCIuLi9nZW8vY29vcmRpbmF0ZSIpO3IuZWFzZUN1YmljSW5PdXQ9ZnVuY3Rpb24odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfSxyLmJlemllcj1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uZXcgbih0LGUscixpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEuc29sdmUodCl9fSxyLmVhc2U9ci5iZXppZXIoLjI1LC4xLC4yNSwxKSxyLmNsYW1wPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX0sci53cmFwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX0sci5jb2FsZXNjZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBlPWFyZ3VtZW50c1t0XTtpZihudWxsIT09ZSYmdm9pZCAwIT09ZSlyZXR1cm4gZX19LHIuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pfSl9LHIua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sci5leHRlbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9YXJndW1lbnRzW2VdO2Zvcih2YXIgbiBpbiByKXRbbl09cltuXX1yZXR1cm4gdH0sci5leHRlbmRBbGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSlPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKSk7cmV0dXJuIHR9LHIuaW5oZXJpdD1mdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QucHJvdG90eXBlOnQsaT1PYmplY3QuY3JlYXRlKG4pO3JldHVybiByLmV4dGVuZEFsbChpLGUpLGl9LHIucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn07dmFyIGE9MTtyLnVuaXF1ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIGErK30sci5kZWJvdW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7bj1hcmd1bWVudHMsY2xlYXJUaW1lb3V0KHIpLHI9c2V0VGltZW91dChmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxuKX0sZSl9fSxyLmJpbmRBbGw9ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XSYmKGVbdF09ZVt0XS5iaW5kKGUpKX0pfSxyLmJpbmRIYW5kbGVycz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmMD09PWUuaW5kZXhPZigiX29uIikmJih0W2VdPXRbZV0uYmluZCh0KSl9LHIuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUpe3QuaGFzT3duUHJvcGVydHkoIm9wdGlvbnMiKXx8KHQub3B0aW9ucz10Lm9wdGlvbnM/T2JqZWN0LmNyZWF0ZSh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIHIgaW4gZSl0Lm9wdGlvbnNbcl09ZVtyXTtyZXR1cm4gdC5vcHRpb25zfSxyLmdldENvb3JkaW5hdGVzQ2VudGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAscj0xLzAsbj0tKDEvMCksYT0tKDEvMCksbz0wO288dC5sZW5ndGg7bysrKWU9TWF0aC5taW4oZSx0W29dLmNvbHVtbikscj1NYXRoLm1pbihyLHRbb10ucm93KSxuPU1hdGgubWF4KG4sdFtvXS5jb2x1bW4pLGE9TWF0aC5tYXgoYSx0W29dLnJvdyk7dmFyIHM9bi1lLGw9YS1yLGM9TWF0aC5tYXgocyxsKTtyZXR1cm4gbmV3IGkoKGUrbikvMiwocithKS8yLDApLnpvb21UbyhNYXRoLmZsb29yKC1NYXRoLmxvZyhjKS9NYXRoLkxOMikpfSxyLmVuZHNXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXhPZihlLHQubGVuZ3RoLWUubGVuZ3RoKSE9PS0xfSxyLnN0YXJ0c1dpdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQuaW5kZXhPZihlKX0sci5tYXBPYmplY3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufSxyLmZpbHRlck9iamVjdD1mdW5jdGlvbih0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn0sci5kZWVwRXF1YWw9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4hMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gZT09PXJ9LHIuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoci5jbG9uZSk6Im9iamVjdCI9PXR5cGVvZiB0P3IubWFwT2JqZWN0KHQsci5jbG9uZSk6dH0sci5hcnJheXNJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLmluZGV4T2YodFtyXSk+PTApcmV0dXJuITA7cmV0dXJuITF9O3ZhciBvPXt9O3Iud2Fybk9uY2U9ZnVuY3Rpb24odCl7b1t0XXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpLG9bdF09ITApfX0seyIuLi9nZW8vY29vcmRpbmF0ZSI6MzQ2LHVuaXRiZXppZXI6NTUyfV0sNDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU9dCx0Ll96PWUsdC5feD1yLHQuX3k9bix0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLG51bGwhPXQuaWQmJih0aGlzLmlkPXQuaWQpfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXt0eXBlOiJGZWF0dXJlIixnZXQgZ2VvbWV0cnkoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fZ2VvbWV0cnkmJih0aGlzLl9nZW9tZXRyeT10aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS50b0dlb0pTT04odGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3gsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3ksdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3opLmdlb21ldHJ5KSx0aGlzLl9nZW9tZXRyeX0sc2V0IGdlb21ldHJ5KHQpe3RoaXMuX2dlb21ldHJ5PXR9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciB0PXt9O2Zvcih2YXIgZSBpbiB0aGlzKSJfZ2VvbWV0cnkiIT09ZSYmIl92ZWN0b3JUaWxlRmVhdHVyZSIhPT1lJiYidG9KU09OIiE9PWUmJih0W2VdPXRoaXNbZV0pO3JldHVybiB0fX19LHt9XSw0NTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e19hcmdzOltbe3JhdzoibWFwYm94LWdsQF4wLjIyLjAiLHNjb3BlOm51bGwsZXNjYXBlZE5hbWU6Im1hcGJveC1nbCIsbmFtZToibWFwYm94LWdsIixyYXdTcGVjOiJeMC4yMi4wIixzcGVjOiI+PTAuMjIuMCA8MC4yMy4wIix0eXBlOiJyYW5nZSJ9LCIvVXNlcnMvY3BzaWV2ZXJ0L2dpdGh1Yi9wbG90bHkuanMiXV0sX2Zyb206Im1hcGJveC1nbEA+PTAuMjIuMCA8MC4yMy4wIixfaWQ6Im1hcGJveC1nbEAwLjIyLjEiLF9pbkNhY2hlOiEwLF9sb2NhdGlvbjoiL21hcGJveC1nbCIsX25vZGVWZXJzaW9uOiI0LjQuNSIsX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6InBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tIiwKdG1wOiJ0bXAvbWFwYm94LWdsLTAuMjIuMS50Z3pfMTQ3MTU0OTg5MTY3MF8wLjg3NjI2MzA1NjY0ODg5NTEifSxfbnBtVXNlcjp7bmFtZToibHVjYXN3b2oiLGVtYWlsOiJsdWNhc0BsdWNhc3dvai5jb20ifSxfbnBtVmVyc2lvbjoiMi4xNS41IixfcGhhbnRvbUNoaWxkcmVuOnt9LF9yZXF1ZXN0ZWQ6e3JhdzoibWFwYm94LWdsQF4wLjIyLjAiLHNjb3BlOm51bGwsZXNjYXBlZE5hbWU6Im1hcGJveC1nbCIsbmFtZToibWFwYm94LWdsIixyYXdTcGVjOiJeMC4yMi4wIixzcGVjOiI+PTAuMjIuMCA8MC4yMy4wIix0eXBlOiJyYW5nZSJ9LF9yZXF1aXJlZEJ5OlsiLyJdLF9yZXNvbHZlZDoiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFwYm94LWdsLy0vbWFwYm94LWdsLTAuMjIuMS50Z3oiLF9zaGFzdW06IjkyYTk2NTU0N2Q0YzJmMjRjMjJjYmM0ODdlZWRhNDg2OTRjYjYyN2EiLF9zaHJpbmt3cmFwOm51bGwsX3NwZWM6Im1hcGJveC1nbEBeMC4yMi4wIixfd2hlcmU6Ii9Vc2Vycy9jcHNpZXZlcnQvZ2l0aHViL3Bsb3RseS5qcyIsYnJvd3Nlcjp7Ii4vanMvdXRpbC9hamF4LmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYWpheC5qcyIsIi4vanMvdXRpbC9icm93c2VyLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYnJvd3Nlci5qcyIsIi4vanMvdXRpbC9jYW52YXMuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci9jYW52YXMuanMiLCIuL2pzL3V0aWwvZG9tLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvZG9tLmpzIiwiLi9qcy91dGlsL3dlYl93b3JrZXIuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6e2Nzc2NvbG9ycGFyc2VyOiJeMS4wLjIiLGVhcmN1dDoiXjIuMC4zIiwiZmVhdHVyZS1maWx0ZXIiOiJeMi4yLjAiLCJnZW9qc29uLXJld2luZCI6Il4wLjEuMCIsImdlb2pzb24tdnQiOiJeMi40LjAiLCJnbC1tYXRyaXgiOiJeMi4zLjEiLCJncmlkLWluZGV4IjoiXjEuMC4wIiwibWFwYm94LWdsLWZ1bmN0aW9uIjoiXjEuMi4xIiwibWFwYm94LWdsLXNoYWRlcnMiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC1zaGFkZXJzI2RlMmFiMDA3NDU1YWEyNTg3YzU1MjY5NGM2ODU4M2Y5NGM5ZjI3NDciLCJtYXBib3gtZ2wtc3R5bGUtc3BlYyI6ImdpdGh1YjptYXBib3gvbWFwYm94LWdsLXN0eWxlLXNwZWMjODNiMWEzZTU4MzdkNzg1YWY1ODJlZmQ1ZWQxYTIxMmYyZGY2YTRhZSIsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOiJeMS4yLjAiLHBiZjoiXjEuMy4yIixwbmdqczoiXjIuMi4wIiwicG9pbnQtZ2VvbWV0cnkiOiJeMC4wLjAiLHF1aWNrc2VsZWN0OiJeMS4wLjAiLHJlcXVlc3Q6Il4yLjM5LjAiLCJyZXNvbHZlLXVybCI6Il4wLjIuMSIsInNoZWxmLXBhY2siOiJeMS4wLjAiLHN1cGVyY2x1c3RlcjoiXjIuMC4xIix1bmFzc2VydGlmeToiXjIuMC4wIix1bml0YmV6aWVyOiJeMC4wLjAiLCJ2ZWN0b3ItdGlsZSI6Il4xLjMuMCIsInZ0LXBiZiI6Il4yLjAuMiIsd2Vid29ya2lmeToiXjEuMy4wIiwid2hvb3RzLWpzIjoiXjIuMC4wIn0sZGVzY3JpcHRpb246IkEgV2ViR0wgaW50ZXJhY3RpdmUgbWFwcyBsaWJyYXJ5IixkZXZEZXBlbmRlbmNpZXM6eyJiYWJlbC1wcmVzZXQtcmVhY3QiOiJeNi4xMS4xIixiYWJlbGlmeToiXjcuMy4wIixiZW5jaG1hcms6In4yLjEuMCIsYnJvd3NlcmlmeToiXjEzLjAuMCIsY2xpcGJvYXJkOiJeMS41LjEyIiwiY29uY2F0LXN0cmVhbSI6IjEuNS4xIixjb3ZlcmFsbHM6Il4yLjExLjgiLGRvY3RyaW5lOiJeMS4yLjEiLGRvY3VtZW50YXRpb246Imh0dHBzOi8vZ2l0aHViLmNvbS9kb2N1bWVudGF0aW9uanMvZG9jdW1lbnRhdGlvbi9hcmNoaXZlL2JiNDE2MTljNzM0ZTU5ZWYzZmJjMzY0ODYxMDAzMmVmY2ZkYWFhY2UudGFyLmd6IiwiZG9jdW1lbnRhdGlvbi10aGVtZS11dGlscyI6IjMuMC4wIixlbnZpZnk6Il4zLjQuMCIsZXNsaW50OiJeMi41LjMiLCJlc2xpbnQtY29uZmlnLW1vdXJuZXIiOiJeMi4wLjAiLCJlc2xpbnQtcGx1Z2luLWh0bWwiOiJeMS41LjEiLGdsOiJeNC4wLjEiLGhhbmRsZWJhcnM6IjQuMC41IiwiaGlnaGxpZ2h0LmpzIjoiOS4zLjAiLGlzdGFuYnVsOiJeMC40LjIiLCJqc29uLWxvYWRlciI6Il4wLjUuNCIsbG9kYXNoOiJeNC4xMy4xIiwibWFwYm94LWdsLXRlc3Qtc3VpdGUiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC10ZXN0LXN1aXRlIzdiYWJhYjUyZmIwMjc4OGViYmMzODM4NDEzOWJmMzUwZThlMzg1NTIiLCJtZW1vcnktZnMiOiJeMC4zLjAiLG1pbmlmeWlmeToiXjcuMC4xIiwibnBtLXJ1bi1hbGwiOiJeMy4wLjAiLG55YzoiNi40LjAiLHByb3h5cXVpcmU6Il4xLjcuOSIscmVtYXJrOiI0LjIuMiIsInJlbWFyay1odG1sIjoiMy4wLjAiLHNpbm9uOiJeMS4xNS40IixzdDoiXjEuMi4wIix0YXA6Il41LjcuMCIsInRyYW5zZm9ybS1sb2FkZXIiOiJeMC4yLjMiLCJ1bmlzdC11dGlsLXZpc2l0IjoiMS4xLjAiLHZpbnlsOiIxLjEuMSIsInZpbnlsLWZzIjoiMi40LjMiLHdhdGNoaWZ5OiJeMy43LjAiLHdlYnBhY2s6Il4xLjEzLjEiLCJ3ZWJ3b3JraWZ5LXdlYnBhY2siOiJeMS4xLjMifSxkaXJlY3Rvcmllczp7fSxkaXN0OntzaGFzdW06IjkyYTk2NTU0N2Q0YzJmMjRjMjJjYmM0ODdlZWRhNDg2OTRjYjYyN2EiLHRhcmJhbGw6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcGJveC1nbC8tL21hcGJveC1nbC0wLjIyLjEudGd6In0sZW5naW5lczp7bm9kZToiPj00LjAuMCJ9LGdpdEhlYWQ6IjEzYTkwMTUzNDFmMDYwMmNjYjU1Yzk4YzUzMDc5ODM4YWQ0YjcwYjUiLGhvbWVwYWdlOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcyNyZWFkbWUiLGxpY2Vuc2U6IkJTRC0zLUNsYXVzZSIsbWFpbjoianMvbWFwYm94LWdsLmpzIixtYWludGFpbmVyczpbe25hbWU6ImFhcm9ubGlkbWFuIixlbWFpbDoiYWFyb25saWRtYW5AZ21haWwuY29tIn0se25hbWU6ImFqYXNodG9uIixlbWFpbDoiYWouYXNodG9uQGdtYWlsLmNvbSJ9LHtuYW1lOiJhbnNpcyIsZW1haWw6ImFuc2lzLmJyYW1tYW5pc0BnbWFpbC5jb20ifSx7bmFtZToiYmVyZ3dlcmtnaXMiLGVtYWlsOiJ3YkBiZXJnd2Vyay1naXMuYXQifSx7bmFtZToiYmhvdXNlbCIsZW1haWw6ImJyeWFuQG1hcGJveC5jb20ifSx7bmFtZToiYnN1ZGVrdW0iLGVtYWlsOiJib2JieUBtYXBib3guY29tIn0se25hbWU6ImNhbWlsbGVhbm5lIixlbWFpbDoiY2FtaWxsZUBtYXBib3guY29tIn0se25hbWU6ImRub21hZGIiLGVtYWlsOiJkYW1vbkBtYXBib3guY29tIn0se25hbWU6ImR0aG9tcHNvbiIsZW1haWw6ImR0aG9tcHNvbkBnbWFpbC5jb20ifSx7bmFtZToiZW1pbHltY2FmZWUiLGVtYWlsOiJlbWlseUBtYXBib3guY29tIn0se25hbWU6ImZsaXBwbW9rZSIsZW1haWw6ImZsaXBwbW9rZUBnbWFpbC5jb20ifSx7bmFtZToiZnJlZW5lcmQiLGVtYWlsOiJzcGFtQGZyZWVuZXJkLmRlIn0se25hbWU6ImdyZXRhY2IiLGVtYWlsOiJjYXJvbEBtYXBib3guY29tIn0se25hbWU6ImlhbjI5IixlbWFpbDoiaWFuLnZpbGxlZGFAZ21haWwuY29tIn0se25hbWU6ImlhbnNod2FyZCIsZW1haWw6ImlhbkBtYXBib3guY29tIn0se25hbWU6ImluZ2FsbHMiLGVtYWlsOiJuaWNob2xhcy5pbmdhbGxzQGdtYWlsLmNvbSJ9LHtuYW1lOiJqZmlyZWJhdWdoIixlbWFpbDoiam9obi5maXJlYmF1Z2hAZ21haWwuY29tIn0se25hbWU6ImpycHJ1aXQxIixlbWFpbDoiamFrZUBqYWtlcHJ1aXR0LmNvbSJ9LHtuYW1lOiJrYXJlbnpzaGVhIixlbWFpbDoia2FyZW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJra2FlZmVyIixlbWFpbDoia2thZWZlckBnbWFpbC5jb20ifSx7bmFtZToibGJ1ZCIsZW1haWw6ImxhdXJlbkBtYXBib3guY29tIn0se25hbWU6Imx1Y2Fzd29qIixlbWFpbDoibHVjYXNAbHVjYXN3b2ouY29tIn0se25hbWU6Imx4YmFydGgiLGVtYWlsOiJhbGV4QG1hcGJveC5jb20ifSx7bmFtZToibHl6aWRpYW1vbmQiLGVtYWlsOiJseXppQG1hcGJveC5jb20ifSx7bmFtZToibWFwYm94LWFkbWluIixlbWFpbDoiYWNjb3VudHNAbWFwYm94LmNvbSJ9LHtuYW1lOiJtYXRlb3YiLGVtYWlsOiJtYXR0QG1hcGJveC5jb20ifSx7bmFtZToibWN3aGl0dGVtb3JlIixlbWFpbDoibWN3aGl0dGVtb3JlQGdtYWlsLmNvbSJ9LHtuYW1lOiJtaWNjb2xpcyIsZW1haWw6ImplZmZAbWljY29saXMubmV0In0se25hbWU6Im1pa2Vtb3JyaXMiLGVtYWlsOiJtaWNoYWVsLnBhdHJpY2subW9ycmlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3JnYW5oZXJsb2NrZXIiLGVtYWlsOiJtb3JnYW4uaGVybG9ja2VyQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3VybmVyIixlbWFpbDoiYWdhZm9ua2luQGdtYWlsLmNvbSJ9LHtuYW1lOiJuaWNraWRsdWdhc2giLGVtYWlsOiJuaWNraUBtYXBib3guY29tIn0se25hbWU6InJjbGFyayIsZW1haWw6InJ5YW4uY2xhcmsuakBnbWFpbC5jb20ifSx7bmFtZToic2FtYW5iYiIsZW1haWw6InNhbWFuQG1hcGJveC5jb20ifSx7bmFtZToic2JtYTQ0IixlbWFpbDoidGxlZUBtYXBib3guY29tIn0se25hbWU6InNjb3RoaXMiLGVtYWlsOiJzY290aGlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJzZ2lsbGllcyIsZW1haWw6InNlYW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJzcHJpbmdtZXllciIsZW1haWw6ImRhbmVAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0aGVtYXJleCIsZW1haWw6InBhdHJpY2tAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0bWN3IixlbWFpbDoidG9tQG1hY3dyaWdodC5vcmcifSx7bmFtZToidHJpc3RlbiIsZW1haWw6InRyaXN0ZW4uYnJvd25AZ21haWwuY29tIn0se25hbWU6IndpbGx3aGl0ZSIsZW1haWw6IndpbGxAbWFwYm94LmNvbSJ9LHtuYW1lOiJ5aGFobiIsZW1haWw6InlvdW5nQG1hcGJveC5jb20ifV0sbmFtZToibWFwYm94LWdsIixvcHRpb25hbERlcGVuZGVuY2llczp7fSxyZWFkbWU6IkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMuZ2l0In0sc2NyaXB0czp7YnVpbGQ6Im5wbSBydW4gYnVpbGQtZG9jcyAjIGludm9rZWQgYnkgcHVibGlzaGVyIHdoZW4gcHVibGlzaGluZyBkb2NzIG9uIHRoZSBtYi1wYWdlcyBicmFuY2giLCJidWlsZC1kZXYiOiJicm93c2VyaWZ5IGpzL21hcGJveC1nbC5qcyAtLWRlYnVnIC0tc3RhbmRhbG9uZSBtYXBib3hnbCA+IGRpc3QvbWFwYm94LWdsLWRldi5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL2Rldi50ZXN0LmpzIiwiYnVpbGQtZG9jcyI6ImRvY3VtZW50YXRpb24gYnVpbGQgLS1naXRodWIgLS1mb3JtYXQgaHRtbCAtYyBkb2N1bWVudGF0aW9uLnltbCAtLXRoZW1lIC4vZG9jcy9fdGhlbWUgLS1vdXRwdXQgZG9jcy9hcGkvIiwiYnVpbGQtbWluIjoiYnJvd3NlcmlmeSBqcy9tYXBib3gtZ2wuanMgLS1kZWJ1ZyAtdCB1bmFzc2VydGlmeSAtLXBsdWdpbiBbbWluaWZ5aWZ5IC0tbWFwIG1hcGJveC1nbC5qcy5tYXAgLS1vdXRwdXQgZGlzdC9tYXBib3gtZ2wuanMubWFwXSAtLXN0YW5kYWxvbmUgbWFwYm94Z2wgPiBkaXN0L21hcGJveC1nbC5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL21pbi50ZXN0LmpzIiwiYnVpbGQtdG9rZW4iOiJicm93c2VyaWZ5IGRlYnVnL2FjY2Vzcy10b2tlbi1zcmMuanMgLS1kZWJ1ZyAtdCBlbnZpZnkgPiBkZWJ1Zy9hY2Nlc3MtdG9rZW4uanMiLGxpbnQ6ImVzbGludCAgLS1pZ25vcmUtcGF0aCAuZ2l0aWdub3JlIGpzIHRlc3QgYmVuY2ggZG9jcy9fcG9zdHMvZXhhbXBsZXMvKi5odG1sIiwib3Blbi1jaGFuZ2VkLWV4YW1wbGVzIjoiZ2l0IGRpZmYgLS1uYW1lLW9ubHkgbWItcGFnZXMgSEVBRCAtLSBkb2NzL19wb3N0cy9leGFtcGxlcy8qLmh0bWwgfCBhd2sgJ3twcmludCBcImh0dHA6Ly8xMjcuMC4wLjE6NDAwMC9tYXBib3gtZ2wtanMvZXhhbXBsZS9cIiBzdWJzdHIoJDAsMzMsbGVuZ3RoKCQwKS0zNyl9JyB8IHhhcmdzIG9wZW4iLHN0YXJ0OiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1kZXYgd2F0Y2gtYmVuY2ggc3RhcnQtc2VydmVyIiwic3RhcnQtYmVuY2giOiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1iZW5jaCBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kZWJ1ZyI6InJ1bi1wIGJ1aWxkLXRva2VuIHdhdGNoLWRldiBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kb2NzIjoibnBtIHJ1biBidWlsZC1taW4gJiYgbnBtIHJ1biBidWlsZC1kb2NzICYmIGpla3lsbCBzZXJ2ZSAtdyIsInN0YXJ0LXNlcnZlciI6InN0IC0tbm8tY2FjaGUgLS1sb2NhbGhvc3QgLS1wb3J0IDk5NjYgLS1pbmRleCBpbmRleC5odG1sIC4iLHRlc3Q6Im5wbSBydW4gbGludCAmJiB0YXAgLS1yZXBvcnRlciBkb3QgdGVzdC9qcy8qLyouanMgdGVzdC9idWlsZC93ZWJwYWNrLnRlc3QuanMiLCJ0ZXN0LXN1aXRlIjoibm9kZSB0ZXN0L3JlbmRlci50ZXN0LmpzICYmIG5vZGUgdGVzdC9xdWVyeS50ZXN0LmpzIiwid2F0Y2gtYmVuY2giOiJub2RlIGJlbmNoL2Rvd25sb2FkLWRhdGEuanMgJiYgd2F0Y2hpZnkgYmVuY2gvaW5kZXguanMgLS1wbHVnaW4gW21pbmlmeWlmeSAtLW5vLW1hcF0gLXQgW2JhYmVsaWZ5IC0tcHJlc2V0cyByZWFjdF0gLXQgdW5hc3NlcnRpZnkgLXQgZW52aWZ5IC1vIGJlbmNoL2JlbmNoLmpzIC12Iiwid2F0Y2gtZGV2Ijoid2F0Y2hpZnkganMvbWFwYm94LWdsLmpzIC0tZGVidWcgLS1zdGFuZGFsb25lIG1hcGJveGdsIC1vIGRpc3QvbWFwYm94LWdsLWRldi5qcyAtdiJ9LHZlcnNpb246IjAuMjIuMSJ9fSx7fV0sNDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGk9W10sYT0wO2E8PXQ7KythKWlmKGUmMTw8YSl7ci5wdXNoKG4odCxhLTEsYS0xKSksaS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2gobih0LGEtMSxzLTEpKSxpLnB1c2goW2Esc10pKX12YXIgbD1vKHIpLGM9W107dDpmb3IodmFyIGE9MDthPGwubGVuZ3RoOysrYSl7Zm9yKHZhciB1PWxbYV0sZj1bXSxzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFpW3Vbc11dKWNvbnRpbnVlIHQ7Zi5wdXNoKGlbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGYpfXJldHVybiBjfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWkodCxuKTtyZXR1cm4gcn1lLmV4cG9ydHM9YTt2YXIgbz10KCJjb252ZXgtaHVsbCIpfSx7ImNvbnZleC1odWxsIjoxMDJ9XSw0NTQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fWZ1bmN0aW9uIGkodCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfXZhciBvPXQoIi4vbm9ybWFsaXplIikscz10KCJnbC1tYXQ0L2NyZWF0ZSIpLGw9dCgiZ2wtbWF0NC9jbG9uZSIpLGM9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLHU9dCgiZ2wtbWF0NC9pbnZlcnQiKSxmPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksaD17bGVuZ3RoOnQoImdsLXZlYzMvbGVuZ3RoIiksbm9ybWFsaXplOnQoImdsLXZlYzMvbm9ybWFsaXplIiksZG90OnQoImdsLXZlYzMvZG90IiksY3Jvc3M6dCgiZ2wtdmVjMy9jcm9zcyIpfSxkPXMoKSxwPXMoKSxtPVswLDAsMCwwXSx2PVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZz1bMCwwLDBdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLHksYil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksc3x8KHM9WzAsMCwwXSkseXx8KHk9WzAsMCwwLDFdKSxifHwoYj1bMCwwLDAsMV0pLCFvKGQsdCkpcmV0dXJuITE7aWYobChwLGQpLHBbM109MCxwWzddPTAscFsxMV09MCxwWzE1XT0xLE1hdGguYWJzKGMocCk8MWUtOCkpcmV0dXJuITE7dmFyIHg9ZFszXSxfPWRbN10sdz1kWzExXSxNPWRbMTJdLFQ9ZFsxM10saz1kWzE0XSxBPWRbMTVdO2lmKDAhPT14fHwwIT09X3x8MCE9PXcpe21bMF09eCxtWzFdPV8sbVsyXT13LG1bM109QTtpZighdShwLHApKXJldHVybiExO2YocCxwKSxuKHksbSxwKX1lbHNlIHlbMF09eVsxXT15WzJdPTAseVszXT0xO2lmKGVbMF09TSxlWzFdPVQsZVsyXT1rLGkodixkKSxyWzBdPWgubGVuZ3RoKHZbMF0pLGgubm9ybWFsaXplKHZbMF0sdlswXSksc1swXT1oLmRvdCh2WzBdLHZbMV0pLGEodlsxXSx2WzFdLHZbMF0sMSwtc1swXSksclsxXT1oLmxlbmd0aCh2WzFdKSxoLm5vcm1hbGl6ZSh2WzFdLHZbMV0pLHNbMF0vPXJbMV0sc1sxXT1oLmRvdCh2WzBdLHZbMl0pLGEodlsyXSx2WzJdLHZbMF0sMSwtc1sxXSksc1syXT1oLmRvdCh2WzFdLHZbMl0pLGEodlsyXSx2WzJdLHZbMV0sMSwtc1syXSksclsyXT1oLmxlbmd0aCh2WzJdKSxoLm5vcm1hbGl6ZSh2WzJdLHZbMl0pLHNbMV0vPXJbMl0sc1syXS89clsyXSxoLmNyb3NzKGcsdlsxXSx2WzJdKSxoLmRvdCh2WzBdLGcpPDApZm9yKHZhciBFPTA7RTwzO0UrKylyW0VdKj0tMSx2W0VdWzBdKj0tMSx2W0VdWzFdKj0tMSx2W0VdWzJdKj0tMTtyZXR1cm4gYlswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdLXZbMV1bMV0tdlsyXVsyXSwwKSksYlsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdK3ZbMV1bMV0tdlsyXVsyXSwwKSksYlsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdLXZbMV1bMV0rdlsyXVsyXSwwKSksYlszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdK3ZbMV1bMV0rdlsyXVsyXSwwKSksdlsyXVsxXT52WzFdWzJdJiYoYlswXT0tYlswXSksdlswXVsyXT52WzJdWzBdJiYoYlsxXT0tYlsxXSksdlsxXVswXT52WzBdWzFdJiYoYlsyXT0tYlsyXSksITB9fSx7Ii4vbm9ybWFsaXplIjo0NTUsImdsLW1hdDQvY2xvbmUiOjE3OSwiZ2wtbWF0NC9jcmVhdGUiOjE4MCwiZ2wtbWF0NC9kZXRlcm1pbmFudCI6MTgxLCJnbC1tYXQ0L2ludmVydCI6MTg1LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MTk1LCJnbC12ZWMzL2Nyb3NzIjoyNzgsImdsLXZlYzMvZG90IjoyNzksImdsLXZlYzMvbGVuZ3RoIjoyODAsImdsLXZlYzMvbm9ybWFsaXplIjoyODJ9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzE1XTtpZigwPT09cilyZXR1cm4hMTtmb3IodmFyIG49MS9yLGk9MDtpPDE2O2krKyl0W2ldPWVbaV0qbjtyZXR1cm4hMH19LHt9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKDA9PT11KGUpfHwwPT09dShyKSlyZXR1cm4hMTt2YXIgaT1jKGUsaC50cmFuc2xhdGUsaC5zY2FsZSxoLnNrZXcsaC5wZXJzcGVjdGl2ZSxoLnF1YXRlcm5pb24pLGE9YyhyLGQudHJhbnNsYXRlLGQuc2NhbGUsZC5za2V3LGQucGVyc3BlY3RpdmUsZC5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFpfHwhYSkmJihzKHAudHJhbnNsYXRlLGgudHJhbnNsYXRlLGQudHJhbnNsYXRlLG4pLHMocC5za2V3LGguc2tldyxkLnNrZXcsbikscyhwLnNjYWxlLGguc2NhbGUsZC5zY2FsZSxuKSxzKHAucGVyc3BlY3RpdmUsaC5wZXJzcGVjdGl2ZSxkLnBlcnNwZWN0aXZlLG4pLGYocC5xdWF0ZXJuaW9uLGgucXVhdGVybmlvbixkLnF1YXRlcm5pb24sbiksbCh0LHAudHJhbnNsYXRlLHAuc2NhbGUscC5za2V3LHAucGVyc3BlY3RpdmUscC5xdWF0ZXJuaW9uKSwhMCl9ZnVuY3Rpb24gaSgpe3JldHVybnt0cmFuc2xhdGU6YSgpLHNjYWxlOmEoMSksc2tldzphKCkscGVyc3BlY3RpdmU6bygpLHF1YXRlcm5pb246bygpfX1mdW5jdGlvbiBhKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZnVuY3Rpb24gbygpe3JldHVyblswLDAsMCwxXX12YXIgcz10KCJnbC12ZWMzL2xlcnAiKSxsPXQoIm1hdDQtcmVjb21wb3NlIiksYz10KCJtYXQ0LWRlY29tcG9zZSIpLHU9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLGY9dCgicXVhdC1zbGVycCIpLGg9aSgpLGQ9aSgpLHA9aSgpO2UuZXhwb3J0cz1ufSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjE4MSwiZ2wtdmVjMy9sZXJwIjoyODEsIm1hdDQtZGVjb21wb3NlIjo0NTQsIm1hdDQtcmVjb21wb3NlIjo0NTcsInF1YXQtc2xlcnAiOjQ5OH1dLDQ1NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjE4MCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6MTgzLCJnbC1tYXQ0L2lkZW50aXR5IjoxODQsImdsLW1hdDQvbXVsdGlwbHkiOjE4NywiZ2wtbWF0NC9zY2FsZSI6MTkzLCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTk0fV0sNDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLSgxLzApLDEvMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdD10fHx7fSxuZXcgbih0Lm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX12YXIgYT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLG89dCgibWF0NC1pbnRlcnBvbGF0ZSIpLHM9dCgiZ2wtbWF0NC9pbnZlcnQiKSxsPXQoImdsLW1hdDQvcm90YXRlWCIpLGM9dCgiZ2wtbWF0NC9yb3RhdGVZIiksdT10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxmPXQoImdsLW1hdDQvbG9va0F0IiksaD10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLGQ9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxwPVswLDAsMF07ZS5leHBvcnRzPWk7dmFyIG09bi5wcm90b3R5cGU7bS5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWEubGUoZSx0KSxuPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgaT10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYyluW2NdPWlbbCsrXTtlbHNle2Zvcih2YXIgdT1lW3IrMV0tZVtyXSxsPTE2KnIsZj10aGlzLnByZXZNYXRyaXgsaD0hMCxjPTA7YzwxNjsrK2MpZltjXT1pW2wrK107Zm9yKHZhciBwPXRoaXMubmV4dE1hdHJpeCxjPTA7YzwxNjsrK2MpcFtjXT1pW2wrK10saD1oJiZmW2NdPT09cFtjXTtpZih1PDFlLTZ8fGgpZm9yKHZhciBjPTA7YzwxNjsrK2MpbltjXT1mW2NdO2Vsc2UgbyhuLGYscCwodC1lW3JdKS91KX12YXIgbT10aGlzLmNvbXB1dGVkVXA7bVswXT1uWzFdLG1bMV09bls1XSxtWzJdPW5bOV0sZChtLG0pO3ZhciB2PXRoaXMuY29tcHV0ZWRJbnZlcnNlO3ModixuKTt2YXIgZz10aGlzLmNvbXB1dGVkRXllLHk9dlsxNV07Z1swXT12WzEyXS95LGdbMV09dlsxM10veSxnWzJdPXZbMTRdL3k7Zm9yKHZhciBiPXRoaXMuY29tcHV0ZWRDZW50ZXIseD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxjPTA7YzwzOysrYyliW2NdPWdbY10tblsyKzQqY10qeH19LG0uaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sbS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1hLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxtLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LG0ubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHAsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxmKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sbS5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmYyhpLGksZSksciYmbChpLGksciksbiYmdShpLGksbiksdGhpcy5zZXRNYXRyaXgodCxzKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgdj1bMCwwLDBdO20ucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZbMF09LShlfHwwKSx2WzFdPS0ocnx8MCksdlsyXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2goaSxpLHYpLHRoaXMuc2V0TWF0cml4KHQscyhpLGkpKX0sbS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dlswXT1lfHwwLHZbMV09cnx8MCx2WzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtoKGksaSx2KSx0aGlzLnNldE1hdHJpeCh0LGkpfSxtLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sbS5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sbS5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxtLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjcsImdsLW1hdDQvaW52ZXJ0IjoxODUsImdsLW1hdDQvbG9va0F0IjoxODYsImdsLW1hdDQvcm90YXRlWCI6MTkwLCJnbC1tYXQ0L3JvdGF0ZVkiOjE5MSwiZ2wtbWF0NC9yb3RhdGVaIjoxOTIsImdsLW1hdDQvc2NhbGUiOjE5MywiZ2wtbWF0NC90cmFuc2xhdGUiOjE5NCwiZ2wtdmVjMy9ub3JtYWxpemUiOjI4MiwibWF0NC1pbnRlcnBvbGF0ZSI6NDU2fV0sNDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09bjtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn1mb3IodmFyIGE9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKWFbbl09bjthLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG4/bjp0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxuPTI7bjxlOysrbil7Zm9yKHZhciBsPWFbbl0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZpKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZpKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxmPTAsbj0wLGg9by5sZW5ndGg7bjxoOysrbilyW2YrK109b1tuXTtmb3IodmFyIGQ9cy5sZW5ndGgtMjtkPjA7LS1kKXJbZisrXT1zW2RdO3JldHVybiByfWUuZXhwb3J0cz1uO3ZhciBpPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTE3fV0sNDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT12LmFsdCx2LmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PXYuc2hpZnQsdi5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PXYuY29udHJvbCx2LmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PXYubWV0YSx2Lm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gbih0LG4pe3ZhciBhPWkueChuKSxvPWkueShuKTsiYnV0dG9ucyJpbiBuJiYodD0wfG4uYnV0dG9ucyksKHQhPT1kfHxhIT09cHx8byE9PW18fHIobikpJiYoZD0wfHQscD1hfHwwLG09b3x8MCxlJiZlKGQscCxtLHYpKX1mdW5jdGlvbiBhKHQpe24oMCx0KX1mdW5jdGlvbiBvKCl7KGR8fHB8fG18fHYuc2hpZnR8fHYuYWx0fHx2Lm1ldGF8fHYuY29udHJvbCkmJihwPW09MCxkPTAsdi5zaGlmdD12LmFsdD12LmNvbnRyb2w9di5tZXRhPSExLGUmJmUoMCwwLDAsdikpfWZ1bmN0aW9uIHModCl7cih0KSYmZSYmZShkLHAsbSx2KX1mdW5jdGlvbiBsKHQpezA9PT1pLmJ1dHRvbnModCk/bigwLHQpOm4oZCx0KX1mdW5jdGlvbiBjKHQpe24oZHxpLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gdSh0KXtuKGQmfmkuYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBmKCl7Z3x8KGc9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGwpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixjKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixvKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixzKSkpfWZ1bmN0aW9uIGgoKXtnJiYoZz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLG8pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIscyksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpKSl9ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIGQ9MCxwPTAsbT0wLHY9e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LGc9ITE7ZigpO3ZhciB5PXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh5LHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKHQpe3Q/ZigpOmgoKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBwfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGVudW1lcmFibGU6ITB9fSkseX1lLmV4cG9ydHM9bjt2YXIgaT10KCJtb3VzZS1ldmVudCIpfSx7Im1vdXNlLWV2ZW50Ijo0NjJ9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgbj10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz1pKGUpO3JldHVybiByWzBdPW4tby5sZWZ0LHJbMV09YS1vLnRvcCxyfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ9PT13aW5kb3d8fHQ9PT1kb2N1bWVudHx8dD09PWRvY3VtZW50LmJvZHk/YTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfXZhciBhPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1ufSx7fV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe3ZhciBlPXQud2hpY2g7aWYoMj09PWUpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZigiYnV0dG9uImluIHQpe3ZhciBlPXQuYnV0dG9uO2lmKDE9PT1lKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31mdW5jdGlvbiBhKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPWkodCkscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtci5sZWZ0fXJldHVybiAwfWZ1bmN0aW9uIG8odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WSJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9aSh0KSxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1yLnRvcH1yZXR1cm4gMH1yLmJ1dHRvbnM9bixyLmVsZW1lbnQ9aSxyLng9YSxyLnk9b30se31dLDQ2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIG49aSgiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9bjticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoaSo9bCxhKj1sLG8qPWwsaXx8YXx8bylyZXR1cm4gZShpLGEsbyl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhKSxhfXZhciBpPXQoInRvLXB4Iik7ZS5leHBvcnRzPW59LHsidG8tcHgiOjU0M31dLDQ2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiJhIit0fWZ1bmN0aW9uIGkodCl7cmV0dXJuImQiK3R9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiJjIit0KyJfIitlfWZ1bmN0aW9uIG8odCl7cmV0dXJuInMiK3R9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJ0Iit0KyJfIitlfWZ1bmN0aW9uIGwodCl7cmV0dXJuIm8iK3R9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ieCIrdH1mdW5jdGlvbiB1KHQpe3JldHVybiJwIit0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4iZCIrdCsiXyIrZX1mdW5jdGlvbiBoKHQpe3JldHVybiJpIit0fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4idSIrdCsiXyIrZX1mdW5jdGlvbiBwKHQpe3JldHVybiJiIit0fWZ1bmN0aW9uIG0odCl7cmV0dXJuInkiK3R9ZnVuY3Rpb24gdih0KXtyZXR1cm4iZSIrdH1mdW5jdGlvbiBnKHQpe3JldHVybiJ2Iit0fWZ1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKWUmMTw8aSYmKG58PTE8PHJbaV0pO3JldHVybiBufWZ1bmN0aW9uIGIodCxlLHIsYix4LFMpe2Z1bmN0aW9uIEwodCxlKXtqLnB1c2goImZvcigiLGgoeFt0XSksIj0iLGUsIjsiLGgoeFt0XSksIjwiLG8oeFt0XSksIjsiLCIrKyIsaCh4W3RdKSwiKXsiKX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZT0wO2U8TzsrK2Upai5wdXNoKHUoZSksIis9IixkKGUseFt0XSksIjsiKTtqLnB1c2goIn0iKX1mdW5jdGlvbiBJKHQpe2Zvcih2YXIgZT10LTE7ZT49MDstLWUpTChlLDApO2Zvcih2YXIgcj1bXSxlPTA7ZTxPOysrZSlTW2VdP3IucHVzaChpKGUpKyIuZ2V0KCIrdShlKSsiKSIpOnIucHVzaChpKGUpKyJbIit1KGUpKyJdIik7Zm9yKHZhciBlPTA7ZTxiOysrZSlyLnB1c2goYyhlKSk7ai5wdXNoKE0sIlsiLEEsIisrXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgZT0wO2U8dDsrK2UpQyhlKTtmb3IodmFyIG49MDtuPE87KytuKWoucHVzaCh1KG4pLCIrPSIsZChuLHhbdF0pLCI7Iil9ZnVuY3Rpb24gRCh0KXtmb3IodmFyIGU9MDtlPE87KytlKVNbZV0/ai5wdXNoKGEoZSwwKSwiPSIsaShlKSwiLmdldCgiLHUoZSksIik7Iik6ai5wdXNoKGEoZSwwKSwiPSIsaShlKSwiWyIsdShlKSwiXTsiKTtmb3IodmFyIHI9W10sZT0wO2U8TzsrK2Upci5wdXNoKGEoZSwwKSk7Zm9yKHZhciBlPTA7ZTxiOysrZSlyLnB1c2goYyhlKSk7ai5wdXNoKHAoMCksIj0iLE0sIlsiLEEsIl09cGhhc2UoIixyLmpvaW4oKSwiKTsiKTtmb3IodmFyIG49MTtuPDE8PFI7KytuKWoucHVzaChwKG4pLCI9IixNLCJbIixBLCIrIix2KG4pLCJdOyIpO2Zvcih2YXIgbz1bXSxuPTE7bjwxPDxSOysrbilvLnB1c2goIigiK3AoMCkrIiE9PSIrcChuKSsiKSIpO2oucHVzaCgiaWYoIixvLmpvaW4oInx8IiksIil7Iik7Zm9yKHZhciBzPVtdLGU9MDtlPFI7KytlKXMucHVzaChoKGUpKTtmb3IodmFyIGU9MDtlPE87KytlKXtzLnB1c2goYShlLDApKTtmb3IodmFyIG49MTtuPDE8PFI7KytuKVNbZV0/ai5wdXNoKGEoZSxuKSwiPSIsaShlKSwiLmdldCgiLHUoZSksIisiLGYoZSxuKSwiKTsiKTpqLnB1c2goYShlLG4pLCI9IixpKGUpLCJbIix1KGUpLCIrIixmKGUsbiksIl07Iikscy5wdXNoKGEoZSxuKSl9Zm9yKHZhciBlPTA7ZTwxPDxSOysrZSlzLnB1c2gocChlKSk7Zm9yKHZhciBlPTA7ZTxiOysrZSlzLnB1c2goYyhlKSk7ai5wdXNoKCJ2ZXJ0ZXgoIixzLmpvaW4oKSwiKTsiLGcoMCksIj0iLHcsIlsiLEEsIl09IixULCIrKzsiKTtmb3IodmFyIGw9KDE8PFIpLTEsZD1wKGwpLG49MDtuPFI7KytuKWlmKDA9PSh0Jn4oMTw8bikpKXtmb3IodmFyIG09bF4xPDxuLHk9cChtKSx4PVtdLF89bTtfPjA7Xz1fLTEmbSl4LnB1c2godysiWyIrQSsiKyIrdihfKSsiXSIpO3gucHVzaChnKDApKTtmb3IodmFyIF89MDtfPE87KytfKTEmbj94LnB1c2goYShfLGwpLGEoXyxtKSk6eC5wdXNoKGEoXyxtKSxhKF8sbCkpOzEmbj94LnB1c2goZCx5KTp4LnB1c2goeSxkKTtmb3IodmFyIF89MDtfPGI7KytfKXgucHVzaChjKF8pKTtqLnB1c2goImlmKCIsZCwiIT09Iix5LCIpeyIsImZhY2UoIix4LmpvaW4oKSwiKX0iKX1qLnB1c2goIn0iLEEsIis9MTsiKX1mdW5jdGlvbiBQKCl7Zm9yKHZhciB0PTE7dDwxPDxSOysrdClqLnB1c2goRSwiPSIsdih0KSwiOyIsdih0KSwiPSIsbSh0KSwiOyIsbSh0KSwiPSIsRSwiOyIpfWZ1bmN0aW9uIHoodCxlKXtpZih0PDApcmV0dXJuIHZvaWQgRChlKTtJKHQpLGoucHVzaCgiaWYoIixvKHhbdF0pLCI+MCl7IixoKHhbdF0pLCI9MTsiKSx6KHQtMSxlfDE8PHhbdF0pO2Zvcih2YXIgcj0wO3I8TzsrK3Ipai5wdXNoKHUociksIis9IixkKHIseFt0XSksIjsiKTt0PT09Ui0xJiYoai5wdXNoKEEsIj0wOyIpLFAoKSksTCh0LDIpLHoodC0xLGUpLHQ9PT1SLTEmJihqLnB1c2goImlmKCIsaCh4W1ItMV0pLCImMSl7IixBLCI9MDt9IiksUCgpKSxDKHQpLGoucHVzaCgifSIpfXZhciBPPVMubGVuZ3RoLFI9eC5sZW5ndGg7aWYoUjwyKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6IERpbWVuc2lvbiBtdXN0IGJlIGF0IGxlYXN0IDIiKTtmb3IodmFyIEY9ImV4dHJhY3RDb250b3VyIit4LmpvaW4oIl8iKSxqPVtdLE49W10sQj1bXSxVPTA7VTxPOysrVSlCLnB1c2gobihVKSk7Zm9yKHZhciBVPTA7VTxiOysrVSlCLnB1c2goYyhVKSk7Zm9yKHZhciBVPTA7VTxSOysrVSlOLnB1c2gobyhVKSsiPSIrbigwKSsiLnNoYXBlWyIrVSsiXXwwIik7Zm9yKHZhciBVPTA7VTxPOysrVSl7Ti5wdXNoKGkoVSkrIj0iK24oVSkrIi5kYXRhIixsKFUpKyI9IituKFUpKyIub2Zmc2V0fDAiKTtmb3IodmFyIFY9MDtWPFI7KytWKU4ucHVzaChzKFUsVikrIj0iK24oVSkrIi5zdHJpZGVbIitWKyJdfDAiKX1mb3IodmFyIFU9MDtVPE87KytVKXtOLnB1c2godShVKSsiPSIrbChVKSksTi5wdXNoKGEoVSwwKSk7Zm9yKHZhciBWPTE7VjwxPDxSOysrVil7Zm9yKHZhciBIPVtdLHE9MDtxPFI7KytxKVYmMTw8cSYmSC5wdXNoKCItIitzKFUscSkpO04ucHVzaChmKFUsVikrIj0oIitILmpvaW4oIiIpKyIpfDAiKSxOLnB1c2goYShVLFYpKyI9MCIpfX1mb3IodmFyIFU9MDtVPE87KytVKWZvcih2YXIgVj0wO1Y8UjsrK1Ype3ZhciBHPVtzKFUseFtWXSldO1Y+MCYmRy5wdXNoKHMoVSx4W1YtMV0pKyIqIitvKHhbVi0xXSkpLE4ucHVzaChkKFUseFtWXSkrIj0oIitHLmpvaW4oIi0iKSsiKXwwIil9Zm9yKHZhciBVPTA7VTxSOysrVSlOLnB1c2goaChVKSsiPTAiKTtOLnB1c2goVCsiPTAiKTtmb3IodmFyIFk9WyIyIl0sVT1SLTI7VT49MDstLVUpWS5wdXNoKG8oeFtVXSkpO04ucHVzaChrKyI9KCIrWS5qb2luKCIqIikrIil8MCIsTSsiPW1hbGxvY1VpbnQzMigiK2srIikiLHcrIj1tYWxsb2NVaW50MzIoIitrKyIpIixBKyI9MCIpLE4ucHVzaChwKDApKyI9MCIpO2Zvcih2YXIgVj0xO1Y8MTw8UjsrK1Ype2Zvcih2YXIgWD1bXSxXPVtdLHE9MDtxPFI7KytxKVYmMTw8cSYmKDA9PT1XLmxlbmd0aD9YLnB1c2goIjEiKTpYLnVuc2hpZnQoVy5qb2luKCIqIikpKSxXLnB1c2gobyh4W3FdKSk7dmFyIFo9IiI7WFswXS5pbmRleE9mKG8oeFtSLTJdKSk8MCYmKFo9Ii0iKTt2YXIgSj15KFIsVix4KTtOLnB1c2godihKKSsiPSgtIitYLmpvaW4oIi0iKSsiKXwwIixtKEopKyI9KCIrWitYLmpvaW4oIi0iKSsiKXwwIixwKEopKyI9MCIpfU4ucHVzaChnKDApKyI9MCIsRSsiPTAiKSx6KFItMSwwKSxqLnB1c2goImZyZWVVaW50MzIoIix3LCIpO2ZyZWVVaW50MzIoIixNLCIpOyIpO3ZhciBLPVsiJ3VzZSBzdHJpY3QnOyIsImZ1bmN0aW9uICIsRiwiKCIsQi5qb2luKCksIil7IiwidmFyICIsTi5qb2luKCksIjsiLGouam9pbigiIiksIn0iLCJyZXR1cm4gIixGXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJ2ZXJ0ZXgiLCJmYWNlIiwicGhhc2UiLCJtYWxsb2NVaW50MzIiLCJmcmVlVWludDMyIixLKSh0LGUscixfLm1hbGxvY1VpbnQzMixfLmZyZWVVaW50MzIpfWZ1bmN0aW9uIHgodCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIG49dC5hcnJheUFyZ3VtZW50c3x8MTtuPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgaT10LnNjYWxhckFyZ3VtZW50c3x8MDtpPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKSwiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIGE9dC5nZXR0ZXJzfHxbXSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylhLmluZGV4T2Yocyk+PTA/b1tzXT0hMDpvW3NdPSExO3JldHVybiBiKHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLGkscixvKX12YXIgXz10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9eDt2YXIgdz0iViIsTT0iUCIsVD0iTiIsaz0iUSIsQT0iWCIsRT0iVCJ9LHsidHlwZWRhcnJheS1wb29sIjo1NDl9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfN19hcmcxXz1faW5saW5lXzdfYXJnMl8uYXBwbHkodm9pZCAwLF9pbmxpbmVfN19hcmcwXyl9IixhcmdzOlt7bmFtZToiX2lubGluZV83X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfN19hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJjd2lzZSIsYmxvY2tTaXplOjY0fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKSx0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6NDY2fV0sNDY2OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzExMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ImN3aXNlLWNvbXBpbGVyIjoxMDksZHVwOjExMn1dLDQ2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gbClyZXR1cm4gbFt0XTtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJvdXQiLHIsInM9MC41KihpbnAiLHIsImwtaW5wIixyLCJyKTsiKTtmb3IodmFyIG49WyJhcnJheSJdLGk9WyJqdW5rIl0scj0wO3I8dDsrK3Ipe24ucHVzaCgiYXJyYXkiKSxpLnB1c2goIm91dCIrcisicyIpO3ZhciBhPW8odCk7YVtyXT0tMSxuLnB1c2goe2FycmF5OjAsb2Zmc2V0OmEuc2xpY2UoKX0pLGFbcl09MSxuLnB1c2goe2FycmF5OjAsb2Zmc2V0OmEuc2xpY2UoKX0pLGkucHVzaCgiaW5wIityKyJsIiwiaW5wIityKyJyIil9cmV0dXJuIGxbdF09cyh7YXJnczpuLHByZTp1LHBvc3Q6dSxib2R5Ontib2R5OmUuam9pbigiIiksYXJnczppLm1hcChmdW5jdGlvbih0KXtyZXR1cm57bmFtZTp0LGx2YWx1ZTowPT09dC5pbmRleE9mKCJvdXQiKSxydmFsdWU6MD09PXQuaW5kZXhPZigiaW5wIiksY291bnQ6Imp1bmsiIT09dHwwfX0pLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6ImZkVGVtcGxhdGUiK3R9KX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuam9pbigpLHI9Y1tlXTtpZihyKXJldHVybiByO2Zvcih2YXIgaT10Lmxlbmd0aCxhPVsiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7Il0sbz0wO288MTw8aTsrK28pe2Zvcih2YXIgcz1bXSx1PTA7dTxpOysrdSlvJjE8PHUmJnMucHVzaCh1KzEpO2Zvcih2YXIgZD0wO2Q8MTw8cy5sZW5ndGg7KytkKXtmb3IodmFyIHA9cy5zbGljZSgpLHU9MDt1PHMubGVuZ3RoOysrdSlkJjE8PHUmJihwW3VdPS1wW3VdKTshZnVuY3Rpb24oZSl7Zm9yKHZhciByPWktZS5sZW5ndGgsbj1bXSxvPVtdLHM9W10sbD0wO2w8aTsrK2wpZS5pbmRleE9mKGwrMSk+PTA/cy5wdXNoKCIwIik6ZS5pbmRleE9mKC0obCsxKSk+PTA/cy5wdXNoKCJzWyIrbCsiXS0xIik6KHMucHVzaCgiLTEiKSxuLnB1c2goIjEiKSxvLnB1c2goInNbIitsKyJdLTIiKSk7dmFyIGM9Ii5sbygiK24uam9pbigpKyIpLmhpKCIrby5qb2luKCkrIikiO2lmKDA9PT1uLmxlbmd0aCYmKGM9IiIpLHI+MCl7YS5wdXNoKCJpZigxIik7Zm9yKHZhciBsPTA7bDxpOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fGEucHVzaCgiJiZzWyIsbCwiXT4yIik7YS5wdXNoKCIpe2dyYWQiLHIsIihzcmMucGljaygiLHMuam9pbigpLCIpIixjKTtmb3IodmFyIGw9MDtsPGk7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8YS5wdXNoKCIsZHN0LnBpY2soIixzLmpvaW4oKSwiLCIsbCwiKSIsYyk7YS5wdXNoKCIpOyIpfWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgdT1NYXRoLmFicyhlW2xdKS0xLGY9ImRzdC5waWNrKCIrcy5qb2luKCkrIiwiK3UrIikiK2M7c3dpdGNoKHRbdV0pe2Nhc2UiY2xhbXAiOnZhciBoPXMuc2xpY2UoKSxkPXMuc2xpY2UoKTtlW2xdPDA/aFt1XT0ic1siK3UrIl0tMiI6ZFt1XT0iMSIsMD09PXI/YS5wdXNoKCJpZihzWyIsdSwiXT4xKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixoLmpvaW4oKSwiKS1zcmMuZ2V0KCIsZC5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTphLnB1c2goImlmKHNbIix1LCJdPjEpe2RpZmYoIixmLCIsc3JjLnBpY2soIixoLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIsZC5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGYsIik7fTsiKTticmVhaztjYXNlIm1pcnJvciI6MD09PXI/YS5wdXNoKCJkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKTsiKTphLnB1c2goInplcm8oIixmLCIpOyIpO2JyZWFrO2Nhc2Uid3JhcCI6dmFyIHA9cy5zbGljZSgpLG09cy5zbGljZSgpO2VbbF08MD8ocFt1XT0ic1siK3UrIl0tMiIsbVt1XT0iMCIpOihwW3VdPSJzWyIrdSsiXS0xIixtW3VdPSIxIiksMD09PXI/YS5wdXNoKCJpZihzWyIsdSwiXT4yKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixwLmpvaW4oKSwiKS1zcmMuZ2V0KCIsbS5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTphLnB1c2goImlmKHNbIix1LCJdPjIpe2RpZmYoIixmLCIsc3JjLnBpY2soIixwLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIsbS5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGYsIik7fTsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogSW52YWxpZCBib3VuZGFyeSBjb25kaXRpb24iKX19cj4wJiZhLnB1c2goIn07Iil9KHApfX1hLnB1c2goInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnQiKTtmb3IodmFyIG09WyJkaWZmIiwiemVybyJdLHY9W2YsaF0sbz0xO288PWk7KytvKW0ucHVzaCgiZ3JhZCIrbyksdi5wdXNoKG4obykpO20ucHVzaChhLmpvaW4oIiIpKTt2YXIgZz1GdW5jdGlvbi5hcHBseSh2b2lkIDAsbSkscj1nLmFwcGx5KHZvaWQgMCx2KTtyZXR1cm4gbFtlXT1yLHJ9ZnVuY3Rpb24gYSh0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9ucyIpfWVsc2Ugcj0ic3RyaW5nIj09dHlwZW9mIHI/byhlLmRpbWVuc2lvbixyKTpvKGUuZGltZW5zaW9uLCJjbGFtcCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb24iKTtpZih0LnNoYXBlW2UuZGltZW5zaW9uXSE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGUiKTtmb3IodmFyIG49MDtuPGUuZGltZW5zaW9uOysrbilpZih0LnNoYXBlW25dIT09ZS5zaGFwZVtuXSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IHNoYXBlIG1pc21hdGNoIik7cmV0dXJuIDA9PT1lLnNpemU/dDplLmRpbWVuc2lvbjw9MD8odC5zZXQoMCksdCk6aShyKSh0LGUpfWUuZXhwb3J0cz1hO3ZhciBvPXQoImR1cCIpLHM9dCgiY3dpc2UtY29tcGlsZXIiKSxsPXt9LGM9e30sdT17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZj1zKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnUscG9zdDp1LGJvZHk6e2FyZ3M6W3tuYW1lOiJvdXQiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6ImxlZnQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6InJpZ2h0IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJvdXQ9MC41KihsZWZ0LXJpZ2h0KSIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiY2RpZmYifSksaD1zKHthcmdzOlsiYXJyYXkiXSxwcmU6dSxwb3N0OnUsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfV0sYm9keToib3V0PTAiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6Inplcm8ifSl9LHsiY3dpc2UtY29tcGlsZXIiOjEwOSxkdXA6MTI1fV0sNDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWUuZGltZW5zaW9uLG89YShbXSxyKTtyZXR1cm4gaSh0LGUsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPG47KytyKXt0W3JdPW9bKG4rMSkqbityXTtmb3IodmFyIGk9MDtpPG47KytpKXRbcl0rPW9bKG4rMSkqaStyXSplW2ldfWZvcih2YXIgYT1vWyhuKzEpKihuKzEpLTFdLGk9MDtpPG47KytpKWErPW9bKG4rMSkqaStuXSplW2ldO2Zvcih2YXIgcz0xL2Escj0wO3I8bjsrK3IpdFtyXSo9cztyZXR1cm4gdH0pLHR9dmFyIGk9dCgibmRhcnJheS13YXJwIiksYT10KCJnbC1tYXRyaXgtaW52ZXJ0Iik7ZS5leHBvcnRzPW59LHsiZ2wtbWF0cml4LWludmVydCI6MTk2LCJuZGFycmF5LXdhcnAiOjQ3NX1dLDQ2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9TWF0aC5mbG9vcihlKSxuPWUtcixpPTA8PXImJnI8dC5zaGFwZVswXSxhPTA8PXIrMSYmcisxPHQuc2hhcGVbMF07cmV0dXJuKDEtbikqKGk/K3QuZ2V0KHIpOjApK24qKGE/K3QuZ2V0KHIrMSk6MCl9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49TWF0aC5mbG9vcihlKSxpPWUtbixhPTA8PW4mJm48dC5zaGFwZVswXSxvPTA8PW4rMSYmbisxPHQuc2hhcGVbMF0scz1NYXRoLmZsb29yKHIpLGw9ci1zLGM9MDw9cyYmczx0LnNoYXBlWzFdLHU9MDw9cysxJiZzKzE8dC5zaGFwZVsxXSxmPWEmJmM/dC5nZXQobixzKTowLGg9YSYmdT90LmdldChuLHMrMSk6MDtyZXR1cm4oMS1sKSooKDEtaSkqZitpKihvJiZjP3QuZ2V0KG4rMSxzKTowKSkrbCooKDEtaSkqaCtpKihvJiZ1P3QuZ2V0KG4rMSxzKzEpOjApKX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPU1hdGguZmxvb3IoZSksYT1lLWksbz0wPD1pJiZpPHQuc2hhcGVbMF0scz0wPD1pKzEmJmkrMTx0LnNoYXBlWzBdLGw9TWF0aC5mbG9vcihyKSxjPXItbCx1PTA8PWwmJmw8dC5zaGFwZVsxXSxmPTA8PWwrMSYmbCsxPHQuc2hhcGVbMV0saD1NYXRoLmZsb29yKG4pLGQ9bi1oLHA9MDw9aCYmaDx0LnNoYXBlWzJdLG09MDw9aCsxJiZoKzE8dC5zaGFwZVsyXSx2PW8mJnUmJnA/dC5nZXQoaSxsLGgpOjAsZz1vJiZmJiZwP3QuZ2V0KGksbCsxLGgpOjAseT1zJiZ1JiZwP3QuZ2V0KGkrMSxsLGgpOjAsYj1zJiZmJiZwP3QuZ2V0KGkrMSxsKzEsaCk6MCx4PW8mJnUmJm0/dC5nZXQoaSxsLGgrMSk6MCxfPW8mJmYmJm0/dC5nZXQoaSxsKzEsaCsxKTowO3JldHVybigxLWQpKigoMS1jKSooKDEtYSkqdithKnkpK2MqKCgxLWEpKmcrYSpiKSkrZCooKDEtYykqKCgxLWEpKngrYSoocyYmdSYmbT90LmdldChpKzEsbCxoKzEpOjApKStjKigoMS1hKSpfK2EqKHMmJmYmJm0/dC5nZXQoaSsxLGwrMSxoKzEpOjApKSl9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsZj0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWYrPWMqdC5kYXRhW3VdfXJldHVybiBmfWZ1bmN0aW9uIHModCxlLHIscyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIscyk7ZGVmYXVsdDpyZXR1cm4gby5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19ZS5leHBvcnRzPXMsZS5leHBvcnRzLmQxPW4sZS5leHBvcnRzLmQyPWksZS5leHBvcnRzLmQzPWF9LHt9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gcztmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbyh7YXJnczp0LmFyZ3MscHJlOm4odC5wcmUpLGJvZHk6bih0LmJvZHkpLHBvc3Q6bih0LnByb2MpLGZ1bmNOYW1lOnQuZnVuY05hbWV9KX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0LmFyZ3MubGVuZ3RoOysrcillLnB1c2goImEiK3IpO3JldHVybiBuZXcgRnVuY3Rpb24oIlAiLFsicmV0dXJuIGZ1bmN0aW9uICIsdC5mdW5jTmFtZSwiX25kYXJyYXlvcHMoIixlLmpvaW4oIiwiKSwiKSB7UCgiLGUuam9pbigiLCIpLCIpO3JldHVybiBhMH0iXS5qb2luKCIiKSkoaSh0KSl9dmFyIG89dCgiY3dpc2UtY29tcGlsZXIiKSxzPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxsPXthZGQ6IisiLHN1YjoiLSIsbXVsOiIqIixkaXY6Ii8iLG1vZDoiJSIsYmFuZDoiJiIsYm9yOiJ8IixieG9yOiJeIixsc2hpZnQ6Ijw8Iixyc2hpZnQ6Ij4+IixycnNoaWZ0OiI+Pj4ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gbCl7dmFyIGU9bFt0XTtyW3RdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT1iIitlKyJjIn0sZnVuY05hbWU6dH0pLHJbdCsiZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImEiK2UrIj1iIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsicyJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIiwicyJdLGJvZHk6ImE9YiIrZSsicyJ9LGZ1bmNOYW1lOnQrInMifSksclt0KyJzZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsInMiXSxib2R5OiJhIitlKyI9cyJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0KyJzZXEifSl9fSgpO3ZhciBjPXtub3Q6IiEiLGJub3Q6In4iLG5lZzoiLSIscmVjaXA6IjEuMC8ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gYyl7dmFyIGU9Y1t0XTtyW3RdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT0iK2UrImIifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPWEoe2FyZ3M6WyJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT0iK2UrImEifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KX19KCk7dmFyIHU9e2FuZDoiJiYiLG9yOiJ8fCIsZXE6Ij09PSIsbmVxOiIhPT0iLGx0OiI8IixndDoiPiIsbGVxOiI8PSIsZ2VxOiI+PSJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB1KXt2YXIgZT11W3RdO3JbdF09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJzIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrImVxIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPWEiK2UrImIifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KSxyW3QrInNlcSJdPWEoe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImE9YSIrZSsicyJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIGY9WyJhYnMiLCJhY29zIiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJyb3VuZCIsInNpbiIsInNxcnQiLCJ0YW4iXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXQp9LGZ1bmNOYW1lOmV9KSxyW2UrImVxIl09YSh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSJdLGJvZHk6ImE9dGhpc19mKGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJlcSJ9KX19KCk7dmFyIGg9WyJtYXgiLCJtaW4iLCJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZV09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGIsYykiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmV9KSxyW2UrInMiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGIsYykiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrInMifSkscltlKyJlcSJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihhLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJlcSJ9KSxyW2UrInNlcSJdPWEoe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsic2VxIn0pfX0oKTt2YXIgZD1bImF0YW4yIiwicG93Il07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxkLmxlbmd0aDsrK3Qpe3ZhciBlPWRbdF07cltlKyJvcCJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihjLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJvcCJ9KSxyW2UrIm9wcyJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3BzIn0pLHJbZSsib3BlcSJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcGVxIn0pLHJbZSsib3BzZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIsYSkiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrIm9wc2VxIn0pfX0oKSxyLmFueT1vKHthcmdzOlsiYXJyYXkiXSxwcmU6cyxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoYSl7cmV0dXJuIHRydWV9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6InJldHVybiBmYWxzZSJ9LGZ1bmNOYW1lOiJhbnkifSksci5hbGw9byh7YXJnczpbImFycmF5Il0scHJlOnMsYm9keTp7YXJnczpbe25hbWU6IngiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKCF4KXtyZXR1cm4gZmFsc2V9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6InJldHVybiB0cnVlIn0sZnVuY05hbWU6ImFsbCJ9KSxyLnN1bT1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToidGhpc19zKz1hIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6InN1bSJ9KSxyLnByb2Q9byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0xIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcyo9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJwcm9kIn0pLHIubm9ybTJzcXVhcmVkPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSxib2R5OiJ0aGlzX3MrPWEqYSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJub3JtMnNxdWFyZWQifSksci5ub3JtMj1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiBNYXRoLnNxcnQodGhpc19zKSJ9LGZ1bmNOYW1lOiJub3JtMiJ9KSxyLm5vcm1pbmY9byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLGJvZHk6ImlmKC1hPnRoaXNfcyl7dGhpc19zPS1hfWVsc2UgaWYoYT50aGlzX3Mpe3RoaXNfcz1hfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJub3JtaW5mIn0pLHIubm9ybTE9byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6M31dLGJvZHk6InRoaXNfcys9YTwwPy1hOmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTEifSksci5zdXA9byh7YXJnczpbImFycmF5Il0scHJlOntib2R5OiJ0aGlzX2g9LUluZmluaXR5IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJpZihfaW5saW5lXzFfYXJnMF8+dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF8iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJyZXR1cm4gdGhpc19oIixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfX0pLHIuaW5mPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPUluZmluaXR5IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJpZihfaW5saW5lXzFfYXJnMF88dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF8iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJyZXR1cm4gdGhpc19oIixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19oIl0sbG9jYWxWYXJzOltdfX0pLHIuYXJnbWluPW8oe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2hhcGUiXSxwcmU6e2JvZHk6Int0aGlzX3Y9SW5maW5pdHk7dGhpc19pPV9pbmxpbmVfMF9hcmcyXy5zbGljZSgwKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzBfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie2lmKF9pbmxpbmVfMV9hcmcxXzx0aGlzX3Ype3RoaXNfdj1faW5saW5lXzFfYXJnMV87Zm9yKHZhciBfaW5saW5lXzFfaz0wO19pbmxpbmVfMV9rPF9pbmxpbmVfMV9hcmcwXy5sZW5ndGg7KytfaW5saW5lXzFfayl7dGhpc19pW19pbmxpbmVfMV9rXT1faW5saW5lXzFfYXJnMF9bX2lubGluZV8xX2tdfX19IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOlsiX2lubGluZV8xX2siXX0scG9zdDp7Ym9keToie3JldHVybiB0aGlzX2l9IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19pIl0sbG9jYWxWYXJzOltdfX0pLHIuYXJnbWF4PW8oe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2hhcGUiXSxwcmU6e2JvZHk6Int0aGlzX3Y9LUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV8+dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLnJhbmRvbT1hKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGgucmFuZG9tIix0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSJdLGJvZHk6ImE9dGhpc19mKCkiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOiJyYW5kb20ifSksci5hc3NpZ249YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPWIifSxmdW5jTmFtZToiYXNzaWduIn0pLHIuYXNzaWducz1hKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPWIifSxmdW5jTmFtZToiYXNzaWducyJ9KSxyLmVxdWFscz1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJ5IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZih4IT09eSl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJlcXVhbHMifSl9LHsiY3dpc2UtY29tcGlsZXIiOjEwOX1dLDQ3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5IiksaT10KCIuL2RvQ29udmVydC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQsbz0xO0FycmF5LmlzQXJyYXkoYSk7KXIucHVzaChhLmxlbmd0aCksbyo9YS5sZW5ndGgsYT1hWzBdO3JldHVybiAwPT09ci5sZW5ndGg/bigpOihlfHwoZT1uKG5ldyBGbG9hdDY0QXJyYXkobykscikpLGkoZSx0KSxlKX19LHsiLi9kb0NvbnZlcnQuanMiOjQ3MixuZGFycmF5OjQ3Nn1dLDQ3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7XG52YXIgX2lubGluZV8xX3Y9X2lubGluZV8xX2FyZzFfLF9pbmxpbmVfMV9pXG5mb3IoX2lubGluZV8xX2k9MDtfaW5saW5lXzFfaTxfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTE7KytfaW5saW5lXzFfaSkge1xuX2lubGluZV8xX3Y9X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9pXV1cbn1cbl9pbmxpbmVfMV9hcmcwXz1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2FyZzJfLmxlbmd0aC0xXV1cbn0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfaSIsIl9pbmxpbmVfMV92Il19LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6ImNvbnZlcnQiLGJsb2NrU2l6ZTo2NH0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMDl9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtzd2l0Y2godCl7Y2FzZSJ1aW50OCI6cmV0dXJuW2wubWFsbG9jVWludDgsbC5mcmVlVWludDhdO2Nhc2UidWludDE2IjpyZXR1cm5bbC5tYWxsb2NVaW50MTYsbC5mcmVlVWludDE2XTtjYXNlInVpbnQzMiI6cmV0dXJuW2wubWFsbG9jVWludDMyLGwuZnJlZVVpbnQzMl07Y2FzZSJpbnQ4IjpyZXR1cm5bbC5tYWxsb2NJbnQ4LGwuZnJlZUludDhdO2Nhc2UiaW50MTYiOnJldHVybltsLm1hbGxvY0ludDE2LGwuZnJlZUludDE2XTtjYXNlImludDMyIjpyZXR1cm5bbC5tYWxsb2NJbnQzMixsLmZyZWVJbnQzMl07Y2FzZSJmbG9hdDMyIjpyZXR1cm5bbC5tYWxsb2NGbG9hdCxsLmZyZWVGbG9hdF07Y2FzZSJmbG9hdDY0IjpyZXR1cm5bbC5tYWxsb2NEb3VibGUsbC5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goInMiK3IpO2Zvcih2YXIgcj0wO3I8dDsrK3IpZS5wdXNoKCJuIityKTtmb3IodmFyIHI9MTtyPHQ7KytyKWUucHVzaCgiZCIrcik7Zm9yKHZhciByPTE7cjx0OysrcillLnB1c2goImUiK3IpO2Zvcih2YXIgcj0xO3I8dDsrK3IpZS5wdXNoKCJmIityKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfXZhciBvPVsiJ3VzZSBzdHJpY3QnIl0scz1bIm5kYXJyYXlJbnNlcnRpb25Tb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxsPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChpKHQubGVuZ3RoKSksYz1uKGUpLHU9WyJpLGosY3B0cixwdHI9bGVmdCpzMCtvZmZzZXQiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIGY9W10saD0xO2g8dC5sZW5ndGg7KytoKXUucHVzaCgiaSIraCksZi5wdXNoKCJuIitoKTtjP3UucHVzaCgic2NyYXRjaD1tYWxsb2MoIitmLmpvaW4oIioiKSsiKSIpOnUucHVzaCgic2NyYXRjaD1uZXcgQXJyYXkoIitmLmpvaW4oIioiKSsiKSIpLHUucHVzaCgiZHB0ciIsInNwdHIiLCJhIiwiYiIpfWVsc2UgdS5wdXNoKCJzY3JhdGNoIik7aWYoby5wdXNoKFsiZnVuY3Rpb24gIixzLCIoIixsLmpvaW4oIiwiKSwiKXt2YXIgIix1LmpvaW4oIiwiKV0uam9pbigiIiksImZvcihpPWxlZnQrMTtpPD1yaWdodDsrK2kpeyIsImo9aTtwdHIrPXMwIiwiY3B0cj1wdHIiKSx0Lmxlbmd0aD4xKXtvLnB1c2goImRwdHI9MDtzcHRyPXB0ciIpO2Zvcih2YXIgaD10Lmxlbmd0aC0xO2g+PTA7LS1oKXt2YXIgZD10W2hdOzAhPT1kJiZvLnB1c2goWyJmb3IoaSIsZCwiPTA7aSIsZCwiPG4iLGQsIjsrK2kiLGQsIil7Il0uam9pbigiIikpfW8ucHVzaCgic2NyYXRjaFtkcHRyKytdPSIscigic3B0ciIpKTtmb3IodmFyIGg9MDtoPHQubGVuZ3RoOysraCl7dmFyIGQ9dFtoXTswIT09ZCYmby5wdXNoKCJzcHRyKz1kIitkLCJ9Iil9by5wdXNoKCJfX2c6d2hpbGUoai0tPmxlZnQpeyIsImRwdHI9MCIsInNwdHI9Y3B0ci1zMCIpO2Zvcih2YXIgaD0xO2g8dC5sZW5ndGg7KytoKTE9PT1oJiZvLnB1c2goIl9fbDoiKSxvLnB1c2goWyJmb3IoaSIsaCwiPTA7aSIsaCwiPG4iLGgsIjsrK2kiLGgsIil7Il0uam9pbigiIikpO28ucHVzaChbImE9IixyKCJzcHRyIiksIlxuYj1zY3JhdGNoW2RwdHJdXG5pZihhPGIpe2JyZWFrIF9fZ31cbmlmKGE+Yil7YnJlYWsgX19sfSJdLmpvaW4oIiIpKTtmb3IodmFyIGg9dC5sZW5ndGgtMTtoPj0xOy0taClvLnB1c2goInNwdHIrPWUiK2gsImRwdHIrPWYiK2gsIn0iKTtvLnB1c2goImRwdHI9Y3B0cjtzcHRyPWNwdHItczAiKTtmb3IodmFyIGg9dC5sZW5ndGgtMTtoPj0wOy0taCl7dmFyIGQ9dFtoXTswIT09ZCYmby5wdXNoKFsiZm9yKGkiLGQsIj0wO2kiLGQsIjxuIixkLCI7KytpIixkLCIpeyJdLmpvaW4oIiIpKX1vLnB1c2goYSgiZHB0ciIscigic3B0ciIpKSk7Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDsrK2gpe3ZhciBkPXRbaF07MCE9PWQmJm8ucHVzaChbImRwdHIrPWQiLGQsIjtzcHRyKz1kIixkXS5qb2luKCIiKSwifSIpfW8ucHVzaCgiY3B0ci09czBcbn0iKSxvLnB1c2goImRwdHI9Y3B0cjtzcHRyPTAiKTtmb3IodmFyIGg9dC5sZW5ndGgtMTtoPj0wOy0taCl7dmFyIGQ9dFtoXTswIT09ZCYmby5wdXNoKFsiZm9yKGkiLGQsIj0wO2kiLGQsIjxuIixkLCI7KytpIixkLCIpeyJdLmpvaW4oIiIpKX1vLnB1c2goYSgiZHB0ciIsInNjcmF0Y2hbc3B0cisrXSIpKTtmb3IodmFyIGg9MDtoPHQubGVuZ3RoOysraCl7dmFyIGQ9dFtoXTswIT09ZCYmby5wdXNoKCJkcHRyKz1kIitkLCJ9Iil9fWVsc2Ugby5wdXNoKCJzY3JhdGNoPSIrcigicHRyIiksIndoaWxlKChqLS0+bGVmdCkmJigiK3IoImNwdHItczAiKSsiPnNjcmF0Y2gpKXsiLGEoImNwdHIiLHIoImNwdHItczAiKSksImNwdHItPXMwIiwifSIsYSgiY3B0ciIsInNjcmF0Y2giKSk7aWYoby5wdXNoKCJ9IiksdC5sZW5ndGg+MSYmYyYmby5wdXNoKCJmcmVlKHNjcmF0Y2gpIiksby5wdXNoKCJ9IHJldHVybiAiK3MpLGMpe3ZhciBwPW5ldyBGdW5jdGlvbigibWFsbG9jIiwiZnJlZSIsby5qb2luKCJcbiIpKTtyZXR1cm4gcChjWzBdLGNbMV0pfXZhciBwPW5ldyBGdW5jdGlvbihvLmpvaW4oIlxuIikpO3JldHVybiBwKCl9ZnVuY3Rpb24gbyh0LGUscil7ZnVuY3Rpb24gYSh0KXtyZXR1cm5bIihvZmZzZXQrIix0LCIqczApIl0uam9pbigiIil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5nZXQoIix0LCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHModCxyKXtyZXR1cm4iZ2VuZXJpYyI9PT1lP1siZGF0YS5zZXQoIix0LCIsIixyLCIpIl0uam9pbigiIik6WyJkYXRhWyIsdCwiXT0iLHJdLmpvaW4oIiIpfWZ1bmN0aW9uIGwoZSxyLG4pe2lmKDE9PT1lLmxlbmd0aClfLnB1c2goInB0cjA9IithKGVbMF0pKTtlbHNlIGZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKV8ucHVzaChbImJfcHRyIixpLCI9czAqIixlW2ldXS5qb2luKCIiKSk7ciYmXy5wdXNoKCJwaXZvdF9wdHI9MCIpLF8ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpO2Zvcih2YXIgaT10Lmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz10W2ldOzAhPT1vJiZfLnB1c2goWyJmb3IoaSIsbywiPTA7aSIsbywiPG4iLG8sIjsrK2kiLG8sIil7Il0uam9pbigiIikpfWlmKGUubGVuZ3RoPjEpZm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpXy5wdXNoKFsicHRyIixpLCI9Yl9wdHIiLGksIitwdHJfc2hpZnQiXS5qb2luKCIiKSk7Xy5wdXNoKG4pLHImJl8ucHVzaCgiKytwaXZvdF9wdHIiKTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXTswIT09byYmKGUubGVuZ3RoPjE/Xy5wdXNoKCJwdHJfc2hpZnQrPWQiK28pOl8ucHVzaCgicHRyMCs9ZCIrbyksXy5wdXNoKCJ9IikpfX1mdW5jdGlvbiB1KGUscixuLGkpe2lmKDE9PT1yLmxlbmd0aClfLnB1c2goInB0cjA9IithKHJbMF0pKTtlbHNle2Zvcih2YXIgbz0wO288ci5sZW5ndGg7KytvKV8ucHVzaChbImJfcHRyIixvLCI9czAqIixyW29dXS5qb2luKCIiKSk7Xy5wdXNoKCJwdHJfc2hpZnQ9b2Zmc2V0Iil9biYmXy5wdXNoKCJwaXZvdF9wdHI9MCIpLGUmJl8ucHVzaChlKyI6Iik7Zm9yKHZhciBvPTE7bzx0Lmxlbmd0aDsrK28pXy5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKTtpZihyLmxlbmd0aD4xKWZvcih2YXIgbz0wO288ci5sZW5ndGg7KytvKV8ucHVzaChbInB0ciIsbywiPWJfcHRyIixvLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO18ucHVzaChpKTtmb3IodmFyIG89dC5sZW5ndGgtMTtvPj0xOy0tbyluJiZfLnB1c2goInBpdm90X3B0cis9ZiIrbyksci5sZW5ndGg+MT9fLnB1c2goInB0cl9zaGlmdCs9ZSIrbyk6Xy5wdXNoKCJwdHIwKz1lIitvKSxfLnB1c2goIn0iKX1mdW5jdGlvbiBmKCl7dC5sZW5ndGg+MSYmVCYmXy5wdXNoKCJmcmVlKHBpdm90MSkiLCJmcmVlKHBpdm90MikiKX1mdW5jdGlvbiBoKGUscil7dmFyIG49ImVsIitlLGk9ImVsIityO2lmKHQubGVuZ3RoPjEpe3ZhciBzPSJfX2wiKyArK2s7dShzLFtuLGldLCExLFsiY29tcD0iLG8oInB0cjAiKSwiLSIsbygicHRyMSIpLCJcbiIsImlmKGNvbXA+MCl7dG1wMD0iLG4sIjsiLG4sIj0iLGksIjsiLGksIj10bXAwO2JyZWFrICIscywifVxuIiwiaWYoY29tcDwwKXticmVhayAiLHMsIn0iXS5qb2luKCIiKSl9ZWxzZSBfLnB1c2goWyJpZigiLG8oYShuKSksIj4iLG8oYShpKSksIil7dG1wMD0iLG4sIjsiLG4sIj0iLGksIjsiLGksIj10bXAwfSJdLmpvaW4oIiIpKX1mdW5jdGlvbiBkKGUscil7dC5sZW5ndGg+MT9sKFtlLHJdLCExLHMoInB0cjAiLG8oInB0cjEiKSkpOl8ucHVzaChzKGEoZSksbyhhKHIpKSkpfWZ1bmN0aW9uIHAoZSxyLG4pe2lmKHQubGVuZ3RoPjEpe3ZhciBpPSJfX2wiKyArK2s7dShpLFtyXSwhMCxbZSwiPSIsbygicHRyMCIpLCItcGl2b3QiLG4sIltwaXZvdF9wdHJdXG4iLCJpZigiLGUsIiE9PTApe2JyZWFrICIsaSwifSJdLmpvaW4oIiIpKX1lbHNlIF8ucHVzaChbZSwiPSIsbyhhKHIpKSwiLXBpdm90IixuXS5qb2luKCIiKSl9ZnVuY3Rpb24gbShlLHIpe3QubGVuZ3RoPjE/bChbZSxyXSwhMSxbInRtcD0iLG8oInB0cjAiKSwiXG4iLHMoInB0cjAiLG8oInB0cjEiKSksIlxuIixzKCJwdHIxIiwidG1wIildLmpvaW4oIiIpKTpfLnB1c2goWyJwdHIwPSIsYShlKSwiXG4iLCJwdHIxPSIsYShyKSwiXG4iLCJ0bXA9IixvKCJwdHIwIiksIlxuIixzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gdihlLHIsbil7dC5sZW5ndGg+MT8obChbZSxyLG5dLCExLFsidG1wPSIsbygicHRyMCIpLCJcbiIscygicHRyMCIsbygicHRyMSIpKSwiXG4iLHMoInB0cjEiLG8oInB0cjIiKSksIlxuIixzKCJwdHIyIiwidG1wIildLmpvaW4oIiIpKSxfLnB1c2goIisrIityLCItLSIrbikpOl8ucHVzaChbInB0cjA9IixhKGUpLCJcbiIsInB0cjE9IixhKHIpLCJcbiIsInB0cjI9IixhKG4pLCJcbiIsIisrIixyLCJcbiIsIi0tIixuLCJcbiIsInRtcD0iLG8oInB0cjAiKSwiXG4iLHMoInB0cjAiLG8oInB0cjEiKSksIlxuIixzKCJwdHIxIixvKCJwdHIyIikpLCJcbiIscygicHRyMiIsInRtcCIpXS5qb2luKCIiKSl9ZnVuY3Rpb24gZyh0LGUpe20odCxlKSxfLnB1c2goIi0tIitlKX1mdW5jdGlvbiB5KGUscixuKXt0Lmxlbmd0aD4xP2woW2Uscl0sITAsW3MoInB0cjAiLG8oInB0cjEiKSksIlxuIixzKCJwdHIxIixbInBpdm90IixuLCJbcGl2b3RfcHRyXSJdLmpvaW4oIiIpKV0uam9pbigiIikpOl8ucHVzaChzKGEoZSksbyhhKHIpKSkscyhhKHIpLCJwaXZvdCIrbikpfWZ1bmN0aW9uIGIoZSxyKXtfLnB1c2goWyJpZigoIixyLCItIixlLCIpPD0iLGMsIil7XG4iLCJpbnNlcnRpb25Tb3J0KCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsaSh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9ZWxzZXtcbiIsdywiKCIsZSwiLCIsciwiLGRhdGEsb2Zmc2V0LCIsaSh0Lmxlbmd0aCkuam9pbigiLCIpLCIpXG4iLCJ9Il0uam9pbigiIikpfWZ1bmN0aW9uIHgoZSxyLG4pe3QubGVuZ3RoPjE/KF8ucHVzaChbIl9fbCIsKytrLCI6d2hpbGUodHJ1ZSl7Il0uam9pbigiIikpLGwoW2VdLCEwLFsiaWYoIixvKCJwdHIwIiksIiE9PXBpdm90IixyLCJbcGl2b3RfcHRyXSl7YnJlYWsgX19sIixrLCJ9Il0uam9pbigiIikpLF8ucHVzaChuLCJ9IikpOl8ucHVzaChbIndoaWxlKCIsbyhhKGUpKSwiPT09cGl2b3QiLHIsIil7IixuLCJ9Il0uam9pbigiIikpfXZhciBfPVsiJ3VzZSBzdHJpY3QnIl0sdz1bIm5kYXJyYXlRdWlja1NvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLE09WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KGkodC5sZW5ndGgpKSxUPW4oZSksaz0wO18ucHVzaChbImZ1bmN0aW9uICIsdywiKCIsTS5qb2luKCIsIiksIil7Il0uam9pbigiIikpO3ZhciBBPVsic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDAiLCJpbmRleDE9bGVmdCtzaXh0aCIsImluZGV4NT1yaWdodC1zaXh0aCIsImluZGV4Mz0obGVmdCtyaWdodCk+PjEiLCJpbmRleDI9aW5kZXgzLXNpeHRoIiwiaW5kZXg0PWluZGV4MytzaXh0aCIsImVsMT1pbmRleDEiLCJlbDI9aW5kZXgyIiwiZWwzPWluZGV4MyIsImVsND1pbmRleDQiLCJlbDU9aW5kZXg1IiwibGVzcz1sZWZ0KzEiLCJncmVhdD1yaWdodC0xIiwicGl2b3RzX2FyZV9lcXVhbD10cnVlIiwidG1wIiwidG1wMCIsIngiLCJ5IiwieiIsImsiLCJwdHIwIiwicHRyMSIsInB0cjIiLCJjb21wX3Bpdm90MT0wIiwiY29tcF9waXZvdDI9MCIsImNvbXA9MCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgRT1bXSxTPTE7Uzx0Lmxlbmd0aDsrK1MpRS5wdXNoKCJuIitTKSxBLnB1c2goImkiK1MpO2Zvcih2YXIgUz0wO1M8ODsrK1MpQS5wdXNoKCJiX3B0ciIrUyk7QS5wdXNoKCJwdHIzIiwicHRyNCIsInB0cjUiLCJwdHI2IiwicHRyNyIsInBpdm90X3B0ciIsInB0cl9zaGlmdCIsImVsZW1lbnRTaXplPSIrRS5qb2luKCIqIikpLFQ/QS5wdXNoKCJwaXZvdDE9bWFsbG9jKGVsZW1lbnRTaXplKSIsInBpdm90Mj1tYWxsb2MoZWxlbWVudFNpemUpIik6QS5wdXNoKCJwaXZvdDE9bmV3IEFycmF5KGVsZW1lbnRTaXplKSxwaXZvdDI9bmV3IEFycmF5KGVsZW1lbnRTaXplKSIpfWVsc2UgQS5wdXNoKCJwaXZvdDEiLCJwaXZvdDIiKTtpZihfLnB1c2goInZhciAiK0Euam9pbigiLCIpKSxoKDEsMiksaCg0LDUpLGgoMSwzKSxoKDIsMyksaCgxLDQpLGgoMyw0KSxoKDIsNSksaCgyLDMpLGgoNCw1KSx0Lmxlbmd0aD4xP2woWyJlbDEiLCJlbDIiLCJlbDMiLCJlbDQiLCJlbDUiLCJpbmRleDEiLCJpbmRleDMiLCJpbmRleDUiXSwhMCxbInBpdm90MVtwaXZvdF9wdHJdPSIsbygicHRyMSIpLCJcbiIsInBpdm90MltwaXZvdF9wdHJdPSIsbygicHRyMyIpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3RzX2FyZV9lcXVhbCYmKHBpdm90MVtwaXZvdF9wdHJdPT09cGl2b3QyW3Bpdm90X3B0cl0pXG4iLCJ4PSIsbygicHRyMCIpLCJcbiIsInk9IixvKCJwdHIyIiksIlxuIiwiej0iLG8oInB0cjQiKSwiXG4iLHMoInB0cjUiLCJ4IiksIlxuIixzKCJwdHI2IiwieSIpLCJcbiIscygicHRyNyIsInoiKV0uam9pbigiIikpOl8ucHVzaChbInBpdm90MT0iLG8oYSgiZWwyIikpLCJcbiIsInBpdm90Mj0iLG8oYSgiZWw0IikpLCJcbiIsInBpdm90c19hcmVfZXF1YWw9cGl2b3QxPT09cGl2b3QyXG4iLCJ4PSIsbyhhKCJlbDEiKSksIlxuIiwieT0iLG8oYSgiZWwzIikpLCJcbiIsIno9IixvKGEoImVsNSIpKSwiXG4iLHMoYSgiaW5kZXgxIiksIngiKSwiXG4iLHMoYSgiaW5kZXgzIiksInkiKSwiXG4iLHMoYSgiaW5kZXg1IiksInoiKV0uam9pbigiIikpLGQoImluZGV4MiIsImxlZnQiKSxkKCJpbmRleDQiLCJyaWdodCIpLF8ucHVzaCgiaWYocGl2b3RzX2FyZV9lcXVhbCl7IiksXy5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IikscCgiY29tcCIsImsiLDEpLF8ucHVzaCgiaWYoY29tcD09PTApe2NvbnRpbnVlfSIpLF8ucHVzaCgiaWYoY29tcDwwKXsiKSxfLnB1c2goImlmKGshPT1sZXNzKXsiKSxtKCJrIiwibGVzcyIpLF8ucHVzaCgifSIpLF8ucHVzaCgiKytsZXNzIiksXy5wdXNoKCJ9ZWxzZXsiKSxfLnB1c2goIndoaWxlKHRydWUpeyIpLHAoImNvbXAiLCJncmVhdCIsMSksXy5wdXNoKCJpZihjb21wPjApeyIpLF8ucHVzaCgiZ3JlYXQtLSIpLF8ucHVzaCgifWVsc2UgaWYoY29tcDwwKXsiKSx2KCJrIiwibGVzcyIsImdyZWF0IiksXy5wdXNoKCJicmVhayIpLF8ucHVzaCgifWVsc2V7IiksZygiayIsImdyZWF0IiksXy5wdXNoKCJicmVhayIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifWVsc2V7IiksXy5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IikscCgiY29tcF9waXZvdDEiLCJrIiwxKSxfLnB1c2goImlmKGNvbXBfcGl2b3QxPDApeyIpLF8ucHVzaCgiaWYoayE9PWxlc3MpeyIpLG0oImsiLCJsZXNzIiksXy5wdXNoKCJ9IiksXy5wdXNoKCIrK2xlc3MiKSxfLnB1c2goIn1lbHNleyIpLHAoImNvbXBfcGl2b3QyIiwiayIsMiksXy5wdXNoKCJpZihjb21wX3Bpdm90Mj4wKXsiKSxfLnB1c2goIndoaWxlKHRydWUpeyIpLHAoImNvbXAiLCJncmVhdCIsMiksXy5wdXNoKCJpZihjb21wPjApeyIpLF8ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxfLnB1c2goImNvbnRpbnVlIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcDwwKXsiKSx2KCJrIiwibGVzcyIsImdyZWF0IiksXy5wdXNoKCJ9ZWxzZXsiKSxnKCJrIiwiZ3JlYXQiKSxfLnB1c2goIn0iKSxfLnB1c2goImJyZWFrIiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IikseSgibGVmdCIsIihsZXNzLTEpIiwxKSx5KCJyaWdodCIsIihncmVhdCsxKSIsMiksYigibGVmdCIsIihsZXNzLTIpIiksYigiKGdyZWF0KzIpIiwicmlnaHQiKSxfLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLGYoKSxfLnB1c2goInJldHVybiIpLF8ucHVzaCgifSIpLF8ucHVzaCgiaWYobGVzczxpbmRleDEmJmdyZWF0PmluZGV4NSl7IikseCgibGVzcyIsMSwiKytsZXNzIikseCgiZ3JlYXQiLDIsIi0tZ3JlYXQiKSxfLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSxwKCJjb21wX3Bpdm90MSIsImsiLDEpLF8ucHVzaCgiaWYoY29tcF9waXZvdDE9PT0wKXsiKSxfLnB1c2goImlmKGshPT1sZXNzKXsiKSxtKCJrIiwibGVzcyIpLF8ucHVzaCgifSIpLF8ucHVzaCgiKytsZXNzIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wX3Bpdm90MiIsImsiLDIpLF8ucHVzaCgiaWYoY29tcF9waXZvdDI9PT0wKXsiKSxfLnB1c2goIndoaWxlKHRydWUpeyIpLHAoImNvbXAiLCJncmVhdCIsMiksXy5wdXNoKCJpZihjb21wPT09MCl7IiksXy5wdXNoKCJpZigtLWdyZWF0PGspe2JyZWFrfSIpLF8ucHVzaCgiY29udGludWUiKSxfLnB1c2goIn1lbHNleyIpLHAoImNvbXAiLCJncmVhdCIsMSksXy5wdXNoKCJpZihjb21wPDApeyIpLHYoImsiLCJsZXNzIiwiZ3JlYXQiKSxfLnB1c2goIn1lbHNleyIpLGcoImsiLCJncmVhdCIpLF8ucHVzaCgifSIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxmKCksYigibGVzcyIsImdyZWF0IiksXy5wdXNoKCJ9cmV0dXJuICIrdyksdC5sZW5ndGg+MSYmVCl7dmFyIEw9bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwibWFsbG9jIiwiZnJlZSIsXy5qb2luKCJcbiIpKTtyZXR1cm4gTChyLFRbMF0sVFsxXSl9dmFyIEw9bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IixfLmpvaW4oIlxuIikpO3JldHVybiBMKHIpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1bIid1c2Ugc3RyaWN0JyJdLG49WyJuZGFycmF5U29ydFdyYXBwZXIiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLHM9WyJhcnJheSJdO3IucHVzaChbImZ1bmN0aW9uICIsbiwiKCIscy5qb2luKCIsIiksIil7Il0uam9pbigiIikpO2Zvcih2YXIgbD1bImRhdGE9YXJyYXkuZGF0YSxvZmZzZXQ9YXJyYXkub2Zmc2V0fDAsc2hhcGU9YXJyYXkuc2hhcGUsc3RyaWRlPWFycmF5LnN0cmlkZSJdLHU9MDt1PHQubGVuZ3RoOysrdSlsLnB1c2goWyJzIix1LCI9c3RyaWRlWyIsdSwiXXwwLG4iLHUsIj1zaGFwZVsiLHUsIl18MCJdLmpvaW4oIiIpKTtmb3IodmFyIGY9bmV3IEFycmF5KHQubGVuZ3RoKSxoPVtdLHU9MDt1PHQubGVuZ3RoOysrdSl7dmFyIGQ9dFt1XTswIT09ZCYmKDA9PT1oLmxlbmd0aD9mW2RdPSIxIjpmW2RdPWguam9pbigiKiIpLGgucHVzaCgibiIrZCkpfWZvcih2YXIgcD0tMSxtPS0xLHU9MDt1PHQubGVuZ3RoOysrdSl7dmFyIHY9dFt1XTswIT09diYmKHA+MD9sLnB1c2goWyJkIix2LCI9cyIsdiwiLWQiLHAsIipuIixwXS5qb2luKCIiKSk6bC5wdXNoKFsiZCIsdiwiPXMiLHZdLmpvaW4oIiIpKSxwPXYpO3ZhciBkPXQubGVuZ3RoLTEtdTswIT09ZCYmKG0+MD9sLnB1c2goWyJlIixkLCI9cyIsZCwiLWUiLG0sIipuIixtLCIsZiIsZCwiPSIsZltkXSwiLWYiLG0sIipuIixtXS5qb2luKCIiKSk6bC5wdXNoKFsiZSIsZCwiPXMiLGQsIixmIixkLCI9IixmW2RdXS5qb2luKCIiKSksbT1kKX1yLnB1c2goInZhciAiK2wuam9pbigiLCIpKTt2YXIgZz1bIjAiLCJuMC0xIiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChpKHQubGVuZ3RoKSk7ci5wdXNoKFsiaWYobjA8PSIsYywiKXsiLCJpbnNlcnRpb25Tb3J0KCIsZy5qb2luKCIsIiksIil9ZWxzZXsiLCJxdWlja1NvcnQoIixnLmpvaW4oIiwiKSwiKX0iXS5qb2luKCIiKSksci5wdXNoKCJ9cmV0dXJuICIrbik7dmFyIHk9bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwicXVpY2tTb3J0IixyLmpvaW4oIlxuIikpLGI9YSh0LGUpO3JldHVybiB5KGIsbyh0LGUsYikpfXZhciBsPXQoInR5cGVkYXJyYXktcG9vbCIpLGM9MzI7ZS5leHBvcnRzPXN9LHsidHlwZWRhcnJheS1wb29sIjo1NDl9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lm9yZGVyLHI9dC5kdHlwZSxuPVtlLHJdLG89bi5qb2luKCI6Iikscz1hW29dO3JldHVybiBzfHwoYVtvXT1zPWkoZSxyKSkscyh0KSx0fXZhciBpPXQoIi4vbGliL2NvbXBpbGVfc29ydC5qcyIpLGE9e307ZS5leHBvcnRzPW59LHsiLi9saWIvY29tcGlsZV9zb3J0LmpzIjo0NzN9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGUiKSxpPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9bmV3IEFycmF5KF9pbmxpbmVfMzNfYXJnNF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMzNfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMzNfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMzNfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMzNfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMzNfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzM0X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMzRfYXJnMF8pLF9pbmxpbmVfMzRfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzM0X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzM0X2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzM0X2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzM0X2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzM0X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwTkQiLGJsb2NrU2l6ZTo2NH0pLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzM3X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMzdfYXJnMF8pLF9pbmxpbmVfMzdfYXJnM18oX2lubGluZV8zN19hcmc0Xyx0aGlzX3dhcnBlZFswXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV8zN19hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8zN19hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zN19hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8zN19hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8zN19hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycDFEIixibG9ja1NpemU6NjR9KSxvPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzAsMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzQwX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfNDBfYXJnMF8pLF9pbmxpbmVfNDBfYXJnM18oX2lubGluZV80MF9hcmc0Xyx0aGlzX3dhcnBlZFswXSx0aGlzX3dhcnBlZFsxXSl9IixhcmdzOlt7bmFtZToiX2lubGluZV80MF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80MF9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV80MF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80MF9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80MF9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycDJEIixibG9ja1NpemU6NjR9KSxzPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzAsMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfNDNfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV80M19hcmcwXyksX2lubGluZV80M19hcmczXyhfaW5saW5lXzQzX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzQzX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzQzX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzQzX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzQzX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzQzX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwM0QiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGUuc2hhcGUubGVuZ3RoKXtjYXNlIDE6YSh0LHIsbi5kMSxlKTticmVhaztjYXNlIDI6byh0LHIsbi5kMixlKTticmVhaztjYXNlIDM6cyh0LHIsbi5kMyxlKTticmVhaztkZWZhdWx0OmkodCxyLG4uYmluZCh2b2lkIDAsZSksZS5zaGFwZS5sZW5ndGgpfXJldHVybiB0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6MTEyLCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSI6NDY5fV0sNDc2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gaSgpe3ZhciB0LGU9dGhpcy5zdHJpZGUscj1uZXcgQXJyYXkoZS5sZW5ndGgpO2Zvcih0PTA7dDxyLmxlbmd0aDsrK3Qpclt0XT1bTWF0aC5hYnMoZVt0XSksdF07ci5zb3J0KG4pO3ZhciBpPW5ldyBBcnJheShyLmxlbmd0aCk7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdPXJbdF1bMV07cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPVsiVmlldyIsZSwiZCIsdF0uam9pbigiIik7ZTwwJiYocj0iVmlld19OaWwiK3QpO3ZhciBuPSJnZW5lcmljIj09PXQ7aWYoZT09PS0xKXt2YXIgYT0iZnVuY3Rpb24gIityKyIoYSl7dGhpcy5kYXRhPWE7fTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gLTF9O3Byb3RvLnNpemU9MDtwcm90by5kaW1lbnNpb249LTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEpO307cHJvdG8uZ2V0PXByb3RvLnNldD1mdW5jdGlvbigpe307cHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEpe3JldHVybiBuZXcgIityKyIoYSk7fSIsbz1uZXcgRnVuY3Rpb24oYSk7cmV0dXJuIG8oKX1pZigwPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfY29weSgpIHtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9O3Byb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSI6InRoaXMuZGF0YVt0aGlzLm9mZnNldF0iKSsifTtwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KHYpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12IikrIn07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhLGIsYyxkKXtyZXR1cm4gbmV3ICIrcisiKGEsZCl9IixvPW5ldyBGdW5jdGlvbigiVHJpdmlhbEFycmF5IixhKTtyZXR1cm4gbyhmW3RdWzBdKX12YXIgYT1bIid1c2Ugc3RyaWN0JyJdLHM9bChlKSxjPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJpIit0fSksdT0idGhpcy5vZmZzZXQrIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdKmkiK3R9KS5qb2luKCIrIiksaD1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pLmpvaW4oIiwiKSxkPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0fSkuam9pbigiLCIpO2EucHVzaCgiZnVuY3Rpb24gIityKyIoYSwiK2grIiwiK2QrIixkKXt0aGlzLmRhdGE9YSIsInRoaXMuc2hhcGU9WyIraCsiXSIsInRoaXMuc3RyaWRlPVsiK2QrIl0iLCJ0aGlzLm9mZnNldD1kfDB9IiwidmFyIHByb3RvPSIrcisiLnByb3RvdHlwZSIsInByb3RvLmR0eXBlPSciK3QrIiciLCJwcm90by5kaW1lbnNpb249IitlKSxhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiAiK3IrIl9zaXplKCl7cmV0dXJuICIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc2hhcGVbIit0KyJdIn0pLmpvaW4oIioiKSwifX0pIiksMT09PWU/YS5wdXNoKCJwcm90by5vcmRlcj1bMF0iKTooYS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ29yZGVyJyx7Z2V0OiIpLGU8ND8oYS5wdXNoKCJmdW5jdGlvbiAiK3IrIl9vcmRlcigpeyIpLDI9PT1lP2EucHVzaCgicmV0dXJuIChNYXRoLmFicyh0aGlzLnN0cmlkZVswXSk+TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pKT9bMSwwXTpbMCwxXX19KSIpOjM9PT1lJiZhLnB1c2goInZhciBzMD1NYXRoLmFicyh0aGlzLnN0cmlkZVswXSksczE9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHMyPU1hdGguYWJzKHRoaXMuc3RyaWRlWzJdKTtpZihzMD5zMSl7aWYoczE+czIpe3JldHVybiBbMiwxLDBdO31lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzEsMiwwXTt9ZWxzZXtyZXR1cm4gWzEsMCwyXTt9fWVsc2UgaWYoczA+czIpe3JldHVybiBbMiwwLDFdO31lbHNlIGlmKHMyPnMxKXtyZXR1cm4gWzAsMSwyXTt9ZWxzZXtyZXR1cm4gWzAsMiwxXTt9fX0pIikpOmEucHVzaCgiT1JERVJ9KSIpKSxhLnB1c2goInByb3RvLnNldD1mdW5jdGlvbiAiK3IrIl9zZXQoIitjLmpvaW4oIiwiKSsiLHYpeyIpLG4/YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLnNldCgiK3UrIix2KX0iKTphLnB1c2goInJldHVybiB0aGlzLmRhdGFbIit1KyJdPXZ9IiksYS5wdXNoKCJwcm90by5nZXQ9ZnVuY3Rpb24gIityKyJfZ2V0KCIrYy5qb2luKCIsIikrIil7Iiksbj9hLnB1c2goInJldHVybiB0aGlzLmRhdGEuZ2V0KCIrdSsiKX0iKTphLnB1c2goInJldHVybiB0aGlzLmRhdGFbIit1KyJdfSIpLGEucHVzaCgicHJvdG8uaW5kZXg9ZnVuY3Rpb24gIityKyJfaW5kZXgoIixjLmpvaW4oKSwiKXtyZXR1cm4gIit1KyJ9IiksYS5wdXNoKCJwcm90by5oaT1mdW5jdGlvbiAiK3IrIl9oaSgiK2Muam9pbigiLCIpKyIpe3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuWyIodHlwZW9mIGkiLHQsIiE9PSdudW1iZXInfHxpIix0LCI8MCk/dGhpcy5zaGFwZVsiLHQsIl06aSIsdCwifDAiXS5qb2luKCIiKX0pLmpvaW4oIiwiKSsiLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9Iik7dmFyIHA9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3QrIj10aGlzLnNoYXBlWyIrdCsiXSJ9KSxtPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0KyI9dGhpcy5zdHJpZGVbIit0KyJdIn0pO2EucHVzaCgicHJvdG8ubG89ZnVuY3Rpb24gIityKyJfbG8oIitjLmpvaW4oIiwiKSsiKXt2YXIgYj10aGlzLm9mZnNldCxkPTAsIitwLmpvaW4oIiwiKSsiLCIrbS5qb2luKCIsIikpO2Zvcih2YXIgdj0wO3Y8ZTsrK3YpYS5wdXNoKCJpZih0eXBlb2YgaSIrdisiPT09J251bWJlcicmJmkiK3YrIj49MCl7ZD1pIit2KyJ8MDtiKz1jIit2KyIqZDthIit2KyItPWR9Iik7YS5wdXNoKCJyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0fSkuam9pbigiLCIpKyIsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdH0pLmpvaW4oIiwiKSsiLGIpfSIpLGEucHVzaCgicHJvdG8uc3RlcD1mdW5jdGlvbiAiK3IrIl9zdGVwKCIrYy5qb2luKCIsIikrIil7dmFyICIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3QrIj10aGlzLnNoYXBlWyIrdCsiXSJ9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0KyI9dGhpcy5zdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLGM9dGhpcy5vZmZzZXQsZD0wLGNlaWw9TWF0aC5jZWlsIik7Zm9yKHZhciB2PTA7djxlOysrdilhLnB1c2goImlmKHR5cGVvZiBpIit2KyI9PT0nbnVtYmVyJyl7ZD1pIit2KyJ8MDtpZihkPDApe2MrPWIiK3YrIiooYSIrdisiLTEpO2EiK3YrIj1jZWlsKC1hIit2KyIvZCl9ZWxzZXthIit2KyI9Y2VpbChhIit2KyIvZCl9YiIrdisiKj1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3R9KS5qb2luKCIsIikrIixjKX0iKTtmb3IodmFyIGc9bmV3IEFycmF5KGUpLHk9bmV3IEFycmF5KGUpLHY9MDt2PGU7Kyt2KWdbdl09ImFbaSIrdisiXSIseVt2XT0iYltpIit2KyJdIjthLnB1c2goInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiAiK3IrIl90cmFuc3Bvc2UoIitjKyIpeyIrYy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiPSgiK3QrIj09PXVuZGVmaW5lZD8iK2UrIjoiK3QrInwwKSJ9KS5qb2luKCI7IiksInZhciBhPXRoaXMuc2hhcGUsYj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK2cuam9pbigiLCIpKyIsIit5LmpvaW4oIiwiKSsiLHRoaXMub2Zmc2V0KX0iKSxhLnB1c2goInByb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygiK2MrIil7dmFyIGE9W10sYj1bXSxjPXRoaXMub2Zmc2V0Iik7Zm9yKHZhciB2PTA7djxlOysrdilhLnB1c2goImlmKHR5cGVvZiBpIit2KyI9PT0nbnVtYmVyJyYmaSIrdisiPj0wKXtjPShjK3RoaXMuc3RyaWRlWyIrdisiXSppIit2KyIpfDB9ZWxzZXthLnB1c2godGhpcy5zaGFwZVsiK3YrIl0pO2IucHVzaCh0aGlzLnN0cmlkZVsiK3YrIl0pfSIpO2EucHVzaCgidmFyIGN0b3I9Q1RPUl9MSVNUW2EubGVuZ3RoKzFdO3JldHVybiBjdG9yKHRoaXMuZGF0YSxhLGIsYyl9IiksYS5wdXNoKCJyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGRhdGEsc2hhcGUsc3RyaWRlLG9mZnNldCl7cmV0dXJuIG5ldyAiK3IrIihkYXRhLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInNoYXBlWyIrdCsiXSJ9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLG9mZnNldCl9Iik7dmFyIG89bmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCJPUkRFUiIsYS5qb2luKCJcbiIpKTtyZXR1cm4gbyhmW3RdLGkpfWZ1bmN0aW9uIG8odCl7aWYoYyh0KSlyZXR1cm4iYnVmZmVyIjtpZih1KXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpyZXR1cm4iZmxvYXQ2NCI7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOnJldHVybiJmbG9hdDMyIjtjYXNlIltvYmplY3QgSW50OEFycmF5XSI6cmV0dXJuImludDgiO2Nhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6cmV0dXJuImludDE2IjtjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOnJldHVybiJpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpyZXR1cm4idWludDgiO2Nhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOnJldHVybiJ1aW50MTYiO2Nhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiJ1aW50MzIiO2Nhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOnJldHVybiJ1aW50OF9jbGFtcGVkIn1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOiJnZW5lcmljIn1mdW5jdGlvbiBzKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQpe3ZhciBpPWYuYXJyYXlbMF07cmV0dXJuIGkoW10pfSJudW1iZXIiPT10eXBlb2YgdCYmKHQ9W3RdKSx2b2lkIDA9PT1lJiYoZT1bdC5sZW5ndGhdKTt2YXIgcz1lLmxlbmd0aDtpZih2b2lkIDA9PT1yKXtyPW5ldyBBcnJheShzKTtmb3IodmFyIGw9cy0xLGM9MTtsPj0wOy0tbClyW2xdPWMsYyo9ZVtsXX1pZih2b2lkIDA9PT1uKXtuPTA7Zm9yKHZhciBsPTA7bDxzOysrbClyW2xdPDAmJihuLT0oZVtsXS0xKSpyW2xdKX1mb3IodmFyIHU9byh0KSxoPWZbdV07aC5sZW5ndGg8PXMrMTspaC5wdXNoKGEodSxoLmxlbmd0aC0xKSk7dmFyIGk9aFtzKzFdO3JldHVybiBpKHQsZSxyLG4pfXZhciBsPXQoImlvdGEtYXJyYXkiKSxjPXQoImlzLWJ1ZmZlciIpLHU9InVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXksZj17ZmxvYXQzMjpbXSxmbG9hdDY0OltdLGludDg6W10saW50MTY6W10saW50MzI6W10sdWludDg6W10sdWludDE2OltdLHVpbnQzMjpbXSxhcnJheTpbXSx1aW50OF9jbGFtcGVkOltdLGJ1ZmZlcjpbXSxnZW5lcmljOltdfTtlLmV4cG9ydHM9c30seyJpb3RhLWFycmF5IjozMDAsImlzLWJ1ZmZlciI6MzAyfV0sNDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjtpZih0PT09ZSlyZXR1cm4gdDtpZigwPT09dClyZXR1cm4gZTwwPy1hOmE7dmFyIHI9aS5oaSh0KSxuPWkubG8odCk7cmV0dXJuIGU+dD09dD4wP249PT1vPyhyKz0xLG49MCk6bis9MTowPT09bj8obj1vLHItPTEpOm4tPTEsaS5wYWNrKG4scil9dmFyIGk9dCgiZG91YmxlLWJpdHMiKSxhPU1hdGgucG93KDIsLTEwNzQpLG89LTE+Pj4wO2UuZXhwb3J0cz1ufSx7ImRvdWJsZS1iaXRzIjoxMjR9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3IodmFyIG89MDtvPHQubGVuZ3RoOysrbylmb3IodmFyIHM9dFtvXSxsPTAsYz1zW3MubGVuZ3RoLTFdLHU9c1swXSxmPTA7ZjxzLmxlbmd0aDsrK2Ype2w9YyxjPXUsdT1zWyhmKzEpJXMubGVuZ3RoXTtmb3IodmFyIGg9ZVtsXSxkPWVbY10scD1lW3VdLG09bmV3IEFycmF5KDMpLHY9MCxnPW5ldyBBcnJheSgzKSx5PTAsYj0wO2I8MzsrK2IpbVtiXT1oW2JdLWRbYl0sdis9bVtiXSptW2JdLGdbYl09cFtiXS1kW2JdLHkrPWdbYl0qZ1tiXTtpZih2Knk+YSlmb3IodmFyIHg9aVtjXSxfPTEvTWF0aC5zcXJ0KHYqeSksYj0wO2I8MzsrK2Ipe3ZhciB3PShiKzEpJTMsTT0oYisyKSUzO3hbYl0rPV8qKGdbd10qbVtNXS1nW01dKm1bd10pfX1mb3IodmFyIG89MDtvPG47KytvKXtmb3IodmFyIHg9aVtvXSxUPTAsYj0wO2I8MzsrK2IpVCs9eFtiXSp4W2JdO2lmKFQ+YSlmb3IodmFyIF89MS9NYXRoLnNxcnQoVCksYj0wO2I8MzsrK2IpeFtiXSo9XztlbHNlIGZvcih2YXIgYj0wO2I8MzsrK2IpeFtiXT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO2Zvcih2YXIgdT1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10sZltjXT1sWzJdW2NdLWxbMF1bY107Zm9yKHZhciBoPW5ldyBBcnJheSgzKSxkPTAsYz0wO2M8MzsrK2Mpe3ZhciBwPShjKzEpJTMsbT0oYysyKSUzO2hbY109dVtwXSpmW21dLXVbbV0qZltwXSxkKz1oW2NdKmhbY119ZD1kPmE/MS9NYXRoLnNxcnQoZCk6MDtmb3IodmFyIGM9MDtjPDM7KytjKWhbY10qPWQ7aVtvXT1ofXJldHVybiBpfX0se31dLDQ3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKG51bGw9PT10fHx2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdCh0KX12YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmluZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpWzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxyPTA7cjwxMDtyKyspZVsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG4pKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvLHM9bih0KSxsPTE7bDxhcmd1bWVudHMubGVuZ3RoO2wrKyl7cj1PYmplY3QoYXJndW1lbnRzW2xdKTtmb3IodmFyIGMgaW4gcilpLmNhbGwocixjKSYmKHNbY109cltjXSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7bz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpO2Zvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWEuY2FsbChyLG9bdV0pJiYoc1tvW3VdXT1yW29bdV1dKX19cmV0dXJuIHN9fSx7fV0sNDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLG87cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhyPWkodCxlKSxuPXIud2lkdGgsbz1yLmhlaWdodCk6dCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50PyhuPXQud2lkdGgsbz10LmhlaWdodCx0PXQuZ2V0Q29udGV4dCgiMmQiKSxyPXQuZ2V0SW1hZ2VEYXRhKDAsMCxuLG8pKTp0IGluc3RhbmNlb2YgSW1hZ2VEYXRhJiYobj10LndpZHRoLG89dC5oZWlnaHQscj10KSxhKHIpfWZ1bmN0aW9uIGkodCxlKXtlfHwoZT17fSk7dmFyIHI9ZS5mYW1pbHl8fCJzYW5zLXNlcmlmIixuPWwud2lkdGgsaT1sLmhlaWdodCxhPWUud2lkdGh8fGUuaGVpZ2h0fHxlLnNpemU7YSYmYSE9biYmKG49aT1sLndpZHRoPWwuaGVpZ2h0PWEpO3ZhciBvPWUuZm9udFNpemV8fG4vMjtyZXR1cm4gYy5maWxsU3R5bGU9IiMwMDAiLGMuZmlsbFJlY3QoMCwwLG4saSksYy5mb250PW8rInB4ICIrcixjLnRleHRCYXNlbGluZT0ibWlkZGxlIixjLnRleHRBbGlnbj0iY2VudGVyIixjLmZpbGxTdHlsZT0id2hpdGUiLGMuZmlsbFRleHQodCxuLzIsaS8yKSxjLmdldEltYWdlRGF0YSgwLDAsbixpKX1mdW5jdGlvbiBhKHQpe3ZhciBlLHIsbixpLGEsbCxjLHUsZixoLGQscCxtLHY9dC5kYXRhLGc9dC53aWR0aCx5PXQuaGVpZ2h0LGI9QXJyYXkoeSkseD1BcnJheSh5KSxfPTAsdz0wLE09ZyxUPTAsaz0wLEE9QXJyYXkoeSk7Zm9yKHI9MDtyPHk7cisrKWlmKGw9MCxjPTAsYT00KnIqZyxkPW8odi5zdWJhcnJheShhLGErNCpnKSw0KSxkWzBdIT09ZFsxXSl7Zm9yKF98fChfPXIpLHc9cixlPWRbMF07ZTxkWzFdO2UrKylpPTQqZSxuPXZbYStpXSxsKz1uLGMrPWUqbjtiW3JdPTA9PT1sPzA6bC9nLHhbcl09MD09PWw/MDpjL2wsZFswXTxNJiYoTT1kWzBdKSxkWzFdPlQmJihUPWRbMV0pLEFbcl09ZH1mb3IobD0wLHU9MCxjPTAscj0wO3I8eTtyKyspKHA9YltyXSkmJih1Kz1wKnIsbCs9cCxjKz14W3JdKnApO2ZvcihoPXUvbCxmPWMvbCxrPTAsbT0wLHI9MDtyPHk7cisrKShkPUFbcl0pJiYobT1NYXRoLm1heChzKGYtZFswXSxoLXIpLHMoZi1kWzFdLGgtcikpKT5rJiYoaz1tKTtyZXR1cm57Y2VudGVyOltmLGhdLGJvdW5kczpbTSxfLFQsdysxXSxyYWRpdXM6TWF0aC5zcXJ0KGspfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9MCxuPXQubGVuZ3RoLGk9MAo7Zm9yKGV8fChlPTQpOyF0W2ldJiZpPG47KWkrPWU7Zm9yKHI9aSxpPXQubGVuZ3RoOyF0W2ldJiZpPnI7KWktPWU7cmV0dXJuIG49aSxbci9lLG4vZV19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0KnQrZSplfWUuZXhwb3J0cz1uO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGM9bC5nZXRDb250ZXh0KCIyZCIpO2wud2lkdGg9MjAwLGwuaGVpZ2h0PTIwMCxuLmNhbnZhcz1sfSx7fV0sNDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9ZSthK2M7aWYoZj4wKXt2YXIgZj1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2YsdFsxXT0uNSoocy1uKS9mLHRbMl09LjUqKHItYSkvZix0WzNdPS41KmZ9ZWxzZXt2YXIgaD1NYXRoLm1heChlLGEsYyksZj1NYXRoLnNxcnQoMipoLXUrMSk7ZT49aD8odFswXT0uNSpmLHRbMV09LjUqKGkrcikvZix0WzJdPS41KihzK24pL2YsdFszXT0uNSooby1sKS9mKTphPj1oPyh0WzBdPS41KihyK2kpL2YsdFsxXT0uNSpmLHRbMl09LjUqKGwrbykvZix0WzNdPS41KihzLW4pL2YpOih0WzBdPS41KihuK3MpL2YsdFsxXT0uNSoobytsKS9mLHRbMl09LjUqZix0WzNdPS41KihyLWkpL2YpfXJldHVybiB0fWUuZXhwb3J0cz1ufSx7fV0sNDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKStNYXRoLnBvdyhuLDIpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0sYT1lWzJdLG89ZVszXSxzPWkocixuLGEsbyk7cz4xZS02Pyh0WzBdPXIvcyx0WzFdPW4vcyx0WzJdPWEvcyx0WzNdPW8vcyk6KHRbMF09dFsxXT10WzJdPTAsdFszXT0xKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnJhZGl1cz1sKFtyXSksdGhpcy5jZW50ZXI9bChlKSx0aGlzLnJvdGF0aW9uPWwodCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuY2VudGVyLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRSb3RhdGlvbj10aGlzLnJvdGF0aW9uLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRVcD1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9Wy4xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSx0aGlzLnJlY2FsY01hdHJpeCgwKX1mdW5jdGlvbiBzKHQpe3Q9dHx8e307dmFyIGU9dC5jZW50ZXJ8fFswLDAsMF0scj10LnJvdGF0aW9ufHxbMCwwLDAsMV0sbj10LnJhZGl1c3x8MTtlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsNCksYShyLHIpO3ZhciBpPW5ldyBvKHIsZSxNYXRoLmxvZyhuKSk7cmV0dXJuIGkuc2V0RGlzdGFuY2VMaW1pdHModC56b29tTWluLHQuem9vbU1heCksKCJleWUiaW4gdHx8InVwImluIHQpJiZpLmxvb2tBdCgwLHQuZXllLHQuY2VudGVyLHQudXApLGl9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZmlsdGVyZWQtdmVjdG9yIiksYz10KCJnbC1tYXQ0L2xvb2tBdCIpLHU9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLGY9dCgiZ2wtbWF0NC9pbnZlcnQiKSxoPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKSxkPW8ucHJvdG90eXBlO2QubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMucm90YXRpb24ubGFzdFQoKSl9LGQucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMucm90YXRpb24uY3VydmUodCk7dmFyIGU9dGhpcy5jb21wdXRlZFJvdGF0aW9uO2EoZSxlKTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O3UocixlKTt2YXIgbj10aGlzLmNvbXB1dGVkQ2VudGVyLGk9dGhpcy5jb21wdXRlZEV5ZSxvPXRoaXMuY29tcHV0ZWRVcCxzPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2lbMF09blswXStzKnJbMl0saVsxXT1uWzFdK3Mqcls2XSxpWzJdPW5bMl0rcypyWzEwXSxvWzBdPXJbMV0sb1sxXT1yWzVdLG9bMl09cls5XTtmb3IodmFyIGw9MDtsPDM7KytsKXtmb3IodmFyIGM9MCxmPTA7ZjwzOysrZiljKz1yW2wrNCpmXSppW2ZdO3JbMTIrbF09LWN9fSxkLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfSxkLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMucm90YXRpb24uaWRsZSh0KX0sZC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLnJvdGF0aW9uLmZsdXNoKHQpfSxkLnBhbj1mdW5jdGlvbih0LGUscixpKXtlPWV8fDAscj1yfHwwLGk9aXx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LG89YVsxXSxzPWFbNV0sbD1hWzldLGM9bihvLHMsbCk7by89YyxzLz1jLGwvPWM7dmFyIHU9YVswXSxmPWFbNF0saD1hWzhdLGQ9dSpvK2YqcytoKmw7dS09bypkLGYtPXMqZCxoLT1sKmQ7dmFyIHA9bih1LGYsaCk7dS89cCxmLz1wLGgvPXA7dmFyIG09YVsyXSx2PWFbNl0sZz1hWzEwXSx5PW0qbyt2KnMrZypsLGI9bSp1K3YqZitnKmg7bS09eSpvK2IqdSx2LT15KnMrYipmLGctPXkqbCtiKmg7dmFyIHg9bihtLHYsZyk7bS89eCx2Lz14LGcvPXg7dmFyIF89dSplK28qcix3PWYqZStzKnIsTT1oKmUrbCpyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsTSk7dmFyIFQ9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7VD1NYXRoLm1heCgxZS00LFQraSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coVCkpfSxkLnJvdGF0ZT1mdW5jdGlvbih0LGUscixhKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBvPXRoaXMuY29tcHV0ZWRNYXRyaXgscz1vWzBdLGw9b1s0XSxjPW9bOF0sdT1vWzFdLGY9b1s1XSxoPW9bOV0sZD1vWzJdLHA9b1s2XSxtPW9bMTBdLHY9ZSpzK3IqdSxnPWUqbCtyKmYseT1lKmMrcipoLGI9LShwKnktbSpnKSx4PS0obSp2LWQqeSksXz0tKGQqZy1wKnYpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyhiLDIpLU1hdGgucG93KHgsMiktTWF0aC5wb3coXywyKSkpLE09aShiLHgsXyx3KTtNPjFlLTY/KGIvPU0seC89TSxfLz1NLHcvPU0pOihiPXg9Xz0wLHc9MSk7dmFyIFQ9dGhpcy5jb21wdXRlZFJvdGF0aW9uLGs9VFswXSxBPVRbMV0sRT1UWzJdLFM9VFszXSxMPWsqdytTKmIrQSpfLUUqeCxDPUEqdytTKngrRSpiLWsqXyxJPUUqdytTKl8rayp4LUEqYixEPVMqdy1rKmItQSp4LUUqXztpZihhKXtiPWQseD1wLF89bTt2YXIgUD1NYXRoLnNpbihhKS9uKGIseCxfKTtiKj1QLHgqPVAsXyo9UCx3PU1hdGguY29zKGUpLEw9TCp3K0QqYitDKl8tSSp4LEM9Qyp3K0QqeCtJKmItTCpfLEk9SSp3K0QqXytMKngtQypiLEQ9RCp3LUwqYi1DKngtSSpffXZhciB6PWkoTCxDLEksRCk7ej4xZS02PyhMLz16LEMvPXosSS89eixELz16KTooTD1DPUk9MCxEPTEpLHRoaXMucm90YXRpb24uc2V0KHQsTCxDLEksRCl9LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtjKGksZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtoKG8saVswXSxpWzFdLGlbMl0saVs0XSxpWzVdLGlbNl0saVs4XSxpWzldLGlbMTBdKSxhKG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIHM9MCxsPTA7bDwzOysrbClzKz1NYXRoLnBvdyhyW2xdLWVbbF0sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgocywxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247aChyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksYShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtmKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIG89blsxMl0vaSxzPW5bMTNdL2ksbD1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBjPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LG8tblsyXSpjLHMtbls2XSpjLGwtblsxMF0qYyksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxkLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LSgxLzApLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LGQuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0sZC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWNhbGNNYXRyaXgodGhpcy5sYXN0VCgpKSx7Y2VudGVyOnRoaXMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKSxyb3RhdGlvbjp0aGlzLmNvbXB1dGVkUm90YXRpb24uc2xpY2UoKSxkaXN0YW5jZTpNYXRoLmxvZyh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSx6b29tTWluOnRoaXMucmFkaXVzLmJvdW5kc1swXVswXSx6b29tTWF4OnRoaXMucmFkaXVzLmJvdW5kc1sxXVswXX19LGQuZnJvbUpTT049ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dC5jZW50ZXI7ciYmdGhpcy5jZW50ZXIuc2V0KGUsclswXSxyWzFdLHJbMl0pO3ZhciBuPXQucm90YXRpb247biYmdGhpcy5yb3RhdGlvbi5zZXQoZSxuWzBdLG5bMV0sblsyXSxuWzNdKTt2YXIgaT10LmRpc3RhbmNlO2kmJmk+MCYmdGhpcy5yYWRpdXMuc2V0KGUsTWF0aC5sb2coaSkpLHRoaXMuc2V0RGlzdGFuY2VMaW1pdHModC56b29tTWluLHQuem9vbU1heCl9fSx7Ii4vbGliL3F1YXRGcm9tRnJhbWUiOjQ4MSwiZmlsdGVyZWQtdmVjdG9yIjoxMzMsImdsLW1hdDQvZnJvbVF1YXQiOjE4MiwiZ2wtbWF0NC9pbnZlcnQiOjE4NSwiZ2wtbWF0NC9sb29rQXQiOjE4Nn1dLDQ4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZXBlYXQtc3RyaW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj12b2lkIDAhPT1yP3IrIiI6IiAiLG4ocixlKSt0fX0seyJyZXBlYXQtc3RyaW5nIjo1MDl9XSw0ODQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDg1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXRbbl07Ii4iPT09aT90LnNwbGljZShuLDEpOiIuLiI9PT1pPyh0LnNwbGljZShuLDEpLHIrKyk6ciYmKHQuc3BsaWNlKG4sMSksci0tKX1pZihlKWZvcig7ci0tO3IpdC51bnNoaWZ0KCIuLiIpO3JldHVybiB0fWZ1bmN0aW9uIG4odCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0sbix0KSYmci5wdXNoKHRbbl0pO3JldHVybiByfXZhciBpPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxhPWZ1bmN0aW9uKHQpe3JldHVybiBpLmV4ZWModCkuc2xpY2UoMSl9O3IucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgcj0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvPWE+PTA/YXJndW1lbnRzW2FdOnQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7byYmKHI9bysiLyIrcixpPSIvIj09PW8uY2hhckF0KDApKX1yZXR1cm4gcj1lKG4oci5zcGxpdCgiLyIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKCIvIiksKGk/Ii8iOiIiKStyfHwiLiJ9LHIubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBpPXIuaXNBYnNvbHV0ZSh0KSxhPSIvIj09PW8odCwtMSk7cmV0dXJuIHQ9ZShuKHQuc3BsaXQoIi8iKSxmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSwhaSkuam9pbigiLyIpLHR8fGl8fCh0PSIuIiksdCYmYSYmKHQrPSIvIiksKGk/Ii8iOiIiKSt0fSxyLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCl9LHIuam9pbj1mdW5jdGlvbigpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gci5ub3JtYWxpemUobih0LGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KS5qb2luKCIvIikpfSxyLnJlbGF0aXZlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoJiYiIj09PXRbZV07ZSsrKTtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wJiYiIj09PXRbcl07ci0tKTtyZXR1cm4gZT5yP1tdOnQuc2xpY2UoZSxyLWUrMSl9dD1yLnJlc29sdmUodCkuc3Vic3RyKDEpLGU9ci5yZXNvbHZlKGUpLnN1YnN0cigxKTtmb3IodmFyIGk9bih0LnNwbGl0KCIvIikpLGE9bihlLnNwbGl0KCIvIikpLG89TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgpLHM9byxsPTA7bDxvO2wrKylpZihpW2xdIT09YVtsXSl7cz1sO2JyZWFrfWZvcih2YXIgYz1bXSxsPXM7bDxpLmxlbmd0aDtsKyspYy5wdXNoKCIuLiIpO3JldHVybiBjPWMuY29uY2F0KGEuc2xpY2UocykpLGMuam9pbigiLyIpfSxyLnNlcD0iLyIsci5kZWxpbWl0ZXI9IjoiLHIuZGlybmFtZT1mdW5jdGlvbih0KXt2YXIgZT1hKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIHJ8fG4/KG4mJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLHIrbik6Ii4ifSxyLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YSh0KVsyXTtyZXR1cm4gZSYmci5zdWJzdHIoLTEqZS5sZW5ndGgpPT09ZSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC1lLmxlbmd0aCkpLHJ9LHIuZXh0bmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KVszXX07dmFyIG89ImIiPT09ImFiIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5zdWJzdHIoZSxyKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUscil9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDk2fV0sNDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU7dCYmdC5sZW5ndGgmJihlPXQsdD1lLmxlbmd0aCk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodHx8MCk7cmV0dXJuIGUmJnIuc2V0KGUpLHIucmVhZFVJbnQzMkxFPWEucmVhZFVJbnQzMkxFLHIud3JpdGVVSW50MzJMRT1hLndyaXRlVUludDMyTEUsci5yZWFkSW50MzJMRT1hLnJlYWRJbnQzMkxFLHIud3JpdGVJbnQzMkxFPWEud3JpdGVJbnQzMkxFLHIucmVhZEZsb2F0TEU9YS5yZWFkRmxvYXRMRSxyLndyaXRlRmxvYXRMRT1hLndyaXRlRmxvYXRMRSxyLnJlYWREb3VibGVMRT1hLnJlYWREb3VibGVMRSxyLndyaXRlRG91YmxlTEU9YS53cml0ZURvdWJsZUxFLHIudG9TdHJpbmc9YS50b1N0cmluZyxyLndyaXRlPWEud3JpdGUsci5zbGljZT1hLnNsaWNlLHIuY29weT1hLmNvcHksci5faXNCdWZmZXI9ITAscn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZSxyLG49dC5sZW5ndGgsaT1bXSxhPTA7YTxuO2ErKyl7aWYoKGU9dC5jaGFyQ29kZUF0KGEpKT41NTI5NSYmZTw1NzM0NCl7aWYoIXIpe2U+NTYzMTl8fGErMT09PW4/aS5wdXNoKDIzOSwxOTEsMTg5KTpyPWU7Y29udGludWV9aWYoZTw1NjMyMCl7aS5wdXNoKDIzOSwxOTEsMTg5KSxyPWU7Y29udGludWV9ZT1yLTU1Mjk2PDwxMHxlLTU2MzIwfDY1NTM2LHI9bnVsbH1lbHNlIHImJihpLnB1c2goMjM5LDE5MSwxODkpLHI9bnVsbCk7ZTwxMjg/aS5wdXNoKGUpOmU8MjA0OD9pLnB1c2goZT4+NnwxOTIsNjMmZXwxMjgpOmU8NjU1MzY/aS5wdXNoKGU+PjEyfDIyNCxlPj42JjYzfDEyOCw2MyZlfDEyOCk6aS5wdXNoKGU+PjE4fDI0MCxlPj4xMiY2M3wxMjgsZT4+NiY2M3wxMjgsNjMmZXwxMjgpfXJldHVybiBpfWUuZXhwb3J0cz1uO3ZhciBhLG8scyxsPXQoImllZWU3NTQiKTthPXtyZWFkVUludDMyTEU6ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sd3JpdGVVSW50MzJMRTpmdW5jdGlvbih0LGUpe3RoaXNbZV09dCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0fSxyZWFkSW50MzJMRTpmdW5jdGlvbih0KXtyZXR1cm4odGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrKHRoaXNbdCszXTw8MjQpfSxyZWFkRmxvYXRMRTpmdW5jdGlvbih0KXtyZXR1cm4gbC5yZWFkKHRoaXMsdCwhMCwyMyw0KX0scmVhZERvdWJsZUxFOmZ1bmN0aW9uKHQpe3JldHVybiBsLnJlYWQodGhpcyx0LCEwLDUyLDgpfSx3cml0ZUZsb2F0TEU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC53cml0ZSh0aGlzLHQsZSwhMCwyMyw0KX0sd3JpdGVEb3VibGVMRTpmdW5jdGlvbih0LGUpe3JldHVybiBsLndyaXRlKHRoaXMsdCxlLCEwLDUyLDgpfSx0b1N0cmluZzpmdW5jdGlvbih0LGUscil7dmFyIG49IiIsaT0iIjtlPWV8fDAscj1NYXRoLm1pbih0aGlzLmxlbmd0aCxyfHx0aGlzLmxlbmd0aCk7Zm9yKHZhciBhPWU7YTxyO2ErKyl7dmFyIG89dGhpc1thXTtvPD0xMjc/KG4rPWRlY29kZVVSSUNvbXBvbmVudChpKStTdHJpbmcuZnJvbUNoYXJDb2RlKG8pLGk9IiIpOmkrPSIlIitvLnRvU3RyaW5nKDE2KX1yZXR1cm4gbis9ZGVjb2RlVVJJQ29tcG9uZW50KGkpfSx3cml0ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10PT09bz9zOmkodCksbj0wO248ci5sZW5ndGg7bisrKXRoaXNbZStuXT1yW25dfSxzbGljZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN1YmFycmF5KHQsZSl9LGNvcHk6ZnVuY3Rpb24odCxlKXtlPWV8fDA7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdFtlK3JdPXRoaXNbcl19fSxhLndyaXRlSW50MzJMRT1hLndyaXRlVUludDMyTEUsbi5ieXRlTGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBvPXQscz1pKHQpLHMubGVuZ3RofSxuLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiEoIXR8fCF0Ll9pc0J1ZmZlcil9fSx7aWVlZTc1NDoyOTV9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5idWY9di5pc0J1ZmZlcih0KT90Om5ldyB2KHR8fDApLHRoaXMucG9zPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuPWUuYnVmO2lmKHI9bltlLnBvcysrXSx0Kz0yNjg0MzU0NTYqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDtpZihyPW5bZS5wb3MrK10sdCs9MzQzNTk3MzgzNjgqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDtpZihyPW5bZS5wb3MrK10sdCs9NDM5ODA0NjUxMTEwNCooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz01NjI5NDk5NTM0MjEzMTIqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDtpZihyPW5bZS5wb3MrK10sdCs9NzIwNTc1OTQwMzc5Mjc5NDAqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDtpZihyPW5bZS5wb3MrK10sdCs9MHg4MDAwMDAwMDAwMDAwMDAwKigxMjcmcikscjwxMjgpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcyIpfWZ1bmN0aW9uIGEodCxlKXtlLnJlYWxsb2MoMTApO2Zvcih2YXIgcj1lLnBvcysxMDt0Pj0xOyl7aWYoZS5wb3M+PXIpdGhyb3cgbmV3IEVycm9yKCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlcyIpO3ZhciBuPTI1NSZ0O2UuYnVmW2UucG9zKytdPW58KHQ+PTEyOD8xMjg6MCksdC89MTI4fX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmNlaWwoTWF0aC5sb2coZSkvKDcqTWF0aC5MTjIpKTtyLnJlYWxsb2Mobik7Zm9yKHZhciBpPXIucG9zLTE7aT49dDtpLS0pci5idWZbaStuXT1yLmJ1ZltpXX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGbG9hdCh0W3JdKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkNjQodFtyXSl9ZS5leHBvcnRzPW47dmFyIHY9ci5CdWZmZXJ8fHQoIi4vYnVmZmVyIik7bi5WYXJpbnQ9MCxuLkZpeGVkNjQ9MSxuLkJ5dGVzPTIsbi5GaXhlZDMyPTU7dmFyIGc9TWF0aC5wb3coMiw2Myk7bi5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dChpLGUsdGhpcyksdGhpcy5wb3M9PT1hJiZ0aGlzLnNraXAobil9cmV0dXJuIGV9LHJlYWRNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVhZEZpZWxkcyh0LGUsdGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MpfSxyZWFkRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRJbnQzMkxFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MpKzQyOTQ5NjcyOTYqdGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkU0ZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MpKzQyOTQ5NjcyOTYqdGhpcy5idWYucmVhZEludDMyTEUodGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRGbG9hdExFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWREb3VibGVMRSh0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9dGhpcy5idWY7cmV0dXJuIGU9clt0aGlzLnBvcysrXSx0PTEyNyZlLGU8MTI4P3Q6KGU9clt0aGlzLnBvcysrXSx0fD0oMTI3JmUpPDw3LGU8MTI4P3Q6KGU9clt0aGlzLnBvcysrXSx0fD0oMTI3JmUpPDwxNCxlPDEyOD90OihlPXJbdGhpcy5wb3MrK10sdHw9KDEyNyZlKTw8MjEsZTwxMjg/dDppKHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zLGU9dGhpcy5yZWFkVmFyaW50KCk7aWYoZTxnKXJldHVybiBlO2Zvcih2YXIgcj10aGlzLnBvcy0yOzI1NT09PXRoaXMuYnVmW3JdOylyLS07cjx0JiYocj10KSxlPTA7Zm9yKHZhciBuPTA7bjxyLXQrMTtuKyspe3ZhciBpPTEyNyZ+dGhpcy5idWZbdCtuXTtlKz1uPDQ/aTw8NypuOmkqTWF0aC5wb3coMiw3Km4pfXJldHVybi1lLTF9LHJlYWRTVmFyaW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCk7cmV0dXJuIHQlMj09MT8odCsxKS8tMjp0LzJ9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkVmFyaW50KCkpfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi50b1N0cmluZygidXRmOCIsdGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zbGljZSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZFZhcmludCgpKTtyZXR1cm4gZX0scmVhZFBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gZX0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gZX0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3JldHVybiBlfSxyZWFkUGFja2VkRG91YmxlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gZX0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gZX0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3JldHVybiBlfSxyZWFkUGFja2VkRml4ZWQ2NDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiBlfSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIGV9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1uLlZhcmludClmb3IoO3RoaXMuYnVmW3RoaXMucG9zKytdPjEyNzspO2Vsc2UgaWYoZT09PW4uQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09bi5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PW4uRml4ZWQ2NCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgdHlwZTogIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IHYoZSk7dGhpcy5idWYuY29weShyKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zbGljZSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zi53cml0ZVVJbnQzMkxFKHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zi53cml0ZUludDMyTEUodCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5idWYud3JpdGVJbnQzMkxFKHQmLTEsdGhpcy5wb3MpLHRoaXMuYnVmLndyaXRlVUludDMyTEUoTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5idWYud3JpdGVJbnQzMkxFKHQmLTEsdGhpcy5wb3MpLHRoaXMuYnVmLndyaXRlSW50MzJMRShNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXtpZigodD0rdCk+MjY4NDM1NDU1KXJldHVybiB2b2lkIGEodCx0aGlzKTt0aGlzLnJlYWxsb2MoNCksdGhpcy5idWZbdGhpcy5wb3MrK109MTI3JnR8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT10Pj4+NyYxMjcpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpO3ZhciBlPXYuYnl0ZUxlbmd0aCh0KTt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKSx0aGlzLmJ1Zi53cml0ZSh0LHRoaXMucG9zKSx0aGlzLnBvcys9ZX0sd3JpdGVGbG9hdDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksdGhpcy5idWYud3JpdGVGbG9hdExFKHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5idWYud3JpdGVEb3VibGVMRSh0LHRoaXMucG9zKSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZvKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsbi5CeXRlcyksdGhpcy53cml0ZVJhd01lc3NhZ2UoZSxyKX0sd3JpdGVQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHMsZSl9LHdyaXRlUGFja2VkU1ZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbCxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxmLGUpfSx3cml0ZVBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjLGUpfSx3cml0ZVBhY2tlZERvdWJsZTpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdSxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxoLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxkLGUpfSx3cml0ZVBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHAsZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LG0sZSl9LHdyaXRlQnl0ZXNGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkZpeGVkMzIpLHRoaXMud3JpdGVTRml4ZWQzMihlKX0sd3JpdGVGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uVmFyaW50KSx0aGlzLndyaXRlVmFyaW50KGUpfSx3cml0ZVNWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQzMiksdGhpcy53cml0ZUZsb2F0KGUpfSx3cml0ZURvdWJsZUZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vYnVmZmVyIjo0ODZ9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPGkpe2Zvcih2YXIgcj0xLG49MDtuPGU7KytuKWZvcih2YXIgbz0wO288bjsrK28paWYodFtuXTx0W29dKXI9LXI7ZWxzZSBpZih0W25dPT09dFtvXSlyZXR1cm4gMDtyZXR1cm4gcn1mb3IodmFyIHM9YS5tYWxsb2NVaW50OChlKSxuPTA7bjxlOysrbilzW25dPTA7Zm9yKHZhciByPTEsbj0wO248ZTsrK24paWYoIXNbbl0pe3ZhciBsPTE7c1tuXT0xO2Zvcih2YXIgbz10W25dO28hPT1uO289dFtvXSl7aWYoc1tvXSlyZXR1cm4gYS5mcmVlVWludDgocyksMDtsKz0xLHNbb109MX0xJmx8fChyPS1yKX1yZXR1cm4gYS5mcmVlVWludDgocykscn1lLmV4cG9ydHM9bjt2YXIgaT0zMixhPXQoInR5cGVkYXJyYXktcG9vbCIpfSx7InR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sNDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiB0WzFdfXZhciByLG4saSxzPWEubWFsbG9jVWludDMyKGUpLGw9YS5tYWxsb2NVaW50MzIoZSksYz0wO2ZvcihvKHQsbCksaT0wO2k8ZTsrK2kpc1tpXT10W2ldO2ZvcihpPWUtMTtpPjA7LS1pKW49bFtpXSxyPXNbaV0sc1tpXT1zW25dLHNbbl09cixsW2ldPWxbcl0sbFtyXT1uLGM9KGMrcikqaTtyZXR1cm4gYS5mcmVlVWludDMyKGwpLGEuZnJlZVVpbnQzMihzKSxjfWZ1bmN0aW9uIGkodCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHI/cjpbXTtjYXNlIDE6cmV0dXJuIHI/KHJbMF09MCxyKTpbMF07Y2FzZSAyOnJldHVybiByPyhlPyhyWzBdPTAsclsxXT0xKTooclswXT0xLHJbMV09MCkscik6ZT9bMCwxXTpbMSwwXX1yPXJ8fG5ldyBBcnJheSh0KTt2YXIgbixpLGEsbz0xO2ZvcihyWzBdPTAsYT0xO2E8dDsrK2EpclthXT1hLG89byphfDA7Zm9yKGE9dC0xO2E+MDstLWEpbj1lL298MCxlPWUtbipvfDAsbz1vL2F8MCxpPTB8clthXSxyW2FdPTB8cltuXSxyW25dPTB8aTtyZXR1cm4gcn12YXIgYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoImludmVydC1wZXJtdXRhdGlvbiIpO3IucmFuaz1uLHIudW5yYW5rPWl9LHsiaW52ZXJ0LXBlcm11dGF0aW9uIjoyOTksInR5cGVkYXJyYXktcG9vbCI6NTQ5fV0sNDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIHI9c1tlXVt0W2VdXTtyLnNwbGljZShyLmluZGV4T2YodCksMSl9ZnVuY3Rpb24gbih0LG4sYSl7Zm9yKHZhciBvLGwsYyx1PTA7dTwyOysrdSlpZihzW3VdW25dLmxlbmd0aD4wKXtvPXNbdV1bbl1bMF0sYz11O2JyZWFrfWw9b1sxXmNdO2Zvcih2YXIgZj0wO2Y8MjsrK2YpZm9yKHZhciBoPXNbZl1bbl0sZD0wO2Q8aC5sZW5ndGg7KytkKXt2YXIgcD1oW2RdLG09cFsxXmZdLHY9aShlW3RdLGVbbl0sZVtsXSxlW21dKTt2PjAmJihvPXAsbD1tLGM9Zil9cmV0dXJuIGE/bDoobyYmcihvLGMpLGwpfWZvcih2YXIgYT0wfGUubGVuZ3RoLG89dC5sZW5ndGgscz1bbmV3IEFycmF5KGEpLG5ldyBBcnJheShhKV0sbD0wO2w8YTsrK2wpc1swXVtsXT1bXSxzWzFdW2xdPVtdO2Zvcih2YXIgbD0wO2w8bzsrK2wpe3ZhciBjPXRbbF07c1swXVtjWzBdXS5wdXNoKGMpLHNbMV1bY1sxXV0ucHVzaChjKX1mb3IodmFyIHU9W10sbD0wO2w8YTsrK2wpc1swXVtsXS5sZW5ndGgrc1sxXVtsXS5sZW5ndGg9PT0wJiZ1LnB1c2goW2xdKTtmb3IodmFyIGw9MDtsPGE7KytsKWZvcih2YXIgZj0wO2Y8MjsrK2Ype2Zvcih2YXIgaD1bXTtzW2ZdW2xdLmxlbmd0aD4wOyl7dmFyIGQ9KHNbMF1bbF0ubGVuZ3RoLGZ1bmN0aW9uKHQsYSl7dmFyIG89c1thXVt0XVswXSxsPVt0XTtyKG8sYSk7Zm9yKHZhciBjPW9bMV5hXTs7KXtmb3IoO2MhPT10OylsLnB1c2goYyksYz1uKGxbbC5sZW5ndGgtMl0sYywhMSk7aWYoc1swXVt0XS5sZW5ndGgrc1sxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciB1PWxbbC5sZW5ndGgtMV0sZj10LGg9bFsxXSxkPW4odSxmLCEwKTtpZihpKGVbdV0sZVtmXSxlW2hdLGVbZF0pPDApYnJlYWs7bC5wdXNoKHQpLGM9bih1LGYpfXJldHVybiBsfShsLGYpKTshZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19KGgsZCk/KGgubGVuZ3RoPjAmJnUucHVzaChoKSxoPWQpOmgucHVzaC5hcHBseShoLGQpfWgubGVuZ3RoPjAmJnUucHVzaChoKX1yZXR1cm4gdX1lLmV4cG9ydHM9bjt2YXIgaT10KCJjb21wYXJlLWFuZ2xlIil9LHsiY29tcGFyZS1hbmdsZSI6OTl9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1pKHQsZS5sZW5ndGgpLG49bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxuW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO25bY109ITE7Zm9yKHZhciB1PXJbY10scz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgZj11W3NdOzA9PS0tYVtmXSYmby5wdXNoKGYpfX1mb3IodmFyIGg9bmV3IEFycmF5KGUubGVuZ3RoKSxkPVtdLHM9MDtzPGUubGVuZ3RoOysrcylpZihuW3NdKXt2YXIgYz1kLmxlbmd0aDtoW3NdPWMsZC5wdXNoKGVbc10pfWVsc2UgaFtzXT0tMTtmb3IodmFyIHA9W10scz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgbT10W3NdO25bbVswXV0mJm5bbVsxXV0mJnAucHVzaChbaFttWzBdXSxoW21bMV1dXSl9cmV0dXJuW3AsZF19ZS5leHBvcnRzPW47dmFyIGk9dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKX0seyJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTI3fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1bXTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7ZnVuY3Rpb24gcih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbz1lW3RbKGkrMSklcl1dLHM9YygtYVswXSxhWzFdKSxsPWMoLWFbMF0sb1sxXSksZj1jKG9bMF0sYVsxXSksaD1jKG9bMF0sb1sxXSk7bj11KG4sdSh1KHMsbCksdShmLGgpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighelt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgZD1oKHQsZSk7dD1kWzBdLGU9ZFsxXTtmb3IodmFyIHA9ZS5sZW5ndGgsbT0odC5sZW5ndGgsbyh0LGUubGVuZ3RoKSksdj0wO3Y8cDsrK3YpaWYobVt2XS5sZW5ndGglMj09MSl0aHJvdyBuZXcgRXJyb3IoInBsYW5hci1ncmFwaC10by1wb2x5bGluZTogZ3JhcGggbXVzdCBiZSBtYW5pZm9sZCIpO3ZhciBnPXModCxlKTtnPWcuZmlsdGVyKHIpO2Zvcih2YXIgeT1nLmxlbmd0aCxiPW5ldyBBcnJheSh5KSx4PW5ldyBBcnJheSh5KSx2PTA7djx5Oysrdil7Ylt2XT12O3ZhciBfPW5ldyBBcnJheSh5KSx3PWdbdl0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksTT1sKFt3XSksVD0wO3Q6Zm9yKHZhciBrPTA7azx5OysraylpZihfW2tdPTAsdiE9PWspe2Zvcih2YXIgQT1nW2tdLEU9QS5sZW5ndGgsUz0wO1M8RTsrK1Mpe3ZhciBMPU0oZVtBW1NdXSk7aWYoMCE9PUwpe0w8MCYmKF9ba109MSxUKz0xKTtjb250aW51ZSB0fX1fW2tdPTEsVCs9MX14W3ZdPVtULHYsX119eC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pO2Zvcih2YXIgdj0wO3Y8eTsrK3YpZm9yKHZhciBfPXhbdl0sQz1fWzFdLEk9X1syXSxrPTA7azx5OysraylJW2tdJiYoYltrXT1DKTtmb3IodmFyIEQ9aSh5KSx2PTA7djx5OysrdilEW3ZdLnB1c2goYlt2XSksRFtiW3ZdXS5wdXNoKHYpO2Zvcih2YXIgUD17fSx6PW4ocCwhMSksdj0wO3Y8eTsrK3YpZm9yKHZhciBBPWdbdl0sRT1BLmxlbmd0aCxrPTA7azxFOysrayl7dmFyIE89QVtrXSxSPUFbKGsrMSklRV0sRj1NYXRoLm1pbihPLFIpKyI6IitNYXRoLm1heChPLFIpO2lmKEYgaW4gUCl7dmFyIGo9UFtGXTtEW2pdLnB1c2godiksRFt2XS5wdXNoKGopLHpbT109eltSXT0hMH1lbHNlIFBbRl09dn1mb3IodmFyIE49W10sQj1uKHksLTEpLHY9MDt2PHk7Kyt2KWJbdl0hPT12fHxhKGdbdl0pP0Jbdl09LTE6KE4ucHVzaCh2KSxCW3ZdPTApO2Zvcih2YXIgZD1bXTtOLmxlbmd0aD4wOyl7dmFyIFU9Ti5wb3AoKSxWPURbVV07ZihWLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3ZhciBILHE9Vi5sZW5ndGgsRz1CW1VdO2lmKDA9PT1HKXt2YXIgQT1nW1VdO0g9W0FdfWZvcih2YXIgdj0wO3Y8cTsrK3Ype3ZhciBZPVZbdl07aWYoIShCW1ldPj0wKSYmKEJbWV09MV5HLE4ucHVzaChZKSwwPT09Rykpe3ZhciBBPWdbWV07YShBKXx8KEEucmV2ZXJzZSgpLEgucHVzaChBKSl9fTA9PT1HJiZkLnB1c2goSCl9cmV0dXJuIGR9ZS5leHBvcnRzPWE7dmFyIG89dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKSxzPXQoInBsYW5hci1kdWFsIiksbD10KCJwb2ludC1pbi1iaWctcG9seWdvbiIpLGM9dCgidHdvLXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKSxmPXQoInVuaXEiKSxoPXQoIi4vbGliL3RyaW0tbGVhdmVzIil9LHsiLi9saWIvdHJpbS1sZWF2ZXMiOjQ5MSwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiOjEyNywicGxhbmFyLWR1YWwiOjQ5MCwicG9pbnQtaW4tYmlnLXBvbHlnb24iOjQ5NCwicm9idXN0LXN1bSI6NTIyLCJ0d28tcHJvZHVjdCI6NTQ3LHVuaXE6NTUxfV0sNDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0sbWF0TXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KHQpfSx1bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpfSxwZXJwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LG1hZzpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sZGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcih0KSl9LGRpc3RTcXI6ZnVuY3Rpb24odCl7dmFyIGU9dC54LXRoaXMueCxyPXQueS10aGlzLnk7cmV0dXJuIGUqZStyKnJ9LGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LHRoaXMueCl9LGFuZ2xlVG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LXQueSx0aGlzLngtdC54KX0sYW5nbGVXaXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFuZ2xlV2l0aFNlcCh0LngsdC55KX0sYW5nbGVXaXRoU2VwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy54KmUtdGhpcy55KnQsdGhpcy54KnQrdGhpcy55KmUpfSxfbWF0TXVsdDpmdW5jdGlvbih0KXt2YXIgZT10WzBdKnRoaXMueCt0WzFdKnRoaXMueSxyPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9ZSx0aGlzLnk9cix0aGlzfSxfYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzfSxfbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxfZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQsdGhpcy55Lz10LHRoaXN9LF91bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycDpmdW5jdGlvbigpe3ZhciB0PXRoaXMueTtyZXR1cm4gdGhpcy55PXRoaXMueCx0aGlzLng9LXQsdGhpc30sX3JvdGF0ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpLG49ZSp0aGlzLngtcip0aGlzLnksaT1yKnRoaXMueCtlKnRoaXMueTtyZXR1cm4gdGhpcy54PW4sdGhpcy55PWksdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sbi5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90OkFycmF5LmlzQXJyYXkodCk/bmV3IG4odFswXSx0WzFdKTp0fX0se31dLDQ5NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4hMH1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpPXRbZV07cmV0dXJuISFpJiYhIWkucXVlcnlQb2ludChyLG4pfX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl0sYT1uWzBdWzBdLG89blswXVsxXSxzPW5bMV1bMV0sbD1bTWF0aC5taW4obyxzKSxNYXRoLm1heChvLHMpXTthIGluIGU/ZVthXS5wdXNoKGwpOmVbYV09W2xdfWZvcih2YXIgYz17fSx1PU9iamVjdC5rZXlzKGUpLHI9MDtyPHUubGVuZ3RoOysrcil7dmFyIGY9ZVt1W3JdXTtjW3Vbcl1dPWQoZil9cmV0dXJuIGkoYyl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1wLmxlKGUsclswXSk7aWYobjwwKXJldHVybiAxO3ZhciBpPXRbbl07aWYoIWkpe2lmKCEobj4wJiZlW25dPT09clswXSkpcmV0dXJuIDE7aT10W24tMV19Zm9yKHZhciBhPTE7aTspe3ZhciBvPWkua2V5LHM9ZihyLG9bMF0sb1sxXSk7aWYob1swXVswXTxvWzFdWzBdKWlmKHM8MClpPWkubGVmdDtlbHNle2lmKCEocz4wKSlyZXR1cm4gMDthPS0xLGk9aS5yaWdodH1lbHNlIGlmKHM+MClpPWkubGVmdDtlbHNle2lmKCEoczwwKSlyZXR1cm4gMDthPTEsaT1pLnJpZ2h0fX1yZXR1cm4gYX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gMX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlWzBdLGVbMV0pPzA6MX19ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyWzBdLHJbMV0pPzA6ZShyKX19ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxuPVtdLGk9MDtpPGU7KytpKWZvcih2YXIgdT10W2ldLGY9dS5sZW5ndGgsZD1mLTEscD0wO3A8ZjtkPXArKyl7dmFyIG09dVtkXSx2PXVbcF07bVswXT09PXZbMF0/bi5wdXNoKFttLHZdKTpyLnB1c2goW20sdl0pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PW4ubGVuZ3RoP3M6bChhKG4pKTt2YXIgZz1oKHIpLHk9byhnLnNsYWJzLGcuY29vcmRpbmF0ZXMpO3JldHVybiAwPT09bi5sZW5ndGg/eTpjKGEobikseSl9ZS5leHBvcnRzPXU7dmFyIGY9dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10saD10KCJzbGFiLWRlY29tcG9zaXRpb24iKSxkPXQoImludGVydmFsLXRyZWUtMWQiKSxwPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIil9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY3LCJpbnRlcnZhbC10cmVlLTFkIjoyOTgsInJvYnVzdC1vcmllbnRhdGlvbiI6NTE3LCJzbGFiLWRlY29tcG9zaXRpb24iOjUzNH1dLDQ5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4scyl7aS5sZW5ndGg8bi5sZW5ndGgmJihpPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpLGE9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCksbz1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDsrK2wpaVtsXT10W2xdLW5bbF0sYVtsXT1lW2xdLXRbbF0sb1tsXT1yW2xdLXRbbF07Zm9yKHZhciBjPTAsdT0wLGY9MCxoPTAsZD0wLHA9MCxsPTA7bDxuLmxlbmd0aDsrK2wpe3ZhciBtPWFbbF0sdj1vW2xdLGc9aVtsXTtjKz1tKm0sdSs9bSp2LGYrPXYqdixoKz1nKm0sZCs9Zyp2LHArPWcqZ312YXIgeSxiPU1hdGguYWJzKGMqZi11KnUpLHg9dSpkLWYqaCxfPXUqaC1jKmQ7aWYoeCtfPD1iKWlmKHg8MClfPDAmJmg8MD8oXz0wLC1oPj1jPyh4PTEseT1jKzIqaCtwKTooeD0taC9jLHk9aCp4K3ApKTooeD0wLGQ+PTA/KF89MCx5PXApOi1kPj1mPyhfPTEseT1mKzIqZCtwKTooXz0tZC9mLHk9ZCpfK3ApKTtlbHNlIGlmKF88MClfPTAsaD49MD8oeD0wLHk9cCk6LWg+PWM/KHg9MSx5PWMrMipoK3ApOih4PS1oL2MseT1oKngrcCk7ZWxzZXt2YXIgdz0xL2I7eCo9dyxfKj13LHk9eCooYyp4K3UqXysyKmgpK18qKHUqeCtmKl8rMipkKStwfWVsc2V7dmFyIE0sVCxrLEE7eDwwPyhNPXUraCxUPWYrZCxUPk0/KGs9VC1NLEE9Yy0yKnUrZixrPj1BPyh4PTEsXz0wLHk9YysyKmgrcCk6KHg9ay9BLF89MS14LHk9eCooYyp4K3UqXysyKmgpK18qKHUqeCtmKl8rMipkKStwKSk6KHg9MCxUPD0wPyhfPTEseT1mKzIqZCtwKTpkPj0wPyhfPTAseT1wKTooXz0tZC9mLHk9ZCpfK3ApKSk6XzwwPyhNPXUrZCxUPWMraCxUPk0/KGs9VC1NLEE9Yy0yKnUrZixrPj1BPyhfPTEseD0wLHk9ZisyKmQrcCk6KF89ay9BLHg9MS1fLHk9eCooYyp4K3UqXysyKmgpK18qKHUqeCtmKl8rMipkKStwKSk6KF89MCxUPD0wPyh4PTEseT1jKzIqaCtwKTpoPj0wPyh4PTAseT1wKTooeD0taC9jLHk9aCp4K3ApKSk6KGs9ZitkLXUtaCxrPD0wPyh4PTAsXz0xLHk9ZisyKmQrcCk6KEE9Yy0yKnUrZixrPj1BPyh4PTEsXz0wLHk9YysyKmgrcCk6KHg9ay9BLF89MS14LHk9eCooYyp4K3UqXysyKmgpK18qKHUqeCtmKl8rMipkKStwKSkpfWZvcih2YXIgRT0xLXgtXyxsPTA7bDxuLmxlbmd0aDsrK2wpc1tsXT1FKnRbbF0reCplW2xdK18qcltsXTtyZXR1cm4geTwwPzA6eX12YXIgaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KSxvPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPW59LHt9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gaSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gYSh0KXtpZihmPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChmPT09bnx8IWYpJiZzZXRUaW1lb3V0KXJldHVybiBmPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gZih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gZi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gZi5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIG8odCl7aWYoaD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChoPT09aXx8IWgpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGg9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIGgodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBoLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaC5jYWxsKHRoaXMsdCl9fX1mdW5jdGlvbiBzKCl7diYmcCYmKHY9ITEscC5sZW5ndGg/bT1wLmNvbmNhdChtKTpnPS0xLG0ubGVuZ3RoJiZsKCkpfWZ1bmN0aW9uIGwoKXtpZighdil7dmFyIHQ9YShzKTt2PSEwO2Zvcih2YXIgZT1tLmxlbmd0aDtlOyl7Zm9yKHA9bSxtPVtdOysrZzxlOylwJiZwW2ddLnJ1bigpO2c9LTEsZT1tLmxlbmd0aH1wPW51bGwsdj0hMSxvKHQpfX1mdW5jdGlvbiBjKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gdSgpe312YXIgZixoLGQ9ZS5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtmPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bn1jYXRjaCh0KXtmPW59dHJ5e2g9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6aX1jYXRjaCh0KXtoPWl9fSgpO3ZhciBwLG09W10sdj0hMSxnPS0xO2QubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTttLnB1c2gobmV3IGModCxlKSksMSE9PW0ubGVuZ3RofHx2fHxhKGwpfSxjLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxkLnRpdGxlPSJicm93c2VyIixkLmJyb3dzZXI9ITAsZC5lbnY9e30sZC5hcmd2PVtdLGQudmVyc2lvbj0iIixkLnZlcnNpb25zPXt9LGQub249dSxkLmFkZExpc3RlbmVyPXUsZC5vbmNlPXUsZC5vZmY9dSxkLnJlbW92ZUxpc3RlbmVyPXUsZC5yZW1vdmVBbGxMaXN0ZW5lcnM9dSxkLmVtaXQ9dSxkLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxkLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sZC5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxkLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDk3OltmdW5jdGlvbihlLHIsbil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihpKXtmdW5jdGlvbiBhKHQpe3Rocm93IG5ldyBSYW5nZUVycm9yKHpbdF0pfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bXTtyLS07KW5bcl09ZSh0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5zcGxpdCgiQCIpLG49IiI7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMF0rIkAiLHQ9clsxXSksdD10LnJlcGxhY2UoUCwiLiIpLG4rbyh0LnNwbGl0KCIuIiksZSkuam9pbigiLiIpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlLHIsbj1bXSxpPTAsYT10Lmxlbmd0aDtpPGE7KWU9dC5jaGFyQ29kZUF0KGkrKyksZT49NTUyOTYmJmU8PTU2MzE5JiZpPGE/KHI9dC5jaGFyQ29kZUF0KGkrKyksNTYzMjA9PSg2NDUxMiZyKT9uLnB1c2goKCgxMDIzJmUpPDwxMCkrKDEwMjMmcikrNjU1MzYpOihuLnB1c2goZSksaS0tKSk6bi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIG8odCxmdW5jdGlvbih0KXt2YXIgZT0iIjtyZXR1cm4gdD42NTUzNSYmKHQtPTY1NTM2LGUrPUYodD4+PjEwJjEwMjN8NTUyOTYpLHQ9NTYzMjB8MTAyMyZ0KSxlKz1GKHQpfSkuam9pbigiIil9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC00ODwxMD90LTIyOnQtNjU8MjY/dC02NTp0LTk3PDI2P3QtOTc6TX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQrMjIrNzUqKHQ8MjYpLSgoMCE9ZSk8PDUpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPTA7Zm9yKHQ9cj9SKHQvRSk6dD4+MSx0Kz1SKHQvZSk7dD5PKms+PjE7bis9TSl0PVIodC9PKTtyZXR1cm4gUihuKyhPKzEpKnQvKHQrQSkpfWZ1bmN0aW9uIGQodCl7dmFyIGUscixuLGksbyxzLGwsZixkLHAsbT1bXSx2PXQubGVuZ3RoLGc9MCx5PUwsYj1TO2ZvcihyPXQubGFzdEluZGV4T2YoQykscjwwJiYocj0wKSxuPTA7bjxyOysrbil0LmNoYXJDb2RlQXQobik+PTEyOCYmYSgibm90LWJhc2ljIiksbS5wdXNoKHQuY2hhckNvZGVBdChuKSk7Zm9yKGk9cj4wP3IrMTowO2k8djspe2ZvcihvPWcscz0xLGw9TTtpPj12JiZhKCJpbnZhbGlkLWlucHV0IiksZj11KHQuY2hhckNvZGVBdChpKyspKSwoZj49TXx8Zj5SKCh3LWcpL3MpKSYmYSgib3ZlcmZsb3ciKSxnKz1mKnMsZD1sPD1iP1Q6bD49YitrP2s6bC1iLCEoZjxkKTtsKz1NKXA9TS1kLHM+Uih3L3ApJiZhKCJvdmVyZmxvdyIpLHMqPXA7ZT1tLmxlbmd0aCsxLGI9aChnLW8sZSwwPT1vKSxSKGcvZSk+dy15JiZhKCJvdmVyZmxvdyIpLHkrPVIoZy9lKSxnJT1lLG0uc3BsaWNlKGcrKywwLHkpfXJldHVybiBjKG0pfWZ1bmN0aW9uIHAodCl7dmFyIGUscixuLGksbyxzLGMsdSxkLHAsbSx2LGcseSxiLHg9W107Zm9yKHQ9bCh0KSx2PXQubGVuZ3RoLGU9TCxyPTAsbz1TLHM9MDtzPHY7KytzKShtPXRbc10pPDEyOCYmeC5wdXNoKEYobSkpO2ZvcihuPWk9eC5sZW5ndGgsaSYmeC5wdXNoKEMpO248djspe2ZvcihjPXcscz0wO3M8djsrK3MpKG09dFtzXSk+PWUmJm08YyYmKGM9bSk7Zm9yKGc9bisxLGMtZT5SKCh3LXIpL2cpJiZhKCJvdmVyZmxvdyIpLHIrPShjLWUpKmcsZT1jLHM9MDtzPHY7KytzKWlmKG09dFtzXSxtPGUmJisrcj53JiZhKCJvdmVyZmxvdyIpLG09PWUpe2Zvcih1PXIsZD1NO3A9ZDw9bz9UOmQ+PW8raz9rOmQtbywhKHU8cCk7ZCs9TSliPXUtcCx5PU0tcCx4LnB1c2goRihmKHArYiV5LDApKSksdT1SKGIveSk7eC5wdXNoKEYoZih1LDApKSksbz1oKHIsZyxuPT1pKSxyPTAsKytufSsrciwrK2V9cmV0dXJuIHguam9pbigiIil9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gcyh0LGZ1bmN0aW9uKHQpe3JldHVybiBJLnRlc3QodCk/ZCh0LnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnR9KX1mdW5jdGlvbiB2KHQpe3JldHVybiBzKHQsZnVuY3Rpb24odCl7cmV0dXJuIEQudGVzdCh0KT8ieG4tLSIrcCh0KTp0fSl9dmFyIGc9Im9iamVjdCI9PXR5cGVvZiBuJiZuJiYhbi5ub2RlVHlwZSYmbix5PSJvYmplY3QiPT10eXBlb2YgciYmciYmIXIubm9kZVR5cGUmJnIsYj0ib2JqZWN0Ij09dHlwZW9mIGUmJmU7Yi5nbG9iYWwhPT1iJiZiLndpbmRvdyE9PWImJmIuc2VsZiE9PWJ8fChpPWIpO3ZhciB4LF8sdz0yMTQ3NDgzNjQ3LE09MzYsVD0xLGs9MjYsQT0zOCxFPTcwMCxTPTcyLEw9MTI4LEM9Ii0iLEk9L154bi0tLyxEPS9bXlx4MjAtXHg3RV0vLFA9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLHo9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LE89TS1ULFI9TWF0aC5mbG9vcixGPVN0cmluZy5mcm9tQ2hhckNvZGU7aWYoeD17dmVyc2lvbjoiMS40LjEiLHVjczI6e2RlY29kZTpsLGVuY29kZTpjfSxkZWNvZGU6ZCxlbmNvZGU6cCx0b0FTQ0lJOnYsdG9Vbmljb2RlOm19LCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYib2JqZWN0Ij09dHlwZW9mIHQuYW1kJiZ0LmFtZCl0KCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pO2Vsc2UgaWYoZyYmeSlpZihyLmV4cG9ydHM9PWcpeS5leHBvcnRzPXg7ZWxzZSBmb3IoXyBpbiB4KXguaGFzT3duUHJvcGVydHkoXykmJihnW19dPXhbX10pO2Vsc2UgaS5wdW55Y29kZT14fSh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJnbC1xdWF0L3NsZXJwIil9LHsiZ2wtcXVhdC9zbGVycCI6MjM2fV0sNDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8IiYiLHI9cnx8Ij0iO3ZhciBvPXt9O2lmKCJzdHJpbmciIT10eXBlb2YgdHx8MD09PXQubGVuZ3RoKXJldHVybiBvO3Q9dC5zcGxpdChlKTt2YXIgcz0xZTM7YSYmIm51bWJlciI9PXR5cGVvZiBhLm1heEtleXMmJihzPWEubWF4S2V5cykKO3ZhciBsPXQubGVuZ3RoO3M+MCYmbD5zJiYobD1zKTtmb3IodmFyIGM9MDtjPGw7KytjKXt2YXIgdSxmLGgsZCxwPXRbY10ucmVwbGFjZSgvXCsvZywiJTIwIiksbT1wLmluZGV4T2Yocik7bT49MD8odT1wLnN1YnN0cigwLG0pLGY9cC5zdWJzdHIobSsxKSk6KHU9cCxmPSIiKSxoPWRlY29kZVVSSUNvbXBvbmVudCh1KSxkPWRlY29kZVVSSUNvbXBvbmVudChmKSxuKG8saCk/aShvW2hdKT9vW2hdLnB1c2goZCk6b1toXT1bb1toXSxkXTpvW2hdPWR9cmV0dXJuIG99O3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZih0Lm1hcClyZXR1cm4gdC5tYXAoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn12YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gdDtjYXNlImJvb2xlYW4iOnJldHVybiB0PyJ0cnVlIjoiZmFsc2UiO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodCk/dDoiIjtkZWZhdWx0OnJldHVybiIifX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3JldHVybiBlPWV8fCImIixyPXJ8fCI9IixudWxsPT09dCYmKHQ9dm9pZCAwKSwib2JqZWN0Ij09dHlwZW9mIHQ/bihvKHQpLGZ1bmN0aW9uKG8pe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChpKG8pKStyO3JldHVybiBhKHRbb10pP24odFtvXSxmdW5jdGlvbih0KXtyZXR1cm4gcytlbmNvZGVVUklDb21wb25lbnQoaSh0KSl9KS5qb2luKGUpOnMrZW5jb2RlVVJJQ29tcG9uZW50KGkodFtvXSkpfSkuam9pbihlKTpzP2VuY29kZVVSSUNvbXBvbmVudChpKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChpKHQpKToiIn07dmFyIGE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sbz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19LHt9XSw1MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWNvZGU9ci5wYXJzZT10KCIuL2RlY29kZSIpLHIuZW5jb2RlPXIuc3RyaW5naWZ5PXQoIi4vZW5jb2RlIil9LHsiLi9kZWNvZGUiOjQ5OSwiLi9lbmNvZGUiOjUwMH1dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG8scyl7Zm9yKHI9cnx8MCxvPW98fHQubGVuZ3RoLTEscz1zfHxhO28+cjspe2lmKG8tcj42MDApe3ZhciBsPW8tcisxLGM9ZS1yKzEsdT1NYXRoLmxvZyhsKSxmPS41Kk1hdGguZXhwKDIqdS8zKSxoPS41Kk1hdGguc3FydCh1KmYqKGwtZikvbCkqKGMtbC8yPDA/LTE6MSk7bih0LGUsTWF0aC5tYXgocixNYXRoLmZsb29yKGUtYypmL2wraCkpLE1hdGgubWluKG8sTWF0aC5mbG9vcihlKyhsLWMpKmYvbCtoKSkscyl9dmFyIGQ9dFtlXSxwPXIsbT1vO2ZvcihpKHQscixlKSxzKHRbb10sZCk+MCYmaSh0LHIsbyk7cDxtOyl7Zm9yKGkodCxwLG0pLHArKyxtLS07cyh0W3BdLGQpPDA7KXArKztmb3IoO3ModFttXSxkKT4wOyltLS19MD09PXModFtyXSxkKT9pKHQscixtKToobSsrLGkodCxtLG8pKSxtPD1lJiYocj1tKzEpLGU8PW0mJihvPW0tMSl9fWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWUuZXhwb3J0cz1ufSx7fV0sNTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpblthXT1pKHRbYV0sZVthXSk7cmV0dXJuIG59dmFyIGk9dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9bn0seyJiaWctcmF0L2FkZCI6NTF9XSw1MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1pKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz1uO3ZhciBpPXQoImJpZy1yYXQiKX0seyJiaWctcmF0Ijo1NH1dLDUwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPWkoZSksbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylvW3NdPWEodFtzXSxyKTtyZXR1cm4gb312YXIgaT10KCJiaWctcmF0IiksYT10KCJiaWctcmF0L211bCIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQiOjU0LCJiaWctcmF0L211bCI6NjN9XSw1MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSluW2FdPWkodFthXSxlW2FdKTtyZXR1cm4gbn12YXIgaT10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQvc3ViIjo2NX1dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Quc29ydChhKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXt2YXIgcz10W25dLGw9byhzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PWkocyxjKSYmbyhjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksbz10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPW59LHsiY2VsbC1vcmllbnRhdGlvbiI6ODUsImNvbXBhcmUtY2VsbCI6MTAwLCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjEwMX1dLDUwODpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9yLmV4cG9ydHM9aSgpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KGkpOmUuY3JlYXRlUkVHTD1pKCl9KHRoaXMsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGJ0b2E/YnRvYSh0KToiYmFzZTY0OiIrdH1mdW5jdGlvbiBlKHQpe3ZhciBlPW5ldyBFcnJvcigiKHJlZ2wpICIrdCk7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfWZ1bmN0aW9uIHIodCxyKXt0fHxlKHIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQ/IjogIit0OiIifWZ1bmN0aW9uIGkodCxyLGkpe3QgaW4gcnx8ZSgidW5rbm93biBwYXJhbWV0ZXIgKCIrdCsiKSIrbihpKSsiLiBwb3NzaWJsZSB2YWx1ZXM6ICIrT2JqZWN0LmtleXMocikuam9pbigpKX1mdW5jdGlvbiBhKHQscil7UXQodCl8fGUoImludmFsaWQgcGFyYW1ldGVyIHR5cGUiK24ocikrIi4gbXVzdCBiZSBhIHR5cGVkIGFycmF5Iil9ZnVuY3Rpb24gbyh0LHIsaSl7dHlwZW9mIHQhPT1yJiZlKCJpbnZhbGlkIHBhcmFtZXRlciB0eXBlIituKGkpKyIuIGV4cGVjdGVkICIrcisiLCBnb3QgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcyh0LHIpe3Q+PTAmJigwfHQpPT09dHx8ZSgiaW52YWxpZCBwYXJhbWV0ZXIgdHlwZSwgKCIrdCsiKSIrbihyKSsiLiBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIpfWZ1bmN0aW9uIGwodCxyLGkpe3IuaW5kZXhPZih0KTwwJiZlKCJpbnZhbGlkIHZhbHVlIituKGkpKyIuIG11c3QgYmUgb25lIG9mOiAiK3IpfWZ1bmN0aW9uIGModCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXt0ZS5pbmRleE9mKHQpPDAmJmUoJ2ludmFsaWQgcmVnbCBjb25zdHJ1Y3RvciBhcmd1bWVudCAiJyt0KyciLiBtdXN0IGJlIG9uZSBvZiAnK3RlKX0pfWZ1bmN0aW9uIHUodCxlKXtmb3IodCs9IiI7dC5sZW5ndGg8ZTspdD0iICIrdDtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7dGhpcy5uYW1lPSJ1bmtub3duIix0aGlzLmxpbmVzPVtdLHRoaXMuaW5kZXg9e30sdGhpcy5oYXNFcnJvcnM9ITF9ZnVuY3Rpb24gaCh0LGUpe3RoaXMubnVtYmVyPXQsdGhpcy5saW5lPWUsdGhpcy5lcnJvcnM9W119ZnVuY3Rpb24gZCh0LGUscil7dGhpcy5maWxlPXQsdGhpcy5saW5lPWUsdGhpcy5tZXNzYWdlPXJ9ZnVuY3Rpb24gcCgpe3ZhciB0PW5ldyBFcnJvcixlPSh0LnN0YWNrfHx0KS50b1N0cmluZygpLHI9L2NvbXBpbGVQcm9jZWR1cmUuKlxuXHMqYXQuKlwoKC4qKVwpLy5leGVjKGUpO2lmKHIpcmV0dXJuIHJbMV07dmFyIG49L2NvbXBpbGVQcm9jZWR1cmUuKlxuXHMqYXRccysoLiopKFxufCQpLy5leGVjKGUpO3JldHVybiBuP25bMV06InVua25vd24ifWZ1bmN0aW9uIG0oKXt2YXIgdD1uZXcgRXJyb3IsZT0odC5zdGFja3x8dCkudG9TdHJpbmcoKSxyPS9hdCBSRUdMQ29tbWFuZC4qXG5ccythdC4qXCgoLiopXCkvLmV4ZWMoZSk7aWYocilyZXR1cm4gclsxXTt2YXIgbj0vYXQgUkVHTENvbW1hbmQuKlxuXHMrYXRccysoLiopXG4vLmV4ZWMoZSk7cmV0dXJuIG4/blsxXToidW5rbm93biJ9ZnVuY3Rpb24gdihlLHIpe3ZhciBuPWUuc3BsaXQoIlxuIiksaT0xLGE9MCxvPXt1bmtub3duOm5ldyBmLDA6bmV3IGZ9O28udW5rbm93bi5uYW1lPW9bMF0ubmFtZT1yfHxwKCksby51bmtub3duLmxpbmVzLnB1c2gobmV3IGgoMCwiIikpO2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7KytzKXt2YXIgbD1uW3NdLGM9L15ccypcI1xzKihcdyspXHMrKC4rKVxzKiQvLmV4ZWMobCk7aWYoYylzd2l0Y2goY1sxXSl7Y2FzZSJsaW5lIjp2YXIgdT0vKFxkKykoXHMrXGQrKT8vLmV4ZWMoY1syXSk7dSYmKGk9MHx1WzFdLHVbMl0mJigoYT0wfHVbMl0paW4gb3x8KG9bYV09bmV3IGYpKSk7YnJlYWs7Y2FzZSJkZWZpbmUiOnZhciBkPS9TSEFERVJfTkFNRShfQjY0KT9ccysoLiopJC8uZXhlYyhjWzJdKTtkJiYob1thXS5uYW1lPWRbMV0/dChkWzJdKTpkWzJdKX1vW2FdLmxpbmVzLnB1c2gobmV3IGgoaSsrLGwpKX1yZXR1cm4gT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1vW3RdO2UubGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLmluZGV4W3QubnVtYmVyXT10fSl9KSxvfWZ1bmN0aW9uIGcodCl7dmFyIGU9W107cmV0dXJuIHQuc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDUpKXt2YXIgcj0vXkVSUk9SXDpccysoXGQrKVw6KFxkKylcOlxzKiguKikkLy5leGVjKHQpO3I/ZS5wdXNoKG5ldyBkKDB8clsxXSwwfHJbMl0sclszXS50cmltKCkpKTp0Lmxlbmd0aD4wJiZlLnB1c2gobmV3IGQoInVua25vd24iLDAsdCkpfX0pLGV9ZnVuY3Rpb24geSh0LGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj10W2UuZmlsZV07aWYocil7dmFyIG49ci5pbmRleFtlLmxpbmVdO2lmKG4pcmV0dXJuIG4uZXJyb3JzLnB1c2goZSksdm9pZChyLmhhc0Vycm9ycz0hMCl9dC51bmtub3duLmhhc0Vycm9ycz0hMCx0LnVua25vd24ubGluZXNbMF0uZXJyb3JzLnB1c2goZSl9KX1mdW5jdGlvbiBiKHQsZSxuLGksYSl7aWYoIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGUsdC5DT01QSUxFX1NUQVRVUykpe3ZhciBvPXQuZ2V0U2hhZGVySW5mb0xvZyhlKSxzPWk9PT10LkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiO0Eobiwic3RyaW5nIixzKyIgc2hhZGVyIHNvdXJjZSBtdXN0IGJlIGEgc3RyaW5nIixhKTt2YXIgbD12KG4sYSksYz1nKG8pO3kobCxjKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtuLnB1c2godCksaS5wdXNoKGV8fCIiKX12YXIgcj1sW3RdO2lmKHIuaGFzRXJyb3JzKXt2YXIgbj1bIiJdLGk9WyIiXTtlKCJmaWxlIG51bWJlciAiK3QrIjogIityLm5hbWUrIlxuIiwiY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCIpLHIubGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZih0LmVycm9ycy5sZW5ndGg+MCl7ZSh1KHQubnVtYmVyLDQpKyJ8ICAiLCJiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgZm9udC13ZWlnaHQ6Ym9sZCIpLGUodC5saW5lKyJcbiIsImNvbG9yOnJlZDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQiKTt2YXIgcj0wO3QuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9bi5tZXNzYWdlLGE9L15ccypcJyguKilcJ1xzKlw6XHMqKC4qKSQvLmV4ZWMoaSk7aWYoYSl7dmFyIG89YVsxXTtzd2l0Y2goaT1hWzJdLG8pe2Nhc2UiYXNzaWduIjpvPSI9In1yPU1hdGgubWF4KHQubGluZS5pbmRleE9mKG8sciksMCl9ZWxzZSByPTA7ZSh1KCJ8ICIsNikpLGUodSgiXl5eIixyKzMpKyJcbiIsImZvbnQtd2VpZ2h0OmJvbGQiKSxlKHUoInwgIiw2KSksZShpKyJcbiIsImZvbnQtd2VpZ2h0OmJvbGQiKX0pLGUodSgifCAiLDYpKyJcbiIpfWVsc2UgZSh1KHQubnVtYmVyLDQpKyJ8ICAiKSxlKHQubGluZSsiXG4iLCJjb2xvcjpyZWQiKX0pLCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/KGlbMF09bi5qb2luKCIlYyIpLGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsaSkpOmNvbnNvbGUubG9nKG4uam9pbigiIikpfX0pLHIucmFpc2UoIkVycm9yIGNvbXBpbGluZyAiK3MrIiBzaGFkZXIsICIrbFswXS5uYW1lKX19ZnVuY3Rpb24geCh0LGUsbixpLGEpe2lmKCF0LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkxJTktfU1RBVFVTKSl7dmFyIG89dC5nZXRQcm9ncmFtSW5mb0xvZyhlKSxzPXYobixhKSxsPXYoaSxhKSxjPSdFcnJvciBsaW5raW5nIHByb2dyYW0gd2l0aCB2ZXJ0ZXggc2hhZGVyLCAiJytsWzBdLm5hbWUrJyIsIGFuZCBmcmFnbWVudCBzaGFkZXIgIicrc1swXS5uYW1lKyciJzsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2NvbnNvbGUubG9nKCIlYyIrYysiXG4lYyIrbywiY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCIsImNvbG9yOnJlZCIpOmNvbnNvbGUubG9nKGMrIlxuIitvKSxyLnJhaXNlKGMpfX1mdW5jdGlvbiBfKHQpe3QuX2NvbW1hbmRSZWY9cCgpfWZ1bmN0aW9uIHcodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdD9uLmlkKHQpOjB9ZnVuY3Rpb24gYSh0LGUpe09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtuLmlkKGUpXT0hMH0pfV8odCksdC5fZnJhZ0lkPWkodC5zdGF0aWMuZnJhZyksdC5fdmVydElkPWkodC5zdGF0aWMudmVydCk7dmFyIG89dC5fdW5pZm9ybVNldD17fTthKG8sZS5zdGF0aWMpLGEobyxlLmR5bmFtaWMpO3ZhciBzPXQuX2F0dHJpYnV0ZVNldD17fTthKHMsci5zdGF0aWMpLGEocyxyLmR5bmFtaWMpLHQuX2hhc0NvdW50PSJjb3VudCJpbiB0LnN0YXRpY3x8ImNvdW50ImluIHQuZHluYW1pY3x8ImVsZW1lbnRzImluIHQuc3RhdGljfHwiZWxlbWVudHMiaW4gdC5keW5hbWljfWZ1bmN0aW9uIE0odCxyKXt2YXIgbj1tKCk7ZSh0KyIgaW4gY29tbWFuZCAiKyhyfHxwKCkpKygidW5rbm93biI9PT1uPyIiOiIgY2FsbGVkIGZyb20gIituKSl9ZnVuY3Rpb24gVCh0LGUscil7dHx8TShlLHJ8fHAoKSl9ZnVuY3Rpb24gayh0LGUscixpKXt0IGluIGV8fE0oInVua25vd24gcGFyYW1ldGVyICgiK3QrIikiK24ocikrIi4gcG9zc2libGUgdmFsdWVzOiAiK09iamVjdC5rZXlzKGUpLmpvaW4oKSxpfHxwKCkpfWZ1bmN0aW9uIEEodCxlLHIsaSl7dHlwZW9mIHQhPT1lJiZNKCJpbnZhbGlkIHBhcmFtZXRlciB0eXBlIituKHIpKyIuIGV4cGVjdGVkICIrZSsiLCBnb3QgIit0eXBlb2YgdCxpfHxwKCkpfWZ1bmN0aW9uIEUodCl7dCgpfWZ1bmN0aW9uIFModCxlLHIpe3QudGV4dHVyZT9sKHQudGV4dHVyZS5fdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxlLCJ1bnN1cHBvcnRlZCB0ZXh0dXJlIGZvcm1hdCBmb3IgYXR0YWNobWVudCIpOmwodC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQsciwidW5zdXBwb3J0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdCBmb3IgYXR0YWNobWVudCIpfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gdD09PWNlfHx0PT09bGV8fHQ9PT11ZT8yOnQ9PT1mZT80OmhlW3RdKmV9ZnVuY3Rpb24gQyh0KXtyZXR1cm4hKHQmdC0xfHwhdCl9ZnVuY3Rpb24gSSh0LGUsbil7dmFyIGksYT1lLndpZHRoLG89ZS5oZWlnaHQscz1lLmNoYW5uZWxzO3IoYT4wJiZhPD1uLm1heFRleHR1cmVTaXplJiZvPjAmJm88PW4ubWF4VGV4dHVyZVNpemUsImludmFsaWQgdGV4dHVyZSBzaGFwZSIpLHQud3JhcFM9PT1lZSYmdC53cmFwVD09PWVlfHxyKEMoYSkmJkMobyksImluY29tcGF0aWJsZSB3cmFwIG1vZGUgZm9yIHRleHR1cmUsIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIDIiKSwxPT09ZS5taXBtYXNrPzEhPT1hJiYxIT09byYmcih0Lm1pbkZpbHRlciE9PW5lJiZ0Lm1pbkZpbHRlciE9PWFlJiZ0Lm1pbkZpbHRlciE9PWllJiZ0Lm1pbkZpbHRlciE9PW9lLCJtaW4gZmlsdGVyIHJlcXVpcmVzIG1pcG1hcCIpOihyKEMoYSkmJkMobyksInRleHR1cmUgbXVzdCBiZSBhIHNxdWFyZSBwb3dlciBvZiAyIHRvIHN1cHBvcnQgbWlwbWFwcGluZyIpLHIoZS5taXBtYXNrPT09KGE8PDEpLTEsIm1pc3Npbmcgb3IgaW5jb21wbGV0ZSBtaXBtYXAgZGF0YSIpKSxlLnR5cGU9PT1zZSYmKG4uZXh0ZW5zaW9ucy5pbmRleE9mKCJvZXNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTwwJiZyKHQubWluRmlsdGVyPT09cmUmJnQubWFnRmlsdGVyPT09cmUsImZpbHRlciBub3Qgc3VwcG9ydGVkLCBtdXN0IGVuYWJsZSBvZXNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCF0Lmdlbk1pcG1hcHMsIm1pcG1hcCBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCBmbG9hdCB0ZXh0dXJlcyIpKTt2YXIgbD1lLmltYWdlcztmb3IoaT0wO2k8MTY7KytpKWlmKGxbaV0pe3ZhciBjPWE+PmksdT1vPj5pO3IoZS5taXBtYXNrJjE8PGksIm1pc3NpbmcgbWlwbWFwIGRhdGEiKTt2YXIgZj1sW2ldO2lmKHIoZi53aWR0aD09PWMmJmYuaGVpZ2h0PT09dSwiaW52YWxpZCBzaGFwZSBmb3IgbWlwIGltYWdlcyIpLHIoZi5mb3JtYXQ9PT1lLmZvcm1hdCYmZi5pbnRlcm5hbGZvcm1hdD09PWUuaW50ZXJuYWxmb3JtYXQmJmYudHlwZT09PWUudHlwZSwiaW5jb21wYXRpYmxlIHR5cGUgZm9yIG1pcCBpbWFnZSIpLGYuY29tcHJlc3NlZCk7ZWxzZSBpZihmLmRhdGEpe3ZhciBoPU1hdGguY2VpbChMKGYudHlwZSxzKSpjL2YudW5wYWNrQWxpZ25tZW50KSpmLnVucGFja0FsaWdubWVudDtyKGYuZGF0YS5ieXRlTGVuZ3RoPT09aCp1LCJpbnZhbGlkIGRhdGEgZm9yIGltYWdlLCBidWZmZXIgc2l6ZSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpbWFnZSBmb3JtYXQiKX1lbHNlIGYuZWxlbWVudHx8Zi5jb3B5fWVsc2UgdC5nZW5NaXBtYXBzfHxyKDA9PShlLm1pcG1hc2smMTw8aSksImV4dHJhIG1pcG1hcCBkYXRhIik7ZS5jb21wcmVzc2VkJiZyKCF0Lmdlbk1pcG1hcHMsIm1pcG1hcCBnZW5lcmF0aW9uIGZvciBjb21wcmVzc2VkIGltYWdlcyBub3Qgc3VwcG9ydGVkIil9ZnVuY3Rpb24gRCh0LGUsbixpKXt2YXIgYT10LndpZHRoLG89dC5oZWlnaHQscz10LmNoYW5uZWxzO3IoYT4wJiZhPD1pLm1heFRleHR1cmVTaXplJiZvPjAmJm88PWkubWF4VGV4dHVyZVNpemUsImludmFsaWQgdGV4dHVyZSBzaGFwZSIpLHIoYT09PW8sImN1YmUgbWFwIG11c3QgYmUgc3F1YXJlIikscihlLndyYXBTPT09ZWUmJmUud3JhcFQ9PT1lZSwid3JhcCBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgY3ViZSBtYXAiKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoOysrbCl7dmFyIGM9bltsXTtyKGMud2lkdGg9PT1hJiZjLmhlaWdodD09PW8sImluY29uc2lzdGVudCBjdWJlIG1hcCBmYWNlIHNoYXBlIiksZS5nZW5NaXBtYXBzJiYocighYy5jb21wcmVzc2VkLCJjYW4gbm90IGdlbmVyYXRlIG1pcG1hcCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyIpLHIoMT09PWMubWlwbWFzaywiY2FuIG5vdCBzcGVjaWZ5IG1pcG1hcHMgYW5kIGdlbmVyYXRlIG1pcG1hcHMiKSk7Zm9yKHZhciB1PWMuaW1hZ2VzLGY9MDtmPDE2OysrZil7dmFyIGg9dVtmXTtpZihoKXt2YXIgZD1hPj5mLHA9bz4+ZjtyKGMubWlwbWFzayYxPDxmLCJtaXNzaW5nIG1pcG1hcCBkYXRhIikscihoLndpZHRoPT09ZCYmaC5oZWlnaHQ9PT1wLCJpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzIikscihoLmZvcm1hdD09PXQuZm9ybWF0JiZoLmludGVybmFsZm9ybWF0PT09dC5pbnRlcm5hbGZvcm1hdCYmaC50eXBlPT09dC50eXBlLCJpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlIiksaC5jb21wcmVzc2VkfHwoaC5kYXRhP3IoaC5kYXRhLmJ5dGVMZW5ndGg9PT1kKnAqTWF0aC5tYXgoTChoLnR5cGUscyksaC51bnBhY2tBbGlnbm1lbnQpLCJpbnZhbGlkIGRhdGEgZm9yIGltYWdlLCBidWZmZXIgc2l6ZSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpbWFnZSBmb3JtYXQiKTpoLmVsZW1lbnR8fGguY29weSl9fX19ZnVuY3Rpb24gUCh0LGUpe3RoaXMuaWQ9cGUrKyx0aGlzLnR5cGU9dCx0aGlzLmRhdGE9ZX1mdW5jdGlvbiB6KHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpfWZ1bmN0aW9uIE8odCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBlPXQuY2hhckF0KDApLHI9dC5jaGFyQXQodC5sZW5ndGgtMSk7aWYodC5sZW5ndGg+MSYmZT09PXImJignIic9PT1lfHwiJyI9PT1lKSlyZXR1cm5bJyInK3oodC5zdWJzdHIoMSx0Lmxlbmd0aC0yKSkrJyInXTt2YXIgbj0vXFsoZmFsc2V8dHJ1ZXxudWxsfFxkK3wnW14nXSonfCJbXiJdKiIpXF0vLmV4ZWModCk7aWYobilyZXR1cm4gTyh0LnN1YnN0cigwLG4uaW5kZXgpKS5jb25jYXQoTyhuWzFdKSkuY29uY2F0KE8odC5zdWJzdHIobi5pbmRleCtuWzBdLmxlbmd0aCkpKTt2YXIgaT10LnNwbGl0KCIuIik7aWYoMT09PWkubGVuZ3RoKXJldHVyblsnIicreih0KSsnIiddO2Zvcih2YXIgYT1bXSxvPTA7bzxpLmxlbmd0aDsrK28pYT1hLmNvbmNhdChPKGlbb10pKTtyZXR1cm4gYX1mdW5jdGlvbiBSKHQpe3JldHVybiJbIitPKHQpLmpvaW4oIl1bIikrIl0ifWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gbmV3IFAodCxSKGUrIiIpKX1mdW5jdGlvbiBqKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYhdC5fcmVnbFR5cGV8fHQgaW5zdGFuY2VvZiBQfWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9uZXcgUChtZSx0KTp0fWZ1bmN0aW9uIEIoKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBuP246KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fWZ1bmN0aW9uIFUodCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodDtpZih0IT09ZG9jdW1lbnQuYm9keSl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlPWkucmlnaHQtaS5sZWZ0LG49aS5ib3R0b20taS50b3B9YS53aWR0aD1yKmUsYS5oZWlnaHQ9cipuLCR0KGEuc3R5bGUse3dpZHRoOmUrInB4IixoZWlnaHQ6bisicHgifSl9ZnVuY3Rpb24gaSgpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pLHQucmVtb3ZlQ2hpbGQoYSl9dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuICR0KGEuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGEpLHQ9PT1kb2N1bWVudC5ib2R5JiYoYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLCR0KHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuLCExKSxuKCkse2NhbnZhczphLG9uRGVzdHJveTppfX1mdW5jdGlvbiBWKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcigid2ViZ2wiKXx8cigiZXhwZXJpbWVudGFsLXdlYmdsIil8fHIoIndlYmdsLWV4cGVyaW1lbnRhbCIpfWZ1bmN0aW9uIEgodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fWZ1bmN0aW9uIHEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0VsZW1lbnRzfWZ1bmN0aW9uIEcodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoKTooZGUoQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBleHRlbnNpb24gYXJyYXkiKSx0KX1mdW5jdGlvbiBZKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZGUoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCwibm90IHN1cHBvcnRlZCBvdXRzaWRlIG9mIERPTSIpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCkpOnR9ZnVuY3Rpb24gWCh0KXt2YXIgZSxyLG4saSxhPXR8fHt9LG89e30scz1bXSxsPVtdLGM9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx1PSExLGY9ZnVuY3Rpb24odCl7dCYmZGUucmFpc2UodCl9LGg9ZnVuY3Rpb24oKXt9O2lmKCJzdHJpbmciPT10eXBlb2YgYT8oZGUoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCwic2VsZWN0b3IgcXVlcmllcyBvbmx5IHN1cHBvcnRlZCBpbiBET00gZW52aXJvbWVudHMiKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSksZGUoZSwiaW52YWxpZCBxdWVyeSBzdHJpbmcgZm9yIGVsZW1lbnQiKSk6Im9iamVjdCI9PXR5cGVvZiBhP0goYSk/ZT1hOnEoYSk/KGk9YSxuPWkuY2FudmFzKTooZGUuY29uc3RydWN0b3IoYSksImdsImluIGE/aT1hLmdsOiJjYW52YXMiaW4gYT9uPVkoYS5jYW52YXMpOiJjb250YWluZXIiaW4gYSYmKHI9WShhLmNvbnRhaW5lcikpLCJhdHRyaWJ1dGVzImluIGEmJihvPWEuYXR0cmlidXRlcyxkZS50eXBlKG8sIm9iamVjdCIsImludmFsaWQgY29udGV4dCBhdHRyaWJ1dGVzIikpLCJleHRlbnNpb25zImluIGEmJihzPUcoYS5leHRlbnNpb25zKSksIm9wdGlvbmFsRXh0ZW5zaW9ucyJpbiBhJiYobD1HKGEub3B0aW9uYWxFeHRlbnNpb25zKSksIm9uRG9uZSJpbiBhJiYoZGUudHlwZShhLm9uRG9uZSwiZnVuY3Rpb24iLCJpbnZhbGlkIG9yIG1pc3Npbmcgb25Eb25lIGNhbGxiYWNrIiksZj1hLm9uRG9uZSksInByb2ZpbGUiaW4gYSYmKHU9ISFhLnByb2ZpbGUpLCJwaXhlbFJhdGlvImluIGEmJihjPSthLnBpeGVsUmF0aW8sZGUoYz4wLCJpbnZhbGlkIHBpeGVsIHJhdGlvIikpKTpkZS5yYWlzZSgiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbCIpLGUmJigiY2FudmFzIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9uPWU6cj1lKSwhaSl7aWYoIW4pe2RlKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsIm11c3QgbWFudWFsbHkgc3BlY2lmeSB3ZWJnbCBjb250ZXh0IG91dHNpZGUgb2YgRE9NIGVudmlyb25tZW50cyIpO3ZhciBkPVUocnx8ZG9jdW1lbnQuYm9keSxmLGMpO2lmKCFkKXJldHVybiBudWxsO249ZC5jYW52YXMsaD1kLm9uRGVzdHJveX1pPVYobixvKX1yZXR1cm4gaT97Z2w6aSxjYW52YXM6bixjb250YWluZXI6cixleHRlbnNpb25zOnMsb3B0aW9uYWxFeHRlbnNpb25zOmwscGl4ZWxSYXRpbzpjLHByb2ZpbGU6dSxvbkRvbmU6ZixvbkRlc3Ryb3k6aH06KGgoKSxmKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gVyh0LGUpe2Z1bmN0aW9uIHIoZSl7ZGUudHlwZShlLCJzdHJpbmciLCJleHRlbnNpb24gbmFtZSBtdXN0IGJlIHN0cmluZyIpO3ZhciByLGk9ZS50b0xvd2VyQ2FzZSgpO3RyeXtyPW5baV09dC5nZXRFeHRlbnNpb24oaSl9Y2F0Y2godCl7fXJldHVybiEhcn1mb3IodmFyIG49e30saT0wO2k8ZS5leHRlbnNpb25zLmxlbmd0aDsrK2kpe3ZhciBhPWUuZXh0ZW5zaW9uc1tpXTtpZighcihhKSlyZXR1cm4gZS5vbkRlc3Ryb3koKSxlLm9uRG9uZSgnIicrYSsnIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKSxudWxsfXJldHVybiBlLm9wdGlvbmFsRXh0ZW5zaW9ucy5mb3JFYWNoKHIpLHtleHRlbnNpb25zOm4scmVzdG9yZTpmdW5jdGlvbigpe09iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgbmV3IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pfX19ZnVuY3Rpb24gWih0KXtyZXR1cm4hIXQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJiJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJnQuc2hhcGUubGVuZ3RoPT09dC5zdHJpZGUubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0LmRhdGEpfHxRdCh0LmRhdGEpKX1mdW5jdGlvbiBKKHQsZSl7Zm9yKHZhciByPUFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBLKHQpe2Zvcih2YXIgZT0xNjtlPD0xPDwyODtlKj0xNilpZih0PD1lKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIFEodCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsdD4+Pj1lLHI9KHQ+MjU1KTw8Myx0Pj4+PXIsZXw9cixyPSh0PjE1KTw8Mix0Pj4+PXIsZXw9cixyPSh0PjMpPDwxLHQ+Pj49ciwoZXw9cil8dD4+MX1mdW5jdGlvbiAkKHQpe3ZhciBlPUsodCkscj1TZVtRKGUpPj4yXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcihlKX1mdW5jdGlvbiB0dCh0KXtTZVtRKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgcj1udWxsO3N3aXRjaCh0KXtjYXNlIF9lOnI9bmV3IEludDhBcnJheSgkKGUpLDAsZSk7YnJlYWs7Y2FzZSB3ZTpyPW5ldyBVaW50OEFycmF5KCQoZSksMCxlKTticmVhaztjYXNlIE1lOnI9bmV3IEludDE2QXJyYXkoJCgyKmUpLDAsZSk7YnJlYWs7Y2FzZSBUZTpyPW5ldyBVaW50MTZBcnJheSgkKDIqZSksMCxlKTticmVhaztjYXNlIGtlOnI9bmV3IEludDMyQXJyYXkoJCg0KmUpLDAsZSk7YnJlYWs7Y2FzZSBBZTpyPW5ldyBVaW50MzJBcnJheSgkKDQqZSksMCxlKTticmVhaztjYXNlIEVlOnI9bmV3IEZsb2F0MzJBcnJheSgkKDQqZSksMCxlKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiByLmxlbmd0aCE9PWU/ci5zdWJhcnJheSgwLGUpOnJ9ZnVuY3Rpb24gcnQodCl7dHQodC5idWZmZXIpfWZ1bmN0aW9uIG50KHQsZSxyKXtmb3IodmFyIG49MDtuPGU7KytuKXJbbl09dFtuXX1mdW5jdGlvbiBpdCh0LGUscixuKXtmb3IodmFyIGk9MCxhPTA7YTxlOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxyOysrcyluW2krK109b1tzXX1mdW5jdGlvbiBhdCh0LGUscixuLGksYSl7Zm9yKHZhciBvPWEscz0wO3M8ZTsrK3MpZm9yKHZhciBsPXRbc10sYz0wO2M8cjsrK2MpZm9yKHZhciB1PWxbY10sZj0wO2Y8bjsrK2YpaVtvKytdPXVbZl19ZnVuY3Rpb24gb3QodCxlLHIsbixpKXtmb3IodmFyIGE9MSxvPXIrMTtvPGUubGVuZ3RoOysrbylhKj1lW29dO3ZhciBzPWVbcl07aWYoZS5sZW5ndGgtcj09NCl7dmFyIGw9ZVtyKzFdLGM9ZVtyKzJdLHU9ZVtyKzNdO2ZvcihvPTA7bzxzOysrbylhdCh0W29dLGwsYyx1LG4saSksaSs9YX1lbHNlIGZvcihvPTA7bzxzOysrbylvdCh0W29dLGUscisxLG4saSksaSs9YX1mdW5jdGlvbiBzdCh0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7dmFyIG89bnx8TGUuYWxsb2NUeXBlKHIsaSk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm50KHQsZVswXSxvKTticmVhaztjYXNlIDI6aXQodCxlWzBdLGVbMV0sbyk7YnJlYWs7Y2FzZSAzOmF0KHQsZVswXSxlWzFdLGVbMl0sbywwKTticmVhaztkZWZhdWx0Om90KHQsZSwwLG8sMCl9cmV0dXJuIG99ZnVuY3Rpb24gbHQodCl7Zm9yKHZhciBlPVtdLHI9dDtyLmxlbmd0aDtyPXJbMF0pZS5wdXNoKHIubGVuZ3RoKTtyZXR1cm4gZX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gMHxLdFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCldfWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGZ0KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wLGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8bjsrK2MpdFtzKytdPWVbaSpsK2EqYytvXX1mdW5jdGlvbiBodCh0LGUscil7ZnVuY3Rpb24gbihlKXt0aGlzLmlkPWYrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9T2UsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPUZlLHRoaXMucGVyc2lzdGVudERhdGE9bnVsbCxyLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9ZC5wb3AoKTtyZXR1cm4gcnx8KHI9bmV3IG4odCkpLHIuYmluZCgpLHMocixlLFJlLDAsMSwhMSkscn1mdW5jdGlvbiBhKHQpe2QucHVzaCh0KX1mdW5jdGlvbiBvKGUscixuKXtlLmJ5dGVMZW5ndGg9ci5ieXRlTGVuZ3RoLHQuYnVmZmVyRGF0YShlLnR5cGUscixuKX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhKXt2YXIgcztpZih0LnVzYWdlPXIsQXJyYXkuaXNBcnJheShlKSl7aWYodC5kdHlwZT1ufHxqZSxlLmxlbmd0aD4wKXt2YXIgbDtpZihBcnJheS5pc0FycmF5KGVbMF0pKXtzPXplKGUpO2Zvcih2YXIgYz0xLHU9MTt1PHMubGVuZ3RoOysrdSljKj1zW3VdO3QuZGltZW5zaW9uPWMsbD1QZShlLHMsdC5kdHlwZSksbyh0LGwsciksYT90LnBlcnNpc3RlbnREYXRhPWw6TGUuZnJlZVR5cGUobCl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGVbMF0pe3QuZGltZW5zaW9uPWk7dmFyIGY9TGUuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpO3V0KGYsZSksbyh0LGYsciksYT90LnBlcnNpc3RlbnREYXRhPWY6TGUuZnJlZVR5cGUoZil9ZWxzZSBRdChlWzBdKT8odC5kaW1lbnNpb249ZVswXS5sZW5ndGgsdC5kdHlwZT1ufHxjdChlWzBdKXx8amUsbD1QZShlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksbyh0LGwsciksYT90LnBlcnNpc3RlbnREYXRhPWw6TGUuZnJlZVR5cGUobCkpOmRlLnJhaXNlKCJpbnZhbGlkIGJ1ZmZlciBkYXRhIil9fWVsc2UgaWYoUXQoZSkpdC5kdHlwZT1ufHxjdChlKSx0LmRpbWVuc2lvbj1pLG8odCxlLHIpLGEmJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYoWihlKSl7cz1lLnNoYXBlO3ZhciBoPWUuc3RyaWRlLGQ9ZS5vZmZzZXQscD0wLG09MCx2PTAsZz0wOzE9PT1zLmxlbmd0aD8ocD1zWzBdLG09MSx2PWhbMF0sZz0wKToyPT09cy5sZW5ndGg/KHA9c1swXSxtPXNbMV0sdj1oWzBdLGc9aFsxXSk6ZGUucmFpc2UoImludmFsaWQgc2hhcGUiKSx0LmR0eXBlPW58fGN0KGUuZGF0YSl8fGplLHQuZGltZW5zaW9uPW07dmFyIHk9TGUuYWxsb2NUeXBlKHQuZHR5cGUscCptKTtmdCh5LGUuZGF0YSxwLG0sdixnLGQpLG8odCx5LHIpLGE/dC5wZXJzaXN0ZW50RGF0YT15OkxlLmZyZWVUeXBlKHkpfWVsc2UgZGUucmFpc2UoImludmFsaWQgYnVmZmVyIGRhdGEiKX1mdW5jdGlvbiBsKHIpe2UuYnVmZmVyQ291bnQtLTt2YXIgbj1yLmJ1ZmZlcjtkZShuLCJidWZmZXIgbXVzdCBub3QgYmUgZGVsZXRlZCBhbHJlYWR5IiksdC5kZWxldGVCdWZmZXIobiksci5idWZmZXI9bnVsbCxkZWxldGUgaFtyLmlkXX1mdW5jdGlvbiBjKGksYSxvLGMpe2Z1bmN0aW9uIHUoZSl7dmFyIG49T2UsaT1udWxsLGE9MCxvPTAsbD0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxRdChlKXx8WihlKT9pPWU6Im51bWJlciI9PXR5cGVvZiBlP2E9MHxlOmUmJihkZS50eXBlKGUsIm9iamVjdCIsImJ1ZmZlciBhcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIGEgbnVtYmVyIG9yIGFuIGFycmF5IiksImRhdGEiaW4gZSYmKGRlKG51bGw9PT1pfHxBcnJheS5pc0FycmF5KGkpfHxRdChpKXx8WihpKSwiaW52YWxpZCBkYXRhIGZvciBidWZmZXIiKSxpPWUuZGF0YSksInVzYWdlImluIGUmJihkZS5wYXJhbWV0ZXIoZS51c2FnZSxEZSwiaW52YWxpZCBidWZmZXIgdXNhZ2UiKSxuPURlW2UudXNhZ2VdKSwidHlwZSJpbiBlJiYoZGUucGFyYW1ldGVyKGUudHlwZSxJZSwiaW52YWxpZCBidWZmZXIgdHlwZSIpLG89SWVbZS50eXBlXSksImRpbWVuc2lvbiJpbiBlJiYoZGUudHlwZShlLmRpbWVuc2lvbiwibnVtYmVyIiwiaW52YWxpZCBkaW1lbnNpb24iKSxsPTB8ZS5kaW1lbnNpb24pLCJsZW5ndGgiaW4gZSYmKGRlLm5uaShhLCJidWZmZXIgbGVuZ3RoIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiksYT0wfGUubGVuZ3RoKSkscC5iaW5kKCksaT9zKHAsaSxuLG8sbCxjKToodC5idWZmZXJEYXRhKHAudHlwZSxhLG4pLHAuZHR5cGU9b3x8RmUscC51c2FnZT1uLHAuZGltZW5zaW9uPWwscC5ieXRlTGVuZ3RoPWEpLHIucHJvZmlsZSYmKHAuc3RhdHMuc2l6ZT1wLmJ5dGVMZW5ndGgqTmVbcC5kdHlwZV0pLHV9ZnVuY3Rpb24gZihlLHIpe2RlKHIrZS5ieXRlTGVuZ3RoPD1wLmJ5dGVMZW5ndGgsImludmFsaWQgYnVmZmVyIHN1YmRhdGEgY2FsbCwgYnVmZmVyIGlzIHRvbyBzbWFsbC4gIENhbid0IHdyaXRlIGRhdGEgb2Ygc2l6ZSAiK2UuYnl0ZUxlbmd0aCsiIHN0YXJ0aW5nIGZyb20gb2Zmc2V0ICIrcisiIHRvIGEgYnVmZmVyIG9mIHNpemUgIitwLmJ5dGVMZW5ndGgpLHQuYnVmZmVyU3ViRGF0YShwLnR5cGUscixlKX1mdW5jdGlvbiBkKHQsZSl7dmFyIHIsbj0wfChlfHwwKTtpZihwLmJpbmQoKSxBcnJheS5pc0FycmF5KHQpKXtpZih0Lmxlbmd0aD4wKWlmKCJudW1iZXIiPT10eXBlb2YgdFswXSl7dmFyIGk9TGUuYWxsb2NUeXBlKHAuZHR5cGUsdC5sZW5ndGgpO3V0KGksdCksZihpLG4pLExlLmZyZWVUeXBlKGkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0WzBdKXx8UXQodFswXSkpe3I9emUodCk7dmFyIGE9UGUodCxyLHAuZHR5cGUpO2YoYSxuKSxMZS5mcmVlVHlwZShhKX1lbHNlIGRlLnJhaXNlKCJpbnZhbGlkIGJ1ZmZlciBkYXRhIil9ZWxzZSBpZihRdCh0KSlmKHQsbik7ZWxzZSBpZihaKHQpKXtyPXQuc2hhcGU7dmFyIG89dC5zdHJpZGUscz0wLGw9MCxjPTAsaD0wOzE9PT1yLmxlbmd0aD8ocz1yWzBdLGw9MSxjPW9bMF0saD0wKToyPT09ci5sZW5ndGg/KHM9clswXSxsPXJbMV0sYz1vWzBdLGg9b1sxXSk6ZGUucmFpc2UoImludmFsaWQgc2hhcGUiKTt2YXIgZD1BcnJheS5pc0FycmF5KHQuZGF0YSk/cC5kdHlwZTpjdCh0LmRhdGEpLG09TGUuYWxsb2NUeXBlKGQscypsKTtmdChtLHQuZGF0YSxzLGwsYyxoLHQub2Zmc2V0KSxmKG0sbiksTGUuZnJlZVR5cGUobSl9ZWxzZSBkZS5yYWlzZSgiaW52YWxpZCBkYXRhIGZvciBidWZmZXIgc3ViZGF0YSIpO3JldHVybiB1fWUuYnVmZmVyQ291bnQrKzt2YXIgcD1uZXcgbihhKTtyZXR1cm4gaFtwLmlkXT1wLG98fHUoaSksdS5fcmVnbFR5cGU9ImJ1ZmZlciIsdS5fYnVmZmVyPXAsdS5zdWJkYXRhPWQsci5wcm9maWxlJiYodS5zdGF0cz1wLnN0YXRzKSx1LmRlc3Ryb3k9ZnVuY3Rpb24oKXtsKHApfSx1fWZ1bmN0aW9uIHUoKXt4ZShoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KX12YXIgZj0wLGg9e307bi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7bCh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMoaCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1oW2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpjLGNyZWF0ZVN0cmVhbTppLGRlc3Ryb3lTdHJlYW06YSxjbGVhcjpmdW5jdGlvbigpe3hlKGgpLmZvckVhY2gobCksZC5mb3JFYWNoKGwpfSxnZXRCdWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX2J1ZmZlciBpbnN0YW5jZW9mIG4/dC5fYnVmZmVyOm51bGx9LHJlc3RvcmU6dSxfaW5pdEJ1ZmZlcjpzfX1mdW5jdGlvbiBkdCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9ZisrLHVbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9SGUsdGhpcy52ZXJ0Q291bnQ9MCx0aGlzLnR5cGU9MH1mdW5jdGlvbiBhKHQpe3ZhciBlPWQucG9wKCk7cmV0dXJuIGV8fChlPW5ldyBpKHIuY3JlYXRlKG51bGwsSmUsITAsITEpLl9idWZmZXIpKSxzKGUsdCxLZSwtMSwtMSwwLDApLGV9ZnVuY3Rpb24gbyh0KXtkLnB1c2godCl9ZnVuY3Rpb24gcyhuLGksYSxvLHMsbCxjKXtpZihuLmJ1ZmZlci5iaW5kKCksaSl7dmFyIHU9YztjfHxRdChpKSYmKCFaKGkpfHxRdChpLmRhdGEpKXx8KHU9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50P1plOlhlKSxyLl9pbml0QnVmZmVyKG4uYnVmZmVyLGksYSx1LDMpfWVsc2UgdC5idWZmZXJEYXRhKEplLGwsYSksbi5idWZmZXIuZHR5cGU9Znx8R2Usbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWw7dmFyIGY9YztpZighYyl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIEdlOmNhc2UgcWU6Zj1HZTticmVhaztjYXNlIFhlOmNhc2UgWWU6Zj1YZTticmVhaztjYXNlIFplOmNhc2UgV2U6Zj1aZTticmVhaztkZWZhdWx0OmRlLnJhaXNlKCJ1bnN1cHBvcnRlZCB0eXBlIGZvciBlbGVtZW50IGFycmF5Iil9bi5idWZmZXIuZHR5cGU9Zn1uLnR5cGU9ZixkZShmIT09WmV8fCEhZS5vZXNfZWxlbWVudF9pbmRleF91aW50LCIzMiBiaXQgZWxlbWVudCBidWZmZXJzIG5vdCBzdXBwb3J0ZWQsIGVuYWJsZSBvZXNfZWxlbWVudF9pbmRleF91aW50IGZpcnN0Iik7dmFyIGg9cztoPDAmJihoPW4uYnVmZmVyLmJ5dGVMZW5ndGgsZj09PVhlP2g+Pj0xOmY9PT1aZSYmKGg+Pj0yKSksbi52ZXJ0Q291bnQ9aDt2YXIgZD1vO2lmKG88MCl7ZD1IZTt2YXIgcD1uLmJ1ZmZlci5kaW1lbnNpb247MT09PXAmJihkPVVlKSwyPT09cCYmKGQ9VmUpLDM9PT1wJiYoZD1IZSl9bi5wcmltVHlwZT1kfWZ1bmN0aW9uIGwodCl7bi5lbGVtZW50c0NvdW50LS0sZGUobnVsbCE9PXQuYnVmZmVyLCJtdXN0IG5vdCBkb3VibGUgZGVzdHJveSBlbGVtZW50cyIpLGRlbGV0ZSB1W3QuaWRdLHQuYnVmZmVyLmRlc3Ryb3koKSx0LmJ1ZmZlcj1udWxsfWZ1bmN0aW9uIGModCxlKXtmdW5jdGlvbiBhKHQpe2lmKHQpaWYoIm51bWJlciI9PXR5cGVvZiB0KW8odCksYy5wcmltVHlwZT1IZSxjLnZlcnRDb3VudD0wfHQsYy50eXBlPUdlO2Vsc2V7dmFyIGU9bnVsbCxyPVFlLG49LTEsaT0tMSxsPTAsdT0wO0FycmF5LmlzQXJyYXkodCl8fFF0KHQpfHxaKHQpP2U9dDooZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZWxlbWVudHMiKSwiZGF0YSJpbiB0JiYoZT10LmRhdGEsZGUoQXJyYXkuaXNBcnJheShlKXx8UXQoZSl8fFooZSksImludmFsaWQgZGF0YSBmb3IgZWxlbWVudCBidWZmZXIiKSksInVzYWdlImluIHQmJihkZS5wYXJhbWV0ZXIodC51c2FnZSxEZSwiaW52YWxpZCBlbGVtZW50IGJ1ZmZlciB1c2FnZSIpLHI9RGVbdC51c2FnZV0pLCJwcmltaXRpdmUiaW4gdCYmKGRlLnBhcmFtZXRlcih0LnByaW1pdGl2ZSxCZSwiaW52YWxpZCBlbGVtZW50IGJ1ZmZlciBwcmltaXRpdmUiKSxuPUJlW3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihkZSgibnVtYmVyIj09dHlwZW9mIHQuY291bnQmJnQuY291bnQ+PTAsImludmFsaWQgdmVydGV4IGNvdW50IGZvciBlbGVtZW50cyIpLGk9MHx0LmNvdW50KSwidHlwZSJpbiB0JiYoZGUucGFyYW1ldGVyKHQudHlwZSxoLCJpbnZhbGlkIGJ1ZmZlciB0eXBlIiksdT1oW3QudHlwZV0pLCJsZW5ndGgiaW4gdD9sPTB8dC5sZW5ndGg6KGw9aSx1PT09WGV8fHU9PT1ZZT9sKj0yOnUhPT1aZSYmdSE9PVdlfHwobCo9NCkpKSxzKGMsZSxyLG4saSxsLHUpfWVsc2UgbygpLGMucHJpbVR5cGU9SGUsYy52ZXJ0Q291bnQ9MCxjLnR5cGU9R2U7cmV0dXJuIGF9dmFyIG89ci5jcmVhdGUobnVsbCxKZSwhMCksYz1uZXcgaShvLl9idWZmZXIpO3JldHVybiBuLmVsZW1lbnRzQ291bnQrKyxhKHQpLGEuX3JlZ2xUeXBlPSJlbGVtZW50cyIsYS5fZWxlbWVudHM9YyxhLnN1YmRhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5zdWJkYXRhKHQsZSksYX0sYS5kZXN0cm95PWZ1bmN0aW9uKCl7bChjKX0sYX12YXIgdT17fSxmPTAsaD17dWludDg6R2UsdWludDE2OlhlfTtlLm9lc19lbGVtZW50X2luZGV4X3VpbnQmJihoLnVpbnQzMj1aZSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGQ9W107cmV0dXJue2NyZWF0ZTpjLGNyZWF0ZVN0cmVhbTphLGRlc3Ryb3lTdHJlYW06byxnZXRFbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5fZWxlbWVudHMgaW5zdGFuY2VvZiBpP3QuX2VsZW1lbnRzOm51bGx9LGNsZWFyOmZ1bmN0aW9uKCl7eGUodSkuZm9yRWFjaChsKX19fWZ1bmN0aW9uIHB0KHQpe2Zvcih2YXIgZT1MZS5hbGxvY1R5cGUoZXIsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYodFtyXT09PTEvMCllW3JdPTMxNzQ0O2Vsc2UgaWYodFtyXT09PS0oMS8wKSllW3JdPTY0NTEyO2Vsc2V7JGVbMF09dFtyXTt2YXIgbj10clswXSxpPW4+Pj4zMTw8MTUsYT0objw8MT4+PjI0KS0xMjcsbz1uPj4xMyYxMDIzO2lmKGE8LTI0KWVbcl09aTtlbHNlIGlmKGE8LTE0KXt2YXIgcz0tMTQtYTtlW3JdPWkrKG8rMTAyND4+cyl9ZWxzZSBlW3JdPWE+MTU/aSszMTc0NDppKyhhKzE1PDwxMCkrb31yZXR1cm4gZX1mdW5jdGlvbiBtdCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8UXQodCl9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIltvYmplY3QgIit0KyJdIn1mdW5jdGlvbiBndCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKDA9PT10Lmxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0WzBdKX1mdW5jdGlvbiB5dCh0KXtyZXR1cm4hIUFycmF5LmlzQXJyYXkodCkmJiEoMD09PXQubGVuZ3RofHwhbXQodFswXSkpfWZ1bmN0aW9uIGJ0KHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24geHQodCl7cmV0dXJuIGJ0KHQpPT09ZG59ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGJ0KHQpPT09cG59ZnVuY3Rpb24gd3QodCl7cmV0dXJuIGJ0KHQpPT09bW59ZnVuY3Rpb24gTXQodCl7cmV0dXJuIGJ0KHQpPT09dm59ZnVuY3Rpb24gVHQodCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9YnQodCk7cmV0dXJuIGduLmluZGV4T2YoZSk+PTB8fChndCh0KXx8eXQodCl8fFoodCkpfWZ1bmN0aW9uIGt0KHQpe3JldHVybiAwfEt0W09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KV19ZnVuY3Rpb24gQXQodCxlKXt2YXIgcj1lLmxlbmd0aDtzd2l0Y2godC50eXBlKXtjYXNlIE9yOmNhc2UgUnI6Y2FzZSBGcjpjYXNlIGpyOnZhciBuPUxlLmFsbG9jVHlwZSh0LnR5cGUscik7bi5zZXQoZSksdC5kYXRhPW47YnJlYWs7Y2FzZSB3cjp0LmRhdGE9cHQoZSk7YnJlYWs7ZGVmYXVsdDpkZS5yYWlzZSgidW5zdXBwb3J0ZWQgdGV4dHVyZSB0eXBlLCBtdXN0IHNwZWNpZnkgYSB0eXBlZCBhcnJheSIpfX1mdW5jdGlvbiBFdCh0LGUpe3JldHVybiBMZS5hbGxvY1R5cGUodC50eXBlPT09d3I/anI6dC50eXBlLGUpfWZ1bmN0aW9uIFN0KHQsZSl7dC50eXBlPT09d3I/KHQuZGF0YT1wdChlKSxMZS5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gTHQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz10LndpZHRoLHM9dC5oZWlnaHQsbD10LmNoYW5uZWxzLGM9bypzKmwsdT1FdCh0LGMpLGY9MCxoPTA7aDxzOysraClmb3IodmFyIGQ9MDtkPG87KytkKWZvcih2YXIgcD0wO3A8bDsrK3ApdVtmKytdPWVbcipkK24qaCtpKnArYV07U3QodCx1KX1mdW5jdGlvbiBDdCh0LGUscixuLGksYSl7dmFyIG87aWYobz12b2lkIDAhPT1iblt0XT9iblt0XTpoblt0XSp5bltlXSxhJiYobyo9NiksaSl7Zm9yKHZhciBzPTAsbD1yO2w+PTE7KXMrPW8qbCpsLGwvPTI7cmV0dXJuIHN9cmV0dXJuIG8qcipufWZ1bmN0aW9uIEl0KHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmludGVybmFsZm9ybWF0PW9yLHRoaXMuZm9ybWF0PW9yLHRoaXMudHlwZT1Pcix0aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmNoYW5uZWxzPTB9ZnVuY3Rpb24gbCh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIGModCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm4pe2lmKCJwcmVtdWx0aXBseUFscGhhImluIG4mJihkZS50eXBlKG4ucHJlbXVsdGlwbHlBbHBoYSwiYm9vbGVhbiIsImludmFsaWQgcHJlbXVsdGlwbHlBbHBoYSIpLHQucHJlbXVsdGlwbHlBbHBoYT1uLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBuJiYoZGUudHlwZShuLmZsaXBZLCJib29sZWFuIiwiaW52YWxpZCB0ZXh0dXJlIGZsaXAiKSx0LmZsaXBZPW4uZmxpcFkpLCJhbGlnbm1lbnQiaW4gbiYmKGRlLm9uZU9mKG4uYWxpZ25tZW50LFsxLDIsNCw4XSwiaW52YWxpZCB0ZXh0dXJlIHVucGFjayBhbGlnbm1lbnQiKSx0LnVucGFja0FsaWdubWVudD1uLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gbiYmKGRlLnBhcmFtZXRlcihuLmNvbG9yU3BhY2UsaiwiaW52YWxpZCBjb2xvclNwYWNlIiksdC5jb2xvclNwYWNlPWpbbi5jb2xvclNwYWNlXSksInR5cGUiaW4gbil7dmFyIGk9bi50eXBlO2RlKGUub2VzX3RleHR1cmVfZmxvYXR8fCEoImZsb2F0Ij09PWl8fCJmbG9hdDMyIj09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0fHwhKCJoYWxmIGZsb2F0Ij09PWl8fCJmbG9hdDE2Ij09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJ1aW50MTYiPT09aXx8InVpbnQzMiI9PT1pfHwiZGVwdGggc3RlbmNpbCI9PT1pKSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIoaSxOLCJpbnZhbGlkIHRleHR1cmUgdHlwZSIpLHQudHlwZT1OW2ldfXZhciBhPXQud2lkdGgsbz10LmhlaWdodCxzPXQuY2hhbm5lbHMsbD0hMTsic2hhcGUiaW4gbj8oZGUoQXJyYXkuaXNBcnJheShuLnNoYXBlKSYmbi5zaGFwZS5sZW5ndGg+PTIsInNoYXBlIG11c3QgYmUgYW4gYXJyYXkiKSxhPW4uc2hhcGVbMF0sbz1uLnNoYXBlWzFdLDM9PT1uLnNoYXBlLmxlbmd0aCYmKHM9bi5zaGFwZVsyXSxkZShzPjAmJnM8PTQsImludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzIiksbD0hMCksZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpLGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpOigicmFkaXVzImluIG4mJihhPW89bi5yYWRpdXMsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCByYWRpdXMiKSksIndpZHRoImluIG4mJihhPW4ud2lkdGgsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpKSwiaGVpZ2h0ImluIG4mJihvPW4uaGVpZ2h0LGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpLCJjaGFubmVscyJpbiBuJiYocz1uLmNoYW5uZWxzLGRlKHM+MCYmczw9NCwiaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMiKSxsPSEwKSksdC53aWR0aD0wfGEsdC5oZWlnaHQ9MHxvLHQuY2hhbm5lbHM9MHxzO3ZhciBjPSExO2lmKCJmb3JtYXQiaW4gbil7dmFyIHU9bi5mb3JtYXQ7ZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJkZXB0aCI9PT11fHwiZGVwdGggc3RlbmNpbCI9PT11KSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIodSxCLCJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7dmFyIGY9dC5pbnRlcm5hbGZvcm1hdD1CW3VdO3QuZm9ybWF0PUpbZl0sdSBpbiBOJiYoInR5cGUiaW4gbnx8KHQudHlwZT1OW3VdKSksdSBpbiBVJiYodC5jb21wcmVzc2VkPSEwKSxjPSEwfSFsJiZjP3QuY2hhbm5lbHM9aG5bdC5mb3JtYXRdOmwmJiFjP3QuY2hhbm5lbHMhPT1mblt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PWZuW3QuY2hhbm5lbHNdKTpjJiZsJiZkZSh0LmNoYW5uZWxzPT09aG5bdC5mb3JtYXRdLCJudW1iZXIgb2YgY2hhbm5lbHMgaW5jb25zaXN0ZW50IHdpdGggc3BlY2lmaWVkIGZvcm1hdCIpfX1mdW5jdGlvbiB1KGUpe3QucGl4ZWxTdG9yZWkoYW4sZS5mbGlwWSksdC5waXhlbFN0b3JlaShvbixlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoc24sZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKG5uLGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBmKCl7cy5jYWxsKHRoaXMpLHRoaXMueE9mZnNldD0wLHRoaXMueU9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIGgodCxlKXt2YXIgbj1udWxsO2lmKFR0KGUpP249ZTplJiYoZGUudHlwZShlLCJvYmplY3QiLCJpbnZhbGlkIHBpeGVsIGRhdGEgdHlwZSIpLGModCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxUdChlLmRhdGEpJiYobj1lLmRhdGEpKSxkZSghdC5jb21wcmVzc2VkfHxuIGluc3RhbmNlb2YgVWludDhBcnJheSwiY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5IiksZS5jb3B5KXtkZSghbiwiY2FuIG5vdCBzcGVjaWZ5IGNvcHkgYW5kIGRhdGEgZmllbGQgZm9yIHRoZSBzYW1lIHRleHR1cmUiKTt2YXIgYT1pLnZpZXdwb3J0V2lkdGgsbz1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8YS10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fG8tdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwLGRlKHQueE9mZnNldD49MCYmdC54T2Zmc2V0PGEmJnQueU9mZnNldD49MCYmdC55T2Zmc2V0PG8mJnQud2lkdGg+MCYmdC53aWR0aDw9YSYmdC5oZWlnaHQ+MCYmdC5oZWlnaHQ8PW8sImNvcHkgdGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiKX1lbHNlIGlmKG4pe2lmKFF0KG4pKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9biwidHlwZSJpbiBlfHx0LnR5cGUhPT1Pcnx8KHQudHlwZT1rdChuKSk7ZWxzZSBpZihndChuKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsQXQodCxuKSx0LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwO2Vsc2UgaWYoWihuKSl7dmFyIHM9bi5kYXRhO0FycmF5LmlzQXJyYXkocyl8fHQudHlwZSE9PU9yfHwodC50eXBlPWt0KHMpKTt2YXIgbCx1LGYsaCxkLHAsbT1uLnNoYXBlLHY9bi5zdHJpZGU7Mz09PW0ubGVuZ3RoPyhmPW1bMl0scD12WzJdKTooZGUoMj09PW0ubGVuZ3RoLCJpbnZhbGlkIG5kYXJyYXkgcGl4ZWwgZGF0YSwgbXVzdCBiZSAyIG9yIDNEIiksZj0xLHA9MSksbD1tWzBdLHU9bVsxXSxoPXZbMF0sZD12WzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1sLHQuaGVpZ2h0PXUsdC5jaGFubmVscz1mLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9Zm5bZl0sdC5uZWVkc0ZyZWU9ITAsTHQodCxzLGgsZCxwLG4ub2Zmc2V0KX1lbHNlIGlmKHh0KG4pfHxfdChuKSl4dChuKT90LmVsZW1lbnQ9bjp0LmVsZW1lbnQ9bi5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih3dChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4ubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PW4ubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihNdChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4udmlkZW9XaWR0aCx0LmhlaWdodD1uLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHl0KG4pKXt2YXIgZz10LndpZHRofHxuWzBdLmxlbmd0aCx5PXQuaGVpZ2h0fHxuLmxlbmd0aCxiPXQuY2hhbm5lbHM7Yj1tdChuWzBdWzBdKT9ifHxuWzBdWzBdLmxlbmd0aDpifHwxO2Zvcih2YXIgeD1DZS5zaGFwZShuKSxfPTEsdz0wO3c8eC5sZW5ndGg7Kyt3KV8qPXhbd107dmFyIE09RXQodCxfKTtDZS5mbGF0dGVuKG4seCwiIixNKSxTdCh0LE0pLHQuYWxpZ25tZW50PTEsdC53aWR0aD1nLHQuaGVpZ2h0PXksdC5jaGFubmVscz1iLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9Zm5bYl0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NDt0LnR5cGU9PT1qcj9kZShyLmV4dGVuc2lvbnMuaW5kZXhPZigib2VzX3RleHR1cmVfZmxvYXQiKT49MCwib2VzX3RleHR1cmVfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIik6dC50eXBlPT09d3ImJmRlKHIuZXh0ZW5zaW9ucy5pbmRleE9mKCJvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik+PTAsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIil9ZnVuY3Rpb24gZChlLHIsaSl7dmFyIGE9ZS5lbGVtZW50LG89ZS5kYXRhLHM9ZS5pbnRlcm5hbGZvcm1hdCxsPWUuZm9ybWF0LGM9ZS50eXBlLGY9ZS53aWR0aCxoPWUuaGVpZ2h0O3UoZSksYT90LnRleEltYWdlMkQocixpLGwsbCxjLGEpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHIsaSxzLGYsaCwwLG8pOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChyLGksbCxlLnhPZmZzZXQsZS55T2Zmc2V0LGYsaCwwKSk6dC50ZXhJbWFnZTJEKHIsaSxsLGYsaCwwLGwsYyxvKX1mdW5jdGlvbiBwKGUscixpLGEsbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLGM9ZS5pbnRlcm5hbGZvcm1hdCxmPWUuZm9ybWF0LGg9ZS50eXBlLGQ9ZS53aWR0aCxwPWUuaGVpZ2h0O3UoZSkscz90LnRleFN1YkltYWdlMkQocixvLGksYSxmLGgscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGksYSxjLGQscCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGksYSxlLnhPZmZzZXQsZS55T2Zmc2V0LGQscCkpOnQudGV4U3ViSW1hZ2UyRChyLG8saSxhLGQscCxmLGgsbCl9ZnVuY3Rpb24gbSgpe3JldHVybiBLLnBvcCgpfHxuZXcgZn1mdW5jdGlvbiB2KHQpe3QubmVlZHNGcmVlJiZMZS5mcmVlVHlwZSh0LmRhdGEpLGYuY2FsbCh0KSxLLnB1c2godCl9ZnVuY3Rpb24gZygpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT1tKCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9bnVsbDtpZihUdChlKSlyPXQuaW1hZ2VzWzBdPW0oKSxsKHIsdCksaChyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYoYyh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxpPTA7aTxuLmxlbmd0aDsrK2kpcj10LmltYWdlc1tpXT1tKCksbChyLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxoKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2Ugcj10LmltYWdlc1swXT1tKCksbChyLHQpLGgocixlKSx0Lm1pcG1hc2s9MTtsKHQsdC5pbWFnZXNbMF0pLCh0LmNvbXByZXNzZWQmJnQuaW50ZXJuYWxmb3JtYXQ9PT1Ncnx8dC5pbnRlcm5hbGZvcm1hdD09PVRyfHx0LmludGVybmFsZm9ybWF0PT09a3J8fHQuaW50ZXJuYWxmb3JtYXQ9PT1BcikmJmRlKHQud2lkdGglND09MCYmdC5oZWlnaHQlND09MCwiZm9yIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLCBtaXBtYXAgbGV2ZWwgMCBtdXN0IGhhdmUgd2lkdGggYW5kIGhlaWdodCB0aGF0IGFyZSBhIG11bHRpcGxlIG9mIDQiKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuaW1hZ2VzLG49MDtuPHIubGVuZ3RoOysrbil7aWYoIXJbbl0pcmV0dXJuO2QocltuXSxlLG4pfX1mdW5jdGlvbiBfKCl7dmFyIHQ9US5wb3AoKXx8bmV3IGc7cy5jYWxsKHQpLHQubWlwbWFzaz0wO2Zvcih2YXIgZT0wO2U8MTY7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJnYoZVtyXSksZVtyXT1udWxsO1EucHVzaCh0KX1mdW5jdGlvbiBNKCl7dGhpcy5taW5GaWx0ZXI9WXIsdGhpcy5tYWdGaWx0ZXI9WXIsdGhpcy53cmFwUz1Wcix0aGlzLndyYXBUPVZyLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyfWZ1bmN0aW9uIFQodCxlKXtpZigibWluImluIGUpe3ZhciBuPWUubWluO2RlLnBhcmFtZXRlcihuLEYpLHQubWluRmlsdGVyPUZbbl0sdW4uaW5kZXhPZih0Lm1pbkZpbHRlcik+PTAmJih0Lmdlbk1pcG1hcHM9ITApfWlmKCJtYWciaW4gZSl7dmFyIGk9ZS5tYWc7ZGUucGFyYW1ldGVyKGksUiksdC5tYWdGaWx0ZXI9UltpXX12YXIgYT10LndyYXBTLG89dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgcz1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBzPyhkZS5wYXJhbWV0ZXIocyxPKSxhPW89T1tzXSk6QXJyYXkuaXNBcnJheShzKSYmKGRlLnBhcmFtZXRlcihzWzBdLE8pLGRlLnBhcmFtZXRlcihzWzFdLE8pLGE9T1tzWzBdXSxvPU9bc1sxXV0pfWVsc2V7aWYoIndyYXBTImluIGUpe3ZhciBsPWUud3JhcFM7ZGUucGFyYW1ldGVyKGwsTyksYT1PW2xdfWlmKCJ3cmFwVCJpbiBlKXt2YXIgYz1lLndyYXBUO2RlLnBhcmFtZXRlcihjLE8pLG89T1tjXX19aWYodC53cmFwUz1hLHQud3JhcFQ9bywiYW5pc290cm9waWMiaW4gZSl7dmFyIHU9ZS5hbmlzb3Ryb3BpYwo7ZGUoIm51bWJlciI9PXR5cGVvZiB1JiZ1Pj0xJiZ1PD1yLm1heEFuaXNvdHJvcGljLCJhbmlzbyBzYW1wbGVzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAiKSx0LmFuaXNvdHJvcGljPWUuYW5pc290cm9waWN9aWYoIm1pcG1hcCJpbiBlKXt2YXIgZj0hMTtzd2l0Y2godHlwZW9mIGUubWlwbWFwKXtjYXNlInN0cmluZyI6ZGUucGFyYW1ldGVyKGUubWlwbWFwLHosImludmFsaWQgbWlwbWFwIGhpbnQiKSx0Lm1pcG1hcEhpbnQ9eltlLm1pcG1hcF0sdC5nZW5NaXBtYXBzPSEwLGY9ITA7YnJlYWs7Y2FzZSJib29sZWFuIjpmPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlIm9iamVjdCI6ZGUoQXJyYXkuaXNBcnJheShlLm1pcG1hcCksImludmFsaWQgbWlwbWFwIHR5cGUiKSx0Lmdlbk1pcG1hcHM9ITEsZj0hMDticmVhaztkZWZhdWx0OmRlLnJhaXNlKCJpbnZhbGlkIG1pcG1hcCB0eXBlIil9IWZ8fCJtaW4iaW4gZXx8KHQubWluRmlsdGVyPVdyKX19ZnVuY3Rpb24gayhyLG4pe3QudGV4UGFyYW1ldGVyaShuLEdyLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobixxcixyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sTnIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sQnIsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLHJuLHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludChRcixyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIEEoZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9b3IsdGhpcy5pZD0kKyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgTSxvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBFKGUpe3QuYWN0aXZlVGV4dHVyZShjbiksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFMoKXt2YXIgZT1ydFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKG5yLG51bGwpfWZ1bmN0aW9uIEwoZSl7dmFyIHI9ZS50ZXh0dXJlO2RlKHIsIm11c3Qgbm90IGRvdWJsZSBkZXN0cm95IHRleHR1cmUiKTt2YXIgbj1lLnVuaXQsaT1lLnRhcmdldDtuPj0wJiYodC5hY3RpdmVUZXh0dXJlKGNuK24pLHQuYmluZFRleHR1cmUoaSxudWxsKSxydFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgdHRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX1mdW5jdGlvbiBDKGUsbil7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPXUudGV4SW5mbztNLmNhbGwobik7dmFyIGE9XygpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD8ibnVtYmVyIj09dHlwZW9mIGU/eShhLDB8dCwwfGUpOnkoYSwwfHQsMHx0KTp0PyhkZS50eXBlKHQsIm9iamVjdCIsImludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wudGV4dHVyZSIpLFQobix0KSxiKGEsdCkpOnkoYSwxLDEpLG4uZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksdS5taXBtYXNrPWEubWlwbWFzayxsKHUsYSksZGUudGV4dHVyZTJEKG4sYSxyKSx1LmludGVybmFsZm9ybWF0PWEuaW50ZXJuYWxmb3JtYXQsaS53aWR0aD1hLndpZHRoLGkuaGVpZ2h0PWEuaGVpZ2h0LEUodSkseChhLG5yKSxrKG4sbnIpLFMoKSx3KGEpLG8ucHJvZmlsZSYmKHUuc3RhdHMuc2l6ZT1DdCh1LmludGVybmFsZm9ybWF0LHUudHlwZSxhLndpZHRoLGEuaGVpZ2h0LG4uZ2VuTWlwbWFwcywhMSkpLGkuZm9ybWF0PXFbdS5pbnRlcm5hbGZvcm1hdF0saS50eXBlPUdbdS50eXBlXSxpLm1hZz1ZW24ubWFnRmlsdGVyXSxpLm1pbj1YW24ubWluRmlsdGVyXSxpLndyYXBTPVdbbi53cmFwU10saS53cmFwVD1XW24ud3JhcFRdLGl9ZnVuY3Rpb24gcyh0LGUscixuKXtkZSghIXQsIm11c3Qgc3BlY2lmeSBpbWFnZSBkYXRhIik7dmFyIGE9MHxlLG89MHxyLHM9MHxuLGM9bSgpO3JldHVybiBsKGMsdSksYy53aWR0aD0wLGMuaGVpZ2h0PTAsaChjLHQpLGMud2lkdGg9Yy53aWR0aHx8KHUud2lkdGg+PnMpLWEsYy5oZWlnaHQ9Yy5oZWlnaHR8fCh1LmhlaWdodD4+cyktbyxkZSh1LnR5cGU9PT1jLnR5cGUmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJnUuaW50ZXJuYWxmb3JtYXQ9PT1jLmludGVybmFsZm9ybWF0LCJpbmNvbXBhdGlibGUgZm9ybWF0IGZvciB0ZXh0dXJlLnN1YmltYWdlIiksZGUoYT49MCYmbz49MCYmYStjLndpZHRoPD11LndpZHRoJiZvK2MuaGVpZ2h0PD11LmhlaWdodCwidGV4dHVyZS5zdWJpbWFnZSB3cml0ZSBvdXQgb2YgYm91bmRzIiksZGUodS5taXBtYXNrJjE8PHMsIm1pc3NpbmcgbWlwbWFwIGRhdGEiKSxkZShjLmRhdGF8fGMuZWxlbWVudHx8Yy5uZWVkc0NvcHksIm1pc3NpbmcgaW1hZ2UgZGF0YSIpLEUodSkscChjLG5yLGEsbyxzKSxTKCksdihjKSxpfWZ1bmN0aW9uIGMoZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47aWYobj09PXUud2lkdGgmJmE9PT11LmhlaWdodClyZXR1cm4gaTtpLndpZHRoPXUud2lkdGg9bixpLmhlaWdodD11LmhlaWdodD1hLEUodSk7Zm9yKHZhciBzPTA7dS5taXBtYXNrPj5zOysrcyl0LnRleEltYWdlMkQobnIscyx1LmZvcm1hdCxuPj5zLGE+PnMsMCx1LmZvcm1hdCx1LnR5cGUsbnVsbCk7cmV0dXJuIFMoKSxvLnByb2ZpbGUmJih1LnN0YXRzLnNpemU9Q3QodS5pbnRlcm5hbGZvcm1hdCx1LnR5cGUsbixhLCExLCExKSksaX12YXIgdT1uZXcgQShucik7cmV0dXJuIHR0W3UuaWRdPXUsYS50ZXh0dXJlQ291bnQrKyxpKGUsbiksaS5zdWJpbWFnZT1zLGkucmVzaXplPWMsaS5fcmVnbFR5cGU9InRleHR1cmUyZCIsaS5fdGV4dHVyZT11LG8ucHJvZmlsZSYmKGkuc3RhdHM9dS5zdGF0cyksaS5kZXN0cm95PWZ1bmN0aW9uKCl7dS5kZWNSZWYoKX0saX1mdW5jdGlvbiBJKGUsbixpLHMsdSxmKXtmdW5jdGlvbiBkKHQsZSxuLGksYSxzKXt2YXIgdSxmPUMudGV4SW5mbztmb3IoTS5jYWxsKGYpLHU9MDt1PDY7Kyt1KUlbdV09XygpO2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdClpZigib2JqZWN0Ij09dHlwZW9mIHQpaWYoZSliKElbMF0sdCksYihJWzFdLGUpLGIoSVsyXSxuKSxiKElbM10saSksYihJWzRdLGEpLGIoSVs1XSxzKTtlbHNlIGlmKFQoZix0KSxjKEMsdCksImZhY2VzImluIHQpe3ZhciBoPXQuZmFjZXM7Zm9yKGRlKEFycmF5LmlzQXJyYXkoaCkmJjY9PT1oLmxlbmd0aCwiY3ViZSBmYWNlcyBtdXN0IGJlIGEgbGVuZ3RoIDYgYXJyYXkiKSx1PTA7dTw2OysrdSlkZSgib2JqZWN0Ij09dHlwZW9mIGhbdV0mJiEhaFt1XSwiaW52YWxpZCBpbnB1dCBmb3IgY3ViZSBtYXAgZmFjZSIpLGwoSVt1XSxDKSxiKElbdV0saFt1XSl9ZWxzZSBmb3IodT0wO3U8NjsrK3UpYihJW3VdLHQpO2Vsc2UgZGUucmFpc2UoImludmFsaWQgYXJndW1lbnRzIHRvIGN1YmUgbWFwIik7ZWxzZXt2YXIgcD0wfHR8fDE7Zm9yKHU9MDt1PDY7Kyt1KXkoSVt1XSxwLHApfWZvcihsKEMsSVswXSksZi5nZW5NaXBtYXBzP0MubWlwbWFzaz0oSVswXS53aWR0aDw8MSktMTpDLm1pcG1hc2s9SVswXS5taXBtYXNrLGRlLnRleHR1cmVDdWJlKEMsZixJLHIpLEMuaW50ZXJuYWxmb3JtYXQ9SVswXS5pbnRlcm5hbGZvcm1hdCxkLndpZHRoPUlbMF0ud2lkdGgsZC5oZWlnaHQ9SVswXS5oZWlnaHQsRShDKSx1PTA7dTw2OysrdSl4KElbdV0sYXIrdSk7Zm9yKGsoZixpciksUygpLG8ucHJvZmlsZSYmKEMuc3RhdHMuc2l6ZT1DdChDLmludGVybmFsZm9ybWF0LEMudHlwZSxkLndpZHRoLGQuaGVpZ2h0LGYuZ2VuTWlwbWFwcywhMCkpLGQuZm9ybWF0PXFbQy5pbnRlcm5hbGZvcm1hdF0sZC50eXBlPUdbQy50eXBlXSxkLm1hZz1ZW2YubWFnRmlsdGVyXSxkLm1pbj1YW2YubWluRmlsdGVyXSxkLndyYXBTPVdbZi53cmFwU10sZC53cmFwVD1XW2Yud3JhcFRdLHU9MDt1PDY7Kyt1KXcoSVt1XSk7cmV0dXJuIGR9ZnVuY3Rpb24gZyh0LGUscixuLGkpe2RlKCEhZSwibXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEiKSxkZSgibnVtYmVyIj09dHlwZW9mIHQmJnQ9PT0oMHx0KSYmdD49MCYmdDw2LCJpbnZhbGlkIGZhY2UiKTt2YXIgYT0wfHIsbz0wfG4scz0wfGksYz1tKCk7cmV0dXJuIGwoYyxDKSxjLndpZHRoPTAsYy5oZWlnaHQ9MCxoKGMsZSksYy53aWR0aD1jLndpZHRofHwoQy53aWR0aD4+cyktYSxjLmhlaWdodD1jLmhlaWdodHx8KEMuaGVpZ2h0Pj5zKS1vLGRlKEMudHlwZT09PWMudHlwZSYmQy5mb3JtYXQ9PT1jLmZvcm1hdCYmQy5pbnRlcm5hbGZvcm1hdD09PWMuaW50ZXJuYWxmb3JtYXQsImluY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UiKSxkZShhPj0wJiZvPj0wJiZhK2Mud2lkdGg8PUMud2lkdGgmJm8rYy5oZWlnaHQ8PUMuaGVpZ2h0LCJ0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMiKSxkZShDLm1pcG1hc2smMTw8cywibWlzc2luZyBtaXBtYXAgZGF0YSIpLGRlKGMuZGF0YXx8Yy5lbGVtZW50fHxjLm5lZWRzQ29weSwibWlzc2luZyBpbWFnZSBkYXRhIiksRShDKSxwKGMsYXIrdCxhLG8scyksUygpLHYoYyksZH1mdW5jdGlvbiBMKGUpe3ZhciByPTB8ZTtpZihyIT09Qy53aWR0aCl7ZC53aWR0aD1DLndpZHRoPXIsZC5oZWlnaHQ9Qy5oZWlnaHQ9cixFKEMpO2Zvcih2YXIgbj0wO248NjsrK24pZm9yKHZhciBpPTA7Qy5taXBtYXNrPj5pOysraSl0LnRleEltYWdlMkQoYXIrbixpLEMuZm9ybWF0LHI+Pmkscj4+aSwwLEMuZm9ybWF0LEMudHlwZSxudWxsKTtyZXR1cm4gUygpLG8ucHJvZmlsZSYmKEMuc3RhdHMuc2l6ZT1DdChDLmludGVybmFsZm9ybWF0LEMudHlwZSxkLndpZHRoLGQuaGVpZ2h0LCExLCEwKSksZH19dmFyIEM9bmV3IEEoaXIpO3R0W0MuaWRdPUMsYS5jdWJlQ291bnQrKzt2YXIgST1uZXcgQXJyYXkoNik7cmV0dXJuIGQoZSxuLGkscyx1LGYpLGQuc3ViaW1hZ2U9ZyxkLnJlc2l6ZT1MLGQuX3JlZ2xUeXBlPSJ0ZXh0dXJlQ3ViZSIsZC5fdGV4dHVyZT1DLG8ucHJvZmlsZSYmKGQuc3RhdHM9Qy5zdGF0cyksZC5kZXN0cm95PWZ1bmN0aW9uKCl7Qy5kZWNSZWYoKX0sZH1mdW5jdGlvbiBEKCl7Zm9yKHZhciBlPTA7ZTxldDsrK2UpdC5hY3RpdmVUZXh0dXJlKGNuK2UpLHQuYmluZFRleHR1cmUobnIsbnVsbCkscnRbZV09bnVsbDt4ZSh0dCkuZm9yRWFjaChMKSxhLmN1YmVDb3VudD0wLGEudGV4dHVyZUNvdW50PTB9ZnVuY3Rpb24gUCgpe3hlKHR0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk7Zm9yKHZhciByPTA7cjwzMjsrK3IpaWYoMCE9KGUubWlwbWFzayYxPDxyKSlpZihlLnRhcmdldD09PW5yKXQudGV4SW1hZ2UyRChucixyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO2Vsc2UgZm9yKHZhciBuPTA7bjw2Oysrbil0LnRleEltYWdlMkQoYXIrbixyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO2soZS50ZXhJbmZvLGUudGFyZ2V0KX0pfXZhciB6PXsiZG9uJ3QgY2FyZSI6JHIsImRvbnQgY2FyZSI6JHIsbmljZTplbixmYXN0OnRufSxPPXtyZXBlYXQ6VXIsY2xhbXA6VnIsbWlycm9yOkhyfSxSPXtuZWFyZXN0OllyLGxpbmVhcjpYcn0sRj0kdCh7bWlwbWFwOktyLCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0IjpXciwibGluZWFyIG1pcG1hcCBuZWFyZXN0IjpaciwibmVhcmVzdCBtaXBtYXAgbGluZWFyIjpKciwibGluZWFyIG1pcG1hcCBsaW5lYXIiOktyfSxSKSxqPXtub25lOjAsYnJvd3Nlcjpsbn0sTj17dWludDg6T3IscmdiYTQ6cHIscmdiNTY1OnZyLCJyZ2I1IGExIjptcn0sQj17YWxwaGE6c3IsbHVtaW5hbmNlOmNyLCJsdW1pbmFuY2UgYWxwaGEiOnVyLHJnYjpscixyZ2JhOm9yLHJnYmE0OmZyLCJyZ2I1IGExIjpocixyZ2I1NjU6ZHJ9LFU9e307ZS5leHRfc3JnYiYmKEIuc3JnYj14cixCLnNyZ2JhPV9yKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYoTi5mbG9hdDMyPU4uZmxvYXQ9anIpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKE4uZmxvYXQxNj1OWyJoYWxmIGZsb2F0Il09d3IpLGUud2ViZ2xfZGVwdGhfdGV4dHVyZSYmKCR0KEIse2RlcHRoOnlyLCJkZXB0aCBzdGVuY2lsIjpicn0pLCR0KE4se3VpbnQxNjpScix1aW50MzI6RnIsImRlcHRoIHN0ZW5jaWwiOmdyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJiR0KFUseyJyZ2IgczN0YyBkeHQxIjpNciwicmdiYSBzM3RjIGR4dDEiOlRyLCJyZ2JhIHMzdGMgZHh0MyI6a3IsInJnYmEgczN0YyBkeHQ1IjpBcn0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyYmJHQoVSx7InJnYiBhdGMiOkVyLCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSI6U3IsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSI6THJ9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmJHQoVSx7InJnYiBwdnJ0YyA0YnBwdjEiOkNyLCJyZ2IgcHZydGMgMmJwcHYxIjpJciwicmdiYSBwdnJ0YyA0YnBwdjEiOkRyLCJyZ2JhIHB2cnRjIDJicHB2MSI6UHJ9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJiYoVVsicmdiIGV0YzEiXT16cik7dmFyIFY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIocnIpKTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPVVbdF07Vi5pbmRleE9mKGUpPj0wJiYoQlt0XT1lKX0pO3ZhciBIPU9iamVjdC5rZXlzKEIpO3IudGV4dHVyZUZvcm1hdHM9SDt2YXIgcT1bXTtPYmplY3Qua2V5cyhCKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUJbdF07cVtlXT10fSk7dmFyIEc9W107T2JqZWN0LmtleXMoTikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1OW3RdO0dbZV09dH0pO3ZhciBZPVtdO09iamVjdC5rZXlzKFIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Ult0XTtZW2VdPXR9KTt2YXIgWD1bXTtPYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUZbdF07WFtlXT10fSk7dmFyIFc9W107T2JqZWN0LmtleXMoTykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1PW3RdO1dbZV09dH0pO3ZhciBKPUgucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9QltlXTtyZXR1cm4gcj09PWNyfHxyPT09c3J8fHI9PT1jcnx8cj09PXVyfHxyPT09eXJ8fHI9PT1icj90W3JdPXI6cj09PWhyfHxlLmluZGV4T2YoInJnYmEiKT49MD90W3JdPW9yOnRbcl09bHIsdH0se30pLEs9W10sUT1bXSwkPTAsdHQ9e30sZXQ9ci5tYXhUZXh0dXJlVW5pdHMscnQ9QXJyYXkoZXQpLm1hcChmdW5jdGlvbigpe3JldHVybiBudWxsfSk7cmV0dXJuICR0KEEucHJvdG90eXBlLHtiaW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLmJpbmRDb3VudCs9MTt2YXIgcj1lLnVuaXQ7aWYocjwwKXtmb3IodmFyIG49MDtuPGV0Oysrbil7dmFyIGk9cnRbbl07aWYoaSl7aWYoaS5iaW5kQ291bnQ+MCljb250aW51ZTtpLnVuaXQ9LTF9cnRbbl09ZSxyPW47YnJlYWt9cj49ZXQmJmRlLnJhaXNlKCJpbnN1ZmZpY2llbnQgbnVtYmVyIG9mIHRleHR1cmUgdW5pdHMiKSxvLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPHIrMSYmKGEubWF4VGV4dHVyZVVuaXRzPXIrMSksZS51bml0PXIsdC5hY3RpdmVUZXh0dXJlKGNuK3IpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKX1yZXR1cm4gcn0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5iaW5kQ291bnQtPTF9LGRlY1JlZjpmdW5jdGlvbigpey0tdGhpcy5yZWZDb3VudDw9MCYmTCh0aGlzKX19KSxvLnByb2ZpbGUmJihhLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh0dCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz10dFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGUyRDpDLGNyZWF0ZUN1YmU6SSxjbGVhcjpELGdldFRleHR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHJlc3RvcmU6UH19ZnVuY3Rpb24gRHQodCxlLHIpe3JldHVybiB3blt0XSplKnJ9ZnVuY3Rpb24gUHQodCxlLHIsbixpLGEpe2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy50ZXh0dXJlPWUsdGhpcy5yZW5kZXJidWZmZXI9cjt2YXIgbj0wLGk9MDtlPyhuPWUud2lkdGgsaT1lLmhlaWdodCk6ciYmKG49ci53aWR0aCxpPXIuaGVpZ2h0KSx0aGlzLndpZHRoPW4sdGhpcy5oZWlnaHQ9aX1mdW5jdGlvbiBzKHQpe3QmJih0LnRleHR1cmUmJnQudGV4dHVyZS5fdGV4dHVyZS5kZWNSZWYoKSx0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5kZWNSZWYoKSl9ZnVuY3Rpb24gbCh0LGUscil7aWYodClpZih0LnRleHR1cmUpe3ZhciBuPXQudGV4dHVyZS5fdGV4dHVyZSxpPU1hdGgubWF4KDEsbi53aWR0aCksYT1NYXRoLm1heCgxLG4uaGVpZ2h0KTtkZShpPT09ZSYmYT09PXIsImluY29uc2lzdGVudCB3aWR0aC9oZWlnaHQgZm9yIHN1cHBsaWVkIHRleHR1cmUiKSxuLnJlZkNvdW50Kz0xfWVsc2V7dmFyIG89dC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlcjtkZShvLndpZHRoPT09ZSYmby5oZWlnaHQ9PT1yLCJpbmNvbnNpc3RlbnQgd2lkdGgvaGVpZ2h0IGZvciByZW5kZXJidWZmZXIiKSxvLnJlZkNvdW50Kz0xfX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKFRuLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihUbixlLGtuLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT1BbixyPW51bGwsbj1udWxsLGk9dDsib2JqZWN0Ij09dHlwZW9mIHQmJihpPXQuZGF0YSwidGFyZ2V0ImluIHQmJihlPTB8dC50YXJnZXQpKSxkZS50eXBlKGksImZ1bmN0aW9uIiwiaW52YWxpZCBhdHRhY2htZW50IGRhdGEiKTt2YXIgYT1pLl9yZWdsVHlwZTtyZXR1cm4idGV4dHVyZTJkIj09PWE/KHI9aSxkZShlPT09QW4pKToidGV4dHVyZUN1YmUiPT09YT8ocj1pLGRlKGU+PUVuJiZlPEVuKzYsImludmFsaWQgY3ViZSBtYXAgdGFyZ2V0IikpOiJyZW5kZXJidWZmZXIiPT09YT8obj1pLGU9a24pOmRlLnJhaXNlKCJpbnZhbGlkIHJlZ2wgb2JqZWN0IGZvciBhdHRhY2htZW50IiksbmV3IG8oZSxyLG4pfWZ1bmN0aW9uIGYodCxlLHIsYSxzKXtpZihyKXt2YXIgbD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphLHR5cGU6c30pO3JldHVybiBsLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oQW4sbCxudWxsKX12YXIgYz1pLmNyZWF0ZSh7d2lkdGg6dCxoZWlnaHQ6ZSxmb3JtYXQ6YX0pO3JldHVybiBjLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbyhrbixudWxsLGMpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBkKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUscikpfWZ1bmN0aW9uIHAoKXt0aGlzLmlkPWsrKyxBW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5jb2xvckF0dGFjaG1lbnRzPVtdLHRoaXMuZGVwdGhBdHRhY2htZW50PW51bGwsdGhpcy5zdGVuY2lsQXR0YWNobWVudD1udWxsLHRoaXMuZGVwdGhTdGVuY2lsQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIG0odCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gdihlKXt2YXIgcj1lLmZyYW1lYnVmZmVyO2RlKHIsIm11c3Qgbm90IGRvdWJsZSBkZXN0cm95IGZyYW1lYnVmZmVyIiksdC5kZWxldGVGcmFtZWJ1ZmZlcihyKSxlLmZyYW1lYnVmZmVyPW51bGwsYS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIEFbZS5pZF19ZnVuY3Rpb24gZyhlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcihUbixlLmZyYW1lYnVmZmVyKTt2YXIgaT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGkubGVuZ3RoOysrbiljKFNuK24saVtuXSk7Zm9yKG49aS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoVG4sU24rbixBbixudWxsLDApO3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoVG4sSW4sQW4sbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKFRuLExuLEFuLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRChUbixDbixBbixudWxsLDApLGMoTG4sZS5kZXB0aEF0dGFjaG1lbnQpLGMoQ24sZS5zdGVuY2lsQXR0YWNobWVudCksYyhJbixlLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpO3ZhciBhPXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhUbik7YSE9PURuJiZkZS5yYWlzZSgiZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkLCBzdGF0dXMgPSAiK1VuW2FdKSx0LmJpbmRGcmFtZWJ1ZmZlcihUbixfLm5leHQpLF8uY3VyPV8ubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LG4pe2Z1bmN0aW9uIGkodCxuKXt2YXIgYTtkZShfLm5leHQhPT1zLCJjYW4gbm90IHVwZGF0ZSBmcmFtZWJ1ZmZlciB3aGljaCBpcyBjdXJyZW50bHkgaW4gdXNlIik7dmFyIG89ZS53ZWJnbF9kcmF3X2J1ZmZlcnMsYz0wLGQ9MCxwPSEwLHY9ITAseT1udWxsLGI9ITAseD0icmdiYSIsaz0idWludDgiLEE9MSxFPW51bGwsUz1udWxsLEw9bnVsbCxDPSExO2lmKCJudW1iZXIiPT10eXBlb2YgdCljPTB8dCxkPTB8bnx8YztlbHNlIGlmKHQpe2RlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgZm9yIGZyYW1lYnVmZmVyIik7dmFyIEk9dDtpZigic2hhcGUiaW4gSSl7dmFyIEQ9SS5zaGFwZTtkZShBcnJheS5pc0FycmF5KEQpJiZELmxlbmd0aD49MiwiaW52YWxpZCBzaGFwZSBmb3IgZnJhbWVidWZmZXIiKSxjPURbMF0sZD1EWzFdfWVsc2UicmFkaXVzImluIEkmJihjPWQ9SS5yYWRpdXMpLCJ3aWR0aCJpbiBJJiYoYz1JLndpZHRoKSwiaGVpZ2h0ImluIEkmJihkPUkuaGVpZ2h0KTsoImNvbG9yImluIEl8fCJjb2xvcnMiaW4gSSkmJih5PUkuY29sb3J8fEkuY29sb3JzLEFycmF5LmlzQXJyYXkoeSkmJmRlKDE9PT15Lmxlbmd0aHx8bywibXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCIpKSx5fHwoImNvbG9yQ291bnQiaW4gSSYmKEE9MHxJLmNvbG9yQ291bnQsZGUoQT4wLCJpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCIpKSwiY29sb3JUZXh0dXJlImluIEkmJihiPSEhSS5jb2xvclRleHR1cmUseD0icmdiYTQiKSwiY29sb3JUeXBlImluIEkmJihrPUkuY29sb3JUeXBlLGI/KGRlKGUub2VzX3RleHR1cmVfZmxvYXR8fCEoImZsb2F0Ij09PWt8fCJmbG9hdDMyIj09PWspLCJ5b3UgbXVzdCBlbmFibGUgT0VTX3RleHR1cmVfZmxvYXQgaW4gb3JkZXIgdG8gdXNlIGZsb2F0aW5nIHBvaW50IGZyYW1lYnVmZmVyIG9iamVjdHMiKSxkZShlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXR8fCEoImhhbGYgZmxvYXQiPT09a3x8ImZsb2F0MTYiPT09ayksInlvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cyIpKToiaGFsZiBmbG9hdCI9PT1rfHwiZmxvYXQxNiI9PT1rPyhkZShlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCwieW91IG11c3QgZW5hYmxlIEVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCB0byB1c2UgMTYtYml0IHJlbmRlciBidWZmZXJzIikseD0icmdiYTE2ZiIpOiJmbG9hdCIhPT1rJiYiZmxvYXQzMiIhPT1rfHwoZGUoZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQsInlvdSBtdXN0IGVuYWJsZSBXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQgaW4gb3JkZXIgdG8gdXNlIDMyLWJpdCBmbG9hdGluZyBwb2ludCByZW5kZXJidWZmZXJzIikseD0icmdiYTMyZiIpLGRlLm9uZU9mKGssVCwiaW52YWxpZCBjb2xvciB0eXBlIikpLCJjb2xvckZvcm1hdCJpbiBJJiYoeD1JLmNvbG9yRm9ybWF0LHcuaW5kZXhPZih4KT49MD9iPSEwOk0uaW5kZXhPZih4KT49MD9iPSExOmI/ZGUub25lT2YoSS5jb2xvckZvcm1hdCx3LCJpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZSIpOmRlLm9uZU9mKEkuY29sb3JGb3JtYXQsTSwiaW52YWxpZCBjb2xvciBmb3JtYXQgZm9yIHJlbmRlcmJ1ZmZlciIpKSksKCJkZXB0aFRleHR1cmUiaW4gSXx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gSSkmJihDPSEoIUkuZGVwdGhUZXh0dXJlJiYhSS5kZXB0aFN0ZW5jaWxUZXh0dXJlKSxkZSghQ3x8ZS53ZWJnbF9kZXB0aF90ZXh0dXJlLCJ3ZWJnbF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIikpLCJkZXB0aCJpbiBJJiYoImJvb2xlYW4iPT10eXBlb2YgSS5kZXB0aD9wPUkuZGVwdGg6KEU9SS5kZXB0aCx2PSExKSksInN0ZW5jaWwiaW4gSSYmKCJib29sZWFuIj09dHlwZW9mIEkuc3RlbmNpbD92PUkuc3RlbmNpbDooUz1JLnN0ZW5jaWwscD0hMSkpLCJkZXB0aFN0ZW5jaWwiaW4gSSYmKCJib29sZWFuIj09dHlwZW9mIEkuZGVwdGhTdGVuY2lsP3A9dj1JLmRlcHRoU3RlbmNpbDooTD1JLmRlcHRoU3RlbmNpbCxwPSExLHY9ITEpKX1lbHNlIGM9ZD0xO3ZhciBQPW51bGwsej1udWxsLE89bnVsbCxSPW51bGw7aWYoQXJyYXkuaXNBcnJheSh5KSlQPXkubWFwKHUpO2Vsc2UgaWYoeSlQPVt1KHkpXTtlbHNlIGZvcihQPW5ldyBBcnJheShBKSxhPTA7YTxBOysrYSlQW2FdPWYoYyxkLGIseCxrKTtkZShlLndlYmdsX2RyYXdfYnVmZmVyc3x8UC5sZW5ndGg8PTEsInlvdSBtdXN0IGVuYWJsZSB0aGUgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgbXVsdGlwbGUgY29sb3IgYnVmZmVycy4iKSxkZShQLmxlbmd0aDw9ci5tYXhDb2xvckF0dGFjaG1lbnRzLCJ0b28gbWFueSBjb2xvciBhdHRhY2htZW50cywgbm90IHN1cHBvcnRlZCIpLGM9Y3x8UFswXS53aWR0aCxkPWR8fFBbMF0uaGVpZ2h0LEU/ej11KEUpOnAmJiF2JiYoej1mKGMsZCxDLCJkZXB0aCIsInVpbnQzMiIpKSxTP089dShTKTp2JiYhcCYmKE89ZihjLGQsITEsInN0ZW5jaWwiLCJ1aW50OCIpKSxMP1I9dShMKTohRSYmIVMmJnYmJnAmJihSPWYoYyxkLEMsImRlcHRoIHN0ZW5jaWwiLCJkZXB0aCBzdGVuY2lsIikpLGRlKCEhRSshIVMrISFMPD0xLCJpbnZhbGlkIGZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24sIGNhbiBzcGVjaWZ5IGV4YWN0bHkgb25lIGRlcHRoL3N0ZW5jaWwgYXR0YWNobWVudCIpO3ZhciBGPW51bGw7Zm9yKGE9MDthPFAubGVuZ3RoOysrYSlpZihsKFBbYV0sYyxkKSxkZSghUFthXXx8UFthXS50ZXh0dXJlJiZ6bi5pbmRleE9mKFBbYV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXQpPj0wfHxQW2FdLnJlbmRlcmJ1ZmZlciYmQm4uaW5kZXhPZihQW2FdLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCk+PTAsImZyYW1lYnVmZmVyIGNvbG9yIGF0dGFjaG1lbnQgIithKyIgaXMgaW52YWxpZCIpLFBbYV0mJlBbYV0udGV4dHVyZSl7dmFyIGo9T25bUFthXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qUm5bUFthXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdO251bGw9PT1GP0Y9ajpkZShGPT09aiwiYWxsIGNvbG9yIGF0dGFjaG1lbnRzIG11Y2ggaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwuIil9cmV0dXJuIGwoeixjLGQpLGRlKCF6fHx6LnRleHR1cmUmJnoudGV4dHVyZS5fdGV4dHVyZS5mb3JtYXQ9PT1Qbnx8ei5yZW5kZXJidWZmZXImJnoucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0PT09Rm4sImludmFsaWQgZGVwdGggYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgb2JqZWN0IiksbChPLGMsZCksZGUoIU98fE8ucmVuZGVyYnVmZmVyJiZPLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdD09PWpuLCJpbnZhbGlkIHN0ZW5jaWwgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgb2JqZWN0IiksbChSLGMsZCksZGUoIVJ8fFIudGV4dHVyZSYmUi50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdD09PU5ufHxSLnJlbmRlcmJ1ZmZlciYmUi5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQ9PT1ObiwiaW52YWxpZCBkZXB0aC1zdGVuY2lsIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCIpLG0ocykscy53aWR0aD1jLHMuaGVpZ2h0PWQscy5jb2xvckF0dGFjaG1lbnRzPVAscy5kZXB0aEF0dGFjaG1lbnQ9eixzLnN0ZW5jaWxBdHRhY2htZW50PU8scy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PVIsaS5jb2xvcj1QLm1hcChoKSxpLmRlcHRoPWgoeiksaS5zdGVuY2lsPWgoTyksaS5kZXB0aFN0ZW5jaWw9aChSKSxpLndpZHRoPXMud2lkdGgsaS5oZWlnaHQ9cy5oZWlnaHQsZyhzKSxpfWZ1bmN0aW9uIG8odCxlKXtkZShfLm5leHQhPT1zLCJjYW4gbm90IHJlc2l6ZSBhIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UiKTt2YXIgcj0wfHQsbj0wfGV8fHI7aWYocj09PXMud2lkdGgmJm49PT1zLmhlaWdodClyZXR1cm4gaTtmb3IodmFyIGE9cy5jb2xvckF0dGFjaG1lbnRzLG89MDtvPGEubGVuZ3RoOysrbylkKGFbb10scixuKTtyZXR1cm4gZChzLmRlcHRoQXR0YWNobWVudCxyLG4pLGQocy5zdGVuY2lsQXR0YWNobWVudCxyLG4pLGQocy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LHIsbikscy53aWR0aD1pLndpZHRoPXIscy5oZWlnaHQ9aS5oZWlnaHQ9bixnKHMpLGl9dmFyIHM9bmV3IHA7cmV0dXJuIGEuZnJhbWVidWZmZXJDb3VudCsrLGkodCxuKSwkdChpLHtyZXNpemU6byxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyIixfZnJhbWVidWZmZXI6cyxkZXN0cm95OmZ1bmN0aW9uKCl7dihzKSxtKHMpfSx1c2U6ZnVuY3Rpb24odCl7Xy5zZXRGQk8oe2ZyYW1lYnVmZmVyOml9LHQpfX0pfWZ1bmN0aW9uIGIodCl7ZnVuY3Rpb24gaSh0KXt2YXIgcjtkZShvLmluZGV4T2YoXy5uZXh0KTwwLCJjYW4gbm90IHVwZGF0ZSBmcmFtZWJ1ZmZlciB3aGljaCBpcyBjdXJyZW50bHkgaW4gdXNlIik7dmFyIGE9ZS53ZWJnbF9kcmF3X2J1ZmZlcnMscz17Y29sb3I6bnVsbH0sbD0wLGM9bnVsbCx1PSJyZ2JhIixmPSJ1aW50OCIsaD0xO2lmKCJudW1iZXIiPT10eXBlb2YgdClsPTB8dDtlbHNlIGlmKHQpe2RlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgZm9yIGZyYW1lYnVmZmVyIik7dmFyIGQ9dDtpZigic2hhcGUiaW4gZCl7dmFyIHA9ZC5zaGFwZTtkZShBcnJheS5pc0FycmF5KHApJiZwLmxlbmd0aD49MiwiaW52YWxpZCBzaGFwZSBmb3IgZnJhbWVidWZmZXIiKSxkZShwWzBdPT09cFsxXSwiY3ViZSBmcmFtZWJ1ZmZlciBtdXN0IGJlIHNxdWFyZSIpLGw9cFswXX1lbHNlInJhZGl1cyJpbiBkJiYobD0wfGQucmFkaXVzKSwid2lkdGgiaW4gZD8obD0wfGQud2lkdGgsImhlaWdodCJpbiBkJiZkZShkLmhlaWdodD09PWwsIm11c3QgYmUgc3F1YXJlIikpOiJoZWlnaHQiaW4gZCYmKGw9MHxkLmhlaWdodCk7KCJjb2xvciJpbiBkfHwiY29sb3JzImluIGQpJiYoYz1kLmNvbG9yfHxkLmNvbG9ycyxBcnJheS5pc0FycmF5KGMpJiZkZSgxPT09Yy5sZW5ndGh8fGEsIm11bHRpcGxlIHJlbmRlciB0YXJnZXRzIG5vdCBzdXBwb3J0ZWQiKSksY3x8KCJjb2xvckNvdW50ImluIGQmJihoPTB8ZC5jb2xvckNvdW50LGRlKGg+MCwiaW52YWxpZCBjb2xvciBidWZmZXIgY291bnQiKSksImNvbG9yVHlwZSJpbiBkJiYoZGUub25lT2YoZC5jb2xvclR5cGUsVCwiaW52YWxpZCBjb2xvciB0eXBlIiksZj1kLmNvbG9yVHlwZSksImNvbG9yRm9ybWF0ImluIGQmJih1PWQuY29sb3JGb3JtYXQsZGUub25lT2YoZC5jb2xvckZvcm1hdCx3LCJpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZSIpKSksImRlcHRoImluIGQmJihzLmRlcHRoPWQuZGVwdGgpLCJzdGVuY2lsImluIGQmJihzLnN0ZW5jaWw9ZC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIGQmJihzLmRlcHRoU3RlbmNpbD1kLmRlcHRoU3RlbmNpbCl9ZWxzZSBsPTE7dmFyIG07aWYoYylpZihBcnJheS5pc0FycmF5KGMpKWZvcihtPVtdLHI9MDtyPGMubGVuZ3RoOysrciltW3JdPWNbcl07ZWxzZSBtPVtjXTtlbHNle209QXJyYXkoaCk7dmFyIHY9e3JhZGl1czpsLGZvcm1hdDp1LHR5cGU6Zn07Zm9yKHI9MDtyPGg7KytyKW1bcl09bi5jcmVhdGVDdWJlKHYpfWZvcihzLmNvbG9yPUFycmF5KG0ubGVuZ3RoKSxyPTA7cjxtLmxlbmd0aDsrK3Ipe3ZhciBnPW1bcl07ZGUoImZ1bmN0aW9uIj09dHlwZW9mIGcmJiJ0ZXh0dXJlQ3ViZSI9PT1nLl9yZWdsVHlwZSwiaW52YWxpZCBjdWJlIG1hcCIpLGw9bHx8Zy53aWR0aCxkZShnLndpZHRoPT09bCYmZy5oZWlnaHQ9PT1sLCJpbnZhbGlkIGN1YmUgbWFwIHNoYXBlIikscy5jb2xvcltyXT17dGFyZ2V0OkVuLGRhdGE6bVtyXX19Zm9yKHI9MDtyPDY7KytyKXtmb3IodmFyIGI9MDtiPG0ubGVuZ3RoOysrYilzLmNvbG9yW2JdLnRhcmdldD1FbityO3I+MCYmKHMuZGVwdGg9b1swXS5kZXB0aCxzLnN0ZW5jaWw9b1swXS5zdGVuY2lsLHMuZGVwdGhTdGVuY2lsPW9bMF0uZGVwdGhTdGVuY2lsKSxvW3JdP29bcl0ocyk6b1tyXT15KHMpfXJldHVybiAkdChpLHt3aWR0aDpsLGhlaWdodDpsLGNvbG9yOm19KX1mdW5jdGlvbiBhKHQpe3ZhciBlLG49MHx0O2lmKGRlKG4+MCYmbjw9ci5tYXhDdWJlTWFwU2l6ZSwiaW52YWxpZCByYWRpdXMgZm9yIGN1YmUgZmJvIiksbj09PWkud2lkdGgpcmV0dXJuIGk7dmFyIGE9aS5jb2xvcjtmb3IoZT0wO2U8YS5sZW5ndGg7KytlKWFbZV0ucmVzaXplKG4pO2ZvcihlPTA7ZTw2OysrZSlvW2VdLnJlc2l6ZShuKTtyZXR1cm4gaS53aWR0aD1pLmhlaWdodD1uLGl9dmFyIG89QXJyYXkoNik7cmV0dXJuIGkodCksJHQoaSx7ZmFjZXM6byxyZXNpemU6YSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyQ3ViZSIsZGVzdHJveTpmdW5jdGlvbigpe28uZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfX0pfWZ1bmN0aW9uIHgoKXt4ZShBKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGcoZSl9KX12YXIgXz17Y3VyOm51bGwsbmV4dDpudWxsLGRpcnR5OiExLHNldEZCTzpudWxsfSx3PVsicmdiYSJdLE09WyJyZ2JhNCIsInJnYjU2NSIsInJnYjUgYTEiXTtlLmV4dF9zcmdiJiZNLnB1c2goInNyZ2JhIiksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJk0ucHVzaCgicmdiYTE2ZiIsInJnYjE2ZiIpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiZNLnB1c2goInJnYmEzMmYiKTt2YXIgVD1bInVpbnQ4Il07ZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiZULnB1c2goImhhbGYgZmxvYXQiLCJmbG9hdDE2IiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmVC5wdXNoKCJmbG9hdCIsImZsb2F0MzIiKTt2YXIgaz0wLEE9e307cmV0dXJuICR0KF8se2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUpe3ZhciBlPXQuX2ZyYW1lYnVmZmVyO2lmKGUgaW5zdGFuY2VvZiBwKXJldHVybiBlfXJldHVybiBudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmIsY2xlYXI6ZnVuY3Rpb24oKXt4ZShBKS5mb3JFYWNoKHYpfSxyZXN0b3JlOnh9KX1mdW5jdGlvbiB6dCgpe3RoaXMuc3RhdGU9MCx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLno9MCx0aGlzLnc9MCx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuc2l6ZT0wLHRoaXMubm9ybWFsaXplZD0hMSx0aGlzLnR5cGU9Vm4sdGhpcy5vZmZzZXQ9MCx0aGlzLnN0cmlkZT0wLHRoaXMuZGl2aXNvcj0wfWZ1bmN0aW9uIE90KHQsZSxyLG4saSl7Zm9yKHZhciBhPXIubWF4QXR0cmlidXRlcyxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPW5ldyB6dDtyZXR1cm57UmVjb3JkOnp0LHNjb3BlOnt9LHN0YXRlOm99fWZ1bmN0aW9uIFJ0KHQsZSxyLG4pe2Z1bmN0aW9uIGkodCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy5pZD1lLHRoaXMubG9jYXRpb249cix0aGlzLmluZm89bn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS5pZD09PWUuaWQpcmV0dXJuIHZvaWQodFtyXS5sb2NhdGlvbj1lLmxvY2F0aW9uKTt0LnB1c2goZSl9ZnVuY3Rpb24gbyhyLG4saSl7dmFyIGE9cj09PUhuP3U6ZixvPWFbbl07aWYoIW8pe3ZhciBzPWUuc3RyKG4pO289dC5jcmVhdGVTaGFkZXIociksdC5zaGFkZXJTb3VyY2UobyxzKSx0LmNvbXBpbGVTaGFkZXIobyksZGUuc2hhZGVyRXJyb3IodCxvLHMscixpKSxhW25dPW99cmV0dXJuIG99ZnVuY3Rpb24gcyh0LGUpe3RoaXMuaWQ9cCsrLHRoaXMuZnJhZ0lkPXQsdGhpcy52ZXJ0SWQ9ZSx0aGlzLnByb2dyYW09bnVsbCx0aGlzLnVuaWZvcm1zPVtdLHRoaXMuYXR0cmlidXRlcz1bXSxuLnByb2ZpbGUmJih0aGlzLnN0YXRzPXt1bmlmb3Jtc0NvdW50OjAsYXR0cmlidXRlc0NvdW50OjB9KX1mdW5jdGlvbiBsKHIscyl7dmFyIGwsYyx1PW8oSG4sci5mcmFnSWQpLGY9byhxbixyLnZlcnRJZCksaD1yLnByb2dyYW09dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIoaCx1KSx0LmF0dGFjaFNoYWRlcihoLGYpLHQubGlua1Byb2dyYW0oaCksZGUubGlua0Vycm9yKHQsaCxlLnN0cihyLmZyYWdJZCksZS5zdHIoci52ZXJ0SWQpLHMpO3ZhciBkPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihoLEduKTtuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9ZCk7dmFyIHA9ci51bmlmb3Jtcztmb3IobD0wO2w8ZDsrK2wpaWYoYz10LmdldEFjdGl2ZVVuaWZvcm0oaCxsKSlpZihjLnNpemU+MSlmb3IodmFyIG09MDttPGMuc2l6ZTsrK20pe3ZhciB2PWMubmFtZS5yZXBsYWNlKCJbMF0iLCJbIittKyJdIik7YShwLG5ldyBpKHYsZS5pZCh2KSx0LmdldFVuaWZvcm1Mb2NhdGlvbihoLHYpLGMpKX1lbHNlIGEocCxuZXcgaShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKGgsYy5uYW1lKSxjKSk7dmFyIGc9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGgsWW4pO24ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PWcpO3ZhciB5PXIuYXR0cmlidXRlcztmb3IobD0wO2w8ZzsrK2wpKGM9dC5nZXRBY3RpdmVBdHRyaWIoaCxsKSkmJmEoeSxuZXcgaShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0QXR0cmliTG9jYXRpb24oaCxjLm5hbWUpLGMpKX1mdW5jdGlvbiBjKCl7dT17fSxmPXt9O2Zvcih2YXIgdD0wO3Q8ZC5sZW5ndGg7Kyt0KWwoZFt0XSl9dmFyIHU9e30sZj17fSxoPXt9LGQ9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy51bmlmb3Jtc0NvdW50PnQmJih0PWUuc3RhdHMudW5pZm9ybXNDb3VudCl9KSx0fSxyLmdldE1heEF0dHJpYnV0ZXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSx0fSkse2NsZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dC5kZWxldGVTaGFkZXIuYmluZCh0KTt4ZSh1KS5mb3JFYWNoKGUpLHU9e30seGUoZikuZm9yRWFjaChlKSxmPXt9LGQuZm9yRWFjaChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pLGQubGVuZ3RoPTAsaD17fSxyLnNoYWRlckNvdW50PTB9LHByb2dyYW06ZnVuY3Rpb24odCxlLG4pe2RlLmNvbW1hbmQodD49MCwibWlzc2luZyB2ZXJ0ZXggc2hhZGVyIixuKSxkZS5jb21tYW5kKGU+PTAsIm1pc3NpbmcgZnJhZ21lbnQgc2hhZGVyIixuKTt2YXIgaT1oW2VdO2l8fChpPWhbZV09e30pO3ZhciBhPWlbdF07cmV0dXJuIGF8fChhPW5ldyBzKGUsdCksci5zaGFkZXJDb3VudCsrLGwoYSxuKSxpW3RdPWEsZC5wdXNoKGEpKSxhfSxyZXN0b3JlOmMsc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBGdCh0LGUscixuLGksYSl7ZnVuY3Rpb24gbyhvKXt2YXIgcztudWxsPT09ZS5uZXh0PyhkZShpLnByZXNlcnZlRHJhd2luZ0J1ZmZlciwneW91IG11c3QgY3JlYXRlIGEgd2ViZ2wgY29udGV4dCB3aXRoICJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiOnRydWUgaW4gb3JkZXIgdG8gcmVhZCBwaXhlbHMgZnJvbSB0aGUgZHJhd2luZyBidWZmZXInKSxzPVduKTooZGUobnVsbCE9PWUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUsIllvdSBjYW5ub3QgcmVhZCBmcm9tIGEgcmVuZGVyYnVmZmVyIikscz1lLm5leHQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGUsYS5vZXNfdGV4dHVyZV9mbG9hdD9kZShzPT09V258fHM9PT1KbiwiUmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgdHlwZXMgJ3VpbnQ4JyBhbmQgJ2Zsb2F0JyIpOmRlKHM9PT1XbiwiUmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgdHlwZSAndWludDgnIikpO3ZhciBsPTAsYz0wLHU9bi5mcmFtZWJ1ZmZlcldpZHRoLGY9bi5mcmFtZWJ1ZmZlckhlaWdodCxoPW51bGw7UXQobyk/aD1vOm8mJihkZS50eXBlKG8sIm9iamVjdCIsImludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wucmVhZCgpIiksbD0wfG8ueCxjPTB8by55LGRlKGw+PTAmJmw8bi5mcmFtZWJ1ZmZlcldpZHRoLCJpbnZhbGlkIHggb2Zmc2V0IGZvciByZWdsLnJlYWQiKSxkZShjPj0wJiZjPG4uZnJhbWVidWZmZXJIZWlnaHQsImludmFsaWQgeSBvZmZzZXQgZm9yIHJlZ2wucmVhZCIpLHU9MHwoby53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLWwpLGY9MHwoby5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtYyksaD1vLmRhdGF8fG51bGwpLGgmJihzPT09V24/ZGUoaCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksImJ1ZmZlciBtdXN0IGJlICdVaW50OEFycmF5JyB3aGVuIHJlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIG9mIHR5cGUgJ3VpbnQ4JyIpOnM9PT1KbiYmZGUoaCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSwiYnVmZmVyIG11c3QgYmUgJ0Zsb2F0MzJBcnJheScgd2hlbiByZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBvZiB0eXBlICdmbG9hdCciKSksZGUodT4wJiZ1K2w8PW4uZnJhbWVidWZmZXJXaWR0aCwiaW52YWxpZCB3aWR0aCBmb3IgcmVhZCBwaXhlbHMiKSxkZShmPjAmJmYrYzw9bi5mcmFtZWJ1ZmZlckhlaWdodCwiaW52YWxpZCBoZWlnaHQgZm9yIHJlYWQgcGl4ZWxzIikscigpO3ZhciBkPXUqZio0O3JldHVybiBofHwocz09PVduP2g9bmV3IFVpbnQ4QXJyYXkoZCk6cz09PUpuJiYoaD1ofHxuZXcgRmxvYXQzMkFycmF5KGQpKSksZGUuaXNUeXBlZEFycmF5KGgsImRhdGEgYnVmZmVyIGZvciByZWdsLnJlYWQoKSBtdXN0IGJlIGEgdHlwZWRhcnJheSIpLGRlKGguYnl0ZUxlbmd0aD49ZCwiZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIHRvbyBzbWFsbCIpLHQucGl4ZWxTdG9yZWkoWm4sNCksdC5yZWFkUGl4ZWxzKGwsYyx1LGYsWG4scyxoKSxofWZ1bmN0aW9uIHModCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSxmdW5jdGlvbigpe3I9byh0KX0pLHJ9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/cyh0KTpvKHQpfXJldHVybiBsfWZ1bmN0aW9uIGp0KHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1mdW5jdGlvbiBOdCh0KXtyZXR1cm4ganQodCkuam9pbigiIil9ZnVuY3Rpb24gQnQoKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7KytlKWlmKGxbZV09PT10KXJldHVybiBzW2VdO3ZhciByPSJnIitvKys7cmV0dXJuIHMucHVzaChyKSxsLnB1c2godCkscn1mdW5jdGlvbiBlKCl7ZnVuY3Rpb24gdCgpe3IucHVzaC5hcHBseShyLGp0KGFyZ3VtZW50cykpfWZ1bmN0aW9uIGUoKXt2YXIgdD0idiIrbysrO3JldHVybiBuLnB1c2godCksYXJndW1lbnRzLmxlbmd0aD4wJiYoci5wdXNoKHQsIj0iKSxyLnB1c2guYXBwbHkocixqdChhcmd1bWVudHMpKSxyLnB1c2goIjsiKSksdH12YXIgcj1bXSxuPVtdO3JldHVybiAkdCh0LHtkZWY6ZSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBOdChbbi5sZW5ndGg+MD8idmFyICIrbisiOyI6IiIsTnQocildKX19KX1mdW5jdGlvbiByKCl7ZnVuY3Rpb24gdCh0LGUpe24odCxlLCI9IixyLmRlZih0LGUpLCI7Iil9dmFyIHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuICR0KGZ1bmN0aW9uKCl7ci5hcHBseShyLGp0KGFyZ3VtZW50cykpfSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6dCxzZXQ6ZnVuY3Rpb24oZSxuLGkpe3QoZSxuKSxyKGUsbiwiPSIsaSwiOyIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfWZ1bmN0aW9uIG4oKXt2YXIgdD1OdChhcmd1bWVudHMpLGU9cigpLG49cigpLGk9ZS50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuICR0KGUse3RoZW46ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShlLGp0KGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLGp0KGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT0iZWxzZXsiK2UrIn0iKSxOdChbImlmKCIsdCwiKXsiLGkoKSwifSIsZV0pfX0pfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ImEiK2kubGVuZ3RoO3JldHVybiBpLnB1c2godCksdH12YXIgaT1bXTtlPWV8fDA7Zm9yKHZhciBhPTA7YTxlOysrYSluKCk7dmFyIG89cigpLHM9by50b1N0cmluZztyZXR1cm4gdVt0XT0kdChvLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBOdChbImZ1bmN0aW9uKCIsaS5qb2luKCksIil7IixzKCksIn0iXSl9fSl9ZnVuY3Rpb24gYSgpe3ZhciB0PVsnInVzZSBzdHJpY3QiOycsYywicmV0dXJuIHsiXTtPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaCgnIicsZSwnIjonLHVbZV0udG9TdHJpbmcoKSwiLCIpfSksdC5wdXNoKCJ9Iik7dmFyIGU9TnQodCkucmVwbGFjZSgvOy9nLCI7XG4iKS5yZXBsYWNlKC99L2csIn1cbiIpLnJlcGxhY2UoL3svZywie1xuIik7cmV0dXJuIEZ1bmN0aW9uLmFwcGx5KG51bGwscy5jb25jYXQoZSkpLmFwcGx5KG51bGwsbCl9dmFyIG89MCxzPVtdLGw9W10sYz1lKCksdT17fTtyZXR1cm57Z2xvYmFsOmMsbGluazp0LGJsb2NrOmUscHJvYzppLHNjb3BlOnIsY29uZDpuLGNvbXBpbGU6YX19ZnVuY3Rpb24gVXQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFF0KHQpfHxaKHQpfWZ1bmN0aW9uIFZ0KHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PURpPy0xOmU9PT1EaT8xOnQ8ZT8tMToxfSl9ZnVuY3Rpb24gSHQodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gdCYmISh0LnRoaXNEZXB8fHQuY29udGV4dERlcHx8dC5wcm9wRGVwKX1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gbmV3IEh0KCExLCExLCExLHQpfWZ1bmN0aW9uIFl0KHQsZSl7dmFyIHI9dC50eXBlO2lmKHI9PT1laSl7dmFyIG49dC5kYXRhLmxlbmd0aDtyZXR1cm4gbmV3IEh0KCEwLG4+PTEsbj49MixlKX1pZihyPT09YWkpe3ZhciBpPXQuZGF0YTtyZXR1cm4gbmV3IEh0KGkudGhpc0RlcCxpLmNvbnRleHREZXAsaS5wcm9wRGVwLGUpfXJldHVybiBuZXcgSHQocj09PWlpLHI9PT1uaSxyPT09cmksZSl9ZnVuY3Rpb24gWHQodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxkLHApe2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQucmVwbGFjZSgiLiIsIl8iKX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj1tKHQpO2V0LnB1c2godCksdHRbbl09JFtuXT0hIXIscnRbbl09ZX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1tKHQpO2V0LnB1c2godCksQXJyYXkuaXNBcnJheShyKT8oJFtuXT1yLnNsaWNlKCksdHRbbl09ci5zbGljZSgpKTokW25dPXR0W25dPXIsbnRbbl09ZX1mdW5jdGlvbiB5KCl7dmFyIHQ9QnQoKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9b3QrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIoaXQpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSwiLiIsdCl9KSxkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuQ0hFQ0s9cihkZSksdC5jb21tYW5kU3RyPWRlLmd1ZXNzQ29tbWFuZCgpLHQuY29tbWFuZD1yKHQuY29tbWFuZFN0ciksdC5hc3NlcnQ9ZnVuY3Rpb24odCxlLG4pe3QoImlmKCEoIixlLCIpKSIsdGhpcy5DSEVDSywiLmNvbW1hbmRSYWlzZSgiLHIobiksIiwiLHRoaXMuY29tbWFuZCwiKTsiKX0sYXQuaW52YWxpZEJsZW5kQ29tYmluYXRpb25zPVVhfSk7dmFyIG89dC5uZXh0PXt9LHM9dC5jdXJyZW50PXt9O09iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkoJFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoYXRbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSBlaTp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2Ugcmk6cmV0dXJuIGUuZGVmKGEucHJvcHMsbi5kYXRhKTtjYXNlIG5pOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIGlpOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIGFpOnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIHU9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7dmFyIG49ZS5pZCh0KTtpZihuIGluIHUpcmV0dXJuIHVbbl07dmFyIGk9Yy5zY29wZVtuXTtyZXR1cm4gaXx8KGk9Yy5zY29wZVtuXT1uZXcgVyksdVtuXT1yKGkpfSx0fWZ1bmN0aW9uIGIodCl7dmFyIGUscj10LnN0YXRpYyxuPXQuZHluYW1pYztpZihQaSBpbiByKXt2YXIgaT0hIXJbUGldO2U9R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gaX0pLGUuZW5hYmxlPWl9ZWxzZSBpZihQaSBpbiBuKXt2YXIgYT1uW1BpXTtlPVl0KGEsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxhKX0pfXJldHVybiBlfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYztpZih6aSBpbiByKXt2YXIgaT1yW3ppXTtyZXR1cm4gaT8oaT1zLmdldEZyYW1lYnVmZmVyKGkpLGRlLmNvbW1hbmQoaSwiaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QiKSxHdChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO2Uuc2V0KG4uZnJhbWVidWZmZXIsIi5uZXh0IixyKTt2YXIgYT1uLmNvbnRleHQ7cmV0dXJuIGUuc2V0KGEsIi4iK1ZpLHIrIi53aWR0aCIpLGUuc2V0KGEsIi4iK0hpLHIrIi5oZWlnaHQiKSxyfSkpOkd0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7ZS5zZXQoci5mcmFtZWJ1ZmZlciwiLm5leHQiLCJudWxsIik7dmFyIG49ci5jb250ZXh0O3JldHVybiBlLnNldChuLCIuIitWaSxuKyIuIitZaSksZS5zZXQobiwiLiIrSGksbisiLiIrWGkpLCJudWxsIn0pfWlmKHppIGluIG4pe3ZhciBhPW5bemldO3JldHVybiBZdChhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcixvPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsIiEiK3IrInx8IitvLCJpbnZhbGlkIGZyYW1lYnVmZmVyIG9iamVjdCIpfSksZS5zZXQoaSwiLm5leHQiLG8pO3ZhciBzPW4uY29udGV4dDtyZXR1cm4gZS5zZXQocywiLiIrVmksbysiPyIrbysiLndpZHRoOiIrcysiLiIrWWkpLGUuc2V0KHMsIi4iK0hpLG8rIj8iK28rIi5oZWlnaHQ6IitzKyIuIitYaSksb30pfXJldHVybiBudWxsfWZ1bmN0aW9uIF8odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgbj1pW3RdO2RlLmNvbW1hbmRUeXBlKG4sIm9iamVjdCIsImludmFsaWQgIit0LHIuY29tbWFuZFN0cik7dmFyIG8scyxsPSEwLGM9MHxuLngsdT0wfG4ueTtyZXR1cm4id2lkdGgiaW4gbj8obz0wfG4ud2lkdGgsZGUuY29tbWFuZChvPj0wLCJpbnZhbGlkICIrdCxyLmNvbW1hbmRTdHIpKTpsPSExLCJoZWlnaHQiaW4gbj8ocz0wfG4uaGVpZ2h0LGRlLmNvbW1hbmQocz49MCwiaW52YWxpZCAiK3Qsci5jb21tYW5kU3RyKSk6bD0hMSxuZXcgSHQoIWwmJmUmJmUudGhpc0RlcCwhbCYmZSYmZS5jb250ZXh0RGVwLCFsJiZlJiZlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0LGk9bzsid2lkdGgiaW4gbnx8KGk9ZS5kZWYociwiLiIsVmksIi0iLGMpKTt2YXIgYT1zO3JldHVybiJoZWlnaHQiaW4gbnx8KGE9ZS5kZWYociwiLiIsSGksIi0iLHUpKSxbYyx1LGksYV19KX1pZih0IGluIGEpe3ZhciBmPWFbdF0saD1ZdChmLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5pbnZva2UocixmKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pO3ZhciBpPWUuc2hhcmVkLmNvbnRleHQsYT1yLmRlZihuLCIueHwwIiksbz1yLmRlZihuLCIueXwwIikscz1yLmRlZignIndpZHRoIiBpbiAnLG4sIj8iLG4sIi53aWR0aHwwOiIsIigiLGksIi4iLFZpLCItIixhLCIpIiksbD1yLmRlZignImhlaWdodCIgaW4gJyxuLCI/IixuLCIuaGVpZ2h0fDA6IiwiKCIsaSwiLiIsSGksIi0iLG8sIikiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLHMrIj49MCYmIitsKyI+PTAiLCJpbnZhbGlkICIrdCl9KSxbYSxvLHMsbF19KTtyZXR1cm4gZSYmKGgudGhpc0RlcD1oLnRoaXNEZXB8fGUudGhpc0RlcCxoLmNvbnRleHREZXA9aC5jb250ZXh0RGVwfHxlLmNvbnRleHREZXAsaC5wcm9wRGVwPWgucHJvcERlcHx8ZS5wcm9wRGVwKSxofXJldHVybiBlP25ldyBIdChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIixWaSksZS5kZWYociwiLiIsSGkpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWMsbz1uKERpKTtpZihvKXt2YXIgcz1vO289bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9cy5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi4iK3FpLHJbMl0pLGUuc2V0KG4sIi4iK0dpLHJbM10pLHJ9KX1yZXR1cm57dmlld3BvcnQ6byxzY2lzc29yX2JveDpuKElpKX19ZnVuY3Rpb24gdyh0KXtmdW5jdGlvbiByKHQpe2lmKHQgaW4gaSl7dmFyIHI9ZS5pZChpW3RdKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3Uuc2hhZGVyKHFhW3RdLHIsZGUuZ3Vlc3NDb21tYW5kKCkpfSk7dmFyIG49R3QoZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3JldHVybiBuLmlkPXIsbn1pZih0IGluIGEpe3ZhciBvPWFbdF07cmV0dXJuIFl0KG8sZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmludm9rZShyLG8pLGk9ci5kZWYoZS5zaGFyZWQuc3RyaW5ncywiLmlkKCIsbiwiKSIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3IoZS5zaGFyZWQuc2hhZGVyLCIuc2hhZGVyKCIscWFbdF0sIiwiLGksIiwiLGUuY29tbWFuZCwiKTsiKX0pLGl9KX1yZXR1cm4gbnVsbH12YXIgbixpPXQuc3RhdGljLGE9dC5keW5hbWljLG89cihSaSkscz1yKE9pKSxsPW51bGw7cmV0dXJuIHF0KG8pJiZxdChzKT8obD11LnByb2dyYW0ocy5pZCxvLmlkKSxuPUd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayhsKX0pKTpuPW5ldyBIdChvJiZvLnRoaXNEZXB8fHMmJnMudGhpc0RlcCxvJiZvLmNvbnRleHREZXB8fHMmJnMuY29udGV4dERlcCxvJiZvLnByb3BEZXB8fHMmJnMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG49dC5zaGFyZWQuc2hhZGVyO3I9bz9vLmFwcGVuZCh0LGUpOmUuZGVmKG4sIi4iLFJpKTt2YXIgaTtpPXM/cy5hcHBlbmQodCxlKTplLmRlZihuLCIuIixPaSk7dmFyIGE9bisiLnByb2dyYW0oIitpKyIsIityO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2ErPSIsIit0LmNvbW1hbmR9KSxlLmRlZihhKyIpIil9KSx7ZnJhZzpvLHZlcnQ6cyxwcm9nVmFyOm4scHJvZ3JhbTpsfX1mdW5jdGlvbiBNKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKHQgaW4gbil7dmFyIGE9MHxuW3RdO3JldHVybiBkZS5jb21tYW5kKCFyfHxhPj0wLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHImJih0Lk9GRlNFVD1hKSxhfSl9aWYodCBpbiBpKXt2YXIgcz1pW3RdO3JldHVybiBZdChzLGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5pbnZva2UobixzKTtyZXR1cm4gciYmKGUuT0ZGU0VUPWksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChuLGkrIj49MCIsImludmFsaWQgIit0KX0pKSxpfSl9cmV0dXJuIHImJm8/R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5PRkZTRVQ9IjAiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLG89ZnVuY3Rpb24oKXtpZihGaSBpbiBuKXt2YXIgdD1uW0ZpXTtVdCh0KT90PWEuZ2V0RWxlbWVudHMoYS5jcmVhdGUodCwhMCkpOnQmJih0PWEuZ2V0RWxlbWVudHModCksZGUuY29tbWFuZCh0LCJpbnZhbGlkIGVsZW1lbnRzIixlLmNvbW1hbmRTdHIpKTt2YXIgcj1HdChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1uLG59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbCxudWxsfSk7cmV0dXJuIHIudmFsdWU9dCxyfWlmKEZpIGluIGkpe3ZhciBvPWlbRmldO3JldHVybiBZdChvLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQsbj1yLmlzQnVmZmVyQXJncyxpPXIuZWxlbWVudHMsYT10Lmludm9rZShlLG8pLHM9ZS5kZWYoIm51bGwiKSxsPWUuZGVmKG4sIigiLGEsIikiKSxjPXQuY29uZChsKS50aGVuKHMsIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UocywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChjLmVsc2UsIiEiK2ErInx8IitzLCJpbnZhbGlkIGVsZW1lbnRzIil9KSxlLmVudHJ5KGMpLGUuZXhpdCh0LmNvbmQobCkudGhlbihpLCIuZGVzdHJveVN0cmVhbSgiLHMsIik7IikpLHQuRUxFTUVOVFM9cyxzfSl9cmV0dXJuIG51bGx9KCkscz1yKEJpLCEwKTtyZXR1cm57ZWxlbWVudHM6byxwcmltaXRpdmU6ZnVuY3Rpb24oKXtpZihqaSBpbiBuKXt2YXIgdD1uW2ppXTtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcih0LEJlLCJpbnZhbGlkIHByaW1pdHZlIixlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKGUscil7cmV0dXJuIEJlW3RdfSl9aWYoamkgaW4gaSl7dmFyIHI9aVtqaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsaSsiIGluICIrbiwiaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoQmUpKX0pLGUuZGVmKG4sIlsiLGksIl0iKX0pfXJldHVybiBvP3F0KG8pP0d0KG8udmFsdWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9OmZ1bmN0aW9uKCl7cmV0dXJuIGthfSk6bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsa2EpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKE5pIGluIG4pe3ZhciB0PTB8bltOaV07cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wLCJpbnZhbGlkIHZlcnRleCBjb3VudCIsZS5jb21tYW5kU3RyKSxHdChmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoTmkgaW4gaSl7dmFyIHI9aVtOaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsInR5cGVvZiAiK24rJz09PSJudW1iZXIiJiYnK24rIj49MCYmIituKyI9PT0oIituKyJ8MCkiLCJpbnZhbGlkIHZlcnRleCBjb3VudCIpfSksbn0pfWlmKG8pe2lmKHF0KG8pKXtpZihvKXJldHVybiBzP25ldyBIdChzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPWUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCk7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSxyKyI+PTAiLCJpbnZhbGlkIHZlcnRleCBvZmZzZXQvZWxlbWVudCBidWZmZXIgdG9vIHNtYWxsIil9KSxyfSk6R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudCIpfSk7dmFyIGE9R3QoZnVuY3Rpb24oKXtyZXR1cm4tMX0pO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2EuTUlTU0lORz0hMH0pLGF9dmFyIGw9bmV3IEh0KG8udGhpc0RlcHx8cy50aGlzRGVwLG8uY29udGV4dERlcHx8cy5jb250ZXh0RGVwLG8ucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudC0iLHQuT0ZGU0VULCI6LTEiKTplLmRlZihyLCI/IixyLCIudmVydENvdW50Oi0xIil9KTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtsLkRZTkFNSUM9ITB9KSxsfXJldHVybiBudWxsfSgpLGluc3RhbmNlczpyKFVpLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gVCh0LGUpe3ZhciByPXQuc3RhdGljLGk9dC5keW5hbWljLGE9e307cmV0dXJuIGV0LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gbyhlLG4pe2lmKHQgaW4gcil7dmFyIG89ZShyW3RdKTthW3NdPUd0KGZ1bmN0aW9uKCl7cmV0dXJuIG99KX1lbHNlIGlmKHQgaW4gaSl7dmFyIGw9aVt0XTthW3NdPVl0KGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUsdC5pbnZva2UoZSxsKSl9KX19dmFyIHM9bSh0KTtzd2l0Y2godCl7Y2FzZSB2aTpjYXNlIHNpOmNhc2Ugb2k6Y2FzZSBraTpjYXNlIGZpOmNhc2UgQ2k6Y2FzZSB4aTpjYXNlIHdpOmNhc2UgTWk6Y2FzZSBwaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFR5cGUociwiYm9vbGVhbiIsdCxlLmNvbW1hbmRTdHIpLHJ9LGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLCJ0eXBlb2YgIituKyc9PT0iYm9vbGVhbiInLCJpbnZhbGlkIGZsYWcgIit0LGUuY29tbWFuZFN0cil9KSxufSk7Y2FzZSBoaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcihyLFZhLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLFZhW3JdfSxmdW5jdGlvbihlLHIsbil7CnZhciBpPWUuY29uc3RhbnRzLmNvbXBhcmVGdW5jcztyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLG4rIiBpbiAiK2ksImludmFsaWQgIit0KyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoVmEpKX0pLHIuZGVmKGksIlsiLG4sIl0iKX0pO2Nhc2UgZGk6cmV0dXJuIG8oZnVuY3Rpb24odCl7cmV0dXJuIGRlLmNvbW1hbmQobXQodCkmJjI9PT10Lmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiB0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMV0mJnRbMF08PXRbMV0sImRlcHRoIHJhbmdlIGlzIDJkIGFycmF5IixlLmNvbW1hbmRTdHIpLHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHQuc2hhcmVkLmlzQXJyYXlMaWtlKyIoIityKyIpJiYiK3IrIi5sZW5ndGg9PT0yJiZ0eXBlb2YgIityKydbMF09PT0ibnVtYmVyIiYmdHlwZW9mICcrcisnWzFdPT09Im51bWJlciImJicrcisiWzBdPD0iK3IrIlsxXSIsImRlcHRoIHJhbmdlIG11c3QgYmUgYSAyZCBhcnJheSIpfSksW2UuZGVmKCIrIixyLCJbMF0iKSxlLmRlZigiKyIsciwiWzFdIildfSk7Y2FzZSB1aTpyZXR1cm4gbyhmdW5jdGlvbih0KXtkZS5jb21tYW5kVHlwZSh0LCJvYmplY3QiLCJibGVuZC5mdW5jIixlLmNvbW1hbmRTdHIpO3ZhciByPSJzcmNSR0IiaW4gdD90LnNyY1JHQjp0LnNyYyxuPSJzcmNBbHBoYSJpbiB0P3Quc3JjQWxwaGE6dC5zcmMsaT0iZHN0UkdCImluIHQ/dC5kc3RSR0I6dC5kc3QsYT0iZHN0QWxwaGEiaW4gdD90LmRzdEFscGhhOnQuZHN0O3JldHVybiBkZS5jb21tYW5kUGFyYW1ldGVyKHIsQmEscysiLnNyY1JHQiIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kUGFyYW1ldGVyKG4sQmEscysiLnNyY0FscGhhIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoaSxCYSxzKyIuZHN0UkdCIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoYSxCYSxzKyIuZHN0QWxwaGEiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZChVYS5pbmRleE9mKHIrIiwgIitpKT09PS0xLCJ1bmFsbG93ZWQgYmxlbmRpbmcgY29tYmluYXRpb24gKHNyY1JHQiwgZHN0UkdCKSA9ICgiK3IrIiwgIitpKyIpIixlLmNvbW1hbmRTdHIpLFtCYVtyXSxCYVtpXSxCYVtuXSxCYVthXV19LGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBpKGksbyl7dmFyIHM9ci5kZWYoJyInLGksbywnIiBpbiAnLG4sIj8iLG4sIi4iLGksbywiOiIsbiwiLiIsaSk7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZS5hc3NlcnQocixzKyIgaW4gIithLCJpbnZhbGlkICIrdCsiLiIraStvKyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoQmEpKX0pLHN9dmFyIGE9ZS5jb25zdGFudHMuYmxlbmRGdW5jcztkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgYmxlbmQgZnVuYywgbXVzdCBiZSBhbiBvYmplY3QiKX0pO3ZhciBvPWkoInNyYyIsIlJHQiIpLHM9aSgiZHN0IiwiUkdCIik7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt2YXIgdD1lLmNvbnN0YW50cy5pbnZhbGlkQmxlbmRDb21iaW5hdGlvbnM7ZS5hc3NlcnQocix0KyIuaW5kZXhPZigiK28rJysiLCAiKycrcysiKSA9PT0gLTEgIiwidW5hbGxvd2VkIGJsZW5kaW5nIGNvbWJpbmF0aW9uIGZvciAoc3JjUkdCLCBkc3RSR0IpIil9KTt2YXIgbD1yLmRlZihhLCJbIixvLCJdIiksYz1yLmRlZihhLCJbIixpKCJzcmMiLCJBbHBoYSIpLCJdIik7cmV0dXJuW2wsci5kZWYoYSwiWyIscywiXSIpLGMsci5kZWYoYSwiWyIsaSgiZHN0IiwiQWxwaGEiKSwiXSIpXX0pO2Nhc2UgY2k6cmV0dXJuIG8oZnVuY3Rpb24ocil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByPyhkZS5jb21tYW5kUGFyYW1ldGVyKHIsWiwiaW52YWxpZCAiK3QsZS5jb21tYW5kU3RyKSxbWltyXSxaW3JdXSk6Im9iamVjdCI9PXR5cGVvZiByPyhkZS5jb21tYW5kUGFyYW1ldGVyKHIucmdiLFosdCsiLnJnYiIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kUGFyYW1ldGVyKHIuYWxwaGEsWix0KyIuYWxwaGEiLGUuY29tbWFuZFN0ciksW1pbci5yZ2JdLFpbci5hbHBoYV1dKTp2b2lkIGRlLmNvbW1hbmRSYWlzZSgiaW52YWxpZCBibGVuZC5lcXVhdGlvbiIsZS5jb21tYW5kU3RyKX0sZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGE9ci5kZWYoKSxvPXIuZGVmKCkscz1lLmNvbmQoInR5cGVvZiAiLG4sJz09PSJzdHJpbmciJyk7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LHIsbil7ZS5hc3NlcnQodCxuKyIgaW4gIitpLCJpbnZhbGlkICIrcisiLCBtdXN0IGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKFopKX1yKHMudGhlbix0LG4pLGUuYXNzZXJ0KHMuZWxzZSxuKyImJnR5cGVvZiAiK24rJz09PSJvYmplY3QiJywiaW52YWxpZCAiK3QpLHIocy5lbHNlLHQrIi5yZ2IiLG4rIi5yZ2IiKSxyKHMuZWxzZSx0KyIuYWxwaGEiLG4rIi5hbHBoYSIpfSkscy50aGVuKGEsIj0iLG8sIj0iLGksIlsiLG4sIl07Iikscy5lbHNlKGEsIj0iLGksIlsiLG4sIi5yZ2JdOyIsbywiPSIsaSwiWyIsbiwiLmFscGhhXTsiKSxyKHMpLFthLG9dfSk7Y2FzZSBsaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZChtdCh0KSYmND09PXQubGVuZ3RoLCJibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXkiLGUuY29tbWFuZFN0ciksSig0LGZ1bmN0aW9uKGUpe3JldHVybit0W2VdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHQuc2hhcmVkLmlzQXJyYXlMaWtlKyIoIityKyIpJiYiK3IrIi5sZW5ndGg9PT00IiwiYmxlbmQuY29sb3IgbXVzdCBiZSBhIDRkIGFycmF5Iil9KSxKKDQsZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKCIrIixyLCJbIix0LCJdIil9KX0pO2Nhc2UgQWk6cmV0dXJuIG8oZnVuY3Rpb24odCl7cmV0dXJuIGRlLmNvbW1hbmRUeXBlKHQsIm51bWJlciIscyxlLmNvbW1hbmRTdHIpLDB8dH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsInR5cGVvZiAiK3IrJz09PSJudW1iZXIiJywiaW52YWxpZCBzdGVuY2lsLm1hc2siKX0pLGUuZGVmKHIsInwwIil9KTtjYXNlIEVpOnJldHVybiBvKGZ1bmN0aW9uKHIpe2RlLmNvbW1hbmRUeXBlKHIsIm9iamVjdCIscyxlLmNvbW1hbmRTdHIpO3ZhciBuPXIuY21wfHwia2VlcCIsaT1yLnJlZnx8MCxhPSJtYXNrImluIHI/ci5tYXNrOi0xO3JldHVybiBkZS5jb21tYW5kUGFyYW1ldGVyKG4sVmEsdCsiLmNtcCIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kVHlwZShpLCJudW1iZXIiLHQrIi5yZWYiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFR5cGUoYSwibnVtYmVyIix0KyIubWFzayIsZS5jb21tYW5kU3RyKSxbVmFbbl0saSxhXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcztyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dC5hc3NlcnQoZSxBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywiIiksImludmFsaWQgc3RlbmNpbC5mdW5jIil9aShyKyImJnR5cGVvZiAiLHIsJz09PSJvYmplY3QiJyksaSgnISgiY21wIiBpbiAnLHIsIil8fCgiLHIsIi5jbXAgaW4gIixuLCIpIil9KSxbZS5kZWYoJyJjbXAiIGluICcsciwiPyIsbiwiWyIsciwiLmNtcF0iLCI6IixQYSksZS5kZWYociwiLnJlZnwwIiksZS5kZWYoJyJtYXNrIiBpbiAnLHIsIj8iLHIsIi5tYXNrfDA6LTEiKV19KTtjYXNlIFNpOmNhc2UgTGk6cmV0dXJuIG8oZnVuY3Rpb24ocil7ZGUuY29tbWFuZFR5cGUociwib2JqZWN0IixzLGUuY29tbWFuZFN0cik7dmFyIG49ci5mYWlsfHwia2VlcCIsaT1yLnpmYWlsfHwia2VlcCIsYT1yLnpwYXNzfHwia2VlcCI7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIobixIYSx0KyIuZmFpbCIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kUGFyYW1ldGVyKGksSGEsdCsiLnpmYWlsIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoYSxIYSx0KyIuenBhc3MiLGUuY29tbWFuZFN0ciksW3Q9PT1MaT9FYTpBYSxIYVtuXSxIYVtpXSxIYVthXV19LGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBpKGkpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsJyEoIicraSsnIiBpbiAnK24rIil8fCgiK24rIi4iK2krIiBpbiAiK2ErIikiLCJpbnZhbGlkICIrdCsiLiIraSsiLCBtdXN0IGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKEhhKSl9KSxyLmRlZignIicsaSwnIiBpbiAnLG4sIj8iLGEsIlsiLG4sIi4iLGksIl06IixQYSl9dmFyIGE9ZS5jb25zdGFudHMuc3RlbmNpbE9wcztyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLG4rIiYmdHlwZW9mICIrbisnPT09Im9iamVjdCInLCJpbnZhbGlkICIrdCl9KSxbdD09PUxpP0VhOkFhLGkoImZhaWwiKSxpKCJ6ZmFpbCIpLGkoInpwYXNzIildfSk7Y2FzZSBfaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtkZS5jb21tYW5kVHlwZSh0LCJvYmplY3QiLHMsZS5jb21tYW5kU3RyKTt2YXIgcj0wfHQuZmFjdG9yLG49MHx0LnVuaXRzO3JldHVybiBkZS5jb21tYW5kVHlwZShyLCJudW1iZXIiLHMrIi5mYWN0b3IiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFR5cGUobiwibnVtYmVyIixzKyIudW5pdHMiLGUuY29tbWFuZFN0ciksW3Isbl19LGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLG4rIiYmdHlwZW9mICIrbisnPT09Im9iamVjdCInLCJpbnZhbGlkICIrdCl9KSxbci5kZWYobiwiLmZhY3RvcnwwIiksci5kZWYobiwiLnVuaXRzfDAiKV19KTtjYXNlIGdpOnJldHVybiBvKGZ1bmN0aW9uKHQpe3ZhciByPTA7cmV0dXJuImZyb250Ij09PXQ/cj1BYToiYmFjayI9PT10JiYocj1FYSksZGUuY29tbWFuZCghIXIscyxlLmNvbW1hbmRTdHIpLHJ9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHIrJz09PSJmcm9udCJ8fCcrcisnPT09ImJhY2siJywiaW52YWxpZCBjdWxsLmZhY2UiKX0pLGUuZGVmKHIsJz09PSJmcm9udCI/JyxBYSwiOiIsRWEpfSk7Y2FzZSBiaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZCgibnVtYmVyIj09dHlwZW9mIHQmJnQ+PW4ubGluZVdpZHRoRGltc1swXSYmdDw9bi5saW5lV2lkdGhEaW1zWzFdLCJpbnZhbGlkIGxpbmUgd2lkdGgsIG11c3QgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gIituLmxpbmVXaWR0aERpbXNbMF0rIiBhbmQgIituLmxpbmVXaWR0aERpbXNbMV0sZS5jb21tYW5kU3RyKSx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSwidHlwZW9mICIrcisnPT09Im51bWJlciImJicrcisiPj0iK24ubGluZVdpZHRoRGltc1swXSsiJiYiK3IrIjw9IituLmxpbmVXaWR0aERpbXNbMV0sImludmFsaWQgbGluZSB3aWR0aCIpfSkscn0pO2Nhc2UgeWk6cmV0dXJuIG8oZnVuY3Rpb24odCl7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIodCxHYSxzLGUuY29tbWFuZFN0ciksR2FbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHIrJz09PSJjdyJ8fCcrcisnPT09ImNjdyInLCJpbnZhbGlkIGZyb250RmFjZSwgbXVzdCBiZSBvbmUgb2YgY3csY2N3Iil9KSxlLmRlZihyKyc9PT0iY3ciPycrU2ErIjoiK0xhKX0pO2Nhc2UgbWk6cmV0dXJuIG8oZnVuY3Rpb24odCl7cmV0dXJuIGRlLmNvbW1hbmQobXQodCkmJjQ9PT10Lmxlbmd0aCwiY29sb3IubWFzayBtdXN0IGJlIGxlbmd0aCA0IGFycmF5IixlLmNvbW1hbmRTdHIpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSx0LnNoYXJlZC5pc0FycmF5TGlrZSsiKCIrcisiKSYmIityKyIubGVuZ3RoPT09NCIsImludmFsaWQgY29sb3IubWFzayIpfSksSig0LGZ1bmN0aW9uKHQpe3JldHVybiIhISIrcisiWyIrdCsiXSJ9KX0pO2Nhc2UgVGk6cmV0dXJuIG8oZnVuY3Rpb24odCl7ZGUuY29tbWFuZCgib2JqZWN0Ij09dHlwZW9mIHQmJnQscyxlLmNvbW1hbmRTdHIpO3ZhciByPSJ2YWx1ZSJpbiB0P3QudmFsdWU6MSxuPSEhdC5pbnZlcnQ7cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiZyPD0xLCJzYW1wbGUuY292ZXJhZ2UudmFsdWUgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEiLGUuY29tbWFuZFN0ciksW3Isbl19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHIrIiYmdHlwZW9mICIrcisnPT09Im9iamVjdCInLCJpbnZhbGlkIHNhbXBsZS5jb3ZlcmFnZSIpfSksW2UuZGVmKCcidmFsdWUiIGluICcsciwiPysiLHIsIi52YWx1ZToxIiksZS5kZWYoIiEhIixyLCIuaW52ZXJ0IildfSl9fSksYX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbixhPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBhfHwiYm9vbGVhbiI9PXR5cGVvZiBhKW49R3QoZnVuY3Rpb24oKXtyZXR1cm4gYX0pO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe3ZhciBvPWEuX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/bj1HdChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKGEpfSk6ImZyYW1lYnVmZmVyIj09PW98fCJmcmFtZWJ1ZmZlckN1YmUiPT09bz8oZGUuY29tbWFuZChhLmNvbG9yLmxlbmd0aD4wLCdtaXNzaW5nIGNvbG9yIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIHNlbnQgdG8gdW5pZm9ybSAiJyt0KyciJyxlLmNvbW1hbmRTdHIpLG49R3QoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhhLmNvbG9yWzBdKX0pKTpkZS5jb21tYW5kUmFpc2UoJ2ludmFsaWQgZGF0YSBmb3IgdW5pZm9ybSAiJyt0KyciJyxlLmNvbW1hbmRTdHIpfWVsc2UgbXQoYSk/bj1HdChmdW5jdGlvbihlKXtyZXR1cm4gZS5nbG9iYWwuZGVmKCJbIixKKGEubGVuZ3RoLGZ1bmN0aW9uKHIpe3JldHVybiBkZS5jb21tYW5kKCJudW1iZXIiPT10eXBlb2YgYVtyXXx8ImJvb2xlYW4iPT10eXBlb2YgYVtyXSwiaW52YWxpZCB1bmlmb3JtICIrdCxlLmNvbW1hbmRTdHIpLGFbcl19KSwiXSIpfSk6ZGUuY29tbWFuZFJhaXNlKCdpbnZhbGlkIG9yIG1pc3NpbmcgZGF0YSBmb3IgdW5pZm9ybSAiJyt0KyciJyxlLmNvbW1hbmRTdHIpO24udmFsdWU9YSxpW3RdPW59KSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07aVt0XT1ZdChlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLGl9ZnVuY3Rpb24gQSh0LHIpe3ZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLG89e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9blt0XSxzPWUuaWQodCksbD1uZXcgVztpZihVdChhKSlsLnN0YXRlPSRuLGwuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKGEsWmksITEsITApKSxsLnR5cGU9MDtlbHNle3ZhciBjPWkuZ2V0QnVmZmVyKGEpO2lmKGMpbC5zdGF0ZT0kbixsLmJ1ZmZlcj1jLGwudHlwZT0wO2Vsc2UgaWYoZGUuY29tbWFuZCgib2JqZWN0Ij09dHlwZW9mIGEmJmEsImludmFsaWQgZGF0YSBmb3IgYXR0cmlidXRlICIrdCxyLmNvbW1hbmRTdHIpLGEuY29uc3RhbnQpe3ZhciB1PWEuY29uc3RhbnQ7bC5idWZmZXI9Im51bGwiLGwuc3RhdGU9dGksIm51bWJlciI9PXR5cGVvZiB1P2wueD11OihkZS5jb21tYW5kKG10KHUpJiZ1Lmxlbmd0aD4wJiZ1Lmxlbmd0aDw9NCwiaW52YWxpZCBjb25zdGFudCBmb3IgYXR0cmlidXRlICIrdCxyLmNvbW1hbmRTdHIpLEtuLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPHUubGVuZ3RoJiYobFt0XT11W2VdKX0pKX1lbHNle2M9VXQoYS5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKGEuYnVmZmVyLFppLCExLCEwKSk6aS5nZXRCdWZmZXIoYS5idWZmZXIpLGRlLmNvbW1hbmQoISFjLCdtaXNzaW5nIGJ1ZmZlciBmb3IgYXR0cmlidXRlICInK3QrJyInLHIuY29tbWFuZFN0cik7dmFyIGY9MHxhLm9mZnNldDtkZS5jb21tYW5kKGY+PTAsJ2ludmFsaWQgb2Zmc2V0IGZvciBhdHRyaWJ1dGUgIicrdCsnIicsci5jb21tYW5kU3RyKTt2YXIgaD0wfGEuc3RyaWRlO2RlLmNvbW1hbmQoaD49MCYmaDwyNTYsJ2ludmFsaWQgc3RyaWRlIGZvciBhdHRyaWJ1dGUgIicrdCsnIiwgbXVzdCBiZSBpbnRlZ2VyIGJldHdlZWVuIFswLCAyNTVdJyxyLmNvbW1hbmRTdHIpO3ZhciBkPTB8YS5zaXplO2RlLmNvbW1hbmQoISgic2l6ZSJpbiBhKXx8ZD4wJiZkPD00LCdpbnZhbGlkIHNpemUgZm9yIGF0dHJpYnV0ZSAiJyt0KyciLCBtdXN0IGJlIDEsMiwzLDQnLHIuY29tbWFuZFN0cik7dmFyIHA9ISFhLm5vcm1hbGl6ZWQsbT0wOyJ0eXBlImluIGEmJihkZS5jb21tYW5kUGFyYW1ldGVyKGEudHlwZSxJZSwiaW52YWxpZCB0eXBlIGZvciBhdHRyaWJ1dGUgIit0LHIuY29tbWFuZFN0ciksbT1JZVthLnR5cGVdKTt2YXIgdj0wfGEuZGl2aXNvcjsiZGl2aXNvciJpbiBhJiYoZGUuY29tbWFuZCgwPT09dnx8SywnY2Fubm90IHNwZWNpZnkgZGl2aXNvciBmb3IgYXR0cmlidXRlICInK3QrJyIsIGluc3RhbmNpbmcgbm90IHN1cHBvcnRlZCcsci5jb21tYW5kU3RyKSxkZS5jb21tYW5kKHY+PTAsJ2ludmFsaWQgZGl2aXNvciBmb3IgYXR0cmlidXRlICInK3QrJyInLHIuY29tbWFuZFN0cikpLGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dmFyIGU9ci5jb21tYW5kU3RyLG49WyJidWZmZXIiLCJvZmZzZXQiLCJkaXZpc29yIiwibm9ybWFsaXplZCIsInR5cGUiLCJzaXplIiwic3RyaWRlIl07T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihyKXtkZS5jb21tYW5kKG4uaW5kZXhPZihyKT49MCwndW5rbm93biBwYXJhbWV0ZXIgIicrcisnIiBmb3IgYXR0cmlidXRlIHBvaW50ZXIgIicrdCsnIiAodmFsaWQgcGFyYW1ldGVycyBhcmUgJytuKyIpIixlKX0pfSksbC5idWZmZXI9YyxsLnN0YXRlPSRuLGwuc2l6ZT1kLGwubm9ybWFsaXplZD1wLGwudHlwZT1tfHxjLmR0eXBlLGwub2Zmc2V0PWYsbC5zdHJpZGU9aCxsLmRpdmlzb3I9dn19b1t0XT1HdChmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYocyBpbiByKXJldHVybiByW3NdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKGwpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1sW3RdfSksbC5idWZmZXImJihuLmJ1ZmZlcj10LmxpbmsobC5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW3NdPW4sbn0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7ZnVuY3Rpb24gaSh0KXtuKGNbdF0sIj0iLGEsIi4iLHQsInwwOyIpfXZhciBhPWUuaW52b2tlKG4sciksbz1lLnNoYXJlZCxzPW8uaXNCdWZmZXJBcmdzLGw9by5idWZmZXI7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChuLGErIiYmKHR5cGVvZiAiK2ErJz09PSJvYmplY3QifHx0eXBlb2YgJythKyc9PT0iZnVuY3Rpb24iKSYmKCcrcysiKCIrYSsiKXx8IitsKyIuZ2V0QnVmZmVyKCIrYSsiKXx8IitsKyIuZ2V0QnVmZmVyKCIrYSsiLmJ1ZmZlcil8fCIrcysiKCIrYSsnLmJ1ZmZlcil8fCgiY29uc3RhbnQiIGluICcrYSsiJiYodHlwZW9mICIrYSsnLmNvbnN0YW50PT09Im51bWJlciJ8fCcrby5pc0FycmF5TGlrZSsiKCIrYSsiLmNvbnN0YW50KSkpKSIsJ2ludmFsaWQgZHluYW1pYyBhdHRyaWJ1dGUgIicrdCsnIicpfSk7dmFyIGM9e2lzU3RyZWFtOm4uZGVmKCExKX0sdT1uZXcgVzt1LnN0YXRlPSRuLE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1uLmRlZigiIit1W3RdKX0pO3ZhciBmPWMuYnVmZmVyLGg9Yy50eXBlO3JldHVybiBuKCJpZigiLHMsIigiLGEsIikpeyIsYy5pc1N0cmVhbSwiPXRydWU7IixmLCI9IixsLCIuY3JlYXRlU3RyZWFtKCIsWmksIiwiLGEsIik7IixoLCI9IixmLCIuZHR5cGU7IiwifWVsc2V7IixmLCI9IixsLCIuZ2V0QnVmZmVyKCIsYSwiKTsiLCJpZigiLGYsIil7IixoLCI9IixmLCIuZHR5cGU7IiwnfWVsc2UgaWYoImNvbnN0YW50IiBpbiAnLGEsIil7IixjLnN0YXRlLCI9Iix0aSwiOyIsImlmKHR5cGVvZiAiK2ErJy5jb25zdGFudCA9PT0gIm51bWJlciIpeycsY1tLblswXV0sIj0iLGEsIi5jb25zdGFudDsiLEtuLnNsaWNlKDEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gY1t0XX0pLmpvaW4oIj0iKSwiPTA7IiwifWVsc2V7IixLbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gY1t0XSsiPSIrYSsiLmNvbnN0YW50Lmxlbmd0aD49IitlKyI/IithKyIuY29uc3RhbnRbIitlKyJdOjA7In0pLmpvaW4oIiIpLCJ9fWVsc2V7IiwiaWYoIixzLCIoIixhLCIuYnVmZmVyKSl7IixmLCI9IixsLCIuY3JlYXRlU3RyZWFtKCIsWmksIiwiLGEsIi5idWZmZXIpOyIsIn1lbHNleyIsZiwiPSIsbCwiLmdldEJ1ZmZlcigiLGEsIi5idWZmZXIpOyIsIn0iLGgsJz0idHlwZSIgaW4gJyxhLCI/IixvLmdsVHlwZXMsIlsiLGEsIi50eXBlXToiLGYsIi5kdHlwZTsiLGMubm9ybWFsaXplZCwiPSEhIixhLCIubm9ybWFsaXplZDsiKSxpKCJzaXplIiksaSgib2Zmc2V0IiksaSgic3RyaWRlIiksaSgiZGl2aXNvciIpLG4oIn19Iiksbi5leGl0KCJpZigiLGMuaXNTdHJlYW0sIil7IixsLCIuZGVzdHJveVN0cmVhbSgiLGYsIik7IiwifSIpLGN9dmFyIHI9YVt0XTtvW3RdPVl0KHIsZSl9KSxvfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lW3RdO25bdF09R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHI/IiIrcjp0Lmxpbmsocil9KX0pLE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9clt0XTtuW3RdPVl0KGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksbn1mdW5jdGlvbiBTKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt2YXIgZT1jW3RdO2UmJihmW3RdPWUpfXZhciBvPXQuc3RhdGljLHM9dC5keW5hbWljO2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlLmNvbW1hbmQoZS5pbmRleE9mKHQpPj0wLCd1bmtub3duIHBhcmFtZXRlciAiJyt0KyciJyxpLmNvbW1hbmRTdHIpfSl9dmFyIGU9W3ppLE9pLFJpLEZpLGppLEJpLE5pLFVpLFBpXS5jb25jYXQoZXQpO3QobyksdChzKX0pO3ZhciBsPXgodCxpKSxjPV8odCxsLGkpLHU9TSh0LGkpLGY9VCh0LGkpLGg9dyh0LGkpO2EoRGkpLGEobShJaSkpO3ZhciBkPU9iamVjdC5rZXlzKGYpLmxlbmd0aD4wLHA9e2ZyYW1lYnVmZmVyOmwsZHJhdzp1LHNoYWRlcjpoLHN0YXRlOmYsZGlydHk6ZH07cmV0dXJuIHAucHJvZmlsZT1iKHQsaSkscC51bmlmb3Jtcz1rKHIsaSkscC5hdHRyaWJ1dGVzPUEoZSxpKSxwLmNvbnRleHQ9RShuLGkpLHB9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmNvbnRleHQsYT10LnNjb3BlKCk7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihuKXtlLnNhdmUoaSwiLiIrbik7dmFyIG89cltuXTthKGksIi4iLG4sIj0iLG8uYXBwZW5kKHQsZSksIjsiKX0pLGUoYSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaSxhPXQuc2hhcmVkLG89YS5nbCxzPWEuZnJhbWVidWZmZXI7USYmKGk9ZS5kZWYoYS5leHRlbnNpb25zLCIud2ViZ2xfZHJhd19idWZmZXJzIikpO3ZhciBsLGM9dC5jb25zdGFudHMsdT1jLmRyYXdCdWZmZXIsZj1jLmJhY2tCdWZmZXI7bD1yP3IuYXBwZW5kKHQsZSk6ZS5kZWYocywiLm5leHQiKSxufHxlKCJpZigiLGwsIiE9PSIscywiLmN1cil7IiksZSgiaWYoIixsLCIpeyIsbywiLmJpbmRGcmFtZWJ1ZmZlcigiLGphLCIsIixsLCIuZnJhbWVidWZmZXIpOyIpLFEmJmUoaSwiLmRyYXdCdWZmZXJzV0VCR0woIix1LCJbIixsLCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTsiKSxlKCJ9ZWxzZXsiLG8sIi5iaW5kRnJhbWVidWZmZXIoIixqYSwiLG51bGwpOyIpLFEmJmUoaSwiLmRyYXdCdWZmZXJzV0VCR0woIixmLCIpOyIpLGUoIn0iLHMsIi5jdXI9IixsLCI7Iiksbnx8ZSgifSIpfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQuc2hhcmVkLGk9bi5nbCxhPXQuY3VycmVudCxvPXQubmV4dCxzPW4uY3VycmVudCxsPW4ubmV4dCxjPXQuY29uZChzLCIuZGlydHkiKTtldC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW0oZSk7aWYoIShuIGluIHIuc3RhdGUpKXt2YXIgdSxmO2lmKG4gaW4gbyl7dT1vW25dLGY9YVtuXTt2YXIgaD1KKCRbbl0ubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiBjLmRlZih1LCJbIix0LCJdIil9KTtjKHQuY29uZChoLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK2YrIlsiK2UrIl0ifSkuam9pbigifHwiKSkudGhlbihpLCIuIixudFtuXSwiKCIsaCwiKTsiLGgubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7IikpfWVsc2V7dT1jLmRlZihsLCIuIixuKTt2YXIgZD10LmNvbmQodSwiIT09IixzLCIuIixuKTtjKGQpLG4gaW4gcnQ/ZCh0LmNvbmQodSkudGhlbihpLCIuZW5hYmxlKCIscnRbbl0sIik7IikuZWxzZShpLCIuZGlzYWJsZSgiLHJ0W25dLCIpOyIpLHMsIi4iLG4sIj0iLHUsIjsiKTpkKGksIi4iLG50W25dLCIoIix1LCIpOyIscywiLiIsbiwiPSIsdSwiOyIpfX19KSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZjKHMsIi5kaXJ0eT1mYWxzZTsiKSxlKGMpfWZ1bmN0aW9uIEQodCxlLHIsbil7dmFyIGk9dC5zaGFyZWQsYT10LmN1cnJlbnQsbz1pLmN1cnJlbnQscz1pLmdsO1Z0KE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBsPXJbaV07aWYoIW58fG4obCkpe3ZhciBjPWwuYXBwZW5kKHQsZSk7aWYocnRbaV0pe3ZhciB1PXJ0W2ldO3F0KGwpP2M/ZShzLCIuZW5hYmxlKCIsdSwiKTsiKTplKHMsIi5kaXNhYmxlKCIsdSwiKTsiKTplKHQuY29uZChjKS50aGVuKHMsIi5lbmFibGUoIix1LCIpOyIpLmVsc2UocywiLmRpc2FibGUoIix1LCIpOyIpKSxlKG8sIi4iLGksIj0iLGMsIjsiKX1lbHNlIGlmKG10KGMpKXt2YXIgZj1hW2ldO2UocywiLiIsbnRbaV0sIigiLGMsIik7IixjLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pLmpvaW4oIjsiKSwiOyIpfWVsc2UgZShzLCIuIixudFtpXSwiKCIsYywiKTsiLG8sIi4iLGksIj0iLGMsIjsiKX19KX1mdW5jdGlvbiBQKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiB6KHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXtjPWUuZGVmKCksdChjLCI9IixhKCksIjsiKSwic3RyaW5nIj09dHlwZW9mIGk/dChwLCIuY291bnQrPSIsaSwiOyIpOnQocCwiLmNvdW50Kys7IiksZCYmKG4/KHU9ZS5kZWYoKSx0KHUsIj0iLHYsIi5nZXROdW1QZW5kaW5nUXVlcmllcygpOyIpKTp0KHYsIi5iZWdpblF1ZXJ5KCIscCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KHAsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QodiwiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsdiwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixwLCIpOyIpOnQodiwiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYobSwiLnByb2ZpbGUiKTtlKG0sIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChtLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGYsaD10LnNoYXJlZCxwPXQuc3RhdHMsbT1oLmN1cnJlbnQsdj1oLnRpbWVyLGc9ci5wcm9maWxlO2lmKGcpe2lmKHF0KGcpKXJldHVybiB2b2lkKGcuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKCJ0cnVlIikpOmwoImZhbHNlIikpO2Y9Zy5hcHBlbmQodCxlKSxsKGYpfWVsc2UgZj1lLmRlZihtLCIucHJvZmlsZSIpO3ZhciB5PXQuYmxvY2soKTtvKHkpLGUoImlmKCIsZiwiKXsiLHksIn0iKTt2YXIgYj10LmJsb2NrKCk7cyhiKSxlLmV4aXQoImlmKCIsZiwiKXsiLGIsIn0iKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSBjYTpjYXNlIGRhOmNhc2UgZ2E6cmV0dXJuIDI7Y2FzZSB1YTpjYXNlIHBhOmNhc2UgeWE6cmV0dXJuIDM7Y2FzZSBmYTpjYXNlIG1hOmNhc2UgYmE6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMX19ZnVuY3Rpb24gbyhyLG4saSl7ZnVuY3Rpb24gYSgpe2UoImlmKCEiLHUsIi5idWZmZXIpeyIsbCwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsYywiKTt9Iik7dmFyIHIsYT1pLnR5cGU7aWYocj1pLnNpemU/ZS5kZWYoaS5zaXplLCJ8fCIsbik6bixlKCJpZigiLHUsIi50eXBlIT09IixhLCJ8fCIsdSwiLnNpemUhPT0iLHIsInx8IixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IitpW3RdfSkuam9pbigifHwiKSwiKXsiLGwsIi5iaW5kQnVmZmVyKCIsWmksIiwiLGgsIi5idWZmZXIpOyIsbCwiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixbYyxyLGEsaS5ub3JtYWxpemVkLGkuc3RyaWRlLGkub2Zmc2V0XSwiKTsiLHUsIi50eXBlPSIsYSwiOyIsdSwiLnNpemU9IixyLCI7IixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiPSIraVt0XSsiOyJ9KS5qb2luKCIiKSwifSIpLEspe3ZhciBvPWkuZGl2aXNvcjtlKCJpZigiLHUsIi5kaXZpc29yIT09IixvLCIpeyIsdC5pbnN0YW5jaW5nLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsW2Msb10sIik7Iix1LCIuZGl2aXNvcj0iLG8sIjt9Iil9fWZ1bmN0aW9uIG8oKXtlKCJpZigiLHUsIi5idWZmZXIpeyIsbCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7IiwifWlmKCIsS24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIiE9PSIrZFtlXX0pLmpvaW4oInx8IiksIil7IixsLCIudmVydGV4QXR0cmliNGYoIixjLCIsIixkLCIpOyIsS24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIj0iK2RbZV0rIjsifSkuam9pbigiIiksIn0iKX12YXIgbD1zLmdsLGM9ZS5kZWYociwiLmxvY2F0aW9uIiksdT1lLmRlZihzLmF0dHJpYnV0ZXMsIlsiLGMsIl0iKSxmPWkuc3RhdGUsaD1pLmJ1ZmZlcixkPVtpLngsaS55LGkueixpLnddLHA9WyJidWZmZXIiLCJub3JtYWxpemVkIiwib2Zmc2V0Iiwic3RyaWRlIl07Zj09PSRuP2EoKTpmPT09dGk/bygpOihlKCJpZigiLGYsIj09PSIsJG4sIil7IiksYSgpLGUoIn1lbHNleyIpLG8oKSxlKCJ9IikpfXZhciBzPXQuc2hhcmVkO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcyxsPW4ubmFtZSxjPXIuYXR0cmlidXRlc1tsXTtpZihjKXtpZighaShjKSlyZXR1cm47cz1jLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoWWEpKXJldHVybjt2YXIgdT10LnNjb3BlQXR0cmliKGwpO2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSx1KyIuc3RhdGUiLCJtaXNzaW5nIGF0dHJpYnV0ZSAiK2wpfSkscz17fSxPYmplY3Qua2V5cyhuZXcgVykuZm9yRWFjaChmdW5jdGlvbih0KXtzW3RdPWUuZGVmKHUsIi4iLHQpfSl9byh0LmxpbmsobiksYShuLmluZm8udHlwZSkscyl9KX1mdW5jdGlvbiBSKHQscixuLGksYSl7Zm9yKHZhciBvLHM9dC5zaGFyZWQsbD1zLmdsLGM9MDtjPGkubGVuZ3RoOysrYyl7dmFyIHUsZj1pW2NdLGg9Zi5uYW1lLGQ9Zi5pbmZvLnR5cGUscD1uLnVuaWZvcm1zW2hdLG09dC5saW5rKGYpLHY9bSsiLmxvY2F0aW9uIjtpZihwKXtpZighYShwKSljb250aW51ZTtpZihxdChwKSl7dmFyIGc9cC52YWx1ZTtpZihkZS5jb21tYW5kKG51bGwhPT1nJiZ2b2lkIDAhPT1nLCdtaXNzaW5nIHVuaWZvcm0gIicraCsnIicsdC5jb21tYW5kU3RyKSxkPT09TWF8fGQ9PT1UYSl7ZGUuY29tbWFuZCgiZnVuY3Rpb24iPT10eXBlb2YgZyYmKGQ9PT1NYSYmKCJ0ZXh0dXJlMmQiPT09Zy5fcmVnbFR5cGV8fCJmcmFtZWJ1ZmZlciI9PT1nLl9yZWdsVHlwZSl8fGQ9PT1UYSYmKCJ0ZXh0dXJlQ3ViZSI9PT1nLl9yZWdsVHlwZXx8ImZyYW1lYnVmZmVyQ3ViZSI9PT1nLl9yZWdsVHlwZSkpLCJpbnZhbGlkIHRleHR1cmUgZm9yIHVuaWZvcm0gIitoLHQuY29tbWFuZFN0cik7dmFyIHk9dC5saW5rKGcuX3RleHR1cmV8fGcuY29sb3JbMF0uX3RleHR1cmUpO3IobCwiLnVuaWZvcm0xaSgiLHYsIiwiLHkrIi5iaW5kKCkpOyIpLHIuZXhpdCh5LCIudW5iaW5kKCk7Iil9ZWxzZSBpZihkPT09eGF8fGQ9PT1fYXx8ZD09PXdhKXtkZS5vcHRpb25hbChmdW5jdGlvbigpe2RlLmNvbW1hbmQobXQoZyksImludmFsaWQgbWF0cml4IGZvciB1bmlmb3JtICIraCx0LmNvbW1hbmRTdHIpLGRlLmNvbW1hbmQoZD09PXhhJiY0PT09Zy5sZW5ndGh8fGQ9PT1fYSYmOT09PWcubGVuZ3RofHxkPT09d2EmJjE2PT09Zy5sZW5ndGgsImludmFsaWQgbGVuZ3RoIGZvciBtYXRyaXggdW5pZm9ybSAiK2gsdC5jb21tYW5kU3RyKX0pO3ZhciBiPXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheShbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnKSsiXSkiKSx4PTI7ZD09PV9hP3g9MzpkPT09d2EmJih4PTQpLHIobCwiLnVuaWZvcm1NYXRyaXgiLHgsImZ2KCIsdiwiLGZhbHNlLCIsYiwiKTsiKX1lbHNle3N3aXRjaChkKXtjYXNlIGxhOmRlLmNvbW1hbmRUeXBlKGcsIm51bWJlciIsInVuaWZvcm0gIitoLHQuY29tbWFuZFN0ciksbz0iMWYiO2JyZWFrO2Nhc2UgY2E6ZGUuY29tbWFuZChtdChnKSYmMj09PWcubGVuZ3RoLCJ1bmlmb3JtICIraCx0LmNvbW1hbmRTdHIpLG89IjJmIjticmVhaztjYXNlIHVhOmRlLmNvbW1hbmQobXQoZykmJjM9PT1nLmxlbmd0aCwidW5pZm9ybSAiK2gsdC5jb21tYW5kU3RyKSxvPSIzZiI7YnJlYWs7Y2FzZSBmYTpkZS5jb21tYW5kKG10KGcpJiY0PT09Zy5sZW5ndGgsInVuaWZvcm0gIitoLHQuY29tbWFuZFN0ciksbz0iNGYiO2JyZWFrO2Nhc2UgdmE6ZGUuY29tbWFuZFR5cGUoZywiYm9vbGVhbiIsInVuaWZvcm0gIitoLHQuY29tbWFuZFN0ciksbz0iMWkiO2JyZWFrO2Nhc2UgaGE6ZGUuY29tbWFuZFR5cGUoZywibnVtYmVyIiwidW5pZm9ybSAiK2gsdC5jb21tYW5kU3RyKSxvPSIxaSI7YnJlYWs7Y2FzZSBnYTpkZS5jb21tYW5kKG10KGcpJiYyPT09Zy5sZW5ndGgsInVuaWZvcm0gIitoLHQuY29tbWFuZFN0ciksbz0iMmkiO2JyZWFrO2Nhc2UgZGE6ZGUuY29tbWFuZChtdChnKSYmMj09PWcubGVuZ3RoLCJ1bmlmb3JtICIraCx0LmNvbW1hbmRTdHIpLG89IjJpIjticmVhaztjYXNlIHlhOmRlLmNvbW1hbmQobXQoZykmJjM9PT1nLmxlbmd0aCwidW5pZm9ybSAiK2gsdC5jb21tYW5kU3RyKSxvPSIzaSI7YnJlYWs7Y2FzZSBwYTpkZS5jb21tYW5kKG10KGcpJiYzPT09Zy5sZW5ndGgsInVuaWZvcm0gIitoLHQuY29tbWFuZFN0ciksbz0iM2kiO2JyZWFrO2Nhc2UgYmE6ZGUuY29tbWFuZChtdChnKSYmND09PWcubGVuZ3RoLCJ1bmlmb3JtICIraCx0LmNvbW1hbmRTdHIpLG89IjRpIjticmVhaztjYXNlIG1hOmRlLmNvbW1hbmQobXQoZykmJjQ9PT1nLmxlbmd0aCwidW5pZm9ybSAiK2gsdC5jb21tYW5kU3RyKSxvPSI0aSJ9cihsLCIudW5pZm9ybSIsbywiKCIsdiwiLCIsbXQoZyk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZyk6ZywiKTsiKX1jb250aW51ZX11PXAuYXBwZW5kKHQscil9ZWxzZXtpZighYShZYSkpY29udGludWU7dT1yLmRlZihzLnVuaWZvcm1zLCJbIixlLmlkKGgpLCJdIil9ZD09PU1hP3IoImlmKCIsdSwiJiYiLHUsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXIiKXsnLHUsIj0iLHUsIi5jb2xvclswXTsiLCJ9Iik6ZD09PVRhJiZyKCJpZigiLHUsIiYmIix1LCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyQ3ViZSIpeycsdSwiPSIsdSwiLmNvbG9yWzBdOyIsIn0iKSxkZS5vcHRpb25hbChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuKXt0LmFzc2VydChyLGUsJ2JhZCBkYXRhIG9yIG1pc3NpbmcgZm9yIHVuaWZvcm0gIicraCsnIi4gICcrbil9ZnVuY3Rpb24gbih0KXtlKCJ0eXBlb2YgIit1Kyc9PT0iJyt0KyciJywiaW52YWxpZCB0eXBlLCBleHBlY3RlZCAiK3QpfWZ1bmN0aW9uIGkocixuKXtlKHMuaXNBcnJheUxpa2UrIigiK3UrIikmJiIrdSsiLmxlbmd0aD09PSIrciwiaW52YWxpZCB2ZWN0b3IsIHNob3VsZCBoYXZlIGxlbmd0aCAiK3IsdC5jb21tYW5kU3RyKX1mdW5jdGlvbiBhKHIpe2UoInR5cGVvZiAiK3UrJz09PSJmdW5jdGlvbiImJicrdSsnLl9yZWdsVHlwZT09PSJ0ZXh0dXJlJysocj09PUtpPyIyZCI6IkN1YmUiKSsnIicsImludmFsaWQgdGV4dHVyZSB0eXBlIix0LmNvbW1hbmRTdHIpfXN3aXRjaChkKXtjYXNlIGhhOm4oIm51bWJlciIpO2JyZWFrO2Nhc2UgZGE6aSgyLCJudW1iZXIiKTticmVhaztjYXNlIHBhOmkoMywibnVtYmVyIik7YnJlYWs7Y2FzZSBtYTppKDQsIm51bWJlciIpO2JyZWFrO2Nhc2UgbGE6bigibnVtYmVyIik7YnJlYWs7Y2FzZSBjYTppKDIsIm51bWJlciIpO2JyZWFrO2Nhc2UgdWE6aSgzLCJudW1iZXIiKTticmVhaztjYXNlIGZhOmkoNCwibnVtYmVyIik7YnJlYWs7Y2FzZSB2YTpuKCJib29sZWFuIik7YnJlYWs7Y2FzZSBnYTppKDIsImJvb2xlYW4iKTticmVhaztjYXNlIHlhOmkoMywiYm9vbGVhbiIpO2JyZWFrO2Nhc2UgYmE6aSg0LCJib29sZWFuIik7YnJlYWs7Y2FzZSB4YTppKDQsIm51bWJlciIpO2JyZWFrO2Nhc2UgX2E6aSg5LCJudW1iZXIiKTticmVhaztjYXNlIHdhOmkoMTYsIm51bWJlciIpO2JyZWFrO2Nhc2UgTWE6YShLaSk7YnJlYWs7Y2FzZSBUYTphKFFpKX19KTt2YXIgXz0xO3N3aXRjaChkKXtjYXNlIE1hOmNhc2UgVGE6dmFyIHc9ci5kZWYodSwiLl90ZXh0dXJlIik7cihsLCIudW5pZm9ybTFpKCIsdiwiLCIsdywiLmJpbmQoKSk7Iiksci5leGl0KHcsIi51bmJpbmQoKTsiKTtjb250aW51ZTtjYXNlIGhhOmNhc2UgdmE6bz0iMWkiO2JyZWFrO2Nhc2UgZGE6Y2FzZSBnYTpvPSIyaSIsXz0yO2JyZWFrO2Nhc2UgcGE6Y2FzZSB5YTpvPSIzaSIsXz0zO2JyZWFrO2Nhc2UgbWE6Y2FzZSBiYTpvPSI0aSIsXz00O2JyZWFrO2Nhc2UgbGE6bz0iMWYiO2JyZWFrO2Nhc2UgY2E6bz0iMmYiLF89MjticmVhaztjYXNlIHVhOm89IjNmIixfPTM7YnJlYWs7Y2FzZSBmYTpvPSI0ZiIsXz00O2JyZWFrO2Nhc2UgeGE6bz0iTWF0cml4MmZ2IjticmVhaztjYXNlIF9hOm89Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSB3YTpvPSJNYXRyaXg0ZnYifWlmKHIobCwiLnVuaWZvcm0iLG8sIigiLHYsIiwiKSwiTSI9PT1vLmNoYXJBdCgwKSl7dmFyIE09TWF0aC5wb3coZC14YSsyLDIpLFQ9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsTSwiKSIpO3IoImZhbHNlLChBcnJheS5pc0FycmF5KCIsdSwiKXx8Iix1LCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIsdSwiOigiLEooTSxmdW5jdGlvbih0KXtyZXR1cm4gVCsiWyIrdCsiXT0iK3UrIlsiK3QrIl0ifSksIiwiLFQsIikiKX1lbHNlIHIoXz4xP0ooXyxmdW5jdGlvbih0KXtyZXR1cm4gdSsiWyIrdCsiXSJ9KTp1KTtyKCIpOyIpfX1mdW5jdGlvbiBGKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9dVtpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoYywiLiIsaSl9ZnVuY3Rpb24gYSgpe2Z1bmN0aW9uIHQoKXtyKHYsIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSgiLFtoLHAsZyxkKyI8PCgoIitnKyItIitRbisiKT4+MSkiLG1dLCIpOyIpfWZ1bmN0aW9uIGUoKXtyKHYsIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoIixbaCxkLHAsbV0sIik7Iil9Zj95P3QoKToocigiaWYoIixmLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIHQoKXtyKGwrIi5kcmF3RWxlbWVudHMoIitbaCxwLGcsZCsiPDwoKCIrZysiLSIrUW4rIik+PjEpIl0rIik7Iil9ZnVuY3Rpb24gZSgpe3IobCsiLmRyYXdBcnJheXMoIitbaCxkLHBdKyIpOyIpfWY/eT90KCk6KHIoImlmKCIsZiwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfXZhciBzPXQuc2hhcmVkLGw9cy5nbCxjPXMuZHJhdyx1PW4uZHJhdyxmPWZ1bmN0aW9uKCl7dmFyIGksYT11LmVsZW1lbnRzLG89ZTtyZXR1cm4gYT8oKGEuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwKSYmKG89ciksaT1hLmFwcGVuZCh0LG8pKTppPW8uZGVmKGMsIi4iLEZpKSxpJiZvKCJpZigiK2krIikiK2wrIi5iaW5kQnVmZmVyKCIrSmkrIiwiK2krIi5idWZmZXIuYnVmZmVyKTsiKSxpfSgpLGg9aShqaSksZD1pKEJpKSxwPWZ1bmN0aW9uKCl7dmFyIGksYT11LmNvdW50LG89ZTtyZXR1cm4gYT8oKGEuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwKSYmKG89ciksaT1hLmFwcGVuZCh0LG8pLGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7YS5NSVNTSU5HJiZ0LmFzc2VydChlLCJmYWxzZSIsIm1pc3NpbmcgdmVydGV4IGNvdW50IiksYS5EWU5BTUlDJiZ0LmFzc2VydChvLGkrIj49MCIsIm1pc3NpbmcgdmVydGV4IGNvdW50Iil9KSk6KGk9by5kZWYoYywiLiIsTmkpLGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQobyxpKyI+PTAiLCJtaXNzaW5nIHZlcnRleCBjb3VudCIpfSkpLGl9KCk7aWYoIm51bWJlciI9PXR5cGVvZiBwKXtpZigwPT09cClyZXR1cm59ZWxzZSByKCJpZigiLHAsIil7Iiksci5leGl0KCJ9Iik7dmFyIG0sdjtLJiYobT1pKFVpKSx2PXQuaW5zdGFuY2luZyk7dmFyIGc9ZisiLnR5cGUiLHk9dS5lbGVtZW50cyYmcXQodS5lbGVtZW50cyk7SyYmKCJudW1iZXIiIT10eXBlb2YgbXx8bT49MCk/InN0cmluZyI9PXR5cGVvZiBtPyhyKCJpZigiLG0sIj4wKXsiKSxhKCkscigifWVsc2UgaWYoIixtLCI8MCl7IiksbygpLHIoIn0iKSk6YSgpOm8oKX1mdW5jdGlvbiBqKHQsZSxyLG4saSl7dmFyIGE9eSgpLG89YS5wcm9jKCJib2R5IixpKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXthLmNvbW1hbmRTdHI9ZS5jb21tYW5kU3RyLGEuY29tbWFuZD1hLmxpbmsoZS5jb21tYW5kU3RyKX0pLEsmJihhLmluc3RhbmNpbmc9by5kZWYoYS5zaGFyZWQuZXh0ZW5zaW9ucywiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMiKSksdChhLG8scixuKSxhLmNvbXBpbGUoKS5ib2R5fWZ1bmN0aW9uIE4odCxlLHIsbil7UCh0LGUpLE8odCxlLHIsbi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxSKHQsZSxyLG4udW5pZm9ybXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLEYodCxlLGUscil9ZnVuY3Rpb24gQih0LGUpe3ZhciByPXQucHJvYygiZHJhdyIsMSk7UCh0LHIpLEwodCxyLGUuY29udGV4dCksQyh0LHIsZS5mcmFtZWJ1ZmZlciksSSh0LHIsZSksRCh0LHIsZS5zdGF0ZSkseih0LHIsZSwhMSwhMCk7dmFyIG49ZS5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCxyKTtpZihyKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKU4odCxyLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgaT10Lmdsb2JhbC5kZWYoInt9IiksYT1yLmRlZihuLCIuaWQiKSxvPXIuZGVmKGksIlsiLGEsIl0iKTtyKHQuY29uZChvKS50aGVuKG8sIi5jYWxsKHRoaXMsYTApOyIpLmVsc2UobywiPSIsaSwiWyIsYSwiXT0iLHQubGluayhmdW5jdGlvbihyKXtyZXR1cm4gaihOLHQsZSxyLDEpfSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoPjAmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9ZnVuY3Rpb24gVSh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPSJhMSIsUCh0LGUpLE8odCxlLHIsbi5hdHRyaWJ1dGVzLGkpLFIodCxlLHIsbi51bmlmb3JtcyxpKSxGKHQsZSxlLHIpfWZ1bmN0aW9uIFYodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZvfHx0LnByb3BEZXB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KX1QKHQsZSk7dmFyIG89ci5jb250ZXh0RGVwLHM9ZS5kZWYoKSxsPWUuZGVmKCk7dC5zaGFyZWQucHJvcHM9bCx0LmJhdGNoSWQ9czt2YXIgYz10LnNjb3BlKCksdT10LnNjb3BlKCk7aWYoZShjLmVudHJ5LCJmb3IoIixzLCI9MDsiLHMsIjwiLCJhMSIsIjsrKyIscywiKXsiLGwsIj0iLCJhMCIsIlsiLHMsIl07Iix1LCJ9IixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZMKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmQyh0LHUsci5mcmFtZWJ1ZmZlciksRCh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmeih0LHUsciwhMSwhMCksbilPKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxPKHQsdSxyLG4uYXR0cmlidXRlcyxpKSxSKHQsYyxyLG4udW5pZm9ybXMsYSksUih0LHUscixuLnVuaWZvcm1zLGkpLEYodCxjLHUscik7ZWxzZXt2YXIgZj10Lmdsb2JhbC5kZWYoInt9IiksaD1yLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHUpLGQ9dS5kZWYoaCwiLmlkIikscD11LmRlZihmLCJbIixkLCJdIik7dSh0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixoLCIucHJvZ3JhbSk7IiwiaWYoISIscCwiKXsiLHAsIj0iLGYsIlsiLGQsIl09Iix0LmxpbmsoZnVuY3Rpb24oZSl7cmV0dXJuIGooVSx0LHIsZSwyKX0pLCIoIixoLCIpO30iLHAsIi5jYWxsKHRoaXMsYTBbIixzLCJdLCIscywiKTsiKX19ZnVuY3Rpb24gSCh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuY29udGV4dERlcCYmaXx8dC5wcm9wRGVwfXZhciBuPXQucHJvYygiYmF0Y2giLDIpO3QuYmF0Y2hJZD0iMCIsUCh0LG4pO3ZhciBpPSExLGE9ITA7T2JqZWN0LmtleXMoZS5jb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSxpfHwoTCh0LG4sZS5jb250ZXh0KSxhPSExKTt2YXIgbz1lLmZyYW1lYnVmZmVyLHM9ITE7bz8oby5wcm9wRGVwP2k9cz0hMDpvLmNvbnRleHREZXAmJmkmJihzPSEwKSxzfHxDKHQsbixvKSk6Qyh0LG4sbnVsbCksZS5zdGF0ZS52aWV3cG9ydCYmZS5zdGF0ZS52aWV3cG9ydC5wcm9wRGVwJiYoaT0hMCksSSh0LG4sZSksRCh0LG4sZS5zdGF0ZSxmdW5jdGlvbih0KXtyZXR1cm4hcih0KX0pLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHx6KHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPXM7dmFyIGw9ZS5zaGFkZXIucHJvZ1ZhcjtpZihsLmNvbnRleHREZXAmJml8fGwucHJvcERlcClWKHQsbixlLG51bGwpO2Vsc2V7dmFyIGM9bC5hcHBlbmQodCxuKTtpZihuKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGMsIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKVYodCxuLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgdT10Lmdsb2JhbC5kZWYoInt9IiksZj1uLmRlZihjLCIuaWQiKSxoPW4uZGVmKHUsIlsiLGYsIl0iKTtuKHQuY29uZChoKS50aGVuKGgsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UoaCwiPSIsdSwiWyIsZiwiXT0iLHQubGluayhmdW5jdGlvbihyKXtyZXR1cm4gaihWLHQsZSxyLDIpfSksIigiLGMsIik7IixoLCIuY2FsbCh0aGlzLGEwLGExKTsiKSl9fU9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aD4wJiZuKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpfWZ1bmN0aW9uIHEodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLCIuIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O0wodCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxWdChPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLG89bi5hcHBlbmQodCxpKTttdChvKT9vLmZvckVhY2goZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpfSk6aS5zZXQoYS5uZXh0LCIuIitlLG8pfSkseih0LGksciwhMCwhMCksW0ZpLEJpLE5pLFVpLGppXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFcpLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pfSksbihPaSksbihSaSksT2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoPjAmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gRyh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtdCh0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZih2ZS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtvLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49aVtyXTtpZih2ZS5pc0R5bmFtaWMobikpe3ZhciBhPXQuaW52b2tlKGUsbik7ZSh1LCIuIixyLCI9IixhLCI7Iil9fSl9dmFyIGk9ZS5zdGF0aWNbcl07aWYoaSYmRyhpKSl7dmFyIGE9dC5nbG9iYWwsbz1PYmplY3Qua2V5cyhpKSxzPSExLGw9ITEsYz0hMSx1PXQuZ2xvYmFsLmRlZigie30iKTtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aVtlXTtpZih2ZS5pc0R5bmFtaWMocikpeyJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1pW2VdPXZlLnVuYm94KHIpKTt2YXIgbj1ZdChyLG51bGwpO3M9c3x8bi50aGlzRGVwLGM9Y3x8bi5wcm9wRGVwLGw9bHx8bi5jb250ZXh0RGVwfWVsc2V7c3dpdGNoKGEodSwiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6YShyKTticmVhaztjYXNlInN0cmluZyI6YSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZhKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6YSh0LmxpbmsocikpfWEoIjsiKX19KSxlLmR5bmFtaWNbcl09bmV3IHZlLkR5bmFtaWNWYXJpYWJsZShhaSx7dGhpc0RlcDpzLGNvbnRleHREZXA6bCxwcm9wRGVwOmMscmVmOnUsYXBwZW5kOm59KSxkZWxldGUgZS5zdGF0aWNbcl19fWZ1bmN0aW9uIFgodCxlLHIsbixpKXt2YXIgYT15KCk7YS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24odCl7WShhLGUsdCl9KSxXaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1koYSx0LGUpfSk7dmFyIG89Uyh0LGUscixuLGEpO3JldHVybiBCKGEsbykscShhLG8pLEgoYSxvKSxhLmNvbXBpbGUoKX12YXIgVz1jLlJlY29yZCxaPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsInJldmVyc2Ugc3VidHJhY3QiOjMyNzc5fTtyLmV4dF9ibGVuZF9taW5tYXgmJihaLm1pbj1DYSxaLm1heD1JYSk7dmFyIEs9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLFE9ci53ZWJnbF9kcmF3X2J1ZmZlcnMsJD17ZGlydHk6ITAscHJvZmlsZTpwLnByb2ZpbGV9LHR0PXt9LGV0PVtdLHJ0PXt9LG50PXt9O3Yob2ksZWEpLHYoc2ksdGEpLGcobGksImJsZW5kQ29sb3IiLFswLDAsMCwwXSksZyhjaSwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbUmEsUmFdKSxnKHVpLCJibGVuZEZ1bmNTZXBhcmF0ZSIsW09hLHphLE9hLHphXSksdihmaSxuYSwhMCksZyhoaSwiZGVwdGhGdW5jIixGYSksZyhkaSwiZGVwdGhSYW5nZSIsWzAsMV0pLGcocGksImRlcHRoTWFzayIsITApLGcobWksbWksWyEwLCEwLCEwLCEwXSksdih2aSwkaSksZyhnaSwiY3VsbEZhY2UiLEVhKSxnKHlpLHlpLExhKSxnKGJpLGJpLDEpLHYoeGksYWEpLGcoX2ksInBvbHlnb25PZmZzZXQiLFswLDBdKSx2KHdpLG9hKSx2KE1pLHNhKSxnKFRpLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx2KGtpLHJhKSxnKEFpLCJzdGVuY2lsTWFzayIsLTEpLGcoRWksInN0ZW5jaWxGdW5jIixbRGEsMCwtMV0pLGcoU2ksInN0ZW5jaWxPcFNlcGFyYXRlIixbQWEsUGEsUGEsUGFdKSxnKExpLCJzdGVuY2lsT3BTZXBhcmF0ZSIsW0VhLFBhLFBhLFBhXSksdihDaSxpYSksZyhJaSwic2Npc3NvciIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxnKERpLERpLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIGl0PXtnbDp0LGNvbnRleHQ6aCxzdHJpbmdzOmUsbmV4dDp0dCxjdXJyZW50OiQsZHJhdzpmLGVsZW1lbnRzOmEsYnVmZmVyOmksc2hhZGVyOnUsYXR0cmlidXRlczpjLnN0YXRlLHVuaWZvcm1zOmwsZnJhbWVidWZmZXI6cyxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6VXR9LGF0PXtwcmltVHlwZXM6QmUsY29tcGFyZUZ1bmNzOlZhLGJsZW5kRnVuY3M6QmEsYmxlbmRFcXVhdGlvbnM6WixzdGVuY2lsT3BzOkhhLGdsVHlwZXM6SWUsb3JpZW50YXRpb25UeXBlOkdhfTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2l0LmlzQXJyYXlMaWtlPW10fSksUSYmKGF0LmJhY2tCdWZmZXI9W0VhXSxhdC5kcmF3QnVmZmVyPUoobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOkoodCxmdW5jdGlvbih0KXtyZXR1cm4gTmErdH0pfSkpO3ZhciBvdD0wO3JldHVybntuZXh0OnR0LGN1cnJlbnQ6JCxwcm9jczpmdW5jdGlvbigpe3ZhciBlPXkoKSxyPWUucHJvYygicG9sbCIpLGk9ZS5wcm9jKCJyZWZyZXNoIiksYT1lLmJsb2NrKCk7cihhKSxpKGEpO3ZhciBvPWUuc2hhcmVkLHM9by5nbCxsPW8ubmV4dCxjPW8uY3VycmVudDthKGMsIi5kaXJ0eT1mYWxzZTsiKSxDKGUsciksQyhlLGksbnVsbCwhMCk7dmFyIHUsZj10LmdldEV4dGVuc2lvbigiYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpO2YmJih1PWUubGluayhmKSk7Zm9yKHZhciBoPTA7aDxuLm1heEF0dHJpYnV0ZXM7KytoKXt2YXIgZD1pLmRlZihvLmF0dHJpYnV0ZXMsIlsiLGgsIl0iKSxwPWUuY29uZChkLCIuYnVmZmVyIik7cC50aGVuKHMsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGgsIik7IixzLCIuYmluZEJ1ZmZlcigiLFppLCIsIixkLCIuYnVmZmVyLmJ1ZmZlcik7IixzLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGgsIiwiLGQsIi5zaXplLCIsZCwiLnR5cGUsIixkLCIubm9ybWFsaXplZCwiLGQsIi5zdHJpZGUsIixkLCIub2Zmc2V0KTsiKS5lbHNlKHMsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixoLCIpOyIscywiLnZlcnRleEF0dHJpYjRmKCIsaCwiLCIsZCwiLngsIixkLCIueSwiLGQsIi56LCIsZCwiLncpOyIsZCwiLmJ1ZmZlcj1udWxsOyIpLGkocCksZiYmaSh1LCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsaCwiLCIsZCwiLmRpdmlzb3IpOyIpfXJldHVybiBPYmplY3Qua2V5cyhydCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1ydFt0XSxvPWEuZGVmKGwsIi4iLHQpLHU9ZS5ibG9jaygpO3UoImlmKCIsbywiKXsiLHMsIi5lbmFibGUoIixuLCIpfWVsc2V7IixzLCIuZGlzYWJsZSgiLG4sIil9IixjLCIuIix0LCI9IixvLCI7IiksaSh1KSxyKCJpZigiLG8sIiE9PSIsYywiLiIsdCwiKXsiLHUsIn0iKX0pLE9iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuLG8sdT1udFt0XSxmPSRbdF0saD1lLmJsb2NrKCk7aWYoaChzLCIuIix1LCIoIiksbXQoZikpe3ZhciBkPWYubGVuZ3RoO249ZS5nbG9iYWwuZGVmKGwsIi4iLHQpLG89ZS5nbG9iYWwuZGVmKGMsIi4iLHQpLGgoSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIn0pLCIpOyIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBvKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkuam9pbigiIikpLHIoImlmKCIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIT09IitvKyJbIit0KyJdIn0pLmpvaW4oInx8IiksIil7IixoLCJ9Iil9ZWxzZSBuPWEuZGVmKGwsIi4iLHQpLG89YS5kZWYoYywiLiIsdCksaChuLCIpOyIsYywiLiIsdCwiPSIsbiwiOyIpLHIoImlmKCIsbiwiIT09IixvLCIpeyIsaCwifSIpO2koaCl9KSxlLmNvbXBpbGUoKX0oKSxjb21waWxlOlh9fWZ1bmN0aW9uIFd0KCl7cmV0dXJue2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9fWZ1bmN0aW9uIFp0KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSnQodCl7ZnVuY3Rpb24gZSgpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4gVCYmVC51cGRhdGUoKSx2b2lkKEo9bnVsbCk7Sj1nZS5uZXh0KGUpLGgoKTtmb3IodmFyIHQ9cS5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9cVt0XTtyJiZyKFMsbnVsbCwwKX1nLmZsdXNoKCksVCYmVC51cGRhdGUoKX1mdW5jdGlvbiByKCl7IUomJnEubGVuZ3RoPjAmJihKPWdlLm5leHQoZSkpfWZ1bmN0aW9uIG4oKXtKJiYoZ2UuY2FuY2VsKGUpLEo9bnVsbCl9ZnVuY3Rpb24gaSh0KXt0LnByZXZlbnREZWZhdWx0KCksYj0hMCxuKCksRy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIGEodCl7Zy5nZXRFcnJvcigpLGI9ITEseC5yZXN0b3JlKCksTy5yZXN0b3JlKCksRC5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksai5yZXN0b3JlKCksVCYmVC5yZXN0b3JlKCksTi5wcm9jcy5yZWZyZXNoKCkscigpLFkuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKCl7cS5sZW5ndGg9MCxuKCksSCYmKEgucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbyxpKSxILnJlbW92ZUV2ZW50TGlzdGVuZXIocm8sYSkpLE8uY2xlYXIoKSxqLmNsZWFyKCksRi5jbGVhcigpLFIuY2xlYXIoKSxQLmNsZWFyKCksRC5jbGVhcigpLFQmJlQuY2xlYXIoKSxaLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9dFtuXTt2ZS5pc0R5bmFtaWMoaSk/cltuXT12ZS51bmJveChpLG4pOmVbbl09aX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fWZ1bmN0aW9uIHIodCl7Zm9yKDtkLmxlbmd0aDx0OylkLnB1c2gobnVsbCk7cmV0dXJuIGR9ZnVuY3Rpb24gbih0LGUpe3ZhciBuO2lmKGImJmRlLnJhaXNlKCJjb250ZXh0IGxvc3QiKSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gaC5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihuPTA7bjx0OysrbiloLmNhbGwodGhpcyxudWxsLGUsbik7cmV0dXJufWlmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paC5jYWxsKHRoaXMsdFtuXSxlLG4pO3JldHVybn1yZXR1cm4gaC5jYWxsKHRoaXMsdCxlLDApfWlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYodD4wKXJldHVybiBmLmNhbGwodGhpcyxyKDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB1LmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gZi5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fWRlKCEhdCwiaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pIiksZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3MgdG8gcmVnbCh7Li4ufSkiKTt2YXIgaT1lKHQuY29udGV4dHx8e30pLGE9ZSh0LnVuaWZvcm1zfHx7fSksbz1lKHQuYXR0cmlidXRlc3x8e30pLHM9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbdCsiLiIrbl09ZVtuXX0pfX12YXIgcj0kdCh7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpLGw9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH0sYz1OLmNvbXBpbGUocyxvLGEsaSxsKSx1PWMuZHJhdyxmPWMuYmF0Y2gsaD1jLnNjb3BlLGQ9W107cmV0dXJuICR0KG4se3N0YXRzOmx9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtOLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJihnLmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PUthKSwiZGVwdGgiaW4gZSYmKGcuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9UWEpLCJzdGVuY2lsImluIGUmJihnLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9JGEpLGRlKCEhciwiY2FsbGVkIHJlZ2wuY2xlYXIgd2l0aCBubyBidWZmZXIgc3BlY2lmaWVkIiksZy5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe2lmKGRlKCJvYmplY3QiPT10eXBlb2YgdCYmdCwicmVnbC5jbGVhcigpIHRha2VzIGFuIG9iamVjdCBhcyBpbnB1dCIpLCJmcmFtZWJ1ZmZlciJpbiB0KWlmKHQuZnJhbWVidWZmZXImJiJmcmFtZWJ1ZmZlckN1YmUiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDtlPDY7KytlKUsoJHQoe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgSyh0LGwpO2Vsc2UgbChudWxsLHQpfWZ1bmN0aW9uIHUodCl7ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUoKXt2YXIgdD1adChxLGUpO3FbdF09cVtxLmxlbmd0aC0xXSxxLmxlbmd0aC09MSxxLmxlbmd0aDw9MCYmbigpfXZhciByPVp0KHEsdCk7ZGUocj49MCwiY2Fubm90IGNhbmNlbCBhIGZyYW1lIHR3aWNlIikscVtyXT1lfXJldHVybiBkZS50eXBlKHQsImZ1bmN0aW9uIiwicmVnbC5mcmFtZSgpIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpLHEucHVzaCh0KSxyKCkse2NhbmNlbDplfX1mdW5jdGlvbiBmKCl7dmFyIHQ9Vi52aWV3cG9ydCxlPVYuc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLFMudmlld3BvcnRXaWR0aD1TLmZyYW1lYnVmZmVyV2lkdGg9Uy5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPWcuZHJhd2luZ0J1ZmZlcldpZHRoLFMudmlld3BvcnRIZWlnaHQ9Uy5mcmFtZWJ1ZmZlckhlaWdodD1TLmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPWcuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBoKCl7Uy50aWNrKz0xLFMudGltZT1wKCksZigpLE4ucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGQoKXtmKCksTi5wcm9jcy5yZWZyZXNoKCksVCYmVC51cGRhdGUoKX1mdW5jdGlvbiBwKCl7cmV0dXJuKHllKCktaykvMWUzCn1mdW5jdGlvbiBtKHQsZSl7ZGUudHlwZShlLCJmdW5jdGlvbiIsImxpc3RlbmVyIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gdShlKTtjYXNlImxvc3QiOnI9RzticmVhaztjYXNlInJlc3RvcmUiOnI9WTticmVhaztjYXNlImRlc3Ryb3kiOnI9WjticmVhaztkZWZhdWx0OmRlLnJhaXNlKCJpbnZhbGlkIGV2ZW50LCBtdXN0IGJlIG9uZSBvZiBmcmFtZSxsb3N0LHJlc3RvcmUsZGVzdHJveSIpfXJldHVybiByLnB1c2goZSkse2NhbmNlbDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF09PT1lKXJldHVybiByW3RdPXJbci5sZW5ndGgtMV0sdm9pZCByLnBvcCgpfX19dmFyIHY9WCh0KTtpZighdilyZXR1cm4gbnVsbDt2YXIgZz12LmdsLHk9Zy5nZXRDb250ZXh0QXR0cmlidXRlcygpLGI9Zy5pc0NvbnRleHRMb3N0KCkseD1XKGcsdik7aWYoIXgpcmV0dXJuIG51bGw7dmFyIF89QigpLHc9V3QoKSxNPXguZXh0ZW5zaW9ucyxUPUphKGcsTSksaz15ZSgpLEE9Zy5kcmF3aW5nQnVmZmVyV2lkdGgsRT1nLmRyYXdpbmdCdWZmZXJIZWlnaHQsUz17dGljazowLHRpbWU6MCx2aWV3cG9ydFdpZHRoOkEsdmlld3BvcnRIZWlnaHQ6RSxmcmFtZWJ1ZmZlcldpZHRoOkEsZnJhbWVidWZmZXJIZWlnaHQ6RSxkcmF3aW5nQnVmZmVyV2lkdGg6QSxkcmF3aW5nQnVmZmVySGVpZ2h0OkUscGl4ZWxSYXRpbzp2LnBpeGVsUmF0aW99LEw9e30sQz17ZWxlbWVudHM6bnVsbCxwcmltaXRpdmU6NCxjb3VudDotMSxvZmZzZXQ6MCxpbnN0YW5jZXM6LTF9LEk9YmUoZyxNKSxEPWh0KGcsdyx2KSxQPWR0KGcsTSxELHcpLHo9T3QoZyxNLEksRCxfKSxPPVJ0KGcsXyx3LHYpLFI9SXQoZyxNLEksZnVuY3Rpb24oKXtOLnByb2NzLnBvbGwoKX0sUyx3LHYpLEY9TW4oZyxNLEksdyx2KSxqPVB0KGcsTSxJLFIsRix3KSxOPVh0KGcsXyxNLEksRCxQLFIsaixMLHosTyxDLFMsVCx2KSxVPUZ0KGcsaixOLnByb2NzLnBvbGwsUyx5LE0pLFY9Ti5uZXh0LEg9Zy5jYW52YXMscT1bXSxHPVtdLFk9W10sWj1bdi5vbkRlc3Ryb3ldLEo9bnVsbDtIJiYoSC5hZGRFdmVudExpc3RlbmVyKGVvLGksITEpLEguYWRkRXZlbnRMaXN0ZW5lcihybyxhLCExKSk7dmFyIEs9ai5zZXRGQk89cyh7ZnJhbWVidWZmZXI6dmUuZGVmaW5lLmNhbGwobnVsbCxubywiZnJhbWVidWZmZXIiKX0pO2QoKTt2YXIgUT0kdChzLHtjbGVhcjpjLHByb3A6dmUuZGVmaW5lLmJpbmQobnVsbCxubyksY29udGV4dDp2ZS5kZWZpbmUuYmluZChudWxsLGlvKSx0aGlzOnZlLmRlZmluZS5iaW5kKG51bGwsYW8pLGRyYXc6cyh7fSksYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LHRvLCExLCExKX0sZWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuIFAuY3JlYXRlKHQsITEpfSx0ZXh0dXJlOlIuY3JlYXRlMkQsY3ViZTpSLmNyZWF0ZUN1YmUscmVuZGVyYnVmZmVyOkYuY3JlYXRlLGZyYW1lYnVmZmVyOmouY3JlYXRlLGZyYW1lYnVmZmVyQ3ViZTpqLmNyZWF0ZUN1YmUsYXR0cmlidXRlczp5LGZyYW1lOnUsb246bSxsaW1pdHM6SSxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIEkuZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSk+PTB9LHJlYWQ6VSxkZXN0cm95Om8sX2dsOmcsX3JlZnJlc2g6ZCxwb2xsOmZ1bmN0aW9uKCl7aCgpLFQmJlQudXBkYXRlKCl9LG5vdzpwLHN0YXRzOnd9KTtyZXR1cm4gdi5vbkRvbmUobnVsbCxRKSxRfXZhciBLdD17IltvYmplY3QgSW50OEFycmF5XSI6NTEyMCwiW29iamVjdCBJbnQxNkFycmF5XSI6NTEyMiwiW29iamVjdCBJbnQzMkFycmF5XSI6NTEyNCwiW29iamVjdCBVaW50OEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDE2QXJyYXldIjo1MTIzLCJbb2JqZWN0IFVpbnQzMkFycmF5XSI6NTEyNSwiW29iamVjdCBGbG9hdDMyQXJyYXldIjo1MTI2LCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOjUxMjEsIltvYmplY3QgQXJyYXlCdWZmZXJdIjo1MTIxfSxRdD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpaW4gS3R9LCR0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoOysrbil0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9LHRlPVsiZ2wiLCJjYW52YXMiLCJjb250YWluZXIiLCJhdHRyaWJ1dGVzIiwicGl4ZWxSYXRpbyIsImV4dGVuc2lvbnMiLCJvcHRpb25hbEV4dGVuc2lvbnMiLCJwcm9maWxlIiwib25Eb25lIl0sZWU9MzMwNzEscmU9OTcyOCxuZT05OTg0LGllPTk5ODUsYWU9OTk4NixvZT05OTg3LHNlPTUxMjYsbGU9MzI4MTksY2U9MzI4MjAsdWU9MzM2MzUsZmU9MzQwNDIsaGU9e307aGVbNTEyMF09aGVbNTEyMV09MSxoZVs1MTIyXT1oZVs1MTIzXT1oZVszNjE5M109aGVbdWVdPWhlW2xlXT1oZVtjZV09MixoZVs1MTI0XT1oZVs1MTI1XT1oZVtzZV09aGVbZmVdPTQ7dmFyIGRlPSR0KHIse29wdGlvbmFsOkUscmFpc2U6ZSxjb21tYW5kUmFpc2U6TSxjb21tYW5kOlQscGFyYW1ldGVyOmksY29tbWFuZFBhcmFtZXRlcjprLGNvbnN0cnVjdG9yOmMsdHlwZTpvLGNvbW1hbmRUeXBlOkEsaXNUeXBlZEFycmF5OmEsbm5pOnMsb25lT2Y6bCxzaGFkZXJFcnJvcjpiLGxpbmtFcnJvcjp4LGNhbGxTaXRlOm0sc2F2ZUNvbW1hbmRSZWY6XyxzYXZlRHJhd0luZm86dyxmcmFtZWJ1ZmZlckZvcm1hdDpTLGd1ZXNzQ29tbWFuZDpwLHRleHR1cmUyRDpJLHRleHR1cmVDdWJlOkR9KSxwZT0wLG1lPTAsdmU9e0R5bmFtaWNWYXJpYWJsZTpQLGRlZmluZTpGLGlzRHluYW1pYzpqLHVuYm94Ok4sYWNjZXNzb3I6Un0sZ2U9e25leHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0seWU9InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sYmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO3JldHVybiBlLndlYmdsX2RyYXdfYnVmZmVycyYmKG49dC5nZXRQYXJhbWV0ZXIoMzQ4NTIpLGk9dC5nZXRQYXJhbWV0ZXIoMzYwNjMpKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSxtYXhBbmlzb3Ryb3BpYzpyLG1heERyYXdidWZmZXJzOm4sbWF4Q29sb3JBdHRhY2htZW50czppLHBvaW50U2l6ZURpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDEpLGxpbmVXaWR0aERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDIpLG1heFZpZXdwb3J0RGltczp0LmdldFBhcmFtZXRlcigzMzg2KSxtYXhDb21iaW5lZFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MSksbWF4Q3ViZU1hcFNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLG1heFJlbmRlcmJ1ZmZlclNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwMjQpLG1heFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNDkzMCksbWF4VGV4dHVyZVNpemU6dC5nZXRQYXJhbWV0ZXIoMzM3OSksbWF4QXR0cmlidXRlczp0LmdldFBhcmFtZXRlcigzNDkyMSksbWF4VmVydGV4VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG1heFZlcnRleFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MCksbWF4VmFyeWluZ1ZlY3RvcnM6dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLG1heEZyYWdtZW50VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLGdsc2w6dC5nZXRQYXJhbWV0ZXIoMzU3MjQpLHJlbmRlcmVyOnQuZ2V0UGFyYW1ldGVyKDc5MzcpLHZlbmRvcjp0LmdldFBhcmFtZXRlcig3OTM2KSx2ZXJzaW9uOnQuZ2V0UGFyYW1ldGVyKDc5MzgpfX0seGU9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxfZT01MTIwLHdlPTUxMjEsTWU9NTEyMixUZT01MTIzLGtlPTUxMjQsQWU9NTEyNSxFZT01MTI2LFNlPUooOCxmdW5jdGlvbigpe3JldHVybltdfSksTGU9e2FsbG9jOiQsZnJlZTp0dCxhbGxvY1R5cGU6ZXQsZnJlZVR5cGU6cnR9LENlPXtzaGFwZTpsdCxmbGF0dGVuOnN0fSxJZT17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxEZT17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSxQZT1DZS5mbGF0dGVuLHplPUNlLnNoYXBlLE9lPTM1MDQ0LFJlPTM1MDQwLEZlPTUxMjEsamU9NTEyNixOZT1bXTtOZVs1MTIwXT0xLE5lWzUxMjJdPTIsTmVbNTEyNF09NCxOZVs1MTIxXT0xLE5lWzUxMjNdPTIsTmVbNTEyNV09NCxOZVs1MTI2XT00O3ZhciBCZT17cG9pbnRzOjAscG9pbnQ6MCxsaW5lczoxLGxpbmU6MSx0cmlhbmdsZXM6NCx0cmlhbmdsZTo0LCJsaW5lIGxvb3AiOjIsImxpbmUgc3RyaXAiOjMsInRyaWFuZ2xlIHN0cmlwIjo1LCJ0cmlhbmdsZSBmYW4iOjZ9LFVlPTAsVmU9MSxIZT00LHFlPTUxMjAsR2U9NTEyMSxZZT01MTIyLFhlPTUxMjMsV2U9NTEyNCxaZT01MTI1LEplPTM0OTYzLEtlPTM1MDQwLFFlPTM1MDQ0LCRlPW5ldyBGbG9hdDMyQXJyYXkoMSksdHI9bmV3IFVpbnQzMkFycmF5KCRlLmJ1ZmZlciksZXI9NTEyMyxycj0zNDQ2Nyxucj0zNTUzLGlyPTM0MDY3LGFyPTM0MDY5LG9yPTY0MDgsc3I9NjQwNixscj02NDA3LGNyPTY0MDksdXI9NjQxMCxmcj0zMjg1NCxocj0zMjg1NSxkcj0zNjE5NCxwcj0zMjgxOSxtcj0zMjgyMCx2cj0zMzYzNSxncj0zNDA0Mix5cj02NDAyLGJyPTM0MDQxLHhyPTM1OTA0LF9yPTM1OTA2LHdyPTM2MTkzLE1yPTMzNzc2LFRyPTMzNzc3LGtyPTMzNzc4LEFyPTMzNzc5LEVyPTM1OTg2LFNyPTM1OTg3LExyPTM0Nzk4LENyPTM1ODQwLElyPTM1ODQxLERyPTM1ODQyLFByPTM1ODQzLHpyPTM2MTk2LE9yPTUxMjEsUnI9NTEyMyxGcj01MTI1LGpyPTUxMjYsTnI9MTAyNDIsQnI9MTAyNDMsVXI9MTA0OTcsVnI9MzMwNzEsSHI9MzM2NDgscXI9MTAyNDAsR3I9MTAyNDEsWXI9OTcyOCxYcj05NzI5LFdyPTk5ODQsWnI9OTk4NSxKcj05OTg2LEtyPTk5ODcsUXI9MzMxNzAsJHI9NDM1Mix0bj00MzUzLGVuPTQzNTQscm49MzQwNDYsbm49MzMxNyxhbj0zNzQ0MCxvbj0zNzQ0MSxzbj0zNzQ0Myxsbj0zNzQ0NCxjbj0zMzk4NCx1bj1bV3IsSnIsWnIsS3JdLGZuPVswLGNyLHVyLGxyLG9yXSxobj17fTtobltjcl09aG5bc3JdPWhuW3lyXT0xLGhuW2JyXT1oblt1cl09Mixobltscl09aG5beHJdPTMsaG5bb3JdPWhuW19yXT00O3ZhciBkbj12dCgiSFRNTENhbnZhc0VsZW1lbnQiKSxwbj12dCgiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiksbW49dnQoIkhUTUxJbWFnZUVsZW1lbnQiKSx2bj12dCgiSFRNTFZpZGVvRWxlbWVudCIpLGduPU9iamVjdC5rZXlzKEt0KS5jb25jYXQoW2RuLHBuLG1uLHZuXSkseW49W107eW5bT3JdPTEseW5banJdPTQseW5bd3JdPTIseW5bUnJdPTIseW5bRnJdPTQ7dmFyIGJuPVtdO2JuW2ZyXT0yLGJuW2hyXT0yLGJuW2RyXT0yLGJuW2JyXT00LGJuW01yXT0uNSxibltUcl09LjUsYm5ba3JdPTEsYm5bQXJdPTEsYm5bRXJdPS41LGJuW1NyXT0xLGJuW0xyXT0xLGJuW0NyXT0uNSxibltJcl09LjI1LGJuW0RyXT0uNSxibltQcl09LjI1LGJuW3pyXT0uNTt2YXIgeG49MzYxNjEsX249MzI4NTQsd249W107d25bX25dPTIsd25bMzI4NTVdPTIsd25bMzYxOTRdPTIsd25bMzMxODldPTIsd25bMzYxNjhdPTEsd25bMzQwNDFdPTQsd25bMzU5MDddPTQsd25bMzQ4MzZdPTE2LHduWzM0ODQyXT04LHduWzM0ODQzXT02O3ZhciBNbj1mdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIGEodCl7dGhpcy5pZD1mKyssdGhpcy5yZWZDb3VudD0xLHRoaXMucmVuZGVyYnVmZmVyPXQsdGhpcy5mb3JtYXQ9X24sdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjtkZShyLCJtdXN0IG5vdCBkb3VibGUgZGVzdHJveSByZW5kZXJidWZmZXIiKSx0LmJpbmRSZW5kZXJidWZmZXIoeG4sbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIGhbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfWZ1bmN0aW9uIHMoZSxvKXtmdW5jdGlvbiBzKGUsbil7dmFyIGE9MCxvPTAsbD1fbjtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmUpe3ZhciBoPWU7aWYoInNoYXBlImluIGgpe3ZhciBkPWguc2hhcGU7ZGUoQXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+PTIsImludmFsaWQgcmVuZGVyYnVmZmVyIHNoYXBlIiksYT0wfGRbMF0sbz0wfGRbMV19ZWxzZSJyYWRpdXMiaW4gaCYmKGE9bz0wfGgucmFkaXVzKSwid2lkdGgiaW4gaCYmKGE9MHxoLndpZHRoKSwiaGVpZ2h0ImluIGgmJihvPTB8aC5oZWlnaHQpOyJmb3JtYXQiaW4gaCYmKGRlLnBhcmFtZXRlcihoLmZvcm1hdCxjLCJpbnZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXQiKSxsPWNbaC5mb3JtYXRdKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlPyhhPTB8ZSxvPSJudW1iZXIiPT10eXBlb2Ygbj8wfG46YSk6ZT9kZS5yYWlzZSgiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVuZGVyYnVmZmVyIGNvbnN0cnVjdG9yIik6YT1vPTE7aWYoZGUoYT4wJiZvPjAmJmE8PXIubWF4UmVuZGVyYnVmZmVyU2l6ZSYmbzw9ci5tYXhSZW5kZXJidWZmZXJTaXplLCJpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplIiksYSE9PWYud2lkdGh8fG8hPT1mLmhlaWdodHx8bCE9PWYuZm9ybWF0KXJldHVybiBzLndpZHRoPWYud2lkdGg9YSxzLmhlaWdodD1mLmhlaWdodD1vLGYuZm9ybWF0PWwsdC5iaW5kUmVuZGVyYnVmZmVyKHhuLGYucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoeG4sbCxhLG8pLGkucHJvZmlsZSYmKGYuc3RhdHMuc2l6ZT1EdChmLmZvcm1hdCxmLndpZHRoLGYuaGVpZ2h0KSkscy5mb3JtYXQ9dVtmLmZvcm1hdF0sc31mdW5jdGlvbiBsKGUsbil7dmFyIGE9MHxlLG89MHxufHxhO3JldHVybiBhPT09Zi53aWR0aCYmbz09PWYuaGVpZ2h0P3M6KGRlKGE+MCYmbz4wJiZhPD1yLm1heFJlbmRlcmJ1ZmZlclNpemUmJm88PXIubWF4UmVuZGVyYnVmZmVyU2l6ZSwiaW52YWxpZCByZW5kZXJidWZmZXIgc2l6ZSIpLHMud2lkdGg9Zi53aWR0aD1hLHMuaGVpZ2h0PWYuaGVpZ2h0PW8sdC5iaW5kUmVuZGVyYnVmZmVyKHhuLGYucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoeG4sZi5mb3JtYXQsYSxvKSxpLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9RHQoZi5mb3JtYXQsZi53aWR0aCxmLmhlaWdodCkpLHMpfXZhciBmPW5ldyBhKHQuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO3JldHVybiBoW2YuaWRdPWYsbi5yZW5kZXJidWZmZXJDb3VudCsrLHMoZSxvKSxzLnJlc2l6ZT1sLHMuX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLHMuX3JlbmRlcmJ1ZmZlcj1mLGkucHJvZmlsZSYmKHMuc3RhdHM9Zi5zdGF0cykscy5kZXN0cm95PWZ1bmN0aW9uKCl7Zi5kZWNSZWYoKX0sc31mdW5jdGlvbiBsKCl7eGUoaCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHQuYmluZFJlbmRlcmJ1ZmZlcih4bixlLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHhuLGUuZm9ybWF0LGUud2lkdGgsZS5oZWlnaHQpfSksdC5iaW5kUmVuZGVyYnVmZmVyKHhuLG51bGwpfXZhciBjPXtyZ2JhNDpfbixyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYoYy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihjLnJnYmExNmY9MzQ4NDIsYy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYoYy5yZ2JhMzJmPTM0ODM2KTt2YXIgdT1bXTtPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWNbdF07dVtlXT10fSk7dmFyIGY9MCxoPXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXstLXRoaXMucmVmQ291bnQ8PTAmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMoaCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1oW2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpzLGNsZWFyOmZ1bmN0aW9uKCl7eGUoaCkuZm9yRWFjaChvKX0scmVzdG9yZTpsfX0sVG49MzYxNjAsa249MzYxNjEsQW49MzU1MyxFbj0zNDA2OSxTbj0zNjA2NCxMbj0zNjA5NixDbj0zNjEyOCxJbj0zMzMwNixEbj0zNjA1MyxQbj02NDAyLHpuPVs2NDA4XSxPbj1bXTtPbls2NDA4XT00O3ZhciBSbj1bXTtSbls1MTIxXT0xLFJuWzUxMjZdPTQsUm5bMzYxOTNdPTI7dmFyIEZuPTMzMTg5LGpuPTM2MTY4LE5uPTM0MDQxLEJuPVszMjg1NCwzMjg1NSwzNjE5NCwzNTkwNywzNDg0MiwzNDg0MywzNDgzNl0sVW49e307VW5bRG5dPSJjb21wbGV0ZSIsVW5bMzYwNTRdPSJpbmNvbXBsZXRlIGF0dGFjaG1lbnQiLFVuWzM2MDU3XT0iaW5jb21wbGV0ZSBkaW1lbnNpb25zIixVblszNjA1NV09ImluY29tcGxldGUsIG1pc3NpbmcgYXR0YWNobWVudCIsVW5bMzYwNjFdPSJ1bnN1cHBvcnRlZCI7dmFyIFZuPTUxMjYsSG49MzU2MzIscW49MzU2MzMsR249MzU3MTgsWW49MzU3MjEsWG49NjQwOCxXbj01MTIxLFpuPTMzMzMsSm49NTEyNixLbj0ieHl6dyIuc3BsaXQoIiIpLFFuPTUxMjEsJG49MSx0aT0yLGVpPTAscmk9MSxuaT0yLGlpPTMsYWk9NCxvaT0iZGl0aGVyIixzaT0iYmxlbmQuZW5hYmxlIixsaT0iYmxlbmQuY29sb3IiLGNpPSJibGVuZC5lcXVhdGlvbiIsdWk9ImJsZW5kLmZ1bmMiLGZpPSJkZXB0aC5lbmFibGUiLGhpPSJkZXB0aC5mdW5jIixkaT0iZGVwdGgucmFuZ2UiLHBpPSJkZXB0aC5tYXNrIixtaT0iY29sb3JNYXNrIix2aT0iY3VsbC5lbmFibGUiLGdpPSJjdWxsLmZhY2UiLHlpPSJmcm9udEZhY2UiLGJpPSJsaW5lV2lkdGgiLHhpPSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSIsX2k9InBvbHlnb25PZmZzZXQub2Zmc2V0Iix3aT0ic2FtcGxlLmFscGhhIixNaT0ic2FtcGxlLmVuYWJsZSIsVGk9InNhbXBsZS5jb3ZlcmFnZSIsa2k9InN0ZW5jaWwuZW5hYmxlIixBaT0ic3RlbmNpbC5tYXNrIixFaT0ic3RlbmNpbC5mdW5jIixTaT0ic3RlbmNpbC5vcEZyb250IixMaT0ic3RlbmNpbC5vcEJhY2siLENpPSJzY2lzc29yLmVuYWJsZSIsSWk9InNjaXNzb3IuYm94IixEaT0idmlld3BvcnQiLFBpPSJwcm9maWxlIix6aT0iZnJhbWVidWZmZXIiLE9pPSJ2ZXJ0IixSaT0iZnJhZyIsRmk9ImVsZW1lbnRzIixqaT0icHJpbWl0aXZlIixOaT0iY291bnQiLEJpPSJvZmZzZXQiLFVpPSJpbnN0YW5jZXMiLFZpPXppKyJXaWR0aCIsSGk9emkrIkhlaWdodCIscWk9RGkrIldpZHRoIixHaT1EaSsiSGVpZ2h0IixZaT0iZHJhd2luZ0J1ZmZlcldpZHRoIixYaT0iZHJhd2luZ0J1ZmZlckhlaWdodCIsV2k9W3VpLGNpLEVpLFNpLExpLFRpLERpLElpLF9pXSxaaT0zNDk2MixKaT0zNDk2MyxLaT0zNTUzLFFpPTM0MDY3LCRpPTI4ODQsdGE9MzA0MixlYT0zMDI0LHJhPTI5NjAsbmE9MjkyOSxpYT0zMDg5LGFhPTMyODIzLG9hPTMyOTI2LHNhPTMyOTI4LGxhPTUxMjYsY2E9MzU2NjQsdWE9MzU2NjUsZmE9MzU2NjYsaGE9NTEyNCxkYT0zNTY2NyxwYT0zNTY2OCxtYT0zNTY2OSx2YT0zNTY3MCxnYT0zNTY3MSx5YT0zNTY3MixiYT0zNTY3Myx4YT0zNTY3NCxfYT0zNTY3NSx3YT0zNTY3NixNYT0zNTY3OCxUYT0zNTY4MCxrYT00LEFhPTEwMjgsRWE9MTAyOSxTYT0yMzA0LExhPTIzMDUsQ2E9MzI3NzUsSWE9MzI3NzYsRGE9NTE5LFBhPTc2ODAsemE9MCxPYT0xLFJhPTMyNzc0LEZhPTUxMyxqYT0zNjE2MCxOYT0zNjA2NCxCYT17MDowLDE6MSx6ZXJvOjAsb25lOjEsInNyYyBjb2xvciI6NzY4LCJvbmUgbWludXMgc3JjIGNvbG9yIjo3NjksInNyYyBhbHBoYSI6NzcwLCJvbmUgbWludXMgc3JjIGFscGhhIjo3NzEsImRzdCBjb2xvciI6Nzc0LCJvbmUgbWludXMgZHN0IGNvbG9yIjo3NzUsImRzdCBhbHBoYSI6NzcyLCJvbmUgbWludXMgZHN0IGFscGhhIjo3NzMsImNvbnN0YW50IGNvbG9yIjozMjc2OSwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIjozMjc3MCwiY29uc3RhbnQgYWxwaGEiOjMyNzcxLCJvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiOjMyNzcyLCJzcmMgYWxwaGEgc2F0dXJhdGUiOjc3Nn0sVWE9WyJjb25zdGFudCBjb2xvciwgY29uc3RhbnQgYWxwaGEiLCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IsIGNvbnN0YW50IGFscGhhIiwiY29uc3RhbnQgY29sb3IsIG9uZSBtaW51cyBjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciwgb25lIG1pbnVzIGNvbnN0YW50IGFscGhhIiwiY29uc3RhbnQgYWxwaGEsIGNvbnN0YW50IGNvbG9yIiwiY29uc3RhbnQgYWxwaGEsIG9uZSBtaW51cyBjb25zdGFudCBjb2xvciIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSwgY29uc3RhbnQgY29sb3IiLCJvbmUgbWludXMgY29uc3RhbnQgYWxwaGEsIG9uZSBtaW51cyBjb25zdGFudCBjb2xvciJdLFZhPXtuZXZlcjo1MTIsbGVzczo1MTMsIjwiOjUxMyxlcXVhbDo1MTQsIj0iOjUxNCwiPT0iOjUxNCwiPT09Ijo1MTQsbGVxdWFsOjUxNSwiPD0iOjUxNSxncmVhdGVyOjUxNiwiPiI6NTE2LG5vdGVxdWFsOjUxNywiIT0iOjUxNywiIT09Ijo1MTcsZ2VxdWFsOjUxOCwiPj0iOjUxOCxhbHdheXM6NTE5fSxIYT17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLCJpbmNyZW1lbnQgd3JhcCI6MzQwNTUsImRlY3JlbWVudCB3cmFwIjozNDA1NixpbnZlcnQ6NTM4Nn0scWE9e2ZyYWc6MzU2MzIsdmVydDozNTYzM30sR2E9e2N3OlNhLGNjdzpMYX0sWWE9bmV3IEh0KCExLCExLCExLGZ1bmN0aW9uKCl7fSksWGE9MzQ5MTgsV2E9MzQ5MTksWmE9MzUwMDcsSmE9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7cmV0dXJuIGgucG9wKCl8fGYuY3JlYXRlUXVlcnlFWFQoKX1mdW5jdGlvbiBuKHQpe2gucHVzaCh0KX1mdW5jdGlvbiBpKHQpe3ZhciBlPXIoKTtmLmJlZ2luUXVlcnlFWFQoWmEsZSksZC5wdXNoKGUpLGMoZC5sZW5ndGgtMSxkLmxlbmd0aCx0KX1mdW5jdGlvbiBhKCl7Zi5lbmRRdWVyeUVYVChaYSl9ZnVuY3Rpb24gbygpe3RoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuZW5kUXVlcnlJbmRleD0tMSx0aGlzLnN1bT0wLHRoaXMuc3RhdHM9bnVsbH1mdW5jdGlvbiBzKCl7cmV0dXJuIHAucG9wKCl8fG5ldyBvfWZ1bmN0aW9uIGwodCl7cC5wdXNoKHQpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXMoKTtuLnN0YXJ0UXVlcnlJbmRleD10LG4uZW5kUXVlcnlJbmRleD1lLG4uc3VtPTAsbi5zdGF0cz1yLG0ucHVzaChuKX1mdW5jdGlvbiB1KCl7dmFyIHQsZSxyPWQubGVuZ3RoO2lmKDAhPT1yKXtnLmxlbmd0aD1NYXRoLm1heChnLmxlbmd0aCxyKzEpLHYubGVuZ3RoPU1hdGgubWF4KHYubGVuZ3RoLHIrMSksdlswXT0wLGdbMF09MDt2YXIgaT0wO2Zvcih0PTAsZT0wO2U8ZC5sZW5ndGg7KytlKXt2YXIgYT1kW2VdO2YuZ2V0UXVlcnlPYmplY3RFWFQoYSxXYSk/KGkrPWYuZ2V0UXVlcnlPYmplY3RFWFQoYSxYYSksbihhKSk6ZFt0KytdPWEsdltlKzFdPWksZ1tlKzFdPXR9Zm9yKGQubGVuZ3RoPXQsdD0wLGU9MDtlPG0ubGVuZ3RoOysrZSl7dmFyIG89bVtlXSxzPW8uc3RhcnRRdWVyeUluZGV4LGM9by5lbmRRdWVyeUluZGV4O28uc3VtKz12W2NdLXZbc107dmFyIHU9Z1tzXSxoPWdbY107aD09PXU/KG8uc3RhdHMuZ3B1VGltZSs9by5zdW0vMWU2LGwobykpOihvLnN0YXJ0UXVlcnlJbmRleD11LG8uZW5kUXVlcnlJbmRleD1oLG1bdCsrXT1vKX1tLmxlbmd0aD10fX12YXIgZj1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeTtpZighZilyZXR1cm4gbnVsbDt2YXIgaD1bXSxkPVtdLHA9W10sbT1bXSx2PVtdLGc9W107cmV0dXJue2JlZ2luUXVlcnk6aSxlbmRRdWVyeTphLHB1c2hTY29wZVN0YXRzOmMsdXBkYXRlOnUsZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZC5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7aC5wdXNoLmFwcGx5KGgsZCk7Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDt0KyspZi5kZWxldGVRdWVyeUVYVChoW3RdKTtkLmxlbmd0aD0wLGgubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXtkLmxlbmd0aD0wLGgubGVuZ3RoPTB9fX0sS2E9MTYzODQsUWE9MjU2LCRhPTEwMjQsdG89MzQ5NjIsZW89IndlYmdsY29udGV4dGxvc3QiLHJvPSJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbm89MSxpbz0yLGFvPTM7cmV0dXJuIEp0fSl9LHt9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZXBlYXQtc3RyaW5nIGV4cGVjdHMgYSBzdHJpbmcuIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2ZvcihpPT09dCYmdm9pZCAwIT09aXx8KGk9dCxhPSIiKTtyPmEubGVuZ3RoJiZlPjAmJigxJmUmJihhKz10KSxlPj49MSk7KXQrPXQ7cmV0dXJuIGEuc3Vic3RyKDAscil9dmFyIGksYT0iIjtlLmV4cG9ydHM9bn0se31dLDUxMDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KGkpOiJvYmplY3QiPT10eXBlb2Ygbj9yLmV4cG9ydHM9aSgpOmUucmVzb2x2ZVVybD1pKCl9KHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoInJlc29sdmVVcmwgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50OyBnb3Qgbm9uZS4iKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiYXNlIik7aWYoZS5ocmVmPWFyZ3VtZW50c1swXSwxPT09dClyZXR1cm4gZS5ocmVmO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07ci5pbnNlcnRCZWZvcmUoZSxyLmZpcnN0Q2hpbGQpO2Zvcih2YXIgbixpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxhPTE7YTx0O2ErKylpLmhyZWY9YXJndW1lbnRzW2FdLG49aS5ocmVmLGUuaHJlZj1uO3JldHVybiByLnJlbW92ZUNoaWxkKGUpLG59cmV0dXJuIHR9KX0se31dLDUxMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtlLmV4cG9ydHM9dC5wZXJmb3JtYW5jZSYmdC5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw1MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV07cj1hK287dmFyIHM9ci1hLGw9by1zO2wmJih0Wy0tbl09cixyPWwpfWZvcih2YXIgYz0wLGk9bjtpPGU7KytpKXt2YXIgYT10W2ldLG89cjtyPWErbzt2YXIgcz1yLWEsbD1vLXM7bCYmKHRbYysrXT1sKX1yZXR1cm4gdFtjKytdPXIsdC5sZW5ndGg9Yyx0fWUuZXhwb3J0cz1ufSx7fV0sNTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibVsiLHIsIl1bIixuLCJdIl0uam9pbigiIil9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gMSZ0PyItIjoiIn1mdW5jdGlvbiBvKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixvKHQuc2xpY2UoMCxlKSksIiwiLG8odC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiBzKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLHMobih0LHIpKSwiLCIsYShyKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBvKGUpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwic2NhbGUiLCJwcm9kIiwiY29tcHJlc3MiLFsiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQiLHQsIihtKXtyZXR1cm4gY29tcHJlc3MoIixzKGkodCkpLCIpfTtyZXR1cm4gcm9idXN0RGV0ZXJtaW5hbnQiLHRdLmpvaW4oIiIpKSh1LGYsYyxoKX12YXIgYz10KCJ0d28tcHJvZHVjdCIpLHU9dCgicm9idXN0LXN1bSIpLGY9dCgicm9idXN0LXNjYWxlIiksaD10KCJyb2J1c3QtY29tcHJlc3MiKSxkPTYscD1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdWzBdXX1dOyFmdW5jdGlvbigpe2Zvcig7cC5sZW5ndGg8ZDspcC5wdXNoKGwocC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50KG0pe3N3aXRjaChtLmxlbmd0aCl7Il0sbj0wO248ZDsrK24pdC5wdXNoKCJkZXQiK24pLHIucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gZGV0IixuLCIobSk7Iik7ci5wdXNoKCJ9dmFyIGRldD1DQUNIRVttLmxlbmd0aF07aWYoIWRldClkZXQ9Q0FDSEVbbS5sZW5ndGhdPWdlbihtLmxlbmd0aCk7cmV0dXJuIGRldChtKTt9cmV0dXJuIHJvYnVzdERldGVybWluYW50IiksdC5wdXNoKCJDQUNIRSIsImdlbiIsci5qb2luKCIiKSk7dmFyIGk9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2UuZXhwb3J0cz1pLmFwcGx5KHZvaWQgMCxwLmNvbmNhdChbcCxsXSkpO2Zvcih2YXIgbj0wO248cC5sZW5ndGg7KytuKWUuZXhwb3J0c1tuXT1wW25dfSgpfSx7InJvYnVzdC1jb21wcmVzcyI6NTEyLCJyb2J1c3Qtc2NhbGUiOjUxOSwicm9idXN0LXN1bSI6NTIyLCJ0d28tcHJvZHVjdCI6NTQ3fV0sNTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9aSh0WzBdLGVbMF0pLG49MTtuPHQubGVuZ3RoOysrbilyPWEocixpKHRbbl0sZVtuXSkpO3JldHVybiByfXZhciBpPXQoInR3by1wcm9kdWN0IiksYT10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPW59LHsicm9idXN0LXN1bSI6NTIyLCJ0d28tcHJvZHVjdCI6NTQ3fV0sNTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTIsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixhKHQuc2xpY2UoMCxlKSksIiwiLGEodC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiBvKHQsZSl7aWYoIm0iPT09dC5jaGFyQXQoMCkpe2lmKCJ3Ij09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KCJbIik7cmV0dXJuWyJ3IixlLnN1YnN0cigxKSwibSIsclswXS5zdWJzdHIoMSldLmpvaW4oIiIpfXJldHVyblsicHJvZCgiLHQsIiwiLGUsIikiXS5qb2luKCIiKX1yZXR1cm4gbyhlLHQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQmITA/Ii0iOiIifWZ1bmN0aW9uIGwodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIixvKHRbMF1bMF0sdFsxXVsxXSksIiwiLG8odFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYShsKG4odCxyKSkpLCIsIixzKHIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLTI7KytuKXIucHVzaChbInByb2QobSIsdCwiWyIsbiwiXSxtIix0LCJbIixuLCJdKSJdLmpvaW4oIiIpKTtyZXR1cm4gYShyKX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1bXSxyPVtdLG89aSh0KSxzPTA7czx0OysrcylvWzBdW3NdPSIxIixvW3QtMV1bc109InciK3M7Zm9yKHZhciBzPTA7czx0OysrcykwPT0oMSZzKT9lLnB1c2guYXBwbHkoZSxsKG4obyxzKSkpOnIucHVzaC5hcHBseShyLGwobihvLHMpKSk7Zm9yKHZhciB1PWEoZSksZj1hKHIpLGg9ImV4YWN0SW5TcGhlcmUiK3QsZD1bXSxzPTA7czx0OysrcylkLnB1c2goIm0iK3MpO2Zvcih2YXIgcD1bImZ1bmN0aW9uICIsaCwiKCIsZC5qb2luKCksIil7Il0scz0wO3M8dDsrK3Mpe3AucHVzaCgidmFyIHciLHMsIj0iLGMocyx0KSwiOyIpO2Zvcih2YXIgYj0wO2I8dDsrK2IpYiE9PXMmJnAucHVzaCgidmFyIHciLHMsIm0iLGIsIj1zY2FsZSh3IixzLCIsbSIsYiwiWzBdKTsiKX1yZXR1cm4gcC5wdXNoKCJ2YXIgcD0iLHUsIixuPSIsZiwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gIixoKSxuZXcgRnVuY3Rpb24oInN1bSIsImRpZmYiLCJwcm9kIiwic2NhbGUiLHAuam9pbigiIikpKHYsZyxtLHkpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gMH1mdW5jdGlvbiBoKCl7cmV0dXJuIDB9ZnVuY3Rpb24gZCgpe3JldHVybiAwfWZ1bmN0aW9uIHAodCl7dmFyIGU9eFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXhbdC5sZW5ndGhdPXUodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX12YXIgbT10KCJ0d28tcHJvZHVjdCIpLHY9dCgicm9idXN0LXN1bSIpLGc9dCgicm9idXN0LXN1YnRyYWN0IikseT10KCJyb2J1c3Qtc2NhbGUiKSxiPTYseD1bZixoLGRdOyFmdW5jdGlvbigpe2Zvcig7eC5sZW5ndGg8PWI7KXgucHVzaCh1KHgubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PWI7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTtmb3IodmFyIGk9WyJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoIix0LmpvaW4oKSwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDsiXSxuPTI7bjw9YjsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiB0ZXN0SW5TcGhlcmUiKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbcF0uY29uY2F0KHgpKTtmb3IodmFyIG49MDtuPD1iOysrbillLmV4cG9ydHNbbl09eFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUxOSwicm9idXN0LXN1YnRyYWN0Ijo1MjEsInJvYnVzdC1zdW0iOjUyMiwidHdvLXByb2R1Y3QiOjU0N31dLDUxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0icm9idXN0TGluZWFyU29sdmUiK3QrImQiLHI9WyJmdW5jdGlvbiAiLGUsIihBLGIpe3JldHVybiBbIl0sbj0wO248dDsrK24pe3IucHVzaCgiZGV0KFsiKTtmb3IodmFyIGk9MDtpPHQ7KytpKXtpPjAmJnIucHVzaCgiLCIpLHIucHVzaCgiWyIpO2Zvcih2YXIgYT0wO2E8dDsrK2EpYT4wJiZyLnB1c2goIiwiKSxhPT09bj9yLnB1c2goIitiWyIsaSwiXSIpOnIucHVzaCgiK0FbIixpLCJdWyIsYSwiXSIpO3IucHVzaCgiXSIpfXIucHVzaCgiXSksIil9ci5wdXNoKCJkZXQoQSldfXJldHVybiAiLGUpO3ZhciBzPW5ldyBGdW5jdGlvbigiZGV0IixyLmpvaW4oIiIpKTtyZXR1cm4gcyh0PDY/b1t0XTpvKX1mdW5jdGlvbiBpKCl7cmV0dXJuWzBdfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19dmFyIG89dCgicm9idXN0LWRldGVybWluYW50Iikscz02LGw9W2ksYV07IWZ1bmN0aW9uKCl7Zm9yKDtsLmxlbmd0aDxzOylsLnB1c2gobihsLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7Il0saT0wO2k8czsrK2kpdC5wdXNoKCJzIitpKSxyLnB1c2goImNhc2UgIixpLCI6cmV0dXJuIHMiLGksIihBLGIpOyIpO3IucHVzaCgifXZhciBzPUNBQ0hFW0EubGVuZ3RoXTtpZighcylzPUNBQ0hFW0EubGVuZ3RoXT1nKEEubGVuZ3RoKTtyZXR1cm4gcyhBLGIpfXJldHVybiBkaXNwYXRjaExpbmVhclNvbHZlIiksdC5wdXNoKCJDQUNIRSIsImciLHIuam9pbigiIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsbC5jb25jYXQoW2wsbl0pKTtmb3IodmFyIGk9MDtpPHM7KytpKWUuZXhwb3J0c1tpXT1sW2ldfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NTEzfV0sNTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe3JldHVybiAxJnQ/Ii0iOiIifWZ1bmN0aW9uIG8odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLG8odC5zbGljZSgwLGUpKSwiLCIsbyh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixvKHMobih0LHIpKSksIiwiLGEociksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGE9aSh0KSxsPVtdLGM9MDtjPHQ7KytjKTA9PSgxJmMpP2UucHVzaC5hcHBseShlLHMobihhLGMpKSk6ci5wdXNoLmFwcGx5KHIscyhuKGEsYykpKSxsLnB1c2goIm0iK2MpO3ZhciBwPW8oZSksbT1vKHIpLHY9Im9yaWVudGF0aW9uIit0KyJFeGFjdCIsZz1bImZ1bmN0aW9uICIsdiwiKCIsbC5qb2luKCksIil7dmFyIHA9IixwLCIsbj0iLG0sIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuICIsdl0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwicHJvZCIsInNjYWxlIiwic3ViIixnKShmLHUsaCxkKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWdbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1nW3QubGVuZ3RoXT1sKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9dmFyIHU9dCgidHdvLXByb2R1Y3QiKSxmPXQoInJvYnVzdC1zdW0iKSxoPXQoInJvYnVzdC1zY2FsZSIpLGQ9dCgicm9idXN0LXN1YnRyYWN0IikscD01LG09bCgzKSx2PWwoNCksZz1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSxmdW5jdGlvbih0LGUscil7dmFyIG4saT0odFsxXS1yWzFdKSooZVswXS1yWzBdKSxhPSh0WzBdLXJbMF0pKihlWzFdLXJbMV0pLG89aS1hO2lmKGk+MCl7aWYoYTw9MClyZXR1cm4gbztuPWkrYX1lbHNle2lmKCEoaTwwKSlyZXR1cm4gbztpZihhPj0wKXJldHVybiBvO249LShpK2EpfXZhciBzPTMuMzMwNjY5MDczODc1NDcxNmUtMTYqbjtyZXR1cm4gbz49c3x8bzw9LXM/bzptKHQsZSxyKX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1uWzBdLGE9ZVswXS1uWzBdLG89clswXS1uWzBdLHM9dFsxXS1uWzFdLGw9ZVsxXS1uWzFdLGM9clsxXS1uWzFdLHU9dFsyXS1uWzJdLGY9ZVsyXS1uWzJdLGg9clsyXS1uWzJdLGQ9YSpjLHA9bypsLG09bypzLGc9aSpjLHk9aSpsLGI9YSpzLHg9dSooZC1wKStmKihtLWcpK2gqKHktYiksXz0oTWF0aC5hYnMoZCkrTWF0aC5hYnMocCkpKk1hdGguYWJzKHUpKyhNYXRoLmFicyhtKStNYXRoLmFicyhnKSkqTWF0aC5hYnMoZikrKE1hdGguYWJzKHkpK01hdGguYWJzKGIpKSpNYXRoLmFicyhoKSx3PTcuNzcxNTYxMTcyMzc2MTAzZS0xNipfO3JldHVybiB4Pnd8fC14Pnc/eDp2KHQsZSxyLG4pfV07IWZ1bmN0aW9uKCl7Zm9yKDtnLmxlbmd0aDw9cDspZy5wdXNoKGwoZy5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9cDsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO2Zvcih2YXIgaT1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il0sbj0yO248PXA7KytuKWkucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gbyIsbiwiKCIsdC5zbGljZSgwLG4pLmpvaW4oKSwiKTsiKTtpLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb24iKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbY10uY29uY2F0KGcpKTtmb3IodmFyIG49MDtuPD1wOysrbillLmV4cG9ydHNbbl09Z1tuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUxOSwicm9idXN0LXN1YnRyYWN0Ijo1MjEsInJvYnVzdC1zdW0iOjUyMiwidHdvLXByb2R1Y3QiOjU0N31dLDUxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBhKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilyPWkocixhKGUsdFtuXSkpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pcj1pKHIsYSh0LGVbbl0pKTtyZXR1cm4gcn12YXIgaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKTtlLmV4cG9ydHM9bn0seyJyb2J1c3Qtc2NhbGUiOjUxOSwicm9idXN0LXN1bSI6NTIyfV0sNTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigxPT09cil7dmFyIG49aSh0WzBdLGUpO3JldHVybiBuWzBdP246W25bMV1dfXZhciBvPW5ldyBBcnJheSgyKnIpLHM9Wy4xLC4xXSxsPVsuMSwuMV0sYz0wO2kodFswXSxlLHMpLHNbMF0mJihvW2MrK109c1swXSk7Zm9yKHZhciB1PTE7dTxyOysrdSl7aSh0W3VdLGUsbCk7dmFyIGY9c1sxXTthKGYsbFswXSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO3ZhciBoPWxbMV0sZD1zWzFdLHA9aCtkLG09cC1oLHY9ZC1tO3NbMV09cCx2JiYob1tjKytdPXYpfXJldHVybiBzWzFdJiYob1tjKytdPXNbMV0pLDA9PT1jJiYob1tjKytdPTApLG8ubGVuZ3RoPWMsb312YXIgaT10KCJ0d28tcHJvZHVjdCIpLGE9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1ufSx7InR3by1wcm9kdWN0Ijo1NDcsInR3by1zdW0iOjU0OH1dLDUyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8MjsrK2kpe3ZhciBhPXRbaV0sbz1lW2ldLHM9TWF0aC5taW4oYSxvKSxsPU1hdGgubWF4KGEsbyksYz1yW2ldLHU9bltpXSxmPU1hdGgubWluKGMsdSk7aWYoTWF0aC5tYXgoYyx1KTxzfHxsPGYpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgbz1hKHQscixpKSxzPWEoZSxyLGkpO2lmKG8+MCYmcz4wfHxvPDAmJnM8MClyZXR1cm4hMTt2YXIgbD1hKHIsdCxlKSxjPWEoaSx0LGUpO3JldHVybiEobD4wJiZjPjB8fGw8MCYmYzwwKSYmKDAhPT1vfHwwIT09c3x8MCE9PWx8fDAhPT1jfHxuKHQsZSxyLGkpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUxN31dLDUyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9ci1uLGE9ZS1uLG89dC1pLHM9bythO3JldHVybiBzP1tzLHJdOltyXX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxpPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1pKXJldHVybiBuKHRbMF0sLWVbMF0pO3ZhciBhLG8scz1yK2ksbD1uZXcgQXJyYXkocyksYz0wLHU9MCxmPTAsaD1NYXRoLmFicyxkPXRbdV0scD1oKGQpLG09LWVbZl0sdj1oKG0pO3A8dj8obz1kLCh1Kz0xKTxyJiYoZD10W3VdLHA9aChkKSkpOihvPW0sKGYrPTEpPGkmJihtPS1lW2ZdLHY9aChtKSkpLHU8ciYmcDx2fHxmPj1pPyhhPWQsKHUrPTEpPHImJihkPXRbdV0scD1oKGQpKSk6KGE9bSwoZis9MSk8aSYmKG09LWVbZl0sdj1oKG0pKSk7Zm9yKHZhciBnLHksYix4LF8sdz1hK28sTT13LWEsVD1vLU0saz1ULEE9dzt1PHImJmY8aTspcDx2PyhhPWQsKHUrPTEpPHImJihkPXRbdV0scD1oKGQpKSk6KGE9bSwoZis9MSk8aSYmKG09LWVbZl0sdj1oKG0pKSksbz1rLHc9YStvLE09dy1hLFQ9by1NLFQmJihsW2MrK109VCksZz1BK3cseT1nLUEsYj1nLXkseD13LXksXz1BLWIsaz1fK3gsQT1nO2Zvcig7dTxyOylhPWQsbz1rLHc9YStvLE09dy1hLFQ9by1NLFQmJihsW2MrK109VCksZz1BK3cseT1nLUEsYj1nLXkseD13LXksXz1BLWIsaz1fK3gsQT1nLCh1Kz0xKTxyJiYoZD10W3VdKTtmb3IoO2Y8aTspYT1tLG89ayx3PWErbyxNPXctYSxUPW8tTSxUJiYobFtjKytdPVQpLGc9QSt3LHk9Zy1BLGI9Zy15LHg9dy15LF89QS1iLGs9Xyt4LEE9ZywoZis9MSk8aSYmKG09LWVbZl0pO3JldHVybiBrJiYobFtjKytdPWspLEEmJihsW2MrK109QSksY3x8KGxbYysrXT0wKSxsLmxlbmd0aD1jLGx9ZS5leHBvcnRzPWl9LHt9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXItbixhPWUtbixvPXQtaSxzPW8rYTtyZXR1cm4gcz9bcyxyXTpbcl19ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTB8dC5sZW5ndGgsaT0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09aSlyZXR1cm4gbih0WzBdLGVbMF0pO3ZhciBhLG8scz1yK2ksbD1uZXcgQXJyYXkocyksYz0wLHU9MCxmPTAsaD1NYXRoLmFicyxkPXRbdV0scD1oKGQpLG09ZVtmXSx2PWgobSk7cDx2PyhvPWQsKHUrPTEpPHImJihkPXRbdV0scD1oKGQpKSk6KG89bSwoZis9MSk8aSYmKG09ZVtmXSx2PWgobSkpKSx1PHImJnA8dnx8Zj49aT8oYT1kLCh1Kz0xKTxyJiYoZD10W3VdLHA9aChkKSkpOihhPW0sKGYrPTEpPGkmJihtPWVbZl0sdj1oKG0pKSk7Zm9yKHZhciBnLHksYix4LF8sdz1hK28sTT13LWEsVD1vLU0saz1ULEE9dzt1PHImJmY8aTspcDx2PyhhPWQsKHUrPTEpPHImJihkPXRbdV0scD1oKGQpKSk6KGE9bSwoZis9MSk8aSYmKG09ZVtmXSx2PWgobSkpKSxvPWssdz1hK28sTT13LWEsVD1vLU0sVCYmKGxbYysrXT1UKSxnPUErdyx5PWctQSxiPWcteSx4PXcteSxfPUEtYixrPV8reCxBPWc7Zm9yKDt1PHI7KWE9ZCxvPWssdz1hK28sTT13LWEsVD1vLU0sVCYmKGxbYysrXT1UKSxnPUErdyx5PWctQSxiPWcteSx4PXcteSxfPUEtYixrPV8reCxBPWcsKHUrPTEpPHImJihkPXRbdV0pO2Zvcig7ZjxpOylhPW0sbz1rLHc9YStvLE09dy1hLFQ9by1NLFQmJihsW2MrK109VCksZz1BK3cseT1nLUEsYj1nLXkseD13LXksXz1BLWIsaz1fK3gsQT1nLChmKz0xKTxpJiYobT1lW2ZdKTtyZXR1cm4gayYmKGxbYysrXT1rKSxBJiYobFtjKytdPUEpLGN8fChsW2MrK109MCksbC5sZW5ndGg9YyxsfWUuZXhwb3J0cz1pfSx7fV0sNTIzOltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP3IuZXhwb3J0cz1pKCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoaSk6ZS5TaGVsZlBhY2s9aSgpfSh0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscil7cj1yfHx7fSx0aGlzLnc9dHx8NjQsdGhpcy5oPWV8fDY0LHRoaXMuYXV0b1Jlc2l6ZT0hIXIuYXV0b1Jlc2l6ZSx0aGlzLnNoZWx2ZXM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmNvdW50PWZ1bmN0aW9uKHQpe3RoaXMuc3RhdHNbdF09MSsoMHx0aGlzLnN0YXRzW3RdKX19ZnVuY3Rpb24gZSh0LGUscil7dGhpcy54PTAsdGhpcy55PXQsdGhpcy53PXRoaXMuZnJlZT1lLHRoaXMuaD1yfXJldHVybiB0LnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKHQsZSl7dD1bXS5jb25jYXQodCksZT1lfHx7fTtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGg7bysrKWlmKHI9dFtvXS53fHx0W29dLndpZHRoLG49dFtvXS5ofHx0W29dLmhlaWdodCxyJiZuKXtpZighKGk9dGhpcy5wYWNrT25lKHIsbikpKWNvbnRpbnVlO2UuaW5QbGFjZSYmKHRbb10ueD1pLngsdFtvXS55PWkueSksYS5wdXNoKGkpfWlmKHRoaXMuc2hlbHZlcy5sZW5ndGg+MCl7Zm9yKHZhciBzPTAsbD0wLGM9MDtjPHRoaXMuc2hlbHZlcy5sZW5ndGg7YysrKXt2YXIgdT10aGlzLnNoZWx2ZXNbY107bCs9dS5oLHM9TWF0aC5tYXgodS53LXUuZnJlZSxzKX10aGlzLnJlc2l6ZShzLGwpfXJldHVybiBhfSx0LnByb3RvdHlwZS5wYWNrT25lPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuLGksYT0wLG89e3NoZWxmOi0xLHdhc3RlOjEvMH0scz0wO3M8dGhpcy5zaGVsdmVzLmxlbmd0aDtzKyspe2lmKG49dGhpcy5zaGVsdmVzW3NdLGErPW4uaCxyPT09bi5oJiZ0PD1uLmZyZWUpcmV0dXJuIHRoaXMuY291bnQociksbi5hbGxvYyh0LHIpO3I+bi5ofHx0Pm4uZnJlZXx8cjxuLmgmJnQ8PW4uZnJlZSYmKGk9bi5oLXIpPG8ud2FzdGUmJihvLndhc3RlPWksby5zaGVsZj1zKX1pZihvLnNoZWxmIT09LTEpcmV0dXJuIG49dGhpcy5zaGVsdmVzW28uc2hlbGZdLHRoaXMuY291bnQociksbi5hbGxvYyh0LHIpO2lmKHI8PXRoaXMuaC1hJiZ0PD10aGlzLncpcmV0dXJuIG49bmV3IGUoYSx0aGlzLncsciksdGhpcy5zaGVsdmVzLnB1c2gobiksdGhpcy5jb3VudChyKSxuLmFsbG9jKHQscik7aWYodGhpcy5hdXRvUmVzaXplKXt2YXIgbCxjLHUsZjtyZXR1cm4gbD1jPXRoaXMuaCx1PWY9dGhpcy53LCh1PD1sfHx0PnUpJiYoZj0yKk1hdGgubWF4KHQsdSkpLChsPHV8fHI+bCkmJihjPTIqTWF0aC5tYXgocixsKSksdGhpcy5yZXNpemUoZixjKSx0aGlzLnBhY2tPbmUodCxyKX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNoZWx2ZXM9W10sdGhpcy5zdGF0cz17fX0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53PXQsdGhpcy5oPWU7Zm9yKHZhciByPTA7cjx0aGlzLnNoZWx2ZXMubGVuZ3RoO3IrKyl0aGlzLnNoZWx2ZXNbcl0ucmVzaXplKHQpO3JldHVybiEwfSxlLnByb3RvdHlwZS5hbGxvYz1mdW5jdGlvbih0LGUpe2lmKHQ+dGhpcy5mcmVlfHxlPnRoaXMuaClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLng7cmV0dXJuIHRoaXMueCs9dCx0aGlzLmZyZWUtPXQse3g6cix5OnRoaXMueSx3OnQsaDplLHdpZHRoOnQsaGVpZ2h0OmV9fSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJlZSs9dC10aGlzLncsdGhpcy53PXQsITB9LHR9KX0se31dLDUyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMTp0PjA/MTowfX0se31dLDUyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBhKGkodCkpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImJvdW5kYXJ5LWNlbGxzIiksYT10KCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Iil9LHsiYm91bmRhcnktY2VsbHMiOjcwLCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Ijo1MDd9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1mLm1hbGxvY1VpbnQ4KHIpLGk9MDtpPHI7KytpKW5baV09dFtpXTxlfDA7cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUqKGUrMSkvMipyfDAsaT1mLm1hbGxvY1VpbnQzMigyKm4pLGE9MCxvPTA7bzxyOysrbylmb3IodmFyIHM9dFtvXSxlPXMubGVuZ3RoLGw9MDtsPGU7KytsKWZvcih2YXIgYz0wO2M8bDsrK2Mpe3ZhciBkPXNbY10scD1zW2xdO2lbYSsrXT0wfE1hdGgubWluKGQscCksaVthKytdPTB8TWF0aC5tYXgoZCxwKX1oKHUoaSxbYS8yfDAsMl0pKTtmb3IodmFyIG09MixvPTI7bzxhO28rPTIpaVtvLTJdPT09aVtvXSYmaVtvLTFdPT09aVtvKzFdfHwoaVttKytdPWlbb10saVttKytdPWlbbysxXSk7cmV0dXJuIHUoaSxbbS8yfDAsMl0pfWZ1bmN0aW9uIG8odCxlLHIsbil7Zm9yKHZhciBpPXQuZGF0YSxhPXQuc2hhcGVbMF0sbz1mLm1hbGxvY0RvdWJsZShhKSxzPTAsbD0wO2w8YTsrK2wpe3ZhciBjPWlbMipsXSxoPWlbMipsKzFdO2lmKHJbY10hPT1yW2hdKXt2YXIgZD1lW2NdLHA9ZVtoXTtpWzIqc109YyxpWzIqcysxXT1oLG9bcysrXT0ocC1uKS8ocC1kKX19cmV0dXJuIHQuc2hhcGVbMF09cyx1KG8sW3NdKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9Zi5tYWxsb2NJbnQzMigyKmUpLG49dC5zaGFwZVswXSxpPXQuZGF0YTtyWzBdPTA7Zm9yKHZhciBhPTAsbz0wO288bjsrK28pe3ZhciBzPWlbMipvXTtpZihzIT09YSl7Zm9yKHJbMiphKzFdPW87KythPHM7KXJbMiphXT1vLHJbMiphKzFdPW87clsyKmFdPW99fWZvcihyWzIqYSsxXT1uOysrYTxlOylyWzIqYV09clsyKmErMV09bjtyZXR1cm4gcn1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSxyLGMpe2lmKHI9cnx8MCx2b2lkIDA9PT1jJiYoYz1uKHQpKSwwPT09dC5sZW5ndGh8fGM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciB1PWkoZSwrciksaD1hKHQsYykscD1vKGgsZSx1LCtyKSxtPXMoaCwwfGUubGVuZ3RoKSx2PWQoYykodCxoLmRhdGEsbSx1KSxnPWwoaCkseT1bXS5zbGljZS5jYWxsKHAuZGF0YSwwLHAuc2hhcGVbMF0pO3JldHVybiBmLmZyZWUodSksZi5mcmVlKGguZGF0YSksZi5mcmVlKHAuZGF0YSksZi5mcmVlKG0pLHtjZWxsczp2LHZlcnRleElkczpnLHZlcnRleFdlaWdodHM6eX19ZS5leHBvcnRzPWM7dmFyIHU9dCgibmRhcnJheSIpLGY9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCJuZGFycmF5LXNvcnQiKSxkPXQoIi4vbGliL2NvZGVnZW4iKX0seyIuL2xpYi9jb2RlZ2VuIjo1MjcsbmRhcnJheTo0NzYsIm5kYXJyYXktc29ydCI6NDc0LCJ0eXBlZGFycmF5LXBvb2wiOjU0OX1dLDUyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTAscj1uZXcgQXJyYXkodCsxKTtyWzBdPVtbXV07Zm9yKHZhciBuPTE7bjw9dDsrK24pZm9yKHZhciBpPXJbbl09byhuKSxzPTA7czxpLmxlbmd0aDsrK3MpZT1NYXRoLm1heChlLGlbbl0ubGVuZ3RoKTtmb3IodmFyIGw9WyJmdW5jdGlvbiBCKEMsRSxpLGopeyIsInZhciBhPU1hdGgubWluKGksail8MCxiPU1hdGgubWF4KGksail8MCxsPUNbMiphXSxoPUNbMiphKzFdOyIsIndoaWxlKGw8aCl7IiwidmFyIG09KGwraCk+PjEsdj1FWzIqbSsxXTsiLCJpZih2PT09Yil7cmV0dXJuIG19IiwiaWYoYjx2KXtoPW19ZWxzZXtsPW0rMX0iLCJ9IiwicmV0dXJuIGw7IiwifTsiLCJmdW5jdGlvbiBnZXRDb250b3VyIix0LCJkKEYsRSxDLFMpeyIsInZhciBuPUYubGVuZ3RoLFI9W107IiwiZm9yKHZhciBpPTA7aTxuOysraSl7dmFyIGM9RltpXSxsPWMubGVuZ3RoOyJdLG49dCsxO24+MTstLW4pe248dCsxJiZsLnB1c2goImVsc2UgIiksbC5wdXNoKCJpZihsPT09IixuLCIpeyIpO2Zvcih2YXIgYz1bXSxzPTA7czxuOysrcyljLnB1c2goIihTW2NbIitzKyJdXTw8IitzKyIpIik7bC5wdXNoKCJ2YXIgTT0iLGMuam9pbigiKyIpLCI7aWYoTT09PTB8fE09PT0iLCgxPDxuKS0xLCIpe2NvbnRpbnVlfXN3aXRjaChNKXsiKTtmb3IodmFyIGk9cltuLTFdLHM9MDtzPGkubGVuZ3RoOysrcylsLnB1c2goImNhc2UgIixzLCI6IiksZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDw9MCkpe2wucHVzaCgiUi5wdXNoKCIpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgcj10W2VdO2U+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJbIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZsLnB1c2goIiwiKSxsLnB1c2goIkIoQyxFLGNbIixpWzBdLCJdLGNbIixpWzFdLCJdKSIpfWwucHVzaCgiXSIpfWwucHVzaCgiKTsiKX19KGlbc10pLGwucHVzaCgiYnJlYWs7Iik7bC5wdXNoKCJ9fSIpfXJldHVybiBsLnB1c2goIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyIix0LCJkIiksbmV3IEZ1bmN0aW9uKCJwb29sIixsLmpvaW4oIiIpKShhKX1mdW5jdGlvbiBpKHQpe3ZhciBlPXNbdF07cmV0dXJuIGV8fChlPXNbdF09bih0KSksZX1lLmV4cG9ydHM9aTt2YXIgYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIm1hcmNoaW5nLXNpbXBsZXgtdGFibGUiKSxzPXt9fSx7Im1hcmNoaW5nLXNpbXBsZXgtdGFibGUiOjQ1MywidHlwZWRhcnJheS1wb29sIjo1NDl9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVzZSByZXN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MCxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZT1yKGUsdFtuXS5sZW5ndGgpO3JldHVybiBlLTF9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9LTEscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pZT1yKGUsYVtvXSk7cmV0dXJuIGUrMX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT10W3JdLnNsaWNlKDApO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10Lmxlbmd0aCxuPXQubGVuZ3RoLWUubGVuZ3RoLGk9TWF0aC5taW47aWYobilyZXR1cm4gbjtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjp2YXIgYT10WzBdK3RbMV0tZVswXS1lWzFdO3JldHVybiBhP2E6aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGE9byt0WzJdLShzK2VbMl0pKXJldHVybiBhO3ZhciBsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKSxhPWkobCx0WzJdKS1pKGMsZVsyXSk7cmV0dXJuIGE/YTppKGwrdFsyXSxvKS1pKGMrZVsyXSxzKTtkZWZhdWx0OnZhciB1PXQuc2xpY2UoMCk7dS5zb3J0KCk7dmFyIGY9ZS5zbGljZSgwKTtmLnNvcnQoKTtmb3IodmFyIGg9MDtoPHI7KytoKWlmKG49dVtoXS1mW2hdKXJldHVybiBuO3JldHVybiAwfX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG8odFswXSxlWzBdKX1mdW5jdGlvbiBsKHQsZSl7aWYoZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKW5baV09W3RbaV0sZVtpXV07bi5zb3J0KHMpO2Zvcih2YXIgaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KG8pLHR9ZnVuY3Rpb24gYyh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihvKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBhPXIrbj4+MSxzPW8odFthXSxlKTtzPD0wPygwPT09cyYmKGk9YSkscj1hKzEpOnM+MCYmKG49YS0xKX1yZXR1cm4gaX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wLGk9ci5sZW5ndGg7bjxpOysrbilyW25dPVtdO2Zvcih2YXIgYT1bXSxuPTAscz1lLmxlbmd0aDtuPHM7KytuKWZvcih2YXIgbD1lW25dLGM9bC5sZW5ndGgsZj0xLGg9MTw8YztmPGg7KytmKXthLmxlbmd0aD1iLnBvcENvdW50KGYpO2Zvcih2YXIgZD0wLHA9MDtwPGM7KytwKWYmMTw8cCYmKGFbZCsrXT1sW3BdKTt2YXIgbT11KHQsYSk7aWYoIShtPDApKWZvcig7OylpZihyW20rK10ucHVzaChuKSxtPj10Lmxlbmd0aHx8MCE9PW8odFttXSxhKSlicmVha31yZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7aWYoIWUpcmV0dXJuIGYoYyhwKHQsMCkpLHQsMCk7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPVtdCjtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLHM9MTw8YTtvPHM7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gbChlKX1mdW5jdGlvbiBwKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxuPSgxPDxlKzEpLTEsaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgYT10W2ldLG89bjtvPDE8PGEubGVuZ3RoO289Yi5uZXh0Q29tYmluYXRpb24obykpe2Zvcih2YXIgcz1uZXcgQXJyYXkoZSsxKSxjPTAsdT0wO3U8YS5sZW5ndGg7Kyt1KW8mMTw8dSYmKHNbYysrXT1hW3VdKTtyLnB1c2gocyl9cmV0dXJuIGwocil9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87KythKXtmb3IodmFyIHM9bmV3IEFycmF5KGkubGVuZ3RoLTEpLGM9MCx1PTA7YzxvOysrYyljIT09YSYmKHNbdSsrXT1pW2NdKTtlLnB1c2gocyl9cmV0dXJuIGwoZSl9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgeChlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT0wO2E8aS5sZW5ndGg7KythKWZvcih2YXIgbz1hKzE7bzxpLmxlbmd0aDsrK28pci5saW5rKGlbYV0saVtvXSk7Zm9yKHZhciBzPVtdLGw9ci5yYW5rcyxuPTA7bjxsLmxlbmd0aDsrK24pbFtuXT0tMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9ci5maW5kKHRbbl1bMF0pO2xbY108MD8obFtjXT1zLmxlbmd0aCxzLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6c1tsW2NdXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBzfWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPWMobChwKHQsMCkpKSxyPW5ldyB4KGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT0wO2E8aS5sZW5ndGg7KythKWZvcih2YXIgbz11KGUsW2lbYV1dKSxzPWErMTtzPGkubGVuZ3RoOysrcylyLmxpbmsobyx1KGUsW2lbc11dKSk7Zm9yKHZhciBmPVtdLGg9ci5yYW5rcyxuPTA7bjxoLmxlbmd0aDsrK24paFtuXT0tMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGQ9ci5maW5kKHUoZSxbdFtuXVswXV0pKTtoW2RdPDA/KGhbZF09Zi5sZW5ndGgsZi5wdXNoKFt0W25dLnNsaWNlKDApXSkpOmZbaFtkXV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gZn1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGU/dih0LGUpOmcodCl9dmFyIGI9dCgiYml0LXR3aWRkbGUiKSx4PXQoInVuaW9uLWZpbmQiKTtyLmRpbWVuc2lvbj1uLHIuY291bnRWZXJ0aWNlcz1pLHIuY2xvbmVDZWxscz1hLHIuY29tcGFyZUNlbGxzPW8sci5ub3JtYWxpemU9bCxyLnVuaXF1ZT1jLHIuZmluZENlbGw9dSxyLmluY2lkZW5jZT1mLHIuZHVhbD1oLHIuZXhwbG9kZT1kLHIuc2tlbGV0b249cCxyLmJvdW5kYXJ5PW0sci5jb25uZWN0ZWRDb21wb25lbnRzPXl9LHsiYml0LXR3aWRkbGUiOjY4LCJ1bmlvbi1maW5kIjo1NTB9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjhdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo2OH1dLDUzMDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1MjhdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTI5LGR1cDo1MjgsInVuaW9uLWZpbmQiOjUzMX1dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnMoYSh0LGUscikpL01hdGguc3FydChNYXRoLnBvdyhlWzBdLXJbMF0sMikrTWF0aC5wb3coZVsxXS1yWzFdLDIpKX1mdW5jdGlvbiBpKHQsZSxyKXtmdW5jdGlvbiBpKHQpe2lmKGJbdF0pcmV0dXJuIDEvMDt2YXIgcj12W3RdLGk9Z1t0XTtyZXR1cm4gcjwwfHxpPDA/MS8wOm4oZVt0XSxlW3JdLGVbaV0pfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1UW3RdLG49VFtlXTtUW3RdPW4sVFtlXT1yLGtbcl09ZSxrW25dPXR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4geVtUW3RdXX1mdW5jdGlvbiBsKHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPXModCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxvPXQ7aWYobjxBKXt2YXIgbD1zKG4pO2w8ciYmKG89bixyPWwpfWlmKGk8QSl7cyhpKTxyJiYobz1pKX1pZihvPT09dClyZXR1cm4gdDthKHQsbyksdD1vfX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1zKHQpO3Q+MDspe3ZhciByPWwodCk7aWYocj49MCl7aWYoZTxzKHIpKXthKHQsciksdD1yO2NvbnRpbnVlfX1yZXR1cm4gdH19ZnVuY3Rpb24gZigpe2lmKEE+MCl7dmFyIHQ9VFswXTtyZXR1cm4gYSgwLEEtMSksQS09MSxjKDApLHR9cmV0dXJuLTF9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPVRbdF07cmV0dXJuIHlbcl09PT1lP3Q6KHlbcl09LSgxLzApLHUodCksZigpLHlbcl09ZSxBKz0xLHUoQS0xKSl9ZnVuY3Rpb24gZCh0LGUpe2lmKHRbZV08MClyZXR1cm4gZTt2YXIgcj1lLG49ZTtkb3t2YXIgaT10W25dO2lmKCFiW25dfHxpPDB8fGk9PT1uKWJyZWFrO2lmKG49aSxpPXRbbl0sIWJbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn1mb3IodmFyIHA9ZS5sZW5ndGgsbT10Lmxlbmd0aCx2PW5ldyBBcnJheShwKSxnPW5ldyBBcnJheShwKSx5PW5ldyBBcnJheShwKSxiPW5ldyBBcnJheShwKSx4PTA7eDxwOysreCl2W3hdPWdbeF09LTEseVt4XT0xLzAsYlt4XT0hMTtmb3IodmFyIHg9MDt4PG07Kyt4KXt2YXIgXz10W3hdO2lmKDIhPT1fLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG11c3QgYmUgYSBncmFwaCIpO3ZhciB3PV9bMV0sTT1fWzBdO2dbTV0hPT0tMT9nW01dPS0yOmdbTV09dyx2W3ddIT09LTE/dlt3XT0tMjp2W3ddPU19Zm9yKHZhciBUPVtdLGs9bmV3IEFycmF5KHApLHg9MDt4PHA7Kyt4KXsoeVt4XT1pKHgpKTwxLzA/KGtbeF09VC5sZW5ndGgsVC5wdXNoKHgpKTprW3hdPS0xfWZvcih2YXIgQT1ULmxlbmd0aCx4PUE+PjE7eD49MDstLXgpYyh4KTtmb3IoOzspe3ZhciBFPWYoKTtpZihFPDB8fHlbRV0+cilicmVhazshZnVuY3Rpb24odCl7aWYoIWJbdF0pe2JbdF09ITA7dmFyIGU9dlt0XSxyPWdbdF07dltyXT49MCYmKHZbcl09ZSksZ1tlXT49MCYmKGdbZV09ciksa1tlXT49MCYmaChrW2VdLGkoZSkpLGtbcl0+PTAmJmgoa1tyXSxpKHIpKX19KEUpfWZvcih2YXIgUz1bXSx4PTA7eDxwOysreCliW3hdfHwoa1t4XT1TLmxlbmd0aCxTLnB1c2goZVt4XS5zbGljZSgpKSk7dmFyIEw9KFMubGVuZ3RoLFtdKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWQodix0WzBdKSxyPWQoZyx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49a1tlXSxpPWtbcl07biE9PWkmJkwucHVzaChbbixpXSl9fSksby51bmlxdWUoby5ub3JtYWxpemUoTCkpLHtwb3NpdGlvbnM6UyxlZGdlczpMfX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoInNpbXBsaWNpYWwtY29tcGxleCIpfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTE3LCJzaW1wbGljaWFsLWNvbXBsZXgiOjUzMH1dLDUzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLG49ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSl7dmFyIGk9TWF0aC5taW4odFswXVsxXSx0WzFdWzFdKSxvPU1hdGgubWF4KHRbMF1bMV0sdFsxXVsxXSkscz1NYXRoLm1pbihlWzBdWzFdLGVbMV1bMV0pLGw9TWF0aC5tYXgoZVswXVsxXSxlWzFdWzFdKTtyZXR1cm4gbzxzP28tczppPmw/aS1sOm8tbH1yPWVbMV0sbj1lWzBdfXZhciBjLHU7dFswXVsxXTx0WzFdWzFdPyhjPXRbMF0sdT10WzFdKTooYz10WzFdLHU9dFswXSk7dmFyIGY9YShuLHIsYyk7cmV0dXJuIGY/ZjooZj1hKG4scix1KSxmP2Y6dS1uKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsaTtpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGk9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gbihlLHQpO3I9ZVsxXSxpPWVbMF19dmFyIG8scztpZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4tbih0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9YShyLGkscyksYz1hKHIsaSxvKTtpZihsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO2lmKGw9YShzLG8saSksYz1hKHMsbyxyKSxsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO3JldHVybiBpWzBdLXNbMF19ZS5leHBvcnRzPWk7dmFyIGE9dCgicm9idXN0LW9yaWVudGF0aW9uIil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MTd9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWYobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7dmFyIGw9YSh0LnJpZ2h0LGUpO2lmKGwpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbD1hKHQucmlnaHQsZSk7aWYobClyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTIqZSxpPW5ldyBBcnJheShyKSxhPTA7YTxlOysrYSl7dmFyIGw9dFthXSxjPWxbMF1bMF08bFsxXVswXTtpWzIqYV09bmV3IHMobFswXVswXSxsLGMsYSksaVsyKmErMV09bmV3IHMobFsxXVswXSxsLCFjLGEpfWkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHI/cjoocj10LmNyZWF0ZS1lLmNyZWF0ZSxyP3I6TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSk7Zm9yKHZhciBmPXUoaCksZD1bXSxwPVtdLG09W10sYT0wO2E8cjspe2Zvcih2YXIgdj1pW2FdLngsZz1bXTthPHI7KXt2YXIgeT1pW2FdO2lmKHkueCE9PXYpYnJlYWs7YSs9MSx5LnNlZ21lbnRbMF1bMF09PT15LngmJnkuc2VnbWVudFsxXVswXT09PXkueD95LmNyZWF0ZSYmKHkuc2VnbWVudFswXVsxXTx5LnNlZ21lbnRbMV1bMV0/KGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMCwhMCkpLGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMSwhMSkpKTooZy5wdXNoKG5ldyBvKHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCEwLCExKSksZy5wdXNoKG5ldyBvKHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCExLCEwKSkpKTpmPXkuY3JlYXRlP2YuaW5zZXJ0KHkuc2VnbWVudCx5LmluZGV4KTpmLnJlbW92ZSh5LnNlZ21lbnQpfWQucHVzaChmLnJvb3QpLHAucHVzaCh2KSxtLnB1c2goZyl9cmV0dXJuIG5ldyBuKGQscCxtKX1lLmV4cG9ydHM9bDt2YXIgYz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHU9dCgiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSIpLGY9dCgicm9idXN0LW9yaWVudGF0aW9uIiksaD10KCIuL2xpYi9vcmRlci1zZWdtZW50cyIpO24ucHJvdG90eXBlLmNhc3RVcD1mdW5jdGlvbih0KXt2YXIgZT1jLmxlKHRoaXMuY29vcmRpbmF0ZXMsdFswXSk7aWYoZTwwKXJldHVybi0xO3ZhciByPSh0aGlzLnNsYWJzW2VdLGEodGhpcy5zbGFic1tlXSx0KSksbj0tMTtpZihyJiYobj1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIG89bnVsbDtpZihyJiYobz1yLmtleSksZT4wKXt2YXIgcz1hKHRoaXMuc2xhYnNbZS0xXSx0KTtzJiYobz9oKHMua2V5LG8pPjAmJihvPXMua2V5LG49cy52YWx1ZSk6KG49cy52YWx1ZSxvPXMua2V5KSl9dmFyIGw9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGwubGVuZ3RoPjApe3ZhciB1PWMuZ2UobCx0WzFdLGkpO2lmKHU8bC5sZW5ndGgpe3ZhciBkPWxbdV07aWYodFsxXT09PWQueSl7aWYoZC5jbG9zZWQpcmV0dXJuIGQuaW5kZXg7Zm9yKDt1PGwubGVuZ3RoLTEmJmxbdSsxXS55PT09dFsxXTspaWYodSs9MSxkPWxbdV0sZC5jbG9zZWQpcmV0dXJuIGQuaW5kZXg7aWYoZC55PT09dFsxXSYmIWQuc3RhcnQpe2lmKCh1Kz0xKT49bC5sZW5ndGgpcmV0dXJuIG47ZD1sW3VdfX1pZihkLnN0YXJ0KWlmKG8pe3ZhciBwPWYob1swXSxvWzFdLFt0WzBdLGQueV0pO29bMF1bMF0+b1sxXVswXSYmKHA9LXApLHA+MCYmKG49ZC5pbmRleCl9ZWxzZSBuPWQuaW5kZXg7ZWxzZSBkLnkhPT10WzFdJiYobj1kLmluZGV4KX19fXJldHVybiBufX0seyIuL2xpYi9vcmRlci1zZWdtZW50cyI6NTMzLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjcsImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiOjEzNSwicm9idXN0LW9yaWVudGF0aW9uIjo1MTd9XSw1MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWMobCh0LGUpLFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT1uLWUsYT0tZS9pO2E8MD9hPTA6YT4xJiYoYT0xKTtmb3IodmFyIG89MS1hLHM9dC5sZW5ndGgsbD1uZXcgQXJyYXkocyksYz0wO2M8czsrK2MpbFtjXT1hKnRbY10rbypyW2NdO3JldHVybiBsfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9W10sYT1bXSxvPW4odFt0Lmxlbmd0aC0xXSxlKSxzPXRbdC5sZW5ndGgtMV0sbD10WzBdLGM9MDtjPHQubGVuZ3RoOysrYyxzPWwpe2w9dFtjXTt2YXIgdT1uKGwsZSk7aWYobzwwJiZ1PjB8fG8+MCYmdTwwKXt2YXIgZj1pKHMsdSxsLG8pO3IucHVzaChmKSxhLnB1c2goZi5zbGljZSgpKX11PDA/YS5wdXNoKGwuc2xpY2UoKSk6dT4wP3IucHVzaChsLnNsaWNlKCkpOihyLnB1c2gobC5zbGljZSgpKSxhLnB1c2gobC5zbGljZSgpKSksbz11fXJldHVybntwb3NpdGl2ZTpyLG5lZ2F0aXZlOmF9fWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9W10sYT1uKHRbdC5sZW5ndGgtMV0sZSksbz10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsbz1zKXtzPXRbbF07dmFyIGM9bihzLGUpOyhhPDAmJmM+MHx8YT4wJiZjPDApJiZyLnB1c2goaShvLGMscyxhKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksYT1jfXJldHVybiByfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9W10sYT1uKHRbdC5sZW5ndGgtMV0sZSksbz10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsbz1zKXtzPXRbbF07dmFyIGM9bihzLGUpOyhhPDAmJmM+MHx8YT4wJiZjPDApJiZyLnB1c2goaShvLGMscyxhKSksYzw9MCYmci5wdXNoKHMuc2xpY2UoKSksYT1jfXJldHVybiByfXZhciBsPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGM9dCgicm9idXN0LXN1bSIpO2UuZXhwb3J0cz1hLGUuZXhwb3J0cy5wb3NpdGl2ZT1vLGUuZXhwb3J0cy5uZWdhdGl2ZT1zfSx7InJvYnVzdC1kb3QtcHJvZHVjdCI6NTE0LCJyb2J1c3Qtc3VtIjo1MjJ9XSw1MzY6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe3ZhciB0PWFyZ3VtZW50c1swXSxlPXIuY2FjaGU7cmV0dXJuIGVbdF0mJmUuaGFzT3duUHJvcGVydHkodCl8fChlW3RdPXIucGFyc2UodCkpLHIuZm9ybWF0LmNhbGwobnVsbCxlW3RdLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheShlKzEpLmpvaW4odCl9dmFyIG89e25vdF9zdHJpbmc6L1tec10vLG51bWJlcjovW2RpZWZnXS8sanNvbjovW2pdLyxub3RfanNvbjovW15qXS8sdGV4dDovXlteXHgyNV0rLyxtb2R1bG86L15ceDI1ezJ9LyxwbGFjZWhvbGRlcjovXlx4MjUoPzooWzEtOV1cZCopXCR8XCgoW15cKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdXhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bXCtcLV0vfTtyLmZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuLHMsbCxjLHUsZixoLGQ9MSxwPXQubGVuZ3RoLG09IiIsdj1bXSxnPSEwLHk9IiI7Zm9yKHM9MDtzPHA7cysrKWlmKCJzdHJpbmciPT09KG09aSh0W3NdKSkpdlt2Lmxlbmd0aF09dFtzXTtlbHNlIGlmKCJhcnJheSI9PT1tKXtpZihjPXRbc10sY1syXSlmb3Iobj1lW2RdLGw9MDtsPGNbMl0ubGVuZ3RoO2wrKyl7aWYoIW4uaGFzT3duUHJvcGVydHkoY1syXVtsXSkpdGhyb3cgbmV3IEVycm9yKHIoIltzcHJpbnRmXSBwcm9wZXJ0eSAnJXMnIGRvZXMgbm90IGV4aXN0IixjWzJdW2xdKSk7bj1uW2NbMl1bbF1dfWVsc2Ugbj1jWzFdP2VbY1sxXV06ZVtkKytdO2lmKCJmdW5jdGlvbiI9PWkobikmJihuPW4oKSksby5ub3Rfc3RyaW5nLnRlc3QoY1s4XSkmJm8ubm90X2pzb24udGVzdChjWzhdKSYmIm51bWJlciIhPWkobikmJmlzTmFOKG4pKXRocm93IG5ldyBUeXBlRXJyb3IocigiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVzIixpKG4pKSk7c3dpdGNoKG8ubnVtYmVyLnRlc3QoY1s4XSkmJihnPW4+PTApLGNbOF0pe2Nhc2UiYiI6bj1uLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6bj1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pO2JyZWFrO2Nhc2UiZCI6Y2FzZSJpIjpuPXBhcnNlSW50KG4sMTApO2JyZWFrO2Nhc2UiaiI6bj1KU09OLnN0cmluZ2lmeShuLG51bGwsY1s2XT9wYXJzZUludChjWzZdKTowKTticmVhaztjYXNlImUiOm49Y1s3XT9uLnRvRXhwb25lbnRpYWwoY1s3XSk6bi50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjpuPWNbN10/cGFyc2VGbG9hdChuKS50b0ZpeGVkKGNbN10pOnBhcnNlRmxvYXQobik7YnJlYWs7Y2FzZSJnIjpuPWNbN10/cGFyc2VGbG9hdChuKS50b1ByZWNpc2lvbihjWzddKTpwYXJzZUZsb2F0KG4pO2JyZWFrO2Nhc2UibyI6bj1uLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6bj0obj1TdHJpbmcobikpJiZjWzddP24uc3Vic3RyaW5nKDAsY1s3XSk6bjticmVhaztjYXNlInUiOm4+Pj49MDticmVhaztjYXNlIngiOm49bi50b1N0cmluZygxNik7YnJlYWs7Y2FzZSJYIjpuPW4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9by5qc29uLnRlc3QoY1s4XSk/dlt2Lmxlbmd0aF09bjooIW8ubnVtYmVyLnRlc3QoY1s4XSl8fGcmJiFjWzNdP3k9IiI6KHk9Zz8iKyI6Ii0iLG49bi50b1N0cmluZygpLnJlcGxhY2Uoby5zaWduLCIiKSksZj1jWzRdPyIwIj09PWNbNF0/IjAiOmNbNF0uY2hhckF0KDEpOiIgIixoPWNbNl0tKHkrbikubGVuZ3RoLHU9Y1s2XSYmaD4wP2EoZixoKToiIix2W3YubGVuZ3RoXT1jWzVdP3krbit1OiIwIj09PWY/eSt1K246dSt5K24pfXJldHVybiB2LmpvaW4oIiIpfSxyLmNhY2hlPXt9LHIucGFyc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj1bXSxuPVtdLGk9MDtlOyl7aWYobnVsbCE9PShyPW8udGV4dC5leGVjKGUpKSluW24ubGVuZ3RoXT1yWzBdO2Vsc2UgaWYobnVsbCE9PShyPW8ubW9kdWxvLmV4ZWMoZSkpKW5bbi5sZW5ndGhdPSIlIjtlbHNle2lmKG51bGw9PT0ocj1vLnBsYWNlaG9sZGVyLmV4ZWMoZSkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXIiKTtpZihyWzJdKXtpfD0xO3ZhciBhPVtdLHM9clsyXSxsPVtdO2lmKG51bGw9PT0obD1vLmtleS5leGVjKHMpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7Zm9yKGFbYS5sZW5ndGhdPWxbMV07IiIhPT0ocz1zLnN1YnN0cmluZyhsWzBdLmxlbmd0aCkpOylpZihudWxsIT09KGw9by5rZXlfYWNjZXNzLmV4ZWMocykpKWFbYS5sZW5ndGhdPWxbMV07ZWxzZXtpZihudWxsPT09KGw9by5pbmRleF9hY2Nlc3MuZXhlYyhzKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2FbYS5sZW5ndGhdPWxbMV19clsyXT1hfWVsc2UgaXw9MjtpZigzPT09aSl0aHJvdyBuZXcgRXJyb3IoIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQiKTtuW24ubGVuZ3RoXT1yfWU9ZS5zdWJzdHJpbmcoclswXS5sZW5ndGgpfXJldHVybiBufTt2YXIgcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49KGV8fFtdKS5zbGljZSgwKSxuLnNwbGljZSgwLDAsdCksci5hcHBseShudWxsLG4pfTt2b2lkIDAhPT1uPyhuLnNwcmludGY9cixuLnZzcHJpbnRmPXMpOihlLnNwcmludGY9cixlLnZzcHJpbnRmPXMsImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kJiZ0KGZ1bmN0aW9uKCl7cmV0dXJue3NwcmludGY6cix2c3ByaW50ZjpzfX0pKX0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/dGhpczp3aW5kb3cpfSx7fV0sNTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTtmb3IodmFyIGM9MCx1PVtdLGY9W10sbD0wO2w8ZTsrK2wpcltsXTwwJiZmdW5jdGlvbihlKXt2YXIgbD1bZV0saD1bZV07Zm9yKHJbZV09bltlXT1jLGlbZV09ITAsYys9MTtoLmxlbmd0aD4wOyl7ZT1oW2gubGVuZ3RoLTFdO3ZhciBkPXRbZV07aWYoYVtlXTxkLmxlbmd0aCl7Zm9yKHZhciBwPWFbZV07cDxkLmxlbmd0aDsrK3Ape3ZhciBtPWRbcF07aWYoclttXTwwKXtyW21dPW5bbV09YyxpW21dPSEwLGMrPTEsbC5wdXNoKG0pLGgucHVzaChtKTticmVha31pW21dJiYobltlXT0wfE1hdGgubWluKG5bZV0sblttXSkpLG9bbV0+PTAmJnNbZV0ucHVzaChvW21dKX1hW2VdPXB9ZWxzZXtpZihuW2VdPT09cltlXSl7Zm9yKHZhciB2PVtdLGc9W10seT0wLHA9bC5sZW5ndGgtMTtwPj0wOy0tcCl7dmFyIGI9bFtwXTtpZihpW2JdPSExLHYucHVzaChiKSxnLnB1c2goc1tiXSkseSs9c1tiXS5sZW5ndGgsb1tiXT11Lmxlbmd0aCxiPT09ZSl7bC5sZW5ndGg9cDticmVha319dS5wdXNoKHYpO2Zvcih2YXIgeD1uZXcgQXJyYXkoeSkscD0wO3A8Zy5sZW5ndGg7cCsrKWZvcih2YXIgXz0wO188Z1twXS5sZW5ndGg7XysrKXhbLS15XT1nW3BdW19dO2YucHVzaCh4KX1oLnBvcCgpfX19KGwpO2Zvcih2YXIgaCxsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBkPWZbbF07aWYoMCE9PWQubGVuZ3RoKXtkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksaD1bZFswXV07Zm9yKHZhciBwPTE7cDxkLmxlbmd0aDtwKyspZFtwXSE9PWRbcC0xXSYmaC5wdXNoKGRbcF0pO2ZbbF09aH19cmV0dXJue2NvbXBvbmVudHM6dSxhZGphY2VuY3lMaXN0OmZ9fWUuZXhwb3J0cz1ufSx7fV0sNTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBpKHQpfWZ1bmN0aW9uIGkodCl7dGhpcy5vcHRpb25zPWQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfWZ1bmN0aW9uIGEodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpuLHByb3BlcnRpZXM6aSxwYXJlbnRJZDotMSxudW1Qb2ludHM6cn19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7cmV0dXJue3g6YyhyWzBdKSx5OnUoclsxXSksem9vbToxLzAsaWQ6ZSxwYXJlbnRJZDotMX19ZnVuY3Rpb24gcyh0KXtyZXR1cm57dHlwZToiRmVhdHVyZSIscHJvcGVydGllczpsKHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W2YodC54KSxoKHQueSldfX19ZnVuY3Rpb24gbCh0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiBkKGQoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gdSh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBmKHQpe3JldHVybiAzNjAqKHQtLjUpfWZ1bmN0aW9uIGgodCl7dmFyIGU9KDE4MC0zNjAqdCkqTWF0aC5QSS8xODA7cmV0dXJuIDM2MCpNYXRoLmF0YW4oTWF0aC5leHAoZSkpL01hdGguUEktOTB9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBwKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC55fXZhciB2PXQoImtkYnVzaCIpO2UuZXhwb3J0cz1uLGkucHJvdG90eXBlPXtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEscmVkdWNlOm51bGwsaW5pdGlhbDpmdW5jdGlvbigpe3JldHVybnt9fSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsb2FkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5sb2c7ZSYmY29uc29sZS50aW1lKCJ0b3RhbCB0aW1lIik7dmFyIHI9InByZXBhcmUgIit0Lmxlbmd0aCsiIHBvaW50cyI7ZSYmY29uc29sZS50aW1lKHIpLHRoaXMucG9pbnRzPXQ7dmFyIG49dC5tYXAobyk7ZSYmY29uc29sZS50aW1lRW5kKHIpO2Zvcih2YXIgaT10aGlzLm9wdGlvbnMubWF4Wm9vbTtpPj10aGlzLm9wdGlvbnMubWluWm9vbTtpLS0pe3ZhciBhPStEYXRlLm5vdygpO3RoaXMudHJlZXNbaSsxXT12KG4scCxtLHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLG49dGhpcy5fY2x1c3RlcihuLGkpLGUmJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGksbi5sZW5ndGgsK0RhdGUubm93KCktYSl9cmV0dXJuIHRoaXMudHJlZXNbdGhpcy5vcHRpb25zLm1pblpvb21dPXYobixwLG0sdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksZSYmY29uc29sZS50aW1lRW5kKCJ0b3RhbCB0aW1lIiksdGhpc30sZ2V0Q2x1c3RlcnM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oZSldLG49ci5yYW5nZShjKHRbMF0pLHUodFszXSksYyh0WzJdKSx1KHRbMV0pKSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ci5wb2ludHNbblthXV07aS5wdXNoKG8ubnVtUG9pbnRzP3Mobyk6dGhpcy5wb2ludHNbby5pZF0pfXJldHVybiBpfSxnZXRDaGlsZHJlbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW3RdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPXRoaXMudHJlZXNbZSsxXS53aXRoaW4oci54LHIueSxuKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGw9dGhpcy50cmVlc1tlKzFdLnBvaW50c1tpW29dXTtsLnBhcmVudElkPT09dCYmYS5wdXNoKGwubnVtUG9pbnRzP3MobCk6dGhpcy5wb2ludHNbbC5pZF0pfXJldHVybiBhfSxnZXRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbil7cj1yfHwxMCxuPW58fDA7dmFyIGk9W107cmV0dXJuIHRoaXMuX2FwcGVuZExlYXZlcyhpLHQsZSxyLG4sMCksaX0sZ2V0VGlsZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGk9TWF0aC5wb3coMix0KSxhPXRoaXMub3B0aW9ucy5leHRlbnQsbz10aGlzLm9wdGlvbnMucmFkaXVzLHM9by9hLGw9KHItcykvaSxjPShyKzErcykvaSx1PXtmZWF0dXJlczpbXX07cmV0dXJuIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKChlLXMpL2ksbCwoZSsxK3MpL2ksYyksbi5wb2ludHMsZSxyLGksdSksMD09PWUmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDEtcy9pLGwsMSxjKSxuLnBvaW50cyxpLHIsaSx1KSxlPT09aS0xJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgwLGwscy9pLGMpLG4ucG9pbnRzLC0xLHIsaSx1KSx1LmZlYXR1cmVzLmxlbmd0aD91Om51bGx9LGdldENsdXN0ZXJFeHBhbnNpb25ab29tOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlPHRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0LGUpO2lmKGUrKywxIT09ci5sZW5ndGgpYnJlYWs7dD1yWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZH1yZXR1cm4gZX0sX2FwcGVuZExlYXZlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPXRoaXMuZ2V0Q2hpbGRyZW4oZSxyKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc10ucHJvcGVydGllcztpZihsLmNsdXN0ZXI/YStsLnBvaW50X2NvdW50PD1pP2ErPWwucG9pbnRfY291bnQ6YT10aGlzLl9hcHBlbmRMZWF2ZXModCxsLmNsdXN0ZXJfaWQscisxLG4saSxhKTphPGk/YSsrOnQucHVzaChvW3NdKSx0Lmxlbmd0aD09PW4pYnJlYWt9cmV0dXJuIGF9LF9hZGRUaWxlRmVhdHVyZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz1lW3Rbb11dO2EuZmVhdHVyZXMucHVzaCh7dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihzLnkqaS1uKSldXSx0YWdzOnMubnVtUG9pbnRzP2wocyk6dGhpcy5wb2ludHNbcy5pZF0ucHJvcGVydGllc30pfX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sTWF0aC5taW4odCx0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKSl9LF9jbHVzdGVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07aWYoIShvLnpvb208PWUpKXtvLnpvb209ZTt2YXIgcz10aGlzLnRyZWVzW2UrMV0sbD1zLndpdGhpbihvLngsby55LG4pLGM9by5udW1Qb2ludHN8fDEsdT1vLngqYyxmPW8ueSpjLGg9bnVsbDt0aGlzLm9wdGlvbnMucmVkdWNlJiYoaD10aGlzLm9wdGlvbnMuaW5pdGlhbCgpLHRoaXMuX2FjY3VtdWxhdGUoaCxvKSk7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPXMucG9pbnRzW2xbZF1dO2lmKGU8cC56b29tKXt2YXIgbT1wLm51bVBvaW50c3x8MTtwLnpvb209ZSx1Kz1wLngqbSxmKz1wLnkqbSxjKz1tLHAucGFyZW50SWQ9aSx0aGlzLm9wdGlvbnMucmVkdWNlJiZ0aGlzLl9hY2N1bXVsYXRlKGgscCl9fTE9PT1jP3IucHVzaChvKTooby5wYXJlbnRJZD1pLHIucHVzaChhKHUvYyxmL2MsYyxpLGgpKSl9fXJldHVybiByfSxfYWNjdW11bGF0ZTpmdW5jdGlvbih0LGUpe3ZhciByPWUubnVtUG9pbnRzP2UucHJvcGVydGllczp0aGlzLm9wdGlvbnMubWFwKHRoaXMucG9pbnRzW2UuaWRdLnByb3BlcnRpZXMpO3RoaXMub3B0aW9ucy5yZWR1Y2UodCxyKX19fSx7a2RidXNoOjMwNX1dLDUzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW4gaT9pW3RdOiIifSkuam9pbigiIil9ZS5leHBvcnRzPW47dmFyIGk9eyIgIjoiICIsMDoiXHUyMDcwIiwxOiJceGI5IiwyOiJceGIyIiwzOiJceGIzIiw0OiJcdTIwNzQiLDU6Ilx1MjA3NSIsNjoiXHUyMDc2Iiw3OiJcdTIwNzciLDg6Ilx1MjA3OCIsOToiXHUyMDc5IiwiKyI6Ilx1MjA3YSIsIi0iOiJcdTIwN2IiLGE6Ilx1MWQ0MyIsYjoiXHUxZDQ3IixjOiJcdTFkOWMiLGQ6Ilx1MWQ0OCIsZToiXHUxZDQ5IixmOiJcdTFkYTAiLGc6Ilx1MWQ0ZCIsaDoiXHUwMmIwIixpOiJcdTIwNzEiLGo6Ilx1MDJiMiIsazoiXHUxZDRmIixsOiJcdTAyZTEiLG06Ilx1MWQ1MCIsbjoiXHUyMDdmIixvOiJcdTFkNTIiLHA6Ilx1MWQ1NiIscjoiXHUwMmIzIixzOiJcdTAyZTIiLHQ6Ilx1MWQ1NyIsdToiXHUxZDU4Iix2OiJcdTFkNWIiLHc6Ilx1MDJiNyIseDoiXHUwMmUzIix5OiJcdTAyYjgiLHo6Ilx1MWRiYiJ9fSx7fV0sNTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Lmxlbmd0aCxuPVsiJ3VzZSBzdHJpY3QnOyJdLGk9InN1cmZhY2VOZXRzIit0LmpvaW4oIl8iKSsiZCIrZTtuLnB1c2goInZhciBjb250b3VyPWdlbkNvbnRvdXIoeyIsIm9yZGVyOlsiLHQuam9pbigpLCJdLCIsInNjYWxhckFyZ3VtZW50czogMywiLCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sIiksImdlbmVyaWMiPT09ZSYmbi5wdXNoKCJnZXR0ZXJzOlswXSwiKTtmb3IodmFyIGE9W10sbD1bXSxjPTA7YzxyOysrYylhLnB1c2goImQiK2MpLGwucHVzaCgiZCIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylhLnB1c2goInYiK2MpLGwucHVzaCgidiIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylhLnB1c2goInAiK2MpLGwucHVzaCgicCIrYyk7YS5wdXNoKCJhIiwiYiIsImMiKSxsLnB1c2goImEiLCJjIiksbi5wdXNoKCJ2ZXJ0ZXg6ZnVuY3Rpb24gdmVydGV4RnVuYygiLGEuam9pbigpLCIpeyIpO2Zvcih2YXIgdT1bXSxjPTA7YzwxPDxyOysrYyl1LnB1c2goIihwIitjKyI8PCIrYysiKSIpO24ucHVzaCgidmFyIG09KCIsdS5qb2luKCIrIiksIil8MDtpZihtPT09MHx8bT09PSIsKDE8PCgxPDxyKSktMSwiKXtyZXR1cm59Iik7dmFyIGY9W10saD1bXTsxPDwoMTw8cik8PTEyOD8obi5wdXNoKCJzd2l0Y2gobSl7IiksaD1uKTpuLnB1c2goInN3aXRjaChtPj4+Nyl7Iik7Zm9yKHZhciBjPTA7YzwxPDwoMTw8cik7KytjKXtpZigxPDwoMTw8cik+MTI4JiZjJTEyOD09MCl7Zi5sZW5ndGg+MCYmaC5wdXNoKCJ9fSIpO3ZhciBkPSJ2RXh0cmEiK2YubGVuZ3RoO24ucHVzaCgiY2FzZSAiLGM+Pj43LCI6IixkLCIobSYweDdmLCIsbC5qb2luKCksIik7YnJlYWs7IiksaD1bImZ1bmN0aW9uICIsZCwiKG0sIixsLmpvaW4oKSwiKXtzd2l0Y2gobSl7Il0sZi5wdXNoKGgpfWgucHVzaCgiY2FzZSAiLDEyNyZjLCI6Iik7Zm9yKHZhciBwPW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSx5PTAsYj0wO2I8cjsrK2IpcFtiXT1bXSxtW2JdPVtdLHZbYl09MCxnW2JdPTA7Zm9yKHZhciBiPTA7YjwxPDxyOysrYilmb3IodmFyIHg9MDt4PHI7Kyt4KXt2YXIgXz1iXjE8PHg7aWYoIShfPmIpJiYhKGMmMTw8XykhPSEoYyYxPDxiKSl7dmFyIHc9MTtjJjE8PF8/bVt4XS5wdXNoKCJ2IitfKyItdiIrYik6KG1beF0ucHVzaCgidiIrYisiLXYiK18pLHc9LXcpLHc8MD8ocFt4XS5wdXNoKCItdiIrYisiLXYiK18pLHZbeF0rPTIpOihwW3hdLnB1c2goInYiK2IrIit2IitfKSx2W3hdLT0yKSx5Kz0xO2Zvcih2YXIgTT0wO008cjsrK00pTSE9PXgmJihfJjE8PE0/Z1tNXSs9MTpnW01dLT0xKX19Zm9yKHZhciBUPVtdLHg9MDt4PHI7Kyt4KWlmKDA9PT1wW3hdLmxlbmd0aClULnB1c2goImQiK3grIi0wLjUiKTtlbHNle3ZhciBrPSIiO3ZbeF08MD9rPXZbeF0rIipjIjp2W3hdPjAmJihrPSIrIit2W3hdKyIqYyIpO3ZhciBBPXBbeF0ubGVuZ3RoL3kqLjUsRT0uNStnW3hdL3kqLjU7VC5wdXNoKCJkIit4KyItIitFKyItIitBKyIqKCIrcFt4XS5qb2luKCIrIikraysiKS8oIittW3hdLmpvaW4oIisiKSsiKSIpfWgucHVzaCgiYS5wdXNoKFsiLFQuam9pbigpLCJdKTsiLCJicmVhazsiKX1uLnB1c2goIn19LCIpLGYubGVuZ3RoPjAmJmgucHVzaCgifX0iKTtmb3IodmFyIFM9W10sYz0wO2M8MTw8ci0xOysrYylTLnB1c2goInYiK2MpO1MucHVzaCgiYzAiLCJjMSIsInAwIiwicDEiLCJhIiwiYiIsImMiKSxuLnB1c2goImNlbGw6ZnVuY3Rpb24gY2VsbEZ1bmMoIixTLmpvaW4oKSwiKXsiKTt2YXIgTD1zKHItMSk7bi5wdXNoKCJpZihwMCl7Yi5wdXNoKCIsTC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ2Iit0fSkrIl0ifSkuam9pbigpLCIpfWVsc2V7Yi5wdXNoKCIsTC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO3JldHVybiBlLnJldmVyc2UoKSwiWyIrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSsiXSJ9KS5qb2luKCksIil9fX0pO2Z1bmN0aW9uICIsaSwiKGFycmF5LGxldmVsKXt2YXIgdmVydHM9W10sY2VsbHM9W107Y29udG91cihhcnJheSx2ZXJ0cyxjZWxscyxsZXZlbCk7cmV0dXJuIHtwb3NpdGlvbnM6dmVydHMsY2VsbHM6Y2VsbHN9O30gcmV0dXJuICIsaSwiOyIpO2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGg7KytjKW4ucHVzaChmW2NdLmpvaW4oIiIpKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJnZW5Db250b3VyIixuLmpvaW4oIiIpKShvKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPWwodCxlKSxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKWlbb109W3Jbb11dLGFbb109W29dO3JldHVybntwb3NpdGlvbnM6aSxjZWxsczphfX1mdW5jdGlvbiBhKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBpKHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUsYT1jW3JdLGU9K2V8fDA7cmV0dXJuIGF8fChhPWNbcl09bih0Lm9yZGVyLHQuZHR5cGUpKSxhKHQsZSl9ZS5leHBvcnRzPWE7dmFyIG89dCgibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiKSxzPXQoInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSIpLGw9dCgiemVyby1jcm9zc2luZ3MiKSxjPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjo0NjQsInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSI6NTQ1LCJ6ZXJvLWNyb3NzaW5ncyI6NTkxfV0sNTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8InNhbnMtc2VyaWYiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIGE9dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9YSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuY3R4LmZvbnQ9dCsicHggIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuY3R4LmZpbGxTdHlsZT0iYmxhY2siLHRoaXMuZ3JpZE91dGVyPW5ldyBGbG9hdDY0QXJyYXkoYSphKSx0aGlzLmdyaWRJbm5lcj1uZXcgRmxvYXQ2NEFycmF5KGEqYSksdGhpcy5mPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy5kPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy56PW5ldyBGbG9hdDY0QXJyYXkoYSsxKSx0aGlzLnY9bmV3IEludDE2QXJyYXkoYSksdGhpcy5taWRkbGU9TWF0aC5yb3VuZChhLzIqKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiR2Vja28vIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgYz0wO2M8cjtjKyspbltjXT10W2MqZStsXTtmb3IoYShuLGksbyxzLHIpLGM9MDtjPHI7YysrKXRbYyplK2xdPWlbY119Zm9yKGM9MDtjPHI7YysrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W2MqZStsXTtmb3IoYShuLGksbyxzLGUpLGw9MDtsPGU7bCsrKXRbYyplK2xdPU1hdGguc3FydChpW2xdKX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3JbMF09MCxuWzBdPS1vLG5bMV09K287Zm9yKHZhciBhPTEscz0wO2E8aTthKyspe2Zvcih2YXIgbD0odFthXSthKmEtKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqYS0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W2FdK2EqYS0odFtyW3NdXStyW3NdKnJbc10pKS8oMiphLTIqcltzXSk7cysrLHJbc109YSxuW3NdPWwsbltzKzFdPStvfWZvcihhPTAscz0wO2E8aTthKyspe2Zvcig7bltzKzFdPGE7KXMrKztlW2FdPShhLXJbc10pKihhLXJbc10pK3RbcltzXV19fWUuZXhwb3J0cz1uO3ZhciBvPTFlMjA7bi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9ZS5kYXRhLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgYT1yWzQqbiszXS8yNTU7dGhpcy5ncmlkT3V0ZXJbbl09MT09PWE/MDowPT09YT9vOk1hdGgucG93KE1hdGgubWF4KDAsLjUtYSksMiksdGhpcy5ncmlkSW5uZXJbbl09MT09PWE/bzowPT09YT8wOk1hdGgucG93KE1hdGgubWF4KDAsYS0uNSksMil9Zm9yKGkodGhpcy5ncmlkT3V0ZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLGkodGhpcy5ncmlkSW5uZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgcz10aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXSxsPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjU1LTI1NSoocy90aGlzLnJhZGl1cyt0aGlzLmN1dG9mZikpKSk7cls0Km4rMF09bCxyWzQqbisxXT1sLHJbNCpuKzJdPWwscls0Km4rM109MjU1fXJldHVybiBlfX0se31dLDU0MjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtpZih0PXQ/dDoiIixyPXJ8fHt9LHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXJldHVybiBuZXcgZSh0LHIpO3ZhciBpPW4odCk7dGhpcy5fb3JpZ2luYWxJbnB1dD10LHRoaXMuX3I9aS5yLHRoaXMuX2c9aS5nLHRoaXMuX2I9aS5iLHRoaXMuX2E9aS5hLHRoaXMuX3JvdW5kQT1CKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PXIuZm9ybWF0fHxpLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9ci5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1CKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPUIodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9Qih0aGlzLl9iKSksdGhpcy5fb2s9aS5vayx0aGlzLl90Y19pZD1qKyt9ZnVuY3Rpb24gbih0KXt2YXIgZT17cjowLGc6MCxiOjB9LHI9MSxuPSExLGE9ITE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD16KHQpKSwib2JqZWN0Ij09dHlwZW9mIHQmJih0Lmhhc093blByb3BlcnR5KCJyIikmJnQuaGFzT3duUHJvcGVydHkoImciKSYmdC5oYXNPd25Qcm9wZXJ0eSgiYiIpPyhlPWkodC5yLHQuZyx0LmIpLG49ITAsYT0iJSI9PT1TdHJpbmcodC5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6dC5oYXNPd25Qcm9wZXJ0eSgiaCIpJiZ0Lmhhc093blByb3BlcnR5KCJzIikmJnQuaGFzT3duUHJvcGVydHkoInYiKT8odC5zPUkodC5zKSx0LnY9SSh0LnYpLGU9bCh0LmgsdC5zLHQudiksbj0hMCxhPSJoc3YiKTp0Lmhhc093blByb3BlcnR5KCJoIikmJnQuaGFzT3duUHJvcGVydHkoInMiKSYmdC5oYXNPd25Qcm9wZXJ0eSgibCIpJiYodC5zPUkodC5zKSx0Lmw9SSh0LmwpLGU9byh0LmgsdC5zLHQubCksbj0hMCxhPSJoc2wiKSx0Lmhhc093blByb3BlcnR5KCJhIikmJihyPXQuYSkpLHI9VChyKSx7b2s6bixmb3JtYXQ6dC5mb3JtYXR8fGEscjpVKDI1NSxWKGUuciwwKSksZzpVKDI1NSxWKGUuZywwKSksYjpVKDI1NSxWKGUuYiwwKSksYTpyfX1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm57cjoyNTUqayh0LDI1NSksZzoyNTUqayhlLDI1NSksYjoyNTUqayhyLDI1NSl9fWZ1bmN0aW9uIGEodCxlLHIpe3Q9ayh0LDI1NSksZT1rKGUsMjU1KSxyPWsociwyNTUpO3ZhciBuLGksYT1WKHQsZSxyKSxvPVUodCxlLHIpLHM9KGErbykvMjtpZihhPT1vKW49aT0wO2Vsc2V7dmFyIGw9YS1vO3N3aXRjaChpPXM+LjU/bC8oMi1hLW8pOmwvKGErbyksYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLGw6c319ZnVuY3Rpb24gbyh0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fXZhciBpLGEsbztpZih0PWsodCwzNjApLGU9ayhlLDEwMCkscj1rKHIsMTAwKSwwPT09ZSlpPWE9bz1yO2Vsc2V7dmFyIHM9cjwuNT9yKigxK2UpOnIrZS1yKmUsbD0yKnItcztpPW4obCxzLHQrMS8zKSxhPW4obCxzLHQpLG89bihsLHMsdC0xLzMpfXJldHVybntyOjI1NSppLGc6MjU1KmEsYjoyNTUqb319ZnVuY3Rpb24gcyh0LGUscil7dD1rKHQsMjU1KSxlPWsoZSwyNTUpLHI9ayhyLDI1NSk7dmFyIG4saSxhPVYodCxlLHIpLG89VSh0LGUscikscz1hLGw9YS1vO2lmKGk9MD09PWE/MDpsL2EsYT09byluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLHY6c319ZnVuY3Rpb24gbCh0LGUscil7dD02KmsodCwzNjApLGU9ayhlLDEwMCkscj1rKHIsMTAwKTt2YXIgbj1OLmZsb29yKHQpLGk9dC1uLGE9ciooMS1lKSxvPXIqKDEtaSplKSxzPXIqKDEtKDEtaSkqZSksbD1uJTY7cmV0dXJue3I6MjU1KltyLG8sYSxhLHMscl1bbF0sZzoyNTUqW3MscixyLG8sYSxhXVtsXSxiOjI1NSpbYSxhLHMscixyLG9dW2xdfX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPVtDKEIodCkudG9TdHJpbmcoMTYpKSxDKEIoZSkudG9TdHJpbmcoMTYpKSxDKEIocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKCIiKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybltDKEQobikpLEMoQih0KS50b1N0cmluZygxNikpLEMoQihlKS50b1N0cmluZygxNikpLEMoQihyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBmKHQscil7cj0wPT09cj8wOnJ8fDEwO3ZhciBuPWUodCkudG9Ic2woKTtyZXR1cm4gbi5zLT1yLzEwMCxuLnM9QShuLnMpLGUobil9ZnVuY3Rpb24gaCh0LHIpe3I9MD09PXI/MDpyfHwxMDt2YXIgbj1lKHQpLnRvSHNsKCk7cmV0dXJuIG4ucys9ci8xMDAsbi5zPUEobi5zKSxlKG4pfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGUodCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHAodCxyKXtyPTA9PT1yPzA6cnx8MTA7dmFyIG49ZSh0KS50b0hzbCgpO3JldHVybiBuLmwrPXIvMTAwLG4ubD1BKG4ubCksZShuKX1mdW5jdGlvbiBtKHQscil7cj0wPT09cj8wOnJ8fDEwO3ZhciBuPWUodCkudG9SZ2IoKTtyZXR1cm4gbi5yPVYoMCxVKDI1NSxuLnItQigyNTUqLShyLzEwMCkpKSksbi5nPVYoMCxVKDI1NSxuLmctQigyNTUqLShyLzEwMCkpKSksbi5iPVYoMCxVKDI1NSxuLmItQigyNTUqLShyLzEwMCkpKSksZShuKX1mdW5jdGlvbiB2KHQscil7cj0wPT09cj8wOnJ8fDEwO3ZhciBuPWUodCkudG9Ic2woKTtyZXR1cm4gbi5sLT1yLzEwMCxuLmw9QShuLmwpLGUobil9ZnVuY3Rpb24gZyh0LHIpe3ZhciBuPWUodCkudG9Ic2woKSxpPShCKG4uaCkrciklMzYwO3JldHVybiBuLmg9aTwwPzM2MCtpOmksZShuKX1mdW5jdGlvbiB5KHQpe3ZhciByPWUodCkudG9Ic2woKTtyZXR1cm4gci5oPShyLmgrMTgwKSUzNjAsZShyKX1mdW5jdGlvbiBiKHQpe3ZhciByPWUodCkudG9Ic2woKSxuPXIuaDtyZXR1cm5bZSh0KSxlKHtoOihuKzEyMCklMzYwLHM6ci5zLGw6ci5sfSksZSh7aDoobisyNDApJTM2MCxzOnIucyxsOnIubH0pXX1mdW5jdGlvbiB4KHQpe3ZhciByPWUodCkudG9Ic2woKSxuPXIuaDtyZXR1cm5bZSh0KSxlKHtoOihuKzkwKSUzNjAsczpyLnMsbDpyLmx9KSxlKHtoOihuKzE4MCklMzYwLHM6ci5zLGw6ci5sfSksZSh7aDoobisyNzApJTM2MCxzOnIucyxsOnIubH0pXX1mdW5jdGlvbiBfKHQpe3ZhciByPWUodCkudG9Ic2woKSxuPXIuaDtyZXR1cm5bZSh0KSxlKHtoOihuKzcyKSUzNjAsczpyLnMsbDpyLmx9KSxlKHtoOihuKzIxNiklMzYwLHM6ci5zLGw6ci5sfSldfWZ1bmN0aW9uIHcodCxyLG4pe3I9cnx8NixuPW58fDMwO3ZhciBpPWUodCkudG9Ic2woKSxhPTM2MC9uLG89W2UodCldO2ZvcihpLmg9KGkuaC0oYSpyPj4xKSs3MjApJTM2MDstLXI7KWkuaD0oaS5oK2EpJTM2MCxvLnB1c2goZShpKSk7cmV0dXJuIG99ZnVuY3Rpb24gTSh0LHIpe3I9cnx8Njtmb3IodmFyIG49ZSh0KS50b0hzdigpLGk9bi5oLGE9bi5zLG89bi52LHM9W10sbD0xL3I7ci0tOylzLnB1c2goZSh7aDppLHM6YSx2Om99KSksbz0obytsKSUxO3JldHVybiBzfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBrKHQsZSl7Uyh0KSYmKHQ9IjEwMCUiKTt2YXIgcj1MKHQpO3JldHVybiB0PVUoZSxWKDAscGFyc2VGbG9hdCh0KSkpLHImJih0PXBhcnNlSW50KHQqZSwxMCkvMTAwKSxOLmFicyh0LWUpPDFlLTY/MTp0JWUvcGFyc2VGbG9hdChlKX1mdW5jdGlvbiBBKHQpe3JldHVybiBVKDEsVigwLHQpKX1mdW5jdGlvbiBFKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiBTKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCIuIikhPS0xJiYxPT09cGFyc2VGbG9hdCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCIlIikhPS0xfWZ1bmN0aW9uIEModCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnBhcnNlRmxvYXQodCkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBQKHQpe3JldHVybiBFKHQpLzI1NX1mdW5jdGlvbiB6KHQpe3Q9dC5yZXBsYWNlKFIsIiIpLnJlcGxhY2UoRiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZT0hMTtpZihxW3RdKXQ9cVt0XSxlPSEwO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDoibmFtZSJ9O3ZhciByO3JldHVybihyPVkucmdiLmV4ZWModCkpP3tyOnJbMV0sZzpyWzJdLGI6clszXX06KHI9WS5yZ2JhLmV4ZWModCkpP3tyOnJbMV0sZzpyWzJdLGI6clszXSxhOnJbNF19OihyPVkuaHNsLmV4ZWModCkpP3toOnJbMV0sczpyWzJdLGw6clszXX06KHI9WS5oc2xhLmV4ZWModCkpP3toOnJbMV0sczpyWzJdLGw6clszXSxhOnJbNF19OihyPVkuaHN2LmV4ZWModCkpP3toOnJbMV0sczpyWzJdLHY6clszXX06KHI9WS5oc3ZhLmV4ZWModCkpP3toOnJbMV0sczpyWzJdLHY6clszXSxhOnJbNF19OihyPVkuaGV4OC5leGVjKHQpKT97YTpQKHJbMV0pLHI6RShyWzJdKSxnOkUoclszXSksYjpFKHJbNF0pLGZvcm1hdDplPyJuYW1lIjoiaGV4OCJ9OihyPVkuaGV4Ni5leGVjKHQpKT97cjpFKHJbMV0pLGc6RShyWzJdKSxiOkUoclszXSksZm9ybWF0OmU/Im5hbWUiOiJoZXgifTohIShyPVkuaGV4My5leGVjKHQpKSYme3I6RShyWzFdKyIiK3JbMV0pLGc6RShyWzJdKyIiK3JbMl0pLGI6RShyWzNdKyIiK3JbM10pLGZvcm1hdDplPyJuYW1lIjoiaGV4In19ZnVuY3Rpb24gTyh0KXt2YXIgZSxyO3JldHVybiB0PXR8fHtsZXZlbDoiQUEiLHNpemU6InNtYWxsIn0sZT0odC5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIiksInNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKSx7bGV2ZWw6ZSxzaXplOnJ9fXZhciBSPS9eXHMrLyxGPS9ccyskLyxqPTAsTj1NYXRoLEI9Ti5yb3VuZCxVPU4ubWluLFY9Ti5tYXgsSD1OLnJhbmRvbTtlLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXRoaXMudG9SZ2IoKTtyZXR1cm4gdD1vLnIvMjU1LGU9by5nLzI1NSxyPW8uYi8yNTUsbj10PD0uMDM5Mjg/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpLGk9ZTw9LjAzOTI4P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSxhPXI8PS4wMzkyOD9yLzEyLjkyOk1hdGgucG93KChyKy4wNTUpLzEuMDU1LDIuNCksLjIxMjYqbisuNzE1MippKy4wNzIyKmF9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPVQodCksdGhpcy5fcm91bmRBPUIoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PXModGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1zKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPUIoMzYwKnQuaCkscj1CKDEwMCp0LnMpLG49QigxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PWEodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1hKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPUIoMzYwKnQuaCkscj1CKDEwMCp0LnMpLG49QigxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbigpe3JldHVybiB1KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrdGhpcy50b0hleDgoKX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpCKHRoaXMuX3IpLGc6Qih0aGlzLl9nKSxiOkIodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrQih0aGlzLl9yKSsiLCAiK0IodGhpcy5fZykrIiwgIitCKHRoaXMuX2IpKyIpIjoicmdiYSgiK0IodGhpcy5fcikrIiwgIitCKHRoaXMuX2cpKyIsICIrQih0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOkIoMTAwKmsodGhpcy5fciwyNTUpKSsiJSIsZzpCKDEwMCprKHRoaXMuX2csMjU1KSkrIiUiLGI6QigxMDAqayh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrQigxMDAqayh0aGlzLl9yLDI1NSkpKyIlLCAiK0IoMTAwKmsodGhpcy5fZywyNTUpKSsiJSwgIitCKDEwMCprKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK0IoMTAwKmsodGhpcy5fciwyNTUpKSsiJSwgIitCKDEwMCprKHRoaXMuX2csMjU1KSkrIiUsICIrQigxMDAqayh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEdbYyh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciByPSIjIit1KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLG49cixpPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXtuPWUodCkudG9IZXg4U3RyaW5nKCl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK2krInN0YXJ0Q29sb3JzdHI9IityKyIsZW5kQ29sb3JzdHI9IituKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4OCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSwibmFtZSI9PT10JiYocj10aGlzLnRvTmFtZSgpKSwiaHNsIj09PXQmJihyPXRoaXMudG9Ic2xTdHJpbmcoKSksImhzdiI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6Im5hbWUiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihtLGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZixhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihoLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHksYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGIsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oeCxhcmd1bWVudHMpfX0sZS5mcm9tUmF0aW89ZnVuY3Rpb24odCxyKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPSJhIj09PWk/dFtpXTpJKHRbaV0pKTt0PW59cmV0dXJuIGUodCxyKX0sZS5lcXVhbHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKCF0fHwhcikmJmUodCkudG9SZ2JTdHJpbmcoKT09ZShyKS50b1JnYlN0cmluZygpfSxlLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBlLmZyb21SYXRpbyh7cjpIKCksZzpIKCksYjpIKCl9KX0sZS5taXg9ZnVuY3Rpb24odCxyLG4pe249MD09PW4/MDpufHw1MAo7dmFyIGksYT1lKHQpLnRvUmdiKCksbz1lKHIpLnRvUmdiKCkscz1uLzEwMCxsPTIqcy0xLGM9by5hLWEuYTtpPWwqYz09LTE/bDoobCtjKS8oMStsKmMpLGk9KGkrMSkvMjt2YXIgdT0xLWk7cmV0dXJuIGUoe3I6by5yKmkrYS5yKnUsZzpvLmcqaSthLmcqdSxiOm8uYippK2EuYip1LGE6by5hKnMrYS5hKigxLXMpfSl9LGUucmVhZGFiaWxpdHk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQpLGk9ZShyKTtyZXR1cm4oTWF0aC5tYXgobi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpLyhNYXRoLm1pbihuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGUuaXNSZWFkYWJsZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvPWUucmVhZGFiaWxpdHkodCxyKTtzd2l0Y2goYT0hMSxpPU8obiksaS5sZXZlbCtpLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6YT1vPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjphPW8+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6YT1vPj03fXJldHVybiBhfSxlLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvLHMsbD1udWxsLGM9MDtuPW58fHt9LGE9bi5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsbz1uLmxldmVsLHM9bi5zaXplO2Zvcih2YXIgdT0wO3U8ci5sZW5ndGg7dSsrKShpPWUucmVhZGFiaWxpdHkodCxyW3VdKSk+YyYmKGM9aSxsPWUoclt1XSkpO3JldHVybiBlLmlzUmVhZGFibGUodCxsLHtsZXZlbDpvLHNpemU6c30pfHwhYT9sOihuLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxlLm1vc3RSZWFkYWJsZSh0LFsiI2ZmZiIsIiMwMDAiXSxuKSl9O3ZhciBxPWUubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxHPWUuaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KHEpLFk9ZnVuY3Rpb24oKXt2YXIgdD0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIixlPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IixyPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IjtyZXR1cm57cmdiOm5ldyBSZWdFeHAoInJnYiIrZSkscmdiYTpuZXcgUmVnRXhwKCJyZ2JhIityKSxoc2w6bmV3IFJlZ0V4cCgiaHNsIitlKSxoc2xhOm5ldyBSZWdFeHAoImhzbGEiK3IpLGhzdjpuZXcgUmVnRXhwKCJoc3YiK2UpLGhzdmE6bmV3IFJlZ0V4cCgiaHN2YSIrciksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfX0oKTt2b2lkIDAhPT1yJiZyLmV4cG9ydHM/ci5leHBvcnRzPWU6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoZnVuY3Rpb24oKXtyZXR1cm4gZX0pOndpbmRvdy50aW55Y29sb3I9ZX0oKX0se31dLDU0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9byhnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiByWzBdKmEoclsxXSx0KX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBpPW4ociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLGl9ZnVuY3Rpb24gYSh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGkodCxlKTtjYXNlImVtIjpyZXR1cm4gbihlLCJmb250LXNpemUiKTtjYXNlInJlbSI6cmV0dXJuIG4oZG9jdW1lbnQuYm9keSwiZm9udC1zaXplIik7Y2FzZSJ2dyI6cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoLzEwMDtjYXNlInZoIjpyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0LzEwMDtjYXNlInZtaW4iOnJldHVybiBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlInZtYXgiOnJldHVybiBNYXRoLm1heCh3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlImluIjpyZXR1cm4gcztjYXNlImNtIjpyZXR1cm4gcy8yLjU0O2Nhc2UibW0iOnJldHVybiBzLzI1LjQ7Y2FzZSJwdCI6cmV0dXJuIHMvNzI7Y2FzZSJwYyI6cmV0dXJuIHMvNn1yZXR1cm4gMX12YXIgbz10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPWE7dmFyIHM9OTZ9LHsicGFyc2UtdW5pdCI6NDg0fV0sNTQ0OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLnRvcG9qc29uPWUudG9wb2pzb258fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3ZhciBuPWUuaWQsaT1lLmJib3gsYT1udWxsPT1lLnByb3BlcnRpZXM/e306ZS5wcm9wZXJ0aWVzLG89cih0LGUpO3JldHVybiBudWxsPT1uJiZudWxsPT1pP3t0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOmEsZ2VvbWV0cnk6b306bnVsbD09aT97dHlwZToiRmVhdHVyZSIsaWQ6bixwcm9wZXJ0aWVzOmEsZ2VvbWV0cnk6b306e3R5cGU6IkZlYXR1cmUiLGlkOm4sYmJveDppLHByb3BlcnRpZXM6YSxnZW9tZXRyeTpvfX1mdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1mW3Q8MD9+dDp0XSxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKWUucHVzaChjKHJbbl0uc2xpY2UoKSxuKSk7dDwwJiZ1KGUsaSl9ZnVuY3Rpb24gbih0KXtyZXR1cm4gYyh0LnNsaWNlKCkpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVtdLG49MCxpPXQubGVuZ3RoO248aTsrK24pcih0W25dLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPWkodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5tYXAoYSl9ZnVuY3Rpb24gcyh0KXt2YXIgZSxyPXQudHlwZTtzd2l0Y2gocil7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnJldHVybnt0eXBlOnIsZ2VvbWV0cmllczp0Lmdlb21ldHJpZXMubWFwKHMpfTtjYXNlIlBvaW50IjplPW4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjplPXQuY29vcmRpbmF0ZXMubWFwKG4pO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6ZT1pKHQuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmU9dC5hcmNzLm1hcChpKTticmVhaztjYXNlIlBvbHlnb24iOmU9byh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjplPXQuYXJjcy5tYXAobyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm57dHlwZTpyLGNvb3JkaW5hdGVzOmV9fXZhciBjPWwodCksZj10LmFyY3M7cmV0dXJuIHMoZSl9ZnVuY3Rpb24gbih0LGUscil7dmFyIG4sYSxvO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPWkodCxlLHIpO2Vsc2UgZm9yKGE9MCxuPW5ldyBBcnJheShvPXQuYXJjcy5sZW5ndGgpO2E8bzsrK2EpblthXT1hO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGFyY3M6aCh0LG4pfX1mdW5jdGlvbiBpKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXQ8MD9+dDp0Oyh1W2VdfHwodVtlXT1bXSkpLnB1c2goe2k6dCxnOmx9KX1mdW5jdGlvbiBpKHQpe3QuZm9yRWFjaChuKX1mdW5jdGlvbiBhKHQpe3QuZm9yRWFjaChpKX1mdW5jdGlvbiBvKHQpe3QuZm9yRWFjaChhKX1mdW5jdGlvbiBzKHQpe3N3aXRjaChsPXQsdC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2gocyk7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjppKHQuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6YSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpvKHQuYXJjcyl9fXZhciBsLGM9W10sdT1bXTtyZXR1cm4gcyhlKSx1LmZvckVhY2gobnVsbD09cj9mdW5jdGlvbih0KXtjLnB1c2godFswXS5pKX06ZnVuY3Rpb24odCl7cih0WzBdLmcsdFt0Lmxlbmd0aC0xXS5nKSYmYy5wdXNoKHRbMF0uaSl9KSxjfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlLHI9LTEsbj10Lmxlbmd0aCxpPXRbbi0xXSxhPTA7KytyPG47KWU9aSxpPXRbcl0sYSs9ZVswXSppWzFdLWVbMV0qaVswXTtyZXR1cm4gTWF0aC5hYnMoYSl9ZnVuY3Rpb24gbyh0LGUpe2Z1bmN0aW9uIG4odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKG4pO2JyZWFrO2Nhc2UiUG9seWdvbiI6aSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjp0LmFyY3MuZm9yRWFjaChpKX19ZnVuY3Rpb24gaSh0KXt0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhzW2U9ZTwwP35lOmVdfHwoc1tlXT1bXSkpLnB1c2godCl9KX0pLGwucHVzaCh0KX1mdW5jdGlvbiBvKGUpe3JldHVybiBhKHIodCx7dHlwZToiUG9seWdvbiIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9dmFyIHM9e30sbD1bXSxjPVtdO3JldHVybiBlLmZvckVhY2gobiksbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLHI9W3RdO2Zvcih0Ll89MSxjLnB1c2goZSk7dD1yLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtzW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLHIucHVzaCh0KSl9KX0pfSl9fSksbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZToiTXVsdGlQb2x5Z29uIixhcmNzOmMubWFwKGZ1bmN0aW9uKGUpe3ZhciByLG49W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7c1t0PDA/fnQ6dF0ubGVuZ3RoPDImJm4ucHVzaCh0KX0pfSl9KSxuPWgodCxuKSwocj1uLmxlbmd0aCk+MSlmb3IodmFyIGksYSxsPTEsYz1vKG5bMF0pO2w8cjsrK2wpKGk9byhuW2xdKSk+YyYmKGE9blswXSxuWzBdPW5bbF0sbltsXT1hLGM9aSk7cmV0dXJuIG59KX19dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGw9ZnVuY3Rpb24odCl7aWYobnVsbD09KGU9dC50cmFuc2Zvcm0pKXJldHVybiBzO3ZhciBlLHIsbixpPWUuc2NhbGVbMF0sYT1lLnNjYWxlWzFdLG89ZS50cmFuc2xhdGVbMF0sbD1lLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KHI9bj0wKSx0WzBdPShyKz10WzBdKSppK28sdFsxXT0obis9dFsxXSkqYStsLHR9fSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7c1swXT10WzBdLHNbMV09dFsxXSxvKHMpLHNbMF08YyYmKGM9c1swXSksc1swXT5mJiYoZj1zWzBdKSxzWzFdPHUmJih1PXNbMV0pLHNbMV0+aCYmKGg9c1sxXSl9ZnVuY3Rpb24gcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2gocik7YnJlYWs7Y2FzZSJQb2ludCI6ZSh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChlKX19dmFyIG49dC5iYm94O2lmKCFuKXt2YXIgaSxhLG89bCh0KSxzPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsZj0tYyxoPS1jO3QuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylpPXRbZV0sc1swXT1pWzBdLHNbMV09aVsxXSxvKHMsZSksc1swXTxjJiYoYz1zWzBdKSxzWzBdPmYmJihmPXNbMF0pLHNbMV08dSYmKHU9c1sxXSksc1sxXT5oJiYoaD1zWzFdKX0pO2ZvcihhIGluIHQub2JqZWN0cylyKHQub2JqZWN0c1thXSk7bj10LmJib3g9W2MsdSxmLGhdfXJldHVybiBufSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9LGY9ZnVuY3Rpb24odCxyKXtyZXR1cm4iR2VvbWV0cnlDb2xsZWN0aW9uIj09PXIudHlwZT97dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnIuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGUodCxyKX0pfTplKHQscil9LGg9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07cmV0dXJuIHQudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyWzBdKz10WzBdLHJbMV0rPXRbMV19KSk6cj1uW24ubGVuZ3RoLTFdLGU8MD9bcixpXTpbaSxyXX1mdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByIGluIHQpe3ZhciBuPXRbcl07ZGVsZXRlIGVbbi5zdGFydF0sZGVsZXRlIG4uc3RhcnQsZGVsZXRlIG4uZW5kLG4uZm9yRWFjaChmdW5jdGlvbih0KXtpW3Q8MD9+dDp0XT0xfSkscy5wdXNoKG4pfX12YXIgaT17fSxhPXt9LG89e30scz1bXSxsPS0xO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaSxhPXQuYXJjc1tyPDA/fnI6cl07YS5sZW5ndGg8MyYmIWFbMV1bMF0mJiFhWzFdWzFdJiYoaT1lWysrbF0sZVtsXT1yLGVbbl09aSl9KSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbixpPXIodCkscz1pWzBdLGw9aVsxXTtpZihlPW9bc10paWYoZGVsZXRlIG9bZS5lbmRdLGUucHVzaCh0KSxlLmVuZD1sLG49YVtsXSl7ZGVsZXRlIGFbbi5zdGFydF07dmFyIGM9bj09PWU/ZTplLmNvbmNhdChuKTthW2Muc3RhcnQ9ZS5zdGFydF09b1tjLmVuZD1uLmVuZF09Y31lbHNlIGFbZS5zdGFydF09b1tlLmVuZF09ZTtlbHNlIGlmKGU9YVtsXSlpZihkZWxldGUgYVtlLnN0YXJ0XSxlLnVuc2hpZnQodCksZS5zdGFydD1zLG49b1tzXSl7ZGVsZXRlIG9bbi5lbmRdO3ZhciB1PW49PT1lP2U6bi5jb25jYXQoZSk7YVt1LnN0YXJ0PW4uc3RhcnRdPW9bdS5lbmQ9ZS5lbmRdPXV9ZWxzZSBhW2Uuc3RhcnRdPW9bZS5lbmRdPWU7ZWxzZSBlPVt0XSxhW2Uuc3RhcnQ9c109b1tlLmVuZD1sXT1lfSksbihvLGEpLG4oYSxvKSxlLmZvckVhY2goZnVuY3Rpb24odCl7aVt0PDA/fnQ6dF18fHMucHVzaChbdF0pfSksc30sZD1mdW5jdGlvbih0KXtyZXR1cm4gcih0LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0scD1mdW5jdGlvbih0KXtyZXR1cm4gcih0LG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sbT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIHI9aVt0XTtyP3IucHVzaChlKTppW3RdPVtlXX0pfWZ1bmN0aW9uIHIodCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7ZSh0LHIpfSl9ZnVuY3Rpb24gbih0LGUpeyJHZW9tZXRyeUNvbGxlY3Rpb24iPT09dC50eXBlP3QuZ2VvbWV0cmllcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24odCxlKX0pOnQudHlwZSBpbiBvJiZvW3QudHlwZV0odC5hcmNzLGUpfXZhciBpPXt9LGE9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG89e0xpbmVTdHJpbmc6ZSxNdWx0aUxpbmVTdHJpbmc6cixQb2x5Z29uOnIsTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCxlKX0pfX07dC5mb3JFYWNoKG4pO2Zvcih2YXIgcyBpbiBpKWZvcih2YXIgbD1pW3NdLGM9bC5sZW5ndGgsdT0wO3U8YzsrK3UpZm9yKHZhciBmPXUrMTtmPGM7KytmKXt2YXIgaCxkPWxbdV0scD1sW2ZdOyhoPWFbZF0pW3M9bShoLHApXSE9PXAmJmguc3BsaWNlKHMsMCxwKSwoaD1hW3BdKVtzPW0oaCxkKV0hPT1kJiZoLnNwbGljZShzLDAsZCl9cmV0dXJuIGF9LGc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3RbMF09TWF0aC5yb3VuZCgodFswXS1vKS9zKSx0WzFdPU1hdGgucm91bmQoKHRbMV0tbCkvdSl9ZnVuY3Rpb24gbih0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2gobik7YnJlYWs7Y2FzZSJQb2ludCI6cih0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChyKX19aWYoISgoZT1NYXRoLmZsb29yKGUpKT49MikpdGhyb3cgbmV3IEVycm9yKCJuIG11c3QgYmUgXHUyMjY1MiIpO2lmKHQudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcigiYWxyZWFkeSBxdWFudGl6ZWQiKTt2YXIgaSxhPWModCksbz1hWzBdLHM9KGFbMl0tbykvKGUtMSl8fDEsbD1hWzFdLHU9KGFbM10tbCkvKGUtMSl8fDE7dC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPTEsYT0xLGM9dC5sZW5ndGgsZj10WzBdLGg9ZlswXT1NYXRoLnJvdW5kKChmWzBdLW8pL3MpLGQ9ZlsxXT1NYXRoLnJvdW5kKChmWzFdLWwpL3UpO2k8YzsrK2kpZj10W2ldLHI9TWF0aC5yb3VuZCgoZlswXS1vKS9zKSxuPU1hdGgucm91bmQoKGZbMV0tbCkvdSkscj09PWgmJm49PT1kfHwoZT10W2ErK10sZVswXT1yLWgsaD1yLGVbMV09bi1kLGQ9bik7YTwyJiYoZT10W2ErK10sZVswXT0wLGVbMV09MCksdC5sZW5ndGg9YX0pO2ZvcihpIGluIHQub2JqZWN0cyluKHQub2JqZWN0c1tpXSk7cmV0dXJuIHQudHJhbnNmb3JtPXtzY2FsZTpbcyx1XSx0cmFuc2xhdGU6W28sbF19LHR9LHk9ZnVuY3Rpb24odCl7aWYobnVsbD09KGU9dC50cmFuc2Zvcm0pKXJldHVybiBzO3ZhciBlLHIsbixpPWUuc2NhbGVbMF0sYT1lLnNjYWxlWzFdLG89ZS50cmFuc2xhdGVbMF0sbD1lLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtlfHwocj1uPTApO3ZhciBzPU1hdGgucm91bmQoKHRbMF0tbykvaSksYz1NYXRoLnJvdW5kKCh0WzFdLWwpL2EpO3JldHVybiB0WzBdPXMtcixyPXMsdFsxXT1jLW4sbj1jLHR9fTt0LmJib3g9Yyx0LmZlYXR1cmU9Zix0Lm1lc2g9ZCx0Lm1lc2hBcmNzPW4sdC5tZXJnZT1wLHQubWVyZ2VBcmNzPW8sdC5uZWlnaGJvcnM9dix0LnF1YW50aXplPWcsdC50cmFuc2Zvcm09bCx0LnVudHJhbnNmb3JtPXksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZih0PDApcmV0dXJuW107aWYoMD09PXQpcmV0dXJuW1swXV07Zm9yKHZhciBlPTB8TWF0aC5yb3VuZChvKHQrMSkpLHI9W10sbj0wO248ZTsrK24pe2Zvcih2YXIgcz1pLnVucmFuayh0LG4pLGw9WzBdLGM9MCx1PTA7dTxzLmxlbmd0aDsrK3UpYys9MTw8c1t1XSxsLnB1c2goYyk7YShzKTwxJiYobFswXT1jLGxbdF09MCksci5wdXNoKGwpfXJldHVybiByfWUuZXhwb3J0cz1uO3ZhciBpPXQoInBlcm11dGF0aW9uLXJhbmsiKSxhPXQoInBlcm11dGF0aW9uLXBhcml0eSIpLG89dCgiZ2FtbWEiKX0se2dhbW1hOjEzNiwicGVybXV0YXRpb24tcGFyaXR5Ijo0ODgsInBlcm11dGF0aW9uLXJhbmsiOjQ4OX1dLDU0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBpKHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBhKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAscz0wO3M8MzsrK3MpYSs9dFtzXSp0W3NdLG8rPWlbc10qdFtzXTtmb3IodmFyIHM9MDtzPDM7KytzKWlbc10tPW8vYSp0W3NdO3JldHVybiBoKGksaSksaX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhLG8scyl7dGhpcy5jZW50ZXI9bChyKSx0aGlzLnVwPWwobiksdGhpcy5yaWdodD1sKGkpLHRoaXMucmFkaXVzPWwoW2FdKSx0aGlzLmFuZ2xlPWwoW28sc10pLHRoaXMuYW5nbGUuYm91bmRzPVtbLSgxLzApLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfWZ1bmN0aW9uIHModCl7dD10fHx7fTt2YXIgZT10LmNlbnRlcnx8WzAsMCwwXSxyPXQudXB8fFswLDEsMF0saT10LnJpZ2h0fHxhKHIpLHM9dC5yYWRpdXN8fDEsbD10LnRoZXRhfHwwLGM9dC5waGl8fDA7aWYoZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDMpLGgocixyKSxpPVtdLnNsaWNlLmNhbGwoaSwwLDMpLGgoaSxpKSwiZXllImluIHQpe3ZhciB1PXQuZXllLHA9W3VbMF0tZVswXSx1WzFdLWVbMV0sdVsyXS1lWzJdXTtmKGkscCxyKSxuKGlbMF0saVsxXSxpWzJdKTwxZS02P2k9YShyKTpoKGksaSkscz1uKHBbMF0scFsxXSxwWzJdKTt2YXIgbT1kKHIscCkvcyx2PWQoaSxwKS9zO2M9TWF0aC5hY29zKG0pLGw9TWF0aC5hY29zKHYpfXJldHVybiBzPU1hdGgubG9nKHMpLG5ldyBvKHQuem9vbU1pbix0Lnpvb21NYXgsZSxyLGkscyxsLGMpfWUuZXhwb3J0cz1zO3ZhciBsPXQoImZpbHRlcmVkLXZlY3RvciIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSx1PXQoImdsLW1hdDQvcm90YXRlIiksZj10KCJnbC12ZWMzL2Nyb3NzIiksaD10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGQ9dCgiZ2wtdmVjMy9kb3QiKSxwPW8ucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotKDEvMCksZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LGk9MCxhPTAsbz0wO288MzsrK28pYSs9ZVtvXSpyW29dLGkrPWVbb10qZVtvXTtmb3IodmFyIHM9TWF0aC5zcXJ0KGkpLGw9MCxvPTA7bzwzOysrbylyW29dLT1lW29dKmEvaSxsKz1yW29dKnJbb10sZVtvXS89cztmb3IodmFyIGM9TWF0aC5zcXJ0KGwpLG89MDtvPDM7KytvKXJbb10vPWM7dmFyIHU9dGhpcy5jb21wdXRlZFRvd2FyZDtmKHUsZSxyKSxoKHUsdSk7Zm9yKHZhciBkPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHA9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLG09dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MocCksZz1NYXRoLnNpbihwKSx5PU1hdGguY29zKG0pLGI9TWF0aC5zaW4obSkseD10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9Zyp5LE09YixUPS12KmIsaz0tZypiLEE9eSxFPXRoaXMuY29tcHV0ZWRFeWUsUz10aGlzLmNvbXB1dGVkTWF0cml4LG89MDtvPDM7KytvKXt2YXIgTD1fKnJbb10rdyp1W29dK00qZVtvXTtTWzQqbysxXT1UKnJbb10rayp1W29dK0EqZVtvXSxTWzQqbysyXT1MLFNbNCpvKzNdPTB9dmFyIEM9U1sxXSxJPVNbNV0sRD1TWzldLFA9U1syXSx6PVNbNl0sTz1TWzEwXSxSPUkqTy1EKnosRj1EKlAtQypPLGo9Qyp6LUkqUCxOPW4oUixGLGopO1IvPU4sRi89TixqLz1OLFNbMF09UixTWzRdPUYsU1s4XT1qO2Zvcih2YXIgbz0wO288MzsrK28pRVtvXT14W29dK1NbMis0Km9dKmQ7Zm9yKHZhciBvPTA7bzwzOysrbyl7Zm9yKHZhciBsPTAsQj0wO0I8MzsrK0IpbCs9U1tvKzQqQl0qRVtCXTtTWzEyK29dPS1sfVNbMTVdPTF9LHAuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9O3ZhciBtPVswLDAsMF07cC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5hbmdsZS5tb3ZlKHQsZSxyKSxuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O21bMF09aVsyXSxtWzFdPWlbNl0sbVsyXT1pWzEwXTtmb3IodmFyIGE9dGhpcy5jb21wdXRlZFVwLG89dGhpcy5jb21wdXRlZFJpZ2h0LHM9dGhpcy5jb21wdXRlZFRvd2FyZCxsPTA7bDwzOysrbClpWzQqbF09YVtsXSxpWzQqbCsxXT1vW2xdLGlbNCpsKzJdPXNbbF07dShpLGksbixtKTtmb3IodmFyIGw9MDtsPDM7KytsKWFbbF09aVs0KmxdLG9bbF09aVs0KmwrMV07dGhpcy51cC5zZXQodCxhWzBdLGFbMV0sYVsyXSksdGhpcy5yaWdodC5zZXQodCxvWzBdLG9bMV0sb1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixpKXtlPWV8fDAscj1yfHwwLGk9aXx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LG89KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGFbMV0pLHM9YVs1XSxsPWFbOV0sYz1uKG8scyxsKTtvLz1jLHMvPWMsbC89Yzt2YXIgdT1hWzBdLGY9YVs0XSxoPWFbOF0sZD11Km8rZipzK2gqbDt1LT1vKmQsZi09cypkLGgtPWwqZDt2YXIgcD1uKHUsZixoKTt1Lz1wLGYvPXAsaC89cDt2YXIgbT11KmUrbypyLHY9ZiplK3MqcixnPWgqZStsKnI7dGhpcy5jZW50ZXIubW92ZSh0LG0sdixnKTt2YXIgeT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt5PU1hdGgubWF4KDFlLTQseStpKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyh5KSl9LHAudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LHAuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPTE7Im51bWJlciI9PXR5cGVvZiByJiYobz0wfHIpLChvPDB8fG8+MykmJihvPTEpO3ZhciBzPShvKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIGw9ZVtvXSx1PWVbbys0XSxmPWVbbys4XTtpZihhKXt2YXIgaD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKHUpLHA9TWF0aC5hYnMoZiksbT1NYXRoLm1heChoLGQscCk7aD09PW0/KGw9bDwwPy0xOjEsdT1mPTApOnA9PT1tPyhmPWY8MD8tMToxLGw9dT0wKToodT11PDA/LTE6MSxsPWY9MCl9ZWxzZXt2YXIgdj1uKGwsdSxmKTtsLz12LHUvPXYsZi89dn12YXIgZz1lW3NdLHk9ZVtzKzRdLGI9ZVtzKzhdLHg9ZypsK3kqdStiKmY7Zy09bCp4LHktPXUqeCxiLT1mKng7dmFyIF89bihnLHksYik7Zy89Xyx5Lz1fLGIvPV87dmFyIHc9dSpiLWYqeSxNPWYqZy1sKmIsVD1sKnktdSpnLGs9bih3LE0sVCk7dy89ayxNLz1rLFQvPWssdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LGwsdSxmKSx0aGlzLnJpZ2h0Lmp1bXAodCxnLHksYik7dmFyIEEsRTtpZigyPT09byl7dmFyIFM9ZVsxXSxMPWVbNV0sQz1lWzldLEk9UypnK0wqeStDKmIsRD1TKncrTCpNK0MqVDtBPVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMixFPU1hdGguYXRhbjIoRCxJKX1lbHNle3ZhciBQPWVbMl0sej1lWzZdLE89ZVsxMF0sUj1QKmwreip1K08qZixGPVAqZyt6KnkrTypiLGo9UCp3K3oqTStPKlQ7QT1NYXRoLmFzaW4oaShSKSksRT1NYXRoLmF0YW4yKGosRil9dGhpcy5hbmdsZS5qdW1wKHQsRSxBKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLEI9ZVs2XSxVPWVbMTBdLFY9dGhpcy5jb21wdXRlZE1hdHJpeDtjKFYsZSk7dmFyIEg9VlsxNV0scT1WWzEyXS9ILEc9VlsxM10vSCxZPVZbMTRdL0gsWD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQscS1OKlgsRy1CKlgsWS1VKlgpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixhPWF8fHRoaXMuY29tcHV0ZWRVcDt2YXIgbz1hWzBdLHM9YVsxXSxsPWFbMl0sYz1uKG8scyxsKTtpZighKGM8MWUtNikpe28vPWMscy89YyxsLz1jO3ZhciB1PWVbMF0tclswXSxmPWVbMV0tclsxXSxoPWVbMl0tclsyXSxkPW4odSxmLGgpO2lmKCEoZDwxZS02KSl7dS89ZCxmLz1kLGgvPWQ7dmFyIHA9dGhpcy5jb21wdXRlZFJpZ2h0LG09cFswXSx2PXBbMV0sZz1wWzJdLHk9byptK3MqditsKmc7bS09eSpvLHYtPXkqcyxnLT15Kmw7dmFyIGI9bihtLHYsZyk7aWYoIShiPC4wMSYmKG09cypoLWwqZix2PWwqdS1vKmgsZz1vKmYtcyp1LChiPW4obSx2LGcpKTwxZS02KSkpe20vPWIsdi89YixnLz1iLHRoaXMudXAuc2V0KHQsbyxzLGwpLHRoaXMucmlnaHQuc2V0KHQsbSx2LGcpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhkKSk7dmFyIHg9cypnLWwqdixfPWwqbS1vKmcsdz1vKnYtcyptLE09bih4LF8sdyk7eC89TSxfLz1NLHcvPU07dmFyIFQ9byp1K3MqZitsKmgsaz1tKnUrdipmK2cqaCxBPXgqdStfKmYrdypoLEU9TWF0aC5hc2luKGkoVCkpLFM9TWF0aC5hdGFuMihBLGspLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLEk9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEQ9TWF0aC5hYnMoQysyKk1hdGguUEktUyksUD1NYXRoLmFicyhDLVMpLHo9TWF0aC5hYnMoQy0yKk1hdGguUEktUyk7RDxQJiYoQys9MipNYXRoLlBJKSx6PFAmJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyxJKSx0aGlzLmFuZ2xlLnNldCh0LFMsRSl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6MTMzLCJnbC1tYXQ0L2ludmVydCI6MTg1LCJnbC1tYXQ0L3JvdGF0ZSI6MTg5LCJnbC12ZWMzL2Nyb3NzIjoyNzgsImdsLXZlYzMvZG90IjoyNzksImdsLXZlYzMvbm9ybWFsaXplIjoyODJ9XSw1NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dCplLGE9aSp0LG89YS10LHM9YS1vLGw9dC1zLGM9aSplLHU9Yy1lLGY9Yy11LGg9ZS1mLGQ9bi1zKmYscD1kLWwqZixtPXAtcypoLHY9bCpoLW07cmV0dXJuIHI/KHJbMF09dixyWzFdPW4scik6W3Ysbl19ZS5leHBvcnRzPW47dmFyIGk9KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDU0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj10K2UsaT1uLXQsYT1uLWksbz1lLWkscz10LWE7cmV0dXJuIHI/KHJbMF09cytvLHJbMV09bixyKTpbcytvLG5dfWUuZXhwb3J0cz1ufSx7fV0sNTQ5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPXkubG9nMihlKTt3W3JdLnB1c2godCl9fWZ1bmN0aW9uIGEodCl7aSh0LmJ1ZmZlcil9ZnVuY3Rpb24gbyh0KXt2YXIgdD15Lm5leHRQb3cyKHQpLGU9eS5sb2cyKHQpLHI9d1tlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBzKHQpe3JldHVybiBuZXcgVWludDhBcnJheShvKHQpLDAsdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KG8oMip0KSwwLHQpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiB1KHQpe3JldHVybiBuZXcgSW50OEFycmF5KG8odCksMCx0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBuZXcgSW50MTZBcnJheShvKDIqdCksMCx0KX1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgSW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG8oNCp0KSwwLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkobyg4KnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4geD9uZXcgVWludDhDbGFtcGVkQXJyYXkobyh0KSwwLHQpOnModCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IERhdGFWaWV3KG8odCksMCx0KX1mdW5jdGlvbiBnKHQpe3Q9eS5uZXh0UG93Mih0KTt2YXIgZT15LmxvZzIodCkscj1NW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IG4odCl9dmFyIHk9dCgiYml0LXR3aWRkbGUiKSxiPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODpiKFszMiwwXSksVUlOVDE2OmIoWzMyLDBdKSxVSU5UMzI6YihbMzIsMF0pLElOVDg6YihbMzIsMF0pLElOVDE2OmIoWzMyLDBdKSxJTlQzMjpiKFszMiwwXSksRkxPQVQ6YihbMzIsMF0pLERPVUJMRTpiKFszMiwwXSksREFUQTpiKFszMiwwXSksVUlOVDhDOmIoWzMyLDBdKSxCVUZGRVI6YihbMzIsMF0pfSk7dmFyIHg9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxfPWUuX19UWVBFREFSUkFZX1BPT0w7Xy5VSU5UOEN8fChfLlVJTlQ4Qz1iKFszMiwwXSkpLF8uQlVGRkVSfHwoXy5CVUZGRVI9YihbMzIsMF0pKTt2YXIgdz1fLkRBVEEsTT1fLkJVRkZFUjtyLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSlNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfHkubG9nMihlKTt3W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9YSxyLmZyZWVBcnJheUJ1ZmZlcj1pLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIG8odCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBzKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gbCh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIGModCk7Y2FzZSJpbnQ4IjpyZXR1cm4gdSh0KTtjYXNlImludDE2IjpyZXR1cm4gZih0KTtjYXNlImludDMyIjpyZXR1cm4gaCh0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBkKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBwKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIG0odCk7Y2FzZSJidWZmZXIiOnJldHVybiBnKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIHYodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1vLHIubWFsbG9jVWludDg9cyxyLm1hbGxvY1VpbnQxNj1sLHIubWFsbG9jVWludDMyPWMsci5tYWxsb2NJbnQ4PXUsci5tYWxsb2NJbnQxNj1mLHIubWFsbG9jSW50MzI9aCxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1kLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1wLHIubWFsbG9jVWludDhDbGFtcGVkPW0sci5tYWxsb2NEYXRhVmlldz12LHIubWFsbG9jQnVmZmVyPWcsci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpXy5VSU5UOFt0XS5sZW5ndGg9MCxfLlVJTlQxNlt0XS5sZW5ndGg9MCxfLlVJTlQzMlt0XS5sZW5ndGg9MCxfLklOVDhbdF0ubGVuZ3RoPTAsXy5JTlQxNlt0XS5sZW5ndGg9MCxfLklOVDMyW3RdLmxlbmd0aD0wLF8uRkxPQVRbdF0ubGVuZ3RoPTAsXy5ET1VCTEVbdF0ubGVuZ3RoPTAsXy5VSU5UOENbdF0ubGVuZ3RoPTAsd1t0XS5sZW5ndGg9MCxNW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYml0LXR3aWRkbGUiOjY4LGJ1ZmZlcjo3OCxkdXA6MTI1fV0sNTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9fSksaS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0saS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LHI9dGhpcy5yb290cztyW3RdIT09dDspdD1yW3RdO2Zvcig7cltlXSE9PXQ7KXt2YXIgbj1yW2VdO3JbZV09dCxlPW59cmV0dXJuIHR9LGkubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksaT10W29dLGUoaSxhKSl7aWYobz09PXIpe3IrKztjb250aW51ZX10W3IrK109aX1yZXR1cm4gdC5sZW5ndGg9cix0fWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT10WzBdLGE9MTthPHI7KythLGk9bilpZihpPW4sKG49dFthXSkhPT1pKXtpZihhPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1ufXJldHVybiB0Lmxlbmd0aD1lLHR9ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxuKHQsZSkpOihyfHx0LnNvcnQoKSxpKHQpKX1lLmV4cG9ydHM9YX0se31dLDU1MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5jeD0zKnQsdGhpcy5ieD0zKihyLXQpLXRoaXMuY3gsdGhpcy5heD0xLXRoaXMuY3gtdGhpcy5ieCx0aGlzLmN5PTMqZSx0aGlzLmJ5PTMqKG4tZSktdGhpcy5jeSx0aGlzLmF5PTEtdGhpcy5jeS10aGlzLmJ5LHRoaXMucDF4PXQsdGhpcy5wMXk9bix0aGlzLnAyeD1yLHRoaXMucDJ5PW59ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVYPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heCp0K3RoaXMuYngpKnQrdGhpcy5jeCkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVZPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heSp0K3RoaXMuYnkpKnQrdGhpcy5jeSkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWD1mdW5jdGlvbih0KXtyZXR1cm4oMyp0aGlzLmF4KnQrMip0aGlzLmJ4KSp0K3RoaXMuY3h9LG4ucHJvdG90eXBlLnNvbHZlQ3VydmVYPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MWUtNik7dmFyIHIsbixpLGEsbztmb3IoaT10LG89MDtvPDg7bysrKXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLXQsTWF0aC5hYnMoYSk8ZSlyZXR1cm4gaTt2YXIgcz10aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoaSk7aWYoTWF0aC5hYnMocyk8MWUtNilicmVhaztpLT1hL3N9aWYocj0wLG49MSwoaT10KTxyKXJldHVybiByO2lmKGk+bilyZXR1cm4gbjtmb3IoO3I8bjspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSksTWF0aC5hYnMoYS10KTxlKXJldHVybiBpO3Q+YT9yPWk6bj1pLGk9LjUqKG4tcikrcn1yZXR1cm4gaX0sbi5wcm90b3R5cGUuc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh0LGUpKX19LHt9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMucHJvdG9jb2w9bnVsbCx0aGlzLnNsYXNoZXM9bnVsbCx0aGlzLmF1dGg9bnVsbCx0aGlzLmhvc3Q9bnVsbCx0aGlzLnBvcnQ9bnVsbCx0aGlzLmhvc3RuYW1lPW51bGwsdGhpcy5oYXNoPW51bGwsdGhpcy5zZWFyY2g9bnVsbCx0aGlzLnF1ZXJ5PW51bGwsdGhpcy5wYXRobmFtZT1udWxsLHRoaXMucGF0aD1udWxsLHRoaXMuaHJlZj1udWxsfWZ1bmN0aW9uIGkodCxlLHIpe2lmKHQmJmMuaXNPYmplY3QodCkmJnQgaW5zdGFuY2VvZiBuKXJldHVybiB0O3ZhciBpPW5ldyBuO3JldHVybiBpLnBhcnNlKHQsZSxyKSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGMuaXNTdHJpbmcodCkmJih0PWkodCkpLHQgaW5zdGFuY2VvZiBuP3QuZm9ybWF0KCk6bi5wcm90b3R5cGUuZm9ybWF0LmNhbGwodCl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBpKHQsITEsITApLnJlc29sdmUoZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0P2kodCwhMSwhMCkucmVzb2x2ZU9iamVjdChlKTplfXZhciBsPXQoInB1bnljb2RlIiksYz10KCIuL3V0aWwiKTtyLnBhcnNlPWksci5yZXNvbHZlPW8sci5yZXNvbHZlT2JqZWN0PXMsci5mb3JtYXQ9YSxyLlVybD1uO3ZhciB1PS9eKFthLXowLTkuKy1dKzopL2ksZj0vOlswLTldKiQvLGg9L14oXC9cLz8oPyFcLylbXlw/XHNdKikoXD9bXlxzXSopPyQvLGQ9WyI8IiwiPiIsJyInLCJgIiwiICIsIlxyIiwiXG4iLCJcdCJdLHA9WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KGQpLG09WyInIl0uY29uY2F0KHApLHY9WyIlIiwiLyIsIj8iLCI7IiwiIyJdLmNvbmNhdChtKSxnPVsiLyIsIj8iLCIjIl0seT17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxiPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LHg9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSxfPXQoInF1ZXJ5c3RyaW5nIik7bi5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIpe2lmKCFjLmlzU3RyaW5nKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgdCk7dmFyIG49dC5pbmRleE9mKCI/IiksaT1uIT09LTEmJm48dC5pbmRleE9mKCIjIik/Ij8iOiIjIixhPXQuc3BsaXQoaSk7YVswXT1hWzBdLnJlcGxhY2UoL1xcL2csIi8iKSx0PWEuam9pbihpKTt2YXIgbz10O2lmKG89by50cmltKCksIXImJjE9PT10LnNwbGl0KCIjIikubGVuZ3RoKXt2YXIgcz1oLmV4ZWMobyk7aWYocylyZXR1cm4gdGhpcy5wYXRoPW8sdGhpcy5ocmVmPW8sdGhpcy5wYXRobmFtZT1zWzFdLHNbMl0/KHRoaXMuc2VhcmNoPXNbMl0sdGhpcy5xdWVyeT1lP18ucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOmUmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSx0aGlzfXZhciBmPXUuZXhlYyhvKTtpZihmKXtmPWZbMF07dmFyIGQ9Zi50b0xvd2VyQ2FzZSgpO3RoaXMucHJvdG9jb2w9ZCxvPW8uc3Vic3RyKGYubGVuZ3RoKX1pZihyfHxmfHxvLm1hdGNoKC9eXC9cL1teQFwvXStAW15AXC9dKy8pKXt2YXIgcD0iLy8iPT09by5zdWJzdHIoMCwyKTshcHx8ZiYmYltmXXx8KG89by5zdWJzdHIoMiksdGhpcy5zbGFzaGVzPSEwKX1pZighYltmXSYmKHB8fGYmJiF4W2ZdKSl7Zm9yKHZhciB3PS0xLE09MDtNPGcubGVuZ3RoO00rKyl7dmFyIFQ9by5pbmRleE9mKGdbTV0pO1QhPT0tMSYmKHc9PT0tMXx8VDx3KSYmKHc9VCl9dmFyIGssQTtBPXc9PT0tMT9vLmxhc3RJbmRleE9mKCJAIik6by5sYXN0SW5kZXhPZigiQCIsdyksQSE9PS0xJiYoaz1vLnNsaWNlKDAsQSksbz1vLnNsaWNlKEErMSksdGhpcy5hdXRoPWRlY29kZVVSSUNvbXBvbmVudChrKSksdz0tMTtmb3IodmFyIE09MDtNPHYubGVuZ3RoO00rKyl7dmFyIFQ9by5pbmRleE9mKHZbTV0pO1QhPT0tMSYmKHc9PT0tMXx8VDx3KSYmKHc9VCl9dz09PS0xJiYodz1vLmxlbmd0aCksdGhpcy5ob3N0PW8uc2xpY2UoMCx3KSxvPW8uc2xpY2UodyksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBFPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIUUpZm9yKHZhciBTPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksTT0wLEw9Uy5sZW5ndGg7TTxMO00rKyl7dmFyIEM9U1tNXTtpZihDJiYhQy5tYXRjaCgvXlsrYS16MC05QS1aXy1dezAsNjN9JC8pKXtmb3IodmFyIEk9IiIsRD0wLFA9Qy5sZW5ndGg7RDxQO0QrKylDLmNoYXJDb2RlQXQoRCk+MTI3P0krPSJ4IjpJKz1DW0RdO2lmKCFJLm1hdGNoKC9eWythLXowLTlBLVpfLV17MCw2M30kLykpe3ZhciB6PVMuc2xpY2UoMCxNKSxPPVMuc2xpY2UoTSsxKSxSPUMubWF0Y2goL14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvKTtSJiYoei5wdXNoKFJbMV0pLE8udW5zaGlmdChSWzJdKSksTy5sZW5ndGgmJihvPSIvIitPLmpvaW4oIi4iKStvKSx0aGlzLmhvc3RuYW1lPXouam9pbigiLiIpO2JyZWFrfX19dGhpcy5ob3N0bmFtZS5sZW5ndGg+MjU1P3RoaXMuaG9zdG5hbWU9IiI6dGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksRXx8KHRoaXMuaG9zdG5hbWU9bC50b0FTQ0lJKHRoaXMuaG9zdG5hbWUpKTt2YXIgRj10aGlzLnBvcnQ/IjoiK3RoaXMucG9ydDoiIixqPXRoaXMuaG9zdG5hbWV8fCIiO3RoaXMuaG9zdD1qK0YsdGhpcy5ocmVmKz10aGlzLmhvc3QsRSYmKHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS5zdWJzdHIoMSx0aGlzLmhvc3RuYW1lLmxlbmd0aC0yKSwiLyIhPT1vWzBdJiYobz0iLyIrbykpfWlmKCF5W2RdKWZvcih2YXIgTT0wLEw9bS5sZW5ndGg7TTxMO00rKyl7dmFyIE49bVtNXTtpZihvLmluZGV4T2YoTikhPT0tMSl7dmFyIEI9ZW5jb2RlVVJJQ29tcG9uZW50KE4pO0I9PT1OJiYoQj1lc2NhcGUoTikpLG89by5zcGxpdChOKS5qb2luKEIpfX12YXIgVT1vLmluZGV4T2YoIiMiKTtVIT09LTEmJih0aGlzLmhhc2g9by5zdWJzdHIoVSksbz1vLnNsaWNlKDAsVSkpO3ZhciBWPW8uaW5kZXhPZigiPyIpO2lmKFYhPT0tMT8odGhpcy5zZWFyY2g9by5zdWJzdHIoViksdGhpcy5xdWVyeT1vLnN1YnN0cihWKzEpLGUmJih0aGlzLnF1ZXJ5PV8ucGFyc2UodGhpcy5xdWVyeSkpLG89by5zbGljZSgwLFYpKTplJiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksbyYmKHRoaXMucGF0aG5hbWU9bykseFtkXSYmdGhpcy5ob3N0bmFtZSYmIXRoaXMucGF0aG5hbWUmJih0aGlzLnBhdGhuYW1lPSIvIiksdGhpcy5wYXRobmFtZXx8dGhpcy5zZWFyY2gpe3ZhciBGPXRoaXMucGF0aG5hbWV8fCIiLEg9dGhpcy5zZWFyY2h8fCIiO3RoaXMucGF0aD1GK0h9cmV0dXJuIHRoaXMuaHJlZj10aGlzLmZvcm1hdCgpLHRoaXN9LG4ucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYXV0aHx8IiI7dCYmKHQ9ZW5jb2RlVVJJQ29tcG9uZW50KHQpLHQ9dC5yZXBsYWNlKC8lM0EvaSwiOiIpLHQrPSJAIik7dmFyIGU9dGhpcy5wcm90b2NvbHx8IiIscj10aGlzLnBhdGhuYW1lfHwiIixuPXRoaXMuaGFzaHx8IiIsaT0hMSxhPSIiO3RoaXMuaG9zdD9pPXQrdGhpcy5ob3N0OnRoaXMuaG9zdG5hbWUmJihpPXQrKHRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpPT09LTE/dGhpcy5ob3N0bmFtZToiWyIrdGhpcy5ob3N0bmFtZSsiXSIpLHRoaXMucG9ydCYmKGkrPSI6Iit0aGlzLnBvcnQpKSx0aGlzLnF1ZXJ5JiZjLmlzT2JqZWN0KHRoaXMucXVlcnkpJiZPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgmJihhPV8uc3RyaW5naWZ5KHRoaXMucXVlcnkpKTt2YXIgbz10aGlzLnNlYXJjaHx8YSYmIj8iK2F8fCIiO3JldHVybiBlJiYiOiIhPT1lLnN1YnN0cigtMSkmJihlKz0iOiIpLHRoaXMuc2xhc2hlc3x8KCFlfHx4W2VdKSYmaSE9PSExPyhpPSIvLyIrKGl8fCIiKSxyJiYiLyIhPT1yLmNoYXJBdCgwKSYmKHI9Ii8iK3IpKTppfHwoaT0iIiksbiYmIiMiIT09bi5jaGFyQXQoMCkmJihuPSIjIituKSxvJiYiPyIhPT1vLmNoYXJBdCgwKSYmKG89Ij8iK28pLHI9ci5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KX0pLG89by5yZXBsYWNlKCIjIiwiJTIzIiksZStpK3IrbytufSxuLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc29sdmVPYmplY3QoaSh0LCExLCEwKSkuZm9ybWF0KCl9LG4ucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24odCl7aWYoYy5pc1N0cmluZyh0KSl7dmFyIGU9bmV3IG47ZS5wYXJzZSh0LCExLCEwKSx0PWV9Zm9yKHZhciByPW5ldyBuLGk9T2JqZWN0LmtleXModGhpcyksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO3Jbb109dGhpc1tvXX1pZihyLmhhc2g9dC5oYXNoLCIiPT09dC5ocmVmKXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyO2lmKHQuc2xhc2hlcyYmIXQucHJvdG9jb2wpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0KSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07InByb3RvY29sIiE9PXUmJihyW3VdPXRbdV0pfXJldHVybiB4W3IucHJvdG9jb2xdJiZyLmhvc3RuYW1lJiYhci5wYXRobmFtZSYmKHIucGF0aD1yLnBhdGhuYW1lPSIvIiksci5ocmVmPXIuZm9ybWF0KCkscn1pZih0LnByb3RvY29sJiZ0LnByb3RvY29sIT09ci5wcm90b2NvbCl7aWYoIXhbdC5wcm90b2NvbF0pe2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07cltkXT10W2RdfXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHIucHJvdG9jb2w9dC5wcm90b2NvbCx0Lmhvc3R8fGJbdC5wcm90b2NvbF0pci5wYXRobmFtZT10LnBhdGhuYW1lO2Vsc2V7Zm9yKHZhciBwPSh0LnBhdGhuYW1lfHwiIikuc3BsaXQoIi8iKTtwLmxlbmd0aCYmISh0Lmhvc3Q9cC5zaGlmdCgpKTspO3QuaG9zdHx8KHQuaG9zdD0iIiksdC5ob3N0bmFtZXx8KHQuaG9zdG5hbWU9IiIpLCIiIT09cFswXSYmcC51bnNoaWZ0KCIiKSxwLmxlbmd0aDwyJiZwLnVuc2hpZnQoIiIpLHIucGF0aG5hbWU9cC5qb2luKCIvIil9aWYoci5zZWFyY2g9dC5zZWFyY2gsci5xdWVyeT10LnF1ZXJ5LHIuaG9zdD10Lmhvc3R8fCIiLHIuYXV0aD10LmF1dGgsci5ob3N0bmFtZT10Lmhvc3RuYW1lfHx0Lmhvc3Qsci5wb3J0PXQucG9ydCxyLnBhdGhuYW1lfHxyLnNlYXJjaCl7dmFyIG09ci5wYXRobmFtZXx8IiIsdj1yLnNlYXJjaHx8IiI7ci5wYXRoPW0rdn1yZXR1cm4gci5zbGFzaGVzPXIuc2xhc2hlc3x8dC5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9dmFyIGc9ci5wYXRobmFtZSYmIi8iPT09ci5wYXRobmFtZS5jaGFyQXQoMCkseT10Lmhvc3R8fHQucGF0aG5hbWUmJiIvIj09PXQucGF0aG5hbWUuY2hhckF0KDApLF89eXx8Z3x8ci5ob3N0JiZ0LnBhdGhuYW1lLHc9XyxNPXIucGF0aG5hbWUmJnIucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10scD10LnBhdGhuYW1lJiZ0LnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLFQ9ci5wcm90b2NvbCYmIXhbci5wcm90b2NvbF07aWYoVCYmKHIuaG9zdG5hbWU9IiIsci5wb3J0PW51bGwsci5ob3N0JiYoIiI9PT1NWzBdP01bMF09ci5ob3N0Ok0udW5zaGlmdChyLmhvc3QpKSxyLmhvc3Q9IiIsdC5wcm90b2NvbCYmKHQuaG9zdG5hbWU9bnVsbCx0LnBvcnQ9bnVsbCx0Lmhvc3QmJigiIj09PXBbMF0/cFswXT10Lmhvc3Q6cC51bnNoaWZ0KHQuaG9zdCkpLHQuaG9zdD1udWxsKSxfPV8mJigiIj09PXBbMF18fCIiPT09TVswXSkpLHkpci5ob3N0PXQuaG9zdHx8IiI9PT10Lmhvc3Q/dC5ob3N0OnIuaG9zdCxyLmhvc3RuYW1lPXQuaG9zdG5hbWV8fCIiPT09dC5ob3N0bmFtZT90Lmhvc3RuYW1lOnIuaG9zdG5hbWUsci5zZWFyY2g9dC5zZWFyY2gsci5xdWVyeT10LnF1ZXJ5LE09cDtlbHNlIGlmKHAubGVuZ3RoKU18fChNPVtdKSxNLnBvcCgpLE09TS5jb25jYXQocCksci5zZWFyY2g9dC5zZWFyY2gsci5xdWVyeT10LnF1ZXJ5O2Vsc2UgaWYoIWMuaXNOdWxsT3JVbmRlZmluZWQodC5zZWFyY2gpKXtpZihUKXtyLmhvc3RuYW1lPXIuaG9zdD1NLnNoaWZ0KCk7dmFyIGs9ISEoci5ob3N0JiZyLmhvc3QuaW5kZXhPZigiQCIpPjApJiZyLmhvc3Quc3BsaXQoIkAiKTtrJiYoci5hdXRoPWsuc2hpZnQoKSxyLmhvc3Q9ci5ob3N0bmFtZT1rLnNoaWZ0KCkpfXJldHVybiByLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksYy5pc051bGwoci5wYXRobmFtZSkmJmMuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmhyZWY9ci5mb3JtYXQoKSxyfWlmKCFNLmxlbmd0aClyZXR1cm4gci5wYXRobmFtZT1udWxsLHIuc2VhcmNoP3IucGF0aD0iLyIrci5zZWFyY2g6ci5wYXRoPW51bGwsci5ocmVmPXIuZm9ybWF0KCkscjtmb3IodmFyIEE9TS5zbGljZSgtMSlbMF0sRT0oci5ob3N0fHx0Lmhvc3R8fE0ubGVuZ3RoPjEpJiYoIi4iPT09QXx8Ii4uIj09PUEpfHwiIj09PUEsUz0wLEw9TS5sZW5ndGg7TD49MDtMLS0pQT1NW0xdLCIuIj09PUE/TS5zcGxpY2UoTCwxKToiLi4iPT09QT8oTS5zcGxpY2UoTCwxKSxTKyspOlMmJihNLnNwbGljZShMLDEpLFMtLSk7aWYoIV8mJiF3KWZvcig7Uy0tO1MpTS51bnNoaWZ0KCIuLiIpOyFffHwiIj09PU1bMF18fE1bMF0mJiIvIj09PU1bMF0uY2hhckF0KDApfHxNLnVuc2hpZnQoIiIpLEUmJiIvIiE9PU0uam9pbigiLyIpLnN1YnN0cigtMSkmJk0ucHVzaCgiIik7dmFyIEM9IiI9PT1NWzBdfHxNWzBdJiYiLyI9PT1NWzBdLmNoYXJBdCgwKTtpZihUKXtyLmhvc3RuYW1lPXIuaG9zdD1DPyIiOk0ubGVuZ3RoP00uc2hpZnQoKToiIjt2YXIgaz0hIShyLmhvc3QmJnIuaG9zdC5pbmRleE9mKCJAIik+MCkmJnIuaG9zdC5zcGxpdCgiQCIpO2smJihyLmF1dGg9ay5zaGlmdCgpLHIuaG9zdD1yLmhvc3RuYW1lPWsuc2hpZnQoKSl9cmV0dXJuIF89X3x8ci5ob3N0JiZNLmxlbmd0aCxfJiYhQyYmTS51bnNoaWZ0KCIiKSxNLmxlbmd0aD9yLnBhdGhuYW1lPU0uam9pbigiLyIpOihyLnBhdGhuYW1lPW51bGwsci5wYXRoPW51bGwpLGMuaXNOdWxsKHIucGF0aG5hbWUpJiZjLmlzTnVsbChyLnNlYXJjaCl8fChyLnBhdGg9KHIucGF0aG5hbWU/ci5wYXRobmFtZToiIikrKHIuc2VhcmNoP3Iuc2VhcmNoOiIiKSksci5hdXRoPXQuYXV0aHx8ci5hdXRoLHIuc2xhc2hlcz1yLnNsYXNoZXN8fHQuc2xhc2hlcyxyLmhyZWY9ci5mb3JtYXQoKSxyfSxuLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhvc3QsZT1mLmV4ZWModCk7ZSYmKGU9ZVswXSwiOiIhPT1lJiYodGhpcy5wb3J0PWUuc3Vic3RyKDEpKSx0PXQuc3Vic3RyKDAsdC5sZW5ndGgtZS5sZW5ndGgpKSx0JiYodGhpcy5ob3N0bmFtZT10KX19LHsiLi91dGlsIjo1NTQscHVueWNvZGU6NDk3LHF1ZXJ5c3RyaW5nOjUwMX1dLDU1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2lzU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdH0saXNPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH0saXNOdWxsOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dH0saXNOdWxsT3JVbmRlZmluZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9fX0se31dLDU1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsKcmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDU1NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkodCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOm99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLG0oZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSksXyhuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSxfKG4uZGVwdGgpJiYobi5kZXB0aD0yKSxfKG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSxfKG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWEpLGwobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pLnN0eWxlc1tlXTtyZXR1cm4gcj8iXHgxYlsiK2kuY29sb3JzW3JdWzBdKyJtIit0KyJceDFiWyIraS5jb2xvcnNbcl1bMV0rIm0iOnR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSxlfWZ1bmN0aW9uIGwodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmQShlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIGIoaSl8fChpPWwodCxpLG4pKSxpfXZhciBhPWModCxlKTtpZihhKXJldHVybiBhO3ZhciBvPU9iamVjdC5rZXlzKGUpLG09cyhvKTtpZih0LnNob3dIaWRkZW4mJihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxrKGUpJiYoby5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG8uaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIHUoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihBKGUpKXt2YXIgdj1lLm5hbWU/IjogIitlLm5hbWU6IiI7cmV0dXJuIHQuc3R5bGl6ZSgiW0Z1bmN0aW9uIit2KyJdIiwic3BlY2lhbCIpfWlmKHcoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpO2lmKFQoZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJkYXRlIik7aWYoayhlKSlyZXR1cm4gdShlKX12YXIgZz0iIix5PSExLHg9WyJ7IiwifSJdO2lmKHAoZSkmJih5PSEwLHg9WyJbIiwiXSJdKSxBKGUpKXtnPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSJ9aWYodyhlKSYmKGc9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksVChlKSYmKGc9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLGsoZSkmJihnPSIgIit1KGUpKSwwPT09by5sZW5ndGgmJigheXx8MD09ZS5sZW5ndGgpKXJldHVybiB4WzBdK2creFsxXTtpZihuPDApcmV0dXJuIHcoZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTt0LnNlZW4ucHVzaChlKTt2YXIgXztyZXR1cm4gXz15P2YodCxlLG4sbSxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gaCh0LGUsbixtLHIseSl9KSx0LnNlZW4ucG9wKCksZChfLGcseCl9ZnVuY3Rpb24gYyh0LGUpe2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoYihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1yZXR1cm4geShlKT90LnN0eWxpemUoIiIrZSwibnVtYmVyIik6bShlKT90LnN0eWxpemUoIiIrZSwiYm9vbGVhbiIpOnYoZSk/dC5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH1mdW5jdGlvbiB1KHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gZih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKUkoZSxTdHJpbmcobykpP2EucHVzaChoKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fGEucHVzaChoKHQsZSxyLG4saSwhMCkpfSksYX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzLGM7aWYoYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSxjLmdldD9zPWMuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6Yy5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEkobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YoYy52YWx1ZSk8MD8ocz12KHIpP2wodCxjLnZhbHVlLG51bGwpOmwodCxjLnZhbHVlLHItMSkscy5pbmRleE9mKCJcbiIpPi0xJiYocz1hP3Muc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pLmpvaW4oIlxuIikpKTpzPXQuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksXyhvKSl7aWYoYSYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gcztvPUpTT04uc3RyaW5naWZ5KCIiK2kpLG8ubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sIm5hbWUiKSk6KG89by5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksbz10LnN0eWxpemUobywic3RyaW5nIikpfXJldHVybiBvKyI6ICIrc31mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj0wO3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKCJcbiIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9yWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTpyWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX1mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTSh0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1TKHQpfWZ1bmN0aW9uIE0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBUKHQpe3JldHVybiBNKHQpJiYiW29iamVjdCBEYXRlXSI9PT1TKHQpfWZ1bmN0aW9uIGsodCl7cmV0dXJuIE0odCkmJigiW29iamVjdCBFcnJvcl0iPT09Uyh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBBKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIEUodCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fWZ1bmN0aW9uIFModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBDKCl7dmFyIHQ9bmV3IERhdGUsZT1bTCh0LmdldEhvdXJzKCkpLEwodC5nZXRNaW51dGVzKCkpLEwodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3QuZ2V0RGF0ZSgpLHpbdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIil9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1yLmZvcm1hdD1mdW5jdGlvbih0KXtpZighYih0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChpKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1mb3IodmFyIHI9MSxuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoLyVbc2RqJV0vZyxmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSkscz1uW3JdO3I8YTtzPW5bKytyXSl2KHMpfHwhTShzKT9vKz0iICIrczpvKz0iICIraShzKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBhKCl7aWYoIW8pe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxvPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihfKG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZihlLm5vRGVwcmVjYXRpb249PT0hMClyZXR1cm4gdDt2YXIgbz0hMTtyZXR1cm4gYX07dmFyIEQsUD17fTtyLmRlYnVnbG9nPWZ1bmN0aW9uKHQpe2lmKF8oRCkmJihEPWUuZW52Lk5PREVfREVCVUd8fCIiKSx0PXQudG9VcHBlckNhc2UoKSwhUFt0XSlpZihuZXcgUmVnRXhwKCJcXGIiK3QrIlxcYiIsImkiKS50ZXN0KEQpKXt2YXIgbj1lLnBpZDtQW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsdCxuLGUpfX1lbHNlIFBbdF09ZnVuY3Rpb24oKXt9O3JldHVybiBQW3RdfSxyLmluc3BlY3Q9aSxpLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0saS5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxyLmlzQXJyYXk9cCxyLmlzQm9vbGVhbj1tLHIuaXNOdWxsPXYsci5pc051bGxPclVuZGVmaW5lZD1nLHIuaXNOdW1iZXI9eSxyLmlzU3RyaW5nPWIsci5pc1N5bWJvbD14LHIuaXNVbmRlZmluZWQ9XyxyLmlzUmVnRXhwPXcsci5pc09iamVjdD1NLHIuaXNEYXRlPVQsci5pc0Vycm9yPWssci5pc0Z1bmN0aW9uPUEsci5pc1ByaW1pdGl2ZT1FLHIuaXNCdWZmZXI9dCgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIHo9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtyLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKCIlcyAtICVzIixDKCksci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpKX0sci5pbmhlcml0cz10KCJpbmhlcml0cyIpLHIuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2lmKCFlfHwhTShlKSlyZXR1cm4gdDtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj1yLmxlbmd0aDtuLS07KXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3N1cHBvcnQvaXNCdWZmZXIiOjU1NSxfcHJvY2Vzczo0OTYsaW5oZXJpdHM6Mjk3fV0sNTU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzLlZlY3RvclRpbGU9dCgiLi9saWIvdmVjdG9ydGlsZS5qcyIpLGUuZXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZT10KCIuL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcyIpLGUuZXhwb3J0cy5WZWN0b3JUaWxlTGF5ZXI9dCgiLi9saWIvdmVjdG9ydGlsZWxheWVyLmpzIil9LHsiLi9saWIvdmVjdG9ydGlsZS5qcyI6NTU4LCIuL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcyI6NTU5LCIuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMiOjU2MH1dLDU1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKGkse30sZSl9ZnVuY3Rpb24gaSh0LGUscil7aWYoMz09PXQpe3ZhciBuPW5ldyBhKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX12YXIgYT10KCIuL3ZlY3RvcnRpbGVsYXllciIpO2UuZXhwb3J0cz1ufSx7Ii4vdmVjdG9ydGlsZWxheWVyIjo1NjB9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9YSx0LnJlYWRGaWVsZHMoaSx0aGlzLGUpfWZ1bmN0aW9uIGkodCxlLHIpezE9PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT10P2EocixlKTozPT10P2UudHlwZT1yLnJlYWRWYXJpbnQoKTo0PT10JiYoZS5fZ2VvbWV0cnk9ci5wb3MpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19ZnVuY3Rpb24gbyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD0xKXJldHVyblt0XTtmb3IodmFyIHIsbixpPVtdLGE9MDthPGU7YSsrKXt2YXIgbz1zKHRbYV0pOzAhPT1vJiYodm9pZCAwPT09biYmKG49bzwwKSxuPT09bzwwPyhyJiZpLnB1c2gocikscj1bdFthXV0pOnIucHVzaCh0W2FdKSl9cmV0dXJuIHImJmkucHVzaChyKSxpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlLHIsbj0wLGk9MCxhPXQubGVuZ3RoLG89YS0xO2k8YTtvPWkrKyllPXRbaV0scj10W29dLG4rPShyLngtZS54KSooZS55K3IueSk7cmV0dXJuIG59dmFyIGw9dCgicG9pbnQtZ2VvbWV0cnkiKTtlLmV4cG9ydHM9bixuLnR5cGVzPVsiVW5rbm93biIsIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXSxuLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlLHI9dC5yZWFkVmFyaW50KCkrdC5wb3Msbj0xLGk9MCxhPTAsbz0wLHM9W107dC5wb3M8cjspe2lmKCFpKXt2YXIgYz10LnJlYWRWYXJpbnQoKTtuPTcmYyxpPWM+PjN9aWYoaS0tLDE9PT1ufHwyPT09bilhKz10LnJlYWRTVmFyaW50KCksbys9dC5yZWFkU1ZhcmludCgpLDE9PT1uJiYoZSYmcy5wdXNoKGUpLGU9W10pLGUucHVzaChuZXcgbChhLG8pKTtlbHNle2lmKDchPT1uKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrbik7ZSYmZS5wdXNoKGVbMF0uY2xvbmUoKSl9fXJldHVybiBlJiZzLnB1c2goZSksc30sbi5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGU9dC5yZWFkVmFyaW50KCkrdC5wb3Mscj0xLG49MCxpPTAsYT0wLG89MS8wLHM9LSgxLzApLGw9MS8wLGM9LSgxLzApO3QucG9zPGU7KXtpZighbil7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpaSs9dC5yZWFkU1ZhcmludCgpLGErPXQucmVhZFNWYXJpbnQoKSxpPG8mJihvPWkpLGk+cyYmKHM9aSksYTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LG4ucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXSxuPTE4MC0zNjAqKHIueSt1KS9sO3RbZV09WzM2MCooci54K2MpL2wtMTgwLDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChuKk1hdGguUEkvMTgwKSktOTBdfX12YXIgYSxzLGw9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxjPXRoaXMuZXh0ZW50KnQsdT10aGlzLmV4dGVudCplLGY9dGhpcy5sb2FkR2VvbWV0cnkoKSxoPW4udHlwZXNbdGhpcy50eXBlXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlIDE6dmFyIGQ9W107Zm9yKGE9MDthPGYubGVuZ3RoO2ErKylkW2FdPWZbYV1bMF07Zj1kLGkoZik7YnJlYWs7Y2FzZSAyOmZvcihhPTA7YTxmLmxlbmd0aDthKyspaShmW2FdKTticmVhaztjYXNlIDM6Zm9yKGY9byhmKSxhPTA7YTxmLmxlbmd0aDthKyspZm9yKHM9MDtzPGZbYV0ubGVuZ3RoO3MrKylpKGZbYV1bc10pfTE9PT1mLmxlbmd0aD9mPWZbMF06aD0iTXVsdGkiK2g7dmFyIHA9e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOmgsY29vcmRpbmF0ZXM6Zn0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVybiJpZCJpbiB0aGlzJiYocC5pZD10aGlzLmlkKSxwfX0seyJwb2ludC1nZW9tZXRyeSI6NDkzfV0sNTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnZlcnNpb249MSx0aGlzLm5hbWU9bnVsbCx0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKGksdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gaSh0LGUscil7MTU9PT10P2UudmVyc2lvbj1yLnJlYWRWYXJpbnQoKToxPT09dD9lLm5hbWU9ci5yZWFkU3RyaW5nKCk6NT09PXQ/ZS5leHRlbnQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5fZmVhdHVyZXMucHVzaChyLnBvcyk6Mz09PXQ/ZS5fa2V5cy5wdXNoKHIucmVhZFN0cmluZygpKTo0PT09dCYmZS5fdmFsdWVzLnB1c2goYShyKSl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bnVsbCxyPXQucmVhZFZhcmludCgpK3QucG9zO3QucG9zPHI7KXt2YXIgbj10LnJlYWRWYXJpbnQoKT4+MztlPTE9PT1uP3QucmVhZFN0cmluZygpOjI9PT1uP3QucmVhZEZsb2F0KCk6Mz09PW4/dC5yZWFkRG91YmxlKCk6ND09PW4/dC5yZWFkVmFyaW50NjQoKTo1PT09bj90LnJlYWRWYXJpbnQoKTo2PT09bj90LnJlYWRTVmFyaW50KCk6Nz09PW4/dC5yZWFkQm9vbGVhbigpOm51bGx9cmV0dXJuIGV9dmFyIG89dCgiLi92ZWN0b3J0aWxlZmVhdHVyZS5qcyIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLl9mZWF0dXJlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IG8odGhpcy5fcGJmLGUsdGhpcy5leHRlbnQsdGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMpfX0seyIuL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIjo1NTl9XSw1NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fChlPXt9KSxpKHQsZS5jYW52YXN8fGEsZS5jb250ZXh0fHxvLGUpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4vbGliL3Z0ZXh0IiksYT1udWxsLG89bnVsbDsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhLndpZHRoPTgxOTIsYS5oZWlnaHQ9MTAyNCxvPWEuZ2V0Q29udGV4dCgiMmQiKSl9LHsiLi9saWIvdnRleHQiOjU2Mn1dLDU2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fCJzdGFydCIsaT1lLnRleHRCYXNlbGluZXx8ImFscGhhYmV0aWMiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGY9MDtzd2l0Y2gobil7Y2FzZSJjZW50ZXIiOmY9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpmPS1vWzBdO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6Zj0tYVswXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICciK24rIiciKX12YXIgaD0wO3N3aXRjaChpKXtjYXNlImhhbmdpbmciOmNhc2UidG9wIjpoPS1hWzFdO2JyZWFrO2Nhc2UibWlkZGxlIjpoPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlImFscGhhYmV0aWMiOmNhc2UiaWRlb2dyYXBoaWMiOmg9LTMqcjticmVhaztjYXNlImJvdHRvbSI6aD0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnIitpKyInIil9dmFyIGQ9MS9yO3JldHVybiJsaW5lSGVpZ2h0ImluIGU/ZCo9K2UubGluZUhlaWdodDoid2lkdGgiaW4gZT9kPWUud2lkdGgvKG9bMF0tYVswXSk6ImhlaWdodCJpbiBlJiYoZD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW2QqKHRbMF0rZiksZCoodFsxXStoKV19KX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPTB8TWF0aC5jZWlsKGUubWVhc3VyZVRleHQocikud2lkdGgrMipuKTtpZihpPjgxOTIpdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3JpemUtdGV4dDogU3RyaW5nIHRvbyBsb25nIChzb3JyeSwgdGhpcyB3aWxsIGdldCBmaXhlZCBsYXRlcikiKTt2YXIgYT0zKm47dC5oZWlnaHQ8YSYmKHQuaGVpZ2h0PWEpLGUuZmlsbFN0eWxlPSIjMDAwIixlLmZpbGxSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlLmZpbGxTdHlsZT0iI2ZmZiIsZS5maWxsVGV4dChyLG4sMipuKTt2YXIgbz1lLmdldEltYWdlRGF0YSgwLDAsaSxhKTtyZXR1cm4gdShvLmRhdGEsW2EsaSw0XSkucGljaygtMSwtMSwwKS50cmFuc3Bvc2UoMSwwKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9Yyh0LDEyOCk7cmV0dXJuIGU/ZihyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiBvKHQsZSxyLGkpe3ZhciBvPWEodCxpKSxzPW4oby5wb3NpdGlvbnMsZSxyKSxsPW8uZWRnZXMsYz0iY2N3Ij09PWUub3JpZW50YXRpb247aWYoaChzLGwpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciB1PXAobCxzKSxmPW5ldyBBcnJheSh1Lmxlbmd0aCksbT0wO208dS5sZW5ndGg7KyttKXtmb3IodmFyIHY9dVttXSxnPW5ldyBBcnJheSh2Lmxlbmd0aCkseT0wO3k8di5sZW5ndGg7Kyt5KXtmb3IodmFyIGI9dlt5XSx4PW5ldyBBcnJheShiLmxlbmd0aCksXz0wO188Yi5sZW5ndGg7KytfKXhbX109c1tiW19dXS5zbGljZSgpO2MmJngucmV2ZXJzZSgpLGdbeV09eH1mW21dPWd9cmV0dXJuIGZ9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpkKHMsbCx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6c306e2VkZ2VzOmwscG9zaXRpb25zOnN9fWZ1bmN0aW9uIHModCxlLHIpe3RyeXtyZXR1cm4gbyh0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gbyh0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1uLnNpemV8fDY0LG89bi5mb250fHwibm9ybWFsIjtyZXR1cm4gci5mb250PWErInB4ICIrbyxyLnRleHRBbGlnbj0ic3RhcnQiLHIudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixyLmRpcmVjdGlvbj0ibHRyIixzKGkoZSxyLHQsYSksbixhKX1lLmV4cG9ydHM9bCxlLmV4cG9ydHMucHJvY2Vzc1BpeGVscz1zO3ZhciBjPXQoInN1cmZhY2UtbmV0cyIpLHU9dCgibmRhcnJheSIpLGY9dCgic2ltcGxpZnktcGxhbmFyLWdyYXBoIiksaD10KCJjbGVhbi1wc2xnIiksZD10KCJjZHQyZCIpLHA9dCgicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIil9LHtjZHQyZDo3OSwiY2xlYW4tcHNsZyI6ODksbmRhcnJheTo0NzYsInBsYW5hci1ncmFwaC10by1wb2x5bGluZSI6NDkyLCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiOjUzMiwic3VyZmFjZS1uZXRzIjo1NDB9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0LmxheWVycyllLnB1c2goYSh0LmxheWVyc1tyXSkpO3ZhciBuPW5ldyB1O3JldHVybiBmLnRpbGUud3JpdGUoe2xheWVyczplfSxuKSxuLmZpbmlzaCgpfWZ1bmN0aW9uIGkodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZVtyXT1uZXcgaCh0W3JdLmZlYXR1cmVzKSxlW3JdLm5hbWU9cjtyZXR1cm4gbih7bGF5ZXJzOmV9KX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT17bmFtZTp0Lm5hbWV8fCIiLHZlcnNpb246dC52ZXJzaW9ufHwxLGV4dGVudDp0LmV4dGVudHx8NDA5NixrZXlzOltdLHZhbHVlczpbXSxmZWF0dXJlczpbXX0scj17fSxuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dC5mZWF0dXJlKGkpO2EuZ2VvbWV0cnk9bChhLmxvYWRHZW9tZXRyeSgpKTt2YXIgbz1bXTtmb3IodmFyIHMgaW4gYS5wcm9wZXJ0aWVzKXt2YXIgdT1yW3NdO3ZvaWQgMD09PXUmJihlLmtleXMucHVzaChzKSx1PWUua2V5cy5sZW5ndGgtMSxyW3NdPXUpO3ZhciBmPWMoYS5wcm9wZXJ0aWVzW3NdKSxoPW5bZi5rZXldO3ZvaWQgMD09PWgmJihlLnZhbHVlcy5wdXNoKGYpLGg9ZS52YWx1ZXMubGVuZ3RoLTEsbltmLmtleV09aCksby5wdXNoKHUpLG8ucHVzaChoKX1hLnRhZ3M9byxlLmZlYXR1cmVzLnB1c2goYSl9cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBzKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPTAsaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyl7dmFyIGw9dFthXTtlLnB1c2gobygxLDEpKTtmb3IodmFyIGM9MDtjPGwubGVuZ3RoO2MrKyl7MT09PWMmJmUucHVzaChvKDIsbC5sZW5ndGgtMSkpO3ZhciB1PWxbY10ueC1yLGY9bFtjXS55LW47ZS5wdXNoKHModSkscyhmKSkscis9dSxuKz1mfX1yZXR1cm4gZX1mdW5jdGlvbiBjKHQpe3ZhciBlLHI9dHlwZW9mIHQ7cmV0dXJuInN0cmluZyI9PT1yP2U9e3N0cmluZ192YWx1ZTp0fToiYm9vbGVhbiI9PT1yP2U9e2Jvb2xfdmFsdWU6dH06Im51bWJlciI9PT1yP2U9dCUxIT0wP3tkb3VibGVfdmFsdWU6dH06dDwwP3tzaW50X3ZhbHVlOnR9Ont1aW50X3ZhbHVlOnR9Oih0PUpTT04uc3RyaW5naWZ5KHQpLGU9e3N0cmluZ192YWx1ZTp0fSksZS5rZXk9cisiOiIrdCxlfXZhciB1PXQoInBiZiIpLGY9dCgiLi92ZWN0b3ItdGlsZS1wYiIpLGg9dCgiLi9saWIvZ2VvanNvbl93cmFwcGVyIik7ZS5leHBvcnRzPW4sZS5leHBvcnRzLmZyb21WZWN0b3JUaWxlSnM9bixlLmV4cG9ydHMuZnJvbUdlb2pzb25WdD1pLGUuZXhwb3J0cy5HZW9KU09OV3JhcHBlcj1ofSx7Ii4vbGliL2dlb2pzb25fd3JhcHBlciI6NTY0LCIuL3ZlY3Rvci10aWxlLXBiIjo1NjUscGJmOjQ4N31dLDU2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH1mdW5jdGlvbiBpKHQpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9NDA5Nn12YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgidmVjdG9yLXRpbGUiKS5WZWN0b3JUaWxlRmVhdHVyZTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0aGlzLmZlYXR1cmVzW3RdKX0saS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yYXdHZW9tZXRyeTt0aGlzLmdlb21ldHJ5PVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXtmb3IodmFyIHI9dFtlXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluLnB1c2gobmV3IGEocltpXVswXSxyW2ldWzFdKSk7dGhpcy5nZW9tZXRyeS5wdXNoKG4pfXJldHVybiB0aGlzLmdlb21ldHJ5fSxpLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeXx8dGhpcy5sb2FkR2VvbWV0cnkoKTtmb3IodmFyIHQ9dGhpcy5nZW9tZXRyeSxlPTEvMCxyPS0oMS8wKSxuPTEvMCxpPS0oMS8wKSxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0saS5wcm90b3R5cGUudG9HZW9KU09OPW8ucHJvdG90eXBlLnRvR2VvSlNPTn0seyJwb2ludC1nZW9tZXRyeSI6NDkzLCJ2ZWN0b3ItdGlsZSI6NTU3fV0sNTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGkse2xheWVyczpbXX0sZSl9ZnVuY3Rpb24gaSh0LGUscil7Mz09PXQmJmUubGF5ZXJzLnB1c2goaChyLHIucmVhZFZhcmludCgpK3IucG9zKSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByO2lmKHZvaWQgMCE9PXQubGF5ZXJzKWZvcihyPTA7cjx0LmxheWVycy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDMscCx0LmxheWVyc1tyXSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LnJlYWRGaWVsZHMocyx7fSxlKX1mdW5jdGlvbiBzKHQsZSxyKXsxPT09dD9lLnN0cmluZ192YWx1ZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZsb2F0X3ZhbHVlPXIucmVhZEZsb2F0KCk6Mz09PXQ/ZS5kb3VibGVfdmFsdWU9ci5yZWFkRG91YmxlKCk6ND09PXQ/ZS5pbnRfdmFsdWU9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS51aW50X3ZhbHVlPXIucmVhZFZhcmludCgpOjY9PT10P2Uuc2ludF92YWx1ZT1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmJvb2xfdmFsdWU9ci5yZWFkQm9vbGVhbigpKX1mdW5jdGlvbiBsKHQsZSl7dm9pZCAwIT09dC5zdHJpbmdfdmFsdWUmJmUud3JpdGVTdHJpbmdGaWVsZCgxLHQuc3RyaW5nX3ZhbHVlKSx2b2lkIDAhPT10LmZsb2F0X3ZhbHVlJiZlLndyaXRlRmxvYXRGaWVsZCgyLHQuZmxvYXRfdmFsdWUpLHZvaWQgMCE9PXQuZG91YmxlX3ZhbHVlJiZlLndyaXRlRG91YmxlRmllbGQoMyx0LmRvdWJsZV92YWx1ZSksdm9pZCAwIT09dC5pbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg0LHQuaW50X3ZhbHVlKSx2b2lkIDAhPT10LnVpbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQudWludF92YWx1ZSksdm9pZCAwIT09dC5zaW50X3ZhbHVlJiZlLndyaXRlU1ZhcmludEZpZWxkKDYsdC5zaW50X3ZhbHVlKSx2b2lkIDAhPT10LmJvb2xfdmFsdWUmJmUud3JpdGVCb29sZWFuRmllbGQoNyx0LmJvb2xfdmFsdWUpfWZ1bmN0aW9uIGModCxlKXt2YXIgcj10LnJlYWRGaWVsZHModSx7fSxlKTtyZXR1cm4gdm9pZCAwPT09ci50eXBlJiYoci50eXBlPSJVbmtub3duIikscn1mdW5jdGlvbiB1KHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UudGFncz1yLnJlYWRQYWNrZWRWYXJpbnQoKTozPT09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09PXQmJihlLmdlb21ldHJ5PXIucmVhZFBhY2tlZFZhcmludCgpKX1mdW5jdGlvbiBmKHQsZSl7dm9pZCAwIT09dC5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsdC5pZCksdm9pZCAwIT09dC50YWdzJiZlLndyaXRlUGFja2VkVmFyaW50KDIsdC50YWdzKSx2b2lkIDAhPT10LnR5cGUmJmUud3JpdGVWYXJpbnRGaWVsZCgzLHQudHlwZSksdm9pZCAwIT09dC5nZW9tZXRyeSYmZS53cml0ZVBhY2tlZFZhcmludCg0LHQuZ2VvbWV0cnkpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGQse2ZlYXR1cmVzOltdLGtleXM6W10sdmFsdWVzOltdfSxlKX1mdW5jdGlvbiBkKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZlYXR1cmVzLnB1c2goYyhyLHIucmVhZFZhcmludCgpK3IucG9zKSk6Mz09PXQ/ZS5rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10P2UudmFsdWVzLnB1c2gobyhyLHIucmVhZFZhcmludCgpK3IucG9zKSk6NT09PXQmJihlLmV4dGVudD1yLnJlYWRWYXJpbnQoKSl9ZnVuY3Rpb24gcCh0LGUpe3ZvaWQgMCE9PXQudmVyc2lvbiYmZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbiksdm9pZCAwIT09dC5uYW1lJiZlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWUpO3ZhciByO2lmKHZvaWQgMCE9PXQuZmVhdHVyZXMpZm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSgyLGYsdC5mZWF0dXJlc1tyXSk7aWYodm9pZCAwIT09dC5rZXlzKWZvcihyPTA7cjx0LmtleXMubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyx0LmtleXNbcl0pO2lmKHZvaWQgMCE9PXQudmFsdWVzKWZvcihyPTA7cjx0LnZhbHVlcy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsbCx0LnZhbHVlc1tyXSk7dm9pZCAwIT09dC5leHRlbnQmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50KX12YXIgbT1yLnRpbGU9e3JlYWQ6bix3cml0ZTphfTttLkdlb21UeXBlPXtVbmtub3duOjAsUG9pbnQ6MSxMaW5lU3RyaW5nOjIsUG9seWdvbjozfSxtLnZhbHVlPXtyZWFkOm8sd3JpdGU6bH0sbS5mZWF0dXJlPXtyZWFkOmMsd3JpdGU6Zn0sbS5sYXllcj17cmVhZDpoLHdyaXRlOnB9fSx7fV0sNTY2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ZS5wZXJtaXRIb3N0T2JqZWN0c19fXyYmZS5wZXJtaXRIb3N0T2JqZWN0c19fXyh0KX1mdW5jdGlvbiByKHQpe3JldHVybiEodC5zdWJzdHIoMCxkLmxlbmd0aCk9PWQmJiJfX18iPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIG4odCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYW4gb2JqZWN0OiAiK3QpO3ZhciBlPXRbcF07aWYoZSYmZS5rZXk9PT10KXJldHVybiBlO2lmKGgodCkpe2U9e2tleTp0fTt0cnl7cmV0dXJuIGYodCxwLHt2YWx1ZTplLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExfSksZX1jYXRjaCh0KXtyZXR1cm59fX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnByb3RvdHlwZT1udWxsLE9iamVjdC5mcmVlemUodCl9ZnVuY3Rpb24gYSgpe3l8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8KHk9ITAsY29uc29sZS53YXJuKCJXZWFrTWFwIHNob3VsZCBiZSBpbnZva2VkIGFzIG5ldyBXZWFrTWFwKCksIG5vdCBXZWFrTWFwKCkuIFRoaXMgd2lsbCBiZSBhbiBlcnJvciBpbiB0aGUgZnV0dXJlLiIpKX1pZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz10KTt2YXIgbz0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHM9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIGw9bmV3IHMsYz1PYmplY3QuZnJlZXplKHt9KTtpZihsLnNldChjLDEpLDE9PT1sLmdldChjKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7bz0hMH19dmFyIHU9KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LmlzRXh0ZW5zaWJsZSxkPSJ3ZWFrbWFwOiIscD1kKyJpZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgbT1uZXcgQXJyYXlCdWZmZXIoMjUpLHY9bmV3IFVpbnQ4QXJyYXkobSk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh2KSxwPWQrInJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodixmdW5jdGlvbih0KXtyZXR1cm4odCUzNikudG9TdHJpbmcoMzYpfSkuam9pbigiIikrIl9fXyJ9aWYoZihPYmplY3QsImdldE93blByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS5maWx0ZXIocil9fSksImdldFByb3BlcnR5TmFtZXMiaW4gT2JqZWN0KXt2YXIgZz1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztmKE9iamVjdCwiZ2V0UHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLmZpbHRlcihyKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO2YoT2JqZWN0LCJmcmVlemUiLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbihlKSx0KGUpfX0pO3ZhciBlPU9iamVjdC5zZWFsO2YoT2JqZWN0LCJzZWFsIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7ZihPYmplY3QsInByZXZlbnRFeHRlbnNpb25zIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkscih0KX19KX0oKTt2YXIgeT0hMSxiPTAseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/YyBpbiBpP2lbY106ZToocj1zLmluZGV4T2YodCkscj49MD9sW3JdOmUpfWZ1bmN0aW9uIGUodCl7dmFyIGU9bih0KTtyZXR1cm4gZT9jIGluIGU6cy5pbmRleE9mKHQpPj0wfWZ1bmN0aW9uIHIodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/aVtjXT1lOihyPXMuaW5kZXhPZih0KSxyPj0wP2xbcl09ZToocj1zLmxlbmd0aCxsW3JdPWUsc1tyXT10KSksdGhpc31mdW5jdGlvbiBvKHQpe3ZhciBlLHIsaT1uKHQpO3JldHVybiBpP2MgaW4gaSYmZGVsZXRlIGlbY106ISgoZT1zLmluZGV4T2YodCkpPDApJiYocj1zLmxlbmd0aC0xLHNbZV09dm9pZCAwLGxbZV09bFtyXSxzW2VdPXNbcl0scy5sZW5ndGg9cixsLmxlbmd0aD1yLCEwKX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBzPVtdLGw9W10sYz1iKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoeC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6aSh0KX0saGFzX19fOnt2YWx1ZTppKGUpfSxzZXRfX186e3ZhbHVlOmkocil9LGRlbGV0ZV9fXzp7dmFsdWU6aShvKX19KX07eC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHM/ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB1P2MuaGFzKHQpP2MuZ2V0KHQpOnUuZ2V0X19fKHQsZSk6Yy5nZXQodCxlKX1mdW5jdGlvbiByKHQpe3JldHVybiBjLmhhcyh0KXx8ISF1JiZ1Lmhhc19fXyh0KX1mdW5jdGlvbiBuKHQpe3ZhciBlPSEhYy5kZWxldGUodCk7cmV0dXJuIHU/dS5kZWxldGVfX18odCl8fGU6ZX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBsLGM9bmV3IHMsdT12b2lkIDAsZj0hMTtyZXR1cm4gbD1vP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc2V0KHQsZSksYy5oYXModCl8fCh1fHwodT1uZXcgeCksdS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihmKXRyeXtjLnNldCh0LGUpfWNhdGNoKHIpe3V8fCh1PW5ldyB4KSx1LnNldF9fXyh0LGUpfWVsc2UgYy5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTppKGUpfSxoYXNfX186e3ZhbHVlOmkocil9LHNldF9fXzp7dmFsdWU6aShsKX0sZGVsZXRlX19fOnt2YWx1ZTppKG4pfSxwZXJtaXRIb3N0T2JqZWN0c19fXzp7dmFsdWU6aShmdW5jdGlvbihlKXtpZihlIT09dCl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTtmPSEwfSl9fSl9byYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksci5wcm90b3R5cGU9eC5wcm90b3R5cGUsZS5leHBvcnRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOldlYWtNYXAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX0oKTooInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPXgpfX0oKX0se31dLDU2NzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOmkoZSx0KX19dmFyIGk9dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NTY4fV0sNTY4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlT2YiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfWUuZXhwb3J0cz1ufSx7fV0sNTY5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciB0PWkoKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3QoZSkudmFsdWU9cn0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19dmFyIGk9dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTY3fV0sNTcwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MTQ3fV0sNTcxOltmdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzWzNdLGk9YXJndW1lbnRzWzRdLGE9YXJndW1lbnRzWzVdLG89SlNPTi5zdHJpbmdpZnk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt2W3RdPSEwO2Zvcih2YXIgZSBpbiBpW3RdWzFdKXt2YXIgbj1pW3RdWzFdW2VdO3Zbbl18fHIobil9fWZvcih2YXIgcyxsPU9iamVjdC5rZXlzKGEpLGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe3ZhciBmPWxbY10saD1hW2ZdLmV4cG9ydHM7aWYoaD09PXR8fGgmJmguZGVmYXVsdD09PXQpe3M9ZjticmVha319aWYoIXMpe3M9TWF0aC5mbG9vcihNYXRoLnBvdygxNiw4KSpNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7Zm9yKHZhciBkPXt9LGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe3ZhciBmPWxbY107ZFtmXT1mfWlbc109W0Z1bmN0aW9uKFsicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwiKCIrdCsiKShzZWxmKSIpLGRdfXZhciBwPU1hdGguZmxvb3IoTWF0aC5wb3coMTYsOCkqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpLG09e307bVtzXT1zLGlbcF09W0Z1bmN0aW9uKFsicmVxdWlyZSJdLCJ2YXIgZiA9IHJlcXVpcmUoIisgbyhzKSArIik7KGYuZGVmYXVsdCA/IGYuZGVmYXVsdCA6IGYpKHNlbGYpOyIpLG1dO3ZhciB2PXt9O3IocCk7dmFyIGc9IigiK24rIikoeyIrT2JqZWN0LmtleXModikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpKyI6WyIraVt0XVswXSsiLCIrbyhpW3RdWzFdKSsiXSJ9KS5qb2luKCIsIikrIn0se30sWyIrbyhwKSsiXSkiLHk9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTHx8d2luZG93Lm1velVSTHx8d2luZG93Lm1zVVJMLGI9bmV3IEJsb2IoW2ddLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSk7aWYoZSYmZS5iYXJlKXJldHVybiBiO3ZhciB4PXkuY3JlYXRlT2JqZWN0VVJMKGIpLF89bmV3IFdvcmtlcih4KTtyZXR1cm4gXy5vYmplY3RVUkw9eCxffX0se31dLDU3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cy5SQURJVVM9NjM3ODEzNyxlLmV4cG9ydHMuRkxBVFRFTklORz0xLzI5OC4yNTcyMjM1NjMsZS5leHBvcnRzLlBPTEFSX1JBRElVUz02MzU2NzUyLjMxNDJ9LHt9XSw1NzM6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuV2hvb1RTPWUuV2hvb1RTfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyl7cmV0dXJuIG89b3x8e30sdCsiPyIrWyJiYm94PSIrcihuLGksYSksImZvcm1hdD0iKyhvLmZvcm1hdHx8ImltYWdlL3BuZyIpLCJzZXJ2aWNlPSIrKG8uc2VydmljZXx8IldNUyIpLCJ2ZXJzaW9uPSIrKG8udmVyc2lvbnx8IjEuMS4xIiksInJlcXVlc3Q9Iisoby5yZXF1ZXN0fHwiR2V0TWFwIiksInNycz0iKyhvLnNyc3x8IkVQU0c6Mzg1NyIpLCJ3aWR0aD0iKyhvLndpZHRofHwyNTYpLCJoZWlnaHQ9Iisoby5oZWlnaHR8fDI1NiksImxheWVycz0iK2VdLmpvaW4oIiYiKX1mdW5jdGlvbiByKHQsZSxyKXtlPU1hdGgucG93KDIsciktZS0xO3ZhciBpPW4oMjU2KnQsMjU2KmUsciksYT1uKDI1NioodCsxKSwyNTYqKGUrMSkscik7cmV0dXJuIGlbMF0rIiwiK2lbMV0rIiwiK2FbMF0rIiwiK2FbMV19ZnVuY3Rpb24gbih0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX10LmdldFVSTD1lLHQuZ2V0VGlsZUJCb3g9cix0LmdldE1lcmNDb29yZHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDU3NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpLGE7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWk9dCxhPWV8fHt9O2Vsc2V7aWYoISgibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgeWVhciBvdXRzaWRlIHJhbmdlIDE4ODgtMjExMSIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMikpdGhyb3cgbmV3IEVycm9yKCJTb2xhciBtb250aCBvdXRzaWRlIHJhbmdlIDEgLSAxMiIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMSkpdGhyb3cgbmV3IEVycm9yKCJTb2xhciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzEiKTtpPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cn0sYT1ufHx7fX12YXIgbz1wW2kueWVhci1wWzBdXSxzPWkueWVhcjw8OXxpLm1vbnRoPDw1fGkuZGF5O2EueWVhcj1zPj1vP2kueWVhcjppLnllYXItMSxvPXBbYS55ZWFyLXBbMF1dO3ZhciBsLGM9bz4+OSY0MDk1LHU9bz4+NSYxNSxmPTMxJm8saD1uZXcgRGF0ZShjLHUtMSxmKSxtPW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO2w9TWF0aC5yb3VuZCgobS1oKS84NjRlNSk7dmFyIHYsZz1kW2EueWVhci1kWzBdXTtmb3Iodj0wO3Y8MTM7disrKXt2YXIgeT1nJjE8PDEyLXY/MzA6Mjk7aWYobDx5KWJyZWFrO2wtPXl9dmFyIGI9Zz4+MTM7cmV0dXJuIWJ8fHY8Yj8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MSt2KTp2PT09Yj8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9dik6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXYpLGEuZGF5PTErbCxhfWZ1bmN0aW9uIGEodCxlLHIsbixpKXt2YXIgYSxvO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzApKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7dmFyIHM7Im9iamVjdCI9PXR5cGVvZiBuPyhzPSExLGE9bik6KHM9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6c319dmFyIGw7bD1vLmRheS0xO3ZhciBjLHU9ZFtvLnllYXItZFswXV0sZj11Pj4xMztjPWY/by5tb250aD5mP28ubW9udGg6by5pc0ludGVyY2FsYXJ5P28ubW9udGg6by5tb250aC0xOm8ubW9udGgtMTtmb3IodmFyIGg9MDtoPGM7aCsrKXtsKz11JjE8PDEyLWg/MzA6Mjl9dmFyIG09cFtvLnllYXItcFswXV0sdj1tPj45JjQwOTUsZz1tPj41JjE1LHk9MzEmbSxiPW5ldyBEYXRlKHYsZy0xLHkrbCk7cmV0dXJuIGEueWVhcj1iLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2IuZ2V0TW9udGgoKSxhLmRheT1iLmdldERhdGUoKSxhfXZhciBvPXQoIi4uL21haW4iKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPW8uaW5zdGFuY2UoKTtuLnByb3RvdHlwZT1uZXcgby5iYXNlQ2FsZW5kYXIscyhuLnByb3RvdHlwZSx7bmFtZToiQ2hpbmVzZSIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ2hpbmVzZSIsZXBvY2hzOlsiQkVDIiwiRUMiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXQubWF0Y2godSk7cmV0dXJuIHI/clswXToiIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT0iIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPSIwIithKSx0aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpJiYoYSs9ImkiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChmKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPXRoaXMudG9DaGluZXNlTW9udGgocixuKSxhPVsiXHU0ZTAwXHU2NzA4IiwiXHU0ZThjXHU2NzA4IiwiXHU0ZTA5XHU2NzA4IiwiXHU1NmRiXHU2NzA4IiwiXHU0ZTk0XHU2NzA4IiwiXHU1MTZkXHU2NzA4IiwiXHU0ZTAzXHU2NzA4IiwiXHU1MTZiXHU2NzA4IiwiXHU0ZTVkXHU2NzA4IiwiXHU1MzQxXHU2NzA4IiwiXHU1MzQxXHU0ZTAwXHU2NzA4IiwiXHU1MzQxXHU0ZThjXHU2NzA4Il1baS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGE9Ilx1OTVmMCIrYSksYX0sbW9udGhOYW1lc1Nob3J0OmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChoKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPXRoaXMudG9DaGluZXNlTW9udGgocixuKSxhPVsiXHU0ZTAwIiwiXHU0ZThjIiwiXHU0ZTA5IiwiXHU1NmRiIiwiXHU0ZTk0IiwiXHU1MTZkIiwiXHU0ZTAzIiwiXHU1MTZiIiwiXHU0ZTVkIiwiXHU1MzQxIiwiXHU1MzQxXHU0ZTAwIiwiXHU1MzQxXHU0ZThjIl1baS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGE9Ilx1OTVmMCIrYSksYX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09aXx8IkkiPT09aX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PW58fGU8MXx8ZT4xMil0aHJvdyBvLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gbj8hciYmZTw9bj9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYodD10LnllYXIoKSxlPXQubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpLG49cj8xMjoxMTtpZihlPDB8fGU+bil0aHJvdyBvLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gcj9lPHI/ZSsxOmU6ZSsxfSxpbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxkW3QtZFswXV0+PjEzfSxpc0ludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJih0PXQueWVhcigpLGU9dC5tb250aCgpKTt2YXIgcj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7cmV0dXJuISFyJiZyPT09ZX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLmludGVyY2FsYXJ5TW9udGgodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fdmFsaWRhdGVZZWFyKHQsby5sb2NhbC5pbnZhbGlkeWVhciksYT1wW2ktcFswXV0scz1hPj45JjQwOTUsYz1hPj41JjE1LHU9MzEmYTtuPWwubmV3RGF0ZShzLGMsdSksbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKTt2YXIgZj10aGlzLnRvSkQodCxlLHIpLW4udG9KRCgpO3JldHVybiAxK01hdGguZmxvb3IoZi83KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzEzOjEyfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByPWRbdC1kWzBdXTtpZihlPihyPj4xMz8xMjoxMSkpdGhyb3cgby5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHImMTw8MTItZT8zMDoyOX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxzLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl92YWxpZGF0ZVllYXIobi55ZWFyKCkpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgaT10aGlzLmlzSW50ZXJjYWxhcnlNb250aCh0LGUpLHM9dGhpcy50b0NoaW5lc2VNb250aCh0LGUpLGM9YSh0LHMscixpKTtyZXR1cm4gbC50b0pEKGMueWVhcixjLm1vbnRoLGMuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWwuZnJvbUpEKHQpLHI9aShlLnllYXIoKSxlLm1vbnRoKCksZS5kYXkoKSksbj10aGlzLnRvTW9udGhJbmRleChyLnllYXIsci5tb250aCxyLmlzSW50ZXJjYWxhcnkpO3JldHVybiB0aGlzLm5ld0RhdGUoci55ZWFyLG4sci5kYXkpfSxmcm9tU3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYykscj10aGlzLl92YWxpZGF0ZVllYXIoK2VbMV0pLG49K2VbMl0saT0hIWVbM10sYT10aGlzLnRvTW9udGhJbmRleChyLG4saSksbz0rZVs0XTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsYSxvKX0sYWRkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10LnllYXIoKSxhPXQubW9udGgoKSxvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGksYSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKGksYSksbD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmFkZC5jYWxsKHRoaXMsdCxlLHIpO2lmKCJ5Ij09PXIpe3ZhciBjPWwueWVhcigpLHU9bC5tb250aCgpLGY9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgoYyxzKSxoPW8mJmY/dGhpcy50b01vbnRoSW5kZXgoYyxzLCEwKTp0aGlzLnRvTW9udGhJbmRleChjLHMsITEpO2ghPT11JiZsLm1vbnRoKGgpfXJldHVybiBsfX0pO3ZhciBjPS9eXHMqKC0/XGRcZFxkXGR8XGRcZClbLVwvXShcZD9cZCkoW2lJXT8pWy1cL10oXGQ/XGQpL20sdT0vXlxkP1xkW2lJXT8vbSxmPS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT9cdTY3MDgvbSxoPS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT8vbTtvLmNhbGVuZGFycy5jaGluZXNlPW4KO3ZhciBkPVsxODg3LDU3ODAsNTgwMiwxOTE1NywyNzQyLDUwMzU5LDExOTgsMjY0Niw0NjM3OCw3NDY2LDM0MTIsMzAxMjIsNTQ4Miw2Nzk0OSwyMzk2LDUyOTQsNDM1OTcsNjczMiw2OTU0LDM2MTgxLDI3NzIsNDk1NCwxODc4MSwyMzk2LDU0NDI3LDUyNzQsNjczMCw0Nzc4MSw1ODAwLDY4NjgsMjEyMTAsNDc5MCw1OTcwMywyMzUwLDUyNzAsNDY2NjcsMzQwMiwzNDk2LDM4MzI1LDEzODgsNDc4MiwxODczNSwyMzUwLDUyMzc0LDY4MDQsNzQ5OCw0NDQ1NywyOTA2LDEzODgsMjkyOTQsNDcwMCw2Mzc4OSw2NDQyLDY4MDQsNTYxMzgsNTgwMiwyNzcyLDM4MjM1LDEyMTAsNDY5OCwyMjgyNyw1NDE4LDYzMTI1LDM0NzYsNTgwMiw0MzcwMSwyNDg0LDUzMDIsMjcyMjMsMjY0Niw3MDk1NCw3NDY2LDM0MTIsNTQ2OTgsNTQ4MiwyNDEyLDM4MDYyLDUyOTQsMjYzNiwzMjAzOCw2OTU0LDYwMjQ1LDI3NzIsNDgyNiw0MzM1NywyMzk0LDUyNzQsMzk1MDEsNjczMCw3MjM1Nyw1ODAwLDU4NDQsNTM5NzgsNDc5MCwyMzU4LDM4MDM5LDUyNzAsODc2MjcsMzQwMiwzNDk2LDU0NzA4LDU0ODQsNDc4Miw0MzMxMSwyMzUwLDMyMjIsMjc5NzgsNzQ5OCw2ODk2NSwyOTA0LDU0ODQsNDU2NzcsNDcwMCw2NDQ0LDM5NTczLDY4MDQsNjk4NiwxOTI4NSwyNzcyLDYyODExLDEyMTAsNDY5OCw0NzQwMyw1NDE4LDU3ODAsMzg1NzAsNTU0Niw3NjQ2OSwyNDIwLDUzMDIsNTE3OTksMjY0Niw1NDE0LDM2NTAxLDM0MTIsNTU0NiwxODg2OSwyNDEyLDU0NDQ2LDUyNzYsNjczMiw0ODQyMiw2ODIyLDI5MDAsMjgwMTAsNDgyNiw5MjUwOSwyMzk0LDUyNzQsNTU4ODMsNjczMCw2ODIwLDQ3OTU2LDU4MTIsMjc3OCwxODc3OSwyMzU4LDYyNjE1LDUyNzAsNTQ1MCw0Njc1NywzNDkyLDU1NTYsMjczMTgsNDcxOCw2Nzg4NywyMzUwLDMyMjIsNTI1NTQsNzQ5OCwzNDI4LDM4MjUyLDU0NjgsNDcwMCwzMTAyMiw2NDQ0LDY0MTQ5LDY4MDQsNjk4Niw0Mzg2MSwyNzcyLDUzMzgsMzU0MjEsMjY1MCw3MDk1NSw1NDE4LDU3ODAsNTQ5NTQsNTU0NiwyNzQwLDM4MDc0LDUzMDIsMjY0NiwyOTk5MSwzMzY2LDYxMDExLDM0MTIsNTU0Niw0MzQ0NSwyNDEyLDUyOTQsMzU0MDYsNjczMiw3Mjk5OCw2ODIwLDY5OTYsNTI1ODYsMjc3OCwyMzk2LDM4MDQ1LDUyNzQsNjY5OCwyMzMzMyw2ODIwLDY0MzM4LDU4MTIsMjc0Niw0MzM1NSwyMzU4LDUyNzAsMzk0OTksNTQ1MCw3OTUyNSwzNDkyLDU1NDhdLHA9WzE4ODcsOTY2NzMyLDk2NzIzMSw5Njc3MzMsOTY4MjY1LDk2ODc2Niw5NjkyOTcsOTY5Nzk4LDk3MDI5OCw5NzA4MjksOTcxMzMwLDk3MTgzMCw5NzIzNjIsOTcyODYzLDk3MzM5NSw5NzM4OTYsOTc0Mzk3LDk3NDkyOCw5NzU0MjgsOTc1OTI5LDk3NjQ2MSw5NzY5NjIsOTc3NDYyLDk3Nzk5NCw5Nzg0OTQsOTc5MDI2LDk3OTUyNiw5ODAwMjYsOTgwNTU4LDk4MTA1OSw5ODE1NTksOTgyMDkxLDk4MjU5Myw5ODMxMjQsOTgzNjI0LDk4NDEyNCw5ODQ2NTYsOTg1MTU3LDk4NTY1Niw5ODYxODksOTg2NjkwLDk4NzE5MSw5ODc3MjIsOTg4MjIyLDk4ODc1Myw5ODkyNTQsOTg5NzU0LDk5MDI4Niw5OTA3ODgsOTkxMjg4LDk5MTgxOSw5OTIzMTksOTkyODUxLDk5MzM1Miw5OTM4NTEsOTk0MzgzLDk5NDg4NSw5OTUzODUsOTk1OTE3LDk5NjQxOCw5OTY5MTgsOTk3NDUwLDk5Nzk0OSw5OTg0ODEsOTk4OTgyLDk5OTQ4MywxMDAwMDE0LDEwMDA1MTUsMTAwMTAxNiwxMDAxNTQ4LDEwMDIwNDcsMTAwMjU3OCwxMDAzMDgwLDEwMDM1ODAsMTAwNDExMSwxMDA0NjEzLDEwMDUxMTMsMTAwNTY0NSwxMDA2MTQ2LDEwMDY2NDUsMTAwNzE3NywxMDA3Njc4LDEwMDgyMDksMTAwODcxMCwxMDA5MjExLDEwMDk3NDMsMTAxMDI0MywxMDEwNzQzLDEwMTEyNzUsMTAxMTc3NSwxMDEyMzA2LDEwMTI4MDcsMTAxMzMwOCwxMDEzODQwLDEwMTQzNDEsMTAxNDg0MSwxMDE1MzczLDEwMTU4NzQsMTAxNjQwNCwxMDE2OTA1LDEwMTc0MDUsMTAxNzkzNywxMDE4NDM4LDEwMTg5MzksMTAxOTQ3MSwxMDE5OTcyLDEwMjA0NzEsMTAyMTAwMiwxMDIxNTAzLDEwMjIwMzUsMTAyMjUzNSwxMDIzMDM2LDEwMjM1NjgsMTAyNDA2OSwxMDI0NTY4LDEwMjUxMDAsMTAyNTYwMSwxMDI2MTAyLDEwMjY2MzMsMTAyNzEzMywxMDI3NjY2LDEwMjgxNjcsMTAyODY2NiwxMDI5MTk4LDEwMjk2OTksMTAzMDE5OSwxMDMwNzMwLDEwMzEyMzEsMTAzMTc2MywxMDMyMjY0LDEwMzI3NjQsMTAzMzI5NiwxMDMzNzk3LDEwMzQyOTcsMTAzNDgyOCwxMDM1MzI5LDEwMzU4MzAsMTAzNjM2MiwxMDM2ODYxLDEwMzczOTMsMTAzNzg5NCwxMDM4Mzk0LDEwMzg5MjUsMTAzOTQyNywxMDM5OTI3LDEwNDA0NTksMTA0MDk1OSwxMDQxNDkxLDEwNDE5OTIsMTA0MjQ5MiwxMDQzMDIzLDEwNDM1MjQsMTA0NDAyNCwxMDQ0NTU2LDEwNDUwNTcsMTA0NTU1OCwxMDQ2MDkwLDEwNDY1OTAsMTA0NzEyMSwxMDQ3NjIyLDEwNDgxMjIsMTA0ODY1NCwxMDQ5MTU0LDEwNDk2NTUsMTA1MDE4NywxMDUwNjg5LDEwNTEyMTksMTA1MTcyMCwxMDUyMjIwLDEwNTI3NTEsMTA1MzI1MiwxMDUzNzUyLDEwNTQyODQsMTA1NDc4NiwxMDU1Mjg1LDEwNTU4MTcsMTA1NjMxNywxMDU2ODQ5LDEwNTczNDksMTA1Nzg1MCwxMDU4MzgyLDEwNTg4ODMsMTA1OTM4MywxMDU5OTE1LDEwNjA0MTUsMTA2MDk0NywxMDYxNDQ3LDEwNjE5NDcsMTA2MjQ3OSwxMDYyOTgxLDEwNjM0ODAsMTA2NDAxMiwxMDY0NTE0LDEwNjUwMTQsMTA2NTU0NSwxMDY2MDQ1LDEwNjY1NzcsMTA2NzA3OCwxMDY3NTc4LDEwNjgxMTAsMTA2ODYxMSwxMDY5MTEyLDEwNjk2NDIsMTA3MDE0MiwxMDcwNjc0LDEwNzExNzUsMTA3MTY3NSwxMDcyMjA3LDEwNzI3MDksMTA3MzIwOSwxMDczNzQwLDEwNzQyNDEsMTA3NDc0MSwxMDc1MjczLDEwNzU3NzMsMTA3NjMwNSwxMDc2ODA3LDEwNzczMDgsMTA3NzgzOSwxMDc4MzQwLDEwNzg4NDAsMTA3OTM3MiwxMDc5ODcxLDEwODA0MDMsMTA4MDkwNF19LHsiLi4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJDb3B0aWMiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ29wdGljIixlcG9jaHM6WyJCQU0iLCJBTSJdLG1vbnRoTmFtZXM6WyJUaG91dCIsIlBhb3BpIiwiSGF0aG9yIiwiS29pYWsiLCJUb2JpIiwiTWVzaGlyIiwiUGFyZW1oYXQiLCJQYXJlbW91ZGUiLCJQYXNob25zIiwiUGFvbmkiLCJFcGlwIiwiTWVzb3JpIiwiUGkgS29naSBFbmF2b3QiXSxtb250aE5hbWVzU2hvcnQ6WyJUaG8iLCJQYW8iLCJIYXRoIiwiS29pIiwiVG9iIiwiTWVzaCIsIlBhdCIsIlBhZCIsIlBhc2giLCJQYW8iLCJFcGkiLCJNZXNvIiwiUGlLIl0sZGF5TmFtZXM6WyJUa3lyaWFrYSIsIlBlc25hdSIsIlBzaG9tZW50IiwiUGVmdG9vdSIsIlB0aW91IiwiUHNvb3UiLCJQc2FiYmF0b24iXSxkYXlOYW1lc1Nob3J0OlsiVGt5IiwiUGVzIiwiUHNoIiwiUGVmIiwiUHRpIiwiUHNvIiwiUHNhIl0sZGF5TmFtZXNNaW46WyJUayIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0IiwiUHNvIiwiUHNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuY29wdGljPW59LHsiLi4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJEaXNjd29ybGQiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkRpc2N3b3JsZCIsZXBvY2hzOlsiQlVDIiwiVUMiXSxtb250aE5hbWVzOlsiSWNrIiwiT2ZmbGUiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiR3J1bmUiLCJBdWd1c3QiLCJTcHVuZSIsIlNla3RvYmVyIiwiRW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkljayIsIk9mZiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkdydSIsIkF1ZyIsIlNwdSIsIlNlayIsIkVtYiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiT2N0ZWRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk9jdCIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJPYyIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzgpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDh9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLmRheSgpKzEpJTh9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZGF5T2ZXZWVrKHQsZSxyKTtyZXR1cm4gbj49MiYmbjw9Nn0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57Y2VudHVyeTpvW01hdGguZmxvb3IoKG4ueWVhcigpLTEpLzEwMCkrMV18fCIifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCkrKG4ueWVhcigpPDA/MTowKSxlPW4ubW9udGgoKSwocj1uLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOiJGcnVpdGJhdCIsMjE6IkFuY2hvdnkifTtpLmNhbGVuZGFycy5kaXNjd29ybGQ9bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU3NzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IkV0aGlvcGlhbiIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJFdGhpb3BpYW4iLGVwb2NoczpbIkJFRSIsIkVFIl0sbW9udGhOYW1lczpbIk1lc2tlcmVtIiwiVGlrZW1ldCIsIkhpZGFyIiwiVGFoZXNhcyIsIlRpciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNlIiwiUGFndW1lIl0sbW9udGhOYW1lc1Nob3J0OlsiTWVzIiwiVGlrIiwiSGlkIiwiVGFoIiwiVGlyIiwiWWVrIiwiTWVnIiwiTWlhIiwiR2VuIiwiU2VuIiwiSGFtIiwiTmVoIiwiUGFnIl0sZGF5TmFtZXM6WyJFaHVkIiwiU2Vnbm8iLCJNYWtzZWdubyIsIklyb2IiLCJIYW11cyIsIkFyYiIsIktpZGFtZSJdLGRheU5hbWVzU2hvcnQ6WyJFaHUiLCJTZWciLCJNYWsiLCJJcm8iLCJIYW0iLCJBcmIiLCJLaWQiXSxkYXlOYW1lc01pbjpbIkVoIiwiU2UiLCJNYSIsIklyIiwiSGEiLCJBciIsIktpIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuZXRoaW9waWFuPW59LHsiLi4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfXZhciBhPXQoIi4uL21haW4iKSxvPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgYS5iYXNlQ2FsZW5kYXIsbyhuLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10PDA/dCsxOnQsaSg3KnQrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCh0PT09LTE/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIobik/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIobiklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgaT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShpKSt0aGlzLl9kZWxheTIoaSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3IodmFyIHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcih2YXIgcz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gaSgzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoZT09PS0xPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGEuY2FsZW5kYXJzLmhlYnJldz1ufSx7Ii4uL21haW4iOjU4OCwib2JqZWN0LWFzc2lnbiI6NDc5fV0sNTc5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBpPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgaS5iYXNlQ2FsZW5kYXIsYShuLnByb3RvdHlwZSx7bmFtZToiSXNsYW1pYyIsamRFcG9jaDoxOTQ4NDM5LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSXNsYW1pYyIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBhbC10aGFuaSIsIkp1bWFkYSBhbC1hd3dhbCIsIkp1bWFkYSBhbC10aGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtYWhhZCIsIllhd20gYWwtaXRobmF5biIsIllhd20gYXRoLXRodWxhYXRoYWEnIiwiWWF3bSBhbC1hcmJpJ2FhJyIsIllhd20gYWwta2hhbVx1MDEyYnMiLCJZYXdtIGFsLWp1bSdhIiwiWWF3bSBhcy1zYWJ0Il0sZGF5TmFtZXNTaG9ydDpbIkFoYSIsIkl0aCIsIlRodSIsIkFyYiIsIktoYSIsIkp1bSIsIlNhYiJdLGRheU5hbWVzTWluOlsiQWgiLCJJdCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdD10PD0wP3QrMTp0LHIrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGkuY2FsZW5kYXJzLmlzbGFtaWM9bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ikp1bGlhbiIsamRFcG9jaDoxNzIxNDIzLjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSnVsaWFuIixlcG9jaHM6WyJCQyIsIkFEIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKTtyZXR1cm4gdCU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1lKzE1MjQsbj1NYXRoLmZsb29yKChyLTEyMi4xKS8zNjUuMjUpLGk9TWF0aC5mbG9vcigzNjUuMjUqbiksYT1NYXRoLmZsb29yKChyLWkpLzMwLjYwMDEpLG89YS1NYXRoLmZsb29yKGE8MTQ/MToxMykscz1uLU1hdGguZmxvb3Iobz4yPzQ3MTY6NDcxNSksbD1yLWktTWF0aC5mbG9vcigzMC42MDAxKmEpO3JldHVybiBzPD0wJiZzLS0sdGhpcy5uZXdEYXRlKHMsbyxsKX19KSxpLmNhbGVuZGFycy5qdWxpYW49bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBpKHQtMSxlKSsxfXZhciBvPXQoIi4uL21haW4iKSxzPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgby5iYXNlQ2FsZW5kYXIscyhuLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZih0PXQuc3BsaXQoIi4iKSx0Lmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixvLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG8ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksaT1uLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxzPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW3NbMF0tMV0sdHpvbGtpbkRheTpzWzBdLHR6b2xraW5UcmVjZW5hOnNbMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3QtPXRoaXMuamRFcG9jaDt2YXIgZT1pKHQrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLGkoZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybiB0LT10aGlzLmpkRXBvY2gsW2EodCsyMCwyMCksYSh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4uZGF5KCkrMjAqbi5tb250aCgpKzM2MCpuLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksby5jYWxlbmRhcnMubWF5YW49bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyO3ZhciBvPWkuaW5zdGFuY2UoImdyZWdvcmlhbiIpO2Eobi5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXJ8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkTW9udGgpLHQ9bi55ZWFyKCk7dDwwJiZ0Kys7Zm9yKHZhciBhPW4uZGF5KCkscz0xO3M8bi5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLGkuY2FsZW5kYXJzLm5hbmFrc2hhaGk9bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgYT1pLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgYz10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcihjKSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZShjLDEsMSkuYWRkKG8sImQiKS50b0pEKCl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1pLmluc3RhbmNlKCkscj1lLmZyb21KRCh0KSxuPXIueWVhcigpLGE9ci5kYXlPZlllYXIoKSxvPW4rNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShvKTtmb3IodmFyIHM9OSxsPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbb11bMF0sYz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLWwrMTthPmM7KXMrKyxzPjEyJiYocz0xLG8rKyksYys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtvXVtzXTt2YXIgdT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLShjLWEpO3JldHVybiB0aGlzLm5ld0RhdGUobyxzLHUpfSxfY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRheXNQZXJNb250aC5zbGljZSgwKTtlLnVuc2hpZnQoMTcpO2Zvcih2YXIgcj10LTE7cjx0KzI7cisrKXZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMmUzOlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDI6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwNDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA2OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDA5OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDEyOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxMzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTQ6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxNjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE4OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxOTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwMjM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDI3OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjk6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDMwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMV0sMjAzMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzEsMzEsMzEsMzEsMzEsMzFdLDIwMzI6WzE3LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSwyMDMzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzU6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDM2OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM5OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0MDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDE6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0MzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ1OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDc6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDUxOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDU0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMjksMzBdLDIwNTY6WzE3LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDU3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA1ODpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYwOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjI6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwyMDYzOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDY2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjA2NzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjg6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3MDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNzE6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NjpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNzc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDc4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwODA6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDgxOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODM6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg3OlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4ODpbMTYsMzAsMzEsMzIsMzIsMzAsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MTpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTI6WzE2LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDMwLDMwXSwyMDk2OlsxNywzMCwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA5NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDI5LDMwLDI5LDMwLDMwLDMxXSwyMDk5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwyOSwzMCwzMCwzMF0sMjEwMDpbMTcsMzEsMzIsMzEsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdfX0pLGkuY2FsZW5kYXJzLm5lcGFsaT1ufSx7Ii4uL21haW4iOjU4OCwib2JqZWN0LWFzc2lnbiI6NDc5fV0sNTg0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX12YXIgYT10KCIuLi9tYWluIiksbz10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGEuYmFzZUNhbGVuZGFyLG8obi5wcm90b3R5cGUse25hbWU6IlBlcnNpYW4iLGpkRXBvY2g6MTk0ODMyMC41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlBlcnNpYW4iLGVwb2NoczpbIkJQIiwiQVAiXSxtb250aE5hbWVzOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGF5IiwiQmFobWFuIiwiRXNmYW5kIl0sbW9udGhOYW1lc1Nob3J0OlsiRmFyIiwiT3JkIiwiS2hvIiwiVGlyIiwiTW9yIiwiU2hhIiwiTWVoIiwiQWJhIiwiQXphIiwiRGF5IiwiQmFoIiwiRXNmIl0sZGF5TmFtZXM6WyJZZWtzaGFtYmUiLCJEb3NoYW1iZSIsIlNlc2hhbWJlIiwiQ2hceGU2aGFyc2hhbWJlIiwiUGFuanNoYW1iZSIsIkpvbSdlIiwiU2hhbWJlIl0sZGF5TmFtZXNTaG9ydDpbIlllayIsIkRvIiwiU2UiLCJDaFx4ZTYiLCJQYW5qIiwiSm9tIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJZZSIsIkRvIiwiU2UiLCJDaCIsIlBhIiwiSm8iLCJTaCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDY4MiooKGUueWVhcigpLShlLnllYXIoKT4wPzQ3NDo0NzMpKSUyODIwKzQ3NCszOCklMjgxNjw2ODJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC0oKG4uZGF5T2ZXZWVrKCkrMSklNyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGEubG9jYWwuaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpO3ZhciBvPXQtKHQ+PTA/NDc0OjQ3Mykscz00NzQraShvLDI4MjApO3JldHVybiByKyhlPD03PzMxKihlLTEpOjMwKihlLTEpKzYpK01hdGguZmxvb3IoKDY4MipzLTExMCkvMjgxNikrMzY1KihzLTEpKzEwMjk5ODMqTWF0aC5mbG9vcihvLzI4MjApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPXQtdGhpcy50b0pEKDQ3NSwxLDEpLHI9TWF0aC5mbG9vcihlLzEwMjk5ODMpLG49aShlLDEwMjk5ODMpLGE9MjgyMDtpZigxMDI5OTgyIT09bil7dmFyIG89TWF0aC5mbG9vcihuLzM2Nikscz1pKG4sMzY2KTthPU1hdGguZmxvb3IoKDIxMzQqbysyODE2KnMrMjgxNSkvMTAyODUyMikrbysxfXZhciBsPWErMjgyMCpyKzQ3NDtsPWw8PTA/bC0xOmw7dmFyIGM9dC10aGlzLnRvSkQobCwxLDEpKzEsdT1jPD0xODY/TWF0aC5jZWlsKGMvMzEpOk1hdGguY2VpbCgoYy02KS8zMCksZj10LXRoaXMudG9KRChsLHUsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwsdSxmKX19KSxhLmNhbGVuZGFycy5wZXJzaWFuPW4sYS5jYWxlbmRhcnMuamFsYWxpPW59LHsiLi4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpLG89aS5pbnN0YW5jZSgpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJUYWl3YW4iLGpkRXBvY2g6MjQxOTQwMi41LHllYXJzT2Zmc2V0OjE5MTEsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGFpd2FuIixlcG9jaHM6WyJCUk9DIiwiUk9DIl0sCm1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhciksdD10aGlzLl90MmdZZWFyKGUueWVhcigpKTtyZXR1cm4gby5sZWFwWWVhcih0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihuLnllYXIoKSk7cmV0dXJuIG8ud2Vla09mWWVhcih0LG4ubW9udGgoKSxuLmRheSgpKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLHQ9dGhpcy5fdDJnWWVhcihuLnllYXIoKSk7cmV0dXJuIG8udG9KRCh0LG4ubW9udGgoKSxuLmRheSgpKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW8uZnJvbUpEKHQpLHI9dGhpcy5fZzJ0WWVhcihlLnllYXIoKSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLGUubW9udGgoKSxlLmRheSgpKX0sX3QyZ1llYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX19KSxpLmNhbGVuZGFycy50YWl3YW49bn0seyIuLi9tYWluIjo1ODgsIm9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIiksbz1pLmluc3RhbmNlKCk7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IlRoYWkiLGpkRXBvY2g6MTUyMzA5OC41LHllYXJzT2Zmc2V0OjU0MyxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUaGFpIixlcG9jaHM6WyJCQkUiLCJCRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhciksdD10aGlzLl90MmdZZWFyKGUueWVhcigpKTtyZXR1cm4gby5sZWFwWWVhcih0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihuLnllYXIoKSk7cmV0dXJuIG8ud2Vla09mWWVhcih0LG4ubW9udGgoKSxuLmRheSgpKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLHQ9dGhpcy5fdDJnWWVhcihuLnllYXIoKSk7cmV0dXJuIG8udG9KRCh0LG4ubW9udGgoKSxuLmRheSgpKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW8uZnJvbUpEKHQpLHI9dGhpcy5fZzJ0WWVhcihlLnllYXIoKSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLGUubW9udGgoKSxlLmRheSgpKX0sX3QyZ1llYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX19KSxpLmNhbGVuZGFycy50aGFpPW59LHsiLi4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJVbW1BbFF1cmEiLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlVtbSBhbC1RdXJhIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIkFsLU11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIEFsLVRoYW5pIiwiSnVtYWRhIEFsLUF3d2FsIiwiSnVtYWRhIEFsLVRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1BaGFkIiwiWWF3bSBhbC1JdGhuYWluIiwiWWF3bSBhbC1UaGFsXHUwMTAxdGhcdTAxMDFcdTIwMTkiLCJZYXdtIGFsLUFyYmFcdTIwMThcdTAxMDFcdTIwMTkiLCJZYXdtIGFsLUtoYW1cdTAxMmJzIiwiWWF3bSBhbC1KdW1cdTIwMThhIiwiWWF3bSBhbC1TYWJ0Il0sZGF5TmFtZXNNaW46WyJBaCIsIkl0aCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiEwfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiAzNTU9PT10aGlzLmRheXNJblllYXIoZS55ZWFyKCkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTE7cjw9MTI7cisrKWUrPXRoaXMuZGF5c0luTW9udGgodCxyKTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKSxuPXIudG9KRCgpLTI0ZTUrLjUsYT0wLHM9MDtzPG8ubGVuZ3RoO3MrKyl7aWYob1tzXT5uKXJldHVybiBvW2FdLW9bYS0xXTthKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMioobi55ZWFyKCktMSkrbi5tb250aCgpLTE1MjkyO3JldHVybiBuLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIG49aS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuJiYodD1udWxsIT10LnllYXI/dC55ZWFyOnQsbj10Pj0xMjc2JiZ0PD0xNTAwKSxufSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9aS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksaS5jYWxlbmRhcnMudW1tYWxxdXJhPW47dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjU4OCwib2JqZWN0LWFzc2lnbiI6NDc5fV0sNTg4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMucmVnaW9uYWxPcHRpb25zPVtdLHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXT17aW52YWxpZENhbGVuZGFyOiJDYWxlbmRhciB7MH0gbm90IGZvdW5kIixpbnZhbGlkRGF0ZToiSW52YWxpZCB7MH0gZGF0ZSIsaW52YWxpZE1vbnRoOiJJbnZhbGlkIHswfSBtb250aCIsaW52YWxpZFllYXI6IkludmFsaWQgezB9IHllYXIiLGRpZmZlcmVudENhbGVuZGFyczoiQ2Fubm90IG1peCB7MH0gYW5kIHsxfSBkYXRlcyJ9LHRoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdLHRoaXMuY2FsZW5kYXJzPXt9LHRoaXMuX2xvY2FsQ2Fscz17fX1mdW5jdGlvbiBpKHQsZSxyLG4pe2lmKHRoaXMuX2NhbGVuZGFyPXQsdGhpcy5feWVhcj1lLHRoaXMuX21vbnRoPXIsdGhpcy5fZGF5PW4sMD09PXRoaXMuX2NhbGVuZGFyLl92YWxpZGF0ZUxldmVsJiYhdGhpcy5fY2FsZW5kYXIuaXNWYWxpZCh0aGlzLl95ZWFyLHRoaXMuX21vbnRoLHRoaXMuX2RheSkpdGhyb3coYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PSIiK3QsIjAwMDAwMCIuc3Vic3RyaW5nKDAsZS10Lmxlbmd0aCkrdH1mdW5jdGlvbiBvKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gcyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGw9dCgib2JqZWN0LWFzc2lnbiIpO2wobi5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dD0odHx8ImdyZWdvcmlhbiIpLnRvTG93ZXJDYXNlKCksZT1lfHwiIjt2YXIgcj10aGlzLl9sb2NhbENhbHNbdCsiLSIrZV07aWYoIXImJnRoaXMuY2FsZW5kYXJzW3RdJiYocj1uZXcgdGhpcy5jYWxlbmRhcnNbdF0oZSksdGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdPXIpLCFyKXRocm93KHRoaXMubG9jYWwuaW52YWxpZENhbGVuZGFyfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZENhbGVuZGFyKS5yZXBsYWNlKC9cezBcfS8sdCk7cmV0dXJuIHJ9LG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbj0obnVsbCE9dCYmdC55ZWFyP3QuY2FsZW5kYXIoKToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5pbnN0YW5jZShuLGkpOm4pfHx0aGlzLmluc3RhbmNlKCksbi5uZXdEYXRlKHQsZSxyKX0sc3Vic3RpdHV0ZURpZ2l0czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0iIixpPTA7cj4wOyl7dmFyIGE9ciUxMDtuPSgwPT09YT8iIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbChpLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LCJ5Iil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LCJtIil9LGRheTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZGF5OnRoaXMuc2V0KHQsImQiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3JldHVybiB0aGlzLl95ZWFyPXQsdGhpcy5fbW9udGg9ZSx0aGlzLl9kYXk9cix0aGlzfSxsZWFwWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKX0sZXBvY2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyl9LGZvcm1hdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0WWVhcih0aGlzKX0sbW9udGhPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKX0sZGF5c0luWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpfSxkYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKX0sd2Vla0RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpfSxleHRyYUluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXh0cmFJbmZvKHRoaXMpfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsdCxlKX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLHQsZSl9LGNvbXBhcmVUbzpmdW5jdGlvbih0KXtpZih0aGlzLl9jYWxlbmRhci5uYW1lIT09dC5fY2FsZW5kYXIubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0Ll9jYWxlbmRhci5sb2NhbC5uYW1lKTt2YXIgZT10aGlzLl95ZWFyIT09dC5feWVhcj90aGlzLl95ZWFyLXQuX3llYXI6dGhpcy5fbW9udGghPT10Ll9tb250aD90aGlzLm1vbnRoT2ZZZWFyKCktdC5tb250aE9mWWVhcigpOnRoaXMuX2RheS10Ll9kYXk7cmV0dXJuIDA9PT1lPzA6ZTwwPy0xOjF9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKHQpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZSh0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8iLSI6IiIpK2EoTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpKyItIithKHRoaXMubW9udGgoKSwyKSsiLSIrYSh0aGlzLmRheSgpLDIpfX0pLGwoby5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgaSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKS55ZWFyKCk8MD90aGlzLmxvY2FsLmVwb2Noc1swXTp0aGlzLmxvY2FsLmVwb2Noc1sxXX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD8iLSI6IiIpK2EoTWF0aC5hYnMoZS55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCkscn0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybihNYXRoLmZsb29yKHRoaXMudG9KRChuKSkrMikldGhpcy5kYXlzSW5XZWVrKCl9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywiZCI9PT1yfHwidyI9PT1yKXt2YXIgbj10LnRvSkQoKStlKigidyI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKygieSI9PT1yP2U6MCksbz10Lm1vbnRoT2ZZZWFyKCkrKCJtIj09PXI/ZTowKSxpPXQuZGF5KCk7InkiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKToibSI9PT1yJiYoIWZ1bmN0aW9uKHQpe2Zvcig7bzx0Lm1pbk1vbnRoOylhLS0sbys9dC5tb250aHNJblllYXIoYSk7Zm9yKHZhciBlPXQubW9udGhzSW5ZZWFyKGEpO28+ZS0xK3QubWluTW9udGg7KWErKyxvLT1lLGU9dC5tb250aHNJblllYXIoYSl9KHRoaXMpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTt2YXIgcz1bYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pLGldO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sc31jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodGhpcy5oYXNZZWFyWmVyb3x8InkiIT09biYmIm0iIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsInkiXSxtOlsxLHRoaXMubW9udGhzSW5ZZWFyKC0xKSwibSJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksImQiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksImQiXX1bbl0sYT1yPDA/LTE6MTtlPXRoaXMuX2FkZCh0LHIqaVswXSthKmlbMV0saVsyXSl9cmV0dXJuIHQuZGF0ZShlWzBdLGVbMV0sZVsyXSl9LHNldDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dmFyIG49InkiPT09cj9lOnQueWVhcigpLGk9Im0iPT09cj9lOnQubW9udGgoKSxhPSJkIj09PXI/ZTp0LmRheSgpO3JldHVybiJ5IiE9PXImJiJtIiE9PXJ8fChhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChuLGkpKSksdC5kYXRlKG4saSxhKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGVMZXZlbCsrO3ZhciBuPXRoaXMuaGFzWWVhclplcm98fDAhPT10O2lmKG4pe3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUsdGhpcy5taW5EYXkpO249ZT49dGhpcy5taW5Nb250aCYmZS10aGlzLm1pbk1vbnRoPHRoaXMubW9udGhzSW5ZZWFyKGkpJiZyPj10aGlzLm1pbkRheSYmci10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGkpfXJldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbn0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKDE9PT0rK3RoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLHMucHJvdG90eXBlPW5ldyBvLGwocy5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09MCYmKHQlMTAwIT0wfHx0JTQwMD09MCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPDMmJihlKz0xMix0LS0pO3ZhciBpPU1hdGguZmxvb3IodC8xMDApLGE9Mi1pK01hdGguZmxvb3IoaS80KTtyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrcithLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1NYXRoLmZsb29yKChlLTE4NjcyMTYuMjUpLzM2NTI0LjI1KTtyPWUrMStyLU1hdGguZmxvb3Ioci80KTt2YXIgbj1yKzE1MjQsaT1NYXRoLmZsb29yKChuLTEyMi4xKS8zNjUuMjUpLGE9TWF0aC5mbG9vcigzNjUuMjUqaSksbz1NYXRoLmZsb29yKChuLWEpLzMwLjYwMDEpLHM9bi1hLU1hdGguZmxvb3IoMzAuNjAwMSpvKSxsPW8tKG8+MTMuNT8xMzoxKSxjPWktKGw+Mi41PzQ3MTY6NDcxNSk7cmV0dXJuIGM8PTAmJmMtLSx0aGlzLm5ld0RhdGUoYyxsLHMpfSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBuO2MuY2RhdGU9aSxjLmJhc2VDYWxlbmRhcj1vLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1zfSx7Im9iamVjdC1hc3NpZ24iOjQ3OX1dLDU4OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKSxpPXQoIi4vbWFpbiIpO24oaS5yZWdpb25hbE9wdGlvbnNbIiJdLHtpbnZhbGlkQXJndW1lbnRzOiJJbnZhbGlkIGFyZ3VtZW50cyIsaW52YWxpZEZvcm1hdDoiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyIixtaXNzaW5nTnVtYmVyQXQ6Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIHswfSIsdW5rbm93bk5hbWVBdDoiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZExpdGVyYWxBdDoiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZFRleHQ6IkFkZGl0aW9uYWwgdGV4dCBmb3VuZCBhdCBlbmQifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1siIl0sCm4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQscj1yfHx7fTtmb3IodmFyIG49ci5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsYT1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLG89ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLHM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGw9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsYz0oci5jYWxjdWxhdGVXZWVrfHx0aGlzLmxvY2FsLmNhbGN1bGF0ZVdlZWssZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTt2K248dC5sZW5ndGgmJnQuY2hhckF0KHYrbik9PT1lOyluKys7cmV0dXJuIHYrPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSksdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0iIitlO2lmKGModCxuKSlmb3IoO2kubGVuZ3RoPHI7KWk9IjAiK2k7cmV0dXJuIGl9LGY9dGhpcyxoPXRoaXMubG9jYWwuZGlnaXRzLGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZoP2godCk6dH0scD0iIixtPSExLHY9MDt2PHQubGVuZ3RoO3YrKylpZihtKSInIiE9PXQuY2hhckF0KHYpfHxjKCInIik/cCs9dC5jaGFyQXQodik6bT0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh2KSl7Y2FzZSJkIjpwKz1kKHUoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6cCs9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGModCk/bltlXTpyW2VdfSgiRCIsZS5kYXlPZldlZWsoKSxuLGEpO2JyZWFrO2Nhc2UibyI6cCs9dSgibyIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlInciOnArPXUoInciLGUud2Vla09mWWVhcigpLDIpO2JyZWFrO2Nhc2UibSI6cCs9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8/by5jYWxsKGYsdCxjKCJtIikpOmQodSgibSIsdC5tb250aCgpLDIpKX0oZSk7YnJlYWs7Y2FzZSJNIjpwKz1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2wuY2FsbChmLHQpOmxbdC5tb250aCgpLWYubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MuY2FsbChmLHQpOnNbdC5tb250aCgpLWYubWluTW9udGhdfShlLGMoIk0iKSk7YnJlYWs7Y2FzZSJ5IjpwKz1jKCJ5IiwyKT9lLnllYXIoKTooZS55ZWFyKCklMTAwPDEwPyIwIjoiIikrZS55ZWFyKCklMTAwO2JyZWFrO2Nhc2UiWSI6YygiWSIsMikscCs9ZS5mb3JtYXRZZWFyKCk7YnJlYWs7Y2FzZSJKIjpwKz1lLnRvSkQoKTticmVhaztjYXNlIkAiOnArPShlLnRvSkQoKS10aGlzLlVOSVhfRVBPQ0gpKnRoaXMuU0VDU19QRVJfREFZO2JyZWFrO2Nhc2UiISI6cCs9KGUudG9KRCgpLXRoaXMuVElDS1NfRVBPQ0gpKnRoaXMuVElDS1NfUEVSX0RBWTticmVhaztjYXNlIiciOmMoIiciKT9wKz0iJyI6bT0hMDticmVhaztkZWZhdWx0OnArPXQuY2hhckF0KHYpfXJldHVybiBwfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PWUpdGhyb3cgaS5sb2NhbC5pbnZhbGlkQXJndW1lbnRzfHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZEFyZ3VtZW50cztpZigiIj09PShlPSJvYmplY3QiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZSsiIikpcmV0dXJuIG51bGw7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQscj1yfHx7fTt2YXIgbj1yLnNob3J0WWVhckN1dG9mZnx8dGhpcy5zaG9ydFllYXJDdXRvZmY7bj0ic3RyaW5nIiE9dHlwZW9mIG4/bjp0aGlzLnRvZGF5KCkueWVhcigpJTEwMCtwYXJzZUludChuLDEwKTtmb3IodmFyIGE9ci5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsbz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHM9ci5wYXJzZU1vbnRofHx0aGlzLmxvY2FsLnBhcnNlTW9udGgsbD1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsYz1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsdT1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxmPS0xLGg9LTEsZD0tMSxwPS0xLG09LTEsdj0hMSxnPSExLHk9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTtUK248dC5sZW5ndGgmJnQuY2hhckF0KFQrbik9PT1lOyluKys7cmV0dXJuIFQrPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSxiPWZ1bmN0aW9uKHQscil7dmFyIG49eSh0LHIpLGE9WzIsMyxuPzQ6MixuPzQ6MiwxMCwxMSwyMF1bIm95WUpAISIuaW5kZXhPZih0KSsxXSxvPW5ldyBSZWdFeHAoIl4tP1xcZHsxLCIrYSsifSIpLHM9ZS5zdWJzdHJpbmcoTSkubWF0Y2gobyk7aWYoIXMpdGhyb3coaS5sb2NhbC5taXNzaW5nTnVtYmVyQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5taXNzaW5nTnVtYmVyQXQpLnJlcGxhY2UoL1x7MFx9LyxNKTtyZXR1cm4gTSs9c1swXS5sZW5ndGgscGFyc2VJbnQoc1swXSwxMCl9LHg9dGhpcyxfPWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihNLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBNKz1vW3NdLmxlbmd0aCxzK3gubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLE0pfSx3PWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoTSkhPT10LmNoYXJBdChUKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sTSk7TSsrfSxNPTAsVD0wO1Q8dC5sZW5ndGg7VCsrKWlmKGcpIiciIT09dC5jaGFyQXQoVCl8fHkoIiciKT93KCk6Zz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChUKSl7Y2FzZSJkIjpwPWIoImQiKTticmVhaztjYXNlIkQiOl8oIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjptPWIoIm8iKTticmVhaztjYXNlInciOmIoInciKTticmVhaztjYXNlIm0iOmQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbCh4LGUuc3Vic3RyaW5nKE0pKTtyZXR1cm4gTSs9dC5sZW5ndGgsdH1yZXR1cm4gYigibSIpfSgpO2JyZWFrO2Nhc2UiTSI6ZD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB1KXt2YXIgdD15KCJNIik/dS5jYWxsKHgsZS5zdWJzdHJpbmcoTSkpOmMuY2FsbCh4LGUuc3Vic3RyaW5nKE0pKTtyZXR1cm4gTSs9dC5sZW5ndGgsdH1yZXR1cm4gXygiTSIsYyx1KX0oKTticmVhaztjYXNlInkiOnZhciBrPVQ7dj0heSgieSIsMiksVD1rLGg9YigieSIsMik7YnJlYWs7Y2FzZSJZIjpoPWIoIlkiLDIpO2JyZWFrO2Nhc2UiSiI6Zj1iKCJKIikrLjUsIi4iPT09ZS5jaGFyQXQoTSkmJihNKyssYigiSiIpKTticmVhaztjYXNlIkAiOmY9YigiQCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlIiEiOmY9YigiISIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2UiKiI6TT1lLmxlbmd0aDticmVhaztjYXNlIiciOnkoIiciKT93KCk6Zz0hMDticmVhaztkZWZhdWx0OncoKX1pZihNPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkVGV4dDtpZihoPT09LTE/aD10aGlzLnRvZGF5KCkueWVhcigpOmg8MTAwJiZ2JiYoaCs9bj09PS0xPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oaDw9bj8wOjEwMCkpLCJzdHJpbmciPT10eXBlb2YgZCYmKGQ9cy5jYWxsKHRoaXMsaCxkKSksbT4tMSl7ZD0xLHA9bTtmb3IodmFyIEE9dGhpcy5kYXlzSW5Nb250aChoLGQpO3A+QTtBPXRoaXMuZGF5c0luTW9udGgoaCxkKSlkKysscC09QX1yZXR1cm4gZj4tMT90aGlzLmZyb21KRChmKTp0aGlzLm5ld0RhdGUoaCxkLHApfSxkZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7ciYmIm9iamVjdCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLCJzdHJpbmciIT10eXBlb2YgbiYmKGk9bixuPSIiKTt2YXIgYT10aGlzO3JldHVybiBlPWU/ZS5uZXdEYXRlKCk6bnVsbCx0PW51bGw9PXQ/ZToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fXQ9dC50b0xvd2VyQ2FzZSgpO2Zvcih2YXIgZT0odC5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylccyooZHx3fG18eSk/L2cscz1vLmV4ZWModCk7czspZS5hZGQocGFyc2VJbnQoc1sxXSwxMCksc1syXXx8ImQiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6Im51bWJlciI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LSgxLzApP2U6YS50b2RheSgpLmFkZCh0LCJkIik6YS5uZXdEYXRlKHQpfX0pfSx7Ii4vbWFpbiI6NTg4LCJvYmplY3QtYXNzaWduIjo0Nzl9XSw1OTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iix7b2Zmc2V0OlsxXSxhcnJheTowfSwic2NhbGFyIiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7XG4gICAgICAgIHZhciBfaW5saW5lXzFfZGEgPSBfaW5saW5lXzFfYXJnMF8gLSBfaW5saW5lXzFfYXJnM19cbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYiA9IF9pbmxpbmVfMV9hcmcxXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICBpZigoX2lubGluZV8xX2RhID49IDApICE9PSAoX2lubGluZV8xX2RiID49IDApKSB7XG4gICAgICAgICAgX2lubGluZV8xX2FyZzJfLnB1c2goX2lubGluZV8xX2FyZzRfWzBdICsgMC41ICsgMC41ICogKF9pbmxpbmVfMV9kYSArIF9pbmxpbmVfMV9kYikgLyAoX2lubGluZV8xX2RhIC0gX2lubGluZV8xX2RiKSlcbiAgICAgICAgfVxuICAgICAgfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfZGEiLCJfaW5saW5lXzFfZGIiXX0sZnVuY05hbWU6Inplcm9Dcm9zc2luZ3MifSl9LHsiY3dpc2UtY29tcGlsZXIiOjEwOX1dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9W107cmV0dXJuIGU9K2V8fDAsaSh0LmhpKHQuc2hhcGVbMF0tMSkscixlKSxyfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4vbGliL3pjLWNvcmUiKX0seyIuL2xpYi96Yy1jb3JlIjo1OTB9XSw1OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9jb21tb25fZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1zPXN8fHt9LGw9bHx8e307dmFyIHU9YygidmlzaWJsZSIsIWwuaXRlbUlzTm90UGxhaW5PYmplY3QpLGY9YygiY2xpY2t0b3Nob3ciKTtpZighdSYmIWYpcmV0dXJuIGU7YSh0LGUscixjKTtmb3IodmFyIGg9ZS5zaG93YXJyb3csZD1bIngiLCJ5Il0scD1bLTEwLC0zMF0sbT17X2Z1bGxMYXlvdXQ6cn0sdj0wO3Y8Mjt2Kyspe3ZhciBnPWRbdl0seT1pLmNvZXJjZVJlZih0LGUsbSxnLCIiLCJwYXBlciIpO2lmKGkuY29lcmNlUG9zaXRpb24oZSxtLGMseSxnLC41KSxoKXt2YXIgYj0iYSIrZyx4PWkuY29lcmNlUmVmKHQsZSxtLGIsInBpeGVsIik7InBpeGVsIiE9PXgmJnghPT15JiYoeD1lW2JdPSJwaXhlbCIpO3ZhciBfPSJwaXhlbCI9PT14P3Bbdl06LjQ7aS5jb2VyY2VQb3NpdGlvbihlLG0sYyx4LGIsXyl9YyhnKyJhbmNob3IiKSxjKGcrInNoaWZ0Iil9aWYobi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksaCYmbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSxmKXt2YXIgdz1jKCJ4Y2xpY2siKSxNPWMoInljbGljayIpO2UuX3hjbGljaz12b2lkIDA9PT13P2UueDppLmNsZWFuUG9zaXRpb24odyxtLGUueHJlZiksZS5feWNsaWNrPXZvaWQgMD09PU0/ZS55OmkuY2xlYW5Qb3NpdGlvbihNLG0sZS55cmVmKX1yZXR1cm4gZX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4vYXR0cmlidXRlcyI6NTk0LCIuL2NvbW1vbl9kZWZhdWx0cyI6NTk3fV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1be3BhdGg6IiIsYmFja29mZjowfSx7cGF0aDoiTS0yLjQsLTNWM0wwLjYsMFoiLGJhY2tvZmY6LjZ9LHtwYXRoOiJNLTMuNywtMi41VjIuNUwxLjMsMFoiLGJhY2tvZmY6MS4zfSx7cGF0aDoiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWiIsYmFja29mZjoxLjU1fSx7cGF0aDoiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWiIsYmFja29mZjoxLjZ9LHtwYXRoOiJNLTQuNCwtMi4xTC0wLjYsLTAuMlYwLjJMLTQuNCwyLjFMLTQsM0wyLDBMLTQsLTNaIixiYWNrb2ZmOjJ9LHtwYXRoOiJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9LHtwYXRoOiJNMiwyVi0ySC0yVjJaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDU5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2Fycm93X3BhdGhzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImFubm90YXRpb24iLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sZm9udDppKHtlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIixjb2xvckVkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImNlbnRlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sYXJyb3djb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sc3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxheDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LGF4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0sYXlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsIm9ub2ZmIiwib25vdXQiXSxkZmx0OiExLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHljbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiYXJyYXlkcmF3In0sY2FwdHVyZWV2ZW50czp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn19fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3ODQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzLCIuL2Fycm93X3BhdGhzIjo1OTN9XSw1OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLG4saT1hLmdldEZyb21JZCh0LGUueHJlZiksbz1hLmdldEZyb21JZCh0LGUueXJlZikscz0zKmUuYXJyb3dzaXplKmUuYXJyb3d3aWR0aHx8MDtpJiZpLmF1dG9yYW5nZSYmKHI9cytlLnhzaGlmdCxuPXMtZS54c2hpZnQsZS5heHJlZj09PWUueHJlZj8oYS5leHBhbmQoaSxbaS5yMmMoZS54KV0se3BwYWRwbHVzOnIscHBhZG1pbnVzOm59KSxhLmV4cGFuZChpLFtpLnIyYyhlLmF4KV0se3BwYWRwbHVzOmUuX3hwYWRwbHVzLHBwYWRtaW51czplLl94cGFkbWludXN9KSk6YS5leHBhbmQoaSxbaS5yMmMoZS54KV0se3BwYWRwbHVzOk1hdGgubWF4KGUuX3hwYWRwbHVzLHIpLHBwYWRtaW51czpNYXRoLm1heChlLl94cGFkbWludXMsbil9KSksbyYmby5hdXRvcmFuZ2UmJihyPXMtZS55c2hpZnQsbj1zK2UueXNoaWZ0LGUuYXlyZWY9PT1lLnlyZWY/KGEuZXhwYW5kKG8sW28ucjJjKGUueSldLHtwcGFkcGx1czpyLHBwYWRtaW51czpufSksYS5leHBhbmQobyxbby5yMmMoZS5heSldLHtwcGFkcGx1czplLl95cGFkcGx1cyxwcGFkbWludXM6ZS5feXBhZG1pbnVzfSkpOmEuZXhwYW5kKG8sW28ucjJjKGUueSldLHtwcGFkcGx1czpNYXRoLm1heChlLl95cGFkcGx1cyxyKSxwcGFkbWludXM6TWF0aC5tYXgoZS5feXBhZG1pbnVzLG4pfSkpfSl9dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9kcmF3IikuZHJhdztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXt2YXIgcz17fTtyLmZvckVhY2goZnVuY3Rpb24odCl7c1t0LnhyZWZdPSEwLHNbdC55cmVmXT0hMH0pO2lmKGEubGlzdCh0KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXV0b3JhbmdlJiZzW3QuX2lkXX0pLmxlbmd0aClyZXR1cm4gaS5zeW5jT3JBc3luYyhbbyxuXSx0KX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL2RyYXciOjYwMH1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9YSh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuPWEodCxlKSxpPW4ub24sbz1uLm9mZi5jb25jYXQobi5leHBsaWNpdE9mZiksbD17fTtpZihpLmxlbmd0aHx8by5sZW5ndGgpe2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbFsiYW5ub3RhdGlvbnNbIitpW3JdKyJdLnZpc2libGUiXT0hMDtmb3Iocj0wO3I8by5sZW5ndGg7cisrKWxbImFubm90YXRpb25zWyIrb1tyXSsiXS52aXNpYmxlIl09ITE7cmV0dXJuIHMudXBkYXRlKHQse30sbCl9fWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxzLGwsYyx1LGY9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxoPVtdLGQ9W10scD1bXSxtPShlfHxbXSkubGVuZ3RoO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspaWYoaT1mW3JdLGE9aS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPG07bisrKWlmKHM9ZVtuXSxsPXMueGF4aXMsYz1zLnlheGlzLGwuX2lkPT09aS54cmVmJiZjLl9pZD09PWkueXJlZiYmbC5kMnIocy54KT09PW8oaS5feGNsaWNrLGwpJiZjLmQycihzLnkpPT09byhpLl95Y2xpY2ssYykpe3U9aS52aXNpYmxlPyJvbm91dCI9PT1hP2Q6cDpoLHUucHVzaChyKTticmVha31uPT09bSYmaS52aXNpYmxlJiYib25vdXQiPT09YSYmZC5wdXNoKHIpfXJldHVybntvbjpoLG9mZjpkLGV4cGxpY2l0T2ZmOnB9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4ibG9nIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX12YXIgcz10KCIuLi8uLi9wbG90bHkiKTtlLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93Om4sb25DbGljazppfX0seyIuLi8uLi9wbG90bHkiOjc3NH1dLDU5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2EoIm9wYWNpdHkiKTt2YXIgbz1hKCJiZ2NvbG9yIikscz1hKCJib3JkZXJjb2xvciIpLGw9aS5vcGFjaXR5KHMpO2EoImJvcmRlcnBhZCIpO3ZhciBjPWEoImJvcmRlcndpZHRoIiksdT1hKCJzaG93YXJyb3ciKTthKCJ0ZXh0Iix1PyIgIjoibmV3IHRleHQiKSxhKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoYSwiZm9udCIsci5mb250KSxhKCJ3aWR0aCIpLGEoImFsaWduIiksYSgiaGVpZ2h0IikmJmEoInZhbGlnbiIpLHUmJihhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3doZWFkIiksYSgiYXJyb3dzaXplIiksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIikpO3ZhciBmPWEoImhvdmVydGV4dCIpLGg9ci5ob3ZlcmxhYmVsfHx7fTtpZihmKXt2YXIgZD1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLGguYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSkscD1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixoLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KGQpKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpoLmZvbnQuc2l6ZSxjb2xvcjpoLmZvbnQuY29sb3J8fHB9KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWYpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vY29sb3IiOjYxMX1dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQpe3ZhciByPWNbdF0sbz1udWxsO289cz9pKHIsZS5yYW5nZSk6TWF0aC5wb3coMTAsciksbihvKXx8KG89bnVsbCksYSh1K3Qsbyl9ZT1lfHx7fTt2YXIgcz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLGw9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihzfHxsKWZvcih2YXIgYyx1LGY9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxoPWUuX2lkLmNoYXJBdCgwKSxkPTA7ZDxmLmxlbmd0aDtkKyspYz1mW2RdLHU9ImFubm90YXRpb25zWyIrZCsiXS4iLGNbaCsicmVmIl09PT1lLl9pZCYmbyhoKSxjWyJhIitoKyJyZWYiXT09PWUuX2lkJiZvKCJhIitoKX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6NzU5LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGk9dCgiLi9hbm5vdGF0aW9uX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7bih0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6aX0pfX0seyIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc3NiwiLi9hbm5vdGF0aW9uX2RlZmF1bHRzIjo1OTJ9XSw2MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZpKHQscik7cmV0dXJuIGwucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPXIuYW5ub3RhdGlvbnNbZV18fHt9O2EodCxuLGUsITEsdS5nZXRGcm9tSWQodCxuLnhyZWYpLHUuZ2V0RnJvbUlkKHQsbi55cmVmKSl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7ZnVuY3Rpb24gbChyKXtyZXR1cm4gci5jYWxsKGguZm9udCxGKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W2UuYWxpZ25dfHwibWlkZGxlIn0pLHAuY29udmVydFRvVHNwYW5zKHIsdCx1KSxyfWZ1bmN0aW9uIHUoKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuImF1dG8iPT09ZSYmKGU9dDwxLzM/ImxlZnQiOnQ+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19dmFyIG89ai5zZWxlY3RBbGwoImEiKTtpZigxPT09by5zaXplKCkmJm8udGV4dCgpPT09ai50ZXh0KCkpe0MuaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOm8uYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpvLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKHoubm9kZSgpKX12YXIgbD1DLnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksdT0hbC5lbXB0eSgpLGQ9aC5iQm94KCh1P2w6aikubm9kZSgpKSx5PWQud2lkdGgsTD1kLmhlaWdodCxEPWUud2lkdGh8fHksRj1lLmhlaWdodHx8TCxOPU1hdGgucm91bmQoRCsyKlApLEI9TWF0aC5yb3VuZChGKzIqUCk7ZS5fdz1ELGUuX2g9Rjtmb3IodmFyIFU9ITEsVj1bIngiLCJ5Il0sSD0wO0g8Vi5sZW5ndGg7SCsrKXt2YXIgcSxHLFksWCxXLFo9VltIXSxKPWVbWisicmVmIl18fFosSz1lWyJhIitaKyJyZWYiXSxRPXt4OmkseTphfVtaXSwkPShrKygieCI9PT1aPzA6LTkwKSkqTWF0aC5QSS8xODAsdHQ9TipNYXRoLmNvcygkKSxldD1CKk1hdGguc2luKCQpLHJ0PU1hdGguYWJzKHR0KStNYXRoLmFicyhldCksbnQ9ZVtaKyJhbmNob3IiXSxpdD1lW1orInNoaWZ0Il0qKCJ4Ij09PVo/MTotMSksYXQ9VFtaXTtpZihRKXt2YXIgb3Q9US5yMmZyYWN0aW9uKGVbWl0pO2lmKCh0Ll9kcmFnZ2luZ3x8IVEuYXV0b3JhbmdlKSYmKG90PDB8fG90PjEpJiYoSz09PUo/KChvdD1RLnIyZnJhY3Rpb24oZVsiYSIrWl0pKTwwfHxvdD4xKSYmKFU9ITApOlU9ITAsVSkpY29udGludWU7cT1RLl9vZmZzZXQrUS5yMnAoZVtaXSksWD0uNX1lbHNlIngiPT09Wj8oWT1lW1pdLHE9Xy5sK18udypZKTooWT0xLWVbWl0scT1fLnQrXy5oKlkpLFg9ZS5zaG93YXJyb3c/LjU6WTtpZihlLnNob3dhcnJvdyl7YXQuaGVhZD1xO3ZhciBzdD1lWyJhIitaXTtXPXR0KnIoLjUsZS54YW5jaG9yKS1ldCpyKC41LGUueWFuY2hvciksSz09PUo/KGF0LnRhaWw9US5fb2Zmc2V0K1EucjJwKHN0KSxHPVcpOihhdC50YWlsPXErc3QsRz1XK3N0KSxhdC50ZXh0PWF0LnRhaWwrVzt2YXIgbHQ9eFsieCI9PT1aPyJ3aWR0aCI6ImhlaWdodCJdO2lmKCJwYXBlciI9PT1KJiYoYXQuaGVhZD1jLmNvbnN0cmFpbihhdC5oZWFkLDEsbHQtMSkpLCJwaXhlbCI9PT1LKXt2YXIgY3Q9LU1hdGgubWF4KGF0LnRhaWwtMyxhdC50ZXh0KSx1dD1NYXRoLm1pbihhdC50YWlsKzMsYXQudGV4dCktbHQ7Y3Q+MD8oYXQudGFpbCs9Y3QsYXQudGV4dCs9Y3QpOnV0PjAmJihhdC50YWlsLT11dCxhdC50ZXh0LT11dCl9YXQudGFpbCs9aXQsYXQuaGVhZCs9aXR9ZWxzZSBXPXJ0KnIoWCxudCksRz1XLGF0LnRleHQ9cStXO2F0LnRleHQrPWl0LFcrPWl0LEcrPWl0LGVbIl8iK1orInBhZHBsdXMiXT1ydC8yK0csZVsiXyIrWisicGFkbWludXMiXT1ydC8yLUcsZVsiXyIrWisic2l6ZSJdPXJ0LGVbIl8iK1orInNoaWZ0Il09V31pZihVKXJldHVybiB2b2lkIEMucmVtb3ZlKCk7dmFyIGZ0PTAsaHQ9MDtpZigibGVmdCIhPT1lLmFsaWduJiYoZnQ9KEQteSkqKCJjZW50ZXIiPT09ZS5hbGlnbj8uNToxKSksInRvcCIhPT1lLnZhbGlnbiYmKGh0PShGLUwpKigibWlkZGxlIj09PWUudmFsaWduPy41OjEpKSx1KWwuc2VsZWN0KCJzdmciKS5hdHRyKHt4OlArZnQtMSx5OlAraHR9KS5jYWxsKGguc2V0Q2xpcFVybCxPP006bnVsbCk7ZWxzZXt2YXIgZHQ9UCtodC1kLnRvcCxwdD1QK2Z0LWQubGVmdDtqLmNhbGwocC5wb3NpdGlvblRleHQscHQsZHQpLmNhbGwoaC5zZXRDbGlwVXJsLE8/TTpudWxsKX1SLnNlbGVjdCgicmVjdCIpLmNhbGwoaC5zZXRSZWN0LFAsUCxELEYpLHouY2FsbChoLnNldFJlY3QsSS8yLEkvMixOLUksQi1JKSxDLmNhbGwoaC5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChULngudGV4dC1OLzIpLE1hdGgucm91bmQoVC55LnRleHQtQi8yKSksRS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK2srIiwiK1QueC50ZXh0KyIsIitULnkudGV4dCsiKSJ9KTt2YXIgbXQ9ZnVuY3Rpb24ocixvKXtBLnNlbGVjdEFsbCgiLmFubm90YXRpb24tYXJyb3ctZyIpLnJlbW92ZSgpO3ZhciBsPVQueC5oZWFkLHU9VC55LmhlYWQsZD1ULngudGFpbCtyLHA9VC55LnRhaWwrbyxtPVQueC50ZXh0K3IseT1ULnkudGV4dCtvLHg9Yy5yb3RhdGlvblhZTWF0cml4KGssbSx5KSxNPWMuYXBwbHkyRFRyYW5zZm9ybSh4KSxTPWMuYXBwbHkyRFRyYW5zZm9ybTIoeCksTD0rei5hdHRyKCJ3aWR0aCIpLEk9K3ouYXR0cigiaGVpZ2h0IiksRD1tLS41KkwsUD1EK0wsTz15LS41KkksUj1PK0ksRj1bW0QsTyxELFJdLFtELFIsUCxSXSxbUCxSLFAsT10sW1AsTyxELE9dXS5tYXAoUyk7aWYoIUYucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFjLnNlZ21lbnRzSW50ZXJzZWN0KGwsdSxsKzFlNix1KzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0sITEpKXtGLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Yy5zZWdtZW50c0ludGVyc2VjdChkLHAsbCx1LHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihkPWUueCxwPWUueSl9KTt2YXIgaj1lLmFycm93d2lkdGgsTj1lLmFycm93Y29sb3IsQj1BLmFwcGVuZCgiZyIpLnN0eWxlKHtvcGFjaXR5OmYub3BhY2l0eShOKX0pLmNsYXNzZWQoImFubm90YXRpb24tYXJyb3ctZyIsITApLFU9Qi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSIrZCsiLCIrcCsiTCIrbCsiLCIrdSkuc3R5bGUoInN0cm9rZS13aWR0aCIsaisicHgiKS5jYWxsKGYuc3Ryb2tlLGYucmdiKE4pKTtpZihnKFUsImVuZCIsZSksdy5hbm5vdGF0aW9uUG9zaXRpb24mJlUubm9kZSgpLnBhcmVudE5vZGUmJiFuKXt2YXIgVj1sLEg9dTtpZihlLnN0YW5kb2ZmKXt2YXIgcT1NYXRoLnNxcnQoTWF0aC5wb3cobC1kLDIpK01hdGgucG93KHUtcCwyKSk7Vis9ZS5zdGFuZG9mZiooZC1sKS9xLEgrPWUuc3RhbmRvZmYqKHAtdSkvcX12YXIgRyxZLFgsVz1CLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImFubm90YXRpb24tYXJyb3ciLCEwKS5jbGFzc2VkKCJhbm5kcmFnIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoZC1WKSsiLCIrKHAtSCksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitWKyIsIitIKyIpIn0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorNisicHgiKS5jYWxsKGYuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChmLmZpbGwsInJnYmEoMCwwLDAsMCkiKTt2LmluaXQoe2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1oLmdldFRyYW5zbGF0ZShDKTtZPXQueCxYPXQueSxHPXt9LGkmJmkuYXV0b3JhbmdlJiYoR1tpLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApLGEmJmEuYXV0b3JhbmdlJiYoR1thLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj1NKFksWCksbz1uWzBdK3Qscz1uWzFdK3I7Qy5jYWxsKGguc2V0VHJhbnNsYXRlLG8scyksR1tiKyIueCJdPWk/aS5wMnIoaS5yMnAoZS54KSt0KTplLngrdC9fLncsR1tiKyIueSJdPWE/YS5wMnIoYS5yMnAoZS55KStyKTplLnktci9fLmgsZS5heHJlZj09PWUueHJlZiYmKEdbYisiLmF4Il09aS5wMnIoaS5yMnAoZS5heCkrdCkpLGUuYXlyZWY9PT1lLnlyZWYmJihHW2IrIi5heSJdPWEucDJyKGEucjJwKGUuYXkpK3IpKSxCLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwiK3IrIikiKSxFLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIraysiLCIrbysiLCIrcysiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKGUpe2lmKGUpe3MucmVsYXlvdXQodCxHKTt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ciYmci5yZWRyYXcoci5zZWxlY3RlZE9iail9fX0pfX19O2lmKGUuc2hvd2Fycm93JiZtdCgwLDApLFMpe3ZhciB2dCxndDt2LmluaXQoe2VsZW1lbnQ6Qy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtndD1FLmF0dHIoInRyYW5zZm9ybSIpLHZ0PXt9fSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbz0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj92dFtiKyIuYXgiXT1pLnAycihpLnIycChlLmF4KSt0KTp2dFtiKyIuYXgiXT1lLmF4K3QsZS5heXJlZj09PWUueXJlZj92dFtiKyIuYXkiXT1hLnAycihhLnIycChlLmF5KStyKTp2dFtiKyIuYXkiXT1lLmF5K3IsbXQodCxyKTtlbHNle2lmKG4pcmV0dXJuO2lmKGkpdnRbYisiLngiXT1lLngrdC9pLl9tO2Vsc2V7dmFyIHM9ZS5feHNpemUvXy53LGw9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL18udy1zLzI7dnRbYisiLngiXT12LmFsaWduKGwrdC9fLncscywwLDEsZS54YW5jaG9yKX1pZihhKXZ0W2IrIi55Il09ZS55K3IvYS5fbTtlbHNle3ZhciBjPWUuX3lzaXplL18uaCx1PWUueS0oZS5feXNoaWZ0K2UueXNoaWZ0KS9fLmgtYy8yO3Z0W2IrIi55Il09di5hbGlnbih1LXIvXy5oLGMsMCwxLGUueWFuY2hvcil9aSYmYXx8KG89di5nZXRDdXJzb3IoaT8uNTp2dFtiKyIueCJdLGE/LjU6dnRbYisiLnkiXSxlLnhhbmNob3IsZS55YW5jaG9yKSl9RS5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3QrIiwiK3IrIikiK2d0fSksbShDLG8pfSxkb25lRm46ZnVuY3Rpb24oZSl7aWYobShDKSxlKXtzLnJlbGF5b3V0KHQsdnQpO3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtyJiZyLnJlZHJhdyhyLnNlbGVjdGVkT2JqKX19fSl9fXZhciB5LGIseD10Ll9mdWxsTGF5b3V0LF89dC5fZnVsbExheW91dC5fc2l6ZSx3PXQuX2NvbnRleHQuZWRpdHM7bj8oeT0iYW5ub3RhdGlvbi0iK24sYj1uKyIuYW5ub3RhdGlvbnNbIityKyJdIik6KHk9ImFubm90YXRpb24iLGI9ImFubm90YXRpb25zWyIrcisiXSIpLHguX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK3krJ1tkYXRhLWluZGV4PSInK3IrJyJdJykucmVtb3ZlKCk7dmFyIE09ImNsaXAiK3guX3VpZCsiX2FubiIrcjtpZighZS5faW5wdXR8fGUudmlzaWJsZT09PSExKXJldHVybiB2b2lkIG8uc2VsZWN0QWxsKCIjIitNKS5yZW1vdmUoKTt2YXIgVD17eDp7fSx5Ont9fSxrPStlLnRleHRhbmdsZXx8MCxBPXguX2luZm9sYXllci5hcHBlbmQoImciKS5jbGFzc2VkKHksITApLmF0dHIoImRhdGEtaW5kZXgiLFN0cmluZyhyKSkuc3R5bGUoIm9wYWNpdHkiLGUub3BhY2l0eSksRT1BLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dC1nIiwhMCksUz13W2Uuc2hvd2Fycm93PyJhbm5vdGF0aW9uVGFpbCI6ImFubm90YXRpb25Qb3NpdGlvbiJdLEw9ZS5jYXB0dXJlZXZlbnRzfHx3LmFubm90YXRpb25UZXh0fHxTLEM9RS5hcHBlbmQoImciKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLEw/ImFsbCI6bnVsbCkuY2FsbChtLCJkZWZhdWx0Iikub24oImNsaWNrIixmdW5jdGlvbigpe3QuX2RyYWdnaW5nPSExO3ZhciBpPXtpbmRleDpyLGFubm90YXRpb246ZS5faW5wdXQsZnVsbEFubm90YXRpb246ZSxldmVudDpvLmV2ZW50fTtuJiYoaS5zdWJwbG90SWQ9biksdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixpKX0pO2UuaG92ZXJ0ZXh0JiZDLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dmFyIHI9ZS5ob3ZlcmxhYmVsLG49ci5mb250LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC5sb25lSG92ZXIoe3gwOmkubGVmdC1hLmxlZnQseDE6aS5yaWdodC1hLmxlZnQseTooaS50b3AraS5ib3R0b20pLzItYS50b3AsdGV4dDplLmhvdmVydGV4dCxjb2xvcjpyLmJnY29sb3IsYm9yZGVyQ29sb3I6ci5ib3JkZXJjb2xvcixmb250RmFtaWx5Om4uZmFtaWx5LGZvbnRTaXplOm4uc2l6ZSxmb250Q29sb3I6bi5jb2xvcn0se2NvbnRhaW5lcjp4Ll9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjp4Ll9wYXBlci5ub2RlKCksZ2Q6dH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2QubG9uZVVuaG92ZXIoeC5faG92ZXJsYXllci5ub2RlKCkpfSk7dmFyIEk9ZS5ib3JkZXJ3aWR0aCxEPWUuYm9yZGVycGFkLFA9SStELHo9Qy5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJnIikuc3R5bGUoInN0cm9rZS13aWR0aCIsSSsicHgiKS5jYWxsKGYuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoZi5maWxsLGUuYmdjb2xvciksTz1lLndpZHRofHxlLmhlaWdodCxSPXguX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrTSkuZGF0YShPP1swXTpbXSk7Ui5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJhbm5jbGlwIiwhMCkuYXR0cigiaWQiLE0pLmFwcGVuZCgicmVjdCIpLFIuZXhpdCgpLnJlbW92ZSgpO3ZhciBGPWUuZm9udCxqPUMuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYW5ub3RhdGlvbi10ZXh0IiwhMCkudGV4dChlLnRleHQpO3cuYW5ub3RhdGlvblRleHQ/ai5jYWxsKHAubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpDLGdkOnR9KS5jYWxsKGwpLm9uKCJlZGl0IixmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwobCk7dmFyIG49e307bltiKyIudGV4dCJdPWUudGV4dCxpJiZpLmF1dG9yYW5nZSYmKG5baS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKSxhJiZhLmF1dG9yYW5nZSYmKG5bYS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKSxzLnJlbGF5b3V0KHQsbil9KTpqLmNhbGwobCl9dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL3Bsb3RseSIpLGw9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxmPXQoIi4uL2NvbG9yIiksaD10KCIuLi9kcmF3aW5nIiksZD10KCIuLi9meCIpLHA9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksdj10KCIuLi9kcmFnZWxlbWVudCIpLGc9dCgiLi9kcmF3X2Fycm93X2hlYWQiKTtlLmV4cG9ydHM9e2RyYXc6bixkcmF3T25lOmksZHJhd1JhdzphfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzUzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4uL2NvbG9yIjo2MTEsIi4uL2RyYWdlbGVtZW50Ijo2MzIsIi4uL2RyYXdpbmciOjYzNSwiLi4vZngiOjY1MiwiLi9kcmF3X2Fycm93X2hlYWQiOjYwMSxkMzoxMjF9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuL2Fycm93X3BhdGhzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBvKCl7dC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjBweCwxMDBweCIpfWZ1bmN0aW9uIHMoZSxhKXtkLnBhdGgmJihkLm5vUm90YXRlJiYoYT0wKSxuLnNlbGVjdChoLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmQucGF0aCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2UueCsiLCIrZS55KyIpIisoYT8icm90YXRlKCIrMTgwKmEvTWF0aC5QSSsiKSI6IiIpKyJzY2FsZSgiK3ArIikifSkuc3R5bGUoe2ZpbGw6aS5yZ2Ioci5hcnJvd2NvbG9yKSwic3Ryb2tlLXdpZHRoIjowfSkpfXZhciBsLGMsdSxmLGg9dC5ub2RlKCksZD1hW3IuYXJyb3doZWFkfHwwXSxwPShyLmFycm93d2lkdGh8fDEpKnIuYXJyb3dzaXplLG09ZS5pbmRleE9mKCJzdGFydCIpPj0wLHY9ZS5pbmRleE9mKCJlbmQiKT49MCxnPWQuYmFja29mZipwK3Iuc3RhbmRvZmY7aWYoImxpbmUiPT09aC5ub2RlTmFtZSl7bD17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0sYz17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHk9bC54LWMueCxiPWwueS1jLnk7aWYodT1NYXRoLmF0YW4yKGIseSksZj11K01hdGguUEksZyl7aWYoZypnPnkqeStiKmIpcmV0dXJuIHZvaWQgbygpO3ZhciB4PWcqTWF0aC5jb3ModSksXz1nKk1hdGguc2luKHUpO20mJihsLngtPXgsbC55LT1fLHQuYXR0cih7eDE6bC54LHkxOmwueX0pKSx2JiYoYy54Kz14LGMueSs9Xyx0LmF0dHIoe3gyOmMueCx5MjpjLnl9KSl9fWVsc2UgaWYoInBhdGgiPT09aC5ub2RlTmFtZSl7dmFyIHc9aC5nZXRUb3RhbExlbmd0aCgpLE09IiI7aWYodzxnKXJldHVybiB2b2lkIG8oKTtpZihtKXt2YXIgVD1oLmdldFBvaW50QXRMZW5ndGgoMCksaz1oLmdldFBvaW50QXRMZW5ndGgoLjEpO3U9TWF0aC5hdGFuMihULnktay55LFQueC1rLngpLGw9aC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKGcsdykpLGcmJihNPSIwcHgsIitnKyJweCwiKX1pZih2KXt2YXIgQT1oLmdldFBvaW50QXRMZW5ndGgodyksRT1oLmdldFBvaW50QXRMZW5ndGgody0uMSk7aWYoZj1NYXRoLmF0YW4yKEEueS1FLnksQS54LUUueCksYz1oLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCx3LWcpKSxnKXt2YXIgUz1NPzIqZzpnO00rPXctUysicHgsIit3KyJweCJ9fWVsc2UgTSYmKE0rPXcrInB4Iik7TSYmdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTSl9bSYmcyhsLHUpLHYmJnMoYyxmKX19LHsiLi4vY29sb3IiOjYxMSwiLi9hcnJvd19wYXRocyI6NTkzLGQzOjEyMX1dLDYwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKSxpPXQoIi4vY2xpY2siKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmkuaGFzQ2xpY2tUb1Nob3csb25DbGljazppLm9uQ2xpY2ssY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4vYXR0cmlidXRlcyI6NTk0LCIuL2NhbGNfYXV0b3JhbmdlIjo1OTUsIi4vY2xpY2siOjU5NiwiLi9jb252ZXJ0X2Nvb3JkcyI6NTk4LCIuL2RlZmF1bHRzIjo1OTksIi4vZHJhdyI6NjAwfV0sNjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9aSh7X2lzTGlua2VkVG9BcnJheToiYW5ub3RhdGlvbiIsdmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsYXJyb3dzaXplOm4uYXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6NTk0fV0sNjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dCxuPXIuZG9tYWluLG89ZS5mdWxsTGF5b3V0Ll9zaXplLHM9e3BkYXRhOm51bGwsdHlwZToibGluZWFyIixhdXRvcmFuZ2U6ITEscmFuZ2U6Wy0oMS8wKSwxLzBdfTt0Ll94YT17fSxpLmV4dGVuZEZsYXQodC5feGEscyksYS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PW8ubCtuLnhbMF0qby53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QucGRhdGFbMF0vdC5wZGF0YVszXSkqby53KihuLnhbMV0tbi54WzBdKX0sdC5feWE9e30saS5leHRlbmRGbGF0KHQuX3lhLHMpLGEuc2V0Q29udmVydCh0Ll95YSksdC5feWEuX29mZnNldD1vLnQrKDEtbi55WzFdKSpvLmgsdC5feWEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDEtdC5wZGF0YVsxXS90LnBkYXRhWzNdKSpvLmgqKG4ueVsxXS1uLnlbMF0pfX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dCxyPWUuYW5ub3RhdGlvbnMsaT0wO2k8ci5sZW5ndGg7aSsrKW4ocltpXSx0KTt0LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrdC5pZCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5fV0sNjA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixvKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxsLHIsbil9ZnVuY3Rpb24gdSh0KXt2YXIgbj10KyJheGlzIixpPXtfZnVsbExheW91dDp7fX07cmV0dXJuIGkuX2Z1bGxMYXlvdXRbbl09cltuXSxhLmNvZXJjZVBvc2l0aW9uKGUsaSxjLHQsdCwuNSl9cmV0dXJuIGMoInZpc2libGUiLCFvLml0ZW1Jc05vdFBsYWluT2JqZWN0KT8ocyh0LGUsbi5mdWxsTGF5b3V0LGMpLHUoIngiKSx1KCJ5IiksdSgieiIpLGkubm9uZU9yQWxsKHQsZSxbIngiLCJ5IiwieiJdKSxlLnhyZWY9IngiLGUueXJlZj0ieSIsZS56cmVmPSJ6IixjKCJ4YW5jaG9yIiksYygieWFuY2hvciIpLGMoInhzaGlmdCIpLGMoInlzaGlmdCIpLGUuc2hvd2Fycm93JiYoZS5heHJlZj0icGl4ZWwiLGUuYXlyZWY9InBpeGVsIixjKCJheCIsLTEwKSxjKCJheSIsLTMwKSxpLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pKSxlKTplfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOm4sZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiOjU5NywiLi9hdHRyaWJ1dGVzIjo2MDN9XSw2MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvZHJhdyIpLmRyYXdSYXcsaT10KCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiKSxhPVsieCIsInkiLCJ6Il07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dCxyPXQuZGF0YVNjYWxlLG89ZS5hbm5vdGF0aW9ucyxzPTA7czxvLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1vW3NdLGM9ITEsdT0wO3U8Mzt1Kyspe3ZhciBmPWFbdV0saD1sW2ZdLGQ9ZVtmKyJheGlzIl0scD1kLnIyZnJhY3Rpb24oaCk7aWYocDwwfHxwPjEpe2M9ITA7YnJlYWt9fWM/dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi0iK3QuaWQrJ1tkYXRhLWluZGV4PSInK3MrJyJdJykucmVtb3ZlKCk6KGwucGRhdGE9aSh0LmdscGxvdC5jYW1lcmFQYXJhbXMsW2UueGF4aXMucjJsKGwueCkqclswXSxlLnlheGlzLnIybChsLnkpKnJbMV0sZS56YXhpcy5yMmwobC56KSpyWzJdXSksbih0LmdyYXBoRGl2LGwscyx0LmlkLGwuX3hhLGwuX3lhKSl9fX0seyIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiOjgyNywiLi4vYW5ub3RhdGlvbnMvZHJhdyI6NjAwfV0sNjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29udmVydDp0KCIuL2NvbnZlcnQiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjYwMywiLi9jb252ZXJ0Ijo2MDQsIi4vZGVmYXVsdHMiOjYwNSwiLi9kcmF3Ijo2MDZ9XSw2MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjU3NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NTc1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo1NzYsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjU3Nywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NTc4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NTc5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo1ODAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NTgxLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NTgyLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo1ODMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo1ODQsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjU4NSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjU4Niwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NTg3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo1ODgsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjU4OX1dLDYwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG4sYSxvLHMsbCxjPU1hdGguZmxvb3IoKGUrLjA1KS9mKSt1LGg9aShyKS5mcm9tSkQoYyksZD0wOyhkPXQuaW5kZXhPZigiJSIsZCkpIT09LTE7KW49dC5jaGFyQXQoZCsxKSwiMCI9PT1ufHwiLSI9PT1ufHwiXyI9PT1uPyhvPTMsYT10LmNoYXJBdChkKzIpLCJfIj09PW4mJihuPSItIikpOihhPW4sbj0iMCIsbz0yKSxzPWJbYV0scz8obD1zPT09eT95OmguZm9ybWF0RGF0ZShzW25dKSx0PXQuc3Vic3RyKDAsZCkrbCt0LnN1YnN0cihkK28pLGQrPWwubGVuZ3RoKTpkKz1vO3JldHVybiB0fWZ1bmN0aW9uIGkodCl7dmFyIGU9eFt0XTtyZXR1cm4gZT9lOmU9eFt0XT1zLmluc3RhbmNlKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7fSxoLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGAiK3QrImAgZGF0ZSBkYXRhLiJ9dmFyIHM9dCgiLi9jYWxlbmRhcnMiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHU9Yy5FUE9DSEpELGY9Yy5PTkVEQVksaD17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKHMuY2FsZW5kYXJzKSxlZGl0VHlwZToiY2FsYyIsZGZsdDoiZ3JlZ29yaWFuIn0sZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT17fTtyZXR1cm4gaVtyXT1oLGwuY29lcmNlKHQsZSxpLHIsbil9LHA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspZCh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxtPXtjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LHY9e2NoaW5lc2U6IjIwMDAtMDEtMDIiLGNvcHRpYzoiMjAwMC0wMS0wMyIsZGlzY3dvcmxkOiIyMDAwLTAxLTAzIixldGhpb3BpYW46IjIwMDAtMDEtMDUiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMiIsanVsaWFuOiIyMDAwLTAxLTAzIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wNSIsbmVwYWxpOiIyMDAwLTAxLTA1IixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wNCIsdGhhaToiMjAwMC0wMS0wNCIsdW1tYWxxdXJhOiIxNDAwLTAxLTA2In0sZz17Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSx5PSIjIyIsYj17ZDp7MDoiZGQiLCItIjoiZCJ9LGU6ezA6ImQiLCItIjoiZCJ9LGE6ezA6IkQiLCItIjoiRCJ9LEE6ezA6IkREIiwiLSI6IkREIn0sajp7MDoib28iLCItIjoibyJ9LFc6ezA6Ind3IiwiLSI6IncifSxtOnswOiJtbSIsIi0iOiJtIn0sYjp7MDoiTSIsIi0iOiJNIn0sQjp7MDoiTU0iLCItIjoiTU0ifSx5OnswOiJ5eSIsIi0iOiJ5eSJ9LFk6ezA6Inl5eXkiLCItIjoieXl5eSJ9LFU6eSx3OnksYzp7MDoiRCBNIGQgJVggeXl5eSIsIi0iOiJEIE0gZCAlWCB5eXl5In0seDp7MDoibW0vZGQveXl5eSIsIi0iOiJtbS9kZC95eXl5In19LHg9e30sXz17eGNhbGVuZGFyOmEobygieCIpKX0sdz1sLmV4dGVuZEZsYXQoe30sXyx7eWNhbGVuZGFyOmEobygieSIpKX0pLE09bC5leHRlbmRGbGF0KHt9LHcse3pjYWxlbmRhcjphKG8oInoiKSl9KSxUPWEoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6dyxiYXI6dyxib3g6dyxoZWF0bWFwOncsY29udG91cjp3LGhpc3RvZ3JhbTp3LGhpc3RvZ3JhbTJkOncsaGlzdG9ncmFtMmRjb250b3VyOncsc2NhdHRlcjNkOk0sc3VyZmFjZTpNLG1lc2gzZDpNLHNjYXR0ZXJnbDp3LG9obGM6XyxjYW5kbGVzdGljazpffSxsYXlvdXQ6ewpjYWxlbmRhcjphKFsiU2V0cyB0aGUgZGVmYXVsdCBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBpbnRlcnByZXRpbmcgYW5kIiwiZGlzcGxheWluZyBkYXRlcyB0aHJvdWdob3V0IHRoZSBwbG90LiJdLmpvaW4oIiAiKSl9LHN1YnBsb3RzOnt4YXhpczp7Y2FsZW5kYXI6VH0seWF4aXM6e2NhbGVuZGFyOlR9LHNjZW5lOnt4YXhpczp7Y2FsZW5kYXI6VH0seWF4aXM6e2NhbGVuZGFyOlR9LHpheGlzOntjYWxlbmRhcjpUfX19LHRyYW5zZm9ybXM6e2ZpbHRlcjp7dmFsdWVjYWxlbmRhcjphKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLiJdLmpvaW4oIiAiKSksdGFyZ2V0Y2FsZW5kYXI6YShbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhbiIsImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlIiwiY29ycmVzcG9uZGluZyB0cmFjZSBhdHRyaWJ1dGUgKGVnIGB4Y2FsZW5kYXJgKSBpZiBpdCBleGlzdHMsIiwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLiJdLmpvaW4oIiAiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpoLGhhbmRsZURlZmF1bHRzOmQsaGFuZGxlVHJhY2VEZWZhdWx0czpwLENBTk9OSUNBTF9TVU5EQVk6dixDQU5PTklDQUxfVElDSzptLERGTFRSQU5HRTpnLGdldENhbDppLHdvcmxkQ2FsRm10Om59fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vLi4vbGliIjo3MzUsIi4vY2FsZW5kYXJzIjo2MDh9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZihhKHQpfHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoInJnYiIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxpPSJhIj09PWUuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWkmJjMhPT1uLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiB0O2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIHQ7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIHR9dmFyIHM9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBpPyJyZ2JhKCIrcysiLCAiK25bM10rIikiOiJyZ2IoIitzKyIpIn12YXIgaT10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89ZS5leHBvcnRzPXt9LHM9dCgiLi9hdHRyaWJ1dGVzIik7by5kZWZhdWx0cz1zLmRlZmF1bHRzO3ZhciBsPW8uZGVmYXVsdExpbmU9cy5kZWZhdWx0TGluZTtvLmxpZ2h0TGluZT1zLmxpZ2h0TGluZTt2YXIgYz1vLmJhY2tncm91bmQ9cy5iYWNrZ3JvdW5kO28udGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LG8ucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoaSh0KSl9LG8ub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9pKHQpLmdldEFscGhhKCk6MH0sby5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LG8uY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBpKHQpLnRvUmdiU3RyaW5nKCk7dmFyIG49aShlfHxjKS50b1JnYigpLGE9MT09PW4uYT9uOntyOjI1NSooMS1uLmEpK24ucipuLmEsZzoyNTUqKDEtbi5hKStuLmcqbi5hLGI6MjU1KigxLW4uYSkrbi5iKm4uYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBpKG8pLnRvUmdiU3RyaW5nKCl9LG8uY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkodCk7cmV0dXJuIDEhPT1uLmdldEFscGhhKCkmJihuPWkoby5jb21iaW5lKHQsYykpKSwobi5pc0RhcmsoKT9lP24ubGlnaHRlbihlKTpjOnI/bi5kYXJrZW4ocik6bCkudG9TdHJpbmcoKX0sby5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUpO3Quc3R5bGUoe3N0cm9rZTpvLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlKTt0LnN0eWxlKHtmaWxsOm8udGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsaSxhLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylpZihpPXNbZV0sYT10W2ldLCJjb2xvciI9PT1pLnN1YnN0cihpLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspYVtyXT1uKGFbcl0pO2Vsc2UgdFtpXT1uKGEpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09aS5zdWJzdHIoaS5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShhW3JdKSYmKGFbcl1bMV09bihhW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXt2YXIgbD1hWzBdO2lmKCFBcnJheS5pc0FycmF5KGwpJiZsJiYib2JqZWN0Ij09dHlwZW9mIGwpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylvLmNsZWFuKGFbcl0pfWVsc2UgYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZvLmNsZWFuKGEpfX19LHsiLi9hdHRyaWJ1dGVzIjo2MTAsImZhc3QtaXNudW1lcmljIjoxMzEsdGlueWNvbG9yMjo1NDJ9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt0aGlja25lc3Ntb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6InBpeGVscyJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMwfSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEuMDIsbWluOi0yLG1heDozfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjUsbWluOi0yLG1heDozfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUifSx5cGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTB9LG91dGxpbmVjb2xvcjpuLmxpbmVjb2xvcixvdXRsaW5ld2lkdGg6bi5saW5ld2lkdGgsYm9yZGVyY29sb3I6bi5saW5lY29sb3IsYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LHRpY2ttb2RlOm4udGlja21vZGUsbnRpY2tzOm4ubnRpY2tzLHRpY2swOm4udGljazAsZHRpY2s6bi5kdGljayx0aWNrdmFsczpuLnRpY2t2YWxzLHRpY2t0ZXh0Om4udGlja3RleHQsdGlja3M6YSh7fSxuLnRpY2tzLHtkZmx0OiIifSksdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiQ2xpY2sgdG8gZW50ZXIgY29sb3JzY2FsZSB0aXRsZSJ9LHRpdGxlZm9udDppKHt9KSx0aXRsZXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIn19LCJjb2xvcmJhcnMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzfV0sNjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxjLHMsdCxlKX12YXIgYz1lLmNvbG9yYmFyPXt9LHU9dC5jb2xvcmJhcnx8e307bCgidGhpY2tuZXNzIiwiZnJhY3Rpb24iPT09bCgidGhpY2tuZXNzbW9kZSIpPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApLGwoImxlbiIsImZyYWN0aW9uIj09PWwoImxlbm1vZGUiKT8xOnIuaGVpZ2h0LXIubWFyZ2luLnQtci5tYXJnaW4uYiksbCgieCIpLGwoInhhbmNob3IiKSxsKCJ4cGFkIiksbCgieSIpLGwoInlhbmNob3IiKSxsKCJ5cGFkIiksbi5ub25lT3JBbGwodSxjLFsieCIsInkiXSksbCgib3V0bGluZWNvbG9yIiksbCgib3V0bGluZXdpZHRoIiksbCgiYm9yZGVyY29sb3IiKSxsKCJib3JkZXJ3aWR0aCIpLGwoImJnY29sb3IiKSxpKHUsYyxsLCJsaW5lYXIiKSxvKHUsYyxsLCJsaW5lYXIiLHtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250LG5vSG92ZXI6ITB9KSxhKHUsYyxsLCJsaW5lYXIiLHtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250LG5vSG92ZXI6ITB9KSxsKCJ0aXRsZSIpLG4uY29lcmNlRm9udChsLCJ0aXRsZWZvbnQiLHIuZm9udCksbCgidGl0bGVzaWRlIil9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6Nzk3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo3OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3OTksIi4vYXR0cmlidXRlcyI6NjEyfV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9wbG90bHkiKSxvPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi8uLi9yZWdpc3RyeSIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4uL2RyYWdlbGVtZW50IiksdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxtPXQoIi4uL3RpdGxlcyIpLHY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxiPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLHg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksXz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiB1LmNvZXJjZShldCxydCx4LHQsZSl9ZnVuY3Rpb24gVCgpe2lmKFsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNLnRpdGxlc2lkZSkhPT0tMSl7dmFyIGU9bHQuc2VsZWN0KCIuY2J0aXRsZSIpLHI9ZS5zZWxlY3QoInRleHQiKSxhPVstTS5vdXRsaW5ld2lkdGgvMixNLm91dGxpbmV3aWR0aC8yXSxvPWUuc2VsZWN0KCIuaCIrcnQuX2lkKyJ0aXRsZS1tYXRoLWdyb3VwIikubm9kZSgpLHM9MTUuNjtpZihyLm5vZGUoKSYmKHM9cGFyc2VJbnQoci5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApKmcpLG8/KHV0PWQuYkJveChvKS5oZWlnaHQpPnMmJihhWzFdLT0odXQtcykvMik6ci5ub2RlKCkmJiFyLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIikmJih1dD1kLmJCb3goci5ub2RlKCkpLmhlaWdodCksdXQpe2lmKHV0Kz01LCJ0b3AiPT09TS50aXRsZXNpZGUpcnQuZG9tYWluWzFdLT11dC9TLmgsYVsxXSo9LTE7ZWxzZXtydC5kb21haW5bMF0rPXV0L1MuaDt2YXIgYz12LmxpbmVDb3VudChyKTthWzFdKz0oMS1jKSpzfWUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYSsiKSIpLHJ0LnNldFNjYWxlKCl9fWx0LnNlbGVjdEFsbCgiLmNiZmlsbHMsLmNibGluZXMsLmNiYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTWF0aC5yb3VuZChTLmgqKDEtcnQuZG9tYWluWzFdKSkrIikiKTt2YXIgZj1sdC5zZWxlY3QoIi5jYmZpbGxzIikuc2VsZWN0QWxsKCJyZWN0LmNiZmlsbCIpLmRhdGEoUCk7Zi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImNiZmlsbCIsITApLnN0eWxlKCJzdHJva2UiLCJub25lIiksZi5leGl0KCkucmVtb3ZlKCksZi5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzA9PT1lP0lbMF06KFBbZV0rUFtlLTFdKS8yLGU9PT1QLmxlbmd0aC0xP0lbMV06KFBbZV0rUFtlKzFdKS8yXS5tYXAocnQuYzJwKS5tYXAoTWF0aC5yb3VuZCk7ZSE9PVAubGVuZ3RoLTEmJihyWzFdKz1yWzFdPnJbMF0/MTotMSk7dmFyIGE9Tyh0KS5yZXBsYWNlKCJlLSIsIiIpLG89aShhKS50b0hleFN0cmluZygpO24uc2VsZWN0KHRoaXMpLmF0dHIoe3g6Six3aWR0aDpNYXRoLm1heChILDIpLHk6bi5taW4ociksaGVpZ2h0Ok1hdGgubWF4KG4ubWF4KHIpLW4ubWluKHIpLDIpLGZpbGw6b30pfSk7dmFyIGg9bHQuc2VsZWN0KCIuY2JsaW5lcyIpLnNlbGVjdEFsbCgicGF0aC5jYmxpbmUiKS5kYXRhKE0ubGluZS5jb2xvciYmTS5saW5lLndpZHRoP0Q6W10pO3JldHVybiBoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2JsaW5lIiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitKKyIsIisoTWF0aC5yb3VuZChydC5jMnAodCkpK00ubGluZS53aWR0aC8yJTEpKyJoIitIKS5jYWxsKGQubGluZUdyb3VwU3R5bGUsTS5saW5lLndpZHRoLHoodCksTS5saW5lLmRhc2gpfSkscnQuX2F4aXNsYXllci5zZWxlY3RBbGwoImcuIitydC5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpLHJ0Ll9wb3M9SitIKyhNLm91dGxpbmV3aWR0aHx8MCkvMi0oIm91dHNpZGUiPT09TS50aWNrcz8xOjApLHJ0LnNpZGU9InJpZ2h0Iix1LnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3JldHVybiBsLmRvVGlja3ModCxydCwhMCl9LGZ1bmN0aW9uKCl7aWYoWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKT09PS0xKXt2YXIgZT1ydC50aXRsZWZvbnQuc2l6ZSxyPXJ0Ll9vZmZzZXQrcnQuX2xlbmd0aC8yLGk9Uy5sKyhydC5wb3NpdGlvbnx8MCkqUy53KygicmlnaHQiPT09cnQuc2lkZT8xMCtlKihydC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSoocnQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO2soImgiK3J0Ll9pZCsidGl0bGUiLHthdm9pZDp7c2VsZWN0aW9uOm4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy4iK3J0Ll9pZCsidGljayIpLHNpZGU6TS50aXRsZXNpZGUsb2Zmc2V0TGVmdDpTLmwsb2Zmc2V0VG9wOlMudCxtYXhTaGlmdDpFLndpZHRofSxhdHRyaWJ1dGVzOnt4OmkseTpyLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX1dKX1mdW5jdGlvbiBrKGUscil7dmFyIG4saT13KCk7bj1zLnRyYWNlSXMoaSwibWFya2VyQ29sb3JzY2FsZSIpPyJtYXJrZXIuY29sb3JiYXIudGl0bGUiOiJjb2xvcmJhci50aXRsZSI7dmFyIGE9e3Byb3BDb250YWluZXI6cnQscHJvcE5hbWU6bix0cmFjZUluZGV4OmkuaW5kZXgsZGZsdE5hbWU6ImNvbG9yc2NhbGUiLGNvbnRhaW5lckdyb3VwOmx0LnNlbGVjdCgiLmNidGl0bGUiKX0sbz0iaCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKToiaCIrZTtsdC5zZWxlY3RBbGwoIi4iK28rIiwuIitvKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLG0uZHJhdyh0LGUsZihhLHJ8fHt9KSl9ZnVuY3Rpb24gQSgpe3ZhciByPUgrTS5vdXRsaW5ld2lkdGgvMitkLmJCb3gocnQuX2F4aXNsYXllci5ub2RlKCkpLndpZHRoO2lmKEI9Y3Quc2VsZWN0KCJ0ZXh0IiksQi5ub2RlKCkmJiFCLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIikpe3ZhciBuLGk9Y3Quc2VsZWN0KCIuaCIrcnQuX2lkKyJ0aXRsZS1tYXRoLWdyb3VwIikubm9kZSgpO249aSYmWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSE9PS0xP2QuYkJveChpKS53aWR0aDpkLmJCb3goY3Qubm9kZSgpKS5yaWdodC1KLVMubCxyPU1hdGgubWF4KHIsbil9dmFyIGE9MipNLnhwYWQrcitNLmJvcmRlcndpZHRoK00ub3V0bGluZXdpZHRoLzIscz0kLXR0O2x0LnNlbGVjdCgiLmNiYmciKS5hdHRyKHt4OkotTS54cGFkLShNLmJvcmRlcndpZHRoK00ub3V0bGluZXdpZHRoKS8yLHk6dHQtVyx3aWR0aDpNYXRoLm1heChhLDIpLGhlaWdodDpNYXRoLm1heChzKzIqVywyKX0pLmNhbGwocC5maWxsLE0uYmdjb2xvcikuY2FsbChwLnN0cm9rZSxNLmJvcmRlcmNvbG9yKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6TS5ib3JkZXJ3aWR0aH0pLGx0LnNlbGVjdEFsbCgiLmNib3V0bGluZSIpLmF0dHIoe3g6Six5OnR0K00ueXBhZCsoInRvcCI9PT1NLnRpdGxlc2lkZT91dDowKSx3aWR0aDpNYXRoLm1heChILDIpLGhlaWdodDpNYXRoLm1heChzLTIqTS55cGFkLXV0LDIpfSkuY2FsbChwLnN0cm9rZSxNLm91dGxpbmVjb2xvcikuc3R5bGUoe2ZpbGw6Ik5vbmUiLCJzdHJva2Utd2lkdGgiOk0ub3V0bGluZXdpZHRofSk7dmFyIGw9KHtjZW50ZXI6LjUscmlnaHQ6MX1bTS54YW5jaG9yXXx8MCkqYTtsdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoUy5sLWwpKyIsIitTLnQrIikiKSxvLmF1dG9NYXJnaW4odCxlLHt4Ok0ueCx5Ok0ueSxsOmEqKHtyaWdodDoxLGNlbnRlcjouNX1bTS54YW5jaG9yXXx8MCkscjphKih7bGVmdDoxLGNlbnRlcjouNX1bTS54YW5jaG9yXXx8MCksdDpzKih7Ym90dG9tOjEsbWlkZGxlOi41fVtNLnlhbmNob3JdfHwwKSxiOnMqKHt0b3A6MSxtaWRkbGU6LjV9W00ueWFuY2hvcl18fDApfSl9dmFyIEU9dC5fZnVsbExheW91dCxTPUUuX3NpemU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE0uZmlsbGNvbG9yJiYiZnVuY3Rpb24iIT10eXBlb2YgTS5saW5lLmNvbG9yKXJldHVybiB2b2lkIEUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitlKS5yZW1vdmUoKTt2YXIgTCxDLEk9bi5leHRlbnQoKCJmdW5jdGlvbiI9PXR5cGVvZiBNLmZpbGxjb2xvcj9NLmZpbGxjb2xvcjpNLmxpbmUuY29sb3IpLmRvbWFpbigpKSxEPVtdLFA9W10sej0iZnVuY3Rpb24iPT10eXBlb2YgTS5saW5lLmNvbG9yP00ubGluZS5jb2xvcjpmdW5jdGlvbigpe3JldHVybiBNLmxpbmUuY29sb3J9LE89ImZ1bmN0aW9uIj09dHlwZW9mIE0uZmlsbGNvbG9yP00uZmlsbGNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIE0uZmlsbGNvbG9yfSxSPU0ubGV2ZWxzLmVuZCtNLmxldmVscy5zaXplLzEwMCxGPU0ubGV2ZWxzLnNpemUsaj0xLjAwMSpJWzBdLS4wMDEqSVsxXSxOPTEuMDAxKklbMV0tLjAwMSpJWzBdO2ZvcihDPTA7QzwxZTUmJihMPU0ubGV2ZWxzLnN0YXJ0K0MqRiwhKEY+MD9MPj1SOkw8PVIpKTtDKyspTD5qJiZMPE4mJkQucHVzaChMKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTS5maWxsY29sb3IpaWYoTS5maWxsbGV2ZWxzKWZvcihSPU0uZmlsbGxldmVscy5lbmQrTS5maWxsbGV2ZWxzLnNpemUvMTAwLEY9TS5maWxsbGV2ZWxzLnNpemUsQz0wO0M8MWU1JiYoTD1NLmZpbGxsZXZlbHMuc3RhcnQrQypGLCEoRj4wP0w+PVI6TDw9UikpO0MrKylMPklbMF0mJkw8SVsxXSYmUC5wdXNoKEwpO2Vsc2UgUD1ELm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC1NLmxldmVscy5zaXplLzJ9KSxQLnB1c2goUFtQLmxlbmd0aC0xXStNLmxldmVscy5zaXplKTtlbHNlIE0uZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIE0uZmlsbGNvbG9yJiYoUD1bMF0pO00ubGV2ZWxzLnNpemU8MCYmKEQucmV2ZXJzZSgpLFAucmV2ZXJzZSgpKTt2YXIgQixVPUUuaGVpZ2h0LUUubWFyZ2luLnQtRS5tYXJnaW4uYixWPUUud2lkdGgtRS5tYXJnaW4ubC1FLm1hcmdpbi5yLEg9TWF0aC5yb3VuZChNLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PU0udGhpY2tuZXNzbW9kZT9WOjEpKSxxPUgvUy53LEc9TWF0aC5yb3VuZChNLmxlbiooImZyYWN0aW9uIj09PU0ubGVubW9kZT9VOjEpKSxZPUcvUy5oLFg9TS54cGFkL1MudyxXPShNLmJvcmRlcndpZHRoK00ub3V0bGluZXdpZHRoKS8yLFo9TS55cGFkL1MuaCxKPU1hdGgucm91bmQoTS54KlMudytNLnhwYWQpLEs9TS54LXEqKHttaWRkbGU6LjUscmlnaHQ6MX1bTS54YW5jaG9yXXx8MCksUT1NLnkrWSooKHt0b3A6LS41LGJvdHRvbTouNX1bTS55YW5jaG9yXXx8MCktLjUpLCQ9TWF0aC5yb3VuZChTLmgqKDEtUSkpLHR0PSQtRyxldD17dHlwZToibGluZWFyIixyYW5nZTpJLHRpY2ttb2RlOk0udGlja21vZGUsbnRpY2tzOk0ubnRpY2tzLHRpY2swOk0udGljazAsZHRpY2s6TS5kdGljayx0aWNrdmFsczpNLnRpY2t2YWxzLHRpY2t0ZXh0Ok0udGlja3RleHQsdGlja3M6TS50aWNrcyx0aWNrbGVuOk0udGlja2xlbix0aWNrd2lkdGg6TS50aWNrd2lkdGgsdGlja2NvbG9yOk0udGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOk0uc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6TS50aWNrZm9udCx0aWNrYW5nbGU6TS50aWNrYW5nbGUsdGlja2Zvcm1hdDpNLnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6TS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczpNLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDpNLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDpNLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6TS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Ok0uc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDpNLnRpY2tzdWZmaXgsdGl0bGU6TS50aXRsZSx0aXRsZWZvbnQ6TS50aXRsZWZvbnQsc2hvd2xpbmU6ITAsYW5jaG9yOiJmcmVlIixwb3NpdGlvbjoxfSxydD17dHlwZToibGluZWFyIixfaWQ6InkiK2V9LG50PXtsZXR0ZXI6InkiLGZvbnQ6RS5mb250LG5vSG92ZXI6ITAsY2FsZW5kYXI6RS5jYWxlbmRhcn07aWYoeShldCxydCxfLG50LEUpLGIoZXQscnQsXyxudCkscnQucG9zaXRpb249TS54K1grcSxyLmF4aXM9cnQsWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSE9PS0xJiYocnQudGl0bGVzaWRlPU0udGl0bGVzaWRlLHJ0LnRpdGxleD1NLngrWCxydC50aXRsZXk9USsoInRvcCI9PT1NLnRpdGxlc2lkZT9ZLVo6WikpLE0ubGluZS5jb2xvciYmImF1dG8iPT09TS50aWNrbW9kZSl7cnQudGlja21vZGU9ImxpbmVhciIscnQudGljazA9TS5sZXZlbHMuc3RhcnQ7dmFyIGl0PU0ubGV2ZWxzLnNpemUsYXQ9dS5jb25zdHJhaW4oKCQtdHQpLzUwLDQsMTUpKzEsb3Q9KElbMV0tSVswXSkvKChNLm50aWNrc3x8YXQpKml0KTtpZihvdD4xKXt2YXIgc3Q9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhvdCkvTWF0aC5MTjEwKSk7aXQqPXN0KnUucm91bmRVcChvdC9zdCxbMiw1LDEwXSksKE1hdGguYWJzKE0ubGV2ZWxzLnN0YXJ0KS9NLmxldmVscy5zaXplKzFlLTYpJTE8MmUtNiYmKHJ0LnRpY2swPTApfXJ0LmR0aWNrPWl0fXJ0LmRvbWFpbj1bUStaLFErWS1aXSxydC5zZXRTY2FsZSgpO3ZhciBsdD1FLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrZSkuZGF0YShbMF0pO2x0LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLCEwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJjYmJnIiwhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKCJjYmZpbGxzIiwhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKCJjYmxpbmVzIiwhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKCJjYmF4aXMiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2J0aXRsZXVuc2hpZnQiLCEwKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjYnRpdGxlIiwhMCksdC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJjYm91dGxpbmUiLCEwKSx0LnNlbGVjdCgiLmNidGl0bGUiKS5kYXR1bSgwKX0pLGx0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK01hdGgucm91bmQoUy5sKSsiLCIrTWF0aC5yb3VuZChTLnQpKyIpIik7dmFyIGN0PWx0LnNlbGVjdCgiLmNidGl0bGV1bnNoaWZ0IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0iK01hdGgucm91bmQoUy5sKSsiLC0iK01hdGgucm91bmQoUy50KSsiKSIpO3J0Ll9heGlzbGF5ZXI9bHQuc2VsZWN0KCIuY2JheGlzIik7dmFyIHV0PTA7aWYoWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSE9PS0xKXt2YXIgZnQsaHQ9Uy5sKyhNLngrWCkqUy53LGR0PXJ0LnRpdGxlZm9udC5zaXplO2Z0PSJ0b3AiPT09TS50aXRsZXNpZGU/KDEtKFErWS1aKSkqUy5oK1MudCszKy43NSpkdDooMS0oUStaKSkqUy5oK1MudC0zLS4yNSpkdCxrKHJ0Ll9pZCsidGl0bGUiLHthdHRyaWJ1dGVzOnt4Omh0LHk6ZnQsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfXZhciBwdD11LnN5bmNPckFzeW5jKFtvLnByZXZpb3VzUHJvbWlzZXMsVCxvLnByZXZpb3VzUHJvbWlzZXMsQV0sdCk7aWYocHQmJnB0LnRoZW4mJih0Ll9wcm9taXNlc3x8W10pLnB1c2gocHQpLHQuX2NvbnRleHQuZWRpdHMuY29sb3JiYXJQb3NpdGlvbil7dmFyIG10LHZ0LGd0O2MuaW5pdCh7ZWxlbWVudDpsdC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXttdD1sdC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKGx0KX0sbW92ZUZuOmZ1bmN0aW9uKHQsZSl7bHQuYXR0cigidHJhbnNmb3JtIixtdCsiIHRyYW5zbGF0ZSgiK3QrIiwiK2UrIikiKSx2dD1jLmFsaWduKEsrdC9TLncscSwwLDEsTS54YW5jaG9yKSxndD1jLmFsaWduKFEtZS9TLmgsWSwwLDEsTS55YW5jaG9yKTt2YXIgcj1jLmdldEN1cnNvcih2dCxndCxNLnhhbmNob3IsTS55YW5jaG9yKTtoKGx0LHIpfSxkb25lRm46ZnVuY3Rpb24oZSl7aChsdCksZSYmdm9pZCAwIT09dnQmJnZvaWQgMCE9PWd0JiZhLnJlc3R5bGUodCx7ImNvbG9yYmFyLngiOnZ0LCJjb2xvcmJhci55IjpndH0sdygpLmluZGV4KX19KX1yZXR1cm4gcHR9ZnVuY3Rpb24gdygpe3ZhciByLG4saT1lLnN1YnN0cigyKTtmb3Iocj0wO3I8dC5fZnVsbERhdGEubGVuZ3RoO3IrKylpZihuPXQuX2Z1bGxEYXRhW3JdLG4udWlkPT09aSlyZXR1cm4gbn12YXIgTT17fTtyZXR1cm4gT2JqZWN0LmtleXMoXykuZm9yRWFjaChmdW5jdGlvbih0KXtNW3RdPW51bGx9KSxNLmZpbGxjb2xvcj1udWxsLE0ubGluZT17Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sTS5sZXZlbHM9e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxNLmZpbGxsZXZlbHM9bnVsbCxPYmplY3Qua2V5cyhNKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE1bdF09dS5pc1BsYWluT2JqZWN0KE1bdF0pP3UuZXh0ZW5kRmxhdChNW3RdLGUpOmUscik6TVt0XX19KSxyLm9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHJbZV0mJnJbZV0odFtlXSl9KSxyfSxyLl9vcHRzPU0scn19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzA4LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NTMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjc4MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6NzkzLCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuLi9jb2xvciI6NjExLCIuLi9kcmFnZWxlbWVudCI6NjMyLCIuLi9kcmF3aW5nIjo2MzUsIi4uL3RpdGxlcyI6NzAxLCIuL2F0dHJpYnV0ZXMiOjYxMixkMzoxMjEsdGlueWNvbG9yMjo1NDJ9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5jb2xvcmJhcil9fSx7Ii4uLy4uL2xpYiI6NzM1fV0sNjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17emF1dG86e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7em1pbjp2b2lkIDAsem1heDp2b2lkIDB9fSx6bWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnt6YXV0bzohMX19LHptYXg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6e3phdXRvOiExfX0sY29sb3JzY2FsZTp7dmFsVHlwZToiY29sb3JzY2FsZSIsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSxhdXRvY29sb3JzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LHJldmVyc2VzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHNob3dzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDYxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2NhbGVzIiksYT10KCIuL2ZsaXBfc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbDtyPyhzPW4ubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKSxsPW4ubmVzdGVkUHJvcGVydHkodC5faW5wdXQscikuZ2V0KCkpOihzPXQsbD10Ll9pbnB1dCk7dmFyIGM9bysiYXV0byIsdT1vKyJtaW4iLGY9bysibWF4IixoPXNbY10sZD1zW3VdLHA9c1tmXSxtPXMuY29sb3JzY2FsZTtoPT09ITEmJnZvaWQgMCE9PWR8fChkPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSxoPT09ITEmJnZvaWQgMCE9PXB8fChwPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKSxkPT09cCYmKGQtPS41LHArPS41KSxzW3VdPWQsc1tmXT1wLGxbdV09ZCxsW2ZdPXAsbFtjXT1oIT09ITF8fHZvaWQgMD09PWQmJnZvaWQgMD09PXAscy5hdXRvY29sb3JzY2FsZSYmKG09ZCpwPDA/aS5SZEJ1OmQ+PTA/aS5SZWRzOmkuQmx1ZXMsbC5jb2xvcnNjYWxlPW0scy5yZXZlcnNlc2NhbGUmJihtPWEobSkpLHMuY29sb3JzY2FsZT1tKX19LHsiLi4vLi4vbGliIjo3MzUsIi4vZmxpcF9zY2FsZSI6NjIyLCIuL3NjYWxlcyI6NjI5fV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7dCgiLi9zY2FsZXMuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ZXx8InN0eWxlIn0sY29sb3JzY2FsZTppKHt9LG4uY29sb3JzY2FsZSx7fSksY2F1dG86aSh7fSxuLnphdXRvLHtpbXBsaWVkRWRpdHM6e2NtaW46dm9pZCAwLGNtYXg6dm9pZCAwfX0pLGNtYXg6aSh7fSxuLnptYXgse2VkaXRUeXBlOmV8fG4uem1heC5lZGl0VHlwZSxpbXBsaWVkRWRpdHM6e2NhdXRvOiExfX0pLGNtaW46aSh7fSxuLnptaW4se2VkaXRUeXBlOmV8fG4uem1pbi5lZGl0VHlwZSxpbXBsaWVkRWRpdHM6e2NhdXRvOiExfX0pLGF1dG9jb2xvcnNjYWxlOmkoe30sbi5hdXRvY29sb3JzY2FsZSx7ZGZsdDpyPT09ITE/cjpuLmF1dG9jb2xvcnNjYWxlLmRmbHR9KSxyZXZlcnNlc2NhbGU6aSh7fSxuLnJldmVyc2VzY2FsZSx7fSl9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4vYXR0cmlidXRlcyI6NjE2LCIuL3NjYWxlcy5qcyI6NjI5fV0sNjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIik7ZS5leHBvcnRzPW4uUmRCdX0seyIuL3NjYWxlcyI6NjI5fV0sNjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciIpLG89dCgiLi4vY29sb3JiYXIvZGVmYXVsdHMiKSxzPXQoIi4vaXNfdmFsaWRfc2NhbGUiKSxsPXQoIi4vZmxpcF9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjLHUpe3ZhciBmPXUucHJlZml4LGg9dS5jTGV0dGVyLGQ9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLHA9Zj9pLm5lc3RlZFByb3BlcnR5KHQsZCkuZ2V0KCl8fHt9OnQsbT1mP2kubmVzdGVkUHJvcGVydHkoZSxkKS5nZXQoKXx8e306ZSx2PXBbaCsibWluIl0sZz1wW2grIm1heCJdLHk9cC5jb2xvcnNjYWxlO2MoZitoKyJhdXRvIiwhKG4odikmJm4oZykmJnY8ZykpLGMoZitoKyJtaW4iKSxjKGYraCsibWF4Iik7dmFyIGI7dm9pZCAwIT09eSYmKGI9IXMoeSkpLGMoZisiYXV0b2NvbG9yc2NhbGUiLGIpO3ZhciB4PWMoZisiY29sb3JzY2FsZSIpO2lmKGMoZisicmV2ZXJzZXNjYWxlIikmJihtLmNvbG9yc2NhbGU9bCh4KSksIm1hcmtlci5saW5lLiIhPT1mKXt2YXIgXztmJiYoXz1hKHApKSxjKGYrInNob3dzY2FsZSIsXykmJm8ocCxtLHIpfX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjo2MTMsIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciI6NjE1LCIuL2ZsaXBfc2NhbGUiOjYyMiwiLi9pc192YWxpZF9zY2FsZSI6NjI2LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKXt2YXIgcz10W29dO2lbb109ZStzWzBdKihyLWUpLGFbb109c1sxXX1yZXR1cm57ZG9tYWluOmkscmFuZ2U6YX19fSx7fV0sNjIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPXItMSxhPTA7aT49MDtpLS0sYSsrKWU9dFtpXSxuW2FdPVsxLWVbMF0sZVsxXV07cmV0dXJuIG59fSx7fV0sNjIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2RlZmF1bHRfc2NhbGUiKSxhPXQoIi4vaXNfdmFsaWRfc2NhbGVfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dHJ5e3Q9blt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVybiBlfHwoZT1pKSx0Pygic3RyaW5nIj09dHlwZW9mIHQmJihyKCksInN0cmluZyI9PXR5cGVvZiB0JiZyKCkpLGEodCk/dDplKTplfX0seyIuL2RlZmF1bHRfc2NhbGUiOjYxOSwiLi9pc192YWxpZF9zY2FsZV9hcnJheSI6NjI3LCIuL3NjYWxlcyI6NjI5fV0sNjI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vaXNfdmFsaWRfc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2kubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8e306dCxvPXIuY29sb3Iscz0hMTtpZihBcnJheS5pc0FycmF5KG8pKWZvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKG4ob1tsXSkpe3M9ITA7YnJlYWt9cmV0dXJuIGkuaXNQbGFpbk9iamVjdChyKSYmKHN8fHIuc2hvd3NjYWxlPT09ITB8fG4oci5jbWluKSYmbihyLmNtYXgpfHxhKHIuY29sb3JzY2FsZSl8fGkuaXNQbGFpbk9iamVjdChyLmNvbG9yYmFyKSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2lzX3ZhbGlkX3NjYWxlIjo2MjYsImZhc3QtaXNudW1lcmljIjoxMzF9XSw2MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zY2FsZXM9dCgiLi9zY2FsZXMiKSxyLmRlZmF1bHRTY2FsZT10KCIuL2RlZmF1bHRfc2NhbGUiKSxyLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksci5oYW5kbGVEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksci5jYWxjPXQoIi4vY2FsYyIpLHIuaGFzQ29sb3JzY2FsZT10KCIuL2hhc19jb2xvcnNjYWxlIiksci5pc1ZhbGlkU2NhbGU9dCgiLi9pc192YWxpZF9zY2FsZSIpLHIuZ2V0U2NhbGU9dCgiLi9nZXRfc2NhbGUiKSxyLmZsaXBTY2FsZT10KCIuL2ZsaXBfc2NhbGUiKSxyLmV4dHJhY3RTY2FsZT10KCIuL2V4dHJhY3Rfc2NhbGUiKSxyLm1ha2VDb2xvclNjYWxlRnVuYz10KCIuL21ha2VfY29sb3Jfc2NhbGVfZnVuYyIpfSx7Ii4vYXR0cmlidXRlcyI6NjE2LCIuL2NhbGMiOjYxNywiLi9kZWZhdWx0X3NjYWxlIjo2MTksIi4vZGVmYXVsdHMiOjYyMCwiLi9leHRyYWN0X3NjYWxlIjo2MjEsIi4vZmxpcF9zY2FsZSI6NjIyLCIuL2dldF9zY2FsZSI6NjIzLCIuL2hhc19jb2xvcnNjYWxlIjo2MjQsIi4vaXNfdmFsaWRfc2NhbGUiOjYyNiwiLi9tYWtlX2NvbG9yX3NjYWxlX2Z1bmMiOjYyOCwiLi9zY2FsZXMiOjYyOX1dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcyIpLGk9dCgiLi9pc192YWxpZF9zY2FsZV9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09blt0XXx8aSh0KX19LHsiLi9pc192YWxpZF9zY2FsZV9hcnJheSI6NjI3LCIuL3NjYWxlcyI6NjI5fV0sNjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9fSx7dGlueWNvbG9yMjo1NDJ9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT17cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0WzNdfTtyZXR1cm4gYShlKS50b1JnYlN0cmluZygpfXZhciBpPXQoImQzIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixsPXQucmFuZ2UsYz1sLmxlbmd0aCx1PW5ldyBBcnJheShjKSxmPTA7ZjxjO2YrKyl7dmFyIGg9YShsW2ZdKS50b1JnYigpO3VbZl09W2gucixoLmcsaC5iLGguYV19dmFyIGQscD1pLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZSh1KS5jbGFtcCghMCksbT1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4gZD1tJiZ2P3A6bT9mdW5jdGlvbih0KXtyZXR1cm4gbihwKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gbyh0KT9wKHQpOmEodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIG8odCk/bihwKHQpKTphKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9LGQuZG9tYWluPXAuZG9tYWluLGQucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZH19LHsiLi4vY29sb3IiOjYxMSxkMzoxMjEsImZhc3QtaXNudW1lcmljIjoxMzEsdGlueWNvbG9yMjo1NDJ9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtHcmV5czpbWzAsInJnYigwLDAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxZbEduQnU6W1swLCJyZ2IoOCwyOSw4OCkiXSxbLjEyNSwicmdiKDM3LDUyLDE0OCkiXSxbLjI1LCJyZ2IoMzQsOTQsMTY4KSJdLFsuMzc1LCJyZ2IoMjksMTQ1LDE5MikiXSxbLjUsInJnYig2NSwxODIsMTk2KSJdLFsuNjI1LCJyZ2IoMTI3LDIwNSwxODcpIl0sWy43NSwicmdiKDE5OSwyMzMsMTgwKSJdLFsuODc1LCJyZ2IoMjM3LDI0OCwyMTcpIl0sWzEsInJnYigyNTUsMjU1LDIxNykiXV0sR3JlZW5zOltbMCwicmdiKDAsNjgsMjcpIl0sWy4xMjUsInJnYigwLDEwOSw0NCkiXSxbLjI1LCJyZ2IoMzUsMTM5LDY5KSJdLFsuMzc1LCJyZ2IoNjUsMTcxLDkzKSJdLFsuNSwicmdiKDExNiwxOTYsMTE4KSJdLFsuNjI1LCJyZ2IoMTYxLDIxNywxNTUpIl0sWy43NSwicmdiKDE5OSwyMzMsMTkyKSJdLFsuODc1LCJyZ2IoMjI5LDI0NSwyMjQpIl0sWzEsInJnYigyNDcsMjUyLDI0NSkiXV0sWWxPclJkOltbMCwicmdiKDEyOCwwLDM4KSJdLFsuMTI1LCJyZ2IoMTg5LDAsMzgpIl0sWy4yNSwicmdiKDIyNywyNiwyOCkiXSxbLjM3NSwicmdiKDI1Miw3OCw0MikiXSxbLjUsInJnYigyNTMsMTQxLDYwKSJdLFsuNjI1LCJyZ2IoMjU0LDE3OCw3NikiXSxbLjc1LCJyZ2IoMjU0LDIxNywxMTgpIl0sWy44NzUsInJnYigyNTUsMjM3LDE2MCkiXSxbMSwicmdiKDI1NSwyNTUsMjA0KSJdXSxCbHVlcmVkOltbMCwicmdiKDAsMCwyNTUpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSZEJ1OltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYigxMDYsMTM3LDI0NykiXSxbLjUsInJnYigxOTAsMTkwLDE5MCkiXSxbLjYsInJnYigyMjAsMTcwLDEzMikiXSxbLjcsInJnYigyMzAsMTQ1LDkwKSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxSZWRzOltbMCwicmdiKDIyMCwyMjAsMjIwKSJdLFsuMiwicmdiKDI0NSwxOTUsMTU3KSJdLFsuNCwicmdiKDI0NSwxNjAsMTA1KSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxCbHVlczpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoNDAsNjAsMTkwKSJdLFsuNSwicmdiKDcwLDEwMCwyNDUpIl0sWy42LCJyZ2IoOTAsMTIwLDI0NSkiXSxbLjcsInJnYigxMDYsMTM3LDI0NykiXSxbMSwicmdiKDIyMCwyMjAsMjIwKSJdXSxQaWNuaWM6W1swLCJyZ2IoMCwwLDI1NSkiXSxbLjEsInJnYig1MSwxNTMsMjU1KSJdLFsuMiwicmdiKDEwMiwyMDQsMjU1KSJdLFsuMywicmdiKDE1MywyMDQsMjU1KSJdLFsuNCwicmdiKDIwNCwyMDQsMjU1KSJdLFsuNSwicmdiKDI1NSwyNTUsMjU1KSJdLFsuNiwicmdiKDI1NSwyMDQsMjU1KSJdLFsuNywicmdiKDI1NSwxNTMsMjU1KSJdLFsuOCwicmdiKDI1NSwxMDIsMjA0KSJdLFsuOSwicmdiKDI1NSwxMDIsMTAyKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmFpbmJvdzpbWzAsInJnYigxNTAsMCw5MCkiXSxbLjEyNSwicmdiKDAsMCwyMDApIl0sWy4yNSwicmdiKDAsMjUsMjU1KSJdLFsuMzc1LCJyZ2IoMCwxNTIsMjU1KSJdLFsuNSwicmdiKDQ0LDI1NSwxNTApIl0sWy42MjUsInJnYigxNTEsMjU1LDApIl0sWy43NSwicmdiKDI1NSwyMzQsMCkiXSxbLjg3NSwicmdiKDI1NSwxMTEsMCkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFBvcnRsYW5kOltbMCwicmdiKDEyLDUxLDEzMSkiXSxbLjI1LCJyZ2IoMTAsMTM2LDE4NikiXSxbLjUsInJnYigyNDIsMjExLDU2KSJdLFsuNzUsInJnYigyNDIsMTQzLDU2KSJdLFsxLCJyZ2IoMjE3LDMwLDMwKSJdXSxKZXQ6W1swLCJyZ2IoMCwwLDEzMSkiXSxbLjEyNSwicmdiKDAsNjAsMTcwKSJdLFsuMzc1LCJyZ2IoNSwyNTUsMjU1KSJdLFsuNjI1LCJyZ2IoMjU1LDI1NSwwKSJdLFsuODc1LCJyZ2IoMjUwLDAsMCkiXSxbMSwicmdiKDEyOCwwLDApIl1dLEhvdDpbWzAsInJnYigwLDAsMCkiXSxbLjMsInJnYigyMzAsMCwwKSJdLFsuNiwicmdiKDI1NSwyMTAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxCbGFja2JvZHk6W1swLCJyZ2IoMCwwLDApIl0sWy4yLCJyZ2IoMjMwLDAsMCkiXSxbLjQsInJnYigyMzAsMjEwLDApIl0sWy43LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWzEsInJnYigxNjAsMjAwLDI1NSkiXV0sRWFydGg6W1swLCJyZ2IoMCwwLDEzMCkiXSxbLjEsInJnYigwLDE4MCwxODApIl0sWy4yLCJyZ2IoNDAsMjEwLDQwKSJdLFsuNCwicmdiKDIzMCwyMzAsNTApIl0sWy42LCJyZ2IoMTIwLDcwLDIwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEVsZWN0cmljOltbMCwicmdiKDAsMCwwKSJdLFsuMTUsInJnYigzMCwwLDEwMCkiXSxbLjQsInJnYigxMjAsMCwxMDApIl0sWy42LCJyZ2IoMTYwLDkwLDApIl0sWy44LCJyZ2IoMjMwLDIwMCwwKSJdLFsxLCJyZ2IoMjU1LDI1MCwyMjApIl1dLFZpcmlkaXM6W1swLCIjNDQwMTU0Il0sWy4wNjI3NDUwOTgwMzkyMTU2OSwiIzQ4MTg2YSJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsIiM0NzJkN2IiXSxbLjE4ODIzNTI5NDExNzY0NzA2LCIjNDI0MDg2Il0sWy4yNTA5ODAzOTIxNTY4NjI3NCwiIzNiNTI4YiJdLFsuMzEzNzI1NDkwMTk2MDc4NCwiIzMzNjM4ZCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSwiIzJjNzI4ZSJdLFsuNDM5MjE1Njg2Mjc0NTA5OCwiIzI2ODI4ZSJdLFsuNTAxOTYwNzg0MzEzNzI1NSwiIzIxOTE4YyJdLFsuNTY0NzA1ODgyMzUyOTQxMiwiIzFmYTA4OCJdLFsuNjI3NDUwOTgwMzkyMTU2OSwiIzI4YWU4MCJdLFsuNjkwMTk2MDc4NDMxMzcyNSwiIzNmYmM3MyJdLFsuNzUyOTQxMTc2NDcwNTg4MiwiIzVlYzk2MiJdLFsuODE1Njg2Mjc0NTA5ODAzOSwiIzg0ZDQ0YiJdLFsuODc4NDMxMzcyNTQ5MDE5NiwiI2FkZGMzMCJdLFsuOTQxMTc2NDcwNTg4MjM1MywiI2Q4ZTIxOSJdLFsxLCIjZmRlNzI1Il1dfX0se31dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0odC1yKS8obi1yKSxvPWErZS8obi1yKSxzPShhK28pLzI7cmV0dXJuImxlZnQiPT09aXx8ImJvdHRvbSI9PT1pP2E6ImNlbnRlciI9PT1pfHwibWlkZGxlIj09PWk/czoicmlnaHQiPT09aXx8InRvcCI9PT1pP286YTwyLzMtcz9hOm8+NC8zLXM/bzpzfX0se31dLDYzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbInN3LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIl0sWyJ3LXJlc2l6ZSIsIm1vdmUiLCJlLXJlc2l6ZSJdLFsibnctcmVzaXplIiwibi1yZXNpemUiLCJuZS1yZXNpemUiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PSJsZWZ0Ij09PXI/MDoiY2VudGVyIj09PXI/MToicmlnaHQiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9ImJvdHRvbSI9PT1hPzA6Im1pZGRsZSI9PT1hPzE6InRvcCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHsiLi4vLi4vbGliIjo3MzV9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJkcmFnY292ZXIiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249ImZpeGVkIixlLmxlZnQ9MCxlLnJpZ2h0PTAsZS50b3A9MCxlLmJvdHRvbT0wLGUuekluZGV4PTk5OTk5OTk5OSxlLmJhY2tncm91bmQ9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBpKHQpe3QuX2RyYWdnaW5nPSExLHQuX3JlcGxvdFBlbmRpbmcmJmwucGxvdCh0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBvKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfXZhciBvPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLHM9dCgiaGFzLWhvdmVyIiksbD10KCIuLi8uLi9wbG90bHkiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLGg9ZS5leHBvcnRzPXt9O2guYWxpZ249dCgiLi9hbGlnbiIpLGguZ2V0Q3Vyc29yPXQoIi4vY3Vyc29yIik7dmFyIGQ9dCgiLi91bmhvdmVyIik7aC51bmhvdmVyPWQud3JhcHBlZCxoLnVuaG92ZXJSYXc9ZC5yYXcsaC5pbml0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7aWYoIWUuYnV0dG9uc3x8MiE9PWUuYnV0dG9ucyl7eS5fZHJhZ2dlZD0hMSx5Ll9kcmFnZ2luZz0hMDt2YXIgaT1hKGUpO3JldHVybiBsPWlbMF0sZD1pWzFdLGc9ZS50YXJnZXQscD0obmV3IERhdGUpLmdldFRpbWUoKSxwLXkuX21vdXNlRG93blRpbWU8eD9iKz0xOihiPTEseS5fbW91c2VEb3duVGltZT1wKSx0LnByZXBGbiYmdC5wcmVwRm4oZSxsLGQpLHM/KHY9bigpLHYuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF8pLmN1cnNvcik6KHY9ZG9jdW1lbnQsbT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmN1cnNvcixkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF8pLmN1cnNvciksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixvKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvKSxjLnBhdXNlRXZlbnQoZSl9fWZ1bmN0aW9uIHIoZSl7dmFyIHI9YShlKSxuPXJbMF0tbCxpPXJbMV0tZCxvPXQubWluRHJhZ3x8dS5NSU5EUkFHO3JldHVybiBNYXRoLmFicyhuKTxvJiYobj0wKSxNYXRoLmFicyhpKTxvJiYoaT0wKSwobnx8aSkmJih5Ll9kcmFnZ2VkPSEwLGgudW5ob3Zlcih5KSksdC5tb3ZlRm4mJnQubW92ZUZuKG4saSx5Ll9kcmFnZ2VkKSxjLnBhdXNlRXZlbnQoZSl9ZnVuY3Rpb24gbyhlKXtpZihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLG8pLHM/Yy5yZW1vdmVFbGVtZW50KHYpOm0mJih2LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9bSxtPW51bGwpLCF5Ll9kcmFnZ2luZylyZXR1cm4gdm9pZCh5Ll9kcmFnZ2VkPSExKTtpZih5Ll9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS15Ll9tb3VzZURvd25UaW1lPngmJihiPU1hdGgubWF4KGItMSwxKSksdC5kb25lRm4mJnQuZG9uZUZuKHkuX2RyYWdnZWQsYixlKSwheS5fZHJhZ2dlZCl7dmFyIG47dHJ5e249bmV3IE1vdXNlRXZlbnQoImNsaWNrIixlKX1jYXRjaCh0KXt2YXIgbD1hKGUpO249ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksbi5pbml0TW91c2VFdmVudCgiY2xpY2siLGUuYnViYmxlcyxlLmNhbmNlbGFibGUsZS52aWV3LGUuZGV0YWlsLGUuc2NyZWVuWCxlLnNjcmVlblksbFswXSxsWzFdLGUuY3RybEtleSxlLmFsdEtleSxlLnNoaWZ0S2V5LGUubWV0YUtleSxlLmJ1dHRvbixlLnJlbGF0ZWRUYXJnZXQpfWcuZGlzcGF0Y2hFdmVudChuKX1yZXR1cm4gaSh5KSx5Ll9kcmFnZ2VkPSExLGMucGF1c2VFdmVudChlKX12YXIgbCxkLHAsbSx2LGcseT10LmdkLGI9MSx4PWYuREJMQ0xJQ0tERUxBWSxfPXQuZWxlbWVudDt5Ll9tb3VzZURvd25UaW1lfHwoeS5fbW91c2VEb3duVGltZT0wKSxfLnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIsXy5vbm1vdXNlZG93bj1lLF8ub250b3VjaHN0YXJ0PWV9LGguY292ZXJTbGlwPW59LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzEzLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjc4NCwiLi9hbGlnbiI6NjMwLCIuL2N1cnNvciI6NjMxLCIuL3VuaG92ZXIiOjYzMywiaGFzLWhvdmVyIjoyOTQsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDYxfV0sNjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxpPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGE9dCgiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiKSxvPXQoIi4uL2Z4L2NvbnN0YW50cyIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7dD1hKHQpLGkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiZuLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSk9PT0hMXx8KHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksdC5faG92ZXJkYXRhPXZvaWQgMCxlLnRhcmdldCYmaSYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7Ii4uLy4uL2xpYi9ldmVudHMiOjcyMywiLi4vLi4vbGliL2dldF9ncmFwaF9kaXYiOjczMCwiLi4vLi4vbGliL3Rocm90dGxlIjo3NTgsIi4uL2Z4L2NvbnN0YW50cyI6NjQ3fV0sNjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifX0se31dLDYzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7aWYoYy50cmFjZUlzKHIsInN5bWJvbHMiKSl7dmFyIGw9eShyKTtlLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3ZhciBlO2U9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09YS5zaXplPzM6Zy5pc0J1YmJsZShyKT9sKHQubXMpOihhLnNpemV8fDYpLzIsdC5tcmM9ZTt2YXIgbj1iLnN5bWJvbE51bWJlcih0Lm14fHxhLnN5bWJvbCl8fDAsaT1uJTEwMDtyZXR1cm4gdC5vbT1uJTIwMD49MTAwLGIuc3ltYm9sRnVuY3NbaV0oZSkrKG4+PTIwMD93OiIiKX0pLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4odC5tbysxfHxhLm9wYWNpdHkrMSktMX0pfXZhciBmLGgsZCxwPSExO2lmKHQuc28/KGQ9by5vdXRsaWVyd2lkdGgsaD1vLm91dGxpZXJjb2xvcixmPWEub3V0bGllcmNvbG9yKTooZD0odC5tbHcrMXx8by53aWR0aCsxfHwodC50cmFjZT90LnRyYWNlLm1hcmtlci5saW5lLndpZHRoOjApKzEpLTEsaD0ibWxjImluIHQ/dC5tbGNjPWkodC5tbGMpOkFycmF5LmlzQXJyYXkoby5jb2xvcik/dS5kZWZhdWx0TGluZTpvLmNvbG9yLEFycmF5LmlzQXJyYXkoYS5jb2xvcikmJihmPXUuZGVmYXVsdExpbmUscD0hMCksZj0ibWMiaW4gdD90Lm1jYz1uKHQubWMpOmEuY29sb3J8fCJyZ2JhKDAsMCwwLDApIiksdC5vbSllLmNhbGwodS5zdHJva2UsZikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOihkfHwxKSsicHgiLGZpbGw6Im5vbmUifSk7ZWxzZXtlLnN0eWxlKCJzdHJva2Utd2lkdGgiLGQrInB4Iik7dmFyIG09YS5ncmFkaWVudCx2PXQubWd0O2lmKHY/cD0hMDp2PW0mJm0udHlwZSx2JiYibm9uZSIhPT12KXt2YXIgeD10Lm1nYzt4P3A9ITA6eD1tLmNvbG9yO3ZhciBfPSJnIitzLl9mdWxsTGF5b3V0Ll91aWQrIi0iK3IudWlkO3AmJihfKz0iLSIrdC5pKSxlLmNhbGwoYi5ncmFkaWVudCxzLF8sdixmLHgpfWVsc2UgZS5jYWxsKHUuZmlsbCxmKTtkJiZlLmNhbGwodS5zdHJva2UsaCl9fWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coaSppK2EqYSxBLzIpLHU9TWF0aC5wb3cocypzK2wqbCxBLzIpLGY9KHUqdSppLWMqYypzKSpuLGg9KHUqdSphLWMqYypsKSpuLGQ9Myp1KihjK3UpLHA9MypjKihjK3UpO3JldHVybltbby5yb3VuZChlWzBdKyhkJiZmL2QpLDIpLG8ucm91bmQoZVsxXSsoZCYmaC9kKSwyKV0sW28ucm91bmQoZVswXS0ocCYmZi9wKSwyKSxvLnJvdW5kKGVbMV0tKHAmJmgvcCksMildXX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXVuZm9ybWF0dGVkIik7aWYobnVsbCE9PWUpcmV0dXJuIGUrdC5nZXRBdHRyaWJ1dGUoImRhdGEtbWF0aCIpK3QuZ2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIpK3QuZ2V0QXR0cmlidXRlKCJzdHlsZSIpfXZhciBvPXQoImQzIikscz10KCJmYXN0LWlzbnVtZXJpYyIpLGw9dCgidGlueWNvbG9yMiIpLGM9dCgiLi4vLi4vcmVnaXN0cnkiKSx1PXQoIi4uL2NvbG9yIiksZj10KCIuLi9jb2xvcnNjYWxlIiksaD10KCIuLi8uLi9saWIiKSxkPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx2PW0uTElORV9TUEFDSU5HLGc9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSx5PXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLGI9ZS5leHBvcnRzPXt9O2IuZm9udD1mdW5jdGlvbih0LGUscixuKXtoLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUpLHIrMSYmdC5zdHlsZSgiZm9udC1zaXplIixyKyJweCIpLG4mJnQuY2FsbCh1LmZpbGwsbil9LGIuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigieCIsZSkuYXR0cigieSIscil9LGIuc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ3aWR0aCIsZSkuYXR0cigiaGVpZ2h0IixyKX0sYi5zZXRSZWN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5jYWxsKGIuc2V0UG9zaXRpb24sZSxyKS5jYWxsKGIuc2V0U2l6ZSxuLGkpfSxiLnRyYW5zbGF0ZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuYzJwKHQueCksYT1uLmMycCh0LnkpO3JldHVybiEhKHMoaSkmJnMoYSkmJmUubm9kZSgpKSYmKCJ0ZXh0Ij09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cigieCIsaSkuYXR0cigieSIsYSk6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIithKyIpIiksITApfSxiLnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpO2IudHJhbnNsYXRlUG9pbnQodCxuLGUscil9KX0sYi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7ZS5hdHRyKCJkaXNwbGF5IixyLmlzUHRXaXRoaW5SYW5nZSh0KSYmbi5pc1B0V2l0aGluUmFuZ2UodCk/bnVsbDoibm9uZSIpfSxiLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsbj1lLnlheGlzO3QuZWFjaChmdW5jdGlvbih0KXtiLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG8uc2VsZWN0KHRoaXMpLHIsbil9KX19LGIuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnMoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSxiLnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAscz1pfHxhLmRhc2h8fCIiO3Uuc3Ryb2tlKGUsbnx8YS5jb2xvciksYi5kYXNoTGluZShlLHMsbyl9LGIubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sYT1lfHxpLndpZHRofHwwLHM9bnx8aS5kYXNofHwiIjtvLnNlbGVjdCh0aGlzKS5jYWxsKHUuc3Ryb2tlLHJ8fGkuY29sb3IpLmNhbGwoYi5kYXNoTGluZSxzLGEpfSl9LGIuZGFzaExpbmU9ZnVuY3Rpb24odCxlLHIpe3I9K3J8fDAsZT1iLmRhc2hTdHlsZShlLHIpLHQuc3R5bGUoeyJzdHJva2UtZGFzaGFycmF5IjplLCJzdHJva2Utd2lkdGgiOnIrInB4In0pfSxiLmRhc2hTdHlsZT1mdW5jdGlvbih0LGUpe2U9K2V8fDE7dmFyIHI9TWF0aC5tYXgoZSwzKTtyZXR1cm4ic29saWQiPT09dD90PSIiOiJkb3QiPT09dD90PXIrInB4LCIrcisicHgiOiJkYXNoIj09PXQ/dD0zKnIrInB4LCIrMypyKyJweCI6ImxvbmdkYXNoIj09PXQ/dD01KnIrInB4LCIrNSpyKyJweCI6ImRhc2hkb3QiPT09dD90PTMqcisicHgsIityKyJweCwiK3IrInB4LCIrcisicHgiOiJsb25nZGFzaGRvdCI9PT10JiYodD01KnIrInB4LCIrMipyKyJweCwiK3IrInB4LCIrMipyKyJweCIpLHR9LGIuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPW8uc2VsZWN0KHQubm9kZSgpKSxyPWUuZGF0YSgpLG49KCgoclswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7biYmdC5jYWxsKHUuZmlsbCxuKX0sYi5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLDApLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9by5zZWxlY3QodGhpcyk7dHJ5e3IuY2FsbCh1LmZpbGwsZVswXS50cmFjZS5maWxsY29sb3IpfWNhdGNoKGUpe2guZXJyb3IoZSx0KSxyLnJlbW92ZSgpfX0pfQo7dmFyIHg9dCgiLi9zeW1ib2xfZGVmcyIpO2Iuc3ltYm9sTmFtZXM9W10sYi5zeW1ib2xGdW5jcz1bXSxiLnN5bWJvbE5lZWRMaW5lcz17fSxiLnN5bWJvbE5vRG90PXt9LGIuc3ltYm9sTGlzdD1bXSxPYmplY3Qua2V5cyh4KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXhbdF07Yi5zeW1ib2xMaXN0PWIuc3ltYm9sTGlzdC5jb25jYXQoW2Uubix0LGUubisxMDAsdCsiLW9wZW4iXSksYi5zeW1ib2xOYW1lc1tlLm5dPXQsYi5zeW1ib2xGdW5jc1tlLm5dPWUuZixlLm5lZWRMaW5lJiYoYi5zeW1ib2xOZWVkTGluZXNbZS5uXT0hMCksZS5ub0RvdD9iLnN5bWJvbE5vRG90W2Uubl09ITA6Yi5zeW1ib2xMaXN0PWIuc3ltYm9sTGlzdC5jb25jYXQoW2UubisyMDAsdCsiLWRvdCIsZS5uKzMwMCx0KyItb3Blbi1kb3QiXSl9KTt2YXIgXz1iLnN5bWJvbE5hbWVzLmxlbmd0aCx3PSJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiO2Iuc3ltYm9sTnVtYmVyPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoIi1vcGVuIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKCItb3BlbiIsIiIpKSx0LmluZGV4T2YoIi1kb3QiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKCItZG90IiwiIikpLHQ9Yi5zeW1ib2xOYW1lcy5pbmRleE9mKHQpLHQ+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PV98fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciBNPXt4MToxLHgyOjAseTE6MCx5MjowfSxUPXt4MTowLHgyOjAseTE6MSx5MjowfTtiLmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz1lLl9mdWxsTGF5b3V0Ll9kZWZzLnNlbGVjdCgiLmdyYWRpZW50cyIpLnNlbGVjdEFsbCgiIyIrcikuZGF0YShbbitpK2FdLGguaWRlbnRpdHkpO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInJhZGlhbCI9PT1uPyJyYWRpYWxHcmFkaWVudCI6ImxpbmVhckdyYWRpZW50IikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW8uc2VsZWN0KHRoaXMpOyJob3Jpem9udGFsIj09PW4/dC5hdHRyKE0pOiJ2ZXJ0aWNhbCI9PT1uJiZ0LmF0dHIoVCksdC5hdHRyKCJpZCIscik7dmFyIGU9bChpKSxzPWwoYSk7dC5hcHBlbmQoInN0b3AiKS5hdHRyKHtvZmZzZXQ6IjAlIiwic3RvcC1jb2xvciI6dS50aW55UkdCKHMpLCJzdG9wLW9wYWNpdHkiOnMuZ2V0QWxwaGEoKX0pLHQuYXBwZW5kKCJzdG9wIikuYXR0cih7b2Zmc2V0OiIxMDAlIiwic3RvcC1jb2xvciI6dS50aW55UkdCKGUpLCJzdG9wLW9wYWNpdHkiOmUuZ2V0QWxwaGEoKX0pfSksdC5zdHlsZSh7ZmlsbDoidXJsKCMiK3IrIikiLCJmaWxsLW9wYWNpdHkiOm51bGx9KX0sYi5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2RlZnMuc2VsZWN0QWxsKCIuZ3JhZGllbnRzIikuZGF0YShbMF0pO2UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJncmFkaWVudHMiLCEwKSxlLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKX0sYi5zaW5nbGVQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcz1yLm1hcmtlcjtuKHQsZSxyLGksYSxzLHMubGluZSxvKX0sYi5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIG49ZS5tYXJrZXIsaT1iLnRyeUNvbG9yc2NhbGUobiwiIiksYT1iLnRyeUNvbG9yc2NhbGUobiwibGluZSIpO3QuZWFjaChmdW5jdGlvbih0KXtiLnNpbmdsZVBvaW50U3R5bGUodCxvLnNlbGVjdCh0aGlzKSxlLGksYSxyKX0pfX0sYi50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9oLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dCxuPXIuY29sb3JzY2FsZSxpPXIuY29sb3I7cmV0dXJuIG4mJkFycmF5LmlzQXJyYXkoaSk/Zi5tYWtlQ29sb3JTY2FsZUZ1bmMoZi5leHRyYWN0U2NhbGUobixyLmNtaW4sci5jbWF4KSk6aC5pZGVudGl0eX07dmFyIGs9e3N0YXJ0OjEsZW5kOi0xLG1pZGRsZTowLGJvdHRvbToxLHRvcDotMX07Yi50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLGk9aC5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYoIWkpcmV0dXJuIHZvaWQgbi5yZW1vdmUoKTt2YXIgYT10LnRwfHxlLnRleHRwb3NpdGlvbixsPWEuaW5kZXhPZigidG9wIikhPT0tMT8idG9wIjphLmluZGV4T2YoImJvdHRvbSIpIT09LTE/ImJvdHRvbSI6Im1pZGRsZSIsYz1hLmluZGV4T2YoImxlZnQiKSE9PS0xPyJlbmQiOmEuaW5kZXhPZigicmlnaHQiKSE9PS0xPyJzdGFydCI6Im1pZGRsZSIsdT10LnRzfHxlLnRleHRmb250LnNpemUsZj10Lm1yYz90Lm1yYy8uOCsxOjA7dT1zKHUpJiZ1PjA/dTowLG4uY2FsbChiLmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksdSx0LnRjfHxlLnRleHRmb250LmNvbG9yKS5hdHRyKCJ0ZXh0LWFuY2hvciIsYykudGV4dChpKS5jYWxsKGQuY29udmVydFRvVHNwYW5zLHIpO3ZhciBwPW8uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSksbT0oZC5saW5lQ291bnQobiktMSkqdisxLGc9a1tjXSpmLHk9Ljc1KnUra1tsXSpmKyhrW2xdLTEpKm0qdS8yO3AuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZysiLCIreSsiKSIpfSl9O3ZhciBBPS41O2Iuc21vb3Rob3Blbj1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpO3ZhciByLG49Ik0iK3RbMF0sYT1bXTtmb3Iocj0xO3I8dC5sZW5ndGgtMTtyKyspYS5wdXNoKGkodFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Iobis9IlEiK2FbMF1bMF0rIiAiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9IkMiK2Fbci0yXVsxXSsiICIrYVtyLTFdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iUSIrYVt0Lmxlbmd0aC0zXVsxXSsiICIrdFt0Lmxlbmd0aC0xXX0sYi5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKSsiWiI7dmFyIHIsbj0iTSIrdFswXSxhPXQubGVuZ3RoLTEsbz1baSh0W2FdLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGE7cisrKW8ucHVzaChpKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG8ucHVzaChpKHRbYS0xXSx0W2FdLHRbMF0sZSkpLHI9MTtyPD1hO3IrKyluKz0iQyIrb1tyLTFdWzFdKyIgIitvW3JdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iQyIrb1thXVsxXSsiICIrb1swXVswXSsiICIrdFswXSsiWiJ9O3ZhciBFPXtodjpmdW5jdGlvbih0LGUpe3JldHVybiJIIitvLnJvdW5kKGVbMF0sMikrIlYiK28ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrby5yb3VuZChlWzFdLDIpKyJIIitvLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVybiJIIitvLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrIlYiK28ucm91bmQoZVsxXSwyKSsiSCIrby5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrby5yb3VuZCgodFsxXStlWzFdKS8yLDIpKyJIIitvLnJvdW5kKGVbMF0sMikrIlYiK28ucm91bmQoZVsxXSwyKX19LFM9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTCIrby5yb3VuZChlWzBdLDIpKyIsIitvLnJvdW5kKGVbMV0sMil9O2Iuc3RlcHM9ZnVuY3Rpb24odCl7dmFyIGU9RVt0XXx8UztyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSJNIitvLnJvdW5kKHRbMF1bMF0sMikrIiwiK28ucm91bmQodFswXVsxXSwyKSxuPTE7bjx0Lmxlbmd0aDtuKyspcis9ZSh0W24tMV0sdFtuXSk7cmV0dXJuIHJ9fSxiLm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1vLnNlbGVjdCgiYm9keSIpLnNlbGVjdEFsbCgiI2pzLXBsb3RseS10ZXN0ZXIiKS5kYXRhKFswXSk7dC5lbnRlcigpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLCJqcy1wbG90bHktdGVzdGVyIikuYXR0cihwLnN2Z0F0dHJzKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMDBweCIsdG9wOiItMTAwMDBweCIsd2lkdGg6IjkwMDBweCIsaGVpZ2h0OiI5MDAwcHgiLCJ6LWluZGV4IjoiMSJ9KTt2YXIgZT10LnNlbGVjdEFsbCgiLmpzLXJlZmVyZW5jZS1wb2ludCIpLmRhdGEoWzBdKTtlLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtcmVmZXJlbmNlLXBvaW50IiwhMCkuYXR0cigiZCIsIk0wLDBIMVYxSDBaIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOjAsZmlsbDoiYmxhY2sifSksYi50ZXN0ZXI9dCxiLnRlc3RyZWY9ZX0sYi5zYXZlZEJCb3hlcz17fTt2YXIgTD0wO2IuYkJveD1mdW5jdGlvbih0LGUscil7cnx8KHI9YSh0KSk7dmFyIG47aWYocil7aWYobj1iLnNhdmVkQkJveGVzW3JdKXJldHVybiBoLmV4dGVuZEZsYXQoe30sbil9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIGk9dC5jaGlsZE5vZGVzWzBdO2lmKHI9YShpKSl7dmFyIHM9K2kuZ2V0QXR0cmlidXRlKCJ4Iil8fDAsbD0raS5nZXRBdHRyaWJ1dGUoInkiKXx8MCxjPWkuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtpZighYyl7dmFyIHU9Yi5iQm94KGksITEscik7cmV0dXJuIHMmJih1LmxlZnQrPXMsdS5yaWdodCs9cyksbCYmKHUudG9wKz1sLHUuYm90dG9tKz1sKSx1fWlmKHIrPSJ+IitzKyJ+IitsKyJ+IitjLG49Yi5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gaC5leHRlbmRGbGF0KHt9LG4pfX12YXIgZixwO2U/Zj10OihwPWIudGVzdGVyLm5vZGUoKSxmPXQuY2xvbmVOb2RlKCEwKSxwLmFwcGVuZENoaWxkKGYpKSxvLnNlbGVjdChmKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmNhbGwoZC5wb3NpdGlvblRleHQsMCwwKTt2YXIgbT1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9Yi50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxwLnJlbW92ZUNoaWxkKGYpO3ZhciBnPXtoZWlnaHQ6bS5oZWlnaHQsd2lkdGg6bS53aWR0aCxsZWZ0Om0ubGVmdC12LmxlZnQsdG9wOm0udG9wLXYudG9wLHJpZ2h0Om0ucmlnaHQtdi5sZWZ0LGJvdHRvbTptLmJvdHRvbS12LnRvcH07cmV0dXJuIEw+PTFlNCYmKGIuc2F2ZWRCQm94ZXM9e30sTD0wKSxyJiYoYi5zYXZlZEJCb3hlc1tyXT1nKSxMKyssaC5leHRlbmRGbGF0KHt9LGcpfSxiLnNldENsaXBVcmw9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdm9pZCB0LmF0dHIoImNsaXAtcGF0aCIsbnVsbCk7dmFyIHI9IiMiK2Usbj1vLnNlbGVjdCgiYmFzZSIpO24uc2l6ZSgpJiZuLmF0dHIoImhyZWYiKSYmKHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXStyKSx0LmF0dHIoImNsaXAtcGF0aCIsInVybCgiK3IrIikiKX0sYi5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixyPXRbZV0oInRyYW5zZm9ybSIpfHwiIixuPXIucmVwbGFjZSgvLipcYnRyYW5zbGF0ZVwoKC0/XGQqXC4/XGQqKVteLVxkXSooLT9cZCpcLj9cZCopW15cZF0uKi8sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pLnNwbGl0KCIgIik7cmV0dXJue3g6K25bMF18fDAseTorblsxXXx8MH19LGIuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhKz0iIHRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIixhPWEudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX0sYi5nZXRTY2FsZT1mdW5jdGlvbih0KXt2YXIgZT10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLHI9dFtlXSgidHJhbnNmb3JtIil8fCIiLG49ci5yZXBsYWNlKC8uKlxic2NhbGVcKChcZCpcLj9cZCopW15cZF0qKFxkKlwuP1xkKilbXlxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkuc3BsaXQoIiAiKTtyZXR1cm57eDorblswXXx8MSx5OituWzFdfHwxfX0sYi5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhKz0iIHNjYWxlKCIrZSsiLCAiK3IrIikiLGE9YS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfSxiLnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhO3JldHVybiBlPWV8fDEscj1yfHwxLGk9MT09PWUmJjE9PT1yPyIiOiIgc2NhbGUoIitlKyIsIityKyIpIixhPS9ccypzYy4qLyx0LmVhY2goZnVuY3Rpb24oKXtuPSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKGEsIiIpLG4rPWksbj1uLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKX0pLGl9O2Iuc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPW8uc2VsZWN0KHRoaXMpLGk9bi5zZWxlY3QoInRleHQiKTtpZihpLm5vZGUoKSl7dmFyIGE9cGFyc2VGbG9hdChpLmF0dHIoIngiKXx8MCkscz1wYXJzZUZsb2F0KGkuYXR0cigieSIpfHwwKSxsPShuLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goL3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvKTt0PTE9PT1lJiYxPT09cj9bXTpbInRyYW5zbGF0ZSgiK2ErIiwiK3MrIikiLCJzY2FsZSgiK2UrIiwiK3IrIikiLCJ0cmFuc2xhdGUoIistYSsiLCIrLXMrIikiXSxsJiZ0LnB1c2gobCksbi5hdHRyKCJ0cmFuc2Zvcm0iLHQuam9pbigiICIpKX19KX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzA4LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzE2LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2MSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNjYsIi4uL2NvbG9yIjo2MTEsIi4uL2NvbG9yc2NhbGUiOjYyNSwiLi9zeW1ib2xfZGVmcyI6NjM2LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMSx0aW55Y29sb3IyOjU0Mn1dLDYzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgiK2UrIlYiK3IrIkgtIitlKyJWIitlKyJILSIrcisiVi0iK2UrIkgtIitlKyJWLSIrcisiSCIrZSsiVi0iK2UrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOCp0L01hdGguc3FydCgyKSwyKSxyPSJsIitlKyIsIitlLGk9ImwiK2UrIiwtIitlLGE9ImwtIitlKyIsLSIrZSxvPSJsLSIrZSsiLCIrZTtyZXR1cm4iTTAsIitlK3IraSthK2krYStvK2ErbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsLSIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLC0iK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwiK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMLSIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK2UrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK2UrIiwtIityKyJWIitlKyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSC0iK2UrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrZSsiLCIrcisiVi0iK2UrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQodCotLjMwOSwyKTtyZXR1cm4iTSIrZSsiLCIrYSsiTCIrcisiLCIrbi5yb3VuZCguODA5KnQsMikrIkgtIityKyJMLSIrZSsiLCIrYSsiTDAsIitpKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIraSsiLC0iK3IrIlYiK3IrIkwwLCIrZSsiTC0iK2krIiwiK3IrIlYtIityKyJMMCwtIitlKyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIitpKyJIIityKyJMIitlKyIsMEwiK3IrIiwtIitpKyJILSIrcisiTC0iK2UrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIityKyJMIitlKyIsLSIrcisiViIrcisiTCIrcisiLCIrZSsiSC0iK3IrIkwtIitlKyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKGUqLS4zMDksMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVybiJNIityKyIsIitsKyJIIitpKyJMIithKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4MiplLDIpKyJMLSIrbysiLCIrdSsiTC0iK2ErIiwiK2MrIkwtIitpKyIsIitsKyJILSIrcisiTDAsIitzKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVybiJNLSIraSsiLDBsLSIrcisiLC0iK2UrImgiK2krImwiK3IrIiwtIitlKyJsIityKyIsIitlKyJoIitpKyJsLSIrcisiLCIrZSsibCIrcisiLCIrZSsiaC0iK2krImwtIityKyIsIitlKyJsLSIrcisiLC0iK2UrImgtIitpKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLCIrcitvK2UrIiwiK3IrbysiMCwtIitpK28rIi0iK2UrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTSIrZSsiLC0iK3IrbysiLSIrZSsiLC0iK3IrbysiMCwiK2krbytlKyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwtIitlK2krIi0iK2UrIiwiK2UraStlKyIsIitlK2krZSsiLC0iK2UraSsiLSIrZSsiLC0iK2UrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCgxLjkqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsMCIraSsiMCwiK2UraStlKyIsMCIraSsiMCwtIitlK2krIi0iK2UrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiTCIrZSsiLC0iK2UrIkgtIitlKyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiVi0iK2UrIkwtIitlKyIsIitlKyJWLSIrZSsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNMCwtIitlKyJWIitlKyJNLSIrZSsiLDBIIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpLHI9bi5yb3VuZCguNjUqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieC10aGluIjp7bjozNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxhc3Rlcmlzazp7bjozNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKC44NSp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK2UrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMH0sInktdXAiOntuOjM3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitlKyIsIitpKyJMMCwwTSIrZSsiLCIraSsiTDAsME0wLC0iK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMH0sInktZG93biI6e246MzgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwtIitpKyJMMCwwTSIrZSsiLC0iK2krIkwwLDBNMCwiK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTSIraSsiLCIrZSsiTDAsME0iK2krIiwtIitlKyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieS1yaWdodCI6e246NDAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2krIiwiK2UrIkwwLDBNLSIraSsiLC0iK2UrIkwwLDBNIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMH0sImxpbmUtZXciOntuOjQxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwibGluZS1uZSI6e246NDMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJsaW5lLW53Ijp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlfSxuZWVkTGluZTohMCxub0RvdDohMH19fSx7ZDM6MTIxfV0sNjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPWVbImVycm9yXyIrbl18fHt9LGw9YS52aXNpYmxlJiZbImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSE9PS0xLGM9W107aWYobCl7Zm9yKHZhciB1PXMoYSksZj0wO2Y8dC5sZW5ndGg7ZisrKXt2YXIgaD10W2ZdLGQ9aFtuXTtpZihpKHIuYzJsKGQpKSl7dmFyIHA9dShkLGYpO2lmKGkocFswXSkmJmkocFsxXSkpe3ZhciBtPWhbbisicyJdPWQtcFswXSx2PWhbbisiaCJdPWQrcFsxXTtjLnB1c2gobSx2KX19fW8uZXhwYW5kKHIsYyx7cGFkZGVkOiEwfSl9fXZhciBpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4vY29tcHV0ZV9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jYWxjZGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0scz1pWzBdLnRyYWNlO2lmKGEudHJhY2VJcyhzLCJlcnJvckJhcnNPSyIpKXt2YXIgbD1vLmdldEZyb21JZCh0LHMueGF4aXMpLGM9by5nZXRGcm9tSWQodCxzLnlheGlzKTtuKGkscyxsLCJ4IiksbihpLHMsYywieSIpfX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4vY29tcHV0ZV9lcnJvciI6NjM5LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheSxhPXQuYXJyYXltaW51cztyZXR1cm4gcnx8dm9pZCAwPT09YT9mdW5jdGlvbih0LGUpe3ZhciByPStpW2VdO3JldHVybltyLHJdfTpmdW5jdGlvbih0LGUpe3JldHVyblsrYVtlXSwraVtlXV19fXZhciBvPW4oZSx0LnZhbHVlKSxzPW4oZSx0LnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT10LnZhbHVlbWludXM/ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtyZXR1cm5bZSxlXX06ZnVuY3Rpb24odCl7cmV0dXJuW3ModCksbyh0KV19fX0se31dLDY0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gYS5jb2VyY2UoZix1LG8sdCxlKX12YXIgYz0iZXJyb3JfIitzLmF4aXMsdT1lW2NdPXt9LGY9dFtjXXx8e307aWYobCgidmlzaWJsZSIsdm9pZCAwIT09Zi5hcnJheXx8dm9pZCAwIT09Zi52YWx1ZXx8InNxcnQiPT09Zi50eXBlKSE9PSExKXt2YXIgaD1sKCJ0eXBlIiwiYXJyYXkiaW4gZj8iZGF0YSI6InBlcmNlbnQiKSxkPSEwOyJzcXJ0IiE9PWgmJihkPWwoInN5bW1ldHJpYyIsISgoImRhdGEiPT09aD8iYXJyYXltaW51cyI6InZhbHVlbWludXMiKWluIGYpKSksImRhdGEiPT09aD8obCgiYXJyYXkiKXx8KHUuYXJyYXk9W10pLGwoInRyYWNlcmVmIiksZHx8KGwoImFycmF5bWludXMiKXx8KHUuYXJyYXltaW51cz1bXSksbCgidHJhY2VyZWZtaW51cyIpKSk6InBlcmNlbnQiIT09aCYmImNvbnN0YW50IiE9PWh8fChsKCJ2YWx1ZSIpLGR8fGwoInZhbHVlbWludXMiKSk7dmFyIHA9ImNvcHlfIitzLmluaGVyaXQrInN0eWxlIjtzLmluaGVyaXQmJihlWyJlcnJvcl8iK3MuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZsKHAsIShmLmNvbG9yfHxuKGYudGhpY2tuZXNzKXx8bihmLndpZHRoKSkpLHMuaW5oZXJpdCYmdVtwXXx8KGwoImNvbG9yIixyKSxsKCJ0aGlja25lc3MiKSxsKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2F0dHJpYnV0ZXMiOjYzNywiZmFzdC1pc251bWVyaWMiOjEzMX1dLDY0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmV4cG9ydHM9e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNhbGNGcm9tVHJhY2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC54fHxbXSxpPXQueXx8W10sYT1yLmxlbmd0aHx8aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT17eDpyW3NdLHk6aVtzXX07cmV0dXJuIG9bMF0udHJhY2U9dCxuLmNhbGMoe2NhbGNkYXRhOltvXSxfZnVsbExheW91dDplfSksb30sbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJJbmZvPWZ1bmN0aW9uKHQsZSxyKXsoZS5lcnJvcl95fHx7fSkudmlzaWJsZSYmKHIueWVycj10LnloLXQueSxlLmVycm9yX3kuc3ltbWV0cmljfHwoci55ZXJybmVnPXQueS10LnlzKSksKGUuZXJyb3JfeHx8e30pLnZpc2libGUmJihyLnhlcnI9dC54aC10LngsZS5lcnJvcl94LnN5bW1ldHJpY3x8KHIueGVycm5lZz10LngtdC54cykpfX0seyIuL2F0dHJpYnV0ZXMiOjYzNywiLi9jYWxjIjo2MzgsIi4vZGVmYXVsdHMiOjY0MCwiLi9wbG90Ijo2NDIsIi4vc3R5bGUiOjY0M31dLDY0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07cmV0dXJuIHZvaWQgMCE9PXQueWgmJihuLnloPXIuYzJwKHQueWgpLG4ueXM9ci5jMnAodC55cyksYShuLnlzKXx8KG4ubm9ZUz0hMCxuLnlzPXIuYzJwKHQueXMsITApKSksdm9pZCAwIT09dC54aCYmKG4ueGg9ZS5jMnAodC54aCksbi54cz1lLmMycCh0LnhzKSxhKG4ueHMpfHwobi5ub1hTPSEwLG4ueHM9ZS5jMnAodC54cywhMCkpKSxufXZhciBpPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLGM9ZS54YXhpcyx1PWUueWF4aXMsZj1yJiZyLmR1cmF0aW9uPjA7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBoLGQ9dFswXS50cmFjZSxwPWQuZXJyb3JfeHx8e30sbT1kLmVycm9yX3l8fHt9O2QuaWRzJiYoaD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO3ZhciB2PXMuaGFzTWFya2VycyhkKSYmZC5tYXJrZXIubWF4ZGlzcGxheWVkPjA7bS52aXNpYmxlfHxwLnZpc2libGV8fCh0PVtdKTt2YXIgZz1pLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZXJyb3JiYXIiKS5kYXRhKHQsaCk7aWYoZy5leGl0KCkucmVtb3ZlKCksdC5sZW5ndGgpe3AudmlzaWJsZXx8Zy5zZWxlY3RBbGwoInBhdGgueGVycm9yIikucmVtb3ZlKCksbS52aXNpYmxlfHxnLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5yZW1vdmUoKSxnLnN0eWxlKCJvcGFjaXR5IiwxKTt2YXIgeT1nLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZXJyb3JiYXIiLCEwKTtmJiZ5LnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDEpLG8uc2V0Q2xpcFVybChnLGUubGF5ZXJDbGlwSWQpLGcuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxvPW4odCxjLHUpO2lmKCF2fHx0LnZpcyl7dmFyIHM7aWYobS52aXNpYmxlJiZhKG8ueCkmJmEoby55aCkmJmEoby55cykpe3ZhciBoPW0ud2lkdGg7cz0iTSIrKG8ueC1oKSsiLCIrby55aCsiaCIrMipoKyJtLSIraCsiLDBWIitvLnlzLG8ubm9ZU3x8KHMrPSJtLSIraCsiLDBoIisyKmgpO3ZhciBkPWUuc2VsZWN0KCJwYXRoLnllcnJvciIpO2w9IWQuc2l6ZSgpLGw/ZD1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieWVycm9yIiwhMCk6ZiYmKGQ9ZC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykpLGQuYXR0cigiZCIscyl9aWYocC52aXNpYmxlJiZhKG8ueSkmJmEoby54aCkmJmEoby54cykpe3ZhciBnPShwLmNvcHlfeXN0eWxlP206cCkud2lkdGg7cz0iTSIrby54aCsiLCIrKG8ueS1nKSsidiIrMipnKyJtMCwtIitnKyJIIitvLnhzLG8ubm9YU3x8KHMrPSJtMCwtIitnKyJ2IisyKmcpO3ZhciB5PWUuc2VsZWN0KCJwYXRoLnhlcnJvciIpO2w9IXkuc2l6ZSgpLGw/eT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieGVycm9yIiwhMCk6ZiYmKHk9eS50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykpLHkuYXR0cigiZCIscyl9fX0pfX0pfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTA2NiwiLi4vZHJhd2luZyI6NjM1LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDY0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLmVycm9yX3l8fHt9LGE9ZS5lcnJvcl94fHx7fSxvPW4uc2VsZWN0KHRoaXMpO28uc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2Usci5jb2xvciksYS5jb3B5X3lzdHlsZSYmKGE9ciksby5zZWxlY3RBbGwoInBhdGgueGVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsYS50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxhLmNvbG9yKX0pfX0seyIuLi9jb2xvciI6NjExLGQzOjEyMX1dLDY0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxhcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MDN9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtuPW58fGkuaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09bih0KSl9dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dLGw9c1swXS50cmFjZTtpZighYS50cmFjZUlzKGwsInBpZSIpKXt2YXIgYz1hLnRyYWNlSXMobCwiMmRNYXAiKT9uOmkuZmlsbEFycmF5O2MobC5ob3ZlcmluZm8scywiaGkiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gaS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX0obCkpLGwuaG92ZXJsYWJlbCYmKGMobC5ob3ZlcmxhYmVsLmJnY29sb3IscywiaGJnIiksYyhsLmhvdmVybGFiZWwuYm9yZGVyY29sb3IscywiaGJjIiksYyhsLmhvdmVybGFiZWwuZm9udC5zaXplLHMsImh0cyIpLGMobC5ob3ZlcmxhYmVsLmZvbnQuY29sb3IscywiaHRjIiksYyhsLmhvdmVybGFiZWwuZm9udC5mYW1pbHkscywiaHRmIiksYyhsLmhvdmVybGFiZWwubmFtZWxlbmd0aCxzLCJobmwiKSl9fX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTN9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEoKXt0LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czp0Ll9ob3ZlcmRhdGEsZXZlbnQ6ZX0pfXZhciBvPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKG8mJm8udGhlbj9vLnRoZW4oYSk6YSgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9ob3ZlciI6NjUwfV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17TUFYRElTVDoyMCxZQU5HTEU6NjAsSE9WRVJBUlJPV1NJWkU6NixIT1ZFUlRFWFRQQUQ6MyxIT1ZFUkZPTlRTSVpFOjEzLEhPVkVSRk9OVDoiQXJpYWwsIHNhbnMtc2VyaWYiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOiItaG92ZXIifX0se31dLDY0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxzLG8uaG92ZXJsYWJlbCl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2F0dHJpYnV0ZXMiOjY0NCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2NTF9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gc1t0XXx8dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0W2VbMF1dKT90W2VbMF1dW2VbMV1dOnZvaWQgMDp0W2VdfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9jb25zdGFudHMiKTtyLmdldFN1YnBsb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VicGxvdHx8dC54YXhpcyt0LnlheGlzfHx0Lmdlb30sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6IngiPT09dD9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoci5pbmRleCE9PSExKXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCplPDB8fDA9PT10P28uTUFYRElTVCooLjYtLjMvTWF0aC5tYXgoMyxNYXRoLmFicyh0LWUpKSk6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dChyKSxpPWUocik7cmV0dXJuIE1hdGguc3FydChuKm4raSppKX19LHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLl9hcnJheUF0dHJzO2lmKG8pZm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc10sYz1uKGwpO2lmKHZvaWQgMD09PXRbY10pe3ZhciB1PWEubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxmPWkodSxyKTt2b2lkIDAhPT1mJiYodFtjXT1mKX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIG89ZS5fYXJyYXlBdHRycztpZihvKWZvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLGM9bihsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9YS5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGY9bmV3IEFycmF5KHIubGVuZ3RoKSxoPTA7aDxyLmxlbmd0aDtoKyspZltoXT1pKHUscltoXSk7dFtjXT1mfX19O3ZhciBzPXtpZHM6ImlkIixsb2NhdGlvbnM6ImxvY2F0aW9uIixsYWJlbHM6ImxhYmVsIix2YWx1ZXM6InZhbHVlIiwibWFya2VyLmNvbG9ycyI6ImNvbG9yIn19LHsiLi4vLi4vbGliIjo3MzUsIi4vY29uc3RhbnRzIjo2NDd9XSw2NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtyfHwocj0ieHkiKTt2YXIgaD1BcnJheS5pc0FycmF5KHIpP3I6W3JdLG09dC5fZnVsbExheW91dCxnPW0uX3Bsb3RzfHxbXSxUPWdbcl07aWYoVCl7dmFyIGs9VC5vdmVybGF5cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTtoPWguY29uY2F0KGspfWZvcih2YXIgQT1oLmxlbmd0aCxFPW5ldyBBcnJheShBKSxTPW5ldyBBcnJheShBKSxMPTA7TDxBO0wrKyl7dmFyIEM9aFtMXSxJPWdbQ107aWYoSSlFW0xdPXguZ2V0RnJvbUlkKHQsSS54YXhpcy5faWQpLFNbTF09eC5nZXRGcm9tSWQodCxJLnlheGlzLl9pZCk7ZWxzZXt2YXIgRD1tW0NdLl9zdWJwbG90O0VbTF09RC54YXhpcyxTW0xdPUQueWF4aXN9fXZhciBQPWUuaG92ZXJtb2RlfHxtLmhvdmVybW9kZTtpZihbIngiLCJ5IiwiY2xvc2VzdCJdLmluZGV4T2YoUCk9PT0tMXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGIudW5ob3ZlclJhdyh0LGUpO3ZhciB6LE8sUixGLGosTixCLFUsVixILHEsRyxZLFg9W10sVz1bXTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihQPSJhcnJheSIsUj0wO1I8ZS5sZW5ndGg7UisrKWo9dC5jYWxjZGF0YVtlW1JdLmN1cnZlTnVtYmVyfHwwXSwic2tpcCIhPT1qWzBdLnRyYWNlLmhvdmVyaW5mbyYmVy5wdXNoKGopO2Vsc2V7Zm9yKEY9MDtGPHQuY2FsY2RhdGEubGVuZ3RoO0YrKylqPXQuY2FsY2RhdGFbRl0sTj1qWzBdLnRyYWNlLCJza2lwIiE9PU4uaG92ZXJpbmZvJiZoLmluZGV4T2Yody5nZXRTdWJwbG90KE4pKSE9PS0xJiZXLnB1c2goaik7dmFyIFosSixLPSFlLnRhcmdldDtpZihLKVo9InhweCJpbiBlP2UueHB4OkVbMF0uX2xlbmd0aC8yLEo9InlweCJpbiBlP2UueXB4OlNbMF0uX2xlbmd0aC8yO2Vsc2V7aWYocC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpPT09ITEpcmV0dXJuO3ZhciBRPWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFo9ZS5jbGllbnRYLVEubGVmdCxKPWUuY2xpZW50WS1RLnRvcCxaPDB8fFo+US53aWR0aHx8SjwwfHxKPlEuaGVpZ2h0KXJldHVybiBiLnVuaG92ZXJSYXcodCxlKX1pZih6PSJ4dmFsImluIGU/dy5mbGF0KGgsZS54dmFsKTp3LnAyYyhFLFopLE89Inl2YWwiaW4gZT93LmZsYXQoaCxlLnl2YWwpOncucDJjKFMsSiksIWYoelswXSl8fCFmKE9bMF0pKXJldHVybiBkLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxiLnVuaG92ZXJSYXcodCxlKX12YXIgJD0xLzA7Zm9yKEY9MDtGPFcubGVuZ3RoO0YrKylpZigoaj1XW0ZdKSYmalswXSYmalswXS50cmFjZSYmalswXS50cmFjZS52aXNpYmxlPT09ITAmJihOPWpbMF0udHJhY2UsWyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihOLl9tb2R1bGUubmFtZSk9PT0tMSkpe2lmKEI9dy5nZXRTdWJwbG90KE4pLFU9aC5pbmRleE9mKEIpLFY9UCxHPXtjZDpqLHRyYWNlOk4seGE6RVtVXSx5YTpTW1VdLGluZGV4OiExLGRpc3RhbmNlOk1hdGgubWluKCQsTS5NQVhESVNUKSxjb2xvcjp5LmRlZmF1bHRMaW5lLG5hbWU6Ti5uYW1lLHgwOnZvaWQgMCx4MTp2b2lkIDAseTA6dm9pZCAwLHkxOnZvaWQgMCx4TGFiZWxWYWw6dm9pZCAwLHlMYWJlbFZhbDp2b2lkIDAsekxhYmVsVmFsOnZvaWQgMCx0ZXh0OnZvaWQgMH0sbVtCXSYmKEcuc3VicGxvdD1tW0JdLl9zdWJwbG90KSxZPVgubGVuZ3RoLCJhcnJheSI9PT1WKXt2YXIgdHQ9ZVtGXTsicG9pbnROdW1iZXIiaW4gdHQ/KEcuaW5kZXg9dHQucG9pbnROdW1iZXIsVj0iY2xvc2VzdCIpOihWPSIiLCJ4dmFsImluIHR0JiYoSD10dC54dmFsLFY9IngiKSwieXZhbCJpbiB0dCYmKHE9dHQueXZhbCxWPVY/ImNsb3Nlc3QiOiJ5IikpfWVsc2UgSD16W1VdLHE9T1tVXTtpZihOLl9tb2R1bGUmJk4uX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIGV0PU4uX21vZHVsZS5ob3ZlclBvaW50cyhHLEgscSxWLG0uX2hvdmVybGF5ZXIpO2lmKGV0KWZvcih2YXIgcnQsbnQ9MDtudDxldC5sZW5ndGg7bnQrKylydD1ldFtudF0sZihydC54MCkmJmYocnQueTApJiZYLnB1c2gocyhydCxQKSl9ZWxzZSBkLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgaW4gaG92ZXI6IixOKTsiY2xvc2VzdCI9PT1QJiZYLmxlbmd0aD5ZJiYoWC5zcGxpY2UoMCxZKSwkPVhbMF0uZGlzdGFuY2UpfWlmKDA9PT1YLmxlbmd0aClyZXR1cm4gYi51bmhvdmVyUmF3KHQsZSk7WC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pO3ZhciBpdD10Ll9ob3ZlcmRhdGEsYXQ9W107Zm9yKFI9MDtSPFgubGVuZ3RoO1IrKyl7dmFyIG90PVhbUl0sc3Q9e2RhdGE6b3QudHJhY2UuX2lucHV0LGZ1bGxEYXRhOm90LnRyYWNlLGN1cnZlTnVtYmVyOm90LnRyYWNlLmluZGV4LHBvaW50TnVtYmVyOm90LmluZGV4fTtvdC50cmFjZS5fbW9kdWxlLmV2ZW50RGF0YT9zdD1vdC50cmFjZS5fbW9kdWxlLmV2ZW50RGF0YShzdCxvdCk6KHN0Lng9b3QueFZhbCxzdC55PW90LnlWYWwsc3QueGF4aXM9b3QueGEsc3QueWF4aXM9b3QueWEsdm9pZCAwIT09b3QuekxhYmVsVmFsJiYoc3Quej1vdC56TGFiZWxWYWwpKSx3LmFwcGVuZEFycmF5UG9pbnRWYWx1ZShzdCxvdC50cmFjZSxvdC5pbmRleCksYXQucHVzaChzdCl9aWYodC5faG92ZXJkYXRhPWF0LGModCxlLGl0KSYmbS5faGFzQ2FydGVzaWFuKXtsKFgse2hvdmVybW9kZTpQLGZ1bGxMYXlvdXQ6bSxjb250YWluZXI6bS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjptLl9wYXBlcmRpdn0pfXZhciBsdD0ieSI9PT1QJiZXLmxlbmd0aD4xLGN0PXkuY29tYmluZShtLnBsb3RfYmdjb2xvcnx8eS5iYWNrZ3JvdW5kLG0ucGFwZXJfYmdjb2xvciksdXQ9e2hvdmVybW9kZTpQLHJvdGF0ZUxhYmVsczpsdCxiZ0NvbG9yOmN0LGNvbnRhaW5lcjptLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOm0uX3BhcGVyZGl2LGNvbW1vbkxhYmVsT3B0czptLmhvdmVybGFiZWx9LGZ0PWkoWCx1dCx0KTtpZihhKFgsbHQ/InhhIjoieWEiKSxvKGZ0LGx0KSxlLnRhcmdldCYmZS50YXJnZXQudGFnTmFtZSl7dmFyIGh0PV8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxhdCk7dih1LnNlbGVjdChlLnRhcmdldCksaHQ/InBvaW50ZXIiOiIiKX1lLnRhcmdldCYmIW4mJmModCxlLGl0KSYmKGl0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aXR9KSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpFLHlheGVzOlMseHZhbHM6eix5dmFsczpPfSkpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT1lLmhvdmVybW9kZSxvPWUucm90YXRlTGFiZWxzLHM9ZS5iZ0NvbG9yLGw9ZS5jb250YWluZXIsYz1lLm91dGVyQ29udGFpbmVyLGY9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGg9ZS5mb250RmFtaWx5fHxNLkhPVkVSRk9OVCxkPWUuZm9udFNpemV8fE0uSE9WRVJGT05UU0laRSxwPXRbMF0sdj1wLnhhLGI9cC55YSx4PSJ5Ij09PWE/InlMYWJlbCI6InhMYWJlbCIsXz1wW3hdLHc9KFN0cmluZyhfKXx8IiIpLnNwbGl0KCIgIilbMF0saz1jLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPWsudG9wLEU9ay53aWR0aCxTPWsuaGVpZ2h0LEk9cC5kaXN0YW5jZTw9TS5NQVhESVNUJiYoIngiPT09YXx8InkiPT09YSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7aT10W25dLmhvdmVyaW5mb3x8dFtuXS50cmFjZS5ob3ZlcmluZm87dmFyIEQ9aS5zcGxpdCgiKyIpO2lmKEQuaW5kZXhPZigiYWxsIik9PT0tMSYmRC5pbmRleE9mKGEpPT09LTEpe0k9ITE7YnJlYWt9fXZhciBQPWwuc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YShJP1swXTpbXSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksUC5leGl0KCkucmVtb3ZlKCksUC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dS5zZWxlY3QodGhpcyksbj1lLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoWzBdKSxpPWUuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6IjFweCJ9KSxuLnN0eWxlKHtmaWxsOmYuYmdjb2xvcnx8eS5kZWZhdWx0TGluZSxzdHJva2U6Zi5ib3JkZXJjb2xvcnx8eS5iYWNrZ3JvdW5kfSksaS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLGkudGV4dChfKS5jYWxsKGcuZm9udCxmLmZvbnQuZmFtaWx5fHxoLGYuZm9udC5zaXplfHxkLGYuZm9udC5jb2xvcnx8eS5iYWNrZ3JvdW5kKS5jYWxsKG0ucG9zaXRpb25UZXh0LDAsMCkuY2FsbChtLmNvbnZlcnRUb1RzcGFucyxyKSxlLmF0dHIoInRyYW5zZm9ybSIsIiIpO3ZhciBvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCJ4Ij09PWEpe2kuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKG0ucG9zaXRpb25UZXh0LDAsInRvcCI9PT12LnNpZGU/QS1vLmJvdHRvbS1MLUM6QS1vLnRvcCtMK0MpO3ZhciBzPSJ0b3AiPT09di5zaWRlPyItIjoiIjtuLmF0dHIoImQiLCJNMCwwTCIrTCsiLCIrcytMKyJIIisoQytvLndpZHRoLzIpKyJ2IitzKygyKkMrby5oZWlnaHQpKyJILSIrKEMrby53aWR0aC8yKSsiViIrcytMKyJILSIrTCsiWiIpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHYuX29mZnNldCsocC54MCtwLngxKS8yKSsiLCIrKGIuX29mZnNldCsoInRvcCI9PT12LnNpZGU/MDpiLl9sZW5ndGgpKSsiKSIpfWVsc2V7aS5hdHRyKCJ0ZXh0LWFuY2hvciIsInJpZ2h0Ij09PWIuc2lkZT8ic3RhcnQiOiJlbmQiKS5jYWxsKG0ucG9zaXRpb25UZXh0LCgicmlnaHQiPT09Yi5zaWRlPzE6LTEpKihDK0wpLEEtby50b3Atby5oZWlnaHQvMik7dmFyIGw9InJpZ2h0Ij09PWIuc2lkZT8iIjoiLSI7bi5hdHRyKCJkIiwiTTAsMEwiK2wrTCsiLCIrTCsiViIrKEMrby5oZWlnaHQvMikrImgiK2wrKDIqQytvLndpZHRoKSsiVi0iKyhDK28uaGVpZ2h0LzIpKyJIIitsK0wrIlYtIitMKyJaIiksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodi5fb2Zmc2V0KygicmlnaHQiPT09Yi5zaWRlP3YuX2xlbmd0aDowKSkrIiwiKyhiLl9vZmZzZXQrKHAueTArcC55MSkvMikrIikiKX10PXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnpMYWJlbFZhbHx8KHRbeF18fCIiKS5zcGxpdCgiICIpWzBdPT09d30pfSk7dmFyIHo9bC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikuZGF0YSh0LGZ1bmN0aW9uKHQpe3JldHVyblt0LnRyYWNlLmluZGV4LHQuaW5kZXgsdC54MCx0LnkwLHQubmFtZSx0LmF0dHIsdC54YSx0LnlhfHwiIl0uam9pbigiLCIpfSk7cmV0dXJuIHouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcnRleHQiLCEwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dS5zZWxlY3QodGhpcyk7dC5hcHBlbmQoInJlY3QiKS5jYWxsKHkuZmlsbCx5LmFkZE9wYWNpdHkocywuOCkpLHQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibmFtZSIsITApLHQuYXBwZW5kKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsIjFweCIpLHQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibnVtcyIsITApLmNhbGwoZy5mb250LGgsZCl9KSx6LmV4aXQoKS5yZW1vdmUoKSx6LmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dS5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbj0iIixpPSIiLGw9eS5vcGFjaXR5KHQuY29sb3IpP3QuY29sb3I6eS5kZWZhdWx0TGluZSxjPXkuY29tYmluZShsLHMpLGY9dC5ib3JkZXJDb2xvcnx8eS5jb250cmFzdChjKTtpZih2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lKXtuPW0ucGxhaW5UZXh0KHQubmFtZXx8IiIpO3ZhciBwPU1hdGgucm91bmQodC5uYW1lTGVuZ3RoKTtwPi0xJiZuLmxlbmd0aD5wJiYobj1wPjM/bi5zdWJzdHIoMCxwLTMpKyIuLi4iOm4uc3Vic3RyKDAscCkpfXZvaWQgMCE9PXQuZXh0cmFUZXh0JiYoaSs9dC5leHRyYVRleHQpLHZvaWQgMCE9PXQuekxhYmVsPyh2b2lkIDAhPT10LnhMYWJlbCYmKGkrPSJ4OiAiK3QueExhYmVsKyI8YnI+Iiksdm9pZCAwIT09dC55TGFiZWwmJihpKz0ieTogIit0LnlMYWJlbCsiPGJyPiIpLGkrPShpPyJ6OiAiOiIiKSt0LnpMYWJlbCk6SSYmdFthKyJMYWJlbCJdPT09Xz9pPXRbKCJ4Ij09PWE/InkiOiJ4IikrIkxhYmVsIl18fCIiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiYoaT10LnlMYWJlbCk6aT12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsdC50ZXh0JiYhQXJyYXkuaXNBcnJheSh0LnRleHQpJiYoaSs9KGk/Ijxicj4iOiIiKSt0LnRleHQpLCIiPT09aSYmKCIiPT09biYmZS5yZW1vdmUoKSxpPW4pO3ZhciB2PWUuc2VsZWN0KCJ0ZXh0Lm51bXMiKS5jYWxsKGcuZm9udCx0LmZvbnRGYW1pbHl8fGgsdC5mb250U2l6ZXx8ZCx0LmZvbnRDb2xvcnx8ZikudGV4dChpKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKG0ucG9zaXRpb25UZXh0LDAsMCkuY2FsbChtLmNvbnZlcnRUb1RzcGFucyxyKSxiPWUuc2VsZWN0KCJ0ZXh0Lm5hbWUiKSx4PTA7biYmbiE9PWk/KGIuY2FsbChnLmZvbnQsdC5mb250RmFtaWx5fHxoLHQuZm9udFNpemV8fGQsYykudGV4dChuKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKG0ucG9zaXRpb25UZXh0LDAsMCkuY2FsbChtLmNvbnZlcnRUb1RzcGFucyxyKSx4PWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKzIqQyk6KGIucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKSksZS5zZWxlY3QoInBhdGgiKS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSk7dmFyIHcsTSxrPXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzIsUD10LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix6PU1hdGguYWJzKHQueDEtdC54MCksTz1NYXRoLmFicyh0LnkxLXQueTApLFI9ay53aWR0aCtMK0MreDt0LnR5MD1BLWsudG9wLHQuYng9ay53aWR0aCsyKkMsdC5ieT1rLmhlaWdodCsyKkMsdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9ay53aWR0aCx0LnR4MndpZHRoPXgsdC5vZmZzZXQ9MCxvPyh0LnBvcz1ELHc9UCtPLzIrUjw9UyxNPVAtTy8yLVI+PTAsInRvcCIhPT10LmlkZWFsQWxpZ24mJnd8fCFNP3c/KFArPU8vMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooUC09Ty8yLHQuYW5jaG9yPSJlbmQiKSk6KHQucG9zPVAsdz1EK3ovMitSPD1FLE09RC16LzItUj49MCwibGVmdCIhPT10LmlkZWFsQWxpZ24mJnd8fCFNP3c/KEQrPXovMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooRC09ei8yLHQuYW5jaG9yPSJlbmQiKSksdi5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLHgmJmIuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwiK1ArIikiKyhvPyJyb3RhdGUoIitUKyIpIjoiIikpfSksen1mdW5jdGlvbiBhKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKWw9dFtvXSxsLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKWw9dFtvXSxsLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZihsPXRbb10sbC5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pbD10W29dLGwucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IodmFyIG4saSxhLG8scyxsLGMsdT0wLGY9dC5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj10W2VdO3JldHVyblt7aTpyLGRwOjAscG9zOnQucG9zLHBvc3JlZjp0LnBvc3JlZixzaXplOnQuYnkqKCJ4Ij09PW4uX2lkLmNoYXJBdCgwKT9BOjEpLzIscG1pbjpuLl9vZmZzZXQscG1heDpuLl9vZmZzZXQrbi5fbGVuZ3RofV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfSk7IW4mJnU8PXQubGVuZ3RoOyl7Zm9yKHUrKyxuPSEwLG89MDtvPGYubGVuZ3RoLTE7KXt2YXIgaD1mW29dLGQ9ZltvKzFdLHA9aFtoLmxlbmd0aC0xXSxtPWRbMF0KO2lmKChpPXAucG9zK3AuZHArcC5zaXplLW0ucG9zLW0uZHArbS5zaXplKT4uMDEmJnAucG1pbj09PW0ucG1pbiYmcC5wbWF4PT09bS5wbWF4KXtmb3Iocz1kLmxlbmd0aC0xO3M+PTA7cy0tKWRbc10uZHArPWk7Zm9yKGgucHVzaC5hcHBseShoLGQpLGYuc3BsaWNlKG8rMSwxKSxjPTAscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWMrPWhbc10uZHA7Zm9yKGE9Yy9oLmxlbmd0aCxzPWgubGVuZ3RoLTE7cz49MDtzLS0paFtzXS5kcC09YTtuPSExfWVsc2UgbysrfWYuZm9yRWFjaChyKX1mb3Iobz1mLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgdj1mW29dO2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBnPXZbc10seT10W2cuaV07eS5vZmZzZXQ9Zy5kcCx5LmRlbD1nLmRlbH19fWZ1bmN0aW9uIG8odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dS5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHZvaWQgci5yZW1vdmUoKTt2YXIgbj0iZW5kIj09PXQuYW5jaG9yPy0xOjEsaT1yLnNlbGVjdCgidGV4dC5udW1zIiksYT17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxvPWEqKEwrQykscz1vK2EqKHQudHh3aWR0aCtDKSxsPTAsYz10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYoby09dC50eDJ3aWR0aC8yLHMtPXQudHgyd2lkdGgvMiksZSYmKGMqPS1TLGw9dC5vZmZzZXQqRSksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIiwibWlkZGxlIj09PXQuYW5jaG9yPyJNLSIrdC5ieC8yKyIsLSIrdC5ieS8yKyJoIit0LmJ4KyJ2Iit0LmJ5KyJoLSIrdC5ieCsiWiI6Ik0wLDBMIisobipMK2wpKyIsIisoTCtjKSsidiIrKHQuYnkvMi1MKSsiaCIrbip0LmJ4KyJ2LSIrdC5ieSsiSCIrKG4qTCtsKSsiViIrKGMtTCkrIloiKSxpLmNhbGwobS5wb3NpdGlvblRleHQsbytsLGMrdC50eTAtdC5ieS8yK0MpLHQudHgyd2lkdGgmJihyLnNlbGVjdCgidGV4dC5uYW1lIikuY2FsbChtLnBvc2l0aW9uVGV4dCxzK2EqQytsLGMrdC50eTAtdC5ieS8yK0MpLHIuc2VsZWN0KCJyZWN0IikuY2FsbChnLnNldFJlY3QscysoYS0xKSp0LnR4MndpZHRoLzIrbCxjLXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9cyhyLG4pO2kmJih0W2VdPWkpfXZhciBuPXQuaW5kZXgsaT10LnRyYWNlfHx7fSxhPXQuY2RbMF0sbz10LmNkW25dfHx7fSxzPUFycmF5LmlzQXJyYXkobik/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5jYXN0T3B0aW9uKGEsbix0KXx8ZC5leHRyYWN0T3B0aW9uKHt9LGksIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZXh0cmFjdE9wdGlvbihvLGksdCxlKX07aWYocigiaG92ZXJpbmZvIiwiaGkiLCJob3ZlcmluZm8iKSxyKCJjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHIoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHIoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IikscigiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHIoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHIoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx0LnBvc3JlZj0ieSI9PT1lPyh0LngwK3QueDEpLzI6KHQueTArdC55MSkvMix0LngwPWQuY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9ZC5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1kLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPWQuY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOnguaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6eC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgbD14LnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitsKyIgLyAtIit4LnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitsLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgYz14LnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitjKyIgLyAtIit4LnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitjLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgdT10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuImFsbCIhPT11JiYodT11LnNwbGl0KCIrIiksdS5pbmRleE9mKCJ4Iik9PT0tMSYmKHQueExhYmVsPXZvaWQgMCksdS5pbmRleE9mKCJ5Iik9PT0tMSYmKHQueUxhYmVsPXZvaWQgMCksdS5pbmRleE9mKCJ6Iik9PT0tMSYmKHQuekxhYmVsPXZvaWQgMCksdS5pbmRleE9mKCJ0ZXh0Iik9PT0tMSYmKHQudGV4dD12b2lkIDApLHUuaW5kZXhPZigibmFtZSIpPT09LTEmJih0Lm5hbWU9dm9pZCAwKSksdH1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5ob3Zlcm1vZGUsbj1lLmNvbnRhaW5lcixpPXRbMF0sYT1pLnhhLG89aS55YSxzPWEuc2hvd3NwaWtlcyxsPW8uc2hvd3NwaWtlcztpZihuLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLCJjbG9zZXN0Ij09PXImJihzfHxsKSl7dmFyIGM9ZS5mdWxsTGF5b3V0LHU9YS5fb2Zmc2V0KyhpLngwK2kueDEpLzIsZj1vLl9vZmZzZXQrKGkueTAraS55MSkvMixkPXkuY29tYmluZShjLnBsb3RfYmdjb2xvcixjLnBhcGVyX2JnY29sb3IpLHA9aC5yZWFkYWJpbGl0eShpLmNvbG9yLGQpPDEuNT95LmNvbnRyYXN0KGQpOmkuY29sb3I7aWYobCl7dmFyIG09by5zcGlrZW1vZGUsdj1vLnNwaWtldGhpY2tuZXNzLGI9by5zcGlrZWNvbG9yfHxwLHg9by5fYm91bmRpbmdCb3gsXz0oeC5sZWZ0K3gucmlnaHQpLzI8dT94LnJpZ2h0OngubGVmdDtpZihtLmluZGV4T2YoInRvYXhpcyIpIT09LTF8fG0uaW5kZXhPZigiYWNyb3NzIikhPT0tMSl7dmFyIHc9XyxNPXU7bS5pbmRleE9mKCJhY3Jvc3MiKSE9PS0xJiYodz1vLl9jb3VudGVyU3BhblswXSxNPW8uX2NvdW50ZXJTcGFuWzFdKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoe3gxOncseDI6TSx5MTpmLHkyOmYsInN0cm9rZS13aWR0aCI6disyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoe3gxOncseDI6TSx5MTpmLHkyOmYsInN0cm9rZS13aWR0aCI6dixzdHJva2U6Yiwic3Ryb2tlLWRhc2hhcnJheSI6Zy5kYXNoU3R5bGUoby5zcGlrZWRhc2gsdil9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfW0uaW5kZXhPZigibWFya2VyIikhPT0tMSYmbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoe2N4Ol8rKCJyaWdodCIhPT1vLnNpZGU/djotdiksY3k6ZixyOnYsZmlsbDpifSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYocyl7dmFyIFQ9YS5zcGlrZW1vZGUsaz1hLnNwaWtldGhpY2tuZXNzLEE9YS5zcGlrZWNvbG9yfHxwLEU9YS5fYm91bmRpbmdCb3gsUz0oRS50b3ArRS5ib3R0b20pLzI8Zj9FLmJvdHRvbTpFLnRvcDtpZihULmluZGV4T2YoInRvYXhpcyIpIT09LTF8fFQuaW5kZXhPZigiYWNyb3NzIikhPT0tMSl7dmFyIEw9UyxDPWY7VC5pbmRleE9mKCJhY3Jvc3MiKSE9PS0xJiYoTD1hLl9jb3VudGVyU3BhblswXSxDPWEuX2NvdW50ZXJTcGFuWzFdKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoe3gxOnUseDI6dSx5MTpMLHkyOkMsInN0cm9rZS13aWR0aCI6aysyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoe3gxOnUseDI6dSx5MTpMLHkyOkMsInN0cm9rZS13aWR0aCI6ayxzdHJva2U6QSwic3Ryb2tlLWRhc2hhcnJheSI6Zy5kYXNoU3R5bGUoYS5zcGlrZWRhc2gsayl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfVQuaW5kZXhPZigibWFya2VyIikhPT0tMSYmbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoe2N4OnUsY3k6Uy0oInRvcCIhPT1hLnNpZGU/azotaykscjprLGZpbGw6QX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfX19ZnVuY3Rpb24gYyh0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpKXJldHVybiEwfXJldHVybiExfXZhciB1PXQoImQzIiksZj10KCJmYXN0LWlzbnVtZXJpYyIpLGg9dCgidGlueWNvbG9yMiIpLGQ9dCgiLi4vLi4vbGliIikscD10KCIuLi8uLi9saWIvZXZlbnRzIiksbT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx2PXQoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSxnPXQoIi4uL2RyYXdpbmciKSx5PXQoIi4uL2NvbG9yIiksYj10KCIuLi9kcmFnZWxlbWVudCIpLHg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxfPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksdz10KCIuL2hlbHBlcnMiKSxNPXQoIi4vY29uc3RhbnRzIiksVD1NLllBTkdMRSxrPU1hdGguUEkqVC8xODAsQT0xL01hdGguc2luKGspLEU9TWF0aC5jb3MoayksUz1NYXRoLnNpbihrKSxMPU0uSE9WRVJBUlJPV1NJWkUsQz1NLkhPVkVSVEVYVFBBRDtyLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGkpe3Q9ZC5nZXRHcmFwaERpdih0KSxkLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCtNLkhPVkVSSUQsTS5IT1ZFUk1JTlRJTUUsZnVuY3Rpb24oKXtuKHQsZSxyLGkpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fHkuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsdHJhY2U6e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowfSxuPXUuc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/dS5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6bixzPXtob3Zlcm1vZGU6ImNsb3Nlc3QiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8eS5iYWNrZ3JvdW5kLGNvbnRhaW5lcjpuLG91dGVyQ29udGFpbmVyOmF9LGw9aShbcl0scyxlLmdkKTtyZXR1cm4gbyhsLHMucm90YXRlTGFiZWxzKSxsLm5vZGUoKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi9ldmVudHMiOjcyMywiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6NzQ1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vY29sb3IiOjYxMSwiLi4vZHJhZ2VsZW1lbnQiOjYzMiwiLi4vZHJhd2luZyI6NjM1LCIuL2NvbnN0YW50cyI6NjQ3LCIuL2hlbHBlcnMiOjY0OSxkMzoxMjEsImZhc3QtaXNudW1lcmljIjoxMzEsdGlueWNvbG9yMjo1NDJ9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2k9aXx8e30scigiaG92ZXJsYWJlbC5iZ2NvbG9yIixpLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLGkuYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsaS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixpLmZvbnQpfX0seyIuLi8uLi9saWIiOjczNX1dLDY1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXMuaXNEM1NlbGVjdGlvbih0KT90Om8uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHMuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX1mdW5jdGlvbiBhKHQsZSxyKXtmdW5jdGlvbiBuKHIpe3JldHVybiBzLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9cmV0dXJuIHMuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsbil9dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4vaGVscGVycyIpLHU9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6dX0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnUsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOmMuZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0OmMuZ2V0Q2xvc2VzdCxpbmJveDpjLmluYm94LHF1YWRyYXR1cmU6Yy5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpjLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246aSxjYXN0SG92ZXJpbmZvOmEsaG92ZXI6dCgiLi9ob3ZlciIpLmhvdmVyLHVuaG92ZXI6bC51bmhvdmVyLGxvbmVIb3Zlcjp0KCIuL2hvdmVyIikubG9uZUhvdmVyLGxvbmVVbmhvdmVyOm4sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vZHJhZ2VsZW1lbnQiOjYzMiwiLi9hdHRyaWJ1dGVzIjo2NDQsIi4vY2FsYyI6NjQ1LCIuL2NsaWNrIjo2NDYsIi4vY29uc3RhbnRzIjo2NDcsIi4vZGVmYXVsdHMiOjY0OCwiLi9oZWxwZXJzIjo2NDksIi4vaG92ZXIiOjY1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjUzLCIuL2xheW91dF9kZWZhdWx0cyI6NjU0LCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjY1NSxkMzoxMjF9XSw2NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpKHtlZGl0VHlwZToibm9uZSJ9KTtpLmZhbWlseS5kZmx0PW4uSE9WRVJGT05ULGkuc2l6ZS5kZmx0PW4uSE9WRVJGT05UU0laRSxlLmV4cG9ydHM9e2RyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ6b29tIiwicGFuIiwic2VsZWN0IiwibGFzc28iLCJvcmJpdCIsInR1cm50YWJsZSJdLGRmbHQ6Inpvb20iLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExXSxlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxmb250OmksbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwMywiLi9jb25zdGFudHMiOjY0N31dLDY1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCJoIiE9PXRbcl0ub3JpZW50YXRpb24pe2U9ITE7YnJlYWt9fXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfW8oImRyYWdtb2RlIik7dmFyIHM7ZS5faGFzKCJjYXJ0ZXNpYW4iKT8oZS5faXNIb3Jpej1uKHIpLHM9ZS5faXNIb3Jpej8ieSI6IngiKTpzPSJjbG9zZXN0IixvKCJob3Zlcm1vZGUiLHMpO3ZhciBsPWUuX2hhcygibWFwYm94IiksYz1lLl9oYXMoImdlbyIpLHU9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT1lLmRyYWdtb2RlJiYoKGx8fGMpJiYxPT09dXx8bCYmYyYmMj09PXUpJiYoZS5kcmFnbW9kZT0icGFuIil9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTN9XSw2NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUscil9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY1MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjUzfV0sNjU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImltYWdlIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3ODR9XSw2NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGw9dVtoXSxjPSJpbWFnZXNbIitoKyJdLiIsbFtmKyJyZWYiXT09PWUuX2lkKXt2YXIgZD1sW2ZdLHA9bFsic2l6ZSIrZl0sbT1udWxsLHY9bnVsbDtpZihvKXttPWkoZCxlLnJhbmdlKTt2YXIgZz1wL01hdGgucG93KDEwLG0pLzI7dj0yKk1hdGgubG9nKGcrTWF0aC5zcXJ0KDErZypnKSkvTWF0aC5MTjEwfWVsc2UgbT1NYXRoLnBvdygxMCxkKSx2PW0qKE1hdGgucG93KDEwLHAvMiktTWF0aC5wb3coMTAsLXAvMikpO24obSk/bih2KXx8KHY9bnVsbCk6KG09bnVsbCx2PW51bGwpLGEoYytmLG0pLGEoYysic2l6ZSIrZix2KX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc1OSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDY1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9aWYoIW4oInZpc2libGUiLCEhbigic291cmNlIikpKXJldHVybiBlO24oImxheWVyIiksbigieGFuY2hvciIpLG4oInlhbmNob3IiKSxuKCJzaXpleCIpLG4oInNpemV5Iiksbigic2l6aW5nIiksbigib3BhY2l0eSIpO2Zvcih2YXIgbz17X2Z1bGxMYXlvdXQ6cn0sbD1bIngiLCJ5Il0sYz0wO2M8MjtjKyspe3ZhciB1PWxbY10sZj1hLmNvZXJjZVJlZih0LGUsbyx1LCJwYXBlciIpO2EuY29lcmNlUG9zaXRpb24oZSxvLG4sZix1LDApfXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7byh0LGUse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOm59KX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL2F0dHJpYnV0ZXMiOjY1Nn1dLDY1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vZHJhd2luZyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoIXRoaXMuaW1nfHx0aGlzLmltZy5zcmMhPT1lLnNvdXJjZSl7ci5hdHRyKCJ4bWxucyIsby5zdmcpO3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyLnJlbW92ZSgpLHQoKX12YXIgaT1uZXcgSW1hZ2U7dGhpcy5pbWc9aSxpLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSx0KCl9LHIub24oImVycm9yIixuKSxpLnNyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gcihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxzPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxsPWMuX3NpemUsdT1vP01hdGguYWJzKG8ubDJwKGUuc2l6ZXgpLW8ubDJwKDApKTplLnNpemV4KmwudyxmPXM/TWF0aC5hYnMocy5sMnAoZS5zaXpleSktcy5sMnAoMCkpOmUuc2l6ZXkqbC5oLGg9dSptLnhbZS54YW5jaG9yXS5vZmZzZXQsZD1mKm0ueVtlLnlhbmNob3JdLm9mZnNldCxwPW0ueFtlLnhhbmNob3JdLnNpemluZyttLnlbZS55YW5jaG9yXS5zaXppbmcsdj0obz9vLnIycChlLngpK28uX29mZnNldDplLngqbC53K2wubCkraCxnPShzP3MucjJwKGUueSkrcy5fb2Zmc2V0OmwuaC1lLnkqbC5oK2wudCkrZDtzd2l0Y2goZS5zaXppbmcpe2Nhc2UiZmlsbCI6cCs9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpwPSJub25lIn1yLmF0dHIoe3g6dix5Omcsd2lkdGg6dSxoZWlnaHQ6ZixwcmVzZXJ2ZUFzcGVjdFJhdGlvOnAsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgeT1vP28uX2lkOiIiLGI9cz9zLl9pZDoiIix4PXkrYjtyLmNhbGwoaS5zZXRDbGlwVXJsLHg/ImNsaXAiK2MuX3VpZCt4Om51bGwpfXZhciBzLGwsYz10Ll9mdWxsTGF5b3V0LHU9W10sZj17fSxoPVtdO2ZvcihsPTA7bDxjLmltYWdlcy5sZW5ndGg7bCsrKXt2YXIgZD1jLmltYWdlc1tsXTtpZihkLnZpc2libGUpaWYoImJlbG93Ij09PWQubGF5ZXImJiJwYXBlciIhPT1kLnhyZWYmJiJwYXBlciIhPT1kLnlyZWYpe3M9ZC54cmVmK2QueXJlZjt2YXIgcD1jLl9wbG90c1tzXTtpZighcCl7aC5wdXNoKGQpO2NvbnRpbnVlfXAubWFpbnBsb3QmJihzPXAubWFpbnBsb3QuaWQpLGZbc118fChmW3NdPVtdKSxmW3NdLnB1c2goZCl9ZWxzZSJhYm92ZSI9PT1kLmxheWVyP3UucHVzaChkKTpoLnB1c2goZCl9dmFyIG09e3g6e2xlZnQ6e3NpemluZzoieE1pbiIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOiJ4TWlkIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOiJ4TWF4IixvZmZzZXQ6LTF9fSx5Ont0b3A6e3NpemluZzoiWU1pbiIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOiJZTWlkIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzoiWU1heCIsb2Zmc2V0Oi0xfX19LHY9Yy5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGgpLGc9Yy5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKHUpO3YuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksZy5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx2LmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pLGcuZWFjaChmdW5jdGlvbih0KXtlLmJpbmQodGhpcykodCksci5iaW5kKHRoaXMpKHQpfSk7dmFyIHk9T2JqZWN0LmtleXMoYy5fcGxvdHMpO2ZvcihsPTA7bDx5Lmxlbmd0aDtsKyspe3M9eVtsXTt2YXIgYj1jLl9wbG90c1tzXTtpZihiLmltYWdlbGF5ZXIpe3ZhciB4PWIuaW1hZ2VsYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShmW3NdfHxbXSk7eC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MTYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL2RyYXdpbmciOjYzNSxkMzoxMjF9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImltYWdlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi9hdHRyaWJ1dGVzIjo2NTYsIi4vY29udmVydF9jb29yZHMiOjY1NywiLi9kZWZhdWx0cyI6NjU4LCIuL2RyYXciOjY1OX1dLDY2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9fSx7fV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJsZWdlbmQifSxmb250Om4oe2VkaXRUeXBlOiJsZWdlbmQifSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoidiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInJldmVyc2VkIiwiZ3JvdXBlZCJdLGV4dHJhczpbIm5vcm1hbCJdLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MS4wMixlZGl0VHlwZToibGVnZW5kIn0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJsZWdlbmQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjEsZWRpdFR5cGU6ImxlZ2VuZCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzLCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MTB9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo0LHNjcm9sbEJhckhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjR9fSx7fV0sNjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpLmNvZXJjZShkLHAsYSx0LGUpfWZvcih2YXIgYyx1LGYsaCxkPXQubGVnZW5kfHx7fSxwPWUubGVnZW5kPXt9LG09MCx2PSJub3JtYWwiLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHk9cltnXTtzLmxlZ2VuZEdldHNUcmFjZSh5KSYmKG0rKyxuLnRyYWNlSXMoeSwicGllIikmJm0rKyksKG4udHJhY2VJcyh5LCJiYXIiKSYmInN0YWNrIj09PWUuYmFybW9kZXx8WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YoeS5maWxsKSE9PS0xKSYmKHY9cy5pc0dyb3VwZWQoe3RyYWNlb3JkZXI6dn0pPyJncm91cGVkK3JldmVyc2VkIjoicmV2ZXJzZWQiKSx2b2lkIDAhPT15LmxlZ2VuZGdyb3VwJiYiIiE9PXkubGVnZW5kZ3JvdXAmJih2PXMuaXNSZXZlcnNlZCh7dHJhY2VvcmRlcjp2fSk/InJldmVyc2VkK2dyb3VwZWQiOiJncm91cGVkIil9aWYoaS5jb2VyY2UodCxlLG8sInNob3dsZWdlbmQiLG0+MSkhPT0hMSl7aWYobCgiYmdjb2xvciIsZS5wYXBlcl9iZ2NvbG9yKSxsKCJib3JkZXJjb2xvciIpLGwoImJvcmRlcndpZHRoIiksaS5jb2VyY2VGb250KGwsImZvbnQiLGUuZm9udCksbCgib3JpZW50YXRpb24iKSwiaCI9PT1wLm9yaWVudGF0aW9uKXt2YXIgYj10LnhheGlzO2ImJmIucmFuZ2VzbGlkZXImJmIucmFuZ2VzbGlkZXIudmlzaWJsZT8oYz0wLGY9ImxlZnQiLHU9MS4xLGg9ImJvdHRvbSIpOihjPTAsZj0ibGVmdCIsdT0tLjEsaD0idG9wIil9bCgidHJhY2VvcmRlciIsdikscy5pc0dyb3VwZWQoZS5sZWdlbmQpJiZsKCJ0cmFjZWdyb3VwZ2FwIiksbCgieCIsYyksbCgieGFuY2hvciIsZiksbCgieSIsdSksbCgieWFuY2hvciIsaCksaS5ub25lT3JBbGwoZCxwLFsieCIsInkiXSl9fX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyOSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9hdHRyaWJ1dGVzIjo2NjIsIi4vaGVscGVycyI6NjY4fV0sNjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHIpe2cuY29udmVydFRvVHNwYW5zKHIsZSxmdW5jdGlvbigpe2EodCxlKX0pfXZhciBuPXQuZGF0YSgpWzBdWzBdLGk9ZS5fZnVsbExheW91dCxvPW4udHJhY2Uscz1kLnRyYWNlSXMobywicGllIiksbD1vLmluZGV4LGM9cz9uLmxhYmVsOm8ubmFtZSxoPXQuc2VsZWN0QWxsKCJ0ZXh0LmxlZ2VuZHRleHQiKS5kYXRhKFswXSk7aC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImxlZ2VuZHRleHQiLCEwKSxoLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2FsbChtLmZvbnQsaS5sZWdlbmQuZm9udCkudGV4dChjKSxlLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiFzP2guY2FsbChnLm1ha2VFZGl0YWJsZSx7Z2Q6ZX0pLmNhbGwocikub24oImVkaXQiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dCh0KS5jYWxsKHIpO3ZhciBpPXQ7dGhpcy50ZXh0KCl8fCh0PSIgICAgIik7dmFyIGEsbyxzPW4udHJhY2UuX2Z1bGxJbnB1dHx8e30sYz17fTtpZihbIm9obGMiLCJjYW5kbGVzdGljayJdLmluZGV4T2Yocy50eXBlKSE9PS0xKWE9bi50cmFjZS50cmFuc2Zvcm1zLG89YVthLmxlbmd0aC0xXS5kaXJlY3Rpb24sY1tvKyIubmFtZSJdPXQ7ZWxzZSBpZihkLmhhc1RyYW5zZm9ybShzLCJncm91cGJ5Iikpe3ZhciBoPWQuZ2V0VHJhbnNmb3JtSW5kaWNlcyhzLCJncm91cGJ5IikscD1oW2gubGVuZ3RoLTFdLG09Zi5rZXllZENvbnRhaW5lcihzLCJ0cmFuc2Zvcm1zWyIrcCsiXS5zdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIik7IiI9PT1pP20ucmVtb3ZlKG4udHJhY2UuX2dyb3VwKTptLnNldChuLnRyYWNlLl9ncm91cCx0KSxjPW0uY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBjLm5hbWU9dDtyZXR1cm4gdS5yZXN0eWxlKGUsYyxsKX0pOmguY2FsbChyKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbj0xLGk9dC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZHRvZ2dsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5jYWxsKHYuZmlsbCwicmdiYSgwLDAsMCwwKSIpLGkub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHItZS5fbGVnZW5kTW91c2VEb3duVGltZTxBP24rPTE6KG49MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSksaS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+QSYmKG49TWF0aC5tYXgobi0xLDEpKSwxPT09bj9yLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3kodCxlLG4pfSxBKToyPT09biYmKHIuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHIuX2NsaWNrVGltZW91dCksZS5fbGVnZW5kTW91c2VEb3duVGltZT0wLHkodCxlLG4pKX19KX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQsbD1zLmZvbnQuc2l6ZSpfO2lmKG8pe3ZhciBjPW0uYkJveChvKTtuPWMuaGVpZ2h0LGk9Yy53aWR0aCxtLnNldFRyYW5zbGF0ZShhLDAsbi80KX1lbHNle3ZhciB1PXQuc2VsZWN0KCIubGVnZW5kdGV4dCIpLGY9Zy5saW5lQ291bnQodSksaD11Lm5vZGUoKTtuPWwqZixpPWg/bS5iQm94KGgpLndpZHRoOjA7dmFyIGQ9bCooLjMrKDEtZikvMik7Zy5wb3NpdGlvblRleHQodSw0MCxkKX1uPU1hdGgubWF4KG4sMTYpKzMsci5oZWlnaHQ9bixyLndpZHRoPWl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4ubGVnZW5kLGE9aS5ib3JkZXJ3aWR0aCxvPVQuaXNHcm91cGVkKGkpLHM9MDtpZihpLndpZHRoPTAsaS5oZWlnaHQ9MCxULmlzVmVydGljYWwoaSkpbyYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7bS5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO20uc2V0VHJhbnNsYXRlKHRoaXMsYSw1K2EraS5oZWlnaHQrci8yKSxpLmhlaWdodCs9cixpLndpZHRoPU1hdGgubWF4KGkud2lkdGgsbil9KSxpLndpZHRoKz00NSsyKmEsaS5oZWlnaHQrPTEwKzIqYSxvJiYoaS5oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCkscz00MDtlbHNlIGlmKG8pe2Zvcih2YXIgbD1baS53aWR0aF0sdT1lLmRhdGEoKSxmPTAsaD11Lmxlbmd0aDtmPGg7ZisrKXt2YXIgZD11W2ZdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS53aWR0aH0pLHA9NDArTWF0aC5tYXguYXBwbHkobnVsbCxkKTtpLndpZHRoKz1pLnRyYWNlZ3JvdXBnYXArcCxsLnB1c2goaS53aWR0aCl9ZS5lYWNoKGZ1bmN0aW9uKHQsZSl7bS5zZXRUcmFuc2xhdGUodGhpcyxsW2VdLDApfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyksZT10LnNlbGVjdEFsbCgiZy50cmFjZXMiKSxyPTA7ZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0sbj1lLmhlaWdodDttLnNldFRyYW5zbGF0ZSh0aGlzLDAsNSthK3Irbi8yKSxyKz1ufSksaS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQscil9KSxpLmhlaWdodCs9MTArMiphLGkud2lkdGgrPTIqYX1lbHNle3ZhciB2PTAsZz0wLHk9MCxiPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3k9TWF0aC5tYXgoNDArdFswXS53aWR0aCx5KX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9eSxvPWkudHJhY2Vncm91cGdhcHx8NTthK2IrbytyPm4ud2lkdGgtKG4ubWFyZ2luLnIrbi5tYXJnaW4ubCkmJihiPTAsdis9ZyxpLmhlaWdodD1pLmhlaWdodCtnLGc9MCksbS5zZXRUcmFuc2xhdGUodGhpcyxhK2IsNSthK2UuaGVpZ2h0LzIrdiksaS53aWR0aCs9bytyLGkuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGUuaGVpZ2h0KSxiKz1vK3IsZz1NYXRoLm1heChlLmhlaWdodCxnKX0pLGkud2lkdGgrPTIqYSxpLmhlaWdodCs9MTArMiphfWkud2lkdGg9TWF0aC5jZWlsKGkud2lkdGgpLGkuaGVpZ2h0PU1hdGguY2VpbChpLmhlaWdodCksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07Yy5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikuY2FsbChtLnNldFJlY3QsMCwtci5oZWlnaHQvMiwodC5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0PzA6aS53aWR0aCkrcyxyLmhlaWdodCl9KX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLmxlZ2VuZCxuPSJsZWZ0IjtrLmlzUmlnaHRBbmNob3Iocik/bj0icmlnaHQiOmsuaXNDZW50ZXJBbmNob3IocikmJihuPSJjZW50ZXIiKTt2YXIgaT0idG9wIjtrLmlzQm90dG9tQW5jaG9yKHIpP2k9ImJvdHRvbSI6ay5pc01pZGRsZUFuY2hvcihyKSYmKGk9Im1pZGRsZSIpLGguYXV0b01hcmdpbih0LCJsZWdlbmQiLHt4OnIueCx5OnIueSxsOnIud2lkdGgqKHtyaWdodDoxLGNlbnRlcjouNX1bbl18fDApLHI6ci53aWR0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W25dfHwwKSxiOnIuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtpXXx8MCksdDpyLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1baV18fDApfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5sZWdlbmQsbj0ibGVmdCI7ay5pc1JpZ2h0QW5jaG9yKHIpP249InJpZ2h0IjprLmlzQ2VudGVyQW5jaG9yKHIpJiYobj0iY2VudGVyIiksaC5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ci54LHk6LjUsbDpyLndpZHRoKih7cmlnaHQ6MSxjZW50ZXI6LjV9W25dfHwwKSxyOnIud2lkdGgqKHtsZWZ0OjEsY2VudGVyOi41fVtuXXx8MCksYjowLHQ6MH0pfXZhciBjPXQoImQzIiksdT10KCIuLi8uLi9wbG90bHkiKSxmPXQoIi4uLy4uL2xpYiIpLGg9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxkPXQoIi4uLy4uL3JlZ2lzdHJ5IikscD10KCIuLi9kcmFnZWxlbWVudCIpLG09dCgiLi4vZHJhd2luZyIpLHY9dCgiLi4vY29sb3IiKSxnPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHk9dCgiLi9oYW5kbGVfY2xpY2siKSxiPXQoIi4vY29uc3RhbnRzIikseD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHc9dCgiLi9nZXRfbGVnZW5kX2RhdGEiKSxNPXQoIi4vc3R5bGUiKSxUPXQoIi4vaGVscGVycyIpLGs9dCgiLi9hbmNob3JfdXRpbHMiKSxBPXguREJMQ0xJQ0tERUxBWTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe0wuYXR0cigiZGF0YS1zY3JvbGwiLGUpLmNhbGwobS5zZXRUcmFuc2xhdGUsMCxlKSxDLmNhbGwobS5zZXRSZWN0LE4sdCxiLnNjcm9sbEJhcldpZHRoLGIuc2Nyb2xsQmFySGVpZ2h0KSxFLnNlbGVjdCgicmVjdCIpLmF0dHIoe3k6Zy5ib3JkZXJ3aWR0aC1lfSl9dmFyIHI9dC5fZnVsbExheW91dCxhPSJsZWdlbmQiK3IuX3VpZDtpZihyLl9pbmZvbGF5ZXImJnQuY2FsY2RhdGEpe3QuX2xlZ2VuZE1vdXNlRG93blRpbWV8fCh0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTApO3ZhciBnPXIubGVnZW5kLHg9ci5zaG93bGVnZW5kJiZ3KHQuY2FsY2RhdGEsZyksXz1yLmhpZGRlbmxhYmVsc3x8W107aWYoIXIuc2hvd2xlZ2VuZHx8IXgubGVuZ3RoKXJldHVybiByLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIubGVnZW5kIikucmVtb3ZlKCksci5fdG9wZGVmcy5zZWxlY3QoIiMiK2EpLnJlbW92ZSgpLHZvaWQgaC5hdXRvTWFyZ2luKHQsImxlZ2VuZCIpO3ZhciBUPXIuX2luZm9sYXllci5zZWxlY3RBbGwoImcubGVnZW5kIikuZGF0YShbMF0pO1QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczoibGVnZW5kIiwicG9pbnRlci1ldmVudHMiOiJhbGwifSk7dmFyIEU9ci5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK2EpLmRhdGEoWzBdKTtFLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixhKS5hcHBlbmQoInJlY3QiKTt2YXIgUz1ULnNlbGVjdEFsbCgicmVjdC5iZyIpLmRhdGEoWzBdKTtTLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cih7Y2xhc3M6ImJnIiwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KSxTLmNhbGwodi5zdHJva2UsZy5ib3JkZXJjb2xvciksUy5jYWxsKHYuZmlsbCxnLmJnY29sb3IpLFMuc3R5bGUoInN0cm9rZS13aWR0aCIsZy5ib3JkZXJ3aWR0aCsicHgiKTt2YXIgTD1ULnNlbGVjdEFsbCgiZy5zY3JvbGxib3giKS5kYXRhKFswXSk7TC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic2Nyb2xsYm94Iik7dmFyIEM9VC5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyIikuZGF0YShbMF0pO0MuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKHtjbGFzczoic2Nyb2xsYmFyIixyeDoyMCxyeToyLHdpZHRoOjAsaGVpZ2h0OjB9KS5jYWxsKHYuZmlsbCwiIzgwOEJBNCIpO3ZhciBJPUwuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEoeCk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksSS5leGl0KCkucmVtb3ZlKCk7dmFyIEQ9SS5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShmLmlkZW50aXR5KTtELmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSxELmV4aXQoKS5yZW1vdmUoKSxELmNhbGwoTSx0KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gZC50cmFjZUlzKGUsInBpZSIpP18uaW5kZXhPZih0WzBdLmxhYmVsKSE9PS0xPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KS5lYWNoKGZ1bmN0aW9uKCl7Yy5zZWxlY3QodGhpcykuY2FsbChuLHQpLmNhbGwoaSx0KX0pO3ZhciBQPTAhPT1ULmVudGVyKCkuc2l6ZSgpO1AmJihvKHQsSSxEKSxzKHQpKTt2YXIgej1yLndpZHRoLE89ci5oZWlnaHQ7byh0LEksRCksZy5oZWlnaHQ+Tz9sKHQpOnModCk7dmFyIFI9ci5fc2l6ZSxGPVIubCtSLncqZy54LGo9Ui50K1IuaCooMS1nLnkpO2suaXNSaWdodEFuY2hvcihnKT9GLT1nLndpZHRoOmsuaXNDZW50ZXJBbmNob3IoZykmJihGLT1nLndpZHRoLzIpLGsuaXNCb3R0b21BbmNob3IoZyk/ai09Zy5oZWlnaHQ6ay5pc01pZGRsZUFuY2hvcihnKSYmKGotPWcuaGVpZ2h0LzIpO3ZhciBOPWcud2lkdGgsQj1SLnc7Tj5CPyhGPVIubCxOPUIpOihGK04+eiYmKEY9ei1OKSxGPDAmJihGPTApLE49TWF0aC5taW4oei1GLGcud2lkdGgpKTt2YXIgVT1nLmhlaWdodCxWPVIuaDtVPlY/KGo9Ui50LFU9Vik6KGorVT5PJiYoaj1PLVUpLGo8MCYmKGo9MCksVT1NYXRoLm1pbihPLWosZy5oZWlnaHQpKSxtLnNldFRyYW5zbGF0ZShULEYsaik7dmFyIEgscSxHPVUtYi5zY3JvbGxCYXJIZWlnaHQtMipiLnNjcm9sbEJhck1hcmdpbixZPWcuaGVpZ2h0LVU7aWYoZy5oZWlnaHQ8PVV8fHQuX2NvbnRleHQuc3RhdGljUGxvdClTLmF0dHIoe3dpZHRoOk4tZy5ib3JkZXJ3aWR0aCxoZWlnaHQ6VS1nLmJvcmRlcndpZHRoLHg6Zy5ib3JkZXJ3aWR0aC8yLHk6Zy5ib3JkZXJ3aWR0aC8yfSksbS5zZXRUcmFuc2xhdGUoTCwwLDApLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6Ti0yKmcuYm9yZGVyd2lkdGgsaGVpZ2h0OlUtMipnLmJvcmRlcndpZHRoLHg6Zy5ib3JkZXJ3aWR0aCx5OmcuYm9yZGVyd2lkdGh9KSxMLmNhbGwobS5zZXRDbGlwVXJsLGEpO2Vsc2V7SD1iLnNjcm9sbEJhck1hcmdpbixxPUwuYXR0cigiZGF0YS1zY3JvbGwiKXx8MCxTLmF0dHIoe3dpZHRoOk4tMipnLmJvcmRlcndpZHRoK2Iuc2Nyb2xsQmFyV2lkdGgrYi5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlUtZy5ib3JkZXJ3aWR0aCx4OmcuYm9yZGVyd2lkdGgvMix5OmcuYm9yZGVyd2lkdGgvMn0pLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6Ti0yKmcuYm9yZGVyd2lkdGgrYi5zY3JvbGxCYXJXaWR0aCtiLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6VS0yKmcuYm9yZGVyd2lkdGgseDpnLmJvcmRlcndpZHRoLHk6Zy5ib3JkZXJ3aWR0aC1xfSksTC5jYWxsKG0uc2V0Q2xpcFVybCxhKSxQJiZlKEgscSksVC5vbigid2hlZWwiLG51bGwpLFQub24oIndoZWVsIixmdW5jdGlvbigpe3E9Zi5jb25zdHJhaW4oTC5hdHRyKCJkYXRhLXNjcm9sbCIpLWMuZXZlbnQuZGVsdGFZL0cqWSwtWSwwKSxIPWIuc2Nyb2xsQmFyTWFyZ2luLXEvWSpHLGUoSCxxKSwwIT09cSYmcSE9PS1ZJiZjLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSxDLm9uKCIuZHJhZyIsbnVsbCksTC5vbigiLmRyYWciLG51bGwpO3ZhciBYPWMuYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnIixmdW5jdGlvbigpe0g9Zi5jb25zdHJhaW4oYy5ldmVudC55LWIuc2Nyb2xsQmFySGVpZ2h0LzIsYi5zY3JvbGxCYXJNYXJnaW4sYi5zY3JvbGxCYXJNYXJnaW4rRykscT0tKEgtYi5zY3JvbGxCYXJNYXJnaW4pL0cqWSxlKEgscSl9KTtDLmNhbGwoWCksTC5jYWxsKFgpfWlmKHQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24pe3ZhciBXLFosSixLO1QuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEwKSxwLmluaXQoe2VsZW1lbnQ6VC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1tLmdldFRyYW5zbGF0ZShUKTtKPXQueCxLPXQueX0sbW92ZUZuOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Sit0LG49SytlO20uc2V0VHJhbnNsYXRlKFQscixuKSxXPXAuYWxpZ24ociwwLFIubCxSLmwrUi53LGcueGFuY2hvciksWj1wLmFsaWduKG4sMCxSLnQrUi5oLFIudCxnLnlhbmNob3IpfSxkb25lRm46ZnVuY3Rpb24oZSxuLGkpe2lmKGUmJnZvaWQgMCE9PVcmJnZvaWQgMCE9PVopdS5yZWxheW91dCh0LHsibGVnZW5kLngiOlcsImxlZ2VuZC55IjpafSk7ZWxzZXt2YXIgYT1yLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGkuY2xpZW50WD49dC5sZWZ0JiZpLmNsaWVudFg8PXQucmlnaHQmJmkuY2xpZW50WT49dC50b3AmJmkuY2xpZW50WTw9dC5ib3R0b219KTthLnNpemUoKT4wJiYoMT09PW4/VC5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5KGEsdCxuKX0sQSk6Mj09PW4mJihULl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChULl9jbGlja1RpbWVvdXQpLHkoYSx0LG4pKSl9fX0pfX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcwOCwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzEzLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NTcsIi4uLy4uL3Bsb3RseSI6Nzc0LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuLi9jb2xvciI6NjExLCIuLi9kcmFnZWxlbWVudCI6NjMyLCIuLi9kcmF3aW5nIjo2MzUsIi4vYW5jaG9yX3V0aWxzIjo2NjEsIi4vY29uc3RhbnRzIjo2NjMsIi4vZ2V0X2xlZ2VuZF9kYXRhIjo2NjYsIi4vaGFuZGxlX2NsaWNrIjo2NjcsIi4vaGVscGVycyI6NjY4LCIuL3N0eWxlIjo2NzAsZDM6MTIxfV0sNjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7aWYoIiIhPT10JiZpLmlzR3JvdXBlZChlKSlsLmluZGV4T2YodCk9PT0tMT8obC5wdXNoKHQpLGM9ITAsc1t0XT1bW3JdXSk6c1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIitmO2wucHVzaChuKSxzW25dPVtbcl1dLGYrK319dmFyIGEsbyxzPXt9LGw9W10sYz0hMSx1PXt9LGY9MDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaD10W2FdLGQ9aFswXSxwPWQudHJhY2UsbT1wLmxlZ2VuZGdyb3VwO2lmKGkubGVnZW5kR2V0c1RyYWNlKHApJiZwLnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHAsInBpZSIpKWZvcih1W21dfHwodVttXT17fSksbz0wO288aC5sZW5ndGg7bysrKXt2YXIgdj1oW29dLmxhYmVsO3VbbV1bdl18fChyKG0se2xhYmVsOnYsY29sb3I6aFtvXS5jb2xvcixpOmhbb10uaSx0cmFjZTpwfSksdVttXVt2XT0hMCl9ZWxzZSByKG0sZCl9aWYoIWwubGVuZ3RoKXJldHVybltdO3ZhciBnLHksYj1sLmxlbmd0aDtpZihjJiZpLmlzR3JvdXBlZChlKSlmb3IoeT1uZXcgQXJyYXkoYiksYT0wO2E8YjthKyspZz1zW2xbYV1dLHlbYV09aS5pc1JldmVyc2VkKGUpP2cucmV2ZXJzZSgpOmc7ZWxzZXtmb3IoeT1bbmV3IEFycmF5KGIpXSxhPTA7YTxiO2ErKylnPXNbbFthXV1bMF0seVswXVtpLmlzUmV2ZXJzZWQoZSk/Yi1hLTE6YV09ZztiPTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9Yix5fX0seyIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2hlbHBlcnMiOjY2OH1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90bHkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPSEwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49Xy5pbmRleE9mKHQpLGk9eFtlXTtyZXR1cm4gaXx8KGk9eFtlXT1bXSksXy5pbmRleE9mKHQpPT09LTEmJihfLnB1c2godCksbj1fLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGEuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIG49d1tyLmluZGV4XTtpZighbil7dmFyIG89YS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxsPW9bby5sZW5ndGgtMV07bj1pLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitsKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx3W3IuaW5kZXhdPW59dmFyIGM9bi5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWMmJihjPSEwKSxjIT09ITEmJm4uc2V0KHQuX2dyb3VwLGUpLE1bci5pbmRleF09cyhyLmluZGV4LCJ2aXNpYmxlIixyLnZpc2libGUhPT0hMSl9ZWxzZXt2YXIgdT1yLnZpc2libGUhPT0hMSYmZTtzKHIuaW5kZXgsInZpc2libGUiLHUpfX1pZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBjLHUsZixoLGQscCxtPWUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzP2UuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLnNsaWNlKCk6W10sdj10LmRhdGEoKVswXVswXSxnPWUuX2Z1bGxEYXRhLHk9di50cmFjZSxiPXkubGVnZW5kZ3JvdXAseD17fSxfPVtdLHc9W10sTT1bXTtpZigxPT09ciYmbyYmZS5kYXRhJiZlLl9jb250ZXh0LnNob3dUaXBzPyhpLm5vdGlmaWVyKCJEb3VibGUgY2xpY2sgb24gbGVnZW5kIHRvIGlzb2xhdGUgaW5kaXZpZHVhbCB0cmFjZSIsImxvbmciKSxvPSExKTpvPSExLGEudHJhY2VJcyh5LCJwaWUiKSl7dmFyIFQ9di5sYWJlbCxrPW0uaW5kZXhPZihUKTsxPT09cj9rPT09LTE/bS5wdXNoKFQpOm0uc3BsaWNlKGssMSk6Mj09PXImJihtPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtUIT09dC5sYWJlbCYmbS5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PW0ubGVuZ3RoJiZrPT09LTEmJihtPVtdKSksbi5yZWxheW91dChlLCJoaWRkZW5sYWJlbHMiLG0pfWVsc2V7dmFyIEEsRT1iJiZiLmxlbmd0aCxTPVtdO2lmKEUpZm9yKGM9MDtjPGcubGVuZ3RoO2MrKylBPWdbY10sQS52aXNpYmxlJiZBLmxlZ2VuZGdyb3VwPT09YiYmUy5wdXNoKGMpO2lmKDE9PT1yKXt2YXIgTDtzd2l0Y2goeS52aXNpYmxlKXtjYXNlITA6TD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOkw9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpMPSEwfWlmKEUpZm9yKGM9MDtjPGcubGVuZ3RoO2MrKylnW2NdLnZpc2libGUhPT0hMSYmZ1tjXS5sZWdlbmRncm91cD09PWImJmwoZ1tjXSxMKTtlbHNlIGwoeSxMKX1lbHNlIGlmKDI9PT1yKXt2YXIgQyxJLEQsUD0hMDtmb3IoYz0wO2M8Zy5sZW5ndGg7YysrKWlmKCEoQz1nW2NdPT09eSkmJiEoST1FJiZnW2NdLmxlZ2VuZGdyb3VwPT09YikmJmdbY10udmlzaWJsZT09PSEwJiYhYS50cmFjZUlzKGdbY10sIm5vdExlZ2VuZElzb2xhdGFibGUiKSl7UD0hMTticmVha31mb3IoYz0wO2M8Zy5sZW5ndGg7YysrKWlmKGdbY10udmlzaWJsZSE9PSExJiYhYS50cmFjZUlzKGdbY10sIm5vdExlZ2VuZElzb2xhdGFibGUiKSlzd2l0Y2goeS52aXNpYmxlKXtjYXNlImxlZ2VuZG9ubHkiOmwoZ1tjXSwhMCk7YnJlYWs7Y2FzZSEwOkQ9ISFQfHwibGVnZW5kb25seSIsQz1nW2NdPT09eSxJPUN8fEUmJmdbY10ubGVnZW5kZ3JvdXA9PT1iLGwoZ1tjXSwhIUl8fEQpfX1mb3IoYz0wO2M8dy5sZW5ndGg7YysrKWlmKGY9d1tjXSl7dmFyIHo9Zi5jb25zdHJ1Y3RVcGRhdGUoKSxPPU9iamVjdC5rZXlzKHopO2Zvcih1PTA7dTxPLmxlbmd0aDt1KyspaD1PW3VdLHA9eFtoXT14W2hdfHxbXSxwW01bY11dPXpbaF19Zm9yKGQ9T2JqZWN0LmtleXMoeCksYz0wO2M8ZC5sZW5ndGg7YysrKWZvcihoPWRbY10sdT0wO3U8Xy5sZW5ndGg7dSsrKXhbaF0uaGFzT3duUHJvcGVydHkodSl8fCh4W2hdW3VdPXZvaWQgMCk7bi5yZXN0eWxlKGUseCxfKX19fX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTN9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtyLmxlZ2VuZEdldHNUcmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZuLnRyYWNlSXModCwic2hvd0xlZ2VuZCIpfSxyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigiZ3JvdXBlZCIpIT09LTF9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoInJldmVyc2VkIikhPT0tMX19LHsiLi4vLi4vcmVnaXN0cnkiOjg1M31dLDY2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLHN0eWxlOnQoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjo2NjIsIi4vZGVmYXVsdHMiOjY2NCwiLi9kcmF3Ijo2NjUsIi4vc3R5bGUiOjY3MH1dLDY3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYz10KCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dFswXS50cmFjZSxyPWUudmlzaWJsZSYmZS5maWxsJiYibm9uZSIhPT1lLmZpbGwsaT1sLmhhc0xpbmVzKGUpO2UmJmUuX21vZHVsZSYmImNvbnRvdXJjYXJwZXQiPT09ZS5fbW9kdWxlLm5hbWUmJihpPWUuY29udG91cnMuc2hvd2xpbmVzLHI9ImZpbGwiPT09ZS5jb250b3Vycy5jb2xvcmluZyk7dmFyIGE9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEocj9bdF06W10pO2EuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1maWxsIiwhMCksYS5leGl0KCkucmVtb3ZlKCksYS5hdHRyKCJkIiwiTTUsMGgzMHY2aC0zMHoiKS5jYWxsKG8uZmlsbEdyb3VwU3R5bGUpO3ZhciBzPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpP1t0XTpbXSk7cy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5hdHRyKCJkIiwiTTUsMGgzMCIpLHMuZXhpdCgpLnJlbW92ZSgpLHMuY2FsbChvLmxpbmVHcm91cFN0eWxlKX1mdW5jdGlvbiB1KHQpe2Z1bmN0aW9uIHIodCxlLHIpe3ZhciBuPWEubmVzdGVkUHJvcGVydHkoZix0KS5nZXQoKSxpPUFycmF5LmlzQXJyYXkobikmJmU/ZShuKTpuO2lmKHIpe2lmKGk8clswXSlyZXR1cm4gclswXTtpZihpPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIGl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFswXX12YXIgcyxjLHU9dFswXSxmPXUudHJhY2UsaD1sLmhhc01hcmtlcnMoZiksZD1sLmhhc1RleHQoZikscD1sLmhhc0xpbmVzKGYpO2lmKGh8fGR8fHApe3ZhciBtPXt9LHY9e307aCYmKG0ubWM9cigibWFya2VyLmNvbG9yIixpKSxtLm1vPXIoIm1hcmtlci5vcGFjaXR5IixhLm1lYW4sWy4yLDFdKSxtLm1zPXIoIm1hcmtlci5zaXplIixhLm1lYW4sWzIsMTZdKSxtLm1sYz1yKCJtYXJrZXIubGluZS5jb2xvciIsaSksbS5tbHc9cigibWFya2VyLmxpbmUud2lkdGgiLGEubWVhbixbMCw1XSksdi5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn0pLHAmJih2LmxpbmU9e3dpZHRoOnIoImxpbmUud2lkdGgiLGksWzAsMTBdKX0pLGQmJihtLnR4PSJBYSIsbS50cD1yKCJ0ZXh0cG9zaXRpb24iLGkpLG0udHM9MTAsbS50Yz1yKCJ0ZXh0Zm9udC5jb2xvciIsaSksbS50Zj1yKCJ0ZXh0Zm9udC5mYW1pbHkiLGkpKSxzPVthLm1pbkV4dGVuZCh1LG0pXSxjPWEubWluRXh0ZW5kKGYsdil9dmFyIGc9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLHk9Zy5zZWxlY3RBbGwoInBhdGguc2NhdHRlcnB0cyIpLmRhdGEoaD9zOltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic2NhdHRlcnB0cyIsITApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHkuZXhpdCgpLnJlbW92ZSgpLHkuY2FsbChvLnBvaW50U3R5bGUsYyxlKSxoJiYoc1swXS5tcmM9Myk7dmFyIGI9Zy5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShkP3M6W10pO2IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxiLmV4aXQoKS5yZW1vdmUoKSxiLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwoby50ZXh0UG9pbnRTdHlsZSxjLGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxhPXIubGluZXx8e30sbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJhciIpLmRhdGEoaS50cmFjZUlzKGUsImJhciIpP1t0XTpbXSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJhciIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxvPShpLm1sdysxfHxhLndpZHRoKzEpLTE7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwocy5maWxsLGkubWN8fHIuY29sb3IpLG8mJmUuY2FsbChzLnN0cm9rZSxpLm1sY3x8YS5jb2xvcil9KX1mdW5jdGlvbiBoKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJveCIpLmRhdGEoaS50cmFjZUlzKGUsImJveC12aW9saW4iKSYmZS52aXNpYmxlP1t0XTpbXSkKO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUubGluZS53aWR0aCxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoInN0cm9rZS13aWR0aCIsdCsicHgiKS5jYWxsKHMuZmlsbCxlLmZpbGxjb2xvciksdCYmci5jYWxsKHMuc3Ryb2tlLGUubGluZS5jb2xvcil9KX1mdW5jdGlvbiBkKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZHBpZSIpLmRhdGEoaS50cmFjZUlzKGUsInBpZSIpJiZlLnZpc2libGU/W3RdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kcGllIiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxyLmV4aXQoKS5yZW1vdmUoKSxyLnNpemUoKSYmci5jYWxsKGMsdFswXSxlKX10LmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1lLnNlbGVjdEFsbCgiZy5sYXllcnMiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVycyIsITApLHIuc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSksci5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxyLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIGk9ci5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW3RdKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW3RdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkuZWFjaChmKS5lYWNoKGgpLmVhY2goZCkuZWFjaChyKS5lYWNoKHUpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiOjEwMzEsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCIuLi9jb2xvciI6NjExLCIuLi9kcmF3aW5nIjo2MzUsZDM6MTIxfV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9ZS5jdXJyZW50VGFyZ2V0LGE9aS5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLG89aS5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLHM9dC5fZnVsbExheW91dCxsPXt9LGM9ZC5saXN0KHQsbnVsbCwhMCksdT0ib24iO2lmKCJ6b29tIj09PWEpe3ZhciBoLHA9ImluIj09PW8/LjU6MixtPSgxK3ApLzIsdj0oMS1wKS8yO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspaWYocj1jW25dLCFyLmZpeGVkcmFuZ2UpaWYoaD1yLl9uYW1lLCJhdXRvIj09PW8pbFtoKyIuYXV0b3JhbmdlIl09ITA7ZWxzZSBpZigicmVzZXQiPT09byl7aWYodm9pZCAwPT09ci5fcmFuZ2VJbml0aWFsKWxbaCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2V7dmFyIGc9ci5fcmFuZ2VJbml0aWFsLnNsaWNlKCk7bFtoKyIucmFuZ2VbMF0iXT1nWzBdLGxbaCsiLnJhbmdlWzFdIl09Z1sxXX12b2lkIDAhPT1yLl9zaG93U3Bpa2VJbml0aWFsJiYobFtoKyIuc2hvd3NwaWtlcyJdPXIuX3Nob3dTcGlrZUluaXRpYWwsIm9uIiE9PXV8fHIuX3Nob3dTcGlrZUluaXRpYWx8fCh1PSJvZmYiKSl9ZWxzZXt2YXIgeT1bci5yMmwoci5yYW5nZVswXSksci5yMmwoci5yYW5nZVsxXSldLGI9W20qeVswXSt2KnlbMV0sbSp5WzFdK3YqeVswXV07bFtoKyIucmFuZ2VbMF0iXT1yLmwycihiWzBdKSxsW2grIi5yYW5nZVsxXSJdPXIubDJyKGJbMV0pfXMuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9dX1lbHNle2lmKCJob3Zlcm1vZGUiIT09YXx8IngiIT09byYmInkiIT09byl7aWYoImhvdmVybW9kZSI9PT1hJiYiY2xvc2VzdCI9PT1vKXtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXI9Y1tuXSwib24iIT09dXx8ci5zaG93c3Bpa2VzfHwodT0ib2ZmIik7cy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD11fX1lbHNlIG89cy5faXNIb3Jpej8ieSI6IngiLGkuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbyksImNsb3Nlc3QiIT09byYmKHMuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Im9mZiIpO2xbYV09b31mLnJlbGF5b3V0KHQsbCl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYT10Ll9mdWxsTGF5b3V0LG89aC5nZXRTdWJwbG90SWRzKGEsImdsM2QiKSxzPXt9LGw9bi5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWk7Zi5yZWxheW91dCh0LHMpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9dC5fZnVsbExheW91dCxhPWguZ2V0U3VicGxvdElkcyhpLCJnbDNkIiksbz17fSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1sKyIuY2FtZXJhIix1PWlbbF0uX3NjZW5lOyJyZXNldERlZmF1bHQiPT09bj9vW2NdPW51bGw6InJlc2V0TGFzdFNhdmUiPT09biYmKG9bY109cC5leHRlbmREZWVwKHt9LHUuY2FtZXJhSW5pdGlhbCkpfWYucmVsYXlvdXQodCxvKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5fcHJldmlvdXNWYWx8fCExLGk9dC5sYXlvdXQsYT10Ll9mdWxsTGF5b3V0LG89aC5nZXRTdWJwbG90SWRzKGEsImdsM2QiKSxzPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbD1bInNob3dzcGlrZXMiLCJzcGlrZXNpZGVzIiwic3Bpa2V0aGlja25lc3MiLCJzcGlrZWNvbG9yIl0sYz17fSx1PXt9LGQ9e307aWYobilkPXAuZXh0ZW5kRGVlcChpLG4pLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtkPXsiYWxsYXhlcy5zaG93c3Bpa2VzIjohMX07Zm9yKHZhciBtPTA7bTxvLmxlbmd0aDttKyspe3ZhciB2PW9bbV0sZz1hW3ZdLHk9Y1t2XT17fTt5LmhvdmVybW9kZT1nLmhvdmVybW9kZSxkW3YrIi5ob3Zlcm1vZGUiXT0hMTtmb3IodmFyIGI9MDtiPDM7YisrKXt2YXIgeD1zW2JdO3U9eVt4XT17fTtmb3IodmFyIF89MDtfPGwubGVuZ3RoO18rKyl7dmFyIHc9bFtfXTt1W3ddPWdbeF1bd119fX1yLl9wcmV2aW91c1ZhbD1wLmV4dGVuZERlZXAoe30sYyl9Zi5yZWxheW91dCh0LGQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLGE9dC5fZnVsbExheW91dCxvPWguZ2V0U3VicGxvdElkcyhhLCJnZW8iKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc10sYz1hW2xdO2lmKCJ6b29tIj09PW4pe3ZhciBkPWMucHJvamVjdGlvbi5zY2FsZSxwPSJpbiI9PT1pPzIqZDouNSpkO2YucmVsYXlvdXQodCxsKyIucHJvamVjdGlvbi5zY2FsZSIscCl9ZWxzZSJyZXNldCI9PT1uJiZ1KHQsImdlbyIpfX1mdW5jdGlvbiBsKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dDtlPXIuX2hhcygiY2FydGVzaWFuIik/ci5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Ijt2YXIgbj0hdC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJmU7Zi5yZWxheW91dCh0LCJob3Zlcm1vZGUiLG4pfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlLHIsbj10Ll9mdWxsTGF5b3V0LGk9ZC5saXN0KHQsbnVsbCwhMCksYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZT1pW29dLHI9ZS5fbmFtZSxhW3IrIi5zaG93c3Bpa2VzIl09Im9uIj09PW4uX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ7cmV0dXJuIGF9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LG49aC5nZXRTdWJwbG90SWRzKHIsZSksaT17fSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPW5bYV0scz1yW29dLl9zdWJwbG90LGw9cy52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGQ9Y1t1XTtpW28rIi4iK2RdPWxbZF19Zi5yZWxheW91dCh0LGkpfXZhciBmPXQoIi4uLy4uL3Bsb3RseSIpLGg9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxkPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD10KCIuLi8uLi9saWIiKSxtPXQoIi4uLy4uL3NuYXBzaG90L2Rvd25sb2FkIiksdj10KCIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiIpLGc9ZS5leHBvcnRzPXt9O2cudG9JbWFnZT17bmFtZToidG9JbWFnZSIsdGl0bGU6IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciLGljb246di5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9InBuZyI7cC5ub3RpZmllcigiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiwibG9uZyIpLHAuaXNJRSgpJiYocC5ub3RpZmllcigiSUUgb25seSBzdXBwb3J0cyBzdmcuICBDaGFuZ2luZyBmb3JtYXQgdG8gc3ZnLiIsImxvbmciKSxlPSJzdmciKSxtKHQse2Zvcm1hdDplfSkudGhlbihmdW5jdGlvbih0KXtwLm5vdGlmaWVyKCJTbmFwc2hvdCBzdWNjZWVkZWQgLSAiK3QsImxvbmciKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cC5ub3RpZmllcigiU29ycnkgdGhlcmUgd2FzIGEgcHJvYmxlbSBkb3dubG9hZGluZyB5b3VyIHNuYXBzaG90ISIsImxvbmciKX0pfX0sZy5zZW5kRGF0YVRvQ2xvdWQ9e25hbWU6InNlbmREYXRhVG9DbG91ZCIsdGl0bGU6IlNhdmUgYW5kIGVkaXQgcGxvdCBpbiBjbG91ZCIsaWNvbjp2LmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aC5zZW5kRGF0YVRvQ2xvdWQodCl9fSxnLnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZToiWm9vbSIsYXR0cjoiZHJhZ21vZGUiLHZhbDoiem9vbSIsaWNvbjp2Lnpvb21ib3gsY2xpY2s6bn0sZy5wYW4yZD17bmFtZToicGFuMmQiLHRpdGxlOiJQYW4iLGF0dHI6ImRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjp2LnBhbixjbGljazpufSxnLnNlbGVjdDJkPXtuYW1lOiJzZWxlY3QyZCIsdGl0bGU6IkJveCBTZWxlY3QiLGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjp2LnNlbGVjdGJveCxjbGljazpufSxnLmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOiJMYXNzbyBTZWxlY3QiLGF0dHI6ImRyYWdtb2RlIix2YWw6Imxhc3NvIixpY29uOnYubGFzc28sY2xpY2s6bn0sZy56b29tSW4yZD17bmFtZToiem9vbUluMmQiLHRpdGxlOiJab29tIGluIixhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOnYuem9vbV9wbHVzLGNsaWNrOm59LGcuem9vbU91dDJkPXtuYW1lOiJ6b29tT3V0MmQiLHRpdGxlOiJab29tIG91dCIsYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246di56b29tX21pbnVzLGNsaWNrOm59LGcuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIix0aXRsZToiQXV0b3NjYWxlIixhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246di5hdXRvc2NhbGUsY2xpY2s6bn0sZy5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsdGl0bGU6IlJlc2V0IGF4ZXMiLGF0dHI6Inpvb20iLHZhbDoicmVzZXQiLGljb246di5ob21lLGNsaWNrOm59LGcuaG92ZXJDbG9zZXN0Q2FydGVzaWFuPXtuYW1lOiJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLHRpdGxlOiJTaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246di50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpufSxnLmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIix0aXRsZToiQ29tcGFyZSBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej8ieSI6IngifSxpY29uOnYudG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6Im5lIixjbGljazpufSxnLnpvb20zZD17bmFtZToiem9vbTNkIix0aXRsZToiWm9vbSIsYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoiem9vbSIsaWNvbjp2Lnpvb21ib3gsY2xpY2s6aX0sZy5wYW4zZD17bmFtZToicGFuM2QiLHRpdGxlOiJQYW4iLGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjp2LnBhbixjbGljazppfSxnLm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOiJvcmJpdGFsIHJvdGF0aW9uIixhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjp2WyIzZF9yb3RhdGUiXSxjbGljazppfSxnLnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOiJ0dXJudGFibGUgcm90YXRpb24iLGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InR1cm50YWJsZSIsaWNvbjp2WyJ6LWF4aXMiXSxjbGljazppfSxnLnJlc2V0Q2FtZXJhRGVmYXVsdDNkPXtuYW1lOiJyZXNldENhbWVyYURlZmF1bHQzZCIsdGl0bGU6IlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0IixhdHRyOiJyZXNldERlZmF1bHQiLGljb246di5ob21lLGNsaWNrOmF9LGcucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLHRpdGxlOiJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlIixhdHRyOiJyZXNldExhc3RTYXZlIixpY29uOnYubW92aWUsY2xpY2s6YX0sZy5ob3ZlckNsb3Nlc3QzZD17bmFtZToiaG92ZXJDbG9zZXN0M2QiLHRpdGxlOiJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiLGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246di50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpvfSxnLnpvb21Jbkdlbz17bmFtZToiem9vbUluR2VvIix0aXRsZToiWm9vbSBpbiIsYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjp2Lnpvb21fcGx1cyxjbGljazpzfSxnLnpvb21PdXRHZW89e25hbWU6Inpvb21PdXRHZW8iLHRpdGxlOiJab29tIG91dCIsYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246di56b29tX21pbnVzLGNsaWNrOnN9LGcucmVzZXRHZW89e25hbWU6InJlc2V0R2VvIix0aXRsZToiUmVzZXQiLGF0dHI6InJlc2V0Iix2YWw6bnVsbCxpY29uOnYuYXV0b3NjYWxlLGNsaWNrOnN9LGcuaG92ZXJDbG9zZXN0R2VvPXtuYW1lOiJob3ZlckNsb3Nlc3RHZW8iLHRpdGxlOiJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiLGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246di50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpsfSxnLmhvdmVyQ2xvc2VzdEdsMmQ9e25hbWU6ImhvdmVyQ2xvc2VzdEdsMmQiLHRpdGxlOiJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiLGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246di50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpsfSxnLmhvdmVyQ2xvc2VzdFBpZT17bmFtZToiaG92ZXJDbG9zZXN0UGllIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjp2LnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmx9LGcudG9nZ2xlSG92ZXI9e25hbWU6InRvZ2dsZUhvdmVyIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnYudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXtsKHQpLG8odCxlKX19LGcucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6IlJlc2V0IHZpZXdzIixpY29uOnYuaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0Iiksbih0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIiksYSh0LGUpLHUodCwiZ2VvIiksdSh0LCJtYXBib3giKX19LGcudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6IlRvZ2dsZSBTcGlrZSBMaW5lcyIsaWNvbjp2LnNwaWtlbGluZSxhdHRyOiJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCIsdmFsOiJvbiIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJjbG9zZXN0Ij09PWUuaG92ZXJtb2RlJiYib24iPT09ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD8ib2ZmIjoib24iO3ZhciByPWModCk7ci5ob3Zlcm1vZGU9ImNsb3Nlc3QiLGYucmVsYXlvdXQodCxyKX19LGcucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOiJSZXNldCB2aWV3IixhdHRyOiJyZXNldCIsaWNvbjp2LmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7dSh0LCJtYXBib3giKX19fSx7Ii4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIjoyLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4uLy4uL3NuYXBzaG90L2Rvd25sb2FkIjo4NTV9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5tYW5hZ2U9dCgiLi9tYW5hZ2UiKX0seyIuL21hbmFnZSI6NjczfV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtlLmluZGV4T2YoaSk9PT0tMSYmci5wdXNoKGhbaV0pfWcucHVzaChyKX12YXIgcz10Ll9mdWxsTGF5b3V0LGw9dC5fZnVsbERhdGEsYz1zLl9oYXMoImNhcnRlc2lhbiIpLHU9cy5faGFzKCJnbDNkIiksZj1zLl9oYXMoImdlbyIpLGQ9cy5faGFzKCJwaWUiKSxwPXMuX2hhcygiZ2wyZCIpLG09cy5faGFzKCJ0ZXJuYXJ5Iiksdj1zLl9oYXMoIm1hcGJveCIpLGc9W107aWYobihbInRvSW1hZ2UiLCJzZW5kRGF0YVRvQ2xvdWQiXSksKGN8fHB8fGR8fG0pK2YrdT4xKXJldHVybiBuKFsicmVzZXRWaWV3cyIsInRvZ2dsZUhvdmVyIl0pLG8oZyxyKTt1JiYobihbInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXSksbihbInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pLG4oWyJob3ZlckNsb3Nlc3QzZCJdKSk7dmFyIHk9aShzKSxiPVtdO3JldHVybigoY3x8cCkmJiF5fHxtKSYmKGI9WyJ6b29tMmQiLCJwYW4yZCJdKSwodnx8ZikmJihiPVsicGFuMmQiXSksYShsKSYmKGIucHVzaCgic2VsZWN0MmQiKSxiLnB1c2goImxhc3NvMmQiKSksYi5sZW5ndGgmJm4oYiksIWMmJiFwfHx5fHxtfHxuKFsiem9vbUluMmQiLCJ6b29tT3V0MmQiLCJhdXRvU2NhbGUyZCIsInJlc2V0U2NhbGUyZCJdKSxjJiZkP24oWyJ0b2dnbGVIb3ZlciJdKTpwP24oWyJob3ZlckNsb3Nlc3RHbDJkIl0pOmM/bihbInRvZ2dsZVNwaWtlbGluZXMiLCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSk6ZD9uKFsiaG92ZXJDbG9zZXN0UGllIl0pOnY/bihbInJlc2V0Vmlld01hcGJveCIsInRvZ2dsZUhvdmVyIl0pOmYmJihuKFsiem9vbUluR2VvIiwiem9vbU91dEdlbyIsInJlc2V0R2VvIl0pLG4oWyJob3ZlckNsb3Nlc3RHZW8iXSkpLG8oZyxyKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1sLmxpc3Qoe19mdWxsTGF5b3V0OnR9LG51bGwsITApLHI9ITAsbj0wO248ZS5sZW5ndGg7bisrKWlmKCFlW25dLmZpeGVkcmFuZ2Upe3I9ITE7YnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9ITEscj0wO3I8dC5sZW5ndGgmJiFlO3IrKyl7dmFyIG49dFtyXTtuLl9tb2R1bGUmJm4uX21vZHVsZS5zZWxlY3RQb2ludHMmJih1LnRyYWNlSXMobiwic2NhdHRlci1saWtlIik/KGMuaGFzTWFya2VycyhuKXx8Yy5oYXNUZXh0KG4pKSYmKGU9ITApOnUudHJhY2VJcyhuLCJib3gtdmlvbGluIik/ImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KGU9ITApOmU9ITApfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtpZihlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdKTtlbHNlIHQucHVzaChlKTtyZXR1cm4gdH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigic3RyaW5nIj09dHlwZW9mIGkpe2lmKHZvaWQgMD09PWhbaV0pdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJpbnZhbGlkIGJ1dHRvbiBuYW1lIl0uam9pbigiICIpKTt0W2VdW25dPWhbaV19fXJldHVybiB0fXZhciBsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHU9dCgiLi4vLi4vcmVnaXN0cnkiKSxmPXQoIi4vbW9kZWJhciIpLGg9dCgiLi9idXR0b25zIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9jb250ZXh0LGk9ZS5fbW9kZUJhcjtpZighci5kaXNwbGF5TW9kZUJhcilyZXR1cm4gdm9pZChpJiYoaS5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO3ZhciBhLG89ci5tb2RlQmFyQnV0dG9uczthPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoP3Mobyk6bih0LHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSxyLm1vZGVCYXJCdXR0b25zVG9BZGQpLGk/aS51cGRhdGUodCxhKTplLl9tb2RlQmFyPWYodCxhKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNjYsIi4vYnV0dG9ucyI6NjcxLCIuL21vZGViYXIiOjY3NH1dLDY3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnVwZGF0ZSh0LmdyYXBoSW5mbyx0LmJ1dHRvbnMpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgbih7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX3BhcGVyZGl2Lm5vZGUoKSxidXR0b25zOmV9KTtyZXR1cm4gci5fcHJpdmF0ZXBsb3QmJmEuc2VsZWN0KGkuZWxlbWVudCkuYXBwZW5kKCJzcGFuIikuY2xhc3NlZCgiYmFkZ2UtcHJpdmF0ZSBmbG9hdC0tbGVmdCIsITApLnRleHQoIlBSSVZBVEUiKSxpfXZhciBhPXQoImQzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIiksbD1uLnByb3RvdHlwZTtsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuZ3JhcGhJbmZvPXQ7dmFyIHI9dGhpcy5ncmFwaEluZm8uX2NvbnRleHQ7ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/dGhpcy5lbGVtZW50LmNsYXNzTmFtZT0ibW9kZWJhciBtb2RlYmFyLS1ob3ZlciI6dGhpcy5lbGVtZW50LmNsYXNzTmFtZT0ibW9kZWJhciI7dmFyIG49IXRoaXMuaGFzQnV0dG9ucyhlKSxpPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ287KG58fGkpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIuZGlzcGxheWxvZ28mJih0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXRMb2dvKCkpLHRoaXMuaGFzTG9nbz0hMCkpLHRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGwudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSE9PS0xKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sbC5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sbC5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIG49dC50aXRsZTt2b2lkIDA9PT1uJiYobj10Lm5hbWUpLChufHwwPT09bikmJnIuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixuKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLHQuYXR0cik7dmFyIGk9dC52YWw7aWYodm9pZCAwIT09aSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixpKSksImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2xpY2spdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZyIpO3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihyKXt0LmNsaWNrKGUuZ3JhcGhJbmZvLHIpLGUudXBkYXRlQWN0aXZlQnV0dG9uKHIuY3VycmVudFRhcmdldCl9KSxyLnNldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiLHQudG9nZ2xlfHwhMSksdC50b2dnbGUmJmEuc2VsZWN0KHIpLmNsYXNzZWQoImFjdGl2ZSIsITApLHIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHQuaWNvbnx8cy5xdWVzdGlvbix0Lm5hbWUpKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sbC5jcmVhdGVJY29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hc2NlbnQtdC5kZXNjZW50LG49Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJzdmciKSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJwYXRoIik7aS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjFlbSIpLGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdC53aWR0aC9yKyJlbSIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbMCwwLHQud2lkdGgscl0uam9pbigiICIpKTt2YXIgbz0idG9nZ2xlU3Bpa2VsaW5lcyI9PT1lPyJtYXRyaXgoMS41IDAgMCAtMS41IDAgIit0LmFzY2VudCsiKSI6Im1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiZCIsdC5wYXRoKSxhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixvKSxpLmFwcGVuZENoaWxkKGEpLGl9LGwudXBkYXRlQWN0aXZlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LHI9dm9pZCAwIT09dD90LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIik6bnVsbDt0aGlzLmJ1dHRvbkVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLHM9InRydWUiPT09dC5nZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIiksbD1hLnNlbGVjdCh0KTtpZihzKWk9PT1yJiZsLmNsYXNzZWQoImFjdGl2ZSIsIWwuY2xhc3NlZCgiYWN0aXZlIikpO2Vsc2V7dmFyIGM9bnVsbD09PWk/aTpvLm5lc3RlZFByb3BlcnR5KGUsaSkuZ2V0KCk7bC5jbGFzc2VkKCJhY3RpdmUiLGM9PT1uKX19KX0sbC5oYXNCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYnV0dG9ucztpZighZSlyZXR1cm4hMTtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWlmKHRbcl1bbl0ubmFtZSE9PWVbcl1bbl0ubmFtZSlyZXR1cm4hMX1yZXR1cm4hMH0sbC5nZXRMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jcmVhdGVHcm91cCgpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9Imh0dHBzOi8vcGxvdC5seS8iLGUudGFyZ2V0PSJfYmxhbmsiLGUuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIiwiUHJvZHVjZWQgd2l0aCBQbG90bHkiKSxlLmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihzLnBsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGwucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxsLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSl9LGUuZXhwb3J0cz1pfSx7Ii4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIjoyLCIuLi8uLi9saWIiOjczNSxkMzoxMjF9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4vYnV0dG9uX2F0dHJpYnV0ZXMiKTtvPWEobyx7X2lzTGlua2VkVG9BcnJheToiYnV0dG9uIn0pLGUuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOm8seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwMywiLi4vY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuL2J1dHRvbl9hdHRyaWJ1dGVzIjo2NzZ9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdGVwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJtb250aCIsInllYXIiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiYWxsIl0sZGZsdDoibW9udGgiLGVkaXRUeXBlOiJwbG90In0sc3RlcG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJhY2t3YXJkIiwidG9kYXRlIl0sZGZsdDoiYmFja3dhcmQiLGVkaXRUeXBlOiJwbG90In0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fSx7fV0sNjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jb2VyY2UoaSxvLGwsdCxlKX1mb3IodmFyIGksbyxzPXQuYnV0dG9uc3x8W10sYz1lLmJ1dHRvbnM9W10sdT0wO3U8cy5sZW5ndGg7dSsrKWlmKGk9c1t1XSxvPXt9LGEuaXNQbGFpbk9iamVjdChpKSl7dmFyIGY9bigic3RlcCIpOyJhbGwiIT09ZiYmKCFyfHwiZ3JlZ29yaWFuIj09PXJ8fCJtb250aCIhPT1mJiYieWVhciIhPT1mP24oInN0ZXBtb2RlIik6by5zdGVwbW9kZT0iYmFja3dhcmQiLG4oImNvdW50IikpLG4oImxhYmVsIiksby5faW5kZXg9dSxjLnB1c2gobyl9cmV0dXJuIGN9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrYy55UGFkXX12YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2NvbG9yIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vYnV0dG9uX2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsdSl7ZnVuY3Rpb24gZih0LGUpe3JldHVybiBhLmNvZXJjZShoLGQscyx0LGUpfXZhciBoPXQucmFuZ2VzZWxlY3Rvcnx8e30sZD1lLnJhbmdlc2VsZWN0b3I9e307aWYoZigidmlzaWJsZSIsbihoLGQsdSkubGVuZ3RoPjApKXt2YXIgcD1pKGUscixsKTtmKCJ4IixwWzBdKSxmKCJ5IixwWzFdKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxmKCJ4YW5jaG9yIiksZigieWFuY2hvciIpLGEuY29lcmNlRm9udChmLCJmb250IixyLmZvbnQpO3ZhciBtPWYoImJnY29sb3IiKTtmKCJhY3RpdmVjb2xvciIsby5jb250cmFzdChtLGMubGlnaHRBbW91bnQsYy5kYXJrQW1vdW50KSksZigiYm9yZGVyY29sb3IiKSxmKCJib3JkZXJ3aWR0aCIpfX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL2NvbG9yIjo2MTEsIi4vYXR0cmlidXRlcyI6Njc1LCIuL2J1dHRvbl9hdHRyaWJ1dGVzIjo2NzYsIi4vY29uc3RhbnRzIjo2Nzd9XSw2Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9Zy5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gYSh0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuIHQuYXV0b3JhbmdlPT09ITA7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0b3ItcmVjdCIsITApLG4uYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLG4uYXR0cih7cng6eC5yeCxyeTp4LnJ5fSksbi5jYWxsKHAuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwocC5maWxsLHMoZSxyKSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGUuaXNBY3RpdmV8fGUuaXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfWZ1bmN0aW9uIGwodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt2LmNvbnZlcnRUb1RzcGFucyh0LG4pfXZhciBhPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJzZWxlY3Rvci10ZXh0IiwhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLGEuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxhLmNhbGwobS5mb250LGUuZm9udCkudGV4dChjKHIpKS5jYWxsKGkpfWZ1bmN0aW9uIGModCl7cmV0dXJuIHQubGFiZWw/dC5sYWJlbDoiYWxsIj09PXQuc3RlcD8iYWxsIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9ZnVuY3Rpb24gdSh0LGUscixuKXtyLndpZHRoPTAsci5oZWlnaHQ9MDt2YXIgaT1yLmJvcmRlcndpZHRoO2UuZWFjaChmdW5jdGlvbigpe3ZhciB0PWYuc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0Iiksbj1yLmZvbnQuc2l6ZSpiLGk9TWF0aC5tYXgobip2LmxpbmVDb3VudChlKSwxNikrMztyLmhlaWdodD1NYXRoLm1heChyLmhlaWdodCxpKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PWYuc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci1yZWN0Iiksbj10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxhPW4ubm9kZSgpJiZtLmJCb3gobi5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqYixzPXYubGluZUNvdW50KG4pLGw9TWF0aC5tYXgoYSsxMCx4Lm1pbkJ1dHRvbldpZHRoKTt0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpK3Iud2lkdGgpKyIsIitpKyIpIiksZS5hdHRyKHt4OjAseTowLHdpZHRoOmwsaGVpZ2h0OnIuaGVpZ2h0fSksdi5wb3NpdGlvblRleHQobixsLzIsci5oZWlnaHQvMi0ocy0xKSpvLzIrMyksci53aWR0aCs9bCs1fSksZS5zZWxlY3RBbGwoInJlY3QiKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KTt2YXIgYT10Ll9mdWxsTGF5b3V0Ll9zaXplO3IubHg9YS5sK2EudypyLngsci5seT1hLnQrYS5oKigxLXIueSk7dmFyIG89ImxlZnQiO3kuaXNSaWdodEFuY2hvcihyKSYmKHIubHgtPXIud2lkdGgsbz0icmlnaHQiKSx5LmlzQ2VudGVyQW5jaG9yKHIpJiYoci5seC09ci53aWR0aC8yLG89ImNlbnRlciIpO3ZhciBzPSJ0b3AiO3kuaXNCb3R0b21BbmNob3IocikmJihyLmx5LT1yLmhlaWdodCxzPSJib3R0b20iKSx5LmlzTWlkZGxlQW5jaG9yKHIpJiYoci5seS09ci5oZWlnaHQvMixzPSJtaWRkbGUiKSxyLndpZHRoPU1hdGguY2VpbChyLndpZHRoKSxyLmhlaWdodD1NYXRoLmNlaWwoci5oZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksZC5hdXRvTWFyZ2luKHQsbisiLXJhbmdlLXNlbGVjdG9yIix7eDpyLngseTpyLnksbDpyLndpZHRoKih7cmlnaHQ6MSxjZW50ZXI6LjV9W29dfHwwKSxyOnIud2lkdGgqKHtsZWZ0OjEsY2VudGVyOi41fVtvXXx8MCksYjpyLmhlaWdodCooe3RvcDoxLG1pZGRsZTouNX1bc118fDApLHQ6ci5oZWlnaHQqKHtib3R0b206MSxtaWRkbGU6LjV9W3NdfHwwKX0pfXZhciBmPXQoImQzIiksaD10KCIuLi8uLi9wbG90bHkiKSxkPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIikscD10KCIuLi9jb2xvciIpLG09dCgiLi4vZHJhd2luZyIpLHY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSx5PXQoIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiKSxiPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcseD10KCIuL2NvbnN0YW50cyIpLF89dCgiLi9nZXRfdXBkYXRlX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKG4odCksaSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9Zi5zZWxlY3QodGhpcyksbj1lLGk9bi5yYW5nZXNlbGVjdG9yLHM9ci5zZWxlY3RBbGwoImcuYnV0dG9uIikuZGF0YShpLmJ1dHRvbnMpO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9Zi5zZWxlY3QodGhpcykscz1fKG4sZSk7ZS5pc0FjdGl2ZT1hKG4sZSxzKSxyLmNhbGwobyxpLGUpLHIuY2FsbChsLGksZSx0KSxyLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2VkfHxoLnJlbGF5b3V0KHQscyl9KSxyLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7ZS5pc0hvdmVyZWQ9ITAsci5jYWxsKG8saSxlKX0pLHIub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2UuaXNIb3ZlcmVkPSExLHIuY2FsbChvLGksZSl9KX0pLHUodCxzLGksbi5fbmFtZSksci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmx4KyIsIitpLmx5KyIpIil9KX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzA4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzgyLCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuLi9jb2xvciI6NjExLCIuLi9kcmF3aW5nIjo2MzUsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjY2MSwiLi9jb25zdGFudHMiOjY3NywiLi9nZXRfdXBkYXRlX29iamVjdCI6NjgwLGQzOjEyMX1dLDY4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbj10LnJhbmdlLGE9bmV3IERhdGUodC5yMmwoblsxXSkpLG89ZS5zdGVwLHM9ZS5jb3VudDtzd2l0Y2goZS5zdGVwbW9kZSl7Y2FzZSJiYWNrd2FyZCI6cj10LmwycigraS50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcykpO2JyZWFrO2Nhc2UidG9kYXRlIjp2YXIgbD1pLnRpbWVbb10udXRjLm9mZnNldChhLC1zKTtyPXQubDJyKCtpLnRpbWVbb10udXRjLmNlaWwobCkpfXJldHVybltyLG5bMV1dfXZhciBpPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fbmFtZSxpPXt9O2lmKCJhbGwiPT09ZS5zdGVwKWlbcisiLmF1dG9yYW5nZSJdPSEwO2Vsc2V7dmFyIGE9bih0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTIxfV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY3NSwiLi9kZWZhdWx0cyI6Njc4LCIuL2RyYXciOjY3OX1dLDY4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6ImNhbGMifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToiY2FsYyJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MTB9XSw2ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLmxpc3QodCwieCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXSxvPWFbaS5uYW1lXTtvJiZvLnZpc2libGUmJm8uYXV0b3JhbmdlJiZhLl9taW4ubGVuZ3RoJiZhLl9tYXgubGVuZ3RoJiYoby5faW5wdXQuYXV0b3JhbmdlPSEwLG8uX2lucHV0LnJhbmdlPW8ucmFuZ2U9bi5nZXRBdXRvUmFuZ2UoYSkpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi9jb25zdGFudHMiOjY4NH1dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tDb2xvcjoicmdiYSgwLDAsMCwwLjQpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG4uY29lcmNlKG8sbCxpLHQsZSl9aWYodFtyXS5yYW5nZXNsaWRlcil7bi5pc1BsYWluT2JqZWN0KHRbcl0ucmFuZ2VzbGlkZXIpfHwodFtyXS5yYW5nZXNsaWRlcj17fSk7dmFyIG89dFtyXS5yYW5nZXNsaWRlcixzPWVbcl0sbD1zLnJhbmdlc2xpZGVyPXt9O2lmKGEoInZpc2libGUiKSl7aWYoYSgiYmdjb2xvciIsZS5wbG90X2JnY29sb3IpLGEoImJvcmRlcmNvbG9yIiksYSgiYm9yZGVyd2lkdGgiKSxhKCJ0aGlja25lc3MiKSxhKCJhdXRvcmFuZ2UiLCFzLmlzVmFsaWRSYW5nZShvLnJhbmdlKSksYSgicmFuZ2UiKSxsLnJhbmdlKXt2YXIgYz1sLnJhbmdlLHU9cy5yYW5nZTtjWzBdPXMubDJyKE1hdGgubWluKHMucjJsKGNbMF0pLHMucjJsKHVbMF0pKSksY1sxXT1zLmwycihNYXRoLm1heChzLnIybChjWzFdKSxzLnIybCh1WzFdKSkpfXMuY2xlYW5SYW5nZSgicmFuZ2VzbGlkZXIucmFuZ2UiKSxsLl9pbnB1dD1vfX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2F0dHJpYnV0ZXMiOjY4Mn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXcubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sIngiLCEwKSxyPWsubmFtZSxuPVtdO2lmKHQuX2hhcygiZ2wyZCIpKXJldHVybiBuO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2Fbcl0mJmFbcl0udmlzaWJsZSYmbi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoInJlY3QuIitrLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbz10LnNlbGVjdCgicmVjdC4iK2suZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxzPXQuc2VsZWN0KCJyZWN0LiIray5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO3Qub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGwpe3ZhciBjLHUseSxiPStsLmNsaWVudFgtaDtzd2l0Y2goZil7Y2FzZSBpOnk9ImV3LXJlc2l6ZSIsYz1wK2IsdT12K2I7YnJlYWs7Y2FzZSBvOnk9ImNvbC1yZXNpemUiLGM9cCtiLHU9djticmVhaztjYXNlIHM6eT0iY29sLXJlc2l6ZSIsYz1wLHU9ditiO2JyZWFrO2RlZmF1bHQ6eT0iZXctcmVzaXplIixjPWQsdT1kK2J9aWYodTxjKXt2YXIgeD11O3U9YyxjPXh9bi5fcGl4ZWxNaW49YyxuLl9waXhlbE1heD11LFQobS5zZWxlY3QoZykseSksYSh0LGUscixuKX1mdW5jdGlvbiBjKCl7Zy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGwpLGcucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYykseS5yZW1vdmVFbGVtZW50KGcpfXZhciB1PW0uZXZlbnQsZj11LnRhcmdldCxoPXUuY2xpZW50WCxkPWgtdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxwPW4uZDJwKHIuX3JsWzBdKSx2PW4uZDJwKHIuX3JsWzFdKSxnPU0uY292ZXJTbGlwKCk7Zy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGwpLGcuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYyl9KX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIubDJyKHkuY29uc3RyYWluKHQsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgYT1pKG4ucDJkKG4uX3BpeGVsTWluKSksbz1pKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3YucmVsYXlvdXQoZSxyLl9uYW1lKyIucmFuZ2UiLFthLG9dKX0pfWZ1bmN0aW9uIG8odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4geS5jb25zdHJhaW4odCwwLG4uX3dpZHRoKX1mdW5jdGlvbiBhKHQpe3JldHVybiB5LmNvbnN0cmFpbih0LC1vLG4uX3dpZHRoK28pfXZhciBvPWsuaGFuZGxlV2lkdGgvMixzPWkobi5kMnAoci5fcmxbMF0pKSxsPWkobi5kMnAoci5fcmxbMV0pKTt0LnNlbGVjdCgicmVjdC4iK2suc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoIngiLHMpLmF0dHIoIndpZHRoIixsLXMpLHQuc2VsZWN0KCJyZWN0LiIray5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKCJ3aWR0aCIscyksdC5zZWxlY3QoInJlY3QuIitrLm1hc2tNYXhDbGFzc05hbWUpLmF0dHIoIngiLGwpLmF0dHIoIndpZHRoIixuLl93aWR0aC1sKTt2YXIgYz1NYXRoLnJvdW5kKGEocy1vKSktLjUsdT1NYXRoLnJvdW5kKGEobC1vKSkrLjU7dC5zZWxlY3QoImcuIitrLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2MrIiwwLjUpIiksdC5zZWxlY3QoImcuIitrLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwwLjUpIil9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT10LnNlbGVjdEFsbCgicmVjdC4iK2suYmdDbGFzc05hbWUpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChrLmJnQ2xhc3NOYW1lLCEwKS5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pO3ZhciBhPW4uYm9yZGVyd2lkdGglMj09MD9uLmJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgtMSxvPS1uLl9vZmZzZXRTaGlmdCxzPWIuY3Jpc3BSb3VuZChlLG4uYm9yZGVyd2lkdGgpO2kuYXR0cih7d2lkdGg6bi5fd2lkdGgrYSxoZWlnaHQ6bi5faGVpZ2h0K2EsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitvKyIsIitvKyIpIixmaWxsOm4uYmdjb2xvcixzdHJva2U6bi5ib3JkZXJjb2xvciwic3Ryb2tlLXdpZHRoIjpzfSl9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0LGE9aS5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK24uX2NsaXBJZCkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLG4uX2NsaXBJZCkuYXBwZW5kKCJyZWN0IikuYXR0cih7eDowLHk6MH0pLGEuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9dy5nZXRTdWJwbG90cyhlLHIpLGE9ZS5jYWxjZGF0YSxvPXQuc2VsZWN0QWxsKCJnLiIray5yYW5nZVBsb3RDbGFzc05hbWUpLmRhdGEoaSx5LmlkZW50aXR5KTtvLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiBrLnJhbmdlUGxvdENsYXNzTmFtZSsiICIrdH0pLmNhbGwoYi5zZXRDbGlwVXJsLG4uX2NsaXBJZCksby5vcmRlcigpLG8uZXhpdCgpLnJlbW92ZSgpO3ZhciBzO28uZWFjaChmdW5jdGlvbih0LGkpe3ZhciBvPW0uc2VsZWN0KHRoaXMpLGw9MD09PWksYz13LmdldEZyb21JZChlLHQsInkiKSxmPWMuX25hbWUsaD17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6bi5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fX07aC5sYXlvdXRbZl09e3R5cGU6Yy50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTpjLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6Yy5jYWxlbmRhcn0sZy5zdXBwbHlEZWZhdWx0cyhoKTt2YXIgZD1oLl9mdWxsTGF5b3V0LnhheGlzLHA9aC5fZnVsbExheW91dFtmXSx2PXtpZDp0LHBsb3Rncm91cDpvLHhheGlzOmQseWF4aXM6cH07bD9zPXY6KHYubWFpbnBsb3Q9Inh5Iix2Lm1haW5wbG90aW5mbz1zKSxfLnJhbmdlUGxvdChlLHYsdShhLHQpKX0pfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTthLnhheGlzK2EueWF4aXM9PT1lJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT10LnNlbGVjdEFsbCgicmVjdC4iK2subWFza01pbkNsYXNzTmFtZSkuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKGsubWFza01pbkNsYXNzTmFtZSwhMCkuYXR0cih7eDowLHk6MH0pLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKSxpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKHguZmlsbCxrLm1hc2tDb2xvcik7dmFyIGE9dC5zZWxlY3RBbGwoInJlY3QuIitrLm1hc2tNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTthLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChrLm1hc2tNYXhDbGFzc05hbWUsITApLmF0dHIoInkiLDApLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKSxhLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKHguZmlsbCxrLm1hc2tDb2xvcil9ZnVuY3Rpb24gaCh0LGUscixuKXtpZighZS5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgaT10LnNlbGVjdEFsbCgicmVjdC4iK2suc2xpZGVCb3hDbGFzc05hbWUpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChrLnNsaWRlQm94Q2xhc3NOYW1lLCEwKS5hdHRyKCJ5IiwwKS5hdHRyKCJjdXJzb3IiLGsuc2xpZGVCb3hDdXJzb3IpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKSxpLmF0dHIoe2hlaWdodDpuLl9oZWlnaHQsZmlsbDprLnNsaWRlQm94RmlsbH0pfX1mdW5jdGlvbiBkKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJnLiIray5ncmFiYmVyTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoay5ncmFiYmVyTWluQ2xhc3NOYW1lLCEwKTt2YXIgYT10LnNlbGVjdEFsbCgiZy4iK2suZ3JhYmJlck1heENsYXNzTmFtZSkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGsuZ3JhYmJlck1heENsYXNzTmFtZSwhMCk7dmFyIG89e3g6MCx3aWR0aDprLmhhbmRsZVdpZHRoLHJ4OmsuaGFuZGxlUmFkaXVzLGZpbGw6eC5iYWNrZ3JvdW5kLHN0cm9rZTp4LmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOmsuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxzPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX0sbD1pLnNlbGVjdEFsbCgicmVjdC4iK2suaGFuZGxlTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7bC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoay5oYW5kbGVNaW5DbGFzc05hbWUsITApLmF0dHIobyksbC5hdHRyKHMpO3ZhciBjPWEuc2VsZWN0QWxsKCJyZWN0LiIray5oYW5kbGVNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChrLmhhbmRsZU1heENsYXNzTmFtZSwhMCkuYXR0cihvKSxjLmF0dHIocyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIHU9e3dpZHRoOmsuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6ay5ncmFiQXJlYUZpbGwsY3Vyc29yOmsuZ3JhYkFyZWFDdXJzb3J9LGY9aS5zZWxlY3RBbGwoInJlY3QuIitrLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7Zi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoay5ncmFiQXJlYU1pbkNsYXNzTmFtZSwhMCkuYXR0cih1KSxmLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KTt2YXIgaD1hLnNlbGVjdEFsbCgicmVjdC4iK2suZ3JhYkFyZWFNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtoLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChrLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLCEwKS5hdHRyKHUpLGguYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpLmluZGV4T2Yoay5uYW1lKSE9PS0xJiZnLmF1dG9NYXJnaW4odCxpKX19dmFyIG09dCgiZDMiKSx2PXQoIi4uLy4uL3Bsb3RseSIpLGc9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vZHJhd2luZyIpLHg9dCgiLi4vY29sb3IiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLHc9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxNPXQoIi4uL2RyYWdlbGVtZW50IiksVD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksaz10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiB0Ll9uYW1lfXZhciByPXQuX2Z1bGxMYXlvdXQsYT1uKHIpLHU9ci5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2suY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKGEsZSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoay5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksdS5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1tLnNlbGVjdCh0aGlzKSxuPXRbay5uYW1lXTtlLnJlbW92ZSgpLHIuX3RvcGRlZnMuc2VsZWN0KCIjIituLl9jbGlwSWQpLnJlbW92ZSgpfSksdS5leGl0KCkuc2l6ZSgpJiZwKHQpLDAhPT1hLmxlbmd0aCYmdS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW0uc2VsZWN0KHRoaXMpLGE9ZVtrLm5hbWVdLHU9clt3LmlkMm5hbWUoZS5hbmNob3IpXSxwPXIubWFyZ2luLHY9ci5fc2l6ZSx5PWUuZG9tYWluLGI9dS5kb21haW4seD0oZS5fYm91bmRpbmdCb3h8fHt9KS5oZWlnaHR8fDA7YS5faWQ9ay5uYW1lK2UuX2lkLGEuX2NsaXBJZD1hLl9pZCsiLSIrci5fdWlkLGEuX3dpZHRoPXYudyooeVsxXS15WzBdKSxhLl9oZWlnaHQ9KHIuaGVpZ2h0LXAuYi1wLnQpKmEudGhpY2tuZXNzLGEuX29mZnNldFNoaWZ0PU1hdGguZmxvb3IoYS5ib3JkZXJ3aWR0aC8yKTt2YXIgXz1NYXRoLnJvdW5kKHAubCt2LncqeVswXSksTT1NYXRoLnJvdW5kKHAudCt2LmgqKDEtYlswXSkreCthLl9vZmZzZXRTaGlmdCtrLmV4dHJhUGFkKTtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwiK00rIikiKTt2YXIgVD1lLnIybChhLnJhbmdlWzBdKSxBPWUucjJsKGEucmFuZ2VbMV0pLEU9QS1UO2EucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L2EuX3dpZHRoKkUrVH0sYS5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQtVCkvRSphLl93aWR0aH0sYS5fcmw9W1QsQV0sbi5jYWxsKHMsdCxlLGEpLmNhbGwobCx0LGUsYSkuY2FsbChjLHQsZSxhKS5jYWxsKGYsdCxlLGEpLmNhbGwoaCx0LGUsYSkuY2FsbChkLHQsZSxhKSxpKG4sdCxlLGEpLG8obix0LGUsYSksZy5hdXRvTWFyZ2luKHQsYS5faWQse3g6eVswXSx5OmJbMF0sbDowLHI6MCx0OjAsYjphLl9oZWlnaHQrcC5iK3gscGFkOmsuZXh0cmFQYWQrMiphLl9vZmZzZXRTaGlmdH0pfSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NTMsIi4uLy4uL3Bsb3RseSI6Nzc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc4OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgzOCwiLi4vY29sb3IiOjYxMSwiLi4vZHJhZ2VsZW1lbnQiOjYzMiwiLi4vZHJhd2luZyI6NjM1LCIuL2NvbnN0YW50cyI6Njg0LGQzOjEyMX1dLDY4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY4MiwiLi9jYWxjX2F1dG9yYW5nZSI6NjgzLCIuL2RlZmF1bHRzIjo2ODUsIi4vZHJhdyI6Njg2fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToic2hhcGUiLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHR5cGU6ewp2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSx4MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0seXJlZjpvKHt9LG4ueXJlZix7fSkseTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LHkxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNDUsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU5NCwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2MzR9XSw2ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bYShlKSxhKHIpXTtpZihuKXt2YXIgbCxjLHUsZixoLGQ9MS8wLHA9LSgxLzApLG09bi5tYXRjaChvLnNlZ21lbnRSRSk7Zm9yKCJkYXRlIj09PXQudHlwZSYmKGE9cy5kZWNvZGVEYXRlKGEpKSxsPTA7bDxtLmxlbmd0aDtsKyspYz1tW2xdLHZvaWQgMCE9PSh1PWlbYy5jaGFyQXQoMCldLmRyYXduKSYmKCEoZj1tW2xdLnN1YnN0cigxKS5tYXRjaChvLnBhcmFtUkUpKXx8Zi5sZW5ndGg8dXx8KGg9YShmW3VdKSxoPGQmJihkPWgpLGg+cCYmKHA9aCkpKTtyZXR1cm4gcD49ZD9bZCxwXTp2b2lkIDB9fXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikscz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZmlsdGVyVmlzaWJsZShlLnNoYXBlcyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aClmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGwsYyx1PXJbc10sZj11LmxpbmUud2lkdGgvMjsicGFwZXIiIT09dS54cmVmJiYobD1hLmdldEZyb21JZCh0LHUueHJlZiksKGM9bihsLHUueDAsdS54MSx1LnBhdGgsby5wYXJhbUlzWCkpJiZhLmV4cGFuZChsLGMse3BwYWQ6Zn0pKSwicGFwZXIiIT09dS55cmVmJiYobD1hLmdldEZyb21JZCh0LHUueXJlZiksKGM9bihsLHUueTAsdS55MSx1LnBhdGgsby5wYXJhbUlzWSkpJiZhLmV4cGFuZChsLGMse3BwYWQ6Zn0pKX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL2NvbnN0YW50cyI6NjkwLCIuL2hlbHBlcnMiOjY5M31dLDY5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15ccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGk9dCgiLi9zaGFwZV9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24odCxlLHtuYW1lOiJzaGFwZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czppfSl9fSx7Ii4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzc2LCIuL3NoYXBlX2RlZmF1bHRzIjo2OTV9XSw2OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fc2hhcGVTdWJwbG90TGF5ZXJzLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5zaGFwZXMubGVuZ3RoO3IrKyllLnNoYXBlc1tyXS52aXNpYmxlJiZpKHQscil9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIocil7dmFyIG49eyJkYXRhLWluZGV4IjplLCJmaWxsLXJ1bGUiOiJldmVub2RkIixkOm8odCxpKX0scz1pLmxpbmUud2lkdGg/aS5saW5lLmNvbG9yOiJyZ2JhKDAsMCwwLDApIixsPXIuYXBwZW5kKCJwYXRoIikuYXR0cihuKS5zdHlsZSgib3BhY2l0eSIsaS5vcGFjaXR5KS5jYWxsKGguc3Ryb2tlLHMpLmNhbGwoaC5maWxsLGkuZmlsbGNvbG9yKS5jYWxsKGQuZGFzaExpbmUsaS5saW5lLmRhc2gsaS5saW5lLndpZHRoKSxjPShpLnhyZWYraS55cmVmKS5yZXBsYWNlKC9wYXBlci9nLCIiKTtsLmNhbGwoZC5zZXRDbGlwVXJsLGM/ImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCtjOm51bGwpLHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbiYmYSh0LGwsaSxlKX10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5zZWxlY3RBbGwoJy5zaGFwZWxheWVyIFtkYXRhLWluZGV4PSInK2UrJyJdJykucmVtb3ZlKCk7dmFyIG49KHQubGF5b3V0LnNoYXBlc3x8W10pW2VdLGk9dC5fZnVsbExheW91dC5zaGFwZXNbZV07aWYobiYmaS52aXNpYmxlIT09ITEpaWYoImJlbG93IiE9PWkubGF5ZXIpcih0Ll9mdWxsTGF5b3V0Ll9zaGFwZVVwcGVyTGF5ZXIpO2Vsc2UgaWYoInBhcGVyIj09PWkueHJlZnx8InBhcGVyIj09PWkueXJlZilyKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXt2YXIgcz10Ll9mdWxsTGF5b3V0Ll9wbG90c1tpLnhyZWYraS55cmVmXTtpZihzKXt2YXIgbD1zLm1haW5wbG90aW5mb3x8cztyKGwuc2hhcGVsYXllcil9ZWxzZSByKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9fWZ1bmN0aW9uIGEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt2YXIgcj1aLnJpZ2h0LVoubGVmdCxuPVouYm90dG9tLVoudG9wLGk9dC5jbGllbnRYLVoubGVmdCxhPXQuY2xpZW50WS1aLnRvcCxvPXI+WSYmbj5YJiYhdC5zaGlmdEtleT9wLmdldEN1cnNvcihpL3IsMS1hL24pOiJtb3ZlIjttKGUsbyksRz1vLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gYShlKXtOPWYuZ2V0RnJvbUlkKHQsci54cmVmKSxCPWYuZ2V0RnJvbUlkKHQsci55cmVmKSxVPWcuZ2V0RGF0YVRvUGl4ZWwodCxOKSxWPWcuZ2V0RGF0YVRvUGl4ZWwodCxCLCEwKSxIPWcuZ2V0UGl4ZWxUb0RhdGEodCxOKSxxPWcuZ2V0UGl4ZWxUb0RhdGEodCxCLCEwKTt2YXIgYT0ic2hhcGVzWyIrbisiXSI7InBhdGgiPT09ci50eXBlPyhGPXIucGF0aCxqPWErIi5wYXRoIik6KHY9VShyLngwKSx5PVYoci55MCksYj1VKHIueDEpLHg9VihyLnkxKSxfPWErIi54MCIsdz1hKyIueTAiLE09YSsiLngxIixUPWErIi55MSIpLHY8Yj8oRT12LEk9YSsiLngwIixPPSJ4MCIsUz1iLEQ9YSsiLngxIixSPSJ4MSIpOihFPWIsST1hKyIueDEiLE89IngxIixTPXYsRD1hKyIueDAiLFI9IngwIikseTx4PyhrPXksTD1hKyIueTAiLFA9InkwIixBPXgsQz1hKyIueTEiLHo9InkxIik6KGs9eCxMPWErIi55MSIsUD0ieTEiLEE9eSxDPWErIi55MCIsej0ieTAiKSxkPXt9LGkoZSksVy5tb3ZlRm49Im1vdmUiPT09Rz91Omh9ZnVuY3Rpb24gcyhyKXttKGUpLHImJmMucmVsYXlvdXQodCxkKX1mdW5jdGlvbiB1KG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gSChVKHQpK24pfTtOJiYiZGF0ZSI9PT1OLnR5cGUmJihhPWcuZW5jb2RlRGF0ZShhKSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHEoVih0KStpKX07QiYmImRhdGUiPT09Qi50eXBlJiYocz1nLmVuY29kZURhdGUocykpLHIucGF0aD1sKEYsYSxzKSxkW2pdPXIucGF0aH1lbHNlIGRbX109ci54MD1IKHYrbiksZFt3XT1yLnkwPXEoeStpKSxkW01dPXIueDE9SChiK24pLGRbVF09ci55MT1xKHgraSk7ZS5hdHRyKCJkIixvKHQscikpfWZ1bmN0aW9uIGgobixpKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBIKFUodCkrbil9O04mJiJkYXRlIj09PU4udHlwZSYmKGE9Zy5lbmNvZGVEYXRlKGEpKTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm4gcShWKHQpK2kpfTtCJiYiZGF0ZSI9PT1CLnR5cGUmJihzPWcuZW5jb2RlRGF0ZShzKSksci5wYXRoPWwoRixhLHMpLGRbal09ci5wYXRofWVsc2V7dmFyIGM9fkcuaW5kZXhPZigibiIpP2sraTprLHU9fkcuaW5kZXhPZigicyIpP0EraTpBLGY9fkcuaW5kZXhPZigidyIpP0UrbjpFLGg9fkcuaW5kZXhPZigiZSIpP1MrbjpTO3UtYz5YJiYoZFtMXT1yW1BdPXEoYyksZFtDXT1yW3pdPXEodSkpLGgtZj5ZJiYoZFtJXT1yW09dPUgoZiksZFtEXT1yW1JdPUgoaCkpfWUuYXR0cigiZCIsbyh0LHIpKX12YXIgZCx2LHksYix4LF8sdyxNLFQsayxBLEUsUyxMLEMsSSxELFAseixPLFIsRixqLE4sQixVLFYsSCxxLEcsWT0xMCxYPTEwLFc9e2VsZW1lbnQ6ZS5ub2RlKCksZ2Q6dCxwcmVwRm46YSxkb25lRm46c30sWj1XLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cC5pbml0KFcpLGUubm9kZSgpLm9ubW91c2Vtb3ZlPWl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG89ZS50eXBlLGw9Zi5nZXRGcm9tSWQodCxlLnhyZWYpLGM9Zi5nZXRGcm9tSWQodCxlLnlyZWYpLHU9dC5fZnVsbExheW91dC5fc2l6ZTtpZihsPyhyPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UobCksbj1mdW5jdGlvbih0KXtyZXR1cm4gbC5fb2Zmc2V0K2wucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4gdS5sK3Uudyp0fSxjPyhpPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UoYyksYT1mdW5jdGlvbih0KXtyZXR1cm4gYy5fb2Zmc2V0K2MucjJwKGkodCwhMCkpfSk6YT1mdW5jdGlvbih0KXtyZXR1cm4gdS50K3UuaCooMS10KX0sInBhdGgiPT09bylyZXR1cm4gbCYmImRhdGUiPT09bC50eXBlJiYobj1nLmRlY29kZURhdGUobikpLGMmJiJkYXRlIj09PWMudHlwZSYmKGE9Zy5kZWNvZGVEYXRlKGEpKSxzKGUucGF0aCxuLGEpO3ZhciBoPW4oZS54MCksZD1uKGUueDEpLHA9YShlLnkwKSxtPWEoZS55MSk7aWYoImxpbmUiPT09bylyZXR1cm4iTSIraCsiLCIrcCsiTCIrZCsiLCIrbTtpZigicmVjdCI9PT1vKXJldHVybiJNIitoKyIsIitwKyJIIitkKyJWIittKyJIIitoKyJaIjt2YXIgdj0oaCtkKS8yLHk9KHArbSkvMixiPU1hdGguYWJzKHYtaCkseD1NYXRoLmFicyh5LXApLF89IkEiK2IrIiwiK3gsdz12K2IrIiwiK3k7cmV0dXJuIk0iK3crXysiIDAgMSwxICIrdisiLCIrKHkteCkrXysiIDAgMCwxICIrdysiWiJ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQucmVwbGFjZSh2LnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT12LnBhcmFtSXNYW2ldLG89di5wYXJhbUlzWVtpXSxzPXYubnVtUGFyYW1zW2ldLGw9dC5zdWJzdHIoMSkucmVwbGFjZSh2LnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyxuPnMmJih0PSJYIiksdH0pO3JldHVybiBuPnMmJihsPWwucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksdS5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGkrbH0pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiB0LnJlcGxhY2Uodi5zZWdtZW50UkUsZnVuY3Rpb24odCl7dmFyIG49MCxpPXQuY2hhckF0KDApLGE9di5wYXJhbUlzWFtpXSxvPXYucGFyYW1Jc1lbaV0scz12Lm51bVBhcmFtc1tpXTtyZXR1cm4gaSt0LnN1YnN0cigxKS5yZXBsYWNlKHYucGFyYW1SRSxmdW5jdGlvbih0KXtyZXR1cm4gbj49cz90OihhW25dP3Q9ZSh0KTpvW25dJiYodD1yKHQpKSxuKyssdCl9KX0pfXZhciBjPXQoIi4uLy4uL3Bsb3RseSIpLHU9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGg9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksdj10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXtkcmF3Om4sZHJhd09uZTppfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzUzLCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vY29sb3IiOjYxMSwiLi4vZHJhZ2VsZW1lbnQiOjYzMiwiLi4vZHJhd2luZyI6NjM1LCIuL2NvbnN0YW50cyI6NjkwLCIuL2hlbHBlcnMiOjY5M31dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKG8odCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuL2F0dHJpYnV0ZXMiOjY4OCwiLi9jYWxjX2F1dG9yYW5nZSI6Njg5LCIuL2RlZmF1bHRzIjo2OTEsIi4vZHJhdyI6NjkyfV0sNjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHM9c3x8e30sbD1sfHx7fSwhYygidmlzaWJsZSIsIWwuaXRlbUlzTm90UGxhaW5PYmplY3QpKXJldHVybiBlO2MoImxheWVyIiksYygib3BhY2l0eSIpLGMoImZpbGxjb2xvciIpLGMoImxpbmUuY29sb3IiKSxjKCJsaW5lLndpZHRoIiksYygibGluZS5kYXNoIik7Zm9yKHZhciB1PXQucGF0aD8icGF0aCI6InJlY3QiLGY9YygidHlwZSIsdSksaD1bIngiLCJ5Il0sZD0wO2Q8MjtkKyspe3ZhciBwPWhbZF0sbT17X2Z1bGxMYXlvdXQ6cn0sdj1pLmNvZXJjZVJlZih0LGUsbSxwLCIiLCJwYXBlciIpO2lmKCJwYXRoIiE9PWYpe3ZhciBnLHksYjsicGFwZXIiIT09dj8oZz1pLmdldEZyb21JZChtLHYpLGI9by5yYW5nZVRvU2hhcGVQb3NpdGlvbihnKSx5PW8uc2hhcGVQb3NpdGlvblRvUmFuZ2UoZykpOnk9Yj1uLmlkZW50aXR5O3ZhciB4PXArIjAiLF89cCsiMSIsdz10W3hdLE09dFtfXTt0W3hdPXkodFt4XSwhMCksdFtfXT15KHRbX10sITApLGkuY29lcmNlUG9zaXRpb24oZSxtLGMsdix4LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLG0sYyx2LF8sLjc1KSxlW3hdPWIoZVt4XSksZVtfXT1iKGVbX10pLHRbeF09dyx0W19dPU19fXJldHVybiJwYXRoIj09PWY/YygicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pLGV9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL2F0dHJpYnV0ZXMiOjY4OCwiLi9oZWxwZXJzIjo2OTN9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSxjPXtfaXNMaW5rZWRUb0FycmF5OiJzdGVwIixtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX07ZS5leHBvcnRzPW8oe19pc0xpbmtlZFRvQXJyYXk6InNsaWRlciIsdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc3RlcHM6YyxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSxwYWQ6YSh7fSxpLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxNTB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6ImN1YmljLWluLW91dCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6bih7fSl9LGZvbnQ6bih7fSksYWN0aXZlYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bC5ncmlwQmdBY3RpdmVDb2xvcn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bC5yYWlsQmdDb2xvcn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwucmFpbEJvcmRlckNvbG9yfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmwucmFpbEJvcmRlcldpZHRofSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6bC50aWNrTGVuZ3RofSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwudGlja0NvbG9yfSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxtaW5vcnRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpsLm1pbm9yVGlja0xlbmd0aH19LCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc3NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MDMsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4MzcsIi4vY29uc3RhbnRzIjo2OTd9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJzbGlkZXJzIixjb250YWluZXJDbGFzc05hbWU6InNsaWRlci1jb250YWluZXIiLGdyb3VwQ2xhc3NOYW1lOiJzbGlkZXItZ3JvdXAiLGlucHV0QXJlYUNsYXNzOiJzbGlkZXItaW5wdXQtYXJlYSIscmFpbFJlY3RDbGFzczoic2xpZGVyLXJhaWwtcmVjdCIscmFpbFRvdWNoUmVjdENsYXNzOiJzbGlkZXItcmFpbC10b3VjaC1yZWN0IixncmlwUmVjdENsYXNzOiJzbGlkZXItZ3JpcC1yZWN0Iix0aWNrUmVjdENsYXNzOiJzbGlkZXItdGljay1yZWN0IixpbnB1dFByb3h5Q2xhc3M6InNsaWRlci1pbnB1dC1wcm94eSIsbGFiZWxzQ2xhc3M6InNsaWRlci1sYWJlbHMiLGxhYmVsR3JvdXBDbGFzczoic2xpZGVyLWxhYmVsLWdyb3VwIixsYWJlbENsYXNzOiJzbGlkZXItbGFiZWwiLGN1cnJlbnRWYWx1ZUNsYXNzOiJzbGlkZXItY3VycmVudC12YWx1ZSIscmFpbEhlaWdodDo1LG1lbnVJbmRleEF0dHJOYW1lOiJzbGlkZXItYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJzbGlkZXItIixtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6NDAsYXJyb3dPZmZzZXRYOjQscmFpbFJhZGl1czoyLHJhaWxXaWR0aDo1LHJhaWxCb3JkZXI6NCxyYWlsQm9yZGVyV2lkdGg6MSxyYWlsQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLHJhaWxCZ0NvbG9yOiIjZjhmYWZjIixyYWlsSW5zZXQ6OCxzdGVwSW5zZXQ6MTAsZ3JpcFJhZGl1czoxMCxncmlwV2lkdGg6MjAsZ3JpcEhlaWdodDoyMCxncmlwQm9yZGVyOjIwLGdyaXBCb3JkZXJXaWR0aDoxLGdyaXBCb3JkZXJDb2xvcjoiI2JlYzhkOSIsZ3JpcEJnQ29sb3I6IiNmNmY4ZmEiLGdyaXBCZ0FjdGl2ZUNvbG9yOiIjZGJkZGUwIixsYWJlbFBhZGRpbmc6OCxsYWJlbE9mZnNldDowLHRpY2tXaWR0aDoxLHRpY2tDb2xvcjoiIzMzMyIsdGlja09mZnNldDoyNSx0aWNrTGVuZ3RoOjcsbWlub3JUaWNrT2Zmc2V0OjI1LG1pbm9yVGlja0NvbG9yOiIjMzMzIixtaW5vclRpY2tMZW5ndGg6NCxjdXJyZW50VmFsdWVQYWRkaW5nOjgsY3VycmVudFZhbHVlSW5zZXQ6MH19LHt9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUscyxyLG4pfW4oInZpc2libGUiLGkodCxlKS5sZW5ndGg+MCkmJihuKCJhY3RpdmUiKSxuKCJ4IiksbigieSIpLGEubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG4oInhhbmNob3IiKSxuKCJ5YW5jaG9yIiksbigibGVuIiksbigibGVubW9kZSIpLG4oInBhZC50IiksbigicGFkLnIiKSxuKCJwYWQuYiIpLG4oInBhZC5sIiksYS5jb2VyY2VGb250KG4sImZvbnQiLHIuZm9udCksbigiY3VycmVudHZhbHVlLnZpc2libGUiKSYmKG4oImN1cnJlbnR2YWx1ZS54YW5jaG9yIiksbigiY3VycmVudHZhbHVlLnByZWZpeCIpLG4oImN1cnJlbnR2YWx1ZS5zdWZmaXgiKSxuKCJjdXJyZW50dmFsdWUub2Zmc2V0IiksYS5jb2VyY2VGb250KG4sImN1cnJlbnR2YWx1ZS5mb250IixlLmZvbnQpKSxuKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbigidHJhbnNpdGlvbi5lYXNpbmciKSxuKCJiZ2NvbG9yIiksbigiYWN0aXZlYmdjb2xvciIpLG4oImJvcmRlcmNvbG9yIiksbigiYm9yZGVyd2lkdGgiKSxuKCJ0aWNrbGVuIiksbigidGlja3dpZHRoIiksbigidGlja2NvbG9yIiksbigibWlub3J0aWNrbGVuIikpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIGEuY29lcmNlKG4saSx1LHQsZSl9Zm9yKHZhciBuLGksbz10LnN0ZXBzfHxbXSxzPWUuc3RlcHM9W10sbD0wO2w8by5sZW5ndGg7bCsrKW49b1tsXSxpPXt9LHIoIm1ldGhvZCIpLGEuaXNQbGFpbk9iamVjdChuKSYmKCJza2lwIj09PWkubWV0aG9kfHxBcnJheS5pc0FycmF5KG4uYXJncykpJiYocigiYXJncyIpLHIoImxhYmVsIiwic3RlcC0iK2wpLHIoInZhbHVlIixpLmxhYmVsKSxyKCJleGVjdXRlIikscy5wdXNoKGkpKTtyZXR1cm4gc312YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpLGM9bC5uYW1lLHU9cy5zdGVwcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtvKHQsZSx7bmFtZTpjLGhhbmRsZUl0ZW1EZWZhdWx0czpufSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc3NiwiLi9hdHRyaWJ1dGVzIjo2OTYsIi4vY29uc3RhbnRzIjo2OTd9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10W1MubmFtZV0sbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07YS52aXNpYmxlJiZhLnN0ZXBzLmxlbmd0aCYmKGEuZ2Q9ZSxuLnB1c2goYSkpfXJldHVybiBufWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1rLnRlc3Rlci5zZWxlY3RBbGwoImcuIitTLmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLnN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChTLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIG49MCxpPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXcuc2VsZWN0KHRoaXMpLGE9YyhyLHtzdGVwOnR9LGUpLG89YS5ub2RlKCk7aWYobyl7dmFyIHM9ay5iQm94KG8pO2k9TWF0aC5tYXgoaSxzLmhlaWdodCksbj1NYXRoLm1heChuLHMud2lkdGgpfX0pLHIucmVtb3ZlKCksZS5pbnB1dEFyZWFXaWR0aD1NYXRoLm1heChTLnJhaWxXaWR0aCxTLmdyaXBIZWlnaHQpO3ZhciBhPXQuX2Z1bGxMYXlvdXQuX3NpemU7ZS5seD1hLmwrYS53KmUueCxlLmx5PWEudCthLmgqKDEtZS55KSwiZnJhY3Rpb24iPT09ZS5sZW5tb2RlP2Uub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChhLncqZS5sZW4pOmUub3V0ZXJMZW5ndGg9ZS5sZW4sZS5sZW5QYWQ9TWF0aC5yb3VuZCguNSpTLmdyaXBXaWR0aCksZS5pbnB1dEFyZWFTdGFydD0wLGUuaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoZS5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciBvPWUuaW5wdXRBcmVhTGVuZ3RoLTIqUy5zdGVwSW5zZXQsbD1vLyhlLnN0ZXBzLmxlbmd0aC0xKSx1PW4rUy5sYWJlbFBhZGRpbmc7aWYoZS5sYWJlbFN0cmlkZT1NYXRoLm1heCgxLE1hdGguY2VpbCh1L2wpKSxlLmxhYmVsSGVpZ2h0PWksZS5jdXJyZW50VmFsdWVNYXhXaWR0aD0wLGUuY3VycmVudFZhbHVlSGVpZ2h0PTAsZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD0wLGUuY3VycmVudFZhbHVlTWF4TGluZXM9MSxlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgZj1rLnRlc3Rlci5hcHBlbmQoImciKTtyLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9cyhmLGUsdC5sYWJlbCksbj1yLm5vZGUoKSYmay5iQm94KHIubm9kZSgpKXx8e3dpZHRoOjAsaGVpZ2h0OjB9LGk9QS5saW5lQ291bnQocik7ZS5jdXJyZW50VmFsdWVNYXhXaWR0aD1NYXRoLm1heChlLmN1cnJlbnRWYWx1ZU1heFdpZHRoLE1hdGguY2VpbChuLndpZHRoKSksZS5jdXJyZW50VmFsdWVIZWlnaHQ9TWF0aC5tYXgoZS5jdXJyZW50VmFsdWVIZWlnaHQsTWF0aC5jZWlsKG4uaGVpZ2h0KSksZS5jdXJyZW50VmFsdWVNYXhMaW5lcz1NYXRoLm1heChlLmN1cnJlbnRWYWx1ZU1heExpbmVzLGkpfSksZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD1lLmN1cnJlbnRWYWx1ZUhlaWdodCtlLmN1cnJlbnR2YWx1ZS5vZmZzZXQsZi5yZW1vdmUoKX1lLmhlaWdodD1lLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K1MudGlja09mZnNldCtlLnRpY2tsZW4rUy5sYWJlbE9mZnNldCtlLmxhYmVsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYjt2YXIgaD0ibGVmdCI7RS5pc1JpZ2h0QW5jaG9yKGUpJiYoZS5seC09ZS5vdXRlckxlbmd0aCxoPSJyaWdodCIpLEUuaXNDZW50ZXJBbmNob3IoZSkmJihlLmx4LT1lLm91dGVyTGVuZ3RoLzIsaD0iY2VudGVyIik7dmFyIGQ9InRvcCI7RS5pc0JvdHRvbUFuY2hvcihlKSYmKGUubHktPWUuaGVpZ2h0LGQ9ImJvdHRvbSIpLEUuaXNNaWRkbGVBbmNob3IoZSkmJihlLmx5LT1lLmhlaWdodC8yLGQ9Im1pZGRsZSIpLGUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKGUub3V0ZXJMZW5ndGgpLGUuaGVpZ2h0PU1hdGguY2VpbChlLmhlaWdodCksZS5seD1NYXRoLnJvdW5kKGUubHgpLGUubHk9TWF0aC5yb3VuZChlLmx5KSxNLmF1dG9NYXJnaW4odCxTLmF1dG9NYXJnaW5JZFJvb3QrZS5faW5kZXgse3g6ZS54LHk6ZS55LGw6ZS5vdXRlckxlbmd0aCooe3JpZ2h0OjEsY2VudGVyOi41fVtoXXx8MCkscjplLm91dGVyTGVuZ3RoKih7bGVmdDoxLGNlbnRlcjouNX1baF18fDApLGI6ZS5oZWlnaHQqKHt0b3A6MSxtaWRkbGU6LjV9W2RdfHwwKSx0OmUuaGVpZ2h0Kih7Ym90dG9tOjEsbWlkZGxlOi41fVtkXXx8MCl9KX1mdW5jdGlvbiBvKHQsZSxyKXtyLmFjdGl2ZT49ci5zdGVwcy5sZW5ndGgmJihyLmFjdGl2ZT0wKSxlLmNhbGwocyxyKS5jYWxsKHgscikuY2FsbCh1LHIpLmNhbGwocCxyKS5jYWxsKGIsdCxyKS5jYWxsKGwsdCxyKSxrLnNldFRyYW5zbGF0ZShlLHIubHgrci5wYWQubCxyLmx5K3IucGFkLnQpLGUuY2FsbCh2LHIsci5hY3RpdmUvKHIuc3RlcHMubGVuZ3RoLTEpLCExKSxlLmNhbGwocyxyKX1mdW5jdGlvbiBzKHQsZSxyKXtpZihlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgbixpLGE9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFswXSk7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49ZS5pbnB1dEFyZWFMZW5ndGgtUy5jdXJyZW50VmFsdWVJbnNldC1lLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmUuaW5wdXRBcmVhTGVuZ3RoLGk9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPVMuY3VycmVudFZhbHVlSW5zZXQsaT0ibGVmdCJ9YS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoUy5sYWJlbENsYXNzLCEwKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjppLCJkYXRhLW5vdGV4IjoxfSk7dmFyIG89ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpbys9cjtlbHNle28rPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsfWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKG8rPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksYS5jYWxsKGsuZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KG8pLmNhbGwoQS5jb252ZXJ0VG9Uc3BhbnMsZS5nZCk7dmFyIHM9QS5saW5lQ291bnQoYSksbD0oZS5jdXJyZW50VmFsdWVNYXhMaW5lcysxLXMpKmUuY3VycmVudHZhbHVlLmZvbnQuc2l6ZSpMO3JldHVybiBBLnBvc2l0aW9uVGV4dChhLG4sbCksYX19ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoInJlY3QuIitTLmdyaXBSZWN0Q2xhc3MpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChTLmdyaXBSZWN0Q2xhc3MsITApLmNhbGwoZCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksbi5hdHRyKHt3aWR0aDpTLmdyaXBXaWR0aCxoZWlnaHQ6Uy5ncmlwSGVpZ2h0LHJ4OlMuZ3JpcFJhZGl1cyxyeTpTLmdyaXBSYWRpdXN9KS5jYWxsKFQuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoVC5maWxsLHIuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsci5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoWzBdKTtyZXR1cm4gbi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoUy5sYWJlbENsYXNzLCEwKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLG4uY2FsbChrLmZvbnQsci5mb250KS50ZXh0KGUuc3RlcC5sYWJlbCkuY2FsbChBLmNvbnZlcnRUb1RzcGFucyxyLmdkKSxufWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgiZy4iK1MubGFiZWxzQ2xhc3MpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChTLmxhYmVsc0NsYXNzLCEwKTt2YXIgbj1yLnNlbGVjdEFsbCgiZy4iK1MubGFiZWxHcm91cENsYXNzKS5kYXRhKGUubGFiZWxTdGVwcyk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoUy5sYWJlbEdyb3VwQ2xhc3MsITApLG4uZXhpdCgpLnJlbW92ZSgpLG4uZWFjaChmdW5jdGlvbih0KXt2YXIgcj13LnNlbGVjdCh0aGlzKTtyLmNhbGwoYyx0LGUpLGsuc2V0VHJhbnNsYXRlKHIsZyhlLHQuZnJhY3Rpb24pLFMudGlja09mZnNldCtlLnRpY2tsZW4rZS5mb250LnNpemUqTCtTLmxhYmVsT2Zmc2V0K2UuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gZih0LGUscixuLGkpe3ZhciBhPU1hdGgucm91bmQobiooci5zdGVwcy5sZW5ndGgtMSkpO2EhPT1yLmFjdGl2ZSYmaCh0LGUscixhLCEwLGkpfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvPXIuYWN0aXZlO3IuX2lucHV0LmFjdGl2ZT1yLmFjdGl2ZT1uO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbCh2LHIsci5hY3RpdmUvKHIuc3RlcHMubGVuZ3RoLTEpLGEpLGUuY2FsbChzLHIpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmNoYW5nZSIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246aSxwcmV2aW91c0FjdGl2ZTpvfSksbCYmbC5tZXRob2QmJmkmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9aSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1hKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6aSxkb1RyYW5zaXRpb246YX0sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZNLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSl9ZnVuY3Rpb24gZCh0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiByLmRhdGEoKVswXX12YXIgaT1yLm5vZGUoKSxhPXcuc2VsZWN0KGUpO3Qub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXt2YXIgdD1uKCk7ZS5lbWl0KCJwbG90bHlfc2xpZGVyc3RhcnQiLHtzbGlkZXI6dH0pO3ZhciBvPXIuc2VsZWN0KCIuIitTLmdyaXBSZWN0Q2xhc3MpO3cuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLG8uY2FsbChULmZpbGwsdC5hY3RpdmViZ2NvbG9yKTt2YXIgcz15KHQsdy5tb3VzZShpKVswXSk7ZihlLHIsdCxzLCEwKSx0Ll9kcmFnZ2luZz0hMCxhLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIHQ9bigpLGE9eSh0LHcubW91c2UoaSlbMF0pO2YoZSxyLHQsYSwhMSl9KSxhLm9uKCJtb3VzZXVwIixmdW5jdGlvbigpe3ZhciB0PW4oKTt0Ll9kcmFnZ2luZz0hMSxvLmNhbGwoVC5maWxsLHQuYmdjb2xvciksYS5vbigibW91c2V1cCIsbnVsbCksYS5vbigibW91c2Vtb3ZlIixudWxsKSxlLmVtaXQoInBsb3RseV9zbGlkZXJlbmQiLHtzbGlkZXI6dCxzdGVwOnQuc3RlcHNbdC5hY3RpdmVdfSl9KX0pfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdC4iK1MudGlja1JlY3RDbGFzcykuZGF0YShlLnN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChTLnRpY2tSZWN0Q2xhc3MsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cih7d2lkdGg6ZS50aWNrd2lkdGgrInB4Iiwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj1yJWUubGFiZWxTdHJpZGU9PTAsaT13LnNlbGVjdCh0aGlzKTtpLmF0dHIoe2hlaWdodDpuP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoVC5maWxsLGUudGlja2NvbG9yKSxrLnNldFRyYW5zbGF0ZShpLGcoZSxyLyhlLnN0ZXBzLmxlbmd0aC0xKSktLjUqZS50aWNrd2lkdGgsKG4/Uy50aWNrT2Zmc2V0OlMubWlub3JUaWNrT2Zmc2V0KStlLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIG0odCl7dC5sYWJlbFN0ZXBzPVtdO2Zvcih2YXIgZT10LnN0ZXBzLmxlbmd0aCxyPTA7cjxlO3IrPXQubGFiZWxTdHJpZGUpdC5sYWJlbFN0ZXBzLnB1c2goe2ZyYWN0aW9uOnIvKGUtMSksc3RlcDp0LnN0ZXBzW3JdfSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT10LnNlbGVjdCgicmVjdC4iK1MuZ3JpcFJlY3RDbGFzcyksYT1nKGUscik7aWYoIWUuX2ludm9raW5nQ29tbWFuZCl7dmFyIG89aTtuJiZlLnRyYW5zaXRpb24uZHVyYXRpb24+MCYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24oZS50cmFuc2l0aW9uLmR1cmF0aW9uKS5lYXNlKGUudHJhbnNpdGlvbi5lYXNpbmcpKSxvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLS41KlMuZ3JpcFdpZHRoKSsiLCIrZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCsiKSIpfX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQuaW5wdXRBcmVhU3RhcnQrUy5zdGVwSW5zZXQrKHQuaW5wdXRBcmVhTGVuZ3RoLTIqUy5zdGVwSW5zZXQpKk1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtUy5zdGVwSW5zZXQtdC5pbnB1dEFyZWFTdGFydCkvKHQuaW5wdXRBcmVhTGVuZ3RoLTIqUy5zdGVwSW5zZXQtMip0LmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJyZWN0LiIrUy5yYWlsVG91Y2hSZWN0Q2xhc3MpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChTLnJhaWxUb3VjaFJlY3RDbGFzcywhMCkuY2FsbChkLGUsdCxyKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxuLmF0dHIoe3dpZHRoOnIuaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChyLmlucHV0QXJlYVdpZHRoLFMudGlja09mZnNldCtyLnRpY2tsZW4rci5sYWJlbEhlaWdodCl9KS5jYWxsKFQuZmlsbCxyLmJnY29sb3IpLmF0dHIoIm9wYWNpdHkiLDApLGsuc2V0VHJhbnNsYXRlKG4sMCxyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitTLnJhaWxSZWN0Q2xhc3MpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChTLnJhaWxSZWN0Q2xhc3MsITApO3ZhciBuPWUuaW5wdXRBcmVhTGVuZ3RoLTIqUy5yYWlsSW5zZXQ7ci5hdHRyKHt3aWR0aDpuLGhlaWdodDpTLnJhaWxXaWR0aCxyeDpTLnJhaWxSYWRpdXMscnk6Uy5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoVC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChULmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLGsuc2V0VHJhbnNsYXRlKHIsUy5yYWlsSW5zZXQsLjUqKGUuaW5wdXRBcmVhV2lkdGgtUy5yYWlsV2lkdGgpK2UuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIF8odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW58fHt9LHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaW5kZXhPZihTLmF1dG9NYXJnaW5JZFJvb3QpIT09LTEmJk0uYXV0b01hcmdpbih0LGkpfX12YXIgdz10KCJkMyIpLE09dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxUPXQoIi4uL2NvbG9yIiksaz10KCIuLi9kcmF3aW5nIiksQT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxFPXQoIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiKSxTPXQoIi4vY29uc3RhbnRzIiksTD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bihlLHQpLHM9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK1MuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChTLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLHMuZXhpdCgpLnJlbW92ZSgpLHMuZXhpdCgpLnNpemUoKSYmXyh0KSwwIT09ci5sZW5ndGgpe3ZhciBsPXMuc2VsZWN0QWxsKCJnLiIrUy5ncm91cENsYXNzTmFtZSkuZGF0YShyLGkpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKFMuZ3JvdXBDbGFzc05hbWUsITApLGwuZXhpdCgpLmVhY2goZnVuY3Rpb24oZSl7dy5zZWxlY3QodGhpcykucmVtb3ZlKCksZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb21tYW5kT2JzZXJ2ZXIsTS5hdXRvTWFyZ2luKHQsUy5hdXRvTWFyZ2luSWRSb290K2UuX2luZGV4KX0pO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO2EodCx1KX1sLmVhY2goZnVuY3Rpb24oZSl7aWYoIShlLnN0ZXBzLmxlbmd0aDwyKSl7dmFyIHI9dy5zZWxlY3QodGhpcyk7bShlKSxNLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5zdGVwcyxmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8aCh0LHIsbixlLmluZGV4LCExLCEwKSl9KSxvKHQsdy5zZWxlY3QodGhpcyksZSl9fSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MDgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuLi9jb2xvciI6NjExLCIuLi9kcmF3aW5nIjo2MzUsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjY2MSwiLi9jb25zdGFudHMiOjY5NyxkMzoxMjF9XSw3MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZTpuLm5hbWUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjo2OTYsIi4vY29uc3RhbnRzIjo2OTcsIi4vZGVmYXVsdHMiOjY5OCwiLi9kcmF3Ijo2OTl9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90bHkiKSxvPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKTsoZS5leHBvcnRzPXt9KS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBoKHQpe3Muc3luY09yQXN5bmMoW2QscF0sdCl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5hdHRyKCJ0cmFuc2Zvcm0iLHc/InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSB0cmFuc2xhdGUoMCwgIit3Lm9mZnNldCsiKSI6bnVsbCksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjprLCJmb250LXNpemUiOm4ucm91bmQoQSwyKSsicHgiLGZpbGw6Yy5yZ2IoRSksb3BhY2l0eTpTKmMub3BhY2l0eShFKSwiZm9udC13ZWlnaHQiOm8uZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyx0KSxvLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gcCh0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZih4JiZ4LnNlbGVjdGlvbiYmeC5zaWRlJiZDKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9MCxhPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9W3guc2lkZV0sbz1bImxlZnQiLCJ0b3AiXS5pbmRleE9mKHguc2lkZSkhPT0tMT8tMToxLGM9aSh4LnBhZCk/eC5wYWQ6Mix1PWwuYkJveChlLm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0OlQud2lkdGgsYm90dG9tOlQuaGVpZ2h0fSxoPXgubWF4U2hpZnR8fChmW3guc2lkZV0tdVt4LnNpZGVdKSooImxlZnQiPT09eC5zaWRlfHwidG9wIj09PXguc2lkZT8tMToxKTtpZihoPDApcj1oO2Vsc2V7dmFyIGQ9eC5vZmZzZXRMZWZ0fHwwLHA9eC5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1kLHUucmlnaHQtPWQsdS50b3AtPXAsdS5ib3R0b20tPXAseC5zZWxlY3Rpb24uZWFjaChmdW5jdGlvbigpe3ZhciB0PWwuYkJveCh0aGlzKTtzLmJCb3hJbnRlcnNlY3QodSx0LGMpJiYocj1NYXRoLm1heChyLG8qKHRbeC5zaWRlXS11W2FdKStjKSl9KSxyPU1hdGgubWluKGgscil9aWYocj4wfHxoPDApe3ZhciBtPXtsZWZ0OlstciwwXSxyaWdodDpbciwwXSx0b3A6WzAsLXJdLGJvdHRvbTpbMCxyXX1beC5zaWRlXTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIikiKX19fXZhciBtLHY9ci5wcm9wQ29udGFpbmVyLGc9ci5wcm9wTmFtZSx5PXIudHJhY2VJbmRleCxiPXIuZGZsdE5hbWUseD1yLmF2b2lkfHx7fSxfPXIuYXR0cmlidXRlcyx3PXIudHJhbnNmb3JtLE09ci5jb250YWluZXJHcm91cCxUPXQuX2Z1bGxMYXlvdXQsaz12LnRpdGxlZm9udC5mYW1pbHksQT12LnRpdGxlZm9udC5zaXplLEU9di50aXRsZWZvbnQuY29sb3IsUz0xLEw9ITEsQz12LnRpdGxlLnRyaW0oKTsidGl0bGUiPT09Zz9tPSJ0aXRsZVRleHQiOmcuaW5kZXhPZigiYXhpcyIpIT09LTE/bT0iYXhpc1RpdGxlVGV4dCI6Zy5pbmRleE9mKCEwKSYmKG09ImNvbG9yYmFyVGl0bGVUZXh0Iik7dmFyIEk9dC5fY29udGV4dC5lZGl0c1ttXTsiIj09PUMmJihTPTApLEMubWF0Y2goL0NsaWNrIHRvIGVudGVyIC4rIHRpdGxlLykmJihTPS4yLEw9ITAsSXx8KEM9IiIpKTt2YXIgRD1DfHxJO018fChNPVQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5nLSIrZSkuZGF0YShbMF0pLE0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnLSIrZSwhMCkpO3ZhciBQPU0uc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShEP1swXTpbXSk7aWYoUC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLFAudGV4dChDKS5hdHRyKCJjbGFzcyIsZSksUC5leGl0KCkucmVtb3ZlKCksRCl7UC5jYWxsKGgpO3ZhciB6PSJDbGljayB0byBlbnRlciAiK2IrIiB0aXRsZSI7SSYmKEM/UC5vbigiLm9wYWNpdHkiLG51bGwpOmZ1bmN0aW9uKCl7Uz0wLEw9ITAsQz16LFAudGV4dChDKS5vbigibW91c2VvdmVyLm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGYuU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGYuSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSl9KCksUC5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXk/YS5yZXN0eWxlKHQsZyxlLHkpOmEucmVsYXlvdXQodCxnLGUpfSkub24oImNhbmNlbCIsZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoaCl9KS5vbigiaW5wdXQiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dCh0fHwiICIpLmNhbGwodS5wb3NpdGlvblRleHQsXy54LF8ueSl9KSksUC5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsTCl9fX0seyIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MTMsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi4vLi4vcGxvdGx5Ijo3NzQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4uL2NvbG9yIjo2MTEsIi4uL2RyYXdpbmciOjYzNSxkMzoxMjEsImZhc3QtaXNudW1lcmljIjoxMzF9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD17X2lzTGlua2VkVG9BcnJheToiYnV0dG9uIixtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19O2UuZXhwb3J0cz1vKHtfaXNMaW5rZWRUb0FycmF5OiJ1cGRhdGVtZW51IixfYXJyYXlBdHRyUmVnZXhwczpbL151cGRhdGVtZW51c1xbKDB8WzEtOV1bMC05XSspXF1cLmJ1dHRvbnMvXSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZHJvcGRvd24iLCJidXR0b25zIl0sZGZsdDoiZHJvcGRvd24ifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsInVwIiwiZG93biJdLGRmbHQ6ImRvd24ifSxhY3RpdmU6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjB9LHNob3dhY3RpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGJ1dHRvbnM6bCx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJyaWdodCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHBhZDphKHt9LHMse30pLGZvbnQ6bih7fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5ib3JkZXJMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9fSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzLCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODM3LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MTB9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJ1cGRhdGVtZW51cyIsY29udGFpbmVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWNvbnRhaW5lciIsaGVhZGVyR3JvdXBDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWdyb3VwIixoZWFkZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyIixoZWFkZXJBcnJvd0NsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItYXJyb3ciLGRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uLWdyb3VwIixkcm9wZG93bkJ1dHRvbkNsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24iLGJ1dHRvbkNsYXNzTmFtZToidXBkYXRlbWVudS1idXR0b24iLGl0ZW1SZWN0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tcmVjdCIsaXRlbVRleHRDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS10ZXh0IixtZW51SW5kZXhBdHRyTmFtZToidXBkYXRlbWVudS1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InVwZGF0ZW1lbnUtIixibGFua0hlYWRlck9wdHM6e2xhYmVsOiIgICJ9LG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDoyNCxhcnJvd1BhZFg6MTYscng6MixyeToyLHRleHRPZmZzZXRYOjEyLHRleHRPZmZzZXRZOjMsYXJyb3dPZmZzZXRYOjQsZ2FwQnV0dG9uSGVhZGVyOjUsZ2FwQnV0dG9uOjIsYWN0aXZlQ29sb3I6IiNGNEZBRkYiLGhvdmVyQ29sb3I6IiNGNEZBRkYiLGFycm93U3ltYm9sOntsZWZ0OiJcdTI1YzQiLHJpZ2h0OiJcdTI1YmEiLHVwOiJcdTI1YjIiLGRvd246Ilx1MjViYyJ9fX0se31dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxzLHIsbil9bigidmlzaWJsZSIsaSh0LGUpLmxlbmd0aD4wKSYmKG4oImFjdGl2ZSIpLG4oImRpcmVjdGlvbiIpLG4oInR5cGUiKSxuKCJzaG93YWN0aXZlIiksbigieCIpLG4oInkiKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxuKCJ4YW5jaG9yIiksbigieWFuY2hvciIpLG4oInBhZC50IiksbigicGFkLnIiKSxuKCJwYWQuYiIpLG4oInBhZC5sIiksYS5jb2VyY2VGb250KG4sImZvbnQiLHIuZm9udCksbigiYmdjb2xvciIsci5wYXBlcl9iZ2NvbG9yKSxuKCJib3JkZXJjb2xvciIpLG4oImJvcmRlcndpZHRoIikpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIGEuY29lcmNlKG4saSx1LHQsZSl9Zm9yKHZhciBuLGksbz10LmJ1dHRvbnN8fFtdLHM9ZS5idXR0b25zPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyluPW9bbF0saT17fSxyKCJtZXRob2QiKSxhLmlzUGxhaW5PYmplY3QobikmJigic2tpcCI9PT1pLm1ldGhvZHx8QXJyYXkuaXNBcnJheShuLmFyZ3MpKSYmKHIoImFyZ3MiKSxyKCJsYWJlbCIpLHIoImV4ZWN1dGUiKSxpLl9pbmRleD1sLHMucHVzaChpKSk7cmV0dXJuIHN9dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSxjPWwubmFtZSx1PXMuYnV0dG9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtvKHQsZSx7bmFtZTpjLGhhbmRsZUl0ZW1EZWZhdWx0czpufSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc3NiwiLi9hdHRyaWJ1dGVzIjo3MDIsIi4vY29uc3RhbnRzIjo3MDN9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dFtMLm5hbWVdLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kudmlzaWJsZSYmci5wdXNoKGkpfXJldHVybiByfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGEodCl7cmV0dXJuK3QuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lKT09LTF9ZnVuY3Rpb24gbyh0LGUpe3JldHVybit0LmF0dHIoTC5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7ZS5faW5wdXQuYWN0aXZlPWUuYWN0aXZlPW8sImJ1dHRvbnMiPT09ZS50eXBlP2ModCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoaS5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsIi0xIiksbCh0LG4saSxhLGUpLHN8fGModCxuLGksYSxlKSl9ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPWUuc2VsZWN0QWxsKCJnLiIrTC5oZWFkZXJDbGFzc05hbWUpLmRhdGEoWzBdKTthLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmhlYWRlckNsYXNzTmFtZSwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIHM9aS5hY3RpdmUsbD1pLmJ1dHRvbnNbc118fEwuYmxhbmtIZWFkZXJPcHRzLHU9e3k6aS5wYWQudCx5UGFkOjAseDppLnBhZC5sLHhQYWQ6MCxpbmRleDowfSxmPXt3aWR0aDppLmhlYWRlcldpZHRoLGhlaWdodDppLmhlYWRlckhlaWdodH07YS5jYWxsKGgsaSxsLHQpLmNhbGwoYixpLHUsZik7dmFyIGQ9ZS5zZWxlY3RBbGwoInRleHQuIitMLmhlYWRlckFycm93Q2xhc3NOYW1lKS5kYXRhKFswXSk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoTC5oZWFkZXJBcnJvd0NsYXNzTmFtZSwhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChrLmZvbnQsaS5mb250KS50ZXh0KEwuYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKSxkLmF0dHIoe3g6aS5oZWFkZXJXaWR0aC1MLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6aS5oZWFkZXJIZWlnaHQvMitMLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyLmNhbGwoeCksci5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsbyhyLGkpPy0xOlN0cmluZyhpLl9pbmRleCkpLGModCxlLHIsbixpKX0pLGEub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXthLmNhbGwodil9KSxhLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLmNhbGwoZyxpKX0pLGsuc2V0VHJhbnNsYXRlKGUsaS5seCxpLmx5KX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7cnx8KHI9ZSxyLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikpO3ZhciBvPWEocikmJiJidXR0b25zIiE9PWkudHlwZT9bXTppLmJ1dHRvbnMsbD0iZHJvcGRvd24iPT09aS50eXBlP0wuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6TC5idXR0b25DbGFzc05hbWUsYz1yLnNlbGVjdEFsbCgiZy4iK2wpLmRhdGEobyksZD1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLCEwKSxwPWMuZXhpdCgpOyJkcm9wZG93biI9PT1pLnR5cGU/KGQuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciB5PTAseD0wLF89WyJ1cCIsImRvd24iXS5pbmRleE9mKGkuZGlyZWN0aW9uKSE9PS0xOyJkcm9wZG93biI9PT1pLnR5cGUmJihfP3g9aS5oZWFkZXJIZWlnaHQrTC5nYXBCdXR0b25IZWFkZXI6eT1pLmhlYWRlcldpZHRoK0wuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09aS50eXBlJiYidXAiPT09aS5kaXJlY3Rpb24mJih4PS1MLmdhcEJ1dHRvbkhlYWRlcitMLmdhcEJ1dHRvbi1pLm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1pLnR5cGUmJiJsZWZ0Ij09PWkuZGlyZWN0aW9uJiYoeT0tTC5nYXBCdXR0b25IZWFkZXIrTC5nYXBCdXR0b24taS5vcGVuV2lkdGgpO3ZhciBUPXt4OmkubHgreStpLnBhZC5sLHk6aS5seSt4K2kucGFkLnQseVBhZDpMLmdhcEJ1dHRvbix4UGFkOkwuZ2FwQnV0dG9uLGluZGV4OjB9LGs9e2w6VC54K2kuYm9yZGVyd2lkdGgsdDpULnkraS5ib3JkZXJ3aWR0aH07Yy5lYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIGw9dy5zZWxlY3QodGhpcyk7bC5jYWxsKGgsaSxhLHQpLmNhbGwoYixpLFQpLGwub24oImNsaWNrIixmdW5jdGlvbigpe3cuZXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8KHModCxpLGEsZSxyLG4sbyksYS5leGVjdXRlJiZNLmV4ZWN1dGVBUElDb21tYW5kKHQsYS5tZXRob2QsYS5hcmdzKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTppLGJ1dHRvbjphLGFjdGl2ZTppLmFjdGl2ZX0pKX0pLGwub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsLmNhbGwodil9KSxsLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtsLmNhbGwoZyxpKSxjLmNhbGwobSxpKX0pfSksYy5jYWxsKG0saSksXz8oay53PU1hdGgubWF4KGkub3BlbldpZHRoLGkuaGVhZGVyV2lkdGgpLGsuaD1ULnktay50KTooay53PVQueC1rLmwsay5oPU1hdGgubWF4KGkub3BlbkhlaWdodCxpLmhlYWRlckhlaWdodCkpLGsuZGlyZWN0aW9uPWkuZGlyZWN0aW9uLG4mJihjLnNpemUoKT91KHQsZSxyLG4saSxrKTpmKG4pKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz1pLmRpcmVjdGlvbix1PSJ1cCI9PT1jfHwiZG93biI9PT1jLGY9aS5hY3RpdmU7aWYodSlmb3Iocz0wLGw9MDtsPGY7bCsrKXMrPWkuaGVpZ2h0c1tsXStMLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8ZjtsKyspbys9aS53aWR0aHNbbF0rTC5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIiksbi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX1mdW5jdGlvbiBmKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSksciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9ZnVuY3Rpb24gaCh0LGUscixuKXt0LmNhbGwoZCxlKS5jYWxsKHAsZSxyLG4pfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChMLml0ZW1SZWN0Q2xhc3NOYW1lLCEwKS5hdHRyKHtyeDpMLnJ4LHJ5OkwucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksCnIuY2FsbChULnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKFQuZmlsbCxlLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChMLml0ZW1UZXh0Q2xhc3NOYW1lLCEwKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSksaS5jYWxsKGsuZm9udCxlLmZvbnQpLnRleHQoci5sYWJlbCkuY2FsbChBLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9dy5zZWxlY3QodGhpcyk7bj09PXImJmUuc2hvd2FjdGl2ZSYmaS5zZWxlY3QoInJlY3QuIitMLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKFQuZmlsbCxMLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHYodCl7dC5zZWxlY3QoInJlY3QuIitMLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKFQuZmlsbCxMLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGcodCxlKXt0LnNlbGVjdCgicmVjdC4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoVC5maWxsLGUuYmdjb2xvcil9ZnVuY3Rpb24geSh0LGUpe2Uud2lkdGgxPTAsZS5oZWlnaHQxPTAsZS5oZWlnaHRzPVtdLGUud2lkdGhzPVtdLGUudG90YWxXaWR0aD0wLGUudG90YWxIZWlnaHQ9MCxlLm9wZW5XaWR0aD0wLGUub3BlbkhlaWdodD0wLGUubHg9MCxlLmx5PTA7dmFyIHI9ay50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrTC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShlLmJ1dHRvbnMpO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBuPVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbikhPT0tMTtyLmVhY2goZnVuY3Rpb24ocixpKXt2YXIgYT13LnNlbGVjdCh0aGlzKTthLmNhbGwoaCxlLHIsdCk7dmFyIG89YS5zZWxlY3QoIi4iK0wuaXRlbVRleHRDbGFzc05hbWUpLHM9by5ub2RlKCkmJmsuYkJveChvLm5vZGUoKSkud2lkdGgsbD1NYXRoLm1heChzK0wudGV4dFBhZFgsTC5taW5XaWR0aCksYz1lLmZvbnQuc2l6ZSpTLHU9QS5saW5lQ291bnQobyksZj1NYXRoLm1heChjKnUsTC5taW5IZWlnaHQpK0wudGV4dE9mZnNldFk7Zj1NYXRoLmNlaWwoZiksbD1NYXRoLmNlaWwobCksZS53aWR0aHNbaV09bCxlLmhlaWdodHNbaV09ZixlLmhlaWdodDE9TWF0aC5tYXgoZS5oZWlnaHQxLGYpLGUud2lkdGgxPU1hdGgubWF4KGUud2lkdGgxLGwpLG4/KGUudG90YWxXaWR0aD1NYXRoLm1heChlLnRvdGFsV2lkdGgsbCksZS5vcGVuV2lkdGg9ZS50b3RhbFdpZHRoLGUudG90YWxIZWlnaHQrPWYrTC5nYXBCdXR0b24sZS5vcGVuSGVpZ2h0Kz1mK0wuZ2FwQnV0dG9uKTooZS50b3RhbFdpZHRoKz1sK0wuZ2FwQnV0dG9uLGUub3BlbldpZHRoKz1sK0wuZ2FwQnV0dG9uLGUudG90YWxIZWlnaHQ9TWF0aC5tYXgoZS50b3RhbEhlaWdodCxmKSxlLm9wZW5IZWlnaHQ9ZS50b3RhbEhlaWdodCl9KSxuP2UudG90YWxIZWlnaHQtPUwuZ2FwQnV0dG9uOmUudG90YWxXaWR0aC09TC5nYXBCdXR0b24sZS5oZWFkZXJXaWR0aD1lLndpZHRoMStMLmFycm93UGFkWCxlLmhlYWRlckhlaWdodD1lLmhlaWdodDEsImRyb3Bkb3duIj09PWUudHlwZSYmKG4/KGUud2lkdGgxKz1MLmFycm93UGFkWCxlLnRvdGFsSGVpZ2h0PWUuaGVpZ2h0MSk6ZS50b3RhbFdpZHRoPWUud2lkdGgxLGUudG90YWxXaWR0aCs9TC5hcnJvd1BhZFgpLHIucmVtb3ZlKCk7dmFyIGk9ZS50b3RhbFdpZHRoK2UucGFkLmwrZS5wYWQucixhPWUudG90YWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iLG89dC5fZnVsbExheW91dC5fc2l6ZTtlLmx4PW8ubCtvLncqZS54LGUubHk9by50K28uaCooMS1lLnkpO3ZhciBzPSJsZWZ0IjtFLmlzUmlnaHRBbmNob3IoZSkmJihlLmx4LT1pLHM9InJpZ2h0IiksRS5pc0NlbnRlckFuY2hvcihlKSYmKGUubHgtPWkvMixzPSJjZW50ZXIiKTt2YXIgbD0idG9wIjtFLmlzQm90dG9tQW5jaG9yKGUpJiYoZS5seS09YSxsPSJib3R0b20iKSxFLmlzTWlkZGxlQW5jaG9yKGUpJiYoZS5seS09YS8yLGw9Im1pZGRsZSIpLGUudG90YWxXaWR0aD1NYXRoLmNlaWwoZS50b3RhbFdpZHRoKSxlLnRvdGFsSGVpZ2h0PU1hdGguY2VpbChlLnRvdGFsSGVpZ2h0KSxlLmx4PU1hdGgucm91bmQoZS5seCksZS5seT1NYXRoLnJvdW5kKGUubHkpLE0uYXV0b01hcmdpbih0LEwuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCx7eDplLngseTplLnksbDppKih7cmlnaHQ6MSxjZW50ZXI6LjV9W3NdfHwwKSxyOmkqKHtsZWZ0OjEsY2VudGVyOi41fVtzXXx8MCksYjphKih7dG9wOjEsbWlkZGxlOi41fVtsXXx8MCksdDphKih7Ym90dG9tOjEsbWlkZGxlOi41fVtsXXx8MCl9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoIi4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoIi4iK0wuaXRlbVRleHRDbGFzc05hbWUpLG89ZS5ib3JkZXJ3aWR0aCxzPXIuaW5kZXg7ay5zZXRUcmFuc2xhdGUodCxvK3IueCxvK3IueSk7dmFyIGw9WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKSE9PS0xLGM9bi5oZWlnaHR8fChsP2UuaGVpZ2h0c1tzXTplLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwobD9lLndpZHRoMTplLndpZHRoc1tzXSksaGVpZ2h0OmN9KTt2YXIgdT1lLmZvbnQuc2l6ZSpTLGY9QS5saW5lQ291bnQoYSksaD0oZi0xKSp1LzI7QS5wb3NpdGlvblRleHQoYSxMLnRleHRPZmZzZXRYLGMvMi1oK0wudGV4dE9mZnNldFkpLGw/ci55Kz1lLmhlaWdodHNbc10rci55UGFkOnIueCs9ZS53aWR0aHNbc10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiB4KHQpe3Quc2VsZWN0QWxsKCJnLiIrTC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZnVuY3Rpb24gXyh0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbnx8e30scj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aS5pbmRleE9mKEwuYXV0b01hcmdpbklkUm9vdCkhPT0tMSYmTS5hdXRvTWFyZ2luKHQsaSl9fXZhciB3PXQoImQzIiksTT10KCIuLi8uLi9wbG90cy9wbG90cyIpLFQ9dCgiLi4vY29sb3IiKSxrPXQoIi4uL2RyYXdpbmciKSxBPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLEU9dCgiLi4vbGVnZW5kL2FuY2hvcl91dGlscyIpLFM9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxMPXQoIi4vY29uc3RhbnRzIiksQz10KCIuL3Njcm9sbGJveCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bihlKSxhPWUuX21lbnVsYXllci5zZWxlY3RBbGwoImcuIitMLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksYS5leGl0KCkucmVtb3ZlKCksYS5leGl0KCkuc2l6ZSgpJiZfKHQpLDAhPT1yLmxlbmd0aCl7dmFyIHU9YS5zZWxlY3RBbGwoImcuIitMLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIsaSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7dmFyIGY9YS5zZWxlY3RBbGwoImcuIitMLmRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWUpLmRhdGEoWzBdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWUsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZD1yW2hdO3kodCxkKX12YXIgcD0idXBkYXRlbWVudXMiK2UuX3VpZCxtPW5ldyBDKHQsZixwKTt1LmVudGVyKCkuc2l6ZSgpJiYoZi5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChmLm5vZGUoKSksZi5jYWxsKHgpLmF0dHIoTC5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSksdS5leGl0KCkuZWFjaChmdW5jdGlvbihlKXt3LnNlbGVjdCh0aGlzKS5yZW1vdmUoKSxmLmNhbGwoeCkuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLE0uYXV0b01hcmdpbih0LEwuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCl9KSx1LmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dy5zZWxlY3QodGhpcyksbj0iZHJvcGRvd24iPT09ZS50eXBlP2Y6bnVsbDtNLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKGkpe3ModCxlLGUuYnV0dG9uc1tpLmluZGV4XSxyLG4sbSxpLmluZGV4LCEwKX0pLCJkcm9wZG93biI9PT1lLnR5cGU/KGwodCxyLGYsbSxlKSxvKGYsZSkmJmModCxyLGYsbSxlKSk6Yyh0LHIsbnVsbCxudWxsLGUpfSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MDgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuLi9jb2xvciI6NjExLCIuLi9kcmF3aW5nIjo2MzUsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjY2MSwiLi9jb25zdGFudHMiOjcwMywiLi9zY3JvbGxib3giOjcwNyxkMzoxMjF9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNzAwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9hdHRyaWJ1dGVzIjo3MDIsIi4vY29uc3RhbnRzIjo3MDMsIi4vZGVmYXVsdHMiOjcwNCwiLi9kcmF3Ijo3MDUsZHVwOjcwMH1dLDcwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmdkPXQsdGhpcy5jb250YWluZXI9ZSx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1lLmV4cG9ydHM9bjt2YXIgaT10KCJkMyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpO24uYmFyV2lkdGg9MixuLmJhckxlbmd0aD0yMCxuLmJhclJhZGl1cz0yLG4uYmFyUGFkPTEsbi5iYXJDb2xvcj0iIzgwOEJBNCIsbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9cy53aWR0aCxjPXMuaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxmLGgsZCxwPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyx2PXRoaXMucG9zaXRpb24udCxnPXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLGI9ImRvd24iPT09eSx4PSJsZWZ0Ij09PXksXz0icmlnaHQiPT09eSx3PSJ1cCI9PT15LE09bSxUPWc7Ynx8eHx8X3x8d3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIixiPSEwKSxifHx3Pyh1PXAsZj11K00sYj8oaD12LGQ9TWF0aC5taW4oaCtULGMpLFQ9ZC1oKTooZD12K1QsaD1NYXRoLm1heChkLVQsMCksVD1kLWgpKTooaD12LGQ9aCtULHg/KGY9cCtNLHU9TWF0aC5tYXgoZi1NLDApLE09Zi11KToodT1wLGY9TWF0aC5taW4odStNLGwpLE09Zi11KSksdGhpcy5fYm94PXtsOnUsdDpoLHc6TSxoOlR9O3ZhciBrPW0+TSxBPW4uYmFyTGVuZ3RoKzIqbi5iYXJQYWQsRT1uLmJhcldpZHRoKzIqbi5iYXJQYWQsUz1wLEw9ditnO0wrRT5jJiYoTD1jLUUpO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoaz9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChhLmZpbGwsbi5iYXJDb2xvciksaz8odGhpcy5oYmFyPUMuYXR0cih7cng6bi5iYXJSYWRpdXMscnk6bi5iYXJSYWRpdXMseDpTLHk6TCx3aWR0aDpBLGhlaWdodDpFfSksdGhpcy5faGJhclhNaW49UytBLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD1NLUEpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEk9Zz5ULEQ9bi5iYXJXaWR0aCsyKm4uYmFyUGFkLFA9bi5iYXJMZW5ndGgrMipuLmJhclBhZCx6PXArbSxPPXY7eitEPmwmJih6PWwtRCk7dmFyIFI9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoST9bMF06W10pO1IuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksUi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoYS5maWxsLG4uYmFyQ29sb3IpLEk/KHRoaXMudmJhcj1SLmF0dHIoe3J4Om4uYmFyUmFkaXVzLHJ5Om4uYmFyUmFkaXVzLHg6eix5Ok8sd2lkdGg6RCxoZWlnaHQ6UH0pLHRoaXMuX3ZiYXJZTWluPU8rUC8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9VC1QKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBGPXRoaXMuaWQsaj11LS41LE49ST9mK0QrLjU6ZisuNSxCPWgtLjUsVT1rP2QrRSsuNTpkKy41LFY9cy5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK0YpLmRhdGEoa3x8ST9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLEYpLmFwcGVuZCgicmVjdCIpLGt8fEk/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKGopLHk6TWF0aC5mbG9vcihCKSx3aWR0aDpNYXRoLmNlaWwoTiktTWF0aC5mbG9vcihqKSxoZWlnaHQ6TWF0aC5jZWlsKFUpLU1hdGguZmxvb3IoQil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKG8uc2V0Q2xpcFVybCxGKSx0aGlzLmJnLmF0dHIoe3g6cCx5OnYsd2lkdGg6bSxoZWlnaHQ6Z30pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoby5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksa3x8SSl7dmFyIEg9aS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKTt2YXIgcT1pLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2kuZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRyYWciLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtrJiZ0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKHEpLEkmJnRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSl9dGhpcy5zZXRUcmFuc2xhdGUoZSxyKX0sbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpeyh0aGlzLmhiYXJ8fHRoaXMudmJhcikmJih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLmhiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpLHRoaXMudmJhciYmKHRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LG4ucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09aS5ldmVudC5keCksdGhpcy52YmFyJiYoZS09aS5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9aS5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPWkuZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxuLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixuPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShzLmNvbnN0cmFpbihpLmV2ZW50LngscixuKS1yKS8obi1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4sbz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0ocy5jb25zdHJhaW4oaS5ldmVudC55LGEsbyktYSkvKG8tYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9cy5jb25zdHJhaW4odHx8MCwwLHIpLGU9cy5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoby5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBhPWUvbjt0aGlzLnZiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0LGUrYSp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi9jb2xvciI6NjExLCIuLi9kcmF3aW5nIjo2MzUsZDM6MTIxfV0sNzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sTElORV9TUEFDSU5HOjEuMyxNSURfU0hJRlQ6LjM1fX0se31dLDcwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fSx7fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXtjaXJjbGU6e3VuaWNvZGU6Ilx1MjVjZiJ9LHNxdWFyZTp7dW5pY29kZToiXHUyNWEwIn0sZGlhbW9uZDp7dW5pY29kZToiXHUyNWM2In0sY3Jvc3M6e3VuaWNvZGU6Ilx1MjcxYSJ9LHg6e3VuaWNvZGU6Ilx1Mjc0YyJ9LCJ0cmlhbmdsZS11cCI6e3VuaWNvZGU6Ilx1MjViMiJ9LCJ0cmlhbmdsZS1kb3duIjp7dW5pY29kZToiXHUyNWJjIn0sInRyaWFuZ2xlLWxlZnQiOnt1bmljb2RlOiJcdTI1YzQifSwidHJpYW5nbGUtcmlnaHQiOnt1bmljb2RlOiJcdTI1YmEifSwidHJpYW5nbGUtbmUiOnt1bmljb2RlOiJcdTI1ZTUifSwidHJpYW5nbGUtbnciOnt1bmljb2RlOiJcdTI1ZTQifSwidHJpYW5nbGUtc2UiOnt1bmljb2RlOiJcdTI1ZTIifSwidHJpYW5nbGUtc3ciOnt1bmljb2RlOiJcdTI1ZTMifSxwZW50YWdvbjp7dW5pY29kZToiXHUyYjFmIn0saGV4YWdvbjp7dW5pY29kZToiXHUyYjIyIn0saGV4YWdvbjI6e3VuaWNvZGU6Ilx1MmIyMyJ9LHN0YXI6e3VuaWNvZGU6Ilx1MjYwNSJ9LCJkaWFtb25kLXRhbGwiOnt1bmljb2RlOiJcdTI2NjYifSxib3d0aWU6e3VuaWNvZGU6Ilx1MjlkMyJ9LCJkaWFtb25kLXgiOnt1bmljb2RlOiJcdTI3NTYifSwiY3Jvc3MtdGhpbiI6e3VuaWNvZGU6IisiLG5vQm9yZGVyOiEwfSxhc3Rlcmlzazp7dW5pY29kZToiXHUyNzMzIixub0JvcmRlcjohMH0sInktdXAiOnt1bmljb2RlOiJcdTIxNDQiLG5vQm9yZGVyOiEwfSwieS1kb3duIjp7dW5pY29kZToiWSIsbm9Cb3JkZXI6ITB9LCJsaW5lLWV3Ijp7dW5pY29kZToiXHUyNTAwIixub0JvcmRlcjohMH0sImxpbmUtbnMiOnt1bmljb2RlOiJcdTI1MDIiLG5vQm9yZGVyOiEwfX0sYT17fSxvPU9iamVjdC5rZXlzKGkpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthW2wrIi1vcGVuIl09bih7fSxpW2xdKX12YXIgYz17ImNpcmNsZS1jcm9zcy1vcGVuIjp7dW5pY29kZToiXHUyYTAxIixub0ZpbGw6ITB9LCJjaXJjbGUteC1vcGVuIjp7dW5pY29kZToiXHUyYTAyIixub0ZpbGw6ITB9LCJzcXVhcmUtY3Jvc3Mtb3BlbiI6e3VuaWNvZGU6Ilx1MjI5ZSIsbm9GaWxsOiEwfSwic3F1YXJlLXgtb3BlbiI6e3VuaWNvZGU6Ilx1MjJhMCIsbm9GaWxsOiEwfX07ZS5leHBvcnRzPW4oe30saSxhLGMpfSx7Ii4uL2xpYi9leHRlbmQiOjcyNH1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOltbXSwwXSxkb3Q6W1suNSwxXSwyMDBdLGRhc2g6W1suNSwxXSw1MF0sbG9uZ2Rhc2g6W1suNSwxXSwxMF0sZGFzaGRvdDpbWy41LC42MjUsLjg3NSwxXSw1MF0sbG9uZ2Rhc2hkb3Q6W1suNSwuNywuOCwxXSwxMF19fSx7fV0sNzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2lyY2xlOiJcdTI1Y2YiLCJjaXJjbGUtb3BlbiI6Ilx1MjVjYiIsc3F1YXJlOiJcdTI1YTAiLCJzcXVhcmUtb3BlbiI6Ilx1MjVhMSIsZGlhbW9uZDoiXHUyNWM2IiwiZGlhbW9uZC1vcGVuIjoiXHUyNWM3Iixjcm9zczoiKyIseDoiXHUyNzRjIn19LHt9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtTSE9XX1BMQUNFSE9MREVSOjEwMCxISURFX1BMQUNFSE9MREVSOjFlMyxEQkxDTElDS0RFTEFZOjMwMCxERVNFTEVDVERJTTouMn19LHt9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTYsTUlOVVNfU0lHTjoiXHUyMjEyIn19LHt9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtlbnRpdHlUb1VuaWNvZGU6e211OiJcdTAzYmMiLCIjOTU2IjoiXHUwM2JjIixhbXA6IiYiLCIjMjgiOiImIixsdDoiPCIsIiM2MCI6IjwiLGd0OiI+IiwiIzYyIjoiPiIsbmJzcDoiXHhhMCIsIiMxNjAiOiJceGEwIix0aW1lczoiXHhkNyIsIiMyMTUiOiJceGQ3IixwbHVzbW46Ilx4YjEiLCIjMTc3IjoiXHhiMSIsZGVnOiJceGIwIiwiIzE3NiI6Ilx4YjAifX19LHt9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci54bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHIuc3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsci54bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsInhtbG5zOnhsaW5rIjpyLnhsaW5rfX0se31dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Bsb3RseSIpO3IudmVyc2lvbj0iMS4zMS4yIix0KCJlczYtcHJvbWlzZSIpLnBvbHlmaWxsKCksdCgiLi4vYnVpbGQvcGxvdGNzcyIpLHQoIi4vZm9udHMvbWF0aGpheF9jb25maWciKSxyLnBsb3Q9bi5wbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLnNldFBsb3RDb25maWc9dCgiLi9wbG90X2FwaS9zZXRfcGxvdF9jb25maWciKSxyLnJlZ2lzdGVyPXQoIi4vcGxvdF9hcGkvcmVnaXN0ZXIiKSxyLnRvSW1hZ2U9dCgiLi9wbG90X2FwaS90b19pbWFnZSIpLHIuZG93bmxvYWRJbWFnZT10KCIuL3NuYXBzaG90L2Rvd25sb2FkIiksci52YWxpZGF0ZT10KCIuL3Bsb3RfYXBpL3ZhbGlkYXRlIiksci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnJlZ2lzdGVyKHQoIi4vdHJhY2VzL3NjYXR0ZXIiKSksci5yZWdpc3RlcihbdCgiLi9jb21wb25lbnRzL2Z4IiksdCgiLi9jb21wb25lbnRzL2xlZ2VuZCIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIiksdCgiLi9jb21wb25lbnRzL3NoYXBlcyIpLHQoIi4vY29tcG9uZW50cy9pbWFnZXMiKSx0KCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiKSx0KCIuL2NvbXBvbmVudHMvc2xpZGVycyIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIildKSxyLkljb25zPXQoIi4uL2J1aWxkL3Bsb3RpY29uIiksci5QbG90cz1uLlBsb3RzLHIuRng9dCgiLi9jb21wb25lbnRzL2Z4Iiksci5TbmFwc2hvdD10KCIuL3NuYXBzaG90Iiksci5QbG90U2NoZW1hPXQoIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxyLlF1ZXVlPXQoIi4vbGliL3F1ZXVlIiksci5kMz10KCJkMyIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4uL2J1aWxkL3Bsb3RpY29uIjoyLCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiOjYwMiwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiOjYwNywiLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4vY29tcG9uZW50cy9pbWFnZXMiOjY2MCwiLi9jb21wb25lbnRzL2xlZ2VuZCI6NjY5LCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciI6NjgxLCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiOjY4NywiLi9jb21wb25lbnRzL3NoYXBlcyI6Njk0LCIuL2NvbXBvbmVudHMvc2xpZGVycyI6NzAwLCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiOjcwNiwiLi9mb250cy9tYXRoamF4X2NvbmZpZyI6NzE4LCIuL2xpYi9xdWV1ZSI6NzQ4LCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3NjgsIi4vcGxvdF9hcGkvcmVnaXN0ZXIiOjc2OSwiLi9wbG90X2FwaS9zZXRfcGxvdF9jb25maWciOjc3MCwiLi9wbG90X2FwaS90b19pbWFnZSI6NzcyLCIuL3Bsb3RfYXBpL3ZhbGlkYXRlIjo3NzMsIi4vcGxvdGx5Ijo3NzQsIi4vc25hcHNob3QiOjg1OCwiLi9zbmFwc2hvdC9kb3dubG9hZCI6ODU1LCIuL3RyYWNlcy9zY2F0dGVyIjoxMDU2LGQzOjEyMSwiZXM2LXByb21pc2UiOjEyOH1dLDcxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXg/KHIuTWF0aEpheD0hMCxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsc2tpcFN0YXJ0dXBUeXBlc2V0OiEwLGRpc3BsYXlBbGlnbjoibGVmdCIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfX0pLE1hdGhKYXguSHViLkNvbmZpZ3VyZWQoKSk6ci5NYXRoSmF4PSExfSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQucmVwbGFjZSgvXlsnIiUsJCNccyddK3xbLCBdfFsnIiUsJCNccyddKyQvZywiIikpLG4odCk/TnVtYmVyKHQpOml9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2dldF9zY2FsZSIpLHM9KE9iamVjdC5rZXlzKHQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSksdCgiLi9uZXN0ZWRfcHJvcGVydHkiKSksbD10KCIuL3JlZ2V4IikuY291bnRlcjtyLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSxuLnZhbHVlcy5pbmRleE9mKHQpPT09LTE/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZigiLyI9PT1pLmNoYXJBdCgwKSYmIi8iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoaS5zdWJzdHIoMSxpLmxlbmd0aC0yKSkudGVzdCh0KSlyZXR1cm4hMH1lbHNlIGlmKHQ9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe3Q9PT0hMHx8dD09PSExP2Uuc2V0KHQpOmUuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXshbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpe3QlMXx8IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9Im51bWJlciI9PXR5cGVvZiB0O24uc3RyaWN0IT09ITAmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JzY2FsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2Uuc2V0KG8odCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpPyhNYXRoLmFicyh0KT4xODAmJih0LT0zNjAqTWF0aC5yb3VuZCh0LzM2MCkpLGUuc2V0KCt0KSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJmwocikudGVzdCh0KSlyZXR1cm4gdm9pZCBlLnNldCh0KTtlLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdDtyZXR1cm4gdD09PXJ8fCJzdHJpbmciPT10eXBlb2YgdCYmISFsKHIpLnRlc3QodCl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB2b2lkIGUuc2V0KHIpO2lmKChuLmV4dHJhc3x8W10pLmluZGV4T2YodCkhPT0tMSlyZXR1cm4gdm9pZCBlLnNldCh0KTtmb3IodmFyIGk9dC5zcGxpdCgiKyIpLGE9MDthPGkubGVuZ3RoOyl7dmFyIG89aVthXTtuLmZsYWdzLmluZGV4T2Yobyk9PT0tMXx8aS5pbmRleE9mKG8pPGE/aS5zcGxpY2UoYSwxKTphKyt9aS5sZW5ndGg/ZS5zZXQoaS5qb2luKCIrIikpOmUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB2b2lkIGUuc2V0KG4pO3ZhciBhPWkuaXRlbXMsbz1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbXTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylyLmNvZXJjZSh0LG8sYSwiWyIrcysiXSIsbltzXSk7ZS5zZXQobyl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbj1lLml0ZW1zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCFyLnZhbGlkYXRlKHRbaV0sZS5pdGVtc1tpXSkpcmV0dXJuITF9cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKG4saSkuZ2V0KCksbD1zKHQsaSksYz1zKGUsaSksdT1sLmdldCgpO3JldHVybiB2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmQXJyYXkuaXNBcnJheSh1KT8oYy5zZXQodSksdSk6KHIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKHUsYyxhLG8pLGMuZ2V0KCkpfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKHQsaSksbD1yLmNvZXJjZSh0LGUsbixpLGEpLGM9by5nZXQoKTtyZXR1cm4gdm9pZCAwIT09YyYmbnVsbCE9PWMmJmx9LHIuY29lcmNlRm9udD1mdW5jdGlvbih0LGUscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9dChlKyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPXQoZSsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj10KGUrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz97aG92ZXJpbmZvOm8uaG92ZXJpbmZvfTphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTtjLnNwbGljZShjLmluZGV4T2YoIm5hbWUiKSwxKSxpPWMuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci52YWxpZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9nZXRfc2NhbGUiOjYyMywiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NjI5LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NzcsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3NDIsIi4vcmVnZXgiOjc0OSwiZmFzdC1pc251bWVyaWMiOjEzMSx0aW55Y29sb3IyOjU0Mn1dLDcyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZNLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1mdW5jdGlvbiBhKHQsZSxyLG4sYSl7aWYoKGV8fHJ8fG58fGEpJiYodCs9IiAiK2koZSwyKSsiOiIraShyLDIpLChufHxhKSYmKHQrPSI6IitpKG4sMiksYSkpKXtmb3IodmFyIG89NDthJTEwPT0wOylvLT0xLGEvPTEwO3QrPSIuIitpKGEsbyl9cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LGUscil7dD10LnJlcGxhY2UoSSxmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihuKHIpKXRyeXt0PU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxyKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIFQodCkoaSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW0odCsuMDUseSksbj1pKE1hdGguZmxvb3Ioci9iKSwyKSsiOiIraShtKE1hdGguZmxvb3Ioci94KSw2MCksMik7aWYoIk0iIT09ZSl7ZChlKXx8KGU9MCk7dmFyIGE9TWF0aC5taW4obSh0L18sNjApLERbZV0pLG89KDEwMCthKS50b0ZpeGVkKGUpLnN1YnN0cigxKTtlPjAmJihvPW8ucmVwbGFjZSgvMCskLywiIikucmVwbGFjZSgvW1wuXSQvLCIiKSksbis9IjoiK299cmV0dXJuIG59ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5mb3JtYXREYXRlKCJ5eXl5Iil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5mb3JtYXREYXRlKCJNIHl5eXkiKX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmZvcm1hdERhdGUoIk0gZCIpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQuZm9ybWF0RGF0ZSgiTSBkLCB5eXl5Iil9dmFyIGg9dCgiZDMiKSxkPXQoImZhc3QtaXNudW1lcmljIikscD10KCIuL2xvZ2dlcnMiKS5lcnJvcixtPXQoIi4vbW9kIiksdj10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZz12LkJBRE5VTSx5PXYuT05FREFZLGI9di5PTkVIT1VSLHg9di5PTkVNSU4sXz12Lk9ORVNFQyx3PXYuRVBPQ0hKRCxNPXQoIi4uL3JlZ2lzdHJ5IiksVD1oLnRpbWUuZm9ybWF0LnV0YyxrPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtyLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQpP2U/TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9TVU5EQVkiKVt0XTpNLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1RJQ0siKVt0XTplPyIyMDAwLTAxLTAyIjoiMjAwMC0wMS0wMSJ9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP00uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX07dmFyIEEsRTtyLmRhdGVUaW1lMm1zPWZ1bmN0aW9uKHQsZSl7aWYoci5pc0pTRGF0ZSh0KSlyZXR1cm4gdD1OdW1iZXIodCktdC5nZXRUaW1lem9uZU9mZnNldCgpKngsdD49QSYmdDw9RT90Omc7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIGc7dD1TdHJpbmcodCk7dmFyIGk9bihlKSxhPXQuY2hhckF0KDApOyFpfHwiRyIhPT1hJiYiZyIhPT1hfHwodD10LnN1YnN0cigxKSxlPSIiKTt2YXIgbz1pJiYiY2hpbmVzZSI9PT1lLnN1YnN0cigwLDcpLHM9dC5tYXRjaChvPy9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkOj9cZFxkKT8pPyk/KT8pP1xzKiQvbTovXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGQpKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/XHMqJC9tKTtpZighcylyZXR1cm4gZzt2YXIgbD1zWzFdLGM9c1szXXx8IjEiLHU9TnVtYmVyKHNbNV18fDEpLGY9TnVtYmVyKHNbN118fDApLGg9TnVtYmVyKHNbOV18fDApLGQ9TnVtYmVyKHNbMTFdfHwwKTtpZihpKXtpZigyPT09bC5sZW5ndGgpcmV0dXJuIGc7bD1OdW1iZXIobCk7dmFyIHA7dHJ5e3ZhciBtPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZihvKXt2YXIgdj0iaSI9PT1jLmNoYXJBdChjLmxlbmd0aC0xKTtjPXBhcnNlSW50KGMsMTApLHA9bS5uZXdEYXRlKGwsbS50b01vbnRoSW5kZXgobCxjLHYpLHUpfWVsc2UgcD1tLm5ld0RhdGUobCxOdW1iZXIoYyksdSl9Y2F0Y2godCl7cmV0dXJuIGd9cmV0dXJuIHA/KHAudG9KRCgpLXcpKnkrZipiK2gqeCtkKl86Z31sPTI9PT1sLmxlbmd0aD8oTnVtYmVyKGwpKzJlMy1rKSUxMDArazpOdW1iZXIobCksYy09MTt2YXIgVD1uZXcgRGF0ZShEYXRlLlVUQygyZTMsYyx1LGYsaCkpO3JldHVybiBULnNldFVUQ0Z1bGxZZWFyKGwpLFQuZ2V0VVRDTW9udGgoKSE9PWM/ZzpULmdldFVUQ0RhdGUoKSE9PXU/ZzpULmdldFRpbWUoKStkKl99LEE9ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxFPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT1nfTt2YXIgUz05MCp5LEw9MypiLEM9NSp4O3IubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1BJiZ0PD1FKSlyZXR1cm4gZztlfHwoZT0wKTt2YXIgaSxvLHMsbCxjLHUsZj1NYXRoLmZsb29yKDEwKm0odCsuMDUsMSkpLGg9TWF0aC5yb3VuZCh0LWYvMTApO2lmKG4ocikpe3ZhciBkPU1hdGguZmxvb3IoaC95KSt3LHA9TWF0aC5mbG9vcihtKHQseSkpO3RyeXtpPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoZCkuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2k9VCgiRyVZLSVtLSVkIikobmV3IERhdGUoaCkpfWlmKCItIj09PWkuY2hhckF0KDApKWZvcig7aS5sZW5ndGg8MTE7KWk9Ii0wIitpLnN1YnN0cigxKTtlbHNlIGZvcig7aS5sZW5ndGg8MTA7KWk9IjAiK2k7bz1lPFM/TWF0aC5mbG9vcihwL2IpOjAscz1lPFM/TWF0aC5mbG9vcihwJWIveCk6MCxsPWU8TD9NYXRoLmZsb29yKHAleC9fKTowLGM9ZTxDP3AlXyoxMCtmOjB9ZWxzZSB1PW5ldyBEYXRlKGgpLGk9VCgiJVktJW0tJWQiKSh1KSxvPWU8Uz91LmdldFVUQ0hvdXJzKCk6MCxzPWU8Uz91LmdldFVUQ01pbnV0ZXMoKTowLGw9ZTxMP3UuZ2V0VVRDU2Vjb25kcygpOjAsYz1lPEM/MTAqdS5nZXRVVENNaWxsaXNlY29uZHMoKStmOjA7cmV0dXJuIGEoaSxvLHMsbCxjKX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49QSt5JiZ0PD1FLXkpKXJldHVybiBnO3ZhciBlPU1hdGguZmxvb3IoMTAqbSh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBhKGgudGltZS5mb3JtYXQoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxpKXtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQpe2lmKG4oaSkpcmV0dXJuIHAoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsaSkpcmV0dXJuIHAoInVucmVjb2duaXplZCBkYXRlIix0KSxlO3JldHVybiB0fTt2YXIgST0vJVxkP2YvZyxEPVs1OSw1OS45LDU5Ljk5LDU5Ljk5OSw1OS45OTk5XSxQPVQoIiVZIiksej1UKCIlYiAlWSIpLE89VCgiJWIgJS1kIiksUj1UKCIlYiAlLWQsICVZIik7ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLGg7aWYoaT1uKGkpJiZpLGUpcmV0dXJuIG8oZSx0LGkpO2lmKGkpdHJ5e3ZhciBkPU1hdGguZmxvb3IoKHQrLjA1KS95KSt3LHA9TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGkpLmZyb21KRChkKTsieSI9PT1yP2g9bChwKToibSI9PT1yP2g9YyhwKToiZCI9PT1yPyhhPWwocCksaD11KHApKTooYT1mKHApLGg9cyh0LHIpKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9ZWxzZXt2YXIgbT1uZXcgRGF0ZShNYXRoLmZsb29yKHQrLjA1KSk7InkiPT09cj9oPVAobSk6Im0iPT09cj9oPXoobSk6ImQiPT09cj8oYT1QKG0pLGg9TyhtKSk6KGE9UihtKSxoPXModCxyKSl9cmV0dXJuIGgrKGE/IlxuIithOiIiKX07dmFyIEY9Myp5O3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9bihyKSYmcjt2YXIgaT1tKHQseSk7aWYodD1NYXRoLnJvdW5kKHQtaSkscil0cnl7dmFyIGE9TWF0aC5yb3VuZCh0L3kpK3csbz1NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikscz1vLmZyb21KRChhKTtyZXR1cm4gZSUxMj9vLmFkZChzLGUsIm0iKTpvLmFkZChzLGUvMTIsInkiKSwocy50b0pEKCktdykqeStpfWNhdGNoKGUpe3AoImludmFsaWQgbXMgIit0KyIgaW4gY2FsZW5kYXIgIityKX12YXIgbD1uZXcgRGF0ZSh0K0YpO3JldHVybiBsLnNldFVUQ01vbnRoKGwuZ2V0VVRDTW9udGgoKStlKStpLUZ9LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaSxhPTAsbz0wLHM9MCxsPTAsYz1uKGUpJiZNLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSksdT0wO3U8dC5sZW5ndGg7dSsrKWlmKGk9dFt1XSxkKGkpKXtpZighKGkleSkpaWYoYyl0cnl7cj1jLmZyb21KRChpL3krdyksMT09PXIuZGF5KCk/MT09PXIubW9udGgoKT9hKys6bysrOnMrK31jYXRjaCh0KXt9ZWxzZSByPW5ldyBEYXRlKGkpLDE9PT1yLmdldFVUQ0RhdGUoKT8wPT09ci5nZXRVVENNb250aCgpP2ErKzpvKys6cysrfWVsc2UgbCsrO28rPWEscys9bzt2YXIgZj10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmEvZixleGFjdE1vbnRoczpvL2YsZXhhY3REYXlzOnMvZn19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vcmVnaXN0cnkiOjg1MywiLi9sb2dnZXJzIjo3MzksIi4vbW9kIjo3NDEsZDM6MTIxLCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fX0se31dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG89YS5fZXZlbnRzW2VdO2lmKCFvKXJldHVybiBuOyJmdW5jdGlvbiI9PXR5cGVvZiBvJiYobz1bb10pO2Zvcih2YXIgcz1vLnBvcCgpLGw9MDtsPG8ubGVuZ3RoO2wrKylvW2xdKHIpO3JldHVybiBpPXMociksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjEyOX1dLDcyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH1mdW5jdGlvbiBpKHQsZSxyLHMpe3ZhciBsLGMsdSxmLGgsZCxwPXRbMF0sbT10Lmxlbmd0aDtpZigyPT09bSYmbyhwKSYmbyh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihuKHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciB2PTE7djxtO3YrKyl7bD10W3ZdO2ZvcihjIGluIGwpdT1wW2NdLGY9bFtjXSxzJiZvKGYpP3BbY109ZjplJiZmJiYoYShmKXx8KGg9byhmKSkpPyhoPyhoPSExLGQ9dSYmbyh1KT91OltdKTpkPXUmJmEodSk/dTp7fSxwW2NdPWkoW2QsZl0sZSxyLHMpKToodm9pZCAwIT09Znx8cikmJihwW2NdPWYpfXJldHVybiBwfXZhciBhPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksbz1BcnJheS5pc0FycmF5O3IuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjczN31dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNzI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24udmlzaWJsZT09PSEwJiZlLnB1c2gobil9cmV0dXJuIGV9fSx7fV0sNzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4oMCxsW3RdKShlKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKXt2YXIgcj1zW2VdO2lmKG5ldyBSZWdFeHAoYVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgY291bnRyeSBuYW1lOiAiK3QrIi4iKSwhMX12YXIgYT10KCJjb3VudHJ5LXJlZ2V4Iiksbz10KCIuLi9saWIiKSxzPU9iamVjdC5rZXlzKGEpLGw9eyJJU08tMyI6by5pZGVudGl0eSwiVVNBLXN0YXRlcyI6by5pZGVudGl0eSwiY291bnRyeSBuYW1lcyI6aX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgaT1uKHQsZSk7aWYoaSl7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYocy5pZD09PWkpcmV0dXJuIHN9by53YXJuKFsiTG9jYXRpb24gd2l0aCBpZCIsaSwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9fSx7Ii4uL2xpYiI6NzM1LCJjb3VudHJ5LXJlZ2V4IjoxMDZ9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPWUuY29ubmVjdGdhcHMsaT1bXSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXMubG9ubGF0O2xbMF0hPT1uP2EucHVzaChsKTohciYmYS5sZW5ndGg+MCYmKGkucHVzaChhKSxhPVtdKX1yZXR1cm4gYS5sZW5ndGg+MCYmaS5wdXNoKGEpLGl9LHIubWFrZUxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fTtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bdFtyXV07cmV0dXJue3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNH1dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGY9bi1lLGg9YS1lLGQ9cy1hLHA9bCpkLXUqZjtpZigwPT09cClyZXR1cm4gbnVsbDt2YXIgbT0oYypkLXUqaCkvcCx2PShjKmYtbCpoKS9wO3JldHVybiB2PDB8fHY+MXx8bTwwfHxtPjE/bnVsbDp7eDp0K2wqbSx5OmUrZiptfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9dmFyIGE9dCgiLi9tb2QiKTtyLnNlZ21lbnRzSW50ZXJzZWN0PW4sci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsYSxvLHMsbCxjKXtpZihuKHQsZSxyLGEsbyxzLGwsYykpcmV0dXJuIDA7dmFyIHU9ci10LGY9YS1lLGg9bC1vLGQ9Yy1zLHA9dSp1K2YqZixtPWgqaCtkKmQsdj1NYXRoLm1pbihpKHUsZixwLG8tdCxzLWUpLGkodSxmLHAsbC10LGMtZSksaShoLGQsbSx0LW8sZS1zKSxpKGgsZCxtLHItbyxhLXMpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfTt2YXIgbyxzLGw7ci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYodD09PXMmJm49PT1sfHwobz17fSxzPXQsbD1uKSxvW3JdKXJldHVybiBvW3JdO3ZhciBpPXQuZ2V0UG9pbnRBdExlbmd0aChhKHItbi8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChhKHIrbi8yLGUpKSx1PU1hdGguYXRhbigoYy55LWkueSkvKGMueC1pLngpKSxmPXQuZ2V0UG9pbnRBdExlbmd0aChhKHIsZSkpLGg9KDQqZi54K2kueCtjLngpLzYsZD0oNCpmLnkraS55K2MueSkvNixwPXt4OmgseTpkLHRoZXRhOnV9O3JldHVybiBvW3JdPXAscH0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtzPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP2k9cjplPT09ZiYmKGE9cik7dmFyIG49ci54PG8/by1yLng6ci54PnM/ci54LXM6MCx1PXIueTxsP2wtci55OnIueT5jP3IueS1jOjA7cmV0dXJuIE1hdGguc3FydChuKm4rdSp1KX1mb3IodmFyIGksYSxvPWUubGVmdCxzPWUucmlnaHQsbD1lLnRvcCxjPWUuYm90dG9tLHU9MCxmPXQuZ2V0VG90YWxMZW5ndGgoKSxoPWYsZD1uKHUpO2Q7KXtpZigodSs9ZCtyKT5oKXJldHVybjtkPW4odSl9Zm9yKGQ9bihoKTtkOyl7aWYoaC09ZCtyLHU+aClyZXR1cm47ZD1uKGgpfXJldHVybnttaW46dSxtYXg6aCxsZW46aC11LHRvdGFsOmYsaXNDbG9zZWQ6MD09PXUmJmg9PT1mJiZNYXRoLmFicyhpLngtYS54KTwuMSYmTWF0aC5hYnMoaS55LWEueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPW58fHt9O2Zvcih2YXIgaSxhLG8scz1uLnBhdGhMZW5ndGh8fHQuZ2V0VG90YWxMZW5ndGgoKSxsPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT10LmdldFBvaW50QXRMZW5ndGgoMClbcl0+dC5nZXRQb2ludEF0TGVuZ3RoKHMpW3JdPy0xOjEsZj0wLGg9MCxkPXM7ZjxjOyl7aWYoaT0oaCtkKS8yLGE9dC5nZXRQb2ludEF0TGVuZ3RoKGkpLG89YVtyXS1lLE1hdGguYWJzKG8pPGwpcmV0dXJuIGE7dSpvPjA/ZD1pOmg9aSxmKyt9cmV0dXJuIGF9fSx7Ii4vbW9kIjo3NDF9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09PXR8fHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0se31dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGkodCl7aWYocyh0KSlyZXR1cm4gZjt2YXIgZT1sKHQpO3JldHVybiBlLmxlbmd0aD9lOmZ9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gcyh0KT90Omh9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG8scyx1LGQscCxtPXQuY29sb3Isdj1BcnJheS5pc0FycmF5KG0pLGc9QXJyYXkuaXNBcnJheShlKSx5PVtdO2lmKG89dm9pZCAwIT09dC5jb2xvcnNjYWxlP2MubWFrZUNvbG9yU2NhbGVGdW5jKGMuZXh0cmFjdFNjYWxlKHQuY29sb3JzY2FsZSx0LmNtaW4sdC5jbWF4KSk6aSxzPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9mOmwobyh0W2VdKSl9OmksdT1nP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/aDphKHRbZV0pfTphLHZ8fGcpZm9yKHZhciBiPTA7YjxyO2IrKylkPXMobSxiKSxwPXUoZSxiKSx5W2JdPW4oZCxwKTtlbHNlIHk9bihsKG0pLGUpO3JldHVybiB5fXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCJjb2xvci1yZ2JhIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGY9bCh1KSxoPTE7ZS5leHBvcnRzPW99LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI1LCJjb2xvci1yZ2JhIjo5NCwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDczMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVyblt0XX12YXIgaT10KCIuL2lkZW50aXR5Iik7ZS5leHBvcnRzPXtrZXlGdW46ZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSxyZXBlYXQ6bixkZXNjZW5kOmksd3JhcDpuLHVud3JhcDpmdW5jdGlvbih0KXtyZXR1cm4gdFswXX19fSx7Ii4vaWRlbnRpdHkiOjczNH1dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wOyhlPXQuaW5kZXhPZigiPHN1cD4iLGUpKT49MDspe3ZhciByPXQuaW5kZXhPZigiPC9zdXA+IixlKTtpZihyPGUpYnJlYWs7dD10LnNsaWNlKDAsZSkrbCh0LnNsaWNlKGUrNSxyKSkrdC5zbGljZShyKzYpfXJldHVybiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQucmVwbGFjZSgvXDxiclw+L2csIlxuIil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cPC4qXD4vZywiIil9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9Yy5lbnRpdHlUb1VuaWNvZGUscj0wOyhyPXQuaW5kZXhPZigiJiIscikpPj0wOyl7dmFyIG49dC5pbmRleE9mKCI7IixyKTtpZihuPHIpcis9MTtlbHNle3ZhciBpPWVbdC5zbGljZShyKzEsbildO3Q9aT90LnNsaWNlKDAscikraSt0LnNsaWNlKG4rMSk6dC5zbGljZSgwLHIpK3Quc2xpY2UobisxKX19cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iIitvKGEobihpKHQpKSkpfXZhciBsPXQoInN1cGVyc2NyaXB0LXRleHQiKSxjPXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKTtlLmV4cG9ydHM9c30seyIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo3MTUsInN1cGVyc2NyaXB0LXRleHQiOjUzOX1dLDczNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx7fV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGwua2V5ZWRDb250YWluZXI9dCgiLi9rZXllZF9jb250YWluZXIiKSxsLnJlbGF0aXZlQXR0cj10KCIuL3JlbGF0aXZlX2F0dHIiKSxsLmlzUGxhaW5PYmplY3Q9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxsLmlzQXJyYXk9dCgiLi9pc19hcnJheSIpLGwubW9kPXQoIi4vbW9kIiksbC50b0xvZ1JhbmdlPXQoIi4vdG9fbG9nX3JhbmdlIiksbC5yZWxpbmtQcml2YXRlS2V5cz10KCIuL3JlbGlua19wcml2YXRlIiksbC5lbnN1cmVBcnJheT10KCIuL2Vuc3VyZV9hcnJheSIpO3ZhciBjPXQoIi4vY29lcmNlIik7bC52YWxPYmplY3RNZXRhPWMudmFsT2JqZWN0TWV0YSxsLmNvZXJjZT1jLmNvZXJjZSxsLmNvZXJjZTI9Yy5jb2VyY2UyLGwuY29lcmNlRm9udD1jLmNvZXJjZUZvbnQsbC5jb2VyY2VIb3ZlcmluZm89Yy5jb2VyY2VIb3ZlcmluZm8sbC52YWxpZGF0ZT1jLnZhbGlkYXRlO3ZhciB1PXQoIi4vZGF0ZXMiKTtsLmRhdGVUaW1lMm1zPXUuZGF0ZVRpbWUybXMsbC5pc0RhdGVUaW1lPXUuaXNEYXRlVGltZSxsLm1zMkRhdGVUaW1lPXUubXMyRGF0ZVRpbWUsbC5tczJEYXRlVGltZUxvY2FsPXUubXMyRGF0ZVRpbWVMb2NhbCwKbC5jbGVhbkRhdGU9dS5jbGVhbkRhdGUsbC5pc0pTRGF0ZT11LmlzSlNEYXRlLGwuZm9ybWF0RGF0ZT11LmZvcm1hdERhdGUsbC5pbmNyZW1lbnRNb250aD11LmluY3JlbWVudE1vbnRoLGwuZGF0ZVRpY2swPXUuZGF0ZVRpY2swLGwuZGZsdFJhbmdlPXUuZGZsdFJhbmdlLGwuZmluZEV4YWN0RGF0ZXM9dS5maW5kRXhhY3REYXRlcyxsLk1JTl9NUz11Lk1JTl9NUyxsLk1BWF9NUz11Lk1BWF9NUzt2YXIgZj10KCIuL3NlYXJjaCIpO2wuZmluZEJpbj1mLmZpbmRCaW4sbC5zb3J0ZXJBc2M9Zi5zb3J0ZXJBc2MsbC5zb3J0ZXJEZXM9Zi5zb3J0ZXJEZXMsbC5kaXN0aW5jdFZhbHM9Zi5kaXN0aW5jdFZhbHMsbC5yb3VuZFVwPWYucm91bmRVcDt2YXIgaD10KCIuL3N0YXRzIik7bC5hZ2dOdW1zPWguYWdnTnVtcyxsLmxlbj1oLmxlbixsLm1lYW49aC5tZWFuLGwudmFyaWFuY2U9aC52YXJpYW5jZSxsLnN0ZGV2PWguc3RkZXYsbC5pbnRlcnA9aC5pbnRlcnA7dmFyIGQ9dCgiLi9tYXRyaXgiKTtsLmluaXQyZEFycmF5PWQuaW5pdDJkQXJyYXksbC50cmFuc3Bvc2VSYWdnZWQ9ZC50cmFuc3Bvc2VSYWdnZWQsbC5kb3Q9ZC5kb3QsbC50cmFuc2xhdGlvbk1hdHJpeD1kLnRyYW5zbGF0aW9uTWF0cml4LGwucm90YXRpb25NYXRyaXg9ZC5yb3RhdGlvbk1hdHJpeCxsLnJvdGF0aW9uWFlNYXRyaXg9ZC5yb3RhdGlvblhZTWF0cml4LGwuYXBwbHkyRFRyYW5zZm9ybT1kLmFwcGx5MkRUcmFuc2Zvcm0sbC5hcHBseTJEVHJhbnNmb3JtMj1kLmFwcGx5MkRUcmFuc2Zvcm0yO3ZhciBwPXQoIi4vZ2VvbWV0cnkyZCIpO2wuc2VnbWVudHNJbnRlcnNlY3Q9cC5zZWdtZW50c0ludGVyc2VjdCxsLnNlZ21lbnREaXN0YW5jZT1wLnNlZ21lbnREaXN0YW5jZSxsLmdldFRleHRMb2NhdGlvbj1wLmdldFRleHRMb2NhdGlvbixsLmNsZWFyTG9jYXRpb25DYWNoZT1wLmNsZWFyTG9jYXRpb25DYWNoZSxsLmdldFZpc2libGVTZWdtZW50PXAuZ2V0VmlzaWJsZVNlZ21lbnQsbC5maW5kUG9pbnRPblBhdGg9cC5maW5kUG9pbnRPblBhdGg7dmFyIG09dCgiLi9leHRlbmQiKTtsLmV4dGVuZEZsYXQ9bS5leHRlbmRGbGF0LGwuZXh0ZW5kRGVlcD1tLmV4dGVuZERlZXAsbC5leHRlbmREZWVwQWxsPW0uZXh0ZW5kRGVlcEFsbCxsLmV4dGVuZERlZXBOb0FycmF5cz1tLmV4dGVuZERlZXBOb0FycmF5czt2YXIgdj10KCIuL2xvZ2dlcnMiKTtsLmxvZz12LmxvZyxsLndhcm49di53YXJuLGwuZXJyb3I9di5lcnJvcjt2YXIgZz10KCIuL3JlZ2V4Iik7bC5jb3VudGVyUmVnZXg9Zy5jb3VudGVyO3ZhciB5PXQoIi4vdGhyb3R0bGUiKTtsLnRocm90dGxlPXkudGhyb3R0bGUsbC50aHJvdHRsZURvbmU9eS5kb25lLGwuY2xlYXJUaHJvdHRsZT15LmNsZWFyLGwuZ2V0R3JhcGhEaXY9dCgiLi9nZXRfZ3JhcGhfZGl2IiksbC5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksbC5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksbC5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxsLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGwuY2xlYW5OdW1iZXI9dCgiLi9jbGVhbl9udW1iZXIiKSxsLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT8odD1OdW1iZXIodCksdDwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6cyk6c30sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnBhdXNlRXZlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uJiZ0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKSx0LmNhbmNlbEJ1YmJsZT0hMCwhMX0sbC5yYWlzZVRvVG9wPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KX0sbC5jYW5jZWxUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKX0sbC5jb25zdHJhaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnI/TWF0aC5tYXgocixNYXRoLm1pbihlLHQpKTpNYXRoLm1heChlLE1hdGgubWluKHIsdCkpfSxsLmJCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXJ8fDAsdC5sZWZ0PD1lLnJpZ2h0K3ImJmUubGVmdDw9dC5yaWdodCtyJiZ0LnRvcDw9ZS5ib3R0b20rciYmZS50b3A8PXQuYm90dG9tK3J9LGwuc2ltcGxlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKylhW29dPWUodFtvXSxyLG4pO3JldHVybiBhfSxsLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbil7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVybiIwIjt2YXIgaSxhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihpPTI7cz09PTEvMDtpKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2kpKS9NYXRoLmxvZyhuKSppO3ZhciBjPXMtTWF0aC5mbG9vcihzKTtmb3IoaT0wO2k8TWF0aC5mbG9vcihzKTtpKyspbz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobiksbD1vK2w7YyYmKGE9TWF0aC5wb3cobixjKSxvPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphKS50b1N0cmluZyhuKSxsPW8rbCk7dmFyIHU9cGFyc2VJbnQobCxuKTtyZXR1cm4gZSYmZS5pbmRleE9mKGwpPi0xfHx1IT09MS8wJiZ1Pj1NYXRoLnBvdygyLHIpP3QoZSxyLG4pOmx9LGwuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT0ib3B0Iik7dmFyIHI9e307cmV0dXJuIHIub3B0aW9uTGlzdD1bXSxyLl9uZXdvcHRpb249ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfSxyWyJfIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKWk9cituKzEtZSxpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IodmFyIGksYTt0Lmxlbmd0aDspaWYoYT10LnNwbGljZSgwLDEpWzBdLChpPWEoZSkpJiZpLnRoZW4pcmV0dXJuIGkudGhlbihuKS50aGVuKHZvaWQgMCxsLnByb21pc2VFcnJvcik7cmV0dXJuIHImJnIoZSl9LGwuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3JldHVybiIvIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGwubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpLGE9ITEsbz0hMDtmb3Iobj0wO248ci5sZW5ndGg7bisrKWk9dFtyW25dXSx2b2lkIDAhPT1pJiZudWxsIT09aT9hPSEwOm89ITE7aWYoYSYmIW8pZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPTA7aTxuO2krKyllW2ldW3JdPXRbaV19LGwuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG49bnx8bC5pZGVudGl0eSxBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sbC5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8bC5pZGVudGl0eTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/bihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGlbZVswXV0pP2lbZVswXV1bZVsxXV06aVtlXSk6aX0sbC5leHRyYWN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHIgaW4gdClyZXR1cm4gdFtyXTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dm9pZCAwOml9LGwuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWwubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxsLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspaT1vW25dLGE9dFtpXSwiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGEmJigibW9kdWxlIj09PWk/cltpXT1hOkFycmF5LmlzQXJyYXkoYSk/cltpXT1hLnNsaWNlKDAsMyk6cltpXT1hJiYib2JqZWN0Ij09dHlwZW9mIGE/bC5taW5FeHRlbmQodFtpXSxlW2ldKTphKTtmb3Iobz1PYmplY3Qua2V5cyhlKSxuPTA7bjxvLmxlbmd0aDtuKyspaT1vW25dLCJvYmplY3QiPT10eXBlb2YoYT1lW2ldKSYmaSBpbiByJiYib2JqZWN0Ij09dHlwZW9mIHJbaV18fChyW2ldPWEpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQuaW5kZXhPZihlW3JdKSE9PS0xKXJldHVybiEwO3JldHVybiExfSxsLmlzUGxvdERpdj1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxsLnJlbW92ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9LGwuYWRkU3R5bGVSdWxlPWZ1bmN0aW9uKHQsZSl7aWYoIWwuc3R5bGVTaGVldCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKSxsLnN0eWxlU2hlZXQ9ci5zaGVldH12YXIgbj1sLnN0eWxlU2hlZXQ7bi5pbnNlcnRSdWxlP24uaW5zZXJ0UnVsZSh0KyJ7IitlKyJ9IiwwKTpuLmFkZFJ1bGU/bi5hZGRSdWxlKHQsZSwwKTpsLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX0sbC5pc0lFPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jbGFzc2VkfSxsLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O2wuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKC9eKFteXFtcLl0rKVwuKC4rKT8vKSk/KGk9dFtyXSxuPWVbMV0sZGVsZXRlIHRbcl0sdFtuXT1sLmV4dGVuZERlZXBOb0FycmF5cyh0W25dfHx7fSxsLm9iamVjdEZyb21QYXRoKHIsbC5leHBhbmRPYmplY3RQYXRocyhpKSlbbl0pKTooZT1yLm1hdGNoKC9eKFteXC5dKylcWyhbMC05XSspXF0oXC4pPyguKyk/LykpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGwuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sbC5vYmplY3RGcm9tUGF0aChzLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1sLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWwuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxsLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfTt2YXIgYj0vXlx3KiQvO2wudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKC8leyhbXlxzJXt9XSopfS9nLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGIudGVzdChuKT9lW25dfHwiIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8IiIpfSl9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi9jbGVhbl9udW1iZXIiOjcxOSwiLi9jb2VyY2UiOjcyMCwiLi9kYXRlcyI6NzIxLCIuL2Vuc3VyZV9hcnJheSI6NzIyLCIuL2V4dGVuZCI6NzI0LCIuL2ZpbHRlcl91bmlxdWUiOjcyNSwiLi9maWx0ZXJfdmlzaWJsZSI6NzI2LCIuL2dlb21ldHJ5MmQiOjcyOSwiLi9nZXRfZ3JhcGhfZGl2Ijo3MzAsIi4vaWRlbnRpdHkiOjczNCwiLi9pc19hcnJheSI6NzM2LCIuL2lzX3BsYWluX29iamVjdCI6NzM3LCIuL2tleWVkX2NvbnRhaW5lciI6NzM4LCIuL2xvZ2dlcnMiOjczOSwiLi9tYXRyaXgiOjc0MCwiLi9tb2QiOjc0MSwiLi9uZXN0ZWRfcHJvcGVydHkiOjc0MiwiLi9ub29wIjo3NDMsIi4vbm90aWZpZXIiOjc0NCwiLi9wdXNoX3VuaXF1ZSI6NzQ3LCIuL3JlZ2V4Ijo3NDksIi4vcmVsYXRpdmVfYXR0ciI6NzUwLCIuL3JlbGlua19wcml2YXRlIjo3NTEsIi4vc2VhcmNoIjo3NTIsIi4vc3RhdHMiOjc1NSwiLi90aHJvdHRsZSI6NzU4LCIuL3RvX2xvZ19yYW5nZSI6NzU5LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDczNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxuLmlzVmlldyh0KX19LHt9XSw3Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3I9cnx8Im5hbWUiLGE9YXx8InZhbHVlIjt2YXIgbyxzLGw9e307cz1lJiZlLmxlbmd0aD9uKHQsZSkuZ2V0KCk6dCxlPWV8fCIiLHM9c3x8W107dmFyIGM9e307Zm9yKG89MDtvPHMubGVuZ3RoO28rKyljW3Nbb11bcl1dPW87dmFyIHU9aS50ZXN0KGEpLGY9e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PT1lPzQ6MCxvPWNbdF07dm9pZCAwPT09bz8oaXw9MyxvPXMubGVuZ3RoLGNbdF09byk6ZSE9PSh1P3Nbb11bYV06bihzW29dLGEpLmdldCgpKSYmKGl8PTIpO3ZhciBoPXNbb109c1tvXXx8e307cmV0dXJuIGhbcl09dCx1P2hbYV09ZTpuKGgsYSkuc2V0KGUpLG51bGwhPT1lJiYoaSY9LTUpLGxbb109bFtvXXxpLGZ9LGdldDpmdW5jdGlvbih0KXt2YXIgZT1jW3RdO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDp1P3NbZV1bYV06bihzW2VdLGEpLmdldCgpfSxyZW5hbWU6ZnVuY3Rpb24odCxlKXt2YXIgbj1jW3RdO3JldHVybiB2b2lkIDA9PT1uP2Y6KGxbbl09MXxsW25dLGNbZV09bixkZWxldGUgY1t0XSxzW25dW3JdPWUsZil9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1jW3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuIGY7dmFyIGk9c1tlXTtpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MilyZXR1cm4gbFtlXT0yfGxbZV0sZi5zZXQodCxudWxsKTtpZih1KXtmb3Iobz1lO288cy5sZW5ndGg7bysrKWxbb109M3xsW29dO2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tzW29dW3JdXS0tO3Muc3BsaWNlKGUsMSksZGVsZXRlIGNbdF19ZWxzZSBuKGksYSkuc2V0KG51bGwpLGxbZV09NnxsW2VdO3JldHVybiBmfSxjb25zdHJ1Y3RVcGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsaSxvPXt9LGM9T2JqZWN0LmtleXMobCksZj0wO2Y8Yy5sZW5ndGg7ZisrKWk9Y1tmXSx0PWUrIlsiK2krIl0iLHNbaV0/KDEmbFtpXSYmKG9bdCsiLiIrcl09c1tpXVtyXSksMiZsW2ldJiYob1t0KyIuIithXT11PzQmbFtpXT9udWxsOnNbaV1bYV06NCZsW2ldP251bGw6bihzW2ldLGEpLmdldCgpKSk6b1t0XT1udWxsO3JldHVybiBvfX07cmV0dXJuIGZ9fSx7Ii4vbmVzdGVkX3Byb3BlcnR5Ijo3NDJ9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQuYXBwbHkpdC5hcHBseSh0LGUpO2Vsc2UgZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdChlW3JdKX12YXIgaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLGE9ZS5leHBvcnRzPXt9O2EubG9nPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bIkxPRzoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTtuKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0sYS53YXJuPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjApe2Zvcih2YXIgdD1bIldBUk46Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGEuZXJyb3I9ZnVuY3Rpb24oKXtpZihpLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiRVJST1I6Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLmVycm9yLHQpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjc2N31dLDc0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5MkRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzOzM9PT1lLmxlbmd0aCYmKGU9ZVswXSk7dmFyIG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdXTtyZXR1cm4gci5kb3QodCxbblswXSxuWzFdLDFdKS5zbGljZSgwLDIpfX0sci5hcHBseTJEVHJhbnNmb3JtMj1mdW5jdGlvbih0KXt2YXIgZT1yLmFwcGx5MkRUcmFuc2Zvcm0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQuc2xpY2UoMCwyKSkuY29uY2F0KGUodC5zbGljZSgyLDQpKSl9fX0se31dLDc0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn19LHt9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGksYSxvLHMsbD10O2ZvcihvPTA7bzxlLmxlbmd0aC0xO28rKyl7aWYoKHI9ZVtvXSk9PT0tMSl7Zm9yKGk9ITAsYT1bXSxzPTA7czxsLmxlbmd0aDtzKyspYVtzXT1uKGxbc10sZS5zbGljZShvKzEpKSgpLGFbc10hPT1hWzBdJiYoaT0hMSk7cmV0dXJuIGk/YVswXTphfWlmKCJudW1iZXIiPT10eXBlb2YgciYmIWQobCkpcmV0dXJuO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW3JdKXx8bnVsbD09PWwpcmV0dXJufWlmKCJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwmJm51bGwhPT0oYT1sW2Vbb11dKSlyZXR1cm4gYX19ZnVuY3Rpb24gaSh0LGUpe2lmKCF1KHQpfHxwKHQpJiYiXSI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKXx8ZS5tYXRjaChnKSYmdm9pZCAwIT09dClyZXR1cm4hMTtpZighZCh0KSlyZXR1cm4hMDtpZihlLm1hdGNoKHYpKXJldHVybiEwO3ZhciByPW0oZSk7cmV0dXJuIHImJiIiPT09ci5pbmRleH1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGEsdSxmPXQsaD0iIixwPVtbdCxoXV0sbT1pKG4scik7Zm9yKHU9MDt1PGUubGVuZ3RoLTE7dSsrKXtpZigibnVtYmVyIj09dHlwZW9mKGE9ZVt1XSkmJiFkKGYpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZihhPT09LTEpe2lmKG09IXMoZixlLnNsaWNlKHUrMSksbixyKSlicmVhaztyZXR1cm59aWYoIWwoZixhLGVbdSsxXSxtKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKGY9ZlthXSl8fG51bGw9PT1mKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtoPW8oaCxhKSxwLnB1c2goW2YsaF0pfW0/KHU9PT1lLmxlbmd0aC0xJiZkZWxldGUgZltlW3VdXSxjKHApKTpmW2VbdV1dPW59fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lO3JldHVybiBoKGUpP3I9IlsiK2UrIl0iOnQmJihyPSIuIitlKSx0K3J9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgbyxzPWQociksYz0hMCx1PXIsZj1uLnJlcGxhY2UoIi0xIiwwKSxoPSFzJiZpKHIsZikscD1lWzBdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspZj1uLnJlcGxhY2UoIi0xIixvKSxzJiYodT1yW28lci5sZW5ndGhdLGg9aSh1LGYpKSxoJiYoYz0hMSksbCh0LG8scCxoKSYmYSh0W29dLGUsbi5yZXBsYWNlKCItMSIsbykpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGwodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH1mdW5jdGlvbiBjKHQpe3ZhciBlLHIsbixhLHMsbDtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtpZihuPXRbZV1bMF0sYT10W2VdWzFdLGw9ITEsZChuKSlmb3Iocj1uLmxlbmd0aC0xO3I+PTA7ci0tKWkobltyXSxvKGEscikpP2w/bltyXT12b2lkIDA6bi5wb3AoKTpsPSEwO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bilmb3Iocz1PYmplY3Qua2V5cyhuKSxsPSExLHI9cy5sZW5ndGgtMTtyPj0wO3ItLSlpKG5bc1tyXV0sbyhhLHNbcl0pKT9kZWxldGUgbltzW3JdXTpsPSEwO2lmKGwpcmV0dXJufX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dHx8Im9iamVjdCI9PXR5cGVvZiB0JiYoZCh0KT8hdC5sZW5ndGg6IU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX12YXIgaD10KCJmYXN0LWlzbnVtZXJpYyIpLGQ9dCgiLi9pc19hcnJheSIpLHA9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxtPXQoIi4uL3Bsb3RfYXBpL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGgoZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGw9ZS5zcGxpdCgiLiIpO3M8bC5sZW5ndGg7KXtpZihyPVN0cmluZyhsW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pbFtzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7bC5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssbC5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mKHQsZSxsKTp7c2V0OmEodCxsLGUpLGdldDpuKHQsbCksYXN0cjplLHBhcnRzOmwsb2JqOnR9fTt2YXIgdj0vKF58XC4pKChkb21haW58cmFuZ2UpKFwuW3h5XSk/fGFyZ3N8cGFyYWxsZWxzKSQvLGc9LyhefFwuKWFyZ3NcWy99LHsiLi4vcGxvdF9hcGkvY29udGFpbmVyX2FycmF5X21hdGNoIjo3NjIsIi4vaXNfYXJyYXkiOjczNiwiLi9pc19wbGFpbl9vYmplY3QiOjczNywiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sNzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9W107ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goImVuZCIsZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpO2UhPT0tMSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfWlmKGEuaW5kZXhPZih0KT09PS0xKXthLnB1c2godCk7dmFyIG89MWUzO2koZSk/bz1lOiJsb25nIj09PWUmJihvPTNlMyk7dmFyIHM9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7cy5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCk7cy5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJidXR0b24iKS5jbGFzc2VkKCJub3RpZmllci1jbG9zZSIsITApLmh0bWwoIiZ0aW1lczsiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChyKX0pO2Zvcih2YXIgaT1lLmFwcGVuZCgicCIpLGE9dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxzPTA7czxhLmxlbmd0aDtzKyspcyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KGFbc10pO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShvKS5jYWxsKHIpfSl9fX0se2QzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NldGN1cnNvciIpLGk9ImRhdGEtc2F2ZWRjdXJzb3IiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cihpKTtpZihlKXtpZighcil7Zm9yKHZhciBhPSh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTswPT09cy5pbmRleE9mKCJjdXJzb3ItIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksIiEhIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLCIhISI9PT1yP24odCk6bih0LHIpKX19LHsiLi9zZXRjdXJzb3IiOjc1M31dLDc0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21hdHJpeCIpLmRvdCxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbMF0sbj10WzFdO3JldHVybiEocj09PWl8fHI8YXx8cj5vfHxuPT09aXx8bjxzfHxuPmwpJiYoIWV8fCF1KHQpKX1mdW5jdGlvbiByKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07aWYocj09PWl8fHI8YXx8cj5vfHxjPT09aXx8YzxzfHxjPmwpcmV0dXJuITE7dmFyIHUsZixoLGQscCxtPW4ubGVuZ3RoLHY9blswXVswXSxnPW5bMF1bMV0seT0wO2Zvcih1PTE7dTxtO3UrKylpZihmPXYsaD1nLHY9blt1XVswXSxnPW5bdV1bMV0sZD1NYXRoLm1pbihmLHYpLCEocjxkfHxyPk1hdGgubWF4KGYsdil8fGM+TWF0aC5tYXgoaCxnKSkpaWYoYzxNYXRoLm1pbihoLGcpKXIhPT1kJiZ5Kys7ZWxzZXtpZihwPXY9PT1mP2M6aCsoci1mKSooZy1oKS8odi1mKSxjPT09cClyZXR1cm4gMSE9PXV8fCFlO2M8PXAmJnIhPT1kJiZ5Kyt9cmV0dXJuIHklMj09MX12YXIgbj10LnNsaWNlKCksYT1uWzBdWzBdLG89YSxzPW5bMF1bMV0sbD1zO24ucHVzaChuWzBdKTtmb3IodmFyIGM9MTtjPG4ubGVuZ3RoO2MrKylhPU1hdGgubWluKGEsbltjXVswXSksbz1NYXRoLm1heChvLG5bY11bMF0pLHM9TWF0aC5taW4ocyxuW2NdWzFdKSxsPU1hdGgubWF4KGwsbltjXVsxXSk7dmFyIHUsZj0hMTtyZXR1cm4gNT09PW4ubGVuZ3RoJiYoblswXVswXT09PW5bMV1bMF0/blsyXVswXT09PW5bM11bMF0mJm5bMF1bMV09PT1uWzNdWzFdJiZuWzFdWzFdPT09blsyXVsxXSYmKGY9ITAsdT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PW5bMF1bMF19KTpuWzBdWzFdPT09blsxXVsxXSYmblsyXVsxXT09PW5bM11bMV0mJm5bMF1bMF09PT1uWzNdWzBdJiZuWzFdWzBdPT09blsyXVswXSYmKGY9ITAsdT1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXT09PW5bMF1bMV19KSkse3htaW46YSx4bWF4Om8seW1pbjpzLHltYXg6bCxwdHM6bixjb250YWluczpmP2U6cixpc1JlY3Q6Zn19O3ZhciBvPWEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfTthLmZpbHRlcj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dC5wdXNoKHIpO3ZhciBzPW4ubGVuZ3RoLGw9aTtuLnNwbGljZShhKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxvKHQsbCxjKzEsZSkpJiYobi5wdXNoKHRbY10pLG4ubGVuZ3RoPHMtMiYmKGk9YyxhPW4ubGVuZ3RoLTEpLGw9Yyl9dmFyIG49W3RbMF1dLGk9MCxhPTA7aWYodC5sZW5ndGg+MSl7cih0LnBvcCgpKX1yZXR1cm57YWRkUHQ6cixyYXc6dCxmaWx0ZXJlZDpufX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuL21hdHJpeCI6NzQwfV0sNzQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe3ZhciByLG49ZS50b1N0cmluZygpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXWluc3RhbmNlb2YgUmVnRXhwJiZ0W3JdLnRvU3RyaW5nKCk9PT1uKXJldHVybiB0O3QucHVzaChlKX1lbHNlIGUmJnQuaW5kZXhPZihlKT09PS0xJiZ0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHIsbj1bXSxhPTA7YTxlLmxlbmd0aDthKyspcj1lW2FdLG5bYV09cj09PXQ/cjoib2JqZWN0Ij09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9pLmV4dGVuZERlZXAoW10scik6aS5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIG59dmFyIGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLG89e307by5hZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzO2lmKHQudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5KXJldHVybiB2b2lkKHQudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKSk7IXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goaSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5hLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKX0sby5zdGFydFNlcXVlbmNlPWZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITAsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMH0sby5zdG9wU2VxdWVuY2U9ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSxvLnVuZG89ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gdm9pZCB0LmZyYW1ld29yay51bmRvKCk7aWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspby5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LG8ucmVkbz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiB2b2lkIHQuZnJhbWV3b3JrLnJlZG8oKTtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylvLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fSxvLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPW4odCxyKSxlLmFwcGx5KG51bGwscil9LGUuZXhwb3J0cz1vfSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzY3fV0sNzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuY291bnRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBSZWdFeHAoIl4iK3QrIihbMi05XXxbMS05XVswLTldKyk/IisoZXx8IiIpKyhyPyIiOiIkIikpfX0se31dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IoO2U7KXt2YXIgcj10Lm1hdGNoKC9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKC9eW15cLlxbXF1dKyQvKSl0aHJvdyBuZXcgRXJyb3IoImJhZCByZWxhdGl2ZUF0dHIgY2FsbDoiK1t0LGVdKTt0PSIifWlmKCJeIiE9PWUuY2hhckF0KDApKWJyZWFrO2U9ZS5zbGljZSgxKX1yZXR1cm4gdCYmIlsiIT09ZS5jaGFyQXQoMCk/dCsiLiIrZTp0K2V9fSx7fV0sNzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfYXJyYXkiKSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGE9T2JqZWN0LmtleXMocnx8e30pLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXJbc10sYz1lW3NdO2lmKCJfIj09PXMuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2YgbCl7aWYocyBpbiBlKWNvbnRpbnVlO2Vbc109bH1lbHNlIGlmKG4obCkmJm4oYykmJmkobFswXSkpZm9yKHZhciB1PTA7dTxsLmxlbmd0aDt1KyspaShsW3VdKSYmaShjW3VdKSYmdChjW3VdLGxbdV0pO2Vsc2UgaShsKSYmaShjKSYmKHQoYyxsKSxPYmplY3Qua2V5cyhjKS5sZW5ndGh8fGRlbGV0ZSBlW3NdKX19fSx7Ii4vaXNfYXJyYXkiOjczNiwiLi9pc19wbGFpbl9vYmplY3QiOjczN31dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0Pj1lfXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCIuL2xvZ2dlcnMiKTtyLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKHMoZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBjLHUsZj0wLGg9ZS5sZW5ndGgsZD0wLHA9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3IodT1wPj0wP3I/bjppOnI/bzphLHQrPTFlLTkqcCoocj8tMToxKSoocD49MD8xOi0xKTtmPGgmJmQrKzwxMDA7KWM9TWF0aC5mbG9vcigoZitoKS8yKSx1KGVbY10sdCk/Zj1jKzE6aD1jO3JldHVybiBkPjkwJiZsLmxvZygiTG9uZyBiaW5hcnkgc2VhcmNoLi4uIiksZi0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsaT1lW25dLWVbMF18fDEsYT1pLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10rYSYmKGk9TWF0aC5taW4oaSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KW49YygoaSthKS8yKSxlW25dPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfX0seyIuL2xvZ2dlcnMiOjczOSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiByLnRleHRDb250ZW50PSJXZWJnbCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHA6Ly9nZXQud2ViZ2wub3JnIGZvciBtb3JlIGluZm8iLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwOi8vZ2V0LndlYmdsLm9yZyIpfSwhMX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjExfV0sNzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBvLHM7aWYoYXx8KGE9aS5sZW5ndGgpLG4oZSl8fChlPSExKSxBcnJheS5pc0FycmF5KGlbMF0pKXtmb3Iocz1uZXcgQXJyYXkoYSksbz0wO288YTtvKyspc1tvXT1yLmFnZ051bXModCxlLGlbb10pO2k9c31mb3Iobz0wO288YTtvKyspbihlKT9uKGlbb10pJiYoZT10KCtlLCtpW29dKSk6ZT1pW29dO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3cibiBzaG91bGQgYmUgYSBmaW5pdGUgbnVtYmVyIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7ImZhc3QtaXNudW1lcmljIjoxMzF9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1pKHQpO3JldHVybiBlLmxlbmd0aD9lOlswLDAsMCwxXX12YXIgaT10KCJjb2xvci1yZ2JhIik7ZS5leHBvcnRzPW59LHsiY29sb3ItcmdiYSI6OTR9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UodiwiXFxsdCAiKS5yZXBsYWNlKGcsIlxcZ3QgIil9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49Im1hdGgtb3V0cHV0LSIraC5yYW5kc3RyKFtdLDY0KSxhPWYuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpufSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KGkodCkpO01hdGhKYXguSHViLlF1ZXVlKFsiVHlwZXNldCIsTWF0aEpheC5IdWIsYS5ub2RlKCldLGZ1bmN0aW9uKCl7dmFyIGU9Zi5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IWEuc2VsZWN0KCJzdmciKS5ub2RlKCkpaC5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLHQpLHIoKTtlbHNle3ZhciBuPWEuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksZSxuKX1hLnJlbW92ZSgpfSl9ZnVuY3Rpb24gbyh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQubWF0Y2goZSk7cmV0dXJuIHImJihyWzNdfHxyWzRdKX1mdW5jdGlvbiBzKHQsZSl7aWYoIXQpcmV0dXJuIiI7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dD10LnJlcGxhY2Uobi5yZWdFeHAsbi5zdWIpfXJldHVybiB0fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHModCxUKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcigpe3UrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5zdmcsInRzcGFuIik7Zi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OnUqbSsiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxhPWU7dmFyIHI9YztpZihjPVt7bm9kZTplfV0sci5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPHIubGVuZ3RoO2krKyluKHJbaV0pfWZ1bmN0aW9uIG4odCl7dmFyIGUscj10LnR5cGUsbj17fTtpZigiYSI9PT1yKXtlPSJhIjt2YXIgbz10LnRhcmdldCxzPXQuaHJlZixsPXQucG9wdXA7cyYmKG49eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PW98fCJfIiE9PW8uY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6bywieGxpbms6eGxpbms6aHJlZiI6c30sbCYmKG4ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJytsKyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihuLnN0eWxlPXQuc3R5bGUpO3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLnN2ZyxlKTtpZigic3VwIj09PXJ8fCJzdWIiPT09cil7aShhLF8pLGEuYXBwZW5kQ2hpbGQodSk7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuc3ZnLCJ0c3BhbiIpO2koaCxfKSxmLnNlbGVjdChoKS5hdHRyKCJkeSIseFtyXSksbi5keT1iW3JdLGEuYXBwZW5kQ2hpbGQodSksYS5hcHBlbmRDaGlsZChoKX1lbHNlIGEuYXBwZW5kQ2hpbGQodSk7Zi5zZWxlY3QodSkuYXR0cihuKSxhPXQubm9kZT11LGMucHVzaCh0KX1mdW5jdGlvbiBpKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZT1sKGUpLnJlcGxhY2UoaywiICIpO3ZhciBhLHM9ITEsYz1bXSx1PS0xO1MudGVzdChlKT9yKCk6KGE9dCxjPVt7bm9kZTp0fV0pO2Zvcih2YXIgcD1lLnNwbGl0KEEpLHY9MDt2PHAubGVuZ3RoO3YrKyl7dmFyIGc9cFt2XSxNPWcubWF0Y2goRSksVD1NJiZNWzJdLnRvTG93ZXJDYXNlKCksej15W1RdO2lmKCJiciI9PT1UKXIoKTtlbHNlIGlmKHZvaWQgMD09PXopaShhLGcpO2Vsc2UgaWYoTVsxXSkhZnVuY3Rpb24odCl7aWYoMT09PWMubGVuZ3RoKXJldHVybiB2b2lkIGgubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKTt2YXIgcj1jLnBvcCgpO3QhPT1yLnR5cGUmJmgubG9nKCJTdGFydCB0YWcgPCIrci50eXBlKyI+IGRvZXNudCBtYXRjaCBlbmQgdGFnIDwiK3QrIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLiIsZSksYT1jW2MubGVuZ3RoLTFdLm5vZGV9KFQpO2Vsc2V7dmFyIE89TVs0XSxSPXt0eXBlOlR9LEY9byhPLEwpO2lmKEY/KEY9Ri5yZXBsYWNlKFAsIiQxIGZpbGw6IikseiYmKEYrPSI7Iit6KSk6eiYmKEY9eiksRiYmKFIuc3R5bGU9RiksImEiPT09VCl7cz0hMDt2YXIgaj1vKE8sQyk7aWYoail7dmFyIE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO04uaHJlZj1qLHcuaW5kZXhPZihOLnByb3RvY29sKSE9PS0xJiYoUi5ocmVmPWVuY29kZVVSSShqKSxSLnRhcmdldD1vKE8sSSl8fCJfYmxhbmsiLFIucG9wdXA9byhPLEQpKX19bihSKX19cmV0dXJuIHN9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG4saSxhLG89ci5ob3Jpem9udGFsQWxpZ24scz1yLnZlcnRpY2FsQWxpZ258fCJ0b3AiLGw9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaT0iYm90dG9tIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC5ib3R0b20tbi5oZWlnaHR9OiJtaWRkbGUiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLnRvcCsobC5oZWlnaHQtbi5oZWlnaHQpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwudG9wfSxhPSJyaWdodCI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwucmlnaHQtbi53aWR0aH06ImNlbnRlciI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwubGVmdCsobC53aWR0aC1uLndpZHRoKS8yfTpmdW5jdGlvbigpe3JldHVybiBsLmxlZnR9LGZ1bmN0aW9uKCl7cmV0dXJuIG49dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5zdHlsZSh7dG9wOmkoKS1jLnRvcCsicHgiLGxlZnQ6YSgpLWMubGVmdCsicHgiLCJ6LWluZGV4IjoxZTN9KSx0aGlzfX12YXIgZj10KCJkMyIpLGg9dCgiLi4vbGliIiksZD10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHA9dCgiLi4vY29uc3RhbnRzL3N0cmluZ19tYXBwaW5ncyIpLG09dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztyLmNvbnZlcnRUb1RzcGFucz1mdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbygpe3UuZW1wdHkoKXx8KGg9dC5hdHRyKCJjbGFzcyIpKyItbWF0aCIsdS5zZWxlY3QoInN2Zy4iK2gpLnJlbW92ZSgpKSx0LnRleHQoIiIpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsInByZSIpLGModC5ub2RlKCkscykmJnQuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5wb3NpdGlvblRleHQodCksaSYmaS5jYWxsKHQpfXZhciBzPXQudGV4dCgpLGw9IXQuYXR0cigiZGF0YS1ub3RleCIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJnMubWF0Y2goLyhbXiRdKikoWyRdK1teJF0qWyRdKykoW14kXSopLyksdT1mLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZighdS5lbXB0eSgpKXt2YXIgaD10LmF0dHIoImNsYXNzIik/dC5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIilbMF06InRleHQiO3JldHVybiBoKz0iLW1hdGgiLHUuc2VsZWN0QWxsKCJzdmcuIitoKS5yZW1vdmUoKSx1LnNlbGVjdEFsbCgiZy4iK2grIi1ncm91cCIpLnJlbW92ZSgpLHQuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpzLCJkYXRhLW1hdGgiOiJOIn0pLGw/KGUmJmUuX3Byb21pc2VzfHxbXSkucHVzaChuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0LnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxjPXtmb250U2l6ZTpyfTthKGxbMl0sYyxmdW5jdGlvbihhLGwsYyl7dS5zZWxlY3RBbGwoInN2Zy4iK2gpLnJlbW92ZSgpLHUuc2VsZWN0QWxsKCJnLiIraCsiLWdyb3VwIikucmVtb3ZlKCk7dmFyIGY9YSYmYS5zZWxlY3QoInN2ZyIpO2lmKCFmfHwhZi5ub2RlKCkpcmV0dXJuIG8oKSx2b2lkIGUoKTt2YXIgZD11LmFwcGVuZCgiZyIpLmNsYXNzZWQoaCsiLWdyb3VwIiwhMCkuYXR0cih7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsImRhdGEtdW5mb3JtYXR0ZWQiOnMsImRhdGEtbWF0aCI6IlkifSk7ZC5ub2RlKCkuYXBwZW5kQ2hpbGQoZi5ub2RlKCkpLGwmJmwubm9kZSgpJiZmLm5vZGUoKS5pbnNlcnRCZWZvcmUobC5ub2RlKCkuY2xvbmVOb2RlKCEwKSxmLm5vZGUoKS5maXJzdENoaWxkKSxmLmF0dHIoe2NsYXNzOmgsaGVpZ2h0OmMuaGVpZ2h0LHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIG1lZXQifSkuc3R5bGUoe292ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBwPXQubm9kZSgpLnN0eWxlLmZpbGx8fCJibGFjayI7Zi5zZWxlY3QoImciKS5hdHRyKHtmaWxsOnAsc3Ryb2tlOnB9KTt2YXIgbT1uKGYsIndpZHRoIiksdj1uKGYsImhlaWdodCIpLGc9K3QuYXR0cigieCIpLW0qe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLHk9cnx8bih0LCJoZWlnaHQiKSxiPS15LzQ7InkiPT09aFswXT8oZC5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1stOTAsK3QuYXR0cigieCIpLCt0LmF0dHIoInkiKV0rIikgdHJhbnNsYXRlKCIrWy1tLzIsYi12LzJdKyIpIn0pLGYuYXR0cih7eDordC5hdHRyKCJ4IikseTordC5hdHRyKCJ5Iil9KSk6ImwiPT09aFswXT9mLmF0dHIoe3g6dC5hdHRyKCJ4IikseTpiLXYvMn0pOiJhIj09PWhbMF0/Zi5hdHRyKHt4OjAseTpifSk6Zi5hdHRyKHt4OmcseTordC5hdHRyKCJ5IikrYi12LzJ9KSxpJiZpLmNhbGwodCxkKSxlKGQpfSl9KSk6bygpLHR9fTt2YXIgdj0vKDx8Jmx0O3wmIzYwOykvZyxnPS8oPnwmZ3Q7fCYjNjI7KS9nLHk9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxiPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LHg9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxfPSJcdTIwMGIiLHc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLE09bmV3IFJlZ0V4cCgiPC8/KCIrT2JqZWN0LmtleXMoeSkuam9pbigifCIpKyIpKCBbXj5dKik/Lz8+IiwiZyIpLFQ9T2JqZWN0LmtleXMocC5lbnRpdHlUb1VuaWNvZGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57cmVnRXhwOm5ldyBSZWdFeHAoIiYiK3QrIjsiLCJnIiksc3ViOnAuZW50aXR5VG9Vbmljb2RlW3RdfX0pLGs9LyhcclxuP3xcbikvZyxBPS8oPFtePD5dKj4pLyxFPS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2ksUz0vPGJyKFxzKy4qKT8+L2ksTD0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxDPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSxJPS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxEPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pLFA9LyhefDspXHMqY29sb3I6LztyLnBsYWluVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4odHx8IiIpLnJlcGxhY2UoTSwiICIpfSxyLmxpbmVDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiB2b2lkIDA9PT1lP251bGw9PT0oZT1uLmF0dHIodCkpJiYobi5hdHRyKHQsMCksZT0wKTpuLmF0dHIodCxlKSxlfXZhciBuPWYuc2VsZWN0KHRoaXMpLGk9dCgieCIsZSksYT10KCJ5IixyKTsidGV4dCI9PT10aGlzLm5vZGVOYW1lJiZuLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmF0dHIoe3g6aSx5OmF9KX0pfSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXtpKCksdC5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGUscj1sLmF0dHIoImNsYXNzIik7KGU9cj8iLiIrci5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJmYuc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gbih0KXt2YXIgZT10Lm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHMoZSk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSxlLmZvY3VzKCl9ZnVuY3Rpb24gaSgpe3ZhciByPWYuc2VsZWN0KGEpLGk9ci5zZWxlY3QoIi5zdmctY29udGFpbmVyIiksbz1pLmFwcGVuZCgiZGl2IiksbD10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQobC5mb250U2l6ZXx8MTIpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpsLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fGwuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQoZS50ZXh0fHx0LmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbCh1KHQsaSxlKSkub24oImJsdXIiLGZ1bmN0aW9uKCl7YS5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLHI9Zi5zZWxlY3QodGhpcykuYXR0cigiY2xhc3MiKTsoZT1yPyIuIityLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmZi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgbj10aGlzLnRleHRDb250ZW50O2Yuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5yZW1vdmUoKSxmLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLG51bGwpLHMuZWRpdC5jYWxsKHQsbil9KS5vbigiZm9jdXMiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpczthLl9lZGl0aW5nPSEwLGYuc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXtpZihmLmV2ZW50LnRhcmdldD09PXQpcmV0dXJuITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8ubm9kZSgpJiZvLm5vZGUoKS5ibHVyKCl9KX0pLm9uKCJrZXl1cCIsZnVuY3Rpb24oKXsyNz09PWYuZXZlbnQud2hpY2g/KGEuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksZi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKCJibHVyIixmdW5jdGlvbigpe3JldHVybiExfSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLHMuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KHMuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLGYuc2VsZWN0KHRoaXMpLmNhbGwodSh0LGksZSkpKX0pLm9uKCJrZXlkb3duIixmdW5jdGlvbigpezEzPT09Zi5ldmVudC53aGljaCYmdGhpcy5ibHVyKCl9KS5jYWxsKG4pfXZhciBhPWUuZ2Qsbz1lLmRlbGVnYXRlLHM9Zi5kaXNwYXRjaCgiZWRpdCIsImlucHV0IiwiY2FuY2VsIiksbD1vfHx0O2lmKHQuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6bz8ibm9uZSI6ImFsbCJ9KSwxIT09dC5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJib28iKTtyZXR1cm4gZS5pbW1lZGlhdGU/cigpOmwub24oImNsaWNrIixyKSxmLnJlYmluZCh0LHMsIm9uIil9fSx7Ii4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcwOCwiLi4vY29uc3RhbnRzL3N0cmluZ19tYXBwaW5ncyI6NzE1LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzE2LCIuLi9saWIiOjczNSxkMzoxMjF9XSw3NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXZhciBpPXt9O3IudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEoKXtyKCksby50cz1EYXRlLm5vdygpLG8ub25Eb25lJiYoby5vbkRvbmUoKSxvLm9uRG9uZT1udWxsKX12YXIgbz1pW3RdLHM9RGF0ZS5ub3coKTtpZighbyl7Zm9yKHZhciBsIGluIGkpaVtsXS50czxzLTZlNCYmZGVsZXRlIGlbbF07bz1pW3RdPXt0czowLHRpbWVyOm51bGx9fWlmKG4obykscz5vLnRzK2UpcmV0dXJuIHZvaWQgYSgpO28udGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2EoKSxvLnRpbWVyPW51bGx9LGUpfSxyLmRvbmU9ZnVuY3Rpb24odCl7dmFyIGU9aVt0XTtyZXR1cm4gZSYmZS50aW1lcj9uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KTpQcm9taXNlLnJlc29sdmUoKX0sci5jbGVhcj1mdW5jdGlvbih0KXtpZih0KW4oaVt0XSksZGVsZXRlIGlbdF07ZWxzZSBmb3IodmFyIGUgaW4gaSlyLmNsZWFyKGUpfX0se31dLDc1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxMzF9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9LGk9dCgiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpewpyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjgwNSwidG9wb2pzb24tY2xpZW50Ijo1NDR9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1uZXcgRmxvYXQzMkFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBGbG9hdDY0QXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIG4odCxlKTtpZih0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KXJldHVybiBpKHQsZSk7dGhyb3cgbmV3IEVycm9yKCJUaGlzIGFycmF5IHR5cGUgaXMgbm90IHlldCBzdXBwb3J0ZWQgYnkgYHRydW5jYXRlYC4iKX19LHt9XSw3NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsaT1uLmxheW91dEFycmF5Q29udGFpbmVycyxhPW4ubGF5b3V0QXJyYXlSZWdleGVzLG89dC5zcGxpdCgiWyIpWzBdLHM9MDtzPGEubGVuZ3RoO3MrKylpZigocj10Lm1hdGNoKGFbc10pKSYmMD09PXIuaW5kZXgpe2U9clswXTticmVha31pZihlfHwoZT1pW2kuaW5kZXhPZihvKV0pLCFlKXJldHVybiExO3ZhciBsPXQuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gbD8hIShyPWwubWF0Y2goL15cWygwfFsxLTldWzAtOV0qKVxdKFwuKC4rKSk/JC8pKSYme2FycmF5OmUsaW5kZXg6TnVtYmVyKHJbMV0pLHByb3BlcnR5OnJbM118fCIifTp7YXJyYXk6ZSxpbmRleDoiIixwcm9wZXJ0eToiIn19fSx7Ii4uL3JlZ2lzdHJ5Ijo4NTN9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09ITE7cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49cyh7fSx0KTtmb3IodmFyIGkgaW4gbil7dmFyIG89bltpXTtsKG8pJiYobltpXT1hKG8sZSxyLGkpKX1yZXR1cm4iZnJvbS1yb290Ij09PXImJihuLmVkaXRUeXBlPWUpLG59ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0LnZhbFR5cGUpe3ZhciBvPXMoe30sdCk7aWYoby5lZGl0VHlwZT1lLEFycmF5LmlzQXJyYXkodC5pdGVtcykpe28uaXRlbXM9bmV3IEFycmF5KHQuaXRlbXMubGVuZ3RoKTtmb3IodmFyIGw9MDtsPHQuaXRlbXMubGVuZ3RoO2wrKylvLml0ZW1zW2xdPWEodC5pdGVtc1tsXSxlLCJmcm9tLXJvb3QiKX1yZXR1cm4gb31yZXR1cm4gaSh0LGUsIl8iPT09bi5jaGFyQXQoMCk/Im5lc3RlZCI6ImZyb20tcm9vdCIpfXZhciBvPXQoIi4uL2xpYiIpLHM9by5leHRlbmRGbGF0LGw9by5pc1BsYWluT2JqZWN0LGM9e3ZhbFR5cGU6ImZsYWdsaXN0IixleHRyYXM6WyJub25lIl0sZmxhZ3M6WyJjYWxjIiwiY2FsY0lmQXV0b3JhbmdlIiwiY2xlYXJBeGlzVHlwZXMiLCJwbG90Iiwic3R5bGUiLCJjb2xvcmJhcnMiXX0sdT17dmFsVHlwZToiZmxhZ2xpc3QiLGV4dHJhczpbIm5vbmUiXSxmbGFnczpbImNhbGMiLCJjYWxjSWZBdXRvcmFuZ2UiLCJwbG90IiwibGVnZW5kIiwidGlja3MiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciXX0sZj1jLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiY2xlYXJDYWxjIiwiZnVsbFJlcGxvdCJdKSxoPXUuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2UuZXhwb3J0cz17dHJhY2VzOmMsbGF5b3V0OnUsdHJhY2VGbGFnczpmdW5jdGlvbigpe3JldHVybiBuKGYpfSxsYXlvdXRGbGFnczpmdW5jdGlvbigpe3JldHVybiBuKGgpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmVkaXRUeXBlO2lmKHImJiJub25lIiE9PXIpZm9yKHZhciBuPXIuc3BsaXQoIisiKSxpPTA7aTxuLmxlbmd0aDtpKyspdFtuW2ldXT0hMH0sb3ZlcnJpZGVBbGw6aX19LHsiLi4vbGliIjo3MzV9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXRbZV0sbj1lLmNoYXJBdCgwKTtyJiYicGFwZXIiIT09ciYmKHRbZV09aC5jbGVhbklkKHIsbikpfWZ1bmN0aW9uIGkodCl7dmFyIGU9Im1pZGRsZSIscj0iY2VudGVyIjtyZXR1cm4gdC5pbmRleE9mKCJ0b3AiKSE9PS0xP2U9InRvcCI6dC5pbmRleE9mKCJib3R0b20iKSE9PS0xJiYoZT0iYm90dG9tIiksdC5pbmRleE9mKCJsZWZ0IikhPT0tMT9yPSJsZWZ0Ijp0LmluZGV4T2YoInJpZ2h0IikhPT0tMSYmKHI9InJpZ2h0IiksZSsiICIrcn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGUgaW4gdCYmIm9iamVjdCI9PXR5cGVvZiB0W2VdJiYwPT09T2JqZWN0LmtleXModFtlXSkubGVuZ3RofWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5zZWFyY2gocCk7aWYoZT4wKXJldHVybiB0LnN1YnN0cigwLGUpfXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYz10KCIuLi9yZWdpc3RyeSIpLHU9dCgiLi4vbGliIiksZj10KCIuLi9wbG90cy9wbG90cyIpLGg9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKTtyLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmdS5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUscjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpO3ZhciBpPWgubGlzdCh7X2Z1bGxMYXlvdXQ6dH0pO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBvPWlbZV07by5hbmNob3ImJiJmcmVlIiE9PW8uYW5jaG9yJiYoby5hbmNob3I9aC5jbGVhbklkKG8uYW5jaG9yKSksby5vdmVybGF5aW5nJiYoby5vdmVybGF5aW5nPWguY2xlYW5JZChvLm92ZXJsYXlpbmcpKSxvLnR5cGV8fChvLmlzZGF0ZT9vLnR5cGU9ImRhdGUiOm8uaXNsb2c/by50eXBlPSJsb2ciOm8uaXNkYXRlPT09ITEmJm8uaXNsb2c9PT0hMSYmKG8udHlwZT0ibGluZWFyIikpLCJ3aXRoemVybyIhPT1vLmF1dG9yYW5nZSYmInRvemVybyIhPT1vLmF1dG9yYW5nZXx8KG8uYXV0b3JhbmdlPSEwLG8ucmFuZ2Vtb2RlPSJ0b3plcm8iKSxkZWxldGUgby5pc2xvZyxkZWxldGUgby5pc2RhdGUsZGVsZXRlIG8uY2F0ZWdvcmllcyxhKG8sImRvbWFpbiIpJiZkZWxldGUgby5kb21haW4sdm9pZCAwIT09by5hdXRvdGljayYmKHZvaWQgMD09PW8udGlja21vZGUmJihvLnRpY2ttb2RlPW8uYXV0b3RpY2s/ImF1dG8iOiJsaW5lYXIiKSxkZWxldGUgby5hdXRvdGljayl9dmFyIHM9QXJyYXkuaXNBcnJheSh0LmFubm90YXRpb25zKT90LmFubm90YXRpb25zLmxlbmd0aDowO2ZvcihlPTA7ZTxzO2UrKyl7dmFyIGM9dC5hbm5vdGF0aW9uc1tlXTt1LmlzUGxhaW5PYmplY3QoYykmJihjLnJlZiYmKCJwYXBlciI9PT1jLnJlZj8oYy54cmVmPSJwYXBlciIsYy55cmVmPSJwYXBlciIpOiJkYXRhIj09PWMucmVmJiYoYy54cmVmPSJ4IixjLnlyZWY9InkiKSxkZWxldGUgYy5yZWYpLG4oYywieHJlZiIpLG4oYywieXJlZiIpKX12YXIgcD1BcnJheS5pc0FycmF5KHQuc2hhcGVzKT90LnNoYXBlcy5sZW5ndGg6MDtmb3IoZT0wO2U8cDtlKyspe3ZhciBtPXQuc2hhcGVzW2VdO3UuaXNQbGFpbk9iamVjdChtKSYmKG4obSwieHJlZiIpLG4obSwieXJlZiIpKX12YXIgdj10LmxlZ2VuZDt2JiYodi54PjM/KHYueD0xLjAyLHYueGFuY2hvcj0ibGVmdCIpOnYueDwtMiYmKHYueD0tLjAyLHYueGFuY2hvcj0icmlnaHQiKSx2Lnk+Mz8odi55PTEuMDIsdi55YW5jaG9yPSJib3R0b20iKTp2Lnk8LTImJih2Lnk9LS4wMix2LnlhbmNob3I9InRvcCIpKSwicm90YXRlIj09PXQuZHJhZ21vZGUmJih0LmRyYWdtb2RlPSJvcmJpdCIpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGc9Zi5nZXRTdWJwbG90SWRzKHQsImdsM2QiKTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgeT10W2dbZV1dLGI9eS5jYW1lcmFwb3NpdGlvbjtpZihBcnJheS5pc0FycmF5KGIpJiY0PT09YlswXS5sZW5ndGgpe3ZhciB4PWJbMF0sXz1iWzFdLHc9YlsyXSxNPWwoW10seCksVD1bXTtmb3Iocj0wO3I8MzsrK3IpVFtyXT1fW2VdK3cqTVsyKzQqcl07eS5jYW1lcmE9e2V5ZTp7eDpUWzBdLHk6VFsxXSx6OlRbMl19LGNlbnRlcjp7eDpfWzBdLHk6X1sxXSx6Ol9bMl19LHVwOnt4Ok1bMV0seTpNWzVdLHo6TVs5XX19LGRlbGV0ZSB5LmNhbWVyYXBvc2l0aW9ufX1yZXR1cm4gZC5jbGVhbih0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxvPSh0LmNvbmNhdChBcnJheS5pc0FycmF5KGUpP2U6W10pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4idWlkImluIHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudWlkfSkpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGwscD10W3NdO2lmKCEoInVpZCJpbiBwKXx8bi5pbmRleE9mKHAudWlkKSE9PS0xKXt2YXIgbTtmb3IobD0wO2w8MTAwJiYobT11LnJhbmRzdHIobyksbi5pbmRleE9mKG0pIT09LTEpO2wrKyk7cC51aWQ9dS5yYW5kc3RyKG8pLG8ucHVzaChwLnVpZCl9aWYobi5wdXNoKHAudWlkKSwiaGlzdG9ncmFteSI9PT1wLnR5cGUmJiJ4YmlucyJpbiBwJiYhKCJ5YmlucyJpbiBwKSYmKHAueWJpbnM9cC54YmlucyxkZWxldGUgcC54YmlucykscC5lcnJvcl95JiYib3BhY2l0eSJpbiBwLmVycm9yX3kpe3ZhciB2PWQuZGVmYXVsdHMsZz1wLmVycm9yX3kuY29sb3J8fChjLnRyYWNlSXMocCwiYmFyIik/ZC5kZWZhdWx0TGluZTp2W3Mldi5sZW5ndGhdKTtwLmVycm9yX3kuY29sb3I9ZC5hZGRPcGFjaXR5KGQucmdiKGcpLGQub3BhY2l0eShnKSpwLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIHAuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gcCYmKCJoIiE9PXAuYmFyZGlyfHwhYy50cmFjZUlzKHAsImJhciIpJiYiaGlzdG9ncmFtIiE9PXAudHlwZS5zdWJzdHIoMCw5KXx8KHAub3JpZW50YXRpb249ImgiLHIuc3dhcFhZRGF0YShwKSksZGVsZXRlIHAuYmFyZGlyKSwiaGlzdG9ncmFteSI9PT1wLnR5cGUmJnIuc3dhcFhZRGF0YShwKSwiaGlzdG9ncmFteCIhPT1wLnR5cGUmJiJoaXN0b2dyYW15IiE9PXAudHlwZXx8KHAudHlwZT0iaGlzdG9ncmFtIiksInNjbCJpbiBwJiYocC5jb2xvcnNjYWxlPXAuc2NsLGRlbGV0ZSBwLnNjbCksInJldmVyc2VzY2wiaW4gcCYmKHAucmV2ZXJzZXNjYWxlPXAucmV2ZXJzZXNjbCxkZWxldGUgcC5yZXZlcnNlc2NsKSxwLnhheGlzJiYocC54YXhpcz1oLmNsZWFuSWQocC54YXhpcywieCIpKSxwLnlheGlzJiYocC55YXhpcz1oLmNsZWFuSWQocC55YXhpcywieSIpKSxjLnRyYWNlSXMocCwiZ2wzZCIpJiZwLnNjZW5lJiYocC5zY2VuZT1mLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKHAuc2NlbmUpKSxjLnRyYWNlSXMocCwicGllIil8fGMudHJhY2VJcyhwLCJiYXIiKXx8KEFycmF5LmlzQXJyYXkocC50ZXh0cG9zaXRpb24pP3AudGV4dHBvc2l0aW9uPXAudGV4dHBvc2l0aW9uLm1hcChpKTpwLnRleHRwb3NpdGlvbiYmKHAudGV4dHBvc2l0aW9uPWkocC50ZXh0cG9zaXRpb24pKSksYy50cmFjZUlzKHAsIjJkTWFwIikmJigiWUlHbkJ1Ij09PXAuY29sb3JzY2FsZSYmKHAuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1wLmNvbG9yc2NhbGUmJihwLmNvbG9yc2NhbGU9IllsT3JSZCIpKSxjLnRyYWNlSXMocCwibWFya2VyQ29sb3JzY2FsZSIpJiZwLm1hcmtlcil7dmFyIHk9cC5tYXJrZXI7IllJR25CdSI9PT15LmNvbG9yc2NhbGUmJih5LmNvbG9yc2NhbGU9IllsR25CdSIpLCJZSU9yUmQiPT09eS5jb2xvcnNjYWxlJiYoeS5jb2xvcnNjYWxlPSJZbE9yUmQiKX1pZigic3VyZmFjZSI9PT1wLnR5cGUmJnUuaXNQbGFpbk9iamVjdChwLmNvbnRvdXJzKSl7dmFyIGI9WyJ4IiwieSIsInoiXTtmb3IobD0wO2w8Yi5sZW5ndGg7bCsrKXt2YXIgeD1wLmNvbnRvdXJzW2JbbF1dO3UuaXNQbGFpbk9iamVjdCh4KSYmKHguaGlnaGxpZ2h0Q29sb3ImJih4LmhpZ2hsaWdodGNvbG9yPXguaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHguaGlnaGxpZ2h0Q29sb3IpLHguaGlnaGxpZ2h0V2lkdGgmJih4LmhpZ2hsaWdodHdpZHRoPXguaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHguaGlnaGxpZ2h0V2lkdGgpKX19aWYoQXJyYXkuaXNBcnJheShwLnRyYW5zZm9ybXMpKXt2YXIgXz1wLnRyYW5zZm9ybXM7Zm9yKGw9MDtsPF8ubGVuZ3RoO2wrKyl7dmFyIHc9X1tsXTtpZih1LmlzUGxhaW5PYmplY3Qodykpc3dpdGNoKHcudHlwZSl7Y2FzZSJmaWx0ZXIiOncuZmlsdGVyc3JjJiYody50YXJnZXQ9dy5maWx0ZXJzcmMsZGVsZXRlIHcuZmlsdGVyc3JjKSx3LmNhbGVuZGFyJiYody52YWx1ZWNhbGVuZGFyfHwody52YWx1ZWNhbGVuZGFyPXcuY2FsZW5kYXIpLGRlbGV0ZSB3LmNhbGVuZGFyKTticmVhaztjYXNlImdyb3VwYnkiOmlmKHcuc3R5bGVzPXcuc3R5bGVzfHx3LnN0eWxlLHcuc3R5bGVzJiYhQXJyYXkuaXNBcnJheSh3LnN0eWxlcykpe3ZhciBNPXcuc3R5bGVzLFQ9T2JqZWN0LmtleXMoTSk7dy5zdHlsZXM9W107Zm9yKHZhciBrPTA7azxULmxlbmd0aDtrKyspdy5zdHlsZXMucHVzaCh7dGFyZ2V0OlRba10sdmFsdWU6TVtUW2tdXX0pfX19fWEocCwibGluZSIpJiZkZWxldGUgcC5saW5lLCJtYXJrZXIiaW4gcCYmKGEocC5tYXJrZXIsImxpbmUiKSYmZGVsZXRlIHAubWFya2VyLmxpbmUsYShwLCJtYXJrZXIiKSYmZGVsZXRlIHAubWFya2VyKSxkLmNsZWFuKHApfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHUuc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7dS5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmdS5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZSk/W2VdOkFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoP2U6dC5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSl9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm9iaixpPXQucGFydHMsYT1pLmxlbmd0aCxvPWlbYS0xXSxsPXMobyk7aWYobCYmbnVsbD09PWUpe3ZhciBjPWkuc2xpY2UoMCxhLTEpLmpvaW4oIi4iKTt1Lm5lc3RlZFByb3BlcnR5KG4sYykuZ2V0KCkuc3BsaWNlKG8sMSl9ZWxzZSBsJiZ2b2lkIDA9PT10LmdldCgpPyh2b2lkIDA9PT10LmdldCgpJiYoclt0LmFzdHJdPW51bGwpLHQuc2V0KGUpKTp0LnNldChlKX07dmFyIHA9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ci5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9byhlKTtyOyl7aWYociBpbiB0KXJldHVybiEwO3I9byhyKX1yZXR1cm4hMX07dmFyIG09WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9dC5fZnVsbERhdGFbbl0sYT0wO2E8MzthKyspe3ZhciBvPWguZ2V0RnJvbVRyYWNlKHQsaSxtW2FdKTtpZihvJiYibG9nIiE9PW8udHlwZSl7dmFyIHM9by5fbmFtZSxsPW8uX2lkLnN1YnN0cigxKTtpZigic2NlbmUiPT09bC5zdWJzdHIoMCw1KSl7aWYodm9pZCAwIT09cltsXSljb250aW51ZTtzPWwrIi4iK3N9dmFyIGM9cysiLnR5cGUiO3ZvaWQgMD09PXJbc10mJnZvaWQgMD09PXJbY10mJnUubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsYykuc2V0KG51bGwpfX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vbGliIjo3MzUsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4uL3JlZ2lzdHJ5Ijo4NTMsImZhc3QtaXNudW1lcmljIjoxMzEsImdsLW1hdDQvZnJvbVF1YXQiOjE4Mn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5IiksaT10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksYT10KCIuLi9saWIvbm9vcCIpLG89dCgiLi4vbGliL2xvZ2dlcnMiKSxzPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2MsbD10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBjPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxpKHQpfSx1PXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGY9ZS5hc3RyLGg9bC5nZXRDb21wb25lbnRNZXRob2QoZiwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxkPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXciKSxwPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGYsImRyYXdPbmUiKSxtPWkucmVwbG90fHxpLnJlY2FsY3x8aD09PWF8fGQ9PT1hLHY9dC5sYXlvdXQsZz10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmby53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsZik7dmFyIHk9clsiIl1bIiJdO2lmKHUoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixmLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFtJiYoaCh2LGcpLGQodCksITApfXZhciBiLHgsXyx3LE0sVCxrLEE9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChzKSxFPWUuZ2V0KCksUz1FfHxbXSxMPW4oZyxmKS5nZXQoKSxDPVtdLEk9LTEsRD1TLmxlbmd0aDtmb3IoYj0wO2I8QS5sZW5ndGg7YisrKWlmKF89QVtiXSx3PXJbX10sTT1PYmplY3Qua2V5cyh3KSxUPXdbIiJdLGs9YyhUKSxfPDB8fF8+Uy5sZW5ndGgtKGs/MDoxKSlvLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsZixfKTtlbHNlIGlmKHZvaWQgMCE9PVQpTS5sZW5ndGg+MSYmby53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGYsXyksdShUKT9DLnB1c2goXyk6az8oImFkZCI9PT1UJiYoVD17fSksUy5zcGxpY2UoXywwLFQpLEwmJkwuc3BsaWNlKF8sMCx7fSkpOm8ud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGYsXyxUKSxJPT09LTEmJihJPV8pO2Vsc2UgZm9yKHg9MDt4PE0ubGVuZ3RoO3grKyluKFNbX10sTVt4XSkuc2V0KHdbTVt4XV0pO2ZvcihiPUMubGVuZ3RoLTE7Yj49MDtiLS0pUy5zcGxpY2UoQ1tiXSwxKSxMJiZMLnNwbGljZShDW2JdLDEpO2lmKFMubGVuZ3RoP0V8fGUuc2V0KFMpOmUuc2V0KG51bGwpLG0pcmV0dXJuITE7aWYoaCh2LGcpLHAhPT1hKXt2YXIgUDtpZihJPT09LTEpUD1BO2Vsc2V7Zm9yKEQ9TWF0aC5tYXgoUy5sZW5ndGgsRCksUD1bXSxiPTA7YjxBLmxlbmd0aCYmISgoXz1BW2JdKT49SSk7YisrKVAucHVzaChfKTtmb3IoYj1JO2I8RDtiKyspUC5wdXNoKGIpfWZvcihiPTA7YjxQLmxlbmd0aDtiKyspcCh0LFBbYl0pfWVsc2UgZCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6NzM3LCIuLi9saWIvbG9nZ2VycyI6NzM5LCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5Ijo3NDIsIi4uL2xpYi9ub29wIjo3NDMsIi4uL2xpYi9zZWFyY2giOjc1MiwiLi4vcmVnaXN0cnkiOjg1MywiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjc2Mn1dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dHJ5e3QuX2Z1bGxMYXlvdXQuX3BhcGVyLnN0eWxlKCJiYWNrZ3JvdW5kIixlKX1jYXRjaCh0KXt3LmVycm9yKHQpfX1mdW5jdGlvbiBpKHQsZSl7bih0LEkuY29tYmluZShlLCJ3aGl0ZSIpKX1mdW5jdGlvbiBhKHQsZSl7dC5fY29udGV4dHx8KHQuX2NvbnRleHQ9dy5leHRlbmREZWVwKHt9LF8uZGVmYXVsdENvbmZpZykpO3ZhciByLGEsbyxzPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKGE9T2JqZWN0LmtleXMoZSkscj0wO3I8YS5sZW5ndGg7cisrKSJlZGl0YWJsZSIhPT0obz1hW3JdKSYmImVkaXRzIiE9PW8mJm8gaW4gcyYmKCJzZXRCYWNrZ3JvdW5kIj09PW8mJiJvcGFxdWUiPT09ZVtvXT9zW29dPWk6c1tvXT1lW29dKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFzLnBsb3RHbFBpeGVsUmF0aW8mJihzLnBsb3RHbFBpeGVsUmF0aW89cy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgbD1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PWwpZm9yKHMuZWRpdGFibGU9bCxhPU9iamVjdC5rZXlzKHMuZWRpdHMpLHI9MDtyPGEubGVuZ3RoO3IrKylzLmVkaXRzW2Fbcl1dPWw7aWYoZS5lZGl0cylmb3IoYT1PYmplY3Qua2V5cyhlLmVkaXRzKSxyPTA7cjxhLmxlbmd0aDtyKyspKG89YVtyXSlpbiBzLmVkaXRzJiYocy5lZGl0c1tvXT1lLmVkaXRzW29dKX1zLnN0YXRpY1Bsb3QmJihzLmVkaXRhYmxlPSExLHMuZWRpdHM9e30scy5hdXRvc2l6YWJsZT0hMSxzLnNjcm9sbFpvb209ITEscy5kb3VibGVDbGljaz0hMSxzLnNob3dUaXBzPSExLHMuc2hvd0xpbms9ITEscy5kaXNwbGF5TW9kZUJhcj0hMSksImhvdmVyIiE9PXMuZGlzcGxheU1vZGVCYXJ8fHh8fChzLmRpc3BsYXlNb2RlQmFyPSEwKSwidHJhbnNwYXJlbnQiIT09cy5zZXRCYWNrZ3JvdW5kJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5zZXRCYWNrZ3JvdW5kfHwocy5zZXRCYWNrZ3JvdW5kPW4pfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXkuc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pO24uZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIHBsb3RseSIsITApO3ZhciBpPW4uc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxpLmh0bWwoIiIpLGUmJih0LmRhdGE9ZSksciYmKHQubGF5b3V0PXIpLFMubWFuYWdlci5maWxsTGF5b3V0KHQpLGkuc3R5bGUoe3dpZHRoOnQuX2Z1bGxMYXlvdXQud2lkdGgrInB4IixoZWlnaHQ6dC5fZnVsbExheW91dC5oZWlnaHQrInB4In0pLHQuZnJhbWV3b3JrPVMubWFuYWdlci5mcmFtZXdvcmsodCksdC5mcmFtZXdvcmsoe2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0saS5ub2RlKCkpLHQuZnJhbWV3b3JrLnNldFVuZG9Qb2ludCgpO3ZhciBhPXQuZnJhbWV3b3JrLnN2ZygpLG89MSxzPXQuX2Z1bGxMYXlvdXQudGl0bGU7IiIhPT1zJiZzfHwobz0wKTt2YXIgbD1mdW5jdGlvbigpe3RoaXMuY2FsbCh6LmNvbnZlcnRUb1RzcGFucyx0KX0sYz1hLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKGwpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXtzJiYiQ2xpY2sgdG8gZW50ZXIgdGl0bGUiIT09c3x8KG89LjIsYy5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6IkNsaWNrIHRvIGVudGVyIHRpdGxlIn0pLnRleHQoIkNsaWNrIHRvIGVudGVyIHRpdGxlIikuc3R5bGUoe29wYWNpdHk6b30pLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsZnVuY3Rpb24oKXt5LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQub3BhY2l0eSIsZnVuY3Rpb24oKXt5LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMWUzKS5zdHlsZSgib3BhY2l0eSIsMCl9KSk7dmFyIHU9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoei5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dC5mcmFtZXdvcmsoe2xheW91dDp7dGl0bGU6ZX19KSx0aGlzLnRleHQoZSkuY2FsbChsKSx0aGlzLmNhbGwodSl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpO3RoaXMudGV4dCh0KS5jYWxsKGwpfSl9O2MuY2FsbCh1KX1yZXR1cm4gdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsdC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSxFLmFkZExpbmtzKHQpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGk9ZSsxLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyluPXRbcl0sbjwwP2EucHVzaChpK24pOmEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbixpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2lmKChpPWVbbl0pIT09cGFyc2VJbnQoaSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKGUuaW5kZXhPZihpLG4rMSk+LTF8fGk+PTAmJmUuaW5kZXhPZigtdC5kYXRhLmxlbmd0aCtpKT4tMXx8aTwwJiZlLmluZGV4T2YodC5kYXRhLmxlbmd0aCtpKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIGModCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRJbmRpY2VzIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuIik7aWYoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxsKHQsZSwiY3VycmVudEluZGljZXMiKSx2b2lkIDA9PT1yfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHZvaWQgMCE9PXImJmwodCxyLCJuZXdJbmRpY2VzIiksdm9pZCAwIT09ciYmZS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnQgYW5kIG5ldyBpbmRpY2VzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoLiIpfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuLGk7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZih2b2lkIDA9PT1yfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHZvaWQgMCE9PXImJnIubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpZiBpbmRpY2VzIGlzIHNwZWNpZmllZCwgdHJhY2VzLmxlbmd0aCBtdXN0IGVxdWFsIGluZGljZXMubGVuZ3RoIil9ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT13LmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCF3LmlzUGxhaW5PYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3QiKTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMiKTtsKHQsciwiaW5kaWNlcyIpO2Zvcih2YXIgYSBpbiBlKXtpZighQXJyYXkuaXNBcnJheShlW2FdKXx8ZVthXS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZSAiK2ErIiBtdXN0IGJlIGFuIGFycmF5IG9mIGxlbmd0aCBlcXVhbCB0byBpbmRpY2VzIGFycmF5IGxlbmd0aCIpO2lmKGkmJighKGEgaW4gbil8fCFBcnJheS5pc0FycmF5KG5bYV0pfHxuW2FdLmxlbmd0aCE9PWVbYV0ubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIndoZW4gbWF4UG9pbnRzIGlzIHNldCBhcyBhIGtleTp2YWx1ZSBvYmplY3QgaXQgbXVzdCBjb250YWluIGEgMToxIGNvcnJpc3BvbmRlbmNlIHdpdGggdGhlIGtleXMgYW5kIG51bWJlciBvZiB0cmFjZXMgaW4gdGhlIHVwZGF0ZSBvYmplY3QiKX19ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaSxhLG8sbCxjLHU9dy5pc1BsYWluT2JqZWN0KG4pLGY9W107QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPXMocix0LmRhdGEubGVuZ3RoLTEpO2Zvcih2YXIgaCBpbiBlKWZvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXtpZihpPXQuZGF0YVtyW2RdXSxvPXcubmVzdGVkUHJvcGVydHkoaSxoKSxhPW8uZ2V0KCksbD1lW2hdW2RdLCFBcnJheS5pc0FycmF5KGwpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK2grIiBpbmRleDogIitkKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFBcnJheS5pc0FycmF5KGEpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIraCk7Yz11P25baF1bZF06bixiKGMpfHwoYz0tMSksZi5wdXNoKHtwcm9wOm8sdGFyZ2V0OmEsaW5zZXJ0OmwsbWF4cDpNYXRoLmZsb29yKGMpfSl9cmV0dXJuIGZ9ZnVuY3Rpb24gZCh0LGUscixuLGksYSl7Zih0LGUscixuKTtmb3IodmFyIG8scyxsLGM9aCh0LGUscixuKSx1PVtdLGQ9e30scD17fSxtPTA7bTxjLmxlbmd0aDttKyspcz1jW21dLnByb3AsbD1jW21dLm1heHAsbz1pKGNbbV0udGFyZ2V0LGNbbV0uaW5zZXJ0KSxsPj0wJiZsPG8ubGVuZ3RoJiYodT1hKG8sbCkpLGw9Y1ttXS50YXJnZXQubGVuZ3RoLHMuc2V0KG8pLEFycmF5LmlzQXJyYXkoZFtzLmFzdHJdKXx8KGRbcy5hc3RyXT1bXSksQXJyYXkuaXNBcnJheShwW3MuYXN0cl0pfHwocFtzLmFzdHJdPVtdKSxkW3MuYXN0cl0ucHVzaCh1KSxwW3MuYXN0cl0ucHVzaChsKTtyZXR1cm57dXBkYXRlOmQsbWF4UG9pbnRzOnB9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbDp0fWZ1bmN0aW9uIG0odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBpKHQpe3ZhciBlPV8uQXhlcy5pZDJuYW1lKHQpO2MuaW5kZXhPZihlKT09PS0xJiZjLnB1c2goZSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iTEFZT1VUIit0KyIuYXV0b3JhbmdlIn1mdW5jdGlvbiBvKHQpe3JldHVybiJMQVlPVVQiK3QrIi5yYW5nZSJ9ZnVuY3Rpb24gcyhpLGEsbyl7aWYoQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gdm9pZCBpLmZvckVhY2goZnVuY3Rpb24odCl7cyh0LGEsbyl9KTtpZighKGkgaW4gZXx8Ui5oYXNQYXJlbnQoZSxpKSkpe3ZhciBsO2w9IkxBWU9VVCI9PT1pLnN1YnN0cigwLDYpP3cubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsaS5yZXBsYWNlKCJMQVlPVVQiLCIiKSk6dy5uZXN0ZWRQcm9wZXJ0eShoW3Jbb11dLGkpLGkgaW4gdnx8KHZbaV09bigpKSx2b2lkIDA9PT12W2ldW29dJiYodltpXVtvXT1wKGwuZ2V0KCkpKSx2b2lkIDAhPT1hJiZsLnNldChhKX19dmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQsZj10Ll9mdWxsRGF0YSxoPXQuZGF0YSxkPWoudHJhY2VGbGFncygpLG09e30sdj17fSxnPXt9O2Zvcih2YXIgeSBpbiBlKXtpZihSLmhhc1BhcmVudChlLHkpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK3krImFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgYix4LE0sVCxTLEwsQz1lW3ldO2lmKG1beV09QywiTEFZT1VUIiE9PXkuc3Vic3RyKDAsNikpe2Zvcih2W3ldPW4oKSxsPTA7bDxyLmxlbmd0aDtsKyspaWYoYj1oW3JbbF1dLHg9ZltyW2xdXSxNPXcubmVzdGVkUHJvcGVydHkoYix5KSxUPU0uZ2V0KCksdm9pZCAwIT09KFM9QXJyYXkuaXNBcnJheShDKT9DW2wlQy5sZW5ndGhdOkMpKXtpZigoTD1BLmdldFRyYWNlVmFsT2JqZWN0KHgsTS5wYXJ0cykpJiZMLmltcGxpZWRFZGl0cyYmbnVsbCE9PVMpZm9yKHZhciBJIGluIEwuaW1wbGllZEVkaXRzKXMody5yZWxhdGl2ZUF0dHIoeSxJKSxMLmltcGxpZWRFZGl0c1tJXSxsKTtlbHNlIGlmKCJjb2xvcmJhci50aGlja25lc3Ntb2RlIj09PXkmJk0uZ2V0KCkhPT1TJiZbImZyYWN0aW9uIiwicGl4ZWxzIl0uaW5kZXhPZihTKSE9PS0xJiZ4LmNvbG9yYmFyKXt2YXIgRD1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoeC5jb2xvcmJhci5vcmllbnQpIT09LTE/dS5oZWlnaHQtdS5tYXJnaW4udC11Lm1hcmdpbi5iOnUud2lkdGgtdS5tYXJnaW4ubC11Lm1hcmdpbi5yO3MoImNvbG9yYmFyLnRoaWNrbmVzcyIseC5jb2xvcmJhci50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1TPzEvRDpEKSxsKX1lbHNlIGlmKCJjb2xvcmJhci5sZW5tb2RlIj09PXkmJk0uZ2V0KCkhPT1TJiZbImZyYWN0aW9uIiwicGl4ZWxzIl0uaW5kZXhPZihTKSE9PS0xJiZ4LmNvbG9yYmFyKXt2YXIgUD1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoeC5jb2xvcmJhci5vcmllbnQpIT09LTE/dS53aWR0aC11Lm1hcmdpbi5sLXUubWFyZ2luLnI6dS5oZWlnaHQtdS5tYXJnaW4udC11Lm1hcmdpbi5iO3MoImNvbG9yYmFyLmxlbiIseC5jb2xvcmJhci5sZW4qKCJmcmFjdGlvbiI9PT1TPzEvUDpQKSxsKX1lbHNlImNvbG9yYmFyLnRpY2swIiE9PXkmJiJjb2xvcmJhci5kdGljayIhPT15fHxzKCJjb2xvcmJhci50aWNrbW9kZSIsImxpbmVhciIsbCk7aWYoInR5cGUiPT09eSYmInBpZSI9PT1TIT0oInBpZSI9PT1UKSl7dmFyIHo9IngiLE89InkiOyJiYXIiIT09UyYmImJhciIhPT1UfHwiaCIhPT1iLm9yaWVudGF0aW9ufHwoej0ieSIsTz0ieCIpLHcuc3dhcEF0dHJzKGIsWyI/IiwiP3NyYyJdLCJsYWJlbHMiLHopLHcuc3dhcEF0dHJzKGIsWyJkPyIsIj8wIl0sImxhYmVsIix6KSx3LnN3YXBBdHRycyhiLFsiPyIsIj9zcmMiXSwidmFsdWVzIixPKSwicGllIj09PVQ/KHcubmVzdGVkUHJvcGVydHkoYiwibWFya2VyLmNvbG9yIikuc2V0KHcubmVzdGVkUHJvcGVydHkoYiwibWFya2VyLmNvbG9ycyIpLmdldCgpKSx1Ll9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKSk6ay50cmFjZUlzKGIsImNhcnRlc2lhbiIpJiYody5uZXN0ZWRQcm9wZXJ0eShiLCJtYXJrZXIuY29sb3JzIikuc2V0KHcubmVzdGVkUHJvcGVydHkoYiwibWFya2VyLmNvbG9yIikuZ2V0KCkpLGdbYi54YXhpc3x8IngiXT0hMCxnW2IueWF4aXN8fCJ5Il09ITApfXZbeV1bbF09cChUKTt2YXIgRj1bInN3YXB4eSIsInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uYXhlcyJdO2lmKEYuaW5kZXhPZih5KSE9PS0xKXtpZigib3JpZW50YXRpb24iPT09eSl7TS5zZXQoUyk7dmFyIE49Yi54JiYhYi55PyJoIjoidiI7aWYoKE0uZ2V0KCl8fE4pPT09eC5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT15JiYoYi5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W3gub3JpZW50YXRpb25dKTtSLnN3YXBYWURhdGEoYiksZC5jYWxjPWQuY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZSBFLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihNLnBhcnRzWzBdKSE9PS0xPyhSLm1hbmFnZUFycmF5Q29udGFpbmVycyhNLFMsdiksZC5jYWxjPSEwKTooTD9MLmFycmF5T2smJihBcnJheS5pc0FycmF5KFMpfHxBcnJheS5pc0FycmF5KFQpKT9kLmNhbGM9ITA6ai51cGRhdGUoZCxMKTpkLmNhbGM9ITAsTS5zZXQoUykpfWlmKFsic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoeSkhPT0tMSYmXy5BeGVzLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PXkpe3ZhciBCPXcubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsImhvdmVybW9kZSIpOyJ4Ij09PUIuZ2V0KCk/Qi5zZXQoInkiKToieSI9PT1CLmdldCgpJiZCLnNldCgieCIpfWlmKFsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZih5KSE9PS0xKXtmb3IoYz1bXSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBVPWhbcltsXV07ay50cmFjZUlzKFUsImNhcnRlc2lhbiIpJiYoaShVLnhheGlzfHwieCIpLGkoVS55YXhpc3x8InkiKSwidHlwZSI9PT15JiZzKFsiYXV0b2JpbngiLCJhdXRvYmlueSJdLCEwLGwpKX1zKGMubWFwKGEpLCEwLDApLHMoYy5tYXAobyksWzAsMV0sMCl9fWVsc2UgTT13Lm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHkucmVwbGFjZSgiTEFZT1VUIiwiIikpLHZbeV09W3AoTS5nZXQoKSldLE0uc2V0KEFycmF5LmlzQXJyYXkoQyk/Q1swXTpDKSxkLmNhbGM9ITB9dmFyIFY9ITEsSD1fLkF4ZXMubGlzdCh0KTtmb3IobD0wO2w8SC5sZW5ndGg7bCsrKWlmKEhbbF0uYXV0b3JhbmdlKXtWPSEwO2JyZWFrfXZhciBxPU9iamVjdC5rZXlzKGcpO3Q6Zm9yKGw9MDtsPHEubGVuZ3RoO2wrKyl7Zm9yKHZhciBHPXFbbF0sWT1HLmNoYXJBdCgwKSxYPVkrImF4aXMiLFc9MDtXPGgubGVuZ3RoO1crKylpZihrLnRyYWNlSXMoaFtXXSwiY2FydGVzaWFuIikmJihoW1ddW1hdfHxZKT09PUcpY29udGludWUgdDtzKCJMQVlPVVQiK18uQXhlcy5pZDJuYW1lKEcpLG51bGwsMCl9cmV0dXJuKGQuY2FsY3x8ZC5jYWxjSWZBdXRvcmFuZ2UmJlYpJiYoZC5jbGVhckNhbGM9ITApLChkLmNhbGN8fGQucGxvdHx8ZC5jYWxjSWZBdXRvcmFuZ2UpJiYoZC5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6ZCx1bmRvaXQ6dixyZWRvaXQ6bSx0cmFjZXM6cixldmVudERhdGE6dy5leHRlbmREZWVwTm9BcnJheXMoW10sW20scl0pfX1mdW5jdGlvbiB2KHQsZSl7ZnVuY3Rpb24gcih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHZvaWQgdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCxuKX0pO2lmKCEodCBpbiBlfHxSLmhhc1BhcmVudChlLHQpKSl7dmFyIGk9dy5uZXN0ZWRQcm9wZXJ0eShsLHQpO3QgaW4geHx8KHhbdF09cChpLmdldCgpKSksdm9pZCAwIT09biYmaS5zZXQobil9fWZ1bmN0aW9uIG4oZSxyKXtpZighdy5pc1BsYWluT2JqZWN0KGUpKXJldHVybiExO3ZhciBuPWVbcisicmVmIl18fHIsaT1fLkF4ZXMuZ2V0RnJvbUlkKHQsbik7cmV0dXJuIGl8fG4uY2hhckF0KDApIT09cnx8KGk9Xy5BeGVzLmdldEZyb21JZCh0LHIpKSwoaXx8e30pLmF1dG9yYW5nZX1mdW5jdGlvbiBpKHQpe3ZhciBlPUgubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiBNW2VdPTEsZX12YXIgYSxvLHMsbD10LmxheW91dCxjPXQuX2Z1bGxMYXlvdXQsdT1PYmplY3Qua2V5cyhlKSxmPV8uQXhlcy5saXN0KHQpLGg9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKylpZigwPT09dVtvXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe3ZhciBkPWZbc10uX2lkLnN1YnN0cigxKSxtPWQuaW5kZXhPZigic2NlbmUiKSE9PS0xP2QrIi4iOiIiLHY9dVtvXS5yZXBsYWNlKCJhbGxheGVzIixtK2Zbc10uX25hbWUpO2Vbdl18fChlW3ZdPWVbdVtvXV0pfWRlbGV0ZSBlW3Vbb11dfXZhciBnLHk9ai5sYXlvdXRGbGFncygpLGI9e30seD17fSxNPXt9O2Zvcih2YXIgVCBpbiBlKXtpZihSLmhhc1BhcmVudChlLFQpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK1QrImFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgUz13Lm5lc3RlZFByb3BlcnR5KGwsVCksTD1lW1RdLEM9Uy5wYXJ0cy5sZW5ndGgsST0ic3RyaW5nIj09dHlwZW9mIFMucGFydHNbQy0xXT9DLTE6Qy0yLEQ9Uy5wYXJ0c1tJXSxQPVMucGFydHNbSS0xXSsiLiIrRCx6PVMucGFydHMuc2xpY2UoMCxJKS5qb2luKCIuIiksRj13Lm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHopLmdldCgpLEI9dy5uZXN0ZWRQcm9wZXJ0eShjLHopLmdldCgpLFU9Uy5nZXQoKTtpZih2b2lkIDAhPT1MKXtiW1RdPUwseFtUXT0icmV2ZXJzZSI9PT1EP0w6cChVKTt2YXIgVj1BLmdldExheW91dFZhbE9iamVjdChjLFMucGFydHMpO2lmKFYmJlYuaW1wbGllZEVkaXRzJiZudWxsIT09TClmb3IodmFyIHEgaW4gVi5pbXBsaWVkRWRpdHMpcih3LnJlbGF0aXZlQXR0cihULHEpLFYuaW1wbGllZEVkaXRzW3FdKTtpZihbIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihUKSE9PS0xJiZudWxsPT09TCljW1RdPXQuX2luaXRpYWxBdXRvU2l6ZVtUXTtlbHNlIGlmKFAubWF0Y2goL15beHl6XWF4aXNbMC05XSpcLnJhbmdlKFxbWzB8MV1cXSk/JC8pKWkoUCksdy5uZXN0ZWRQcm9wZXJ0eShjLHorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTtlbHNlIGlmKFAubWF0Y2goL15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvKSl7aShQKSx3Lm5lc3RlZFByb3BlcnR5KGMseisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBHPXcubmVzdGVkUHJvcGVydHkoYyx6KS5nZXQoKTtHLl9pbnB1dERvbWFpbiYmKEcuX2lucHV0LmRvbWFpbj1HLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIFAubWF0Y2goL15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvKSYmdy5uZXN0ZWRQcm9wZXJ0eShjLHorIi5faW5wdXREb21haW4iKS5zZXQobnVsbCk7aWYoInR5cGUiPT09RCl7dmFyIFk9RixYPSJsaW5lYXIiPT09Qi50eXBlJiYibG9nIj09PUwsVz0ibG9nIj09PUIudHlwZSYmImxpbmVhciI9PT1MO2lmKFh8fFcpe2lmKFkmJlkucmFuZ2UpaWYoQi5hdXRvcmFuZ2UpWCYmKFkucmFuZ2U9WS5yYW5nZVsxXT5ZLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBaPVkucmFuZ2VbMF0sSj1ZLnJhbmdlWzFdO1g/KFo8PTAmJko8PTAmJnIoeisiLmF1dG9yYW5nZSIsITApLFo8PTA/Wj1KLzFlNjpKPD0wJiYoSj1aLzFlNikscih6KyIucmFuZ2VbMF0iLE1hdGgubG9nKFopL01hdGguTE4xMCkscih6KyIucmFuZ2VbMV0iLE1hdGgubG9nKEopL01hdGguTE4xMCkpOihyKHorIi5yYW5nZVswXSIsTWF0aC5wb3coMTAsWikpLHIoeisiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxKKSkpfWVsc2Ugcih6KyIuYXV0b3JhbmdlIiwhMCk7ay5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsQixMLHIpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxCLEwscil9ZWxzZSByKHorIi5hdXRvcmFuZ2UiLCEwKSxyKHorIi5yYW5nZSIsbnVsbCk7dy5uZXN0ZWRQcm9wZXJ0eShjLHorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEQubWF0Y2goTi5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgSz13Lm5lc3RlZFByb3BlcnR5KGMsVCkuZ2V0KCksUT0oTHx8e30pLnR5cGU7USYmIi0iIT09UXx8KFE9ImxpbmVhciIpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEssUSxyKSxrLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsSyxRLHIpfXZhciAkPU8uY29udGFpbmVyQXJyYXlNYXRjaChUKTtpZigkKXthPSQuYXJyYXksbz0kLmluZGV4O3ZhciB0dD0kLnByb3BlcnR5LGV0PXcubmVzdGVkUHJvcGVydHkobCxhKSxydD0oZXR8fFtdKVtvXXx8e30sbnQ9cnQsaXQ9Vnx8e2VkaXRUeXBlOiJjYWxjIn0sYXQ9aXQuZWRpdFR5cGUuaW5kZXhPZigiY2FsY0lmQXV0b3JhbmdlIikhPT0tMTsiIj09PW8/KGF0P3kuY2FsYz0hMDpqLnVwZGF0ZSh5LGl0KSxhdD0hMSk6IiI9PT10dCYmKG50PUwsTy5pc0FkZFZhbChMKT94W1RdPW51bGw6Ty5pc1JlbW92ZVZhbChMKT8oeFtUXT1ydCxudD1ydCk6dy53YXJuKCJ1bnJlY29nbml6ZWQgZnVsbCBvYmplY3QgdmFsdWUiLGUpKSxhdCYmKG4obnQsIngiKXx8bihudCwieSIpKT95LmNhbGM9ITA6ai51cGRhdGUoeSxpdCksaFthXXx8KGhbYV09e30pO3ZhciBvdD1oW2FdW29dO290fHwob3Q9aFthXVtvXT17fSksb3RbdHRdPUwsZGVsZXRlIGVbVF19ZWxzZSJyZXZlcnNlIj09PUQ/KEYucmFuZ2U/Ri5yYW5nZS5yZXZlcnNlKCk6KHIoeisiLmF1dG9yYW5nZSIsITApLEYucmFuZ2U9WzEsMF0pLEIuYXV0b3JhbmdlP3kuY2FsYz0hMDp5LnBsb3Q9ITApOigoIWMuX2hhcygiZ2wyZCIpfHwiZHJhZ21vZGUiIT09VHx8Imxhc3NvIiE9PUwmJiJzZWxlY3QiIT09THx8Imxhc3NvIj09PVV8fCJzZWxlY3QiPT09VSkmJlY/ai51cGRhdGUoeSxWKTp5LmNhbGM9ITAsUy5zZXQoTCkpfX1mb3IoYSBpbiBoKXtPLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsdy5uZXN0ZWRQcm9wZXJ0eShsLGEpLGhbYV0seSl8fCh5LnBsb3Q9ITApfXZhciBzdD1jLl9heGlzQ29uc3RyYWludEdyb3Vwcztmb3IoZyBpbiBNKWZvcihvPTA7bzxzdC5sZW5ndGg7bysrKXt2YXIgbHQ9c3Rbb107aWYobHRbZ10pe3kuY2FsYz0hMDtmb3IodmFyIGN0IGluIGx0KU1bY3RdfHwoSC5nZXRGcm9tSWQodCxjdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX19dmFyIHV0PWMud2lkdGgsZnQ9Yy5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZFLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGMpLChlLmhlaWdodHx8ZS53aWR0aHx8Yy53aWR0aCE9PXV0fHxjLmhlaWdodCE9PWZ0KSYmKHkuY2FsYz0hMCksKHkucGxvdHx8eS5jYWxjKSYmKHkubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6eSx1bmRvaXQ6eCxyZWRvaXQ6YixldmVudERhdGE6dy5leHRlbmREZWVwKHt9LGIpfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXkuc2VsZWN0KHQpLHI9dC5fZnVsbExheW91dDtpZihyLl9jb250YWluZXI9ZS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBuPVtdO3kuc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJm4ucHVzaCh0aGlzLmlkLnNwbGl0KCItIilbMV0pfSksci5fdWlkPXcucmFuZHN0cihuKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIoUC5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwidG9wZGVmcy0iK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX2JnTGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmdsYXllciIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImRyYWdsYXllciIsITApO3ZhciBpPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWJlbG93IiwhMCk7ci5faW1hZ2VMb3dlckxheWVyPWkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1pLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJjYXJ0ZXNpYW5sYXllciIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXJuYXJ5bGF5ZXIiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnZW9sYXllciIsITApLHIuX3BpZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBpZWxheWVyIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2xpbWFnZXMiLCEwKTt2YXIgYT1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5faW5mb2xheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZm9sYXllciIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJtZW51bGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9dmFyIHk9dCgiZDMiKSxiPXQoImZhc3QtaXNudW1lcmljIikseD10KCJoYXMtaG92ZXIiKSxfPXQoIi4uL3Bsb3RseSIpLHc9dCgiLi4vbGliIiksTT10KCIuLi9saWIvZXZlbnRzIiksVD10KCIuLi9saWIvcXVldWUiKSxrPXQoIi4uL3JlZ2lzdHJ5IiksQT10KCIuL3Bsb3Rfc2NoZW1hIiksRT10KCIuLi9wbG90cy9wbG90cyIpLFM9dCgiLi4vcGxvdHMvcG9sYXIiKSxMPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLEM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksST10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksRD10KCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLFA9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx6PXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLE89dCgiLi9tYW5hZ2VfYXJyYXlzIiksUj10KCIuL2hlbHBlcnMiKSxGPXQoIi4vc3Vicm91dGluZXMiKSxqPXQoIi4vZWRpdF90eXBlcyIpLE49dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLEI9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksVT1CLmVuZm9yY2UsVj1CLmNsZWFuLEg9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7Xy5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtpZihtKXJldHVybiBfLmFkZEZyYW1lcyh0LG0pfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGU9eC5fYmFzZVBsb3RNb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmRyYXdGcmFtZXdvcmsmJmVbcl0uZHJhd0ZyYW1ld29yayh0KTtyZXR1cm4gdy5zeW5jT3JBc3luYyhbRi5sYXlvdXRTdHlsZXNdLHQpfWZ1bmN0aW9uIGwoKXt2YXIgZSxyLG4saT10LmNhbGNkYXRhO2ZvcihrLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KSxlPTA7ZTxpLmxlbmd0aDtlKyspcj1pW2VdLG49clswXS50cmFjZSxuLnZpc2libGU9PT0hMCYmbi5fbW9kdWxlLmNvbG9yYmFyP24uX21vZHVsZS5jb2xvcmJhcih0LHIpOkUuYXV0b01hcmdpbih0LCJjYiIrbi51aWQpO3JldHVybiBFLmRvQXV0b01hcmdpbih0KSxFLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gYygpe2lmKEpTT04uc3RyaW5naWZ5KHguX3NpemUpIT09UylyZXR1cm4gdy5zeW5jT3JBc3luYyhbbCxGLmxheW91dFN0eWxlc10sdCl9ZnVuY3Rpb24gdSgpe2lmKCFUKXJldHVybiB2b2lkIFUodCk7dmFyIGUscixuLGk9RS5nZXRTdWJwbG90SWRzKHgsImNhcnRlc2lhbiIpLGE9eC5fbW9kdWxlcyxvPVtdO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspdy5wdXNoVW5pcXVlKG8sYVtuXS5zZXRQb3NpdGlvbnMpO2lmKG8ubGVuZ3RoKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKGU9eC5fcGxvdHNbaVtyXV0sbj0wO248by5sZW5ndGg7bisrKW9bbl0odCxlKTtyZXR1cm4gRC5jYWxjKHQpLHcuc3luY09yQXN5bmMoW2suZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksay5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLGYsay5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiY2FsY0F1dG9yYW5nZSIpXSx0KX1mdW5jdGlvbiBmKCl7aWYoIXQuX3RyYW5zaXRpb25pbmcpe2Zvcih2YXIgZT1fLkF4ZXMubGlzdCh0LCIiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07Vih0LG4pLF8uQXhlcy5kb0F1dG9SYW5nZShuKX1VKHQpLGImJl8uQXhlcy5zYXZlUmFuZ2VJbml0aWFsKHQpfX1mdW5jdGlvbiBoKCl7cmV0dXJuIF8uQXhlcy5kb1RpY2tzKHQsInJlZHJhdyIpfWZ1bmN0aW9uIGQoKXt2YXIgZSxyPXQuY2FsY2RhdGEsbj14Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLnJhbmdlc2xpZGVyLWNvbnRhaW5lciIpO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV1bMF0udHJhY2UsYT1pLnZpc2libGU9PT0hMCxvPWkudWlkO2lmKCFhfHwhay50cmFjZUlzKGksIjJkTWFwIikpe3ZhciBzPSIuaG0iK28rIiwuY29udG91ciIrbysiLCNjbGlwIitvO3guX3BhcGVyLnNlbGVjdEFsbChzKS5yZW1vdmUoKSxuLnNlbGVjdEFsbChzKS5yZW1vdmUoKX1hJiZpLl9tb2R1bGUuY29sb3JiYXJ8fHguX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrbykucmVtb3ZlKCl9dmFyIGw9eC5fYmFzZVBsb3RNb2R1bGVzO2ZvcihlPTA7ZTxsLmxlbmd0aDtlKyspbFtlXS5wbG90KHQpO3ZhciBjPXguX3BhcGVyLnNlbGVjdEFsbCgiLmxheWVyLXN1YnBsb3QiKTtyZXR1cm4geC5fc2hhcGVTdWJwbG90TGF5ZXJzPWMuc2VsZWN0QWxsKCIuc2hhcGVsYXllciIpLEUuc3R5bGUodCksay5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCksRS5hZGRMaW5rcyh0KSx4Ll9yZXBsb3R0aW5nPSExLEUucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBwKCl7ay5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpKHQpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGsuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgic2xpZGVycyIsImRyYXciKSh0KSxrLmdldENvbXBvbmVudE1ldGhvZCgidXBkYXRlbWVudXMiLCJkcmF3IikodCl9dmFyIG07aWYodD13LmdldEdyYXBoRGl2KHQpLE0uaW5pdCh0KSx3LmlzUGxhaW5PYmplY3QoZSkpe3ZhciB2PWU7ZT12LmRhdGEscj12LmxheW91dCxuPXYuY29uZmlnLG09di5mcmFtZXN9aWYoTS50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlcGxvdCIsW2UscixuXSk9PT0hMSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxyfHx3LmlzUGxvdERpdih0KXx8dy53YXJuKCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIix0KSxhKHQsbikscnx8KHI9e30pLHkuc2VsZWN0KHQpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksQy5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcyl8fCh0Ll9wcm9taXNlcz1bXSk7dmFyIGI9MD09PSh0LmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZSk7aWYoQXJyYXkuaXNBcnJheShlKSYmKFIuY2xlYW5EYXRhKGUsdC5kYXRhKSxiP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWJ8fCh0LmxheW91dD1SLmNsZWFuTGF5b3V0KHIpKSx0Ll9kcmFnZ2luZyYmIXQuX3RyYW5zaXRpb25pbmcpcmV0dXJuIHQuX3JlcGxvdFBlbmRpbmc9ITAsUHJvbWlzZS5yZWplY3QoKTt0Ll9yZXBsb3RQZW5kaW5nPSExLEUuc3VwcGx5RGVmYXVsdHModCk7dmFyIHg9dC5fZnVsbExheW91dDtpZihlJiZlWzBdJiZlWzBdLnIpcmV0dXJuIG8odCxlLHIpO3guX3JlcGxvdHRpbmc9ITAsYiYmZyh0KSx0LmZyYW1ld29yayE9PWcmJih0LmZyYW1ld29yaz1nLGcodCkpLEMuaW5pdEdyYWRpZW50cyh0KSxiJiZfLkF4ZXMuc2F2ZVNob3dTcGlrZUluaXRpYWwodCk7dmFyIFQ9IXQuY2FsY2RhdGF8fHQuY2FsY2RhdGEubGVuZ3RoIT09KHQuX2Z1bGxEYXRhfHxbXSkubGVuZ3RoO1QmJkUuZG9DYWxjZGF0YSh0KTtmb3IodmFyIEE9MDtBPHQuY2FsY2RhdGEubGVuZ3RoO0ErKyl0LmNhbGNkYXRhW0FdWzBdLnRyYWNlPXQuX2Z1bGxEYXRhW0FdO3ZhciBTPUpTT04uc3RyaW5naWZ5KHguX3NpemUpLEk9W0UucHJldmlvdXNQcm9taXNlcyxpLHMsbCxjLHUsRi5sYXlvdXRTdHlsZXMsaCxkLHAsTCxFLnJlaG92ZXIsRS5wcmV2aW91c1Byb21pc2VzXSxQPXcuc3luY09yQXN5bmMoSSx0KTtyZXR1cm4gUCYmUC50aGVufHwoUD1Qcm9taXNlLnJlc29sdmUoKSksUC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X2FmdGVycGxvdCIpLHR9KX0sXy5yZWRyYXc9ZnVuY3Rpb24odCl7aWYodD13LmdldEdyYXBoRGl2KHQpLCF3LmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTtyZXR1cm4gUi5jbGVhbkRhdGEodC5kYXRhLHQuZGF0YSksUi5jbGVhbkxheW91dCh0LmxheW91dCksdC5jYWxjZGF0YT12b2lkIDAsXy5wbG90KHQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVkcmF3IiksdH0pfSxfLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQ9dy5nZXRHcmFwaERpdih0KSxFLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8e30sdC5fZnVsbExheW91dHx8e30pLEUucHVyZ2UodCksXy5wbG90KHQsZSxyLG4pfSxfLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUscixuLGkpe2U9dy5nZXRHcmFwaERpdihlKTt2YXIgYT1kKGUscixuLGksZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3BsaWNlKDAsdC5sZW5ndGgtZSl9KSxvPV8ucmVkcmF3KGUpLHM9W2UsYS51cGRhdGUsbixhLm1heFBvaW50c107cmV0dXJuIFQuYWRkKGUsXy5wcmVwZW5kVHJhY2VzLHMsdCxhcmd1bWVudHMpLG99LF8ucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUscixuLGkpe2U9dy5nZXRHcmFwaERpdihlKTt2YXIgYT1kKGUscixuLGksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb25jYXQodCl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3BsaWNlKGUsdC5sZW5ndGgpfSksbz1fLnJlZHJhdyhlKSxzPVtlLGEudXBkYXRlLG4sYS5tYXhQb2ludHNdO3JldHVybiBULmFkZChlLF8uZXh0ZW5kVHJhY2VzLHMsdCxhcmd1bWVudHMpLG99LF8uYWRkVHJhY2VzPWZ1bmN0aW9uIHQoZSxyLG4pe2U9dy5nZXRHcmFwaERpdihlKTt2YXIgaSxhLG89W10scz1fLmRlbGV0ZVRyYWNlcyxsPXQsZj1bZSxvXSxoPVtlLHJdO2Zvcih1KGUscixuKSxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHcuZXh0ZW5kRmxhdCh7fSx0KX0pLFIuY2xlYW5EYXRhKHIsZS5kYXRhKSxpPTA7aTxyLmxlbmd0aDtpKyspZS5kYXRhLnB1c2gocltpXSk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvLnB1c2goLXIubGVuZ3RoK2kpO2lmKHZvaWQgMD09PW4pcmV0dXJuIGE9Xy5yZWRyYXcoZSksVC5hZGQoZSxzLGYsbCxoKSxhO0FycmF5LmlzQXJyYXkobil8fChuPVtuXSk7dHJ5e2MoZSxvLG4pfWNhdGNoKHQpe3Rocm93IGUuZGF0YS5zcGxpY2UoZS5kYXRhLmxlbmd0aC1yLmxlbmd0aCxyLmxlbmd0aCksdH1yZXR1cm4gVC5zdGFydFNlcXVlbmNlKGUpLFQuYWRkKGUscyxmLGwsaCksYT1fLm1vdmVUcmFjZXMoZSxvLG4pLFQuc3RvcFNlcXVlbmNlKGUpLGF9LF8uZGVsZXRlVHJhY2VzPWZ1bmN0aW9uIHQoZSxyKXtlPXcuZ2V0R3JhcGhEaXYoZSk7dmFyIG4saSxhPVtdLG89Xy5hZGRUcmFjZXMsYz10LHU9W2UsYSxyXSxmPVtlLHJdO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy4iKTtmb3IoQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxsKGUsciwiaW5kaWNlcyIpLHI9cyhyLGUuZGF0YS5sZW5ndGgtMSksci5zb3J0KHcuc29ydGVyRGVzKSxuPTA7bjxyLmxlbmd0aDtuKz0xKWk9ZS5kYXRhLnNwbGljZShyW25dLDEpWzBdLGEucHVzaChpKTt2YXIgaD1fLnJlZHJhdyhlKTtyZXR1cm4gVC5hZGQoZSxvLHUsYyxmKSxofSxfLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLHIsbil7ZT13LmdldEdyYXBoRGl2KGUpO3ZhciBpLGE9W10sbz1bXSxsPXQsdT10LGY9W2UsbixyXSxoPVtlLHIsbl07aWYoYyhlLHIsbikscj1BcnJheS5pc0FycmF5KHIpP3I6W3JdLHZvaWQgMD09PW4pZm9yKG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW4ucHVzaCgtci5sZW5ndGgraSk7Zm9yKG49QXJyYXkuaXNBcnJheShuKT9uOltuXSxyPXMocixlLmRhdGEubGVuZ3RoLTEpLG49cyhuLGUuZGF0YS5sZW5ndGgtMSksaT0wO2k8ZS5kYXRhLmxlbmd0aDtpKyspci5pbmRleE9mKGkpPT09LTEmJmEucHVzaChlLmRhdGFbaV0pO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspby5wdXNoKHtuZXdJbmRleDpuW2ldLHRyYWNlOmUuZGF0YVtyW2ldXX0pO2ZvcihvLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uZXdJbmRleC1lLm5ld0luZGV4fSksCmk9MDtpPG8ubGVuZ3RoO2krPTEpYS5zcGxpY2Uob1tpXS5uZXdJbmRleCwwLG9baV0udHJhY2UpO2UuZGF0YT1hO3ZhciBkPV8ucmVkcmF3KGUpO3JldHVybiBULmFkZChlLGwsZix1LGgpLGR9LF8ucmVzdHlsZT1mdW5jdGlvbiB0KGUscixuLGkpe2U9dy5nZXRHcmFwaERpdihlKSxSLmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgcilhW3JdPW47ZWxzZXtpZighdy5pc1BsYWluT2JqZWN0KHIpKXJldHVybiB3Lndhcm4oIlJlc3R5bGUgZmFpbC4iLHIsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9dy5leHRlbmRGbGF0KHt9LHIpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIG89Ui5jb2VyY2VUcmFjZUluZGljZXMoZSxpKSxzPW0oZSxhLG8pLGw9cy5mbGFncztsLmNsZWFyQ2FsYyYmKGUuY2FsY2RhdGE9dm9pZCAwKSxsLmNsZWFyQXhpc1R5cGVzJiZSLmNsZWFyQXhpc1R5cGVzKGUsbyx7fSk7dmFyIGM9W107bC5mdWxsUmVwbG90P2MucHVzaChfLnBsb3QpOihjLnB1c2goRS5wcmV2aW91c1Byb21pc2VzKSxFLnN1cHBseURlZmF1bHRzKGUpLGwuc3R5bGUmJmMucHVzaChGLmRvVHJhY2VTdHlsZSksbC5jb2xvcmJhcnMmJmMucHVzaChGLmRvQ29sb3JCYXJzKSksYy5wdXNoKEUucmVob3ZlciksVC5hZGQoZSx0LFtlLHMudW5kb2l0LHMudHJhY2VzXSx0LFtlLHMucmVkb2l0LHMudHJhY2VzXSk7dmFyIHU9dy5zeW5jT3JBc3luYyhjLGUpO3JldHVybiB1JiZ1LnRoZW58fCh1PVByb21pc2UucmVzb2x2ZSgpKSx1LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfcmVzdHlsZSIscy5ldmVudERhdGEpLGV9KX0sXy5yZWxheW91dD1mdW5jdGlvbiB0KGUscixuKXtpZihlPXcuZ2V0R3JhcGhEaXYoZSksUi5jbGVhclByb21pc2VRdWV1ZShlKSxlLmZyYW1ld29yayYmZS5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpO3ZhciBpPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgcilpW3JdPW47ZWxzZXtpZighdy5pc1BsYWluT2JqZWN0KHIpKXJldHVybiB3Lndhcm4oIlJlbGF5b3V0IGZhaWwuIixyLG4pLFByb21pc2UucmVqZWN0KCk7aT13LmV4dGVuZEZsYXQoe30scil9T2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKTt2YXIgYT12KGUsaSksbz1hLmZsYWdzO28uY2FsYyYmKGUuY2FsY2RhdGE9dm9pZCAwKTt2YXIgcz1bRS5wcmV2aW91c1Byb21pc2VzXTtvLmxheW91dFJlcGxvdD9zLnB1c2goRi5sYXlvdXRSZXBsb3QpOk9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKEUuc3VwcGx5RGVmYXVsdHMoZSksby5sZWdlbmQmJnMucHVzaChGLmRvTGVnZW5kKSxvLmxheW91dHN0eWxlJiZzLnB1c2goRi5sYXlvdXRTdHlsZXMpLG8udGlja3MmJnMucHVzaChGLmRvVGlja3NSZWxheW91dCksby5tb2RlYmFyJiZzLnB1c2goRi5kb01vZGVCYXIpLG8uY2FtZXJhJiZzLnB1c2goRi5kb0NhbWVyYSkpLHMucHVzaChFLnJlaG92ZXIpLFQuYWRkKGUsdCxbZSxhLnVuZG9pdF0sdCxbZSxhLnJlZG9pdF0pO3ZhciBsPXcuc3luY09yQXN5bmMocyxlKTtyZXR1cm4gbCYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUoZSkpLGwudGhlbihmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV9yZWxheW91dCIsYS5ldmVudERhdGEpLGV9KX0sXy51cGRhdGU9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihlPXcuZ2V0R3JhcGhEaXYoZSksUi5jbGVhclByb21pc2VRdWV1ZShlKSxlLmZyYW1ld29yayYmZS5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpO3cuaXNQbGFpbk9iamVjdChyKXx8KHI9e30pLHcuaXNQbGFpbk9iamVjdChuKXx8KG49e30pLE9iamVjdC5rZXlzKHIpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCksT2JqZWN0LmtleXMobikubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKTt2YXIgYT1SLmNvZXJjZVRyYWNlSW5kaWNlcyhlLGkpLG89bShlLHcuZXh0ZW5kRmxhdCh7fSxyKSxhKSxzPW8uZmxhZ3MsbD12KGUsdy5leHRlbmRGbGF0KHt9LG4pKSxjPWwuZmxhZ3M7KHMuY2xlYXJDYWxjfHxjLmNhbGMpJiYoZS5jYWxjZGF0YT12b2lkIDApLHMuY2xlYXJBeGlzVHlwZXMmJlIuY2xlYXJBeGlzVHlwZXMoZSxhLG4pO3ZhciB1PVtdO2lmKHMuZnVsbFJlcGxvdCYmYy5sYXlvdXRSZXBsb3Qpe3ZhciBmPWUuZGF0YSxoPWUubGF5b3V0O2UuZGF0YT12b2lkIDAsZS5sYXlvdXQ9dm9pZCAwLHUucHVzaChmdW5jdGlvbigpe3JldHVybiBfLnBsb3QoZSxmLGgpfSl9ZWxzZSBzLmZ1bGxSZXBsb3Q/dS5wdXNoKF8ucGxvdCk6Yy5sYXlvdXRSZXBsb3Q/dS5wdXNoKEYubGF5b3V0UmVwbG90KToodS5wdXNoKEUucHJldmlvdXNQcm9taXNlcyksRS5zdXBwbHlEZWZhdWx0cyhlKSxzLnN0eWxlJiZ1LnB1c2goRi5kb1RyYWNlU3R5bGUpLHMuY29sb3JiYXJzJiZ1LnB1c2goRi5kb0NvbG9yQmFycyksYy5sZWdlbmQmJnUucHVzaChGLmRvTGVnZW5kKSxjLmxheW91dHN0eWxlJiZ1LnB1c2goRi5sYXlvdXRTdHlsZXMpLGMudGlja3MmJnUucHVzaChGLmRvVGlja3NSZWxheW91dCksYy5tb2RlYmFyJiZ1LnB1c2goRi5kb01vZGVCYXIpLGMuY2FtZXJhJiZ1LnB1c2goRi5kb0NhbWVyYSkpO3UucHVzaChFLnJlaG92ZXIpLFQuYWRkKGUsdCxbZSxvLnVuZG9pdCxsLnVuZG9pdCxvLnRyYWNlc10sdCxbZSxvLnJlZG9pdCxsLnJlZG9pdCxvLnRyYWNlc10pO3ZhciBkPXcuc3luY09yQXN5bmModSxlKTtyZXR1cm4gZCYmZC50aGVufHwoZD1Qcm9taXNlLnJlc29sdmUoZSkpLGQudGhlbihmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOm8uZXZlbnREYXRhLGxheW91dDpsLmV2ZW50RGF0YX0pLGV9KX0sXy5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Q+PXMubGVuZ3RoP3NbMF06c1t0XTpzfWZ1bmN0aW9uIGkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/dD49bC5sZW5ndGg/bFswXTpsW3RdOmx9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCYmKytyPT09ZSlyZXR1cm4gdCgpfX1pZih0PXcuZ2V0R3JhcGhEaXYodCksIXcuaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG89dC5fdHJhbnNpdGlvbkRhdGE7by5fZnJhbWVRdWV1ZXx8KG8uX2ZyYW1lUXVldWU9W10pLHI9RS5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKTt2YXIgcz1yLnRyYW5zaXRpb24sbD1yLmZyYW1lO3JldHVybiB2b2lkIDA9PT1vLl9mcmFtZVdhaXRpbmdDbnQmJihvLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24obCxjKXtmdW5jdGlvbiB1KCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoby5fYW5pbWF0aW9uUmFmKSxvLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBmKCl7by5fY3VycmVudEZyYW1lJiZvLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmby5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1vLl9jdXJyZW50RnJhbWU9by5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG8uX2xhc3RGcmFtZUF0PURhdGUubm93KCksby5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixFLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsUi5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdSgpfWZ1bmN0aW9uIGgoKXt0LmVtaXQoInBsb3RseV9hbmltYXRpbmciKSxvLl9sYXN0RnJhbWVBdD0tKDEvMCksby5fdGltZVRvTmV4dD0wLG8uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG8uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7by5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1vLl9sYXN0RnJhbWVBdD5vLl90aW1lVG9OZXh0JiZmKCl9O2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Y+PXMubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9c1t2XTp0LnRyYW5zaXRpb25PcHRzPXNbMF06dC50cmFuc2l0aW9uT3B0cz1zLHYrKyx0fXZhciBwLG0sdj0wLGc9W10seT12b2lkIDA9PT1lfHxudWxsPT09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoeXx8Ynx8IXcuaXNQbGFpbk9iamVjdChlKSl7aWYoeXx8WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlKSE9PS0xKWZvcihwPTA7cDxvLl9mcmFtZXMubGVuZ3RoO3ArKykobT1vLl9mcmFtZXNbcF0pJiYoeXx8U3RyaW5nKG0uZ3JvdXApPT09U3RyaW5nKGUpKSYmZy5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKG0ubmFtZSksZGF0YTpkKHtuYW1lOm0ubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciB4PWVbcF07WyJudW1iZXIiLCJzdHJpbmciXS5pbmRleE9mKHR5cGVvZiB4KSE9PS0xPyh4PVN0cmluZyh4KSxnLnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTp4LGRhdGE6ZCh7bmFtZTp4fSl9KSk6dy5pc1BsYWluT2JqZWN0KHgpJiZnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHcuZXh0ZW5kRmxhdCh7fSx4KSl9KX19ZWxzZSBnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHcuZXh0ZW5kRmxhdCh7fSxlKSl9KTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmIW8uX2ZyYW1lSGFzaFttLmRhdGEubmFtZV0pcmV0dXJuIHcud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK20uZGF0YS5uYW1lKyciJyksdm9pZCBjKCk7WyJuZXh0IiwiaW1tZWRpYXRlIl0uaW5kZXhPZihyLm1vZGUpIT09LTEmJmZ1bmN0aW9uKCl7aWYoMCE9PW8uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO28uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9by5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJmcucmV2ZXJzZSgpO3ZhciBfPXQuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZihfJiZyLmZyb21jdXJyZW50KXt2YXIgTT0tMTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmbS5uYW1lPT09Xyl7TT1wO2JyZWFrfWlmKE0+MCYmTTxnLmxlbmd0aC0xKXt2YXIgVD1bXTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKW09Z1twXSwoImJ5bmFtZSIhPT1nW3BdLnR5cGV8fHA+TSkmJlQucHVzaChtKTtnPVR9fWcubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIHU7dT0iYnluYW1lIj09PWVbc10udHlwZT9FLmNvbXB1dGVGcmFtZSh0LGVbc10ubmFtZSk6ZVtzXS5kYXRhO3ZhciBmPWkocyksZD1uKHMpO2QuZHVyYXRpb249TWF0aC5taW4oZC5kdXJhdGlvbixmLmR1cmF0aW9uKTt2YXIgcD17ZnJhbWU6dSxuYW1lOmVbc10ubmFtZSxmcmFtZU9wdHM6Zix0cmFuc2l0aW9uT3B0czpkfTtzPT09ZS5sZW5ndGgtMSYmKHAub25Db21wbGV0ZT1hKGwsMikscC5vbkludGVycnVwdD1jKSxvLl9mcmFtZVF1ZXVlLnB1c2gocCl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihvLl9sYXN0RnJhbWVBdD0tKDEvMCkpLG8uX2FuaW1hdGlvblJhZnx8aCgpfX0oZyk6KHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksbCgpKX0pfSxfLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7dD13LmdldEdyYXBoRGl2KHQpO3ZhciBuPTA7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCF3LmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgaSxhLG8scyxsPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zIitlKTt2YXIgdT1sLmxlbmd0aCsyKmUubGVuZ3RoLGY9W107Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSlpZih3LmlzUGxhaW5PYmplY3QoZVtpXSkpe3ZhciBoPShjW2VbaV0ubmFtZV18fHt9KS5uYW1lLGQ9ZVtpXS5uYW1lO2gmJmQmJiJudW1iZXIiPT10eXBlb2YgZCYmY1toXSYmKG4rKyx3Lndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgIicrY1toXS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK2grJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSxuPjUmJncud2FybigiYWRkRnJhbWVzOiBUaGlzIEFQSSBjYWxsIGhhcyB5aWVsZGVkIHRvbyBtYW55IHdhcm5pbmdzLiBGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLCBmdXJ0aGVyIHdhcm5pbmdzIGFib3V0IG51bWVyaWMgZnJhbWUgbmFtZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiIpKSxmLnB1c2goe2ZyYW1lOkUuc3VwcGx5RnJhbWVEZWZhdWx0cyhlW2ldKSxpbmRleDpyJiZ2b2lkIDAhPT1yW2ldJiZudWxsIT09cltpXT9yW2ldOnUraX0pfWYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmluZGV4PmUuaW5kZXg/LTE6dC5pbmRleDxlLmluZGV4PzE6MH0pO3ZhciBwPVtdLG09W10sdj1sLmxlbmd0aDtmb3IoaT1mLmxlbmd0aC0xO2k+PTA7aS0tKXtpZihhPWZbaV0uZnJhbWUsIm51bWJlciI9PXR5cGVvZiBhLm5hbWUmJncud2FybigiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzIiksIWEubmFtZSlmb3IoO2NbYS5uYW1lPSJmcmFtZSAiK3QuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYoY1thLm5hbWVdKXtmb3Iobz0wO288bC5sZW5ndGgmJihsW29dfHx7fSkubmFtZSE9PWEubmFtZTtvKyspO3AucHVzaCh7dHlwZToicmVwbGFjZSIsaW5kZXg6byx2YWx1ZTphfSksbS51bnNoaWZ0KHt0eXBlOiJyZXBsYWNlIixpbmRleDpvLHZhbHVlOmxbb119KX1lbHNlIHM9TWF0aC5tYXgoMCxNYXRoLm1pbihmW2ldLmluZGV4LHYpKSxwLnB1c2goe3R5cGU6Imluc2VydCIsaW5kZXg6cyx2YWx1ZTphfSksbS51bnNoaWZ0KHt0eXBlOiJkZWxldGUiLGluZGV4OnN9KSx2Kyt9dmFyIGc9RS5tb2RpZnlGcmFtZXMseT1FLm1vZGlmeUZyYW1lcyxiPVt0LG1dLHg9W3QscF07cmV0dXJuIFQmJlQuYWRkKHQsZyxiLHkseCksRS5tb2RpZnlGcmFtZXModCxwKX0sXy5kZWxldGVGcmFtZXM9ZnVuY3Rpb24odCxlKXtpZih0PXcuZ2V0R3JhcGhEaXYodCksIXcuaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3ZhciByLG4saT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGE9W10sbz1bXTtpZighZSlmb3IoZT1bXSxyPTA7cjxpLmxlbmd0aDtyKyspZS5wdXNoKHIpO2ZvcihlPWUuc2xpY2UoMCksZS5zb3J0KCkscj1lLmxlbmd0aC0xO3I+PTA7ci0tKW49ZVtyXSxhLnB1c2goe3R5cGU6ImRlbGV0ZSIsaW5kZXg6bn0pLG8udW5zaGlmdCh7dHlwZToiaW5zZXJ0IixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgcz1FLm1vZGlmeUZyYW1lcyxsPUUubW9kaWZ5RnJhbWVzLGM9W3Qsb10sdT1bdCxhXTtyZXR1cm4gVCYmVC5hZGQodCxzLGMsbCx1KSxFLm1vZGlmeUZyYW1lcyh0LGEpfSxfLnB1cmdlPWZ1bmN0aW9uKHQpe3Q9dy5nZXRHcmFwaERpdih0KTt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gRS5jbGVhblBsb3QoW10se30scixlKSxFLnB1cmdlKHQpLE0ucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjY0MSwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcxNiwiLi4vbGliIjo3MzUsIi4uL2xpYi9ldmVudHMiOjcyMywiLi4vbGliL3F1ZXVlIjo3NDgsIi4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuLi9wbG90bHkiOjc3NCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3ODIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjc4NCwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3ODYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6Nzg4LCIuLi9wbG90cy9wbG90cyI6ODM4LCIuLi9wbG90cy9wb2xhciI6ODQxLCIuLi9yZWdpc3RyeSI6ODUzLCIuL2VkaXRfdHlwZXMiOjc2MywiLi9oZWxwZXJzIjo3NjQsIi4vbWFuYWdlX2FycmF5cyI6NzY1LCIuL3Bsb3Rfc2NoZW1hIjo3NjgsIi4vc3Vicm91dGluZXMiOjc3MSxkMzoxMjEsImZhc3QtaXNudW1lcmljIjoxMzEsImhhcy1ob3ZlciI6Mjk0fV0sNzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3RhdGljUGxvdDohMSxlZGl0YWJsZTohMSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOiExLGFubm90YXRpb25UYWlsOiExLGFubm90YXRpb25UZXh0OiExLGF4aXNUaXRsZVRleHQ6ITEsY29sb3JiYXJQb3NpdGlvbjohMSxjb2xvcmJhclRpdGxlVGV4dDohMSxsZWdlbmRQb3NpdGlvbjohMSxsZWdlbmRUZXh0OiExLHNoYXBlUG9zaXRpb246ITEsdGl0bGVUZXh0OiExfSxhdXRvc2l6YWJsZTohMSxxdWV1ZUxlbmd0aDowLGZpbGxGcmFtZTohMSxmcmFtZU1hcmdpbnM6MCxzY3JvbGxab29tOiExLGRvdWJsZUNsaWNrOiJyZXNldCthdXRvc2l6ZSIsc2hvd1RpcHM6ITAsc2hvd0F4aXNEcmFnSGFuZGxlczohMCxzaG93QXhpc1JhbmdlRW50cnlCb3hlczohMCxzaG93TGluazohMSxzZW5kRGF0YTohMCxsaW5rVGV4dDoiRWRpdCBjaGFydCIsc2hvd1NvdXJjZXM6ITEsZGlzcGxheU1vZGVCYXI6ImhvdmVyIixtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOltdLG1vZGVCYXJCdXR0b25zVG9BZGQ6W10sbW9kZUJhckJ1dHRvbnM6ITEsZGlzcGxheWxvZ286ITAscGxvdEdsUGl4ZWxSYXRpbzoyLHNldEJhY2tncm91bmQ6InRyYW5zcGFyZW50Iix0b3BvanNvblVSTDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8iLG1hcGJveEFjY2Vzc1Rva2VuOm51bGwsbG9nZ2luZzohMSxnbG9iYWxUcmFuc2Zvcm1zOltdfX0se31dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpLGEsbz10Ll9iYXNlUGxvdE1vZHVsZXM7aWYobyl7dmFyIHM7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7aWYoaT1vW3JdLGkuYXR0clJlZ2V4JiZpLmF0dHJSZWdleC50ZXN0KGUpKXtpZihpLmxheW91dEF0dHJPdmVycmlkZXMpcmV0dXJuIGkubGF5b3V0QXR0ck92ZXJyaWRlczshcyYmaS5sYXlvdXRBdHRyaWJ1dGVzJiYocz1pLmxheW91dEF0dHJpYnV0ZXMpfXZhciBsPWkuYmFzZUxheW91dEF0dHJPdmVycmlkZXM7aWYobCYmZSBpbiBsKXJldHVybiBsW2VdfWlmKHMpcmV0dXJuIHN9dmFyIGM9dC5fbW9kdWxlcztpZihjKWZvcihyPTA7cjxjLmxlbmd0aDtyKyspaWYoKGE9Y1tyXS5sYXlvdXRBdHRyaWJ1dGVzKSYmZSBpbiBhKXJldHVybiBhW2VdO2ZvcihuIGluIHYuY29tcG9uZW50c1JlZ2lzdHJ5KWlmKGk9di5jb21wb25lbnRzUmVnaXN0cnlbbl0sIWkuc2NoZW1hJiZlPT09aS5uYW1lKXJldHVybiBpLmxheW91dEF0dHJpYnV0ZXM7cmV0dXJuIGUgaW4gYj9iW2VdOiJyYWRpYWxheGlzIj09PWV8fCJhbmd1bGFyYXhpcyI9PT1lP01bZV06TS5sYXlvdXRbZV18fCExfWZ1bmN0aW9uIGkodCxlLHIpe2lmKCF0KXJldHVybiExO2lmKHQuX2lzTGlua2VkVG9BcnJheSlpZihhKGVbcl0pKXIrKztlbHNlIGlmKHI8ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZighZy5pc1BsYWluT2JqZWN0KG4pKWJyZWFrO2lmKHQ9bixyPT09ZS5sZW5ndGgtMSlicmVhaztpZih0Ll9pc0xpbmtlZFRvQXJyYXkpe2lmKHIrKywhYShlW3JdKSlyZXR1cm4hMX1lbHNlIGlmKCJpbmZvX2FycmF5Ij09PXQudmFsVHlwZSl7cisrO3ZhciBpPWVbcl07aWYoIWEoaSl8fGk+PXQuaXRlbXMubGVuZ3RoKXJldHVybiExO3Q9dC5pdGVtc1tpXX19cmV0dXJuIHR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyOyJhcmVhIj09PXQ/KGU9e2F0dHJpYnV0ZXM6d30scj17fSk6KGU9di5tb2R1bGVzW3RdLl9tb2R1bGUscj1lLmJhc2VQbG90TW9kdWxlKTt2YXIgbj17fTtuLnR5cGU9bnVsbCxBKG4seSksQShuLGUuYXR0cmlidXRlcyksci5hdHRyaWJ1dGVzJiZBKG4sci5hdHRyaWJ1dGVzKSxuLnR5cGU9dDt2YXIgaT17bWV0YTplLm1ldGF8fHt9LGF0dHJpYnV0ZXM6dShuKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgYT17fTtBKGEsZS5sYXlvdXRBdHRyaWJ1dGVzKSxpLmxheW91dEF0dHJpYnV0ZXM9dShhKX1yZXR1cm4gaX1mdW5jdGlvbiBzKCl7dmFyIHQsZSxyPXt9O0EocixiKTtmb3IodCBpbiB2LnN1YnBsb3RzUmVnaXN0cnkpaWYoZT12LnN1YnBsb3RzUmVnaXN0cnlbdF0sZS5sYXlvdXRBdHRyaWJ1dGVzKWlmKCJjYXJ0ZXNpYW4iPT09ZS5uYW1lKXAocixlLCJ4YXhpcyIpLHAocixlLCJ5YXhpcyIpO2Vsc2V7dmFyIG49InN1YnBsb3QiPT09ZS5hdHRyP2UubmFtZTplLmF0dHI7cChyLGUsbil9cj1kKHIpO2Zvcih0IGluIHYuY29tcG9uZW50c1JlZ2lzdHJ5KXtlPXYuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3ZhciBpPWUuc2NoZW1hO2lmKGkmJihpLnN1YnBsb3RzfHxpLmxheW91dCkpe3ZhciBhPWkuc3VicGxvdHM7aWYoYSYmYS54YXhpcyYmIWEueWF4aXMpZm9yKHZhciBvIGluIGEueGF4aXMpZGVsZXRlIHIueWF4aXNbb119ZWxzZSBlLmxheW91dEF0dHJpYnV0ZXMmJm0ocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczp1KHIpfX1mdW5jdGlvbiBsKHQpe3ZhciBlPXYudHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9QSh7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyh2LmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj12LmNvbXBvbmVudHNSZWdpc3RyeVtlXTtuLnNjaGVtYSYmbi5zY2hlbWEudHJhbnNmb3JtcyYmbi5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMobi5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaChmdW5jdGlvbihlKXttKHIsbi5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pfSkse2F0dHJpYnV0ZXM6dShyKX19ZnVuY3Rpb24gYygpe3ZhciB0PXtmcmFtZXM6Zy5leHRlbmREZWVwQWxsKHt9LHgpfTtyZXR1cm4gdSh0KSx0LmZyYW1lc31mdW5jdGlvbiB1KHQpe3JldHVybiBmKHQpLGgodCksdH1mdW5jdGlvbiBmKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJue3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX1mdW5jdGlvbiBuKHQsbixpKXtyLmlzVmFsT2JqZWN0KHQpPyJkYXRhX2FycmF5Ij09PXQudmFsVHlwZT8odC5yb2xlPSJkYXRhIixpW24rInNyYyJdPWUobikpOnQuYXJyYXlPaz09PSEwJiYoaVtuKyJzcmMiXT1lKG4pKTpnLmlzUGxhaW5PYmplY3QodCkmJih0LnJvbGU9Im9iamVjdCIpfXIuY3Jhd2wodCxuKX1mdW5jdGlvbiBoKHQpe2Z1bmN0aW9uIGUodCxlLHIpe2lmKHQpe3ZhciBuPXRbU107biYmKGRlbGV0ZSB0W1NdLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QiKX19ci5jcmF3bCh0LGUpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGsodCx7cmFkaWFsYXhpczpNLnJhZGlhbGF4aXMsYW5ndWxhcmF4aXM6TS5hbmd1bGFyYXhpc30pLGsodCxNLmxheW91dCksdH1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj1nLm5lc3RlZFByb3BlcnR5KHQsciksaT1BKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aVtFXT0hMCxuLnNldChpKX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1nLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoQShuLmdldCgpfHx7fSxlKSl9dmFyIHY9dCgiLi4vcmVnaXN0cnkiKSxnPXQoIi4uL2xpYiIpLHk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGI9dCgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSx4PXQoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSxfPXQoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksdz10KCIuLi9wbG90cy9wb2xhci9hcmVhX2F0dHJpYnV0ZXMiKSxNPXQoIi4uL3Bsb3RzL3BvbGFyL2F4aXNfYXR0cmlidXRlcyIpLFQ9dCgiLi9lZGl0X3R5cGVzIiksaz1nLmV4dGVuZEZsYXQsQT1nLmV4dGVuZERlZXBBbGwsRT0iX2lzU3VicGxvdE9iaiIsUz0iX2lzTGlua2VkVG9BcnJheSIsTD1bRSxTLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ci5JU19TVUJQTE9UX09CSj1FLHIuSVNfTElOS0VEX1RPX0FSUkFZPVMsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPUwsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTt2LmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1vKGUpfSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHYudHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09bCh0KX0pLHtkZWZzOnt2YWxPYmplY3RzOmcudmFsT2JqZWN0TWV0YSxtZXRhS2V5czpMLmNvbmNhdChbImRlc2NyaXB0aW9uIiwicm9sZSIsImVkaXRUeXBlIiwiaW1wbGllZEVkaXRzIl0pLGVkaXRUeXBlOnt0cmFjZXM6VC50cmFjZXMsbGF5b3V0OlQubGF5b3V0fSxpbXBsaWVkRWRpdHM6e319LHRyYWNlczp0LGxheW91dDpzKCksdHJhbnNmb3JtczplLGZyYW1lczpjKCksYW5pbWF0aW9uOnUoXyl9fSxyLmNyYXdsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPW58fDA7aT1pfHwiIixPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl07aWYoTC5pbmRleE9mKG4pPT09LTEpe3ZhciBzPShpP2krIi4iOiIiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxnLmlzUGxhaW5PYmplY3QobykmJiJpbXBsaWVkRWRpdHMiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixvLHMpe2lmKGE9YS5zbGljZSgwLHMpLmNvbmNhdChbcl0pLGUmJigiZGF0YV9hcnJheSI9PT1lLnZhbFR5cGV8fGUuYXJyYXlPaz09PSEwKSYmISgiY29sb3JiYXIiPT09YVtzLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkpe3ZhciBsPW4oYSksYz1nLm5lc3RlZFByb3BlcnR5KHQsbCkuZ2V0KCk7QXJyYXkuaXNBcnJheShjKSYmaS5wdXNoKGwpfX1mdW5jdGlvbiBuKHQpe3JldHVybiB0LmpvaW4oIi4iKX12YXIgaT1bXSxhPVtdO2lmKHIuY3Jhd2woeSxlKSx0Ll9tb2R1bGUmJnQuX21vZHVsZS5hdHRyaWJ1dGVzJiZyLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGUpLHQudHJhbnNmb3Jtcylmb3IodmFyIG89dC50cmFuc2Zvcm1zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXSxjPWwuX21vZHVsZTtjJiYoYT1bInRyYW5zZm9ybXNbIitzKyJdIl0sci5jcmF3bChjLmF0dHJpYnV0ZXMsZSwxKSl9cmV0dXJuIHQuX2Z1bGxJbnB1dCYmdC5fZnVsbElucHV0Ll9tb2R1bGUmJnQuX2Z1bGxJbnB1dC5fbW9kdWxlLmF0dHJpYnV0ZXMmJihyLmNyYXdsKHQuX2Z1bGxJbnB1dC5fbW9kdWxlLmF0dHJpYnV0ZXMsZSksaT1nLmZpbHRlclVuaXF1ZShpKSksaX0sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLG4sbz1lWzBdLHM9MTtpZigidHJhbnNmb3JtcyI9PT1vKXtpZighQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpKXJldHVybiExO3ZhciBsPWVbMV07aWYoIWEobCl8fGw+PXQudHJhbnNmb3Jtcy5sZW5ndGgpcmV0dXJuITE7cj0odi50cmFuc2Zvcm1zUmVnaXN0cnlbdC50cmFuc2Zvcm1zW2xdLnR5cGVdfHx7fSkuYXR0cmlidXRlcyxuPXImJnJbZVsyXV0scz0zfWVsc2UgaWYoImFyZWEiPT09dC50eXBlKW49d1tvXTtlbHNle3ZhciBjPXQuX21vZHVsZTtpZihjfHwoYz0odi5tb2R1bGVzW3QudHlwZXx8eS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIWMpcmV0dXJuITE7aWYocj1jLmF0dHJpYnV0ZXMsIShuPXImJnJbb10pKXt2YXIgdT1jLmJhc2VQbG90TW9kdWxlO3UmJnUuYXR0cmlidXRlcyYmKG49dS5hdHRyaWJ1dGVzW29dKX1ufHwobj15W29dKX1yZXR1cm4gaShuLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGVbMF0pLGUsMSl9fSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6Nzc1LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NzcsIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiOjgwNCwiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyOSwiLi4vcGxvdHMvcG9sYXIvYXJlYV9hdHRyaWJ1dGVzIjo4MzksIi4uL3Bsb3RzL3BvbGFyL2F4aXNfYXR0cmlidXRlcyI6ODQwLCIuLi9yZWdpc3RyeSI6ODUzLCIuL2VkaXRfdHlwZXMiOjc2M31dLDc2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe28ucmVnaXN0ZXIodCx0Lm5hbWUsdC5jYXRlZ29yaWVzLHQubWV0YSksby5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fG8ucmVnaXN0ZXJTdWJwbG90KHQuYmFzZVBsb3RNb2R1bGUpfWZ1bmN0aW9uIGkodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPSJUcmFuc2Zvcm0gbW9kdWxlICIrdC5uYW1lLHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQudHJhbnNmb3JtLG49ImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsY1RyYW5zZm9ybTtpZighciYmIW4pdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBtaXNzaW5nIGEgKnRyYW5zZm9ybSogb3IgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZC4iKTtyJiZuJiZzLmxvZyhbZSsiIGhhcyBib3RoIGEgKnRyYW5zZm9ybSogYW5kICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiIsIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIiwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iXS5qb2luKCIgIikpLHMuaXNQbGFpbk9iamVjdCh0LmF0dHJpYnV0ZXMpfHxzLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJnMubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxvLnJlZ2lzdGVyVHJhbnNmb3JtKHQpfWZ1bmN0aW9uIGEodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO28ucmVnaXN0ZXJDb21wb25lbnQodCl9dmFyIG89dCgiLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKHIubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6bihyKTticmVhaztjYXNlInRyYW5zZm9ybSI6aShyKTticmVhaztjYXNlImNvbXBvbmVudCI6YShyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19fSx7Ii4uL2xpYiI6NzM1LCIuLi9yZWdpc3RyeSI6ODUzfV0sNzcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RseSIpLGk9dCgiLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpLmV4dGVuZEZsYXQobi5kZWZhdWx0Q29uZmlnLHQpfX0seyIuLi9saWIiOjczNSwiLi4vcGxvdGx5Ijo3NzR9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHQuX2FuY2hvckF4aXM9PT1lJiYodC5taXJyb3J8fHQuc2lkZT09PXIpfHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3J8fHQubWlycm9ycyYmdC5taXJyb3JzW2UuX2lkK3JdfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPVtdLGk9ZS5fYW5jaG9yQXhpcztpZihpKXt2YXIgYT1pLl9tYWluQXhpcztpZihuLmluZGV4T2YoYSk9PT0tMSl7bi5wdXNoKGEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXJbb10ub3ZlcmxheWluZz09PWEuX2lkJiZuLmluZGV4T2YocltvXSk9PT0tMSYmbi5wdXNoKHJbb10pfX1yZXR1cm4gbn1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEuX2FuY2hvckF4aXM7aWYobyYmaShhLG8scikpcmV0dXJuIHAuY3Jpc3BSb3VuZCh0LGEubGluZXdpZHRoKX19ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7aWYobilyZXR1cm4gcjt2YXIgbCxjPWUuX21haW5BeGlzLHU9YSh0LGMscyksZj1vKHQsdSxpKTtpZihmKXJldHVybiBmO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspaWYoc1tsXS5vdmVybGF5aW5nPT09Yy5faWQmJih1PWEodCxzW2xdLHMpLGY9byh0LHUsaSkpKXJldHVybiBmO3JldHVybiAwfXZhciBsPXQoImQzIiksYz10KCIuLi9wbG90bHkiKSx1PXQoIi4uL3JlZ2lzdHJ5IiksZj10KCIuLi9wbG90cy9wbG90cyIpLGg9dCgiLi4vbGliIiksZD10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscD10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uL2NvbXBvbmVudHMvdGl0bGVzIiksdj10KCIuLi9jb21wb25lbnRzL21vZGViYXIiKSxnPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLHk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpO3IubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBoLnN5bmNPckFzeW5jKFtmLmRvQXV0b01hcmdpbixyLmxzSW5uZXJdLHQpfSxyLmxzSW5uZXI9ZnVuY3Rpb24odCl7dmFyIGUsYT10Ll9mdWxsTGF5b3V0LG89YS5fc2l6ZSx1PW8ucCxmPWMuQXhlcy5saXN0KHQpLGg9YS5faGFzKCJjYXJ0ZXNpYW4iKTtmb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKWZbZV0uX2xpbmVwb3NpdGlvbnM9e307YS5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOmEud2lkdGgrInB4IixoZWlnaHQ6YS5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChwLnNldFNpemUsYS53aWR0aCxhLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsYS5wYXBlcl9iZ2NvbG9yKTt2YXIgbT1hLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLGc9W10sYj1bXTttLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5fcGxvdHNbdF07aWYoZS5tYWlucGxvdClyZXR1cm4gZS5iZyYmZS5iZy5yZW1vdmUoKSx2b2lkKGUuYmc9dm9pZCAwKTt2YXIgcj1lLnhheGlzLmRvbWFpbixpPWUueWF4aXMuZG9tYWluLG89W107bihyLGksYik/bz1bMF06KGcucHVzaCh0KSxiLnB1c2goW3IsaV0pKTt2YXIgcz1lLnBsb3Rncm91cC5zZWxlY3RBbGwoIi5iZyIpLmRhdGEobyk7cy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJnIiwhMCkscy5leGl0KCkucmVtb3ZlKCkscy5lYWNoKGZ1bmN0aW9uKCl7ZS5iZz1zO3ZhciB0PWUucGxvdGdyb3VwLm5vZGUoKTt0Lmluc2VydEJlZm9yZSh0aGlzLHQuY2hpbGROb2Rlc1swXSl9KX0pO3ZhciB4PWEuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKGcpO3guZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbih0KXthLl9wbG90c1t0XS5iZz1sLnNlbGVjdCh0aGlzKX0pO3ZhciBfPXt9O3JldHVybiBtLmVhY2goZnVuY3Rpb24ocil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBlPyJNIit6KyIsIit0KyJIIitSOiIifWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gZT8iTSIrdCsiLCIrSCsiViIrVToiIn12YXIgYz1hLl9wbG90c1tyXSxtPWMueGF4aXMsdj1jLnlheGlzO20uc2V0U2NhbGUoKSx2LnNldFNjYWxlKCksYy5iZyYmaCYmYy5iZy5jYWxsKHAuc2V0UmVjdCxtLl9vZmZzZXQtdSx2Ll9vZmZzZXQtdSxtLl9sZW5ndGgrMip1LHYuX2xlbmd0aCsyKnUpLmNhbGwoZC5maWxsLGEucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKSxjLmNsaXBJZD0iY2xpcCIrYS5fdWlkK3IrInBsb3QiO3ZhciBnPWEuX2NsaXBzLnNlbGVjdEFsbCgiIyIrYy5jbGlwSWQpLmRhdGEoWzBdKTtnLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoe2NsYXNzOiJwbG90Y2xpcCIsaWQ6Yy5jbGlwSWR9KS5hcHBlbmQoInJlY3QiKSxnLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoe3dpZHRoOm0uX2xlbmd0aCxoZWlnaHQ6di5fbGVuZ3RofSkscC5zZXRUcmFuc2xhdGUoYy5wbG90LG0uX29mZnNldCx2Ll9vZmZzZXQpO3ZhciBiLHg7Zm9yKGMuX2hhc0NsaXBPbkF4aXNGYWxzZT8oYj1udWxsLHg9Yy5jbGlwSWQpOihiPWMuY2xpcElkLHg9bnVsbCkscC5zZXRDbGlwVXJsKGMucGxvdCxiKSxlPTA7ZTx5LnRyYWNlTGF5ZXJDbGFzc2VzLmxlbmd0aDtlKyspe3ZhciB3PXkudHJhY2VMYXllckNsYXNzZXNbZV07InNjYXR0ZXJsYXllciIhPT13JiZjLnBsb3Quc2VsZWN0QWxsKCJnLiIrdykuY2FsbChwLnNldENsaXBVcmwseCl9Yy5sYXllckNsaXBJZD14O3ZhciBNPSFtLl9hbmNob3JBeGlzLFQ9TSYmIV9bbS5faWRdLGs9aShtLHYsImJvdHRvbSIpLEE9aShtLHYsInRvcCIpLEU9IXYuX2FuY2hvckF4aXMsUz1FJiYhX1t2Ll9pZF0sTD1pKHYsbSwibGVmdCIpLEM9aSh2LG0sInJpZ2h0IiksST1wLmNyaXNwUm91bmQodCxtLmxpbmV3aWR0aCwxKSxEPXAuY3Jpc3BSb3VuZCh0LHYubGluZXdpZHRoLDEpLFA9cyh0LG0sRCxMLCJsZWZ0IixmKSx6PSFNJiZQPy11LVA6MCxPPXModCxtLEQsQywicmlnaHQiLGYpLFI9bS5fbGVuZ3RoKyghTSYmTz91K086MCksRj1vLmgqKDEtKG0ucG9zaXRpb258fDApKStJLzIlMSxqPXYuX2xlbmd0aCt1K0kvMixOPS11LUkvMixCPSFFJiZzKHQsdixJLGssImJvdHRvbSIsZiksVT12Ll9sZW5ndGgrKEI/dTowKSxWPSFFJiZzKHQsdixJLEEsInRvcCIsZiksSD1WPy11OjAscT1vLncqKHYucG9zaXRpb258fDApK0QvMiUxLEc9LXUtRC8yLFk9bS5fbGVuZ3RoK3UrRC8yO20uX2xpbmVwb3NpdGlvbnNbcl09W2s/ajp2b2lkIDAsQT9OOnZvaWQgMCxUP0Y6dm9pZCAwXSxtLl9hbmNob3JBeGlzPT09dj9tLl9saW5lcG9zaXRpb25zW3JdWzNdPSJ0b3AiPT09bS5zaWRlP046ajpUJiYobS5fbGluZXBvc2l0aW9uc1tyXVszXT1GKSx2Ll9saW5lcG9zaXRpb25zW3JdPVtMP0c6dm9pZCAwLEM/WTp2b2lkIDAsUz9xOnZvaWQgMF0sdi5fYW5jaG9yQXhpcz09PW0/di5fbGluZXBvc2l0aW9uc1tyXVszXT0icmlnaHQiPT09di5zaWRlP1k6RzpTJiYodi5fbGluZXBvc2l0aW9uc1tyXVszXT1xKTt2YXIgWD0idHJhbnNsYXRlKCIrbS5fb2Zmc2V0KyIsIit2Ll9vZmZzZXQrIikiLFc9WCxaPVg7VCYmKFc9InRyYW5zbGF0ZSgiK20uX29mZnNldCsiLCIrby50KyIpIixOKz12Ll9vZmZzZXQtby50LGorPXYuX29mZnNldC1vLnQpLFMmJihaPSJ0cmFuc2xhdGUoIitvLmwrIiwiK3YuX29mZnNldCsiKSIsRys9bS5fb2Zmc2V0LW8ubCxZKz1tLl9vZmZzZXQtby5sKSxoJiYoYy54bGluZXMuYXR0cigidHJhbnNmb3JtIixXKS5hdHRyKCJkIixuKGosaykrbihOLEEpK24oRixUKXx8Ik0wLDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixJKyJweCIpLmNhbGwoZC5zdHJva2UsbS5zaG93bGluZT9tLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpLGMueWxpbmVzLmF0dHIoInRyYW5zZm9ybSIsWikuYXR0cigiZCIsbChHLEwpK2woWSxDKStsKHEsUyl8fCJNMCwwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsRCsicHgiKS5jYWxsKGQuc3Ryb2tlLHYuc2hvd2xpbmU/di5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSksYy54YXhpc2xheWVyLmF0dHIoInRyYW5zZm9ybSIsVyksYy55YXhpc2xheWVyLmF0dHIoInRyYW5zZm9ybSIsWiksYy5ncmlkbGF5ZXIuYXR0cigidHJhbnNmb3JtIixYKSxjLnplcm9saW5lbGF5ZXIuYXR0cigidHJhbnNmb3JtIixYKSxjLmRyYWdsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLFgpLFQmJihfW20uX2lkXT0xKSxTJiYoX1t2Ll9pZF09MSl9KSxjLkF4ZXMubWFrZUNsaXBQYXRocyh0KSxyLmRyYXdNYWluVGl0bGUodCksdi5tYW5hZ2UodCksdC5fcHJvbWlzZXMubGVuZ3RoJiZQcm9taXNlLmFsbCh0Ll9wcm9taXNlcyl9LHIuZHJhd01haW5UaXRsZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O20uZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlIixkZmx0TmFtZToiUGxvdCIsYXR0cmlidXRlczp7eDplLndpZHRoLzIseTplLl9zaXplLnQvMiwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuY2FsY2RhdGEubGVuZ3RoO2UrKyl7dmFyIHI9dC5jYWxjZGF0YVtlXSxuPSgoclswXXx8e30pLnRyYWNlfHx7fSkuX21vZHVsZXx8e30saT1uLmFycmF5c1RvQ2FsY2RhdGE7aSYmaShyLHJbMF0udHJhY2UpfXJldHVybiBmLnN0eWxlKHQpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksZi5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ29sb3JCYXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdWzBdO2lmKChyLnR8fHt9KS5jYil7dmFyIG49ci50cmFjZSxpPXIudC5jYjt1LnRyYWNlSXMobiwiY29udG91ciIpJiZpLmxpbmUoe3dpZHRoOm4uY29udG91cnMuc2hvd2xpbmVzIT09ITE/bi5saW5lLndpZHRoOjAsZGFzaDpuLmxpbmUuZGFzaCxjb2xvcjoibGluZSI9PT1uLmNvbnRvdXJzLmNvbG9yaW5nP2kuX29wdHMubGluZS5jb2xvcjpuLmxpbmUuY29sb3J9KSx1LnRyYWNlSXMobiwibWFya2VyQ29sb3JzY2FsZSIpP2kub3B0aW9ucyhuLm1hcmtlci5jb2xvcmJhcikoKTppLm9wdGlvbnMobi5jb2xvcmJhcikoKX19cmV0dXJuIGYucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxjLnBsb3QodCwiIixlKX0sci5kb0xlZ2VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxmLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9UaWNrc1JlbGF5b3V0PWZ1bmN0aW9uKHQpe3JldHVybiBjLkF4ZXMuZG9UaWNrcyh0LCJyZWRyYXciKSxyLmRyYXdNYWluVGl0bGUodCksZi5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3YubWFuYWdlKHQpLGcodCk7Zm9yKHZhciByPTA7cjxlLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO3IrKyl7dmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzW3JdLnVwZGF0ZUZ4O24mJm4oZSl9cmV0dXJuIGYucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NhbWVyYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWYuZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3NjZW5lLnNldENhbWVyYShpLmNhbWVyYSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjY3MiwiLi4vY29tcG9uZW50cy90aXRsZXMiOjcwMSwiLi4vbGliIjo3MzUsIi4uL3Bsb3RseSI6Nzc0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3ODQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6Nzg4LCIuLi9wbG90cy9wbG90cyI6ODM4LCIuLi9yZWdpc3RyeSI6ODUzLGQzOjEyMX1dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4hKHQgaW4gZSl8fGEudmFsaWRhdGUoZVt0XSxjW3RdKX1mdW5jdGlvbiBuKHQscil7cmV0dXJuIGEuY29lcmNlKGUsZyxjLHQscil9ZnVuY3Rpb24gZigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsby5nZXREZWxheShULl9mdWxsTGF5b3V0KSl9KX1mdW5jdGlvbiBoKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9cyhULHksXyksbj1ULl9mdWxsTGF5b3V0LndpZHRoLG89VC5fZnVsbExheW91dC5oZWlnaHQ7aWYoaS5wdXJnZShUKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKFQpLCJzdmciPT09eSlyZXR1cm4gdChNP3I6ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChyKSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Yy5pZD1hLnJhbmRzdHIoKSxsKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpvLHNjYWxlOl8sY2FudmFzOmMsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KX1mdW5jdGlvbiBkKHQpe3JldHVybiBNP3QucmVwbGFjZSh1LCIiKTp0fWU9ZXx8e307dmFyIHAsbSx2O2lmKGEuaXNQbGFpbk9iamVjdCh0KT8ocD10LmRhdGF8fFtdLG09dC5sYXlvdXR8fHt9LHY9dC5jb25maWd8fHt9KToodD1hLmdldEdyYXBoRGl2KHQpLHA9YS5leHRlbmREZWVwKFtdLHQuZGF0YSksbT1hLmV4dGVuZERlZXAoe30sdC5sYXlvdXQpLHY9dC5fY29udGV4dCksIXIoIndpZHRoIil8fCFyKCJoZWlnaHQiKSl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighcigiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIik7dmFyIGc9e30seT1uKCJmb3JtYXQiKSxiPW4oIndpZHRoIikseD1uKCJoZWlnaHQiKSxfPW4oInNjYWxlIiksdz1uKCJzZXRCYWNrZ3JvdW5kIiksTT1uKCJpbWFnZURhdGFPbmx5IiksVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtULnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsVC5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFQpO3ZhciBrPWEuZXh0ZW5kRmxhdCh7fSxtKTtiJiYoay53aWR0aD1iKSx4JiYoay5oZWlnaHQ9eCk7dmFyIEE9YS5leHRlbmRGbGF0KHt9LHYse3N0YXRpY1Bsb3Q6ITAsc2V0QmFja2dyb3VuZDp3fSksRT1vLmdldFJlZHJhd0Z1bmMoVCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7aS5wbG90KFQscCxrLEEpLnRoZW4oRSkudGhlbihmKS50aGVuKGgpLnRoZW4oZnVuY3Rpb24oZSl7dChkKGUpKX0pLmNhdGNoKGZ1bmN0aW9uKHQpe2UodCl9KX0pfXZhciBpPXQoIi4uL3Bsb3RseSIpLGE9dCgiLi4vbGliIiksbz10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIikscz10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLGw9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSxjPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSx1PS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1ufSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90bHkiOjc3NCwiLi4vc25hcHNob3QvaGVscGVycyI6ODU3LCIuLi9zbmFwc2hvdC9zdmd0b2ltZyI6ODU5LCIuLi9zbmFwc2hvdC90b3N2ZyI6ODYxfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsaSxhLGMpe2M9Y3x8W107Zm9yKHZhciB1PU9iamVjdC5rZXlzKHQpLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGQ9dVtoXTtpZigidHJhbnNmb3JtcyIhPT1kKXt2YXIgdj1jLnNsaWNlKCk7di5wdXNoKGQpO3ZhciBnPXRbZF0seT1lW2RdLGI9bChyLGQpLHg9ImluZm9fYXJyYXkiPT09KGJ8fHt9KS52YWxUeXBlLF89ImNvbG9yc2NhbGUiPT09KGJ8fHt9KS52YWxUeXBlO2lmKHMocixkKSlpZihwKGcpJiZwKHkpKW4oZyx5LGIsaSxhLHYpO2Vsc2UgaWYoYi5pdGVtcyYmIXgmJm0oZykpe3ZhciB3LE0sVD1iLml0ZW1zLGs9VFtPYmplY3Qua2V5cyhUKVswXV0sQT1bXTtmb3Iodz0wO3c8eS5sZW5ndGg7dysrKXt2YXIgRT15W3ddLl9pbmRleHx8dztNPXYuc2xpY2UoKSxNLnB1c2goRSkscChnW0VdKSYmcCh5W3ddKSYmKEEucHVzaChFKSxuKGdbRV0seVt3XSxrLGksYSxNKSl9Zm9yKHc9MDt3PGcubGVuZ3RoO3crKylNPXYuc2xpY2UoKSxNLnB1c2godykscChnW3ddKT9BLmluZGV4T2Yodyk9PT0tMSYmaS5wdXNoKG8oInVudXNlZCIsYSxNKSk6aS5wdXNoKG8oIm9iamVjdCIsYSxNLGdbd10pKX1lbHNlIXAoZykmJnAoeSk/aS5wdXNoKG8oIm9iamVjdCIsYSx2LGcpKTptKGcpfHwhbSh5KXx8eHx8Xz9kIGluIGU/Zi52YWxpZGF0ZShnLGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZnIT09K3l8fGchPT15KSYmaS5wdXNoKG8oImR5bmFtaWMiLGEsdixnLHkpKTppLnB1c2gobygidmFsdWUiLGEsdixnKSk6aS5wdXNoKG8oInVudXNlZCIsYSx2LGcpKTppLnB1c2gobygiYXJyYXkiLGEsdixnKSk7ZWxzZSBpLnB1c2gobygic2NoZW1hIixhLHYpKX19cmV0dXJuIGl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLnR5cGUsaT10LnRyYWNlc1tuXS5sYXlvdXRBdHRyaWJ1dGVzO2kmJmYuZXh0ZW5kRmxhdCh0LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGkpfXJldHVybiB0LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG0odCk/IkluIGRhdGEgdHJhY2UgIit0WzFdKyIsICI6IkluICIrdCsiLCAifWZ1bmN0aW9uIG8odCxlLHIsbixpKXtyPXJ8fCIiO3ZhciBhLG87bShlKT8oYT1lWzBdLG89ZVsxXSk6KGE9ZSxvPW51bGwpO3ZhciBzPXUociksbD12W3RdKGUscyxuLGkpO3JldHVybiBmLmxvZyhsKSx7Y29kZTp0LGNvbnRhaW5lcjphLHRyYWNlOm8scGF0aDpyLGFzdHI6cyxtc2c6bH19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWMoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFtjKGUpLmtleU1pbnVzSWRdfWZ1bmN0aW9uIGModCl7dmFyIGU9dC5tYXRjaChnKTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fWZ1bmN0aW9uIHUodCl7aWYoIW0odCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX12YXIgZj10KCIuLi9saWIiKSxoPXQoIi4uL3Bsb3RzL3Bsb3RzIiksZD10KCIuL3Bsb3Rfc2NoZW1hIikscD1mLmlzUGxhaW5PYmplY3QsbT1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEscz1kLmdldCgpLGw9W10sYz17fTttKHQpPyhjLmRhdGE9Zi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGMuZGF0YT1bXSxyPVtdLGwucHVzaChvKCJhcnJheSIsImRhdGEiKSkpLHAoZSk/KGMubGF5b3V0PWYuZXh0ZW5kRGVlcCh7fSxlKSxhPWUpOihjLmxheW91dD17fSxhPXt9LGFyZ3VtZW50cy5sZW5ndGg+MSYmbC5wdXNoKG8oIm9iamVjdCIsImxheW91dCIpKSksaC5zdXBwbHlEZWZhdWx0cyhjKTtmb3IodmFyIHU9Yy5fZnVsbERhdGEsdj1yLmxlbmd0aCxnPTA7Zzx2O2crKyl7dmFyIHk9cltnXSxiPVsiZGF0YSIsZ107aWYocCh5KSl7dmFyIHg9dVtnXSxfPXgudHlwZSx3PXMudHJhY2VzW19dLmF0dHJpYnV0ZXM7dy50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W19dfSx4LnZpc2libGU9PT0hMSYmeS52aXNpYmxlIT09ITEmJmwucHVzaChvKCJpbnZpc2libGUiLGIpKSxuKHkseCx3LGwsYik7dmFyIE09eS50cmFuc2Zvcm1zLFQ9eC50cmFuc2Zvcm1zO2lmKE0pe20oTSl8fGwucHVzaChvKCJhcnJheSIsYixbInRyYW5zZm9ybXMiXSkpLGIucHVzaCgidHJhbnNmb3JtcyIpO2Zvcih2YXIgaz0wO2s8TS5sZW5ndGg7aysrKXt2YXIgQT1bInRyYW5zZm9ybXMiLGtdLEU9TVtrXS50eXBlO2lmKHAoTVtrXSkpe3ZhciBTPXMudHJhbnNmb3Jtc1tFXT9zLnRyYW5zZm9ybXNbRV0uYXR0cmlidXRlczp7fTtTLnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhzLnRyYW5zZm9ybXMpfSxuKE1ba10sVFtrXSxTLGwsYixBKX1lbHNlIGwucHVzaChvKCJvYmplY3QiLGIsQSkpfX19ZWxzZSBsLnB1c2gobygib2JqZWN0IixiKSl9cmV0dXJuIG4oYSxjLl9mdWxsTGF5b3V0LGkocyx1KSxsLCJsYXlvdXQiKSwwPT09bC5sZW5ndGg/dm9pZCAwOmx9O3ZhciB2PXtvYmplY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4oImxheW91dCI9PT10JiYiIj09PWU/IlRoZSBsYXlvdXQgYXJndW1lbnQiOiJkYXRhIj09PXRbMF0mJiIiPT09ZT8iVHJhY2UgIit0WzFdKyIgaW4gdGhlIGRhdGEgYXJndW1lbnQiOmEodCkrImtleSAiK2UpKyIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gb2JqZWN0IGNvbnRhaW5lciJ9LGFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJkYXRhIj09PXQ/IlRoZSBkYXRhIGFyZ3VtZW50IjphKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIGFycmF5IGNvbnRhaW5lciJ9LHNjaGVtYTpmdW5jdGlvbih0LGUpe3JldHVybiBhKHQpKyJrZXkgIitlKyIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSJ9LHVudXNlZDpmdW5jdGlvbih0LGUscil7dmFyIG49cChyKT8iY29udGFpbmVyIjoia2V5IjtyZXR1cm4gYSh0KStuKyIgIitlKyIgZGlkIG5vdCBnZXQgY29lcmNlZCJ9LGR5bmFtaWM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuW2EodCkrImtleSIsZSwiKHNldCB0byAnIityKyInKSIsImdvdCByZXNldCB0byIsIiciK24rIiciLCJkdXJpbmcgZGVmYXVsdHMuIl0uam9pbigiICIpfSxpbnZpc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIlRyYWNlICIrdFsxXSsiIGdvdCBkZWZhdWx0ZWQgdG8gYmUgbm90IHZpc2libGUifSx2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW2EodCkrImtleSAiK2UsImlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlICgiK3IrIikiXS5qb2luKCIgIil9fSxnPWYuY291bnRlclJlZ2V4KCIoW2Etel0rKSIpfSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90cy9wbG90cyI6ODM4LCIuL3Bsb3Rfc2NoZW1hIjo3Njh9XSw3NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0Q29uZmlnPXQoIi4vcGxvdF9hcGkvcGxvdF9jb25maWciKSxyLlBsb3RzPXQoIi4vcGxvdHMvcGxvdHMiKSxyLkF4ZXM9dCgiLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHIuTW9kZUJhcj10KCIuL2NvbXBvbmVudHMvbW9kZWJhciIpLHQoIi4vcGxvdF9hcGkvcGxvdF9hcGkiKX0seyIuL2NvbXBvbmVudHMvbW9kZWJhciI6NjcyLCIuL3Bsb3RfYXBpL3Bsb3RfYXBpIjo3NjYsIi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjc2NywiLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL3Bsb3RzL3Bsb3RzIjo4Mzh9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY3ViaWMtaW4tb3V0Iix2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdfX19fSx7fV0sNzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYT1yLm5hbWUsbz1lW2FdLHM9bi5pc0FycmF5KHRbYV0pP3RbYV06W10sbD1lW2FdPVtdO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBjPXNbaV0sdT17fSxmPXt9O24uaXNQbGFpbk9iamVjdChjKXx8KGYuaXRlbUlzTm90UGxhaW5PYmplY3Q9ITAsYz17fSksci5oYW5kbGVJdGVtRGVmYXVsdHMoYyx1LGUscixmKSx1Ll9pbnB1dD1jLHUuX2luZGV4PWksbC5wdXNoKHUpfWlmKG4uaXNBcnJheShvKSl7dmFyIGg9TWF0aC5taW4oby5sZW5ndGgsbC5sZW5ndGgpO2ZvcihpPTA7aTxoO2krKyluLnJlbGlua1ByaXZhdGVLZXlzKGxbaV0sb1tpXSl9fX0seyIuLi9saWIiOjczNX1dLDc3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHZpc2libGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsImxlZ2VuZG9ubHkiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sdWlkOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxpZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjY0NH1dLDc3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3hheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw3Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4rdH1mdW5jdGlvbiBpKHQpe3JldHVybiBTdHJpbmcodCl9ZnVuY3Rpb24gYSh0LGUscixuLGkpe2Z1bmN0aW9uIGEoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgbz0wLHM9MCxsPTAsYz0wLHU9MDt1PGUubGVuZ3RoO3UrKyllW3VdJTE9PTA/bCsrOk0oZVt1XSl8fGMrKyxhKGVbdV0pJiZvKyssYShlW3VdK3IuZHRpY2svMikmJnMrKzt2YXIgZj1lLmxlbmd0aC1jO2lmKGw9PT1mJiYiZGF0ZSIhPT1yLnR5cGUpci5kdGljazwxP3Q9bi0uNSpyLmR0aWNrOih0LT0uNSkrci5kdGljazxuJiYodCs9ci5kdGljayk7ZWxzZSBpZihzPC4xKmYmJihvPi4zKmZ8fGEobil8fGEoaSkpKXt2YXIgaD1yLmR0aWNrLzI7dCs9dCtoPG4/aDotaH1yZXR1cm4gdH0KZnVuY3Rpb24gbyh0LGUscixuLGkpe3ZhciBhPWsuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1VLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Kno6YS5leGFjdE1vbnRocz4uOD90PVUudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Kno6dC09ei8yO3ZhciBzPVUudGlja0luY3JlbWVudCh0LHIpO2lmKHM8PW4pcmV0dXJuIHN9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXt2YXIgZSxyLG49dC50aWNrdmFscyxpPXQudGlja3RleHQsYT1uZXcgQXJyYXkobi5sZW5ndGgpLG89ay5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkscz0xLjAwMDEqb1swXS0xZS00Km9bMV0sbD0xLjAwMDEqb1sxXS0xZS00Km9bMF0sYz1NYXRoLm1pbihzLGwpLGY9TWF0aC5tYXgocyxsKSxoPTA7QXJyYXkuaXNBcnJheShpKXx8KGk9W10pO3ZhciBkPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5kMmxfbm9hZGQ6dC5kMmw7Zm9yKCJsb2ciPT09dC50eXBlJiYiTCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz0iTCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSkscj0wO3I8bi5sZW5ndGg7cisrKShlPWQobltyXSkpPmMmJmU8ZiYmKHZvaWQgMD09PWlbcl0/YVtoXT1VLnRpY2tUZXh0KHQsZSk6YVtoXT11KHQsZSxTdHJpbmcoaVtyXSkpLGgrKyk7cmV0dXJuIGg8bi5sZW5ndGgmJmEuc3BsaWNlKGgsbi5sZW5ndGgtaCksYX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSprLnJvdW5kVXAodC9lLHIpfWZ1bmN0aW9uIGModCl7dmFyIGU9dC5kdGljaztpZih0Ll90aWNrZXhwb25lbnQ9MCxNKGUpfHwic3RyaW5nIj09dHlwZW9mIGV8fChlPTEpLCJjYXRlZ29yeSI9PT10LnR5cGUmJih0Ll90aWNrcm91bmQ9bnVsbCksImRhdGUiPT09dC50eXBlKXt2YXIgcj10LnIybCh0LnRpY2swKSxuPXQubDJyKHIpLnJlcGxhY2UoLyheLXxpKS9nLCIiKSxpPW4ubGVuZ3RoO2lmKCJNIj09PVN0cmluZyhlKS5jaGFyQXQoMCkpaT4xMHx8IjAxLTAxIiE9PW4uc3Vic3RyKDUpP3QuX3RpY2tyb3VuZD0iZCI6dC5fdGlja3JvdW5kPStlLnN1YnN0cigxKSUxMj09MD8ieSI6Im0iO2Vsc2UgaWYoZT49eiYmaTw9MTB8fGU+PTE1KnopdC5fdGlja3JvdW5kPSJkIjtlbHNlIGlmKGU+PVImJmk8PTE2fHxlPj1PKXQuX3RpY2tyb3VuZD0iTSI7ZWxzZSBpZihlPj1GJiZpPD0xOXx8ZT49Uil0Ll90aWNrcm91bmQ9IlMiO2Vsc2V7dmFyIGE9dC5sMnIocitlKS5yZXBsYWNlKC9eLS8sIiIpLmxlbmd0aDt0Ll90aWNrcm91bmQ9TWF0aC5tYXgoaSxhKS0yMH19ZWxzZSBpZihNKGUpfHwiTCI9PT1lLmNoYXJBdCgwKSl7dmFyIG89dC5yYW5nZS5tYXAodC5yMmR8fE51bWJlcik7TShlKXx8KGU9TnVtYmVyKGUuc3Vic3RyKDEpKSksdC5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKTt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhvWzBdKSxNYXRoLmFicyhvWzFdKSksbD1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4xMCsuMDEpO01hdGguYWJzKGwpPjMmJihtKHQuZXhwb25lbnRmb3JtYXQpJiYhdihsKT90Ll90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChsLTEpLzMpOnQuX3RpY2tleHBvbmVudD1sKX1lbHNlIHQuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGk9dC5fdGlja3JvdW5kLGE9ciYmdC5ob3ZlcmZvcm1hdHx8VS5nZXRUaWNrRm9ybWF0KHQpO24mJihpPU0oaSk/NDp7eToibSIsbToiZCIsZDoiTSIsTToiUyIsUzo0fVtpXSk7dmFyIG8scz1rLmZvcm1hdERhdGUoZS54LGEsaSx0LmNhbGVuZGFyKSxsPXMuaW5kZXhPZigiXG4iKTtsIT09LTEmJihvPXMuc3Vic3RyKGwrMSkscz1zLnN1YnN0cigwLGwpKSxuJiYoIjAwOjAwOjAwIj09PXN8fCIwMDowMCI9PT1zPyhzPW8sbz0iIik6OD09PXMubGVuZ3RoJiYocz1zLnJlcGxhY2UoLzowMCQvLCIiKSkpLG8mJihyPyJkIj09PWk/cys9IiwgIitvOnM9bysocz8iLCAiK3M6IiIpOnQuX2luQ2FsY1RpY2tzJiZvPT09dC5fcHJldkRhdGVIZWFkfHwocys9Ijxicj4iK28sdC5fcHJldkRhdGVIZWFkPW8pKSxlLnRleHQ9c31mdW5jdGlvbiBoKHQsZSxyLG4saSl7dmFyIGE9dC5kdGljayxvPWUueCxzPXQudGlja2Zvcm1hdDtpZigibmV2ZXIiPT09aSYmKGk9IiIpLCFufHwic3RyaW5nIj09dHlwZW9mIGEmJiJMIj09PWEuY2hhckF0KDApfHwoYT0iTDMiKSxzfHwic3RyaW5nIj09dHlwZW9mIGEmJiJMIj09PWEuY2hhckF0KDApKWUudGV4dD1nKE1hdGgucG93KDEwLG8pLHQsaSxuKTtlbHNlIGlmKE0oYSl8fCJEIj09PWEuY2hhckF0KDApJiZrLm1vZChvKy4wMSwxKTwuMSl7dmFyIGw9TWF0aC5yb3VuZChvKTtbImUiLCJFIiwicG93ZXIiXS5pbmRleE9mKHQuZXhwb25lbnRmb3JtYXQpIT09LTF8fG0odC5leHBvbmVudGZvcm1hdCkmJnYobCk/KGUudGV4dD0wPT09bD8xOjE9PT1sPyIxMCI6bD4xPyIxMDxzdXA+IitsKyI8L3N1cD4iOiIxMDxzdXA+IitqKy1sKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOihlLnRleHQ9ZyhNYXRoLnBvdygxMCxvKSx0LCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09YSYmInkiPT09dC5faWQuY2hhckF0KDApJiYoZS5keS09ZS5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT1hLmNoYXJBdCgwKSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoYSk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLGsubW9kKG8sMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgYz1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09YyYmIjEiIT09Y3x8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKG88MD8uNTouMjUpKSl9fWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpLGUudGV4dD1TdHJpbmcocil9ZnVuY3Rpb24gcCh0LGUscixuLGkpeyJuZXZlciI9PT1pP2k9IiI6ImFsbCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihpPSJoaWRlIiksZS50ZXh0PWcoZS54LHQsaSxuKX1mdW5jdGlvbiBtKHQpe3JldHVybiJTSSI9PT10fHwiQiI9PT10fWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ+MTR8fHQ8LTE1fWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9dDwwLGE9ZS5fdGlja3JvdW5kLG89cnx8ZS5leHBvbmVudGZvcm1hdHx8IkIiLHM9ZS5fdGlja2V4cG9uZW50LGw9VS5nZXRUaWNrRm9ybWF0KGUpLHU9ZS5zZXBhcmF0ZXRob3VzYW5kcztpZihuKXt2YXIgZj17ZXhwb25lbnRmb3JtYXQ6ZS5leHBvbmVudGZvcm1hdCxkdGljazoibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLmR0aWNrOk0odCk/TWF0aC5hYnModCl8fDE6MSxyYW5nZToibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLnJhbmdlLm1hcChlLnIyZCk6WzAsdHx8MV19O2MoZiksYT0oTnVtYmVyKGYuX3RpY2tyb3VuZCl8fDApKzQscz1mLl90aWNrZXhwb25lbnQsZS5ob3ZlcmZvcm1hdCYmKGw9ZS5ob3ZlcmZvcm1hdCl9aWYobClyZXR1cm4gdy5mb3JtYXQobCkodCkucmVwbGFjZSgvLS9nLGopO3ZhciBoPU1hdGgucG93KDEwLC1hKS8yO2lmKCJub25lIj09PW8mJihzPTApLCh0PU1hdGguYWJzKHQpKTxoKXQ9IjAiLGk9ITE7ZWxzZXtpZih0Kz1oLHMmJih0Kj1NYXRoLnBvdygxMCwtcyksYSs9cyksMD09PWEpdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihhPDApe3Q9U3RyaW5nKE1hdGgucm91bmQodCkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aCthKTtmb3IodmFyIGQ9YTtkPDA7ZCsrKXQrPSIwIn1lbHNle3Q9U3RyaW5nKHQpO3ZhciBwPXQuaW5kZXhPZigiLiIpKzE7cCYmKHQ9dC5zdWJzdHIoMCxwK2EpLnJlcGxhY2UoL1wuPzArJC8sIiIpKX10PWsubnVtU2VwYXJhdGUodCxlLl9zZXBhcmF0b3JzLHUpfWlmKHMmJiJoaWRlIiE9PW8pe20obykmJnYocykmJihvPSJwb3dlciIpO3ZhciBnO2c9czwwP2orLXM6InBvd2VyIiE9PW8/IisiK3M6U3RyaW5nKHMpLCJlIj09PW8/dCs9ImUiK2c6IkUiPT09bz90Kz0iRSIrZzoicG93ZXIiPT09bz90Kz0iXHhkNzEwPHN1cD4iK2crIjwvc3VwPiI6IkIiPT09byYmOT09PXM/dCs9IkIiOm0obykmJih0Kz1LW3MvMys1XSl9cmV0dXJuIGk/ait0OnR9ZnVuY3Rpb24geSh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpW25dLnguaW5kZXhPZihvKT09PS0xJiZpW25dLnkuaW5kZXhPZihzKT09PS0xfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLGIoYy54LGwueCksYihjLnksbC55KTtiKGMueCxbb10pLGIoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LmluZGV4T2YoZVtyXSk9PT0tMSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLHM9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goVS5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goVS5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGw9T2JqZWN0LmtleXMoYVswXSksYz1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiXSx1PVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGY9bFtuXSxoPWFbMF1bZl0sZD1vWzBdW2ZdLHA9ITAsbT0hMSx2PSExO2lmKCJfIiE9PWYuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgaCYmYy5pbmRleE9mKGYpPT09LTEpe2ZvcihpPTE7aTxhLmxlbmd0aCYmcDtpKyspe3ZhciBnPWFbaV1bZl07InR5cGUiPT09ZiYmdS5pbmRleE9mKGgpIT09LTEmJnUuaW5kZXhPZihnKSE9PS0xJiZoIT09Zz9tPSEwOmchPT1oJiYocD0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZwO2krKyl7dmFyIHk9b1tpXVtmXTsidHlwZSI9PT1mJiZ1LmluZGV4T2YoZCkhPT0tMSYmdS5pbmRleE9mKHkpIT09LTEmJmQhPT15P3Y9ITA6b1tpXVtmXSE9PWQmJihwPSExKX1wJiYobSYmKHNbYVswXS5fbmFtZV0udHlwZT0ibGluZWFyIiksdiYmKHNbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksXyhzLGYsYSxvKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBiPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07ZS5pbmRleE9mKGIueHJlZikhPT0tMSYmci5pbmRleE9mKGIueXJlZikhPT0tMSYmay5zd2FwQXR0cnMocy5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGksYT1rLm5lc3RlZFByb3BlcnR5LG89YSh0W3JbMF0uX25hbWVdLGUpLmdldCgpLHM9YSh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiPT09byYmKG89IkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiPT09cyYmKHM9IkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpKSxpPTA7aTxyLmxlbmd0aDtpKyspYSh0LHJbaV0uX25hbWUrIi4iK2UpLnNldChzKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKWEodCxuW2ldLl9uYW1lKyIuIitlKS5zZXQobyl9dmFyIHc9dCgiZDMiKSxNPXQoImZhc3QtaXNudW1lcmljIiksVD10KCIuLi8uLi9yZWdpc3RyeSIpLGs9dCgiLi4vLi4vbGliIiksQT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxFPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksUz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksTD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxDPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxJPUMuRlBfU0FGRSxEPUMuT05FQVZHWUVBUixQPUMuT05FQVZHTU9OVEgsej1DLk9ORURBWSxPPUMuT05FSE9VUixSPUMuT05FTUlOLEY9Qy5PTkVTRUMsaj1DLk1JTlVTX1NJR04sTj1DLkJBRE5VTSxCPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsVT1lLmV4cG9ydHM9e307VS5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxVLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksVS5zZXRDb252ZXJ0PXQoIi4vc2V0X2NvbnZlcnQiKTt2YXIgVj10KCIuL2F4aXNfYXV0b3R5cGUiKSxIPXQoIi4vYXhpc19pZHMiKTtVLmlkMm5hbWU9SC5pZDJuYW1lLFUuY2xlYW5JZD1ILmNsZWFuSWQsVS5saXN0PUgubGlzdCxVLmxpc3RJZHM9SC5saXN0SWRzLFUuZ2V0RnJvbUlkPUguZ2V0RnJvbUlkLFUuZ2V0RnJvbVRyYWNlPUguZ2V0RnJvbVRyYWNlLFUuY29lcmNlUmVmPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLmNoYXJBdChuLmxlbmd0aC0xKSxzPVUubGlzdElkcyhyLG8pLGw9bisicmVmIixjPXt9O3JldHVybiBpfHwoaT1zWzBdfHxhKSxhfHwoYT1pKSxjW2xdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cy5jb25jYXQoYT9bYV06W10pLGRmbHQ6aX0say5jb2VyY2UodCxlLGMsbCl9LFUuY29lcmNlUG9zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHM7aWYoInBhcGVyIj09PW58fCJwaXhlbCI9PT1uKW89ay5lbnN1cmVOdW1iZXIscz1yKGksYSk7ZWxzZXt2YXIgbD1VLmdldEZyb21JZChlLG4pO2E9bC5mcmFjdGlvbjJyKGEpLHM9cihpLGEpLG89bC5jbGVhblBvc310W2ldPW8ocyl9LFUuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9rLmVuc3VyZU51bWJlcjpVLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX07dmFyIHE9VS5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6YTtpZihBcnJheS5pc0FycmF5KHMpKXtpZihvPXt0eXBlOlYoYSksX2NhdGVnb3JpZXM6W119LFUuc2V0Q29udmVydChvKSwiY2F0ZWdvcnkiPT09by50eXBlKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKW8uZDJjKGFbbF0pfWVsc2Ugbz1VLmdldEZyb21UcmFjZSh0LGUscyk7cmV0dXJuIG8/e2QyYzpvLmQyYyxjMmQ6by5jMmR9OiJpZHMiPT09cz97ZDJjOmksYzJkOml9OntkMmM6bixjMmQ6bn19O1UuZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBxKHQsZSxyLG4pLmQyY30sVS5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVybiJ4Ij09PWU/InkiOiJ5Ij09PWU/IngiOnZvaWQgMH0sVS5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXtbImxvZyIsImNhdGVnb3J5Il0uaW5kZXhPZih0LnR5cGUpPT09LTEmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sVS5nZXRBdXRvUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPXQuX21pblswXS52YWwsaT10Ll9tYXhbMF0udmFsO2ZvcihlPTE7ZTx0Ll9taW4ubGVuZ3RoJiZuPT09aTtlKyspbj1NYXRoLm1pbihuLHQuX21pbltlXS52YWwpO2ZvcihlPTE7ZTx0Ll9tYXgubGVuZ3RoJiZuPT09aTtlKyspaT1NYXRoLm1heChpLHQuX21heFtlXS52YWwpO3ZhciBhLG8scyxsLGMsdSxmLGg9MCxkPSExO2lmKHQucmFuZ2Upe3ZhciBwPWsuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2Q9cFsxXTxwWzBdfWZvcigicmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2UmJihkPSEwLHQuYXV0b3JhbmdlPSEwKSxlPTA7ZTx0Ll9taW4ubGVuZ3RoO2UrKylmb3Iobz10Ll9taW5bZV0sYT0wO2E8dC5fbWF4Lmxlbmd0aDthKyspcz10Ll9tYXhbYV0sZj1zLnZhbC1vLnZhbCx1PXQuX2xlbmd0aC1vLnBhZC1zLnBhZCxmPjAmJnU+MCYmZi91PmgmJihsPW8sYz1zLGg9Zi91KTtpZihuPT09aSl7dmFyIG09bi0xLHY9bisxO3I9InRvemVybyI9PT10LnJhbmdlbW9kZT9uPDA/W20sMF06WzAsdl06Im5vbm5lZ2F0aXZlIj09PXQucmFuZ2Vtb2RlP1tNYXRoLm1heCgwLG0pLE1hdGgubWF4KDAsdildOlttLHZdfWVsc2UgaCYmKCJsaW5lYXIiIT09dC50eXBlJiYiLSIhPT10LnR5cGV8fCgidG96ZXJvIj09PXQucmFuZ2Vtb2RlPyhsLnZhbD49MCYmKGw9e3ZhbDowLHBhZDowfSksYy52YWw8PTAmJihjPXt2YWw6MCxwYWQ6MH0pKToibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihsLnZhbC1oKmwucGFkPDAmJihsPXt2YWw6MCxwYWQ6MH0pLGMudmFsPDAmJihjPXt2YWw6MSxwYWQ6MH0pKSxoPShjLnZhbC1sLnZhbCkvKHQuX2xlbmd0aC1sLnBhZC1jLnBhZCkpLHI9W2wudmFsLWgqbC5wYWQsYy52YWwraCpjLnBhZF0pO3JldHVybiByWzBdPT09clsxXSYmKCJ0b3plcm8iPT09dC5yYW5nZW1vZGU/cj1yWzBdPDA/W3JbMF0sMF06clswXT4wP1swLHJbMF1dOlswLDFdOihyPVtyWzBdLTEsclswXSsxXSwibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihyWzBdPU1hdGgubWF4KDAsclswXSkpKSksZCYmci5yZXZlcnNlKCksay5zaW1wbGVNYXAocix0Lmwycnx8TnVtYmVyKX0sVS5kb0F1dG9SYW5nZT1mdW5jdGlvbih0KXt0Ll9sZW5ndGh8fHQuc2V0U2NhbGUoKTt2YXIgZT10Ll9taW4mJnQuX21heCYmdC5fbWluLmxlbmd0aCYmdC5fbWF4Lmxlbmd0aDtpZih0LmF1dG9yYW5nZSYmZSl7dC5yYW5nZT1VLmdldEF1dG9SYW5nZSh0KSx0Ll9yPXQucmFuZ2Uuc2xpY2UoKSx0Ll9ybD1rLnNpbXBsZU1hcCh0Ll9yLHQucjJsKTt2YXIgcj10Ll9pbnB1dDtyLnJhbmdlPXQucmFuZ2Uuc2xpY2UoKSxyLmF1dG9yYW5nZT10LmF1dG9yYW5nZX19LFUuc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1VLmxpc3QodCwiIiwhMCksbj0hMSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz12b2lkIDA9PT1hLl9yYW5nZUluaXRpYWwscz1vfHwhKGEucmFuZ2VbMF09PT1hLl9yYW5nZUluaXRpYWxbMF0mJmEucmFuZ2VbMV09PT1hLl9yYW5nZUluaXRpYWxbMV0pOyhvJiZhLmF1dG9yYW5nZT09PSExfHxlJiZzKSYmKGEuX3JhbmdlSW5pdGlhbD1hLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LFUuc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9VS5saXN0KHQsIiIsITApLG49ITEsaT0ib24iLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1pfHxvLnNob3dzcGlrZXN8fChpPSJvZmYiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LFUuZXhwYW5kPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gaShyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNKHQpJiZNYXRoLmFicyh0KTxJfWlmKGw9ZVtyXSxNKGwpKXtpZihmPWIocikrZyxoPXgocikrZyxwPWwtdyhyKSxtPWwrXyhyKSwibG9nIj09PXQudHlwZSYmcDxtLzEwJiYocD1tLzEwKSxjPXQuYzJsKHApLHU9dC5jMmwobSkseSYmKGM9TWF0aC5taW4oMCxjKSx1PU1hdGgubWF4KDAsdSkpLG4oYykpe2ZvcihkPSEwLG89MDtvPHQuX21pbi5sZW5ndGgmJmQ7bysrKXM9dC5fbWluW29dLHMudmFsPD1jJiZzLnBhZD49aD9kPSExOnMudmFsPj1jJiZzLnBhZDw9aCYmKHQuX21pbi5zcGxpY2UobywxKSxvLS0pO2QmJnQuX21pbi5wdXNoKHt2YWw6YyxwYWQ6eSYmMD09PWM/MDpofSl9aWYobih1KSl7Zm9yKGQ9ITAsbz0wO288dC5fbWF4Lmxlbmd0aCYmZDtvKyspcz10Ll9tYXhbb10scy52YWw+PXUmJnMucGFkPj1mP2Q9ITE6cy52YWw8PXUmJnMucGFkPD1mJiYodC5fbWF4LnNwbGljZShvLDEpLG8tLSk7ZCYmdC5fbWF4LnB1c2goe3ZhbDp1LHBhZDp5JiYwPT09dT8wOmZ9KX19fWlmKCh0LmF1dG9yYW5nZXx8ISFrLm5lc3RlZFByb3BlcnR5KHQsInJhbmdlc2xpZGVyLmF1dG9yYW5nZSIpLmdldCgpKSYmZSl7dC5fbWlufHwodC5fbWluPVtdKSx0Ll9tYXh8fCh0Ll9tYXg9W10pLHJ8fChyPXt9KSx0Ll9tfHx0LnNldFNjYWxlKCk7dmFyIGEsbyxzLGwsYyx1LGYsaCxkLHAsbSx2PWUubGVuZ3RoLGc9ci5wYWRkZWQ/LjA1KnQuX2xlbmd0aDowLHk9ci50b3plcm8mJigibGluZWFyIj09PXQudHlwZXx8Ii0iPT09dC50eXBlKTtnJiYiZG9tYWluIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGcqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSk7dmFyIGI9bigodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLHg9bigodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLF89bihyLnZwYWRwbHVzfHxyLnZwYWQpLHc9bihyLnZwYWRtaW51c3x8ci52cGFkKTtmb3IoYT0wO2E8NjthKyspaShhKTtmb3IoYT12LTE7YT41O2EtLSlpKGEpfX0sVS5hdXRvQmluPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHM9ay5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksbD1rLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihpfHwoaT1lLmNhbGVuZGFyKSwiY2F0ZWdvcnkiPT09ZS50eXBlKXJldHVybntzdGFydDpzLS41LGVuZDpsKy41LHNpemU6MSxfY291bnQ6bC1zKzF9O3ZhciBjO2lmKHIpYz0obC1zKS9yO2Vsc2V7dmFyIHU9ay5kaXN0aW5jdFZhbHModCksZj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHUubWluRGlmZikvTWF0aC5MTjEwKSksaD1mKmsucm91bmRVcCh1Lm1pbkRpZmYvZixbLjksMS45LDQuOSw5LjldLCEwKTtjPU1hdGgubWF4KGgsMiprLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksTShjKXx8KGM9MSl9dmFyIGQ7ZD0ibG9nIj09PWUudHlwZT97dHlwZToibGluZWFyIixyYW5nZTpbcyxsXX06e3R5cGU6ZS50eXBlLHJhbmdlOmsuc2ltcGxlTWFwKFtzLGxdLGUuYzJyLDAsaSksY2FsZW5kYXI6aX0sVS5zZXRDb252ZXJ0KGQpLFUuYXV0b1RpY2tzKGQsYyk7dmFyIHAsbSx2PVUudGlja0luY3JlbWVudChVLnRpY2tGaXJzdChkKSxkLmR0aWNrLCJyZXZlcnNlIixpKTtpZigibnVtYmVyIj09dHlwZW9mIGQuZHRpY2spdj1hKHYsdCxkLHMsbCksbT0xK01hdGguZmxvb3IoKGwtdikvZC5kdGljaykscD12K20qZC5kdGljaztlbHNlIGZvcigiTSI9PT1kLmR0aWNrLmNoYXJBdCgwKSYmKHY9byh2LHQsZC5kdGljayxzLGkpKSxwPXYsbT0wO3A8PWw7KXA9VS50aWNrSW5jcmVtZW50KHAsZC5kdGljaywhMSxpKSxtKys7cmV0dXJue3N0YXJ0OmUuYzJyKHYsMCxpKSxlbmQ6ZS5jMnIocCwwLGkpLHNpemU6ZC5kdGljayxfY291bnQ6bX19LFUuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPWsuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhdXRvIj09PXQudGlja21vZGV8fCF0LmR0aWNrKXt2YXIgcixuPXQubnRpY2tzO258fCgiY2F0ZWdvcnkiPT09dC50eXBlPyhyPXQudGlja2ZvbnQ/MS4yKih0LnRpY2tmb250LnNpemV8fDEyKToxNSxuPXQuX2xlbmd0aC9yKToocj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsbj1rLmNvbnN0cmFpbih0Ll9sZW5ndGgvciw0LDkpKzEpKSwiYXJyYXkiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksVS5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9aWYodC50aWNrMHx8KHQudGljazA9ImRhdGUiPT09dC50eXBlPyIyMDAwLTAxLTAxIjowKSxjKHQpLCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBzKHQpO3QuX3RtaW49VS50aWNrRmlyc3QodCk7dmFyIGk9ZVsxXTxlWzBdLGE9W10sbz0xLjAwMDEqZVsxXS0xZS00KmVbMF07ImNhdGVnb3J5Ij09PXQudHlwZSYmKG89aT9NYXRoLm1heCgtLjUsbyk6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbykpO2Zvcih2YXIgbD1udWxsLHU9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksZj10Ll90bWluOyhpP2Y+PW86Zjw9bykmJiEoYS5sZW5ndGg+dXx8Zj09PWwpO2Y9VS50aWNrSW5jcmVtZW50KGYsdC5kdGljayxpLHQuY2FsZW5kYXIpKWw9ZixhLnB1c2goZik7dC5fdG1heD1hW2EubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIGg9bmV3IEFycmF5KGEubGVuZ3RoKSxkPTA7ZDxhLmxlbmd0aDtkKyspaFtkXT1VLnRpY2tUZXh0KHQsYVtkXSk7cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLGh9O3ZhciBHPVsyLDUsMTBdLFk9WzEsMiwzLDYsMTJdLFg9WzEsMiw1LDEwLDE1LDMwXSxXPVsxLDIsMyw3LDE0XSxaPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxKPVstLjMwMSwwLC4zMDEsLjY5OSwxXTtVLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1rLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgbj0yKmU7bj5EPyhlLz1ELHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPSJNIisxMipsKGUscixHKSk6bj5QPyhlLz1QLHQuZHRpY2s9Ik0iK2woZSwxLFkpKTpuPno/KHQuZHRpY2s9bChlLHosVyksdC50aWNrMD1rLmRhdGVUaWNrMCh0LmNhbGVuZGFyLCEwKSk6bj5PP3QuZHRpY2s9bChlLE8sWSk6bj5SP3QuZHRpY2s9bChlLFIsWCk6bj5GP3QuZHRpY2s9bChlLEYsWCk6KHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPWwoZSxyLEcpKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGk9ay5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGlbMV0taVswXSk8MSl7dmFyIGE9MS41Kk1hdGguYWJzKChpWzFdLWlbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsaVsxXSktTWF0aC5wb3coMTAsaVswXSkpL2Escj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpLHQuZHRpY2s9IkwiK2woZSxyLEcpfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKToodC50aWNrMD0wLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPWwoZSxyLEcpKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIU0odC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIG89dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhvKX19LFUudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yPy0xOjE7aWYoTShlKSlyZXR1cm4gdCtpKmU7dmFyIGE9ZS5jaGFyQXQoMCksbz1pKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09YSlyZXR1cm4gay5pbmNyZW1lbnRNb250aCh0LG8sbik7aWYoIkwiPT09YSlyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrbykvTWF0aC5MTjEwO2lmKCJEIj09PWEpe3ZhciBzPSJEMiI9PT1lP0o6WixsPXQrLjAxKmksYz1rLnJvdW5kVXAoay5tb2QobCwxKSxzLHIpO3JldHVybiBNYXRoLmZsb29yKGwpK01hdGgubG9nKHcucm91bmQoTWF0aC5wb3coMTAsYyksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoZSl9LFUudGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1rLnNpbXBsZU1hcCh0LnJhbmdlLGUpLG49clsxXTxyWzBdLGk9bj9NYXRoLmZsb29yOk1hdGguY2VpbCxhPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxvPXQuZHRpY2sscz1lKHQudGljazApO2lmKE0obykpe3ZhciBsPWkoKGEtcykvbykqbytzO3JldHVybiJjYXRlZ29yeSI9PT10LnR5cGUmJihsPWsuY29uc3RyYWluKGwsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksbH12YXIgYz1vLmNoYXJBdCgwKSx1PU51bWJlcihvLnN1YnN0cigxKSk7aWYoIk0iPT09Yyl7Zm9yKHZhciBmLGgsZCxwPTAsbT1zO3A8MTA7KXtpZigoKGY9VS50aWNrSW5jcmVtZW50KG0sbyxuLHQuY2FsZW5kYXIpKS1hKSoobS1hKTw9MClyZXR1cm4gbj9NYXRoLm1pbihtLGYpOk1hdGgubWF4KG0sZik7aD0oYS0obStmKS8yKS8oZi1tKSxkPWMrKE1hdGguYWJzKE1hdGgucm91bmQoaCkpfHwxKSp1LG09VS50aWNrSW5jcmVtZW50KG0sZCxoPDA/IW46bix0LmNhbGVuZGFyKSxwKyt9cmV0dXJuIGsuZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSxtfWlmKCJMIj09PWMpcmV0dXJuIE1hdGgubG9nKGkoKE1hdGgucG93KDEwLGEpLXMpL3UpKnUrcykvTWF0aC5MTjEwO2lmKCJEIj09PWMpe3ZhciB2PSJEMiI9PT1vP0o6WixnPWsucm91bmRVcChrLm1vZChhLDEpLHYsbik7cmV0dXJuIE1hdGguZmxvb3IoYSkrTWF0aC5sb2cody5yb3VuZChNYXRoLnBvdygxMCxnKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKX0sVS50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuKXt2YXIgaTtyZXR1cm4gdm9pZCAwPT09bnx8KHI/Im5vbmUiPT09bjooaT17Zmlyc3Q6dC5fdG1pbixsYXN0OnQuX3RtYXh9W25dLCJhbGwiIT09biYmZSE9PWkpKX12YXIgaSxhLG89dSh0LGUpLHM9ImFycmF5Ij09PXQudGlja21vZGUsbD1yfHxzLGM9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDtpZihzJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgbT1rLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSx2PU1hdGguYWJzKG1bMV0tbVswXSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLWModC50aWNrdmFsc1thXSkpPHYpO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfXJldHVybiBpPXI/Im5ldmVyIjoibm9uZSIhPT10LmV4cG9uZW50Zm9ybWF0JiZuKHQuc2hvd2V4cG9uZW50KT8iaGlkZSI6IiIsImRhdGUiPT09dC50eXBlP2YodCxvLHIsbCk6ImxvZyI9PT10LnR5cGU/aCh0LG8scixsLGkpOiJjYXRlZ29yeSI9PT10LnR5cGU/ZCh0LG8pOnAodCxvLHIsbCxpKSx0LnRpY2twcmVmaXgmJiFuKHQuc2hvd3RpY2twcmVmaXgpJiYoby50ZXh0PXQudGlja3ByZWZpeCtvLnRleHQpLHQudGlja3N1ZmZpeCYmIW4odC5zaG93dGlja3N1ZmZpeCkmJihvLnRleHQrPXQudGlja3N1ZmZpeCksb30sVS5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbih0LGUscil7aWYociE9PU4mJnIhPT1lKXJldHVybiBVLmhvdmVyTGFiZWxUZXh0KHQsZSkrIiAtICIrVS5ob3ZlckxhYmVsVGV4dCh0LHIpO3ZhciBuPSJsb2ciPT09dC50eXBlJiZlPD0wLGk9VS50aWNrVGV4dCh0LHQuYzJsKG4/LWU6ZSksImhvdmVyIikudGV4dDtyZXR1cm4gbj8wPT09ZT8iMCI6aitpOml9O3ZhciBLPVsiZiIsInAiLCJuIiwiXHUwM2JjIiwibSIsIiIsImsiLCJNIiwiRyIsIlQiXTtVLmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKCJNIiwiIikpKlB9ZnVuY3Rpb24gcih0LGUpe3ZhciByPVsiTCIsIkQiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdC1lO3ZhciBuPXIuaW5kZXhPZih0LmNoYXJBdCgwKSksaT1yLmluZGV4T2YoZS5jaGFyQXQoMCkpO3JldHVybiBuPT09aT9OdW1iZXIodC5yZXBsYWNlKC8oTHxEKS9nLCIiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZywiIikpOm4taX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/MTotMX12YXIgbixpO2lmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlImRhdGUiOmNhc2UibGluZWFyIjpmb3Iobj0wO248dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO24rKylpZihmdW5jdGlvbih0LGUscil7dmFyIG49cnx8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGk9ZVswXSxhPWVbMV07cmV0dXJuKCFpJiYibnVtYmVyIiE9dHlwZW9mIGl8fG4oaSk8PW4odCkpJiYoIWEmJiJudW1iZXIiIT10eXBlb2YgYXx8bihhKT49bih0KSl9KHQuZHRpY2ssdC50aWNrZm9ybWF0c3RvcHNbbl0uZHRpY2tyYW5nZSxlKSl7aT10LnRpY2tmb3JtYXRzdG9wc1tuXTticmVha31icmVhaztjYXNlImxvZyI6Zm9yKG49MDtuPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtuKyspaWYoZnVuY3Rpb24odCxlKXt2YXIgbj1udWxsPT09ZVswXSxpPW51bGw9PT1lWzFdLGE9cih0LGVbMF0pPj0wLG89cih0LGVbMV0pPD0wO3JldHVybihufHxhKSYmKGl8fG8pfSh0LmR0aWNrLHQudGlja2Zvcm1hdHN0b3BzW25dLmR0aWNrcmFuZ2UpKXtpPXQudGlja2Zvcm1hdHN0b3BzW25dO2JyZWFrfX1yZXR1cm4gaT9pLnZhbHVlOnQudGlja2Zvcm1hdH0sVS5zdWJwbG90TWF0Y2g9L154KFswLTldKil5KFswLTldKikkLyxVLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W10sbz10Ll9mdWxsRGF0YXx8dC5kYXRhfHxbXTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgcz1vW3JdO2lmKHMudmlzaWJsZSE9PSExJiYibGVnZW5kb25seSIhPT1zLnZpc2libGUmJihULnRyYWNlSXMocywiY2FydGVzaWFuIil8fFQudHJhY2VJcyhzLCJnbDJkIikpKXtpPShzLnhheGlzfHwieCIpKyhzLnlheGlzfHwieSIpLGEuaW5kZXhPZihpKT09PS0xJiZhLnB1c2goaSl9fXZhciBsPVUubGlzdCh0LCIiLCEwKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXt2YXIgYz1sW3JdLHU9Yy5faWQuY2hhckF0KDApLGY9ImZyZWUiPT09Yy5hbmNob3I/IngiPT09dT8ieSI6IngiOmMuYW5jaG9yLGg9VS5nZXRGcm9tSWQodCxmKSxkPSExO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspaWYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleE9mKGUuX2lkKSE9PS0xfShhW25dLGMpKXtkPSEwO2JyZWFrfSJmcmVlIj09PWMuYW5jaG9yJiZkfHxoJiYoaT0ieCI9PT11P2MuX2lkK2guX2lkOmguX2lkK2MuX2lkLGEuaW5kZXhPZihpKT09PS0xJiZhLnB1c2goaSkpfXZhciBwPVUuc3VicGxvdE1hdGNoLG09W107Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKylpPWFbcl0scC50ZXN0KGkpJiZtLnB1c2goaSk7cmV0dXJuIG0uc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQubWF0Y2gocCksbj1lLm1hdGNoKHApO3JldHVybiByWzFdPT09blsxXT8rKHJbMl18fDEpLShuWzJdfHwxKTorKHJbMV18fDApLShuWzFdfHwwKX0pLGU/VS5maW5kU3VicGxvdHNXaXRoQXhpcyhtLGUpOm19LFUuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT1lLl9pZC5jaGFyQXQoMCk/Il4iK2UuX2lkKyJ5IjplLl9pZCsiJCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxVLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT17X29mZnNldDowLF9sZW5ndGg6bi53aWR0aCxfaWQ6IiJ9LGE9e19vZmZzZXQ6MCxfbGVuZ3RoOm4uaGVpZ2h0LF9pZDoiIn0sbz1VLmxpc3QodCwieCIsITApLHM9VS5saXN0KHQsInkiLCEwKSxsPVtdO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspZm9yKGwucHVzaCh7eDpvW2VdLHk6YX0pLHI9MDtyPHMubGVuZ3RoO3IrKykwPT09ZSYmbC5wdXNoKHt4OmkseTpzW3JdfSksbC5wdXNoKHt4Om9bZV0seTpzW3JdfSk7dmFyIGM9bi5fY2xpcHMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5kYXRhKGwsZnVuY3Rpb24odCl7cmV0dXJuIHQueC5faWQrdC55Ll9pZH0pO2MuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYXhlc2NsaXAiLCEwKS5hdHRyKCJpZCIsZnVuY3Rpb24odCl7cmV0dXJuImNsaXAiK24uX3VpZCt0LnguX2lkK3QueS5faWR9KS5hcHBlbmQoInJlY3QiKSxjLmV4aXQoKS5yZW1vdmUoKSxjLmVhY2goZnVuY3Rpb24odCl7dy5zZWxlY3QodGhpcykuc2VsZWN0KCJyZWN0IikuYXR0cih7eDp0LnguX29mZnNldHx8MCx5OnQueS5fb2Zmc2V0fHwwLHdpZHRoOnQueC5fbGVuZ3RofHwxLGhlaWdodDp0LnkuX2xlbmd0aHx8MX0pfSl9LFUuZG9UaWNrcz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT1jLmwycCh0LngpO3JldHVybiBlPjEmJmU8Yy5fbGVuZ3RoLTF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJwYXRoLiIrXykuZGF0YSgiaW5zaWRlIj09PWMudGlja3M/cTpiLHgpO2UmJmMudGlja3M/KHIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKF8sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKFMuc3Ryb2tlLGMudGlja2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmF0dHIoImQiLGUpLHIuYXR0cigidHJhbnNmb3JtIixkKSxyLmV4aXQoKS5yZW1vdmUoKSk6ci5yZW1vdmUoKX1mdW5jdGlvbiBhKHIsbil7ZnVuY3Rpb24gaSh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj15KGUpLG49dy5zZWxlY3QodGhpcyksaT1uLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLGE9ZCh0KSsoTShlKSYmMCE9K2U/IiByb3RhdGUoIitlKyIsIitoKHQpKyIsIisocCh0KS10LmZvbnRTaXplLzIpKyIpIjoiIik7aWYoaS5lbXB0eSgpKW4uc2VsZWN0KCJ0ZXh0IikuYXR0cih7dHJhbnNmb3JtOmEsInRleHQtYW5jaG9yIjpyfSk7ZWxzZXt2YXIgbz1MLmJCb3goaS5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVtyXTtpLmF0dHIoInRyYW5zZm9ybSIsYSsobz8idHJhbnNsYXRlKCIrbysiLDApIjoiIikpfX0pfWZ1bmN0aW9uIGEoKXtyZXR1cm4gSS5sZW5ndGgmJlByb21pc2UuYWxsKEkpfWZ1bmN0aW9uIHMoKXtpZihpKGYsYy50aWNrYW5nbGUpLCJ4Ij09PWcmJiFNKGMudGlja2FuZ2xlKSYmKCJsb2ciIT09Yy50eXBlfHwiRCIhPT1TdHJpbmcoYy5kdGljaykuY2hhckF0KDApKSl7dmFyIHQ9W107Zm9yKGYuZWFjaChmdW5jdGlvbihlKXt2YXIgcj13LnNlbGVjdCh0aGlzKSxuPXIuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksaT1jLmwycChlLngpO24uZW1wdHkoKSYmKG49ci5zZWxlY3QoInRleHQiKSk7dmFyIGE9TC5iQm94KG4ubm9kZSgpKTt0LnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDppLWEud2lkdGgvMixyaWdodDppK2Eud2lkdGgvMisyLHdpZHRoOmEud2lkdGgrMn0pfSksdj0wO3Y8dC5sZW5ndGgtMTt2KyspaWYoay5iQm94SW50ZXJzZWN0KHRbdl0sdFt2KzFdKSl7Qz0zMDticmVha31pZihDKXtNYXRoLmFicygoYltiLmxlbmd0aC0xXS54LWJbMF0ueCkqYy5fbSkvKGIubGVuZ3RoLTEpPDIuNSpTJiYoQz05MCksaShmLEMpfWMuX2xhc3RhbmdsZT1DfXJldHVybiBvKCksZSsiIGRvbmUifWZ1bmN0aW9uIGwoKXtmdW5jdGlvbiBlKHQsZSl7dFswXT1NYXRoLm1pbih0WzBdLGVbMF0pLHRbMV09TWF0aC5tYXgodFsxXSxlWzFdKX1pZihjLnNob3d0aWNrbGFiZWxzKXt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yy5fYm91bmRpbmdCb3g9e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0LGxlZnQ6aS5sZWZ0LW4ubGVmdCxyaWdodDppLnJpZ2h0LW4ubGVmdCx0b3A6aS50b3Atbi50b3AsYm90dG9tOmkuYm90dG9tLW4udG9wfX1lbHNle3ZhciBhLG89dS5fc2l6ZTsieCI9PT1nPyhhPSJmcmVlIj09PWMuYW5jaG9yP28udCtvLmgqKDEtYy5wb3NpdGlvbik6by50K28uaCooMS1jLl9hbmNob3JBeGlzLmRvbWFpblt7Ym90dG9tOjAsdG9wOjF9W2Muc2lkZV1dKSxjLl9ib3VuZGluZ0JveD17dG9wOmEsYm90dG9tOmEsbGVmdDpjLl9vZmZzZXQscmlndGg6Yy5fb2Zmc2V0K2MuX2xlbmd0aCx3aWR0aDpjLl9sZW5ndGgsaGVpZ2h0OjB9KTooYT0iZnJlZSI9PT1jLmFuY2hvcj9vLmwrby53KmMucG9zaXRpb246by5sK28udypjLl9hbmNob3JBeGlzLmRvbWFpblt7bGVmdDowLHJpZ2h0OjF9W2Muc2lkZV1dLGMuX2JvdW5kaW5nQm94PXtsZWZ0OmEscmlnaHQ6YSxib3R0b206Yy5fb2Zmc2V0K2MuX2xlbmd0aCx0b3A6Yy5fb2Zmc2V0LGhlaWdodDpjLl9sZW5ndGgsd2lkdGg6MH0pfWlmKG0pe3ZhciBzPWMuX2NvdW50ZXJTcGFuPVsxLzAsLSgxLzApXTtmb3Iodj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgbD11Ll9wbG90c1ttW3ZdXSxmPWxbIngiPT09Zz8ieWF4aXMiOiJ4YXhpcyJdO2UocyxbZi5fb2Zmc2V0LGYuX29mZnNldCtmLl9sZW5ndGhdKX0iZnJlZSI9PT1jLmFuY2hvciYmZShzLCJ4Ij09PWc/W2MuX2JvdW5kaW5nQm94LmJvdHRvbSxjLl9ib3VuZGluZ0JveC50b3BdOltjLl9ib3VuZGluZ0JveC5yaWdodCxjLl9ib3VuZGluZ0JveC5sZWZ0XSl9fXZhciBmPXIuc2VsZWN0QWxsKCJnLiIrXykuZGF0YShiLHgpO2lmKCFNKG4pKXJldHVybiBmLnJlbW92ZSgpLHZvaWQgbygpO2lmKCFjLnNob3d0aWNrbGFiZWxzKXJldHVybiBmLnJlbW92ZSgpLG8oKSx2b2lkIGwoKTt2YXIgaCxwLHksVCxFOyJ4Ij09PWc/KEU9ImJvdHRvbSI9PT1OPzE6LTEsaD1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt6KkV9LFQ9bisoUCtEKSpFLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkrVCt0LmZvbnRTaXplKigiYm90dG9tIj09PU4/MTotLjIpfSx5PWZ1bmN0aW9uKHQpe3JldHVybiBNKHQpJiYwIT09dCYmMTgwIT09dD90KkU8MD8iZW5kIjoic3RhcnQiOiJtaWRkbGUifSk6KEU9InJpZ2h0Ij09PU4/MTotMSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3QuZm9udFNpemUqQi16KkV9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrbisoUCtEKyg5MD09PU1hdGguYWJzKGMudGlja2FuZ2xlKT90LmZvbnRTaXplLzI6MCkpKkV9LHk9ZnVuY3Rpb24odCl7cmV0dXJuIE0odCkmJjkwPT09TWF0aC5hYnModCk/Im1pZGRsZSI6InJpZ2h0Ij09PU4/InN0YXJ0IjoiZW5kIn0pO3ZhciBTPTAsQz0wLEk9W107Zi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoXywxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dy5zZWxlY3QodGhpcyksbj10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKEEucG9zaXRpb25UZXh0LGgoZSkscChlKSkuY2FsbChMLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKEEuY29udmVydFRvVHNwYW5zLHQpLG49dC5fcHJvbWlzZXNbbl0sbj9JLnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbihmdW5jdGlvbigpe2kocixjLnRpY2thbmdsZSl9KSk6aShyLGMudGlja2FuZ2xlKX0pLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbih0KXtTPU1hdGgubWF4KFMsdC5mb250U2l6ZSl9KSxpKGYsYy5fbGFzdGFuZ2xlfHxjLnRpY2thbmdsZSk7dmFyIE89ay5zeW5jT3JBc3luYyhbYSxzLGxdKTtyZXR1cm4gTyYmTy50aGVuJiZ0Ll9wcm9taXNlcy5wdXNoKE8pLE99ZnVuY3Rpb24gbygpe2lmKCFyKXt2YXIgbixpLGEsbyxzPUguZ2V0RnJvbUlkKHQsZSksbD13LnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIitlKyJ0aWNrIiksYz17c2VsZWN0aW9uOmwsc2lkZTpzLnNpZGV9LGY9ZS5jaGFyQXQoMCksaD10Ll9mdWxsTGF5b3V0Ll9zaXplLGQ9cy50aXRsZWZvbnQuc2l6ZTtpZihsLnNpemUoKSl7dmFyIHA9TC5nZXRUcmFuc2xhdGUobC5ub2RlKCkucGFyZW50Tm9kZSk7Yy5vZmZzZXRMZWZ0PXAueCxjLm9mZnNldFRvcD1wLnl9dmFyIG09MTArMS41KmQrKHMubGluZXdpZHRoP3MubGluZXdpZHRoLTE6MCk7IngiPT09Zj8oaT0iZnJlZSI9PT1zLmFuY2hvcj97X29mZnNldDpoLnQrKDEtKHMucG9zaXRpb258fDApKSpoLmgsX2xlbmd0aDowfTpILmdldEZyb21JZCh0LHMuYW5jaG9yKSxhPXMuX29mZnNldCtzLl9sZW5ndGgvMixvPSJ0b3AiPT09cy5zaWRlPy1tLWQqKHMuc2hvd3RpY2tsYWJlbHM/MTowKTppLl9sZW5ndGgrbStkKihzLnNob3d0aWNrbGFiZWxzPzEuNTouNSksbys9aS5fb2Zmc2V0LHMucmFuZ2VzbGlkZXImJnMucmFuZ2VzbGlkZXIudmlzaWJsZSYmcy5fYm91bmRpbmdCb3gmJihvKz0odS5oZWlnaHQtdS5tYXJnaW4uYi11Lm1hcmdpbi50KSpzLnJhbmdlc2xpZGVyLnRoaWNrbmVzcytzLl9ib3VuZGluZ0JveC5oZWlnaHQpLGMuc2lkZXx8KGMuc2lkZT0iYm90dG9tIikpOihpPSJmcmVlIj09PXMuYW5jaG9yP3tfb2Zmc2V0OmgubCsocy5wb3NpdGlvbnx8MCkqaC53LF9sZW5ndGg6MH06SC5nZXRGcm9tSWQodCxzLmFuY2hvciksbz1zLl9vZmZzZXQrcy5fbGVuZ3RoLzIsYT0icmlnaHQiPT09cy5zaWRlP2kuX2xlbmd0aCttK2QqKHMuc2hvd3RpY2tsYWJlbHM/MTouNSk6LW0tZCoocy5zaG93dGlja2xhYmVscz8uNTowKSxhKz1pLl9vZmZzZXQsbj17cm90YXRlOiItOTAiLG9mZnNldDowfSxjLnNpZGV8fChjLnNpZGU9ImxlZnQiKSksRS5kcmF3KHQsZSsidGl0bGUiLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6cy5fbmFtZSsiLnRpdGxlIixkZmx0TmFtZTpmLnRvVXBwZXJDYXNlKCkrIiBheGlzIixhdm9pZDpjLHRyYW5zZm9ybTpuLGF0dHJpYnV0ZXM6e3g6YSx5Om8sInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0LnZpc2libGU9PT0hMCYmdC54YXhpcyt0LnlheGlzPT09ZSYmKCEoIVQudHJhY2VJcyh0LCJiYXIiKXx8dC5vcmllbnRhdGlvbiE9PXt4OiJoIix5OiJ2In1bZ10pfHx0LmZpbGwmJnQuZmlsbC5jaGFyQXQodC5maWxsLmxlbmd0aC0xKT09PWcpfWZ1bmN0aW9uIGwoZSxyLGkpe3ZhciBhPWUuZ3JpZGxheWVyLG89ZS56ZXJvbGluZWxheWVyLGw9ZVsiaGlkZWdyaWQiK2ddP1tdOnEsdT1jLl9ncmlkcGF0aHx8Ik0wLDAiKygieCI9PT1nPyJ2IjoiaCIpK3IuX2xlbmd0aCxmPWEuc2VsZWN0QWxsKCJwYXRoLiIrQykuZGF0YShjLnNob3dncmlkPT09ITE/W106bCx4KTtpZihmLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChDLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5hdHRyKCJkIix1KS5lYWNoKGZ1bmN0aW9uKHQpe2MuemVyb2xpbmUmJigibGluZWFyIj09PWMudHlwZXx8Ii0iPT09Yy50eXBlKSYmTWF0aC5hYnModC54KTxjLmR0aWNrLzEwMCYmdy5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxmLmF0dHIoInRyYW5zZm9ybSIsZCkuY2FsbChTLnN0cm9rZSxjLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixPKyJweCIpLGYuZXhpdCgpLnJlbW92ZSgpLG8pe2Zvcih2YXIgaD0hMSxwPTA7cDx0Ll9mdWxsRGF0YS5sZW5ndGg7cCsrKWlmKHModC5fZnVsbERhdGFbcF0saSkpe2g9ITA7YnJlYWt9dmFyIG09ay5zaW1wbGVNYXAoYy5yYW5nZSxjLnIybCksdj1tWzBdKm1bMV08PTAmJmMuemVyb2xpbmUmJigibGluZWFyIj09PWMudHlwZXx8Ii0iPT09Yy50eXBlKSYmbC5sZW5ndGgmJihofHxuKHt4OjB9KXx8IWMuc2hvd2xpbmUpLHk9by5zZWxlY3RBbGwoInBhdGguIitJKS5kYXRhKHY/W3t4OjB9XTpbXSk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoSSwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmF0dHIoImQiLHUpLHkuYXR0cigidHJhbnNmb3JtIixkKS5jYWxsKFMuc3Ryb2tlLGMuemVyb2xpbmVjb2xvcnx8Uy5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsUisicHgiKSx5LmV4aXQoKS5yZW1vdmUoKX19dmFyIGMsdT10Ll9mdWxsTGF5b3V0LGY9ITE7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWM9ZSxlPWMuX2lkLGY9ITA7ZWxzZSBpZihjPVUuZ2V0RnJvbUlkKHQsZSksInJlZHJhdyI9PT1lJiZ1Ll9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dS5fcGxvdHNbdF0scj1lLnhheGlzLG49ZS55YXhpcztlLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIityLl9pZCsidGljayIpLnJlbW92ZSgpLGUueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK24uX2lkKyJ0aWNrIikucmVtb3ZlKCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHUuX2luZm9sYXllci5zZWxlY3QoIi5nLSIrci5faWQrInRpdGxlIikucmVtb3ZlKCksdS5faW5mb2xheWVyLnNlbGVjdCgiLmctIituLl9pZCsidGl0bGUiKS5yZW1vdmUoKX0pLCFlfHwicmVkcmF3Ij09PWUpcmV0dXJuIGsuc3luY09yQXN5bmMoVS5saXN0KHQsIiIsITApLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihyLl9pZCl7dmFyIG49VS5kb1RpY2tzKHQsci5faWQpO3JldHVybiJyZWRyYXciPT09ZSYmKHIuX3I9ci5yYW5nZS5zbGljZSgpLHIuX3JsPWsuc2ltcGxlTWFwKHIuX3Isci5yMmwpKSxufX19KSk7Yy50aWNrZm9ybWF0fHwoWyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLmluZGV4T2YoYy5leHBvbmVudGZvcm1hdCk9PT0tMSYmKGMuZXhwb25lbnRmb3JtYXQ9ImUiKSxbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXS5pbmRleE9mKGMuc2hvd2V4cG9uZW50KT09PS0xJiYoYy5zaG93ZXhwb25lbnQ9ImFsbCIpKSxjLnNldFNjYWxlKCk7dmFyIGgsZCxwLG0sdixnPWUuY2hhckF0KDApLHk9VS5jb3VudGVyTGV0dGVyKGUpLGI9VS5jYWxjVGlja3MoYykseD1mdW5jdGlvbih0KXtyZXR1cm5bdC50ZXh0LHQueCxjLm1pcnJvcl0uam9pbigiXyIpfSxfPWUrInRpY2siLEM9ZSsiZ3JpZCIsST1lKyJ6bCIsRD0oYy5saW5ld2lkdGh8fDEpLzIsUD0ib3V0c2lkZSI9PT1jLnRpY2tzP2MudGlja2xlbjowLHo9MCxPPUwuY3Jpc3BSb3VuZCh0LGMuZ3JpZHdpZHRoLDEpLFI9TC5jcmlzcFJvdW5kKHQsYy56ZXJvbGluZXdpZHRoLE8pLEY9TC5jcmlzcFJvdW5kKHQsYy50aWNrd2lkdGgsMSk7aWYoYy5fY291bnRlcmFuZ2xlJiYib3V0c2lkZSI9PT1jLnRpY2tzKXt2YXIgaj1jLl9jb3VudGVyYW5nbGUqTWF0aC5QSS8xODA7UD1jLnRpY2tsZW4qTWF0aC5jb3MoaikrMSx6PWMudGlja2xlbipNYXRoLnNpbihqKX1pZihjLnNob3d0aWNrbGFiZWxzJiYoIm91dHNpZGUiPT09Yy50aWNrc3x8Yy5zaG93bGluZSkmJihQKz0uMipjLnRpY2tmb250LnNpemUpLCJ4Ij09PWcpaD1bImJvdHRvbSIsInRvcCJdLGQ9ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK2MubDJwKHQueCkrIiwwKSJ9LHA9ZnVuY3Rpb24odCxlKXtpZihjLl9jb3VudGVyYW5nbGUpe3ZhciByPWMuX2NvdW50ZXJhbmdsZSpNYXRoLlBJLzE4MDtyZXR1cm4iTTAsIit0KyJsIitNYXRoLnNpbihyKSplKyIsIitNYXRoLmNvcyhyKSplfXJldHVybiJNMCwiK3QrInYiK2V9O2Vsc2V7aWYoInkiIT09ZylyZXR1cm4gdm9pZCBrLndhcm4oIlVucmVjb2duaXplZCBkb1RpY2tzIGF4aXM6IixlKTtoPVsibGVmdCIsInJpZ2h0Il0sZD1mdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsIitjLmwycCh0LngpKyIpIn0scD1mdW5jdGlvbih0LGUpe2lmKGMuX2NvdW50ZXJhbmdsZSl7dmFyIHI9Yy5fY291bnRlcmFuZ2xlKk1hdGguUEkvMTgwO3JldHVybiJNIit0KyIsMGwiK01hdGguY29zKHIpKmUrIiwiKy1NYXRoLnNpbihyKSplfXJldHVybiJNIit0KyIsMGgiK2V9fXZhciBOPWMuc2lkZXx8aFswXSxWPVstMSwxLE49PT1oWzFdPzE6LTFdO2lmKCJpbnNpZGUiIT09Yy50aWNrcz09KCJ4Ij09PWcpJiYoVj1WLm1hcChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSxjLnZpc2libGUpe3ZhciBxPWIuZmlsdGVyKG4pO2lmKGYpe2lmKGkoYy5fYXhpc2xheWVyLHAoYy5fcG9zK0QqVlsyXSxWWzJdKmMudGlja2xlbikpLGMuX2NvdW50ZXJheGlzKXtsKHtncmlkbGF5ZXI6Yy5fZ3JpZGxheWVyLHplcm9saW5lbGF5ZXI6Yy5femVyb2xpbmVsYXllcn0sYy5fY291bnRlcmF4aXMpfXJldHVybiBhKGMuX2F4aXNsYXllcixjLl9wb3MpfW09VS5nZXRTdWJwbG90cyh0LGMpO3ZhciBHPW0ubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXUuX3Bsb3RzW3RdO2lmKHUuX2hhcygiY2FydGVzaWFuIikpe3ZhciByPWVbZysiYXhpc2xheWVyIl0sbj1jLl9saW5lcG9zaXRpb25zW3RdfHxbXSxvPWVbeSsiYXhpcyJdLHM9by5faWQ9PT1jLmFuY2hvcixmPVshMSwhMSwhMV0sZD0iIjtpZigiYWxsdGlja3MiPT09Yy5taXJyb3I/Zj1bITAsITAsITFdOnMmJigidGlja3MiPT09Yy5taXJyb3I/Zj1bITAsITAsITFdOmZbaC5pbmRleE9mKE4pXT0hMCksYy5taXJyb3JzKWZvcih2PTA7djwyO3YrKyl7dmFyIG09Yy5taXJyb3JzW28uX2lkK2hbdl1dOyJ0aWNrcyIhPT1tJiYibGFiZWxzIiE9PW18fChmW3ZdPSEwKX1yZXR1cm4gdm9pZCAwIT09blsyXSYmKGZbMl09ITApLGYuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciByPW5bZV0saT1WW2VdO3QmJk0ocikmJihkKz1wKHIrRCppLGkqYy50aWNrbGVuKSl9KSxpKHIsZCksbChlLG8sdCksYShyLG5bM10pfX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50aGVufSk7cmV0dXJuIEcubGVuZ3RoP1Byb21pc2UuYWxsKEcpOjB9fSxVLnN3YXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9eSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKyl4KHQscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MDEsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcwOCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4vYXhpc19hdXRvdHlwZSI6NzgwLCIuL2F4aXNfaWRzIjo3ODIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5MCwiLi9sYXlvdXRfZGVmYXVsdHMiOjc5MSwiLi9zZXRfY29udmVydCI6Nzk2LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG8odFtlXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcixuPTAsaT0wLGE9TWF0aC5tYXgoMSwodC5sZW5ndGgtMSkvMWUzKSxsPTA7bDx0Lmxlbmd0aDtsKz1hKXI9dFtNYXRoLnJvdW5kKGwpXSxzLmlzRGF0ZVRpbWUocixlKSYmKG4rPTEpLG8ocikmJihpKz0xKTtyZXR1cm4gbj4yKml9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGUscj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLG49MCxpPTAsYT0wO2E8dC5sZW5ndGg7YSs9cillPXRbTWF0aC5yb3VuZChhKV0scy5jbGVhbk51bWJlcihlKSE9PWw/bisrOiJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lJiYiTm9uZSIhPT1lJiZpKys7cmV0dXJuIGk+MipufXZhciBvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCxlKT8iZGF0ZSI6YSh0KT8iY2F0ZWdvcnkiOm4odCk/ImxpbmVhciI6Ii0ifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5saWdodEZyYWN0aW9uLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuL3RpY2tfbWFya19kZWZhdWx0cyIpLHU9dCgiLi90aWNrX2xhYmVsX2RlZmF1bHRzIiksZj10KCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksaD10KCIuL3NldF9jb252ZXJ0IiksZD10KCIuL29yZGVyZWRfY2F0ZWdvcmllcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwLG0pe2Z1bmN0aW9uIHYocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxzLHIsbil9dmFyIGc9cC5sZXR0ZXIseT1wLmZvbnR8fHt9LGI9IkNsaWNrIHRvIGVudGVyICIrKHAudGl0bGV8fGcudG9VcHBlckNhc2UoKSsiIGF4aXMiKSsiIHRpdGxlIix4PXIoInZpc2libGUiLCFwLmNoZWF0ZXJvbmx5KSxfPWUudHlwZTtpZigiZGF0ZSI9PT1fKXtpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixwLmNhbGVuZGFyKX1pZihoKGUsbSkscigiYXV0b3JhbmdlIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZyKCJyYW5nZW1vZGUiKSxyKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGYodCxlLHIpLGUuX2luaXRpYWxDYXRlZ29yaWVzPSJjYXRlZ29yeSI9PT1fP2QoZyxlLmNhdGVnb3J5b3JkZXIsZS5jYXRlZ29yeWFycmF5LHAuZGF0YSk6W10sIXgpcmV0dXJuIGU7dmFyIHc9cigiY29sb3IiKSxNPXc9PT10LmNvbG9yP3c6eS5jb2xvcjtyKCJ0aXRsZSIsYiksYS5jb2VyY2VGb250KHIsInRpdGxlZm9udCIse2ZhbWlseTp5LmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnkuc2l6ZSksY29sb3I6TX0pLGwodCxlLHIsXyksdSh0LGUscixfLHApLGModCxlLHIscCk7dmFyIFQ9digibGluZWNvbG9yIix3KSxrPXYoImxpbmV3aWR0aCIpLEE9cigic2hvd2xpbmUiLCEhVHx8ISFrKTtBfHwoZGVsZXRlIGUubGluZWNvbG9yLGRlbGV0ZSBlLmxpbmV3aWR0aCksKEF8fGUudGlja3MpJiZyKCJtaXJyb3IiKTt2YXIgRT12KCJncmlkY29sb3IiLG4odyxwLmJnQ29sb3IsbykudG9SZ2JTdHJpbmcoKSksUz12KCJncmlkd2lkdGgiKTtyKCJzaG93Z3JpZCIscC5zaG93R3JpZHx8ISFFfHwhIVMpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCk7dmFyIEw9digiemVyb2xpbmVjb2xvciIsdyksQz12KCJ6ZXJvbGluZXdpZHRoIik7cmV0dXJuIHIoInplcm9saW5lIixwLnNob3dHcmlkfHwhIUx8fCEhQyl8fChkZWxldGUgZS56ZXJvbGluZWNvbG9yLGRlbGV0ZSBlLnplcm9saW5ld2lkdGgpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzgzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTAsIi4vb3JkZXJlZF9jYXRlZ29yaWVzIjo3OTIsIi4vc2V0X2NvbnZlcnQiOjc5NiwiLi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3OTcsIi4vdGlja19tYXJrX2RlZmF1bHRzIjo3OTgsIi4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzk5LHRpbnljb2xvcjI6NTQyfV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtmb3IodmFyIG49T2JqZWN0LmtleXModCksaT0vXlt4eXpdYXhpc1swLTldKi8sYT1bXSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107ZSYmcy5jaGFyQXQoMCkhPT1lfHxpLnRlc3QocykmJmEucHVzaChyK3MpfXJldHVybiBhLnNvcnQoKX12YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBvPW4oaSwiIik7aWYocilyZXR1cm4gbztmb3IodmFyIHM9YS5nZXRTdWJwbG90SWRzKGksImdsM2QiKXx8W10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO289by5jb25jYXQobihpW2NdLGMrIi4iKSl9cmV0dXJuIG99dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4vY29uc3RhbnRzIik7ci5pZDJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChzLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrImF4aXMiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChzLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKStlfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQsZSl7aWYodC5tYXRjaChzLkFYX0lEX1BBVFRFUk4pJiYoIWV8fHQuY2hhckF0KDApPT09ZSkpe3ZhciByPXQuc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PXImJihyPSIiKSx0LmNoYXJBdCgwKStyfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbih0LGUscikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvLm5lc3RlZFByb3BlcnR5KHQuX2Z1bGxMYXlvdXQsZSkuZ2V0KCl9KX0sci5saXN0SWRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlLCEwKS5tYXAoci5uYW1lMmlkKX0sci5nZXRGcm9tSWQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIngiPT09bj9lPWUucmVwbGFjZSgveVswLTldKi8sIiIpOiJ5Ij09PW4mJihlPWUucmVwbGFjZSgveFswLTldKi8sIiIpKSxpW3IuaWQybmFtZShlKV19LHIuZ2V0RnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihpLnRyYWNlSXMoZSwiZ2wzZCIpKXt2YXIgcz1lLnNjZW5lOyJzY2VuZSI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW24rImF4aXMiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtuKyJheGlzIl18fG4pO3JldHVybiBvfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vcGxvdHMiOjgzOCwiLi9jb25zdGFudHMiOjc4NH1dLDc4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBuLGk9dC5jYXRlZ29yeWFycmF5LGE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDthJiYobj0iYXJyYXkiKTt2YXIgbz1yKCJjYXRlZ29yeW9yZGVyIixuKTsiYXJyYXkiPT09byYmcigiY2F0ZWdvcnlhcnJheSIpLAphfHwiYXJyYXkiIT09b3x8KGUuY2F0ZWdvcnlvcmRlcj0idHJhY2UiKX19fSx7fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIpLHk6bigieSIpfSxhdHRyUmVnZXg6bigiW3h5XWF4aXMiKSx4QXhpc01hdGNoOm4oInhheGlzIikseUF4aXNNYXRjaDpuKCJ5YXhpcyIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDoiLXNlbGVjdCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwibWFwbGF5ZXIiLCJiYXJsYXllciIsImNhcnBldGxheWVyIiwidmlvbGlubGF5ZXIiLCJib3hsYXllciIsInNjYXR0ZXJsYXllciJdLGxheWVyVmFsdWUybGF5ZXJDbGFzczp7ImFib3ZlIHRyYWNlcyI6ImFib3ZlIiwiYmVsb3cgdHJhY2VzIjoiYmVsb3cifX19LHsiLi4vLi4vbGliIjo3MzV9XSw3ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaSxhLHMsbCxjPW5bbyhlKV0udHlwZSx1PVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspKHM9clthXSkhPT1lJiYobD1uW28ocyldLGwudHlwZSE9PWN8fGwuZml4ZWRyYW5nZXx8dS5wdXNoKHMpKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHRbaV1bZV0pe3ZhciBmPXRbaV0saD1bXTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXM9dVthXSxmW3NdfHxoLnB1c2gocyk7cmV0dXJue2xpbmthYmxlQXhlczpoLHRoaXNHcm91cDpmfX1yZXR1cm57bGlua2FibGVBeGVzOnUsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPyhlPXt9LGVbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBmPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylsPXVbb10sc1tsXT1mKmkqZVtsXTtyZXR1cm4gdm9pZCB0LnNwbGljZShjLDEpfWlmKDEhPT1pKWZvcihvPTA7bzx1Lmxlbmd0aDtvKyspZVt1W29dXSo9aTtlW25dPTF9dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2F4aXNfaWRzIikuaWQybmFtZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zLl9heGlzQ29uc3RyYWludEdyb3VwcyxjPWUuX2lkLHU9Yy5jaGFyQXQoMCk7aWYoIWUuZml4ZWRyYW5nZSYmKHIoImNvbnN0cmFpbiIpLGEuY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09dT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDoieCI9PT11PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpLHQuc2NhbGVhbmNob3IpKXt2YXIgZj1uKGwsYyxvLHMpLGg9YS5jb2VyY2UodCxlLHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmYubGlua2FibGVBeGVzfX0sInNjYWxlYW5jaG9yIik7aWYoaCl7dmFyIGQ9cigic2NhbGVyYXRpbyIpO2R8fChkPWUuc2NhbGVyYXRpbz0xKSxpKGwsZi50aGlzR3JvdXAsYyxoLGQpfWVsc2Ugby5pbmRleE9mKHQuc2NhbGVhbmNob3IpIT09LTEmJmEud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXRheGlzIGhhcyBmaXhlZCByYW5nZS4nKX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2F4aXNfaWRzIjo3ODJ9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49c1t0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXX12YXIgaT10KCIuL2F4aXNfaWRzIikuaWQybmFtZSxhPXQoIi4vc2NhbGVfem9vbSIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCxzPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO3IuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLHMsbCxjLHUsZixoPXQuX2Z1bGxMYXlvdXQsZD1oLl9heGlzQ29uc3RyYWludEdyb3Vwcztmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgcD1kW2VdLG09T2JqZWN0LmtleXMocCksdj0xLzAsZz0wLHk9MS8wLGI9e30seD17fSxfPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspcz1tW3JdLHhbc109bD1oW2kocyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxiW3NdPWM9TWF0aC5hYnMobC5fbSkvcFtzXSx2PU1hdGgubWluKHYsYyksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fCh5PU1hdGgubWluKHksYykpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSxnPU1hdGgubWF4KGcsYyksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKF89ITApO2lmKCEodj5vKmcpfHxfKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYocz1tW3JdLGM9YltzXSxsPXhbc10sdT1sLmNvbnN0cmFpbixjIT09eXx8ImRvbWFpbiI9PT11KWlmKGY9Yy95LCJyYW5nZSI9PT11KWEobCxmKTtlbHNle3ZhciB3PWwuX2lucHV0RG9tYWluLE09KGwuZG9tYWluWzFdLWwuZG9tYWluWzBdKS8od1sxXS13WzBdKSxUPShsLnIybChsLnJhbmdlWzFdKS1sLnIybChsLnJhbmdlWzBdKSkvKGwucjJsKGwuX2lucHV0UmFuZ2VbMV0pLWwucjJsKGwuX2lucHV0UmFuZ2VbMF0pKTtpZigoZi89TSkqVDwxKXtsLmRvbWFpbj1sLl9pbnB1dC5kb21haW49dy5zbGljZSgpLGEobCxmKTtjb250aW51ZX1pZihUPDEmJihsLnJhbmdlPWwuX2lucHV0LnJhbmdlPWwuX2lucHV0UmFuZ2Uuc2xpY2UoKSxmKj1UKSxsLmF1dG9yYW5nZSYmbC5fbWluLmxlbmd0aCYmbC5fbWF4Lmxlbmd0aCl7dmFyIGs9bC5yMmwobC5yYW5nZVswXSksQT1sLnIybChsLnJhbmdlWzFdKSxFPShrK0EpLzIsUz1FLEw9RSxDPU1hdGguYWJzKEEtRSksST1FLUMqZioxLjAwMDEsRD1FK0MqZioxLjAwMDE7bihsLGYpLGwuc2V0U2NhbGUoKTt2YXIgUCx6LE89TWF0aC5hYnMobC5fbSk7Zm9yKHo9MDt6PGwuX21pbi5sZW5ndGg7eisrKShQPWwuX21pblt6XS52YWwtbC5fbWluW3pdLnBhZC9PKT5JJiZQPFMmJihTPVApO2Zvcih6PTA7ejxsLl9tYXgubGVuZ3RoO3orKykoUD1sLl9tYXhbel0udmFsK2wuX21heFt6XS5wYWQvTyk8RCYmUD5MJiYoTD1QKTt2YXIgUj0oTC1TKS8oMipDKTtmLz1SLFM9bC5sMnIoUyksTD1sLmwycihMKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPWs8QT9bUyxMXTpbTCxTXX1uKGwsZil9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcwOCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuL2F4aXNfaWRzIjo3ODIsIi4vc2NhbGVfem9vbSI6Nzk0fV0sNzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dmFyIHM9dC5kcmFnbGF5ZXIuc2VsZWN0QWxsKCIuIitlKS5kYXRhKFswXSk7cmV0dXJuIHMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJkcmFnIiwhMCkuY2xhc3NlZChlLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLHQuaWQpLHMuY2FsbChFLnNldFJlY3QsbixpLGEsbykuY2FsbChTLHIpLHMubm9kZSgpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuPXQucmFuZ2VbZV0saT1NYXRoLmFicyhuLXQucmFuZ2VbMS1lXSk7cmV0dXJuImRhdGUiPT09dC50eXBlP246ImxvZyI9PT10LnR5cGU/KHI9TWF0aC5jZWlsKE1hdGgubWF4KDAsLU1hdGgubG9nKGkpL01hdGguTE4xMCkpKzMseC5mb3JtYXQoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQseC5mb3JtYXQoIi4iK1N0cmluZyhyKSsiZyIpKG4pKX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7dmFyIGEscyxsLGM7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylzPXRbYV0scy5maXhlZHJhbmdlfHwobD1zLl9ybFswXSxjPXMuX3JsWzFdLWwscy5yYW5nZT1bcy5sMnIobCtjKmUpLHMubDJyKGwrYypyKV0sbltzLl9uYW1lKyIucmFuZ2VbMF0iXT1zLnJhbmdlWzBdLG5bcy5fbmFtZSsiLnJhbmdlWzFdIl09cy5yYW5nZVsxXSk7aWYoaSYmaS5sZW5ndGgpe3ZhciB1PShlKygxLXIpKS8yO28oaSx1LDEtdSxuKX19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBsKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0PyJuc2V3Ij09PXQ/InBhbiI9PT1lPyJtb3ZlIjoiY3Jvc3NoYWlyIjp0LnRvTG93ZXJDYXNlKCkrIi1yZXNpemUiOiJwb2ludGVyIn1mdW5jdGlvbiB1KHQsZSxyLG4saSl7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94Iikuc3R5bGUoe2ZpbGw6ZT4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityKyIsICIrbisiKSIpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOkEuYmFja2dyb3VuZCxzdHJva2U6QS5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gaCh0KXt0LnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixuLGksYSl7dC5hdHRyKCJkIixuKyJNIityLmwrIiwiK3IudCsidiIrci5oKyJoIityLncrInYtIityLmgrImgtIityLncrIloiKSxpfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGE+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIHAodCl7eC5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBtKHQpe3JldHVyblsibGFzc28iLCJzZWxlY3QiXS5pbmRleE9mKHQpIT09LTF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtai0uNSkrImgtM3YiKygyKmorMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1qLS41KSsiaDN2IisoMipqKzEpKyJoLTNaIn1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIk0iKyhlLWotLjUpKyIsIisodC50LS41KSsidi0zaCIrKDIqaisxKSsidjNaTSIrKGUtai0uNSkrIiwiKyh0LmIrLjUpKyJ2M2giKygyKmorMSkrInYtM1oifWZ1bmN0aW9uIHkodCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLm1pbih0LmItdC50LHQuci10LmwsaikvMik7cmV0dXJuIk0iKyh0LmwtMy41KSsiLCIrKHQudC0uNStlKSsiaDN2IistZSsiaCIrZSsidi0zaC0iKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC50LS41K2UpKyJoLTN2IistZSsiaCIrLWUrInYtM2giKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC5iKy41LWUpKyJoLTN2IitlKyJoIistZSsidjNoIisoZSszKSsiWk0iKyh0LmwtMy41KSsiLCIrKHQuYisuNS1lKSsiaDN2IitlKyJoIitlKyJ2M2gtIisoZSszKSsiWiJ9ZnVuY3Rpb24gYih0LGUscil7dmFyIG4saSxhLG8scyxsLGM9ITEsdT17fSxmPXt9O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2ZvcihvPXRbbl0saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG9bZVtpXV0pe2ZvcihzIGluIG8pKCJ4Ij09PXMuY2hhckF0KDApP2U6cikuaW5kZXhPZihzKT09PS0xJiYodVtzXT0xKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKW9bclthXV0mJihjPSEwKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWlmKG9bcltpXV0pZm9yKGwgaW4gbykoIngiPT09bC5jaGFyQXQoMCk/ZTpyKS5pbmRleE9mKGwpPT09LTEmJihmW2xdPTEpfXJldHVybiBjJiYoVC5leHRlbmRGbGF0KHUsZiksZj17fSkse3g6dSx5OmYseHk6Y319dmFyIHg9dCgiZDMiKSxfPXQoInRpbnljb2xvcjIiKSx3PXQoIi4uLy4uL3Bsb3RseSIpLE09dCgiLi4vLi4vcmVnaXN0cnkiKSxUPXQoIi4uLy4uL2xpYiIpLGs9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksQT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksRT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxTPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxMPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxDPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLEk9dCgiLi4vcGxvdHMiKSxEPXQoIi4vYXhlcyIpLmRvVGlja3MsUD10KCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLHo9dCgiLi9zZWxlY3QiKSxPPXQoIi4vc2NhbGVfem9vbSIpLFI9dCgiLi9jb25zdGFudHMiKSxGPVIuTUlORFJBRyxqPVIuTUlOWk9PTSxOPSEwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixBLFMsQixVLFYpe2Z1bmN0aW9uIEgoKXtldD1bZS54YXhpc10scnQ9W2UueWF4aXNdO3ZhciByPWV0WzBdLG49cnRbMF07YXQ9ci5fbGVuZ3RoLG90PW4uX2xlbmd0aDt2YXIgYT1kdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsbz1bci5faWRdLHM9W24uX2lkXTt0dD1bZV0uY29uY2F0KFUmJlY/ZS5vdmVybGF5czpbXSk7Zm9yKHZhciBsPTE7bDx0dC5sZW5ndGg7bCsrKXt2YXIgdT10dFtsXS54YXhpcyxmPXR0W2xdLnlheGlzO2V0LmluZGV4T2YodSk9PT0tMSYmKGV0LnB1c2godSksby5wdXNoKHUuX2lkKSkscnQuaW5kZXhPZihmKT09PS0xJiYocnQucHVzaChmKSxzLnB1c2goZi5faWQpKX1zdD1pKGV0LFYpLGx0PWkocnQsVSksY3Q9YyhsdCtzdCxkdC5kcmFnbW9kZSksbnQ9ci5fb2Zmc2V0LGl0PW4uX29mZnNldDt2YXIgaD1iKGEsbyxzKTt1dD1oLnh5LGZ0PVtdO2Zvcih2YXIgZCBpbiBoLngpZnQucHVzaChQKHQsZCkpO2h0PVtdO2Zvcih2YXIgcCBpbiBoLnkpaHQucHVzaChQKHQscCkpfWZ1bmN0aW9uIHEoZSxyLG4pe3ZhciBpPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3l0PXItaS5sZWZ0LGJ0PW4taS50b3AseHQ9e2w6eXQscjp5dCx3OjAsdDpidCxiOmJ0LGg6MH0sX3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6Xyh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9Ik0wLDBIIithdCsiViIrb3QrIkgwVjAiLE10PSExLFR0PSJ4eSIsa3Q9dShwdCxfdCxudCxpdCx3dCksQXQ9ZihwdCxudCxpdCksaChwdCl9ZnVuY3Rpb24gRyhlLHIpe2Z1bmN0aW9uIG4oKXtUdD0iIix4dC5yPXh0LmwseHQudD14dC5iLEF0LmF0dHIoImQiLCJNMCwwWiIpfWlmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIGk9TWF0aC5tYXgoMCxNYXRoLm1pbihhdCxlK3l0KSksYT1NYXRoLm1heCgwLE1hdGgubWluKG90LHIrYnQpKSxvPU1hdGguYWJzKGkteXQpLHM9TWF0aC5hYnMoYS1idCk7eHQubD1NYXRoLm1pbih5dCxpKSx4dC5yPU1hdGgubWF4KHl0LGkpLHh0LnQ9TWF0aC5taW4oYnQsYSkseHQuYj1NYXRoLm1heChidCxhKSx1dD9vPmp8fHM+aj8oVHQ9Inh5IixvL2F0PnMvb3Q/KHM9bypvdC9hdCxidD5hP3h0LnQ9YnQtczp4dC5iPWJ0K3MpOihvPXMqYXQvb3QseXQ+aT94dC5sPXl0LW86eHQucj15dCtvKSxBdC5hdHRyKCJkIix5KHh0KSkpOm4oKTohbHR8fHM8TWF0aC5taW4oTWF0aC5tYXgoLjYqbyxGKSxqKT9vPEY/bigpOih4dC50PTAseHQuYj1vdCxUdD0ieCIsQXQuYXR0cigiZCIsdih4dCxidCkpKTohc3R8fG88TWF0aC5taW4oLjYqcyxqKT8oeHQubD0wLHh0LnI9YXQsVHQ9InkiLEF0LmF0dHIoImQiLGcoeHQseXQpKSk6KFR0PSJ4eSIsQXQuYXR0cigiZCIseSh4dCkpKSx4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxkKGt0LEF0LHh0LHd0LE10LF90KSxNdD0hMH1mdW5jdGlvbiBZKGUscil7aWYoTWF0aC5taW4oeHQuaCx4dC53KTwyKkYpcmV0dXJuIDI9PT1yJiZLKCkscCh0KTsieHkiIT09VHQmJiJ4IiE9PVR0fHxvKGV0LHh0LmwvYXQseHQuci9hdCxFdCxmdCksInh5IiE9PVR0JiYieSIhPT1UdHx8byhydCwob3QteHQuYikvb3QsKG90LXh0LnQpL290LEV0LGh0KSxwKHQpLFEoVHQpLE4mJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKFQubm90aWZpZXIoIkRvdWJsZS1jbGljayB0bzxicj56b29tIGJhY2sgb3V0IiwibG9uZyIpLE49ITEpfWZ1bmN0aW9uIFgoZSxyKXt2YXIgbj0xPT09KFUrVikubGVuZ3RoO2lmKGUpUSgpO2Vsc2UgaWYoMiE9PXJ8fG4pe2lmKDE9PT1yJiZuKXt2YXIgaT1VP3J0WzBdOmV0WzBdLG89InMiPT09VXx8InciPT09Vj8wOjEscz1pLl9uYW1lKyIucmFuZ2VbIitvKyJdIixsPWEoaSxvKSxjPSJsZWZ0Iix1PSJtaWRkbGUiO2lmKGkuZml4ZWRyYW5nZSlyZXR1cm47VT8odT0ibiI9PT1VPyJ0b3AiOiJib3R0b20iLCJyaWdodCI9PT1pLnNpZGUmJihjPSJyaWdodCIpKToiZSI9PT1WJiYoYz0icmlnaHQiKSx0Ll9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZ4LnNlbGVjdCh2dCkuY2FsbChrLm1ha2VFZGl0YWJsZSx7Z2Q6dCxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDpkdC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGwpLGZpbGw6aS50aWNrZm9udD9pLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246Yyx2ZXJ0aWNhbEFsaWduOnV9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dmFyIHI9aS5kMnIoZSk7dm9pZCAwIT09ciYmdy5yZWxheW91dCh0LHMscil9KX19ZWxzZSBLKCl9ZnVuY3Rpb24gVyhlKXtmdW5jdGlvbiByKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LmwycihhKyhlLWEpKnIpfWlmKCF0LmZpeGVkcmFuZ2Upe3ZhciBpPVQuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9aVswXSsoaVsxXS1pWzBdKSplO3QucmFuZ2U9aS5tYXAobil9fWlmKHQuX2NvbnRleHQuc2Nyb2xsWm9vbXx8ZHQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIFQucGF1c2VFdmVudChlKTt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5wbG90bHkiKTtpZihIKCksIShuLnNjcm9sbEhlaWdodC1uLmNsaWVudEhlaWdodD4xMHx8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoPjEwKSl7Y2xlYXJUaW1lb3V0KEx0KTt2YXIgaT0tZS5kZWx0YVk7aWYoaXNGaW5pdGUoaSl8fChpPWUud2hlZWxEZWx0YS8xMCksIWlzRmluaXRlKGkpKXJldHVybiB2b2lkIFQubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsZSk7dmFyIGEsbz1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgoaSwtMjApLDIwKS8yMDApLHM9SXQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9KGUuY2xpZW50WC1zLmxlZnQpL3Mud2lkdGgsYz0ocy5ib3R0b20tZS5jbGllbnRZKS9zLmhlaWdodDtpZihWfHx1dCl7Zm9yKFZ8fChsPS41KSxhPTA7YTxldC5sZW5ndGg7YSsrKXIoZXRbYV0sbCxvKTtTdFsyXSo9byxTdFswXSs9U3RbMl0qbCooMS9vLTEpfWlmKFV8fHV0KXtmb3IoVXx8KGM9LjUpLGE9MDthPHJ0Lmxlbmd0aDthKyspcihydFthXSxjLG8pO1N0WzNdKj1vLFN0WzFdKz1TdFszXSooMS1jKSooMS9vLTEpfXJldHVybiAkKFN0KSxKKFUsViksTHQ9c2V0VGltZW91dChmdW5jdGlvbigpe1N0PVswLDAsYXQsb3RdO3ZhciB0O3Q9dXQ/Inh5IjooVj8ieCI6IiIpKyhVPyJ5IjoiIiksUSh0KX0sQ3QpLFQucGF1c2VFdmVudChlKX19fWZ1bmN0aW9uIFooZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS9sKHIvcy5fbGVuZ3RoKTt2YXIgYz1zLmwycihpKTtjIT09ITEmJnZvaWQgMCE9PWMmJihzLnJhbmdlW2VdPWMpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfWlmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZihIKCksImV3Ij09PXN0fHwibnMiPT09bHQpcmV0dXJuIHN0JiZzKGV0LGUpLGx0JiZzKHJ0LHIpLCQoW3N0Py1lOjAsbHQ/LXI6MCxhdCxvdF0pLHZvaWQgSihsdCxzdCk7aWYodXQmJnN0JiZsdCl7dmFyIGk9InciPT09c3Q9PSgibiI9PT1sdCk/MTotMSxhPShlL2F0K2kqci9vdCkvMjtlPWEqYXQscj1pKmEqb3R9InciPT09c3Q/ZT1uKGV0LDAsZSk6ImUiPT09c3Q/ZT1uKGV0LDEsLWUpOnN0fHwoZT0wKSwibiI9PT1sdD9yPW4ocnQsMSxyKToicyI9PT1sdD9yPW4ocnQsMCwtcik6bHR8fChyPTApO3ZhciBvPSJ3Ij09PXN0P2U6MCxjPSJuIj09PWx0P3I6MDtpZih1dCl7dmFyIHU7aWYoIXN0JiYxPT09bHQubGVuZ3RoKXtmb3IodT0wO3U8ZXQubGVuZ3RoO3UrKylldFt1XS5yYW5nZT1ldFt1XS5fci5zbGljZSgpLE8oZXRbdV0sMS1yL290KTtlPXIqYXQvb3Qsbz1lLzJ9aWYoIWx0JiYxPT09c3QubGVuZ3RoKXtmb3IodT0wO3U8cnQubGVuZ3RoO3UrKylydFt1XS5yYW5nZT1ydFt1XS5fci5zbGljZSgpLE8ocnRbdV0sMS1lL2F0KTtyPWUqb3QvYXQsYz1yLzJ9fSQoW28sYyxhdC1lLG90LXJdKSxKKGx0LHN0KX19ZnVuY3Rpb24gSihlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdLmZpeGVkcmFuZ2V8fG8ucHVzaCh0W2FdLl9pZCl9ZnVuY3Rpb24gaShuLGkscyl7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGw9blthXTtpZigociYmby5pbmRleE9mKGwueHJlZikhPT0tMXx8ZSYmby5pbmRleE9mKGwueXJlZikhPT0tMSkmJihpKHQsYSkscykpcmV0dXJufX12YXIgYSxvPVtdO2Zvcigocnx8dXQpJiYobihldCksbihmdCkpLChlfHx1dCkmJihuKHJ0KSxuKGh0KSksRXQ9e30sYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO0QodCxzLCEwKTt2YXIgbD1QKHQscyk7RXRbbC5fbmFtZSsiLnJhbmdlWzBdIl09bC5yYW5nZVswXSxFdFtsLl9uYW1lKyIucmFuZ2VbMV0iXT1sLnJhbmdlWzFdfWkoZHQuYW5ub3RhdGlvbnN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksaShkdC5zaGFwZXN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3T25lIikpLGkoZHQuaW1hZ2VzfHxbXSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX1mdW5jdGlvbiBLKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlLHIsbixpPXQuX2NvbnRleHQuZG91YmxlQ2xpY2ssYT0oc3Q/ZXQ6W10pLmNvbmNhdChsdD9ydDpbXSksbz17fTtpZigicmVzZXQrYXV0b3NpemUiPT09aSlmb3IoaT0iYXV0b3NpemUiLHI9MDtyPGEubGVuZ3RoO3IrKylpZihlPWFbcl0sZS5fcmFuZ2VJbml0aWFsJiYoZS5yYW5nZVswXSE9PWUuX3JhbmdlSW5pdGlhbFswXXx8ZS5yYW5nZVsxXSE9PWUuX3JhbmdlSW5pdGlhbFsxXSl8fCFlLl9yYW5nZUluaXRpYWwmJiFlLmF1dG9yYW5nZSl7aT0icmVzZXQiO2JyZWFrfWlmKCJhdXRvc2l6ZSI9PT1pKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspZT1hW3JdLGUuZml4ZWRyYW5nZXx8KG9bZS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTtlbHNlIGlmKCJyZXNldCI9PT1pKWZvcigoc3R8fHV0KSYmKGE9YS5jb25jYXQoZnQpKSxsdCYmIXV0JiYoYT1hLmNvbmNhdChodCkpLHV0JiYoc3Q/bHR8fChhPWEuY29uY2F0KHJ0KSk6YT1hLmNvbmNhdChldCkpLHI9MDtyPGEubGVuZ3RoO3IrKyllPWFbcl0sZS5fcmFuZ2VJbml0aWFsPyhuPWUuX3JhbmdlSW5pdGlhbCxvW2UuX25hbWUrIi5yYW5nZVswXSJdPW5bMF0sb1tlLl9uYW1lKyIucmFuZ2VbMV0iXT1uWzFdKTpvW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT0hMDt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksdy5yZWxheW91dCh0LG8pfX1mdW5jdGlvbiBRKGUpe3ZvaWQgMD09PWUmJihlPShWPyJ4IjoiIikrKFU/InkiOiIiKSksJChbMCwwLGF0LG90XSksVC5zeW5jT3JBc3luYyhbSS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dy5yZWxheW91dCh0LEV0KX1dLHQpfWZ1bmN0aW9uICQodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5maXhlZHJhbmdlPzA6ZCYmZnQuaW5kZXhPZih0KSE9PS0xP2Y6cCYmKHV0P2Z0Omh0KS5pbmRleE9mKHQpIT09LTE/aDowfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gZT8odC5yYW5nZT10Ll9yLnNsaWNlKCksTyh0LGUpLG4odCxlKSk6MH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpDW3QuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19dmFyIGksYSxvLHMsbCxjPWR0Ll9wbG90cyx1PU9iamVjdC5rZXlzKGMpLGY9dFsyXS9ldFswXS5fbGVuZ3RoLGg9dFszXS9ydFswXS5fbGVuZ3RoLGQ9Vnx8dXQscD1VfHx1dDtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKXt2YXIgbT1jW3VbaV1dLHY9bS54YXhpcyxnPW0ueWF4aXMseT1kJiYhdi5maXhlZHJhbmdlJiZldC5pbmRleE9mKHYpIT09LTEsYj1wJiYhZy5maXhlZHJhbmdlJiZydC5pbmRleE9mKGcpIT09LTE7aWYoeT8oYT1mLHM9Vj90WzBdOm4odixhKSk6KGE9ZSh2KSxzPXIodixhKSksYj8obz1oLGw9VT90WzFdOm4oZyxvKSk6KG89ZShnKSxsPXIoZyxvKSksYXx8byl7YXx8KGE9MSksb3x8KG89MSk7dmFyIHg9di5fb2Zmc2V0LXMvYSxfPWcuX29mZnNldC1sL287ZHQuX2RlZnMuc2VsZWN0KCIjIittLmNsaXBJZCsiPiByZWN0IikuY2FsbChFLnNldFRyYW5zbGF0ZSxzLGwpLmNhbGwoRS5zZXRTY2FsZSxhLG8pO3ZhciB3PW0ucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnBvaW50cywgLmJveGxheWVyIC5wb2ludHMiKTttLnBsb3QuY2FsbChFLnNldFRyYW5zbGF0ZSx4LF8pLmNhbGwoRS5zZXRTY2FsZSwxL2EsMS9vKSx3LnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChFLnNldFBvaW50R3JvdXBTY2FsZSxhLG8pLmNhbGwoRS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pLHcuc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChFLnNldFRleHRQb2ludHNTY2FsZSxhLG8pLmNhbGwoRS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pfX19dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LGR0PXQuX2Z1bGxMYXlvdXQscHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLG10PVUrVj09PSJuc2V3IjtIKCk7dmFyIHZ0PW4oZSxVK1YrImRyYWciLGN0LHIsQSxTLEIpO2lmKCFsdCYmIXN0JiYhbShkdC5kcmFnbW9kZSkpcmV0dXJuIHZ0Lm9ubW91c2Vkb3duPW51bGwsdnQuc3R5bGUucG9pbnRlckV2ZW50cz1tdD8iYWxsIjoibm9uZSIsdnQ7dmFyIGd0PXtlbGVtZW50OnZ0LGdkOnQscGxvdGluZm86ZSxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7bXQ/ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIik6aT0icGFuIixndC5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KGd0Lm1vdmVGbj1HLGd0LmRvbmVGbj1ZLGd0Lm1pbkRyYWc9MSxxKGUscixuKSk6InBhbiI9PT1pPyhndC5tb3ZlRm49WixndC5kb25lRm49WCxoKHB0KSk6bShpKSYmKGd0LnhheGVzPWV0LGd0LnlheGVzPXJ0LHooZSxyLG4sZ3QsaSkpfX07TC5pbml0KGd0KTt2YXIgeXQsYnQseHQsX3Qsd3QsTXQsVHQsa3QsQXQsRXQ9e30sU3Q9WzAsMCxhdCxvdF0sTHQ9bnVsbCxDdD1SLlJFRFJBV0RFTEFZLEl0PWUubWFpbnBsb3Q/ZHQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7cmV0dXJuIFUubGVuZ3RoKlYubGVuZ3RoIT0xJiYodm9pZCAwIT09dnQub253aGVlbD92dC5vbndoZWVsPVc6dm9pZCAwIT09dnQub25tb3VzZXdoZWVsJiYodnQub25tb3VzZXdoZWVsPVcpKSx2dH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MzIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MDgsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NTMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vcGxvdHMiOjgzOCwiLi9heGVzIjo3NzksIi4vYXhpc19pZHMiOjc4MiwiLi9jb25zdGFudHMiOjc4NCwiLi9zY2FsZV96b29tIjo3OTQsIi4vc2VsZWN0Ijo3OTUsZDM6MTIxLHRpbnljb2xvcjI6NTQyfV0sNzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9kcmFnYm94Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoKGUuX2hhcygiY2FydGVzaWFuIil8fGUuX2hhcygiZ2wyZCIpKSYmIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBsPWUuX3Bsb3RzW3JdLGM9bC54YXhpcyx1PWwueWF4aXMsZj0oYy5fbGluZXBvc2l0aW9uc1tyXXx8W10pWzNdLGg9KHUuX2xpbmVwb3NpdGlvbnNbcl18fFtdKVszXSxkPW8uRFJBR0dFUlNJWkU7aWYobihmKSYmInRvcCI9PT1jLnNpZGUmJihmLT1kKSxuKGgpJiYicmlnaHQiIT09dS5zaWRlJiYoaC09ZCksIWwubWFpbnBsb3Qpe3ZhciBwPXModCxsLDAsMCxjLl9sZW5ndGgsdS5fbGVuZ3RoLCJucyIsImV3Iik7cC5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1wLHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSxwLm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHAub25jbGljaz1mdW5jdGlvbihlKXtpLmNsaWNrKHQsZSxyKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LGwsLWQsLWQsZCxkLCJuIiwidyIpLHModCxsLGMuX2xlbmd0aCwtZCxkLGQsIm4iLCJlIikscyh0LGwsLWQsdS5fbGVuZ3RoLGQsZCwicyIsInciKSxzKHQsbCxjLl9sZW5ndGgsdS5fbGVuZ3RoLGQsZCwicyIsImUiKSl9dC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYobihmKSYmKCJmcmVlIj09PWMuYW5jaG9yJiYoZi09ZS5fc2l6ZS5oKigxLXUuZG9tYWluWzFdKSkscyh0LGwsLjEqYy5fbGVuZ3RoLGYsLjgqYy5fbGVuZ3RoLGQsIiIsImV3Iikscyh0LGwsMCxmLC4xKmMuX2xlbmd0aCxkLCIiLCJ3Iikscyh0LGwsLjkqYy5fbGVuZ3RoLGYsLjEqYy5fbGVuZ3RoLGQsIiIsImUiKSksbihoKSYmKCJmcmVlIj09PXUuYW5jaG9yJiYoaC09ZS5fc2l6ZS53KmMuZG9tYWluWzBdKSxzKHQsbCxoLC4xKnUuX2xlbmd0aCxkLC44KnUuX2xlbmd0aCwibnMiLCIiKSxzKHQsbCxoLC45KnUuX2xlbmd0aCxkLC4xKnUuX2xlbmd0aCwicyIsIiIpLHModCxsLGgsMCxkLC4xKnUuX2xlbmd0aCwibiIsIiIpKSl9KTt2YXIgcj1lLl9ob3ZlcmxheWVyLm5vZGUoKTtyLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PWUuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxyLm9uY2xpY2s9ZnVuY3Rpb24ocil7ci50YXJnZXQ9ZS5fbGFzdGhvdmVyLGkuY2xpY2sodCxyKX0sci5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtlLl9sYXN0aG92ZXIub25tb3VzZWRvd24odCl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjMyLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4vY29uc3RhbnRzIjo3ODQsIi4vZHJhZ2JveCI6Nzg3LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sNzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fbW9kdWxlcztlLnBsb3QmJmUucGxvdC5zZWxlY3RBbGwoImc6bm90KC5zY2F0dGVybGF5ZXIpIikuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aWYoImNhcnRlc2lhbiI9PT1sLmJhc2VQbG90TW9kdWxlLm5hbWUpe2Zvcih2YXIgYz1bXSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBmPXJbdV0saD1mWzBdLnRyYWNlO2guX21vZHVsZT09PWwmJmgudmlzaWJsZT09PSEwJiZjLnB1c2goZil9bC5wbG90KHQsZSxjLG4saSl9fX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9T2JqZWN0LmtleXMoZS5fcGxvdHMpLG49W10saT1bXSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLl9wbG90c1tvXSxsPXMueGF4aXMsYz1zLnlheGlzLHU9bC5fbWFpbkF4aXMsZj1jLl9tYWluQXhpcyxoPXUuX2lkK2YuX2lkO2ghPT1vJiZyLmluZGV4T2YoaCkhPT0tMT8ocy5tYWlucGxvdD1oLHMubWFpbnBsb3RpbmZvPWUuX3Bsb3RzW2hdLGkucHVzaChvKSk6bi5wdXNoKG8pfXJldHVybiBuPW4uY29uY2F0KGkpfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC5wbG90Z3JvdXAscj10LmlkLG49aC5sYXllclZhbHVlMmxheWVyQ2xhc3NbdC54YXhpcy5sYXllcl0saT1oLmxheWVyVmFsdWUybGF5ZXJDbGFzc1t0LnlheGlzLmxheWVyXTtpZih0Lm1haW5wbG90KXt2YXIgYT10Lm1haW5wbG90aW5mbyxvPWEucGxvdGdyb3VwLGw9cisiLXgiLGM9cisiLXkiO3QuZ3JpZGxheWVyPXMoYS5vdmVyZ3JpZCwiZyIsciksdC56ZXJvbGluZWxheWVyPXMoYS5vdmVyemVybywiZyIscikscyhhLm92ZXJsaW5lc0JlbG93LCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQmVsb3csInBhdGgiLGMpLHMoYS5vdmVyYXhlc0JlbG93LCJnIixsKSxzKGEub3ZlcmF4ZXNCZWxvdywiZyIsYyksdC5wbG90PXMoYS5vdmVycGxvdCwiZyIscikscyhhLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGMpLHMoYS5vdmVyYXhlc0Fib3ZlLCJnIixsKSxzKGEub3ZlcmF4ZXNBYm92ZSwiZyIsYyksdC54bGluZXM9by5zZWxlY3QoIi5vdmVybGluZXMtIituKS5zZWxlY3QoIi4iK2wpLHQueWxpbmVzPW8uc2VsZWN0KCIub3ZlcmxpbmVzLSIraSkuc2VsZWN0KCIuIitjKSx0LnhheGlzbGF5ZXI9by5zZWxlY3QoIi5vdmVyYXhlcy0iK24pLnNlbGVjdCgiLiIrbCksdC55YXhpc2xheWVyPW8uc2VsZWN0KCIub3ZlcmF4ZXMtIitpKS5zZWxlY3QoIi4iK2MpfWVsc2V7dmFyIHU9cyhlLCJnIiwibGF5ZXItc3VicGxvdCIpO3Quc2hhcGVsYXllcj1zKHUsImciLCJzaGFwZWxheWVyIiksdC5pbWFnZWxheWVyPXModSwiZyIsImltYWdlbGF5ZXIiKSx0LmdyaWRsYXllcj1zKGUsImciLCJncmlkbGF5ZXIiKSx0Lm92ZXJncmlkPXMoZSwiZyIsIm92ZXJncmlkIiksdC56ZXJvbGluZWxheWVyPXMoZSwiZyIsInplcm9saW5lbGF5ZXIiKSx0Lm92ZXJ6ZXJvPXMoZSwiZyIsIm92ZXJ6ZXJvIikscyhlLCJwYXRoIiwieGxpbmVzLWJlbG93IikscyhlLCJwYXRoIiwieWxpbmVzLWJlbG93IiksdC5vdmVybGluZXNCZWxvdz1zKGUsImciLCJvdmVybGluZXMtYmVsb3ciKSxzKGUsImciLCJ4YXhpc2xheWVyLWJlbG93IikscyhlLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLHQub3ZlcmF4ZXNCZWxvdz1zKGUsImciLCJvdmVyYXhlcy1iZWxvdyIpLHQucGxvdD1zKGUsImciLCJwbG90IiksdC5vdmVycGxvdD1zKGUsImciLCJvdmVycGxvdCIpLHMoZSwicGF0aCIsInhsaW5lcy1hYm92ZSIpLHMoZSwicGF0aCIsInlsaW5lcy1hYm92ZSIpLHQub3ZlcmxpbmVzQWJvdmU9cyhlLCJnIiwib3ZlcmxpbmVzLWFib3ZlIikscyhlLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLHMoZSwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSx0Lm92ZXJheGVzQWJvdmU9cyhlLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSx0LnhsaW5lcz1lLnNlbGVjdCgiLnhsaW5lcy0iK24pLHQueWxpbmVzPWUuc2VsZWN0KCIueWxpbmVzLSIraSksdC54YXhpc2xheWVyPWUuc2VsZWN0KCIueGF4aXNsYXllci0iK24pLHQueWF4aXNsYXllcj1lLnNlbGVjdCgiLnlheGlzbGF5ZXItIitpKX1mb3IodmFyIGY9MDtmPGgudHJhY2VMYXllckNsYXNzZXMubGVuZ3RoO2YrKylzKHQucGxvdCwiZyIsaC50cmFjZUxheWVyQ2xhc3Nlc1tmXSk7dC54bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKSx0LnlsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApfWZ1bmN0aW9uIG8odCxlKXtpZih0KXt2YXIgcj17fTt0LmVhY2goZnVuY3Rpb24odCl7dmFyIG49bC5zZWxlY3QodGhpcyksaT0iY2xpcCIrZS5fdWlkK3QrInBsb3QiO24ucmVtb3ZlKCksZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiMiK2kpLnJlbW92ZSgpLHJbdF09ITB9KTtmb3IodmFyIG49ZS5fcGxvdHMsaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspZm9yKHZhciBvPW5baVthXV0scz1vLm92ZXJsYXlzfHxbXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107clt1LmlkXSYmdS5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgiLiIrcikuZGF0YShbMF0pO3JldHVybiBuLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQociwhMCksbn12YXIgbD10KCJkMyIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi9wbG90cyIpLGY9dCgiLi9heGlzX2lkcyIpLGg9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9aC5pZFJlZ2V4LHIuYXR0clJlZ2V4PWguYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0LHM9dS5nZXRTdWJwbG90SWRzKG8sImNhcnRlc2lhbiIpLGw9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxhPTA7YTxsLmxlbmd0aDthKyspZS5wdXNoKGEpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspe2Zvcih2YXIgYyxmPXNbYV0saD1vLl9wbG90c1tmXSxkPVtdLHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIG09bFtwXSx2PW1bMF0udHJhY2U7di54YXhpcyt2LnlheGlzPT09ZiYmKChlLmluZGV4T2Yodi5pbmRleCkhPT0tMXx8di5jYXJwZXQpJiYoYyYmY1swXS50cmFjZS54YXhpcytjWzBdLnRyYWNlLnlheGlzPT09ZiYmWyJ0b25leHR4IiwidG9uZXh0eSIsInRvbmV4dCJdLmluZGV4T2Yodi5maWxsKSE9PS0xJiZkLmluZGV4T2YoYyk9PT0tMSYmZC5wdXNoKGMpLGQucHVzaChtKSksYz1tKX1uKHQsaCxkLHIsaSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsPW4uX21vZHVsZXN8fFtdLGM9ZS5fbW9kdWxlc3x8W107Zm9yKHM9MDtzPGwubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT1sW3NdLm5hbWUpe2k9ITA7YnJlYWt9Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT1jW3NdLm5hbWUpe2E9ITA7YnJlYWt9aWYoaSYmIWEpe3ZhciB1PW4uX3Bsb3RzLGg9T2JqZWN0LmtleXModXx8e30pO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciBkPXVbaFtzXV07ZC5wbG90JiZkLnBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfW4uX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfXZhciBwPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSxtPWUuX2hhcyYmZS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihwJiYhbSl7dmFyIHY9bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLGc9Zi5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKHYuY2FsbChvLG4pLG4uX2RlZnMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5yZW1vdmUoKSxzPTA7czxnLmxlbmd0aDtzKyspbi5faW5mb2xheWVyLnNlbGVjdCgiLiIrZ1tzXSsidGl0bGUiKS5yZW1vdmUoKX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aSh0KSxuPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsYy5pZGVudGl0eSk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic3VicGxvdCAiK3R9KSxuLm9yZGVyKCksbi5leGl0KCkuY2FsbChvLGUpLG4uZWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLl9wbG90c1t0XTtpZihyLnBsb3Rncm91cD1sLnNlbGVjdCh0aGlzKSxyLm92ZXJsYXlzPVtdLGEociksci5tYWlucGxvdCl7ZS5fcGxvdHNbci5tYWlucGxvdF0ub3ZlcmxheXMucHVzaChyKX1yLmRyYWdsYXllcj1zKGUuX2RyYWdnZXJzLCJnIix0KX0pfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7YShlKSxuKHQsZSxyKSx1LnN0eWxlKHQpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vcGxvdHMiOjgzOCwiLi9hdHRyaWJ1dGVzIjo3NzgsIi4vYXhpc19pZHMiOjc4MiwiLi9jb25zdGFudHMiOjc4NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwLCIuL3RyYW5zaXRpb25fYXhlcyI6ODAwLGQzOjEyMX1dLDc5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJyYW5nZVswXSI6dm9pZCAwLCJyYW5nZVsxXSI6dm9pZCAwfX0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbcy5pZFJlZ2V4LngudG9TdHJpbmcoKSxzLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sY29uc3RyYWluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYW5nZSIsImRvbWFpbiJdLGRmbHQ6InJhbmdlIixlZGl0VHlwZToiY2FsYyJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il0sZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToidGlja3MifSx0aWNrMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSxkdGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwiIl0sZWRpdFR5cGU6InRpY2tzIn0sbWlycm9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJ0aWNrcyIsITEsImFsbCIsImFsbHRpY2tzIl0sZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NSxlZGl0VHlwZToidGlja3MifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToidGlja3MifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdHN0b3BzOntfaXNMaW5rZWRUb0FycmF5OiJ0aWNrZm9ybWF0c3RvcCIsZHRpY2tyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyJ9XSxlZGl0VHlwZToidGlja3MifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIscy5pZFJlZ2V4LngudG9TdHJpbmcoKSxzLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sb3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIscy5pZFJlZ2V4LngudG9TdHJpbmcoKSxzLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhYm92ZSB0cmFjZXMiLCJiZWxvdyB0cmFjZXMiXSxkZmx0OiJhYm92ZSB0cmFjZXMiLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJjYWxjIn0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7YXV0b3RpY2s6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MzQsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo4MDMsIi4vY29uc3RhbnRzIjo3ODR9XSw3OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vY29uc3RhbnRzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuL3R5cGVfZGVmYXVsdHMiKSx1PXQoIi4vYXhpc19kZWZhdWx0cyIpLGY9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksaD10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZD10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIE51bWJlcih0LnN1YnN0cig1KXx8MSktTnVtYmVyKGUuc3Vic3RyKDUpfHwxKX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGkuY29lcmNlKE4sQixsLHQsZSl9ZnVuY3Rpb24gdih0KXt2YXIgZT17eDp6LHk6UH1bdF07cmV0dXJuIGkuc2ltcGxlTWFwKGUsZC5uYW1lMmlkKX12YXIgZyx5PU9iamVjdC5rZXlzKHQpLGI9W10seD1bXSxfPVtdLHc9W10sTT1bXSxUPVtdLGs9e30sQT17fTtmb3IoZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgRSxTLEw9cltnXTtpZihuLnRyYWNlSXMoTCwiY2FydGVzaWFuIikpRT1iLFM9eDtlbHNle2lmKCFuLnRyYWNlSXMoTCwiZ2wyZCIpKWNvbnRpbnVlO0U9XyxTPXd9dmFyIEM9ZC5pZDJuYW1lKEwueGF4aXMpLEk9ZC5pZDJuYW1lKEwueWF4aXMpO2lmKG4udHJhY2VJcyhMLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09TC50eXBlfHxMLl9jaGVhdGVyKXx8QyYmaS5wdXNoVW5pcXVlKFQsQyksImNhcnBldCI9PT1MLnR5cGUmJkwuX2NoZWF0ZXImJkMmJmkucHVzaFVuaXF1ZShNLEMpLEMmJkUuaW5kZXhPZihDKT09PS0xJiZFLnB1c2goQyksSSYmUy5pbmRleE9mKEkpPT09LTEmJlMucHVzaChJKSxuLnRyYWNlSXMoTCwiMmRNYXAiKSYmKGtbQ109ITAsa1tJXT0hMCksbi50cmFjZUlzKEwsIm9yaWVudGVkIikpe0FbImgiPT09TC5vcmllbnRhdGlvbj9JOkNdPSEwfX1pZighZS5faGFzKCJnbDNkIikmJiFlLl9oYXMoImdlbyIpKWZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciBEPXlbZ107Xy5pbmRleE9mKEQpPT09LTEmJmIuaW5kZXhPZihEKT09PS0xJiZzLnhBeGlzTWF0Y2gudGVzdChEKT9iLnB1c2goRCk6dy5pbmRleE9mKEQpPT09LTEmJnguaW5kZXhPZihEKT09PS0xJiZzLnlBeGlzTWF0Y2gudGVzdChEKSYmeC5wdXNoKEQpfWIubGVuZ3RoJiZ4Lmxlbmd0aCYmaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxuLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuKTt2YXIgUD1iLmNvbmNhdChfKS5zb3J0KHApLHo9eC5jb25jYXQodykuc29ydChwKSxPPVAuY29uY2F0KHopLFI9YS5iYWNrZ3JvdW5kO1AubGVuZ3RoJiZ6Lmxlbmd0aCYmKFI9aS5jb2VyY2UodCxlLG8sInBsb3RfYmdjb2xvciIpKTt2YXIgRixqLE4sQixVPWEuY29tYmluZShSLGUucGFwZXJfYmdjb2xvciksVj17eDp2KCJ4IikseTp2KCJ5Iil9O2ZvcihnPTA7ZzxPLmxlbmd0aDtnKyspe0Y9T1tnXSxpLmlzUGxhaW5PYmplY3QodFtGXSl8fCh0W0ZdPXt9KSxOPXRbRl0sQj1lW0ZdPXt9LGMoTixCLG0scixGKSxqPUYuY2hhckF0KDApO3ZhciBIPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXt4OlAseTp6fVtlXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvPT09cnx8KHRbb118fHt9KS5vdmVybGF5aW5nfHxpLnB1c2goZC5uYW1lMmlkKG8pKX1yZXR1cm4gaX0oaixGKSxxPXtsZXR0ZXI6aixmb250OmUuZm9udCxvdXRlclRpY2tzOmtbRl0sc2hvd0dyaWQ6IUFbRl0sZGF0YTpyLGJnQ29sb3I6VSxjYWxlbmRhcjplLmNhbGVuZGFyLGNoZWF0ZXJvbmx5OiJ4Ij09PWomJk0uaW5kZXhPZihGKSE9PS0xJiZULmluZGV4T2YoRik9PT0tMX07dShOLEIsbSxxLGUpO20oInNob3dzcGlrZXMiKSYmKG0oInNwaWtlY29sb3IiKSxtKCJzcGlrZXRoaWNrbmVzcyIpLG0oInNwaWtlZGFzaCIpLG0oInNwaWtlbW9kZSIpKTt2YXIgRz17bGV0dGVyOmosY291bnRlckF4ZXM6VltqXSxvdmVybGF5YWJsZUF4ZXM6SH07aChOLEIsbSxHKSxCLl9pbnB1dD1OfXZhciBZPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIiksWD1uLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKGc9MDtnPFAubGVuZ3RoO2crKylGPVBbZ10sTj10W0ZdLEI9ZVtGXSxZKHQsZSxGKSwiZGF0ZSI9PT1CLnR5cGUmJlgoTixCLGUseixCLmNhbGVuZGFyKSxtKCJmaXhlZHJhbmdlIik7Zm9yKGc9MDtnPHoubGVuZ3RoO2crKyl7Rj16W2ddLE49dFtGXSxCPWVbRl07dmFyIFc9ZVtkLmlkMm5hbWUoQi5hbmNob3IpXTttKCJmaXhlZHJhbmdlIixXJiZXLnJhbmdlc2xpZGVyJiZXLnJhbmdlc2xpZGVyLnZpc2libGUpfWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdO3ZhciBaPVYueC5jb25jYXQoVi55KTtmb3IoZz0wO2c8Ty5sZW5ndGg7ZysrKUY9T1tnXSxqPUYuY2hhckF0KDApLE49dFtGXSxCPWVbRl0sZihOLEIsbSxaLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODI5LCIuL2F4aXNfZGVmYXVsdHMiOjc4MSwiLi9heGlzX2lkcyI6NzgyLCIuL2NvbnN0YW50cyI6Nzg0LCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjc4NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwLCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo3OTMsIi4vdHlwZV9kZWZhdWx0cyI6ODAxfV0sNzkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGEsbyxzLGwsYz1bXSx1PXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSksZj1pLmJpc2VjdG9yKGUpLmxlZnQ7Zm9yKG49MDtuPHUubGVuZ3RoO24rKylmb3Iobz11W25dLGE9MDthPG8ubGVuZ3RoO2ErKyludWxsIT09KHM9b1thXSkmJnZvaWQgMCE9PXMmJigobD1mKGMscykpPGMubGVuZ3RoJiZjW2xdPT09c3x8Yy5zcGxpY2UobCwwLHMpKTtyZXR1cm4gY312YXIgaT10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtzd2l0Y2goZSl7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOltdO2Nhc2UiY2F0ZWdvcnkgYXNjZW5kaW5nIjpyZXR1cm4gbih0LGkuYXNjZW5kaW5nLGEpO2Nhc2UiY2F0ZWdvcnkgZGVzY2VuZGluZyI6cmV0dXJuIG4odCxpLmRlc2NlbmRpbmcsYSk7Y2FzZSJ0cmFjZSI6cmV0dXJuW107ZGVmYXVsdDpyZXR1cm5bXX19fSx7ZDM6MTIxfV0sNzkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89YS5jb3VudGVyQXhlc3x8W10scz1hLm92ZXJsYXlhYmxlQXhlc3x8W10sbD1hLmxldHRlcjsiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdChvKSxkZmx0Om4odC5wb3NpdGlvbik/ImZyZWUiOm9bMF18fCJmcmVlIn19LCJhbmNob3IiKSYmcigicG9zaXRpb24iKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1sP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0OiJ4Ij09PWw/ImJvdHRvbSI6ImxlZnQifX0sInNpZGUiKTt2YXIgYz0hMTtpZihzLmxlbmd0aCYmKGM9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQocyksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCFjKXt2YXIgdT1yKCJkb21haW4iKTt1WzBdPnVbMV0tLjAxJiYoZS5kb21haW49WzAsMV0pLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLFswLDFdKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjczNSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MDh9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2RbMF0udHJhY2Usbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuY3VydmVOdW1iZXI9ci5pbmRleCxpLmRhdGE9ci5faW5wdXQsaS5mdWxsRGF0YT1yLGwoaSxyLGkucG9pbnROdW1iZXIpfXJldHVybiB0fQp2YXIgYT10KCIuLi8uLi9saWIvcG9seWdvbiIpLG89dCgiLi4vLi4vbGliL3Rocm90dGxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsYz10KCIuL2F4ZXMiKSx1PXQoIi4vY29uc3RhbnRzIiksZj1hLmZpbHRlcixoPWEudGVzdGVyLGQ9dS5NSU5TRUxFQ1Q7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbCl7ZnVuY3Rpb24gcCh0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC1lfXZhciB2LGc9YS5nZC5fZnVsbExheW91dC5fem9vbWxheWVyLHk9YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9YS5wbG90aW5mbyx4PWIueGF4aXMuX29mZnNldCxfPWIueWF4aXMuX29mZnNldCx3PWUteS5sZWZ0LE09ci15LnRvcCxUPXcsaz1NLEE9Ik0iK3crIiwiK00sRT1hLnhheGVzWzBdLl9sZW5ndGgsUz1hLnlheGVzWzBdLl9sZW5ndGgsTD1hLnhheGVzLm1hcChuKSxDPWEueWF4ZXMubWFwKG4pLEk9YS54YXhlcy5jb25jYXQoYS55YXhlcyk7Imxhc3NvIj09PWwmJih2PWYoW1t3LE1dXSx1LkJFTkRQWCkpO3ZhciBEPWcuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lIikuZGF0YShbMSwyXSk7RC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIit0fSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreCsiLCAiK18rIikiKS5hdHRyKCJkIixBKyJaIik7dmFyIFAseixPLFIsRixqPWcuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpzLmJhY2tncm91bmQsc3Ryb2tlOnMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MX0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3grIiwgIitfKyIpIikuYXR0cigiZCIsIk0wLDBaIiksTj1bXSxCPWEuZ2QsVT1CLl9mdWxsTGF5b3V0Ll91aWQrdS5TRUxFQ1RJRCxWPVtdO2ZvcihQPTA7UDxCLmNhbGNkYXRhLmxlbmd0aDtQKyspaWYoej1CLmNhbGNkYXRhW1BdLE89elswXS50cmFjZSxPLnZpc2libGU9PT0hMCYmTy5fbW9kdWxlJiZPLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKGEuc3VicGxvdClPLnN1YnBsb3QhPT1hLnN1YnBsb3QmJk8uZ2VvIT09YS5zdWJwbG90fHxOLnB1c2goe3NlbGVjdFBvaW50czpPLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOnoseGF4aXM6YS54YXhlc1swXSx5YXhpczphLnlheGVzWzBdfSk7ZWxzZXtpZihMLmluZGV4T2YoTy54YXhpcyk9PT0tMSljb250aW51ZTtpZihDLmluZGV4T2YoTy55YXhpcyk9PT0tMSljb250aW51ZTtOLnB1c2goe3NlbGVjdFBvaW50czpPLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOnoseGF4aXM6Yy5nZXRGcm9tSWQoQixPLnhheGlzKSx5YXhpczpjLmdldEZyb21JZChCLE8ueWF4aXMpfSl9dmFyIEg7SD1iLmZpbGxSYW5nZUl0ZW1zP2IuZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1sP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoUD0wO1A8SS5sZW5ndGg7UCsrKXt2YXIgbj1JW1BdLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krIm1pbiJdKSxuLnAyZChlW2krIm1heCJdKV0uc29ydChtKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihQPTA7UDxJLmxlbmd0aDtQKyspe3ZhciBpPUlbUF07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAocChpKSl9fSxhLm1vdmVGbj1mdW5jdGlvbih0LGUpe3ZhciByO1Q9TWF0aC5tYXgoMCxNYXRoLm1pbihFLHQrdykpLGs9TWF0aC5tYXgoMCxNYXRoLm1pbihTLGUrTSkpO3ZhciBuPU1hdGguYWJzKFQtdykscz1NYXRoLmFicyhrLU0pOyJzZWxlY3QiPT09bD8oczxNYXRoLm1pbiguNipuLGQpPyhyPWgoW1t3LDBdLFt3LFNdLFtULFNdLFtULDBdXSksai5hdHRyKCJkIiwiTSIrci54bWluKyIsIisoTS1kKSsiaC00diIrMipkKyJoNFpNIisoci54bWF4LTEpKyIsIisoTS1kKSsiaDR2IisyKmQrImgtNFoiKSk6bjxNYXRoLm1pbiguNipzLGQpPyhyPWgoW1swLE1dLFswLGtdLFtFLGtdLFtFLE1dXSksai5hdHRyKCJkIiwiTSIrKHctZCkrIiwiK3IueW1pbisidi00aCIrMipkKyJ2NFpNIisody1kKSsiLCIrKHIueW1heC0xKSsidjRoIisyKmQrInYtNFoiKSk6KHI9aChbW3csTV0sW3csa10sW1Qsa10sW1QsTV1dKSxqLmF0dHIoImQiLCJNMCwwWiIpKSxELmF0dHIoImQiLCJNIityLnhtaW4rIiwiK3IueW1pbisiSCIrKHIueG1heC0xKSsiViIrKHIueW1heC0xKSsiSCIrci54bWluKyJaIikpOiJsYXNzbyI9PT1sJiYodi5hZGRQdChbVCxrXSkscj1oKHYuZmlsdGVyZWQpLEQuYXR0cigiZCIsIk0iK3YuZmlsdGVyZWQuam9pbigiTCIpKyJaIikpLG8udGhyb3R0bGUoVSx1LlNFTEVDVERFTEFZLGZ1bmN0aW9uKCl7Zm9yKFY9W10sUD0wO1A8Ti5sZW5ndGg7UCsrKXtSPU5bUF07dmFyIHQ9aShSLnNlbGVjdFBvaW50cyhSLHIpLFIpO2lmKFYubGVuZ3RoKWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKVYucHVzaCh0W2VdKTtlbHNlIFY9dH1GPXtwb2ludHM6Vn0sSChGLHIsdiksYS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixGKX0pfSxhLmRvbmVGbj1mdW5jdGlvbih0LGUpe2oucmVtb3ZlKCksby5kb25lKFUpLnRoZW4oZnVuY3Rpb24oKXtpZihvLmNsZWFyKFUpLHR8fDIhPT1lKWEuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixGKTtlbHNle2ZvcihELnJlbW92ZSgpLFA9MDtQPE4ubGVuZ3RoO1ArKylSPU5bUF0sUi5zZWxlY3RQb2ludHMoUiwhMSk7Qi5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY0OSwiLi4vLi4vbGliL3BvbHlnb24iOjc0NiwiLi4vLi4vbGliL3Rocm90dGxlIjo3NTgsIi4vYXhlcyI6Nzc5LCIuL2NvbnN0YW50cyI6Nzg0fV0sNzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfXZhciBpPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vbGliIikscz1vLmNsZWFuTnVtYmVyLGw9by5tczJEYXRlVGltZSxjPW8uZGF0ZVRpbWUybXMsdT1vLmVuc3VyZU51bWJlcixmPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxoPWYuRlBfU0FGRSxkPWYuQkFETlVNLHA9dCgiLi9jb25zdGFudHMiKSxtPXQoIi4vYXhpc19pZHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUscil7aWYoZT4wKXJldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTA7aWYoZTw9MCYmciYmdC5yYW5nZSYmMj09PXQucmFuZ2UubGVuZ3RoKXt2YXIgbj10LnJhbmdlWzBdLGk9dC5yYW5nZVsxXTtyZXR1cm4uNSoobitpLTMqTSpNYXRoLmFicyhuLWkpKX1yZXR1cm4gZH1mdW5jdGlvbiBmKGUscixuKXt2YXIgaT1jKGUsbnx8dC5jYWxlbmRhcik7aWYoaT09PWQpe2lmKCFhKGUpKXJldHVybiBkO2k9YyhuZXcgRGF0ZSgrZSkpfXJldHVybiBpfWZ1bmN0aW9uIHYoZSxyLG4pe3JldHVybiBsKGUscixufHx0LmNhbGVuZGFyKX1mdW5jdGlvbiBnKGUpe3JldHVybiB0Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZSldfWZ1bmN0aW9uIHkoZSl7aWYobnVsbCE9PWUmJnZvaWQgMCE9PWUpe2lmKHZvaWQgMD09PXQuX2NhdGVnb3JpZXNNYXAmJih0Ll9jYXRlZ29yaWVzTWFwPXt9KSx2b2lkIDAhPT10Ll9jYXRlZ29yaWVzTWFwW2VdKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdO3QuX2NhdGVnb3JpZXMucHVzaChlKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gZH1mdW5jdGlvbiBiKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApe3ZhciByPXQuX2NhdGVnb3JpZXNNYXBbZV07aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihhKGUpKXJldHVybitlfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIGEoZSk/aS5yb3VuZCh0Ll9iK3QuX20qZSwyKTpkfWZ1bmN0aW9uIF8oZSl7cmV0dXJuKGUtdC5fYikvdC5fbX1lPWV8fHt9O3ZhciB3PSh0Ll9pZHx8IngiKS5jaGFyQXQoMCksTT0xMDt0LmMybD0ibG9nIj09PXQudHlwZT9yOnUsdC5sMmM9ImxvZyI9PT10LnR5cGU/bjp1LHQubDJwPXgsdC5wMmw9Xyx0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiB4KHIodCxlKSl9OngsdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIG4oXyh0KSl9Ol8sWyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpIT09LTE/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPXMsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9dSx0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAocyhlKSl9LHQucDJkPXQucDJyPV8sdC5jbGVhblBvcz11KToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gbihzKHQpKX0sdC5kMmM9dC5yMmw9cyx0LmMyZD10Lmwycj11LHQuYzJyPXIsdC5sMmQ9bix0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oXyh0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChzKGUpKX0sdC5wMnI9Xyx0LmNsZWFuUG9zPXUpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9by5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1mLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPXYsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChmKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdihfKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2xlYW5EYXRlKGUsZCx0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGUmJih0LmQyYz10LmQybD15LHQucjJkPXQuYzJkPXQubDJkPWcsdC5kMnI9dC5kMmxfbm9hZGQ9Yix0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1iKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9dSx0LnIybD1iLHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBnKF8odCkpfSx0LnIycD10LmQycCx0LnAycj1fLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDp1KHQpfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUpe2V8fChlPSJyYW5nZSIpO3ZhciByLG4saT1vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYobj0iZGF0ZSI9PT10LnR5cGU/by5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09dz9wLkRGTFRSQU5HRVk6cC5ERkxUUkFOR0VYLG49bi5zbGljZSgpLCFpfHwyIT09aS5sZW5ndGgpcmV0dXJuIHZvaWQgby5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChuKTtmb3IoImRhdGUiPT09dC50eXBlJiYoaVswXT1vLmNsZWFuRGF0ZShpWzBdLGQsdC5jYWxlbmRhciksaVsxXT1vLmNsZWFuRGF0ZShpWzFdLGQsdC5jYWxlbmRhcikpLHI9MDtyPDI7cisrKWlmKCJkYXRlIj09PXQudHlwZSl7aWYoIW8uaXNEYXRlVGltZShpW3JdLHQuY2FsZW5kYXIpKXt0W2VdPW47YnJlYWt9aWYodC5yMmwoaVswXSk9PT10LnIybChpWzFdKSl7dmFyIHM9by5jb25zdHJhaW4odC5yMmwoaVswXSksby5NSU5fTVMrMWUzLG8uTUFYX01TLTFlMyk7aVswXT10LmwycihzLTFlMyksaVsxXT10LmwycihzKzFlMyk7YnJlYWt9fWVsc2V7aWYoIWEoaVtyXSkpe2lmKCFhKGlbMS1yXSkpe3RbZV09bjticmVha31pW3JdPWlbMS1yXSoocj8xMDouMSl9aWYoaVtyXTwtaD9pW3JdPS1oOmlbcl0+aCYmKGlbcl09aCksaVswXT09PWlbMV0pe3ZhciBsPU1hdGgubWF4KDEsTWF0aC5hYnMoMWUtNippWzBdKSk7aVswXS09bCxpWzFdKz1sfX19LHQuc2V0U2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49ZS5fc2l6ZTtpZih0Ll9jYXRlZ29yaWVzfHwodC5fY2F0ZWdvcmllcz1bXSksdC5fY2F0ZWdvcmllc01hcHx8KHQuX2NhdGVnb3JpZXNNYXA9e30pLHQub3ZlcmxheWluZyl7dmFyIGk9bS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj8iX3IiOiJyYW5nZSIscz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShhKTt2YXIgbD10LnIybCh0W2FdWzBdLHMpLGM9dC5yMmwodFthXVsxXSxzKTtpZigieSI9PT13Pyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhsLWMpLHQuX2I9LXQuX20qYyk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8oYy1sKSx0Ll9iPS10Ll9tKmwpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpKXRocm93IG8ubm90aWZpZXIoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIiwibG9uZyIpLGUuX3JlcGxvdHRpbmc9ITEsbmV3IEVycm9yKCJheGlzIHNjYWxpbmciKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLGEsbz0iZGF0ZSI9PT10LnR5cGUmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpZm9yKG49ZVtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7YSsrKWlbYV09dC5kMmMoblthXSwwLG8pO2Vsc2V7dmFyIHM9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsbyk6MCxsPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3Iobj1lW3t4OiJ5Iix5OiJ4In1bcl1dLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDthKyspaVthXT1zK2EqbH1yZXR1cm4gaX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmYSh0LnIybChlWzBdKSkmJmEodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT0ieCI9PT13P2Z1bmN0aW9uKGUpe3ZhciByPWUueDtyZXR1cm4gcj49dC5yYW5nZVswXSYmcjw9dC5yYW5nZVsxXX06ZnVuY3Rpb24oZSl7dmFyIHI9ZS55O3JldHVybiByPj10LnJhbmdlWzBdJiZyPD10LnJhbmdlWzFdfSx0Ll9taW49W10sdC5fbWF4PVtdLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi8uLi9saWIiOjczNSwiLi9heGlzX2lkcyI6NzgyLCIuL2NvbnN0YW50cyI6Nzg0LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPVsic2hvd2V4cG9uZW50Iiwic2hvd3RpY2twcmVmaXgiLCJzaG93dGlja3N1ZmZpeCJdLHI9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRbZV19KSxuPWZ1bmN0aW9uKGUpe3JldHVybiB0W2VdPT09dFtyWzBdXX07aWYoci5ldmVyeShuKXx8MT09PXIubGVuZ3RoKXJldHVybiB0W3JbMF1dfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIGEuY29lcmNlKHMsbCxvLnRpY2tmb3JtYXRzdG9wcyx0LGUpfXZhciBuPXQudGlja2Zvcm1hdHN0b3BzLGk9ZS50aWNrZm9ybWF0c3RvcHM9W107aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIHMsbCxjPTA7YzxuLmxlbmd0aDtjKyspcz1uW2NdLGw9e30scigiZHRpY2tyYW5nZSIpLHIoInZhbHVlIiksaS5wdXNoKGwpfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPW4odCk7aWYocigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsbCkscigidGlja3N1ZmZpeCIpJiZyKCJzaG93dGlja3N1ZmZpeCIsbCkscigic2hvd3RpY2tsYWJlbHMiKSl7dmFyIGM9cy5mb250fHx7fSx1PWUuY29sb3I9PT10LmNvbG9yP2UuY29sb3I6Yy5jb2xvcjtpZihhLmNvZXJjZUZvbnQociwidGlja2ZvbnQiLHtmYW1pbHk6Yy5mYW1pbHksc2l6ZTpjLnNpemUsY29sb3I6dX0pLHIoInRpY2thbmdsZSIpLCJjYXRlZ29yeSIhPT1vKXt2YXIgZj1yKCJ0aWNrZm9ybWF0Iik7aSh0LGUpLGZ8fCJkYXRlIj09PW98fChyKCJzaG93ZXhwb25lbnQiLGwpLHIoImV4cG9uZW50Zm9ybWF0Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fSJjYXRlZ29yeSI9PT1vfHxzLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0Iil9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTB9XSw3OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4uY29lcmNlMih0LGUsaSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsaSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsYS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjczNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwfV0sNzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPSJhdXRvIjsiYXJyYXkiIT09dC50aWNrbW9kZXx8ImxvZyIhPT1vJiYiZGF0ZSIhPT1vfHwodC50aWNrbW9kZT0iYXV0byIpLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/cz0iYXJyYXkiOnQuZHRpY2smJihzPSJsaW5lYXIiKTt2YXIgbD1yKCJ0aWNrbW9kZSIscyk7aWYoImF1dG8iPT09bClyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09bCl7dmFyIGM9ImRhdGUiPT09bz9hOjEsdT1yKCJkdGljayIsYyk7aWYobih1KSllLmR0aWNrPXU+MD9OdW1iZXIodSk6YztlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgdSllLmR0aWNrPWM7ZWxzZXt2YXIgZj11LmNoYXJBdCgwKSxoPXUuc3Vic3RyKDEpO2g9bihoKT9OdW1iZXIoaCk6MCwoaDw9MHx8ISgiZGF0ZSI9PT1vJiYiTSI9PT1mJiZoPT09TWF0aC5yb3VuZChoKXx8ImxvZyI9PT1vJiYiTCI9PT1mfHwibG9nIj09PW8mJiJEIj09PWYmJigxPT09aHx8Mj09PWgpKSkmJihlLmR0aWNrPWMpfXZhciBkPSJkYXRlIj09PW8/aS5kYXRlVGljazAoZS5jYWxlbmRhcik6MCxwPXIoInRpY2swIixkKTsiZGF0ZSI9PT1vP2UudGljazA9aS5jbGVhbkRhdGUocCxkKTpuKHApJiYiRDEiIT09dSYmIkQyIiE9PXU/ZS50aWNrMD1OdW1iZXIocCk6ZS50aWNrMD1kfWVsc2V7dmFyIG09cigidGlja3ZhbHMiKTt2b2lkIDA9PT1tP2UudGlja21vZGU9ImF1dG8iOnIoInRpY2t0ZXh0Iil9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90bHkiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpLGw9dCgiLi9jb25zdGFudHMiKS5hdHRyUmVnZXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUoZSxyKXtmdW5jdGlvbiBuKGUscixuKXtmb3IoaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKG8uaW5kZXhPZihhLnhyZWYpPT09LTEmJm8uaW5kZXhPZihhLnlyZWYpPT09LTF8fHIodCxpKSxuKXJldHVybn19dmFyIGksbz1bXTtmb3Iobz1bZS5faWQsci5faWRdLGk9MDtpPG8ubGVuZ3RoO2krKylzLmRvVGlja3ModCxvW2ldLCEwKTtuKHYuYW5ub3RhdGlvbnN8fFtdLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksbih2LnNoYXBlc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXdPbmUiKSksbih2LmltYWdlc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSwhMCl9ZnVuY3Rpb24gZih0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpczt2Ll9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIucG9pbnRzIik7bi5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoby5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKS5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KSxuLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoby5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKS5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiBoKGUscil7dmFyIG4saSxhLHM9eVtlLnhheGlzLl9pZF0sbD15W2UueWF4aXMuX2lkXSxjPVtdO2lmKHMpe249dC5fZnVsbExheW91dFtzLmF4aXNOYW1lXSxpPW4uX3IsYT1zLnRvLGNbMF09KGlbMF0qKDEtcikrciphWzBdLWlbMF0pLyhpWzFdLWlbMF0pKmUueGF4aXMuX2xlbmd0aDt2YXIgZj1pWzFdLWlbMF0saD1hWzFdLWFbMF07bi5yYW5nZVswXT1pWzBdKigxLXIpK3IqYVswXSxuLnJhbmdlWzFdPWlbMV0qKDEtcikrciphWzFdLGNbMl09ZS54YXhpcy5fbGVuZ3RoKigxLXIrcipoL2YpfWVsc2UgY1swXT0wLGNbMl09ZS54YXhpcy5fbGVuZ3RoO2lmKGwpe249dC5fZnVsbExheW91dFtsLmF4aXNOYW1lXSxpPW4uX3IsYT1sLnRvLGNbMV09KGlbMV0qKDEtcikrciphWzFdLWlbMV0pLyhpWzBdLWlbMV0pKmUueWF4aXMuX2xlbmd0aDt2YXIgZD1pWzFdLWlbMF0scD1hWzFdLWFbMF07bi5yYW5nZVswXT1pWzBdKigxLXIpK3IqYVswXSxuLnJhbmdlWzFdPWlbMV0qKDEtcikrciphWzFdLGNbM109ZS55YXhpcy5fbGVuZ3RoKigxLXIrcipwL2QpfWVsc2UgY1sxXT0wLGNbM109ZS55YXhpcy5fbGVuZ3RoO3UoZS54YXhpcyxlLnlheGlzKTt2YXIgbT1lLnhheGlzLGc9ZS55YXhpcyxiPSEhcyx4PSEhbCxfPWI/bS5fbGVuZ3RoL2NbMl06MSx3PXg/Zy5fbGVuZ3RoL2NbM106MSxNPWI/Y1swXTowLFQ9eD9jWzFdOjAsaz1iP2NbMF0vY1syXSptLl9sZW5ndGg6MCxBPXg/Y1sxXS9jWzNdKmcuX2xlbmd0aDowLEU9bS5fb2Zmc2V0LWssUz1nLl9vZmZzZXQtQTt2Ll9kZWZzLnNlbGVjdCgiIyIrZS5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsTSxUKS5jYWxsKG8uc2V0U2NhbGUsMS9fLDEvdyksZS5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxTKS5jYWxsKG8uc2V0U2NhbGUsXyx3KS5zZWxlY3RBbGwoIi5wb2ludHMiKS5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoby5zZXRQb2ludEdyb3VwU2NhbGUsMS9fLDEvdyksZS5wbG90LnNlbGVjdEFsbCgiLnBvaW50cyIpLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoby5zZXRUZXh0UG9pbnRzU2NhbGUsMS9fLDEvdyl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT17fSxyPTA7cjxiLmxlbmd0aDtyKyspe3ZhciBuPXQuX2Z1bGxMYXlvdXRbeVtiW3JdXS5heGlzTmFtZV0sYT15W2Jbcl1dLnRvO2Vbbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxlW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0sbi5yYW5nZT1hLnNsaWNlKCl9cmV0dXJuIF8mJl8oKSxpLnJlbGF5b3V0KHQsZSkudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8eC5sZW5ndGg7dCsrKWYoeFt0XSl9KX1mdW5jdGlvbiBwKCl7Zm9yKHZhciBlPXt9LHI9MDtyPGIubGVuZ3RoO3IrKyl7dmFyIG49dC5fZnVsbExheW91dFtiW3JdKyJheGlzIl07ZVtuLl9uYW1lKyIucmFuZ2VbMF0iXT1uLnJhbmdlWzBdLGVbbi5fbmFtZSsiLnJhbmdlWzFdIl09bi5yYW5nZVsxXSxuLnJhbmdlPW4uX3Iuc2xpY2UoKX1yZXR1cm4gaS5yZWxheW91dCh0LGUpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHgubGVuZ3RoO3QrKylmKHhbdF0pfSl9ZnVuY3Rpb24gbSgpe009RGF0ZS5ub3coKTtmb3IodmFyIHQ9TWF0aC5taW4oMSwoTS13KS9yLmR1cmF0aW9uKSxlPWsodCksbj0wO248eC5sZW5ndGg7bisrKWgoeFtuXSxlKTtNLXc+ci5kdXJhdGlvbj8oZCgpLFQ9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG0pKTpUPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSl9dmFyIHY9dC5fZnVsbExheW91dCxnPVtdLHk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT17fTtmb3IoZSBpbiB0KWlmKHI9ZS5zcGxpdCgiLiIpLHJbMF0ubWF0Y2gobCkpe3ZhciBvPWUuY2hhckF0KDApLHM9clswXTtpZihuPXZbc10saT17fSxBcnJheS5pc0FycmF5KHRbZV0pP2kudG89dFtlXS5zbGljZSgwKTpBcnJheS5pc0FycmF5KHRbZV0ucmFuZ2UpJiYoaS50bz10W2VdLnJhbmdlLnNsaWNlKDApKSwhaS50byljb250aW51ZTtpLmF4aXNOYW1lPXMsaS5sZW5ndGg9bi5fbGVuZ3RoLGcucHVzaChvKSxhW29dPWl9cmV0dXJuIGF9KGUpLGI9T2JqZWN0LmtleXMoeSkseD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC5fcGxvdHMscz1bXTtmb3IobiBpbiBvKXt2YXIgbD1vW25dO2lmKHMuaW5kZXhPZihsKT09PS0xKXt2YXIgYz1sLnhheGlzLl9pZCx1PWwueWF4aXMuX2lkLGY9bC54YXhpcy5yYW5nZSxoPWwueWF4aXMucmFuZ2U7bC54YXhpcy5fcj1sLnhheGlzLnJhbmdlLnNsaWNlKCksbC55YXhpcy5fcj1sLnlheGlzLnJhbmdlLnNsaWNlKCksaT1yW2NdP3JbY10udG86ZixhPXJbdV0/clt1XS50bzpoLGZbMF09PT1pWzBdJiZmWzFdPT09aVsxXSYmaFswXT09PWFbMF0mJmhbMV09PT1hWzFdfHxlLmluZGV4T2YoYyk9PT0tMSYmZS5pbmRleE9mKHUpPT09LTF8fHMucHVzaChsKX19cmV0dXJuIHN9KHYsYix5KTtpZigheC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYocih0LGkpLG4pcmV0dXJufWUodi5hbm5vdGF0aW9uc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxlKHYuc2hhcGVzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxlKHYuaW1hZ2VzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX0oKSwhMTt2YXIgXztjJiYoXz1jKCkpO3ZhciB3LE0sVCxrPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoVCksVD1udWxsLHAoKX0pLHc9RGF0ZS5ub3coKSxUPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSksUHJvbWlzZS5yZXNvbHZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9heGVzIjo3NzksIi4vY29uc3RhbnRzIjo3ODQsZDM6MTIxfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigiLSI9PT10LnR5cGUpe3ZhciByPXQuX2lkLG49ci5jaGFyQXQoMCk7ci5pbmRleE9mKCJzY2VuZSIpIT09LTEmJihyPW4pO3ZhciBjPWkoZSxyLG4pO2lmKGMpe2lmKCJoaXN0b2dyYW0iPT09Yy50eXBlJiZuPT09e3Y6InkiLGg6IngifVtjLm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKHQudHlwZT0ibGluZWFyIik7dmFyIHU9bisiY2FsZW5kYXIiLGY9Y1t1XTtpZihvKGMsbikpe2Zvcih2YXIgaCxkPWEoYykscD1bXSxtPTA7bTxlLmxlbmd0aDttKyspaD1lW21dLHMudHJhY2VJcyhoLCJib3gtdmlvbGluIikmJihoW24rImF4aXMiXXx8bik9PT1yJiYodm9pZCAwIT09aFtkXT9wLnB1c2goaFtkXVswXSk6dm9pZCAwIT09aC5uYW1lP3AucHVzaChoLm5hbWUpOnAucHVzaCgidGV4dCIpLGhbdV0hPT1mJiYoZj12b2lkIDApKTt0LnR5cGU9bChwLGYpfWVsc2UgdC50eXBlPWwoY1tuXXx8W2NbbisiMCJdXSxmKX19fWZ1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKChpW3IrImF4aXMiXXx8cik9PT1lKXtpZihvKGkscikpcmV0dXJuIGk7aWYoKGlbcl18fFtdKS5sZW5ndGh8fGlbcisiMCJdKXJldHVybiBpfX19ZnVuY3Rpb24gYSh0KXtyZXR1cm57djoieCIsaDoieSJ9W3Qub3JpZW50YXRpb258fCJ2Il19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWEodCksbj1zLnRyYWNlSXModCwiYm94LXZpb2xpbiIpLGk9cy50cmFjZUlzKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIG4mJiFpJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19dmFyIHM9dCgiLi4vLi4vcmVnaXN0cnkiKSxsPXQoIi4vYXhpc19hdXRvdHlwZSIpLGM9dCgiLi9heGlzX2lkcyIpLm5hbWUyaWQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YSYmKGUuX25hbWU9YSxlLl9pZD1jKGEpKSwiLSI9PT1yKCJ0eXBlIikmJihuKGUsaSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9heGlzX2F1dG90eXBlIjo3ODAsIi4vYXhpc19pZHMiOjc4Mn1dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbixpLGEsbz0hMTtpZigiZGF0YSI9PT1lLnR5cGUpbj10Ll9mdWxsRGF0YVtudWxsIT09ZS50cmFjZXM/ZS50cmFjZXNbMF06MF07ZWxzZXtpZigibGF5b3V0IiE9PWUudHlwZSlyZXR1cm4hMTtuPXQuX2Z1bGxMYXlvdXR9cmV0dXJuIGk9Yy5uZXN0ZWRQcm9wZXJ0eShuLGUucHJvcCkuZ2V0KCksYT1yW2UudHlwZV09cltlLnR5cGVdfHx7fSxhLmhhc093blByb3BlcnR5KGUucHJvcCkmJmFbZS5wcm9wXSE9PWkmJihvPSEwKSxhW2UucHJvcF09aSx7Y2hhbmdlZDpvLHZhbHVlOml9fWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlWzBdKSYmMT09PWVbMF0ubGVuZ3RoJiZbInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGVbMF1bMF0pIT09LTE/W3t0eXBlOiJsYXlvdXQiLHByb3A6Il9jdXJyZW50RnJhbWUiLHZhbHVlOmVbMF1bMF0udG9TdHJpbmcoKX1dOltdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1bXSxuPWVbMF0saT17fTtpZigic3RyaW5nIj09dHlwZW9mIG4paVtuXT1lWzFdO2Vsc2V7aWYoIWMuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcjtpPW59cmV0dXJuIHMoaSxmdW5jdGlvbih0LGUsbil7ci5wdXNoKHt0eXBlOiJsYXlvdXQiLHByb3A6dCx2YWx1ZTpufSl9LCIiLDApLHJ9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG89W107aWYobj1lWzBdLGk9ZVsxXSxyPWVbMl0sYT17fSwic3RyaW5nIj09dHlwZW9mIG4pYVtuXT1pO2Vsc2V7aWYoIWMuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gbzthPW4sdm9pZCAwPT09ciYmKHI9aSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLHMoYSxmdW5jdGlvbihlLG4saSl7dmFyIGE7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9TWF0aC5taW4oaS5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKHM9TWF0aC5taW4ocyxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBsPTA7bDxzO2wrKylhW2xdPXI/cltsXTpsfWVsc2UgYT1yP3Iuc2xpY2UoMCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KGkpJiYoaT1pWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KGkpKXt2YXIgYz1pO2k9W107Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaVt1XT1jfWkubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLGkubGVuZ3RoKX1vLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTppfSl9LCIiLDApLG99ZnVuY3Rpb24gcyh0LGUscixuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBhPXRbaV07aWYoIl8iIT09aVswXSl7dmFyIG89cisobj4wPyIuIjoiIikraTtjLmlzUGxhaW5PYmplY3QoYSk/cyhhLGUsbyxuKzEpOmUobyxpLGEpfX0pfXZhciBsPXQoIi4uL3Bsb3RseSIpLGM9dCgiLi4vbGliIik7ci5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9ZnVuY3Rpb24odCxlLGksYSl7dmFyIG89e30scz0hMDtlJiZlLl9jb21tYW5kT2JzZXJ2ZXImJihvPWUuX2NvbW1hbmRPYnNlcnZlciksby5jYWNoZXx8KG8uY2FjaGU9e30pLG8ubG9va3VwVGFibGU9e307dmFyIGw9ci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3ModCxpLG8ubG9va3VwVGFibGUpO2lmKGUmJmUuX2NvbW1hbmRPYnNlcnZlcil7aWYobClyZXR1cm4gbztpZihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKXJldHVybiBlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZS5fY29tbWFuZE9ic2VydmVyPW51bGwsb31pZihsKXtuKHQsbCxvLmNhY2hlKSxvLmNoZWNrPWZ1bmN0aW9uKCl7aWYocyl7dmFyIGU9bih0LGwsby5jYWNoZSk7cmV0dXJuIGUuY2hhbmdlZCYmYSYmdm9pZCAwIT09by5sb29rdXBUYWJsZVtlLnZhbHVlXSYmKG8uZGlzYWJsZSgpLFByb21pc2UucmVzb2x2ZShhKHt2YWx1ZTplLnZhbHVlLHR5cGU6bC50eXBlLHByb3A6bC5wcm9wLHRyYWNlczpsLnRyYWNlcyxpbmRleDpvLmxvb2t1cFRhYmxlW2UudmFsdWVdfSkpLnRoZW4oby5lbmFibGUsby5lbmFibGUpKSxlLmNoYW5nZWR9fTtmb3IodmFyIHU9WyJwbG90bHlfcmVsYXlvdXQiLCJwbG90bHlfcmVkcmF3IiwicGxvdGx5X3Jlc3R5bGUiLCJwbG90bHlfdXBkYXRlIiwicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIiwicGxvdGx5X2FmdGVycGxvdCJdLGY9MDtmPHUubGVuZ3RoO2YrKyl0Ll9pbnRlcm5hbE9uKHVbZl0sby5jaGVjayk7by5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyKHVbZV0sby5jaGVjayl9fWVsc2UgYy53YXJuKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLG8ubG9va3VwVGFibGU9e30sby5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBvLmRpc2FibGU9ZnVuY3Rpb24oKXtzPSExfSxvLmVuYWJsZT1mdW5jdGlvbigpe3M9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9byksb30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgZj1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1mLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZihzPWZbMF0scy50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGg9MDtoPGEudHJhY2VzLmxlbmd0aDtoKyspaWYoYS50cmFjZXNbaF0hPT1zLnRyYWNlc1toXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9ZlswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3M9ZlswXTt2YXIgZD1zLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDEhPT1kLmxlbmd0aClyZXR1cm4hMTtkPWRbMF19biYmKG5bZF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBuPWxbZV0saT1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKWkucHVzaChyW2FdKTtyZXR1cm4gbi5hcHBseShudWxsLGkpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBjLndhcm4oIkFQSSBjYWxsIHRvIFBsb3RseS4iK2UrIiByZWplY3RlZC4iLHQpLFByb21pc2UucmVqZWN0KHQpfSl9LHIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUscil7dmFyIG47c3dpdGNoKEFycmF5LmlzQXJyYXkocil8fChyPVtdKSxlKXtjYXNlInJlc3R5bGUiOm49byh0LHIpO2JyZWFrO2Nhc2UicmVsYXlvdXQiOm49YSh0LHIpO2JyZWFrO2Nhc2UidXBkYXRlIjpuPW8odCxbclswXSxyWzJdXSkuY29uY2F0KGEodCxbclsxXV0pKTticmVhaztjYXNlImFuaW1hdGUiOm49aSh0LHIpO2JyZWFrO2RlZmF1bHQ6bj1bXX1yZXR1cm4gbn19LHsiLi4vbGliIjo3MzUsIi4uL3Bsb3RseSI6Nzc0fV0sODAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlLHI9dC5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPWUpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ZX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxlZGl0VHlwZTplfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOmV9O3JldHVybiB0LmFycmF5T2smJihuLmZhbWlseS5hcnJheU9rPSEwLG4uc2l6ZS5hcnJheU9rPSEwLG4uY29sb3IuYXJyYXlPaz0hMCksbn19LHt9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJmcmFtZXNfZW50cnkiLGdyb3VwOnt2YWxUeXBlOiJzdHJpbmcifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSx0cmFjZXM6e3ZhbFR5cGU6ImFueSJ9LGJhc2VmcmFtZTp7dmFsVHlwZToic3RyaW5nIn0sZGF0YTp7dmFsVHlwZToiYW55In0sbGF5b3V0Ont2YWxUeXBlOiJhbnkifX19LHt9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wcm9qTmFtZXM9e2VxdWlyZWN0YW5ndWxhcjoiZXF1aXJlY3Rhbmd1bGFyIixtZXJjYXRvcjoibWVyY2F0b3IiLG9ydGhvZ3JhcGhpYzoib3J0aG9ncmFwaGljIiwibmF0dXJhbCBlYXJ0aCI6Im5hdHVyYWxFYXJ0aCIsa2F2cmF5c2tpeTc6ImthdnJheXNraXk3IixtaWxsZXI6Im1pbGxlciIscm9iaW5zb246InJvYmluc29uIixlY2tlcnQ0OiJlY2tlcnQ0IiwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOiJhemltdXRoYWxFcXVhbEFyZWEiLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOiJhemltdXRoYWxFcXVpZGlzdGFudCIsImNvbmljIGVxdWFsIGFyZWEiOiJjb25pY0VxdWFsQXJlYSIsImNvbmljIGNvbmZvcm1hbCI6ImNvbmljQ29uZm9ybWFsIiwiY29uaWMgZXF1aWRpc3RhbnQiOiJjb25pY0VxdWlkaXN0YW50Iixnbm9tb25pYzoiZ25vbW9uaWMiLHN0ZXJlb2dyYXBoaWM6InN0ZXJlb2dyYXBoaWMiLG1vbGx3ZWlkZToibW9sbHdlaWRlIixoYW1tZXI6ImhhbW1lciIsInRyYW5zdmVyc2UgbWVyY2F0b3IiOiJ0cmFuc3ZlcnNlTWVyY2F0b3IiLCJhbGJlcnMgdXNhIjoiYWxiZXJzVXNhIiwid2lua2VsIHRyaXBlbCI6IndpbmtlbDMiLGFpdG9mZjoiYWl0b2ZmIixzaW51c29pZGFsOiJzaW51c29pZGFsIn0sci5heGVzTmFtZXM9WyJsb25heGlzIiwibGF0YXhpcyJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsImF6aW11dGhhbCBlcXVhbCBhcmVhIjozNjAsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6MzYwLCJjb25pYyBjb25mb3JtYWwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsInRyYW5zdmVyc2UgbWVyY2F0b3IiOjE4MCwiKiI6MzYwfSxyLmxhdGF4aXNTcGFuPXsiY29uaWMgY29uZm9ybWFsIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSwiKiI6MTgwfSxyLnNjb3BlRGVmYXVsdHM9e3dvcmxkOntsb25heGlzUmFuZ2U6Wy0xODAsMTgwXSxsYXRheGlzUmFuZ2U6Wy05MCw5MF0scHJvalR5cGU6ImVxdWlyZWN0YW5ndWxhciIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOiJhbGJlcnMgdXNhIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbMTUsMCwwXSxwcm9qUGFyYWxsZWxzOlswLDYwXX0sYXNpYTp7bG9uYXhpc1JhbmdlOlsyMiwxNjBdLGxhdGF4aXNSYW5nZTpbLTE1LDU1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSwibm9ydGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNDVdLGxhdGF4aXNSYW5nZTpbNSw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LCJzb3V0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfX0sci5jbGlwUGFkPS4wMDEsci5wcmVjaXNpb249LjEsci5sYW5kQ29sb3I9IiNGMERDODIiLHIud2F0ZXJDb2xvcj0iIzMzOTlGRiIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXsiSVNPLTMiOiJjb3VudHJpZXMiLCJVU0Etc3RhdGVzIjoic3VidW5pdHMiLCJjb3VudHJ5IG5hbWVzIjoiY291bnRyaWVzIn0sci5zcGhlcmVTVkc9e3R5cGU6IlNwaGVyZSJ9LHIuZmlsbExheWVycz17b2NlYW46MSxsYW5kOjEsbGFrZXM6MX0sci5saW5lTGF5ZXJzPXtzdWJ1bml0czoxLGNvdW50cmllczoxLGNvYXN0bGluZXM6MSxyaXZlcnM6MSxmcmFtZToxfSxyLmxheWVycz1bImJnIiwib2NlYW4iLCJsYW5kIiwibGFrZXMiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJmcm9udHBsb3QiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9WyJiZyIsIm9jZWFuIiwibGFuZCIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsInJpdmVycyIsImxha2VzIiwiZnJvbnRwbG90Il0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46Im9jZWFuIixsYW5kOiJsYW5kIixsYWtlczoibGFrZSIsc3VidW5pdHM6InN1YnVuaXQiLGNvdW50cmllczoiY291bnRyeSIsY29hc3RsaW5lczoiY29hc3RsaW5lIixyaXZlcnM6InJpdmVyIixmcmFtZToiZnJhbWUifX0se31dLDgwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy50b3BvanNvblVSTD10LnRvcG9qc29uVVJMLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90LHRoaXMudG9wb2pzb25OYW1lPW51bGwsdGhpcy50b3BvanNvbj1udWxsLHRoaXMucHJvamVjdGlvbj1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LnByb2plY3Rpb24scj1lLnR5cGUsbj1zLmdlb1t5LnByb2pOYW1lc1tyXV0oKSxpPXQuX2lzQ2xpcHBlZD95LmxvbmF4aXNTcGFuW3JdLzI6bnVsbCxhPVsiY2VudGVyIiwicm90YXRlIiwicGFyYWxsZWxzIiwiY2xpcEV4dGVudCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bjpbXX0sbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdOyJmdW5jdGlvbiIhPXR5cGVvZiBuW2NdJiYobltjXT1vKX1yZXR1cm4gbi5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXtpZihudWxsPT09bih0KSlyZXR1cm4hMDtpZihpKXt2YXIgZT1uLnJvdGF0ZSgpO3JldHVybiBzLmdlby5kaXN0YW5jZSh0LFstZVswXSwtZVsxXV0pPmkqTWF0aC5QSS8xODB9cmV0dXJuITF9LG4uZ2V0UGF0aD1mdW5jdGlvbigpe3JldHVybiBzLmdlby5wYXRoKCkucHJvamVjdGlvbihuKX0sbi5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uZ2V0UGF0aCgpLmJvdW5kcyh0KX0sbi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdWzBdLXRbMF1bMF0saT10WzFdWzFdLXRbMF1bMV0sYT1uLmNsaXBFeHRlbnQmJm4uY2xpcEV4dGVudCgpO24uc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLGEmJm4uY2xpcEV4dGVudChudWxsKTt2YXIgbz1uLmdldEJvdW5kcyhlKSxzPU1hdGgubWluKHIvKG9bMV1bMF0tb1swXVswXSksaS8ob1sxXVsxXS1vWzBdWzFdKSksbD0rdFswXVswXSsoci1zKihvWzFdWzBdK29bMF1bMF0pKS8yLGM9K3RbMF1bMV0rKGktcyoob1sxXVsxXStvWzBdWzFdKSkvMjtyZXR1cm4gYSYmbi5jbGlwRXh0ZW50KGEpLG4uc2NhbGUoMTUwKnMpLnRyYW5zbGF0ZShbbCxjXSl9LG4ucHJlY2lzaW9uKHkucHJlY2lzaW9uKSxpJiZuLmNsaXBBbmdsZShpLXkuY2xpcFBhZCksbn1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZVt0XSxuPXIuZHRpY2ssaT15LnNjb3BlRGVmYXVsdHNbZS5zY29wZV0sYT1pLmxvbmF4aXNSYW5nZSxvPWkubGF0YXhpc1JhbmdlLGw9ImxvbmF4aXMiPT09dD9bbl06WzAsbl07cmV0dXJuIHMuZ2VvLmdyYXRpY3VsZSgpLmV4dGVudChbW2FbMF0sb1swXV0sW2FbMV0sb1sxXV1dKS5zdGVwKGwpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj15LmNsaXBQYWQsbj10WzBdK3IsaT10WzFdLXIsYT1lWzBdK3Isbz1lWzFdLXI7bj4wJiZpPDAmJihpKz0zNjApO3ZhciBzPShpLW4pLzQ7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltbW24sYV0sW24sb10sW24rcyxvXSxbbisyKnMsb10sW24rMypzLG9dLFtpLG9dLFtpLGFdLFtpLXMsYV0sW2ktMipzLGFdLFtpLTMqcyxhXSxbbixhXV1dfX12YXIgcz10KCJkMyIpLGw9dCgiLi4vLi4vcGxvdGx5IiksYz10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGQ9dCgiLi4vcGxvdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksdj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IiksZz10KCIuL3pvb20iKSx5PXQoIi4vY29uc3RhbnRzIiksYj10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKSx4PXQoInRvcG9qc29uLWNsaWVudCIpLmZlYXR1cmU7dCgiLi9wcm9qZWN0aW9ucyIpKHMpO3ZhciBfPW4ucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LF8ucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPWVbdGhpcy5pZF0sYT1iLmdldFRvcG9qc29uTmFtZShpKTtudWxsPT09bi50b3BvanNvbnx8YSE9PW4udG9wb2pzb25OYW1lPyhuLnRvcG9qc29uTmFtZT1hLHZvaWQgMD09PVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0/ci5wdXNoKG4uZmV0Y2hUb3BvanNvbigpLnRoZW4oZnVuY3Rpb24ocil7UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXT1yLG4udG9wb2pzb249cixuLnVwZGF0ZSh0LGUpfSkpOihuLnRvcG9qc29uPVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0sbi51cGRhdGUodCxlKSkpOm4udXBkYXRlKHQsZSl9LF8uZmV0Y2hUb3BvanNvbj1mdW5jdGlvbigpe3ZhciB0PWIuZ2V0VG9wb2pzb25QYXRoKHRoaXMudG9wb2pzb25VUkwsdGhpcy50b3BvanNvbk5hbWUpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHIpe3MuanNvbih0LGZ1bmN0aW9uKG4saSl7aWYobilyZXR1cm4gcig0MDQ9PT1uLnN0YXR1cz9uZXcgRXJyb3IoWyJwbG90bHkuanMgY291bGQgbm90IGZpbmQgdG9wb2pzb24gZmlsZSBhdCIsdCwiLiIsIk1ha2Ugc3VyZSB0aGUgKnRvcG9qc29uVVJMKiBwbG90IGNvbmZpZyBvcHRpb24iLCJpcyBzZXQgcHJvcGVybHkuIl0uam9pbigiICIpKTpuZXcgRXJyb3IoWyJ1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHRvcG9qc29uIGZpbGUgYXQiLHRdLmpvaW4oIiAiKSkpO2UoaSl9KX0pfSxfLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbihlLHIpKXt0aGlzLmhhc0Nob3JvcGxldGg9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoImNob3JvcGxldGgiPT09dFtuXVswXS50cmFjZS50eXBlKXt0aGlzLmhhc0Nob3JvcGxldGg9ITA7YnJlYWt9dGhpcy52aWV3SW5pdGlhbHx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy51cGRhdGVCYXNlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVEaW1zKGUsciksdGhpcy51cGRhdGVGeChlLHIpLGQuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMsdCxyKTt2YXIgaT10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9aS5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSxfLnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9zaXplLG49ZS5kb21haW4sYT1lLnByb2plY3Rpb24scz1hLnJvdGF0aW9ufHx7fSx1PWUuY2VudGVyfHx7fSxmPXRoaXMucHJvamVjdGlvbj1pKGUpO2YuY2VudGVyKFt1Lmxvbi1zLmxvbix1LmxhdC1zLmxhdF0pLnJvdGF0ZShbLXMubG9uLC1zLmxhdCxzLnJvbGxdKS5wYXJhbGxlbHMoYS5wYXJhbGxlbHMpO3ZhciBoPVtbci5sK3IudypuLnhbMF0sci50K3IuaCooMS1uLnlbMV0pXSxbci5sK3IudypuLnhbMV0sci50K3IuaCooMS1uLnlbMF0pXV0sZD1lLmxvbmF4aXMscD1lLmxhdGF4aXMsbT1vKGQucmFuZ2UscC5yYW5nZSk7Zi5maXRFeHRlbnQoaCxtKTt2YXIgdj10aGlzLmJvdW5kcz1mLmdldEJvdW5kcyhtKSxnPXRoaXMuZml0U2NhbGU9Zi5zY2FsZSgpLHk9Zi50cmFuc2xhdGUoKTtpZighaXNGaW5pdGUodlswXVswXSl8fCFpc0Zpbml0ZSh2WzBdWzFdKXx8IWlzRmluaXRlKHZbMV1bMF0pfHwhaXNGaW5pdGUodlsxXVsxXSl8fGlzTmFOKHlbMF0pfHxpc05hTih5WzBdKSl7Zm9yKHZhciBiPXRoaXMuZ3JhcGhEaXYseD1bInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLF89IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsdz17fSxNPTA7TTx4Lmxlbmd0aDtNKyspd1t0aGlzLmlkKyIuIit4W01dXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsYy53YXJuKF8pLGIuX3Byb21pc2VzLnB1c2gobC5yZWxheW91dChiLHcpKSxffXZhciBUPXRoaXMubWlkUHQ9Wyh2WzBdWzBdK3ZbMV1bMF0pLzIsKHZbMF1bMV0rdlsxXVsxXSkvMl07aWYoZi5zY2FsZShhLnNjYWxlKmcpLnRyYW5zbGF0ZShbeVswXSsoVFswXS15WzBdKSx5WzFdKyhUWzFdLXlbMV0pXSkuY2xpcEV4dGVudCh2KSxlLl9pc0FsYmVyc1VzYSl7dmFyIGs9ZihbdS5sb24sdS5sYXRdKSxBPWYudHJhbnNsYXRlKCk7Zi50cmFuc2xhdGUoW0FbMF0tKGtbMF0tQVswXSksQVsxXS0oa1sxXS1BWzFdKV0pfX0sXy51cGRhdGVCYXNlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibG9uYXhpcyI9PT10fHwibGF0YXhpcyI9PT10fWZ1bmN0aW9uIG4odCl7cmV0dXJuIEJvb2xlYW4oeS5saW5lTGF5ZXJzW3RdKX1mdW5jdGlvbiBpKHQpe3JldHVybiBCb29sZWFuKHkuZmlsbExheWVyc1t0XSl9dmFyIG89dGhpcyxsPW8udG9wb2pzb24sYz1vLmxheWVycyxoPW8uYmFzZVBhdGhzLGQ9dGhpcy5oYXNDaG9yb3BsZXRoP3kubGF5ZXJzRm9yQ2hvcm9wbGV0aDp5LmxheWVycyxwPWQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfHxpKHQpP2VbInNob3ciK3RdOiFyKHQpfHxlW3RdLnNob3dncmlkfSksbT1vLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEocCxTdHJpbmcpO20uZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGNbdF0sZGVsZXRlIGhbdF0scy5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxtLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWNbdF09cy5zZWxlY3QodGhpcyk7ImJnIj09PXQ/by5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpyKHQpP2hbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOm4odCk/aFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6aSh0KSYmKGhbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pLG0ub3JkZXIoKSxtLmVhY2goZnVuY3Rpb24odCl7dmFyIG89aFt0XSxzPXkubGF5ZXJOYW1lVG9BZGplY3RpdmVbdF07ImZyYW1lIj09PXQ/by5kYXR1bSh5LnNwaGVyZVNWRyk6bih0KXx8aSh0KT9vLmRhdHVtKHgobCxsLm9iamVjdHNbdF0pKTpyKHQpJiZvLmRhdHVtKGEodCxlKSkuY2FsbCh1LnN0cm9rZSxlW3RdLmdyaWRjb2xvcikuY2FsbChmLmRhc2hMaW5lLCIiLGVbdF0uZ3JpZHdpZHRoKSxuKHQpP28uY2FsbCh1LnN0cm9rZSxlW3MrImNvbG9yIl0pLmNhbGwoZi5kYXNoTGluZSwiIixlW3MrIndpZHRoIl0pOmkodCkmJm8uY2FsbCh1LmZpbGwsZVtzKyJjb2xvciJdKX0pfSxfLnVwZGF0ZURpbXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmJvdW5kcyxuPShlLmZyYW1ld2lkdGh8fDApLzIsaT1yWzBdWzBdLW4sYT1yWzBdWzFdLW4sbz1yWzFdWzBdLWkrbixzPXJbMV1bMV0tYStuO2Yuc2V0UmVjdCh0aGlzLmNsaXBSZWN0LGksYSxvLHMpLHRoaXMuYmdSZWN0LmNhbGwoZi5zZXRSZWN0LGksYSxvLHMpLmNhbGwodS5maWxsLGUuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PWksdGhpcy54YXhpcy5fbGVuZ3RoPW8sdGhpcy55YXhpcy5fb2Zmc2V0PWEsdGhpcy55YXhpcy5fbGVuZ3RoPXN9LF8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dmFyIHQ9aS52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgciBpbiB0KWVbaS5pZCsiLiIrcl09dFtyXTtsLnJlbGF5b3V0KGEsZSksYS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGkucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0raS54YXhpcy5fb2Zmc2V0LHRbMV0raS55YXhpcy5fb2Zmc2V0XSl9dmFyIGk9dGhpcyxhPWkuZ3JhcGhEaXYsbz1pLmJnUmVjdCxjPXQuZHJhZ21vZGU7aWYoIWkuaXNTdGF0aWMpe2lmKCJwYW4iPT09YylvLm5vZGUoKS5vbm1vdXNlZG93bj1udWxsLG8uY2FsbChnKGksZSkpLG8ub24oImRibGNsaWNrLnpvb20iLHIpO2Vsc2UgaWYoInNlbGVjdCI9PT1jfHwibGFzc28iPT09Yyl7by5vbigiLnpvb20iLG51bGwpO3ZhciB1OyJzZWxlY3QiPT09Yz91PWZ1bmN0aW9uKHQsZSl7KHQucmFuZ2U9e30pW2kuaWRdPVtuKFtlLnhtaW4sZS55bWluXSksbihbZS54bWF4LGUueW1heF0pXX06Imxhc3NvIj09PWMmJih1PWZ1bmN0aW9uKHQsZSxyKXsodC5sYXNzb1BvaW50cz17fSlbaS5pZF09ci5maWx0ZXJlZC5tYXAobil9KTt2YXIgZj17ZWxlbWVudDppLmJnUmVjdC5ub2RlKCksZ2Q6YSxwbG90aW5mbzp7eGF4aXM6aS54YXhpcyx5YXhpczppLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltpLnhheGlzXSx5YXhlczpbaS55YXhpc10sc3VicGxvdDppLmlkfTtmLnByZXBGbj1mdW5jdGlvbih0LGUscil7dih0LGUscixmLGMpfSxmLmRvbmVGbj1mdW5jdGlvbihlLHIpezI9PT1yJiZ0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX0sbS5pbml0KGYpfW8ub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oKXt2YXIgdD1pLnByb2plY3Rpb24uaW52ZXJ0KHMubW91c2UodGhpcykpO2lmKCF0fHxpc05hTih0WzBdKXx8aXNOYU4odFsxXSkpcmV0dXJuIG0udW5ob3ZlcihhLHMuZXZlbnQpO2kueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMF19LGkueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMV19LGguaG92ZXIoYSxzLmV2ZW50LGkuaWQpfSksby5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bS51bmhvdmVyKGEscy5ldmVudCl9KSxvLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoLmNsaWNrKGEscy5ldmVudCl9KX19LF8ubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0LHI9ImNsaXAiK2UuX3VpZCt0LmlkO3QuY2xpcERlZj1lLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHIpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPXMuc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwoZi5zZXRDbGlwVXJsLHIpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVswXX19LHQueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LHAuc2V0Q29udmVydCh0Lm1vY2tBeGlzLGUpfSxfLnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZT10LmNlbnRlcnx8e30scj10LnByb2plY3Rpb24sbj1yLnJvdGF0aW9ufHx7fTt0Ll9pc1Njb3BlZD90aGlzLnZpZXdJbml0aWFsPXsiY2VudGVyLmxvbiI6ZS5sb24sImNlbnRlci5sYXQiOmUubGF0LCJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlfTp0Ll9pc0NsaXBwZWQ/dGhpcy52aWV3SW5pdGlhbD17InByb2plY3Rpb24uc2NhbGUiOnIuc2NhbGUsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjpuLmxvbiwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOm4ubGF0fTp0aGlzLnZpZXdJbml0aWFsPXsiY2VudGVyLmxvbiI6ZS5sb24sImNlbnRlci5sYXQiOmUubGF0LCJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6bi5sb259fSxfLnJlbmRlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9bih0LmxvbmxhdCk7cmV0dXJuIGU/InRyYW5zbGF0ZSgiK2VbMF0rIiwiK2VbMV0rIikiOm51bGx9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbi5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/Im5vbmUiOm51bGx9dmFyIHIsbj10aGlzLnByb2plY3Rpb24saT1uLmdldFBhdGgoKTtmb3IociBpbiB0aGlzLmJhc2VQYXRocyl0aGlzLmJhc2VQYXRoc1tyXS5hdHRyKCJkIixpKTtmb3IociBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1tyXS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gaSh0Lmdlb2pzb24pfSk7Zm9yKHIgaW4gdGhpcy5kYXRhUG9pbnRzKXRoaXMuZGF0YVBvaW50c1tyXS5hdHRyKCJkaXNwbGF5IixlKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYzMiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1MiwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzYwLCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vY2FydGVzaWFuL3NlbGVjdCI6Nzk1LCIuLi9wbG90cyI6ODM4LCIuL2NvbnN0YW50cyI6ODA1LCIuL3Byb2plY3Rpb25zIjo4MTEsIi4vem9vbSI6ODEyLGQzOjEyMSwidG9wb2pzb24tY2xpZW50Ijo1NDR9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9nZW8iKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsbz0iZ2VvIjtyLm5hbWU9byxyLmF0dHI9byxyLmlkUm9vdD1vLHIuaWRSZWdleD1yLmF0dHJSZWdleD1hKG8pLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dC9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLG8pO3ZvaWQgMD09PXdpbmRvdy5QbG90bHlHZW9Bc3NldHMmJih3aW5kb3cuUGxvdGx5R2VvQXNzZXRzPXt0b3BvanNvbjp7fX0pO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aS5nZXRTdWJwbG90Q2FsY0RhdGEocixvLGwpLHU9ZVtsXSxmPXUuX3N1YnBsb3Q7Znx8KGY9bih7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9ZiksZi5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1pLmdldFN1YnBsb3RJZHMobixvKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1uW2xdLl9zdWJwbG90CjshZVtsXSYmYyYmKGMuZnJhbWV3b3JrLnJlbW92ZSgpLGMuY2xpcERlZi5yZW1vdmUoKSl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pLmdldFN1YnBsb3RJZHModCxvKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07bi5fc3VicGxvdC51cGRhdGVGeCh0LG4pfX19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4vZ2VvIjo4MDYsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgwOCwiLi9sYXlvdXQvZGVmYXVsdHMiOjgwOSwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMH1dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2dlbzp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJnZW8iLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sODA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGk9cigicmVzb2x1dGlvbiIpLG89cigic2NvcGUiKSxsPWEuc2NvcGVEZWZhdWx0c1tvXSxjPXIoInByb2plY3Rpb24udHlwZSIsbC5wcm9qVHlwZSksdT1lLl9pc0FsYmVyc1VzYT0iYWxiZXJzIHVzYSI9PT1jO3UmJihvPWUuc2NvcGU9InVzYSIpO3ZhciBmPWUuX2lzU2NvcGVkPSJ3b3JsZCIhPT1vLGg9ZS5faXNDb25pYz1jLmluZGV4T2YoImNvbmljIikhPT0tMTtlLl9pc0NsaXBwZWQ9ISFhLmxvbmF4aXNTcGFuW2NdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7ZCsrKXt2YXIgcCxtPXNbZF0sdj1bMzAsMTBdW2RdO2lmKGYpcD1sW20rIlJhbmdlIl07ZWxzZXt2YXIgZz1hW20rIlNwYW4iXSx5PShnW2NdfHxnWyIqIl0pLzIsYj1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrbS5zdWJzdHIoMCwzKSxsLnByb2pSb3RhdGVbZF0pO3A9W2IteSxiK3ldfXIobSsiLnRpY2swIixyKG0rIi5yYW5nZSIscClbMF0pLHIobSsiLmR0aWNrIix2KSxuPXIobSsiLnNob3dncmlkIiksbiYmKHIobSsiLmdyaWRjb2xvciIpLHIobSsiLmdyaWR3aWR0aCIpKX12YXIgeD1lLmxvbmF4aXMucmFuZ2UsXz1lLmxhdGF4aXMucmFuZ2Usdz14WzBdLE09eFsxXTt3PjAmJk08MCYmKE0rPTM2MCk7dmFyIFQsaz0odytNKS8yO2lmKCF1KXt2YXIgQT1mP2wucHJvalJvdGF0ZTpbaywwLDBdO1Q9cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLEFbMF0pLHIoInByb2plY3Rpb24ucm90YXRpb24ubGF0IixBWzFdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLnJvbGwiLEFbMl0pLG49cigic2hvd2NvYXN0bGluZXMiLCFmKSxuJiYocigiY29hc3RsaW5lY29sb3IiKSxyKCJjb2FzdGxpbmV3aWR0aCIpKSxuPXIoInNob3dvY2VhbiIpLG4mJnIoIm9jZWFuY29sb3IiKX12YXIgRSxTO2lmKHU/KEU9LTk2LjYsUz0zOC43KTooRT1mP2s6VCxTPShfWzBdK19bMV0pLzIpLHIoImNlbnRlci5sb24iLEUpLHIoImNlbnRlci5sYXQiLFMpLGgpe3IoInByb2plY3Rpb24ucGFyYWxsZWxzIixsLnByb2pQYXJhbGxlbHN8fFswLDYwXSl9cigicHJvamVjdGlvbi5zY2FsZSIpLG49cigic2hvd2xhbmQiKSxuJiZyKCJsYW5kY29sb3IiKSxuPXIoInNob3dsYWtlcyIpLG4mJnIoImxha2Vjb2xvciIpLG49cigic2hvd3JpdmVycyIpLG4mJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxuPXIoInNob3djb3VudHJpZXMiLGYmJiJ1c2EiIT09byksbiYmKHIoImNvdW50cnljb2xvciIpLHIoImNvdW50cnl3aWR0aCIpKSwoInVzYSI9PT1vfHwibm9ydGggYW1lcmljYSI9PT1vJiY1MD09PWkpJiYocigic2hvd3N1YnVuaXRzIiwhMCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLGZ8fChuPXIoInNob3dmcmFtZSIsITApKSYmKHIoImZyYW1lY29sb3IiKSxyKCJmcmFtZXdpZHRoIikpLHIoImJnY29sb3IiKX12YXIgaT10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIiksYT10KCIuLi9jb25zdGFudHMiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPWEuYXhlc05hbWVzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZToiZ2VvIixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6bixwYXJ0aXRpb246InkifSl9fSx7Ii4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjg0NSwiLi4vY29uc3RhbnRzIjo4MDUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMH1dLDgxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnN0YW50cyIpLGE9dCgiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89e3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIn0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fTtlLmV4cG9ydHM9YSh7ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxyZXNvbHV0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WzExMCw1MF0sZGZsdDoxMTAsY29lcmNlTnVtYmVyOiEwfSxzY29wZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGkuc2NvcGVEZWZhdWx0cyksZGZsdDoid29ybGQifSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoaS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9LHJvbGw6e3ZhbFR5cGU6Im51bWJlciJ9fSxwYXJhbGxlbHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn19LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOiJib29sZWFuIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvYXN0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5sYW5kQ29sb3J9LHNob3dvY2Vhbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxha2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLndhdGVyQ29sb3J9LHJpdmVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOiJib29sZWFuIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb3VudHJ5d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHN1YnVuaXR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGZyYW1ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6byxsYXRheGlzOm99LCJwbG90IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vY29uc3RhbnRzIjo4MDV9XSw4MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGUpcmV0dXJue3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczpvYmplY3QuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuKX0pfTtpZighRS5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpKXJldHVybiBudWxsO3ZhciBpPUVbZS50eXBlXTtyZXR1cm4gdC5nZW8uc3RyZWFtKGUsbihpKSksaS5yZXN1bHQoKX1mdW5jdGlvbiBuKCl7fWZ1bmN0aW9uIGkodCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxkPWZbMV07dT5uXmQ+biYmcjwoaC1jKSoobi11KS8oZC11KStjJiYoaT0haSl9cmV0dXJuIGl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD90L01hdGguc2luKHQpOjF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdD4xP0k6dDwtMT8tSTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdD4xPzA6dDwtMT9DOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9KDIrSSkqTWF0aC5zaW4oZSk7ZS89Mjtmb3IodmFyIG49MCxpPTEvMDtuPDEwJiZNYXRoLmFicyhpKT5TO24rKyl7dmFyIGE9TWF0aC5jb3MoZSk7ZS09aT0oZStNYXRoLnNpbihlKSooYSsyKS1yKS8oMiphKigxK2EpKX1yZXR1cm5bMi9NYXRoLnNxcnQoQyooNCtDKSkqdCooMStNYXRoLmNvcyhlKSksMipNYXRoLnNxcnQoQy8oNCtDKSkqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsbil7dmFyIGk9UihyL2Usbik7cmV0dXJuIGlbMF0qPXQsaX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10KSwxPT09ZT9SOmU9PT0xLzA/aDooci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1SLmludmVydChyL3Qsbik7cmV0dXJuIGlbMF0qPWUsaX0scil9ZnVuY3Rpb24gZigpe3ZhciB0PTIsZT1PKHUpLHI9ZSh0KTtyZXR1cm4gci5jb2VmZmljaWVudD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQ9K3IpOnR9LHJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpL01hdGguY29zKGUvPTIpLDIqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm5bMyp0LygyKkMpKk1hdGguc3FydChDKkMvMy1lKmUpLGVdfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm5bdCwxLjI1Kk1hdGgubG9nKE1hdGgudGFuKEMvNCsuNCplKSldfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLG49dCpNYXRoLnNpbihlKSxpPTMwO2Rve2UtPXI9KGUrTWF0aC5zaW4oZSktbikvKDErTWF0aC5jb3MoZSkpfXdoaWxlKE1hdGguYWJzKHIpPlMmJi0taT4wKTtyZXR1cm4gZS8yfX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBnKHQsZSl7dmFyIHIsbj1NYXRoLm1pbigxOCwzNipNYXRoLmFicyhlKS9DKSxpPU1hdGguZmxvb3IobiksYT1uLWksbz0ocj1qW2ldKVswXSxzPXJbMV0sbD0ocj1qWysraV0pWzBdLGM9clsxXSx1PShyPWpbTWF0aC5taW4oMTksKytpKV0pWzBdLGY9clsxXTtyZXR1cm5bdCoobCthKih1LW8pLzIrYSphKih1LTIqbCtvKS8yKSwoZT4wP0k6LUkpKihjK2EqKGYtcykvMithKmEqKGYtMipjK3MpLzIpXX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksZV19ZnVuY3Rpb24gYih0LGUpe3ZhciByPU1hdGguY29zKGUpLG49byhsKHIqTWF0aC5jb3ModC89MikpKTtyZXR1cm5bMipyKk1hdGguc2luKHQpKm4sTWF0aC5zaW4oZSkqbl19ZnVuY3Rpb24geCh0LGUpe3ZhciByPWIodCxlKTtyZXR1cm5bKHJbMF0rdC9JKS8yLChyWzFdK2UpLzJdfXQuZ2VvLnByb2plY3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0cmVhbTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm5vdCB5ZXQgc3VwcG9ydGVkIik7cmV0dXJuKHQmJl8uaGFzT3duUHJvcGVydHkodC50eXBlKT9fW3QudHlwZV06cikodCxuKX07dmFyIF89e0ZlYXR1cmU6ZSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LHIpe3JldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyKX0pfX19LHc9W10sTT1bXSxUPXtwb2ludDpmdW5jdGlvbih0LGUpe3cucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXcubGVuZ3RoP3cubGVuZ3RoPDI/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczp3WzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6d306bnVsbDtyZXR1cm4gdz1bXSx0fX0saz17bGluZVN0YXJ0Om4scG9pbnQ6ZnVuY3Rpb24odCxlKXt3LnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dy5sZW5ndGgmJihNLnB1c2godyksdz1bXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PU0ubGVuZ3RoP00ubGVuZ3RoPDI/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOk1bMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOk19Om51bGw7cmV0dXJuIE09W10sdH19LEE9e3BvbHlnb25TdGFydDpuLGxpbmVTdGFydDpuLHBvaW50OmZ1bmN0aW9uKHQsZSl7dy5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXcubGVuZ3RoO2lmKHQpe2Rve3cucHVzaCh3WzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTtNLnB1c2godyksdz1bXX19LHBvbHlnb25FbmQ6bixyZXN1bHQ6ZnVuY3Rpb24oKXtpZighTS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHQ9W10sZT1bXTtyZXR1cm4gTS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2kocik/dC5wdXNoKFtyXSk6ZS5wdXNoKHIpfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07dC5zb21lKGZ1bmN0aW9uKHQpe2lmKGEodFswXSxyKSlyZXR1cm4gdC5wdXNoKGUpLCEwfSl8fHQucHVzaChbZV0pfSksTT1bXSx0Lmxlbmd0aD90Lmxlbmd0aD4xP3t0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9Ont0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0WzBdfTpudWxsfX0sRT17UG9pbnQ6VCxNdWx0aVBvaW50OlQsTGluZVN0cmluZzprLE11bHRpTGluZVN0cmluZzprLFBvbHlnb246QSxNdWx0aVBvbHlnb246QSxTcGhlcmU6QX0sUz0xZS02LEw9UypTLEM9TWF0aC5QSSxJPUMvMixEPShNYXRoLnNxcnQoQyksQy8xODApLFA9MTgwL0Msej10Lmdlby5wcm9qZWN0aW9uLE89dC5nZW8ucHJvamVjdGlvbk11dGF0b3I7dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyKXtmb3IodmFyIG49cjwwPy0xOjEsaT1sWysocjwwKV0sYT0wLG89aS5sZW5ndGgtMTthPG8mJnQ+aVthXVsyXVswXTsrK2EpO3ZhciBzPWUodC1pW2FdWzFdWzBdLHIpO3JldHVybiBzWzBdKz1lKGlbYV1bMV1bMF0sbipyPm4qaVthXVswXVsxXT9pW2FdWzBdWzFdOnIpWzBdLHN9ZnVuY3Rpb24gbigpe3M9bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciByLG49ZSh0WzBdWzBdLHRbMF1bMV0pWzBdLGk9ZSh0WzJdWzBdLHRbMl1bMV0pWzBdLGE9ZSh0WzFdWzBdLHRbMF1bMV0pWzFdLG89ZSh0WzFdWzBdLHRbMV1bMV0pWzFdO3JldHVybiBhPm8mJihyPWEsYT1vLG89ciksW1tuLGFdLFtpLG9dXX0pfSl9ZnVuY3Rpb24gaSgpe2Zvcih2YXIgZT0xZS02LHI9W10sbj0wLGk9bFswXS5sZW5ndGg7bjxpOysrbil7dmFyIG89bFswXVtuXSxzPTE4MCpvWzBdWzBdL0MsYz0xODAqb1swXVsxXS9DLHU9MTgwKm9bMV1bMV0vQyxmPTE4MCpvWzJdWzBdL0MsaD0xODAqb1syXVsxXS9DO3IucHVzaChhKFtbcytlLGMrZV0sW3MrZSx1LWVdLFtmLWUsdS1lXSxbZi1lLGgrZV1dLDMwKSl9Zm9yKHZhciBuPWxbMV0ubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPWxbMV1bbl0scz0xODAqb1swXVswXS9DLGM9MTgwKm9bMF1bMV0vQyx1PTE4MCpvWzFdWzFdL0MsZj0xODAqb1syXVswXS9DLGg9MTgwKm9bMl1bMV0vQztyLnB1c2goYShbW2YtZSxoLWVdLFtmLWUsdStlXSxbcytlLHUrZV0sW3MrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdC5tZXJnZShyKV19fWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2E8bzspe3I9dFthXSxuPShyWzBdLXNbMF0pL2UsaT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqaV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPFMmJk1hdGguYWJzKHRbMV0tZVsxXSk8U312YXIgcyxsPVtbW1stQywwXSxbMCxJXSxbQywwXV1dLFtbWy1DLDBdLFswLC1JXSxbQywwXV1dXTtlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpPXNbKyhuPDApXSxhPWxbKyhuPDApXSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKXt2YXIgZj1pW2NdO2lmKGZbMF1bMF08PXQmJnQ8ZlsxXVswXSYmZlswXVsxXTw9biYmbjxmWzFdWzFdKXt2YXIgaD1lLmludmVydCh0LWUoYVtjXVsxXVswXSwwKVswXSxuKTtyZXR1cm4gaFswXSs9YVtjXVsxXVswXSxvKHIoaFswXSxoWzFdKSxbdCxuXSk/aDpudWxsfX19KTt2YXIgYz10Lmdlby5wcm9qZWN0aW9uKHIpLHU9Yy5zdHJlYW07cmV0dXJuIGMuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPWMucm90YXRlKCksbj11KGUpLGE9KGMucm90YXRlKFswLDBdKSx1KGUpKTtyZXR1cm4gYy5yb3RhdGUociksbi5zcGhlcmU9ZnVuY3Rpb24oKXt0Lmdlby5zdHJlYW0oaSgpLGEpfSxufSxjLmxvYmVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bW3RbMF1bMF0qQy8xODAsdFswXVsxXSpDLzE4MF0sW3RbMV1bMF0qQy8xODAsdFsxXVsxXSpDLzE4MF0sW3RbMl1bMF0qQy8xODAsdFsyXVsxXSpDLzE4MF1dfSl9KSxuKCksYyk6bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltbMTgwKnRbMF1bMF0vQywxODAqdFswXVsxXS9DXSxbMTgwKnRbMV1bMF0vQywxODAqdFsxXVsxXS9DXSxbMTgwKnRbMl1bMF0vQywxODAqdFsyXVsxXS9DXV19KX0pfSxjfSxjLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPS41KmUqTWF0aC5zcXJ0KCg0K0MpL0MpLG49cyhyKSxpPU1hdGguY29zKG4pO3JldHVyblt0LygyL01hdGguc3FydChDKig0K0MpKSooMStpKSkscygobityKihpKzIpKS8oMitJKSldfSwodC5nZW8uZWNrZXJ0ND1mdW5jdGlvbigpe3JldHVybiB6KGMpfSkucmF3PWM7dmFyIFI9dC5nZW8uYXppbXV0aGFsRXF1YWxBcmVhLnJhdztoLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqcyhlLzIpO3JldHVyblt0Kk1hdGguY29zKHIvMikvTWF0aC5jb3Mocikscl19LCh0Lmdlby5oYW1tZXI9ZikucmF3PXUsZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bMi8zKkMqdC9NYXRoLnNxcnQoQypDLzMtZSplKSxlXX0sKHQuZ2VvLmthdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIHooZCl9KS5yYXc9ZCxwLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSpNYXRoLmF0YW4oTWF0aC5leHAoLjgqZSkpLS42MjUqQ119LCh0Lmdlby5taWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4geihwKX0pLnJhdz1wO3ZhciBGPShtKEMpLGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuW3QqcipNYXRoLmNvcyhuPWkobikpLGUqTWF0aC5zaW4obildfXZhciBpPW0ocik7cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9cyhpL2UpO3JldHVybltuLyh0Kk1hdGguY29zKGEpKSxzKCgyKmErTWF0aC5zaW4oMiphKSkvcildfSxufShNYXRoLlNRUlQyL0ksTWF0aC5TUVJUMixDKSk7KHQuZ2VvLm1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiB6KEYpfSkucmF3PUYsdi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT0yNTtkb3t2YXIgYT1uKm4sbz1hKmE7bi09cj0obiooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKE1hdGguYWJzKHIpPlMmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9bipuKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LCh0Lmdlby5uYXR1cmFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4geih2KX0pLnJhdz12O3ZhciBqPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtqLmZvckVhY2goZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSksZy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lL0ksbj05MCpyLGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobi81KSksYT1NYXRoLm1heCgwLE1hdGguZmxvb3IoaSkpO2Rve3ZhciBvPWpbYV1bMV0scz1qW2ErMV1bMV0sbD1qW01hdGgubWluKDE5LGErMildWzFdLGM9bC1vLHU9bC0yKnMrbyxmPTIqKE1hdGguYWJzKHIpLXMpL2MsaD11L2MsZD1mKigxLWgqZiooMS0yKmgqZikpO2lmKGQ+PTB8fDE9PT1hKXtuPShlPj0wPzU6LTUpKihkK2kpO3ZhciBwLG09NTA7ZG97aT1NYXRoLm1pbigxOCxNYXRoLmFicyhuKS81KSxhPU1hdGguZmxvb3IoaSksZD1pLWEsbz1qW2FdWzFdLHM9althKzFdWzFdLGw9altNYXRoLm1pbigxOSxhKzIpXVsxXSxuLT0ocD0oZT49MD9JOi1JKSoocytkKihsLW8pLzIrZCpkKihsLTIqcytvKS8yKS1lKSpQfXdoaWxlKE1hdGguYWJzKHApPkwmJi0tbT4wKTticmVha319d2hpbGUoLS1hPj0wKTt2YXIgdj1qW2FdWzBdLGc9althKzFdWzBdLHk9altNYXRoLm1pbigxOSxhKzIpXVswXTtyZXR1cm5bdC8oZytkKih5LXYpLzIrZCpkKih5LTIqZyt2KS8yKSxuKkRdfSwodC5nZW8ucm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4geihnKX0pLnJhdz1nLHkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTWF0aC5jb3MoZSksZV19LCh0Lmdlby5zaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHooeSl9KS5yYXc9eSxiLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPkMqQytTKSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguc2luKHIpLHM9TWF0aC5zaW4oci8yKSxjPU1hdGguY29zKHIvMiksdT1NYXRoLnNpbihuKSxmPU1hdGguY29zKG4pLGg9TWF0aC5zaW4oMipuKSxkPXUqdSxwPWYqZixtPXMqcyx2PTEtcCpjKmMsZz12P2woZipjKSpNYXRoLnNxcnQoYT0xL3YpOmE9MCx5PTIqZypmKnMtdCxiPWcqdS1lLHg9YSoocCptK2cqZipjKmQpLF89YSooLjUqbypoLTIqZyp1KnMpLHc9LjI1KmEqKGgqcy1nKnUqcCpvKSxNPWEqKGQqYytnKm0qZiksVD1fKnctTSp4O2lmKCFUKWJyZWFrO3ZhciBrPShiKl8teSpNKS9ULEE9KHkqdy1iKngpL1Q7ci09ayxuLT1BfXdoaWxlKChNYXRoLmFicyhrKT5TfHxNYXRoLmFicyhBKT5TKSYmLS1pPjApO3JldHVybltyLG5dfX0sKHQuZ2VvLmFpdG9mZj1mdW5jdGlvbigpe3JldHVybiB6KGIpfSkucmF3PWIseC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxjPU1hdGguc2luKDIqbiksdT1zKnMsZj1vKm8saD1NYXRoLnNpbihyKSxkPU1hdGguY29zKHIvMikscD1NYXRoLnNpbihyLzIpLG09cCpwLHY9MS1mKmQqZCxnPXY/bChvKmQpKk1hdGguc3FydChhPTEvdik6YT0wLHk9LjUqKDIqZypvKnArci9JKS10LGI9LjUqKGcqcytuKS1lLHg9LjUqYSooZiptK2cqbypkKnUpKy41L0ksXz1hKihoKmMvNC1nKnMqcCksdz0uMTI1KmEqKGMqcC1nKnMqZipoKSxNPS41KmEqKHUqZCtnKm0qbykrLjUsVD1fKnctTSp4LGs9KGIqXy15Kk0pL1QsQT0oeSp3LWIqeCkvVDtyLT1rLG4tPUF9d2hpbGUoKE1hdGguYWJzKGspPlN8fE1hdGguYWJzKEEpPlMpJiYtLWk+MCk7cmV0dXJuW3Isbl19LCh0Lmdlby53aW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIHooeCl9KS5yYXc9eH1lLmV4cG9ydHM9bn0se31dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9vOmUuX2lzQ2xpcHBlZD9sOnMpKHQscil9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB3LmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBhKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9TS5uZXN0ZWRQcm9wZXJ0eShzLHQpO3IuZ2V0KCkhPT1lJiYoci5zZXQoZSksTS5uZXN0ZWRQcm9wZXJ0eShvLHQpLnNldChlKSxsW2krIi4iK3RdPWUpfXZhciBpPXQuaWQsYT10LmdyYXBoRGl2LG89YS5sYXlvdXRbaV0scz1hLl9mdWxsTGF5b3V0W2ldLGw9e307cihuKSxuKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSksYS5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGwpfWZ1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiByKCl7dy5zZWxlY3QodGhpcykuc3R5bGUoQSl9ZnVuY3Rpb24gbigpe2Uuc2NhbGUody5ldmVudC5zY2FsZSkudHJhbnNsYXRlKHcuZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpfWZ1bmN0aW9uIG8ocil7dmFyIG49ZS5pbnZlcnQodC5taWRQdCk7cigiY2VudGVyLmxvbiIsblswXSkscigiY2VudGVyLmxhdCIsblsxXSl9ZnVuY3Rpb24gcygpe3cuc2VsZWN0KHRoaXMpLnN0eWxlKEUpLGEodCxlLG8pfXZhciBsPWkodCxlKTtyZXR1cm4gbC5vbigiem9vbXN0YXJ0IixyKS5vbigiem9vbSIsbikub24oInpvb21lbmQiLHMpLGx9ZnVuY3Rpb24gcyh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIG4odCl7dmFyIG49ZShyKHQpKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT5ifHxNYXRoLmFicyhuWzFdLXRbMV0pPmJ9ZnVuY3Rpb24gbygpe3cuc2VsZWN0KHRoaXMpLnN0eWxlKEEpLHU9dy5tb3VzZSh0aGlzKSxmPWUucm90YXRlKCksaD1lLnRyYW5zbGF0ZSgpLGQ9ZixwPXIodSl9ZnVuY3Rpb24gcygpe2lmKG09dy5tb3VzZSh0aGlzKSxuKHUpKXJldHVybiB5LnNjYWxlKGUuc2NhbGUoKSksdm9pZCB5LnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKHcuZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFtoWzBdLHcuZXZlbnQudHJhbnNsYXRlWzFdXSkscD9yKG0pJiYoZz1yKG0pLHY9W2RbMF0rKGdbMF0tcFswXSksZlsxXSxmWzJdXSxlLnJvdGF0ZSh2KSxkPXYpOih1PW0scD1yKHUpKSx0LnJlbmRlcigpfWZ1bmN0aW9uIGwoKXt3LnNlbGVjdCh0aGlzKS5zdHlsZShFKSxhKHQsZSxjKX1mdW5jdGlvbiBjKHIpe3ZhciBuPWUucm90YXRlKCksaT1lLmludmVydCh0Lm1pZFB0KTtyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLW5bMF0pLHIoImNlbnRlci5sb24iLGlbMF0pLHIoImNlbnRlci5sYXQiLGlbMV0pfXZhciB1LGYsaCxkLHAsbSx2LGcseT1pKHQsZSksYj0yO3JldHVybiB5Lm9uKCJ6b29tc3RhcnQiLG8pLm9uKCJ6b29tIixzKS5vbigiem9vbWVuZCIsbCkseX1mdW5jdGlvbiBsKHQsZSl7ZnVuY3Rpb24gcih0KXt5Kyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBuKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gbyh0KXstLXl8fHQoe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gcyh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtclswXSksdCgicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLC1yWzFdKX12YXIgbCxwPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LG09aSh0LGUpLHY9XyhtLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpLHk9MCxiPW0ub247cmV0dXJuIG0ub24oInpvb21zdGFydCIsZnVuY3Rpb24oKXt3LnNlbGVjdCh0aGlzKS5zdHlsZShBKTt2YXIgdD13Lm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWksbz1lLnRyYW5zbGF0ZSgpLHM9dShpKTtsPWMoZSx0KSxiLmNhbGwobSwiem9vbSIsZnVuY3Rpb24oKXt2YXIgcj13Lm1vdXNlKHRoaXMpO2lmKGUuc2NhbGUocC5rPXcuZXZlbnQuc2NhbGUpLGwpe2lmKGMoZSxyKSl7ZS5yb3RhdGUoaSkudHJhbnNsYXRlKG8pO3ZhciB1PWMoZSxyKSxtPWgobCx1KSx5PWcoZihzLG0pKSxiPXAucj1kKHksbCxhKTtpc0Zpbml0ZShiWzBdKSYmaXNGaW5pdGUoYlsxXSkmJmlzRmluaXRlKGJbMl0pfHwoYj1hKSxlLnJvdGF0ZShiKSxhPWJ9fWVsc2UgdD1yLGw9YyhlLHQpO24odi5vZih0aGlzLGFyZ3VtZW50cykpfSkscih2Lm9mKHRoaXMsYXJndW1lbnRzKSl9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXt3LnNlbGVjdCh0aGlzKS5zdHlsZShFKSxiLmNhbGwobSwiem9vbSIsbnVsbCksbyh2Lm9mKHRoaXMsYXJndW1lbnRzKSksYSh0LGUscyl9KS5vbigiem9vbS5yZWRyYXciLGZ1bmN0aW9uKCl7dC5yZW5kZXIoKX0pLHcucmViaW5kKG0sdiwib24iKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dC5pbnZlcnQoZSk7cmV0dXJuIHImJmlzRmluaXRlKHJbMF0pJiZpc0Zpbml0ZShyWzFdKSYmeShyKX1mdW5jdGlvbiB1KHQpe3ZhciBlPS41KnRbMF0qVCxyPS41KnRbMV0qVCxuPS41KnRbMl0qVCxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSksbz1NYXRoLnNpbihyKSxzPU1hdGguY29zKHIpLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm5bYSpzKmMraSpvKmwsaSpzKmMtYSpvKmwsYSpvKmMraSpzKmwsYSpzKmwtaSpvKmNdfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdLG89ZVswXSxzPWVbMV0sbD1lWzJdLGM9ZVszXTtyZXR1cm5bcipvLW4qcy1pKmwtYSpjLHIqcytuKm8raSpjLWEqbCxyKmwtbipjK2kqbythKnMscipjK24qbC1pKnMrYSpvXX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmZSl7dmFyIHI9eCh0LGUpLG49TWF0aC5zcXJ0KGIocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxiKHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX19ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49dihlLDIsdFswXSk7bj12KG4sMSx0WzFdKSxuPXYobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0scz1lWzFdLGw9ZVsyXSxjPW5bMF0sdT1uWzFdLGY9blsyXSxoPU1hdGguYXRhbjIocyxvKSprLGQ9TWF0aC5zcXJ0KG8qbytzKnMpO01hdGguYWJzKHUpPmQ/KGE9KHU+MD85MDotOTApLWgsaT0wKTooYT1NYXRoLmFzaW4odS9kKSprLWgsaT1NYXRoLnNxcnQoZCpkLXUqdSkpO3ZhciBtPTE4MC1hLTIqaCxnPShNYXRoLmF0YW4yKGYsYyktTWF0aC5hdGFuMihsLGkpKSprLHk9KE1hdGguYXRhbjIoZixjKS1NYXRoLmF0YW4yKGwsLWkpKSprO3JldHVybiBwKHJbMF0sclsxXSxhLGcpPD1wKHJbMF0sclsxXSxtLHkpP1thLGcsclsyXV06W20seSxyWzJdXX1mdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPW0oci10KSxhPW0obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIG0odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj1yKlQsaT10LnNsaWNlKCksYT0wPT09ZT8xOjAsbz0yPT09ZT8xOjIscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qcy10W29dKmwsaVtvXT10W29dKnMrdFthXSpsLGl9ZnVuY3Rpb24gZyh0KXtyZXR1cm5bTWF0aC5hdGFuMigyKih0WzBdKnRbMV0rdFsyXSp0WzNdKSwxLTIqKHRbMV0qdFsxXSt0WzJdKnRbMl0pKSprLE1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLDIqKHRbMF0qdFsyXS10WzNdKnRbMV0pKSkpKmssTWF0aC5hdGFuMigyKih0WzBdKnRbM10rdFsxXSp0WzJdKSwxLTIqKHRbMl0qdFsyXSt0WzNdKnRbM10pKSprXX1mdW5jdGlvbiB5KHQpe3ZhciBlPXRbMF0qVCxyPXRbMV0qVCxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIrPXRbbl0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxuPVtdOysrZTxyOyluLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgaT13LmRpc3BhdGNoLmFwcGx5KG51bGwsbik7cmV0dXJuIGkub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGE7dHJ5e2E9bi5zb3VyY2VFdmVudD13LmV2ZW50LG4udGFyZ2V0PXQsdy5ldmVudD1uLGlbbi50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7dy5ldmVudD1hfX19LGl9dmFyIHc9dCgiZDMiKSxNPXQoIi4uLy4uL2xpYiIpLFQ9TWF0aC5QSS8xODAsaz0xODAvTWF0aC5QSSxBPXtjdXJzb3I6InBvaW50ZXIifSxFPXtjdXJzb3I6ImF1dG8ifTtlLmV4cG9ydHM9bn0seyIuLi8uLi9saWIiOjczNSxkMzoxMjF9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1mdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiByKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXVtyXSE9PS0xKXtpZihlW2ldW25dIT09LTEpcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9ZnVuY3Rpb24gaShuLGksYSl7ZnVuY3Rpb24gbyhlLHIsbil7dmFyIGk9TWF0aC5taW4ocixuKSxhPU1hdGgubWF4KHIsbik7aSE9PWE/KGhbZV09aSxoW2UrMl09YSxmLmRhdGFCb3g9aCx0LnNldFJhbmdlcyhoKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9dmFyIHMsYyxoPXQuY2FsY0RhdGFCb3goKSxkPXUudmlld0JveCxwPWYubGFzdFBvc1swXSxtPWYubGFzdFBvc1sxXSx2PWwuTUlORFJBRyp1LnBpeGVsUmF0aW8sZz1sLk1JTlpPT00qdS5waXhlbFJhdGlvO3N3aXRjaChpKj11LnBpeGVsUmF0aW8sYSo9dS5waXhlbFJhdGlvLGE9ZFszXS1kWzFdLWEsdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlInpvb20iOmlmKG4pe3ZhciB5PWkvKGRbMl0tZFswXSkqKGhbMl0taFswXSkraFswXSxiPWEvKGRbM10tZFsxXSkqKGhbM10taFsxXSkraFsxXTtmLmJveEluaXRlZHx8KGYuYm94U3RhcnRbMF09eSxmLmJveFN0YXJ0WzFdPWIsZi5kcmFnU3RhcnRbMF09aSxmLmRyYWdTdGFydFsxXT1hKSxmLmJveEVuZFswXT15LGYuYm94RW5kWzFdPWIsZi5ib3hJbml0ZWQ9ITAsZi5ib3hFbmFibGVkfHxmLmJveFN0YXJ0WzBdPT09Zi5ib3hFbmRbMF0mJmYuYm94U3RhcnRbMV09PT1mLmJveEVuZFsxXXx8KGYuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoZi5kcmFnU3RhcnRbMF0taSk8ZyxfPU1hdGguYWJzKGYuZHJhZ1N0YXJ0WzFdLWEpPGc7aWYoIXIoKXx8eCYmXyl4JiYoZi5ib3hFbmRbMF09Zi5ib3hTdGFydFswXSksXyYmKGYuYm94RW5kWzFdPWYuYm94U3RhcnRbMV0pO2Vsc2V7cz1mLmJveEVuZFswXS1mLmJveFN0YXJ0WzBdLGM9Zi5ib3hFbmRbMV0tZi5ib3hTdGFydFsxXTt2YXIgdz0oaFszXS1oWzFdKS8oaFsyXS1oWzBdKTtNYXRoLmFicyhzKncpPk1hdGguYWJzKGMpPyhmLmJveEVuZFsxXT1mLmJveFN0YXJ0WzFdK01hdGguYWJzKHMpKncqKGM+PTA/MTotMSksZi5ib3hFbmRbMV08aFsxXT8oZi5ib3hFbmRbMV09aFsxXSxmLmJveEVuZFswXT1mLmJveFN0YXJ0WzBdKyhoWzFdLWYuYm94U3RhcnRbMV0pL01hdGguYWJzKHcpKTpmLmJveEVuZFsxXT5oWzNdJiYoZi5ib3hFbmRbMV09aFszXSxmLmJveEVuZFswXT1mLmJveFN0YXJ0WzBdKyhoWzNdLWYuYm94U3RhcnRbMV0pL01hdGguYWJzKHcpKSk6KGYuYm94RW5kWzBdPWYuYm94U3RhcnRbMF0rTWF0aC5hYnMoYykvdyoocz49MD8xOi0xKSxmLmJveEVuZFswXTxoWzBdPyhmLmJveEVuZFswXT1oWzBdLGYuYm94RW5kWzFdPWYuYm94U3RhcnRbMV0rKGhbMF0tZi5ib3hTdGFydFswXSkqTWF0aC5hYnModykpOmYuYm94RW5kWzBdPmhbMl0mJihmLmJveEVuZFswXT1oWzJdLGYuYm94RW5kWzFdPWYuYm94U3RhcnRbMV0rKGhbMl0tZi5ib3hTdGFydFswXSkqTWF0aC5hYnModykpKX19ZWxzZSBmLmJveEVuYWJsZWQ/KHM9Zi5ib3hTdGFydFswXSE9PWYuYm94RW5kWzBdLGM9Zi5ib3hTdGFydFsxXSE9PWYuYm94RW5kWzFdLHN8fGM/KHMmJihvKDAsZi5ib3hTdGFydFswXSxmLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLGMmJihvKDEsZi5ib3hTdGFydFsxXSxmLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGYuYm94RW5hYmxlZD0hMSxmLmJveEluaXRlZD0hMSk6Zi5ib3hJbml0ZWQmJihmLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmYuYm94RW5hYmxlZD0hMSxmLmJveEluaXRlZD0hMSxuPyhmLnBhbm5pbmd8fChmLmRyYWdTdGFydFswXT1pLGYuZHJhZ1N0YXJ0WzFdPWEpLE1hdGguYWJzKGYuZHJhZ1N0YXJ0WzBdLWkpPHYmJihpPWYuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhmLmRyYWdTdGFydFsxXS1hKTx2JiYoYT1mLmRyYWdTdGFydFsxXSkscz0ocC1pKSooaFsyXS1oWzBdKS8odS52aWV3Qm94WzJdLXUudmlld0JveFswXSksYz0obS1hKSooaFszXS1oWzFdKS8odS52aWV3Qm94WzNdLXUudmlld0JveFsxXSksaFswXSs9cyxoWzJdKz1zLGhbMV0rPWMsaFszXSs9Yyx0LnNldFJhbmdlcyhoKSxmLnBhbm5pbmc9ITAsZi5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksZSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Zi5wYW5uaW5nJiYoZi5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1mLmxhc3RQb3NbMF09aSxmLmxhc3RQb3NbMV09YX12YXIgYz10Lm1vdXNlQ29udGFpbmVyLHU9dC5nbHBsb3QsZj1uZXcgbihjLHUpO3JldHVybiBmLm1vdXNlTGlzdGVuZXI9YShjLGkpLGMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24odCl7dmFyIGU9cyh0LmNoYW5nZWRUb3VjaGVzWzBdLGMpO2koMCxlWzBdLGVbMV0pLGkoMSxlWzBdLGVbMV0pfSksYy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgZT1zKHQuY2hhbmdlZFRvdWNoZXNbMF0sYyk7aSgxLGVbMF0sZVsxXSl9KSxjLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmdW5jdGlvbigpe2koMCxmLmxhc3RQb3NbMF0sZi5sYXN0UG9zWzFdKX0pLGYud2hlZWxMaXN0ZW5lcj1vKGMsZnVuY3Rpb24ocixuKXtpZighdC5zY3JvbGxab29tKXJldHVybiExO3ZhciBpPXQuY2FsY0RhdGFCb3goKSxhPXUudmlld0JveCxvPWYubGFzdFBvc1swXSxzPWYubGFzdFBvc1sxXSxsPU1hdGguZXhwKDUqbi8oYVszXS1hWzFdKSksYz1vLyhhWzJdLWFbMF0pKihpWzJdLWlbMF0pK2lbMF0saD1zLyhhWzNdLWFbMV0pKihpWzNdLWlbMV0pK2lbMV07cmV0dXJuIGlbMF09KGlbMF0tYykqbCtjLGlbMl09KGlbMl0tYykqbCtjLGlbMV09KGlbMV0taCkqbCtoLGlbM109KGlbM10taCkqbCtoLHQuc2V0UmFuZ2VzKGkpLGYubGFzdElucHV0VGltZT1EYXRlLm5vdygpLGUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCksITB9KSxmfXZhciBhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1pfSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc4NCwibW91c2UtY2hhbmdlIjo0NjAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDYxLCJtb3VzZS13aGVlbCI6NDYzfV0sODE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi4vcGxvdHMiKSxvPXQoIi4uL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYz1uLnByb3RvdHlwZSx1PVsieGF4aXMiLCJ5YXhpcyJdO2MubWVyZ2U9ZnVuY3Rpb24odCl7dGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1sKHQucGxvdF9iZ2NvbG9yKTt2YXIgZSxyLG4saSxhLG8sYyxmLGgsZCxwO2ZvcihkPTA7ZDwyOysrZCl7Zm9yKGU9dVtkXSxyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0sbj0vQ2xpY2sgdG8gZW50ZXIgLisgdGl0bGUvLnRlc3Qoci50aXRsZSk/IiI6ci50aXRsZSxwPTA7cDw9MjtwKz0yKXRoaXMubGFiZWxFbmFibGVbZCtwXT0hMSx0aGlzLmxhYmVsc1tkK3BdPXMobiksdGhpcy5sYWJlbENvbG9yW2QrcF09bChyLnRpdGxlZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZCtwXT1yLnRpdGxlZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbZCtwXT1yLnRpdGxlZm9udC5zaXplLHRoaXMubGFiZWxQYWRbZCtwXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW2QrcF09ITEsdGhpcy50aWNrQ29sb3JbZCtwXT1sKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW2QrcF09ImF1dG8iPT09ci50aWNrYW5nbGU/MDpNYXRoLlBJKi1yLnRpY2thbmdsZS8xODAsdGhpcy50aWNrUGFkW2QrcF09dGhpcy5nZXRUaWNrUGFkKHIpLHRoaXMudGlja01hcmtMZW5ndGhbZCtwXT0wLHRoaXMudGlja01hcmtXaWR0aFtkK3BdPXIudGlja3dpZHRofHwwLHRoaXMudGlja01hcmtDb2xvcltkK3BdPWwoci50aWNrY29sb3IpLHRoaXMuYm9yZGVyTGluZUVuYWJsZVtkK3BdPSExLHRoaXMuYm9yZGVyTGluZUNvbG9yW2QrcF09bChyLmxpbmVjb2xvciksdGhpcy5ib3JkZXJMaW5lV2lkdGhbZCtwXT1yLmxpbmV3aWR0aHx8MDtjPXRoaXMuaGFzU2hhcmVkQXhpcyhyKSxhPXRoaXMuaGFzQXhpc0luRGZsdFBvcyhlLHIpJiYhYyxvPXRoaXMuaGFzQXhpc0luQWx0clBvcyhlLHIpJiYhYyxpPXIubWlycm9yfHwhMSxmPWM/U3RyaW5nKGkpLmluZGV4T2YoImFsbCIpIT09LTE6ISFpLGg9Yz8iYWxsdGlja3MiPT09aTpTdHJpbmcoaSkuaW5kZXhPZigidGlja3MiKSE9PS0xLGE/dGhpcy5sYWJlbEVuYWJsZVtkXT0hMDpvJiYodGhpcy5sYWJlbEVuYWJsZVtkKzJdPSEwKSxhP3RoaXMudGlja0VuYWJsZVtkXT1yLnNob3d0aWNrbGFiZWxzOm8mJih0aGlzLnRpY2tFbmFibGVbZCsyXT1yLnNob3d0aWNrbGFiZWxzKSwoYXx8ZikmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZF09ci5zaG93bGluZSksKG98fGYpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2QrMl09ci5zaG93bGluZSksKGF8fGgpJiYodGhpcy50aWNrTWFya0xlbmd0aFtkXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSwob3x8aCkmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2QrMl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksdGhpcy5ncmlkTGluZUVuYWJsZVtkXT1yLnNob3dncmlkLHRoaXMuZ3JpZExpbmVDb2xvcltkXT1sKHIuZ3JpZGNvbG9yKSx0aGlzLmdyaWRMaW5lV2lkdGhbZF09ci5ncmlkd2lkdGgsdGhpcy56ZXJvTGluZUVuYWJsZVtkXT1yLnplcm9saW5lLHRoaXMuemVyb0xpbmVDb2xvcltkXT1sKHIuemVyb2xpbmVjb2xvciksdGhpcy56ZXJvTGluZVdpZHRoW2RdPXIuemVyb2xpbmV3aWR0aH19LGMuaGFzU2hhcmVkQXhpcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9YS5nZXRTdWJwbG90SWRzKGUuZnVsbExheW91dCwiZ2wyZCIpO3JldHVybiAwIT09by5maW5kU3VicGxvdHNXaXRoQXhpcyhyLHQpLmluZGV4T2YoZS5pZCl9LGMuaGFzQXhpc0luRGZsdFBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8iYm90dG9tIj09PXI6InlheGlzIj09PXQ/ImxlZnQiPT09cjp2b2lkIDB9LGMuaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PXI6InlheGlzIj09PXQ/InJpZ2h0Ij09PXI6dm9pZCAwfSxjLmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZWZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxjLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LGMuZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo3MzMsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc1NiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vcGxvdHMiOjgzOH1dLDgxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL3Bsb3RzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIik7ci5uYW1lPSJnbDJkIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD1zLmlkUmVnZXgsci5hdHRyUmVnZXg9cy5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLCJwbG90IiwiZnJvbS1yb290Iiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtwbG90X2JnY29sb3I6YS5sYXlvdXRBdHRyaWJ1dGVzLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWEuZ2V0U3VicGxvdElkcyhlLCJnbDJkIiksbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dLGw9ZS5fcGxvdHNbc10sYz1hLmdldFN1YnBsb3REYXRhKHIsImdsMmQiLHMpLHU9bC5fc2NlbmUyZDt2b2lkIDA9PT11JiYodT1uZXcgaSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSksbC5fc2NlbmUyZD11KSx1LnBsb3QoYyx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9YS5nZXRTdWJwbG90SWRzKG4sImdsMmQiKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uLl9wbG90c1tzXTtpZihjLl9zY2VuZTJkKXswPT09YS5nZXRTdWJwbG90RGF0YSh0LCJnbDJkIixzKS5sZW5ndGgmJihjLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbc10pfX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9YS5nZXRTdWJwbG90SWRzKGUsImdsMmQiKSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLHM9aS5fc2NlbmUyZCxsPXMudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6bCx4OjAseTowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkscy5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1hLmdldFN1YnBsb3RJZHModCwiZ2wyZCIpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dC5fcGxvdHNbZVtyXV0uX3NjZW5lMmQudXBkYXRlRngodC5kcmFnbW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2NTMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MTYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vY2FydGVzaWFuIjo3ODksIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo3NzgsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc4NCwiLi4vcGxvdHMiOjgzOCwiLi9zY2VuZTJkIjo4MTZ9XSw4MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuc2Nyb2xsWm9vbT10aGlzLmdyYXBoRGl2Ll9jb250ZXh0LnNjcm9sbFpvb20sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLmdscGxvdE9wdGlvbnM9cCh0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9dSh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPW0odGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Zih0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9aCh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9dmFyIGEsbyxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHU9dCgiZ2wtcGxvdDJkIiksZj10KCJnbC1zcGlrZXMyZCIpLGg9dCgiZ2wtc2VsZWN0LWJveCIpLGQ9dCgid2ViZ2wtY29udGV4dCIpLHA9dCgiLi9jb252ZXJ0IiksbT10KCIuL2NhbWVyYSIpLHY9dCgiLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLGc9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIikseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxiPXkuZW5mb3JjZSx4PXkuY2xlYW4sXz1bInhheGlzIiwieWF4aXMiXTtlLmV4cG9ydHM9bjt2YXIgdz1uLnByb3RvdHlwZTt3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEob3x8KGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz1kKHtjYW52YXM6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPWEsdGhpcy5nbD1vfWVsc2V7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZT1kKHtjYW52YXM6dCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtlfHxnKHRoaXMpLHRoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9InVzZXItc2VsZWN0LW5vbmUiO3ZhciBuPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtuLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbi5zdHlsZS50b3A9bi5zdHlsZS5sZWZ0PSIwcHgiLG4uc3R5bGUud2lkdGg9bi5zdHlsZS5oZWlnaHQ9IjEwMCUiLG4uc3R5bGVbInotaW5kZXgiXT0yMCxuLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgaT10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIjt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKHIpLHMuYXBwZW5kQ2hpbGQobikscy5hcHBlbmRDaGlsZChpKTt2YXIgbD10aGlzO2kuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpLHRoaXMuZ2xwbG90LnNldERpcnR5KCksdGhpcy5nbHBsb3QuZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsbj1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgaT1uZXcgVWludDhBcnJheShyKm4qNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLG4sZS5SR0JBLGUuVU5TSUdORURfQllURSxpKTtmb3IodmFyIG89MCxzPW4tMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWlbNCoocipvK2wpK2NdO2lbNCoocipvK2wpK2NdPWlbNCoocipzK2wpK2NdLGlbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PW47dmFyIGg9Zi5nZXRDb250ZXh0KCIyZCIpLGQ9aC5jcmVhdGVJbWFnZURhdGEocixuKTtkLmRhdGEuc2V0KGkpLGgucHV0SW1hZ2VEYXRhKGQsMCwwKTt2YXIgcDtzd2l0Y2godCl7Y2FzZSJqcGVnIjpwPWYudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpwPWYudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpwPWYudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChhKSxwfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsaT1yLmhlaWdodCxhPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmkpO3JldHVybiB0LndpZHRoPT09YSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1hLHQuaGVpZ2h0PW8pLHRoaXMucmVkcmF3JiZ0aGlzLnJlZHJhdygpLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtsLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxsLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXYodFtlXVtyXS50ZXh0KyIiKTtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPWwuc3VicGxvdE1hdGNoLHI9InhheGlzIit0aGlzLmlkLm1hdGNoKGUpWzFdLG49InlheGlzIit0aGlzLmlkLm1hdGNoKGUpWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSx3LnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dDtuLnhheGlzLmF1dG9yYW5nZT1lLmF1dG9yYW5nZSxuLnhheGlzLnJhbmdlPWUucmFuZ2Uuc2xpY2UoMCksbi55YXhpcy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2Usbi55YXhpcy5yYW5nZT1yLnJhbmdlLnNsaWNlKDApO3ZhciBpPXtsYXN0SW5wdXRUaW1lOnRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWV9O2lbZS5fbmFtZV09ZS5yYW5nZS5zbGljZSgwKSxpW3IuX25hbWVdPXIucmFuZ2Uuc2xpY2UoMCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSx3LmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7aShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sdy5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJnMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSwKdGhpcy5zdGF0aWNQbG90fHx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMudXBkYXRlVHJhY2VzKHQsZSksdGhpcy51cGRhdGVGeChyLmRyYWdtb2RlKTt2YXIgaT1yLndpZHRoLGE9ci5oZWlnaHQ7dGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgbz10aGlzLmdscGxvdE9wdGlvbnM7by5tZXJnZShyKSxvLnNjcmVlbkJveD1bMCwwLGksYV07dmFyIHM9e19mdWxsTGF5b3V0OntfYXhpc0NvbnN0cmFpbnRHcm91cHM6dGhpcy5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfX07eChzLHRoaXMueGF4aXMpLHgocyx0aGlzLnlheGlzKTt2YXIgYz1yLl9zaXplLHU9dGhpcy54YXhpcy5kb21haW4sZj10aGlzLnlheGlzLmRvbWFpbjtvLnZpZXdCb3g9W2MubCt1WzBdKmMudyxjLmIrZlswXSpjLmgsaS1jLnItKDEtdVsxXSkqYy53LGEtYy50LSgxLWZbMV0pKmMuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD1jLncqKHVbMV0tdVswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD1jLmgqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD1jLmgqKGZbMV0tZlswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PWMubCt1WzBdKmMudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPWMudCsoMS1mWzFdKSpjLmgrInB4Ijt2YXIgaD10aGlzLmJvdW5kcztoWzBdPWhbMV09MS8wLGhbMl09aFszXT0tKDEvMCk7dmFyIGQscCxtPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTtmb3IocD0wO3A8bS5sZW5ndGg7KytwKWZvcih2YXIgdj10aGlzLnRyYWNlc1ttW3BdXSxnPTA7ZzwyOysrZyloW2ddPU1hdGgubWluKGhbZ10sdi5ib3VuZHNbZ10pLGhbZysyXT1NYXRoLm1heChoW2crMl0sdi5ib3VuZHNbZysyXSk7Zm9yKHA9MDtwPDI7KytwKWhbcF0+aFtwKzJdJiYoaFtwXT0tMSxoW3ArMl09MSksZD10aGlzW19bcF1dLGQuX2xlbmd0aD1vLnZpZXdCb3hbcCsyXS1vLnZpZXdCb3hbcF0sbC5kb0F1dG9SYW5nZShkKSxkLnNldFNjYWxlKCk7YihzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LHcuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LHcuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LHcudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGk9dFtuXSxpLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KX0sdy51cGRhdGVGeD1mdW5jdGlvbih0KXt0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJsYXNzbyI9PT10fHwic2VsZWN0Ij09PXQ/Im5vbmUiOiJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj0icGFuIj09PXQ/Im1vdmUiOiJ6b29tIj09PXQ/ImNyb3NzaGFpciI6bnVsbH0sdy5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O2MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSx3LmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxzPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmInpvb20iPT09aS5kcmFnbW9kZSl7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMDtmb3IodmFyIGw9dGhpcy5zZWxlY3RCb3guc2VsZWN0Qm94PVtNYXRoLm1pbihlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1pbihlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKSxNYXRoLm1heChlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1heChlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKV0sdT0wO3U8Mjt1KyspZS5ib3hTdGFydFt1XT09PWUuYm94RW5kW3VdJiYobFt1XT10LmRhdGFCb3hbdV0sbFt1KzJdPXQuZGF0YUJveFt1KzJdKTt0LnNldERpcnR5KCl9ZWxzZSBpZighZS5wYW5uaW5nJiZ0aGlzLmlzTW91c2VPdmVyKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSExO3ZhciBmPWkuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixkPXRoaXMueWF4aXMuZG9tYWluO2E9dC5waWNrKG8vdC5waXhlbFJhdGlvK2YubCtoWzBdKmYudyxzL3QucGl4ZWxSYXRpby0oZi50KygxLWRbMV0pKmYuaCkpO3ZhciBwPWEmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKHAmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKHAsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZwJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1wLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1wLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1wLmRhdGFDb29yZFsxXSkpe3ZhciBtPXA7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6cC50cmFjZT9wLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpwLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLG0uc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24ocCwicGxvdGx5X2hvdmVyIik7dmFyIHY9dGhpcy5mdWxsRGF0YVttLnRyYWNlLmluZGV4XXx8e30sZz1tLnBvaW50SW5kZXgseT1jLmNhc3RIb3ZlcmluZm8odixpLGcpO2lmKHkmJiJhbGwiIT09eSl7dmFyIGI9eS5zcGxpdCgiKyIpO2IuaW5kZXhPZigieCIpPT09LTEmJihtLnRyYWNlQ29vcmRbMF09dm9pZCAwKSxiLmluZGV4T2YoInkiKT09PS0xJiYobS50cmFjZUNvb3JkWzFdPXZvaWQgMCksYi5pbmRleE9mKCJ6Iik9PT0tMSYmKG0udHJhY2VDb29yZFsyXT12b2lkIDApLGIuaW5kZXhPZigidGV4dCIpPT09LTEmJihtLnRleHRMYWJlbD12b2lkIDApLGIuaW5kZXhPZigibmFtZSIpPT09LTEmJihtLm5hbWU9dm9pZCAwKX1jLmxvbmVIb3Zlcih7eDptLnNjcmVlbkNvb3JkWzBdLHk6bS5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLG0udHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixtLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDptLnRyYWNlQ29vcmRbMl0sdGV4dDptLnRleHRMYWJlbCxuYW1lOm0ubmFtZSxjb2xvcjpjLmNhc3RIb3Zlck9wdGlvbih2LGcsImJnY29sb3IiKXx8bS5jb2xvcixib3JkZXJDb2xvcjpjLmNhc3RIb3Zlck9wdGlvbih2LGcsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpjLmNhc3RIb3Zlck9wdGlvbih2LGcsImZvbnQuZmFtaWx5IiksZm9udFNpemU6Yy5jYXN0SG92ZXJPcHRpb24odixnLCJmb250LnNpemUiKSxmb250Q29sb3I6Yy5jYXN0SG92ZXJPcHRpb24odixnLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LHcudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIiksYy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSx3LmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gbC50aWNrVGV4dChyLHIuYzJsKGUpLCJob3ZlciIpLnRleHR9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2xpYi9odG1sMnVuaWNvZGUiOjczMywiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6Nzg2LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2NhbWVyYSI6ODEzLCIuL2NvbnZlcnQiOjgxNCwiZ2wtcGxvdDJkIjoyMjQsImdsLXNlbGVjdC1ib3giOjI1OSwiZ2wtc3Bpa2VzMmQiOjI2OCwid2ViZ2wtY29udGV4dCI6NTcwfV0sODE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKGUscixuLGEpe3ZhciBvPXAua2V5QmluZGluZ01vZGU7aWYobyE9PSExKXt2YXIgcz0icm90YXRlIj09PW8sbD0icGFuIj09PW8sdT0iem9vbSI9PT1vLGg9ISFhLmNvbnRyb2wsZD0hIWEuYWx0LHk9ISFhLnNoaWZ0LGI9ISEoMSZlKSx4PSEhKDImZSksXz0hISg0JmUpLHc9MS90LmNsaWVudEhlaWdodCxNPXcqKHItbSksVD13KihuLXYpLGs9cC5mbGlwWD8xOi0xLEE9cC5mbGlwWT8xOi0xLEU9aSgpLFM9TWF0aC5QSSpwLnJvdGF0ZVNwZWVkO2lmKChzJiZiJiYhaCYmIWQmJiF5fHxiJiYhaCYmIWQmJnkpJiZjLnJvdGF0ZShFLGsqUypNLC1BKlMqVCwwKSwobCYmYiYmIWgmJiFkJiYheXx8eHx8YiYmaCYmIWQmJiF5KSYmYy5wYW4oRSwtcC50cmFuc2xhdGVTcGVlZCpNKmYscC50cmFuc2xhdGVTcGVlZCpUKmYsMCksdSYmYiYmIWgmJiFkJiYheXx8X3x8YiYmIWgmJmQmJiF5KXt2YXIgTD0tcC56b29tU3BlZWQqVC93aW5kb3cuaW5uZXJIZWlnaHQqKEUtYy5sYXN0VCgpKSoxMDA7Yy5wYW4oRSwwLDAsZiooTWF0aC5leHAoTCktMSkpfXJldHVybiBtPXIsdj1uLGc9YSwhMH19dD10fHxkb2N1bWVudC5ib2R5LGU9ZXx8e307dmFyIG49Wy4wMSwxLzBdOyJkaXN0YW5jZUxpbWl0cyJpbiBlJiYoblswXT1lLmRpc3RhbmNlTGltaXRzWzBdLG5bMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSksInpvb21NaW4iaW4gZSYmKG5bMF09ZS56b29tTWluKSwiem9vbU1heCJpbiBlJiYoblsxXT1lLnpvb21NYXgpO3ZhciBjPWEoe2NlbnRlcjplLmNlbnRlcnx8WzAsMCwwXSx1cDplLnVwfHxbMCwxLDBdLGV5ZTplLmV5ZXx8WzAsMCwxMF0sbW9kZTplLm1vZGV8fCJvcmJpdCIsZGlzdGFuY2VMaW1pdHM6bn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGY9MCxoPXQuY2xpZW50V2lkdGgsZD10LmNsaWVudEhlaWdodCxwPXtrZXlCaW5kaW5nTW9kZToicm90YXRlIix2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLHRpY2s6ZnVuY3Rpb24oKXt2YXIgZT1pKCkscj10aGlzLmRlbGF5LG49ZS0yKnI7Yy5pZGxlKGUtciksYy5yZWNhbGNNYXRyaXgobiksYy5mbHVzaChlLSgxMDArMipyKSk7Zm9yKHZhciBhPSEwLG89Yy5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZ1W3NdPT09b1tzXSx1W3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWgmJnQuY2xpZW50SGVpZ2h0PT09ZDtyZXR1cm4gaD10LmNsaWVudFdpZHRoLGQ9dC5jbGllbnRIZWlnaHQsYT8hbDooZj1NYXRoLmV4cChjLmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7Yy5sb29rQXQoYy5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnJvdGF0ZShjLmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe2MucGFuKGMubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7Yy50cmFuc2xhdGUoYy5sYXN0VCgpLHQsZSxyKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLG49Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPWkoKTtjLl9hY3RpdmUubG9va0F0KGEscixuLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixuLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMobil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCksITF9KTt2YXIgbT0wLHY9MCxnPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfTtyZXR1cm4gcC5tb3VzZUxpc3RlbmVyPW8odCxyKSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKGUpe3ZhciBuPWwoZS5jaGFuZ2VkVG91Y2hlc1swXSx0KTtyKDAsblswXSxuWzFdLGcpLHIoMSxuWzBdLG5bMV0sZyl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dmFyIG49bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMSxuWzBdLG5bMV0sZyl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmdW5jdGlvbigpe3IoMCxtLHYsZyl9KSxwLndoZWVsTGlzdGVuZXI9cyh0LGZ1bmN0aW9uKHQsZSl7aWYocC5rZXlCaW5kaW5nTW9kZSE9PSExKXt2YXIgcj1wLmZsaXBYPzE6LTEsbj1wLmZsaXBZPzE6LTEsYT1pKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKnAucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2V7dmFyIG89LXAuem9vbVNwZWVkKm4qZS93aW5kb3cuaW5uZXJIZWlnaHQqKGEtYy5sYXN0VCgpKS8yMDtjLnBhbihhLDAsMCxmKihNYXRoLmV4cChvKS0xKSl9fX0sITApLHB9ZS5leHBvcnRzPW47dmFyIGk9dCgicmlnaHQtbm93IiksYT10KCIzZC12aWV3Iiksbz10KCJtb3VzZS1jaGFuZ2UiKSxzPXQoIm1vdXNlLXdoZWVsIiksbD10KCJtb3VzZS1ldmVudC1vZmZzZXQiKX0seyIzZC12aWV3IjozOCwibW91c2UtY2hhbmdlIjo0NjAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDYxLCJtb3VzZS13aGVlbCI6NDYzLCJyaWdodC1ub3ciOjUxMX1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuL3NjZW5lIiksbz10KCIuLi9wbG90cyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoInNjZW5lIiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPW8uZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbD1uW2ldLGM9by5nZXRTdWJwbG90RGF0YShyLCJnbDNkIixsKSx1PWVbbF0sZj11Ll9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSksdS5fc2NlbmU9ZiksZi5jYW1lcmFJbml0aWFsfHwoZi5jYW1lcmFJbml0aWFsPXMuZXh0ZW5kRGVlcCh7fSx1LmNhbWVyYSkpLGYucGxvdChjLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9by5nZXRTdWJwbG90SWRzKG4sImdsM2QiKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07IWVbc10mJm5bc10uX3NjZW5lJiYobltzXS5fc2NlbmUuZGVzdHJveSgpLG4uX2luZm9sYXllciYmbi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIitzKS5yZW1vdmUoKSl9fSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9by5nZXRTdWJwbG90SWRzKGUsImdsM2QiKSxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLHM9YS5kb21haW4sYz1hLl9zY2VuZSx1PWMudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpsLnN2ZywieGxpbms6aHJlZiI6dSx4Om4ubCtuLncqcy54WzBdLHk6bi50K24uaCooMS1zLnlbMV0pLHdpZHRoOm4udyoocy54WzFdLXMueFswXSksaGVpZ2h0Om4uaCoocy55WzFdLXMueVswXSkscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxjLmRlc3Ryb3koKX19LHIuY2xlYW5JZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKC9ec2NlbmVbMC05XSokLykpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSwic2NlbmUiK2V9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vLmdldFN1YnBsb3RJZHModCwiZ2wzZCIpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dFtlW3JdXS5fc2NlbmUudXBkYXRlRngodC5kcmFnbW9kZSx0LmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2NTMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MTYsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4uL3Bsb3RzIjo4MzgsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgxOSwiLi9sYXlvdXQvZGVmYXVsdHMiOjgyMywiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyNCwiLi9zY2VuZSI6ODI4fV0sODE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdGl0bGVmb250OmkudGl0bGVmb250LHR5cGU6aS50eXBlLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6aS5yYW5nZSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxzaG93bGluZTppLnNob3dsaW5lLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6aS5zaG93Z3JpZCxncmlkY29sb3I6YSh7fSxpLmdyaWRjb2xvcix7ZGZsdDoicmdiKDIwNCwgMjA0LCAyMDQpIn0pLGdyaWR3aWR0aDppLmdyaWR3aWR0aCx6ZXJvbGluZTppLnplcm9saW5lLHplcm9saW5lY29sb3I6aS56ZXJvbGluZWNvbG9yLHplcm9saW5ld2lkdGg6aS56ZXJvbGluZXdpZHRofSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwfV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxsPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixhLHQsZSl9Zm9yKHZhciB1LGYsaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZD1sW2hdO3U9dFtkXXx8e30sZj1lW2RdPXtfaWQ6ZFswXStyLnNjZW5lLF9uYW1lOmR9LG8odSxmLGMsci5kYXRhKSxzKHUsZixjLHtmb250OnIuZm9udCxsZXR0ZXI6ZFswXSxkYXRhOnIuZGF0YSxzaG93R3JpZDohMCxiZ0NvbG9yOnIuYmdDb2xvcixjYWxlbmRhcjpyLmNhbGVuZGFyfSksYygiZ3JpZGNvbG9yIixuKGYuY29sb3Isci5iZ0NvbG9yLDEzNjAwLzE4NykudG9SZ2JTdHJpbmcoKSksYygidGl0bGUiLGRbMF0pLGYuc2V0U2NhbGU9aS5ub29wLGMoInNob3dzcGlrZXMiKSYmKGMoInNwaWtlc2lkZXMiKSxjKCJzcGlrZXRoaWNrbmVzcyIpLGMoInNwaWtlY29sb3IiLGYuY29sb3IpKSxjKCJzaG93YXhlc2xhYmVscyIpLGMoInNob3diYWNrZ3JvdW5kIikmJmMoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo3MzUsIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3ODEsIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzIjo4MDEsIi4vYXhpc19hdHRyaWJ1dGVzIjo4MjAsdGlueWNvbG9yMjo1NDJ9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bIk9wZW4gU2FucyIsIk9wZW4gU2FucyIsIk9wZW4gU2FucyJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1uZXcgbjtyZXR1cm4gZS5tZXJnZSh0KSxlfXZhciBhPXQoIi4uLy4uLy4uL2xpYi9odG1sMnVuaWNvZGUiKSxvPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxzPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07bi5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0wO3I8MzsrK3Ipe3ZhciBuPXRbc1tyXV07bi52aXNpYmxlPyhlLmxhYmVsc1tyXT1hKG4udGl0bGUpLCJ0aXRsZWZvbnQiaW4gbiYmKG4udGl0bGVmb250LmNvbG9yJiYoZS5sYWJlbENvbG9yW3JdPW8obi50aXRsZWZvbnQuY29sb3IpKSxuLnRpdGxlZm9udC5mYW1pbHkmJihlLmxhYmVsRm9udFtyXT1uLnRpdGxlZm9udC5mYW1pbHkpLG4udGl0bGVmb250LnNpemUmJihlLmxhYmVsU2l6ZVtyXT1uLnRpdGxlZm9udC5zaXplKSksInNob3dsaW5lImluIG4mJihlLmxpbmVFbmFibGVbcl09bi5zaG93bGluZSksImxpbmVjb2xvciJpbiBuJiYoZS5saW5lQ29sb3Jbcl09byhuLmxpbmVjb2xvcikpLCJsaW5ld2lkdGgiaW4gbiYmKGUubGluZVdpZHRoW3JdPW4ubGluZXdpZHRoKSwic2hvd2dyaWQiaW4gbiYmKGUuZ3JpZEVuYWJsZVtyXT1uLnNob3dncmlkKSwiZ3JpZGNvbG9yImluIG4mJihlLmdyaWRDb2xvcltyXT1vKG4uZ3JpZGNvbG9yKSksImdyaWR3aWR0aCJpbiBuJiYoZS5ncmlkV2lkdGhbcl09bi5ncmlkd2lkdGgpLCJsb2ciPT09bi50eXBlP2UuemVyb0VuYWJsZVtyXT0hMToiemVyb2xpbmUiaW4gbiYmKGUuemVyb0VuYWJsZVtyXT1uLnplcm9saW5lKSwiemVyb2xpbmVjb2xvciJpbiBuJiYoZS56ZXJvTGluZUNvbG9yW3JdPW8obi56ZXJvbGluZWNvbG9yKSksInplcm9saW5ld2lkdGgiaW4gbiYmKGUuemVyb0xpbmVXaWR0aFtyXT1uLnplcm9saW5ld2lkdGgpLCJ0aWNrcyJpbiBuJiZuLnRpY2tzP2UubGluZVRpY2tFbmFibGVbcl09ITA6ZS5saW5lVGlja0VuYWJsZVtyXT0hMSwidGlja2xlbiJpbiBuJiYoZS5saW5lVGlja0xlbmd0aFtyXT1lLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbcl09bi50aWNrbGVuKSwidGlja2NvbG9yImluIG4mJihlLmxpbmVUaWNrQ29sb3Jbcl09byhuLnRpY2tjb2xvcikpLCJ0aWNrd2lkdGgiaW4gbiYmKGUubGluZVRpY2tXaWR0aFtyXT1uLnRpY2t3aWR0aCksInRpY2thbmdsZSJpbiBuJiYoZS50aWNrQW5nbGVbcl09ImF1dG8iPT09bi50aWNrYW5nbGU/MDpNYXRoLlBJKi1uLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBuJiYoZS50aWNrRW5hYmxlW3JdPW4uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBuJiYobi50aWNrZm9udC5jb2xvciYmKGUudGlja0NvbG9yW3JdPW8obi50aWNrZm9udC5jb2xvcikpLG4udGlja2ZvbnQuZmFtaWx5JiYoZS50aWNrRm9udFtyXT1uLnRpY2tmb250LmZhbWlseSksbi50aWNrZm9udC5zaXplJiYoZS50aWNrU2l6ZVtyXT1uLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG4/WyJ0aWNrcyIsImFsbCIsImFsbHRpY2tzIl0uaW5kZXhPZihuLm1pcnJvcikhPT0tMT8oZS5saW5lVGlja01pcnJvcltyXT0hMCxlLmxpbmVNaXJyb3Jbcl09ITApOm4ubWlycm9yPT09ITA/KGUubGluZVRpY2tNaXJyb3Jbcl09ITEsZS5saW5lTWlycm9yW3JdPSEwKTooZS5saW5lVGlja01pcnJvcltyXT0hMSxlLmxpbmVNaXJyb3Jbcl09ITEpOmUubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbiYmbi5zaG93YmFja2dyb3VuZCE9PSExPyhlLmJhY2tncm91bmRFbmFibGVbcl09ITAsZS5iYWNrZ3JvdW5kQ29sb3Jbcl09byhuLmJhY2tncm91bmRjb2xvcikpOmUuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KGUudGlja0VuYWJsZVtyXT0hMSxlLmxhYmVsRW5hYmxlW3JdPSExLGUubGluZUVuYWJsZVtyXT0hMSxlLmxpbmVUaWNrRW5hYmxlW3JdPSExLGUuZ3JpZEVuYWJsZVtyXT0hMSxlLnplcm9FbmFibGVbcl09ITEsZS5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1pfSx7Ii4uLy4uLy4uL2xpYi9odG1sMnVuaWNvZGUiOjczMywiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2fV0sODIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7Zm9yKHZhciBpPXIoImJnY29sb3IiKSxzPWEuY29tYmluZShpLG4ucGFwZXJfYmdjb2xvciksYz1bInVwIiwiY2VudGVyIiwiZXllIl0sdT0wO3U8Yy5sZW5ndGg7dSsrKXIoImNhbWVyYS4iK2NbdV0rIi54IikscigiY2FtZXJhLiIrY1t1XSsiLnkiKSxyKCJjYW1lcmEuIitjW3VdKyIueiIpO3ZhciBmPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IiksaD1mPyJtYW51YWwiOiJhdXRvIixkPXIoImFzcGVjdG1vZGUiLGgpO2Z8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSwibWFudWFsIj09PWQmJihlLmFzcGVjdG1vZGU9ImF1dG8iKSx0LmFzcGVjdG1vZGU9ZS5hc3BlY3Rtb2RlKSxsKHQsZSx7Zm9udDpuLmZvbnQsc2NlbmU6bi5pZCxkYXRhOm4uZnVsbERhdGEsYmdDb2xvcjpzLGNhbGVuZGFyOm4uY2FsZW5kYXJ9KSxvLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImhhbmRsZURlZmF1bHRzIikodCxlLG4pLHIoImRyYWdtb2RlIixuLmdldERmbHRGcm9tTGF5b3V0KCJkcmFnbW9kZSIpKSxyKCJob3Zlcm1vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImhvdmVybW9kZSIpKX12YXIgaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIiksbD10KCIuL2F4aXNfZGVmYXVsdHMiKSxjPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEoZSl7aWYoIW8pe3JldHVybiBpLnZhbGlkYXRlKHRbZV0sY1tlXSk/dFtlXTp2b2lkIDB9fXZhciBvPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtzKHQsZSxyLHt0eXBlOiJnbDNkIixhdHRyaWJ1dGVzOmMsaGFuZGxlRGVmYXVsdHM6bixmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDphLHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGNhbGVuZGFyOmUuY2FsZW5kYXJ9KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi8uLi9saWIiOjczNSwiLi4vLi4vLi4vcmVnaXN0cnkiOjg1MywiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODQ1LCIuL2F4aXNfZGVmYXVsdHMiOjgyMSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODI0fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19dmFyIGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2UuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oInNjZW5lIiwiLmFubm90YXRpb25zIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToicGxvdCJ9LGNhbWVyYTp7dXA6YShuKDAsMCwxKSx7fSksY2VudGVyOmEobigwLDAsMCkse30pLGV5ZTphKG4oMS4yNSwxLjI1LDEuMjUpLHt9KSxlZGl0VHlwZToiY2FtZXJhIn0sZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJwbG90In0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sYXNwZWN0bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImN1YmUiLCJkYXRhIiwibWFudWFsIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7ImFzcGVjdHJhdGlvLngiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueSI6dm9pZCAwLCJhc3BlY3RyYXRpby56Ijp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7YXNwZWN0bW9kZToibWFudWFsIn19LHhheGlzOmkseWF4aXM6aSx6YXhpczppLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxkZmx0OiJ0dXJudGFibGUiLGVkaXRUeXBlOiJwbG90In0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9zZXN0IiwhMV0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSxlZGl0VHlwZToicGxvdCIsX2RlcHJlY2F0ZWQ6e2NhbWVyYXBvc2l0aW9uOnt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToiY2FtZXJhIn19fX0seyIuLi8uLi8uLi9saWIiOjczNSwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuL2F4aXNfYXR0cmlidXRlcyI6ODIwfV0sODI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXX1mdW5jdGlvbiBpKHQpe3ZhciBlPW5ldyBuO3JldHVybiBlLm1lcmdlKHQpLGV9dmFyIGE9dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtuLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDM7KytlKXt2YXIgcj10W29bZV1dO3IudmlzaWJsZT8odGhpcy5lbmFibGVkW2VdPXIuc2hvd3NwaWtlcyx0aGlzLmNvbG9yc1tlXT1hKHIuc3Bpa2Vjb2xvciksdGhpcy5kcmF3U2lkZXNbZV09ci5zcGlrZXNpZGVzLHRoaXMubGluZVdpZHRoW2VdPXIuc3Bpa2V0aGlja25lc3MpOih0aGlzLmVuYWJsZWRbZV09ITEsdGhpcy5kcmF3U2lkZXNbZV09ITEpfX0sZS5leHBvcnRzPWl9LHsiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2fV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPW5ldyBBcnJheSgzKSxyPTA7cjwzOysrcil7Zm9yKHZhciBuPXRbcl0saT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MDthPG4ubGVuZ3RoOysrYSlpW2FdPW5bYV0ueDtlW3JdPWl9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9dC5heGVzT3B0aW9ucyxyPXQuZ2xwbG90LmF4ZXNQaXhlbHMsaT10LmZ1bGxTY2VuZUxheW91dCx1PVtbXSxbXSxbXV0sZj0wO2Y8MzsrK2Ype3ZhciBoPWlbbFtmXV07aWYoaC5fbGVuZ3RoPShyW2ZdLmhpLXJbZl0ubG8pKnJbZl0ucGl4ZWxzUGVyRGF0YVVuaXQvdC5kYXRhU2NhbGVbZl0sTWF0aC5hYnMoaC5fbGVuZ3RoKT09PTEvMCl1W2ZdPVtdO2Vsc2V7aC5yYW5nZVswXT1yW2ZdLmxvL3QuZGF0YVNjYWxlW2ZdLGgucmFuZ2VbMV09cltmXS5oaS90LmRhdGFTY2FsZVtmXSxoLl9tPTEvKHQuZGF0YVNjYWxlW2ZdKnJbZl0ucGl4ZWxzUGVyRGF0YVVuaXQpLGgucmFuZ2VbMF09PT1oLnJhbmdlWzFdJiYoaC5yYW5nZVswXS09MSxoLnJhbmdlWzFdKz0xKTt2YXIgZD1oLnRpY2ttb2RlO2lmKCJhdXRvIj09PWgudGlja21vZGUpe2gudGlja21vZGU9ImxpbmVhciI7dmFyIHA9aC5udGlja3N8fG8uY29uc3RyYWluKGguX2xlbmd0aC80MCw0LDkpO2EuYXV0b1RpY2tzKGgsTWF0aC5hYnMoaC5yYW5nZVsxXS1oLnJhbmdlWzBdKS9wKX1mb3IodmFyIG09YS5jYWxjVGlja3MoaCksdj0wO3Y8bS5sZW5ndGg7Kyt2KW1bdl0ueD1tW3ZdLngqdC5kYXRhU2NhbGVbZl0sbVt2XS50ZXh0PXMobVt2XS50ZXh0KTt1W2ZdPW0saC50aWNrbW9kZT1kfX1lLnRpY2tzPXU7Zm9yKHZhciBmPTA7ZjwzOysrZil7Y1tmXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2ZdK3QuZ2xwbG90LmJvdW5kc1sxXVtmXSk7Zm9yKHZhciB2PTA7djwyOysrdillLmJvdW5kc1t2XVtmXT10LmdscGxvdC5ib3VuZHNbdl1bZl19dC5jb250b3VyTGV2ZWxzPW4odSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLGw9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxjPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo3MzUsIi4uLy4uLy4uL2xpYi9odG1sMnVuaWNvZGUiOjczMywiLi4vLi4vY2FydGVzaWFuL2F4ZXMiOjc3OX1dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBuKHQucHJvamVjdGlvbixuKHQudmlldyxuKHQubW9kZWwsW2VbMF0sZVsxXSxlWzJdLDFdKSkpfWUuZXhwb3J0cz1pfSx7fV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXQuZnVsbFNjZW5lTGF5b3V0W2VdO3JldHVybiB2LnRpY2tUZXh0KG4sbi5kMmwociksImhvdmVyIikudGV4dH12YXIgcixuPXQuc3ZnQ29udGFpbmVyLGk9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pLndpZHRoLG89aS5oZWlnaHQ7bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwICIrYSsiICIrbyksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsYSksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLG8pLFQodCksdC5nbHBsb3QuYXhlcy51cGRhdGUodC5heGVzT3B0aW9ucyk7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHQudHJhY2VzKSxsPW51bGwsYz10LmdscGxvdC5zZWxlY3Rpb24sdT0wO3U8cy5sZW5ndGg7Kyt1KXI9dC50cmFjZXNbc1t1XV0sInNraXAiIT09ci5kYXRhLmhvdmVyaW5mbyYmci5oYW5kbGVQaWNrKGMpJiYobD1yKSxyLnNldENvbnRvdXJMZXZlbHMmJnIuc2V0Q29udG91ckxldmVscygpO3ZhciBmO2lmKG51bGwhPT1sKXt2YXIgaD1fKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxjLmRhdGFDb29yZGluYXRlKTtyPWwuZGF0YTt2YXIgZD1jLmluZGV4LHA9Zy5jYXN0SG92ZXJpbmZvKHIsdC5mdWxsTGF5b3V0LGQpLG09ZSgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzBdKSx5PWUoInlheGlzIixjLnRyYWNlQ29vcmRpbmF0ZVsxXSksYj1lKCJ6YXhpcyIsYy50cmFjZUNvb3JkaW5hdGVbMl0pO2lmKCJhbGwiIT09cCl7dmFyIHg9cC5zcGxpdCgiKyIpO3guaW5kZXhPZigieCIpPT09LTEmJihtPXZvaWQgMCkseC5pbmRleE9mKCJ5Iik9PT0tMSYmKHk9dm9pZCAwKSx4LmluZGV4T2YoInoiKT09PS0xJiYoYj12b2lkIDApLHguaW5kZXhPZigidGV4dCIpPT09LTEmJihjLnRleHRMYWJlbD12b2lkIDApLHguaW5kZXhPZigibmFtZSIpPT09LTEmJihsLm5hbWU9dm9pZCAwKX10LmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGUmJmcubG9uZUhvdmVyKHt4OiguNSsuNSpoWzBdL2hbM10pKmEseTooLjUtLjUqaFsxXS9oWzNdKSpvLHhMYWJlbDptLHlMYWJlbDp5LHpMYWJlbDpiLHRleHQ6Yy50ZXh0TGFiZWwsbmFtZTpsLm5hbWUsY29sb3I6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJiZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJmb250LmZhbWlseSIpLGZvbnRTaXplOmcuY2FzdEhvdmVyT3B0aW9uKHIsZCwiZm9udC5zaXplIiksZm9udENvbG9yOmcuY2FzdEhvdmVyT3B0aW9uKHIsZCwiZm9udC5jb2xvciIpfSx7Y29udGFpbmVyOm4sZ2Q6dC5ncmFwaERpdn0pO3ZhciB3PXt4OmMudHJhY2VDb29yZGluYXRlWzBdLHk6Yy50cmFjZUNvb3JkaW5hdGVbMV0sejpjLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnIsY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjpkfTtnLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSh3LHIsZCk7dmFyIE09e3BvaW50czpbd119O2MuYnV0dG9ucyYmYy5kaXN0YW5jZTw1P3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIixNKTp0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIsTSksZj1NfWVsc2UgZy5sb25lVW5ob3ZlcihuKSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIixmKTt0LmRyYXdBbm5vdGF0aW9ucyh0KX1mdW5jdGlvbiBpKHQsZSxyLGkpe3ZhciBhPXtjYW52YXM6cixnbDppLGNvbnRhaW5lcjp0LmNvbnRhaW5lcixheGVzOnQuYXhlc09wdGlvbnMsc3Bpa2VzOnQuc3Bpa2VPcHRpb25zLHBpY2tSYWRpdXM6MTAsc25hcFRvRGF0YTohMCxhdXRvU2NhbGU6ITAsYXV0b0JvdW5kczohMX07aWYodC5zdGF0aWNNb2RlKXtpZighKGZ8fCh1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGY9ZCh7Y2FudmFzOnUscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTthLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLGEuZ2w9ZixhLmNhbnZhcz11fXRyeXt0LmdscGxvdD1oKGEpfWNhdGNoKGUpe2IodCl9dmFyIG89ZnVuY3Rpb24odCl7aWYodC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUhPT0hMSl7dmFyIGU9e307ZVt0LmlkKyIuY2FtZXJhIl09Yyh0LmNhbWVyYSksdC5zYXZlQ2FtZXJhKHQuZ3JhcGhEaXYubGF5b3V0KSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dCIsZSl9fTtpZih0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsby5iaW5kKG51bGwsdCkpLHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsby5iaW5kKG51bGwsdCkpLHQuc3RhdGljTW9kZXx8dC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ1bmN0aW9uKHQpe20ud2FybigiTG9zdCBXZWJHTCBjb250ZXh0LiIpLHQucHJldmVudERlZmF1bHQoKX0pLCF0LmNhbWVyYSl7dmFyIHM9dC5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhO3QuY2FtZXJhPXgodC5jb250YWluZXIse2NlbnRlcjpbcy5jZW50ZXIueCxzLmNlbnRlci55LHMuY2VudGVyLnpdLGV5ZTpbcy5leWUueCxzLmV5ZS55LHMuZXllLnpdLHVwOltzLnVwLngscy51cC55LHMudXAuel0sem9vbU1pbjouMSx6b29tTWF4OjEwMCxtb2RlOiJvcmJpdCJ9KX1yZXR1cm4gdC5nbHBsb3QuY2FtZXJhPXQuY2FtZXJhLHQuZ2xwbG90Lm9uY29udGV4dGxvc3M9ZnVuY3Rpb24oKXt0LnJlY292ZXJDb250ZXh0KCl9LHQuZ2xwbG90Lm9ucmVuZGVyPW4uYmluZChudWxsLHQpLHQudHJhY2VzPXt9LCEwfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxuPXQuY29udGFpbmVyO3RoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdjt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7YS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PSIxMDAlIixhLnN0eWxlWyJ6LWluZGV4Il09MjAsYS5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsci5hcHBlbmRDaGlsZChhKSx0aGlzLnN2Z0NvbnRhaW5lcj1hLHIuaWQ9dC5pZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9ci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLG4uYXBwZW5kQ2hpbGQociksdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5pZD10LmlkfHwic2NlbmUiLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWVbdGhpcy5pZF0sdGhpcy5wbG90QXJncz1bW10se30se31dLHRoaXMuYXhlc09wdGlvbnM9dyhlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz1NKGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz1wLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz1wLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSxpKHRoaXMsZSl9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgYSxvPTA7bzxlLmxlbmd0aDsrK28paWYoQXJyYXkuaXNBcnJheShlW29dKSlmb3IodmFyIHM9MDtzPGVbb10ubGVuZ3RoOysrcylhPXQuZDJsKGVbb11bc10sMCxpKSwhaXNOYU4oYSkmJmlzRmluaXRlKGEpJiYoblswXVtyXT1NYXRoLm1pbihuWzBdW3JdLGEpLG5bMV1bcl09TWF0aC5tYXgoblsxXVtyXSxhKSk7ZWxzZSBhPXQuZDJsKGVbb10sMCxpKSwhaXNOYU4oYSkmJmlzRmluaXRlKGEpJiYoblswXVtyXT1NYXRoLm1pbihuWzBdW3JdLGEpLG5bMV1bcl09TWF0aC5tYXgoblsxXVtyXSxhKSl9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49dC5mdWxsU2NlbmVMYXlvdXQ7byhuLnhheGlzLGUueCwwLHIsZS54Y2FsZW5kYXIpLG8obi55YXhpcyxlLnksMSxyLGUueWNhbGVuZGFyKSxvKG4uemF4aXMsZS56LDIscixlLnpjYWxlbmRhcil9ZnVuY3Rpb24gbCh0KXtyZXR1cm5bW3QuZXllLngsdC5leWUueSx0LmV5ZS56XSxbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLFt0LnVwLngsdC51cC55LHQudXAuel1dfWZ1bmN0aW9uIGModCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX19fXZhciB1LGYsaD10KCJnbC1wbG90M2QiKSxkPXQoIndlYmdsLWNvbnRleHQiKSxwPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbT10KCIuLi8uLi9saWIiKSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IikseT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYj10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSx4PXQoIi4vY2FtZXJhIiksXz10KCIuL3Byb2plY3QiKSx3PXQoIi4vbGF5b3V0L2NvbnZlcnQiKSxNPXQoIi4vbGF5b3V0L3NwaWtlcyIpLFQ9dCgiLi9sYXlvdXQvdGlja19tYXJrcyIpLGs9YS5wcm90b3R5cGU7ay5yZWNvdmVyQ29udGV4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gci5pc0NvbnRleHRMb3N0KCk/dm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCk6aShlLGUuZnVsbExheW91dCxuLHIpP3ZvaWQgZS5wbG90LmFwcGx5KGUsZS5wbG90QXJncyk6dm9pZCBtLmVycm9yKCJDYXRhc3Ryb3BoaWMgYW5kIHVucmVjb3ZlcmFibGUgV2ViR0wgZXJyb3IuIENvbnRleHQgbG9zdC4iKX12YXIgZT10aGlzLHI9dGhpcy5nbHBsb3QuZ2wsbj10aGlzLmdscGxvdC5jYW52YXM7dGhpcy5nbHBsb3QuZGlzcG9zZSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07dmFyIEE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtrLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLGwsYyx1PWVbdGhpcy5pZF0sZj1yW3RoaXMuaWRdO3UuYmdjb2xvcj90aGlzLmdscGxvdC5jbGVhckNvbG9yPXkodS5iZ2NvbG9yKTp0aGlzLmdscGxvdC5jbGVhckNvbG9yPVswLDAsMCwwXSx0aGlzLmdscGxvdC5zbmFwVG9EYXRhPSEwLHRoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PXUsdGhpcy5nbHBsb3RMYXlvdXQ9dSx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKHUpLHRoaXMuc3Bpa2VPcHRpb25zLm1lcmdlKHUpLHRoaXMuc2V0Q2FtZXJhKHUuY2FtZXJhKSx0aGlzLnVwZGF0ZUZ4KHUuZHJhZ21vZGUsdS5ob3Zlcm1vZGUpLHRoaXMuZ2xwbG90LnVwZGF0ZSh7fSksdGhpcy5zZXRDb252ZXJ0KGwpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBoPVtbMS8wLDEvMCwxLzBdLFstKDEvMCksLSgxLzApLC0oMS8wKV1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2Epbj10W2FdLG4udmlzaWJsZT09PSEwJiZzKHRoaXMsbixoKTt2YXIgZD1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbyloWzBdW29dPmhbMV1bb10/ZFtvXT0xOmhbMV1bb109PT1oWzBdW29dP2Rbb109MTpkW29dPTEvKGhbMV1bb10taFswXVtvXSk7Zm9yKHRoaXMuZGF0YVNjYWxlPWQsdGhpcy5jb252ZXJ0QW5ub3RhdGlvbnModGhpcyksYT0wO2E8dC5sZW5ndGg7KythKW49dFthXSxuLnZpc2libGU9PT0hMCYmKGk9dGhpcy50cmFjZXNbbi51aWRdLGk/aS51cGRhdGUobik6KGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSksaS5uYW1lPW4ubmFtZSk7dmFyIHA9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3Q6Zm9yKGE9MDthPHAubGVuZ3RoOysrYSl7Zm9yKG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dLnVpZD09PXBbYV0mJnRbb10udmlzaWJsZT09PSEwKWNvbnRpbnVlIHQ7aT10aGlzLnRyYWNlc1twW2FdXSxpLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbcFthXV19dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmRhdGEuaW5kZXgtZS5fdHJhY2UuZGF0YS5pbmRleH0pO3ZhciBtPVtbMCwwLDBdLFswLDAsMF1dLHY9W10sZz17fTtmb3IoYT0wO2E8MzsrK2Epe2lmKGw9dVtBW2FdXSxjPWwudHlwZSxjIGluIGc/KGdbY10uYWNjKj1kW2FdLGdbY10uY291bnQrPTEpOmdbY109e2FjYzpkW2FdLGNvdW50OjF9LGwuYXV0b3JhbmdlKXttWzBdW2FdPTEvMCxtWzFdW2FdPS0oMS8wKTt2YXIgYj10aGlzLmdscGxvdC5vYmplY3RzLHg9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLF89bC5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPGIubGVuZ3RoO28rKyl7dmFyIHc9YltvXS5ib3VuZHM7bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLHdbMF1bYV0vZFthXSksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLHdbMV1bYV0vZFthXSl9Zm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIE09eFtvXTtpZihNLnZpc2libGUpe3ZhciBUPWwucjJsKE1bX10pO21bMF1bYV09TWF0aC5taW4obVswXVthXSxUKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sVCl9fWlmKCJyYW5nZW1vZGUiaW4gbCYmInRvemVybyI9PT1sLnJhbmdlbW9kZSYmKG1bMF1bYV09TWF0aC5taW4obVswXVthXSwwKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sMCkpLG1bMF1bYV0+bVsxXVthXSltWzBdW2FdPS0xLG1bMV1bYV09MTtlbHNle3ZhciBrPW1bMV1bYV0tbVswXVthXTttWzBdW2FdLT1rLzMyLG1bMV1bYV0rPWsvMzJ9fWVsc2V7dmFyIEU9bC5yYW5nZTttWzBdW2FdPWwucjJsKEVbMF0pLG1bMV1bYV09bC5yMmwoRVsxXSl9bVswXVthXT09PW1bMV1bYV0mJihtWzBdW2FdLT0xLG1bMV1bYV0rPTEpLHZbYV09bVsxXVthXS1tWzBdW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1swXVthXT1tWzBdW2FdKmRbYV0sdGhpcy5nbHBsb3QuYm91bmRzWzFdW2FdPW1bMV1bYV0qZFthXX12YXIgUz1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7bD11W0FbYV1dLGM9bC50eXBlO3ZhciBMPWdbY107U1thXT1NYXRoLnBvdyhMLmFjYywxL0wuY291bnQpL2RbYV19dmFyIEM7aWYoImF1dG8iPT09dS5hc3BlY3Rtb2RlKUM9TWF0aC5tYXguYXBwbHkobnVsbCxTKS9NYXRoLm1pbi5hcHBseShudWxsLFMpPD00P1M6WzEsMSwxXTtlbHNlIGlmKCJjdWJlIj09PXUuYXNwZWN0bW9kZSlDPVsxLDEsMV07ZWxzZSBpZigiZGF0YSI9PT11LmFzcGVjdG1vZGUpQz1TO2Vsc2V7aWYoIm1hbnVhbCIhPT11LmFzcGVjdG1vZGUpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciBJPXUuYXNwZWN0cmF0aW87Qz1bSS54LEkueSxJLnpdfXUuYXNwZWN0cmF0aW8ueD1mLmFzcGVjdHJhdGlvLng9Q1swXSx1LmFzcGVjdHJhdGlvLnk9Zi5hc3BlY3RyYXRpby55PUNbMV0sdS5hc3BlY3RyYXRpby56PWYuYXNwZWN0cmF0aW8uej1DWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1DO3ZhciBEPXUuZG9tYWlufHxudWxsLFA9ZS5fc2l6ZXx8bnVsbDtpZihEJiZQKXt2YXIgej10aGlzLmNvbnRhaW5lci5zdHlsZTt6LnBvc2l0aW9uPSJhYnNvbHV0ZSIsei5sZWZ0PVAubCtELnhbMF0qUC53KyJweCIsei50b3A9UC50KygxLUQueVsxXSkqUC5oKyJweCIsei53aWR0aD1QLncqKEQueFsxXS1ELnhbMF0pKyJweCIsei5oZWlnaHQ9UC5oKihELnlbMV0tRC55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0say5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nbHBsb3QmJih0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPXRoaXMuZ2xwbG90LmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0say5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksYyh0aGlzLmdscGxvdC5jYW1lcmEpfSxrLnNldENhbWVyYT1mdW5jdGlvbih0KXt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsbCh0KSl9LGsuc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9bS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxuPXIuZ2V0KCksaT0hMTtpZih2b2lkIDA9PT1uKWk9ITA7ZWxzZSBmb3IodmFyIGE9MDthPDM7YSsrKWZvcih2YXIgbz0wO288MztvKyspaWYoIWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfShlLG4sYSxvKSl7aT0hMDticmVha31yZXR1cm4gaSYmci5zZXQoZSksaX0say51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO3ImJigib3JiaXQiPT09dD8oci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIik6InR1cm50YWJsZSI9PT10PyhyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSIpOnIua2V5QmluZGluZ01vZGU9dCksdGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LGsudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh1KSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLG49ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkocipuKjQpO2UucmVhZFBpeGVscygwLDAscixuLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsaSk7Zm9yKHZhciBhPTAsbz1uLTE7YTxvOysrYSwtLW8pZm9yKHZhciBzPTA7czxyOysrcylmb3IodmFyIGw9MDtsPDQ7KytsKXt2YXIgYz1pWzQqKHIqYStzKStsXTtpWzQqKHIqYStzKStsXT1pWzQqKHIqbytzKStsXSxpWzQqKHIqbytzKStsXT1jfQp2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtmLndpZHRoPXIsZi5oZWlnaHQ9bjt2YXIgaD1mLmdldENvbnRleHQoIjJkIiksZD1oLmNyZWF0ZUltYWdlRGF0YShyLG4pO2QuZGF0YS5zZXQoaSksaC5wdXRJbWFnZURhdGEoZCwwLDApO3ZhciBwO3N3aXRjaCh0KXtjYXNlImpwZWciOnA9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOnA9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0OnA9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHUpLHB9LGsuc2V0Q29udmVydD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Mzt0Kyspe3ZhciBlPXRoaXMuZnVsbFNjZW5lTGF5b3V0W0FbdF1dO3Yuc2V0Q29udmVydChlLHRoaXMuZnVsbExheW91dCksZS5zZXRTY2FsZT1tLm5vb3B9fSxlLmV4cG9ydHM9YX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjc1NCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2NhbWVyYSI6ODE3LCIuL2xheW91dC9jb252ZXJ0Ijo4MjIsIi4vbGF5b3V0L3NwaWtlcyI6ODI1LCIuL2xheW91dC90aWNrX21hcmtzIjo4MjYsIi4vcHJvamVjdCI6ODI3LCJnbC1wbG90M2QiOjIyNiwid2ViZ2wtY29udGV4dCI6NTcwfV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPW4oe2VkaXRUeXBlOiJjYWxjIn0pO2EuZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsYS5zaXplLmRmbHQ9MTIsYS5jb2xvci5kZmx0PWkuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtmb250OmEsdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSxhdXRvc2l6ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibm9uZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjcwMCxlZGl0VHlwZToibm9uZSJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo0NTAsZWRpdFR5cGU6Im5vbmUifSxtYXJnaW46e2w6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToiY2FsYyJ9LHI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToiY2FsYyJ9LHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMDAsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6ImNhbGMifSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2V4cGFuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0scGxvdF9iZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJhY2tncm91bmQsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuLCIsZWRpdFR5cGU6InBsb3QifSxoaWRlc291cmNlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJsZWdlbmQifX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4vZm9udF9hdHRyaWJ1dGVzIjo4MDN9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsY29udHJvbENvbnRhaW5lckNsYXNzTmFtZToibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbIk1pc3NpbmcgTWFwYm94IGFjY2VzcyB0b2tlbi4iLCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLiIsIkZvciBleGFtcGxlOiIsIiAgUGxvdGx5LnBsb3QoZ2QsIGRhdGEsIGxheW91dCwgeyBtYXBib3hBY2Nlc3NUb2tlbjogJ215LWFjY2Vzcy10b2tlbicgfSk7IiwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuLyJdLmpvaW4oIlxuIiksbWFwT25FcnJvck1zZzoiTWFwYm94IGVycm9yLiJ9fSx7fV0sODMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89QXJyYXkuaXNBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLGM9WyIiLCIiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6Y1swXT0idG9wIix1WzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjpjWzBdPSJib3R0b20iLHVbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0IjpjWzFdPSJyaWdodCIsdVswXT0tczticmVhaztjYXNlInJpZ2h0IjpjWzFdPSJsZWZ0Iix1WzBdPXN9dmFyIGY7cmV0dXJuIGY9Y1swXSYmY1sxXT9jLmpvaW4oIi0iKTpjWzBdP2NbMF06Y1sxXT9jWzFdOiJjZW50ZXIiLHthbmNob3I6ZixvZmZzZXQ6dX19fSx7Ii4uLy4uL2xpYiI6NzM1fV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49dC5fY29udGV4dDtpZigiIj09PW4ubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBpPW4ubWFwYm94QWNjZXNzVG9rZW4sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1yW2VbYV1dO2lmKG8uYWNjZXNzdG9rZW4pe2k9by5hY2Nlc3N0b2tlbjticmVha319aWYoIWkpdGhyb3cgbmV3IEVycm9yKGMubm9BY2Nlc3NUb2tlbkVycm9yTXNnKTtyZXR1cm4gaX12YXIgaT10KCJtYXBib3gtZ2wiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD10KCIuL21hcGJveCIpLGM9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9Im1hcGJveCIsci5hdHRyPSJzdWJwbG90IixyLmlkUm9vdD0ibWFwYm94IixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YS5jb3VudGVyUmVnZXgoIm1hcGJveCIpLHIuYXR0cmlidXRlcz17c3VicGxvdDp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJtYXBib3giLGVkaXRUeXBlOiJjYWxjIn19LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxzPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSxjPW4odCxzKTtpLmFjY2Vzc1Rva2VuPWM7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBmPXNbdV0saD1vLmdldFN1YnBsb3RDYWxjRGF0YShyLCJtYXBib3giLGYpLGQ9ZVtmXSxwPWQuX3N1YnBsb3Q7ZC5hY2Nlc3N0b2tlbj1jLHB8fChwPWwoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpmLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbZl0uX3N1YnBsb3Q9cCkscC52aWV3SW5pdGlhbHx8KHAudmlld0luaXRpYWw9e2NlbnRlcjphLmV4dGVuZEZsYXQoe30sZC5jZW50ZXIpLHpvb206ZC56b29tLGJlYXJpbmc6ZC5iZWFyaW5nLHBpdGNoOmQucGl0Y2h9KSxwLnBsb3QoaCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW8uZ2V0U3VicGxvdElkcyhuLCJtYXBib3giKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07IWVbc10mJm5bc10uX3N1YnBsb3QmJm5bc10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLGw9YS5kb21haW4sYz1hLl9zdWJwbG90LHU9Yy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOnMuc3ZnLCJ4bGluazpocmVmIjp1LHg6bi5sK24udypsLnhbMF0seTpuLnQrbi5oKigxLWwueVsxXSksd2lkdGg6bi53KihsLnhbMV0tbC54WzBdKSxoZWlnaHQ6bi5oKihsLnlbMV0tbC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLGMuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9by5nZXRTdWJwbG90SWRzKHQsIm1hcGJveCIpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dFtlW3JdXS5fc3VicGxvdC51cGRhdGVGeCh0KX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MTYsIi4uLy4uL2xpYiI6NzM1LCIuLi9wbG90cyI6ODM4LCIuL2NvbnN0YW50cyI6ODMwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MzQsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MzUsIi4vbWFwYm94Ijo4MzYsIm1hcGJveC1nbCI6MzUxfV0sODMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLm1hcGJveD10LHRoaXMubWFwPXQubWFwLHRoaXMudWlkPXQudWlkKyItbGF5ZXIiK2UsdGhpcy5pZFNvdXJjZT10aGlzLnVpZCsiLXNvdXJjZSIsdGhpcy5pZExheWVyPXRoaXMudWlkKyItbGF5ZXIiLHRoaXMuc291cmNlVHlwZT1udWxsLHRoaXMuc291cmNlPW51bGwsdGhpcy5sYXllclR5cGU9bnVsbCx0aGlzLmJlbG93PW51bGwsdGhpcy52aXNpYmxlPSExfWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5zb3VyY2U7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wfWZ1bmN0aW9uIGEodCl7dmFyIGU9e30scj17fTtzd2l0Y2godC50eXBlKXtjYXNlImNpcmNsZSI6cy5leHRlbmRGbGF0KHIseyJjaXJjbGUtcmFkaXVzIjp0LmNpcmNsZS5yYWRpdXMsImNpcmNsZS1jb2xvciI6dC5jb2xvciwiY2lyY2xlLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UibGluZSI6cy5leHRlbmRGbGF0KHIseyJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJmaWxsIjpzLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIG49dC5zeW1ib2wsaT1sKG4udGV4dHBvc2l0aW9uLG4uaWNvbnNpemUpO3MuZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6bi5pY29uKyItMTUiLCJpY29uLXNpemUiOm4uaWNvbnNpemUvMTAsInRleHQtZmllbGQiOm4udGV4dCwidGV4dC1zaXplIjpuLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjppLmFuY2hvciwidGV4dC1vZmZzZXQiOmkub2Zmc2V0fSkscy5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjpuLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1mdW5jdGlvbiBvKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfSxhPSJzdHJpbmciPT10eXBlb2YgbjtyZXR1cm4iZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09ciYmKGU9YT8idXJsIjoidGlsZXMiKSxpW2VdPW4saX12YXIgcz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSxjPW4ucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnVwZGF0ZUxheWVyKHQpLHRoaXMudXBkYXRlU291cmNlKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCkmJnRoaXMudXBkYXRlTGF5ZXIodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudXBkYXRlU3R5bGUodCksdGhpcy52aXNpYmxlPWkodCl9LGMubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8dGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LGMubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10LmJlbG93fSxjLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxpKHQpKXt2YXIgcj1vKHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxjLnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmZS5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSxpKHQpKXtlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsInNvdXJjZS1sYXllciI6dC5zb3VyY2VsYXllcnx8IiIsdHlwZTp0LnR5cGV9LHQuYmVsb3cpO3ZhciByPXt2aXNpYmlsaXR5OiJ2aXNpYmxlIn07dGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixyKX19LGMudXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9YSh0KTtpKHQpJiYodGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixlLmxheW91dCksdGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldFBhaW50UHJvcGVydHkiLGUucGFpbnQpKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuKHQsZSk7cmV0dXJuIGkudXBkYXRlKHIpLGl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4MzF9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS50ZXh0cG9zaXRpb24scz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1hKHt9KTtsLmZhbWlseS5kZmx0PSJPcGVuIFNhbnMgUmVndWxhciwgQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyIixlLmV4cG9ydHM9cyh7X2FycmF5QXR0clJlZ2V4cHM6W24uY291bnRlclJlZ2V4KCJtYXBib3giLCIubGF5ZXJzIiwhMCldLGRvbWFpbjp7eDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19LHk6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfX0sYWNjZXNzdG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOiJhbnkiLHZhbHVlczpbImJhc2ljIiwic3RyZWV0cyIsIm91dGRvb3JzIiwibGlnaHQiLCJkYXJrIiwic2F0ZWxsaXRlIiwic2F0ZWxsaXRlLXN0cmVldHMiXSxkZmx0OiJiYXNpYyJ9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH19LHpvb206e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXllcnM6e19pc0xpbmtlZFRvQXJyYXk6ImxheWVyIixzb3VyY2V0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJnZW9qc29uIiwidmVjdG9yIl0sZGZsdDoiZ2VvanNvbiJ9LHNvdXJjZTp7dmFsVHlwZToiYW55In0sc291cmNlbGF5ZXI6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwibGluZSIsImZpbGwiLCJzeW1ib2wiXSxkZmx0OiJjaXJjbGUifSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LGNpcmNsZTp7cmFkaXVzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTV9fSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjJ9fSxmaWxsOntvdXRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Oml9fSxzeW1ib2w6e2ljb246e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoibWFya2VyIn0saWNvbnNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0ZXh0Zm9udDpsLHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30sbyx7YXJyYXlPazohMX0pfX19LCJwbG90IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzYzLCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1LCIuLi9mb250X2F0dHJpYnV0ZXMiOjgwM31dLDgzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyKCJhY2Nlc3N0b2tlbiIpLHIoInN0eWxlIikscigiY2VudGVyLmxvbiIpLHIoImNlbnRlci5sYXQiKSxyKCJ6b29tIikscigiYmVhcmluZyIpLHIoInBpdGNoIiksaSh0LGUpLGUuX2lucHV0PXR9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gYS5jb2VyY2UobixpLHMubGF5ZXJzLHQsZSl9Zm9yKHZhciBuLGksbz10LmxheWVyc3x8W10sbD1lLmxheWVycz1bXSxjPTA7YzxvLmxlbmd0aDtjKyspaWYobj1vW2NdLGk9e30sYS5pc1BsYWluT2JqZWN0KG4pKXt2YXIgdT1yKCJzb3VyY2V0eXBlIik7cigic291cmNlIiksInZlY3RvciI9PT11JiZyKCJzb3VyY2VsYXllciIpO3ZhciBmPXIoInR5cGUiKTtyKCJiZWxvdyIpLHIoImNvbG9yIikscigib3BhY2l0eSIpLCJjaXJjbGUiPT09ZiYmcigiY2lyY2xlLnJhZGl1cyIpLCJsaW5lIj09PWYmJnIoImxpbmUud2lkdGgiKSwiZmlsbCI9PT1mJiZyKCJmaWxsLm91dGxpbmVjb2xvciIpLCJzeW1ib2wiPT09ZiYmKHIoInN5bWJvbC5pY29uIikscigic3ltYm9sLmljb25zaXplIikscigic3ltYm9sLnRleHQiKSxhLmNvZXJjZUZvbnQociwic3ltYm9sLnRleHRmb250Iikscigic3ltYm9sLnRleHRwb3NpdGlvbiIpKSxpLl9pbmRleD1jLGwucHVzaChpKX19dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOiJtYXBib3giLGF0dHJpYnV0ZXM6cyxoYW5kbGVEZWZhdWx0czpuLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg0NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODM0fV0sODM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5pZD10LmlkLHRoaXMuZ2Q9dC5nZCx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdDt2YXIgZT10LmZ1bGxMYXlvdXQ7dGhpcy51aWQ9ZS5fdWlkKyItIit0aGlzLmlkLHRoaXMub3B0cz1lW3RoaXMuaWRdLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhlKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W119ZnVuY3Rpb24gaSh0KXt2YXIgZT1kLnN0eWxlLnZhbHVlcyxyPWQuc3R5bGUuZGZsdCxuPXt9O3JldHVybiBjLmlzUGxhaW5PYmplY3QodCk/KG4uaWQ9dC5pZCxuLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8obi5pZD10LG4uc3R5bGU9ZS5pbmRleE9mKHQpIT09LTE/YSh0KTp0KToobi5pZD1yLG4uc3R5bGU9YShyKSksbn1mdW5jdGlvbiBhKHQpe3JldHVybiBoLnN0eWxlVXJsUHJlZml4K3QrIi0iK2guc3R5bGVVcmxTdWZmaXh9ZnVuY3Rpb24gbyh0KXtyZXR1cm5bdC5sb24sdC5sYXRdfXZhciBzPXQoIm1hcGJveC1nbCIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksZj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IiksaD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHA9dCgiLi9sYXllcnMiKSxtPW4ucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LG0ucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPW4ub3B0cz1lW3RoaXMuaWRdO24ubWFwJiZpLmFjY2Vzc3Rva2VuIT09bi5hY2Nlc3NUb2tlbiYmKG4ubWFwLnJlbW92ZSgpLG4ubWFwPW51bGwsbi5zdHlsZU9iaj1udWxsLG4udHJhY2VIYXNoPVtdLG4ubGF5ZXJMaXN0PXt9KTt2YXIgYTthPW4ubWFwP25ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7bi51cGRhdGVNYXAodCxlLHIsaSl9KTpuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe24uY3JlYXRlTWFwKHQsZSxyLGkpfSksci5wdXNoKGEpfSxtLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKCl7bC5sb25lVW5ob3ZlcihlLl90b3BwYXBlcil9dmFyIHU9dGhpcyxmPXUuZ2QsZD11Lm9wdHMscD11LnN0eWxlT2JqPWkoZC5zdHlsZSk7dS5hY2Nlc3NUb2tlbj1kLmFjY2Vzc3Rva2VuO3ZhciBtPXUubWFwPW5ldyBzLk1hcCh7Y29udGFpbmVyOnUuZGl2LHN0eWxlOnAuc3R5bGUsY2VudGVyOm8oZC5jZW50ZXIpLHpvb206ZC56b29tLGJlYXJpbmc6ZC5iZWFyaW5nLHBpdGNoOmQucGl0Y2gsaW50ZXJhY3RpdmU6IXUuaXNTdGF0aWMscHJlc2VydmVEcmF3aW5nQnVmZmVyOnUuaXNTdGF0aWMsZG91YmxlQ2xpY2tab29tOiExLGJveFpvb206ITF9KSx2PWguY29udHJvbENvbnRhaW5lckNsYXNzTmFtZSxnPXUuZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodilbMF07dS5kaXYucmVtb3ZlQ2hpbGQoZyksbS5fY2FudmFzLmNhbnZhcy5zdHlsZS5sZWZ0PSIwcHgiLG0uX2NhbnZhcy5jYW52YXMuc3R5bGUudG9wPSIwcHgiLHUucmVqZWN0T25FcnJvcihuKSxtLm9uY2UoImxvYWQiLGZ1bmN0aW9uKCl7dS51cGRhdGVEYXRhKHQpLHUudXBkYXRlTGF5b3V0KGUpLHUucmVzb2x2ZU9uUmVuZGVyKHIpfSksdS5pc1N0YXRpY3x8KG0ub24oIm1vdmVlbmQiLGZ1bmN0aW9uKHQpe2lmKHUubWFwKXt2YXIgZT11LmdldFZpZXcoKTtpZihkLl9pbnB1dC5jZW50ZXI9ZC5jZW50ZXI9ZS5jZW50ZXIsZC5faW5wdXQuem9vbT1kLnpvb209ZS56b29tLGQuX2lucHV0LmJlYXJpbmc9ZC5iZWFyaW5nPWUuYmVhcmluZyxkLl9pbnB1dC5waXRjaD1kLnBpdGNoPWUucGl0Y2gsdC5vcmlnaW5hbEV2ZW50KXt2YXIgcj17fTtyW3UuaWRdPWMuZXh0ZW5kRmxhdCh7fSxlKSxmLmVtaXQoInBsb3RseV9yZWxheW91dCIscil9fX0pLG0ub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7dmFyIGU9dS5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jbGllbnRYPXQucG9pbnQueCtlLmxlZnQsdC5jbGllbnRZPXQucG9pbnQueStlLnRvcCx0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubG5nfSx1LnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sYXR9LGwuaG92ZXIoZix0LHUuaWQpfSksbS5vbigiY2xpY2siLGZ1bmN0aW9uKHQpe2wuY2xpY2soZix0Lm9yaWdpbmFsRXZlbnQpfSksbS5vbigiZHJhZ3N0YXJ0IixhKSxtLm9uKCJ6b29tc3RhcnQiLGEpLG0ub24oImRibGNsaWNrIixmdW5jdGlvbigpe3ZhciB0PXUudmlld0luaXRpYWw7bS5zZXRDZW50ZXIobyh0LmNlbnRlcikpLG0uc2V0Wm9vbSh0Lnpvb20pLG0uc2V0QmVhcmluZyh0LmJlYXJpbmcpLG0uc2V0UGl0Y2godC5waXRjaCk7dmFyIGU9dS5nZXRWaWV3KCk7ZC5faW5wdXQuY2VudGVyPWQuY2VudGVyPWUuY2VudGVyLGQuX2lucHV0Lnpvb209ZC56b29tPWUuem9vbSxkLl9pbnB1dC5iZWFyaW5nPWQuYmVhcmluZz1lLmJlYXJpbmcsZC5faW5wdXQucGl0Y2g9ZC5waXRjaD1lLnBpdGNoLGYuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKX0pKX0sbS51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcyxvPWEubWFwO2EucmVqZWN0T25FcnJvcihuKTt2YXIgcz1pKGEub3B0cy5zdHlsZSk7YS5zdHlsZU9iai5pZCE9PXMuaWQ/KGEuc3R5bGVPYmo9cyxvLnNldFN0eWxlKHMuc3R5bGUpLG8uc3R5bGUub25jZSgibG9hZCIsZnVuY3Rpb24oKXthLnRyYWNlSGFzaD17fSxhLnVwZGF0ZURhdGEodCksYS51cGRhdGVMYXlvdXQoZSksYS5yZXNvbHZlT25SZW5kZXIocil9KSk6KGEudXBkYXRlRGF0YSh0KSxhLnVwZGF0ZUxheW91dChlKSxhLnJlc29sdmVPblJlbmRlcihyKSl9LG0udXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMudHJhY2VIYXNoO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07cj1vWzBdLnRyYWNlLGU9YVtyLnVpZF0sZT9lLnVwZGF0ZShvKTpyLl9tb2R1bGUmJihhW3IudWlkXT1yLl9tb2R1bGUucGxvdCh0aGlzLG8pKX12YXIgcz1PYmplY3Qua2V5cyhhKTt0OmZvcihuPTA7bjxzLmxlbmd0aDtuKyspe3ZhciBsPXNbbl07Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZihyPXRbaV1bMF0udHJhY2UsbD09PXIudWlkKWNvbnRpbnVlIHQ7ZT1hW2xdLGUuZGlzcG9zZSgpLGRlbGV0ZSBhW2xdfX0sbS51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj10aGlzLm9wdHM7ZS5zZXRDZW50ZXIobyhyLmNlbnRlcikpLGUuc2V0Wm9vbShyLnpvb20pLGUuc2V0QmVhcmluZyhyLmJlYXJpbmcpLGUuc2V0UGl0Y2goci5waXRjaCksdGhpcy51cGRhdGVMYXllcnMoKSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpfSxtLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKCJyZW5kZXIiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksdCgpKX0pfSxtLnJlamVjdE9uRXJyb3I9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QobmV3IEVycm9yKGgubWFwT25FcnJvck1zZykpfXZhciByPXRoaXMubWFwO3Iub25jZSgiZXJyb3IiLGUpLHIub25jZSgic3R5bGUuZXJyb3IiLGUpLHIub25jZSgic291cmNlLmVycm9yIixlKSxyLm9uY2UoInRpbGUuZXJyb3IiLGUpLHIub25jZSgibGF5ZXIuZXJyb3IiLGUpfSxtLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pZD1lLnVpZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS55fX0sZS51cGRhdGVGcmFtZXdvcmsodCl9LG0udXBkYXRlRng9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1yLm1hcC51bnByb2plY3QodCk7cmV0dXJuW2UubG5nLGUubGF0XX12YXIgcj10aGlzLG49ci5tYXAsaT1yLmdkO2lmKCFyLmlzU3RhdGljKXt2YXIgYSxvPXQuZHJhZ21vZGU7aWYoYT0ic2VsZWN0Ij09PW8/ZnVuY3Rpb24odCxuKXsodC5yYW5nZT17fSlbci5pZF09W2UoW24ueG1pbixuLnltaW5dKSxlKFtuLnhtYXgsbi55bWF4XSldfTpmdW5jdGlvbih0LG4saSl7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPWkuZmlsdGVyZWQubWFwKGUpfSwic2VsZWN0Ij09PW98fCJsYXNzbyI9PT1vKXtuLmRyYWdQYW4uZGlzYWJsZSgpO3ZhciBzPXtlbGVtZW50OnIuZGl2LGdkOmkscGxvdGluZm86e3hheGlzOnIueGF4aXMseWF4aXM6ci55YXhpcyxmaWxsUmFuZ2VJdGVtczphfSx4YXhlczpbci54YXhpc10seWF4ZXM6W3IueWF4aXNdLHN1YnBsb3Q6ci5pZH07cy5wcmVwRm49ZnVuY3Rpb24odCxlLHIpe2YodCxlLHIscyxvKX0scy5kb25lRm49ZnVuY3Rpb24oZSxyKXsyPT09ciYmdC5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHUuaW5pdChzKX1lbHNlIG4uZHJhZ1Bhbi5lbmFibGUoKSxyLmRpdi5vbm1vdXNlZG93bj1udWxsfX0sbS51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pKyJweCIsbi5oZWlnaHQ9ci5oKihlLnlbMV0tZS55WzBdKSsicHgiLG4ubGVmdD1yLmwrZS54WzBdKnIudysicHgiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCsicHgiLHRoaXMueGF4aXMuX29mZnNldD1yLmwrZS54WzBdKnIudyx0aGlzLnhheGlzLl9sZW5ndGg9ci53KihlLnhbMV0tZS54WzBdKSx0aGlzLnlheGlzLl9vZmZzZXQ9ci50KygxLWUueVsxXSkqci5oLHRoaXMueWF4aXMuX2xlbmd0aD1yLmgqKGUueVsxXS1lLnlbMF0pfSxtLnVwZGF0ZUxheWVycz1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcHRzLHI9ZS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLHQ9MDt0PHIubGVuZ3RoO3QrKyluLnB1c2gocCh0aGlzLHQsclt0XSkpfWVsc2UgZm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluW3RdLnVwZGF0ZShyW3RdKX0sbS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LG0udG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sbS5pbml0U291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOiJnZW9qc29uIixkYXRhOnt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOltdfX19O3JldHVybiB0aGlzLm1hcC5hZGRTb3VyY2UodCxlKX0sbS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXAuZ2V0U291cmNlKHQpLnNldERhdGEoZSl9LG0uc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMubWFwLGk9T2JqZWN0LmtleXMociksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO25bZV0odCxvLHJbb10pfX0sbS5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5wcm9qZWN0KG5ldyBzLkxuZ0xhdCh0WzBdLHRbMV0pKX0sbS5nZXRWaWV3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXAsZT10LmdldENlbnRlcigpO3JldHVybntjZW50ZXI6e2xvbjplLmxuZyxsYXQ6ZS5sYXR9LHpvb206dC5nZXRab29tKCksYmVhcmluZzp0LmdldEJlYXJpbmcoKSxwaXRjaDp0LmdldFBpdGNoKCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MzIsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1MiwiLi4vLi4vbGliIjo3MzUsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc5NSwiLi9jb25zdGFudHMiOjgzMCwiLi9sYXllcnMiOjgzMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODM0LCJtYXBib3gtZ2wiOjM1MX1dLDgzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Q6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In19LHt9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2LnNlbmREYXRhVG9DbG91ZCh0KX0pO2Vsc2V7dmFyIG49d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7InhsaW5rOnhsaW5rOnNob3ciOiJuZXciLCJ4bGluazp4bGluazpocmVmIjoiLyIrblsyXS5zcGxpdCgiLiIpWzBdKyIvIituWzFdK2l9KX19ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG4saT10LnRyYWNlLGE9aS5fYXJyYXlBdHRycyxvPXt9O2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLG9bbl09ZC5uZXN0ZWRQcm9wZXJ0eShpLG4pLmdldCgpLnNsaWNlKCk7Zm9yKHQudHJhY2U9ZSxyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLGQubmVzdGVkUHJvcGVydHkodC50cmFjZSxuKS5zZXQob1tuXSl9ZnVuY3Rpb24gYSh0LGUscixuKXtmb3IodmFyIGk9dC50cmFuc2Zvcm1zLGE9W3RdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxsPV9bcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGE9bC50cmFuc2Zvcm0oYSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQpe3ZhciBlLHI9e2xlZnQ6MCxyaWdodDowLGJvdHRvbTowLHRvcDowfTtpZih0KWZvcihlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKHIubGVmdCs9dFtlXS5sZWZ0fHwwLHIucmlnaHQrPXRbZV0ucmlnaHR8fDAsci5ib3R0b20rPXRbZV0uYm90dG9tfHwwLHIudG9wKz10W2VdLnRvcHx8MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dFtlXS5fY2F0ZWdvcmllcz10W2VdLl9pbml0aWFsQ2F0ZWdvcmllcy5zbGljZSgpLHRbZV0uX2NhdGVnb3JpZXNNYXA9e307Zm9yKHZhciByPTA7cjx0W2VdLl9jYXRlZ29yaWVzLmxlbmd0aDtyKyspdFtlXS5fY2F0ZWdvcmllc01hcFt0W2VdLl9jYXRlZ29yaWVzW3JdXT1yfX12YXIgbD10KCJkMyIpLGM9dCgiZmFzdC1pc251bWVyaWMiKSx1PXQoIi4uL3Bsb3RseSIpLGY9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxoPXQoIi4uL3JlZ2lzdHJ5IiksZD10KCIuLi9saWIiKSxwPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxtPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sdj1lLmV4cG9ydHM9e30sZz10KCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIikseT10KCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSxiPWQucmVsaW5rUHJpdmF0ZUtleXM7ZC5leHRlbmRGbGF0KHYsaCksdi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHYuYXR0cmlidXRlcy50eXBlLnZhbHVlcz12LmFsbFR5cGVzLHYuZm9udEF0dHJzPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksdi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx2LmZvbnRXZWlnaHQ9Im5vcm1hbCI7dmFyIHg9di5zdWJwbG90c1JlZ2lzdHJ5LF89di50cmFuc2Zvcm1zUmVnaXN0cnksdz10KCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLE09dCgiLi9jb21tYW5kIik7di5leGVjdXRlQVBJQ29tbWFuZD1NLmV4ZWN1dGVBUElDb21tYW5kLHYuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1NLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3Msdi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9TS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsdi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9TS5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3Msdi5maW5kU3VicGxvdElkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2lmKCF2LnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHI7Zm9yKHZhciBuPXYuc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTt2LnRyYWNlSXMoYSxlKSYmci5pbmRleE9mKGFbbl0pPT09LTEmJnIucHVzaChhW25dKX1yZXR1cm4gcn0sdi5nZXRTdWJwbG90SWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9di5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFyKXJldHVybltdO2lmKCEoImNhcnRlc2lhbiIhPT1lfHx0Ll9oYXMmJnQuX2hhcygiY2FydGVzaWFuIikpKXJldHVybltdO2lmKCEoImdsMmQiIT09ZXx8dC5faGFzJiZ0Ll9oYXMoImdsMmQiKSkpcmV0dXJuW107aWYoImNhcnRlc2lhbiI9PT1lfHwiZ2wyZCI9PT1lKXJldHVybiBPYmplY3Qua2V5cyh0Ll9wbG90c3x8e30pO2Zvcih2YXIgbj1yLmF0dHJSZWdleCxpPU9iamVjdC5rZXlzKHQpLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO24udGVzdChzKSYmYS5wdXNoKHMpfXZhciBsPXIuaWRSb290Lmxlbmd0aDtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuKyh0LnN1YnN0cihsKXx8MSktKyhlLnN1YnN0cihsKXx8MSl9KSxhfSx2LmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbixpPXYuc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGE9W10sbz0wO288dC5sZW5ndGg7bysrKWlmKG49dFtvXSwiZ2wyZCI9PT1lJiZ2LnRyYWNlSXMobiwiZ2wyZCIpKXt2YXIgcz11LkF4ZXMuc3VicGxvdE1hdGNoLGw9IngiK3IubWF0Y2gocylbMV0sYz0ieSIrci5tYXRjaChzKVsyXTtuW2lbMF1dPT09bCYmbltpWzFdXT09PWMmJmEucHVzaChuKX1lbHNlIG5baV09PT1yJiZhLnB1c2gobik7cmV0dXJuIGF9LHYuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbj12LnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtvWzBdLnRyYWNlW25dPT09ciYmaS5wdXNoKG8pfXJldHVybiBpfSx2LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7aWYoISh0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aC5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGguZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXt0JiYhZnVuY3Rpb24odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZGlzcGxheTtyZXR1cm4hZXx8Im5vbmUiPT09ZX0odCl8fHIobmV3IEVycm9yKCJSZXNpemUgbXVzdCBiZSBwYXNzZWQgYSBkaXNwbGF5ZWQgcGxvdCBkaXYgZWxlbWVudC4iKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHQpcmV0dXJuIHZvaWQgZSh0KTtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgcj10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCx1LnJlbGF5b3V0KHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX0sMTAwKX0pfSx2LnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3QuX3Byb21pc2VzPVtdfSl9LHYuYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3BhcGVyLnNlbGVjdEFsbCgidGV4dC5qcy1wbG90LWxpbmstY29udGFpbmVyIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwhMCkuc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6cC5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWwuc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pO3ZhciBpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxjPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJm4odCxvKSxzLnRleHQoby50ZXh0KCkmJmMudGV4dCgpPyIgLSAiOiIiKX19LHYuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciBlPXdpbmRvdy5QTE9UTFlFTlYmJndpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkx8fCJodHRwczovL3Bsb3QubHkiLHI9bC5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxuPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gbi5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9di5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxuLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9LHYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0fHx7fSxuPXQuX2Z1bGxMYXlvdXQ9e30sYT10LmxheW91dHx8e30sbz10Ll9mdWxsRGF0YXx8W10scz10Ll9mdWxsRGF0YT1bXSxsPXQuZGF0YXx8W107aWYodC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksci5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgYz1yLndpZHRoLGY9ci5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhhLG4pLGEud2lkdGh8fChuLndpZHRoPWMpLGEuaGVpZ2h0fHwobi5oZWlnaHQ9Zil9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGEsbik7dmFyIGg9IWEud2lkdGh8fCFhLmhlaWdodCxkPW4uYXV0b3NpemUscD10Ll9jb250ZXh0JiZ0Ll9jb250ZXh0LmF1dG9zaXphYmxlO2gmJihkfHxwKT92LnBsb3RBdXRvU2l6ZSh0LGEsbik6aCYmdi5zYW5pdGl6ZU1hcmdpbnModCksIWQmJmgmJihhLndpZHRoPW4ud2lkdGgsYS5oZWlnaHQ9bi5oZWlnaHQpfW4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxuLl9kYXRhTGVuZ3RoPWwubGVuZ3RoLG4uX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLHYuc3VwcGx5RGF0YURlZmF1bHRzKGwscyxhLG4pLG4uX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKG4pO3ZhciBtPW4uX21vZHVsZXM7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtnLmNsZWFuRGF0YSYmZy5jbGVhbkRhdGEocyl9aWYoby5sZW5ndGg9PT1sLmxlbmd0aClmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWIoc1tlXSxvW2VdKTt2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKGEsbixzLHQuX3RyYW5zaXRpb25EYXRhKSxuLl9oYXNDYXJ0ZXNpYW49bi5faGFzKCJjYXJ0ZXNpYW4iKSxuLl9oYXNHZW89bi5faGFzKCJnZW8iKSxuLl9oYXNHTDNEPW4uX2hhcygiZ2wzZCIpLG4uX2hhc0dMMkQ9bi5faGFzKCJnbDJkIiksbi5faGFzVGVybmFyeT1uLl9oYXMoInRlcm5hcnkiKSxuLl9oYXNQaWU9bi5faGFzKCJwaWUiKSx2LmNsZWFuUGxvdChzLG4sbyxyKSx2LmxpbmtTdWJwbG90cyhzLG4sbyxyKSxiKG4sciksdi5kb0F1dG9NYXJnaW4odCk7dmFyIHk9dS5BeGVzLmxpc3QodCk7Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyl7eVtlXS5zZXRTY2FsZSgpfWlmKCh0LmNhbGNkYXRhfHxbXSkubGVuZ3RoPT09cy5sZW5ndGgpZm9yKGU9MDtlPHMubGVuZ3RoO2UrKyl7dmFyIHg9c1tlXSxfPXQuY2FsY2RhdGFbZV1bMF07XyYmXy50cmFjZSYmKF8udHJhY2UuX2hhc0NhbGNUcmFuc2Zvcm0/aShfLHgpOl8udHJhY2U9eCl9fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9iYXNlUGxvdE1vZHVsZXN8fFtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoZVtyXS5uYW1lPT09dClyZXR1cm4hMH1yZXR1cm4hMX0sdi5jbGVhblBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtzLmNsZWFuJiZzLmNsZWFuKHQsZSxyLG4pfXZhciBsPSEhbi5fcGFwZXIsYz0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciB1PXJbaV0sZj11LnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaD10W2FdO2lmKGY9PT1oLnVpZCljb250aW51ZSB0fXZhciBkPSIuaG0iK2YrIiwuY29udG91ciIrZisiLC5jYXJwZXQiK2YrIiwjY2xpcCIrZisiLC50cmFjZSIrZjtsJiZuLl9wYXBlci5zZWxlY3RBbGwoZCkucmVtb3ZlKCksYyYmKG4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKS5zZWxlY3RBbGwoZCkucmVtb3ZlKCkpfW4uX3pvb21sYXllciYmbi5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bi5fcGxvdHN8fHt9LG89ZS5fcGxvdHM9e30scz17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0sbD11LkF4ZXMuZ2V0U3VicGxvdHMocyk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGMsZj1sW2ldLGg9YVtmXSxkPXUuQXhlcy5nZXRGcm9tSWQocyxmLCJ4IikscD11LkF4ZXMuZ2V0RnJvbUlkKHMsZiwieSIpO2g/KGM9b1tmXT1oLGMuX3NjZW5lMmQmJmMuX3NjZW5lMmQudXBkYXRlUmVmcyhlKSxjLnhheGlzLmxheWVyIT09ZC5sYXllciYmKGMueGxpbmVzLmF0dHIoImQiLG51bGwpLGMueGF4aXNsYXllci5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSksYy55YXhpcy5sYXllciE9PXAubGF5ZXImJihjLnlsaW5lcy5hdHRyKCJkIixudWxsKSxjLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpKTooYz1vW2ZdPXt9LGMuaWQ9ZiksYy54YXhpcz1kLGMueWF4aXM9cCxjLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBtPTA7bTx0Lmxlbmd0aDttKyspe3ZhciB2PXRbbV07aWYodi54YXhpcz09PWMueGF4aXMuX2lkJiZ2LnlheGlzPT09Yy55YXhpcy5faWQmJnYuY2xpcG9uYXhpcz09PSExKXtjLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgZz11LkF4ZXMubGlzdChzLG51bGwsITApO2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0sYj1udWxsO3kub3ZlcmxheWluZyYmKGI9dS5BeGVzLmdldEZyb21JZChzLHkub3ZlcmxheWluZykpJiZiLm92ZXJsYXlpbmcmJih5Lm92ZXJsYXlpbmc9ITEsYj1udWxsKSx5Ll9tYWluQXhpcz1ifHx5LGImJih5LmRvbWFpbj1iLmRvbWFpbi5zbGljZSgpKSx5Ll9hbmNob3JBeGlzPSJmcmVlIj09PXkuYW5jaG9yP251bGw6dS5BeGVzLmdldEZyb21JZChzLHkuYW5jaG9yKX19LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpLGEpe25bYV09ZSxuLmxlbmd0aD1hKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZyLnB1c2gobi5qb2luKCIuIikpfXZhciByLG4saTtmb3Iobj1bXSxyPXQuX21vZHVsZS5fY29sb3JBdHRycyxyfHwodC5fbW9kdWxlLl9jb2xvckF0dHJzPXI9W10sZi5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxlKSksaT0wO2k8ci5sZW5ndGg7aSsrKXtkLm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK3JbaV0pLmdldCgpfHxkLm5lc3RlZFByb3BlcnR5KHQscltpXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihkLnB1c2hVbmlxdWUoYyxyKSxkLnB1c2hVbmlxdWUodSx0Ll9tb2R1bGUuYmFzZVBsb3RNb2R1bGUpLGYrKyl9dmFyIG8scyxsLGM9bi5fbW9kdWxlcz1bXSx1PW4uX2Jhc2VQbG90TW9kdWxlcz1bXSxmPTA7bi5fdHJhbnNmb3JtTW9kdWxlcz1bXTt2YXIgcD17fSxtPVtdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspe2lmKGw9dFtvXSxzPXYuc3VwcGx5VHJhY2VEZWZhdWx0cyhsLGYsbixvKSxzLmluZGV4PW8scy5faW5wdXQ9bCxzLl9leHBhbmRlZEluZGV4PWYscy50cmFuc2Zvcm1zJiZzLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgZz1hKHMsZSxyLG4pLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9Z1t5XSxfPXYuc3VwcGx5VHJhY2VEZWZhdWx0cyh4LGYsbixvKTtiKF8seCkseC51aWQ9Xy51aWQ9cy51aWQreSxfLmluZGV4PW8sXy5faW5wdXQ9bCxfLl9mdWxsSW5wdXQ9cyxfLl9leHBhbmRlZEluZGV4PWYsXy5fZXhwYW5kZWRJbnB1dD14LGkoXyl9ZWxzZSBzLl9mdWxsSW5wdXQ9cyxzLl9leHBhbmRlZElucHV0PXMsaShzKTtoLnRyYWNlSXMocywiY2FycGV0QXhpcyIpJiYocFtzLmNhcnBldF09cyksaC50cmFjZUlzKHMsImNhcnBldERlcGVuZGVudCIpJiZtLnB1c2gobyl9Zm9yKG89MDtvPG0ubGVuZ3RoO28rKylpZihzPWVbbVtvXV0scy52aXNpYmxlKXt2YXIgdz1wW3MuY2FycGV0XTtzLl9jYXJwZXQ9dyx3JiZ3LnZpc2libGU/KHMueGF4aXM9dy54YXhpcyxzLnlheGlzPXcueWF4aXMpOnMudmlzaWJsZT0hMX19LHYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBkLmNvZXJjZSh0fHx7fSxuLGcsZSxyKX10PXR8fHt9O3ZhciByLG49e307aWYoZSgibW9kZSIpLGUoImRpcmVjdGlvbiIpLGUoImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Iobi5mcmFtZT1bXSxyPTA7cjx0LmZyYW1lLmxlbmd0aDtyKyspbi5mcmFtZVtyXT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtyXXx8e30pO2Vsc2Ugbi5mcmFtZT12LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Iobi50cmFuc2l0aW9uPVtdLHI9MDtyPHQudHJhbnNpdGlvbi5sZW5ndGg7cisrKW4udHJhbnNpdGlvbltyXT12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bcl18fHt9KTtlbHNlIG4udHJhbnNpdGlvbj12LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gbn0sdi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZC5jb2VyY2UodHx8e30scixnLmZyYW1lLGUsbil9dmFyIHI9e307cmV0dXJuIGUoImR1cmF0aW9uIiksZSgicmVkcmF3Iikscn0sdi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBkLmNvZXJjZSh0fHx7fSxyLGcudHJhbnNpdGlvbixlLG4pfXZhciByPXt9O3JldHVybiBlKCJkdXJhdGlvbiIpLGUoImVhc2luZyIpLHJ9LHYuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGQuY29lcmNlKHQscix5LGUsbil9dmFyIHI9e307cmV0dXJuIGUoImdyb3VwIiksZSgibmFtZSIpLGUoInRyYWNlcyIpLGUoImJhc2VmcmFtZSIpLGUoImRhdGEiKSxlKCJsYXlvdXQiKSxyfSx2LnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gaShlLHIpe3JldHVybiBkLmNvZXJjZSh0LG8sdi5hdHRyaWJ1dGVzLGUscil9ZnVuY3Rpb24gYShlLHIpe2lmKHYudHJhY2VJcyhvLGUpKXJldHVybiBkLmNvZXJjZSh0LG8sdi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMscil9dmFyIG89e30scz1wLmRlZmF1bHRzW2UlcC5kZWZhdWx0cy5sZW5ndGhdLGw9aSgidmlzaWJsZSIpO2koInR5cGUiKSxpKCJ1aWQiKSxpKCJuYW1lIiwidHJhY2UgIituKTtmb3IodmFyIGM9T2JqZWN0LmtleXMoeCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2lmKFsiY2FydGVzaWFuIiwiZ2wyZCJdLmluZGV4T2YoZik9PT0tMSl7dmFyIG09eFtmXS5hdHRyO20mJmEoZixtKX19aWYobCl7aSgiY3VzdG9tZGF0YSIpLGkoImlkcyIpO3ZhciBnPXYuZ2V0TW9kdWxlKG8pO28uX21vZHVsZT1nLHYudHJhY2VJcyhvLCJzaG93TGVnZW5kIikmJihpKCJzaG93bGVnZW5kIiksaSgibGVnZW5kZ3JvdXAiKSksaC5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5RGVmYXVsdHMiKSh0LG8scyxyKSxnJiYoZy5zdXBwbHlEZWZhdWx0cyh0LG8scyxyKSxkLmNvZXJjZUhvdmVyaW5mbyh0LG8scikpLHYudHJhY2VJcyhvLCJub09wYWNpdHkiKXx8aSgib3BhY2l0eSIpLGEoImNhcnRlc2lhbiIsInhheGlzIiksYSgiY2FydGVzaWFuIiwieWF4aXMiKSxhKCJnbDJkIiwieGF4aXMiKSxhKCJnbDJkIiwieWF4aXMiKSx2LnRyYWNlSXMobywibm90TGVnZW5kSXNvbGF0YWJsZSIpJiYoby52aXNpYmxlPSEhby52aXNpYmxlKSx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsbyxyKX1yZXR1cm4gb30sdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10saT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGE9dC50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGEpLHM9ZS50cmFuc2Zvcm1zPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIGMsdT1vW2xdLGY9dS50eXBlLGg9X1tmXSxwPSEodS5fbW9kdWxlJiZ1Ll9tb2R1bGU9PT1oKSxtPWgmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLnRyYW5zZm9ybTtofHxkLndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2YrIi4iKSxoJiZoLnN1cHBseURlZmF1bHRzJiYocHx8bSk/KGM9aC5zdXBwbHlEZWZhdWx0cyh1LGUscix0KSxjLnR5cGU9ZixjLl9tb2R1bGU9aCxkLnB1c2hVbmlxdWUoaSxoKSk6Yz1kLmV4dGVuZEZsYXQoe30sdSkscy5wdXNoKGMpfX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gZC5jb2VyY2UodCxlLHYubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBuPWQuY29lcmNlRm9udChyLCJmb250Iik7cigidGl0bGUiKSxkLmNvZXJjZUZvbnQociwidGl0bGVmb250Iix7ZmFtaWx5Om4uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqbi5zaXplKSxjb2xvcjpuLmNvbG9yfSkscigiYXV0b3NpemUiLCEodC53aWR0aCYmdC5oZWlnaHQpKSxyKCJ3aWR0aCIpLHIoImhlaWdodCIpLHIoIm1hcmdpbi5sIikscigibWFyZ2luLnIiKSxyKCJtYXJnaW4udCIpLHIoIm1hcmdpbi5iIikscigibWFyZ2luLnBhZCIpLHIoIm1hcmdpbi5hdXRvZXhwYW5kIiksdC53aWR0aCYmdC5oZWlnaHQmJnYuc2FuaXRpemVNYXJnaW5zKGUpLHIoInBhcGVyX2JnY29sb3IiKSxyKCJzZXBhcmF0b3JzIikscigiaGlkZXNvdXJjZXMiKSxoLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIiksaC5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKSh0LGUscil9LHYucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dC5fY29udGV4dHx8e30scz1hLmZyYW1lTWFyZ2lucyxsPWQuaXNQbG90RGl2KHQpO2lmKGwmJnQuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksYS5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2UgaWYoYyhzKSYmcz4wKXt2YXIgdT1vKHQuX2JvdW5kaW5nQm94TWFyZ2lucyksZj11LmxlZnQrdS5yaWdodCxoPXUuYm90dG9tK3UudG9wLHA9MS0yKnMsbT1yLl9jb250YWluZXImJnIuX2NvbnRhaW5lci5ub2RlP3IuX2NvbnRhaW5lci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3dpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fTtuPU1hdGgucm91bmQocCoobS53aWR0aC1mKSksaT1NYXRoLnJvdW5kKHAqKG0uaGVpZ2h0LWgpKX1lbHNle3ZhciBnPWw/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307bj1wYXJzZUZsb2F0KGcud2lkdGgpfHxyLndpZHRoLGk9cGFyc2VGbG9hdChnLmhlaWdodCl8fHIuaGVpZ2h0fXZhciB5PXYubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4sYj12LmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPHkmJihuPXkpLGk8YiYmKGk9Yik7dmFyIHg9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxfPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtaSk+MTsoX3x8eCkmJih4JiYoci53aWR0aD1uKSxfJiYoci5oZWlnaHQ9aSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6aX0pLHYuc2FuaXRpemVNYXJnaW5zKHIpfSx2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7dS5BeGVzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgbz1lLl9iYXNlUGxvdE1vZHVsZXM7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylhPW9baV0sImNhcnRlc2lhbiIhPT1hLm5hbWUmJmEuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJmEuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBzPWUuX21vZHVsZXM7Zm9yKGk9MDtpPHMubGVuZ3RoO2krKylhPXNbaV0sYS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGw9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3IoaT0wO2k8bC5sZW5ndGg7aSsrKWE9bFtpXSxhLnN1cHBseUxheW91dERlZmF1bHRzJiZhLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO3ZhciBjPU9iamVjdC5rZXlzKGguY29tcG9uZW50c1JlZ2lzdHJ5KTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKWE9aC5jb21wb25lbnRzUmVnaXN0cnlbY1tpXV0sYS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LHYucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307dm9pZCAwIT09ZS5fZ2xjb250YWluZXImJmUuX2dsY29udGFpbmVyLnJlbW92ZSgpLHZvaWQgMCE9PWUuX2dlb2NvbnRhaW5lciYmZS5fZ2VvY29udGFpbmVyLnJlbW92ZSgpLGUuX21vZGVCYXImJmUuX21vZGVCYXIuZGVzdHJveSgpLHQuX3RyYW5zaXRpb25EYXRhJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MubGVuZ3RoPTApLHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmKSksZGVsZXRlIHQuZGF0YSxkZWxldGUgdC5sYXlvdXQsZGVsZXRlIHQuX2Z1bGxEYXRhLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0LGRlbGV0ZSB0LmNhbGNkYXRhLGRlbGV0ZSB0LmZyYW1ld29yayxkZWxldGUgdC5lbXB0eSxkZWxldGUgdC5maWQsZGVsZXRlIHQudW5kb3F1ZXVlLGRlbGV0ZSB0LnVuZG9udW0sZGVsZXRlIHQuYXV0b3BsYXksZGVsZXRlIHQuY2hhbmdlZCxkZWxldGUgdC5fcHJvbWlzZXMsZGVsZXRlIHQuX3JlZHJhd1RpbWVyLGRlbGV0ZSB0LmZpcnN0c2NhdHRlcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsCmRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fcmVwbG90UGVuZGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sdi5zdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dC5fbW9kdWxlcyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5zdHlsZSYmbi5zdHlsZSh0KX19LHYuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LHYuYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZihuLl9wdXNobWFyZ2lufHwobi5fcHVzaG1hcmdpbj17fSksbi5tYXJnaW4uYXV0b2V4cGFuZCE9PSExKXtpZihyKXt2YXIgaT12b2lkIDA9PT1yLnBhZD8xMjpyLnBhZDtyLmwrci5yPi41Km4ud2lkdGgmJihyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihyLmI9ci50PTApLG4uX3B1c2htYXJnaW5bZV09e2w6e3ZhbDpyLngsc2l6ZTpyLmwraX0scjp7dmFsOnIueCxzaXplOnIucitpfSxiOnt2YWw6ci55LHNpemU6ci5iK2l9LHQ6e3ZhbDpyLnksc2l6ZTpyLnQraX19fWVsc2UgZGVsZXRlIG4uX3B1c2htYXJnaW5bZV07bi5fcmVwbG90dGluZ3x8di5kb0F1dG9NYXJnaW4odCl9fSx2LmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NpemV8fChlLl9zaXplPXt9KSxlLl9wdXNobWFyZ2lufHwoZS5fcHVzaG1hcmdpbj17fSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLGk9TWF0aC5tYXgoZS5tYXJnaW4ubHx8MCwwKSxhPU1hdGgubWF4KGUubWFyZ2luLnJ8fDAsMCksbz1NYXRoLm1heChlLm1hcmdpbi50fHwwLDApLHM9TWF0aC5tYXgoZS5tYXJnaW4uYnx8MCwwKSxsPWUuX3B1c2htYXJnaW47aWYoZS5tYXJnaW4uYXV0b2V4cGFuZCE9PSExKXtsLmJhc2U9e2w6e3ZhbDowLHNpemU6aX0scjp7dmFsOjEsc2l6ZTphfSx0Ont2YWw6MSxzaXplOm99LGI6e3ZhbDowLHNpemU6c319O2Zvcih2YXIgZj1PYmplY3Qua2V5cyhsKSxoPTA7aDxmLmxlbmd0aDtoKyspZm9yKHZhciBkPWZbaF0scD1sW2RdLmx8fHt9LG09bFtkXS5ifHx7fSx2PXAudmFsLGc9cC5zaXplLHk9bS52YWwsYj1tLnNpemUseD0wO3g8Zi5sZW5ndGg7eCsrKXt2YXIgXz1mW3hdO2lmKGMoZykmJmxbX10ucil7dmFyIHc9bFtfXS5yLnZhbCxNPWxbX10uci5zaXplO2lmKHc+dil7dmFyIFQ9KGcqdysoTS1lLndpZHRoKSp2KS8ody12KSxrPShNKigxLXYpKyhnLWUud2lkdGgpKigxLXcpKS8ody12KTtUPj0wJiZrPj0wJiZUK2s+aSthJiYoaT1ULGE9ayl9fWlmKGMoYikmJmxbX10udCl7dmFyIEE9bFtfXS50LnZhbCxFPWxbX10udC5zaXplO2lmKEE+eSl7dmFyIFM9KGIqQSsoRS1lLmhlaWdodCkqeSkvKEEteSksTD0oRSooMS15KSsoYi1lLmhlaWdodCkqKDEtQSkpLyhBLXkpO1M+PTAmJkw+PTAmJlMrTD5zK28mJihzPVMsbz1MKX19fX1pZihyLmw9TWF0aC5yb3VuZChpKSxyLnI9TWF0aC5yb3VuZChhKSxyLnQ9TWF0aC5yb3VuZChvKSxyLmI9TWF0aC5yb3VuZChzKSxyLnA9TWF0aC5yb3VuZChlLm1hcmdpbi5wYWQpLHIudz1NYXRoLnJvdW5kKGUud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQoZS5oZWlnaHQpLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJiJ7fSIhPT1uJiZuIT09SlNPTi5zdHJpbmdpZnkoZS5fc2l6ZSkpcmV0dXJuIHUucGxvdCh0KX0sdi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGQuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJlsiXyIsIlsiXS5pbmRleE9mKGUuY2hhckF0KDApKT09PS0xKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWQuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7aVtlXT1hKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGEpOmQuaXNKU0RhdGUodCk/ZC5tczJEYXRlVGltZUxvY2FsKCt0KTp0fShpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnYuc3VwcGx5RGVmYXVsdHModCk7dmFyIG89aT90Ll9mdWxsRGF0YTp0LmRhdGEscz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQsbD0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzLGM9e2RhdGE6KG98fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9YSh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fChjLmxheW91dD1hKHMpKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKGM9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLGwmJihjLmZyYW1lcz1hKGwpKSwib2JqZWN0Ij09PW4/YzpKU09OLnN0cmluZ2lmeShjKX0sdi5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaChuPWVbcl0sbi50eXBlKXtjYXNlInJlcGxhY2UiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2UiaW5zZXJ0IjppPW4udmFsdWUsb1tpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2UiZGVsZXRlIjppPWFbbi5pbmRleF0sZGVsZXRlIG9baS5uYW1lXSxhLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdi5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJmMuaW5kZXhPZihzLm5hbWUpPT09LTE7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyl2b2lkIDAhPT0oaT1uW3JdKSYmbnVsbCE9PWkmJihhPXUudHJhY2VzLmluZGV4T2YoaSksYT09PS0xJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT12LmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sdi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGY9ZC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGg9ZC5leHBhbmRPYmplY3RQYXRocyhmKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspbj1kLm5lc3RlZFByb3BlcnR5KGgsclthXSksaT1uLmdldCgpLHZvaWQgMD09PWk/ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1kLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxoKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHM9ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLGM9cy5nZXQoKSl7Zm9yKGw9ZC5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pLHU9bC5nZXQoKSxBcnJheS5pc0FycmF5KHUpfHwodT1bXSxsLnNldCh1KSksbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgbT1jW29dO3Vbb109bnVsbD09PW0/bnVsbDp2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHVbb10sbSl9bC5zZXQodSl9cmV0dXJuIHR9LHYuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiXSx2LmxheW91dEFycmF5Q29udGFpbmVycz1oLmxheW91dEFycmF5Q29udGFpbmVycyx2LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYuZGF0YUFycmF5Q29udGFpbmVycyl9LHYuZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYubGF5b3V0QXJyYXlDb250YWluZXJzKX0sdi50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKCl7dmFyIG47Zm9yKG49MDtuPHkubGVuZ3RoO24rKyl7dmFyIGk9eVtuXSxhPXQuX2Z1bGxEYXRhW2ldLG89YS5fbW9kdWxlO28mJihvLmFuaW1hdGFibGUmJmIucHVzaChpKSx0LmRhdGFbeVtuXV09di5leHRlbmRUcmFjZSh0LmRhdGFbeVtuXV0sZVtuXSkpfXZhciBzPWQuZXhwYW5kT2JqZWN0UGF0aHMoZC5leHRlbmREZWVwTm9BcnJheXMoe30scikpLGw9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgYyBpbiBzKWwudGVzdChjKSYmZGVsZXRlIHNbY10ucmFuZ2U7cmV0dXJuIHYuZXh0ZW5kTGF5b3V0KHQubGF5b3V0LHMpLGRlbGV0ZSB0LmNhbGNkYXRhLHYuc3VwcGx5RGVmYXVsdHModCksdi5kb0NhbGNkYXRhKHQpLHcuY2FsYyh0KSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVByb21pc2UucmVzb2x2ZSgpO2lmKCF0KXJldHVybiBlO2Zvcig7dC5sZW5ndGg7KWU9ZS50aGVuKHQuc2hpZnQoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gbCh0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX1mdW5jdGlvbiBjKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIGwrKyxmdW5jdGlvbigpe2MrKyx4fHxjIT09bHx8ZihlKX19dC5fdHJhbnNpdGlvbmluZz0hMCxhLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt4PSEwfSksaS5yZWRyYXcmJnQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB1LnJlZHJhdyh0KX0pLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSk7dmFyIG8scyxsPTAsYz0wLGg9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHA9ITE7aWYocilmb3Iocz0wO3M8aC5sZW5ndGg7cysrKWlmKGhbc10udHJhbnNpdGlvbkF4ZXMpe3ZhciBtPWQuZXhwYW5kT2JqZWN0UGF0aHMocik7cD1oW3NdLnRyYW5zaXRpb25BeGVzKHQsbSxhLG4pfHxwfWZvcihwPyhvPWQuZXh0ZW5kRmxhdCh7fSxhKSxvLmR1cmF0aW9uPTApOm89YSxzPTA7czxoLmxlbmd0aDtzKyspaFtzXS5wbG90KHQsYixvLG4pO3NldFRpbWVvdXQobigpKX0pfWZ1bmN0aW9uIGYoZSl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIGwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKGkucmVkcmF3KXJldHVybiB1LnJlZHJhdyh0KX0pLnRoZW4oZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmVkIixbXSl9KS50aGVuKGUpfWZ1bmN0aW9uIGgoKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxzKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpfXZhciBwLG0sZz1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAseT1uLnNsaWNlKDAsZyksYj1bXSx4PSExO2ZvcihwPTA7cDx5Lmxlbmd0aDtwKyspe209eVtwXTt2YXIgXz10Ll9mdWxsRGF0YVttXSxNPV8uX21vZHVsZTtpZihNJiYhTS5hbmltYXRhYmxlKXt2YXIgVD17fTtmb3IodmFyIGsgaW4gZVtwXSlUW2tdPVtlW3BdW2tdXX19dmFyIEE9W3YucHJldmlvdXNQcm9taXNlcyxoLG8sdi5yZWhvdmVyLGNdLEU9ZC5zeW5jT3JBc3luYyhBLHQpO3JldHVybiBFJiZFLnRoZW58fChFPVByb21pc2UucmVzb2x2ZSgpKSxFLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0pfSx2LmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXUuQXhlcy5saXN0KHQpLGw9dC5fZnVsbERhdGEsYz10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KGwubGVuZ3RoKSxwPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9ZCx0LmZpcnN0c2NhdHRlcj0hMCxjLl9udW1Cb3hlcz0wLGMuX251bVZpb2xpbnM9MCxjLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxjLl9waWVjb2xvcm1hcD17fSxjLl9waWVkZWZhdWx0Y29sb3Jjb3VudD0wLGk9MDtpPGwubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiZlLmluZGV4T2YoaSk9PT0tMSYmKGRbaV09cFtpXSk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKylyPWxbaV0sci5fYXJyYXlBdHRycz1mLmZpbmRBcnJheUF0dHJpYnV0ZXMocik7cyhvKTt2YXIgdj0hMTtmb3IoaT0wO2k8bC5sZW5ndGg7aSsrKWlmKHI9bFtpXSxyLnZpc2libGU9PT0hMCYmci50cmFuc2Zvcm1zKWZvcihuPXIuX21vZHVsZSxuJiZuLmNhbGMmJm4uY2FsYyh0LHIpLGE9MDthPHIudHJhbnNmb3Jtcy5sZW5ndGg7YSsrKXt2YXIgZz1yLnRyYW5zZm9ybXNbYV07bj1fW2cudHlwZV0sbiYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx2PSEwLG4uY2FsY1RyYW5zZm9ybSh0LHIsZykpfWlmKHYpe2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5fbWluPVtdLG9baV0uX21heD1bXSxvW2ldLl9jYXRlZ29yaWVzPVtdLG9baV0uX2NhdGVnb3JpZXNNYXA9e307cyhvKX1mb3IoaT0wO2k8bC5sZW5ndGg7aSsrKXt2YXIgeT1bXTtyPWxbaV0sci52aXNpYmxlPT09ITAmJihuPXIuX21vZHVsZSkmJm4uY2FsYyYmKHk9bi5jYWxjKHQscikpLEFycmF5LmlzQXJyYXkoeSkmJnlbMF18fCh5PVt7eDptLHk6bX1dKSx5WzBdLnR8fCh5WzBdLnQ9e30pLHlbMF0udHJhY2U9cixkW2ldPXl9aC5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpfSx2LnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSx2LmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saT10LnRyYWNlSGFzaCxhPXt9O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBvPWVbbl0scz1vWzBdLnRyYWNlO3MudmlzaWJsZSYmKGFbcy50eXBlXT1hW3MudHlwZV18fFtdLGFbcy50eXBlXS5wdXNoKG8pKX12YXIgbD1PYmplY3Qua2V5cyhpKSxjPU9iamVjdC5rZXlzKGEpO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspe3ZhciB1PWxbbl07aWYoYy5pbmRleE9mKHUpPT09LTEpe3ZhciBmPWlbdV1bMF07ZlswXS50cmFjZS52aXNpYmxlPSExLGFbdV09W2ZdfX1mb3IoYz1PYmplY3Qua2V5cyhhKSxuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPWFbY1tuXV07aFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO25bMF0udHJhY2UudmlzaWJsZT09PSEwJiZlLnB1c2gobil9cmV0dXJuIGV9KGgpLHIpfXQudHJhY2VIYXNoPWF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjY0MSwiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi9saWIiOjczNSwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjc2OCwiLi4vcGxvdGx5Ijo3NzQsIi4uL3JlZ2lzdHJ5Ijo4NTMsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc3NSwiLi9hdHRyaWJ1dGVzIjo3NzcsIi4vY29tbWFuZCI6ODAyLCIuL2ZvbnRfYXR0cmlidXRlcyI6ODAzLCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjgwNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODI5LGQzOjEyMSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDgzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIiksaT1uLm1hcmtlcjtlLmV4cG9ydHM9e3I6bi5yLHQ6bi50LG1hcmtlcjp7Y29sb3I6aS5jb2xvcixzaXplOmkuc2l6ZSxzeW1ib2w6aS5zeW1ib2wsb3BhY2l0eTppLm9wYWNpdHksZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA0NX1dLDg0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiJ9LHRpY2tvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl19LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxlbmRwYWRkaW5nOnt2YWxUeXBlOiJudW1iZXIifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX12YXIgaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9YSh7fSxpLmRvbWFpbix7fSk7ZS5leHBvcnRzPW8oe3JhZGlhbGF4aXM6bigicmFkaWFsIix7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sZG9tYWluOnMsb3JpZW50YXRpb246e3ZhbFR5cGU6Im51bWJlciJ9fSksYW5ndWxhcmF4aXM6bigiYW5ndWxhciIse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSx7dmFsVHlwZToibnVtYmVyIixkZmx0OjM2MH1dfSxkb21haW46c30pLGxheW91dDp7ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl19LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJhbmdsZSJ9fX0sInBsb3QiLCJuZXN0ZWQiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTB9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGUuZXhwb3J0cz10KCIuL21pY3JvcG9sYXIiKSkubWFuYWdlcj10KCIuL21pY3JvcG9sYXJfbWFuYWdlciIpfSx7Ii4vbWljcm9wb2xhciI6ODQyLCIuL21pY3JvcG9sYXJfbWFuYWdlciI6ODQzfV0sODQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxzPWUuZXhwb3J0cz17dmVyc2lvbjoiMC4yLjIifTtzLkF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3I9dHx8cjt2YXIgdT1jLmRhdGEsaD1jLmxheW91dDtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiByfHxyLm5vZGVOYW1lKSYmKHI9bi5zZWxlY3QocikpLHIuZGF0dW0odSkuZWFjaChmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gbCh0KSUzNjAraC5vcmllbnRhdGlvbn12YXIgdT10LnNsaWNlKCk7Zj17ZGF0YTpzLnV0aWwuY2xvbmVKc29uKHUpLGxheW91dDpzLnV0aWwuY2xvbmVKc29uKGgpfTt2YXIgZD0wO3UuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuY29sb3J8fCh0LmNvbG9yPWguZGVmYXVsdENvbG9yUmFuZ2VbZF0sZD0oZCsxKSVoLmRlZmF1bHRDb2xvclJhbmdlLmxlbmd0aCksdC5zdHJva2VDb2xvcnx8KHQuc3Ryb2tlQ29sb3I9IkxpbmVQbG90Ij09PXQuZ2VvbWV0cnk/dC5jb2xvcjpuLnJnYih0LmNvbG9yKS5kYXJrZXIoKS50b1N0cmluZygpKSxmLmRhdGFbZV0uY29sb3I9dC5jb2xvcixmLmRhdGFbZV0uc3Ryb2tlQ29sb3I9dC5zdHJva2VDb2xvcixmLmRhdGFbZV0uc3Ryb2tlRGFzaD10LnN0cm9rZURhc2gsZi5kYXRhW2VdLnN0cm9rZVNpemU9dC5zdHJva2VTaXplfSk7dmFyIHA9dS5maWx0ZXIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuIHZvaWQgMD09PXJ8fHI9PT0hMH0pLG09ITEsdj1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBtPW18fHZvaWQgMCE9PXQuZ3JvdXBJZCx0fSk7aWYobSl7dmFyIGc9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KS5lbnRyaWVzKHYpLHk9W10sYj1nLm1hcChmdW5jdGlvbih0LGUpe2lmKCJ1bnN0YWNrZWQiPT09dC5rZXkpcmV0dXJuIHQudmFsdWVzO3ZhciByPXQudmFsdWVzWzBdLnIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0LGUsbil7dC55U3RhY2s9W3JdLHkucHVzaChyKSxyPXMudXRpbC5zdW1BcnJheXModC5yLHIpfSksdC52YWx1ZXN9KTtwPW4ubWVyZ2UoYil9cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC50PUFycmF5LmlzQXJyYXkodC50WzBdKT90LnQ6W3QudF0sdC5yPUFycmF5LmlzQXJyYXkodC5yWzBdKT90LnI6W3Qucl19KTt2YXIgeD1NYXRoLm1pbihoLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBfLHc9W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF07aWYobSl7Xz1bMCxuLm1heChzLnV0aWwuc3VtQXJyYXlzKHMudXRpbC5hcnJheUxhc3QocCkuclswXSxzLnV0aWwuYXJyYXlMYXN0KHkpKSldfWVsc2UgXz1uLmV4dGVudChzLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSk7aC5yYWRpYWxBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYoX1swXT0wKSxpPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGgucmFkaWFsQXhpcy5kb21haW4hPXMuREFUQUVYVEVOVCYmaC5yYWRpYWxBeGlzLmRvbWFpbj9oLnJhZGlhbEF4aXMuZG9tYWluOl8pLnJhbmdlKFswLHhdKSxmLmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1pLmRvbWFpbigpO3ZhciBNLFQ9cy51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksaz0ic3RyaW5nIj09dHlwZW9mIFRbMF07ayYmKFQ9cy51dGlsLmRlZHVwbGljYXRlKFQpLE09VC5zbGljZSgpLFQ9bi5yYW5nZShULmxlbmd0aCkscD1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXQ7cmV0dXJuIHQudD1bVF0sbSYmKHIueVN0YWNrPXQueVN0YWNrKSxyfSkpO3ZhciBBPXAuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxFPW51bGw9PT1oLm5lZWRzRW5kU3BhY2luZz9rfHwhQTpoLm5lZWRzRW5kU3BhY2luZyxTPWguYW5ndWxhckF4aXMuZG9tYWluJiZoLmFuZ3VsYXJBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYhayYmaC5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTAsTD1TP2guYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KFQpLEM9TWF0aC5hYnMoVFsxXS1UWzBdKTtBJiYhayYmKEM9MCk7dmFyIEk9TC5zbGljZSgpO0UmJmsmJihJWzFdKz1DKTt2YXIgRD1oLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7RD44JiYoRD1ELyhELzgpK0QlOCksaC5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihEPShJWzFdLUlbMF0pL0QpO3ZhciBQPWguYW5ndWxhckF4aXMudGlja3NTdGVwfHwoSVsxXS1JWzBdKS8oRCooaC5taW5vclRpY2tzKzEpKTtNJiYoUD1NYXRoLm1heChNYXRoLnJvdW5kKFApLDEpKSxJWzJdfHwoSVsyXT1QKTt2YXIgej1uLnJhbmdlLmFwcGx5KHRoaXMsSSk7aWYoej16Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudG9QcmVjaXNpb24oMTIpKX0pLGw9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oSS5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWguZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksZi5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPWwuZG9tYWluKCksZi5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1FP0M6MCx2b2lkIDA9PT0oZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHxlLmVtcHR5KCkpe3ZhciBPPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksUj10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKE8uZG9jdW1lbnRFbGVtZW50LCEwKSk7ZT1uLnNlbGVjdChSKX1lLnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLGUuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksZS5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBGLGo9ZS5zZWxlY3QoIi5jaGFydC1ncm91cCIpLE49e2ZpbGw6Im5vbmUiLHN0cm9rZTpoLnRpY2tDb2xvcn0sQj17ImZvbnQtc2l6ZSI6aC5mb250LnNpemUsImZvbnQtZmFtaWx5IjpoLmZvbnQuZmFtaWx5LGZpbGw6aC5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiAiK3QrIiAwICIraC5mb250Lm91dGxpbmVDb2xvcn0pLmpvaW4oIiwiKX07aWYoaC5zaG93TGVnZW5kKXtGPWUuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxoLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgVT1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD12b2lkIDA9PT10LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO3MuTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8IkVsZW1lbnQiK2V9KSxsZWdlbmRDb25maWc6YSh7fSxzLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6RixlbGVtZW50czpVLHJldmVyc2VPcmRlcjpoLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIFY9Ri5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oaC53aWR0aC1WLndpZHRoLWgubWFyZ2luLmxlZnQtaC5tYXJnaW4ucmlnaHQsaC5oZWlnaHQtaC5tYXJnaW4udG9wLWgubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLHc9W2gubWFyZ2luLmxlZnQreCxoLm1hcmdpbi50b3AreF0saS5yYW5nZShbMCx4XSksZi5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49aS5kb21haW4oKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1t3WzBdK3gsd1sxXS14XSsiKSIpfWVsc2UgRj1lLnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO2UuYXR0cih7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHl9KSxqLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIEg9WyhoLndpZHRoLShoLm1hcmdpbi5sZWZ0K2gubWFyZ2luLnJpZ2h0KzIqeCsoVj9WLndpZHRoOjApKSkvMiwoaC5oZWlnaHQtKGgubWFyZ2luLnRvcCtoLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoSFswXT1NYXRoLm1heCgwLEhbMF0pLEhbMV09TWF0aC5tYXgoMCxIWzFdKSxlLnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSCsiKSIpLGgudGl0bGUpe3ZhciBxPWUuc2VsZWN0KCJnLnRpdGxlLWdyb3VwIHRleHQiKS5zdHlsZShCKS50ZXh0KGgudGl0bGUpLEc9cS5ub2RlKCkuZ2V0QkJveCgpO3EuYXR0cih7eDp3WzBdLUcud2lkdGgvMix5OndbMV0teC0yMH0pfXZhciBZPWUuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihoLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIFg9WS5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoaS50aWNrcyg1KSk7WC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKE4pLFguYXR0cigiciIsaSksWC5leGl0KCkucmVtb3ZlKCl9WS5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKE4pO3ZhciBXPWUuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpoLmJhY2tncm91bmRDb2xvcixzdHJva2U6aC5zdHJva2V9KTtpZihoLnJhZGlhbEF4aXMudmlzaWJsZSl7dmFyIFo9bi5zdmcuYXhpcygpLnNjYWxlKGkpLnRpY2tzKDUpLnRpY2tTaXplKDUpO1kuY2FsbChaKS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK2gucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSJ9KSxZLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKE4pLFkuc2VsZWN0QWxsKCJnPnRleHQiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQraC5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJob3Jpem9udGFsIj09PWgucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1oLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIn19KSxZLnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIEo9ZS5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YSh6KSxLPUouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtKLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3RhdGUoIitjKHQsZSkrIikifX0pLnN0eWxlKHtkaXNwbGF5OmguYW5ndWxhckF4aXMudmlzaWJsZT8iYmxvY2siOiJub25lIn0pLEouZXhpdCgpLnJlbW92ZSgpLEsuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3JpZC1saW5lIiwhMCkuY2xhc3NlZCgibWFqb3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoIm1pbm9yIixmdW5jdGlvbih0LGUpe3JldHVybiEoZSUoaC5taW5vclRpY2tzKzEpPT0wKX0pLnN0eWxlKE4pLEsuc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmgubWlub3JUaWNrQ29sb3J9KSxKLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpoLnRpY2tMZW5ndGg/eC1oLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6aC5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksSy5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgUT1KLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngraC5sYWJlbE9mZnNldCxkeTpvKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpLG49eCtoLmxhYmVsT2Zmc2V0LGk9aC5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1pPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09aT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpoLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKSE9MD8iIjpNP01bdF0raC5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2guYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtoLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmUS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGgubWlub3JUaWNrcysxKSE9MD8iIjpoLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyICQ9bi5tYXgoai5zZWxlY3RBbGwoIi5hbmd1bGFyLXRpY2sgdGV4dCIpWzBdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmdldENUTSgpLmUrdC5nZXRCQm94KCkud2lkdGh9KSk7Ri5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4KyQsaC5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgdHQ9ZS5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCxldD1lLnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYoZXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSxldC5leGl0KCkucmVtb3ZlKCkscFswXXx8dHQpe3ZhciBydD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyLnJhZGlhbFNjYWxlPWksci5hbmd1bGFyU2NhbGU9bCxyLmNvbnRhaW5lcj1ldC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLHIuZ2VvbWV0cnk9dC5nZW9tZXRyeSxyLm9yaWVudGF0aW9uPWgub3JpZW50YXRpb24sci5kaXJlY3Rpb249aC5kaXJlY3Rpb24sci5pbmRleD1lLHJ0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpyfSl9KTt2YXIgbnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZGF0YS5ncm91cElkfHwidW5zdGFja2VkIn0pLmVudHJpZXMocnQpLGl0PVtdO250LmZvckVhY2goZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P2l0PWl0LmNvbmNhdCh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdF19KSk6aXQucHVzaCh0LnZhbHVlcyl9KSxpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1BcnJheS5pc0FycmF5KHQpP3RbMF0uZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk6dC5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTt2YXIgbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhKHNbcl0uZGVmYXVsdENvbmZpZygpLHQpfSk7c1tyXSgpLmNvbmZpZyhuKSgpfSl9dmFyIGF0LG90LHN0PWUuc2VsZWN0KCIuZ3VpZGVzLWdyb3VwIiksbHQ9ZS5zZWxlY3QoIi50b29sdGlwcy1ncm91cCIpLGN0PXMudG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6bHQsZm9udFNpemU6OH0pKCksdXQ9cy50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpsdCxmb250U2l6ZTo4fSkoKSxmdD1zLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOmx0LGhhc1RpY2s6ITB9KSgpO2lmKCFrKXt2YXIgaHQ9c3Quc2VsZWN0KCJsaW5lIikuYXR0cih7eDE6MCx5MTowLHkyOjB9KS5zdHlsZSh7c3Ryb2tlOiJncmV5IiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO2oub24oIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5hbmdsZTtodC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWgub3JpZW50YXRpb24pJTM2MDthdD1sLmludmVydChuKTt2YXIgaT1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO2N0LnRleHQocy51dGlsLnJvdW5kKGF0KSkubW92ZShbaVswXSt3WzBdLGlbMV0rd1sxXV0pfSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7c3Quc2VsZWN0KCJsaW5lIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGR0PXN0LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtqLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5yYWRpdXM7ZHQuYXR0cih7cjpyfSkuc3R5bGUoe29wYWNpdHk6LjV9KSxvdD1pLmludmVydChzLnV0aWwuZ2V0TW91c2VQb3MoVykucmFkaXVzKTt2YXIgbj1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHIsaC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTt1dC50ZXh0KHMudXRpbC5yb3VuZChvdCkpLm1vdmUoW25bMF0rd1swXSxuWzFdK3dbMV1dKX0pLm9uKCJtb3VzZW91dC5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7ZHQuc3R5bGUoe29wYWNpdHk6MH0pLGZ0LmhpZGUoKSxjdC5oaWRlKCksdXQuaGlkZSgpfSksZS5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXRoaXMuc3R5bGUuZmlsbCxvPSJibGFjayIsbD10aGlzLnN0eWxlLm9wYWNpdHl8fDE7aWYoaS5hdHRyKHsiZGF0YS1vcGFjaXR5IjpsfSksYSYmIm5vbmUiIT09YSl7aS5hdHRyKHsiZGF0YS1maWxsIjphfSksbz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe2ZpbGw6byxvcGFjaXR5OjF9KTt2YXIgYz17dDpzLnV0aWwucm91bmQodFswXSkscjpzLnV0aWwucm91bmQodFsxXSl9O2smJihjLnQ9TVt0WzBdXSk7dmFyIHU9InQ6ICIrYy50KyIsIHI6ICIrYy5yLGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9W2YubGVmdCtmLndpZHRoLzItSFswXS1oLmxlZnQsZi50b3ArZi5oZWlnaHQvMi1IWzFdLWgudG9wXTtmdC5jb25maWcoe2NvbG9yOm99KS50ZXh0KHUpLGZ0Lm1vdmUoZCl9ZWxzZSBhPXRoaXMuc3R5bGUuc3Ryb2tlfHwiYmxhY2siLGkuYXR0cih7ImRhdGEtc3Ryb2tlIjphfSksbz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe3N0cm9rZTpvLG9wYWNpdHk6MX0pfSkub24oIm1vdXNlbW92ZS50b29sdGlwIixmdW5jdGlvbih0LGUpe2lmKDAhPW4uZXZlbnQud2hpY2gpcmV0dXJuITE7bi5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1maWxsIikmJmZ0LnNob3coKX0pLm9uKCJtb3VzZW91dC50b29sdGlwIixmdW5jdGlvbih0LGUpe2Z0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cigiZGF0YS1maWxsIik7aT9yLnN0eWxlKHtmaWxsOmksb3BhY2l0eTpyLmF0dHIoImRhdGEtb3BhY2l0eSIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cigiZGF0YS1zdHJva2UiKSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KX0pfSksZH12YXIgZSxyLGksbCxjPXtkYXRhOltdLGxheW91dDp7fX0sdT17fSxmPXt9LGg9bi5kaXNwYXRjaCgiaG92ZXIiKSxkPXt9O3JldHVybiBkLnJlbmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlKSx0aGlzfSxkLmNvbmZpZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYzt2YXIgZT1zLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiBlLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2MuZGF0YVtlXXx8KGMuZGF0YVtlXT17fSksYShjLmRhdGFbZV0scy5BeGlzLmRlZmF1bHRDb25maWcoKS5kYXRhWzBdKSxhKGMuZGF0YVtlXSx0KX0pLGEoYy5sYXlvdXQscy5BeGlzLmRlZmF1bHRDb25maWcoKS5sYXlvdXQpLGEoYy5sYXlvdXQsZS5sYXlvdXQpLHRoaXN9LGQuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBmfSxkLmdldGlucHV0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGQucmFkaWFsU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGl9LGQuYW5ndWxhclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBsfSxkLnN2Zz1mdW5jdGlvbigpe3JldHVybiBlfSxuLnJlYmluZChkLGgsIm9uIiksZH0scy5BeGlzLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbe3Q6WzEsMiwzLDRdLHI6WzEwLDExLDEyLDEzXSxuYW1lOiJMaW5lMSIsZ2VvbWV0cnk6IkxpbmVQbG90Iixjb2xvcjpudWxsLHN0cm9rZURhc2g6InNvbGlkIixzdHJva2VDb2xvcjpudWxsLHN0cm9rZVNpemU6IjEiLHZpc2libGVJbkxlZ2VuZDohMCxvcGFjaXR5OjF9XSxsYXlvdXQ6e2RlZmF1bHRDb2xvclJhbmdlOm4uc2NhbGUuY2F0ZWdvcnkxMCgpLnJhbmdlKCksdGl0bGU6bnVsbCxoZWlnaHQ6NDUwLHdpZHRoOjUwMCxtYXJnaW46e3RvcDo0MCxyaWdodDo0MCxib3R0b206NDAsbGVmdDo0MH0sZm9udDp7c2l6ZToxMixjb2xvcjoiZ3JheSIsb3V0bGluZUNvbG9yOiJ3aGl0ZSIsZmFtaWx5OiJUYWhvbWEsIHNhbnMtc2VyaWYifSxkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxsYWJlbE9mZnNldDoxMCxyYWRpYWxBeGlzOntkb21haW46bnVsbCxvcmllbnRhdGlvbjotNDUsdGlja3NTdWZmaXg6IiIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGx9LGFuZ3VsYXJBeGlzOntkb21haW46WzAsMzYwXSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsbGFiZWxzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246Imhvcml6b250YWwiLHJld3JpdGVUaWNrczpudWxsLHRpY2tzQ291bnQ6bnVsbCx0aWNrc1N0ZXA6bnVsbH0sbWlub3JUaWNrczowLHRpY2tMZW5ndGg6bnVsbCx0aWNrQ29sb3I6InNpbHZlciIsbWlub3JUaWNrQ29sb3I6IiNlZWUiLGJhY2tncm91bmRDb2xvcjoibm9uZSIsbmVlZHNFbmRTcGFjaW5nOm51bGwsc2hvd0xlZ2VuZDohMCxsZWdlbmQ6e3JldmVyc2VPcmRlcjohMX0sb3BhY2l0eToxfX19LHMudXRpbD17fSxzLkRBVEFFWFRFTlQ9ImRhdGFFeHRlbnQiLHMuQVJFQT0iQXJlYUNoYXJ0IixzLkxJTkU9IkxpbmVQbG90IixzLkRPVD0iRG90UGxvdCIscy5CQVI9IkJhckNoYXJ0IixzLnV0aWwuX292ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpciBpbiBlJiYoZVtyXT10W3JdKX0scy51dGlsLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19LHMudXRpbC5fcm5kU25kPWZ1bmN0aW9uKCl7cmV0dXJuIDIqTWF0aC5yYW5kb20oKS0xKygyKk1hdGgucmFuZG9tKCktMSkrKDIqTWF0aC5yYW5kb20oKS0xKX0scy51dGlsLmRhdGFGcm9tRXF1YXRpb24yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8NjtyZXR1cm4gbi5yYW5nZSgwLDM2MCtyLHIpLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODA7cmV0dXJuW2UsdChuKV19KX0scy51dGlsLmRhdGFGcm9tRXF1YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWV8fDYsYT1bXSxvPVtdO24ucmFuZ2UoMCwzNjAraSxpKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MCxpPXQobik7YS5wdXNoKGUpLG8ucHVzaChpKX0pO3ZhciBzPXt0OmEscjpvfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfSxzLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10KXJldHVybiBudWxsO3ZhciByPVtdLmNvbmNhdCh0KTtyZXR1cm4gbi5yYW5nZShlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltlXXx8clswXX0pfSxzLnV0aWwuZmlsbEFycmF5cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe3RbZV09cy51dGlsLmVuc3VyZUFycmF5KHRbZV0scil9KSx0fSxzLnV0aWwuY2xvbmVKc29uPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0scy51dGlsLnZhbGlkYXRlS2V5cz1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5zcGxpdCgiLiIpKTt2YXIgcj1lLnNoaWZ0KCk7cmV0dXJuIHRbcl0mJighZS5sZW5ndGh8fG9iakhhc0tleXModFtyXSxlKSl9LHMudXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi56aXAodCxlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdW0odCl9KX0scy51dGlsLmFycmF5TGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0scy51dGlsLmFycmF5RXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5tYXgodC5sZW5ndGgsZS5sZW5ndGgsMSk7ci0tID49MCYmdFtyXT09PWVbcl07KTtyZXR1cm4gcj09PS0yfSxzLnV0aWwuZmxhdHRlbkFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTshcy51dGlsLmFycmF5RXF1YWwoZSx0KTspZT10LHQ9W10uY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fSxzLnV0aWwuZGVkdXBsaWNhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gci5pbmRleE9mKHQpPT1lfSl9LHMudXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXt2YXIgcj1lKk1hdGguUEkvMTgwO3JldHVyblt0Kk1hdGguY29zKHIpLHQqTWF0aC5zaW4ocildfSxzLnV0aWwucm91bmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHwyLG49TWF0aC5wb3coMTAscik7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufSxzLnV0aWwuZ2V0TW91c2VQb3M9ZnVuY3Rpb24odCl7dmFyIGU9bi5tb3VzZSh0Lm5vZGUoKSkscj1lWzBdLGk9ZVsxXSxhPXt9O3JldHVybiBhLng9cixhLnk9aSxhLnBvcz1lLGEuYW5nbGU9MTgwKihNYXRoLmF0YW4yKGkscikrTWF0aC5QSSkvTWF0aC5QSSxhLnJhZGl1cz1NYXRoLnNxcnQocipyK2kqaSksYX0scy51dGlsLmR1cGxpY2F0ZXNDb3VudD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj17fSxuPXt9LGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspZT10W2ldLGUgaW4gcj8ocltlXSsrLG5bZV09cltlXSk6cltlXT0xO3JldHVybiBufSxzLnV0aWwuZHVwbGljYXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMocy51dGlsLmR1cGxpY2F0ZXNDb3VudCh0KSl9LHMudXRpbC50cmFuc2xhdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe3ZhciBpPXIuc2xpY2UoKTtyPWUsZT1pfXZhciBhPWUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09dClyZXR1cm4gdFtlXX0sdCk7dm9pZCAwIT09YSYmKGUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtpZih2b2lkIDAhPT10KXJldHVybiBuPT09ZS5sZW5ndGgtMSYmZGVsZXRlIHRbcl0sdFtyXX0sdCksci5yZWR1Y2UoZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT10W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19LHQpKX0scy5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9ZVswXS5nZW9tZXRyeUNvbmZpZyxyPXQuY29udGFpbmVyOyJzdHJpbmciPT10eXBlb2YgciYmKHI9bi5zZWxlY3QocikpLHIuZGF0dW0oZSkuZWFjaChmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIGEoZSxyKXtyZXR1cm57cjp0LnJhZGlhbFNjYWxlKGVbMV0pLHQ6KHQuYW5ndWxhclNjYWxlKGVbMF0pK3Qub3JpZW50YXRpb24pKk1hdGguUEkvMTgwfX1mdW5jdGlvbiBvKHQpe3JldHVybnt4OnQucipNYXRoLmNvcyh0LnQpLHk6dC5yKk1hdGguc2luKHQudCl9fXZhciBzPSEhZVswXS5kYXRhLnlTdGFjayxsPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHM/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSksYz10LmFuZ3VsYXJTY2FsZSx1PXQucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sZj17fTtmLmJhcj1mdW5jdGlvbihyLGksYSl7dmFyIG89ZVthXS5kYXRhLHM9dC5yYWRpYWxTY2FsZShyWzFdKS10LnJhZGlhbFNjYWxlKDApLGw9dC5yYWRpYWxTY2FsZShyWzJdfHwwKSx1PW8uYmFyV2lkdGg7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6Im1hcmsgYmFyIixkOiJNIitbW3MrbCwtdS8yXSxbcytsLHUvMl0sW2wsdS8yXSxbbCwtdS8yXV0uam9pbigiTCIpKyJaIix0cmFuc2Zvcm06ZnVuY3Rpb24oZSxyKXtyZXR1cm4icm90YXRlKCIrKHQub3JpZW50YXRpb24rYyhlWzBdKSkrIikifX0pfSxmLmRvdD1mdW5jdGlvbih0LHIsaSl7dmFyIHM9dFsyXT9bdFswXSx0WzFdK3RbMl1dOnQsbD1uLnN2Zy5zeW1ib2woKS5zaXplKGVbaV0uZGF0YS5kb3RTaXplKS50eXBlKGVbaV0uZGF0YS5kb3RUeXBlKSh0LHIpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCIsZDpsLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3ZhciByPW8oYShzKSk7cmV0dXJuInRyYW5zbGF0ZSgiK1tyLngsci55XSsiKSJ9fSl9O3ZhciBoPW4uc3ZnLmxpbmUucmFkaWFsKCkuaW50ZXJwb2xhdGUoZVswXS5kYXRhLmxpbmVJbnRlcnBvbGF0aW9uKS5yYWRpdXMoZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFkaWFsU2NhbGUoZVsxXSl9KS5hbmdsZShmdW5jdGlvbihlKXtyZXR1cm4gdC5hbmd1bGFyU2NhbGUoZVswXSkqTWF0aC5QSS8xODB9KTtmLmxpbmU9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPXJbMl0/bFthXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdFswXSx0WzFdK3RbMl1dfSk6bFthXTtpZihuLnNlbGVjdCh0aGlzKS5lYWNoKGYuZG90KS5zdHlsZSh7b3BhY2l0eTpmdW5jdGlvbih0LHIpe3JldHVybitlW2FdLmRhdGEuZG90VmlzaWJsZX0sZmlsbDp2LnN0cm9rZShyLGksYSl9KS5hdHRyKHtjbGFzczoibWFyayBkb3QifSksIShpPjApKXt2YXIgcz1uLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicGF0aC5saW5lIikuZGF0YShbMF0pO3MuZW50ZXIoKS5pbnNlcnQoInBhdGgiKSxzLmF0dHIoe2NsYXNzOiJsaW5lIixkOmgobyksdHJhbnNmb3JtOmZ1bmN0aW9uKGUscil7cmV0dXJuInJvdGF0ZSgiKyh0Lm9yaWVudGF0aW9uKzkwKSsiKSJ9LCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkuc3R5bGUoe2ZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5maWxsKHIsaSxhKX0sImZpbGwtb3BhY2l0eSI6MCxzdHJva2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5zdHJva2UocixpLGEpfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbih0LGUpe3JldHVybiB2WyJzdHJva2Utd2lkdGgiXShyLGksYSl9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbih0LGUpe3JldHVybiB2WyJzdHJva2UtZGFzaGFycmF5Il0ocixpLGEpfSxvcGFjaXR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYub3BhY2l0eShyLGksYSl9LGRpc3BsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5kaXNwbGF5KHIsaSxhKX19KX19O3ZhciBkPXQuYW5ndWxhclNjYWxlLnJhbmdlKCkscD1NYXRoLmFicyhkWzFdLWRbMF0pL2xbMF0ubGVuZ3RoKk1hdGguUEkvMTgwLG09bi5zdmcuYXJjKCkuc3RhcnRBbmdsZShmdW5jdGlvbih0KXtyZXR1cm4tcC8yfSkuZW5kQW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIHAvMn0pLmlubmVyUmFkaXVzKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJhZGlhbFNjYWxlKHUrKGVbMl18fDApKX0pLm91dGVyUmFkaXVzKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJhZGlhbFNjYWxlKHUrKGVbMl18fDApKSt0LnJhZGlhbFNjYWxlKGVbMV0pfSk7Zi5hcmM9ZnVuY3Rpb24oZSxyLGkpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGFyYyIsZDptLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbitjKGVbMF0pKzkwKSsiKSJ9fSl9O3ZhciB2PXtmaWxsOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlW25dLmRhdGEuc3Ryb2tlQ29sb3J9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLnN0cm9rZVNpemUrInB4In0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gaVtlW25dLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlW25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIHZvaWQgMD09PWVbbl0uZGF0YS52aXNpYmxlfHxlW25dLmRhdGEudmlzaWJsZT8iYmxvY2siOiJub25lIn19LGc9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmxheWVyIikuZGF0YShsKTtnLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7Y2xhc3M6ImxheWVyIn0pO3ZhciB5PWcuc2VsZWN0QWxsKCJwYXRoLm1hcmsiKS5kYXRhKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6Im1hcmsifSkseS5zdHlsZSh2KS5lYWNoKGZbdC5nZW9tZXRyeVR5cGVdKSx5LmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKX0pfXZhciBlPVtzLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnKCldLHI9bi5kaXNwYXRjaCgiaG92ZXIiKSxpPXtzb2xpZDoibm9uZSIsZGFzaDpbNSwyXSxkb3Q6WzIsNV19O3JldHVybiB0LmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVtyXXx8KGVbcl09e30pLGEoZVtyXSxzLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnKCkpLGEoZVtyXSx0KX0pLHRoaXMpOmV9LHQuZ2V0Q29sb3JTY2FsZT1mdW5jdGlvbigpe30sbi5yZWJpbmQodCxyLCJvbiIpLHR9LHMuUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZToiZ2VvbTEiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOiJjaXJjbGUiLGRvdFNpemU6NjQsZG90VmlzaWJsZTohMSxiYXJXaWR0aDoyMCxjb2xvcjoiI2ZmYTUwMCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOiJzaWx2ZXIiLHN0cm9rZURhc2g6InNvbGlkIixvcGFjaXR5OjEsaW5kZXg6MCx2aXNpYmxlOiEwLHZpc2libGVJbkxlZ2VuZDohMH0sZ2VvbWV0cnlDb25maWc6e2dlb21ldHJ5OiJMaW5lUGxvdCIsZ2VvbWV0cnlUeXBlOiJhcmMiLGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGNvbnRhaW5lcjoiYm9keSIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LHMuQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImJhciJ9fX0scy5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJhcmMifX19LHMuRG90UGxvdD1mdW5jdGlvbigpe3JldHVybiBzLlBvbHlDaGFydCgpfSxzLkRvdFBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJkb3QiLGRvdFR5cGU6ImNpcmNsZSJ9fX0scy5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBzLlBvbHlDaGFydCgpfSxzLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToibGluZSJ9fX0scy5MZWdlbmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5sZWdlbmRDb25maWcsaT1lLmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW10uY29uY2F0KHQpLm1hcChmdW5jdGlvbih0LG4pe3ZhciBpPWEoe30sci5lbGVtZW50c1tlXSk7cmV0dXJuIGkubmFtZT10LGkuY29sb3I9W10uY29uY2F0KHIuZWxlbWVudHNbZV0uY29sb3IpW25dLGl9KX0pLG89bi5tZXJnZShpKTtvPW8uZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZWxlbWVudHNbZV0mJihyLmVsZW1lbnRzW2VdLnZpc2libGVJbkxlZ2VuZHx8dm9pZCAwPT09ci5lbGVtZW50c1tlXS52aXNpYmxlSW5MZWdlbmQpfSksci5yZXZlcnNlT3JkZXImJihvPW8ucmV2ZXJzZSgpKTt2YXIgcz1yLmNvbnRhaW5lcjsoInN0cmluZyI9PXR5cGVvZiBzfHxzLm5vZGVOYW1lKSYmKHM9bi5zZWxlY3QocykpO3ZhciBsPW8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSxjPXIuZm9udFNpemUsdT1udWxsPT1yLmlzQ29udGludW91cz8ibnVtYmVyIj09dHlwZW9mIG9bMF06ci5pc0NvbnRpbnVvdXMsZj11P3IuaGVpZ2h0OmMqby5sZW5ndGgsaD1zLmNsYXNzZWQoImxlZ2VuZC1ncm91cCIsITApLGQ9aC5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoWzBdKSxwPWQuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLmF0dHIoe3dpZHRoOjMwMCxoZWlnaHQ6ZitjLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsdmVyc2lvbjoiMS4xIn0pO3AuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLWF4aXMiLCEwKSxwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrcyIsITApO3ZhciBtPW4ucmFuZ2Uoby5sZW5ndGgpLHY9bi5zY2FsZVt1PyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4obSkucmFuZ2UobCksZz1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihtKVt1PyJyYW5nZSI6InJhbmdlUG9pbnRzIl0oWzAsZl0pLHk9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKmU7cmV0dXJuImxpbmUiPT09dD8iTSIrW1stZS8yLC1lLzEyXSxbZS8yLC1lLzEyXSxbZS8yLGUvMTJdLFstZS8yLGUvMTJdXSsiWiI6bi5zdmcuc3ltYm9sVHlwZXMuaW5kZXhPZih0KSE9LTE/bi5zdmcuc3ltYm9sKCkudHlwZSh0KS5zaXplKHIpKCk6bi5zdmcuc3ltYm9sKCkudHlwZSgic3F1YXJlIikuc2l6ZShyKSgpfTtpZih1KXt2YXIgYj1kLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKHtpZDoiZ3JhZDEiLHgxOiIwJSIseTE6IjAlIix4MjoiMCUiLHkyOiIxMDAlIn0pLnNlbGVjdEFsbCgic3RvcCIpLmRhdGEobCk7Yi5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGIuYXR0cih7b2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUvKGwubGVuZ3RoLTEpKjEwMCsiJSJ9fSkuc3R5bGUoeyJzdG9wLWNvbG9yIjpmdW5jdGlvbih0LGUpe3JldHVybiB0fX0pLGQuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgibGVnZW5kLW1hcmsiLCEwKS5hdHRyKHtoZWlnaHQ6ci5oZWlnaHQsd2lkdGg6ci5jb2xvckJhbmRXaWR0aCxmaWxsOiJ1cmwoI2dyYWQxKSJ9KX1lbHNle3ZhciB4PWQuc2VsZWN0KCIubGVnZW5kLW1hcmtzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZC1tYXJrIikuZGF0YShvKTt4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kLW1hcmsiLCEwKSx4LmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoIitbYy8yLGcoZSkrYy8yXSsiKSJ9LGQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN5bWJvbDtyZXR1cm4geShyLGMpfSxmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYoZSl9fSkseC5leGl0KCkucmVtb3ZlKCl9dmFyIF89bi5zdmcuYXhpcygpLnNjYWxlKGcpLm9yaWVudCgicmlnaHQiKSx3PWQuc2VsZWN0KCJnLmxlZ2VuZC1heGlzIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbdT9yLmNvbG9yQmFuZFdpZHRoOmMsYy8yXSsiKSJ9KS5jYWxsKF8pO3JldHVybiB3LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksdy5zZWxlY3RBbGwoImxpbmUiKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOnU/ci50ZXh0Q29sb3I6Im5vbmUifSksdy5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSh7ZmlsbDpyLnRleHRDb2xvciwiZm9udC1zaXplIjpyLmZvbnRTaXplfSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBvW2VdLm5hbWV9KSx0fXZhciBlPXMuTGVnZW5kLmRlZmF1bHRDb25maWcoKSxyPW4uZGlzcGF0Y2goImhvdmVyIik7cmV0dXJuIHQuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKGUsdCksdGhpcyk6ZX0sbi5yZWJpbmQodCxyLCJvbiIpLHR9LHMuTGVnZW5kLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbImEiLCJiIiwiYyJdLGxlZ2VuZENvbmZpZzp7ZWxlbWVudHM6W3sKc3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0scy50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0sbz0idG9vbHRpcC0iK3MudG9vbHRpcFBhbmVsLnVpZCsrLGw9ZnVuY3Rpb24oKXt0PWkuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK28pLmRhdGEoWzBdKTt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChvLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsZGlzcGxheToibm9uZSJ9KTtyZXR1cm4gcj1uLmFwcGVuZCgicGF0aCIpLnN0eWxlKHtmaWxsOiJ3aGl0ZSIsImZpbGwtb3BhY2l0eSI6Ljl9KS5hdHRyKHtkOiJNMCAwIn0pLGU9bi5hcHBlbmQoInRleHQiKS5hdHRyKHtkeDppLnBhZGRpbmcrMTAsZHk6LjMqK2kuZm9udFNpemV9KSxsfTtyZXR1cm4gbC50ZXh0PWZ1bmN0aW9uKGEpe3ZhciBvPW4uaHNsKGkuY29sb3IpLmwscz1vPj0uNT8iI2FhYSI6IndoaXRlIixjPW8+PS41PyJibGFjayI6IndoaXRlIix1PWF8fCIiO2Uuc3R5bGUoe2ZpbGw6YywiZm9udC1zaXplIjppLmZvbnRTaXplKyJweCJ9KS50ZXh0KHUpO3ZhciBmPWkucGFkZGluZyxoPWUubm9kZSgpLmdldEJCb3goKSxkPXtmaWxsOmkuY29sb3Isc3Ryb2tlOnMsInN0cm9rZS13aWR0aCI6IjJweCJ9LHA9aC53aWR0aCsyKmYrMTAsbT1oLmhlaWdodCsyKmY7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1sxMCwtbS8yXSxbMTAsLW0vNF0sW2kuaGFzVGljaz8wOjEwLDBdLFsxMCxtLzRdLFsxMCxtLzJdLFtwLG0vMl0sW3AsLW0vMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrWzEwLC1tLzIrMipmXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGx9LGwuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGx9LGwuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBhKGksdCksbH0sbH0scy50b29sdGlwUGFuZWwudWlkPTEscy5hZGFwdGVyPXt9LHMuYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdC5jb252ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1hKHt9LHQpO3JldHVybltbbixbIm1hcmtlciIsImNvbG9yIl0sWyJjb2xvciJdXSxbbixbIm1hcmtlciIsIm9wYWNpdHkiXSxbIm9wYWNpdHkiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiY29sb3IiXSxbInN0cm9rZUNvbG9yIl1dLFtuLFsibWFya2VyIiwibGluZSIsImRhc2giXSxbInN0cm9rZURhc2giXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwid2lkdGgiXSxbInN0cm9rZVNpemUiXV0sW24sWyJtYXJrZXIiLCJzeW1ib2wiXSxbImRvdFR5cGUiXV0sW24sWyJtYXJrZXIiLCJzaXplIl0sWyJkb3RTaXplIl1dLFtuLFsibWFya2VyIiwiYmFyV2lkdGgiXSxbImJhcldpZHRoIl1dLFtuLFsibGluZSIsImludGVycG9sYXRpb24iXSxbImxpbmVJbnRlcnBvbGF0aW9uIl1dLFtuLFsic2hvd2xlZ2VuZCJdLFsidmlzaWJsZUluTGVnZW5kIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7cy51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlfHxkZWxldGUgbi5tYXJrZXIsZSYmZGVsZXRlIG4uZ3JvdXBJZCxlPygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLmRvdFZpc2libGU9PT0hMD8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJiJzdGFjayI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGk9cy51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aS5pbmRleE9mKHQuZ2VvbWV0cnkpO24hPS0xJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIG89YSh7fSx0LmxheW91dCk7aWYoW1tvLFsicGxvdF9iZ2NvbG9yIl0sWyJiYWNrZ3JvdW5kQ29sb3IiXV0sW28sWyJzaG93bGVnZW5kIl0sWyJzaG93TGVnZW5kIl1dLFtvLFsicmFkaWFsYXhpcyJdLFsicmFkaWFsQXhpcyJdXSxbbyxbImFuZ3VsYXJheGlzIl0sWyJhbmd1bGFyQXhpcyJdXSxbby5hbmd1bGFyYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJheGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW28uYW5ndWxhcmF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW28uYW5ndWxhcmF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5hbmd1bGFyYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLmFuZ3VsYXJheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbby5hbmd1bGFyYXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW28ucmFkaWFsYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLnJhZGlhbGF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5yYWRpYWxheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW28ucmFkaWFsYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5hbmd1bGFyQXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJBeGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtvLmFuZ3VsYXJBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28uYW5ndWxhckF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbby5hbmd1bGFyQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtvLnJhZGlhbEF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5yYWRpYWxBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28ucmFkaWFsQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLnJhZGlhbEF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtvLmZvbnQsWyJvdXRsaW5lY29sb3IiXSxbIm91dGxpbmVDb2xvciJdXSxbby5sZWdlbmQsWyJ0cmFjZW9yZGVyIl0sWyJyZXZlcnNlT3JkZXIiXV0sW28sWyJsYWJlbG9mZnNldCJdLFsibGFiZWxPZmZzZXQiXV0sW28sWyJkZWZhdWx0Y29sb3JyYW5nZSJdLFsiZGVmYXVsdENvbG9yUmFuZ2UiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtzLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KHZvaWQgMCE9PW8udGlja0xlbmd0aCYmKG8uYW5ndWxhcmF4aXMudGlja2xlbj1vLnRpY2tMZW5ndGgsZGVsZXRlIG8udGlja0xlbmd0aCksby50aWNrQ29sb3ImJihvLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1vLnRpY2tDb2xvcixkZWxldGUgby50aWNrQ29sb3IpKTooby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrbGVuJiYoby50aWNrTGVuZ3RoPW8uYW5ndWxhckF4aXMudGlja2xlbiksby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihvLnRpY2tDb2xvcj1vLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLG8ubGVnZW5kJiYiYm9vbGVhbiIhPXR5cGVvZiBvLmxlZ2VuZC5yZXZlcnNlT3JkZXImJihvLmxlZ2VuZC5yZXZlcnNlT3JkZXI9Im5vcm1hbCIhPW8ubGVnZW5kLnJldmVyc2VPcmRlciksby5sZWdlbmQmJiJib29sZWFuIj09dHlwZW9mIG8ubGVnZW5kLnRyYWNlb3JkZXImJihvLmxlZ2VuZC50cmFjZW9yZGVyPW8ubGVnZW5kLnRyYWNlb3JkZXI/InJldmVyc2VkIjoibm9ybWFsIixkZWxldGUgby5sZWdlbmQucmV2ZXJzZU9yZGVyKSxvLm1hcmdpbiYmdm9pZCAwIT09by5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sYz1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLHU9e307bi5lbnRyaWVzKG8ubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dVtjW2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSksby5tYXJnaW49dX1lJiYoZGVsZXRlIG8ubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBvLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBvLm1pbm9yVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgby5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBvLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgby5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBvLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgby5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIG8ucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIG8ucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8ucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PW99cmV0dXJuIHJ9LHR9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcwOCwiLi4vLi4vbGliIjo3MzUsZDM6MTIxfV0sODQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vbWljcm9wb2xhciIpLHM9dCgiLi91bmRvX21hbmFnZXIiKSxsPWkuZXh0ZW5kRGVlcEFsbCxjPWUuZXhwb3J0cz17fTtjLmZyYW1ld29yaz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsaSl7cmV0dXJuIGkmJihmPWkpLG4uc2VsZWN0KG4uc2VsZWN0KGYpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLHI9cj9sKHIsZSk6ZSxhfHwoYT1vLkF4aXMoKSksdT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChyKSxhLmNvbmZpZyh1KS5yZW5kZXIoZiksdC5kYXRhPXIuZGF0YSx0LmxheW91dD1yLmxheW91dCxjLmZpbGxMYXlvdXQodCkscn12YXIgcixpLGEsdSxmLGg9bmV3IHM7cmV0dXJuIGUuaXNQb2xhcj0hMCxlLnN2Zz1mdW5jdGlvbigpe3JldHVybiBhLnN2ZygpfSxlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiByfSxlLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gby5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoYS5nZXRMaXZlQ29uZmlnKCksITApfSxlLmdldExpdmVTY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm57dDphLmFuZ3VsYXJTY2FsZSgpLHI6YS5yYWRpYWxTY2FsZSgpfX0sZS5zZXRVbmRvUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9by51dGlsLmNsb25lSnNvbihyKTshZnVuY3Rpb24oZSxyKXtoLmFkZCh7dW5kbzpmdW5jdGlvbigpe3ImJnQocil9LHJlZG86ZnVuY3Rpb24oKXt0KGUpfX0pfShlLGkpLGk9by51dGlsLmNsb25lSnNvbihlKX0sZS51bmRvPWZ1bmN0aW9uKCl7aC51bmRvKCl9LGUucmVkbz1mdW5jdGlvbigpe2gucmVkbygpfSxlfSxjLmZpbGxMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKSxyPWUuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLGk9dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLnN2ZyYmdC5mcmFtZXdvcmsuc3ZnKCksbz17d2lkdGg6ODAwLGhlaWdodDo2MDAscGFwZXJfYmdjb2xvcjphLmJhY2tncm91bmQsX2NvbnRhaW5lcjplLF9wYXBlcmRpdjpyLF9wYXBlcjppfTt0Ll9mdWxsTGF5b3V0PWwobyx0LmxheW91dCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vbGliIjo3MzUsIi4vbWljcm9wb2xhciI6ODQyLCIuL3VuZG9fbWFuYWdlciI6ODQ0LGQzOjEyMX1dLDg0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHQ/KGk9ITAsdFtlXSgpLGk9ITEsdGhpcyk6dGhpc312YXIgZSxyPVtdLG49LTEsaT0hMTtyZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBpP3RoaXM6KHIuc3BsaWNlKG4rMSxyLmxlbmd0aC1uKSxyLnB1c2godCksbj1yLmxlbmd0aC0xLHRoaXMpfSxzZXRDYWxsYmFjazpmdW5jdGlvbih0KXtlPXR9LHVuZG86ZnVuY3Rpb24oKXt2YXIgaT1yW25dO3JldHVybiBpPyh0KGksInVuZG8iKSxuLT0xLGUmJmUoaS51bmRvKSx0aGlzKTp0aGlzfSxyZWRvOmZ1bmN0aW9uKCl7dmFyIGk9cltuKzFdO3JldHVybiBpPyh0KGksInJlZG8iKSxuKz0xLGUmJmUoaS5yZWRvKSx0aGlzKTp0aGlzfSxjbGVhcjpmdW5jdGlvbigpe3I9W10sbj0tMX0saGFzVW5kbzpmdW5jdGlvbigpe3JldHVybiBuIT09LTF9LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gbjxyLmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiByfSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltuLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiBufX19fSx7fV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi9wbG90cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBzLGwsYz1hLnR5cGUsdT1hLmF0dHJpYnV0ZXMsZj1hLmhhbmRsZURlZmF1bHRzLGg9YS5wYXJ0aXRpb258fCJ4IixkPWkuZmluZFN1YnBsb3RJZHMocixjKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXt2YXIgdj1kW21dO3M9dFt2XT90W3ZdOnRbdl09e30sZVt2XT1sPXt9LG8oImRvbWFpbi4iK2gsW20vcCwobSsxKS9wXSksbygiZG9tYWluLiIre3g6InkiLHk6IngifVtoXSksYS5pZD12LGYocyxsLG8sYSl9fX0seyIuLi9saWIiOjczNSwiLi9wbG90cyI6ODM4fV0sODQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtyLm5hbWU9InRlcm5hcnkiLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD1yLmF0dHJSZWdleD1hKCJ0ZXJuYXJ5Iiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLCJ0ZXJuYXJ5Iiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aS5nZXRTdWJwbG90Q2FsY0RhdGEociwidGVybmFyeSIscyksYz1lW3NdLl9zdWJwbG90O2N8fChjPW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9YyksYy5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1pLmdldFN1YnBsb3RJZHMobiwidGVybmFyeSIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLnBsb3RDb250YWluZXIucmVtb3ZlKCksbC5jbGlwRGVmLnJlbW92ZSgpLGwuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpKX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuL2xheW91dC9hdHRyaWJ1dGVzIjo4NDcsIi4vbGF5b3V0L2RlZmF1bHRzIjo4NTAsIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIjo4NTEsIi4vdGVybmFyeSI6ODUyfV0sODQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3VicGxvdDp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dGl0bGU6bi50aXRsZSx0aXRsZWZvbnQ6bi50aXRsZWZvbnQsY29sb3I6bi5jb2xvcix0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczppKHt9LG4ubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOm4udGlja3MsdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb250Om4udGlja2ZvbnQsdGlja2FuZ2xlOm4udGlja2FuZ2xlLHRpY2tmb3JtYXQ6bi50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpuLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDpuLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkoe30sbi5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjpuLmxpbmVjb2xvcixsaW5ld2lkdGg6bi5saW5ld2lkdGgsc2hvd2dyaWQ6aSh7fSxuLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOm4uZ3JpZGNvbG9yLGdyaWR3aWR0aDpuLmdyaWR3aWR0aCxsYXllcjpuLmxheWVyLG1pbjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjB9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwfV0sODQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX1lLnR5cGU9ImxpbmVhciI7dmFyIHU9YygiY29sb3IiKSxmPXU9PT10LmNvbG9yP3U6ci5mb250LmNvbG9yLGg9ZS5fbmFtZSxkPWguY2hhckF0KDApLnRvVXBwZXJDYXNlKCkscD0iQ29tcG9uZW50ICIrZCxtPWMoInRpdGxlIixwKTtlLl9ob3ZlcnRpdGxlPW09PT1wP206ZCxpLmNvZXJjZUZvbnQoYywidGl0bGVmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6Zn0pLGMoIm1pbiIpLGwodCxlLGMsImxpbmVhciIpLG8odCxlLGMsImxpbmVhciIse25vSG92ZXI6ITF9KSxzKHQsZSxjLHtvdXRlclRpY2tzOiEwfSksYygic2hvd3RpY2tsYWJlbHMiKSYmKGkuY29lcmNlRm9udChjLCJ0aWNrZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6Zn0pLGMoInRpY2thbmdsZSIpLGMoInRpY2tmb3JtYXQiKSksYygiaG92ZXJmb3JtYXQiKSxjKCJzaG93bGluZSIpJiYoYygibGluZWNvbG9yIix1KSxjKCJsaW5ld2lkdGgiKSksYygic2hvd2dyaWQiKSYmKGMoImdyaWRjb2xvciIsbih1LHIuYmdDb2xvciw2MCkudG9SZ2JTdHJpbmcoKSksYygiZ3JpZHdpZHRoIikpLGMoImxheWVyIil9fSx7Ii4uLy4uLy4uL2xpYiI6NzM1LCIuLi8uLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6Nzk3LCIuLi8uLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo3OTgsIi4uLy4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3OTksIi4vYXhpc19hdHRyaWJ1dGVzIjo4NDgsdGlueWNvbG9yMjo1NDJ9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT1yKCJiZ2NvbG9yIiksbz1yKCJzdW0iKTtuLmJnQ29sb3I9aS5jb21iaW5lKGEsbi5wYXBlcl9iZ2NvbG9yKTtmb3IodmFyIGMsdSxmLGg9MDtoPGwubGVuZ3RoO2grKyljPWxbaF0sdT10W2NdfHx7fSxmPWVbY109e19uYW1lOmMsdHlwZToibGluZWFyIn0scyh1LGYsbik7dmFyIGQ9ZS5hYXhpcyxwPWUuYmF4aXMsbT1lLmNheGlzO2QubWluK3AubWluK20ubWluPj1vJiYoZC5taW49MCxwLm1pbj0wLG0ubWluPTAsdC5hYXhpcyYmZGVsZXRlIHQuYWF4aXMubWluLHQuYmF4aXMmJmRlbGV0ZSB0LmJheGlzLm1pbix0LmNheGlzJiZkZWxldGUgdC5jYXhpcy5taW4pfXZhciBpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vYXhpc19kZWZhdWx0cyIpLGw9WyJhYXhpcyIsImJheGlzIiwiY2F4aXMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EodCxlLHIse3R5cGU6InRlcm5hcnkiLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpuLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODQ1LCIuL2F4aXNfZGVmYXVsdHMiOjg0OSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODUxfV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9YSh7ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjB9LGFheGlzOmksYmF4aXM6aSxjYXhpczppfSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4vYXhpc19hdHRyaWJ1dGVzIjo4NDh9XSw4NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5pbml0KGUpLHRoaXMubWFrZUZyYW1ld29yayhlKX1mdW5jdGlvbiBpKHQpe2Euc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9dmFyIGE9dCgiZDMiKSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL3Bsb3RseSIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZD10KCIuLi9wbG90cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIikseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IiksYj10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIik7ZS5leHBvcnRzPW47dmFyIHg9bi5wcm90b3R5cGU7eC5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0seC5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPWVbci5pZF0saT1lLl9zaXplO3IuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7aWYodFthXVswXS50cmFjZS5jbGlwb25heGlzPT09ITEpe3IuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319ci51cGRhdGVMYXllcnMobiksci5hZGp1c3RMYXlvdXQobixpKSxkLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZShyLHQsbiksci5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmNhbGwoYy5maWxsLG4uYmdjb2xvcil9LHgubWFrZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dFtlLmlkXSxuPWUuY2xpcElkPSJjbGlwIitlLmxheW91dElkK2UuaWQ7ZS5jbGlwRGVmPXQuX2NsaXBzLnNlbGVjdEFsbCgiIyIrbikuZGF0YShbMF0pLGUuY2xpcERlZi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik7dmFyIGk9ZS5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrZS5sYXlvdXRJZCtlLmlkO2UuY2xpcERlZlJlbGF0aXZlPXQuX2NsaXBzLnNlbGVjdEFsbCgiIyIraSkuZGF0YShbMF0pLGUuY2xpcERlZlJlbGF0aXZlLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixpKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKSxlLnBsb3RDb250YWluZXI9ZS5jb250YWluZXIuc2VsZWN0QWxsKCJnLiIrZS5pZCkuZGF0YShbMF0pLGUucGxvdENvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZS5pZCwhMCksZS51cGRhdGVMYXllcnMociksdS5zZXRDbGlwVXJsKGUubGF5ZXJzLmJhY2twbG90LG4pLHUuc2V0Q2xpcFVybChlLmxheWVycy5ncmlkcyxuKX0seC51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubGF5ZXJzLG49WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImdyaWRzIl07ImJlbG93IHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZuLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJm4ucHVzaCgiYmF4aXMiLCJibGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmbi5wdXNoKCJjYXhpcyIsImNsaW5lIiksbi5wdXNoKCJmcm9udHBsb3QiKSwiYWJvdmUgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJm4ucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmbi5wdXNoKCJiYXhpcyIsImJsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZuLnB1c2goImNheGlzIiwiY2xpbmUiKTt2YXIgaT1lLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCJnLnRvcGxldmVsIikuZGF0YShuLFN0cmluZyksbz1bImFncmlkIiwiYmdyaWQiLCJjZ3JpZCJdO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5zZWxlY3QodGhpcyk7clt0XT1lLCJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOiJiYWNrcGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKToicGxvdGJnIj09PXQ/ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKToiYWxpbmUiPT09dHx8ImJsaW5lIj09PXR8fCJjbGluZSI9PT10P2UuYXBwZW5kKCJwYXRoIik6ImdyaWRzIj09PXQmJm8uZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWUuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JpZCAiK3QsITApfSl9KSxpLm9yZGVyKCl9O3ZhciBfPU1hdGguc3FydCg0LzMpO3guYWRqdXN0TGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGw9dGhpcyxkPXQuZG9tYWluLHA9KGQueFswXStkLnhbMV0pLzIsbT0oZC55WzBdK2QueVsxXSkvMix2PWQueFsxXS1kLnhbMF0sZz1kLnlbMV0tZC55WzBdLHk9diplLncsYj1nKmUuaCx4PXQuc3VtLHc9dC5hYXhpcy5taW4sTT10LmJheGlzLm1pbixUPXQuY2F4aXMubWluO3k+XypiPyhhPWIsaT1hKl8pOihpPXksYT1pL18pLG89dippL3kscz1nKmEvYixyPWUubCtlLncqcC1pLzIsbj1lLnQrZS5oKigxLW0pLWEvMixsLngwPXIsbC55MD1uLGwudz1pLGwuaD1hLGwuc3VtPXgsbC54YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbdysyKlQteCx4LXctMipNXSxkb21haW46W3Atby8yLHArby8yXSxfaWQ6IngifSxmKGwueGF4aXMsbC5ncmFwaERpdi5fZnVsbExheW91dCksbC54YXhpcy5zZXRTY2FsZSgpLGwueGF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmE+PWwuYWF4aXMucmFuZ2VbMF0mJnQuYTw9bC5hYXhpcy5yYW5nZVsxXSYmdC5iPj1sLmJheGlzLnJhbmdlWzFdJiZ0LmI8PWwuYmF4aXMucmFuZ2VbMF0mJnQuYz49bC5jYXhpcy5yYW5nZVsxXSYmdC5jPD1sLmNheGlzLnJhbmdlWzBdfSxsLnlheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt3LHgtTS1UXSxkb21haW46W20tcy8yLG0rcy8yXSxfaWQ6InkifSxmKGwueWF4aXMsbC5ncmFwaERpdi5fZnVsbExheW91dCksbC55YXhpcy5zZXRTY2FsZSgpLGwueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBrPWwueWF4aXMuZG9tYWluWzBdLEE9bC5hYXhpcz1oKHt9LHQuYWF4aXMse3Zpc2libGU6ITAscmFuZ2U6W3cseC1NLVRdLHNpZGU6ImxlZnQiLF9jb3VudGVyYW5nbGU6MzAsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbayxrK3MqX10sX2F4aXNsYXllcjpsLmxheWVycy5hYXhpcyxfZ3JpZGxheWVyOmwubGF5ZXJzLmFncmlkLF9wb3M6MCxfaWQ6InkiLF9sZW5ndGg6aSxfZ3JpZHBhdGg6Ik0wLDBsIithKyIsLSIraS8yfSk7ZihBLGwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLEEuc2V0U2NhbGUoKTt2YXIgRT1sLmJheGlzPWgoe30sdC5iYXhpcyx7dmlzaWJsZTohMCxyYW5nZTpbeC13LVQsTV0sc2lkZToiYm90dG9tIixfY291bnRlcmFuZ2xlOjMwLGRvbWFpbjpsLnhheGlzLmRvbWFpbixfYXhpc2xheWVyOmwubGF5ZXJzLmJheGlzLF9ncmlkbGF5ZXI6bC5sYXllcnMuYmdyaWQsX2NvdW50ZXJheGlzOmwuYWF4aXMsX3BvczowLF9pZDoieCIsX2xlbmd0aDppLF9ncmlkcGF0aDoiTTAsMGwtIitpLzIrIiwtIithfSk7ZihFLGwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLEUuc2V0U2NhbGUoKSxBLl9jb3VudGVyYXhpcz1FO3ZhciBTPWwuY2F4aXM9aCh7fSx0LmNheGlzLHt2aXNpYmxlOiEwLHJhbmdlOlt4LXctTSxUXSxzaWRlOiJyaWdodCIsX2NvdW50ZXJhbmdsZTozMCx0aWNrYW5nbGU6KCt0LmNheGlzLnRpY2thbmdsZXx8MCkrMzAsZG9tYWluOltrLGsrcypfXSxfYXhpc2xheWVyOmwubGF5ZXJzLmNheGlzLF9ncmlkbGF5ZXI6bC5sYXllcnMuY2dyaWQsX2NvdW50ZXJheGlzOmwuYmF4aXMsX3BvczowLF9pZDoieSIsX2xlbmd0aDppLF9ncmlkcGF0aDoiTTAsMGwtIithKyIsIitpLzJ9KTtmKFMsbC5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBMPSJNIityKyIsIisobithKSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2wuY2xpcERlZi5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMKSxsLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTCk7dmFyIEM9Ik0wLCIrYSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2wuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpO3ZhciBJPSJ0cmFuc2xhdGUoIityKyIsIituKyIpIjtsLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsSSksbC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgRD0idHJhbnNsYXRlKCIrcisiLCIrKG4rYSkrIikiO2wubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsRCksbC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixEKTt2YXIgUD0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgzMCkiO2wubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIsUCksbC5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIixQKTt2YXIgej0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgtMzApIjtsLmxheWVycy5jYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLHopLGwubGF5ZXJzLmNncmlkLmF0dHIoInRyYW5zZm9ybSIseiksbC5kcmF3QXhlcyghMCksbC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxsLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBLnNob3dsaW5lPyJNIityKyIsIisobithKSsibCIraS8yKyIsLSIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsQS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEEubGluZXdpZHRofHwwKSsicHgiKSxsLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixFLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwoYy5zdHJva2UsRS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEUubGluZXdpZHRofHwwKSsicHgiKSxsLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIisocitpLzIpKyIsIituKyJsIitpLzIrIiwiK2E6Ik0wLDAiKS5jYWxsKGMuc3Ryb2tlLFMubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChTLmxpbmV3aWR0aHx8MCkrInB4IiksbC5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxsLmluaXRJbnRlcmFjdGlvbnMoKSx1LnNldENsaXBVcmwobC5sYXllcnMuZnJvbnRwbG90LGwuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmwuY2xpcElkKX0seC5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5ncmFwaERpdixuPWUuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsaT1lLmFheGlzLGE9ZS5iYXhpcyxvPWUuY2F4aXM7aWYocC5kb1RpY2tzKHIsaSwhMCkscC5kb1RpY2tzKHIsYSwhMCkscC5kb1RpY2tzKHIsbywhMCksdCl7dmFyIHM9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSk7Zy5kcmF3KHIsImEiK24se3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTplLmlkKyIuYWF4aXMudGl0bGUiLGRmbHROYW1lOiJDb21wb25lbnQgQSIsYXR0cmlidXRlczp7eDplLngwK2Uudy8yLHk6ZS55MC1pLnRpdGxlZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pO3ZhciBsPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztnLmRyYXcociwiYiIrbix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOmUuaWQrIi5iYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBCIixhdHRyaWJ1dGVzOnt4OmUueDAtbCx5OmUueTArZS5oKy44MyphLnRpdGxlZm9udC5zaXplK2wsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxnLmRyYXcociwiYyIrbix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOmUuaWQrIi5jYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBDIixhdHRyaWJ1dGVzOnt4OmUueDArZS53K2wseTplLnkwK2UuaCsuODMqby50aXRsZWZvbnQuc2l6ZStsLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fTt2YXIgdz1iLk1JTlpPT00vMisuODcsTT0ibS0wLjg3LC41aCIrdysidjNoLSIrKHcrNS4yKSsibCIrKHcvMisyLjYpKyIsLSIrKC44Nyp3KzQuNSkrImwyLjYsMS41bC0iK3cvMisiLCIrLjg3KncrIloiLFQ9Im0wLjg3LC41aC0iK3crInYzaCIrKHcrNS4yKSsibC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLTIuNiwxLjVsIit3LzIrIiwiKy44Nyp3KyJaIixrPSJtMCwxbCIrdy8yKyIsIisuODcqdysibDIuNiwtMS41bC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLSIrKHcvMisyLjYpKyIsIisoLjg3KncrNC41KSsibDIuNiwxLjVsIit3LzIrIiwtIisuODcqdysiWiIsQT0hMDt4LmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXt2YXIgbj1GLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3c9ZS1uLmxlZnQsRT1yLW4udG9wLFM9e2E6Ui5hYXhpcy5yYW5nZVswXSxiOlIuYmF4aXMucmFuZ2VbMV0sYzpSLmNheGlzLnJhbmdlWzFdfSxDPVMsTD1SLmFheGlzLnJhbmdlWzFdLVMuYSxJPW8oUi5ncmFwaERpdi5fZnVsbExheW91dFtSLmlkXS5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxEPSJNMCwiK1IuaCsiTCIrUi53LzIrIiwgMEwiK1IudysiLCIrUi5oKyJaIixQPSExLHo9Ti5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3giKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSLngwKyIsICIrUi55MCsiKSIpLnN0eWxlKHtmaWxsOkk+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsRCksTz1OLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUi54MCsiLCAiK1IueTArIikiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJkIiwiTTAsMFoiKSxnKCl9ZnVuY3Rpb24gZSh0LGUpe3JldHVybiAxLWUvUi5ofWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gMS0odCsoUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4odC0oUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIGEodCxpKXt2YXIgYT13K3Qsbz1FK2kscz1NYXRoLm1heCgwLE1hdGgubWluKDEsZSh3LEUpLGUoYSxvKSkpLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHIodyxFKSxyKGEsbykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKHcsRSksbihhLG8pKSksdT0ocy8yK2MpKlIudyxmPSgxLXMvMi1sKSpSLncsaD0odStmKS8yLGQ9Zi11LHA9KDEtcykqUi5oLG09cC1kL187ZDxiLk1JTlpPT00/KEM9Uyx6LmF0dHIoImQiLEQpLE8uYXR0cigiZCIsIk0wLDBaIikpOihDPXthOlMuYStzKkwsYjpTLmIrbCpMLGM6Uy5jK2MqTH0sei5hdHRyKCJkIixEKyJNIit1KyIsIitwKyJIIitmKyJMIitoKyIsIittKyJMIit1KyIsIitwKyJaIiksTy5hdHRyKCJkIiwiTSIrdysiLCIrRSsibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrdSsiLCIrcCtNKyJNIitmKyIsIitwK1QrIk0iK2grIiwiK20raykpLFB8fCh6LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsST4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxPLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxQPSEwKX1mdW5jdGlvbiBmKHQsZSl7aWYoQz09PVMpcmV0dXJuIDI9PT1lJiZ4KCksaShqKTtpKGopO3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKSxBJiZqLmRhdGEmJmouX2NvbnRleHQuc2hvd1RpcHMmJihsLm5vdGlmaWVyKCJEb3VibGUtY2xpY2sgdG88YnI+em9vbSBiYWNrIG91dCIsImxvbmciKSxBPSExKX1mdW5jdGlvbiBoKCl7Uz17YTpSLmFheGlzLnJhbmdlWzBdLGI6Ui5iYXhpcy5yYW5nZVsxXSxjOlIuY2F4aXMucmFuZ2VbMV19LEM9U31mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC9SLnhheGlzLl9tLG49ZS9SLnlheGlzLl9tO0M9e2E6Uy5hLW4sYjpTLmIrKHIrbikvMixjOlMuYy0oci1uKS8yfTt2YXIgaT1bQy5hLEMuYixDLmNdLnNvcnQoKSxhPXthOmkuaW5kZXhPZihDLmEpLGI6aS5pbmRleE9mKEMuYiksYzppLmluZGV4T2YoQy5jKX07aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLEM9e2E6aVthLmFdLGI6aVthLmJdLGM6aVthLmNdfSxlPShTLmEtQy5hKSpSLnlheGlzLl9tLHQ9KFMuYy1DLmMtUy5iK0MuYikqUi54YXhpcy5fbSk7dmFyIG89InRyYW5zbGF0ZSgiKyhSLngwK3QpKyIsIisoUi55MCtlKSsiKSI7Ui5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBzPSJ0cmFuc2xhdGUoIistdCsiLCIrLWUrIikiO2lmKFIuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIscyksUi5hYXhpcy5yYW5nZT1bQy5hLFIuc3VtLUMuYi1DLmNdLFIuYmF4aXMucmFuZ2U9W1Iuc3VtLUMuYS1DLmMsQy5iXSxSLmNheGlzLnJhbmdlPVtSLnN1bS1DLmEtQy5iLEMuY10sUi5kcmF3QXhlcyghMSksUi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxSLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciBsPVIucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi5wb2ludHMiKTtsLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbCh1LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsUiksbC5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxSKX19ZnVuY3Rpb24gcCh0LGUpe2lmKHQpe3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKX1lbHNlIDI9PT1lJiZ4KCl9ZnVuY3Rpb24gZygpe04uc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX1mdW5jdGlvbiB4KCl7dmFyIHQ9e307dFtSLmlkKyIuYWF4aXMubWluIl09MCx0W1IuaWQrIi5iYXhpcy5taW4iXT0wLHRbUi5pZCsiLmNheGlzLm1pbiJdPTAsai5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLHMucmVsYXlvdXQoaix0KX12YXIgdyxFLFMsTCxDLEksRCxQLHosTyxSPXRoaXMsRj1SLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLGo9Ui5ncmFwaERpdixOPWouX2Z1bGxMYXlvdXQuX3pvb21sYXllcixCPXtlbGVtZW50OkYsZ2Q6aixwbG90aW5mbzp7eGF4aXM6Ui54YXhpcyx5YXhpczpSLnlheGlzfSxkb3VibGVjbGljazp4LHN1YnBsb3Q6Ui5pZCxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe0IueGF4ZXM9W1IueGF4aXNdLEIueWF4ZXM9W1IueWF4aXNdO3ZhciBpPWouX2Z1bGxMYXlvdXQuZHJhZ21vZGU7ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIiksQi5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KEIubW92ZUZuPWEsQi5kb25lRm49Zix0KGUscixuKSk6InBhbiI9PT1pPyhCLm1vdmVGbj1kLEIuZG9uZUZuPXAsaCgpLGcoKSk6InNlbGVjdCIhPT1pJiYibGFzc28iIT09aXx8eShlLHIsbixCLGkpfX07Ri5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKGosdCxSLmlkKSxqLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9RixqLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9Ui5pZH0sRi5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe2ouX2RyYWdnaW5nfHxtLnVuaG92ZXIoaix0KX0sRi5vbmNsaWNrPWZ1bmN0aW9uKHQpe3YuY2xpY2soaix0LFIuaWQpfSxtLmluaXQoQil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjMyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vLi4vY29tcG9uZW50cy9meCI6NjUyLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzAxLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9wbG90bHkiOjc3NCwiLi4vY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6Nzg0LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3OTUsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6Nzk2LCIuLi9wbG90cyI6ODM4LGQzOjEyMSx0aW55Y29sb3IyOjU0Mn1dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdShyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGk9bi50cmFjZXNbZV07aSYmZChyLm1vZHVsZXNbZV0uX21vZHVsZS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiBhKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGk9bi50cmFuc2Zvcm1zW2VdO2kmJmQoci50cmFuc2Zvcm1zUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgaT1yLnN1YnBsb3RzUmVnaXN0cnlbZV0sYT1pLmxheW91dEF0dHJpYnV0ZXMsbz0ic3VicGxvdCI9PT1pLmF0dHI/aS5uYW1lOmkuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgcz1uLnN1YnBsb3RzW29dO2EmJnMmJmQoYSxzKX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0PXQudHlwZSksdH12YXIgbD10KCIuL2xpYi9sb2dnZXJzIiksYz10KCIuL2xpYi9ub29wIiksdT10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLGY9dCgiLi9saWIvZXh0ZW5kIiksaD1mLmV4dGVuZEZsYXQsZD1mLmV4dGVuZERlZXBBbGwscD10KCIuL3Bsb3RzL2F0dHJpYnV0ZXMiKSxtPXQoIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKTtyLm1vZHVsZXM9e30sci5hbGxDYXRlZ29yaWVzPXt9LHIuYWxsVHlwZXM9W10sci5zdWJwbG90c1JlZ2lzdHJ5PXt9LHIudHJhbnNmb3Jtc1JlZ2lzdHJ5PXt9LHIuY29tcG9uZW50c1JlZ2lzdHJ5PXt9LHIubGF5b3V0QXJyYXlDb250YWluZXJzPVtdLHIubGF5b3V0QXJyYXlSZWdleGVzPVtdLHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzPXt9LHIucmVnaXN0ZXI9ZnVuY3Rpb24odCxlLG4sYSl7aWYoci5tb2R1bGVzW2VdKXJldHVybiB2b2lkIGwubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Zvcih2YXIgbz17fSxzPTA7czxuLmxlbmd0aDtzKyspb1tuW3NdXT0hMCxyLmFsbENhdGVnb3JpZXNbbltzXV09ITA7ci5tb2R1bGVzW2VdPXtfbW9kdWxlOnQsY2F0ZWdvcmllczpvfSxhJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgmJihyLm1vZHVsZXNbZV0ubWV0YT1hKSxyLmFsbFR5cGVzLnB1c2goZSk7Zm9yKHZhciBjIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5KWkoYyxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJmgoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKX0sci5yZWdpc3RlclN1YnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gdm9pZCBsLmxvZygiUGxvdCB0eXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTtuKHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10O2Zvcih2YXIgaSBpbiByLmNvbXBvbmVudHNSZWdpc3RyeSlvKGksdC5uYW1lKX0sci5yZWdpc3RlckNvbXBvbmVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7ci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmdShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSxuKHQpKTtmb3IodmFyIHMgaW4gci5tb2R1bGVzKWkoZSxzKTtmb3IodmFyIGwgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KW8oZSxsKTtmb3IodmFyIGMgaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpYShlLGMpO3Quc2NoZW1hJiZ0LnNjaGVtYS5sYXlvdXQmJmQobSx0LnNjaGVtYS5sYXlvdXQpfSxyLnJlZ2lzdGVyVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3IudHJhbnNmb3Jtc1JlZ2lzdHJ5W3QubmFtZV09dDtmb3IodmFyIGUgaW4gci5jb21wb25lbnRzUmVnaXN0cnkpYShlLHQubmFtZSl9LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQucilyZXR1cm4gbC53YXJuKCJUcmllZCB0byBwdXQgYSBwb2xhciB0cmFjZSBvbiBhbiBpbmNvbXBhdGlibGUgZ3JhcGggb2YgY2FydGVzaWFuIGRhdGEuIElnbm9yaW5nIHRoaXMgZGF0YXNldC4iLHQpLCExO3ZhciBlPXIubW9kdWxlc1tzKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9cyh0KSkpcmV0dXJuITE7dmFyIG49ci5tb2R1bGVzW3RdO3JldHVybiBufHwodCYmImFyZWEiIT09dCYmbC5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLG49ci5tb2R1bGVzW3AudHlwZS5kZmx0XSksISFuLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKW5baV0udHlwZT09PWUmJnIucHVzaChpKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbj9uW2VdfHxjOmN9fSx7Ii4vbGliL2V4dGVuZCI6NzI0LCIuL2xpYi9sb2dnZXJzIjo3MzksIi4vbGliL25vb3AiOjc0MywiLi9saWIvcHVzaF91bmlxdWUiOjc0NywiLi9wbG90cy9hdHRyaWJ1dGVzIjo3NzcsIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyOX1dLDg1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlInRoZW1lc19fdGh1bWIiOmU9e2F1dG9zaXplOiEwLHdpZHRoOjE1MCxoZWlnaHQ6MTUwLHRpdGxlOiIiLHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6IiIsaGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOiIiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWZ1bmN0aW9uIGkodCl7cmV0dXJuWyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXS5pbmRleE9mKHQuc2xpY2UoMCw1KSk+LTF9dmFyIGE9dCgiLi4vbGliIiksbz10KCIuLi9wbG90cy9wbG90cyIpLHM9YS5leHRlbmRGbGF0LGw9YS5leHRlbmREZWVwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodD10LmZyYW1ld29yay5nZXRDb25maWcoKSk7dmFyIHIsYT10LmRhdGEsYz10LmxheW91dCx1PWwoW10sYSksZj1sKHt9LGMsbihlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKGYud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJihmLmhlaWdodD1lLmhlaWdodCksInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzc3x8InRoZW1lc19fdGh1bWIiPT09ZS50aWxlQ2xhc3Mpe2YuYW5ub3RhdGlvbnM9W107dmFyIGQ9T2JqZWN0LmtleXMoZik7Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylpKGRbcl0pJiYoZltkW3JdXS50aXRsZT0iIik7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7dmFyIHA9dVtyXTtwLnNob3dzY2FsZT0hMSxwLm1hcmtlciYmKHAubWFya2VyLnNob3dzY2FsZT0hMSksInBpZSI9PT1wLnR5cGUmJihwLnRleHRwb3NpdGlvbj0ibm9uZSIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZi5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBtPW8uZ2V0U3VicGxvdElkcyhmLCJnbDNkIik7aWYobS5sZW5ndGgpe3ZhciB2PXt9O2ZvcigidGh1bWJuYWlsIj09PWUudGlsZUNsYXNzJiYodj17dGl0bGU6IiIsc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciBnPWZbbVtyXV07Zy54YXhpc3x8KGcueGF4aXM9e30pLGcueWF4aXN8fChnLnlheGlzPXt9KSxnLnpheGlzfHwoZy56YXhpcz17fSkscyhnLnhheGlzLHYpLHMoZy55YXhpcyx2KSxzKGcuemF4aXMsdiksZy5fc2NlbmU9bnVsbH19dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS50aWxlQ2xhc3MmJih5LmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIGI9e2dkOnksdGQ6eSxsYXlvdXQ6ZixkYXRhOnUsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm4idHJhbnNwYXJlbnQiIT09ZS5zZXRCYWNrZ3JvdW5kJiYoYi5jb25maWcuc2V0QmFja2dyb3VuZD1lLnNldEJhY2tncm91bmR8fCJvcGFxdWUiKSxiLmdkLmRlZmF1bHRMYXlvdXQ9bihlLnRpbGVDbGFzcyksYn19LHsiLi4vbGliIjo3MzUsIi4uL3Bsb3RzL3Bsb3RzIjo4Mzh9XSw4NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBlPWV8fHt9LGUuZm9ybWF0PWUuZm9ybWF0fHwicG5nIixuZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3QuX3NuYXBzaG90SW5Qcm9ncmVzcyYmbihuZXcgRXJyb3IoIlNuYXBzaG90dGluZyBhbHJlYWR5IGluIHByb2dyZXNzLiIpKSxhLmlzSUUoKSYmInN2ZyIhPT1lLmZvcm1hdCYmbihuZXcgRXJyb3IoIlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiIpKSx0Ll9zbmFwc2hvdEluUHJvZ3Jlc3M9ITA7dmFyIHM9aSh0LGUpLGw9ZS5maWxlbmFtZXx8dC5mbnx8Im5ld3Bsb3QiO2wrPSIuIitlLmZvcm1hdCxzLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSxvKGUsbCl9KS50aGVuKGZ1bmN0aW9uKHQpe3IodCl9KS5jYXRjaChmdW5jdGlvbihlKXt0Ll9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEsbihlKX0pfSl9dmFyIGk9dCgiLi4vcGxvdF9hcGkvdG9faW1hZ2UiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9maWxlc2F2ZXIiKTtlLmV4cG9ydHM9bn0seyIuLi9saWIiOjczNSwiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjc3MiwiLi9maWxlc2F2ZXIiOjg1Nn1dLDg1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxuPSJkb3dubG9hZCJpbiByLGk9L1ZlcnNpb25cL1tcZFwuXSsuKlNhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYSxvKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmbyhuZXcgRXJyb3IoIklFIDwgMTAgdW5zdXBwb3J0ZWQiKSksaSYmKGRvY3VtZW50LmxvY2F0aW9uLmhyZWY9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIit0LnNsaWNlKHQuc2VhcmNoKC9bLDtdLykpLGEoZSkpLGV8fChlPSJkb3dubG9hZCIpLG4mJihyLmhyZWY9dCxyLmRvd25sb2FkPWUsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxhKGUpKSwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLm1zU2F2ZUJsb2Ipe3ZhciBzPXQuc3BsaXQoL15kYXRhOmltYWdlXC9zdmdcK3htbCwvKVsxXSxsPWRlY29kZVVSSUNvbXBvbmVudChzKTtuYXZpZ2F0b3IubXNTYXZlQmxvYihuZXcgQmxvYihbbF0pLGUpLGEoZSl9byhuZXcgRXJyb3IoImRvd25sb2FkIGVycm9yIikpfSl9O2UuZXhwb3J0cz1ufSx7fV0sODU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZ2V0RGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2hhcyYmKHQuX2hhcygiZ2wzZCIpfHx0Ll9oYXMoImdsMmQiKSk/NTAwOjB9LHIuZ2V0UmVkcmF3RnVuYz1mdW5jdGlvbih0KXtpZighKHQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIGZ1bmN0aW9uKCl7KHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pfX19LHt9XSw4NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9oZWxwZXJzIiksaT17Z2V0RGVsYXk6bi5nZXREZWxheSxnZXRSZWRyYXdGdW5jOm4uZ2V0UmVkcmF3RnVuYyxjbG9uZTp0KCIuL2Nsb25lcGxvdCIpLHRvU1ZHOnQoIi4vdG9zdmciKSxzdmdUb0ltZzp0KCIuL3N2Z3RvaW1nIiksdG9JbWFnZTp0KCIuL3RvaW1hZ2UiKSxkb3dubG9hZEltYWdlOnQoIi4vZG93bmxvYWQiKX07ZS5leHBvcnRzPWl9LHsiLi9jbG9uZXBsb3QiOjg1NCwiLi9kb3dubG9hZCI6ODU1LCIuL2hlbHBlcnMiOjg1NywiLi9zdmd0b2ltZyI6ODU5LCIuL3RvaW1hZ2UiOjg2MCwiLi90b3N2ZyI6ODYxfV0sODU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5lbWl0dGVyfHxuZXcgYSxyPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sYSl7dmFyIG89d2luZG93LkltYWdlLHM9dC5zdmcsbD10LmZvcm1hdHx8InBuZyI7aWYoaS5pc0lFKCkmJiJzdmciIT09bCl7dmFyIGM9bmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKTtyZXR1cm4gYShjKSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIixjKX12YXIgdT10LmNhbnZhcyxmPXQuc2NhbGV8fDEsaD10LndpZHRofHwzMDAsZD10LmhlaWdodHx8MTUwLHA9ZipoLG09ZipkLHY9dS5nZXRDb250ZXh0KCIyZCIpLGc9bmV3IG8seT0iZGF0YTppbWFnZS9zdmcreG1sLCIrZW5jb2RlVVJJQ29tcG9uZW50KHMpO3Uud2lkdGg9cCx1LmhlaWdodD1tLGcub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKCJzdmciIT09bCYmdi5kcmF3SW1hZ2UoZywwLDAscCxtKSxsKXtjYXNlImpwZWciOnI9dS50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlInBuZyI6cj11LnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7YnJlYWs7Y2FzZSJ3ZWJwIjpyPXUudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7Y2FzZSJzdmciOnI9eTticmVhaztkZWZhdWx0OnZhciBpPSJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIjtpZihhKG5ldyBFcnJvcihpKSksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIsaSl9bihyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGcub25lcnJvcj1mdW5jdGlvbihyKXtpZihhKHIpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLHIpfSxnLnNyYz15fSk7cmV0dXJuIHQucHJvbWlzZT9yOmV9dmFyIGk9dCgiLi4vbGliIiksYT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MzUsZXZlbnRzOjEyOX1dLDg2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXMuZ2V0RGVsYXkoaC5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWMoaCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyLmlkPW8ucmFuZHN0cigpLG49dSh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmguX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmguX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpyLGVtaXR0ZXI6bixzdmc6dH0pLG4uY2xlYW49ZnVuY3Rpb24oKXtoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfX0sdCl9dmFyIG49bmV3IGksZj1sKHQse2Zvcm1hdDoicG5nIn0pLGg9Zi5nZDtoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpO3ZhciBkPXMuZ2V0UmVkcmF3RnVuYyhoKTtyZXR1cm4gYS5wbG90KGgsZi5kYXRhLGYubGF5b3V0LGYuY29uZmlnKS50aGVuKGQpLnRoZW4ocikuY2F0Y2goZnVuY3Rpb24odCl7bi5lbWl0KCJlcnJvciIsdCl9KSxufQp2YXIgaT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT10KCIuLi9wbG90bHkiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi9oZWxwZXJzIiksbD10KCIuL2Nsb25lcGxvdCIpLGM9dCgiLi90b3N2ZyIpLHU9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1ufSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90bHkiOjc3NCwiLi9jbG9uZXBsb3QiOjg1NCwiLi9oZWxwZXJzIjo4NTcsIi4vc3ZndG9pbWciOjg1OSwiLi90b3N2ZyI6ODYxLGV2ZW50czoxMjl9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1hLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSkuaHRtbCgiIikscj10LnJlcGxhY2UoLygmW147XSo7KS9naSxmdW5jdGlvbih0KXtyZXR1cm4iJmx0OyI9PT10PyImIzYwOyI6IiZydDsiPT09dD8iJiM2MjsiOnQuaW5kZXhPZigiPCIpIT09LTF8fHQuaW5kZXhPZigiPiIpIT09LTE/IiI6ZS5odG1sKHQpLnRleHQoKX0pO3JldHVybiBlLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7Iil9dmFyIGE9dCgiZDMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHU9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBmLGg9dC5fZnVsbExheW91dCxkPWguX3BhcGVyLHA9aC5fdG9wcGFwZXIsbT1oLndpZHRoLHY9aC5oZWlnaHQ7ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKHMuc2V0UmVjdCwwLDAsbSx2KS5jYWxsKGwuZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciBnPWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGY9MDtmPGcubGVuZ3RoO2YrKyl7dmFyIHk9Z1tmXTt5LnRvU1ZHJiZ5LnRvU1ZHKHQpfWlmKHApe3ZhciBiPXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKTtmb3IoZj0wO2Y8eC5sZW5ndGg7ZisrKXt2YXIgXz14W2ZdO18uY2hpbGROb2Rlcy5sZW5ndGgmJmQubm9kZSgpLmFwcGVuZENoaWxkKF8pfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixkLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnN0eWxlLnZpc2liaWxpdHl8fCJub25lIj09PXRoaXMuc3R5bGUuZGlzcGxheSlyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10aGlzLnN0eWxlLmZvbnRGYW1pbHk7ZSYmZS5pbmRleE9mKCciJykhPT0tMSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUucmVwbGFjZSgvIi9nLCJUT0JFU1RSSVBQRUQiKSl9KSxkLnNlbGVjdEFsbCgiLnBvaW50LC5zY2F0dGVycHRzIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWEuc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJmUuaW5kZXhPZigidXJsKCIpIT09LTEmJnQuc3R5bGUoImZpbGwiLGUucmVwbGFjZSgvIi9nLCJUT0JFU1RSSVBQRUQiKSl9KSwicGRmIiE9PWUmJiJlcHMiIT09ZXx8ZC5zZWxlY3RBbGwoIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMCksZC5ub2RlKCkuc2V0QXR0cmlidXRlTlMoYy54bWxucywieG1sbnMiLGMuc3ZnKSxkLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhjLnhtbG5zLCJ4bWxuczp4bGluayIsYy54bGluayksInN2ZyI9PT1lJiZyJiYoZC5hdHRyKCJ3aWR0aCIsciptKSxkLmF0dHIoImhlaWdodCIscip2KSxkLmF0dHIoInZpZXdCb3giLCIwIDAgIittKyIgIit2KSk7dmFyIHc9KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoZC5ub2RlKCkpO3JldHVybiB3PW4odyksdz1pKHcpLHc9dy5yZXBsYWNlKHUsIiciKSxvLmlzSUUoKSYmKHc9dy5yZXBsYWNlKC8iL2dpLCInIiksdz13LnJlcGxhY2UoLyhcKCcjKShbXiddKikoJ1wpKS9naSwnKCIjJDIiKScpLHc9dy5yZXBsYWNlKC8oXFwnKS9naSwnIicpKSx3fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzE2LCIuLi9saWIiOjczNSxkMzoxMjF9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikubWVyZ2VBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuKGUudGV4dCx0LCJ0eCIpLG4oZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIHI9ZS5tYXJrZXI7aWYocil7bihyLm9wYWNpdHksdCwibW8iKSxuKHIuY29sb3IsdCwibWMiKTt2YXIgaT1yLmxpbmU7aSYmKG4oaS5jb2xvcix0LCJtbGMiKSxuKGkud2lkdGgsdCwibWx3IikpfX19LHsiLi4vLi4vbGliIjo3MzV9XSw4NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9cyh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITB9KSx1PW4ubWFya2VyLGY9dS5saW5lLGg9bCh7fSxmLndpZHRoLHtkZmx0OjB9KSxkPWwoe3dpZHRoOmgsZWRpdFR5cGU6ImNhbGMifSxpKCJtYXJrZXIubGluZSIpKSxwPWwoe2xpbmU6ZCxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlciIpLHtzaG93c2NhbGU6dS5zaG93c2NhbGUsY29sb3JiYXI6b30pO2UuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYXV0byIsIm5vbmUiXSxkZmx0OiJub25lIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGZvbnQ6bCh7fSxjLHt9KSxpbnNpZGV0ZXh0Zm9udDpsKHt9LGMse30pLG91dHNpZGV0ZXh0Zm9udDpsKHt9LGMse30pLGNvbnN0cmFpbnRleHQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJib3RoIiwibm9uZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxiYXNlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6cCxyOm4ucix0Om4udCxlcnJvcl95OmEsZXJyb3JfeDphLF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjE4LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIjo2MzcsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MDMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA0NX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxzPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxjLHUsZixoPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxwPWUub3JpZW50YXRpb258fChlLngmJiFlLnk/ImgiOiJ2Iik7ImgiPT09cD8ocj1oLGM9aC5tYWtlQ2FsY2RhdGEoZSwieCIpLGw9ZC5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9ZS54Y2FsZW5kYXIpOihyPWQsYz1kLm1ha2VDYWxjZGF0YShlLCJ5IiksbD1oLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1lLnljYWxlbmRhcik7dmFyIG09TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHY9bmV3IEFycmF5KG0pO2Zvcih1PTA7dTxtO3UrKyl2W3VdPXtwOmxbdV0sczpjW3VdfTt2YXIgZyx5PWUuYmFzZTtpZihBcnJheS5pc0FycmF5KHkpKXtmb3IodT0wO3U8TWF0aC5taW4oeS5sZW5ndGgsdi5sZW5ndGgpO3UrKylnPXIuZDJjKHlbdV0sMCxmKSxuKGcpPyh2W3VdLmI9K2csdlt1XS5oYXNCPTEpOnZbdV0uYj0wO2Zvcig7dTx2Lmxlbmd0aDt1Kyspdlt1XS5iPTB9ZWxzZXtnPXIuZDJjKHksMCxmKTt2YXIgYj1uKGcpO2ZvcihnPWI/ZzowLHU9MDt1PHYubGVuZ3RoO3UrKyl2W3VdLmI9ZyxiJiYodlt1XS5oYXNCPTEpfXJldHVybiBhKGUsIm1hcmtlciIpJiZvKGUsZS5tYXJrZXIuY29sb3IsIm1hcmtlciIsImMiKSxhKGUsIm1hcmtlci5saW5lIikmJm8oZSxlLm1hcmtlci5saW5lLmNvbG9yLCJtYXJrZXIubGluZSIsImMiKSxzKHYsZSksdn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYxNywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NjIsImZhc3QtaXNudW1lcmljIjoxMzF9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfXZhciBmPW4uY29lcmNlRm9udDtpZighYSh0LGUsYyx1KSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoIm9yaWVudGF0aW9uIixlLngmJiFlLnk/ImgiOiJ2IiksdSgiYmFzZSIpLHUoIm9mZnNldCIpLHUoIndpZHRoIiksdSgidGV4dCIpLHUoImhvdmVydGV4dCIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpLGQ9QXJyYXkuaXNBcnJheShoKXx8ImF1dG8iPT09aCxwPWR8fCJpbnNpZGUiPT09aCxtPWR8fCJvdXRzaWRlIj09PWg7aWYocHx8bSl7dmFyIHY9Zih1LCJ0ZXh0Zm9udCIsYy5mb250KTtwJiZmKHUsImluc2lkZXRleHRmb250Iix2KSxtJiZmKHUsIm91dHNpZGV0ZXh0Zm9udCIsdiksdSgiY29uc3RyYWludGV4dCIpfW8odCxlLHUscixjKSxzKHQsZSxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHModCxlLGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjY0MCwiLi4vLi4vbGliIjo3MzUsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODc1LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDY4LCIuL2F0dHJpYnV0ZXMiOjg2M31dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdFtwXS10LncvMn1mdW5jdGlvbiBjKHQpe3JldHVybiB0W3BdK3Qudy8yfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG4uaW5ib3goXyh0KS1oLHcodCktaCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbi5pbmJveCh0LmItZCx0W21dLWQpKyh0W21dLWQpLyh0W21dLXQuYil9dmFyIGgsZCxwLG0sdixnLHk9dC5jZCxiPXlbMF0udHJhY2UseD15WzBdLnQsXz0iY2xvc2VzdCI9PT1zP2w6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKGwodCksdC5wLXguYmFyZ3JvdXB3aWR0aC8yKX0sdz0iY2xvc2VzdCI9PT1zP2M6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGModCksdC5wK3guYmFyZ3JvdXB3aWR0aC8yKX07ImgiPT09Yi5vcmllbnRhdGlvbj8oaD1yLGQ9ZSxwPSJ5IixtPSJ4Iix2PWYsZz11KTooaD1lLGQ9cixwPSJ4IixtPSJ5IixnPWYsdj11KTt2YXIgTT10W3ArImEiXSxUPXRbbSsiYSJdLGs9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKHMsdixnKTtpZihuLmdldENsb3Nlc3QoeSxrLHQpLHQuaW5kZXghPT0hMSl7dmFyIEE9dC5pbmRleCxFPXlbQV0sUz1FLm1jY3x8Yi5tYXJrZXIuY29sb3IsTD1FLm1sY2N8fGIubWFya2VyLmxpbmUuY29sb3IsQz1FLm1sd3x8Yi5tYXJrZXIubGluZS53aWR0aDthLm9wYWNpdHkoUyk/dC5jb2xvcj1TOmEub3BhY2l0eShMKSYmQyYmKHQuY29sb3I9TCk7dmFyIEk9Yi5iYXNlP0UuYitFLnM6RS5zO3JldHVybiB0W20rIjAiXT10W20rIjEiXT1ULmMycChFW21dLCEwKSx0W20rIkxhYmVsVmFsIl09SSx0W3ArIjAiXT1NLmMycChfKEUpLCEwKSx0W3ArIjEiXT1NLmMycCh3KEUpLCEwKSx0W3ArIkxhYmVsVmFsIl09RS5wLG8oRSxiLHQpLGkuaG92ZXJJbmZvKEUsYix0KSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2NDEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1MiwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTJ9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnNldFBvc2l0aW9ucz10KCIuL3NldF9wb3NpdGlvbnMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvY29sb3JiYXIiKSxuLmFycmF5c1RvQ2FsY2RhdGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJhciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJiYXIiLCJvcmllbnRlZCIsIm1hcmtlckNvbG9yc2NhbGUiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL3NjYXR0ZXIvY29sb3JiYXIiOjEwNDgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NjIsIi4vYXR0cmlidXRlcyI6ODYzLCIuL2NhbGMiOjg2NCwiLi9kZWZhdWx0cyI6ODY1LCIuL2hvdmVyIjo4NjYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg2OCwiLi9sYXlvdXRfZGVmYXVsdHMiOjg2OSwiLi9wbG90Ijo4NzAsIi4vc2VsZWN0Ijo4NzEsIi4vc2V0X3Bvc2l0aW9ucyI6ODcyLCIuL3N0eWxlIjo4NzR9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsZj17fSxoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBkPXJbaF07aWYobi50cmFjZUlzKGQsImJhciIpKXtpZihsPSEwLCJvdmVybGF5IiE9PXQuYmFybW9kZSYmInN0YWNrIiE9PXQuYmFybW9kZSl7dmFyIHA9ZC54YXhpcytkLnlheGlzO2ZbcF0mJih1PSEwKSxmW3BdPSEwfWlmKGQudmlzaWJsZSYmImhpc3RvZ3JhbSI9PT1kLnR5cGUpeyJjYXRlZ29yeSIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFsidiI9PT1kLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLnR5cGUmJihjPSEwKX19fWlmKGwpeyJvdmVybGF5IiE9PXMoImJhcm1vZGUiKSYmcygiYmFybm9ybSIpLHMoImJhcmdhcCIsYyYmIXU/MDouMikscygiYmFyZ3JvdXBnYXAiKX19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4Njh9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLG8saCxkLHApe2Z1bmN0aW9uIG0oZSxyLG4pe3JldHVybiBlLmFwcGVuZCgidGV4dCIpLnRleHQocikuYXR0cih7Y2xhc3M6ImJhcnRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChULmZvbnQsbikuY2FsbCh3LmNvbnZlcnRUb1RzcGFucyx0KX12YXIgdj1yWzBdLnRyYWNlLGc9di5vcmllbnRhdGlvbix5PXModixuKTtpZih5KXt2YXIgYj1sKHYsbik7aWYoIm5vbmUiIT09Yil7dmFyIHgsXyxNLGssQT1jKHYsbix0Ll9mdWxsTGF5b3V0LmZvbnQpLEU9dSh2LG4sQSksUz1mKHYsbixBKSxMPXQuX2Z1bGxMYXlvdXQuYmFybW9kZSxDPSJzdGFjayI9PT1MLEk9InJlbGF0aXZlIj09PUwsUD1DfHxJLHo9cltuXSxPPSFQfHx6Ll9vdXRtb3N0LFI9TWF0aC5hYnMoaC1vKS0yKkQsRj1NYXRoLmFicyhwLWQpLTIqRDtpZigib3V0c2lkZSI9PT1iJiYoT3x8KGI9Imluc2lkZSIpKSwiYXV0byI9PT1iKWlmKE8pe3g9bShlLHksRSksXz1ULmJCb3goeC5ub2RlKCkpLE09Xy53aWR0aCxrPV8uaGVpZ2h0O3ZhciBqPU0+MCYmaz4wLE49TTw9UiYmazw9RixCPU08PUYmJms8PVIsVT0iaCI9PT1nP1I+PU0qKEYvayk6Rj49ayooUi9NKTtqJiYoTnx8Qnx8VSk/Yj0iaW5zaWRlIjooYj0ib3V0c2lkZSIseC5yZW1vdmUoKSx4PW51bGwpfWVsc2UgYj0iaW5zaWRlIjtpZigheCYmKHg9bShlLHksIm91dHNpZGUiPT09Yj9TOkUpLF89VC5iQm94KHgubm9kZSgpKSxNPV8ud2lkdGgsaz1fLmhlaWdodCxNPD0wfHxrPD0wKSlyZXR1cm4gdm9pZCB4LnJlbW92ZSgpO3ZhciBWLEg7Im91dHNpZGUiPT09Yj8oSD0iYm90aCI9PT12LmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PXYuY29uc3RyYWludGV4dCxWPWEobyxoLGQscCxfLGcsSCkpOihIPSJib3RoIj09PXYuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT12LmNvbnN0cmFpbnRleHQsVj1pKG8saCxkLHAsXyxnLEgpKSx4LmF0dHIoInRyYW5zZm9ybSIsVil9fX1mdW5jdGlvbiBpKHQsZSxyLG4saSxhLHMpe3ZhciBsLGMsdSxmLGgsZD1pLndpZHRoLHA9aS5oZWlnaHQsbT0oaS5sZWZ0K2kucmlnaHQpLzIsdj0oaS50b3AraS5ib3R0b20pLzIsZz1NYXRoLmFicyhlLXQpLHk9TWF0aC5hYnMobi1yKTtnPjIqRCYmeT4yKkQ/KGg9RCxnLT0yKmgseS09MipoKTpoPTA7dmFyIGIseDtyZXR1cm4gZDw9ZyYmcDw9eT8oYj0hMSx4PTEpOmQ8PXkmJnA8PWc/KGI9ITAseD0xKTpkPHA9PWc8eT8oYj0hMSx4PXM/TWF0aC5taW4oZy9kLHkvcCk6MSk6KGI9ITAseD1zP01hdGgubWluKHkvZCxnL3ApOjEpLGImJihiPTkwKSxiPyhsPXgqcCxjPXgqZCk6KGw9eCpkLGM9eCpwKSwiaCI9PT1hP2U8dD8odT1lK2grbC8yLGY9KHIrbikvMik6KHU9ZS1oLWwvMixmPShyK24pLzIpOm4+cj8odT0odCtlKS8yLGY9bi1oLWMvMik6KHU9KHQrZSkvMixmPW4raCtjLzIpLG8obSx2LHUsZix4LGIpfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7dmFyIGwsYz0iaCI9PT1hP01hdGguYWJzKG4tcik6TWF0aC5hYnMoZS10KTtjPjIqRCYmKGw9RCk7dmFyIHU9MTtzJiYodT0iaCI9PT1hP01hdGgubWluKDEsYy9pLmhlaWdodCk6TWF0aC5taW4oMSxjL2kud2lkdGgpKTt2YXIgZixoLGQscCxtPShpLmxlZnQraS5yaWdodCkvMix2PShpLnRvcCtpLmJvdHRvbSkvMjtyZXR1cm4gZj11Kmkud2lkdGgsaD11KmkuaGVpZ2h0LCJoIj09PWE/ZTx0PyhkPWUtbC1mLzIscD0ocituKS8yKTooZD1lK2wrZi8yLHA9KHIrbikvMik6bj5yPyhkPSh0K2UpLzIscD1uK2wraC8yKTooZD0odCtlKS8yLHA9bi1sLWgvMiksbyhtLHYsZCxwLHUsITEpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3ZhciBvLHM7cmV0dXJuIGk8MT9vPSJzY2FsZSgiK2krIikgIjooaT0xLG89IiIpLHM9YT8icm90YXRlKCIrYSsiICIrdCsiICIrZSsiKSAiOiIiLCJ0cmFuc2xhdGUoIisoci1pKnQpKyIgIisobi1pKmUpKyIpIitvK3N9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWQodC50ZXh0LGUpO3JldHVybiBwKEUscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWQodC50ZXh0cG9zaXRpb24sZSk7cmV0dXJuIG0oUyxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gaChMLHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gaChDLHQuaW5zaWRldGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gaChJLHQub3V0c2lkZXRleHRmb250LGUscil9ZnVuY3Rpb24gaCh0LGUscixuKXtlPWV8fHt9O3ZhciBpPWQoZS5mYW1pbHksciksYT1kKGUuc2l6ZSxyKSxvPWQoZS5jb2xvcixyKTtyZXR1cm57ZmFtaWx5OnAodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTp2KHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6Zyh0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIGQodCxlKXt2YXIgcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoJiYocj10W2VdKTpyPXQscn1mdW5jdGlvbiBwKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUmJiF0LnN0cmljdClyZXR1cm4gU3RyaW5nKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fWZ1bmN0aW9uIG0odCxlLHIpe3JldHVybiB0LmNvZXJjZU51bWJlciYmKGU9K2UpLHQudmFsdWVzLmluZGV4T2YoZSkhPT0tMT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9ZnVuY3Rpb24gdih0LGUscil7aWYoYihlKSl7ZT0rZTt2YXIgbj10Lm1pbixpPXQubWF4O2lmKCEodm9pZCAwIT09biYmZTxufHx2b2lkIDAhPT1pJiZlPmkpKXJldHVybiBlfXJldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiB4KGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9dmFyIHk9dCgiZDMiKSxiPXQoImZhc3QtaXNudW1lcmljIikseD10KCJ0aW55Y29sb3IyIiksXz10KCIuLi8uLi9saWIiKSx3PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLE09dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLFQ9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLEE9dCgiLi9hdHRyaWJ1dGVzIiksRT1BLnRleHQsUz1BLnRleHRwb3NpdGlvbixMPUEudGV4dGZvbnQsQz1BLmluc2lkZXRleHRmb250LEk9QS5vdXRzaWRldGV4dGZvbnQsRD0zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS54YXhpcyxhPWUueWF4aXMsbz10Ll9mdWxsTGF5b3V0LHM9ZS5wbG90LnNlbGVjdCgiLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLmJhcnMiKS5kYXRhKHIpO3MuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIGJhcnMiKSxzLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLm5vZGUzPXkuc2VsZWN0KHRoaXMpLHM9ZVswXS50LGw9ZVswXS50cmFjZSxjPXMucG9mZnNldCx1PUFycmF5LmlzQXJyYXkoYyk7ci5zZWxlY3RBbGwoImcucG9pbnQiKS5kYXRhKF8uaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnQiLCEwKS5lYWNoKGZ1bmN0aW9uKHIscyl7ZnVuY3Rpb24gZih0KXtyZXR1cm4gMD09PW8uYmFyZ2FwJiYwPT09by5iYXJncm91cGdhcD95LnJvdW5kKE1hdGgucm91bmQodCktaywyKTp0fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9mKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX12YXIgZCxwLG0sdixnPXIucCsodT9jW3NdOmMpLHg9ZytyLncsXz1yLmIsdz1fK3IucztpZigiaCI9PT1sLm9yaWVudGF0aW9uPyhtPWEuYzJwKGcsITApLHY9YS5jMnAoeCwhMCksZD1pLmMycChfLCEwKSxwPWkuYzJwKHcsITApLHIuY3Q9W3AsKG0rdikvMl0pOihkPWkuYzJwKGcsITApLHA9aS5jMnAoeCwhMCksbT1hLmMycChfLCEwKSx2PWEuYzJwKHcsITApLHIuY3Q9WyhkK3ApLzIsdl0pLCEoYihkKSYmYihwKSYmYihtKSYmYih2KSYmZCE9PXAmJm0hPT12KSlyZXR1cm4gdm9pZCB5LnNlbGVjdCh0aGlzKS5yZW1vdmUoKTt2YXIgVD0oci5tbHcrMXx8bC5tYXJrZXIubGluZS53aWR0aCsxfHwoci50cmFjZT9yLnRyYWNlLm1hcmtlci5saW5lLndpZHRoOjApKzEpLTEsaz15LnJvdW5kKFQvMiUxLDIpO2lmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBBPU0ub3BhY2l0eShyLm1jfHxsLm1hcmtlci5jb2xvciksRT1BPDF8fFQ+LjAxP2Y6aDtkPUUoZCxwKSxwPUUocCxkKSxtPUUobSx2KSx2PUUodixtKX12YXIgUz15LnNlbGVjdCh0aGlzKTtTLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsIk0iK2QrIiwiK20rIlYiK3YrIkgiK3ArIlYiK20rIloiKSxuKHQsUyxlLHMsZCxwLG0sdil9KX0pLHMuY2FsbChrLnBsb3QsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2NDEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi9hdHRyaWJ1dGVzIjo4NjMsZDM6MTIxLCJmYXN0LWlzbnVtZXJpYyI6MTMxLHRpbnljb2xvcjI6NTQyfV0sODcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdLGw9aVswXS5ub2RlMztpZihlPT09ITEpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLmRpbT0wO2Vsc2UgZm9yKHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGM9aVtyXTtlLmNvbnRhaW5zKGMuY3QpPyhzLnB1c2goe3BvaW50TnVtYmVyOnIseDphLmMyZChjLngpLHk6by5jMmQoYy55KX0pLGMuZGltPTApOmMuZGltPTF9cmV0dXJuIGwuc2VsZWN0QWxsKCIucG9pbnQiKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltP246MX0pLGwuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbT9uOjF9KSxzfX0seyIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MTN9XSw4NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZihuLmxlbmd0aCl7dmFyIHMsbCxjLHUsZixoPXQuX2Z1bGxMYXlvdXQuYmFybW9kZSxkPSJvdmVybGF5Ij09PWgscD0iZ3JvdXAiPT09aDtpZihkKWkodCxlLHIsbik7ZWxzZSBpZihwKXtmb3Iocz1bXSxsPVtdLGM9MDtjPG4ubGVuZ3RoO2MrKyl1PW5bY10sZj11WzBdLnRyYWNlLHZvaWQgMD09PWYub2Zmc2V0P2wucHVzaCh1KTpzLnB1c2godSk7bC5sZW5ndGgmJmEodCxlLHIsbCkscy5sZW5ndGgmJmkodCxlLHIscyl9ZWxzZXtmb3Iocz1bXSxsPVtdLGM9MDtjPG4ubGVuZ3RoO2MrKyl1PW5bY10sZj11WzBdLnRyYWNlLHZvaWQgMD09PWYuYmFzZT9sLnB1c2godSk6cy5wdXNoKHUpO2wubGVuZ3RoJiZvKHQsZSxyLGwpLHMubGVuZ3RoJiZpKHQsZSxyLHMpfX19ZnVuY3Rpb24gaSh0LGUscixuKXtmb3IodmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLGE9IWksbz0wO288bi5sZW5ndGg7bysrKXt2YXIgbD1uW29dLGM9bmV3IHcoW2xdLCExLGEpO3ModCxlLGMpLGk/KG0odCxyLGMpLHYodCxyLGMpKTpkKHQscixjKX19ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LGE9aS5iYXJub3JtLG89IWEscz1uZXcgdyhuLCExLG8pO2wodCxlLHMpLGE/KG0odCxyLHMpLHYodCxyLHMpKTpkKHQscixzKX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLmJhcm1vZGUsbz0ic3RhY2siPT09YSxsPSJyZWxhdGl2ZSI9PT1hLGM9dC5fZnVsbExheW91dC5iYXJub3JtLHU9bCxmPSEoY3x8b3x8bCksaD1uZXcgdyhuLHUsZik7cyh0LGUsaCkscCh0LHIsaCk7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspZm9yKHZhciBtPW5bZF0sZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2lmKHkucyE9PWIpe3ZhciB4PXkuYit5LnM9PT1oLmdldCh5LnAseS5zKTt4JiYoeS5fb3V0bW9zdD0hMCl9fWMmJnYodCxyLGgpfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuYmFyZ2FwLGg9cy5iYXJncm91cGdhcCxkPXIubWluRGlmZixwPXIudHJhY2VzLG09ZCooMS1sKSx2PW0sZz12KigxLWgpLHk9LWcvMjtmb3Iobj0wO248cC5sZW5ndGg7bisrKWk9cFtuXSxhPWlbMF0sbz1hLnQsby5iYXJ3aWR0aD1nLG8ucG9mZnNldD15LG8uYmFyZ3JvdXB3aWR0aD1tO3IuYmluV2lkdGg9cFswXVswXS50LmJhcndpZHRoLzEwMCxjKHIpLHUodCxlLHIpLGYodCxlLHIpfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuYmFyZ2FwLGg9cy5iYXJncm91cGdhcCxkPXIucG9zaXRpb25zLHA9ci5kaXN0aW5jdFBvc2l0aW9ucyxtPXIubWluRGlmZix2PXIudHJhY2VzLGc9ZC5sZW5ndGghPT1wLmxlbmd0aCx5PXYubGVuZ3RoLGI9bSooMS1sKSx4PWc/Yi95OmIsXz14KigxLWgpO2ZvcihuPTA7bjx5O24rKyl7aT12W25dLGE9aVswXTt2YXIgdz1nPygoMipuKzEteSkqeC1fKS8yOi1fLzI7bz1hLnQsby5iYXJ3aWR0aD1fLG8ucG9mZnNldD13LG8uYmFyZ3JvdXB3aWR0aD1ifXIuYmluV2lkdGg9dlswXVswXS50LmJhcndpZHRoLzEwMCxjKHIpLHUodCxlLHIpLGYodCxlLHIsZyl9ZnVuY3Rpb24gYyh0KXt2YXIgZSxyLG4saSxhLG8scz10LnRyYWNlcztmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXtyPXNbZV0sbj1yWzBdLGk9bi50cmFjZSxvPW4udDt2YXIgbCxjPWkub2Zmc2V0LHU9by5wb2Zmc2V0O2lmKEFycmF5LmlzQXJyYXkoYykpe2ZvcihsPWMuc2xpY2UoMCxyLmxlbmd0aCksYT0wO2E8bC5sZW5ndGg7YSsrKXkobFthXSl8fChsW2FdPXUpO2ZvcihhPWwubGVuZ3RoO2E8ci5sZW5ndGg7YSsrKWwucHVzaCh1KTtvLnBvZmZzZXQ9bH1lbHNlIHZvaWQgMCE9PWMmJihvLnBvZmZzZXQ9Yyk7dmFyIGY9aS53aWR0aCxoPW8uYmFyd2lkdGg7aWYoQXJyYXkuaXNBcnJheShmKSl7dmFyIGQ9Zi5zbGljZSgwLHIubGVuZ3RoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKXkoZFthXSl8fChkW2FdPWgpO2ZvcihhPWQubGVuZ3RoO2E8ci5sZW5ndGg7YSsrKWQucHVzaChoKTtpZihvLmJhcndpZHRoPWQsdm9pZCAwPT09Yyl7Zm9yKGw9W10sYT0wO2E8ci5sZW5ndGg7YSsrKWwucHVzaCh1KyhoLWRbYV0pLzIpO28ucG9mZnNldD1sfX1lbHNlIHZvaWQgMCE9PWYmJihvLmJhcndpZHRoPWYsdm9pZCAwPT09YyYmKG8ucG9mZnNldD11KyhoLWYpLzIpKX19ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9ZyhlKSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPW5bYV0scz1vWzBdLnQsbD1zLnBvZmZzZXQsYz1BcnJheS5pc0FycmF5KGwpLHU9cy5iYXJ3aWR0aCxmPUFycmF5LmlzQXJyYXkodSksaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgZD1vW2hdLHA9ZC53PWY/dVtoXTp1O2RbaV09ZC5wKyhjP2xbaF06bCkrcC8yfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpPXIudHJhY2VzLGE9ci5kaXN0aW5jdFBvc2l0aW9ucyxvPWFbMF0scz1yLm1pbkRpZmYsbD1zLzI7Xy5taW5EdGljayhlLHMsbyxuKTtmb3IodmFyIGM9TWF0aC5taW4uYXBwbHkoTWF0aCxhKS1sLHU9TWF0aC5tYXguYXBwbHkoTWF0aCxhKStsLGY9MDtmPGkubGVuZ3RoO2YrKyl7dmFyIGg9aVtmXSxkPWhbMF0scD1kLnRyYWNlO2lmKHZvaWQgMCE9PXAud2lkdGh8fHZvaWQgMCE9PXAub2Zmc2V0KWZvcih2YXIgbT1kLnQsdj1tLnBvZmZzZXQsZz1tLmJhcndpZHRoLHk9QXJyYXkuaXNBcnJheSh2KSxiPUFycmF5LmlzQXJyYXkoZykseD0wO3g8aC5sZW5ndGg7eCsrKXt2YXIgdz1oW3hdLE09eT92W3hdOnYsVD1iP2dbeF06ZyxrPXcucCxBPWsrTSxFPUErVDtjPU1hdGgubWluKGMsQSksdT1NYXRoLm1heCh1LEUpfX1fLmV4cGFuZChlLFtjLHVdLHtwYWRkZWQ6ITF9KX1mdW5jdGlvbiBoKHQsZSl7eSh0WzBdKT90WzBdPU1hdGgubWluKHRbMF0sZSk6dFswXT1lLHkodFsxXSk/dFsxXT1NYXRoLm1heCh0WzFdLGUpOnRbMV09ZX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT1nKGUpLGE9W251bGwsbnVsbF0sbz0wO288bi5sZW5ndGg7bysrKWZvcih2YXIgcz1uW29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PWMuYixmPXUrYy5zO2NbaV09Zix5KGUuYzJsKGYpKSYmaChhLGYpLGMuaGFzQiYmeShlLmMybCh1KSkmJmgoYSx1KX1fLmV4cGFuZChlLGEse3RvemVybzohMCxwYWRkZWQ6ITB9KX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLmJhcm5vcm0sYz1nKGUpLHU9ci50cmFjZXMsZj1bbnVsbCxudWxsXTtmb3Iobj0wO248dS5sZW5ndGg7bisrKWZvcihpPXVbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKWlmKG89aVthXSxvLnMhPT1iKXt2YXIgZD1yLnB1dChvLnAsby5iK28ucykscD1kK28uYitvLnM7by5iPWQsb1tjXT1wLGx8fCh5KGUuYzJsKHApKSYmaChmLHApLG8uaGFzQiYmeShlLmMybChkKSkmJmgoZixkKSl9bHx8Xy5leHBhbmQoZSxmLHt0b3plcm86ITAscGFkZGVkOiEwfSl9ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIGE9bltpXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cy5zIT09YiYmci5wdXQocy5wLHMuYitzLnMpfX1mdW5jdGlvbiB2KHQsZSxyKXtmdW5jdGlvbiBuKHQpe3koZS5jMmwodCkpJiYodDxsLXN8fHQ+YytzfHwheShsKSkmJihmPSEwLGgodSx0KSl9Zm9yKHZhciBpPXIudHJhY2VzLGE9ZyhlKSxvPSJmcmFjdGlvbiI9PT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0/MToxMDAscz1vLzFlOSxsPWUubDJjKGUuYzJsKDApKSxjPSJzdGFjayI9PT10Ll9mdWxsTGF5b3V0LmJhcm1vZGU/bzpsLHU9W2wsY10sZj0hMSxkPTA7ZDxpLmxlbmd0aDtkKyspZm9yKHZhciBwPWlbZF0sbT0wO208cC5sZW5ndGg7bSsrKXt2YXIgdj1wW21dO2lmKHYucyE9PWIpe3ZhciB4PU1hdGguYWJzKG8vci5nZXQodi5wLHYucykpO3YuYio9eCx2LnMqPXg7dmFyIHc9di5iLE09dyt2LnM7dlthXT1NLG4oTSksdi5oYXNCJiZuKHcpfX1fLmV4cGFuZChlLHUse3RvemVybzohMCxwYWRkZWQ6Zn0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQuX2lkLmNoYXJBdCgwKX12YXIgeT10KCJmYXN0LWlzbnVtZXJpYyIpLGI9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx4PXQoIi4uLy4uL3JlZ2lzdHJ5IiksXz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHc9dCgiLi9zaWV2ZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9ZS54YXhpcyxhPWUueWF4aXMsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1bXSxjPVtdO2ZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciB1PW9bcl07dS52aXNpYmxlPT09ITAmJngudHJhY2VJcyh1LCJiYXIiKSYmdS54YXhpcz09PWkuX2lkJiZ1LnlheGlzPT09YS5faWQmJigiaCI9PT11Lm9yaWVudGF0aW9uP2wucHVzaChzW3JdKTpjLnB1c2goc1tyXSkpfW4odCxpLGEsYyksbih0LGEsaSxsKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL3NpZXZlLmpzIjo4NzMsImZhc3QtaXNudW1lcmljIjoxMzF9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy50cmFjZXM9dCx0aGlzLnNlcGFyYXRlTmVnYXRpdmVWYWx1ZXM9ZSx0aGlzLmRvbnRNZXJnZU92ZXJsYXBwaW5nRGF0YT1yO2Zvcih2YXIgbj0xLzAsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD10W3NdLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTt1LnAhPT1hJiZvLnB1c2godS5wKX1sWzBdJiZsWzBdLndpZHRoMSYmKG49TWF0aC5taW4obFswXS53aWR0aDEsbikpfXRoaXMucG9zaXRpb25zPW87dmFyIGY9aS5kaXN0aW5jdFZhbHMobyk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz1mLnZhbHMsMT09PWYudmFscy5sZW5ndGgmJm4hPT0xLzA/dGhpcy5taW5EaWZmPW46dGhpcy5taW5EaWZmPU1hdGgubWluKGYubWluRGlmZixuKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319ZS5leHBvcnRzPW47dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO24ucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sbi5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcGFyYXRlTmVnYXRpdmVWYWx1ZXM/InYiOiJeIikrKHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi8uLi9saWIiOjczNX1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYmFycyIpLHI9ZS5zaXplKCkscz10Ll9mdWxsTGF5b3V0O2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KS5lYWNoKGZ1bmN0aW9uKHQpeygic3RhY2siPT09cy5iYXJtb2RlJiZyPjF8fDA9PT1zLmJhcmdhcCYmMD09PXMuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5tYXJrZXIsbz1yLmxpbmUscz1hLnRyeUNvbG9yc2NhbGUociwiIiksbD1hLnRyeUNvbG9yc2NhbGUociwibGluZSIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGUsYSxjPSh0Lm1sdysxfHxvLndpZHRoKzEpLTEsdT1uLnNlbGVjdCh0aGlzKTtlPSJtYyJpbiB0P3QubWNjPXModC5tYyk6QXJyYXkuaXNBcnJheShyLmNvbG9yKT9pLmRlZmF1bHRMaW5lOnIuY29sb3IsdS5zdHlsZSgic3Ryb2tlLXdpZHRoIixjKyJweCIpLmNhbGwoaS5maWxsLGUpLGMmJihhPSJtbGMiaW4gdD90Lm1sY2M9bCh0Lm1sYyk6QXJyYXkuaXNBcnJheShvLmNvbG9yKT9pLmRlZmF1bHRMaW5lOm8uY29sb3IsdS5jYWxsKGkuc3Ryb2tlLGEpKX0pfSksZS5jYWxsKG8uc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjQxLGQzOjEyMX1dLDg3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoIm1hcmtlci5jb2xvciIsbyksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjIwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYyNH1dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz1uLm1hcmtlcixzPW8ubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6YSh7fSxuLnRleHQse30pLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxkZmx0OiJvdXRsaWVycyIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0saml0dGVyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxwb2ludHBvczp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWFya2VyOntvdXRsaWVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsIDAsIDAsIDApIixlZGl0VHlwZToic3R5bGUifSxzeW1ib2w6YSh7fSxvLnN5bWJvbCx7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9KSxvcGFjaXR5OmEoe30sby5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSksc2l6ZTphKHt9LG8uc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0pLGNvbG9yOmEoe30sby5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6YSh7fSxzLmNvbG9yLHthcnJheU9rOiExLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6YSh7fSxzLndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImJveGVzIiwicG9pbnRzIl0sZGZsdDoiYm94ZXMrcG9pbnRzIixlZGl0VHlwZToic3R5bGUifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1fV0sODc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXtpZihlIGluIHQpcmV0dXJuIHIubWFrZUNhbGNkYXRhKHQsZSk7dmFyIGE7YT1lKyIwImluIHQ/dFtlKyIwIl06Im5hbWUiaW4gdCYmKCJjYXRlZ29yeSI9PT1yLnR5cGV8fGModC5uYW1lKSYmWyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkhPT0tMXx8dS5pc0RhdGVUaW1lKHQubmFtZSkmJiJkYXRlIj09PXIudHlwZSk/dC5uYW1lOmk7dmFyIG89ci5kMmMoYSwwLHRbZSsiY2FsZW5kYXIiXSk7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG99KX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIrMSksaT0wO2k8cjtpKyspbltpXT10W2ldLWU7cmV0dXJuIG5bcl09dFtyLTFdK2Usbn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj17dGV4dDoidHgifTtmb3IodmFyIGkgaW4gbilBcnJheS5pc0FycmF5KGVbaV0pJiYodFtuW2ldXT1lW2ldW3JdKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC52fXZhciBjPXQoImZhc3QtaXNudW1lcmljIiksdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaCxkLHAsbSx2PXQuX2Z1bGxMYXlvdXQsZz1mLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IikseT1mLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksYj1bXSx4PSJ2aW9saW4iPT09ZS50eXBlPyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyI7ImgiPT09ZS5vcmllbnRhdGlvbj8oaD1nLGQ9IngiLHA9eSxtPSJ5Iik6KGg9eSxkPSJ5IixwPWcsbT0ieCIpO3ZhciBfPWgubWFrZUNhbGNkYXRhKGUsZCksdz1uKGUsbSxwLF8sdlt4XSksTT11LmRpc3RpbmN0VmFscyh3KSxUPU0udmFscyxrPU0ubWluRGlmZi8yLEE9aShULGspLEU9Xy5sZW5ndGgsUz1ULmxlbmd0aCxMPWEoUyk7Zm9yKHI9MDtyPEU7cisrKXt2YXIgQz1fW3JdO2lmKGMoQykpe3ZhciBJPXUuZmluZEJpbih3W3JdLEEpO2lmKEk+PTAmJkk8Uyl7dmFyIEQ9e3Y6QyxpOnJ9O28oRCxlLHIpLExbSV0ucHVzaChEKX19fWZvcihyPTA7cjxTO3IrKylpZihMW3JdLmxlbmd0aD4wKXt2YXIgUD1MW3JdLnNvcnQocyksej1QLm1hcChsKSxPPXoubGVuZ3RoLFI9e3BvczpUW3JdLHB0czpQfTtSLm1pbj16WzBdLFIubWF4PXpbTy0xXSxSLm1lYW49dS5tZWFuKHosTyksUi5zZD11LnN0ZGV2KHosTyxSLm1lYW4pLFIucTE9dS5pbnRlcnAoeiwuMjUpLFIubWVkPXUuaW50ZXJwKHosLjUpLFIucTM9dS5pbnRlcnAoeiwuNzUpLFIubGY9TWF0aC5taW4oUi5xMSx6W01hdGgubWluKHUuZmluZEJpbigyLjUqUi5xMS0xLjUqUi5xMyx6LCEwKSsxLE8tMSldKSxSLnVmPU1hdGgubWF4KFIucTMseltNYXRoLm1heCh1LmZpbmRCaW4oMi41KlIucTMtMS41KlIucTEseiksMCldKSxSLmxvPTQqUi5xMS0zKlIucTMsUi51bz00KlIucTMtMypSLnExLGIucHVzaChSKX1yZXR1cm4gZi5leHBhbmQoaCxfLHtwYWRkZWQ6ITB9KSxiLmxlbmd0aD4wPyhiWzBdLnQ9e251bTp2W3hdLGRQb3M6ayxwb3NMZXR0ZXI6bSx2YWxMZXR0ZXI6ZH0sdlt4XSsrLGIpOlt7dDp7ZW1wdHk6ITB9fV19fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBvLmNvZXJjZSh0LGUsYyxyLG4pfWkodCxlLHMsbiksZS52aXNpYmxlIT09ITEmJihzKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscygibGluZS53aWR0aCIpLHMoImZpbGxjb2xvciIsbC5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpLHMoIndoaXNrZXJ3aWR0aCIpLHMoImJveG1lYW4iKSxhKHQsZSxzLHtwcmVmaXg6ImJveCJ9KSl9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxhPXIoInkiKSxvPXIoIngiKTtpZihhJiZhLmxlbmd0aClpPSJ2IixvfHxyKCJ4MCIpO2Vsc2V7aWYoIW98fCFvLmxlbmd0aClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2k9ImgiLHIoInkwIil9cy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLG4pLHIoIm9yaWVudGF0aW9uIixpKX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPW4ucHJlZml4LGE9by5jb2VyY2UyKHQsZSxjLCJtYXJrZXIub3V0bGllcmNvbG9yIikscz1yKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxsPXIoaSsicG9pbnRzIixhfHxzPyJzdXNwZWN0ZWRvdXRsaWVycyI6dm9pZCAwKTtsPyhyKCJqaXR0ZXIiLCJhbGwiPT09bD8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT1sPy0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1sJiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInRleHQiKSk6ZGVsZXRlIGUubWFya2VyLHIoImhvdmVyb24iKX12YXIgbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOm4saGFuZGxlU2FtcGxlRGVmYXVsdHM6aSxoYW5kbGVQb2ludHNEZWZhdWx0czphfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2F0dHJpYnV0ZXMiOjg3Nn1dLDg3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBvLHM9dC5jZCxsPXNbMF0udHJhY2UsYz1sLmhvdmVyb24sdT1bXTtyZXR1cm4gYy5pbmRleE9mKCJib3hlcyIpIT09LTEmJih1PXUuY29uY2F0KGkodCxlLHIsbikpKSxjLmluZGV4T2YoInBvaW50cyIpIT09LTEmJihvPWEodCxlLHIpKSwiY2xvc2VzdCI9PT1uP28/W29dOnU6bz8odS5wdXNoKG8pLHUpOnV9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxhLHUsZixoLGQscCxtLHYsZz10LmNkLHk9dC54YSxiPXQueWEseD1nWzBdLnRyYWNlLF89Z1swXS50LHc9InZpb2xpbiI9PT14LnR5cGUsTT1bXSxUPSJjbG9zZXN0IiE9PW58fHc/Xy5iZFBvczoyLjUqXy5iZFBvcyxrPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytfLmJQb3MtZH07dyYmImJvdGgiIT09eC5zaWRlPygicG9zaXRpdmUiPT09eC5zaWRlJiYodj1mdW5jdGlvbih0KXt2YXIgZT1rKHQpO3JldHVybiBsLmluYm94KGUsZStUKX0pLCJuZWdhdGl2ZSI9PT14LnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPWsodCk7cmV0dXJuIGwuaW5ib3goZS1ULGUpfSkpOnY9ZnVuY3Rpb24odCl7dmFyIGU9ayh0KTtyZXR1cm4gbC5pbmJveChlLVQsZStUKX07dmFyIEE7QT13P2Z1bmN0aW9uKHQpe3JldHVybiBsLmluYm94KHQuc3BhblswXS1oLHQuc3BhblsxXS1oKX06ZnVuY3Rpb24odCl7cmV0dXJuIGwuaW5ib3godC5taW4taCx0Lm1heC1oKX0sImgiPT09eC5vcmllbnRhdGlvbj8oaD1lLGQ9cixwPUEsbT12LGk9InkiLHU9YixhPSJ4IixmPXkpOihoPXIsZD1lLHA9dixtPUEsaT0ieCIsdT15LGE9InkiLGY9Yik7dmFyIEU9bC5nZXREaXN0YW5jZUZ1bmN0aW9uKG4scCxtKTtpZihsLmdldENsb3Nlc3QoZyxFLHQpLHQuaW5kZXg9PT0hMSlyZXR1cm5bXTt2YXIgUz1nW3QuaW5kZXhdLEw9eC5saW5lLmNvbG9yLEM9KHgubWFya2VyfHx7fSkuY29sb3I7Yy5vcGFjaXR5KEwpJiZ4LmxpbmUud2lkdGg/dC5jb2xvcj1MOmMub3BhY2l0eShDKSYmeC5ib3hwb2ludHM/dC5jb2xvcj1DOnQuY29sb3I9eC5maWxsY29sb3IsdFtpKyIwIl09dS5jMnAoUy5wb3MrXy5iUG9zLV8uYmRQb3MsITApLHRbaSsiMSJdPXUuYzJwKFMucG9zK18uYlBvcytfLmJkUG9zLCEwKSxvLnRpY2tUZXh0KHUsdS5jMmwoUy5wb3MpLCJob3ZlciIpLnRleHQsdFtpKyJMYWJlbFZhbCJdPVMucG9zO3ZhciBJPXt9LEQ9WyJtZWQiLCJtaW4iLCJxMSIsInEzIiwibWF4Il0sUD1bIm1lZGlhbiIsIm1pbiIsInExIiwicTMiLCJtYXgiXTsoeC5ib3htZWFufHwoeC5tZWFubGluZXx8e30pLnZpc2libGUpJiYoRC5wdXNoKCJtZWFuIiksUC5wdXNoKCJzZCI9PT14LmJveG1lYW4/Im1lYW4gXHhiMSBcdTAzYzMiOiJtZWFuIikpLCh4LmJveHBvaW50c3x8eC5wb2ludHMpJiYoRC5wdXNoKCJsZiIsInVmIiksUC5wdXNoKCJsb3dlciBmZW5jZSIsInVwcGVyIGZlbmNlIikpO2Zvcih2YXIgej0wO3o8RC5sZW5ndGg7eisrKXt2YXIgTz1EW3pdO2lmKE8gaW4gUyYmIShTW09daW4gSSkpe0lbU1tPXV09ITA7dmFyIFI9U1tPXSxGPWYuYzJwKFIsITApLGo9cy5leHRlbmRGbGF0KHt9LHQpO2pbYSsiMCJdPWpbYSsiMSJdPUYsalthKyJMYWJlbFZhbCJdPVIsalthKyJMYWJlbCJdPVBbel0rIjogIitvLmhvdmVyTGFiZWxUZXh0KGYsUiksIm1lYW4iPT09TyYmInNkImluIFMmJiJzZCI9PT14LmJveG1lYW4mJihqW2ErImVyciJdPVMuc2QpLHQubmFtZT0iIixNLnB1c2goail9fXJldHVybiBNfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbixpLGEsbz10LmNkLGM9dC54YSxmPXQueWEsaD1vWzBdLnRyYWNlLGQ9Yy5jMnAoZSkscD1mLmMycChyKSxtPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhjLmMycCh0LngpLWQpLWUsMS0zL2UpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhmLmMycCh0LnkpLXApLWUsMS0zL2UpfSxnPWwucXVhZHJhdHVyZShtLHYpLHk9ITEsYj0wO2I8by5sZW5ndGg7YisrKXtpPW9bYl07Zm9yKHZhciB4PTA7eDwoaS5wdHN8fFtdKS5sZW5ndGg7eCsrKXthPWkucHRzW3hdO3ZhciBfPWcoYSk7Xzw9dC5kaXN0YW5jZSYmKHQuZGlzdGFuY2U9Xyx5PVtiLHhdKX19aWYoIXkpcmV0dXJuITE7aT1vW3lbMF1dLGE9aS5wdHNbeVsxXV07dmFyIHc9Yy5jMnAoYS54LCEwKSxNPWYuYzJwKGEueSwhMCksVD1hLm1yY3x8MTtyZXR1cm4gbj1zLmV4dGVuZEZsYXQoe30sdCx7aW5kZXg6YS5pLGNvbG9yOihoLm1hcmtlcnx8e30pLmNvbG9yLG5hbWU6aC5uYW1lLHgwOnctVCx4MTp3K1QseExhYmVsVmFsOmEueCx5MDpNLVQseTE6TStULHlMYWJlbFZhbDphLnl9KSx1KGEsaCxuKSxufXZhciBvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iik7ZS5leHBvcnRzPXtob3ZlclBvaW50czpuLGhvdmVyT25Cb3hlczppLGhvdmVyT25Qb2ludHM6YX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1Mn1dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsbi5jYWxjPXQoIi4vY2FsYyIpLG4uc2V0UG9zaXRpb25zPXQoIi4vc2V0X3Bvc2l0aW9ucyIpLnNldFBvc2l0aW9ucyxuLnBsb3Q9dCgiLi9wbG90IikucGxvdCxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iYm94IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzg5LCIuL2F0dHJpYnV0ZXMiOjg3NiwiLi9jYWxjIjo4NzcsIi4vZGVmYXVsdHMiOjg3OCwiLi9ob3ZlciI6ODc5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIi4vbGF5b3V0X2RlZmF1bHRzIjo4ODIsIi4vcGxvdCI6ODgzLCIuL3NlbGVjdCI6ODg0LCIuL3NldF9wb3NpdGlvbnMiOjg4NSwiLi9zdHlsZSI6ODg2fV0sODgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe2Zvcih2YXIgYSxvPTA7bzxyLmxlbmd0aDtvKyspaWYocltvXS50eXBlPT09aSl7YT0hMDticmVha31hJiYobihpKyJtb2RlIiksbihpKyJnYXAiKSxuKGkrImdyb3VwZ2FwIikpfWZ1bmN0aW9uIGkodCxlLHIpe2Z1bmN0aW9uIGkocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLG8scixuKX1uKHQsZSxyLGksImJveCIpfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6aSxfc3VwcGx5Om59fSx7Ii4uLy4uL2xpYiI6NzM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODF9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2g9MmU5fWZ1bmN0aW9uIGkoKXt2YXIgdD1oO3JldHVybiBoPSg2OTA2OSpoKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoaC10KTw0Mjk0OTY3Mjk/aSgpOmgvNDI5NDk2NzI5Nn1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9ZS54YXhpcyxhPWUueWF4aXM7ZS5wbG90LnNlbGVjdCgiLmJveGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLmJveGVzIikuZGF0YShyKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgYm94ZXMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLnQsdT1lLnRyYWNlLGY9ZS5ub2RlMz1jLnNlbGVjdCh0aGlzKSxoPW4uX251bUJveGVzLGQ9Imdyb3VwIj09PW4uYm94bW9kZSYmaD4xLHA9ci5kUG9zKigxLW4uYm94Z2FwKSooMS1uLmJveGdyb3VwZ2FwKS8oZD9oOjEpLG09ZD8yKnIuZFBvcyooLS41KyhyLm51bSsuNSkvaCkqKDEtbi5ib3hnYXApOjAsdj1wKnUud2hpc2tlcndpZHRoO2lmKHUudmlzaWJsZSE9PSEwfHxyLmVtcHR5KXJldHVybiB2b2lkIGMuc2VsZWN0KHRoaXMpLnJlbW92ZSgpO3ZhciBnLHk7ImgiPT09dS5vcmllbnRhdGlvbj8oZz1hLHk9aSk6KGc9aSx5PWEpLHIuYlBvcz1tLHIuYmRQb3M9cCxyLndkUG9zPXYsbyhmLHtwb3M6Zyx2YWw6eX0sdSxyKSx1LmJveHBvaW50cyYmcyhmLHt4OmkseTphfSx1LHIpLHUuYm94bWVhbiYmbChmLHtwb3M6Zyx2YWw6eX0sdSxyKX0pfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGksYSxvPWUucG9zLHM9ZS52YWwsbD1uLmJQb3MsZj1uLndkUG9zfHwwLGg9bi5iUG9zUHhPZmZzZXR8fDAsZD1yLndoaXNrZXJ3aWR0aHx8MDtBcnJheS5pc0FycmF5KG4uYmRQb3MpPyhpPW4uYmRQb3NbMF0sYT1uLmJkUG9zWzFdKTooaT1uLmJkUG9zLGE9bi5iZFBvcyksdC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSh1LmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJib3giKS5lYWNoKGZ1bmN0aW9uKHQpewp2YXIgZT10LnBvcyxuPW8uYzJwKGUrbCwhMCkraCxwPW8uYzJwKGUrbC1pLCEwKStoLG09by5jMnAoZStsK2EsITApK2gsdj1vLmMycChlK2wtZiwhMCkraCxnPW8uYzJwKGUrbCtmLCEwKStoLHk9cy5jMnAodC5xMSwhMCksYj1zLmMycCh0LnEzLCEwKSx4PXUuY29uc3RyYWluKHMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbih5LGIpKzEsTWF0aC5tYXgoeSxiKS0xKSxfPXMuYzJwKHIuYm94cG9pbnRzPT09ITE/dC5taW46dC5sZiwhMCksdz1zLmMycChyLmJveHBvaW50cz09PSExP3QubWF4OnQudWYsITApOyJoIj09PXIub3JpZW50YXRpb24/Yy5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK3grIiwiK3ArIlYiK20rIk0iK3krIiwiK3ArIlYiK20rIkgiK2IrIlYiK3ArIlpNIit5KyIsIituKyJIIitfKyJNIitiKyIsIituKyJIIit3KygwPT09ZD8iIjoiTSIrXysiLCIrdisiViIrZysiTSIrdysiLCIrdisiViIrZykpOmMuc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitwKyIsIit4KyJIIittKyJNIitwKyIsIit5KyJIIittKyJWIitiKyJIIitwKyJaTSIrbisiLCIreSsiViIrXysiTSIrbisiLCIrYisiViIrdysoMD09PWQ/IiI6Ik0iK3YrIiwiK18rIkgiK2crIk0iK3YrIiwiK3crIkgiK2cpKX0pfWZ1bmN0aW9uIHModCxlLHIsYSl7dmFyIG89ZS54LHM9ZS55LGw9YS5iZFBvcyxjPWEuYlBvcyxoPXIuYm94cG9pbnRzfHxyLnBvaW50cztuKCksdC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudD1hLHQudHJhY2U9cn0pLHR9KS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxuLGE9ImFsbCI9PT1oP3QucHRzOnQucHRzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52PHQubGZ8fGUudj50LnVmfSksbz1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSkscz0xZS05Km8sZj1vKnAsbT1bXSx2PTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1vKWZvcih2PTEsbT1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKyltW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZz1NYXRoLm1heCgwLGUtZCkseT1hW2ddLnYsYj1NYXRoLm1pbihhLmxlbmd0aC0xLGUrZCkseD1hW2JdLnY7ImFsbCIhPT1oJiYoYVtlXS52PHQubGY/eD1NYXRoLm1pbih4LHQubGYpOnk9TWF0aC5tYXgoeSx0LnVmKSk7dmFyIF89TWF0aC5zcXJ0KGYqKGItZykvKHgteStzKSl8fDA7Xz11LmNvbnN0cmFpbihNYXRoLmFicyhfKSwwLDEpLG0ucHVzaChfKSx2PU1hdGgubWF4KF8sdil9bj0yKnIuaml0dGVyL3Z9Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHc9YVtlXSxNPXcudixUPXIuaml0dGVyP24qbVtlXSooaSgpLS41KTowLGs9dC5wb3MrYytsKihyLnBvaW50cG9zK1QpOyJoIj09PXIub3JpZW50YXRpb24/KHcueT1rLHcueD1NKToody54PWssdy55PU0pLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1oJiZNPHQudW8mJk0+dC5sbyYmKHcuc289ITApfXJldHVybiBhfSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLmNhbGwoZi50cmFuc2xhdGVQb2ludHMsbyxzKX1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpLGEsbz1lLnBvcyxzPWUudmFsLGw9bi5iUG9zLGY9bi5iUG9zUHhPZmZzZXR8fDA7QXJyYXkuaXNBcnJheShuLmJkUG9zKT8oaT1uLmJkUG9zWzBdLGE9bi5iZFBvc1sxXSk6KGk9bi5iZFBvcyxhPW4uYmRQb3MpLHQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKHUuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFuIikuc3R5bGUoe2ZpbGw6Im5vbmUiLCJ2ZWN0b3ItZWZmZWN0Ijoibm9uLXNjYWxpbmctc3Ryb2tlIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5jMnAodC5wb3MrbCwhMCkrZixuPW8uYzJwKHQucG9zK2wtaSwhMCkrZix1PW8uYzJwKHQucG9zK2wrYSwhMCkrZixoPXMuYzJwKHQubWVhbiwhMCksZD1zLmMycCh0Lm1lYW4tdC5zZCwhMCkscD1zLmMycCh0Lm1lYW4rdC5zZCwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9jLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIraCsiLCIrbisiViIrdSsoInNkIj09PXIuYm94bWVhbj8ibTAsMEwiK2QrIiwiK2UrIkwiK2grIiwiK24rIkwiK3ArIiwiK2UrIloiOiIiKSk6Yy5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK24rIiwiK2grIkgiK3UrKCJzZCI9PT1yLmJveG1lYW4/Im0wLDBMIitlKyIsIitkKyJMIituKyIsIitoKyJMIitlKyIsIitwKyJaIjoiIikpfSl9dmFyIGM9dCgiZDMiKSx1PXQoIi4uLy4uL2xpYiIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD0yZTksZD01LHA9LjAxO2UuZXhwb3J0cz17cGxvdDphLHBsb3RCb3hBbmRXaGlza2VyczpvLHBsb3RQb2ludHM6cyxwbG90Qm94TWVhbjpsfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vLi4vbGliIjo3MzUsZDM6MTIxfV0sODg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5jZCxvPXQueGF4aXMscz10LnlheGlzLGw9YVswXS50cmFjZSxjPWFbMF0ubm9kZTMsdT1bXTtpZihsLnZpc2libGUhPT0hMClyZXR1cm5bXTtpZihlPT09ITEpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylmb3IoaT0wO2k8KGFbcl0ucHRzfHxbXSkubGVuZ3RoO2krKylhW3JdLnB0c1tpXS5kaW09MDtlbHNlIGZvcihyPTA7cjxhLmxlbmd0aDtyKyspZm9yKGk9MDtpPChhW3JdLnB0c3x8W10pLmxlbmd0aDtpKyspe3ZhciBmPWFbcl0ucHRzW2ldLGg9by5jMnAoZi54KSxkPXMuYzJwKGYueSk7ZS5jb250YWlucyhbaCxkXSk/KHUucHVzaCh7cG9pbnROdW1iZXI6Zi5pLHg6by5jMmQoZi54KSx5OnMuYzJkKGYueSl9KSxmLmRpbT0wKTpmLmRpbT0xfXJldHVybiBjLnNlbGVjdEFsbCgiLnBvaW50Iikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbT9uOjF9KSx1fX0seyIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MTN9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLG49ZS54YXhpcyxhPWUueWF4aXMsbz0wO288cy5sZW5ndGg7bysrKXtmb3IodmFyIGw9c1tvXSxjPSJoIj09PWw/YTpuLHU9W10sZj0wLGg9MCxkPTA7ZDxyLmxlbmd0aDtkKyspe3ZhciBwPXJbZF0sbT1wWzBdLnQsdj1wWzBdLnRyYWNlO3YudmlzaWJsZSE9PSEwfHwiYm94IiE9PXYudHlwZXx8bS5lbXB0eXx8di5vcmllbnRhdGlvbiE9PWx8fHYueGF4aXMhPT1uLl9pZHx8di55YXhpcyE9PWEuX2lkfHwodS5wdXNoKGQpLHYuYm94cG9pbnRzIT09ITEmJihmPU1hdGgubWF4KGYsdi5qaXR0ZXItdi5wb2ludHBvcy0xKSxoPU1hdGgubWF4KGgsdi5qaXR0ZXIrdi5wb2ludHBvcy0xKSkpfWkoImJveCIsdCx1LGMsW2YsaF0pfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxmPWUuX2Z1bGxMYXlvdXQsaD1bXSxkPSJ2aW9saW4iPT09dD8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspaC5wdXNoKGNbbF0ucG9zKTtpZihoLmxlbmd0aCl7dmFyIHA9by5kaXN0aW5jdFZhbHMoaCksbT1wLm1pbkRpZmYvMjtmb3IoaC5sZW5ndGg9PT1wLnZhbHMubGVuZ3RoJiYoZltkXT0xKSxhLm1pbkR0aWNrKG4scC5taW5EaWZmLHAudmFsc1swXSwhMCkscz0wO3M8ci5sZW5ndGg7cysrKWM9dVtyW3NdXSxjWzBdLnQuZFBvcz1tO3ZhciB2PWZbdCsiZ2FwIl0sZz1mW3QrImdyb3VwZ2FwIl0seT0oMS12KSooMS1nKSptL2ZbZF07YS5leHBhbmQobixwLnZhbHMse3ZwYWRtaW51czptK2lbMF0qeSx2cGFkcGx1czptK2lbMV0qeX0pfX12YXIgYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vbGliIikscz1bInYiLCJoIl07ZS5leHBvcnRzPXtzZXRQb3NpdGlvbnM6bixzZXRQb3NpdGlvbk9mZnNldDppfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OX1dLDg4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS5ib3hlcyIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89ci5saW5lLndpZHRoO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwoaS5zdHJva2Usci5saW5lLmNvbG9yKS5jYWxsKGkuZmlsbCxyLmZpbGxjb2xvciksbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6bywic3Ryb2tlLWRhc2hhcnJheSI6MipvKyJweCwiK28rInB4In0pLmNhbGwoaS5zdHJva2Usci5saW5lLmNvbG9yKSxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcucG9pbnRzIHBhdGgiKS5jYWxsKGEucG9pbnRTdHlsZSxyLHQpfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsZDM6MTIxfV0sODg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue25hbWU6YS5pbmNyZWFzaW5nLm5hbWUsc2hvd2xlZ2VuZDphLmluY3JlYXNpbmcuc2hvd2xlZ2VuZCxsaW5lOntjb2xvcjppKHt9LG8ubGluZS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6by5saW5lLndpZHRoLGVkaXRUeXBlOiJzdHlsZSJ9LGZpbGxjb2xvcjpvLmZpbGxjb2xvcixlZGl0VHlwZToic3R5bGUifX12YXIgaT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGE9dCgiLi4vb2hsYy9hdHRyaWJ1dGVzIiksbz10KCIuLi9ib3gvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDphLngsb3BlbjphLm9wZW4saGlnaDphLmhpZ2gsbG93OmEubG93LGNsb3NlOmEuY2xvc2UsbGluZTp7d2lkdGg6aSh7fSxvLmxpbmUud2lkdGgse30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6bihhLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSxkZWNyZWFzaW5nOm4oYS5kZWNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksdGV4dDphLnRleHQsd2hpc2tlcndpZHRoOmkoe30sby53aGlza2Vyd2lkdGgse2RmbHQ6MH0pfX0seyIuLi8uLi9saWIiOjczNSwiLi4vYm94L2F0dHJpYnV0ZXMiOjg3NiwiLi4vb2hsYy9hdHRyaWJ1dGVzIjoxMDAzfV0sODg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7byh0LGUscixuKSxyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi4vb2hsYy9kaXJlY3Rpb25fZGVmYXVsdHMiKSxzPXQoIi4uL29obGMvaGVscGVycyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGwscixuKX1pZihzLnB1c2hEdW1teVRyYW5zZm9ybU9wdHModCxlKSwwPT09YSh0LGUsYyxvKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2MoImxpbmUud2lkdGgiKSxuKHQsZSxjLCJpbmNyZWFzaW5nIiksbih0LGUsYywiZGVjcmVhc2luZyIpLGMoInRleHQiKSxjKCJ3aGlza2Vyd2lkdGgiKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL29obGMvZGlyZWN0aW9uX2RlZmF1bHRzIjoxMDA1LCIuLi9vaGxjL2hlbHBlcnMiOjEwMDYsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTAwOCwiLi9hdHRyaWJ1dGVzIjo4ODd9XSw4ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjYW5kbGVzdGljayIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInNob3dMZWdlbmQiLCJjYW5kbGVzdGljayJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIil9LG4odCgiLi4vYm94IikpLG4odCgiLi90cmFuc2Zvcm0iKSl9LHsiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiOjc2OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL2JveCI6ODgwLCIuL2F0dHJpYnV0ZXMiOjg4NywiLi9kZWZhdWx0cyI6ODg4LCIuL3RyYW5zZm9ybSI6ODkwfV0sODkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXt0eXBlOiJib3giLGJveHBvaW50czohMSx2aXNpYmxlOnQudmlzaWJsZSxob3ZlcmluZm86dC5ob3ZlcmluZm8sb3BhY2l0eTp0Lm9wYWNpdHkseGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHRyYW5zZm9ybXM6by5tYWtlVHJhbnNmb3JtKHQsZSxyKX0saT10W3JdO3JldHVybiBpJiZhLmV4dGVuZEZsYXQobix7eDp0Lnh8fFswXSx4Y2FsZW5kYXI6dC54Y2FsZW5kYXIseTpbXS5jb25jYXQodC5sb3cpLmNvbmNhdCh0LmhpZ2gpLHdoaXNrZXJ3aWR0aDp0LndoaXNrZXJ3aWR0aCx0ZXh0OnQudGV4dCxuYW1lOmkubmFtZSxzaG93bGVnZW5kOmkuc2hvd2xlZ2VuZCxsaW5lOmkubGluZSxmaWxsY29sb3I6aS5maWxsY29sb3J9KSxufXZhciBpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL29obGMvaGVscGVycyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImNhbmRsZXN0aWNrIixyLmF0dHJpYnV0ZXM9e30sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gby5jbGVhckVwaGVtZXJhbFRyYW5zZm9ybU9wdHMobiksby5jb3B5T0hMQyh0LGUpLHR9LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsiY2FuZGxlc3RpY2siPT09YS50eXBlP3IucHVzaChuKGEsZSwiaW5jcmVhc2luZyIpLG4oYSxlLCJkZWNyZWFzaW5nIikpOnIucHVzaChhKX1yZXR1cm4gby5hZGRSYW5nZVNsaWRlcihyLGUubGF5b3V0KSxyfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmRpcmVjdGlvbixhPW8uZ2V0RmlsdGVyRm4obikscz1lLm9wZW4sbD1lLmhpZ2gsYz1lLmxvdyx1PWUuY2xvc2UsZj1zLmxlbmd0aCxoPVtdLGQ9W10scD1lLl9mdWxsSW5wdXQueD9mdW5jdGlvbih0KXt2YXIgcj1lLnhbdF07aC5wdXNoKHIscixyLHIscixyKX06ZnVuY3Rpb24odCl7aC5wdXNoKHQsdCx0LHQsdCx0KX0sbT0wO208ZjttKyspYShzW21dLHVbbV0pJiZpKGxbbV0pJiZpKGNbbV0pJiYocChtKSxmdW5jdGlvbih0LGUscixuKXtkLnB1c2gocix0LG4sbixuLGUpfShzW21dLGxbbV0sY1ttXSx1W21dKSk7ZS54PWgsZS55PWR9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi9vaGxjL2hlbHBlcnMiOjEwMDYsImZhc3QtaXNudW1lcmljIjoxMzF9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtbImFheGlzIiwiYmF4aXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBvPWEuY2hhckF0KDApLHM9dFthXXx8e30sbD17fSxjPXt0aWNrZm9udDoieCIsaWQ6bysiYXhpcyIsbGV0dGVyOm8sZm9udDplLmZvbnQsbmFtZTphLGRhdGE6dFtvXSxjYWxlbmRhcjplLmNhbGVuZGFyLGRmbHRDb2xvcjpuLGJnQ29sb3I6ci5wYXBlcl9iZ2NvbG9yLGZ1bGxMYXlvdXQ6cn07aShzLGwsYyksbC5fY2F0ZWdvcmllcz1sLl9jYXRlZ29yaWVzfHxbXSxlW2FdPWwsdFthXXx8Ii0iPT09cy50eXBlfHwodFthXT17dHlwZTpzLnR5cGV9KX0pfXZhciBpPXQoIi4vYXhpc19kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEpe2koImEiKXx8KGkoImRhIiksaSgiYTAiKSksaSgiYiIpfHwoaSgiZGIiKSxpKCJiMCIpKSxuKHQsZSxyLGEpfX0seyIuL2F4aXNfZGVmYXVsdHMiOjg5Nn1dLDg5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCl8fGU+PTEwKXJldHVybiBudWxsO2Zvcih2YXIgcj0xLzAsaT0tKDEvMCksYT10Lmxlbmd0aCxvPTA7bzxhO28rKyl7dmFyIHM9dFtvXTtpZihBcnJheS5pc0FycmF5KHMpKXt2YXIgbD1uKHMsZSsxKTtsJiYocj1NYXRoLm1pbihsWzBdLHIpLGk9TWF0aC5tYXgobFsxXSxpKSl9ZWxzZSByPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLGkpfXJldHVybltyLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LDApfX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwMywiLi9heGlzX2F0dHJpYnV0ZXMiOjg5NX1dLDg5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoLGQscCxtLHYsZz1BcnJheS5pc0FycmF5KHIpPyJhIjoiYiIseT0iYSI9PT1nP3QuYWF4aXM6dC5iYXhpcyxiPXkuc21vb3RoaW5nLHg9ImEiPT09Zz90LmEyaTp0LmIyaixfPSJhIj09PWc/cjpuLHc9ImEiPT09Zz9uOnIsTT0iYSI9PT1nP2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxUPSJhIj09PWc/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLGs9TWF0aC5mbG9vcigiYSI9PT1nP3QuYjJqKHcpOnQuYTJpKHcpKSxBPSJhIj09PWc/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsayl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxrLGUpfTtiJiYobz1NYXRoLm1heCgwLE1hdGgubWluKFQtMixrKSkscz1rLW8sYT0iYSI9PT1nP2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sbyxlLHMscil9KTt2YXIgRT14KF9bMF0pLFM9eChfWzFdKSxMPUU8Uz8xOi0xLEM9MWUtOCooUy1FKSxJPUw+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxEPUw+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixQPUw+MD9NYXRoLm1pbjpNYXRoLm1heCx6PUw+MD9NYXRoLm1heDpNYXRoLm1pbixPPUkoRStDKSxSPUQoUy1DKTt1PUEoRSk7dmFyIEY9W1t1XV07Zm9yKGk9TztpKkw8UipMO2krPUwpbD1bXSxwPXooRSxpKSxtPVAoUyxpK0wpLHY9bS1wLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihNLTIsTWF0aC5mbG9vciguNSoocCttKSkpKSxmPUEobSksYiYmKGg9YShjLHAtYyksZD1hKGMsbS1jKSxsLnB1c2goW3VbMF0raFswXS8zKnYsdVsxXStoWzFdLzMqdl0pLGwucHVzaChbZlswXS1kWzBdLzMqdixmWzFdLWRbMV0vMyp2XSkpLGwucHVzaChmKSxGLnB1c2gobCksdT1mO3JldHVybiBGfX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiYXJyYXkiXSxkZmx0OiJhcnJheSIsZWRpdFR5cGU6ImNhbGMifSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsImVuZCIsImJvdGgiLCJub25lIl0sZGZsdDoic3RhcnQiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXRzdG9wczpvKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwM31dLDg5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIi0iPT09dC50eXBlKXt2YXIgcj10Ll9pZCxuPXIuY2hhckF0KDApLGk9bisiY2FsZW5kYXIiLGE9dFtpXTt0LnR5cGU9ZChlLGEpfX12YXIgaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL29yZGVyZWRfY2F0ZWdvcmllcyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGQocixuKXtyZXR1cm4gcy5jb2VyY2UodCxlLGcscixuKX1mdW5jdGlvbiBwKHIsbil7cmV0dXJuIHMuY29lcmNlMih0LGUsZyxyLG4pfXZhciBtPXIubGV0dGVyLHY9ci5mb250fHx7fSxnPWlbbSsiYXhpcyJdO3Iubm9Ib3Zlcj0hMCxyLm5hbWUmJihlLl9uYW1lPXIubmFtZSxlLl9pZD1yLm5hbWUpO3ZhciB5PWQoInR5cGUiKTtpZigiLSI9PT15JiYoci5kYXRhJiZuKGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnk9dC50eXBlPWUudHlwZSksZCgic21vb3RoaW5nIiksZCgiY2hlYXRlcnR5cGUiKSxkKCJzaG93dGlja2xhYmVscyIpLGQoImxhYmVscHJlZml4IixtKyIgPSAiKSxkKCJsYWJlbHN1ZmZpeCIpLGQoInNob3d0aWNrcHJlZml4IiksZCgic2hvd3RpY2tzdWZmaXgiKSxkKCJzZXBhcmF0ZXRob3VzYW5kcyIpLGQoInRpY2tmb3JtYXQiKSxkKCJleHBvbmVudGZvcm1hdCIpLGQoInNob3dleHBvbmVudCIpLGQoImNhdGVnb3J5b3JkZXIiKSxkKCJ0aWNrbW9kZSIpLGQoInRpY2t2YWxzIiksZCgidGlja3RleHQiKSxkKCJ0aWNrMCIpLGQoImR0aWNrIiksImFycmF5Ij09PWUudGlja21vZGUmJihkKCJhcnJheXRpY2swIiksZCgiYXJyYXlkdGljayIpKSxkKCJsYWJlbHBhZGRpbmciKSxlLl9ob3ZlcnRpdGxlPW0sImRhdGUiPT09eSl7by5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsci5jYWxlbmRhcil9ZihlLHIuZnVsbExheW91dCk7dmFyIGI9ZCgiY29sb3IiLHIuZGZsdENvbG9yKSx4PWI9PT10LmNvbG9yP2I6di5jb2xvcjtkKCJ0aXRsZSIpLHMuY29lcmNlRm9udChkLCJ0aXRsZWZvbnQiLHtmYW1pbHk6di5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMip2LnNpemUpLGNvbG9yOnh9KSxkKCJ0aXRsZW9mZnNldCIpLGQoInRpY2thbmdsZSIpLGQoImF1dG9yYW5nZSIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKSYmZCgicmFuZ2Vtb2RlIiksZCgicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxkKCJmaXhlZHJhbmdlIiksbCh0LGUsZCx5KSxjKHQsZSxkLHksciksdSh0LGUsZCk7dmFyIF89cCgiZ3JpZGNvbG9yIixhKGIsLjMpKSx3PXAoImdyaWR3aWR0aCIpLE09ZCgic2hvd2dyaWQiKTtNfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCk7dmFyIFQ9cCgic3RhcnRsaW5lY29sb3IiLGIpLGs9cCgic3RhcnRsaW5ld2lkdGgiLHcpO2QoInN0YXJ0bGluZSIsZS5zaG93Z3JpZHx8ISFUfHwhIWspfHwoZGVsZXRlIGUuc3RhcnRsaW5lY29sb3IsZGVsZXRlIGUuc3RhcnRsaW5ld2lkdGgpO3ZhciBBPXAoImVuZGxpbmVjb2xvciIsYiksRT1wKCJlbmRsaW5ld2lkdGgiLHcpO3JldHVybiBkKCJlbmRsaW5lIixlLnNob3dncmlkfHwhIUF8fCEhRSl8fChkZWxldGUgZS5lbmRsaW5lY29sb3IsZGVsZXRlIGUuZW5kbGluZXdpZHRoKSxNPyhkKCJtaW5vcmdyaWRjb3VudCIpLGQoIm1pbm9yZ3JpZHdpZHRoIix3KSxkKCJtaW5vcmdyaWRjb2xvciIsYShfLC4wNikpLGUubWlub3JncmlkY291bnR8fChkZWxldGUgZS5taW5vcmdyaWR3aWR0aCxkZWxldGUgZS5taW5vcmdyaWRjb2xvcikpOihkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZFdpZHRoKSxlLl9zZXBhcmF0b3JzPXIuZnVsbExheW91dC5zZXBhcmF0b3JzLGUuX2luaXRpYWxDYXRlZ29yaWVzPSJjYXRlZ29yeSI9PT15P2gobSxlLmNhdGVnb3J5b3JkZXIsZS5jYXRlZ29yeWFycmF5LHIuZGF0YSk6W10sIm5vbmUiPT09ZS5zaG93dGlja2xhYmVscyYmKGRlbGV0ZSBlLnRpY2tmb250LGRlbGV0ZSBlLnRpY2thbmdsZSxkZWxldGUgZS5zaG93ZXhwb25lbnQsZGVsZXRlIGUuZXhwb25lbnRmb3JtYXQsZGVsZXRlIGUudGlja2Zvcm1hdCxkZWxldGUgZS5zaG93dGlja3N1ZmZpeCxkZWxldGUgZS5zaG93dGlja3ByZWZpeCksZS5zaG93dGlja3N1ZmZpeHx8ZGVsZXRlIGUudGlja3N1ZmZpeCxlLnNob3d0aWNrcHJlZml4fHxkZWxldGUgZS50aWNrcHJlZml4LGQoInRpY2ttb2RlIiksKCFlLnRpdGxlfHxlLnRpdGxlJiYwPT09ZS50aXRsZS5sZW5ndGgpJiYoZGVsZXRlIGUudGl0bGVmb250LGRlbGV0ZSBlLnRpdGxlb2Zmc2V0KSxlfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NzgwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjc4MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL29yZGVyZWRfY2F0ZWdvcmllcyI6NzkyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc5NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc5OSwiLi4vLi4vcmVnaXN0cnkiOjg1MywiLi9hdHRyaWJ1dGVzIjo4OTN9XSw4OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vY2hlYXRlcl9iYXNpcyIpLGE9dCgiLi9hcnJheV9taW5tYXgiKSxvPXQoIi4vbWFwXzJkX2FycmF5Iikscz10KCIuL2NhbGNfZ3JpZGxpbmVzIiksbD10KCIuL2NhbGNfbGFiZWxzIiksYz10KCIuL2NhbGNfY2xpcHBhdGgiKSx1PXQoIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiKSxmPXQoIi4vc21vb3RoX2ZpbGxfMmRfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxwPWUuYWF4aXMsbT1lLmJheGlzLHY9ZS5fYT1lLmEsZz1lLl9iPWUuYix5PXt9LGI9ZS55O2lmKGUuX2NoZWF0ZXIpe3ZhciB4PSJpbmRleCI9PT1wLmNoZWF0ZXJ0eXBlP3YubGVuZ3RoOnYsXz0iaW5kZXgiPT09bS5jaGVhdGVydHlwZT9nLmxlbmd0aDpnO2UueD1yPWkoeCxfLGUuY2hlYXRlcnNsb3BlKX1lbHNlIHI9ZS54O2UuX3g9ZS54PXI9dShyKSxlLl95PWUueT1iPXUoYiksZihyLHYsZyksZihiLHYsZyksZS5zZXRTY2FsZSgpLHkueHA9ZS54cD1vKGUueHAscixoLmMycCkseS55cD1lLnlwPW8oZS55cCxiLGQuYzJwKTt2YXIgdz1hKHIpLE09YShiKSxUPS41Kih3WzFdLXdbMF0pLGs9LjUqKHdbMV0rd1swXSksQT0uNSooTVsxXS1NWzBdKSxFPS41KihNWzFdK01bMF0pO3JldHVybiB3PVtrLTEuMypULGsrMS4zKlRdLE09W0UtMS4zKkEsRSsxLjMqQV0sbi5leHBhbmQoaCx3LHtwYWRkZWQ6ITB9KSxuLmV4cGFuZChkLE0se3BhZGRlZDohMH0pLHMoZSx5LCJhIiwiYiIpLHMoZSx5LCJiIiwiYSIpLGwoZSxwKSxsKGUsbSkseS5jbGlwc2VnbWVudHM9YyhlLnhjdHJsLGUueWN0cmwscCxtKSx5Lng9cix5Lnk9Yix5LmE9dix5LmI9ZyxbeV19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk1OCwiLi9hcnJheV9taW5tYXgiOjg5MiwiLi9jYWxjX2NsaXBwYXRoIjo4OTgsIi4vY2FsY19ncmlkbGluZXMiOjg5OSwiLi9jYWxjX2xhYmVscyI6OTAwLCIuL2NoZWF0ZXJfYmFzaXMiOjkwMiwiLi9tYXBfMmRfYXJyYXkiOjkxNCwiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSI6OTE4fV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPSEhci5zbW9vdGhpbmcsYz0hIW4uc21vb3RoaW5nLHU9dFswXS5sZW5ndGgtMSxmPXQubGVuZ3RoLTE7Zm9yKGk9MCxhPVtdLG89W107aTw9dTtpKyspYVtpXT10WzBdW2ldLG9baV09ZVswXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9MCxhPVtdLG89W107aTw9ZjtpKyspYVtpXT10W2ldW3VdLG9baV09ZVtpXVt1XTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLGk9dSxhPVtdLG89W107aT49MDtpLS0pYVt1LWldPXRbZl1baV0sb1t1LWldPWVbZl1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPWYsYT1bXSxvPVtdO2k+PTA7aS0tKWFbZi1pXT10W2ldWzBdLG9bZi1pXT1lW2ldWzBdO3JldHVybiBzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksc319LHt9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKGUpe3ZhciBuLGksbyxzLGwsYyx1LGYsaCxkLHAsdixnPVtdLHk9W10sYj17fTtpZigiYiI9PT1yKWZvcihpPXQuYjJqKGUpLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKHotMixpKSkpLHM9aS1vLGIubGVuZ3RoPXosYi5jcm9zc0xlbmd0aD1QLGIueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsaSl9LGIuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LG49MDtuPFA7bisrKWM9TWF0aC5taW4oUC0yLG4pLHU9bi1jLGY9dC5ldmFseHkoW10sbixpKSxTLnNtb290aGluZyYmbj4wJiYoaD10LmR4eWRpKFtdLG4tMSxvLDAscyksZy5wdXNoKGxbMF0raFswXS8zKSx5LnB1c2gobFsxXStoWzFdLzMpLGQ9dC5keHlkaShbXSxuLTEsbywxLHMpLGcucHVzaChmWzBdLWRbMF0vMykseS5wdXNoKGZbMV0tZFsxXS8zKSksZy5wdXNoKGZbMF0pLHkucHVzaChmWzFdKSxsPWY7ZWxzZSBmb3Iobj10LmEyaShlKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsbikpKSx1PW4tYyxiLmxlbmd0aD1QLGIuY3Jvc3NMZW5ndGg9eixiLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxuLGUpfSxiLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxpPTA7aTx6O2krKylvPU1hdGgubWluKHotMixpKSxzPWktbyxmPXQuZXZhbHh5KFtdLG4saSksUy5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaihbXSxjLGktMSx1LDApLGcucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSx2PXQuZHh5ZGooW10sYyxpLTEsdSwxKSxnLnB1c2goZlswXS12WzBdLzMpLHkucHVzaChmWzFdLXZbMV0vMykpLGcucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO3JldHVybiBiLmF4aXNMZXR0ZXI9cixiLmF4aXM9TSxiLmNyb3NzQXhpcz1TLGIudmFsdWU9ZSxiLmNvbnN0dmFyPWEsYi5pbmRleD1tLGIueD1nLGIueT15LGIuc21vb3RoaW5nPVMuc21vb3RoaW5nLGJ9ZnVuY3Rpb24gcyhlKXt2YXIgbixpLG8scyxsLGM9W10sdT1bXSxmPXt9O2lmKGYubGVuZ3RoPXcubGVuZ3RoLGYuY3Jvc3NMZW5ndGg9RS5sZW5ndGgsImIiPT09cilmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKHotMixlKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsZS1vKSksZi54eT1mdW5jdGlvbihyKXtyZXR1cm4gdC5ldmFseHkoW10scixlKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0sbj0wO248STtuKyspY1tuXT1MW2UqT11bbl0sdVtuXT1DW2UqT11bbl07ZWxzZSBmb3IoaT1NYXRoLm1heCgwLE1hdGgubWluKFAtMixlKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsZS1pKSksZi54eT1mdW5jdGlvbihyKXtyZXR1cm4gdC5ldmFseHkoW10sZSxyKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxpLGUscyxyKX0sbj0wO248RDtuKyspY1tuXT1MW25dW2UqT10sdVtuXT1DW25dW2UqT107cmV0dXJuIGYuYXhpc0xldHRlcj1yLGYuYXhpcz1NLGYuY3Jvc3NBeGlzPVMsZi52YWx1ZT13W2VdLGYuY29uc3R2YXI9YSxmLmluZGV4PWUsZi54PWMsZi55PXUsZi5zbW9vdGhpbmc9Uy5zbW9vdGhpbmcsZn12YXIgbCxjLHUsZixoLGQscCxtLHYsZyx5LGIseCxfLHc9dFtyXSxNPXRbcisiYXhpcyJdLFQ9TS5fZ3JpZGxpbmVzPVtdLGs9TS5fbWlub3JncmlkbGluZXM9W10sQT1NLl9ib3VuZGFyeWxpbmVzPVtdLEU9dFthXSxTPXRbYSsiYXhpcyJdO2lmKCJhcnJheSI9PT1NLnRpY2ttb2RlKWZvcihNLnRpY2t2YWxzPVtdLGw9MDtsPHcubGVuZ3RoO2wrKylNLnRpY2t2YWxzLnB1c2god1tsXSk7dmFyIEw9dC54Y3RybCxDPXQueWN0cmwsST1MWzBdLmxlbmd0aCxEPUwubGVuZ3RoLFA9dC5hLmxlbmd0aCx6PXQuYi5sZW5ndGg7bi5jYWxjVGlja3MoTSk7dmFyIE89TS5zbW9vdGhpbmc/MzoxO2lmKCJhcnJheSI9PT1NLnRpY2ttb2RlKXtmb3IoZj01ZS0xNSxoPVtNYXRoLmZsb29yKCh3Lmxlbmd0aC0xLU0uYXJyYXl0aWNrMCkvTS5hcnJheWR0aWNrKigxK2YpKSxNYXRoLmNlaWwoLU0uYXJyYXl0aWNrMC9NLmFycmF5ZHRpY2svKDErZikpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGQ9aFswXS0xLHA9aFsxXSsxLG09ZDttPHA7bSsrKShjPU0uYXJyYXl0aWNrMCtNLmFycmF5ZHRpY2sqbSk8MHx8Yz53Lmxlbmd0aC0xfHxULnB1c2goaShzKGMpLHtjb2xvcjpNLmdyaWRjb2xvcix3aWR0aDpNLmdyaWR3aWR0aH0pKTtmb3IobT1kO208cDttKyspaWYodT1NLmFycmF5dGljazArTS5hcnJheWR0aWNrKm0seT1NYXRoLm1pbih1K00uYXJyYXlkdGljayx3Lmxlbmd0aC0xKSwhKHU8MHx8dT53Lmxlbmd0aC0xfHx5PDB8fHk+dy5sZW5ndGgtMSkpZm9yKGI9d1t1XSx4PXdbeV0sbD0wO2w8TS5taW5vcmdyaWRjb3VudDtsKyspKF89eS11KTw9MHx8KGc9YisoeC1iKSoobCsxKS8oTS5taW5vcmdyaWRjb3VudCsxKSooTS5hcnJheWR0aWNrL18pKTx3WzBdfHxnPndbdy5sZW5ndGgtMV18fGsucHVzaChpKG8oZykse2NvbG9yOk0ubWlub3JncmlkY29sb3Isd2lkdGg6TS5taW5vcmdyaWR3aWR0aH0pKTtNLnN0YXJ0bGluZSYmQS5wdXNoKGkocygwKSx7Y29sb3I6TS5zdGFydGxpbmVjb2xvcix3aWR0aDpNLnN0YXJ0bGluZXdpZHRofSkpLE0uZW5kbGluZSYmQS5wdXNoKGkocyh3Lmxlbmd0aC0xKSx7Y29sb3I6TS5lbmRsaW5lY29sb3Isd2lkdGg6TS5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IoZj01ZS0xNSxoPVtNYXRoLmZsb29yKCh3W3cubGVuZ3RoLTFdLU0udGljazApL00uZHRpY2sqKDErZikpLE1hdGguY2VpbCgod1swXS1NLnRpY2swKS9NLmR0aWNrLygxK2YpKV0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxkPWhbMF0scD1oWzFdLG09ZDttPD1wO20rKyl2PU0udGljazArTS5kdGljayptLFQucHVzaChpKG8odikse2NvbG9yOk0uZ3JpZGNvbG9yLHdpZHRoOk0uZ3JpZHdpZHRofSkpO2ZvcihtPWQtMTttPHArMTttKyspZm9yKHY9TS50aWNrMCtNLmR0aWNrKm0sbD0wO2w8TS5taW5vcmdyaWRjb3VudDtsKyspKGc9ditNLmR0aWNrKihsKzEpLyhNLm1pbm9yZ3JpZGNvdW50KzEpKTx3WzBdfHxnPndbdy5sZW5ndGgtMV18fGsucHVzaChpKG8oZykse2NvbG9yOk0ubWlub3JncmlkY29sb3Isd2lkdGg6TS5taW5vcmdyaWR3aWR0aH0pKTtNLnN0YXJ0bGluZSYmQS5wdXNoKGkobyh3WzBdKSx7Y29sb3I6TS5zdGFydGxpbmVjb2xvcix3aWR0aDpNLnN0YXJ0bGluZXdpZHRofSkpLE0uZW5kbGluZSYmQS5wdXNoKGkobyh3W3cubGVuZ3RoLTFdKSx7Y29sb3I6TS5lbmRsaW5lY29sb3Isd2lkdGg6TS5lbmRsaW5ld2lkdGh9KSl9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3Nzl9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWUuX2xhYmVscz1bXSxsPWUuX2dyaWRsaW5lcztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKW89bFtyXSxbInN0YXJ0IiwiYm90aCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykhPT0tMSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7cHJlZml4OnZvaWQgMCxzdWZmaXg6dm9pZCAwLGVuZEFuY2hvcjohMCx4eTpvLnh5KDApLGR4eTpvLmR4eSgwLDApLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpLFsiZW5kIiwiYm90aCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykhPT0tMSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7ZW5kQW5jaG9yOiExLHh5Om8ueHkoby5jcm9zc0xlbmd0aC0xKSxkeHk6by5keHkoby5jcm9zc0xlbmd0aC0yLDEpLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3Nzl9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxvPXJbMF0tZVswXSxzPXJbMV0tZVsxXSxsPU1hdGgucG93KGkqaSthKmEsLjI1KSxjPU1hdGgucG93KG8qbytzKnMsLjI1KSx1PShjKmMqaS1sKmwqbykqbixmPShjKmMqYS1sKmwqcykqbixoPWMqKGwrYykqMyxkPWwqKGwrYykqMztyZXR1cm5bW2VbMF0rKGgmJnUvaCksZVsxXSsoaCYmZi9oKV0sW2VbMF0tKGQmJnUvZCksZVsxXS0oZCYmZi9kKV1dfX0se31dLDkwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjLHU9W10sZj1uKHQpP3QubGVuZ3RoOnQsaD1uKGUpP2UubGVuZ3RoOmUsZD1uKHQpP3Q6bnVsbCxwPW4oZSk/ZTpudWxsO2QmJihvPShkLmxlbmd0aC0xKS8oZFtkLmxlbmd0aC0xXS1kWzBdKS8oZi0xKSkscCYmKHM9KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhoLTEpKTt2YXIgbSx2PTEvMCxnPS0oMS8wKTtmb3IoYT0wO2E8aDthKyspZm9yKHVbYV09W10sYz1wPyhwW2FdLXBbMF0pKnM6YS8oaC0xKSxpPTA7aTxmO2krKylsPWQ/KGRbaV0tZFswXSkqbzppLyhmLTEpLG09bC1jKnIsdj1NYXRoLm1pbihtLHYpLGc9TWF0aC5tYXgobSxnKSx1W2FdW2ldPW07dmFyIHk9MS8oZy12KSxiPS12Knk7Zm9yKGE9MDthPGg7YSsrKWZvcihpPTA7aTxmO2krKyl1W2FdW2ldPXkqdVthXVtpXStiO3JldHVybiB1fX0seyIuLi8uLi9saWIiOjczNX1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX12YXIgaT10KCIuL2NhdG11bGxfcm9tIiksYT10KCIuLi8uLi9saWIiKS5lbnN1cmVBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsZixoLGQscCxtLHYsZyx5LGI9clswXS5sZW5ndGgseD1yLmxlbmd0aCxfPXM/MypiLTI6Yix3PWw/Myp4LTI6eDtmb3IodD1hKHQsdyksZT1hKGUsdyksZj0wO2Y8dztmKyspdFtmXT1hKHRbZl0sXyksZVtmXT1hKGVbZl0sXyk7Zm9yKHU9MCxoPTA7dTx4O3UrKyxoKz1sPzM6MSlmb3IoZD10W2hdLHA9ZVtoXSxtPXJbdV0sdj1vW3VdLGM9MCxmPTA7YzxiO2MrKyxmKz1zPzM6MSlkW2ZdPW1bY10scFtmXT12W2NdO2lmKHMpZm9yKHU9MCxoPTA7dTx4O3UrKyxoKz1sPzM6MSl7Zm9yKGM9MSxmPTM7YzxiLTE7YysrLGYrPTMpZz1pKFtyW3VdW2MtMV0sb1t1XVtjLTFdXSxbclt1XVtjXSxvW3VdW2NdXSxbclt1XVtjKzFdLG9bdV1bYysxXV0scyksdFtoXVtmLTFdPWdbMF1bMF0sZVtoXVtmLTFdPWdbMF1bMV0sdFtoXVtmKzFdPWdbMV1bMF0sZVtoXVtmKzFdPWdbMV1bMV07eT1uKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPXlbMF0sZVtoXVsxXT15WzFdLHk9bihbdFtoXVtfLTFdLGVbaF1bXy0xXV0sW3RbaF1bXy0zXSxlW2hdW18tM11dLFt0W2hdW18tNF0sZVtoXVtfLTRdXSksdFtoXVtfLTJdPXlbMF0sZVtoXVtfLTJdPXlbMV19aWYobClmb3IoZj0wO2Y8XztmKyspe2ZvcihoPTM7aDx3LTM7aCs9MylnPWkoW3RbaC0zXVtmXSxlW2gtM11bZl1dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2grM11bZl0sZVtoKzNdW2ZdXSxsKSx0W2gtMV1bZl09Z1swXVswXSxlW2gtMV1bZl09Z1swXVsxXSx0W2grMV1bZl09Z1sxXVswXSxlW2grMV1bZl09Z1sxXVsxXTt5PW4oW3RbMF1bZl0sZVswXVtmXV0sW3RbMl1bZl0sZVsyXVtmXV0sW3RbM11bZl0sZVszXVtmXV0pLHRbMV1bZl09eVswXSxlWzFdW2ZdPXlbMV0seT1uKFt0W3ctMV1bZl0sZVt3LTFdW2ZdXSxbdFt3LTNdW2ZdLGVbdy0zXVtmXV0sW3Rbdy00XVtmXSxlW3ctNF1bZl1dKSx0W3ctMl1bZl09eVswXSxlW3ctMl1bZl09eVsxXX1pZihzJiZsKWZvcihoPTE7aDx3O2grPShoKzEpJTM9PTA/MjoxKXtmb3IoZj0zO2Y8Xy0zO2YrPTMpZz1pKFt0W2hdW2YtM10sZVtoXVtmLTNdXSxbdFtoXVtmXSxlW2hdW2ZdXSxbdFtoXVtmKzNdLGVbaF1bZiszXV0scyksdFtoXVtmLTFdPS41Kih0W2hdW2YtMV0rZ1swXVswXSksZVtoXVtmLTFdPS41KihlW2hdW2YtMV0rZ1swXVsxXSksdFtoXVtmKzFdPS41Kih0W2hdW2YrMV0rZ1sxXVswXSksZVtoXVtmKzFdPS41KihlW2hdW2YrMV0rZ1sxXVsxXSk7eT1uKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPS41Kih0W2hdWzFdK3lbMF0pLGVbaF1bMV09LjUqKGVbaF1bMV0reVsxXSkseT1uKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09LjUqKHRbaF1bXy0yXSt5WzBdKSxlW2hdW18tMl09LjUqKGVbaF1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHsiLi4vLi4vbGliIjo3MzUsIi4vY2F0bXVsbF9yb20iOjkwMX1dLDkwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sOTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLGMsdSxmO3IqPTMsbio9Mzt2YXIgaD1pKmksZD0xLWkscD1kKmQsbT1kKmkqMix2PS0zKnAsZz0zKihwLW0pLHk9MyoobS1oKSxiPTMqaCx4PWEqYSxfPXgqYSx3PTEtYSxNPXcqdyxUPU0qdztmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKXU9dFtmXSxvPXYqdVtuXVtyXStnKnVbbl1bcisxXSt5KnVbbl1bcisyXStiKnVbbl1bciszXSxzPXYqdVtuKzFdW3JdK2cqdVtuKzFdW3IrMV0reSp1W24rMV1bcisyXStiKnVbbisxXVtyKzNdLGw9dip1W24rMl1bcl0rZyp1W24rMl1bcisxXSt5KnVbbisyXVtyKzJdK2IqdVtuKzJdW3IrM10sYz12KnVbbiszXVtyXStnKnVbbiszXVtyKzFdK3kqdVtuKzNdW3IrMl0rYip1W24rM11bciszXSxlW2ZdPVQqbyszKihNKmEqcyt3KngqbCkrXypjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCxjO3IqPTM7dmFyIHU9aSppLGY9MS1pLGg9ZipmLGQ9ZippKjIscD0tMypoLG09MyooaC1kKSx2PTMqKGQtdSksZz0zKnUseT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyljPXRbbF0sbz1wKmNbbl1bcl0rbSpjW25dW3IrMV0rdipjW25dW3IrMl0rZypjW25dW3IrM10scz1wKmNbbisxXVtyXSttKmNbbisxXVtyKzFdK3YqY1tuKzFdW3IrMl0rZypjW24rMV1bciszXSxlW2xdPXkqbythKnM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLGMsdSxmO24qPTM7dmFyIGg9YSphLGQ9aCphLHA9MS1hLG09cCpwLHY9bSpwO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspZj10W3VdLG89ZltuXVtyKzFdLWZbbl1bcl0scz1mW24rMV1bcisxXS1mW24rMV1bcl0sbD1mW24rMl1bcisxXS1mW24rMl1bcl0sYz1mW24rM11bcisxXS1mW24rM11bcl0sZVt1XT12Km8rMyoobSphKnMrcCpoKmwpK2QqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLGMsdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyljPXRbbF0sbz1jW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDkwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCxjLHUsZjtyKj0zLG4qPTM7dmFyIGg9aSppLGQ9aCppLHA9MS1pLG09cCpwLHY9bSpwLGc9YSphLHk9MS1hLGI9eSp5LHg9eSphKjIsXz0tMypiLHc9MyooYi14KSxNPTMqKHgtZyksVD0zKmc7Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKyl1PXRbZl0sbz1fKnVbbl1bcl0rdyp1W24rMV1bcl0rTSp1W24rMl1bcl0rVCp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK00qdVtuKzJdW3IrMV0rVCp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rTSp1W24rMl1bcisyXStUKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStNKnVbbisyXVtyKzNdK1QqdVtuKzNdW3IrM10sZVtmXT12Km8rMyoobSppKnMrcCpoKmwpK2QqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe2V8fChlPVtdKTt2YXIgbyxzLGwsYyx1LGY7cio9Mzt2YXIgaD1hKmEsZD1oKmEscD0xLWEsbT1wKnAsdj1tKnA7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylmPXRbdV0sbz1mW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPXYqbyszKihtKmEqcytwKmgqbCkrZCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCxjO24qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLGQ9aCpoLHA9aCphKjIsbT0tMypkLHY9MyooZC1wKSxnPTMqKHAtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyljPXRbbF0sbz1tKmNbbl1bcl0rdipjW24rMV1bcl0rZypjW24rMl1bcl0reSpjW24rM11bcl0scz1tKmNbbl1bcisxXSt2KmNbbisxXVtyKzFdK2cqY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCxjLHU9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspYz10W2xdLG89Y1tuKzFdW3JdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW25dW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfX19LHt9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS0yLG89ci0yO3JldHVybiBuJiZpP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxmLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7aCo9MyxkKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPW0qbSx3PV8qbSxNPTEtbSxUPU0qTSxrPVQqTTtmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKXU9dFtmXSxpPXgqdVtkXVtoXSszKihiKnAqdVtkXVtoKzFdK3kqdip1W2RdW2grMl0pK2cqdVtkXVtoKzNdLHM9eCp1W2QrMV1baF0rMyooYipwKnVbZCsxXVtoKzFdK3kqdip1W2QrMV1baCsyXSkrZyp1W2QrMV1baCszXSxsPXgqdVtkKzJdW2hdKzMqKGIqcCp1W2QrMl1baCsxXSt5KnYqdVtkKzJdW2grMl0pK2cqdVtkKzJdW2grM10sYz14KnVbZCszXVtoXSszKihiKnAqdVtkKzNdW2grMV0reSp2KnVbZCszXVtoKzJdKStnKnVbZCszXVtoKzNdLGVbZl09ayppKzMqKFQqbSpzK00qXypsKSt3KmM7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLWQpKTtoKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPTEtbTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWY9dFt1XSxpPV8qZltkXVtoXSttKmZbZCsxXVtoXSxzPV8qZltkXVtoKzFdK20qZltkKzFdW2grMV0sbD1fKmZbZF1baCsyXSttKmZbZCsxXVtoKzFdLGM9XypmW2RdW2grM10rbSpmW2QrMV1baCsxXSxlW3VdPXgqaSszKihiKnAqcyt5KnYqbCkrZypjO3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxmLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7ZCo9Mzt2YXIgdj1tKm0sZz12Km0seT0xLW0sYj15KnkseD1iKnksXz0xLXA7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylmPXRbdV0saT1fKmZbZF1baF0rcCpmW2RdW2grMV0scz1fKmZbZCsxXVtoXStwKmZbZCsxXVtoKzFdLGw9XypmW2QrMl1baF0rcCpmW2QrMl1baCsxXSxjPV8qZltkKzNdW2hdK3AqZltkKzNdW2grMV0sZVt1XT14KmkrMyooYiptKnMreSp2KmwpK2cqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1PU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItdSkpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tZikpLHA9MS1kLG09MS1oO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspYz10W2xdLGk9bSpjW2ZdW3VdK2gqY1tmXVt1KzFdLHM9bSpjW2YrMV1bdV0raCpjW2YrMV1bdSsxXSxlW2xdPXAqaStkKnM7cmV0dXJuIGV9fX0se31dLDkwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHlfZGVmYXVsdHMiKSxhPXQoIi4vYWJfZGVmYXVsdHMiKSxvPXQoIi4vc2V0X2NvbnZlcnQiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1lLl9jbGlwUGF0aElkPSJjbGlwIitlLnVpZCsiY2FycGV0Ijt2YXIgZj11KCJjb2xvciIsbC5kZWZhdWx0TGluZSk7aWYobi5jb2VyY2VGb250KHUsImZvbnQiKSx1KCJjYXJwZXQiKSxhKHQsZSxjLHUsZiksIWUuYXx8IWUuYilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2UuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApO3ZhciBoPWkodCxlLHUpO28oZSksZS5fY2hlYXRlciYmdSgiY2hlYXRlcnNsb3BlIiksaHx8KGUudmlzaWJsZT0hMSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjEwLCIuLi8uLi9saWIiOjczNSwiLi9hYl9kZWZhdWx0cyI6ODkxLCIuL2F0dHJpYnV0ZXMiOjg5MywiLi9zZXRfY29udmVydCI6OTE3LCIuL3h5X2RlZmF1bHRzIjo5MTl9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHRbMF0pfX0se31dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmFuaW1hdGFibGU9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4vYXR0cmlidXRlcyI6ODkzLCIuL2NhbGMiOjg5NywiLi9kZWZhdWx0cyI6OTA4LCIuL3Bsb3QiOjkxNn1dLDkxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sOTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2ZvcihBcnJheS5pc0FycmF5KHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl0W25dPXIoZVtuXSk7cmV0dXJuIHR9fSx7fV0sOTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saQo7Zm9yKEFycmF5LmlzQXJyYXkodCk/dC5sZW5ndGg+ZS5sZW5ndGgmJih0PXQuc2xpY2UoMCxlLmxlbmd0aCkpOnQ9W10sbj0wO248ZS5sZW5ndGg7bisrKWZvcihBcnJheS5pc0FycmF5KHRbbl0pP3Rbbl0ubGVuZ3RoPmUubGVuZ3RoJiYodFtuXT10W25dLnNsaWNlKDAsZS5sZW5ndGgpKTp0W25dPVtdLGk9MDtpPGVbMF0ubGVuZ3RoO2krKyl0W25dW2ldPXIoZVtuXVtpXSk7cmV0dXJuIHR9fSx7fV0sOTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aVswXSp0LmRwZHgoZSkscz1pWzFdKnQuZHBkeShyKSxsPTEsYz0xO2lmKGEpe3ZhciB1PU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxmPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxoPShpWzBdKmFbMF0raVsxXSphWzFdKS91L2Y7Yz1NYXRoLm1heCgwLGgpfXZhciBkPTE4MCpNYXRoLmF0YW4yKHMsbykvTWF0aC5QSTtyZXR1cm4gZDwtOTA/KGQrPTE4MCxsPS1sKTpkPjkwJiYoZC09MTgwLGw9LWwpLHthbmdsZTpkLGZsaXA6bCxwOnQuYzJwKG4sZSxyKSxvZmZzZXRNdWx0cGxpZXI6Y319fSx7fV0sOTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKGUrIi4iK3IpLmRhdGEoWzBdKTtyZXR1cm4gbi5lbnRlcigpLmFwcGVuZChlKS5jbGFzc2VkKHIsITApLG59ZnVuY3Rpb24gaSh0LGUscil7dmFyIGk9clswXSxjPXJbMF0udHJhY2UsdT1lLnhheGlzLGY9ZS55YXhpcyxoPWMuYWF4aXMsZD1jLmJheGlzLHA9dC5fZnVsbExheW91dCxtPWUucGxvdC5zZWxlY3RBbGwoIi5jYXJwZXRsYXllciIpLHY9cC5fY2xpcHMsZz1uKG0sImciLCJjYXJwZXQiK2MudWlkKS5jbGFzc2VkKCJ0cmFjZSIsITApLHk9bihnLCJnIiwibWlub3JsYXllciIpLGI9bihnLCJnIiwibWFqb3JsYXllciIpLHg9bihnLCJnIiwiYm91bmRhcnlsYXllciIpLF89bihnLCJnIiwibGFiZWxsYXllciIpO2cuc3R5bGUoIm9wYWNpdHkiLGMub3BhY2l0eSksbyh1LGYsYixoLCJhIixoLl9ncmlkbGluZXMpLG8odSxmLGIsZCwiYiIsZC5fZ3JpZGxpbmVzKSxvKHUsZix5LGgsImEiLGguX21pbm9yZ3JpZGxpbmVzKSxvKHUsZix5LGQsImIiLGQuX21pbm9yZ3JpZGxpbmVzKSxvKHUsZix4LGgsImEtYm91bmRhcnkiLGguX2JvdW5kYXJ5bGluZXMpLG8odSxmLHgsZCwiYi1ib3VuZGFyeSIsZC5fYm91bmRhcnlsaW5lcyksbCh0LF8sYyxpLHUsZixzKHQsdSxmLGMsaSxfLGguX2xhYmVscywiYS1sYWJlbCIpLHModCx1LGYsYyxpLF8sZC5fbGFiZWxzLCJiLWxhYmVsIikpLGEoYyxpLHYsdSxmKX1mdW5jdGlvbiBhKHQsZSxyLGksYSl7dmFyIG8scyxsLGMsdT1yLnNlbGVjdCgiIyIrdC5fY2xpcFBhdGhJZCk7dS5zaXplKCl8fCh1PXIuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNhcnBldGNsaXAiLCEwKSk7dmFyIGY9bih1LCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxwPWUuY2xpcHNlZ21lbnRzLG09W107Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKylvPXBbY10scz1oKFtdLG8ueCxpLmMycCksbD1oKFtdLG8ueSxhLmMycCksbS5wdXNoKGQocyxsLG8uYmljdWJpYykpO3ZhciB2PSJNIittLmpvaW4oIkwiKSsiWiI7dS5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCksZi5hdHRyKCJkIix2KX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt2YXIgbz0iY29uc3QtIitpKyItbGluZXMiLHM9ci5zZWxlY3RBbGwoIi4iK28pLmRhdGEoYSk7cy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobywhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSxzLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cixpPW4ueCxhPW4ueSxvPWgoW10saSx0LmMycCkscz1oKFtdLGEsZS5jMnApLGw9Ik0iK2QobyxzLG4uc21vb3RoaW5nKTt1LnNlbGVjdCh0aGlzKS5hdHRyKCJkIixsKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixuLndpZHRoKS5zdHlsZSgic3Ryb2tlIixuLmNvbG9yKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX0pLHMuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXt2YXIgbD1hLnNlbGVjdEFsbCgidGV4dC4iK3MpLmRhdGEobyk7bC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQocywhMCk7dmFyIGM9MDtyZXR1cm4gbC5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBhO2lmKCJhdXRvIj09PWkuYXhpcy50aWNrYW5nbGUpYT1wKG4sZSxyLGkueHksaS5keHkpO2Vsc2V7dmFyIG89KGkuYXhpcy50aWNrYW5nbGUrMTgwKSpNYXRoLlBJLzE4MDthPXAobixlLHIsaS54eSxbTWF0aC5jb3MobyksTWF0aC5zaW4obyldKX12YXIgcz0oaS5lbmRBbmNob3I/LTE6MSkqYS5mbGlwLGw9dS5zZWxlY3QodGhpcykuYXR0cih7InRleHQtYW5jaG9yIjpzPjA/InN0YXJ0IjoiZW5kIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwoZi5mb250LGkuZm9udCkudGV4dChpLnRleHQpLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsdCksaD1mLmJCb3godGhpcyk7bC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLnBbMF0rIiwiK2EucFsxXSsiKSByb3RhdGUoIithLmFuZ2xlKyIpdHJhbnNsYXRlKCIraS5heGlzLmxhYmVscGFkZGluZypzKyIsIisuMypoLmhlaWdodCsiKSIpLGM9TWF0aC5tYXgoYyxoLndpZHRoK2kuYXhpcy5sYWJlbHBhZGRpbmcpfSksbC5leGl0KCkucmVtb3ZlKCksY31mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdSxmLGg7bD0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSx1PXIuYlswXSxmPXIuYWIyeHkobCx1LCEwKSxoPXIuZHh5ZGFfcm91Z2gobCx1KSxjKHQsZSxyLG4sZixoLHIuYWF4aXMsaSxhLG8sImEtdGl0bGUiKSxsPXIuYVswXSx1PS41KihyLmJbMF0rci5iW3IuYi5sZW5ndGgtMV0pLGY9ci5hYjJ4eShsLHUsITApLGg9ci5keHlkYl9yb3VnaChsLHUpLGModCxlLHIsbixmLGgsci5iYXhpcyxpLGEscywiYi10aXRsZSIpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyxzLGwsYyxoKXt2YXIgZD1bXTtvLnRpdGxlJiZkLnB1c2goby50aXRsZSk7dmFyIHY9ZS5zZWxlY3RBbGwoInRleHQuIitoKS5kYXRhKGQpO3YuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGgsITApLHYuZWFjaChmdW5jdGlvbigpe3ZhciBlPXAocixzLGwsaSxhKTtbInN0YXJ0IiwiYm90aCJdLmluZGV4T2Yoby5zaG93dGlja2xhYmVscyk9PT0tMSYmKGM9MCksYys9by50aXRsZWZvbnQuc2l6ZStvLnRpdGxlb2Zmc2V0LHUuc2VsZWN0KHRoaXMpLnRleHQoby50aXRsZXx8IiIpLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5wWzBdKyIsIitlLnBbMV0rIikgcm90YXRlKCIrZS5hbmdsZSsiKSB0cmFuc2xhdGUoMCwiK2MrIikiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGYuZm9udCxvLnRpdGxlZm9udCl9KSx2LmV4aXQoKS5yZW1vdmUoKX12YXIgdT10KCJkMyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuL21hcF8xZF9hcnJheSIpLGQ9dCgiLi9tYWtlcGF0aCIpLHA9dCgiLi9vcmllbnRfdGV4dCIpLG09dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylpKHQsZSxyW25dKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuL21ha2VwYXRoIjo5MTIsIi4vbWFwXzFkX2FycmF5Ijo5MTMsIi4vb3JpZW50X3RleHQiOjkxNSxkMzoxMjF9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9zZWFyY2giKS5maW5kQmluLGE9dCgiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIiksbz10KCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIikscz10KCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIiksbD10KCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYSxyPXQuYixjPXQuYS5sZW5ndGgsdT10LmIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMsZD1lWzBdLHA9ZVtjLTFdLG09clswXSx2PXJbdS0xXSxnPWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSxiPWcqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSx4PXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtkLT1iLHArPWIsbS09eCx2Kz14LHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZCYmdDxwJiZlPm0mJmU8dn0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZHx8dD5wfHxlPG18fGU+dn0sZi5jMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGguYzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnNldFNjYWxlPWZ1bmN0aW9uKCl7dmFyIGU9dC54LHI9dC55LG49YSh0LnhjdHJsLHQueWN0cmwsZSxyLGYuc21vb3RoaW5nLGguc21vb3RoaW5nKTt0LnhjdHJsPW5bMF0sdC55Y3RybD1uWzFdLHQuZXZhbHh5PW8oW3QueGN0cmwsdC55Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QueGN0cmwsdC55Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpLHQuZHh5ZGo9bChbdC54Y3RybCx0LnljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyl9LHQuaTJhPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzBdKSxjLTIpLG49dFswXS1yO3JldHVybigxLW4pKmVbcl0rbiplW3IrMV19LHQuajJiPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzFdKSxjLTIpLG49dFsxXS1lO3JldHVybigxLW4pKnJbZV0rbipyW2UrMV19LHQuaWoyYWI9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuaTJhKGVbMF0pLHQuajJiKGVbMV0pXX0sdC5hMmk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsZSksYy0yKSksbj1lW3JdLGE9ZVtyKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGMtMSxyKyh0LW4pLyhhLW4pKSl9LHQuYjJqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LHIpLHUtMikpLG49cltlXSxhPXJbZSsxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEsZSsodC1uKS8oYS1uKSkpfSx0LmFiMmlqPWZ1bmN0aW9uKGUpe3JldHVyblt0LmEyaShlWzBdKSx0LmIyaihlWzFdKV19LHQuaTJjPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZXZhbHh5KFtdLGUscil9LHQuYWIyeHk9ZnVuY3Rpb24obixpLGEpe2lmKCFhJiYobjxlWzBdfHxuPmVbYy0xXXxpPHJbMF18fGk+clt1LTFdKSlyZXR1cm5bITEsITFdO3ZhciBvPXQuYTJpKG4pLHM9dC5iMmooaSksbD10LmV2YWx4eShbXSxvLHMpO2lmKGEpe3ZhciBmLGgsZCxwLG09MCx2PTAsZz1bXTtuPGVbMF0/KGY9MCxoPTAsbT0obi1lWzBdKS8oZVsxXS1lWzBdKSk6bj5lW2MtMV0/KGY9Yy0yLGg9MSxtPShuLWVbYy0xXSkvKGVbYy0xXS1lW2MtMl0pKTooZj1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKG8pKSksaD1vLWYpLGk8clswXT8oZD0wLHA9MCx2PShpLXJbMF0pLyhyWzFdLXJbMF0pKTppPnJbdS0xXT8oZD11LTIscD0xLHY9KGktclt1LTFdKS8oclt1LTFdLXJbdS0yXSkpOihkPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSxwPXMtZCksbSYmKHQuZHh5ZGkoZyxmLGQsaCxwKSxsWzBdKz1nWzBdKm0sbFsxXSs9Z1sxXSptKSx2JiYodC5keHlkaihnLGYsZCxoLHApLGxbMF0rPWdbMF0qdixsWzFdKz1nWzFdKnYpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWcqKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6NzUyLCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjkwMywiLi9jb25zdGFudHMiOjkwNCwiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6OTA1LCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo5MDYsIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjkwN31dLDkxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoLGY9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX0oaSxhKSksZj1NYXRoLm1heChmLE1hdGguYWJzKHRbYV1baV0pKTtpZighcy5sZW5ndGgpcmV0dXJuIHQ7dmFyIGgsZCxwLG0sdixnLHksYix4LF8sdyxNPTAsVD0wLGs9cy5sZW5ndGg7ZG97Zm9yKE09MCxvPTA7bzxrO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgQSxFLFMsTCxDLEksRD0wLFA9MDswPT09aT8oQz1NYXRoLm1pbihjLTEsMiksUz1lW0NdLEw9ZVsxXSxBPXRbYV1bQ10sRT10W2FdWzFdLFArPUUrKEUtQSkqKGVbMF0tTCkvKEwtUyksRCsrKTppPT09Yy0xJiYoQz1NYXRoLm1heCgwLGMtMyksUz1lW0NdLEw9ZVtjLTJdLEE9dFthXVtDXSxFPXRbYV1bYy0yXSxQKz1FKyhFLUEpKihlW2MtMV0tTCkvKEwtUyksRCsrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSxkPXJbYV0tclthLTFdLFArPShkKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKGQraCksRCsrKSwwPT09YT8oST1NYXRoLm1pbih1LTEsMiksUz1yW0ldLEw9clsxXSxBPXRbSV1baV0sRT10WzFdW2ldLFArPUUrKEUtQSkqKHJbMF0tTCkvKEwtUyksRCsrKTphPT09dS0xJiYoST1NYXRoLm1heCgwLHUtMyksUz1yW0ldLEw9clt1LTJdLEE9dFtJXVtpXSxFPXRbdS0yXVtpXSxQKz1FKyhFLUEpKihyW3UtMV0tTCkvKEwtUyksRCsrKSwoMD09PWF8fGE9PT11LTEpJiZpPjAmJmk8Yy0xJiYoaD1lW2krMV0tZVtpXSxkPWVbaV0tZVtpLTFdLFArPShkKnRbYV1baSsxXStoKnRbYV1baS0xXSkvKGQraCksRCsrKSxEP1AvPUQ6KHA9ZVtpKzFdLWVbaV0sbT1lW2ldLWVbaS0xXSx2PXJbYSsxXS1yW2FdLGc9clthXS1yW2EtMV0seT1wKm0qKHArbSksYj12KmcqKHYrZyksUD0oeSooZyp0W2ErMV1baV0rdip0W2EtMV1baV0pK2IqKG0qdFthXVtpKzFdK3AqdFthXVtpLTFdKSkvKGIqKG0rcCkreSooZyt2KSkpLHg9UC10W2FdW2ldLF89eC9mLE0rPV8qXyx3PUQ/MDouODUsdFthXVtpXSs9eCooMSt3KX1NPU1hdGguc3FydChNKX13aGlsZShUKys8MTAwJiZNPjFlLTUpO3JldHVybiBuLmxvZygiU21vb3RoZXIgY29udmVyZ2VkIHRvIixNLCJhZnRlciIsVCwiaXRlcmF0aW9ucyIpLHR9fSx7Ii4uLy4uL2xpYiI6NzM1fV0sOTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGFzX2NvbHVtbnMiKSxpPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1bXSxvPXIoIngiKTtvJiYhbihvKSYmYS5wdXNoKCJ4IiksZS5fY2hlYXRlcj0hbzt2YXIgcz1yKCJ5Iik7aWYocyYmIW4ocykmJmEucHVzaCgieSIpLG98fHMpcmV0dXJuIGEubGVuZ3RoJiZpKGUsZS5hYXhpcyxlLmJheGlzLCJhIiwiYiIsYSksITB9fSx7Ii4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Ijo5NjAsIi4vaGFzX2NvbHVtbnMiOjkwOX1dLDkyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKSxsPXMuZXh0ZW5kRmxhdCxjPXMuZXh0ZW5kRGVlcEFsbCx1PW4ubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6bi5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxtYXJrZXI6e2xpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6bCh7fSx1LndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmwoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbImxvY2F0aW9uIiwieiIsInRleHQiLCJuYW1lIl19KX0sYyh7fSxpLHt6bWF4OntlZGl0VHlwZToiY2FsYyJ9LHptaW46e2VkaXRUeXBlOiJjYWxjIn19KSx7Y29sb3JiYXI6YX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjE2LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc3NywiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMDgzfV0sOTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubG9jYXRpb25zLmxlbmd0aCxzPW5ldyBBcnJheShyKSxsPTA7bDxyO2wrKyl7dmFyIGM9c1tsXT17fSx1PWUubG9jYXRpb25zW2xdLGY9ZS56W2xdO2MubG9jPSJzdHJpbmciPT10eXBlb2YgdT91Om51bGwsYy56PW4oZik/ZjppfXJldHVybiBvKHMsZSksYShlLGUueiwiIiwieiIpLHN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MTcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNDQsImZhc3QtaXNudW1lcmljIjoxMzF9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGwsYz1zKCJsb2NhdGlvbnMiKTtpZihjJiYobD1jLmxlbmd0aCksIWN8fCFsKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIHU9cygieiIpO2lmKCFBcnJheS5pc0FycmF5KHUpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dS5sZW5ndGg+bCYmKGUuej11LnNsaWNlKDAsbCkpLHMoImxvY2F0aW9ubW9kZSIpLHMoInRleHQiKSxzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5saW5lLndpZHRoIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjAsIi4uLy4uL2xpYiI6NzM1LCIuL2F0dHJpYnV0ZXMiOjkyMH1dLDkyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw5MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgcz1yLmhpfHxlLmhvdmVyaW5mbyxsPSJhbGwiPT09cz9hLmhvdmVyaW5mby5mbGFnczpzLnNwbGl0KCIrIiksYz1sLmluZGV4T2YoIm5hbWUiKSE9PS0xLHU9bC5pbmRleE9mKCJsb2NhdGlvbiIpIT09LTEsZj1sLmluZGV4T2YoInoiKSE9PS0xLGg9bC5pbmRleE9mKCJ0ZXh0IikhPT0tMSxkPSFjJiZ1LHA9W107ZD90Lm5hbWVPdmVycmlkZT1yLmxvYzooYyYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksdSYmcC5wdXNoKHIubG9jKSksZiYmcC5wdXNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLnRpY2tUZXh0KG4sbi5jMmwodCksImhvdmVyIikudGV4dH0oci56KSksaCYmbyhyLGUscCksdC5leHRyYVRleHQ9cC5qb2luKCI8YnI+Iil9dmFyIGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnN1YnBsb3Q7Zm9yKGE9MDthPGwubGVuZ3RoO2ErKylpZihpPWxbYV0scz0hMSxpLl9wb2x5Z29ucyl7Zm9yKG89MDtvPGkuX3BvbHlnb25zLmxlbmd0aDtvKyspaS5fcG9seWdvbnNbb10uY29udGFpbnMoW2Uscl0pJiYocz0hcyksaS5fcG9seWdvbnNbb10uY29udGFpbnMoW2UrMzYwLHJdKSYmKHM9IXMpO2lmKHMpYnJlYWt9aWYocyYmaSlyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKGkuY3QpLHQueTA9dC55MT10LnlhLmMycChpLmN0KSx0LmluZGV4PWkuaW5kZXgsdC5sb2NhdGlvbj1pLmxvYyx0Lno9aS56LG4odCxjLGksdS5tb2NrQXhpcyksW3RdfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTA1MiwiLi9hdHRyaWJ1dGVzIjo5MjB9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImNob3JvcGxldGgiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODA3LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NTksIi4vYXR0cmlidXRlcyI6OTIwLCIuL2NhbGMiOjkyMSwiLi9kZWZhdWx0cyI6OTIyLCIuL2V2ZW50X2RhdGEiOjkyMywiLi9ob3ZlciI6OTI0LCIuL3Bsb3QiOjkyNiwiLi9zZWxlY3QiOjkyN31dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPXRbMF0udHJhY2Usbj10Lmxlbmd0aCxhPWgocixlKSxvPTA7bzxuO28rKyl7dmFyIHM9dFtvXSxsPWQoci5sb2NhdGlvbm1vZGUscy5sb2MsYSk7bD8ocy5nZW9qc29uPWwscy5jdD1sLnByb3BlcnRpZXMuY3Qscy5pbmRleD1vLHMuX3BvbHlnb25zPWkobCkpOnMuZ2VvanNvbj1udWxsfX1mdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXZhciByLG4saSxhLG89dC5nZW9tZXRyeSxzPW8uY29vcmRpbmF0ZXMsbD10LmlkLGM9W107c3dpdGNoKHI9IlJVUyI9PT1sfHwiRkpJIj09PWw/ZnVuY3Rpb24odCl7dmFyIHI7aWYobnVsbD09PWUodCkpcj10O2Vsc2UgZm9yKHI9bmV3IEFycmF5KHQubGVuZ3RoKSxhPTA7YTx0Lmxlbmd0aDthKyspclthXT1bdFthXVswXTwwP3RbYV1bMF0rMzYwOnRbYV1bMF0sdFthXVsxXV07Yy5wdXNoKGYudGVzdGVyKHIpKX06IkFUQSI9PT1sP2Z1bmN0aW9uKHQpe3ZhciByPWUodCk7aWYobnVsbD09PXIpcmV0dXJuIGMucHVzaChmLnRlc3Rlcih0KSk7dmFyIG49bmV3IEFycmF5KHQubGVuZ3RoKzEpLGk9MDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWE+cj9uW2krK109W3RbYV1bMF0rMzYwLHRbYV1bMV1dOmE9PT1yPyhuW2krK109dFthXSxuW2krK109W3RbYV1bMF0sLTkwXSk6bltpKytdPXRbYV07dmFyIG89Zi50ZXN0ZXIobik7by5wdHMucG9wKCksYy5wdXNoKG8pfTpmdW5jdGlvbih0KXtjLnB1c2goZi50ZXN0ZXIodCkpfSxvLnR5cGUpe2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iobj0wO248cy5sZW5ndGg7bisrKWZvcihpPTA7aTxzW25dLmxlbmd0aDtpKyspcihzW25dW2ldKTticmVhaztjYXNlIlBvbHlnb24iOmZvcihuPTA7bjxzLmxlbmd0aDtuKyspcihzW25dKX1yZXR1cm4gY31mdW5jdGlvbiBhKHQpe3QubGF5ZXJzLmJhY2twbG90LnNlbGVjdEFsbCgiLnRyYWNlLmNob3JvcGxldGgiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sbj1yLmxpbmV8fHt9LGk9dS5tYWtlQ29sb3JTY2FsZUZ1bmModS5leHRyYWN0U2NhbGUoZS5jb2xvcnNjYWxlLGUuem1pbixlLnptYXgpKTtvLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoIi5jaG9yb3BsZXRobG9jYXRpb24iKS5lYWNoKGZ1bmN0aW9uKHQpe28uc2VsZWN0KHRoaXMpLmF0dHIoImZpbGwiLGkodC56KSkuY2FsbChsLnN0cm9rZSx0Lm1sY3x8bi5jb2xvcikuY2FsbChjLmRhc2hMaW5lLCIiLHQubWx3fHxuLndpZHRofHwwKX0pfSl9dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxmPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksaD10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLGQ9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKW4oZVtpXSx0LnRvcG9qc29uKTt2YXIgbD10LmxheWVycy5iYWNrcGxvdC5zZWxlY3QoIi5jaG9yb3BsZXRobGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UuY2hvcm9wbGV0aCIpLmRhdGEoZSxyKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZSBjaG9yb3BsZXRoIiksbC5leGl0KCkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ubm9kZTM9by5zZWxlY3QodGhpcykscj1lLnNlbGVjdEFsbCgicGF0aC5jaG9yb3BsZXRobG9jYXRpb24iKS5kYXRhKHMuaWRlbnRpdHkpO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjaG9yb3BsZXRobG9jYXRpb24iLCEwKSxyLmV4aXQoKS5yZW1vdmUoKX0pLGEodCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzI3LCIuLi8uLi9saWIvcG9seWdvbiI6NzQ2LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc2MCxkMzoxMjF9XSw5Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbD10LmNkLGM9dC54YXhpcyx1PXQueWF4aXMsZj1bXSxoPWxbMF0ubm9kZTM7aWYoZT09PSExKWZvcihyPTA7cjxsLmxlbmd0aDtyKyspbFtyXS5kaW09MDtlbHNlIGZvcihyPTA7cjxsLmxlbmd0aDtyKyspaT1sW3JdLChhPWkuY3QpJiYobz1jLmMycChhKSxzPXUuYzJwKGEpLGUuY29udGFpbnMoW28sc10pPyhmLnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmFbMF0sbGF0OmFbMV19KSxpLmRpbT0wKTppLmRpbT0xKTtyZXR1cm4gaC5zZWxlY3RBbGwoInBhdGgiKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltP246MX0pLGZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcxM31dLDkyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGw9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWkubGluZTtlLmV4cG9ydHM9Yyh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UseHR5cGU6bi54dHlwZSx5dHlwZTpuLnl0eXBlLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdCxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGF1dG9jb250b3VyOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJjb250b3Vycy5zdGFydCI6dm9pZCAwLCJjb250b3Vycy5lbmQiOnZvaWQgMCwiY29udG91cnMuc2l6ZSI6dm9pZCAwfX0sbmNvbnRvdXJzOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cnM6e3N0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2hvd2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDpsKHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToic3R5bGUifSksbGFiZWxmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSx1LmNvbG9yLHtlZGl0VHlwZToic3R5bGUrY29sb3JiYXJzIn0pLHdpZHRoOmMoe30sdS53aWR0aCx7ZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LGEse2F1dG9jb2xvcnNjYWxlOmMoe30sYS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHptaW46Yyh7fSxhLnptaW4se2VkaXRUeXBlOiJjYWxjIn0pLHptYXg6Yyh7fSxhLnptYXgse2VkaXRUeXBlOiJjYWxjIn0pfSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM0LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk1NiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1fV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gaS5hdXRvVGlja3MobiwoZS10KS8ocnx8MTUpKSxufXZhciBpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LG89dCgiLi4vaGVhdG1hcC9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpLHM9ZS5jb250b3VycztpZihlLmF1dG9jb250b3VyIT09ITEpe3ZhciBsPW4oZS56bWluLGUuem1heCxlLm5jb250b3Vycyk7cy5zaXplPWwuZHRpY2sscy5zdGFydD1pLnRpY2tGaXJzdChsKSxsLnJhbmdlLnJldmVyc2UoKSxzLmVuZD1pLnRpY2tGaXJzdChsKSxzLnN0YXJ0PT09ZS56bWluJiYocy5zdGFydCs9cy5zaXplKSxzLmVuZD09PWUuem1heCYmKHMuZW5kLT1zLnNpemUpLHMuc3RhcnQ+cy5lbmQmJihzLnN0YXJ0PXMuZW5kPShzLnN0YXJ0K3MuZW5kKS8yKSxlLl9pbnB1dC5jb250b3Vyc3x8KGUuX2lucHV0LmNvbnRvdXJzPXt9KSxhKGUuX2lucHV0LmNvbnRvdXJzLHtzdGFydDpzLnN0YXJ0LGVuZDpzLmVuZCxzaXplOnMuc2l6ZX0pLGUuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2V7dmFyIGM9cy5zdGFydCx1PXMuZW5kLGY9ZS5faW5wdXQuY29udG91cnM7aWYoYz51JiYocy5zdGFydD1mLnN0YXJ0PXUsdT1zLmVuZD1mLmVuZD1jLGM9cy5zdGFydCksIShzLnNpemU+MCkpe3ZhciBoO2g9Yz09PXU/MTpuKGMsdSxlLm5jb250b3VycykuZHRpY2ssZi5zaXplPXMuc2l6ZT1ofX1yZXR1cm4gcn19LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL2hlYXRtYXAvY2FsYyI6OTU3fV0sOTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKSxhPXQoIi4vbWFrZV9jb2xvcl9tYXAiKSxvPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLHM9ImNiIityLnVpZDtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitzKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgbi5hdXRvTWFyZ2luKHQscyk7dmFyIGw9aSh0LHMpO2VbMF0udC5jYj1sO3ZhciBjPXIuY29udG91cnMsdT1yLmxpbmUsZj1jLnNpemV8fDEsaD1jLmNvbG9yaW5nLGQ9YShyLHtpc0NvbG9yYmFyOiEwfSk7ImhlYXRtYXAiPT09aCYmbC5maWxsbGV2ZWxzKHtzdGFydDpyLnptaW4sZW5kOnIuem1heCxzaXplOihyLnptYXgtci56bWluKS8yNTR9KSxsLmZpbGxjb2xvcigiZmlsbCI9PT1ofHwiaGVhdG1hcCI9PT1oP2Q6IiIpLmxpbmUoe2NvbG9yOiJsaW5lcyI9PT1oP2Q6dS5jb2xvcix3aWR0aDpjLnNob3dsaW5lcyE9PSExP3Uud2lkdGg6MCxkYXNoOnUuZGFzaH0pLmxldmVscyh7c3RhcnQ6Yy5zdGFydCxlbmQ6byhjKSxzaXplOmZ9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjE0LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCIuL2VuZF9wbHVzIjo5MzQsIi4vbWFrZV9jb2xvcl9tYXAiOjkzOH1dLDkzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSw5MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89bi5jb2VyY2UyKHQsZSxpLCJjb250b3Vycy5zdGFydCIpLHM9bi5jb2VyY2UyKHQsZSxpLCJjb250b3Vycy5lbmQiKSxsPW89PT0hMXx8cz09PSExLGM9cigiY29udG91cnMuc2l6ZSIpOyEoYT1sP2UuYXV0b2NvbnRvdXI9ITA6cigiYXV0b2NvbnRvdXIiLCExKSkmJmN8fHIoIm5jb250b3VycyIpfX0seyIuLi8uLi9saWIiOjczNSwiLi9hdHRyaWJ1dGVzIjo5Mjh9XSw5MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL2hhc19jb2x1bW5zIiksYT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLG89dCgiLi9jb250b3Vyc19kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZighYSh0LGUsdSxjKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoInRleHQiKSx1KCJjb25uZWN0Z2FwcyIsaShlKSksbyh0LGUsdSkscyh0LGUsdSxjKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL2hlYXRtYXAvaGFzX2NvbHVtbnMiOjk2MywiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjk3MiwiLi9hdHRyaWJ1dGVzIjo5MjgsIi4vY29udG91cnNfZGVmYXVsdHMiOjkzMiwiLi9zdHlsZV9kZWZhdWx0cyI6OTQyfV0sOTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw5MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXRbMl0tZVsyXSxuPXRbM10tZVszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfWZ1bmN0aW9uIGEodCxlLHIsYSx1KXtmdW5jdGlvbiBmKHQpe3JldHVybiBnW3QlZy5sZW5ndGhdfXZhciBoLGQ9ZS5qb2luKCIsIikscD1kLG09dC5jcm9zc2luZ3NbcF0sdj1vKG0scixlKSxnPVtzKHQsZSxbLXZbMF0sLXZbMV1dKV0seT12LmpvaW4oIiwiKSxiPXQuei5sZW5ndGgseD10LnpbMF0ubGVuZ3RoO2ZvcihoPTA7aDwxZTQ7aCsrKXtpZihtPjIwPyhtPWMuQ0hPT1NFU0FERExFW21dWyh2WzBdfHx2WzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbcF09Yy5TQURETEVSRU1BSU5ERVJbbV0pOmRlbGV0ZSB0LmNyb3NzaW5nc1twXSwhKHY9Yy5ORVdERUxUQVttXSkpe2wubG9nKCJGb3VuZCBiYWQgbWFyY2hpbmcgaW5kZXg6IixtLGUsdC5sZXZlbCk7YnJlYWt9Zy5wdXNoKHModCxlLHYpKSxlWzBdKz12WzBdLGVbMV0rPXZbMV0sbihnW2cubGVuZ3RoLTFdLGdbZy5sZW5ndGgtMl0sYSx1KSYmZy5wb3AoKSxwPWUuam9pbigiLCIpO3ZhciBfPXZbMF0mJihlWzBdPDB8fGVbMF0+eC0yKXx8dlsxXSYmKGVbMV08MHx8ZVsxXT5iLTIpO2lmKHA9PT1kJiZ2LmpvaW4oIiwiKT09PXl8fHImJl8pYnJlYWs7bT10LmNyb3NzaW5nc1twXX0xZTQ9PT1oJiZsLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpO3ZhciB3LE0sVCxrLEEsRSxTLEwsQyxJLEQsUD1uKGdbMF0sZ1tnLmxlbmd0aC0xXSxhLHUpLHo9MCxPPS4yKnQuc21vb3RoaW5nLFI9W10sRj0wO2ZvcihoPTE7aDxnLmxlbmd0aDtoKyspUz1pKGdbaF0sZ1toLTFdKSx6Kz1TLFIucHVzaChTKTt2YXIgaj16L1IubGVuZ3RoKk87Zm9yKGg9Zy5sZW5ndGgtMjtoPj1GO2gtLSlpZigodz1SW2hdKTxqKXtmb3IoVD0wLE09aC0xO00+PUYmJncrUltNXTxqO00tLSl3Kz1SW01dO2lmKFAmJmg9PT1nLmxlbmd0aC0yKWZvcihUPTA7VDxNJiZ3K1JbVF08ajtUKyspdys9UltUXTtBPWgtTStUKzEsRT1NYXRoLmZsb29yKChoK00rVCsyKS8yKSxrPVB8fGghPT1nLmxlbmd0aC0yP1B8fE0hPT0tMT9BJTI/ZihFKTpbKGYoRSlbMF0rZihFKzEpWzBdKS8yLChmKEUpWzFdK2YoRSsxKVsxXSkvMl06Z1swXTpnW2cubGVuZ3RoLTFdLGcuc3BsaWNlKE0rMSxoLU0rMSxrKSxoPU0rMSxUJiYoRj1UKSxQJiYoaD09PWcubGVuZ3RoLTI/Z1tUXT1nW2cubGVuZ3RoLTFdOjA9PT1oJiYoZ1tnLmxlbmd0aC0xXT1nWzBdKSl9Zm9yKGcuc3BsaWNlKDAsRiksaD0wO2g8Zy5sZW5ndGg7aCsrKWdbaF0ubGVuZ3RoPTI7aWYoIShnLmxlbmd0aDwyKSlpZihQKWcucG9wKCksdC5wYXRocy5wdXNoKGcpO2Vsc2V7cnx8bC5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLGQsZy5qb2luKCJMIikpO3ZhciBOPSExO2ZvcihMPTA7TDx0LmVkZ2VwYXRocy5sZW5ndGg7TCsrKWlmKEk9dC5lZGdlcGF0aHNbTF0sIU4mJm4oSVswXSxnW2cubGVuZ3RoLTFdLGEsdSkpe2cucG9wKCksTj0hMDt2YXIgQj0hMTtmb3IoQz0wO0M8dC5lZGdlcGF0aHMubGVuZ3RoO0MrKylpZihEPXQuZWRnZXBhdGhzW0NdLG4oRFtELmxlbmd0aC0xXSxnWzBdLGEsdSkpe0I9ITAsZy5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShMLDEpLEM9PT1MP3QucGF0aHMucHVzaChnLmNvbmNhdChEKSk6KEM+TCYmQy0tLHQuZWRnZXBhdGhzW0NdPUQuY29uY2F0KGcsSSkpO2JyZWFrfUJ8fCh0LmVkZ2VwYXRoc1tMXT1nLmNvbmNhdChJKSl9Zm9yKEw9MDtMPHQuZWRnZXBhdGhzLmxlbmd0aCYmIU47TCsrKUk9dC5lZGdlcGF0aHNbTF0sbihJW0kubGVuZ3RoLTFdLGdbMF0sYSx1KSYmKGcuc2hpZnQoKSx0LmVkZ2VwYXRoc1tMXT1JLmNvbmNhdChnKSxOPSEwKTtOfHx0LmVkZ2VwYXRocy5wdXNoKGcpfX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj0wLGk9MDtyZXR1cm4gdD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6aT0wPT09clsxXT8xOi0xOmMuQk9UVE9NU1RBUlQuaW5kZXhPZih0KSE9PS0xP2k9MTpjLkxFRlRTVEFSVC5pbmRleE9mKHQpIT09LTE/bj0xOmMuVE9QU1RBUlQuaW5kZXhPZih0KSE9PS0xP2k9LTE6bj0tMSxbbixpXX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSk7cmV0dXJuW28uYzJwKCgxLWwpKnQueFtuXStsKnQueFtuKzFdLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgYz0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAoKDEtYykqdC55W2ldK2MqdC55W2krMV0sITApLG4saStjXX12YXIgbD10KCIuLi8uLi9saWIiKSxjPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8scyxjO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxvPTA7bzx0Lmxlbmd0aDtvKyspe2ZvcihzPXRbb10sYz0wO2M8cy5zdGFydHMubGVuZ3RoO2MrKylpPXMuc3RhcnRzW2NdLGEocyxpLCJlZGdlIixlLHIpO2ZvcihuPTA7T2JqZWN0LmtleXMocy5jcm9zc2luZ3MpLmxlbmd0aCYmbjwxZTQ7KW4rKyxpPU9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpLGEocyxpLHZvaWQgMCxlLHIpOzFlND09PW4mJmwubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iil9fX0seyIuLi8uLi9saWIiOjczNSwiLi9jb25zdGFudHMiOjkzMX1dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIG4odCxlLHIsaSxhLCEwKX19LHsiLi4vaGVhdG1hcC9ob3ZlciI6OTY0fV0sOTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsIjJkTWFwIiwiY29udG91ciJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc4OSwiLi9hdHRyaWJ1dGVzIjo5MjgsIi4vY2FsYyI6OTI5LCIuL2NvbG9yYmFyIjo5MzAsIi4vZGVmYXVsdHMiOjkzMywiLi9ob3ZlciI6OTM2LCIuL3Bsb3QiOjk0MCwiLi9zdHlsZSI6OTQxfV0sOTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLGM9ImxpbmVzIj09PWUuY29sb3Jpbmc/MDoxO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIHUsZixoPXQuY29sb3JzY2FsZSxkPWgubGVuZ3RoLHA9bmV3IEFycmF5KGQpLG09bmV3IEFycmF5KGQpO2lmKCJoZWF0bWFwIj09PWUuY29sb3Jpbmcpe2Zvcih0LnphdXRvJiZ0LmF1dG9jb250b3VyPT09ITEmJih0LnptaW49ci1zLzIsdC56bWF4PXQuem1pbitsKnMpLGY9MDtmPGQ7ZisrKXU9aFtmXSxwW2ZdPXVbMF0qKHQuem1heC10LnptaW4pK3Quem1pbixtW2ZdPXVbMV07dmFyIHY9bi5leHRlbnQoW3Quem1pbix0LnptYXgsZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxnPXZbdC56bWluPHQuem1heD8wOjFdLHk9dlt0LnptaW48dC56bWF4PzE6MF07ZyE9PXQuem1pbiYmKHAuc3BsaWNlKDAsMCxnKSxtLnNwbGljZSgwLDAsUmFuZ2VbMF0pKSx5IT09dC56bWF4JiYocC5wdXNoKHkpLG0ucHVzaChtW20ubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoZj0wO2Y8ZDtmKyspdT1oW2ZdLHBbZl09KHVbMF0qKGwrYy0xKS1jLzIpKnMrcixtW2ZdPXVbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46cCxyYW5nZTptfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjUsIi4vZW5kX3BsdXMiOjkzNCxkMzoxMjF9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtpZig1PT09cnx8MTA9PT1yKXtyZXR1cm4gdD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4fXJldHVybiAxNT09PXI/MDpyfXZhciBpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsZixoPXRbMF0ueixkPWgubGVuZ3RoLHA9aFswXS5sZW5ndGgsbT0yPT09ZHx8Mj09PXA7Zm9yKHI9MDtyPGQtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KGkuQk9UVE9NU1RBUlQpKSxyPT09ZC0yJiYobz1vLmNvbmNhdChpLlRPUFNUQVJUKSksZT0wO2U8cC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KGkuTEVGVFNUQVJUKSksZT09PXAtMiYmKGE9YS5jb25jYXQoaS5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1toW3JdW2VdLGhbcl1bZSsxXV0sW2hbcisxXVtlXSxoW3IrMV1bZSsxXV1dLGY9MDtmPHQubGVuZ3RoO2YrKyl1PXRbZl0sKGM9bih1LmxldmVsLGwpKSYmKHUuY3Jvc3NpbmdzW3NdPWMsYS5pbmRleE9mKGMpIT09LTEmJih1LnN0YXJ0cy5wdXNoKFtlLHJdKSxtJiZhLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkhPT0tMSYmdS5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkzMX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxuKXt2YXIgcz1uWzBdLnRyYWNlLGM9blswXS54LGY9blswXS55LGg9cy5jb250b3VycyxkPXMudWlkLHA9ZS54YXhpcyxtPWUueWF4aXMsdj10Ll9mdWxsTGF5b3V0LGc9ImNvbnRvdXIiK2QsXz1pKGgsZSxuWzBdKTtpZihzLnZpc2libGUhPT0hMClyZXR1cm4gdi5fcGFwZXIuc2VsZWN0QWxsKCIuIitnKyIsLmhtIitkKS5yZW1vdmUoKSx2b2lkIHYuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZCkucmVtb3ZlKCk7ImhlYXRtYXAiPT09aC5jb2xvcmluZz8ocy56YXV0byYmcy5hdXRvY29udG91cj09PSExJiYocy5faW5wdXQuem1pbj1zLnptaW49aC5zdGFydC1oLnNpemUvMixzLl9pbnB1dC56bWF4PXMuem1heD1zLnptaW4rXy5sZW5ndGgqaC5zaXplKSx5KHQsZSxbbl0pKToodi5fcGFwZXIuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpLHYuX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpKSxiKF8pLHgoXyk7dmFyIHc9cC5jMnAoY1swXSwhMCksTT1wLmMycChjW2MubGVuZ3RoLTFdLCEwKSxUPW0uYzJwKGZbMF0sITApLGs9bS5jMnAoZltmLmxlbmd0aC0xXSwhMCksQT1bW3csa10sW00sa10sW00sVF0sW3csVF1dLEU9ci5tYWtlQ29udG91ckdyb3VwKGUsbixnKTthKEUsQSxoKSxvKEUsXyxBLGgpLGwoRSxfLHQsblswXSxoLEEpLHUoRSxlLHYuX2NsaXBzLG5bMF0sQSl9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPXQuc2l6ZSxpPVtdLGE9Xyh0KSxvPXQuc3RhcnQ7bzxhO28rPW4paWYoaS5wdXNoKHtsZXZlbDpvLGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueSx6OnIueixzbW9vdGhpbmc6ci50cmFjZS5saW5lLnNtb290aGluZ30pLGkubGVuZ3RoPjFlMyl7ZC53YXJuKCJUb28gbWFueSBjb250b3VycywgY2xpcHBpbmcgYXQgMTAwMCIsdCk7YnJlYWt9cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoImcuY29udG91cmJnIikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyYmciLCEwKTt2YXIgaT1uLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09ci5jb2xvcmluZz9bMF06W10pO2kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxpLmV4aXQoKS5yZW1vdmUoKSxpLmF0dHIoImQiLCJNIitlLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT10LnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCIpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmZpbGwiLCEwKTt2YXIgYT1pLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09bi5jb2xvcmluZz9lOltdKTthLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksYS5leGl0KCkucmVtb3ZlKCksYS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXModCxyKTtlP2guc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6aC5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzJdWzBdKTwuMDF9Zm9yKHZhciBuLGksYSxvLHMsbCxjPU1hdGgubWluKHQuelswXVswXSx0LnpbMF1bMV0pLHU9dC5lZGdlcGF0aHMubGVuZ3RofHxjPD10LmxldmVsPyIiOiJNIitlLmpvaW4oIkwiKSsiWiIsZj0wLGg9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxtPSEwO2gubGVuZ3RoOyl7Zm9yKGw9cC5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2ZdLHQuc21vb3RoaW5nKSx1Kz1tP2w6bC5yZXBsYWNlKC9eTS8sIkwiKSxoLnNwbGljZShoLmluZGV4T2YoZiksMSksbj10LmVkZ2VwYXRoc1tmXVt0LmVkZ2VwYXRoc1tmXS5sZW5ndGgtMV0sbz0tMSxhPTA7YTw0O2ErKyl7aWYoIW4pe2QubG9nKCJNaXNzaW5nIGVuZD8iLGYsdCk7YnJlYWt9Zm9yKCFmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1lWzBdWzFdKTwuMDF9KG4pfHxyKG4pP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX0obik/aT1lWzBdOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX0obik/aT1lWzNdOnIobikmJihpPWVbMl0pOmk9ZVsxXSxzPTA7czx0LmVkZ2VwYXRocy5sZW5ndGg7cysrKXt2YXIgdj10LmVkZ2VwYXRoc1tzXVswXTtNYXRoLmFicyhuWzBdLWlbMF0pPC4wMT9NYXRoLmFicyhuWzBdLXZbMF0pPC4wMSYmKHZbMV0tblsxXSkqKGlbMV0tdlsxXSk+PTAmJihpPXYsbz1zKTpNYXRoLmFicyhuWzFdLWlbMV0pPC4wMT9NYXRoLmFicyhuWzFdLXZbMV0pPC4wMSYmKHZbMF0tblswXSkqKGlbMF0tdlswXSk+PTAmJihpPXYsbz1zKTpkLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixuLGksdil9aWYobj1pLG8+PTApYnJlYWs7dSs9IkwiK2l9aWYobz09PXQuZWRnZXBhdGhzLmxlbmd0aCl7ZC5sb2coInVuY2xvc2VkIHBlcmltZXRlciBwYXRoIik7YnJlYWt9Zj1vLG09aC5pbmRleE9mKGYpPT09LTEsbSYmKGY9aFswXSx1Kz0iWiIpfWZvcihmPTA7Zjx0LnBhdGhzLmxlbmd0aDtmKyspdSs9cC5zbW9vdGhjbG9zZWQodC5wYXRoc1tmXSx0LnNtb290aGluZyk7cmV0dXJuIHV9ZnVuY3Rpb24gbCh0LGUsbixpLGEsbyl7dmFyIHM9dC5zZWxlY3RBbGwoImcuY29udG91cmxpbmVzIikuZGF0YShbMF0pO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGluZXMiLCEwKTt2YXIgbD1hLnNob3dsaW5lcyE9PSExLGM9YS5zaG93bGFiZWxzLHU9bCYmYyxmPXIuY3JlYXRlTGluZXMocyxsfHxjLGUpLG09ci5jcmVhdGVMaW5lQ2xpcChzLHUsbi5fZnVsbExheW91dC5fY2xpcHMsaS50cmFjZS51aWQpLHY9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoYz9bMF06W10pO2lmKHYuZXhpdCgpLnJlbW92ZSgpLHYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksYyl7dmFyIGc9W29dLHk9W107ZC5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLG4uX2Z1bGxMYXlvdXQpLHg9cC50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChwLmZvbnQsYS5sYWJlbGZvbnQpLF89ZVswXS54YXhpcy5fbGVuZ3RoLE09ZVswXS55YXhpcy5fbGVuZ3RoLFQ9e2xlZnQ6TWF0aC5tYXgob1swXVswXSwwKSxyaWdodDpNYXRoLm1pbihvWzJdWzBdLF8pLHRvcDpNYXRoLm1heChvWzBdWzFdLDApLGJvdHRvbTpNYXRoLm1pbihvWzJdWzFdLE0pfTtULm1pZGRsZT0oVC50b3ArVC5ib3R0b20pLzIsVC5jZW50ZXI9KFQubGVmdCtULnJpZ2h0KS8yO3ZhciBrPU1hdGguc3FydChfKl8rTSpNKSxBPXcuTEFCRUxESVNUQU5DRSprL01hdGgubWF4KDEsZS5sZW5ndGgvdy5MQUJFTElOQ1JFQVNFKTtmLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLHgsbik7aC5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1kLmdldFZpc2libGVTZWdtZW50KHQsVCxlLmhlaWdodC8yKTtpZihuJiYhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSp3LkxBQkVMTUlOKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL0EpLHcuTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHQsbixlLHksVCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksZyl9fSl9KSx4LnJlbW92ZSgpLHIuZHJhd0xhYmVscyh2LHksbixtLHU/ZzpudWxsKX1jJiYhbCYmZi5yZW1vdmUoKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLGM9TWF0aC5jb3MobCkqaSx1PU1hdGguc2luKGwpKmksZj0obz5uLmNlbnRlcj9uLnJpZ2h0LW86by1uLmxlZnQpLyhjK01hdGguYWJzKE1hdGguc2luKGwpKmEpKSxoPShzPm4ubWlkZGxlP24uYm90dG9tLXM6cy1uLnRvcCkvKE1hdGguYWJzKHUpK01hdGguY29zKGwpKmEpO2lmKGY8MXx8aDwxKXJldHVybiAxLzA7dmFyIHA9TS5FREdFQ09TVCooMS8oZi0xKSsxLyhoLTEpKTtwKz1NLkFOR0xFQ09TVCpsKmw7Zm9yKHZhciBtPW8tYyx2PXMtdSxnPW8rYyx5PXMrdSxiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciB4PXJbYl0sXz1NYXRoLmNvcyh4LnRoZXRhKSp4LndpZHRoLzIsdz1NYXRoLnNpbih4LnRoZXRhKSp4LndpZHRoLzIsVD0yKmQuc2VnbWVudERpc3RhbmNlKG0sdixnLHkseC54LV8seC55LXcseC54K18seC55K3cpLyhlLmhlaWdodCt4LmhlaWdodCksaz14LmxldmVsPT09ZS5sZXZlbCxBPWs/TS5TQU1FTEVWRUxESVNUQU5DRToxO2lmKFQ8PUEpcmV0dXJuIDEvMDtwKz1NLk5FSUdIQk9SQ09TVCooaz9NLlNBTUVMRVZFTEZBQ1RPUjoxKS8oVC1BKX1yZXR1cm4gcH1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIGE9ImNsaXAiK24udHJhY2UudWlkLG89ci5zZWxlY3RBbGwoIiMiK2EpLmRhdGEobi50cmFjZS5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKG8uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsYSksby5leGl0KCkucmVtb3ZlKCksbi50cmFjZS5jb25uZWN0Z2Fwcz09PSExKXt2YXIgbD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6ZihuKSxzbW9vdGhpbmc6MH07YihbbF0pLHgoW2xdKTt2YXIgYz1zKGwsaSksdT1vLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoWzBdKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdS5hdHRyKCJkIixjKX1lbHNlIGE9bnVsbDt0LmNhbGwocC5zZXRDbGlwVXJsLGEpLGUucGxvdC5zZWxlY3RBbGwoIi5obSIrbi50cmFjZS51aWQpLmNhbGwocC5zZXRDbGlwVXJsLGEpfWZ1bmN0aW9uIGYodCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspcj1uW2VdLGlbclswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9dmFyIGg9dCgiZDMiKSxkPXQoIi4uLy4uL2xpYiIpLHA9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSx5PXQoIi4uL2hlYXRtYXAvcGxvdCIpLGI9dCgiLi9tYWtlX2Nyb3NzaW5ncyIpLHg9dCgiLi9maW5kX2FsbF9wYXRocyIpLF89dCgiLi9lbmRfcGx1cyIpLHc9dCgiLi9jb25zdGFudHMiKSxNPXcuTEFCRUxPUFRJTUlaRVI7ci5wbG90PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyluKHQsZSxyW2ldKX0sci5tYWtlQ29udG91ckdyb3VwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnBsb3Quc2VsZWN0KCIubWFwbGF5ZXIiKS5zZWxlY3RBbGwoImcuY29udG91ci4iK3IpLmRhdGEoZSk7cmV0dXJuIG4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyIiwhMCkuY2xhc3NlZChyLCEwKSxuLmV4aXQoKS5yZW1vdmUoKSxufSxyLmNyZWF0ZUxpbmVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLnNtb290aGluZyxpPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsZXZlbCIpLmRhdGEoZT9yOltdKTtpZihpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxldmVsIiwhMCksZSl7dmFyIGE9aS5zZWxlY3RBbGwoInBhdGgub3BlbmxpbmUiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoIm9wZW5saW5lIiwhMCksYS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gcC5zbW9vdGhvcGVuKHQsbil9KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIG89aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucHBhdGhzfHx0LnBhdGhzfSk7by5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNsb3NlZGxpbmUiLCEwKSxvLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiBwLnNtb290aGNsb3NlZCh0LG4pfSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpfXJldHVybiBpfSxyLmNyZWF0ZUxpbmVDbGlwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWU/ImNsaXBsaW5lIituOm51bGwsYT1yLnNlbGVjdEFsbCgiIyIraSkuZGF0YShlP1swXTpbXSk7cmV0dXJuIGEuZXhpdCgpLnJlbW92ZSgpLAphLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJsaW5lY2xpcCIsITApLmF0dHIoImlkIixpKSxwLnNldENsaXBVcmwodCxpKSxhfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiBoLmZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtyZXR1cm4gZT9uPWUuYXhpczoobj17dHlwZToibGluZWFyIixfc2VwYXJhdG9yczoiLiwiLF9pZDoieWNvbnRvdXIiLG50aWNrczoodC5lbmQtdC5zdGFydCkvdC5zaXplLHNob3dleHBvbmVudDoiYWxsIixyYW5nZTpbdC5zdGFydCx0LmVuZF19LGcobixyKSx2LmNhbGNUaWNrcyhuKSxuLl90bWluPW51bGwsbi5fdG1heD1udWxsKSxmdW5jdGlvbih0KXtyZXR1cm4gdi50aWNrVGV4dChuLHQpLnRleHR9fSxyLmNhbGNUZXh0T3B0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lKHQpO3IudGV4dChpKS5jYWxsKG0uY29udmVydFRvVHNwYW5zLG4pO3ZhciBhPXAuYkJveChyLm5vZGUoKSwhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxsZXZlbDp0LGR5OihhLnRvcCthLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHMsbCx1LGY9ci53aWR0aDtlLmlzQ2xvc2VkPyhvPWUubGVuL00uSU5JVElBTFNFQVJDSFBPSU5UUyxhPWUubWluK28vMixzPWUubWF4KToobz0oZS5sZW4tZikvKE0uSU5JVElBTFNFQVJDSFBPSU5UUysxKSxhPWUubWluK28rZi8yLHM9ZS5tYXgtKG8rZikvMik7Zm9yKHZhciBoPTEvMCxwPTA7cDxNLklURVJBVElPTlM7cCsrKXtmb3IodmFyIG09YTttPHM7bSs9byl7dmFyIHY9ZC5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLG0sZiksZz1jKHYscixuLGkpO2c8aCYmKGg9Zyx1PXYsbD1tKX1pZihoPjIqTS5NQVhDT1NUKWJyZWFrO3AmJihvLz0yKSxhPWwtby8yLHM9YSsxLjUqb31pZihoPD1NLk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLGM9TWF0aC5zaW4obCksdT1NYXRoLmNvcyhsKSxmPWkqdSxoPWEqYyxkPWkqYyxwPS1hKnUsbT1bW28tZi1oLHMtZC1wXSxbbytmLWgscytkLXBdLFtvK2YraCxzK2QrcF0sW28tZitoLHMtZCtwXV07ci5wdXNoKHt0ZXh0OmUudGV4dCx4Om8seTpzLGR5OmUuZHksdGhldGE6bCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSksbi5wdXNoKG0pfSxyLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KyIsIit0LngrIiwiK3QueSsiLCIrdC50aGV0YX0pO2lmKGEuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxuPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O2guc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTpuLHRyYW5zZm9ybToicm90YXRlKCIrMTgwKnQudGhldGEvTWF0aC5QSSsiICIrZSsiICIrbisiKSJ9KS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHIpfSksaSl7Zm9yKHZhciBvPSIiLHM9MDtzPGkubGVuZ3RoO3MrKylvKz0iTSIraVtzXS5qb2luKCJMIikrIloiO3ZhciBsPW4uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShbMF0pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmF0dHIoImQiLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3OTYsIi4uL2hlYXRtYXAvcGxvdCI6OTY5LCIuL2NvbnN0YW50cyI6OTMxLCIuL2VuZF9wbHVzIjo5MzQsIi4vZmluZF9hbGxfcGF0aHMiOjkzNSwiLi9tYWtlX2Nyb3NzaW5ncyI6OTM5LGQzOjEyMX1dLDk0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbz10KCIuL21ha2VfY29sb3JfbWFwIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5jb250b3VyIik7ZS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2UsYT1yLmNvbnRvdXJzLHM9ci5saW5lLGw9YS5zaXplfHwxLGM9YS5zdGFydCx1PSJjb25zdHJhaW50Ij09PWEudHlwZSxmPSF1JiYibGluZXMiPT09YS5jb2xvcmluZyxoPSF1JiYiZmlsbCI9PT1hLmNvbG9yaW5nLGQ9Znx8aD9vKHIpOm51bGw7ZS5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP2QodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSk7dmFyIHA9YS5sYWJlbGZvbnQ7aWYoZS5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyB0ZXh0IikuZWFjaChmdW5jdGlvbih0KXtpLmZvbnQobi5zZWxlY3QodGhpcykse2ZhbWlseTpwLmZhbWlseSxzaXplOnAuc2l6ZSxjb2xvcjpwLmNvbG9yfHwoZj9kKHQubGV2ZWwpOnMuY29sb3IpfSl9KSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09bSYmKG09dC5sZXZlbCksZCh0LmxldmVsKy41KmwpfSksdm9pZCAwPT09bSYmKG09YyksZS5zZWxlY3RBbGwoImcuY29udG91cmJnIHBhdGgiKS5zdHlsZSgiZmlsbCIsZChtLS41KmwpKX19KSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vaGVhdG1hcC9zdHlsZSI6OTcwLCIuL21ha2VfY29sb3JfbWFwIjo5MzgsZDM6MTIxfV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7b3x8KG89e30pO3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiO2lmKCJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSxzIT09ITEmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsby5kZWZhdWx0Q29sb3J8fCIjMDAwIikpLHIoImxpbmUud2lkdGgiLHZvaWQgMD09PW8uZGVmYXVsdFdpZHRoPy41Om8uZGVmYXVsdFdpZHRoKSxyKCJsaW5lLmRhc2giKSkscigibGluZS5zbW9vdGhpbmciKSwibm9uZSIhPT1sJiZuKHQsZSxhLHIse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLHIoImNvbnRvdXJzLnNob3dsYWJlbHMiKSl7dmFyIHU9YS5mb250O2kuY29lcmNlRm9udChyLCJjb250b3Vycy5sYWJlbGZvbnQiLHtmYW1pbHk6dS5mYW1pbHksc2l6ZTp1LnNpemUsY29sb3I6Y30pLHIoImNvbnRvdXJzLmxhYmVsZm9ybWF0Iil9by5oYXNIb3ZlciE9PSExJiYocigiemhvdmVyZm9ybWF0IiksZS5fc2VwYXJhdG9ycz1hLnNlcGFyYXRvcnMpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyMCwiLi4vLi4vbGliIjo3MzV9XSw5NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPWkuY29udG91cnMsbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9by5saW5lLGY9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9Yyh7fSx7Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwiZmlsbCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGV2ZWxzIiwiY29uc3RyYWludCJdLGRmbHQ6ImxldmVscyIsZWRpdFR5cGU6ImNhbGMifSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOmEuc2hvd2xpbmVzLHNob3dsYWJlbHM6YS5zaG93bGFiZWxzLGxhYmVsZm9udDphLmxhYmVsZm9udCxsYWJlbGZvcm1hdDphLmxhYmVsZm9ybWF0LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChmLklORVFVQUxJVFlfT1BTKS5jb25jYXQoZi5JTlRFUlZBTF9PUFMpLmNvbmNhdChmLlNFVF9PUFMpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjpjKHt9LHUuY29sb3Ise30pLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LHMse2F1dG9jb2xvcnNjYWxlOmMoe30scy5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pfSx7Y29sb3JiYXI6bH0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjE2LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTI4LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjk1NiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1LCIuL2NvbnN0YW50cyI6OTQ2fV0sOTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gby5hdXRvVGlja3MobiwoZS10KS8ocnx8MTUpKSxufWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQpe2s9ZS5faW5wdXQuenNtb290aD1lLnpzbW9vdGg9ITEsYS5ub3RpZmllcigiY2Fubm90IGZhc3QtenNtb290aDogIit0KX12YXIgbixpLG8scyxnLHksYix4LF89ZS5jYXJwZXRUcmFjZSx3PV8uYWF4aXMsTT1fLmJheGlzLFQ9bC50cmFjZUlzKGUsImNvbnRvdXIiKSxrPVQ/ImJlc3QiOmUuenNtb290aDtpZih3Ll9taW5EdGljaz0wLE0uX21pbkR0aWNrPTAsdShlKSYmZihlLHcsTSwiYSIsImIiLFsieiJdKSxuPWUuYT93Lm1ha2VDYWxjZGF0YShlLCJhIik6W10scz1lLmI/TS5tYWtlQ2FsY2RhdGEoZSwiYiIpOltdLGk9ZS5hMHx8MCxvPWUuZGF8fDEsZz1lLmIwfHwwLHk9ZS5kYnx8MSxiPWgoZS56LGUudHJhbnNwb3NlKSxlLl9lbXB0eXBvaW50cz1tKGIpLGUuX2ludGVycHo9cChiLGUuX2VtcHR5cG9pbnRzLGUuX2ludGVycHopLCJmYXN0Ij09PWspaWYoImxvZyI9PT13LnR5cGV8fCJsb2ciPT09TS50eXBlKXIoImxvZyBheGlzIGZvdW5kIik7ZWxzZXtpZihuLmxlbmd0aCl7dmFyIEE9KG5bbi5sZW5ndGgtMV0tblswXSkvKG4ubGVuZ3RoLTEpLEU9TWF0aC5hYnMoQS8xMDApO2Zvcih4PTA7eDxuLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhuW3grMV0tblt4XS1BKT5FKXtyKCJhIHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319aWYocy5sZW5ndGgmJiJmYXN0Ij09PWspe3ZhciBTPShzW3MubGVuZ3RoLTFdLXNbMF0pLyhzLmxlbmd0aC0xKSxMPU1hdGguYWJzKFMvMTAwKTtmb3IoeD0wO3g8cy5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoc1t4KzFdLXNbeF0tUyk+TCl7cigiYiBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fX12YXIgQz1kKGIpLEk9InNjYWxlZCI9PT1lLnh0eXBlPyIiOm4sRD12KGUsSSxpLG8sQyx3KSxQPSJzY2FsZWQiPT09ZS55dHlwZT8iIjpzLHo9dihlLFAsZyx5LGIubGVuZ3RoLE0pLE89e2E6RCxiOnosejpifTtyZXR1cm4ibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmYyhlLGIsIiIsInoiKSxbT119dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLHU9dCgiLi4vaGVhdG1hcC9oYXNfY29sdW1ucyIpLGY9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxoPXQoIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiKSxkPXQoIi4uL2hlYXRtYXAvbWF4X3Jvd19sZW5ndGgiKSxwPXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxtPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIiksdj10KCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiKSxnPXQoIi4vZGVmYXVsdHMiKSx5PXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNhcnBldFRyYWNlPXkodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIGE9dC5kYXRhW3IuaW5kZXhdLGw9dC5kYXRhW2UuaW5kZXhdO2wuYXx8KGwuYT1hLmEpLGwuYnx8KGwuYj1hLmIpLGcobCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgYz1pKHQsZSksdT1lLmNvbnRvdXJzO2lmKGUuYXV0b2NvbnRvdXI9PT0hMCl7dmFyIGY9bihlLnptaW4sZS56bWF4LGUubmNvbnRvdXJzKTt1LnNpemU9Zi5kdGljayx1LnN0YXJ0PW8udGlja0ZpcnN0KGYpLGYucmFuZ2UucmV2ZXJzZSgpLHUuZW5kPW8udGlja0ZpcnN0KGYpLHUuc3RhcnQ9PT1lLnptaW4mJih1LnN0YXJ0Kz11LnNpemUpLHUuZW5kPT09ZS56bWF4JiYodS5lbmQtPXUuc2l6ZSksdS5zdGFydD51LmVuZCYmKHUuc3RhcnQ9dS5lbmQ9KHUuc3RhcnQrdS5lbmQpLzIpLGUuX2lucHV0LmNvbnRvdXJzPXMoe30sdSl9ZWxzZXt2YXIgaD11LnN0YXJ0LGQ9dS5lbmQscD1lLl9pbnB1dC5jb250b3VycztpZihoPmQmJih1LnN0YXJ0PXAuc3RhcnQ9ZCxkPXUuZW5kPXAuZW5kPWgsaD11LnN0YXJ0KSwhKHUuc2l6ZT4wKSl7dmFyIG07bT1oPT09ZD8xOm4oaCxkLGUubmNvbnRvdXJzKS5kdGljayxwLnNpemU9dS5zaXplPW19fXJldHVybiBjfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYxNywiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjkxMSwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSI6OTU4LCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiI6OTYwLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6OTYyLCIuLi9oZWF0bWFwL2hhc19jb2x1bW5zIjo5NjMsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjk2NiwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5Ijo5NjcsIi4uL2hlYXRtYXAvbWF4X3Jvd19sZW5ndGgiOjk2OCwiLi9kZWZhdWx0cyI6OTUwfV0sOTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1uLmEubGVuZ3RoLGw9bi5iLmxlbmd0aCxjPW4ueix1PS0oMS8wKSxmPTEvMDtmb3IoaT0wO2k8bDtpKyspZj1NYXRoLm1pbihmLGNbaV1bMF0pLGY9TWF0aC5taW4oZixjW2ldW3MtMV0pLHU9TWF0aC5tYXgodSxjW2ldWzBdKSx1PU1hdGgubWF4KHUsY1tpXVtzLTFdKTtmb3IoaT0xO2k8cy0xO2krKylmPU1hdGgubWluKGYsY1swXVtpXSksZj1NYXRoLm1pbihmLGNbbC0xXVtpXSksdT1NYXRoLm1heCh1LGNbMF1baV0pLHU9TWF0aC5tYXgodSxjW2wtMV1baV0pO3N3aXRjaChlKXtjYXNlIj4iOmNhc2UiPj0iOm4uY29udG91cnMudmFsdWU+dSYmKHRbMF0ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiPCI6Y2FzZSI8PSI6bi5jb250b3Vycy52YWx1ZTxmJiYodFswXS5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSJbXSI6Y2FzZSIoKSI6YT1NYXRoLm1pbi5hcHBseShudWxsLG4uY29udG91cnMudmFsdWUpLG89TWF0aC5tYXguYXBwbHkobnVsbCxuLmNvbnRvdXJzLnZhbHVlKSxvPGYmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKSxhPnUmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIl1bIjpjYXNlIikoIjphPU1hdGgubWluLmFwcGx5KG51bGwsbi5jb250b3Vycy52YWx1ZSksbz1NYXRoLm1heC5hcHBseShudWxsLG4uY29udG91cnMudmFsdWUpLGE8ZiYmbz51JiYodFswXS5wcmVmaXhCb3VuZGFyeT0hMCl9fX0se31dLDk0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0lORVFVQUxJVFlfT1BTOlsiPSIsIjwiLCI+PSIsIj4iLCI8PSJdLElOVEVSVkFMX09QUzpbIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSxTRVRfT1BTOlsie30iLCJ9eyJdfX0se31dLDk0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gcyh0KT8rdDpudWxsfXZhciBuLGk9QXJyYXkuaXNBcnJheShlKTtyZXR1cm4gby5JTkVRVUFMSVRZX09QUy5pbmRleE9mKHQpIT09LTE/bj1yKGk/ZVswXTplKTpvLklOVEVSVkFMX09QUy5pbmRleE9mKHQpIT09LTE/bj1pP1tyKGVbMF0pLHIoZVsxXSldOltyKGUpLHIoZSldOm8uU0VUX09QUy5pbmRleE9mKHQpIT09LTEmJihuPWk/ZS5tYXAocik6W3IoZSldKSxufWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9bih0LGUpO3ZhciByPU1hdGgubWluKGVbMF0sZVsxXSksaT1NYXRoLm1heChlWzBdLGVbMV0pO3JldHVybntzdGFydDpyLGVuZDppLHNpemU6aS1yfX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU9bih0LGUpLHtzdGFydDplLGVuZDoxLzAsc2l6ZToxLzB9fX12YXIgbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHNbIltdIl09aSgiW10iKSxlLmV4cG9ydHNbIigpIl09aSgiKCkiKSxlLmV4cG9ydHNbIlspIl09aSgiWykiKSxlLmV4cG9ydHNbIihdIl09aSgiKF0iKSxlLmV4cG9ydHNbIl1bIl09aSgiXVsiKSxlLmV4cG9ydHNbIikoIl09aSgiKSgiKSxlLmV4cG9ydHNbIilbIl09aSgiKVsiKSxlLmV4cG9ydHNbIl0oIl09aSgiXSgiKSxlLmV4cG9ydHNbIj4iXT1hKCI+IiksZS5leHBvcnRzWyI+PSJdPWEoIj49IiksZS5leHBvcnRzWyI8Il09YSgiPCIpLGUuZXhwb3J0c1siPD0iXT1hKCI8PSIpLGUuZXhwb3J0c1siPSJdPWEoIj0iKX0seyIuL2NvbnN0YW50cyI6OTQ2LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sOTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RyYWludF9tYXBwaW5nIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO1siPSIsIjwiLCI8PSIsIj4iLCI+PSJdLmluZGV4T2YoZS5vcGVyYXRpb24pPT09LTE/KHQoImNvbnRvdXJzLnZhbHVlIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOmkoZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoImNvbnRvdXJzLnZhbHVlIiwwKSxpKGUudmFsdWUpfHwoQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZVswXSk6ZS52YWx1ZT0wKSk7dmFyIGE9bltlLm9wZXJhdGlvbl0oZS52YWx1ZSk7ZS5zdGFydD1hLnN0YXJ0LGUuZW5kPWEuZW5kLGUuc2l6ZT1hLnNpemV9fSx7Ii4vY29uc3RyYWludF9tYXBwaW5nIjo5NDcsImZhc3QtaXNudW1lcmljIjoxMzF9XSw5NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZSJdWyI6Y2FzZSIpWyI6Y2FzZSJdKCI6Y2FzZSIpKCI6dmFyIGw9bztvPXMscz1sO2Nhc2UiW10iOmNhc2UiWykiOmNhc2UiKF0iOmNhc2UiKCkiOmlmKDIhPT10Lmxlbmd0aClyZXR1cm4gdm9pZCBuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLiIpO2ZvcihpPXRbMF0sYT10WzFdLHI9MDtyPGkuZWRnZXBhdGhzLmxlbmd0aDtyKyspaS5lZGdlcGF0aHNbcl09byhpLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGkucGF0aHMubGVuZ3RoO3IrKylpLnBhdGhzW3JdPW8oaS5wYXRoc1tyXSk7Zm9yKDthLmVkZ2VwYXRocy5sZW5ndGg7KWkuZWRnZXBhdGhzLnB1c2gocyhhLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDthLnBhdGhzLmxlbmd0aDspaS5wYXRocy5wdXNoKHMoYS5wYXRocy5zaGlmdCgpKSk7dC5wb3AoKTticmVhaztjYXNlIj49IjpjYXNlIj4iOmlmKDEhPT10Lmxlbmd0aClyZXR1cm4gdm9pZCBuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLiIpO2ZvcihpPXRbMF0scj0wO3I8aS5lZGdlcGF0aHMubGVuZ3RoO3IrKylpLmVkZ2VwYXRoc1tyXT1vKGkuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8aS5wYXRocy5sZW5ndGg7cisrKWkucGF0aHNbcl09byhpLnBhdGhzW3JdKX19fSx7Ii4uLy4uL2xpYiI6NzM1fV0sOTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RyYWludF92YWx1ZV9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmFkZE9wYWNpdHk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZihoKCJjYXJwZXQiKSx0LmEmJnQuYil7dmFyIGQscCxtLHYsZztpZighaSh0LGUsaCxmLCJhIiwiYiIpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7aCgidGV4dCIpLGgoImNvbnRvdXJzLnR5cGUiKTt2YXIgeT1lLmNvbnRvdXJzO2lmKCJjb25zdHJhaW50Ij09PXkudHlwZSl7aCgiY29udG91cnMub3BlcmF0aW9uIiksYyhoLHkpLG4uY29lcmNlKHQsZSxsLCJzaG93bGVnZW5kIiwhMCksaCgiY29udG91cnMuY29sb3JpbmciLCI9Ij09PXkub3BlcmF0aW9uPyJsaW5lcyI6ImZpbGwiKSxoKCJjb250b3Vycy5zaG93bGluZXMiLCEwKSwiPSI9PT15Lm9wZXJhdGlvbiYmKHkuY29sb3Jpbmc9ImxpbmVzIikscyh0LGUscixoKTt2YXIgYj1lLmZpbGxjb2xvcj91KGUuZmlsbGNvbG9yLDEpOnI7byh0LGUsaCxmLHtoYXNIb3ZlcjohMSxkZWZhdWx0Q29sb3I6YixkZWZhdWx0V2lkdGg6Mn0pLCI9Ij09PXkub3BlcmF0aW9uJiYoaCgibGluZS5jb2xvciIsciksImZpbGwiPT09eS5jb2xvcmluZyYmKHkuY29sb3Jpbmc9ImxpbmVzIiksImxpbmVzIj09PXkuY29sb3JpbmcmJmRlbGV0ZSBlLmZpbGxjb2xvciksZGVsZXRlIGUuc2hvd3NjYWxlLGRlbGV0ZSBlLmF1dG9jb250b3VyLGRlbGV0ZSBlLmF1dG9jb2xvcnNjYWxlLGRlbGV0ZSBlLmNvbG9yc2NhbGUsZGVsZXRlIGUubmNvbnRvdXJzLGRlbGV0ZSBlLmNvbG9yYmFyLGUubGluZSYmKGRlbGV0ZSBlLmxpbmUuYXV0b2NvbG9yc2NhbGUsZGVsZXRlIGUubGluZS5jb2xvcnNjYWxlLGRlbGV0ZSBlLmxpbmUubWluY29sb3IsZGVsZXRlIGUubGluZS5tYXhjb2xvcil9ZWxzZSBuLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIsITEpLHA9bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5zdGFydCIpLG09bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5lbmQiKSxkPWgoImNvbnRvdXJzLnNpemUiKSxoKCJjb250b3Vycy5jb2xvcmluZyIpLHY9cD09PSExfHxtPT09ITEsZz12P2UuYXV0b2NvbnRvdXI9ITA6aCgiYXV0b2NvbnRvdXIiLCExKSwhZyYmZHx8aCgibmNvbnRvdXJzIiksbyh0LGUsaCxmLHtoYXNIb3ZlcjohMX0pLGRlbGV0ZSBlLnZhbHVlLGRlbGV0ZSBlLm9wZXJhdGlvbn1lbHNlIGUuX2RlZmF1bHRDb2xvcj1yfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NzcsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjk0MiwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjk3MiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwNTMsIi4vYXR0cmlidXRlcyI6OTQzLCIuL2NvbnN0cmFpbnRfdmFsdWVfZGVmYXVsdHMiOjk0OH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT10LnNpemUsYT1bXSxvPXIudHJhY2UuY2FycGV0VHJhY2Uscz10LnN0YXJ0O3M8dC5lbmQraS8xMDtzKz1pKWlmKGEucHVzaCh7bGV2ZWw6cyxjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx4YXhpczpvLmFheGlzLHlheGlzOm8uYmF4aXMseDpyLmEseTpyLmIsejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9KSxhLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBhfX0seyIuLi8uLi9saWIiOjczNX1dLDk1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9jb250b3VyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4uL2NvbnRvdXIvc3R5bGUiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImNvbnRvdXJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiY2FycGV0IiwiY29udG91ciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwiaGFzTGluZXMiLCJjYXJwZXREZXBlbmRlbnQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL2NvbnRvdXIvY29sb3JiYXIiOjkzMCwiLi4vY29udG91ci9zdHlsZSI6OTQxLCIuL2F0dHJpYnV0ZXMiOjk0MywiLi9jYWxjIjo5NDQsIi4vZGVmYXVsdHMiOjk1MCwiLi9wbG90Ijo5NTV9XSw5NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaT10KCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiKSxhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCxjLHUpe2Z1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8RX1mdW5jdGlvbiBoKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPEV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxBfWZ1bmN0aW9uIHAodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8QX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbixhLG8sbT0iIjtmb3IoZih0KSYmIXAodCl8fGgodCkmJiFkKHQpPyhvPXMuYWF4aXMsYT1pKHMsbCxbdFswXSxlWzBdXSwuNSoodFsxXStlWzFdKSkpOihvPXMuYmF4aXMsYT1pKHMsbCwuNSoodFswXStlWzBdKSxbdFsxXSxlWzFdXSkpLHI9MTtyPGEubGVuZ3RoO3IrKylmb3IobSs9by5zbW9vdGhpbmc/IkMiOiJMIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciB2PWFbcl1bbl07bSs9W2MuYzJwKHZbMF0pLHUuYzJwKHZbMV0pXSsiICJ9cmV0dXJuIG19dmFyIHYsZyx5LGIseCxfLHcsTT0iIixUPWUuZWRnZXBhdGhzLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSksaz0hMCxBPTFlLTQqTWF0aC5hYnMoclswXVswXS1yWzJdWzBdKSxFPTFlLTQqTWF0aC5hYnMoclswXVsxXS1yWzJdWzFdKTtmb3Iodj0wLGc9bnVsbDtULmxlbmd0aDspe3ZhciBTPWUuZWRnZXBhdGhzW3ZdWzBdO2ZvcihnJiYoTSs9bShnLFMpKSx3PW4uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1t2XS5tYXAobyksZS5zbW9vdGhpbmcpLE0rPWs/dzp3LnJlcGxhY2UoL15NLywiTCIpLFQuc3BsaWNlKFQuaW5kZXhPZih2KSwxKSxnPWUuZWRnZXBhdGhzW3ZdW2UuZWRnZXBhdGhzW3ZdLmxlbmd0aC0xXSx4PS0xLGI9MDtiPDQ7YisrKXtpZighZyl7YS5sb2coIk1pc3NpbmcgZW5kPyIsdixlKTticmVha31mb3IoZihnKSYmIXAoZyk/eT1yWzFdOmQoZyk/eT1yWzBdOmgoZyk/eT1yWzNdOnAoZykmJih5PXJbMl0pLF89MDtfPGUuZWRnZXBhdGhzLmxlbmd0aDtfKyspe3ZhciBMPWUuZWRnZXBhdGhzW19dWzBdO01hdGguYWJzKGdbMF0teVswXSk8QT9NYXRoLmFicyhnWzBdLUxbMF0pPEEmJihMWzFdLWdbMV0pKih5WzFdLUxbMV0pPj0wJiYoeT1MLHg9Xyk6TWF0aC5hYnMoZ1sxXS15WzFdKTxFP01hdGguYWJzKGdbMV0tTFsxXSk8RSYmKExbMF0tZ1swXSkqKHlbMF0tTFswXSk+PTAmJih5PUwseD1fKTphLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixnLHksTCl9aWYoeD49MClicmVhaztNKz1tKGcseSksZz15fWlmKHg9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe2EubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfXY9eCxrPVQuaW5kZXhPZih2KT09PS0xLGsmJih2PVRbMF0sTSs9bShnLHkpKyJaIixnPW51bGwpfWZvcih2PTA7djxlLnBhdGhzLmxlbmd0aDt2KyspTSs9bi5zbW9vdGhjbG9zZWQoZS5wYXRoc1t2XS5tYXAobyksZS5zbW9vdGhpbmcpO3JldHVybiBNfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vLi4vbGliIjo3MzUsIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSI6ODk0fV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3IoYT10W3JdLG89YS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX19LHt9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT1vLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW18uYzJwKGVbMF0pLEEuYzJwKGVbMV0pXX12YXIgYT1yWzBdLnRyYWNlLG89YS5jYXJwZXRUcmFjZT1UKHQsYSkscz10LmNhbGNkYXRhW28uaW5kZXhdWzBdO2lmKG8udmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09by52aXNpYmxlKXt2YXIgbD1yWzBdLmEsZj1yWzBdLmIsbT1hLmNvbnRvdXJzLGI9YS51aWQsXz1lLnhheGlzLEE9ZS55YXhpcyxFPXQuX2Z1bGxMYXlvdXQsUz0iY29udG91ciIrYixMPXcobSxlLHJbMF0pLEM9ImNvbnN0cmFpbnQiPT09YS5jb250b3Vycy50eXBlO2lmKGEudmlzaWJsZSE9PSEwKXJldHVybiB2b2lkIEUuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrYikucmVtb3ZlKCk7dmFyIEk9W1tsWzBdLGZbZi5sZW5ndGgtMV1dLFtsW2wubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV1dLFtsW2wubGVuZ3RoLTFdLGZbMF1dLFtsWzBdLGZbMF1dXTt2KEwpO3ZhciBEPTFlLTgqKGxbbC5sZW5ndGgtMV0tbFswXSksUD0xZS04KihmW2YubGVuZ3RoLTFdLWZbMF0pO2coTCxELFApLCJjb25zdHJhaW50Ij09PWEuY29udG91cnMudHlwZSYmKHgoTCxhLmNvbnRvdXJzLm9wZXJhdGlvbiksayhMLGEuY29udG91cnMub3BlcmF0aW9uLEksYSkpLE0oTCxuKTt2YXIgeixPLFIsRixqPXkubWFrZUNvbnRvdXJHcm91cChlLHIsUyksTj1bXTtmb3IoRj1zLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtGPj0wO0YtLSl6PXMuY2xpcHNlZ21lbnRzW0ZdLE89aChbXSx6LngsXy5jMnApLFI9aChbXSx6LnksQS5jMnApLE8ucmV2ZXJzZSgpLFIucmV2ZXJzZSgpLE4ucHVzaChkKE8sUix6LmJpY3ViaWMpKTt2YXIgQj0iTSIrTi5qb2luKCJMIikrIloiO2MoaixzLmNsaXBzZWdtZW50cyxfLEEsQyxtLmNvbG9yaW5nKSx1KGEsaixfLEEsTCxJLG4sbyxzLG0uY29sb3JpbmcsQiksaShqLEwsdCxyWzBdLG0sZSxvKSxwLnNldENsaXBVcmwoaixvLl9jbGlwUGF0aElkKX19ZnVuY3Rpb24gaSh0LGUscixuLGksbyxzKXt2YXIgbD10LnNlbGVjdEFsbCgiZy5jb250b3VybGluZXMiKS5kYXRhKFswXSk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsaW5lcyIsITApO3ZhciBjPWkuc2hvd2xpbmVzIT09ITEsdT1pLnNob3dsYWJlbHMsaD1jJiZ1LGQ9eS5jcmVhdGVMaW5lcyhsLGN8fHUsZSksdj15LmNyZWF0ZUxpbmVDbGlwKGwsaCxyLl9mdWxsTGF5b3V0Ll9kZWZzLG4udHJhY2UudWlkKSxnPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKHU/WzBdOltdKTtpZihnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLHUpe3ZhciB4PW8ueGF4aXMsXz1vLnlheGlzLHc9eC5fbGVuZ3RoLE09Xy5fbGVuZ3RoLFQ9W1tbMCwwXSxbdywwXSxbdyxNXSxbMCxNXV1dLGs9W107bS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgQT15LmxhYmVsRm9ybWF0dGVyKGksbi50LmNiLHIuX2Z1bGxMYXlvdXQpLEU9cC50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChwLmZvbnQsaS5sYWJlbGZvbnQpLFM9e2xlZnQ6MCxyaWdodDp3LGNlbnRlcjp3LzIsdG9wOjAsYm90dG9tOk0sbWlkZGxlOk0vMn0sTD1NYXRoLnNxcnQodyp3K00qTSksQz1iLkxBQkVMRElTVEFOQ0UqTC9NYXRoLm1heCgxLGUubGVuZ3RoL2IuTEFCRUxJTkNSRUFTRSk7ZC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXkuY2FsY1RleHRPcHRzKHQubGV2ZWwsQSxFLHIpO2Yuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPW0uZ2V0VmlzaWJsZVNlZ21lbnQobixTLGUuaGVpZ2h0LzIpO2lmKGkmJihhKG4scix0LGkscyxlLmhlaWdodCksIShpLmxlbjwoZS53aWR0aCtlLmhlaWdodCkqYi5MQUJFTE1JTikpKWZvcih2YXIgbz1NYXRoLm1pbihNYXRoLmNlaWwoaS5sZW4vQyksYi5MQUJFTE1BWCksbD0wO2w8bztsKyspe3ZhciBjPXkuZmluZEJlc3RUZXh0TG9jYXRpb24obixpLGUsayxTKTtpZighYylicmVhazt5LmFkZExhYmVsRGF0YShjLGUsayxUKX19KX0pLEUucmVtb3ZlKCkseS5kcmF3TGFiZWxzKGcsayxyLHYsaD9UOm51bGwpfXUmJiFjJiZkLnJlbW92ZSgpfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Z1bmN0aW9uIGModCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0taCk8LjF8fE1hdGguYWJzKHRbMF0tZCk8LjEpJiYocj1zKGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqbChlLHIpLzIpKSwoTWF0aC5hYnModFsxXS1wKTwuMXx8TWF0aC5hYnModFsxXS1tKTwuMSkmJihyPXMoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpsKGUscikvMikpLG59Zm9yKHZhciB1LGY9MDtmPHIucGVkZ2VwYXRocy5sZW5ndGg7ZisrKWU9PT1yLnBlZGdlcGF0aHNbZl0mJih1PXIuZWRnZXBhdGhzW2ZdKTtpZih1KXt2YXIgaD1pLmFbMF0sZD1pLmFbaS5hLmxlbmd0aC0xXSxwPWkuYlswXSxtPWkuYltpLmIubGVuZ3RoLTFdLHY9byh0LDAsMSksZz1vKHQsbi50b3RhbCxuLnRvdGFsLTEpLHk9Yyh1WzBdLHYpLGI9bi50b3RhbC1jKHVbdS5sZW5ndGgtMV0sZyk7bi5taW48eSYmKG4ubWluPXkpLG4ubWF4PmImJihuLm1heD1iKSxuLmxlbj1uLm1heC1uLm1pbn19ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49dC5nZXRQb2ludEF0TGVuZ3RoKGUpLGk9dC5nZXRQb2ludEF0TGVuZ3RoKHIpLGE9aS54LW4ueCxvPWkueS1uLnkscz1NYXRoLnNxcnQoYSphK28qbyk7cmV0dXJuW2EvcyxvL3NdfWZ1bmN0aW9uIHModCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pO3JldHVyblt0WzBdL2UsdFsxXS9lXX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9TWF0aC5hYnModFswXSplWzBdK3RbMV0qZVsxXSk7cmV0dXJuIE1hdGguc3FydCgxLXIqcikvcn1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1PXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJiZyIpLmRhdGEoWzBdKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmJnIiwhMCk7dmFyIGY9dS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWF8fGk/W106WzBdKTtmLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZi5leGl0KCkucmVtb3ZlKCk7dmFyIHA9W107Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKylvPWVbY10scz1oKFtdLG8ueCxyLmMycCksbD1oKFtdLG8ueSxuLmMycCkscC5wdXNoKGQocyxsLG8uYmljdWJpYykpO2YuYXR0cigiZCIsIk0iK3Auam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwiKS5kYXRhKFswXSk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJmaWxsIiwhMCk7dmFyIGQ9aC5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIj09PWM/aTpbXSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLGQuZXhpdCgpLnJlbW92ZSgpLGQuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1fKHQsZSxhLG8scyxsLHIsbik7ZS5wcmVmaXhCb3VuZGFyeSYmKGk9dStpKSxpP2Yuc2VsZWN0KHRoaXMpLmF0dHIoImQiLGkpLnN0eWxlKCJzdHJva2UiLCJub25lIik6Zi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX12YXIgZj10KCJkMyIpLGg9dCgiLi4vY2FycGV0L21hcF8xZF9hcnJheSIpLGQ9dCgiLi4vY2FycGV0L21ha2VwYXRoIikscD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uLy4uL2xpYiIpLHY9dCgiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyIpLGc9dCgiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyIpLHk9dCgiLi4vY29udG91ci9wbG90IiksYj10KCIuLi9jb250b3VyL2NvbnN0YW50cyIpLHg9dCgiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIiksXz10KCIuL2pvaW5fYWxsX3BhdGhzIiksdz10KCIuL2VtcHR5X3BhdGhpbmZvIiksTT10KCIuL21hcF9wYXRoaW5mbyIpLFQ9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpLGs9dCgiLi9jbG9zZV9ib3VuZGFyaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyluKHQsZSxyW2ldKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2xpYiI6NzM1LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5MTEsIi4uL2NhcnBldC9tYWtlcGF0aCI6OTEyLCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo5MTMsIi4uL2NvbnRvdXIvY29uc3RhbnRzIjo5MzEsIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHMiOjkzNSwiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyI6OTM5LCIuLi9jb250b3VyL3Bsb3QiOjk0MCwiLi9jbG9zZV9ib3VuZGFyaWVzIjo5NDUsIi4vY29udmVydF90b19jb25zdHJhaW50cyI6OTQ5LCIuL2VtcHR5X3BhdGhpbmZvIjo5NTEsIi4vam9pbl9hbGxfcGF0aHMiOjk1MywiLi9tYXBfcGF0aGluZm8iOjk1NCxkMzoxMjF9XSw5NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9byh7fSx7ejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Om8oe30sbi54LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJhcnJheSJ9fSkseDA6byh7fSxuLngwLHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLGR4Om8oe30sbi5keCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5Om8oe30sbi55LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJhcnJheSJ9fSkseTA6byh7fSxuLnkwLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLGR5Om8oe30sbi5keSx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRyYW5zcG9zZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHh0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwiYmVzdCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx6aG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSJ9fSxpLHthdXRvY29sb3JzY2FsZTpvKHt9LGkuYXV0b2NvbG9yc2NhbGUse2RmbHQ6ITF9KX0se2NvbG9yYmFyOmF9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYxMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYxNiwiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNDV9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbD10KCIuL2hhc19jb2x1bW5zIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9tYXhfcm93X2xlbmd0aCIpLGY9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGg9dCgiLi9pbnRlcnAyZCIpLGQ9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7TD1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxpLm5vdGlmaWVyKCJjYW5ub3QgZmFzdC16c21vb3RoOiAiK3QpfXZhciBtLHYsZyx5LGIseCxfLHcsTSxUPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxrPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxBPW4udHJhY2VJcyhlLCJjb250b3VyIiksRT1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksUz1uLnRyYWNlSXMoZSwiZ2wyZCIpLEw9QT8iYmVzdCI6ZS56c21vb3RoO2lmKFQuX21pbkR0aWNrPTAsay5fbWluRHRpY2s9MCxFPyhNPW8odCxlKSxtPU0ueCx2PU0ueDAsZz1NLmR4LHk9TS55LGI9TS55MCx4PU0uZHksXz1NLnopOihsKGUpPyhjKGUsVCxrLCJ4IiwieSIsWyJ6Il0pLG09ZS54LHk9ZS55KToobT1lLng/VC5tYWtlQ2FsY2RhdGEoZSwieCIpOltdLHk9ZS55P2subWFrZUNhbGNkYXRhKGUsInkiKTpbXSksdj1lLngwfHwwLGc9ZS5keHx8MSxiPWUueTB8fDAseD1lLmR5fHwxLF89ZihlLnosZS50cmFuc3Bvc2UpLChBfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWQoXyksZS5faW50ZXJwej1oKF8sZS5fZW1wdHlwb2ludHMsZS5faW50ZXJweikpKSwiZmFzdCI9PT1MKWlmKCJsb2ciPT09VC50eXBlfHwibG9nIj09PWsudHlwZSlyKCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2UgaWYoIUUpe2lmKG0ubGVuZ3RoKXt2YXIgQz0obVttLmxlbmd0aC0xXS1tWzBdKS8obS5sZW5ndGgtMSksST1NYXRoLmFicyhDLzEwMCk7Zm9yKHc9MDt3PG0ubGVuZ3RoLTE7dysrKWlmKE1hdGguYWJzKG1bdysxXS1tW3ddLUMpPkkpe3IoInggc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX1pZih5Lmxlbmd0aCYmImZhc3QiPT09TCl7dmFyIEQ9KHlbeS5sZW5ndGgtMV0teVswXSkvKHkubGVuZ3RoLTEpLFA9TWF0aC5hYnMoRC8xMDApO2Zvcih3PTA7dzx5Lmxlbmd0aC0xO3crKylpZihNYXRoLmFicyh5W3crMV0teVt3XS1EKT5QKXtyKCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319fXZhciB6PXUoXyksTz0ic2NhbGVkIj09PWUueHR5cGU/IiI6bSxSPXAoZSxPLHYsZyx6LFQpLEY9InNjYWxlZCI9PT1lLnl0eXBlPyIiOnksaj1wKGUsRixiLHgsXy5sZW5ndGgsayk7U3x8KGEuZXhwYW5kKFQsUiksYS5leHBhbmQoayxqKSk7dmFyIE49e3g6Uix5OmosejpfLHRleHQ6ZS50ZXh0fTtpZihFJiYoTi54UmFuZ2VzPU0ueFJhbmdlcyxOLnlSYW5nZXM9TS55UmFuZ2VzLE4ucHRzPU0ucHRzKSxzKGUsXywiIiwieiIpLEEmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBCPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtOLnhmaWxsPXAoQixPLHYsZyx6LFQpLE4ueWZpbGw9cChCLEYsYix4LF8ubGVuZ3RoLGspfXJldHVybltOXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYxNywiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4uL2hpc3RvZ3JhbTJkL2NhbGMiOjk4OSwiLi9jbGVhbl8yZF9hcnJheSI6OTU4LCIuL2NvbnZlcnRfY29sdW1uX3h5eiI6OTYwLCIuL2ZpbmRfZW1wdGllcyI6OTYyLCIuL2hhc19jb2x1bW5zIjo5NjMsIi4vaW50ZXJwMmQiOjk2NiwiLi9tYWtlX2JvdW5kX2FycmF5Ijo5NjcsIi4vbWF4X3Jvd19sZW5ndGgiOjk2OH1dLDk1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtpZihlKXtmb3Iocj0wLHM9MDtzPHQubGVuZ3RoO3MrKylyPU1hdGgubWF4KHIsdFtzXS5sZW5ndGgpO2lmKDA9PT1yKXJldHVybiExO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXVtlXX19ZWxzZSByPXQubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdW3JdfTt2YXIgYz1uZXcgQXJyYXkocik7Zm9yKHM9MDtzPHI7cysrKWZvcihpPWEodCxzKSxjW3NdPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyljW3NdW2xdPWZ1bmN0aW9uKHQpe2lmKG4odCkpcmV0dXJuK3R9KG8odCxzLGwpKTtyZXR1cm4gY319LHsiZmFzdC1pc251bWVyaWMiOjEzMX1dLDk1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGw9ImNiIityLnVpZCxjPXIuem1pbix1PXIuem1heDtpZihuKGMpfHwoYz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLnopKSxuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLnopKSx0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitsKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsbCk7dmFyIGY9ZVswXS50LmNiPXModCxsKSxoPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHIuY29sb3JzY2FsZSxjLHUpLHtub051bWVyaWNDaGVjazohMH0pO2YuZmlsbGNvbG9yKGgpLmZpbGxsZXZlbHMoe3N0YXJ0OmMsZW5kOnUsc2l6ZToodS1jKS8yNTR9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjE0LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNSwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsImZhc3QtaXNudW1lcmljIjoxMzF9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7YT1hfHwieCIsbz1vfHwieSIscz1zfHxbInoiXTt2YXIgbCxjLHUsZixoLGQ9dFthXS5zbGljZSgpLHA9dFtvXS5zbGljZSgpLG09dC50ZXh0LHY9TWF0aC5taW4oZC5sZW5ndGgscC5sZW5ndGgpLGc9dm9pZCAwIT09bSYmIUFycmF5LmlzQXJyYXkobVswXSkseT10W2ErImNhbGVuZGFyIl0sYj10W28rImNhbGVuZGFyIl07Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKykodT10W3NbbF1dKSYmKHY9TWF0aC5taW4odix1Lmxlbmd0aCkpO2Zvcih2PGQubGVuZ3RoJiYoZD1kLnNsaWNlKDAsdikpLHY8cC5sZW5ndGgmJihwPXAuc2xpY2UoMCx2KSksbD0wO2w8djtsKyspZFtsXT1lLmQyYyhkW2xdLDAseSkscFtsXT1yLmQyYyhwW2xdLDAsYik7dmFyIHg9bi5kaXN0aW5jdFZhbHMoZCksXz14LnZhbHMsdz1uLmRpc3RpbmN0VmFscyhwKSxNPXcudmFscyxUPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspVFtsXT1uLmluaXQyZEFycmF5KE0ubGVuZ3RoLF8ubGVuZ3RoKTt2YXIgayxBLEU7Zm9yKGcmJihFPW4uaW5pdDJkQXJyYXkoTS5sZW5ndGgsXy5sZW5ndGgpKSxsPTA7bDx2O2wrKylpZihkW2xdIT09aSYmcFtsXSE9PWkpe2ZvcihrPW4uZmluZEJpbihkW2xdK3gubWluRGlmZi8yLF8pLEE9bi5maW5kQmluKHBbbF0rdy5taW5EaWZmLzIsTSksYz0wO2M8cy5sZW5ndGg7YysrKWg9c1tjXSx1PXRbaF0sZj1UW2NdLGZbQV1ba109dVtsXTtnJiYoRVtBXVtrXT1tW2xdKX1mb3IodFthXT1fLHRbb109TSxjPTA7YzxzLmxlbmd0aDtjKyspdFtzW2NdXT1UW2NdO2cmJih0LnRleHQ9RSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vLi4vbGliIjo3MzV9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hhc19jb2x1bW5zIiksYT10KCIuL3h5el9kZWZhdWx0cyIpLG89dCgiLi9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKCFhKHQsZSx1LGMpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgidGV4dCIpLG8odCxlLHUsYyksdSgiY29ubmVjdGdhcHMiLGkoZSkmJmUuenNtb290aCE9PSExKSxzKHQsZSxjLHUse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyMCwiLi4vLi4vbGliIjo3MzUsIi4vYXR0cmlidXRlcyI6OTU2LCIuL2hhc19jb2x1bW5zIjo5NjMsIi4vc3R5bGVfZGVmYXVsdHMiOjk3MSwiLi94eXpfZGVmYXVsdHMiOjk3Mn1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21heF9yb3dfbGVuZ3RoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxmPXt9LGg9W10sZD10WzBdLHA9W10sbT1bMCwwLDBdLHY9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPXAscD1kLGQ9dFtyKzFdfHxbXSxpPTA7aTx2O2krKyl2b2lkIDA9PT1wW2ldJiYocz0odm9pZCAwIT09cFtpLTFdPzE6MCkrKHZvaWQgMCE9PXBbaSsxXT8xOjApKyh2b2lkIDAhPT1lW2ldPzE6MCkrKHZvaWQgMCE9PWRbaV0/MTowKSxzPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09cC5sZW5ndGgtMSYmcysrLHM8NCYmKGZbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6aC5wdXNoKFtyLGldKSk7Zm9yKDtoLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1oLmxlbmd0aC0xO28+PTA7by0tKWE9aFtvXSxyPWFbMF0saT1hWzFdLChzPSgoZltbci0xLGldXXx8bSlbMl0rKGZbW3IrMSxpXV18fG0pWzJdKyhmW1tyLGktMV1dfHxtKVsyXSsoZltbcixpKzFdXXx8bSlbMl0pLzIwKSYmKGxbYV09W3IsaSxzXSxoLnNwbGljZShvLDEpLGM9ITApO2lmKCFjKXRocm93ImZpbmRFbXB0aWVzIGl0ZXJhdGVkIHdpdGggbm8gbmV3IG5laWdoYm9ycyI7Zm9yKGEgaW4gbClmW2FdPWxbYV0sdS5wdXNoKGxbYV0pfXJldHVybiB1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSl9fSx7Ii4vbWF4X3Jvd19sZW5ndGgiOjk2OH1dLDk2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodC56WzBdKX19LHt9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89bi5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe2lmKCEodC5kaXN0YW5jZTxvKSl7dmFyIHUsZixoLGQscD10LmNkWzBdLG09cC50cmFjZSx2PXQueGEsZz10LnlhLHk9cC54LGI9cC55LHg9cC56LF89cC56bWFzayx3PVttLnptaW4sbS56bWF4XSxNPW0uemhvdmVyZm9ybWF0LFQ9bS5fc2VwYXJhdG9ycyxrPXksQT1iO2lmKHQuaW5kZXghPT0hMSl7dHJ5e2g9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxkPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoaDwwfHxoPj14WzBdLmxlbmd0aHx8ZDwwfHxkPngubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS15WzBdLGUteVt5Lmxlbmd0aC0xXSk+b3x8bi5pbmJveChyLWJbMF0sci1iW2IubGVuZ3RoLTFdKT5vKXJldHVybjtpZihjKXt2YXIgRTtmb3Ioaz1bMip5WzBdLXlbMV1dLEU9MTtFPHkubGVuZ3RoO0UrKylrLnB1c2goKHlbRV0reVtFLTFdKS8yKTtmb3Ioay5wdXNoKFsyKnlbeS5sZW5ndGgtMV0teVt5Lmxlbmd0aC0yXV0pLEE9WzIqYlswXS1iWzFdXSxFPTE7RTxiLmxlbmd0aDtFKyspQS5wdXNoKChiW0VdK2JbRS0xXSkvMik7QS5wdXNoKFsyKmJbYi5sZW5ndGgtMV0tYltiLmxlbmd0aC0yXV0pfWg9TWF0aC5tYXgoMCxNYXRoLm1pbihrLmxlbmd0aC0yLGkuZmluZEJpbihlLGspKSksZD1NYXRoLm1heCgwLE1hdGgubWluKEEubGVuZ3RoLTIsaS5maW5kQmluKHIsQSkpKX12YXIgUz12LmMycCh5W2hdKSxMPXYuYzJwKHlbaCsxXSksQz1nLmMycChiW2RdKSxJPWcuYzJwKGJbZCsxXSk7Yz8oTD1TLHU9eVtoXSxJPUMsZj1iW2RdKToodT0oeVtoXSt5W2grMV0pLzIsZj0oYltkXStiW2QrMV0pLzIsbS56c21vb3RoJiYoUz1MPShTK0wpLzIsQz1JPShDK0kpLzIpKTt2YXIgRD14W2RdW2hdO18mJiFfW2RdW2hdJiYoRD12b2lkIDApO3ZhciBQO0FycmF5LmlzQXJyYXkocC50ZXh0KSYmQXJyYXkuaXNBcnJheShwLnRleHRbZF0pJiYoUD1wLnRleHRbZF1baF0pO3ZhciB6LE89e3R5cGU6ImxpbmVhciIscmFuZ2U6dyxob3ZlcmZvcm1hdDpNLF9zZXBhcmF0b3JzOlR9O3JldHVybiB6PWEudGlja1RleHQoTyxELCJob3ZlciIpLnRleHQsW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbZCxoXSxkaXN0YW5jZTpvKzEwLHgwOlMseDE6TCx5MDpDLHkxOkkseExhYmVsVmFsOnUseUxhYmVsVmFsOmYsekxhYmVsVmFsOkQsekxhYmVsOnosdGV4dDpQfSldfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjUyLCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OX1dLDk2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImhlYXRtYXAiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4vYXR0cmlidXRlcyI6OTU2LCIuL2NhbGMiOjk1NywiLi9jb2xvcmJhciI6OTU5LCIuL2RlZmF1bHRzIjo5NjEsIi4vaG92ZXIiOjk2NCwiLi9wbG90Ijo5NjksIi4vc3R5bGUiOjk3MH1dLDk2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYSxzLGwsYyx1LGYsaCxkLHAsbSx2LGc9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3Iobj1lW3NdLGk9blswXSxhPW5bMV0scD10W2ldW2FdLGQ9MCxoPTAsbD0wO2w8NDtsKyspYz1vW2xdLCh1PXRbaStjWzBdXSkmJnZvaWQgMCE9PShmPXVbYStjWzFdXSkmJigwPT09ZD9tPXY9ZjoobT1NYXRoLm1pbihtLGYpLHY9TWF0aC5tYXgodixmKSksaCsrLGQrPWYpO2lmKDA9PT1oKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbaV1bYV09ZC9oLHZvaWQgMD09PXA/aDw0JiYoZz0xKToodFtpXVthXT0oMStyKSp0W2ldW2FdLXIqcCx2Pm0mJihnPU1hdGgubWF4KGcsTWF0aC5hYnModFtpXVthXS1wKS8odi1tKSkpKX1yZXR1cm4gZ312YXIgYT10KCIuLi8uLi9saWIiKSxvPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbD0xO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKG89MDtvPGUubGVuZ3RoO28rKylzPWVbb10sdFtzWzBdXVtzWzFdXT1yW3NbMF1dW3NbMV1dO2Vsc2UgaSh0LGUpO2ZvcihvPTA7bzxlLmxlbmd0aCYmIShlW29dWzJdPDQpO28rKyk7Zm9yKGU9ZS5zbGljZShvKSxvPTA7bzwxMDAmJmw+LjAxO28rKylsPWkodCxlLG4obCkpO3JldHVybiBsPi4wMSYmYS5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixsKSx0fX0seyIuLi8uLi9saWIiOjczNX1dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHMsbCxjLHU9W10sZj1uLnRyYWNlSXModCwiY29udG91ciIpLGg9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4xJiYhaCYmImNhdGVnb3J5IiE9PW8udHlwZSl7dmFyIHA9ZS5sZW5ndGg7aWYoIShwPD1hKSlyZXR1cm4gZj9lLnNsaWNlKDAsYSk6ZS5zbGljZSgwLGErMSk7aWYoZnx8ZCl1PWUuc2xpY2UoMCxhKTtlbHNlIGlmKDE9PT1hKXU9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IodT1bMS41KmVbMF0tLjUqZVsxXV0sYz0xO2M8cDtjKyspdS5wdXNoKC41KihlW2MtMV0rZVtjXSkpO3UucHVzaCgxLjUqZVtwLTFdLS41KmVbcC0yXSl9aWYocDxhKXt2YXIgbT11W3UubGVuZ3RoLTFdLHY9bS11W3UubGVuZ3RoLTJdO2ZvcihjPXA7YzxhO2MrKyltKz12LHUucHVzaChtKX19ZWxzZXtsPWl8fDE7dmFyIGc9dFtvLl9pZC5jaGFyQXQoMCkrImNhbGVuZGFyIl07Zm9yKHM9aHx8ImNhdGVnb3J5Ij09PW8udHlwZT9vLnIyYyhyLDAsZyl8fDA6QXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoP2VbMF06dm9pZCAwPT09cj8wOm8uZDJjKHIsMCxnKSxjPWZ8fGQ/MDotLjU7YzxhO2MrKyl1LnB1c2gocytsKmMpfXJldHVybiB1fX0seyIuLi8uLi9yZWdpc3RyeSI6ODUzfV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLHRbcl0ubGVuZ3RoKTtyZXR1cm4gZX19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksYz1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmYz97YmluMDpsLGZyYWM6YyxiaW4xOk1hdGgucm91bmQobCtjLyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiB1KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9cSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSwKclsyXT1NYXRoLnJvdW5kKHJbMl0pLHJ0Kz1lLG50Kz1yWzBdKmUsaXQrPXJbMV0qZSxhdCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIGYodCxlLHIpe3RbZV09clswXSx0W2UrMV09clsxXSx0W2UrMl09clsyXSx0W2UrM109TWF0aC5yb3VuZCgyNTUqclszXSl9dmFyIGg9clswXS50cmFjZSxkPWgudWlkLHA9ZS54YXhpcyxtPWUueWF4aXMsdj10Ll9mdWxsTGF5b3V0LGc9ImhtIitkO2lmKHYuX3BhcGVyLnNlbGVjdEFsbCgiLmNvbnRvdXIiK2QpLnJlbW92ZSgpLHYuX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0QWxsKCIuY29udG91ciIrZCkucmVtb3ZlKCksaC52aXNpYmxlIT09ITApcmV0dXJuIHYuX3BhcGVyLnNlbGVjdEFsbCgiLiIrZykucmVtb3ZlKCksdm9pZCB2Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuY2IiK2QpLnJlbW92ZSgpO3ZhciB5LGIseCxfLHcsTSxUPXJbMF0ueixrPXJbMF0ueCxBPXJbMF0ueSxFPWEudHJhY2VJcyhoLCJjb250b3VyIiksUz1FPyJiZXN0IjpoLnpzbW9vdGgsTD1ULmxlbmd0aCxDPWMoVCksST0hMSxEPSExO2ZvcihNPTA7dm9pZCAwPT09eSYmTTxrLmxlbmd0aC0xOyl5PXAuYzJwKGtbTV0pLE0rKztmb3IoTT1rLmxlbmd0aC0xO3ZvaWQgMD09PWImJk0+MDspYj1wLmMycChrW01dKSxNLS07Zm9yKGI8eSYmKHg9YixiPXkseT14LEk9ITApLE09MDt2b2lkIDA9PT1fJiZNPEEubGVuZ3RoLTE7KV89bS5jMnAoQVtNXSksTSsrO2ZvcihNPUEubGVuZ3RoLTE7dm9pZCAwPT09dyYmTT4wOyl3PW0uYzJwKEFbTV0pLE0tLTtpZih3PF8mJih4PV8sXz13LHc9eCxEPSEwKSxFJiYoaz1yWzBdLnhmaWxsLEE9clswXS55ZmlsbCksImZhc3QiIT09Uyl7dmFyIFA9ImJlc3QiPT09Uz8wOi41O3k9TWF0aC5tYXgoLVAqcC5fbGVuZ3RoLHkpLGI9TWF0aC5taW4oKDErUCkqcC5fbGVuZ3RoLGIpLF89TWF0aC5tYXgoLVAqbS5fbGVuZ3RoLF8pLHc9TWF0aC5taW4oKDErUCkqbS5fbGVuZ3RoLHcpfXZhciB6PU1hdGgucm91bmQoYi15KSxPPU1hdGgucm91bmQody1fKSxSPXo8PTB8fE88PTAsRj1lLnBsb3Quc2VsZWN0KCIuaW1hZ2VsYXllciIpLnNlbGVjdEFsbCgiZy5obS4iK2cpLmRhdGEoUj9bXTpbMF0pO2lmKEYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJobSIsITApLmNsYXNzZWQoZywhMCksRi5leGl0KCkucmVtb3ZlKCksIVIpe3ZhciBqLE47ImZhc3QiPT09Uz8oaj1DLE49TCk6KGo9eixOPU8pO3ZhciBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO0Iud2lkdGg9aixCLmhlaWdodD1OO3ZhciBVLFYsSD1CLmdldENvbnRleHQoIjJkIikscT1zLm1ha2VDb2xvclNjYWxlRnVuYyhzLmV4dHJhY3RTY2FsZShoLmNvbG9yc2NhbGUsaC56bWluLGguem1heCkse25vTnVtZXJpY0NoZWNrOiEwLHJldHVybkFycmF5OiEwfSk7ImZhc3QiPT09Uz8oVT1JP2Z1bmN0aW9uKHQpe3JldHVybiBDLTEtdH06by5pZGVudGl0eSxWPUQ/ZnVuY3Rpb24odCl7cmV0dXJuIEwtMS10fTpvLmlkZW50aXR5KTooVT1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS15KSwwLHopfSxWPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKG0uYzJwKEFbdF0pLV8pLDAsTyl9KTt2YXIgRyxZLFgsVyxaLEosSyxRPVYoMCksJD1bUSxRXSx0dD1JPzA6MSxldD1EPzA6MSxydD0wLG50PTAsaXQ9MCxhdD0wO2lmKFMpe3ZhciBvdCxzdD0wO3RyeXtvdD1uZXcgVWludDhBcnJheSh6Kk8qNCl9Y2F0Y2godCl7b3Q9bmV3IEFycmF5KHoqTyo0KX1pZigiYmVzdCI9PT1TKXt2YXIgbHQsY3QsdXQsZnQ9bmV3IEFycmF5KGsubGVuZ3RoKSxodD1uZXcgQXJyYXkoQS5sZW5ndGgpLGR0PW5ldyBBcnJheSh6KTtmb3IoTT0wO008ay5sZW5ndGg7TSsrKWZ0W01dPU1hdGgucm91bmQocC5jMnAoa1tNXSkteSk7Zm9yKE09MDtNPEEubGVuZ3RoO00rKylodFtNXT1NYXRoLnJvdW5kKG0uYzJwKEFbTV0pLV8pO2ZvcihNPTA7TTx6O00rKylkdFtNXT1uKE0sZnQpO2ZvcihYPTA7WDxPO1grKylmb3IobHQ9bihYLGh0KSxjdD1UW2x0LmJpbjBdLHV0PVRbbHQuYmluMV0sTT0wO008ejtNKyssc3QrPTQpSz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gdSh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsZj1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyx1KGkrci5mcmFjKmMrbi5mcmFjKihmK3IuZnJhYyphKSl9KGN0LHV0LGR0W01dLGx0KSxmKG90LHN0LEspfWVsc2UgZm9yKFg9MDtYPEw7WCsrKWZvcihKPVRbWF0sJD1WKFgpLE09MDtNPHo7TSsrKUs9dShKW01dLDEpLHN0PTQqKCQqeitVKE0pKSxmKG90LHN0LEspO3ZhciBwdD1ILmNyZWF0ZUltYWdlRGF0YSh6LE8pO3RyeXtwdC5kYXRhLnNldChvdCl9Y2F0Y2godCl7dmFyIG10PXB0LmRhdGEsdnQ9bXQubGVuZ3RoO2ZvcihYPTA7WDx2dDtYKyspbXRbWF09b3RbWF19SC5wdXRJbWFnZURhdGEocHQsMCwwKX1lbHNlIGZvcihYPTA7WDxMO1grKylpZihKPVRbWF0sJC5yZXZlcnNlKCksJFtldF09VihYKzEpLCRbMF0hPT0kWzFdJiZ2b2lkIDAhPT0kWzBdJiZ2b2lkIDAhPT0kWzFdKWZvcihXPVUoMCksWT1bVyxXXSxNPTA7TTxDO00rKylZLnJldmVyc2UoKSxZW3R0XT1VKE0rMSksWVswXSE9PVlbMV0mJnZvaWQgMCE9PVlbMF0mJnZvaWQgMCE9PVlbMV0mJihaPUpbTV0sSz11KFosKFlbMV0tWVswXSkqKCRbMV0tJFswXSkpLEguZmlsbFN0eWxlPSJyZ2JhKCIrSy5qb2luKCIsIikrIikiLEc9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXt4MDplLHgxOnIseTA6bix5MTppfSx1PTIqdC54Z2FwLzMsZj0yKnQueWdhcC8zLGg9dC54Z2FwLzMsZD10LnlnYXAvMztyZXR1cm4gcz09PWwtMSYmKGMueTE9aS1mKSxhPT09by0xJiYoYy54MD1lK3UpLDA9PT1zJiYoYy55MD1uK2YpLDA9PT1hJiYoYy54MT1yLXUpLGE+MCYmYTxvLTEmJihjLngwPWUraCxjLngxPXItaCkscz4wJiZzPGwtMSYmKGMueTA9bitkLGMueTE9aS1kKSxjfShoLFlbMF0sWVsxXSwkWzBdLCRbMV0sTSxDLFgsTCksSC5maWxsUmVjdChHLngwLEcueTAsRy54MS1HLngwLEcueTEtRy55MCkpO250PU1hdGgucm91bmQobnQvcnQpLGl0PU1hdGgucm91bmQoaXQvcnQpLGF0PU1hdGgucm91bmQoYXQvcnQpO3ZhciBndD1pKCJyZ2IoIitudCsiLCIraXQrIiwiK2F0KyIpIik7dC5faG1waXhjb3VudD0odC5faG1waXhjb3VudHx8MCkrcnQsdC5faG1sdW1jb3VudD0odC5faG1sdW1jb3VudHx8MCkrcnQqZ3QuZ2V0THVtaW5hbmNlKCk7dmFyIHl0PUYuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEocik7eXQuZW50ZXIoKS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkseXQuYXR0cih7aGVpZ2h0Ok8sd2lkdGg6eix4OnkseTpfLCJ4bGluazpocmVmIjpCLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9KSx5dC5leGl0KCkucmVtb3ZlKCl9fXZhciBpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxjPXQoIi4vbWF4X3Jvd19sZW5ndGgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKW4odCxlLHJbaV0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcxNiwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4vbWF4X3Jvd19sZW5ndGgiOjk2OCx0aW55Y29sb3IyOjU0Mn1dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5obSBpbWFnZSIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50cmFjZS5vcGFjaXR5fSl9fSx7ZDM6MTIxfV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyKCJ6c21vb3RoIik9PT0hMSYmKHIoInhnYXAiKSxyKCJ5Z2FwIikpLHIoInpob3ZlcmZvcm1hdCIpLGUuX3NlcGFyYXRvcnM9bi5zZXBhcmF0b3JzfX0se31dLDk3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm4ic2NhbGVkIj09PShyP2UodCsidHlwZSIsImFycmF5Iik6InNjYWxlZCIpJiYoZSh0KyIwIiksZSgiZCIrdCkpLHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscj0hMCxuPSExLGk9ITEsbz0wO288dC5sZW5ndGg7bysrKXtpZihlPXRbb10sIUFycmF5LmlzQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKG49ITApO2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKWlmKGEoZVtzXSkpe2k9ITA7YnJlYWt9fXJldHVybiByJiZuJiZpfXZhciBhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi9oYXNfY29sdW1ucyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsYyl7dmFyIHU9cigieiIpO2w9bHx8IngiLGM9Y3x8InkiO3ZhciBmLGg7aWYodm9pZCAwPT09dXx8IXUubGVuZ3RoKXJldHVybiAwO2lmKHModCkpe2lmKGY9cihsKSxoPXIoYyksIWZ8fCFoKXJldHVybiAwfWVsc2V7aWYoZj1uKGwsciksaD1uKGMsciksIWkodSkpcmV0dXJuIDA7cigidHJhbnNwb3NlIil9cmV0dXJuIG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFtsLGNdLGEpLGUuei5sZW5ndGh9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4vaGFzX2NvbHVtbnMiOjk2MywiZmFzdC1pc251bWVyaWMiOjEzMX1dLDk3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPVsieiIsIngiLCJ4MCIsImR4IiwieSIsInkwIiwiZHkiLCJ0ZXh0IiwidHJhbnNwb3NlIiwieHR5cGUiLCJ5dHlwZSJdLGM9e30sdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgZj1sW3VdO2NbZl09bltmXX1vKGMsaSx7YXV0b2NvbG9yc2NhbGU6byh7fSxpLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9LHtjb2xvcmJhcjphfSksZS5leHBvcnRzPXMoYywiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjE2LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NTZ9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1vKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXQuY29sb3JzY2FsZSxyPXQuem1pbixuPXQuem1heCxpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KDQqaSkscz0wO3M8aTtzKyspe3ZhciBjPWVbc10sdT1sKGNbMV0pO2Fbc109citjWzBdKihuLXIpO2Zvcih2YXIgZj0wO2Y8NDtmKyspb1s0KnMrZl09dVtmXX1yZXR1cm57Y29sb3JMZXZlbHM6YSxjb2xvclZhbHVlczpvfX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT1uZXcgbih0LGUudWlkKTtyZXR1cm4gaS51cGRhdGUoZSxyKSxpfXZhciBvPXQoImdsLWhlYXRtYXAyZCIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxjPW4ucHJvdG90eXBlO2MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxjLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgYT1uWzBdLmxlbmd0aCxvPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bYSxvXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWkodCk7dGhpcy5vcHRpb25zLmNvbG9yTGV2ZWxzPWwuY29sb3JMZXZlbHMsdGhpcy5vcHRpb25zLmNvbG9yVmFsdWVzPWwuY29sb3JWYWx1ZXMsdGhpcy50ZXh0TGFiZWxzPVtdLmNvbmNhdC5hcHBseShbXSx0LnRleHQpLHRoaXMuaGVhdG1hcC51cGRhdGUodGhpcy5vcHRpb25zKSxzLmV4cGFuZCh0aGlzLnNjZW5lLnhheGlzLHIueCkscy5leHBhbmQodGhpcy5zY2VuZS55YXhpcyxyLnkpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXAuZGlzcG9zZSgpfSxlLmV4cG9ydHM9YX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NTYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksImdsLWhlYXRtYXAyZCI6MTcwfV0sOTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4uL2hlYXRtYXAvZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxuLmNhbGM9dCgiLi4vaGVhdG1hcC9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGVhdG1hcGdsIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxuLmNhdGVnb3JpZXM9WyJnbDJkIiwiMmRNYXAiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODE1LCIuLi9oZWF0bWFwL2NhbGMiOjk1NywiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTU5LCIuLi9oZWF0bWFwL2RlZmF1bHRzIjo5NjEsIi4vYXR0cmlidXRlcyI6OTczLCIuL2NvbnZlcnQiOjk3NH1dLDk3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXt9O2VbImF1dG9iaW4iK3RdPSExO3ZhciByPXt9O3JldHVybiByWyJeYXV0b2JpbiIrdF09ITEse3N0YXJ0Ont2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnJ9LGVuZDp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpyfSxzaXplOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6ZX19dmFyIGk9dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0OmkudGV4dCxvcmllbnRhdGlvbjppLm9yaWVudGF0aW9uLGhpc3RmdW5jOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudCIsInN1bSIsImF2ZyIsIm1pbiIsIm1heCJdLGRmbHQ6ImNvdW50IixlZGl0VHlwZToiY2FsYyJ9LGhpc3Rub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJwZXJjZW50IiwicHJvYmFiaWxpdHkiLCJkZW5zaXR5IiwicHJvYmFiaWxpdHkgZGVuc2l0eSJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNyZWFzaW5nIiwiZGVjcmVhc2luZyJdLGRmbHQ6ImluY3JlYXNpbmciLGVkaXRUeXBlOiJjYWxjIn0sY3VycmVudGJpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5jbHVkZSIsImV4Y2x1ZGUiLCJoYWxmIl0sZGZsdDoiaW5jbHVkZSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW54Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InhiaW5zLnN0YXJ0Ijp2b2lkIDAsInhiaW5zLmVuZCI6dm9pZCAwLCJ4Ymlucy5zaXplIjp2b2lkIDB9fSxuYmluc3g6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhiaW5zOm4oIngiKSxhdXRvYmlueTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJ5Ymlucy5zdGFydCI6dm9pZCAwLCJ5Ymlucy5lbmQiOnZvaWQgMCwieWJpbnMuc2l6ZSI6dm9pZCAwfX0sbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczpuKCJ5IiksbWFya2VyOmkubWFya2VyLGVycm9yX3k6aS5lcnJvcl95LGVycm9yX3g6aS5lcnJvcl94LF9kZXByZWNhdGVkOntiYXJkaXI6aS5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi9iYXIvYXR0cmlidXRlcyI6ODYzfV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcigiaGlzdG5vcm0iKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cih0KyJiaW5zLnN0YXJ0Iikscih0KyJiaW5zLmVuZCIpLHIodCsiYmlucy5zaXplIikscigiYXV0b2JpbiIrdCkscigibmJpbnMiK3QpfSksZX19LHt9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjEzMX1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKHQqZTw9MClyZXR1cm4gMS8wO2Zvcih2YXIgbz1NYXRoLmFicyhlLXQpLHM9ImRhdGUiPT09ci50eXBlLGw9aShvLHMpLGM9MDtjPDEwO2MrKyl7dmFyIHU9aSg4MCpsLHMpO2lmKGw9PT11KWJyZWFrO2lmKCFhKHUsdCxlLHMscixuKSlicmVhaztsPXV9cmV0dXJuIGx9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBlJiZ0PmQ/dD51P3Q+MS4xKmw/bDp0PjEuMSpjP2M6dTp0PmY/Zjp0Pmg/aDpkOk1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7aWYobiYmdD51KXt2YXIgcz1vKGUsaSxhKSxjPW8ocixpLGEpLGY9dD09PWw/MDoxO3JldHVybiBzW2ZdIT09Y1tmXX1yZXR1cm4gTWF0aC5mbG9vcihyL3QpLU1hdGguZmxvb3IoZS90KT4uMX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1lLmMyZCh0LGwscikuc3BsaXQoIi0iKTtyZXR1cm4iIj09PW5bMF0mJihuLnVuc2hpZnQoKSxuWzBdPSItIituWzBdKSxufXZhciBzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxsPXMuT05FQVZHWUVBUixjPXMuT05FQVZHTU9OVEgsdT1zLk9ORURBWSxmPXMuT05FSE9VUixoPXMuT05FTUlOLGQ9cy5PTkVTRUMscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tJbmNyZW1lbnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG8scyxjPS0xLjEqZSxmPS0uMSplLGg9dC1mLGQ9clswXSxtPXJbMV0sdj1NYXRoLm1pbihuKGQrZixkK2gsaSxhKSxuKG0rZixtK2gsaSxhKSksZz1NYXRoLm1pbihuKGQrYyxkK2YsaSxhKSxuKG0rYyxtK2YsaSxhKSk7aWYodj5nJiZnPE1hdGguYWJzKG0tZCkvNGUzPyhvPXYscz0hMSk6KG89TWF0aC5taW4odixnKSxzPSEwKSwiZGF0ZSI9PT1pLnR5cGUmJm8+dSl7dmFyIHk9bz09PWw/MTo2LGI9bz09PWw/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1pLmMyZChlLGwsYSksbz1uLmluZGV4T2YoIi0iLHkpO28+MCYmKG49bi5zdWJzdHIoMCxvKSk7dmFyIGM9aS5kMmMobiwwLGEpO2lmKGM8ZSl7dmFyIHU9cChjLGIsITEsYSk7KGMrdSkvMjxlK3QmJihjPXUpfXJldHVybiByJiZzP3AoYyxiLCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPW8qTWF0aC5yb3VuZChlL28pO3JldHVybiBuK28vMTA8ZSYmbisuOSpvPGUrdCYmKG4rPW8pLHImJnMmJihuLT1vKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzE0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5fV0sOTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixzKXt2YXIgbCx1LGgsZCxwLG09bisiYmlucyIsdj0ib3ZlcmxheSI9PT10Ll9mdWxsTGF5b3V0LmJhcm1vZGU7aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXt2YXIgZz12P1tlXTphKHQsZSkseT1bXSxiPTEvMCx4PTEvMCxfPS0oMS8wKSx3PSJhdXRvYmluIituO2ZvcihsPTA7bDxnLmxlbmd0aDtsKyspe3U9Z1tsXSxwPXUuX3BvczA9ci5tYWtlQ2FsY2RhdGEodSxuKTt2YXIgTT11W21dO2lmKHVbd118fCFNfHxudWxsPT09TS5zdGFydHx8bnVsbD09PU0uZW5kKXtoPXVbbisiY2FsZW5kYXIiXTt2YXIgVD11LmN1bXVsYXRpdmU7aWYoTT1mLmF1dG9CaW4ocCxyLHVbIm5iaW5zIituXSwhMSxoKSx2JiYxPT09TS5fY291bnQmJiJjYXRlZ29yeSIhPT1yLnR5cGUpe2lmKHMpcmV0dXJuW00scCwhMF07TT1pKHQsZSxyLG4sbSl9VC5lbmFibGVkJiYiaW5jbHVkZSIhPT1ULmN1cnJlbnRiaW4mJigiZGVjcmVhc2luZyI9PT1ULmRpcmVjdGlvbj94PU1hdGgubWluKHgsci5yMmMoTS5zdGFydCwwLGgpLU0uc2l6ZSk6Xz1NYXRoLm1heChfLHIucjJjKE0uZW5kLDAsaCkrTS5zaXplKSkseS5wdXNoKHUpfWVsc2UgZHx8KGQ9e3NpemU6TS5zaXplLHN0YXJ0OnIucjJjKE0uc3RhcnQsMCxoKSxlbmQ6ci5yMmMoTS5lbmQsMCxoKX0pO2I9byhiLE0uc2l6ZSkseD1NYXRoLm1pbih4LHIucjJjKE0uc3RhcnQsMCxoKSksXz1NYXRoLm1heChfLHIucjJjKE0uZW5kLDAsaCkpLGwmJih1Ll9hdXRvQmluRmluaXNoZWQ9MSl9aWYoZCYmYyhkLnNpemUpJiZjKGIpKXtiPWI+ZC5zaXplLzEuOT9kLnNpemU6ZC5zaXplL01hdGguY2VpbChkLnNpemUvYik7dmFyIGs9ZC5zdGFydCsoZC5zaXplLWIpLzI7eD1rLWIqTWF0aC5jZWlsKChrLXgpL2IpfWZvcihsPTA7bDx5Lmxlbmd0aDtsKyspdT15W2xdLGg9dVtuKyJjYWxlbmRhciJdLHUuX2lucHV0W21dPXVbbV09e3N0YXJ0OnIuYzJyKHgsMCxoKSxlbmQ6ci5jMnIoXywwLGgpLHNpemU6Yn0sdS5faW5wdXRbd109dVt3XX1yZXR1cm4gcD1lLl9wb3MwLGRlbGV0ZSBlLl9wb3MwLFtlW21dLHBdfWZ1bmN0aW9uIGkodCxlLHIsaSxvKXt2YXIgcyxsLGM9YSh0LGUpLGY9ITEsaD0xLzAsZD1bZV07Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylpZigobD1jW3NdKT09PWUpZj0hMDtlbHNlIGlmKGYpe3ZhciBwPW4odCxsLHIsaSwhMCksbT1wWzBdLHY9cFsyXTtsLl9hdXRvQmluRmluaXNoZWQ9MSxsLl9wb3MwPXBbMV0sdj9kLnB1c2gobCk6aD1NYXRoLm1pbihoLG0uc2l6ZSl9ZWxzZSBoPU1hdGgubWluKGgsbFtvXS5zaXplKTt2YXIgZz1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihzPTA7czxkLmxlbmd0aDtzKyspZm9yKHZhciB5PWRbc10uX3BvczAsYj0wO2I8eS5sZW5ndGg7YisrKWlmKHZvaWQgMCE9PXlbYl0pe2dbc109eVtiXTticmVha31mb3IoaXNGaW5pdGUoaCl8fChoPXUuZGlzdGluY3RWYWxzKGcpLm1pbkRpZmYpLHM9MDtzPGQubGVuZ3RoO3MrKyl7bD1kW3NdO3ZhciB4PWxbaSsiY2FsZW5kYXIiXTtsLl9pbnB1dFtvXT1sW29dPXtzdGFydDpyLmMycihnW3NdLWgvMiwwLHgpLGVuZDpyLmMycihnW3NdK2gvMiwwLHgpLHNpemU6aH19cmV0dXJuIGVbb119ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPWUub3JpZW50YXRpb24sYT1bXSxvPXQuX2Z1bGxEYXRhLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiaGlzdG9ncmFtIj09PWwudHlwZSYmbC5vcmllbnRhdGlvbj09PWkmJmwueGF4aXM9PT1yJiZsLnlheGlzPT09biYmYS5wdXNoKGwpfXJldHVybiBhfWZ1bmN0aW9uIG8odCxlKXtpZih0PT09MS8wKXJldHVybiBlO3ZhciByPXModCk7cmV0dXJuIHMoZSk8cj9lOnR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYyh0KT90OiJzdHJpbmciPT10eXBlb2YgdCYmIk0iPT09dC5jaGFyQXQoMCk/ZyordC5zdWJzdHIoMSk6MS8wfWZ1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG4oZSl7cz10W2VdLHRbZV0vPTJ9ZnVuY3Rpb24gaShlKXtvPXRbZV0sdFtlXT1zK28vMixzKz1vfXZhciBhLG8scztpZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG4oMCksYT0xO2E8dC5sZW5ndGg7YSsrKWkoYSk7ZWxzZSBmb3Iobih0Lmxlbmd0aC0xKSxhPXQubGVuZ3RoLTI7YT49MDthLS0paShhKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihhPTE7YTx0Lmxlbmd0aDthKyspdFthXSs9dFthLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3IoYT10Lmxlbmd0aC0yO2E+PTA7YS0tKXRbYV0rPXRbYSsxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fXZhciBjPXQoImZhc3QtaXNudW1lcmljIiksdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksZD10KCIuL2Jpbl9mdW5jdGlvbnMiKSxwPXQoIi4vbm9ybV9mdW5jdGlvbnMiKSxtPXQoIi4vYXZlcmFnZSIpLHY9dCgiLi9jbGVhbl9iaW5zIiksZz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FQVZHTU9OVEgseT10KCIuL2Jpbl9sYWJlbF92YWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS52aXNpYmxlPT09ITApe3ZhciByLGk9W10sYT1bXSxvPWYuZ2V0RnJvbUlkKHQsImgiPT09ZS5vcmllbnRhdGlvbj9lLnlheGlzfHwieSI6ZS54YXhpc3x8IngiKSxzPSJoIj09PWUub3JpZW50YXRpb24/InkiOiJ4IixnPXt4OiJ5Iix5OiJ4In1bc10sYj1lW3MrImNhbGVuZGFyIl0seD1lLmN1bXVsYXRpdmU7dihlLG8scyk7dmFyIF8sdyxNLFQ9bih0LGUsbyxzKSxrPVRbMF0sQT1UWzFdLEU9InN0cmluZyI9PXR5cGVvZiBrLnNpemUsUz1bXSxMPUU/UzprLEM9W10sST1bXSxEPVtdLFA9MCx6PWUuaGlzdG5vcm0sTz1lLmhpc3RmdW5jLFI9ei5pbmRleE9mKCJkZW5zaXR5IikhPT0tMTt4LmVuYWJsZWQmJlImJih6PXoucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLFI9ITEpO3ZhciBGLGo9Im1heCI9PT1PfHwibWluIj09PU8sTj1qP251bGw6MCxCPWQuY291bnQsVT1wW3pdLFY9ITEsSD1mdW5jdGlvbih0KXtyZXR1cm4gby5yMmModCwwLGIpfTtmb3IoQXJyYXkuaXNBcnJheShlW2ddKSYmImNvdW50IiE9PU8mJihGPWVbZ10sVj0iYXZnIj09PU8sQj1kW09dKSxyPUgoay5zdGFydCksdz1IKGsuZW5kKSsoci1mLnRpY2tJbmNyZW1lbnQocixrLnNpemUsITEsYikpLzFlNjtyPHcmJmkubGVuZ3RoPDFlNiYmKF89Zi50aWNrSW5jcmVtZW50KHIsay5zaXplLCExLGIpLGkucHVzaCgocitfKS8yKSxhLnB1c2goTiksRC5wdXNoKFtdKSxTLnB1c2gociksUiYmQy5wdXNoKDEvKF8tcikpLFYmJkkucHVzaCgwKSwhKF88PXIpKTspcj1fO1MucHVzaChyKSxFfHwiZGF0ZSIhPT1vLnR5cGV8fChMPXtzdGFydDpIKEwuc3RhcnQpLGVuZDpIKEwuZW5kKSxzaXplOkwuc2l6ZX0pO3ZhciBxPWEubGVuZ3RoLEc9ITAsWT0xLzAsWD0xLzA7Zm9yKHI9MDtyPEEubGVuZ3RoO3IrKyl7dmFyIFc9QVtyXTtNPXUuZmluZEJpbihXLEwpLE0+PTAmJk08cSYmKFArPUIoTSxyLGEsRixJKSxHJiZEW01dLmxlbmd0aCYmVyE9PUFbRFtNXVswXV0mJihHPSExKSxEW01dLnB1c2gociksWT1NYXRoLm1pbihZLFctU1tNXSksWD1NYXRoLm1pbihYLFNbTSsxXS1XKSl9dmFyIFo7R3x8KFo9eShZLFgsUyxvLGIpKSxWJiYoUD1tKGEsSSkpLFUmJlUoYSxQLEMpLHguZW5hYmxlZCYmbChhLHguZGlyZWN0aW9uLHguY3VycmVudGJpbik7dmFyIEo9TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgpLEs9W10sUT0wLCQ9Si0xO2ZvcihyPTA7cjxKO3IrKylpZihhW3JdKXtRPXI7YnJlYWt9Zm9yKHI9Si0xO3I+PVE7ci0tKWlmKGFbcl0peyQ9cjticmVha31mb3Iocj1RO3I8PSQ7cisrKWlmKGMoaVtyXSkmJmMoYVtyXSkpe3ZhciB0dD17cDppW3JdLHM6YVtyXSxiOjB9O3guZW5hYmxlZHx8KHR0LnB0cz1EW3JdLEc/dHQucDA9dHQucDE9RFtyXS5sZW5ndGg/QVtEW3JdWzBdXTppW3JdOih0dC5wMD1aKFNbcl0pLHR0LnAxPVooU1tyKzFdLCEwKSkpLEsucHVzaCh0dCl9cmV0dXJuIDE9PT1LLmxlbmd0aCYmKEtbMF0ud2lkdGgxPWYudGlja0luY3JlbWVudChLWzBdLnAsay5zaXplLCExLGIpLUtbMF0ucCksaChLLGUpLEt9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4NjIsIi4vYXZlcmFnZSI6OTc3LCIuL2Jpbl9mdW5jdGlvbnMiOjk3OSwiLi9iaW5fbGFiZWxfdmFscyI6OTgwLCIuL2NsZWFuX2JpbnMiOjk4MiwiLi9ub3JtX2Z1bmN0aW9ucyI6OTg3LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5jbGVhbkRhdGUsYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLk9ORURBWSxzPWEuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ZS50eXBlLGw9cisiYmlucyIsYz10W2xdO2N8fChjPXRbbF09e30pO3ZhciB1PSJkYXRlIj09PWE/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kodCxzLGMuY2FsZW5kYXIpOm51bGx9OmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP051bWJlcih0KTpudWxsfTtjLnN0YXJ0PXUoYy5zdGFydCksYy5lbmQ9dShjLmVuZCk7dmFyIGY9ImRhdGUiPT09YT9vOjEsaD1jLnNpemU7aWYobihoKSljLnNpemU9aD4wP051bWJlcihoKTpmO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBoKWMuc2l6ZT1mO2Vsc2V7dmFyIGQ9aC5jaGFyQXQoMCkscD1oLnN1YnN0cigxKTtwPW4ocCk/TnVtYmVyKHApOjAsKHA8PTB8fCJkYXRlIiE9PWF8fCJNIiE9PWR8fHAhPT1NYXRoLnJvdW5kKHApKSYmKGMuc2l6ZT1mKX12YXIgbT0iYXV0b2JpbiIrcjsiYm9vbGVhbiIhPXR5cGVvZiB0W21dJiYodFttXT0hKChjLnN0YXJ0fHwwPT09Yy5zdGFydCkmJihjLmVuZHx8MD09PWMuZW5kKSkpLHRbbV18fGRlbGV0ZSB0WyJuYmlucyIrcl19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vLi4vbGliIjo3MzUsImZhc3QtaXNudW1lcmljIjoxMzF9XSw5ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi9iaW5fZGVmYXVsdHMiKSxzPXQoIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9dmFyIGg9ZigieCIpLGQ9ZigieSIpO2YoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoZigiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxmKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksZigidGV4dCIpO3ZhciBwPWYoIm9yaWVudGF0aW9uIixkJiYhaD8iaCI6InYiKSxtPWVbInYiPT09cD8ieCI6InkiXTtpZighbXx8IW0ubGVuZ3RoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHUpLGVbImgiPT09cD8ieCI6InkiXSYmZigiaGlzdGZ1bmMiKSxvKHQsZSxmLCJoIj09PXA/WyJ5Il06WyJ4Il0pLHModCxlLGYscix1KSxsKHQsZSxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLGwodCxlLGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjY0MCwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODc1LCIuL2F0dHJpYnV0ZXMiOjk3NiwiLi9iaW5fZGVmYXVsdHMiOjk3OH1dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PWUueFZhbCx0Lnk9ZS55VmFsLHQueGF4aXM9ZS54YSx0LnlheGlzPWUueWEsZS5wdHMmJih0LnBvaW50TnVtYmVycz1lLnB0cyx0LmJpbk51bWJlcj10LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50TnVtYmVyKSx0fX0se31dLDk4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyl7dD1vWzBdO3ZhciBzPXQuY2RbdC5pbmRleF0sbD10LmNkWzBdLnRyYWNlO2lmKCFsLmN1bXVsYXRpdmUuZW5hYmxlZCl7dmFyIGM9ImgiPT09bC5vcmllbnRhdGlvbj8ieSI6IngiO3RbYysiTGFiZWwiXT1pKHRbYysiYSJdLHMucDAscy5wMSksdC5wdHM9cy5wdHN9cmV0dXJuIG99fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9iYXIvaG92ZXIiOjg2Nn1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnNldFBvc2l0aW9ucz10KCIuLi9iYXIvc2V0X3Bvc2l0aW9ucyIpLG4ucGxvdD10KCIuLi9iYXIvcGxvdCIpLG4uc3R5bGU9dCgiLi4vYmFyL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi4vYmFyL3NlbGVjdCIpLG4uZXZlbnREYXRhPXQoIi4vZXZlbnRfZGF0YSIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsImJhciIsImhpc3RvZ3JhbSIsIm9yaWVudGVkIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzg5LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjg2OCwiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6ODY5LCIuLi9iYXIvcGxvdCI6ODcwLCIuLi9iYXIvc2VsZWN0Ijo4NzEsIi4uL2Jhci9zZXRfcG9zaXRpb25zIjo4NzIsIi4uL2Jhci9zdHlsZSI6ODc0LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDQ4LCIuL2F0dHJpYnV0ZXMiOjk3NiwiLi9jYWxjIjo5ODEsIi4vZGVmYXVsdHMiOjk4MywiLi9ldmVudF9kYXRhIjo5ODQsIi4vaG92ZXIiOjk4NX1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3BlcmNlbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0xMDAvZSxpPTA7aTxyO2krKyl0W2ldKj1ufSxwcm9iYWJpbGl0eTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKyl0W25dLz1lfSxkZW5zaXR5OmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO249bnx8MTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0qbn0sInByb2JhYmlsaXR5IGRlbnNpdHkiOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO24mJihlLz1uKTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0vZX19fSx7fV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIiksaT10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt9LHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsYXV0b2Jpbng6bi5hdXRvYmlueCxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxhdXRvYmlueTpuLmF1dG9iaW55LG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLHhnYXA6aS54Z2FwLHlnYXA6aS55Z2FwLHpzbW9vdGg6aS56c21vb3RoLHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdH0sYSx7YXV0b2NvbG9yc2NhbGU6cyh7fSxhLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MTYsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NTYsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjo5NzZ9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt2YXIgcz1lKyJiaW5zIixjPSJhdXRvYmluIitlLHU9dFtzXTtoKHQsbixlKSwhdFtjXSYmdSYmbnVsbCE9PXUuc3RhcnQmJm51bGwhPT11LmVuZHx8KHU9bC5hdXRvQmluKHIsbix0WyJuYmlucyIrZV0sIjJkIixvKSwiaGlzdG9ncmFtMmRjb250b3VyIj09PXQudHlwZSYmKHUuc3RhcnQ9YShsLnRpY2tJbmNyZW1lbnQoaSh1LnN0YXJ0KSx1LnNpemUsITAsbykpLHUuZW5kPWEobC50aWNrSW5jcmVtZW50KGkodS5lbmQpLHUuc2l6ZSwhMSxvKSkpLHQuX2lucHV0W3NdPXRbc109dSx0Ll9pbnB1dFtjXT10W2NdKX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gYSh0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGw9bmV3IEFycmF5KHMpO2lmKGUpZm9yKG89MDtvPHM7bysrKWxbb109W2Vbb10sZVtvXV07ZWxzZXt2YXIgYz1kKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKWxbb109W2ModFtvXSksYyh0W28rMV0sITApXX1yZXR1cm4gbH12YXIgcz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyIpLHU9dCgiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIiksZj10KCIuLi9oaXN0b2dyYW0vYXZlcmFnZSIpLGg9dCgiLi4vaGlzdG9ncmFtL2NsZWFuX2JpbnMiKSxkPXQoIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGgsZCxwLG09bC5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHY9ZS54P20ubWFrZUNhbGNkYXRhKGUsIngiKTpbXSxnPWwuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSx5PWUueT9nLm1ha2VDYWxjZGF0YShlLCJ5Iik6W10sYj1lLnhjYWxlbmRhcix4PWUueWNhbGVuZGFyLF89ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCxiKX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHgpfSxNPWZ1bmN0aW9uKHQpe3JldHVybiBtLmMycih0LDAsYil9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIGcuYzJyKHQsMCx4KX0saz1NYXRoLm1pbih2Lmxlbmd0aCx5Lmxlbmd0aCk7di5sZW5ndGg+ayYmdi5zcGxpY2Uoayx2Lmxlbmd0aC1rKSx5Lmxlbmd0aD5rJiZ5LnNwbGljZShrLHkubGVuZ3RoLWspLG4oZSwieCIsdixtLF8sTSxiKSxuKGUsInkiLHksZyx3LFQseCk7dmFyIEE9W10sRT1bXSxTPVtdLEw9InN0cmluZyI9PXR5cGVvZiBlLnhiaW5zLnNpemUsQz0ic3RyaW5nIj09dHlwZW9mIGUueWJpbnMuc2l6ZSxJPVtdLEQ9W10sUD1MP0k6ZS54Ymlucyx6PUM/RDplLnliaW5zLE89MCxSPVtdLEY9W10saj1lLmhpc3Rub3JtLE49ZS5oaXN0ZnVuYyxCPWouaW5kZXhPZigiZGVuc2l0eSIpIT09LTEsVT0ibWF4Ij09PU58fCJtaW4iPT09TixWPVU/bnVsbDowLEg9Yy5jb3VudCxxPXVbal0sRz0hMSxZPVtdLFg9W10sVz0ieiJpbiBlP2UuejoibWFya2VyImluIGUmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIuY29sb3IpP2UubWFya2VyLmNvbG9yOiIiO1cmJiJjb3VudCIhPT1OJiYoRz0iYXZnIj09PU4sSD1jW05dKTt2YXIgWj1lLnhiaW5zLEo9XyhaLnN0YXJ0KSxLPV8oWi5lbmQpKyhKLWwudGlja0luY3JlbWVudChKLFouc2l6ZSwhMSxiKSkvMWU2O2ZvcihyPUo7cjxLO3I9bC50aWNrSW5jcmVtZW50KHIsWi5zaXplLCExLGIpKUUucHVzaChWKSxJLnB1c2gociksRyYmUy5wdXNoKDApO0kucHVzaChyKTt2YXIgUT1FLmxlbmd0aCwkPV8oZS54Ymlucy5zdGFydCksdHQ9KHItJCkvUSxldD1NKCQrdHQvMik7Zm9yKFo9ZS55YmlucyxKPXcoWi5zdGFydCksSz13KFouZW5kKSsoSi1sLnRpY2tJbmNyZW1lbnQoSixaLnNpemUsITEseCkpLzFlNixyPUo7cjxLO3I9bC50aWNrSW5jcmVtZW50KHIsWi5zaXplLCExLHgpKXtBLnB1c2goRS5zbGljZSgpKSxELnB1c2gocik7dmFyIHJ0PW5ldyBBcnJheShRKTtmb3IoaD0wO2g8UTtoKyspcnRbaF09W107Ri5wdXNoKHJ0KSxHJiZSLnB1c2goUy5zbGljZSgpKX1ELnB1c2gocik7dmFyIG50PUEubGVuZ3RoLGl0PXcoZS55Ymlucy5zdGFydCksYXQ9KHItaXQpL250LG90PVQoaXQrYXQvMik7QiYmKFk9aShFLmxlbmd0aCxQLHR0LEwpLFg9aShBLmxlbmd0aCx6LGF0LEMpKSxMfHwiZGF0ZSIhPT1tLnR5cGV8fChQPWEoXyxQKSksQ3x8ImRhdGUiIT09Zy50eXBlfHwoej1hKHcseikpO3ZhciBzdD0hMCxsdD0hMCxjdD1uZXcgQXJyYXkoUSksdXQ9bmV3IEFycmF5KG50KSxmdD0xLzAsaHQ9MS8wLGR0PTEvMCxwdD0xLzA7Zm9yKHI9MDtyPGs7cisrKXt2YXIgbXQ9dltyXSx2dD15W3JdO2Q9cy5maW5kQmluKG10LFApLHA9cy5maW5kQmluKHZ0LHopLGQ+PTAmJmQ8USYmcD49MCYmcDxudCYmKE8rPUgoZCxyLEFbcF0sVyxSW3BdKSxGW3BdW2RdLnB1c2gociksc3QmJih2b2lkIDA9PT1jdFtkXT9jdFtkXT1tdDpjdFtkXSE9PW10JiYoc3Q9ITEpKSxsdCYmKHZvaWQgMD09PXV0W2RdP3V0W2RdPXZ0OnV0W2RdIT09dnQmJihsdD0hMSkpLGZ0PU1hdGgubWluKGZ0LG10LUlbZF0pLGh0PU1hdGgubWluKGh0LElbZCsxXS1tdCksZHQ9TWF0aC5taW4oZHQsdnQtRFtwXSkscHQ9TWF0aC5taW4ocHQsRFtwKzFdLXZ0KSl9aWYoRylmb3IocD0wO3A8bnQ7cCsrKU8rPWYoQVtwXSxSW3BdKTtpZihxKWZvcihwPTA7cDxudDtwKyspcShBW3BdLE8sWSxYW3BdKTtyZXR1cm57eDp2LHhSYW5nZXM6byhJLHN0JiZjdCxmdCxodCxtLGIpLHgwOmV0LGR4OnR0LHk6eSx5UmFuZ2VzOm8oRCxsdCYmdXQsZHQscHQsZyx4KSx5MDpvdCxkeTphdCx6OkEscHRzOkZ9fX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjk3NywiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiOjk3OSwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIjo5ODAsIi4uL2hpc3RvZ3JhbS9jbGVhbl9iaW5zIjo5ODIsIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyI6OTg3fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLGUudmlzaWJsZSE9PSExJiYoYSh0LGUsYyxsKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjAsIi4uLy4uL2xpYiI6NzM1LCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIjo5NzEsIi4vYXR0cmlidXRlcyI6OTg4LCIuL3NhbXBsZV9kZWZhdWx0cyI6OTkzfV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKHQsZSxyLGEsbyxzKTtpZihsKXt0PWxbMF07dmFyIGM9dC5pbmRleCx1PWNbMF0sZj1jWzFdLGg9dC5jZFswXSxkPWgueFJhbmdlc1tmXSxwPWgueVJhbmdlc1t1XTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLGRbMF0sZFsxXSksdC55TGFiZWw9aSh0LnlhLHBbMF0scFsxXSksdC5wdHM9aC5wdHNbdV1bZl0sbH19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL2hlYXRtYXAvaG92ZXIiOjk2NH1dLDk5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4uL2hlYXRtYXAvY2FsYyIpLG4ucGxvdD10KCIuLi9oZWF0bWFwL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtMmQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJoaXN0b2dyYW0iXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL2hlYXRtYXAvY2FsYyI6OTU3LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NTksIi4uL2hlYXRtYXAvcGxvdCI6OTY5LCIuLi9oZWF0bWFwL3N0eWxlIjo5NzAsIi4uL2hpc3RvZ3JhbS9ldmVudF9kYXRhIjo5ODQsIi4vYXR0cmlidXRlcyI6OTg4LCIuL2RlZmF1bHRzIjo5OTAsIi4vaG92ZXIiOjk5MX1dLDk5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vaGlzdG9ncmFtL2Jpbl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5Iik7aWYoIShvJiZvLmxlbmd0aCYmcyYmcy5sZW5ndGgpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxpKHQsZSxyLFsieCIsInkiXSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4uL2hpc3RvZ3JhbS9iaW5fZGVmYXVsdHMiOjk3OH1dLDk5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLGF1dG9iaW54Om4uYXV0b2JpbngsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsYXV0b2Jpbnk6bi5hdXRvYmlueSxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3VyczppLmNvbnRvdXJzLGxpbmU6aS5saW5lLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdH0sYSx7em1pbjpzKHt9LGEuem1pbix7ZWRpdFR5cGU6ImNhbGMifSksem1heDpzKHt9LGEuem1heCx7ZWRpdFR5cGU6ImNhbGMifSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MTYsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo5MjgsIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiOjk4OH1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLGUudmlzaWJsZSE9PSExJiYoYSh0LGUsYyksbyh0LGUsYyxsKSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MzIsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjk0MiwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjo5OTMsIi4vYXR0cmlidXRlcyI6OTk0fV0sOTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vY29udG91ci9jYWxjIiksbi5wbG90PXQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuLi9jb250b3VyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9jb250b3VyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0yZGNvbnRvdXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzg5LCIuLi9jb250b3VyL2NhbGMiOjkyOSwiLi4vY29udG91ci9jb2xvcmJhciI6OTMwLCIuLi9jb250b3VyL2hvdmVyIjo5MzYsIi4uL2NvbnRvdXIvcGxvdCI6OTQwLCIuLi9jb250b3VyL3N0eWxlIjo5NDEsIi4vYXR0cmlidXRlcyI6OTk0LCIuL2RlZmF1bHRzIjo5OTV9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMobigiIiwiY2FsYyIsITEpLHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxpOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sazp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxkZWxhdW5heWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIngiLCJ5IiwieiJdLGRmbHQ6InoiLGVkaXRUeXBlOiJjYWxjIn0sYWxwaGFodWxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LTEsZWRpdFR5cGU6ImNhbGMifSxpbnRlbnNpdHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6cyh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LHNob3dzY2FsZTppLnNob3dzY2FsZSxjb2xvcmJhcjphLGxpZ2h0cG9zaXRpb246e3g6cyh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5OnMoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpzKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOnMoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjE4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTExM31dLDk5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKGUsZS5pbnRlbnNpdHksIiIsImMiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYxN31dLDk5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGw9ImNiIityLnVpZCxjPXIuY21pbix1PXIuY21heCxmPXIuaW50ZW5zaXR5fHxbXTtpZihuKGMpfHwoYz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxmKSksbih1KXx8KHU9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZikpLHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK2wpLnJlbW92ZSgpLCFyLnNob3dzY2FsZSlyZXR1cm4gdm9pZCBhLmF1dG9NYXJnaW4odCxsKTt2YXIgaD1lWzBdLnQuY2I9cyh0LGwpLGQ9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUoci5jb2xvcnNjYWxlLGMsdSkse25vTnVtZXJpY0NoZWNrOiEwfSk7aC5maWxsY29sb3IoZCkuZmlsbGxldmVscyh7c3RhcnQ6YyxlbmQ6dSxzaXplOih1LWMpLzI1NH0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MTQsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI1LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgzOCwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDFlMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9Yyh0WzFdKSxuPXIudG9SZ2IoKTtyZXR1cm57aW5kZXg6ZSxyZ2I6W24ucixuLmcsbi5iLDFdfX0pfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKGQpfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoOysraSluW2ldPVt0W2ldLGVbaV0scltpXV07cmV0dXJuIG59ZnVuY3Rpb24gcyh0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bCh7Z2w6cn0pLGE9bmV3IG4odCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX12YXIgbD10KCJnbC1tZXNoM2QiKSxjPXQoInRpbnljb2xvcjIiKSx1PXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksZj10KCJhbHBoYS1zaGFwZSIpLGg9dCgiY29udmV4LWh1bGwiKSxkPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxwPW4ucHJvdG90eXBlO3AuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV0sITB9fSxwLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KX12YXIgcj10aGlzLnNjZW5lLG49ci5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIHMsbD1vKGUobi54YXhpcyx0Lngsci5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLGUobi55YXhpcyx0Lnksci5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLGUobi56YXhpcyx0Lnosci5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKTtpZih0LmkmJnQuaiYmdC5rKXM9byh0LmksdC5qLHQuayk7ZWxzZSBpZigwPT09dC5hbHBoYWh1bGwpcz1oKGwpO2Vsc2UgaWYodC5hbHBoYWh1bGw+MClzPWYodC5hbHBoYWh1bGwsbCk7ZWxzZXt2YXIgYz1bIngiLCJ5IiwieiJdLmluZGV4T2YodC5kZWxhdW5heWF4aXMpO3M9dShsLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFsoYysxKSUzXSx0WyhjKzIpJTNdXX0pKX12YXIgcD17cG9zaXRpb25zOmwsY2VsbHM6cyxsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6ZCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307dC5pbnRlbnNpdHk/KHRoaXMuY29sb3I9IiNmZmYiLHAudmVydGV4SW50ZW5zaXR5PXQuaW50ZW5zaXR5LHAudmVydGV4SW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSxwLmNvbG9ybWFwPWkodC5jb2xvcnNjYWxlKSk6dC52ZXJ0ZXhjb2xvcj8odGhpcy5jb2xvcj10LnZlcnRleGNvbG9yWzBdLApwLnZlcnRleENvbG9ycz1hKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSxwLmNlbGxDb2xvcnM9YSh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3IscC5tZXNoQ29sb3I9ZCh0LmNvbG9yKSksdGhpcy5tZXNoLnVwZGF0ZShwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPXN9LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2LCJhbHBoYS1zaGFwZSI6NDQsImNvbnZleC1odWxsIjoxMDIsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxMjMsImdsLW1lc2gzZCI6MjA5LHRpbnljb2xvcjI6NTQyfV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1sKHQpO3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUpP2U6bnVsbH0pO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD09PWVbMF0ubGVuZ3RofSkmJmV9dmFyIHU9YyhbIngiLCJ5IiwieiJdKSxmPWMoWyJpIiwiaiIsImsiXSk7aWYoIXUpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtmJiZmLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXXw9MH0pLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0scyksWyJsaWdodGluZy5hbWJpZW50IiwibGlnaHRpbmcuZGlmZnVzZSIsImxpZ2h0aW5nLnNwZWN1bGFyIiwibGlnaHRpbmcucm91Z2huZXNzIiwibGlnaHRpbmcuZnJlc25lbCIsImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uIiwibGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiY29udG91ci5zaG93IiwiY29udG91ci5jb2xvciIsImNvbnRvdXIud2lkdGgiLCJjb2xvcnNjYWxlIiwicmV2ZXJzZXNjYWxlIiwiZmxhdHNoYWRpbmciLCJhbHBoYWh1bGwiLCJkZWxhdW5heWF4aXMiLCJvcGFjaXR5Il0uZm9yRWFjaChmdW5jdGlvbih0KXtsKHQpfSksImludGVuc2l0eSJpbiB0PyhsKCJpbnRlbnNpdHkiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pKTooZS5zaG93c2NhbGU9ITEsImZhY2Vjb2xvciJpbiB0P2woImZhY2Vjb2xvciIpOiJ2ZXJ0ZXhjb2xvciJpbiB0P2woInZlcnRleGNvbG9yIik6bCgiY29sb3IiLHIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjAsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuL2F0dHJpYnV0ZXMiOjk5N31dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJtZXNoM2QiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODE4LCIuL2F0dHJpYnV0ZXMiOjk5NywiLi9jYWxjIjo5OTgsIi4vY29sb3JiYXIiOjk5OSwiLi9jb252ZXJ0IjoxZTMsIi4vZGVmYXVsdHMiOjEwMDF9XSwxMDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjppKHt9LHMuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOnMud2lkdGgsZGFzaDpvLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fXZhciBpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPWEubGluZTtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGhpZ2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxsb3c6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e3dpZHRoOmkoe30scy53aWR0aCx7fSksZGFzaDppKHt9LG8se30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6bigiIzNEOTk3MCIpLGRlY3JlYXNpbmc6bigiI0ZGNDEzNiIpLHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYzNCwiLi4vLi4vbGliIjo3MzUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTA0NX1dLDEwMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtvKHQsZSxyLG4pLHIobisiLmxpbmUuY29sb3IiKSxyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmxpbmUuZGFzaCIsZS5saW5lLmRhc2gpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9vaGxjX2RlZmF1bHRzIiksbz10KCIuL2RpcmVjdGlvbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfWlmKGwucHVzaER1bW15VHJhbnNmb3JtT3B0cyh0LGUpLDA9PT1hKHQsZSxjLG8pKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7YygibGluZS53aWR0aCIpLGMoImxpbmUuZGFzaCIpLG4odCxlLGMsImluY3JlYXNpbmciKSxuKHQsZSxjLCJkZWNyZWFzaW5nIiksYygidGV4dCIpLGMoInRpY2t3aWR0aCIpfX0seyIuLi8uLi9saWIiOjczNSwiLi9hdHRyaWJ1dGVzIjoxMDAzLCIuL2RpcmVjdGlvbl9kZWZhdWx0cyI6MTAwNSwiLi9oZWxwZXJzIjoxMDA2LCIuL29obGNfZGVmYXVsdHMiOjEwMDh9XSwxMDA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyKG4rIi5zaG93bGVnZW5kIiksdC5zaG93bGVnZW5kPT09ITEmJihlW25dLnNob3dsZWdlbmQ9ITEpLHIobisiLm5hbWUiLGUubmFtZSsiIC0gIituKX19LHt9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PT09ZT9lPm8/YT0hMDplPG8mJihhPSExKTphPXQ8ZSxvPWUsYX1mdW5jdGlvbiByKHQscil7cmV0dXJuIGkodCkmJmkocikmJmUoK3QsK3IpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gaSh0KSYmaShyKSYmIWUoK3QsK3IpfXZhciBhPSEwLG89bnVsbDtyZXR1cm4iaW5jcmVhc2luZyI9PT10P3I6bn12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIik7ci5wdXNoRHVtbXlUcmFuc2Zvcm1PcHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e3R5cGU6ZS50eXBlLF9lcGhlbWVyYWw6ITB9O0FycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKT90LnRyYW5zZm9ybXMucHVzaChyKTp0LnRyYW5zZm9ybXM9W3JdfSxyLmNsZWFyRXBoZW1lcmFsVHJhbnNmb3JtT3B0cz1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5fZXBoZW1lcmFsJiZlLnNwbGljZShyLDEpOzA9PT1lLmxlbmd0aCYmZGVsZXRlIHQudHJhbnNmb3Jtc319LHIuY29weU9ITEM9ZnVuY3Rpb24odCxlKXt0Lm9wZW4mJihlLm9wZW49dC5vcGVuKSx0LmhpZ2gmJihlLmhpZ2g9dC5oaWdoKSx0LmxvdyYmKGUubG93PXQubG93KSx0LmNsb3NlJiYoZS5jbG9zZT10LmNsb3NlKX0sci5tYWtlVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hLmV4dGVuZEZsYXQoW10sdC50cmFuc2Zvcm1zKTtyZXR1cm4gbltlLnRyYW5zZm9ybUluZGV4XT17dHlwZTp0LnR5cGUsZGlyZWN0aW9uOnIsb3Blbjp0Lm9wZW4saGlnaDp0LmhpZ2gsbG93OnQubG93LGNsb3NlOnQuY2xvc2V9LG59LHIuZ2V0RmlsdGVyRm49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfSxyLmFkZFJhbmdlU2xpZGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSExLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLnZpc2libGU9PT0hMCl7cj0hMDticmVha31yJiYoZS54YXhpc3x8KGUueGF4aXM9e30pLGUueGF4aXMucmFuZ2VzbGlkZXJ8fChlLnhheGlzLnJhbmdlc2xpZGVyPXt9KSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sMTAwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9yZWdpc3RlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKX0sbih0KCIuLi9zY2F0dGVyIikpLG4odCgiLi90cmFuc2Zvcm0iKSl9LHsiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiOjc2OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL3NjYXR0ZXIiOjEwNTYsIi4vYXR0cmlidXRlcyI6MTAwMywiLi9kZWZhdWx0cyI6MTAwNCwiLi90cmFuc2Zvcm0iOjEwMDl9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG89cigieCIpLHM9cigib3BlbiIpLGw9cigiaGlnaCIpLGM9cigibG93IiksdT1yKCJjbG9zZSIpO3JldHVybiBuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiXSxpKSxhPU1hdGgubWluKHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoLHUubGVuZ3RoKSxvJiYoYT1NYXRoLm1pbihhLG8ubGVuZ3RoKSk8by5sZW5ndGgmJihlLng9by5zbGljZSgwLGEpKSxhPHMubGVuZ3RoJiYoZS5vcGVuPXMuc2xpY2UoMCxhKSksYTxsLmxlbmd0aCYmKGUuaGlnaD1sLnNsaWNlKDAsYSkpLGE8Yy5sZW5ndGgmJihlLmxvdz1jLnNsaWNlKDAsYSkpLGE8dS5sZW5ndGgmJihlLmNsb3NlPXUuc2xpY2UoMCxhKSksYX19LHsiLi4vLi4vcmVnaXN0cnkiOjg1M31dLDEwMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49e3R5cGU6InNjYXR0ZXIiLG1vZGU6ImxpbmVzIixjb25uZWN0Z2FwczohMSx2aXNpYmxlOnQudmlzaWJsZSxvcGFjaXR5OnQub3BhY2l0eSx4YXhpczp0LnhheGlzLHlheGlzOnQueWF4aXMsaG92ZXJpbmZvOmkodCksdHJhbnNmb3JtczpsLm1ha2VUcmFuc2Zvcm0odCxlLHIpfSxhPXRbcl07cmV0dXJuIGEmJnMuZXh0ZW5kRmxhdChuLHt4OnQueHx8WzBdLHhjYWxlbmRhcjp0LnhjYWxlbmRhcix5OltdLmNvbmNhdCh0LmxvdykuY29uY2F0KHQuaGlnaCksdGV4dDp0LnRleHQsbmFtZTphLm5hbWUsc2hvd2xlZ2VuZDphLnNob3dsZWdlbmQsbGluZTphLmxpbmV9KSxufWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5ob3ZlcmluZm87aWYoImFsbCI9PT1lKXJldHVybiJ4K3RleHQrbmFtZSI7dmFyIHI9ZS5zcGxpdCgiKyIpLG49ci5pbmRleE9mKCJ5IiksaT1yLmluZGV4T2YoInRleHQiKTtyZXR1cm4gbiE9PS0xJiYoci5zcGxpY2UobiwxKSxpPT09LTEmJnIucHVzaCgidGV4dCIpKSxyLmpvaW4oIisiKX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj1yLl9mdWxsSW5wdXQsaT1uLnRpY2t3aWR0aCxhPW4uX21pbkRpZmY7aWYoIWEpe3ZhciBvPXQuX2Z1bGxEYXRhLGw9W107YT0xLzA7dmFyIGM7Zm9yKGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIHU9b1tjXS5fZnVsbElucHV0O2lmKCJvaGxjIj09PXUudHlwZSYmdS52aXNpYmxlPT09ITAmJnUueGF4aXM9PT1lLl9pZCYmKGwucHVzaCh1KSx1LngmJnUueC5sZW5ndGg+MSkpe3ZhciBmPXMuc2ltcGxlTWFwKHUueCxlLmQyYywwLHIueGNhbGVuZGFyKSxoPXMuZGlzdGluY3RWYWxzKGYpLm1pbkRpZmY7YT1NYXRoLm1pbihhLGgpfX1mb3IoYT09PTEvMCYmKGE9MSksYz0wO2M8bC5sZW5ndGg7YysrKWxbY10uX21pbkRpZmY9YX1yZXR1cm4gYSppfXZhciBvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4vaGVscGVycyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9Im9obGMiLHIuYXR0cmlidXRlcz17fSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBsLmNsZWFyRXBoZW1lcmFsVHJhbnNmb3JtT3B0cyhuKSxsLmNvcHlPSExDKHQsZSksdH0sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOyJvaGxjIj09PWEudHlwZT9yLnB1c2gobihhLGUsImluY3JlYXNpbmciKSxuKGEsZSwiZGVjcmVhc2luZyIpKTpyLnB1c2goYSl9cmV0dXJuIGwuYWRkUmFuZ2VTbGlkZXIocixlLmxheW91dCkscn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXIuZGlyZWN0aW9uLHM9bC5nZXRGaWx0ZXJGbihpKSxmPXUuZ2V0RnJvbVRyYWNlKHQsZSwieCIpLGg9dS5nZXRGcm9tVHJhY2UodCxlLCJ5IiksZD1hKHQsZixlKSxwPWUub3BlbixtPWUuaGlnaCx2PWUubG93LGc9ZS5jbG9zZSx5PWUudGV4dCxiPXAubGVuZ3RoLHg9W10sXz1bXSx3PVtdO249ZS5fZnVsbElucHV0Lng/ZnVuY3Rpb24odCl7dmFyIHI9ZS54W3RdLG49ZS54Y2FsZW5kYXIsaT1mLmQyYyhyLDAsbik7eC5wdXNoKGYuYzJkKGktZCwwLG4pLHIscixyLHIsZi5jMmQoaStkLDAsbiksbnVsbCl9OmZ1bmN0aW9uKHQpe3gucHVzaCh0LWQsdCx0LHQsdCx0K2QsbnVsbCl9O2Zvcih2YXIgTT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnRpY2tUZXh0KHQsdC5jMmwoZSksImhvdmVyIikudGV4dH0sVD1lLl9mdWxsSW5wdXQuaG92ZXJpbmZvLGs9VC5zcGxpdCgiKyIpLEE9ImFsbCI9PT1ULEU9QXx8ay5pbmRleE9mKCJ5IikhPT0tMSxTPUF8fGsuaW5kZXhPZigidGV4dCIpIT09LTEsTD1BcnJheS5pc0FycmF5KHkpP2Z1bmN0aW9uKHQpe3JldHVybiB5W3RdfHwiIn06ZnVuY3Rpb24oKXtyZXR1cm4geX0sQz0wO0M8YjtDKyspcyhwW0NdLGdbQ10pJiZvKG1bQ10pJiZvKHZbQ10pJiYobihDKSxmdW5jdGlvbih0LGUscixuKXtfLnB1c2godCx0LGUscixuLG4sbnVsbCl9KHBbQ10sbVtDXSx2W0NdLGdbQ10pLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9W107RSYmKGEucHVzaCgiT3BlbjogIitNKGgsZSkpLGEucHVzaCgiSGlnaDogIitNKGgscikpLGEucHVzaCgiTG93OiAiK00oaCxuKSksYS5wdXNoKCJDbG9zZTogIitNKGgsaSkpKSxTJiZhLnB1c2goTCh0KSk7dmFyIG89YS5qb2luKCI8YnI+Iik7dy5wdXNoKG8sbyxvLG8sbyxvLG51bGwpfShDLHBbQ10sbVtDXSx2W0NdLGdbQ10pKTtlLng9eCxlLnk9XyxlLnRleHQ9d319LHsiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzgyLCIuL2hlbHBlcnMiOjEwMDYsImZhc3QtaXNudW1lcmljIjoxMzF9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIiksYz1sLmV4dGVuZERlZXBBbGwsdT1sLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtkb21haW46e3g6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn1dLGRmbHQ6WzAsMV0sZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxsYWJlbGZvbnQ6cyh7ZWRpdFR5cGU6ImNhbGMifSksdGlja2ZvbnQ6cyh7ZWRpdFR5cGU6ImNhbGMifSkscmFuZ2Vmb250OnMoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczp1KHt9LG8udGlja3ZhbHMse2VkaXRUeXBlOiJjYWxjIn0pLHRpY2t0ZXh0OnUoe30sby50aWNrdGV4dCx7ZWRpdFR5cGU6ImNhbGMifSksdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIzcyIsZWRpdFR5cGU6ImNhbGMifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbGluZTp1KGMobigibGluZSIsImNhbGMiKSx7Y29sb3JzY2FsZTp7ZGZsdDphLlZpcmlkaXN9LGF1dG9jb2xvcnNjYWxlOntkZmx0OiExfX0pLHtzaG93c2NhbGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjb2xvcmJhcjppLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYxMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYxOCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NjI5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzkwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwM31dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz10KCIuL2NvbnN0YW50cyIpO3IubmFtZT0icGFyY29vcmRzIixyLmF0dHI9InR5cGUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pLmdldFN1YnBsb3RDYWxjRGF0YSh0LmNhbGNkYXRhLCJwYXJjb29yZHMiLCJwYXJjb29yZHMiKTtlLmxlbmd0aCYmYSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjb29yZHMiKSxhPWUuX2hhcyYmZS5faGFzKCJwYXJjb29yZHMiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lLWxheWVycyIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lLWxheWVycyIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3JkcyIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3JkcyIpLnJlbW92ZSgpLG4uX2dsaW1hZ2VzLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXRoaXMsaT1uLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIiksYT1yLmFwcGVuZCgic3ZnOmltYWdlIiksbD10Ll9mdWxsTGF5b3V0Ll9zaXplLGM9dC5fZnVsbERhdGFbZS5tb2RlbC5rZXldLmRvbWFpbjthLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjppLHg6bC5sK2wudypjLnhbMF0tcy5vdmVyZHJhZyx5OmwudCtsLmgqKDEtYy55WzFdKSx3aWR0aDooYy54WzFdLWMueFswXSkqbC53KzIqcy5vdmVyZHJhZyxoZWlnaHQ6KGMueVsxXS1jLnlbMF0pKmwuaCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciByPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO2kuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1pLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIucGFyY29vcmRzLWxpbmVzLmNvbnRleHQsIC5wYXJjb29yZHMtbGluZXMuZm9jdXMiKS5lYWNoKGUpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuYXR0cigiaWQiLCJmaWx0ZXJCYXJQYXR0ZXJuIil9LDYwKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcxNiwiLi4vLi4vcGxvdHMvcGxvdHMiOjgzOCwiLi9jb25zdGFudHMiOjEwMTQsIi4vcGxvdCI6MTAxOSxkMzoxMjF9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL2d1cCIpLndyYXA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ISFlLmxpbmUuY29sb3JzY2FsZSYmYS5pc0FycmF5KGUubGluZS5jb2xvcikscz1yP2UubGluZS5jb2xvcjpBcnJheS5hcHBseSgwLEFycmF5KGUuZGltZW5zaW9ucy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnZhbHVlcy5sZW5ndGgpfSwwKSkpLm1hcChmdW5jdGlvbigpe3JldHVybi41fSksbD1yP2UubGluZS5jb2xvcnNjYWxlOltbMCxlLmxpbmUuY29sb3JdLFsxLGUubGluZS5jb2xvcl1dO3JldHVybiBuKGUsImxpbmUiKSYmaShlLGUubGluZS5jb2xvciwibGluZSIsImMiKSxvKHtsaW5lQ29sb3I6cyxjc2NhbGU6bH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjE3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYyNCwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi9ndXAiOjczMn1dLDEwMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPXIubGluZSxjPSJjYiIrci51aWQ7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYykucmVtb3ZlKCksdm9pZCAwPT09bHx8IWwuc2hvd3NjYWxlKXJldHVybiB2b2lkIGEuYXV0b01hcmdpbih0LGMpO3ZhciB1PWwuY29sb3IsZj1sLmNtaW4saD1sLmNtYXg7bihmKXx8KGY9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdSkpLG4oaCl8fChoPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHUpKTt2YXIgZD1lWzBdLnQuY2I9cyh0LGMpLHA9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUobC5jb2xvcnNjYWxlLGYsaCkse25vTnVtZXJpY0NoZWNrOiEwfSk7ZC5maWxsY29sb3IocCkuZmlsbGxldmVscyh7c3RhcnQ6ZixlbmQ6aCxzaXplOihoLWYpLzI1NH0pLm9wdGlvbnMobC5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MTQsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI1LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgzOCwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxzY2F0dGVyOiExLGxheWVyczpbImNvbnRleHRMaW5lTGF5ZXIiLCJmb2N1c0xpbmVMYXllciIsInBpY2tMaW5lTGF5ZXIiXSxheGlzVGl0bGVPZmZzZXQ6MjgsYXhpc0V4dGVudE9mZnNldDoxMCxiYXI6e3dpZHRoOjQsY2FwdHVyZXdpZHRoOjEwLGZpbGxjb2xvcjoibWFnZW50YSIsZmlsbG9wYWNpdHk6MSxzdHJva2Vjb2xvcjoid2hpdGUiLHN0cm9rZW9wYWNpdHk6MSxzdHJva2V3aWR0aDoxLGhhbmRsZWhlaWdodDoxNixoYW5kbGVvcGFjaXR5OjEsaGFuZGxlb3ZlcmxhcDowfSxjbjp7YXhpc0V4dGVudFRleHQ6ImF4aXMtZXh0ZW50LXRleHQiLHBhcmNvb3Jkc0xpbmVMYXllcnM6InBhcmNvb3Jkcy1saW5lLWxheWVycyIscGFyY29vcmRzTGluZUxheWVyOiJwYXJjb29yZHMtbGluZXMiLHBhcmNvb3JkczoicGFyY29vcmRzIixwYXJjb29yZHNDb250cm9sVmlldzoicGFyY29vcmRzLWNvbnRyb2wtdmlldyIseUF4aXM6InktYXhpcyIsYXhpc092ZXJsYXlzOiJheGlzLW92ZXJsYXlzIixheGlzOiJheGlzIixheGlzSGVhZGluZzoiYXhpcy1oZWFkaW5nIixheGlzVGl0bGU6ImF4aXMtdGl0bGUiLGF4aXNFeHRlbnQ6ImF4aXMtZXh0ZW50IixheGlzRXh0ZW50VG9wOiJheGlzLWV4dGVudC10b3AiLGF4aXNFeHRlbnRUb3BUZXh0OiJheGlzLWV4dGVudC10b3AtdGV4dCIsYXhpc0V4dGVudEJvdHRvbToiYXhpcy1leHRlbnQtYm90dG9tIixheGlzRXh0ZW50Qm90dG9tVGV4dDoiYXhpcy1leHRlbnQtYm90dG9tLXRleHQiLGF4aXNCcnVzaDoiYXhpcy1icnVzaCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOiJmaWx0ZXItYmFyLXBhdHRlcm4ifX19LHt9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXtpKCJsaW5lLmNvbG9yIixyKSxzKHQsImxpbmUiKSYmYS5pc0FycmF5KHQubGluZS5jb2xvcik/KGkoImxpbmUuY29sb3JzY2FsZSIpLGwodCxlLG4saSx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSk6aSgibGluZS5jb2xvciIscil9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gYS5jb2VyY2UobixpLG8uZGltZW5zaW9ucyx0LGUpfXZhciBuLGkscyxsPXQuZGltZW5zaW9uc3x8W10sdT1lLmRpbWVuc2lvbnM9W10sZj0xLzA7Zm9yKGwubGVuZ3RoPmMmJihhLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIrYysiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGwuc3BsaWNlKGMpKSxzPTA7czxsLmxlbmd0aDtzKyspaWYobj1sW3NdLGk9e30sYS5pc1BsYWluT2JqZWN0KG4pKXt2YXIgaD1yKCJ2YWx1ZXMiKSxkPXIoInZpc2libGUiLGgubGVuZ3RoPjApO2QmJihyKCJsYWJlbCIpLHIoInRpY2t2YWxzIikscigidGlja3RleHQiKSxyKCJ0aWNrZm9ybWF0IikscigicmFuZ2UiKSxyKCJjb25zdHJhaW50cmFuZ2UiKSxmPU1hdGgubWluKGYsaS52YWx1ZXMubGVuZ3RoKSksaS5faW5kZXg9cyx1LnB1c2goaSl9aWYoaXNGaW5pdGUoZikpZm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpPXVbc10saS52aXNpYmxlJiZpLnZhbHVlcy5sZW5ndGg+ZiYmKGkudmFsdWVzPWkudmFsdWVzLnNsaWNlKDAsZikpO3JldHVybiB1fXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGM9dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBjPWkodCxlKTtuKHQsZSxyLHMsbCksbCgiZG9tYWluLngiKSxsKCJkb21haW4ueSIpLEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RofHwoZS52aXNpYmxlPSExKTt2YXIgdT17ZmFtaWx5OnMuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKHMuZm9udC5zaXplKigxMC8xMikpLGNvbG9yOnMuZm9udC5jb2xvcn07YS5jb2VyY2VGb250KGwsImxhYmVsZm9udCIsdSksYS5jb2VyY2VGb250KGwsInRpY2tmb250Iix1KSxhLmNvZXJjZUZvbnQobCwicmFuZ2Vmb250Iix1KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NjI0LCIuLi8uLi9saWIiOjczNSwiLi9hdHRyaWJ1dGVzIjoxMDEwLCIuL2NvbnN0YW50cyI6MTAxNH1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJwYXJjb29yZHMiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJnbCIsIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuL2F0dHJpYnV0ZXMiOjEwMTAsIi4vYmFzZV9wbG90IjoxMDExLCIuL2NhbGMiOjEwMTIsIi4vY29sb3JiYXIiOjEwMTMsIi4vZGVmYXVsdHMiOjEwMTUsIi4vcGxvdCI6MTAxOX1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGEodCxlLHIsYSxvLHMpe2Z1bmN0aW9uIGwobil7dmFyIHU7dT1NYXRoLm1pbihhLG8tbiphKSxzLm9mZnNldD1nKm4qYSxzLmNvdW50PWcqdSwwPT09biYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyLmN1cnJlbnRSYWZzW2NdKSxkZWxldGUgci5jdXJyZW50UmFmc1tjXSxpKHQscy5zY2lzc29yWCxzLnNjaXNzb3JZLHMuc2Npc3NvcldpZHRoLHMudmlld0JveFNpemVbMV0pKSxyLmNsZWFyT25seXx8KGUocyksbiphK3U8byYmKHIuY3VycmVudFJhZnNbY109d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2wobisxKX0pKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfXZhciBjPXMua2V5O3IuZHJhd0NvbXBsZXRlZHx8KG4odCksci5kcmF3Q29tcGxldGVkPSEwKSxsKDApfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGgubWF4KG0sTWF0aC5taW4oMS1tLHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8MjU2O2krKyl7dmFyIGE9dChpLzI1NSk7bi5wdXNoKChlP2I6YSkuY29uY2F0KHIpKX1yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8dDthKyspZm9yKHZhciBzPTA7czx2O3MrKylpLnB1c2goczxlP3Jbc10ucGFkZGVkVW5pdFZhbHVlc1thXTpzPT09di0xP28oblthXSk6cz49di00P2woYSx2LTItcyk6LjUpO3JldHVybiBpfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuLGksYSxvPVtdO2ZvcihpPTA7aTx0O2krKylmb3IoYT0wO2E8ZzthKyspZm9yKG49MDtuPHk7bisrKW8ucHVzaChlW2kqdityKnkrbl0pLHIqeStuPT09di0xJiZhJTI9PTAmJihvW28ubGVuZ3RoLTFdKj0tMSk7cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3ZhciByPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1XSxuPXIubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB1KHQsZSxyKX0pLGk9e307cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0LGUpe2lbInAiK2UudG9TdHJpbmcoMTYpXT10fSksaX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdCtlPD1yfXZhciBkPXQoInJlZ2wiKSxwPXQoIi4vY29uc3RhbnRzIikudmVydGljYWxQYWRkaW5nLG09MWUtNix2PTY0LGc9Mix5PTQsYj1bMTE5LDExOSwxMTldLHg9bmV3IFVpbnQ4QXJyYXkoNCksXz1uZXcgVWludDhBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixvLGwsdSxtLHYsZyl7ZnVuY3Rpb24geSh0KXtqWzBdPXRbMF0salsxXT10WzFdfWZ1bmN0aW9uIGIodCxlLGksYSxvLHMsbCxjLHUsZixkKXt2YXIgdixnLHksYix4PVt0LGVdLF89cC9zLHc9WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSksTT1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3Iodj0wO3Y8Mjt2KyspZm9yKGI9eFt2XSxnPTA7Zzw0O2crKylmb3IoeT0wO3k8MTY7eSsrKXt2YXIgVD15KzE2Kmc7d1t2XVtnXVt5XT15KzE2Kmc9PT1iPzE6MCxNW3ZdW2ddW3ldPSghbSYmaCh5LDE2KmcsRCk/a1swPT09VD8wOjErKFQtMSklKGsubGVuZ3RoLTEpXS5maWx0ZXJbdl06dikrKDIqdi0xKSpffXJldHVybntrZXk6bCxyZXNvbHV0aW9uOltyLG5dLHZpZXdCb3hQb3NpdGlvbjpbaStJLGFdLHZpZXdCb3hTaXplOltvLHNdLGk6dCxpaTplLGRpbTFBOndbMF1bMF0sZGltMUI6d1swXVsxXSxkaW0xQzp3WzBdWzJdLGRpbTFEOndbMF1bM10sZGltMkE6d1sxXVswXSxkaW0yQjp3WzFdWzFdLGRpbTJDOndbMV1bMl0sZGltMkQ6d1sxXVszXSxsb0E6TVswXVswXSxsb0I6TVswXVsxXSxsb0M6TVswXVsyXSxsb0Q6TVswXVszXSxoaUE6TVsxXVswXSxoaUI6TVsxXVsxXSxoaUM6TVsxXVsyXSxoaUQ6TVsxXVszXSxjb2xvckNsYW1wOmosc2NhdHRlcjpjfHwwLHNjaXNzb3JYOnU9PT1mPzA6aStJLHNjaXNzb3JXaWR0aDoodT09PWQ/ci1pK0k6bysuNSkrKHU9PT1mP2krSTowKSxzY2lzc29yWTphLHNjaXNzb3JIZWlnaHQ6c319ZnVuY3Rpb24geCh0LG8scyl7dmFyIGwsYyx1LGY9MS8wLGg9LSgxLzApO2ZvcihsPTA7bDxEO2wrKyl0W2xdLmRpbTIuY2FudmFzWD5oJiYoaD10W2xdLmRpbTIuY2FudmFzWCx1PWwpLHRbbF0uZGltMS5jYW52YXNYPGYmJihmPXRbbF0uZGltMS5jYW52YXNYLGM9bCk7Zm9yKDA9PT1EJiZpKE8sMCwwLHIsbiksbD0wO2w8RDtsKyspe3ZhciBkPXRbbF0scD1kLmRpbTEsbT1wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsdj1kLmNhbnZhc1gseT1kLmNhbnZhc1kseD1kLmRpbTIsXz14LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsdz1kLnBhbmVsU2l6ZVgsTT1kLnBhbmVsU2l6ZVksaz12K3c7aWYob3x8IU5bbV18fE5bbV1bMF0hPT12fHxOW21dWzFdIT09ayl7TlttXT1bdixrXTt2YXIgQT1iKG0sXyx2LHksdyxNLHAuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxnfHxwLnNjYXR0ZXI/MTowLGwsYyx1KTtULmNsZWFyT25seT1zLGEoTyxGLFQsbz9lLmJsb2NrTGluZUNvdW50OkUsRSxBKX19fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gTy5yZWFkKHt4OnQseTplLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTpffSksX31mdW5jdGlvbiBNKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gTy5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX12YXIgVD17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LGs9by5zbGljZSgpLEE9ay5sZW5ndGgsRT1rWzBdP2tbMF0udmFsdWVzLmxlbmd0aDowLFM9bSxMPXY/ZS5jb2xvci5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pOmUuY29sb3IsQz1NYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL0wubGVuZ3RoLDEvMykpLEk9ZS5jYW52YXNPdmVyZHJhZyxEPWwubGVuZ3RoLFA9YyhFLEEsayxMKSx6PWYoRSxQKSxPPWQoe2NhbnZhczp0LGF0dHJpYnV0ZXM6e3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxhbnRpYWxpYXM6IXZ9fSksUj1PLnRleHR1cmUoe3NoYXBlOlsyNTYsMV0sZm9ybWF0OiJyZ2JhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QiLGRhdGE6cyh1LG0sTWF0aC5yb3VuZCgyNTUqKG0/QzoxKSkpfSksRj1PKHtwcm9maWxlOiExLGJsZW5kOntlbmFibGU6UyxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohUyxtYXNrOiEwLGZ1bmM6Imxlc3MiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6e3g6Ty5wcm9wKCJzY2lzc29yWCIpLHk6Ty5wcm9wKCJzY2lzc29yWSIpLHdpZHRoOk8ucHJvcCgic2Npc3NvcldpZHRoIiksaGVpZ2h0Ok8ucHJvcCgic2Npc3NvckhlaWdodCIpfX0sZGl0aGVyOiExLHZlcnQ6dj8icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XG5cbnVuaWZvcm0gZmxvYXQgc2NhdHRlcjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcbnZlYzQgdW5pdCA9IHZlYzQoMSwgMSwgMSwgMSk7XG52ZWMyIHh5UHJvamVjdGlvbiA9IHZlYzIoMSwgMSk7XG5cbm1hdDQgbWNsYW1wKG1hdDQgbSwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiBtYXQ0KGNsYW1wKG1bMF0sIGxvWzBdLCBoaVswXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsxXSwgbG9bMV0sIGhpWzFdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzJdLCBsb1syXSwgaGlbMl0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bM10sIGxvWzNdLCBoaVszXSkpO1xufVxuXG5ib29sIG1zaG93KG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiBtY2xhbXAocCwgbG8sIGhpKSA9PSBwO1xufVxuXG5mbG9hdCB2YWwobWF0NCBwLCBtYXQ0IHYpIHtcbiAgICByZXR1cm4gZG90KG1hdHJpeENvbXBNdWx0KHAsIHYpICogdW5pdCwgdW5pdCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIGZsb2F0IHggPSAwLjUgKiBzaWduKHBmWzNdKSArIDAuNTtcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcbiAgICBmbG9hdCBkZXB0aCA9IDEuMCAtIHByb21pbmVuY2U7XG5cbiAgICBtYXQ0IHBBID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XG4gICAgbWF0NCBwQiA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xuICAgIG1hdDQgcEMgPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcbiAgICBtYXQ0IHBEID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcblxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChtc2hvdyhwQSwgbG9BLCBoaUEpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBCLCBsb0IsIGhpQikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEMsIGxvQywgaGlDKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwRCwgbG9ELCBoaUQpKTtcblxuICAgIHZlYzIgeXkgPSBzaG93ICogdmVjMih2YWwocEEsIGRpbTJBKSArIHZhbChwQiwgZGltMkIpICsgdmFsKHBDLCBkaW0yQykgKyB2YWwocEQsIGRpbTJEKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsKHBBLCBkaW0xQSkgKyB2YWwocEIsIGRpbTFCKSArIHZhbChwQywgZGltMUMpICsgdmFsKHBELCBkaW0xRCkpO1xuXG4gICAgdmVjMiBkaW1lbnNpb25Ub2dnbGUgPSB2ZWMyKHgsIDEuMCAtIHgpO1xuXG4gICAgdmVjMiBzY2F0dGVyVG9nZ2xlID0gdmVjMihzY2F0dGVyLCAxLjAgLSBzY2F0dGVyKTtcblxuICAgIGZsb2F0IHkgPSBkb3QoeXksIGRpbWVuc2lvblRvZ2dsZSk7XG4gICAgbWF0MiB4eSA9IG1hdDIodmlld0JveFNpemUgKiB5eSArIGRpbWVuc2lvblRvZ2dsZSwgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpKTtcblxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgeHkgKiBzY2F0dGVyVG9nZ2xlO1xuXG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxuICAgICAgICBkZXB0aE9ySGlkZSxcbiAgICAgICAgMS4wXG4gICAgKTtcblxuICAgIC8vIHBpY2sgY29sb3JpbmdcbiAgICBmcmFnQ29sb3IgPSB2ZWM0KHBmLnJnYiwgMS4wKTtcbn1cbiI6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxuICAgICAgICAgICAgICAgcDQsIHA1LCBwNiwgcDcsXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XG5cbmF0dHJpYnV0ZSB2ZWM0IHBmO1xuXG51bmlmb3JtIG1hdDQgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG51bmlmb3JtIGZsb2F0IHNjYXR0ZXI7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgemVybyA9IHZlYzQoMCwgMCwgMCwgMCk7XG52ZWM0IHVuaXQgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXQsIHVuaXQpO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbihwZlszXSkgKyAwLjU7XG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG4gICAgZmxvYXQgZGVwdGggPSAxLjAgLSBwcm9taW5lbmNlO1xuXG4gICAgbWF0NCBwQSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIG1hdDQgcEIgPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBtYXQ0IHBDID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgbWF0NCBwRCA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBmbG9hdCBzaG93ID0gZmxvYXQobXNob3cocEEsIGxvQSwgaGlBKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwQiwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBDLCBsb0MsIGhpQykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEQsIGxvRCwgaGlEKSk7XG5cbiAgICB2ZWMyIHl5ID0gc2hvdyAqIHZlYzIodmFsKHBBLCBkaW0yQSkgKyB2YWwocEIsIGRpbTJCKSArIHZhbChwQywgZGltMkMpICsgdmFsKHBELCBkaW0yRCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbChwQSwgZGltMUEpICsgdmFsKHBCLCBkaW0xQikgKyB2YWwocEMsIGRpbTFDKSArIHZhbChwRCwgZGltMUQpKTtcblxuICAgIHZlYzIgZGltZW5zaW9uVG9nZ2xlID0gdmVjMih4LCAxLjAgLSB4KTtcblxuICAgIHZlYzIgc2NhdHRlclRvZ2dsZSA9IHZlYzIoc2NhdHRlciwgMS4wIC0gc2NhdHRlcik7XG5cbiAgICBmbG9hdCB5ID0gZG90KHl5LCBkaW1lbnNpb25Ub2dnbGUpO1xuICAgIG1hdDIgeHkgPSBtYXQyKHZpZXdCb3hTaXplICogeXkgKyBkaW1lbnNpb25Ub2dnbGUsIHZpZXdCb3hTaXplICogdmVjMih4LCB5KSk7XG5cbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHh5ICogc2NhdHRlclRvZ2dsZTtcblxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcbiAgICAgICAgZGVwdGhPckhpZGUsXG4gICAgICAgIDEuMFxuICAgICk7XG5cbiAgICAvLyB2aXNpYmxlIGNvbG9yaW5nXG4gICAgZmxvYXQgY2xhbXBlZENvbG9ySW5kZXggPSBjbGFtcCgocHJvbWluZW5jZSAtIGNvbG9yQ2xhbXBbMF0pIC8gKGNvbG9yQ2xhbXBbMV0gLSBjb2xvckNsYW1wWzBdKSwgMC4wLCAxLjApO1xuICAgIGZyYWdDb2xvciA9IHRleHR1cmUyRChwYWxldHRlLCB2ZWMyKChjbGFtcGVkQ29sb3JJbmRleCAqIDI1NS4wICsgMC41KSAvIDI1Ni4wLCAwLjUpKTtcbn1cbiIsZnJhZzoicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufVxuIixwcmltaXRpdmU6ImxpbmVzIixsaW5lV2lkdGg6MSxhdHRyaWJ1dGVzOnosdW5pZm9ybXM6e3Jlc29sdXRpb246Ty5wcm9wKCJyZXNvbHV0aW9uIiksdmlld0JveFBvc2l0aW9uOk8ucHJvcCgidmlld0JveFBvc2l0aW9uIiksdmlld0JveFNpemU6Ty5wcm9wKCJ2aWV3Qm94U2l6ZSIpLGRpbTFBOk8ucHJvcCgiZGltMUEiKSxkaW0yQTpPLnByb3AoImRpbTJBIiksZGltMUI6Ty5wcm9wKCJkaW0xQiIpLGRpbTJCOk8ucHJvcCgiZGltMkIiKSxkaW0xQzpPLnByb3AoImRpbTFDIiksZGltMkM6Ty5wcm9wKCJkaW0yQyIpLGRpbTFEOk8ucHJvcCgiZGltMUQiKSxkaW0yRDpPLnByb3AoImRpbTJEIiksbG9BOk8ucHJvcCgibG9BIiksaGlBOk8ucHJvcCgiaGlBIiksbG9COk8ucHJvcCgibG9CIiksaGlCOk8ucHJvcCgiaGlCIiksbG9DOk8ucHJvcCgibG9DIiksaGlDOk8ucHJvcCgiaGlDIiksbG9EOk8ucHJvcCgibG9EIiksaGlEOk8ucHJvcCgiaGlEIikscGFsZXR0ZTpSLGNvbG9yQ2xhbXA6Ty5wcm9wKCJjb2xvckNsYW1wIiksc2NhdHRlcjpPLnByb3AoInNjYXR0ZXIiKX0sb2Zmc2V0Ok8ucHJvcCgib2Zmc2V0IiksY291bnQ6Ty5wcm9wKCJjb3VudCIpfSksaj1bMCwxXSxOPVtdO3JldHVybntzZXRDb2xvckRvbWFpbjp5LHJlbmRlcjp4LHJlYWRQaXhlbDp3LHJlYWRQaXhlbHM6TSxkZXN0cm95Ok8uZGVzdHJveX19fSx7Ii4vY29uc3RhbnRzIjoxMDE0LHJlZ2w6NTA4fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiEoInZpc2libGUiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQucmFuZ2U/dC5yYW5nZVswXTpiLm1pbih0LnZhbHVlcykscj10LnJhbmdlP3QucmFuZ2VbMV06Yi5tYXgodC52YWx1ZXMpO3JldHVybiFpc05hTihlKSYmaXNGaW5pdGUoZSl8fChlPTApLCFpc05hTihyKSYmaXNGaW5pdGUocil8fChyPTApLGU9PT1yJiYodm9pZCAwPT09ZT8oZT0wLHI9MSk6MD09PWU/KGUtPTEscis9MSk6KGUqPS45LHIqPTEuMSkpLFtlLHJdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxvO2ZvcihyPTAsbj10LnJhbmdlKCksaT0xLzAsYT1uWzBdLG87cjxuLmxlbmd0aDtyKyspe2lmKChvPU1hdGguYWJzKG5bcl0tZSkpPmkpcmV0dXJuIGE7aT1vLGE9bltyXX1yZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoZSl7dmFyIGk9ZVtuXTtyZXR1cm4gbnVsbD09PWl8fHZvaWQgMD09PWk/dChyKTppfXJldHVybiB0KHIpfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1pKHIpLGE9ci50aWNrdGV4dDtyZXR1cm4gci50aWNrdmFscz9iLnNjYWxlLm9yZGluYWwoKS5kb21haW4oci50aWNrdmFscy5tYXAobyhiLmZvcm1hdChyLnRpY2tmb3JtYXQpLGEpKSkucmFuZ2Uoci50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtblswXSkvKG5bMV0tblswXSl9KS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHQtZStyKihlLSh0LWUpKX0pKTpiLnNjYWxlLmxpbmVhcigpLmRvbWFpbihuKS5yYW5nZShbdC1lLGVdKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGIuc2NhbGUubGluZWFyKCkucmFuZ2UoW3QtZSxlXSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gYi5zY2FsZS5saW5lYXIoKS5kb21haW4oaSh0KSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT1pKHQpO3JldHVybiB0LnRpY2t2YWxzJiZiLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9ZnVuY3Rpb24gZih0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSxuPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBiLnJnYih0KX0pLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfX0sYT0icmdiIi5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBiLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uobi5tYXAoaSh0KSkpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1NKGUpLGE9aS50cmFjZSxvPWkubGluZUNvbG9yLHM9aS5jc2NhbGUsbD1hLmxpbmUsdT1hLmRvbWFpbixoPWEuZGltZW5zaW9ucyxkPXQud2lkdGgscD1hLmxhYmVsZm9udCxtPWEudGlja2ZvbnQsdj1hLnJhbmdlZm9udCxiPXkuZXh0ZW5kRGVlcCh7fSxsLHtjb2xvcjpvLm1hcChjKHt2YWx1ZXM6byxyYW5nZTpbbC5jbWluLGwuY21heF19KSksYmxvY2tMaW5lQ291bnQ6Zy5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzpnLm92ZXJkcmFnKmcuY2FudmFzUGl4ZWxSYXRpb30pLHg9TWF0aC5mbG9vcihkKih1LnhbMV0tdS54WzBdKSksXz1NYXRoLmZsb29yKHQuaGVpZ2h0Kih1LnlbMV0tdS55WzBdKSksdz10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxUPXgsaz1fO3JldHVybntrZXk6cixjb2xDb3VudDpoLmZpbHRlcihuKS5sZW5ndGgsZGltZW5zaW9uczpoLHRpY2tEaXN0YW5jZTpnLnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpmKHMpLGxpbmVzOmIsbGFiZWxGb250OnAsdGlja0ZvbnQ6bSxyYW5nZUZvbnQ6dix0cmFuc2xhdGVYOnUueFswXSpkLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0LHBhZDp3LGNhbnZhc1dpZHRoOlQqZy5jYW52YXNQaXhlbFJhdGlvKzIqYi5jYW52YXNPdmVyZHJhZyxjYW52YXNIZWlnaHQ6aypnLmNhbnZhc1BpeGVsUmF0aW8sd2lkdGg6VCxoZWlnaHQ6ayxjYW52YXNQaXhlbFJhdGlvOmcuY2FudmFzUGl4ZWxSYXRpb319ZnVuY3Rpb24gZCh0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQsaT10LmRpbWVuc2lvbnMsYT10LmNhbnZhc1BpeGVsUmF0aW8sbz1mdW5jdGlvbihyKXtyZXR1cm4gZSpyL01hdGgubWF4KDEsdC5jb2xDb3VudC0xKX0sZj1nLnZlcnRpY2FsUGFkZGluZy8ociphKSxoPTEtMipmLGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYraCp0fSxwPXtrZXk6dC5rZXkseFNjYWxlOm8sbW9kZWw6dH0sbT17fTtyZXR1cm4gcC5kaW1lbnNpb25zPWkuZmlsdGVyKG4pLm1hcChmdW5jdGlvbihlLG4pe3ZhciBpPWMoZSksZj1tW2UubGFiZWxdO3JldHVybiBtW2UubGFiZWxdPShmfHwwKSsxLHtrZXk6ZS5sYWJlbCsoZj8iX18iK2Y6IiIpLGxhYmVsOmUubGFiZWwsdGlja0Zvcm1hdDplLnRpY2tmb3JtYXQsdGlja3ZhbHM6ZS50aWNrdmFscyx0aWNrdGV4dDplLnRpY2t0ZXh0LG9yZGluYWw6ISFlLnRpY2t2YWxzLHNjYXR0ZXI6Zy5zY2F0dGVyfHxlLnNjYXR0ZXIseEluZGV4Om4sY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpuLHZpc2libGVJbmRleDplLl9pbmRleCxoZWlnaHQ6cix2YWx1ZXM6ZS52YWx1ZXMscGFkZGVkVW5pdFZhbHVlczplLnZhbHVlcy5tYXAoaSkubWFwKGQpLHhTY2FsZTpvLHg6byhuKSxjYW52YXNYOm8obikqYSx1bml0U2NhbGU6bChyLGcudmVydGljYWxQYWRkaW5nKSxkb21haW5TY2FsZTpzKHIsZy52ZXJ0aWNhbFBhZGRpbmcsZSksb3JkaW5hbFNjYWxlOnUoZSksZG9tYWluVG9Vbml0U2NhbGU6aSxmaWx0ZXI6ZS5jb25zdHJhaW50cmFuZ2U/ZS5jb25zdHJhaW50cmFuZ2UubWFwKGkpOlswLDFdLHBhcmVudDpwLG1vZGVsOnR9fSkscH1mdW5jdGlvbiBwKHQpe3JldHVybiBnLmxheWVycy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2tleTplLGNvbnRleHQ6ImNvbnRleHRMaW5lTGF5ZXIiPT09ZSxwaWNrOiJwaWNrTGluZUxheWVyIj09PWUsdmlld01vZGVsOnQsbW9kZWw6dC5tb2RlbH19KX1mdW5jdGlvbiBtKHQpe3QuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpfXZhciB2PXQoIi4vbGluZXMiKSxnPXQoIi4vY29uc3RhbnRzIikseT10KCIuLi8uLi9saWIiKSxiPXQoImQzIikseD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxfPXQoIi4uLy4uL2xpYi9ndXAiKS5rZXlGdW4sdz10KCIuLi8uLi9saWIvZ3VwIikucmVwZWF0LE09dCgiLi4vLi4vbGliL2d1cCIpLnVud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCJkZWZzIikuZGF0YSh3LF8pO2UuZW50ZXIoKS5hcHBlbmQoImRlZnMiKTt2YXIgcj1lLnNlbGVjdEFsbCgiIyIrZy5pZC5maWx0ZXJCYXJQYXR0ZXJuKS5kYXRhKHcsXyk7ci5lbnRlcigpLmFwcGVuZCgicGF0dGVybiIpLmF0dHIoImlkIixnLmlkLmZpbHRlckJhclBhdHRlcm4pLmF0dHIoInBhdHRlcm5Vbml0cyIsInVzZXJTcGFjZU9uVXNlIiksci5hdHRyKCJ4IiwtZy5iYXIud2lkdGgpLmF0dHIoIndpZHRoIixnLmJhci5jYXB0dXJld2lkdGgpLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuaGVpZ2h0fSk7dmFyIG49ci5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHcsXyk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKSxuLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuaGVpZ2h0fSkuYXR0cigid2lkdGgiLGcuYmFyLndpZHRoKS5hdHRyKCJ4IixnLmJhci53aWR0aC8yKS5hdHRyKCJmaWxsIixnLmJhci5maWxsY29sb3IpLmF0dHIoImZpbGwtb3BhY2l0eSIsZy5iYXIuZmlsbG9wYWNpdHkpLmF0dHIoInN0cm9rZSIsZy5iYXIuc3Ryb2tlY29sb3IpLmF0dHIoInN0cm9rZS1vcGFjaXR5IixnLmJhci5zdHJva2VvcGFjaXR5KS5hdHRyKCJzdHJva2Utd2lkdGgiLGcuYmFyLnN0cm9rZXdpZHRoKX1mdW5jdGlvbiBzKHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZmlsdGVyWzBdfHwxIT09dC5maWx0ZXJbMV19KX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5lYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSlbZS5rZXldLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pLGk9bi5sZW5ndGgtMSxhPTA7YTwxO2ErKylmb3IodmFyIG89MDtvPGk7bysrKXt2YXIgcz1yW28rYSppXXx8KHJbbythKmldPXt9KSxsPW5bb10sYz1uW28rMV07cy5kaW0xPWwscy5kaW0yPWMscy5jYW52YXNYPWwuY2FudmFzWCxzLnBhbmVsU2l6ZVg9Yy5jYW52YXNYLWwuY2FudmFzWCxzLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQvMSxzLnk9YSpzLnBhbmVsU2l6ZVkscy5jYW52YXNZPWUubW9kZWwuY2FudmFzSGVpZ2h0LXMueS1zLnBhbmVsU2l6ZVl9fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksbj10LmVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHR9KVtlLmtleV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSksaT1uLmxlbmd0aC0xLGE9aSxvPTA7bzxpO28rKylmb3IodmFyIHM9MDtzPGk7cysrKXt2YXIgbD1yW3MrbyppXXx8KHJbcytvKmldPXt9KSxjPW5bc10sdT1uW3MrMV07bC5kaW0xPW5bbysxXSxsLmRpbTI9dSxsLmNhbnZhc1g9Yy5jYW52YXNYLGwucGFuZWxTaXplWD11LmNhbnZhc1gtYy5jYW52YXNYLGwucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodC9hLGwueT1vKmwucGFuZWxTaXplWSxsLmNhbnZhc1k9ZS5tb2RlbC5jYW52YXNIZWlnaHQtbC55LWwucGFuZWxTaXplWX19ZnVuY3Rpb24gdSh0LGUpe3JldHVybihnLnNjYXR0ZXI/YzpsKSh0LGUpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQub3JkaW5hbD9mdW5jdGlvbigpe3JldHVybiIifTpiLmZvcm1hdCh0LnRpY2tGb3JtYXQpfWZ1bmN0aW9uIHkoKXtYPSEwLEE9ITB9ZnVuY3Rpb24gVCh0KXtFPSExO3ZhciBlPXQucGFyZW50LHI9dC5icnVzaC5leHRlbnQoKSxuPWUuZGltZW5zaW9ucyxpPW5bdC54SW5kZXhdLmZpbHRlcixhPVgmJnJbMF09PT1yWzFdO2EmJih0LmJydXNoLmNsZWFyKCksYi5zZWxlY3QodGhpcykuc2VsZWN0KCJyZWN0LmV4dGVudCIpLmF0dHIoInkiLC0xMDApKTt2YXIgbz1hP1swLDFdOnIuc2xpY2UoKTtpZihvWzBdIT09aVswXXx8b1sxXSE9PWlbMV0pe25bdC54SW5kZXhdLmZpbHRlcj1vLGUuZm9jdXNMaW5lTGF5ZXImJmUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgbD1zKGUpOyFXJiZsPyhlLmNvbnRleHRMaW5lTGF5ZXImJmUuY29udGV4dExpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLFc9ITApOlcmJiFsJiYoZS5jb250ZXh0TGluZUxheWVyJiZlLmNvbnRleHRMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwLCEwKSxXPSExKX1YPSExfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5wYXJlbnQscj10LmJydXNoLmV4dGVudCgpLG49clswXT09PXJbMV0sbz1lLmRpbWVuc2lvbnMscz1vW3QueEluZGV4XS5maWx0ZXI7aWYoIW4mJnQub3JkaW5hbCYmKHNbMF09YSh0Lm9yZGluYWxTY2FsZSxzWzBdKSxzWzFdPWEodC5vcmRpbmFsU2NhbGUsc1sxXSksc1swXT09PXNbMV0mJihzWzBdPU1hdGgubWF4KDAsc1swXS0uMDUpLHNbMV09TWF0aC5taW4oMSxzWzFdKy4wNSkpLGIuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxNTApLmNhbGwodC5icnVzaC5leHRlbnQocykpLGUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSksZS5waWNrTGluZUxheWVyJiZlLnBpY2tMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxFPSEwLEE9ImVuZGluZyIsaSYmaS5maWx0ZXJDaGFuZ2VkKXt2YXIgbD10LmRvbWFpblRvVW5pdFNjYWxlLmludmVydCxjPXMubWFwKGwpO2kuZmlsdGVyQ2hhbmdlZChlLmtleSx0LnZpc2libGVJbmRleCxjKX19dmFyIEE9ITEsRT0hMCxTPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBNKHQpLnRyYWNlLnZpc2libGV9KS5tYXAoaC5iaW5kKDAsbikpLm1hcChkKTt0LnNlbGVjdEFsbCgiLiIrZy5jbi5wYXJjb29yZHNMaW5lTGF5ZXJzKS5yZW1vdmUoKTt2YXIgTD10LnNlbGVjdEFsbCgiLiIrZy5jbi5wYXJjb29yZHNMaW5lTGF5ZXJzKS5kYXRhKFMsXyk7TC5lbnRlcigpLmluc2VydCgiZGl2IiwiLiIrZS5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIikuam9pbigiIC4iKSkuY2xhc3NlZChnLmNuLnBhcmNvb3Jkc0xpbmVMYXllcnMsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKSxMLnN0eWxlKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodC5tb2RlbC50cmFuc2xhdGVYLWcub3ZlcmRyYWcpKyJweCwiK3QubW9kZWwudHJhbnNsYXRlWSsicHgpIn0pO3ZhciBDPUwuc2VsZWN0QWxsKCIuIitnLmNuLnBhcmNvb3Jkc0xpbmVMYXllcikuZGF0YShwLF8pLEk9e3JlbmRlcmVyczpbXSxkaW1lbnNpb25zOltdfSxEPW51bGw7Qy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiBnLmNuLnBhcmNvb3Jkc0xpbmVMYXllcisiICIrKHQuY29udGV4dD8iY29udGV4dCI6dC5waWNrPyJwaWNrIjoiZm9jdXMiKQp9KS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoImZsb2F0IiwibGVmdCIpLnN0eWxlKCJjbGVhciIsImJvdGgiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXtpZihFJiZ0LmxpbmVMYXllciYmaSYmaS5ob3Zlcil7dmFyIGU9Yi5ldmVudCxyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPWIubW91c2UodGhpcyksbz1hWzBdLHM9YVsxXTtpZihvPDB8fHM8MHx8bz49cnx8cz49bilyZXR1cm47dmFyIGw9dC5saW5lTGF5ZXIucmVhZFBpeGVsKG8sbi0xLXMpLGM9MCE9PWxbM10sdT1jP2xbMl0rMjU2KihsWzFdKzI1NipsWzBdKTpudWxsLGY9e3g6byx5OnMsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOnV9O3UhPT1EJiYoYz9pLmhvdmVyKGYpOmkudW5ob3ZlciYmaS51bmhvdmVyKGYpLEQ9dSl9fSksQy5zdHlsZSgibWFyZ2luIixmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLnBhZDtyZXR1cm4gZS50KyJweCAiK2UucisicHggIitlLmIrInB4ICIrZS5sKyJweCJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY2FudmFzV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhbnZhc0hlaWdodH0pLnN0eWxlKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwud2lkdGgrMipnLm92ZXJkcmFnKyJweCJ9KS5zdHlsZSgiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5oZWlnaHQrInB4In0pLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPy4wMToxfSksZS5zdHlsZSgiYmFja2dyb3VuZCIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTt2YXIgUD1lLnNlbGVjdEFsbCgiLiIrZy5jbi5wYXJjb29yZHMpLmRhdGEoUyxfKTtQLmV4aXQoKS5yZW1vdmUoKSxQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLnBhcmNvb3JkcywhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5jYWxsKG8pLFAuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLndpZHRoK3QubW9kZWwucGFkLmwrdC5tb2RlbC5wYWQucn0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuaGVpZ2h0K3QubW9kZWwucGFkLnQrdC5tb2RlbC5wYWQuYn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwudHJhbnNsYXRlWCsiLCIrdC5tb2RlbC50cmFuc2xhdGVZKyIpIn0pO3ZhciB6PVAuc2VsZWN0QWxsKCIuIitnLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3KS5kYXRhKHcsXyk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5wYXJjb29yZHNDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLHouYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC5wYWQubCsiLCIrdC5tb2RlbC5wYWQudCsiKSJ9KTt2YXIgTz16LnNlbGVjdEFsbCgiLiIrZy5jbi55QXhpcykuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxfKTtPLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLnlBeGlzLCEwKS5lYWNoKGZ1bmN0aW9uKHQpe0kuZGltZW5zaW9ucy5wdXNoKHQpfSksei5lYWNoKGZ1bmN0aW9uKHQpe3UoTyx0KX0pLEMuZWFjaChmdW5jdGlvbih0KXt0LmxpbmVMYXllcj12KHRoaXMsdC5tb2RlbC5saW5lcyx0Lm1vZGVsLmNhbnZhc1dpZHRoLHQubW9kZWwuY2FudmFzSGVpZ2h0LHQudmlld01vZGVsLmRpbWVuc2lvbnMsdC52aWV3TW9kZWwucGFuZWxzLHQubW9kZWwudW5pdFRvQ29sb3IsdC5jb250ZXh0LHQucGljayxnLnNjYXR0ZXIpLHQudmlld01vZGVsW3Qua2V5XT10LmxpbmVMYXllcixJLnJlbmRlcmVycy5wdXNoKGZ1bmN0aW9uKCl7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscywhMCl9KSx0LmxpbmVMYXllci5yZW5kZXIodC52aWV3TW9kZWwucGFuZWxzLCF0LmNvbnRleHQpfSksTy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksTy5jYWxsKGIuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtFPSExLEF8fCh0Lng9TWF0aC5tYXgoLWcub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCtnLm92ZXJkcmFnLGIuZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLE8uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkuZWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSx1KE8sZSksTy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1NYXRoLmFicyh0LnhJbmRleC1lLnhJbmRleCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksYi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsIDApIiksTy5lYWNoKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSksZS5jb250ZXh0TGluZUxheWVyJiZlLmNvbnRleHRMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFzKGUpKSxlLmZvY3VzTGluZUxheWVyLnJlbmRlciYmZS5mb2N1c0xpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMpKX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtpZihBKXJldHVybiB2b2lkKCJlbmRpbmciPT09QSYmKEE9ITEpKTt0Lng9dC54U2NhbGUodC54SW5kZXgpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLHUoTyxlKSxiLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LngrIiwgMCkifSksZS5jb250ZXh0TGluZUxheWVyJiZlLmNvbnRleHRMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFzKGUpKSxlLmZvY3VzTGluZUxheWVyJiZlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGluZUxheWVyJiZlLnBpY2tMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxFPSEwLGkmJmkuYXhlc01vdmVkJiZpLmF4ZXNNb3ZlZChlLmtleSxlLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXh9KSl9KSksTy5leGl0KCkucmVtb3ZlKCk7dmFyIFI9Ty5zZWxlY3RBbGwoIi4iK2cuY24uYXhpc092ZXJsYXlzKS5kYXRhKHcsXyk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzT3ZlcmxheXMsITApLFIuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXMpLnJlbW92ZSgpO3ZhciBGPVIuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXMpLmRhdGEodyxfKTtGLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXMsITApLEYuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLmhlaWdodC90Lm1vZGVsLnRpY2tEaXN0YW5jZSxyPXQuZG9tYWluU2NhbGUsbj1yLmRvbWFpbigpO2Iuc2VsZWN0KHRoaXMpLmNhbGwoYi5zdmcuYXhpcygpLm9yaWVudCgibGVmdCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP246bnVsbCkudGlja0Zvcm1hdCh0Lm9yZGluYWw/ZnVuY3Rpb24odCl7cmV0dXJuIHR9Om51bGwpLnNjYWxlKHIpKSx4LmZvbnQoRi5zZWxlY3RBbGwoInRleHQiKSx0Lm1vZGVsLnRpY2tGb250KX0pLEYuc2VsZWN0QWxsKCIuZG9tYWluLCAudGljaz5saW5lIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMjUpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLEYuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtc2hhZG93IiwiMXB4IDFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAxcHggMXB4ICNmZmYiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKTt2YXIgaj1SLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzSGVhZGluZykuZGF0YSh3LF8pO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24uYXhpc0hlYWRpbmcsITApO3ZhciBOPWouc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNUaXRsZSkuZGF0YSh3LF8pO04uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGcuY24uYXhpc1RpdGxlLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistZy5heGlzVGl0bGVPZmZzZXQrIikiKS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSkuZWFjaChmdW5jdGlvbih0KXt4LmZvbnQoTix0Lm1vZGVsLmxhYmVsRm9udCl9KTt2YXIgQj1SLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50KS5kYXRhKHcsXyk7Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50LCEwKTt2YXIgVT1CLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKHcsXyk7VS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50VG9wLCEwKSxVLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrLWcuYXhpc0V4dGVudE9mZnNldCsiKSIpO3ZhciBWPVUuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKHcsXyk7Vi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50VG9wVGV4dCwhMCkuY2FsbChtKSxWLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIGYodCkodC5kb21haW5TY2FsZS5kb21haW4oKS5zbGljZSgtMSlbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt4LmZvbnQoVix0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgSD1CLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50Qm90dG9tKS5kYXRhKHcsXyk7SC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50Qm90dG9tLCEwKSxILmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQubW9kZWwuaGVpZ2h0K2cuYXhpc0V4dGVudE9mZnNldCkrIikifSk7dmFyIHE9SC5zZWxlY3RBbGwoIi4iK2cuY24uYXhpc0V4dGVudEJvdHRvbVRleHQpLmRhdGEodyxfKTtxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0LCEwKS5hdHRyKCJkeSIsIjAuNzVlbSIpLmNhbGwobSkscS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpKHQuZG9tYWluU2NhbGUuZG9tYWluKClbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt4LmZvbnQocSx0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgRz1SLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzQnJ1c2gpLmRhdGEodyxfKSxZPUcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24uYXhpc0JydXNoLCEwKTtHLmVhY2goZnVuY3Rpb24odCl7dC5icnVzaHx8KHQuYnJ1c2g9Yi5zdmcuYnJ1c2goKS55KHQudW5pdFNjYWxlKS5vbigiYnJ1c2hzdGFydCIseSkub24oImJydXNoIixUKS5vbigiYnJ1c2hlbmQiLGspLDA9PT10LmZpbHRlclswXSYmMT09PXQuZmlsdGVyWzFdfHx0LmJydXNoLmV4dGVudCh0LmZpbHRlciksYi5zZWxlY3QodGhpcykuY2FsbCh0LmJydXNoKSl9KSxZLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoIngiLC1nLmJhci5jYXB0dXJld2lkdGgvMikuYXR0cigid2lkdGgiLGcuYmFyLmNhcHR1cmV3aWR0aCksWS5zZWxlY3RBbGwoInJlY3QuZXh0ZW50IikuYXR0cigiZmlsbCIsInVybCgjIitnLmlkLmZpbHRlckJhclBhdHRlcm4rIikiKS5zdHlsZSgiY3Vyc29yIiwibnMtcmVzaXplIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5maWx0ZXJbMF0mJjE9PT10LmZpbHRlclsxXX0pLmF0dHIoInkiLC0xMDApLFkuc2VsZWN0QWxsKCIucmVzaXplIHJlY3QiKS5hdHRyKCJoZWlnaHQiLGcuYmFyLmhhbmRsZWhlaWdodCkuYXR0cigib3BhY2l0eSIsMCkuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIiksWS5zZWxlY3RBbGwoIi5yZXNpemUubiByZWN0Iikuc3R5bGUoImN1cnNvciIsIm4tcmVzaXplIikuYXR0cigieSIsZy5iYXIuaGFuZGxlb3ZlcmxhcC1nLmJhci5oYW5kbGVoZWlnaHQpLFkuc2VsZWN0QWxsKCIucmVzaXplLnMgcmVjdCIpLnN0eWxlKCJjdXJzb3IiLCJzLXJlc2l6ZSIpLmF0dHIoInkiLGcuYmFyLmhhbmRsZW92ZXJsYXApO3ZhciBYPSExLFc9ITE7cmV0dXJuIEl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2d1cCI6NzMyLCIuL2NvbnN0YW50cyI6MTAxNCwiLi9saW5lcyI6MTAxNyxkMzoxMjF9XSwxMDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY29vcmRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3BhcGVyLGE9ci5fcGFwZXJkaXYsbz17fSxzPXt9LGw9ci5fc2l6ZTtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXtvW3JdPXQuZGF0YVtyXS5kaW1lbnNpb25zLHNbcl09dC5kYXRhW3JdLmRpbWVuc2lvbnMuc2xpY2UoKX0pO3ZhciBjPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1zW2VdW3JdLGE9aS5jb25zdHJhaW50cmFuZ2U7YSYmMj09PWEubGVuZ3RofHwoYT1pLmNvbnN0cmFpbnRyYW5nZT1bXSksYVswXT1uWzBdLGFbMV09blsxXSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9LHU9ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfaG92ZXIiLGUpfSxmPWZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGUpfSxoPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hKCJ2aXNpYmxlImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGk9dC5pbmRleE9mKG4pO3JldHVybiBpPT09LTEmJihpKz1lLmxlbmd0aCksaX12YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShyLHQsZSktaShyLHQsbil9fShzW2VdLmZpbHRlcihuKSk7b1tlXS5zb3J0KGEpLHNbZV0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFuKHQpfSkuc29ydChmdW5jdGlvbih0KXtyZXR1cm4gc1tlXS5pbmRleE9mKHQpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtvW2VdLnNwbGljZShvW2VdLmluZGV4T2YodCksMSksb1tlXS5zcGxpY2Uoc1tlXS5pbmRleE9mKHQpLDAsdCl9KSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9O24oYSxpLGUse3dpZHRoOmwudyxoZWlnaHQ6bC5oLG1hcmdpbjp7dDpsLnQscjpsLnIsYjpsLmIsbDpsLmx9fSx7ZmlsdGVyQ2hhbmdlZDpjLGhvdmVyOnUsdW5ob3ZlcjpmLGF4ZXNNb3ZlZDpofSl9fSx7Ii4vcGFyY29vcmRzIjoxMDE4fV0sMTAyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1pKHtlZGl0VHlwZToiY2FsYyIsY29sb3JFZGl0VHlwZToic3R5bGUifSk7ZS5leHBvcnRzPXtsYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWwwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRsYWJlbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntjb2xvcnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86byh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Zm9udDpvKHt9LHMse30pLGluc2lkZXRleHRmb250Om8oe30scyx7fSksb3V0c2lkZXRleHRmb250Om8oe30scyx7fSksZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzc3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwM31dLDEwMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EuX21vZHVsZT09PWUmJmEudmlzaWJsZT09PSEwJiZyLnB1c2goaSl9cmV0dXJuIHJ9dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ2V0TW9kdWxlKCJwaWUiKSxyPW4odC5jYWxjZGF0YSxlKTtyLmxlbmd0aCYmZS5wbG90KHQscil9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBpZSIpLGE9ZS5faGFzJiZlLl9oYXMoInBpZSIpO2kmJiFhJiZuLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg1M31dLDEwMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZighbCl7dmFyIGU9by5kZWZhdWx0cztsPWUuc2xpY2UoKTt2YXIgcjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWwucHVzaChhKGVbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjxvLmRlZmF1bHRzLmxlbmd0aDtyKyspbC5wdXNoKGEoZVtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKX1yZXR1cm4gbFt0JWwubGVuZ3RoXX12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiEhdCYmKHQ9YSh0KSwhIXQuaXNWYWxpZCgpJiYodD1vLmFkZE9wYWNpdHkodCx0LmdldEFscGhhKCkpLGJbZV18fChiW2VdPXQpLHQpKX12YXIgbCxjLHUsZixoLGQ9ZS52YWx1ZXMscD1BcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aCxtPWUubGFiZWxzLHY9ZS5tYXJrZXIuY29sb3JzLGc9W10seT10Ll9mdWxsTGF5b3V0LGI9eS5fcGllY29sb3JtYXAseD17fSxfPTAsdz15LmhpZGRlbmxhYmVsc3x8W107aWYoZS5kbGFiZWwpZm9yKG09bmV3IEFycmF5KGQubGVuZ3RoKSxsPTA7bDxkLmxlbmd0aDtsKyspbVtsXT1TdHJpbmcoZS5sYWJlbDArbCplLmRsYWJlbCk7dmFyIE09KHA/ZDptKS5sZW5ndGg7Zm9yKGw9MDtsPE07bCsrKXtpZihwKXtpZihjPWRbbF0sIWkoYykpY29udGludWU7aWYoKGM9K2MpPDApY29udGludWV9ZWxzZSBjPTE7dT1tW2xdLHZvaWQgMCE9PXUmJiIiIT09dXx8KHU9bCksdT1TdHJpbmcodSk7dmFyIFQ9eFt1XTt2b2lkIDA9PT1UPyh4W3VdPWcubGVuZ3RoLGY9dy5pbmRleE9mKHUpIT09LTEsZnx8KF8rPWMpLGcucHVzaCh7djpjLGxhYmVsOnUsY29sb3I6cih2W2xdKSxpOmwscHRzOltsXSxoaWRkZW46Zn0pKTooaD1nW1RdLGgudis9YyxoLnB0cy5wdXNoKGwpLGguaGlkZGVufHwoXys9YyksaC5jb2xvcj09PSExJiZ2W2xdJiYoaC5jb2xvcj1yKHZbbF0sdSkpKX1mb3IoZS5zb3J0JiZnLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52LXQudn0pLGw9MDtsPGcubGVuZ3RoO2wrKyloPWdbbF0saC5jb2xvcj09PSExJiYoYltoLmxhYmVsXT9oLmNvbG9yPWJbaC5sYWJlbF06KGJbaC5sYWJlbF09aC5jb2xvcj1uKHkuX3BpZWRlZmF1bHRjb2xvcmNvdW50KSx5Ll9waWVkZWZhdWx0Y29sb3Jjb3VudCsrKSk7aWYoZ1swXSYmKGdbMF0udlRvdGFsPV8pLGUudGV4dGluZm8mJiJub25lIiE9PWUudGV4dGluZm8pe3ZhciBrLEE9ZS50ZXh0aW5mby5pbmRleE9mKCJsYWJlbCIpIT09LTEsRT1lLnRleHRpbmZvLmluZGV4T2YoInRleHQiKSE9PS0xLFM9ZS50ZXh0aW5mby5pbmRleE9mKCJ2YWx1ZSIpIT09LTEsTD1lLnRleHRpbmZvLmluZGV4T2YoInBlcmNlbnQiKSE9PS0xLEM9eS5zZXBhcmF0b3JzO2ZvcihsPTA7bDxnLmxlbmd0aDtsKyspe2lmKGg9Z1tsXSxrPUE/W2gubGFiZWxdOltdLEUpe3ZhciBJPXMuZ2V0Rmlyc3RGaWxsZWQoZS50ZXh0LGgucHRzKTtJJiZrLnB1c2goSSl9UyYmay5wdXNoKHMuZm9ybWF0UGllVmFsdWUoaC52LEMpKSxMJiZrLnB1c2gocy5mb3JtYXRQaWVQZXJjZW50KGgudi9fLEMpKSxoLnRleHQ9ay5qb2luKCI8YnI+Iil9fXJldHVybiBnfTt2YXIgbH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4vaGVscGVycyI6MTAyNSwiZmFzdC1pc251bWVyaWMiOjEzMSx0aW55Y29sb3IyOjU0Mn1dLDEwMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBzPW4uY29lcmNlRm9udCxsPW8oInZhbHVlcyIpLGM9bygibGFiZWxzIik7aWYoIUFycmF5LmlzQXJyYXkoYykpe2lmKCFBcnJheS5pc0FycmF5KGwpfHwhbC5sZW5ndGgpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtvKCJsYWJlbDAiKSxvKCJkbGFiZWwiKX1vKCJtYXJrZXIubGluZS53aWR0aCIpJiZvKCJtYXJrZXIubGluZS5jb2xvciIpO3ZhciB1PW8oIm1hcmtlci5jb2xvcnMiKTtBcnJheS5pc0FycmF5KHUpfHwoZS5tYXJrZXIuY29sb3JzPVtdKSxvKCJzY2FsZWdyb3VwIik7dmFyIGY9bygidGV4dCIpLGg9bygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoZik/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKTtpZihvKCJob3ZlcnRleHQiKSxoJiYibm9uZSIhPT1oKXt2YXIgZD1vKCJ0ZXh0cG9zaXRpb24iKSxwPUFycmF5LmlzQXJyYXkoZCl8fCJhdXRvIj09PWQsbT1wfHwiaW5zaWRlIj09PWQsdj1wfHwib3V0c2lkZSI9PT1kO2lmKG18fHYpe3ZhciBnPXMobywidGV4dGZvbnQiLGEuZm9udCk7bSYmcyhvLCJpbnNpZGV0ZXh0Zm9udCIsZyksdiYmcyhvLCJvdXRzaWRldGV4dGZvbnQiLGcpfX1vKCJkb21haW4ueCIpLG8oImRvbWFpbi55IiksbygiaG9sZSIpLG8oInNvcnQiKSxvKCJkaXJlY3Rpb24iKSxvKCJyb3RhdGlvbiIpLG8oInB1bGwiKX19LHsiLi4vLi4vbGliIjo3MzUsIi4vYXR0cmlidXRlcyI6MTAyMH1dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyczp0LnB0cyxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsbGFiZWw6dC5sYWJlbCxjb2xvcjp0LmNvbG9yLHZhbHVlOnQudix2OnQudn07cmV0dXJuIDE9PT10LnB0cy5sZW5ndGgmJihyLnBvaW50TnVtYmVyPXIuaT10LnB0c1swXSksbihyLGUsdC5wdHMpLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjQ5fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtyLmZvcm1hdFBpZVBlcmNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0oMTAwKnQpLnRvUHJlY2lzaW9uKDMpO3JldHVybiByLmxhc3RJbmRleE9mKCIuIikhPT0tMSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4gci5sYXN0SW5kZXhPZigiLiIpIT09LTEmJihyPXIucmVwbGFjZSgvWy5dPzArJC8sIiIpKSxuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1uKXJldHVybiBufX0sci5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ci5nZXRGaXJzdEZpbGxlZCh0LGUpOnQ/dDp2b2lkIDB9fSx7Ii4uLy4uL2xpYiI6NzM1fV0sMTAyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLnN0eWxlT25lPXQoIi4vc3R5bGVfb25lIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJwaWUiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJwaWUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6MTAyMCwiLi9iYXNlX3Bsb3QiOjEwMjEsIi4vY2FsYyI6MTAyMiwiLi9kZWZhdWx0cyI6MTAyMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTAyNywiLi9sYXlvdXRfZGVmYXVsdHMiOjEwMjgsIi4vcGxvdCI6MTAyOSwiLi9zdHlsZSI6MTAzMCwiLi9zdHlsZV9vbmUiOjEwMzF9XSwxMDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHIsYSl7bi5jb2VyY2UodCxlLGkscixhKX0oImhpZGRlbmxhYmVscyIpfX0seyIuLi8uLi9saWIiOjczNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTAyN31dLDEwMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49TWF0aC5zcXJ0KHQud2lkdGgqdC53aWR0aCt0LmhlaWdodCp0LmhlaWdodCksYT10LndpZHRoL3QuaGVpZ2h0LG89TWF0aC5QSSpNYXRoLm1pbihlLnYvci52VG90YWwsLjUpLHM9MS1yLnRyYWNlLmhvbGUsbD1pKGUsciksYz17c2NhbGU6bCpyLnIqMi9uLHJDZW50ZXI6MS1sLHJvdGF0ZTowfTtpZihjLnNjYWxlPj0xKXJldHVybiBjO3ZhciB1PWErMS8oMipNYXRoLnRhbihvKSksZj1yLnIqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KHUqdSsuNSkrdSkscy8oTWF0aC5zcXJ0KGEqYStzLzIpK2EpKSxoPXtzY2FsZToyKmYvdC5oZWlnaHQsckNlbnRlcjpNYXRoLmNvcyhmL3IuciktZiphL3Iucixyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrNzIwKSUxODAtOTB9LGQ9MS9hLHA9ZCsxLygyKk1hdGgudGFuKG8pKSxtPXIucipNYXRoLm1pbigxLyhNYXRoLnNxcnQocCpwKy41KStwKSxzLyhNYXRoLnNxcnQoZCpkK3MvMikrZCkpLHY9e3NjYWxlOjIqbS90LndpZHRoLHJDZW50ZXI6TWF0aC5jb3MobS9yLnIpLW0vYS9yLnIscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzgxMCklMTgwLTkwfSxnPXYuc2NhbGU+aC5zY2FsZT92Omg7cmV0dXJuIGMuc2NhbGU8MSYmZy5zY2FsZT5jLnNjYWxlP2c6Y31mdW5jdGlvbiBpKHQsZSl7aWYodC52PT09ZS52VG90YWwmJiFlLnRyYWNlLmhvbGUpcmV0dXJuIDE7dmFyIHI9TWF0aC5QSSpNYXRoLm1pbih0LnYvZS52VG90YWwsLjUpO3JldHVybiBNYXRoLm1pbigxLygxKzEvTWF0aC5zaW4ocikpLCgxLWUudHJhY2UuaG9sZSkvMil9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWUucHhtaWRbMF0sbj1lLnB4bWlkWzFdLGk9dC53aWR0aC8yLGE9dC5oZWlnaHQvMjtyZXR1cm4gcjwwJiYoaSo9LTEpLG48MCYmKGEqPS0xKSx7c2NhbGU6MSxyQ2VudGVyOjEscm90YXRlOjAseDppK01hdGguYWJzKGEpKihpPjA/MTotMSkvMix5OmEvKDErcipyLyhuKm4pKSxvdXRzaWRlOiEwfX1mdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LnB4bWlkWzFdLWUucHhtaWRbMV19ZnVuY3Rpb24gbih0LGUpe3JldHVybiBlLnB4bWlkWzFdLXQucHhtaWRbMV19dmFyIGksYSxvLHMsbCxjLHUsZixoLGQsbSx2LGc7Zm9yKGE9MDthPDI7YSsrKWZvcihvPWE/cjpuLGw9YT9NYXRoLm1heDpNYXRoLm1pbix1PWE/MTotMSxpPTA7aTwyO2krKyl7Zm9yKHM9aT9NYXRoLm1heDpNYXRoLm1pbixjPWk/MTotMSxmPXRbYV1baV0sZi5zb3J0KG8pLGg9dFsxLWFdW2ldLGQ9aC5jb25jYXQoZiksdj1bXSxtPTA7bTxmLmxlbmd0aDttKyspdm9pZCAwIT09ZlttXS55TGFiZWxNaWQmJnYucHVzaChmW21dKTtmb3IoZz0hMSxtPTA7YSYmbTxoLmxlbmd0aDttKyspaWYodm9pZCAwIT09aFttXS55TGFiZWxNaWQpe2c9aFttXTticmVha31mb3IobT0wO208di5sZW5ndGg7bSsrKXt2YXIgeT1tJiZ2W20tMV07ZyYmIW0mJih5PWcpLGZ1bmN0aW9uKHQscil7cnx8KHI9e30pO3ZhciBuLGksbyxmLGgsbSx2PXIubGFiZWxFeHRyYVkrKGE/ci55TGFiZWxNYXg6ci55TGFiZWxNaW4pLGc9YT90LnlMYWJlbE1pbjp0LnlMYWJlbE1heCx5PWE/dC55TGFiZWxNYXg6dC55TGFiZWxNaW4sYj10LmN5RmluYWwrbCh0LnB4MFsxXSx0LnB4MVsxXSkseD12LWc7aWYoeCp1PjAmJih0LmxhYmVsRXh0cmFZPXgpLEFycmF5LmlzQXJyYXkoZS5wdWxsKSlmb3IoaT0wO2k8ZC5sZW5ndGg7aSsrKShvPWRbaV0pPT09dHx8KHAuY2FzdE9wdGlvbihlLnB1bGwsdC5wdHMpfHwwKT49KHAuY2FzdE9wdGlvbihlLnB1bGwsby5wdHMpfHwwKXx8KCh0LnB4bWlkWzFdLW8ucHhtaWRbMV0pKnU+MD8oZj1vLmN5RmluYWwrbChvLnB4MFsxXSxvLnB4MVsxXSksKHg9Zi1nLXQubGFiZWxFeHRyYVkpKnU+MCYmKHQubGFiZWxFeHRyYVkrPXgpKTooeSt0LmxhYmVsRXh0cmFZLWIpKnU+MCYmKG49MypjKk1hdGguYWJzKGktZC5pbmRleE9mKHQpKSxoPW8uY3hGaW5hbCtzKG8ucHgwWzBdLG8ucHgxWzBdKSwobT1oK24tKHQuY3hGaW5hbCt0LnB4bWlkWzBdKS10LmxhYmVsRXh0cmFYKSpjPjAmJih0LmxhYmVsRXh0cmFYKz1tKSkpfSh2W21dLHkpfX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKG89dFtpXVswXSxzPW8udHJhY2Uscj1lLncqKHMuZG9tYWluLnhbMV0tcy5kb21haW4ueFswXSksbj1lLmgqKHMuZG9tYWluLnlbMV0tcy5kb21haW4ueVswXSksbD1zLnB1bGwsQXJyYXkuaXNBcnJheShsKSlmb3IobD0wLGE9MDthPHMucHVsbC5sZW5ndGg7YSsrKXMucHVsbFthXT5sJiYobD1zLnB1bGxbYV0pO28ucj1NYXRoLm1pbihyLG4pLygyKzIqbCksby5jeD1lLmwrZS53KihzLmRvbWFpbi54WzFdK3MuZG9tYWluLnhbMF0pLzIsby5jeT1lLnQrZS5oKigyLXMuZG9tYWluLnlbMV0tcy5kb21haW4ueVswXSkvMixzLnNjYWxlZ3JvdXAmJmYuaW5kZXhPZihzLnNjYWxlZ3JvdXApPT09LTEmJmYucHVzaChzLnNjYWxlZ3JvdXApfWZvcihhPTA7YTxmLmxlbmd0aDthKyspe2Zvcih1PTEvMCxjPWZbYV0saT0wO2k8dC5sZW5ndGg7aSsrKW89dFtpXVswXSxvLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYodT1NYXRoLm1pbih1LG8ucipvLnIvby52VG90YWwpKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKW89dFtpXVswXSxvLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYoby5yPU1hdGguc3FydCh1Km8udlRvdGFsKSl9fWZ1bmN0aW9uIGwodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm5bYS5yKk1hdGguc2luKHQpLC1hLnIqTWF0aC5jb3ModCldfXZhciByLG4saSxhPXRbMF0sbz1hLnRyYWNlLHM9by5yb3RhdGlvbipNYXRoLlBJLzE4MCxsPTIqTWF0aC5QSS9hLnZUb3RhbCxjPSJweDAiLHU9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09by5kaXJlY3Rpb24pe2ZvcihyPTA7cjx0Lmxlbmd0aCYmdFtyXS5oaWRkZW47cisrKTtpZihyPT09dC5sZW5ndGgpcmV0dXJuO3MrPWwqdFtyXS52LGwqPS0xLGM9InB4MSIsdT0icHgwIn1mb3IoaT1lKHMpLHI9MDtyPHQubGVuZ3RoO3IrKyluPXRbcl0sbi5oaWRkZW58fChuW2NdPWkscys9bCpuLnYvMixuLnB4bWlkPWUocyksbi5taWRhbmdsZT1zLHMrPWwqbi52LzIsaT1lKHMpLG5bdV09aSxuLmxhcmdlQXJjPW4udj5hLnZUb3RhbC8yPzE6MCl9dmFyIGM9dCgiZDMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscD10KCIuL2hlbHBlcnMiKSxtPXQoIi4vZXZlbnRfZGF0YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7cyhlLHIuX3NpemUpO3ZhciB2PXIuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLmRhdGEoZSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoeyJzdHJva2UtbGluZWpvaW4iOiJyb3VuZCIsY2xhc3M6InRyYWNlIn0pLHYuZXhpdCgpLnJlbW92ZSgpLHYub3JkZXIoKSx2LmVhY2goZnVuY3Rpb24oZSl7dmFyIHM9Yy5zZWxlY3QodGhpcyksdj1lWzBdLGc9di50cmFjZTtsKGUpLHMuZWFjaChmdW5jdGlvbigpe3ZhciBzPWMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCkscy5leGl0KCkucmVtb3ZlKCk7dmFyIGw9W1tbXSxbXV0sW1tdLFtdXV0seT0hMTtzLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbygpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YVtnLmluZGV4XTtpZighdC5fZHJhZ2dpbmcmJm4uaG92ZXJtb2RlIT09ITEpe3ZhciBvPWEuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkobykmJihvPXUuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOltwLmNhc3RPcHRpb24obyxlLnB0cyldLF9tb2R1bGU6Zy5fbW9kdWxlfSxuLDApKSwiYWxsIj09PW8mJihvPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLCJub25lIiE9PW8mJiJza2lwIiE9PW8mJm8pe3ZhciBzPWkoZSx2KSxsPXgrZS5weG1pZFswXSooMS1zKSxmPV8rZS5weG1pZFsxXSooMS1zKSxoPXIuc2VwYXJhdG9ycyxkPVtdO2lmKG8uaW5kZXhPZigibGFiZWwiKSE9PS0xJiZkLnB1c2goZS5sYWJlbCksby5pbmRleE9mKCJ0ZXh0IikhPT0tMSl7dmFyIHk9cC5jYXN0T3B0aW9uKGEuaG92ZXJ0ZXh0fHxhLnRleHQsZS5wdHMpO3kmJmQucHVzaCh5KX1vLmluZGV4T2YoInZhbHVlIikhPT0tMSYmZC5wdXNoKHAuZm9ybWF0UGllVmFsdWUoZS52LGgpKSxvLmluZGV4T2YoInBlcmNlbnQiKSE9PS0xJiZkLnB1c2gocC5mb3JtYXRQaWVQZXJjZW50KGUudi92LnZUb3RhbCxoKSk7dmFyIGI9Zy5ob3ZlcmxhYmVsLHc9Yi5mb250O3UubG9uZUhvdmVyKHt4MDpsLXMqdi5yLHgxOmwrcyp2LnIseTpmLHRleHQ6ZC5qb2luKCI8YnI+IiksbmFtZTpvLmluZGV4T2YoIm5hbWUiKSE9PS0xP2EubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjplLnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsY29sb3I6cC5jYXN0T3B0aW9uKGIuYmdjb2xvcixlLnB0cyl8fGUuY29sb3IsYm9yZGVyQ29sb3I6cC5jYXN0T3B0aW9uKGIuYm9yZGVyY29sb3IsZS5wdHMpLGZvbnRGYW1pbHk6cC5jYXN0T3B0aW9uKHcuZmFtaWx5LGUucHRzKSxmb250U2l6ZTpwLmNhc3RPcHRpb24ody5zaXplLGUucHRzKSxmb250Q29sb3I6cC5jYXN0T3B0aW9uKHcuY29sb3IsZS5wdHMpfSx7Y29udGFpbmVyOm4uX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOm4uX3BhcGVyLm5vZGUoKSxnZDp0fSksVD0hMH10LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbbShlLGEpXSxldmVudDpjLmV2ZW50fSksaz0hMH19ZnVuY3Rpb24gcyhyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9dC5fZnVsbERhdGFbZy5pbmRleF07ayYmKHIub3JpZ2luYWxFdmVudD1jLmV2ZW50LHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W20oZSxpKV0sZXZlbnQ6Yy5ldmVudH0pLGs9ITEpLFQmJih1LmxvbmVVbmhvdmVyKG4uX2hvdmVybGF5ZXIubm9kZSgpKSxUPSExKX1mdW5jdGlvbiBmKCl7dmFyIHI9dC5fZnVsbExheW91dCxuPXQuX2Z1bGxEYXRhW2cuaW5kZXhdO3QuX2RyYWdnaW5nfHxyLmhvdmVybW9kZT09PSExfHwodC5faG92ZXJkYXRhPVttKGUsbildLHUuY2xpY2sodCxjLmV2ZW50KSl9ZnVuY3Rpb24gYih0LHIsbixpKXtyZXR1cm4iYSIraSp2LnIrIiwiK2kqdi5yKyIgMCAiK2UubGFyZ2VBcmMrKG4/IiAxICI6IiAwICIpK2kqKHJbMF0tdFswXSkrIiwiK2kqKHJbMV0tdFsxXSl9aWYoZS5oaWRkZW4pcmV0dXJuIHZvaWQgYy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlLnBvaW50TnVtYmVyPWUuaSxlLmN1cnZlTnVtYmVyPWcuaW5kZXgsbFtlLnB4bWlkWzFdPDA/MDoxXVtlLnB4bWlkWzBdPDA/MDoxXS5wdXNoKGUpO3ZhciB4PXYuY3gsXz12LmN5LHc9Yy5zZWxlY3QodGhpcyksTT13LnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZGF0YShbZV0pLFQ9ITEsaz0hMTtpZihNLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSksdy5zZWxlY3QoInBhdGgudGV4dGxpbmUiKS5yZW1vdmUoKSx3Lm9uKCJtb3VzZW92ZXIiLG8pLm9uKCJtb3VzZW91dCIscykub24oImNsaWNrIixmKSxnLnB1bGwpe3ZhciBBPStwLmNhc3RPcHRpb24oZy5wdWxsLGUucHRzKXx8MDtBPjAmJih4Kz1BKmUucHhtaWRbMF0sXys9QSplLnB4bWlkWzFdKX1lLmN4RmluYWw9eCxlLmN5RmluYWw9Xzt2YXIgRT1nLmhvbGU7aWYoZS52PT09di52VG90YWwpe3ZhciBTPSJNIisoeCtlLnB4MFswXSkrIiwiKyhfK2UucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITAsMSkrYihlLnB4bWlkLGUucHgwLCEwLDEpKyJaIjtFP00uYXR0cigiZCIsIk0iKyh4K0UqZS5weDBbMF0pKyIsIisoXytFKmUucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITEsRSkrYihlLnB4bWlkLGUucHgwLCExLEUpKyJaIitTKTpNLmF0dHIoImQiLFMpfWVsc2V7dmFyIEw9YihlLnB4MCxlLnB4MSwhMCwxKTtpZihFKXt2YXIgQz0xLUU7TS5hdHRyKCJkIiwiTSIrKHgrRSplLnB4MVswXSkrIiwiKyhfK0UqZS5weDFbMV0pK2IoZS5weDEsZS5weDAsITEsRSkrImwiK0MqZS5weDBbMF0rIiwiK0MqZS5weDBbMV0rTCsiWiIpfWVsc2UgTS5hdHRyKCJkIiwiTSIreCsiLCIrXysibCIrZS5weDBbMF0rIiwiK2UucHgwWzFdK0wrIloiKX12YXIgST1wLmNhc3RPcHRpb24oZy50ZXh0cG9zaXRpb24sZS5wdHMpLEQ9dy5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShlLnRleHQmJiJub25lIiE9PUk/WzBdOltdKTtELmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9Yy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLnRleHQoZS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoaC5mb250LCJvdXRzaWRlIj09PUk/Zy5vdXRzaWRldGV4dGZvbnQ6Zy5pbnNpZGV0ZXh0Zm9udCkuY2FsbChkLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaSxvPWguYkJveChyLm5vZGUoKSk7Im91dHNpZGUiPT09ST9pPWEobyxlKTooaT1uKG8sZSx2KSwiYXV0byI9PT1JJiZpLnNjYWxlPDEmJihyLmNhbGwoaC5mb250LGcub3V0c2lkZXRleHRmb250KSxnLm91dHNpZGV0ZXh0Zm9udC5mYW1pbHk9PT1nLmluc2lkZXRleHRmb250LmZhbWlseSYmZy5vdXRzaWRldGV4dGZvbnQuc2l6ZT09PWcuaW5zaWRldGV4dGZvbnQuc2l6ZXx8KG89aC5iQm94KHIubm9kZSgpKSksaT1hKG8sZSkpKTt2YXIgcz14K2UucHhtaWRbMF0qaS5yQ2VudGVyKyhpLnh8fDApLGw9XytlLnB4bWlkWzFdKmkuckNlbnRlcisoaS55fHwwKTtpLm91dHNpZGUmJihlLnlMYWJlbE1pbj1sLW8uaGVpZ2h0LzIsZS55TGFiZWxNaWQ9bCxlLnlMYWJlbE1heD1sK28uaGVpZ2h0LzIsZS5sYWJlbEV4dHJhWD0wLGUubGFiZWxFeHRyYVk9MCx5PSEwKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3MrIiwiK2wrIikiKyhpLnNjYWxlPDE/InNjYWxlKCIraS5zY2FsZSsiKSI6IiIpKyhpLnJvdGF0ZT8icm90YXRlKCIraS5yb3RhdGUrIikiOiIiKSsidHJhbnNsYXRlKCIrLShvLmxlZnQrby5yaWdodCkvMisiLCIrLShvLnRvcCtvLmJvdHRvbSkvMisiKSIpfSl9KSx5JiZvKGwsZykscy5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBlPWMuc2VsZWN0KHRoaXMpLHI9ZS5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGFiZWxFeHRyYVgrIiwiK3QubGFiZWxFeHRyYVkrIikiK3IuYXR0cigidHJhbnNmb3JtIikpO3ZhciBuPXQuY3hGaW5hbCt0LnB4bWlkWzBdLGk9dC5jeUZpbmFsK3QucHhtaWRbMV0sYT0iTSIrbisiLCIraSxvPSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBzPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGw9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKHMpPk1hdGguYWJzKGwpP2ErPSJsIitsKnQucHhtaWRbMF0vdC5weG1pZFsxXSsiLCIrbCsiSCIrKG4rdC5sYWJlbEV4dHJhWCtvKTphKz0ibCIrdC5sYWJlbEV4dHJhWCsiLCIrcysidiIrKGwtcykrImgiK299ZWxzZSBhKz0iViIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpKyJoIitvO2UuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgidGV4dGxpbmUiLCEwKS5jYWxsKGYuc3Ryb2tlLGcub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLGcub3V0c2lkZXRleHRmb250LnNpemUvOCksZDphLGZpbGw6Im5vbmUifSl9fSl9KX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzU3LCIuL2V2ZW50X2RhdGEiOjEwMjQsIi4vaGVscGVycyI6MTAyNSxkMzoxMjF9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWUudHJhY2UsYT1uLnNlbGVjdCh0aGlzKTthLnN0eWxlKHtvcGFjaXR5OnIub3BhY2l0eX0pLGEuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LHIpfSl9KX19LHsiLi9zdHlsZV9vbmUiOjEwMzEsZDM6MTIxfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL2hlbHBlcnMiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoeyJzdHJva2Utd2lkdGgiOnN9KS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4vaGVscGVycyI6MTAyNX1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3g6bi54LHk6bi55LHh5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGluZGljZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seGJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx5Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LGJsZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxtYXg6MixkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1heDp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsZGZsdDoyMCxlZGl0VHlwZToiY2FsYyJ9LGJvcmRlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYXJlYXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InBvaW50Y2xvdWQiLHRoaXMucGlja1hEYXRhPVtdLHRoaXMucGlja1lEYXRhPVtdLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnRleHRMYWJlbHM9W10sdGhpcy5jb2xvcj0icmdiKDAsIDAsIDApIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy5pZFRvSW5kZXg9bmV3IEludDMyQXJyYXkoMCksdGhpcy5ib3VuZHM9WzAsMCwwLDBdLHRoaXMucG9pbnRjbG91ZE9wdGlvbnM9e3Bvc2l0aW9uczpuZXcgRmxvYXQzMkFycmF5KDApLGlkVG9JbmRleDp0aGlzLmlkVG9JbmRleCxzaXplbWluOi41LHNpemVtYXg6MTIsY29sb3I6WzAsMCwwLDFdLGFyZWFSYXRpbzoxLGJvcmRlckNvbG9yOlswLDAsMCwxXX0sdGhpcy5wb2ludGNsb3VkPWEodC5nbHBsb3QsdGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5wb2ludGNsb3VkLl90cmFjZT10aGlzfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1uZXcgbih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn12YXIgYT10KCJnbC1wb2ludGNsb3VkMmQiKSxvPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxzPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbD1bInhheGlzIiwieWF4aXMiXSxjPW4ucHJvdG90eXBlO2MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkVG9JbmRleFt0LnBvaW50SWRdO3JldHVybnt0cmFjZTp0aGlzLGRhdGFDb29yZDp0LmRhdGFDb29yZCx0cmFjZUNvb3JkOnRoaXMucGlja1hZRGF0YT9bdGhpcy5waWNrWFlEYXRhWzIqZV0sdGhpcy5waWNrWFlEYXRhWzIqZSsxXV06W3RoaXMucGlja1hEYXRhW2VdLHRoaXMucGlja1lEYXRhW2VdXSx0ZXh0TGFiZWw6QXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpP3RoaXMudGV4dExhYmVsc1tlXTp0aGlzLnRleHRMYWJlbHMsY29sb3I6dGhpcy5jb2xvcixuYW1lOnRoaXMubmFtZSxwb2ludEluZGV4OmUsaG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5pbmRleD10LmluZGV4LHRoaXMudGV4dExhYmVscz10LnRleHQsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmhvdmVyaW5mbz10LmhvdmVyaW5mbyx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtKDEvMCksLSgxLzApXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1zKHQse30pfSxjLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxzLGw9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsYz10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSx1PXRoaXMucGlja1hZRGF0YT10Lnh5LGY9dC54Ym91bmRzJiZ0Lnlib3VuZHMsaD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZih1KXtpZihuPXUsZT11Lmxlbmd0aD4+PjEsZilkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihzPTA7czxlO3MrKylpPW5bMipzXSxhPW5bMipzKzFdLGk8ZFswXSYmKGRbMF09aSksaT5kWzJdJiYoZFsyXT1pKSxhPGRbMV0mJihkWzFdPWEpLGE+ZFszXSYmKGRbM109YSk7aWYoaClyPWg7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxzPTA7czxlO3MrKylyW3NdPXN9ZWxzZSBmb3IoZT1sLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLHM9MDtzPGU7cysrKWk9bFtzXSxhPWNbc10scltzXT1zLG5bMipzXT1pLG5bMipzKzFdPWEsaTxkWzBdJiYoZFswXT1pKSxpPmRbMl0mJihkWzJdPWkpLGE8ZFsxXSYmKGRbMV09YSksYT5kWzNdJiYoZFszXT1hKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgcD1vKHQubWFya2VyLmNvbG9yKSxtPW8odC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O3BbM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1wO3ZhciBnPXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT1nKXtnPWwubGVuZ3RoPDEwMHx8Yy5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9ZyxtWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9bTt2YXIgeT10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5leHBhbmRBeGVzRmFzdChkLGIvMil9LGMuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8LjUsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW2xbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NTYsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDU0LCJnbC1wb2ludGNsb3VkMmQiOjIzNX1dLDEwMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKCJ4IiksYSgieSIpLGEoInhib3VuZHMiKSxhKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksYSgidGV4dCIpLGEoIm1hcmtlci5jb2xvciIsciksYSgibWFya2VyLm9wYWNpdHkiKSxhKCJtYXJrZXIuYmxlbmQiKSxhKCJtYXJrZXIuc2l6ZW1pbiIpLGEoIm1hcmtlci5zaXplbWF4IiksYSgibWFya2VyLmJvcmRlci5jb2xvciIsciksYSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKX19LHsiLi4vLi4vbGliIjo3MzUsIi4vYXR0cmlidXRlcyI6MTAzMn1dLDEwMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9zY2F0dGVyM2QvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBvaW50Y2xvdWQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsMmQiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgxNSwiLi4vc2NhdHRlcjNkL2NhbGMiOjEwNzAsIi4vYXR0cmlidXRlcyI6MTAzMiwiLi9jb252ZXJ0IjoxMDMzLCIuL2RlZmF1bHRzIjoxMDM0fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9bCh7aG92ZXJpbmZvOnMoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIn0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiLjNzIn0sdmFsdWVzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNuYXAiLCJwZXJwZW5kaWN1bGFyIiwiZnJlZWZvcm0iLCJmaXhlZCJdLGRmbHQ6InNuYXAifSx0ZXh0Zm9udDpuKHt9KSxub2RlOntsYWJlbDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITB9fSxzb3VyY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHRhcmdldDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdmFsdWU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119fX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxMCwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NDQsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzYzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NzcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODAzfV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIik7ci5uYW1lPSJzYW5rZXkiLHIuYXR0cj0idHlwZSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aS5nZXRTdWJwbG90Q2FsY0RhdGEodC5jYWxjZGF0YSwic2Fua2V5Iiwic2Fua2V5Iik7ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2NTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vLi4vcGxvdHMvcGxvdHMiOjgzOCwiLi9wbG90IjoxMDQyfV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLGE9MDthPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTthKyspe2lmKGVbYV09PT1yW2FdKXJldHVybiEwO25bZVthXV0ucHVzaChyW2FdKX1yZXR1cm4gaShuKS5jb21wb25lbnRzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KX12YXIgaT10KCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLm5vZGUubGFiZWwsZS5saW5rLnNvdXJjZSxlLmxpbmsudGFyZ2V0KSYmKGEuZXJyb3IoIkNpcmN1bGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIFNhbmtleSBkYXRhLiBSZW1vdmluZyBhbGwgbm9kZXMgYW5kIGxpbmtzLiIpLGUubGluay5sYWJlbD1bXSxlLmxpbmsuc291cmNlPVtdLGUubGluay50YXJnZXQ9W10sZS5saW5rLnZhbHVlPVtdLGUubGluay5jb2xvcj1bXSxlLm5vZGUubGFiZWw9W10sZS5ub2RlLmNvbG9yPVtdKSxvKHtsaW5rOmUubGluayxub2RlOmUubm9kZX0pfX0seyIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2d1cCI6NzMyLCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6NTM3fV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDo0LG5vZGVUZXh0T2Zmc2V0VmVydGljYWw6Myxub2RlUGFkQWNyb3NzOjEwLHNhbmtleUl0ZXJhdGlvbnM6NTAsZm9yY2VJdGVyYXRpb25zOjUsZm9yY2VUaWNrc1BlckZyYW1lOjEwLGR1cmF0aW9uOjUwMCxlYXNlOiJjdWJpYy1pbi1vdXQiLGNuOntzYW5rZXk6InNhbmtleSIsc2Fua2V5TGlua3M6InNhbmtleS1saW5rcyIsc2Fua2V5TGluazoic2Fua2V5LWxpbmsiLHNhbmtleU5vZGVTZXQ6InNhbmtleS1ub2RlLXNldCIsc2Fua2V5Tm9kZToic2Fua2V5LW5vZGUiLG5vZGVSZWN0OiJub2RlLXJlY3QiLG5vZGVDYXB0dXJlOiJub2RlLWNhcHR1cmUiLG5vZGVDZW50ZXJlZDoibm9kZS1lbnRlcmVkIixub2RlTGFiZWxHdWlkZToibm9kZS1sYWJlbC1ndWlkZSIsbm9kZUxhYmVsOiJub2RlLWxhYmVsIixub2RlTGFiZWxUZXh0UGF0aDoibm9kZS1sYWJlbC10ZXh0LXBhdGgifX19LHt9XSwKMTA0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdHMsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCJ0aW55Y29sb3IyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1jKCJub2RlLmxhYmVsIiksYygibm9kZS5wYWQiKSxjKCJub2RlLnRoaWNrbmVzcyIpLGMoIm5vZGUubGluZS5jb2xvciIpLGMoIm5vZGUubGluZS53aWR0aCIpO3ZhciB1PWZ1bmN0aW9uKHQpe3JldHVybiBhW3QlYS5sZW5ndGhdfTtjKCJub2RlLmNvbG9yIixlLm5vZGUubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uYWRkT3BhY2l0eSh1KGUpLC44KX0pKSxjKCJsaW5rLmxhYmVsIiksYygibGluay5zb3VyY2UiKSxjKCJsaW5rLnRhcmdldCIpLGMoImxpbmsudmFsdWUiKSxjKCJsaW5rLmxpbmUuY29sb3IiKSxjKCJsaW5rLmxpbmUud2lkdGgiKSxjKCJsaW5rLmNvbG9yIixlLmxpbmsudmFsdWUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHMobC5wYXBlcl9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKTwuMzMzPyJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikiOiJyZ2JhKDAsIDAsIDAsIDAuMikifSkpLGMoImRvbWFpbi54IiksYygiZG9tYWluLnkiKSxjKCJvcmllbnRhdGlvbiIpLGMoInZhbHVlZm9ybWF0IiksYygidmFsdWVzdWZmaXgiKSxjKCJhcnJhbmdlbWVudCIpLG4uY29lcmNlRm9udChjLCJ0ZXh0Zm9udCIsbi5leHRlbmRGbGF0KHt9LGwuZm9udCkpO3ZhciBmPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUubGluay5zb3VyY2UuaW5kZXhPZihyKT09PS0xJiZlLmxpbmsudGFyZ2V0LmluZGV4T2Yocik9PT0tMX07ZS5ub2RlLmxhYmVsLnNvbWUoZikmJm4ud2FybigiU29tZSBvZiB0aGUgbm9kZXMgYXJlIG5laXRoZXIgc291cmNlcyBub3IgdGFyZ2V0cywgdGhleSB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTAsIi4uLy4uL2xpYiI6NzM1LCIuL2F0dHJpYnV0ZXMiOjEwMzYsdGlueWNvbG9yMjo1NDJ9XSwxMDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2Fua2V5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6MTAzNiwiLi9iYXNlX3Bsb3QiOjEwMzcsIi4vY2FsYyI6MTAzOCwiLi9kZWZhdWx0cyI6MTA0MCwiLi9wbG90IjoxMDQyfV0sMTA0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pfWZ1bmN0aW9uIGEodCxlKXtwLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxwLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBvKHQpe3Auc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUuc291cmNlTGlua3MuaW5kZXhPZihlLmxpbmspIT09LTF8fHQubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKGUubGluaykhPT0tMX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluaykhPT0tMXx8ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKSE9PS0xfX1mdW5jdGlvbiBjKHQsZSxyKXtlJiZyJiZpKHIsZSkuc2VsZWN0QWxsKCIuIitiLnNhbmtleUxpbmspLmZpbHRlcihzKGUpKS5jYWxsKGYuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHUodCxlLHIpe2UmJnImJmkocixlKS5zZWxlY3RBbGwoIi4iK2Iuc2Fua2V5TGluaykuZmlsdGVyKHMoZSkpLmNhbGwoaC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgYT1uLmRhdHVtKCkubGluay5sYWJlbDtuLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC40KSxhJiZpKGUsdCkuc2VsZWN0QWxsKCIuIitiLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09YX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC40KSxyJiZpKGUsdCkuc2VsZWN0QWxsKCIuIitiLnNhbmtleU5vZGUpLmZpbHRlcihsKHQpKS5jYWxsKGMpfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGE9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLGEmJmkoZSx0KS5zZWxlY3RBbGwoIi4iK2Iuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1hfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxyJiZpKGUsdCkuc2VsZWN0QWxsKGIuc2Fua2V5Tm9kZSkuZmlsdGVyKGwodCkpLmNhbGwodSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj15Lm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59dmFyIHA9dCgiZDMiKSxtPXQoIi4vcmVuZGVyIiksdj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikseT10KCIuLi8uLi9saWIiKSxiPXQoIi4vY29uc3RhbnRzIikuY247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3BhcGVyLHM9ci5fc2l6ZSxsPWZ1bmN0aW9uKGUscil7dmFyIG49ci5saW5rO24ub3JpZ2luYWxFdmVudD1wLmV2ZW50LHQuX2hvdmVyZGF0YT1bbl0sdi5jbGljayh0LHt0YXJnZXQ6ITB9KX0seT1mdW5jdGlvbihlLHIsbil7cC5zZWxlY3QoZSkuY2FsbChmLmJpbmQoMCxyLG4sITApKSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OnAuZXZlbnQscG9pbnRzOltyLmxpbmtdfSl9LHg9ZnVuY3Rpb24oZSxpKXt2YXIgcz1pLmxpbmsudHJhY2UsbD10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9Yy5sZWZ0K2Mud2lkdGgvMixmPWMudG9wK2MuaGVpZ2h0LzIsaD12LmxvbmVIb3Zlcih7eDp1LWwubGVmdCx5OmYtbC50b3AsbmFtZTpwLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLmxpbmsudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5saW5rLmxhYmVsfHwiIixbIlNvdXJjZToiLGkubGluay5zb3VyY2UubGFiZWxdLmpvaW4oIiAiKSxbIlRhcmdldDoiLGkubGluay50YXJnZXQubGFiZWxdLmpvaW4oIiAiKV0uZmlsdGVyKG4pLmpvaW4oIjxicj4iKSxjb2xvcjpkKHMsImJnY29sb3IiKXx8Zy5hZGRPcGFjaXR5KGkudGlueUNvbG9ySHVlLDEpLGJvcmRlckNvbG9yOmQocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmQocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpkKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpkKHMsImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOnAuZXZlbnQueDx1PyJyaWdodCI6ImxlZnQifSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7YShoLC42NSksbyhoKX0sXz1mdW5jdGlvbihlLG4saSl7cC5zZWxlY3QoZSkuY2FsbChoLmJpbmQoMCxuLGksITApKSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6cC5ldmVudCxwb2ludHM6W24ubGlua119KSx2LmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKX0sdz1mdW5jdGlvbihlLHIsbil7dmFyIGk9ci5ub2RlO2kub3JpZ2luYWxFdmVudD1wLmV2ZW50LHQuX2hvdmVyZGF0YT1baV0scC5zZWxlY3QoZSkuY2FsbCh1LHIsbiksdi5jbGljayh0LHt0YXJnZXQ6ITB9KX0sTT1mdW5jdGlvbihlLHIsbil7cC5zZWxlY3QoZSkuY2FsbChjLHIsbiksdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpwLmV2ZW50LHBvaW50czpbci5ub2RlXX0pfSxUPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5ub2RlLnRyYWNlLGw9cC5zZWxlY3QoZSkuc2VsZWN0KCIuIitiLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1PWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9dS5sZWZ0LTItYy5sZWZ0LGg9dS5yaWdodCsyLWMubGVmdCxtPXUudG9wK3UuaGVpZ2h0LzQtYy50b3AsZz12LmxvbmVIb3Zlcih7eDA6Zix4MTpoLHk6bSxuYW1lOnAuZm9ybWF0KGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeCx0ZXh0OltpLm5vZGUubGFiZWwsWyJJbmNvbWluZyBmbG93IGNvdW50OiIsaS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aF0uam9pbigiICIpLFsiT3V0Z29pbmcgZmxvdyBjb3VudDoiLGkubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmpvaW4oIiAiKV0uZmlsdGVyKG4pLmpvaW4oIjxicj4iKSxjb2xvcjpkKHMsImJnY29sb3IiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6ZChzLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZChzLCJmb250LmZhbWlseSIpLGZvbnRTaXplOmQocywiZm9udC5zaXplIiksZm9udENvbG9yOmQocywiZm9udC5jb2xvciIpLGlkZWFsQWxpZ246ImxlZnQifSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7YShnLC44NSksbyhnKX0saz1mdW5jdGlvbihlLG4saSl7cC5zZWxlY3QoZSkuY2FsbCh1LG4saSksdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OnAuZXZlbnQscG9pbnRzOltuLm5vZGVdfSksdi5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSl9O20oaSxlLHt3aWR0aDpzLncsaGVpZ2h0OnMuaCxtYXJnaW46e3Q6cy50LHI6cy5yLGI6cy5iLGw6cy5sfX0se2xpbmtFdmVudHM6e2hvdmVyOnksZm9sbG93OngsdW5ob3ZlcjpfLHNlbGVjdDpsfSxub2RlRXZlbnRzOntob3ZlcjpNLGZvbGxvdzpULHVuaG92ZXI6ayxzZWxlY3Q6d319KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2xpYiI6NzM1LCIuL2NvbnN0YW50cyI6MTAzOSwiLi9yZW5kZXIiOjEwNDMsZDM6MTIxfV0sMTA0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlLHI9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsWD10W2VdLngsdFtlXS5vcmlnaW5hbFk9dFtlXS55LHIuaW5kZXhPZih0W2VdLngpPT09LTEmJnIucHVzaCh0W2VdLngpO2ZvcihyLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxMYXllckluZGV4PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCksdFtlXS5vcmlnaW5hbExheWVyPXRbZV0ub3JpZ2luYWxMYXllckluZGV4LyhyLmxlbmd0aC0xKX1mdW5jdGlvbiBpKHQpe3QubGFzdERyYWdnZWRYPXQueCx0Lmxhc3REcmFnZ2VkWT10Lnl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5vcmlnaW5hbFg9PT10Lm5vZGUub3JpZ2luYWxYfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT10W2VdLnkrdFtlXS5keS8yfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PXRbZV0ueS10W2VdLmR5LzJ9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGk9TihlKS50cmFjZSxhPWkuZG9tYWluLHM9aS5ub2RlLGw9aS5saW5rLGM9aS5hcnJhbmdlbWVudCx1PSJoIj09PWkub3JpZW50YXRpb24sZj1pLm5vZGUucGFkLGg9aS5ub2RlLnRoaWNrbmVzcyxkPWkubm9kZS5saW5lLmNvbG9yLHA9aS5ub2RlLmxpbmUud2lkdGgsbT1pLmxpbmsubGluZS5jb2xvcix2PWkubGluay5saW5lLndpZHRoLGc9aS52YWx1ZWZvcm1hdCx5PWkudmFsdWVzdWZmaXgsYj1pLnRleHRmb250LHg9dC53aWR0aCooYS54WzFdLWEueFswXSksXz10LmhlaWdodCooYS55WzFdLWEueVswXSksdz1zLmxhYmVsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybntwb2ludE51bWJlcjplLGxhYmVsOnQsY29sb3I6Ui5pc0FycmF5KHMuY29sb3IpP3MuY29sb3JbZV06cy5jb2xvcn19KSxNPWwudmFsdWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BvaW50TnVtYmVyOmUsbGFiZWw6bC5sYWJlbFtlXSxjb2xvcjpSLmlzQXJyYXkobC5jb2xvcik/bC5jb2xvcltlXTpsLmNvbG9yLHNvdXJjZTpsLnNvdXJjZVtlXSx0YXJnZXQ6bC50YXJnZXRbZV0sdmFsdWU6dH19KSxUPXooKS5zaXplKHU/W3gsX106W18seF0pLm5vZGVXaWR0aChoKS5ub2RlUGFkZGluZyhmKS5ub2Rlcyh3KS5saW5rcyhNKS5sYXlvdXQoTC5zYW5rZXlJdGVyYXRpb25zKSxrPVQubm9kZXMoKSxBPTA7QTxrLmxlbmd0aDtBKyspbj1rW0FdLG4ud2lkdGg9eCxuLmhlaWdodD1fO3JldHVybiBvKHcpLHtrZXk6cix0cmFjZTppLGd1aWQ6TWF0aC5mbG9vcigxZTEyKigxK01hdGgucmFuZG9tKCkpKSxob3Jpem9udGFsOnUsd2lkdGg6eCxoZWlnaHQ6Xyxub2RlUGFkOmYsbm9kZUxpbmVDb2xvcjpkLG5vZGVMaW5lV2lkdGg6cCxsaW5rTGluZUNvbG9yOm0sbGlua0xpbmVXaWR0aDp2LHZhbHVlRm9ybWF0OmcsdmFsdWVTdWZmaXg6eSx0ZXh0Rm9udDpiLHRyYW5zbGF0ZVg6YS54WzBdKngrdC5tYXJnaW4ubCx0cmFuc2xhdGVZOnQuaGVpZ2h0LWEueVsxXSp0LmhlaWdodCt0Lm1hcmdpbi50LGRyYWdQYXJhbGxlbDp1P186eCxkcmFnUGVycGVuZGljdWxhcjp1P3g6Xyxub2Rlczp3LGxpbmtzOk0sYXJyYW5nZW1lbnQ6YyxzYW5rZXk6VCxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPUkoci5jb2xvciksaT1yLnNvdXJjZS5sYWJlbCsifCIrci50YXJnZXQubGFiZWwsYT10W2ldO3RbaV09KGF8fDApKzE7dmFyIG89aSsiX18iK3RbaV07cmV0dXJuIHIudHJhY2U9ZS50cmFjZSxyLmN1cnZlTnVtYmVyPWUudHJhY2UuaW5kZXgse2tleTpvLHRyYWNlSWQ6ZS5rZXksbGluazpyLHRpbnlDb2xvckh1ZTpELnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLGxpbmtMaW5lQ29sb3I6ZS5saW5rTGluZUNvbG9yLGxpbmtMaW5lV2lkdGg6ZS5saW5rTGluZVdpZHRoLHZhbHVlRm9ybWF0OmUudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6ZS52YWx1ZVN1ZmZpeCxzYW5rZXk6ZS5zYW5rZXksaW50ZXJhY3Rpb25TdGF0ZTplLmludGVyYWN0aW9uU3RhdGV9fWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPUkoci5jb2xvciksaT1MLm5vZGVQYWRBY3Jvc3MsYT1lLm5vZGVQYWQvMixvPXIuZHgscz1NYXRoLm1heCguNSxyLmR5KSxsPXIubGFiZWwsYz10W2xdO3RbbF09KGN8fDApKzE7dmFyIHU9bCsiX18iK3RbbF07cmV0dXJuIHIudHJhY2U9ZS50cmFjZSxyLmN1cnZlTnVtYmVyPWUudHJhY2UuaW5kZXgse2tleTp1LHRyYWNlSWQ6ZS5rZXksbm9kZTpyLG5vZGVQYWQ6ZS5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6ZS5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6ZS5ub2RlTGluZVdpZHRoLHRleHRGb250OmUudGV4dEZvbnQsc2l6ZTplLmhvcml6b250YWw/ZS5oZWlnaHQ6ZS53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKG8pLHZpc2libGVIZWlnaHQ6cyx6b25lWDotaSx6b25lWTotYSx6b25lV2lkdGg6bysyKmksem9uZUhlaWdodDpzKzIqYSxsYWJlbFk6ZS5ob3Jpem9udGFsP3IuZHkvMisxOnIuZHgvMisxLGxlZnQ6MT09PXIub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOmUud2lkdGgsZm9yY2VMYXlvdXRzOmUuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6ZS5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOm4uZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOkQudGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6ZS52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDplLnZhbHVlU3VmZml4LHNhbmtleTplLnNhbmtleSxhcnJhbmdlbWVudDplLmFycmFuZ2VtZW50LHVuaXF1ZU5vZGVMYWJlbFBhdGhJZDpbZS5ndWlkLGUua2V5LHVdLmpvaW4oIiAiKSxpbnRlcmFjdGlvblN0YXRlOmUuaW50ZXJhY3Rpb25TdGF0ZX19ZnVuY3Rpb24gZih0KXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Qubm9kZS54LnRvRml4ZWQoMykrIiwgIisodC5ub2RlLnktdC5ub2RlLmR5LzIpLnRvRml4ZWQoMykrIikifSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LnNhbmtleS5ub2RlcygpO3MoZSk7dmFyIHI9dC5zYW5rZXkubGluaygpKHQubGluayk7cmV0dXJuIG8oZSkscn1mdW5jdGlvbiBkKHQpe3QuY2FsbChmKX1mdW5jdGlvbiBwKHQsZSl7dC5jYWxsKGQpLGUuYXR0cigiZCIsaCl9ZnVuY3Rpb24gbSh0KXt0LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmxpbmsuZHk+MXx8dC5saW5rTGluZVdpZHRoPjB9ZnVuY3Rpb24gZyh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC50cmFuc2xhdGVYKyIsIit0LnRyYW5zbGF0ZVkrIikiKyh0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIil9ZnVuY3Rpb24geSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQuaG9yaXpvbnRhbD8wOnQubGFiZWxZKSsiICIrKHQuaG9yaXpvbnRhbD90LmxhYmVsWTowKSsiKSJ9ZnVuY3Rpb24gYih0KXtyZXR1cm4gQy5zdmcubGluZSgpKFtbdC5ob3Jpem9udGFsP3QubGVmdD8tdC5zaXplQWNyb3NzOnQudmlzaWJsZVdpZHRoK0wubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOkwubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdLFt0Lmhvcml6b250YWw/dC5sZWZ0Py1MLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDp0LnNpemVBY3Jvc3M6dC52aXNpYmxlSGVpZ2h0LUwubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSJ9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdC5ob3Jpem9udGFsPyJzY2FsZSgxIDEpIjoic2NhbGUoLTEgMSkifWZ1bmN0aW9uIHcodCl7cmV0dXJuIHQuZGFya0JhY2tncm91bmQmJiF0Lmhvcml6b250YWw/InJnYigyNTUsMjU1LDI1NSkiOiJyZ2IoMCwwLDApIn1mdW5jdGlvbiBNKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iMTAwJSI6IjAlIn1mdW5jdGlvbiBUKHQsZSxyKXt0Lm9uKCIuYmFzaWMiLG51bGwpLm9uKCJtb3VzZW92ZXIuYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8KHIuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKCJtb3VzZW1vdmUuYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8KHIuZm9sbG93KHRoaXMsdCksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkub24oIm1vdXNlb3V0LmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fChyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKX0pLm9uKCJjbGljay5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSx0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHIuc2VsZWN0KHRoaXMsdCxlKX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPUMuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlfSkub24oImRyYWdzdGFydCIsZnVuY3Rpb24obil7aWYoImZpeGVkIiE9PW4uYXJyYW5nZW1lbnQmJihSLnJhaXNlVG9Ub3AodGhpcyksbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPW4ubm9kZSxpKG4ubm9kZSksbi5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLG4uaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxuLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09bi5hcnJhbmdlbWVudCkpe3ZhciBhPW4udHJhY2VJZCsifCIrTWF0aC5mbG9vcihuLm5vZGUub3JpZ2luYWxYKTtuLmZvcmNlTGF5b3V0c1thXT9uLmZvcmNlTGF5b3V0c1thXS5hbHBoYSgxKTpBKHQsYSxuKSxFKHQsZSxuLGEpfX0pLm9uKCJkcmFnIixmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49Qy5ldmVudC54LG89Qy5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54PW4sci5ub2RlLnk9byk6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLng9biksci5ub2RlLnk9TWF0aC5tYXgoci5ub2RlLmR5LzIsTWF0aC5taW4oci5zaXplLXIubm9kZS5keS8yLG8pKSksaShyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS5yZWxheW91dCgpLHAodC5maWx0ZXIoYShyKSksZSkpfX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITF9KTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChuKX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1yLnNhbmtleS5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSk7ci5mb3JjZUxheW91dHNbZV09Ty5mb3JjZVNpbXVsYXRpb24obikuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsTy5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMoTC5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixTKHQsZSxuLHIpKS5zdG9wKCl9ZnVuY3Rpb24gRSh0LGUscixuKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGkoKXtmb3IodmFyIG89MDtvPEwuZm9yY2VUaWNrc1BlckZyYW1lO28rKylyLmZvcmNlTGF5b3V0c1tuXS50aWNrKCk7ci5zYW5rZXkucmVsYXlvdXQoKSxwKHQuZmlsdGVyKGEocikpLGUpLHIuZm9yY2VMYXlvdXRzW25dLmFscGhhKCk+MCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfWZ1bmN0aW9uIFModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2E9PT1uLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M/KGEueD1hLmxhc3REcmFnZ2VkWCxhLnk9YS5sYXN0RHJhZ2dlZFkpOihhLnZ4PShhLm9yaWdpbmFsWC1hLngpL0wuZm9yY2VUaWNrc1BlckZyYW1lLGEueT1NYXRoLm1pbihuLnNpemUtYS5keS8yLE1hdGgubWF4KGEuZHkvMixhLnkpKSksdD1NYXRoLm1heCh0LE1hdGguYWJzKGEudngpLE1hdGguYWJzKGEudnkpKX0hbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzJiZ0PC4xJiZuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgpPjAmJm4uZm9yY2VMYXlvdXRzW2VdLmFscGhhKDApfX12YXIgTD10KCIuL2NvbnN0YW50cyIpLEM9dCgiZDMiKSxJPXQoInRpbnljb2xvcjIiKSxEPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxQPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHo9dCgiQHBsb3RseS9kMy1zYW5rZXkiKS5zYW5rZXksTz10KCJkMy1mb3JjZSIpLFI9dCgiLi4vLi4vbGliIiksRj10KCIuLi8uLi9saWIvZ3VwIikua2V5RnVuLGo9dCgiLi4vLi4vbGliL2d1cCIpLnJlcGVhdCxOPXQoIi4uLy4uL2xpYi9ndXAiKS51bndyYXA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuc2VsZWN0QWxsKCIuIitMLmNuLnNhbmtleSkuZGF0YShlLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gTih0KS50cmFjZS52aXNpYmxlfSkubWFwKGwuYmluZChudWxsLHIpKSxGKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmNuLnNhbmtleSwhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLmF0dHIoInRyYW5zZm9ybSIsZyksYS50cmFuc2l0aW9uKCkuZWFzZShMLmVhc2UpLmR1cmF0aW9uKEwuZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsZyk7dmFyIG89YS5zZWxlY3RBbGwoIi4iK0wuY24uc2Fua2V5TGlua3MpLmRhdGEoaixGKTtvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgcz1vLnNlbGVjdEFsbCgiLiIrTC5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LnNhbmtleS5saW5rcygpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChjLmJpbmQobnVsbCxlLHQpKX0sRik7cy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoTC5jbi5zYW5rZXlMaW5rLCEwKS5hdHRyKCJkIixoKS5jYWxsKFQsYSxpLmxpbmtFdmVudHMpLHMuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/RC50aW55UkdCKEkodC5saW5rTGluZUNvbG9yKSk6dC50aW55Q29sb3JIdWV9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP0Qub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdih0KT90LmxpbmtMaW5lV2lkdGg6MX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLHMudHJhbnNpdGlvbigpLmVhc2UoTC5lYXNlKS5kdXJhdGlvbihMLmR1cmF0aW9uKS5hdHRyKCJkIixoKSxzLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShMLmVhc2UpLmR1cmF0aW9uKEwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgZD1hLnNlbGVjdEFsbCgiLiIrTC5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKGosRik7ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5jbi5zYW5rZXlOb2RlU2V0LCEwKSxkLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmFycmFuZ2VtZW50KXtjYXNlImZpeGVkIjpyZXR1cm4iZGVmYXVsdCI7Y2FzZSJwZXJwZW5kaWN1bGFyIjpyZXR1cm4ibnMtcmVzaXplIjtkZWZhdWx0OnJldHVybiJtb3ZlIn19KTt2YXIgcD1kLnNlbGVjdEFsbCgiLiIrTC5jbi5zYW5rZXlOb2RlKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Fua2V5Lm5vZGVzKCkscj17fTtyZXR1cm4gbihlKSxlLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcCh1LmJpbmQobnVsbCxyLHQpKX0sRik7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKGYpLmNhbGwoVCxhLGkubm9kZUV2ZW50cykscC5jYWxsKGsscyxpKSxwLnRyYW5zaXRpb24oKS5lYXNlKEwuZWFzZSkuZHVyYXRpb24oTC5kdXJhdGlvbikuY2FsbChmKSxwLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShMLmVhc2UpLmR1cmF0aW9uKEwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgQT1wLnNlbGVjdEFsbCgiLiIrTC5jbi5ub2RlUmVjdCkuZGF0YShqKTtBLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChMLmNuLm5vZGVSZWN0LCEwKS5jYWxsKG0pLEEuc3R5bGUoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZUxpbmVXaWR0aH0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKHQpe3JldHVybiBELnRpbnlSR0IoSSh0Lm5vZGVMaW5lQ29sb3IpKX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIEQub3BhY2l0eSh0Lm5vZGVMaW5lQ29sb3IpfSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksQS50cmFuc2l0aW9uKCkuZWFzZShMLmVhc2UpLmR1cmF0aW9uKEwuZHVyYXRpb24pLmNhbGwobSk7dmFyIEU9cC5zZWxlY3RBbGwoIi4iK0wuY24ubm9kZUNhcHR1cmUpLmRhdGEoaik7RS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoTC5jbi5ub2RlQ2FwdHVyZSwhMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCksRS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWH0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVZfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVXaWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZUhlaWdodH0pO3ZhciBTPXAuc2VsZWN0QWxsKCIuIitMLmNuLm5vZGVDZW50ZXJlZCkuZGF0YShqKTtTLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmNuLm5vZGVDZW50ZXJlZCwhMCkuYXR0cigidHJhbnNmb3JtIix5KSxTLnRyYW5zaXRpb24oKS5lYXNlKEwuZWFzZSkuZHVyYXRpb24oTC5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIix5KTt2YXIgQz1TLnNlbGVjdEFsbCgiLiIrTC5jbi5ub2RlTGFiZWxHdWlkZSkuZGF0YShqKTtDLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChMLmNuLm5vZGVMYWJlbEd1aWRlLCEwKS5hdHRyKCJpZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkuYXR0cigiZCIsYikuYXR0cigidHJhbnNmb3JtIix4KSxDLnRyYW5zaXRpb24oKS5lYXNlKEwuZWFzZSkuZHVyYXRpb24oTC5kdXJhdGlvbikuYXR0cigiZCIsYikuYXR0cigidHJhbnNmb3JtIix4KTt2YXIgej1TLnNlbGVjdEFsbCgiLiIrTC5jbi5ub2RlTGFiZWwpLmRhdGEoaik7ei5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoTC5jbi5ub2RlTGFiZWwsITApLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoImZpbGwiLCJibGFjayIpLHouc3R5bGUoInRleHQtc2hhZG93IixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsPyItMXB4IDFweCAxcHggI2ZmZiwgMXB4IDFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZiI6Im5vbmUifSkuZWFjaChmdW5jdGlvbih0KXtQLmZvbnQoeix0LnRleHRGb250KX0pLHoudHJhbnNpdGlvbigpLmVhc2UoTC5lYXNlKS5kdXJhdGlvbihMLmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pO3ZhciBPPXouc2VsZWN0QWxsKCIuIitMLmNuLm5vZGVMYWJlbFRleHRQYXRoKS5kYXRhKGopO08uZW50ZXIoKS5hcHBlbmQoInRleHRQYXRoIikuY2xhc3NlZChMLmNuLm5vZGVMYWJlbFRleHRQYXRoLCEwKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ4bGluazpocmVmIixmdW5jdGlvbih0KXtyZXR1cm4iIyIrdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKCJzdGFydE9mZnNldCIsTSkuc3R5bGUoImZpbGwiLHcpLE8udGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsfHx0Lm5vZGUuZHk+NT90Lm5vZGUubGFiZWw6IiJ9KS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyJlbmQiOiJzdGFydCJ9KSxPLnRyYW5zaXRpb24oKS5lYXNlKEwuZWFzZSkuZHVyYXRpb24oTC5kdXJhdGlvbikuYXR0cigic3RhcnRPZmZzZXQiLE0pLnN0eWxlKCJmaWxsIix3KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi9ndXAiOjczMiwiLi9jb25zdGFudHMiOjEwMzksIkBwbG90bHkvZDMtc2Fua2V5IjozOSxkMzoxMjEsImQzLWZvcmNlIjoxMTcsdGlueWNvbG9yMjo1NDJ9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo3MzV9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz0odCgiLi9jb25zdGFudHMiKSx0KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCk7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6Yyh7fSxzLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxtYXJrZXI6Yyh7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5zeW1ib2xMaXN0LGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3NjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY29sb3JiYXI6YSxsaW5lOmMoe3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxuKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFsIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwibm9uZSJdLGFycmF5T2s6ITAsZGZsdDoibm9uZSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbigibWFya2VyIikpLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250Om8oe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlcnJvcl95OmksZXJyb3JfeDppfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYxMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYxOCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MzQsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2F0dHJpYnV0ZXMiOjYzNywiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwMywiLi9jb25zdGFudHMiOjEwNTB9XSwxMDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4vc3VidHlwZXMiKSxzPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksbD10KCIuL2FycmF5c190b19jYWxjZGF0YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxoPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxkPWYubWFrZUNhbGNkYXRhKGUsIngiKSxwPWgubWFrZUNhbGNkYXRhKGUsInkiKSxtPU1hdGgubWluKGQubGVuZ3RoLHAubGVuZ3RoKTtmLl9taW5EdGljaz0wLGguX21pbkR0aWNrPTAsZC5sZW5ndGg+bSYmZC5zcGxpY2UobSxkLmxlbmd0aC1tKSxwLmxlbmd0aD5tJiZwLnNwbGljZShtLHAubGVuZ3RoLW0pO3ZhciB2PXtwYWRkZWQ6ITB9LGc9e3BhZGRlZDohMH07aWYoby5oYXNNYXJrZXJzKGUpKXtpZihyPWUubWFya2VyLGM9ci5zaXplLEFycmF5LmlzQXJyYXkoYykpe3ZhciB5PXt0eXBlOiJsaW5lYXIifTtpLnNldENvbnZlcnQoeSksYz15Lm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLGMubGVuZ3RoPm0mJmMuc3BsaWNlKG0sYy5sZW5ndGgtbSl9dmFyIGIseD0xLjYqKGUubWFya2VyLnNpemVyZWZ8fDEpO2I9ImFyZWEiPT09ZS5tYXJrZXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydCgodHx8MCkveCksMyl9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgodHx8MCkveCwzKX0sdi5wcGFkPWcucHBhZD1BcnJheS5pc0FycmF5KGMpP2MubWFwKGIpOmIoYyl9cyhlKSwhKCJ0b3plcm94Ij09PWUuZmlsbHx8InRvbmV4dHgiPT09ZS5maWxsJiZ0LmZpcnN0c2NhdHRlcil8fGRbMF09PT1kW20tMV0mJnBbMF09PT1wW20tMV0/ZS5lcnJvcl95LnZpc2libGV8fFsidG9uZXh0eSIsInRvemVyb3kiXS5pbmRleE9mKGUuZmlsbCk9PT0tMSYmKG8uaGFzTWFya2VycyhlKXx8by5oYXNUZXh0KGUpKXx8KHYucGFkZGVkPSExLHYucHBhZD0wKTp2LnRvemVybz0hMCwhKCJ0b3plcm95Ij09PWUuZmlsbHx8InRvbmV4dHkiPT09ZS5maWxsJiZ0LmZpcnN0c2NhdHRlcil8fGRbMF09PT1kW20tMV0mJnBbMF09PT1wW20tMV0/WyJ0b25leHR4IiwidG96ZXJveCJdLmluZGV4T2YoZS5maWxsKSE9PS0xJiYoZy5wYWRkZWQ9ITEpOmcudG96ZXJvPSEwLGkuZXhwYW5kKGYsZCx2KSxpLmV4cGFuZChoLHAsZyk7dmFyIF89bmV3IEFycmF5KG0pO2Zvcih1PTA7dTxtO3UrKylfW3VdPW4oZFt1XSkmJm4ocFt1XSk/e3g6ZFt1XSx5OnBbdV19Ont4OmEseTphfSxlLmlkcyYmKF9bdV0uaWQ9U3RyaW5nKGUuaWRzW3VdKSk7cmV0dXJuIGwoXyxlKSx0LmZpcnN0c2NhdHRlcj0hMSxffX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDQ0LCIuL2NvbG9yc2NhbGVfY2FsYyI6MTA0OSwiLi9zdWJ0eXBlcyI6MTA2NiwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKCJzY2F0dGVyIj09PXIudHlwZSl7dmFyIG49ci5maWxsO2lmKCJub25lIiE9PW4mJiJ0b3NlbGYiIT09biYmKHIub3BhY2l0eT12b2lkIDAsInRvbmV4dHkiPT09bnx8InRvbmV4dHgiPT09bikpZm9yKHZhciBpPWUtMTtpPj0wO2ktLSl7dmFyIGE9dFtpXTtpZigic2NhdHRlciI9PT1hLnR5cGUmJmEueGF4aXM9PT1yLnhheGlzJiZhLnlheGlzPT09ci55YXhpcyl7YS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMTA0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGw9ci5tYXJrZXIsYz0iY2IiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK2MpLnJlbW92ZSgpLHZvaWQgMD09PWx8fCFsLnNob3dzY2FsZSlyZXR1cm4gdm9pZCBhLmF1dG9NYXJnaW4odCxjKTt2YXIgdT1sLmNvbG9yLGY9bC5jbWluLGg9bC5jbWF4O24oZil8fChmPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHUpKSxuKGgpfHwoaD1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx1KSk7dmFyIGQ9ZVswXS50LmNiPXModCxjKSxwPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKGwuY29sb3JzY2FsZSxmLGgpLHtub051bWVyaWNDaGVjazohMH0pO2QuZmlsbGNvbG9yKHApLmZpbGxsZXZlbHMoe3N0YXJ0OmYsZW5kOmgsc2l6ZTooaC1mKS8yNTR9KS5vcHRpb25zKGwuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjE0LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNSwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsImZhc3QtaXNudW1lcmljIjoxMzF9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7YS5oYXNMaW5lcyh0KSYmbih0LCJsaW5lIikmJmkodCx0LmxpbmUuY29sb3IsImxpbmUiLCJjIiksYS5oYXNNYXJrZXJzKHQpJiYobih0LCJtYXJrZXIiKSYmaSh0LHQubWFya2VyLmNvbG9yLCJtYXJrZXIiLCJjIiksbih0LCJtYXJrZXIubGluZSIpJiZpKHQsdC5tYXJrZXIubGluZS5jb2xvciwibWFya2VyLmxpbmUiLCJjIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjE3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYyNCwiLi9zdWJ0eXBlcyI6MTA2Nn1dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtQVFNfTElORVNPTkxZOjIwLG1pblRvbGVyYW5jZTouMix0b2xlcmFuY2VHcm93dGg6MTAsbWF4U2NyZWVuc0F3YXk6MjB9fSx7fV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4vc3VidHlwZXMiKSxzPXQoIi4veHlfZGVmYXVsdHMiKSxsPXQoIi4vbWFya2VyX2RlZmF1bHRzIiksYz10KCIuL2xpbmVfZGVmYXVsdHMiKSx1PXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLGY9dCgiLi90ZXh0X2RlZmF1bHRzIiksaD10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gbShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciB2PXModCxlLHAsbSksZz12PGEuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjtpZighdilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO20oInRleHQiKSxtKCJob3ZlcnRleHQiKSxtKCJtb2RlIixnKSxvLmhhc0xpbmVzKGUpJiYoYyh0LGUscixwLG0pLHUodCxlLG0pLG0oImNvbm5lY3RnYXBzIiksbSgibGluZS5zaW1wbGlmeSIpKSxvLmhhc01hcmtlcnMoZSkmJmwodCxlLHIscCxtLHtncmFkaWVudDohMH0pLG8uaGFzVGV4dChlKSYmZih0LGUscCxtKTt2YXIgeT1bXTsoby5oYXNNYXJrZXJzKGUpfHxvLmhhc1RleHQoZSkpJiYobSgibWFya2VyLm1heGRpc3BsYXllZCIpLHkucHVzaCgicG9pbnRzIikpLG0oImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJihoKHQsZSxyLG0pLG8uaGFzTGluZXMoZSl8fHUodCxlLG0pKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHkucHVzaCgiZmlsbHMiKSxtKCJob3Zlcm9uIix5LmpvaW4oIisiKXx8InBvaW50cyIpLGQodCxlLHIse2F4aXM6InkifSksZCh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxtKCJjbGlwb25heGlzIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIjo2NDAsIi4uLy4uL2xpYiI6NzM1LCIuL2F0dHJpYnV0ZXMiOjEwNDUsIi4vY29uc3RhbnRzIjoxMDUwLCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA1MywiLi9saW5lX2RlZmF1bHRzIjoxMDU3LCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNTksIi4vbWFya2VyX2RlZmF1bHRzIjoxMDYyLCIuL3N1YnR5cGVzIjoxMDY2LCIuL3RleHRfZGVmYXVsdHMiOjEwNjcsIi4veHlfZGVmYXVsdHMiOjEwNjh9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHR8fDA9PT10fXZhciBpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxvPWkuZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKG4obykpcmV0dXJuIGEobyk7dmFyIHM9aS5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIG4ocyk/YShzKTp2b2lkIDB9fSx7Ii4uLy4uL2xpYiI6NzM1fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPSExO2lmKGUubWFya2VyKXt2YXIgbz1lLm1hcmtlci5jb2xvcixzPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3I7byYmIUFycmF5LmlzQXJyYXkobyk/YT1vOnMmJiFBcnJheS5pc0FycmF5KHMpJiYoYT1zKX1pKCJmaWxsY29sb3IiLG4uYWRkT3BhY2l0eSgoZS5saW5lfHx7fSkuY29sb3J8fGF8fHIsLjUpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExfV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybiByPXQubGluZS5jb2xvcixyJiZuLm9wYWNpdHkocik/cjp0LmZpbGxjb2xvcjtpZigibm9uZSI9PT10Lm1vZGUpcmV0dXJuIHQuZmlsbD90LmZpbGxjb2xvcjoiIjt2YXIgbz1lLm1jY3x8KHQubWFya2VyfHx7fSkuY29sb3Iscz1lLm1sY2N8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkuY29sb3I7cmV0dXJuIGE9byYmbi5vcGFjaXR5KG8pP286cyYmbi5vcGFjaXR5KHMpJiYoZS5tbHd8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkud2lkdGgpP3M6IiIsYT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yLHImJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3IpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4vc3VidHlwZXMiOjEwNjZ9XSwxMDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSxvPXQoIi4vZ2V0X3RyYWNlX2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuL2ZpbGxfaG92ZXJfdGV4dCIpLGM9aS5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIGY9dC5jZCxoPWZbMF0udHJhY2UsZD10LnhhLHA9dC55YSxtPWQuYzJwKGUpLHY9cC5jMnAociksZz1bbSx2XSx5PWguaG92ZXJvbnx8IiI7aWYoeS5pbmRleE9mKCJwb2ludHMiKSE9PS0xKXt2YXIgYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZC5jMnAodC54KS1tKS1lLDEtMy9lKX0seD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocC5jMnAodC55KS12KS1lLDEtMy9lKX0sXz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPWQuYzJwKHQueCktbSxuPXAuYzJwKHQueSktdjtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS0zL2UpfSx3PWkuZ2V0RGlzdGFuY2VGdW5jdGlvbih1LGIseCxfKTtpZihpLmdldENsb3Nlc3QoZix3LHQpLHQuaW5kZXghPT0hMSl7dmFyIE09Zlt0LmluZGV4XSxUPWQuYzJwKE0ueCwhMCksaz1wLmMycChNLnksITApLEE9TS5tcmN8fDE7cmV0dXJuIG4uZXh0ZW5kRmxhdCh0LHtjb2xvcjpvKGgsTSkseDA6VC1BLHgxOlQrQSx4TGFiZWxWYWw6TS54LHkwOmstQSx5MTprK0EseUxhYmVsVmFsOk0ueX0pLGwoTSxoLHQpLGEuaG92ZXJJbmZvKE0saCx0KSxbdF19fWlmKHkuaW5kZXhPZigiZmlsbHMiKSE9PS0xJiZoLl9wb2x5Z29ucyl7dmFyIEUsUyxMLEMsSSxELFAseixPLFI9aC5fcG9seWdvbnMsRj1bXSxqPSExLE49MS8wLEI9LSgxLzApLFU9MS8wLFY9LSgxLzApO2ZvcihFPTA7RTxSLmxlbmd0aDtFKyspTD1SW0VdLEwuY29udGFpbnMoZykmJihqPSFqLEYucHVzaChMKSxVPU1hdGgubWluKFUsTC55bWluKSxWPU1hdGgubWF4KFYsTC55bWF4KSk7aWYoail7VT1NYXRoLm1heChVLDApLFY9TWF0aC5taW4oVixwLl9sZW5ndGgpO3ZhciBIPShVK1YpLzI7Zm9yKEU9MDtFPEYubGVuZ3RoO0UrKylmb3IoQz1GW0VdLnB0cyxTPTE7UzxDLmxlbmd0aDtTKyspej1DW1MtMV1bMV0sTz1DW1NdWzFdLHo+SCE9Tz49SCYmKEQ9Q1tTLTFdWzBdLFA9Q1tTXVswXSxJPUQrKFAtRCkqKEgteikvKE8teiksTj1NYXRoLm1pbihOLEkpLEI9TWF0aC5tYXgoQixJKSk7Tj1NYXRoLm1heChOLDApLEI9TWF0aC5taW4oQixkLl9sZW5ndGgpO3ZhciBxPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShoLmZpbGxjb2xvcik/cT1oLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGgubGluZXx8e30pLmNvbG9yKSYmKHE9aC5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6YysxMCx4MDpOLHgxOkIseTA6SCx5MTpILGNvbG9yOnF9KSxkZWxldGUgdC5pbmRleCxoLnRleHQmJiFBcnJheS5pc0FycmF5KGgudGV4dCk/dC50ZXh0PVN0cmluZyhoLnRleHQpOnQudGV4dD1oLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjY0MSwiLi4vLi4vY29tcG9uZW50cy9meCI6NjUyLCIuLi8uLi9saWIiOjczNSwiLi9maWxsX2hvdmVyX3RleHQiOjEwNTIsIi4vZ2V0X3RyYWNlX2NvbG9yIjoxMDU0fV0sMTA1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fSxpPXQoIi4vc3VidHlwZXMiKTtuLmhhc0xpbmVzPWkuaGFzTGluZXMsbi5oYXNNYXJrZXJzPWkuaGFzTWFya2VycyxuLmhhc1RleHQ9aS5oYXNUZXh0LG4uaXNCdWJibGU9aS5pc0J1YmJsZSxuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jbGVhbkRhdGE9dCgiLi9jbGVhbl9kYXRhIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDQ0LCIuL2F0dHJpYnV0ZXMiOjEwNDUsIi4vY2FsYyI6MTA0NiwiLi9jbGVhbl9kYXRhIjoxMDQ3LCIuL2NvbG9yYmFyIjoxMDQ4LCIuL2RlZmF1bHRzIjoxMDUxLCIuL2hvdmVyIjoxMDU1LCIuL3Bsb3QiOjEwNjMsIi4vc2VsZWN0IjoxMDY0LCIuL3N0eWxlIjoxMDY1LCIuL3N1YnR5cGVzIjoxMDY2fV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9KHQubWFya2VyfHx7fSkuY29sb3I7aWYobygibGluZS5jb2xvciIsciksbih0LCJsaW5lIikpaSh0LGUsYSxvLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pO2Vsc2V7bygibGluZS5jb2xvciIsIUFycmF5LmlzQXJyYXkobCkmJmx8fHIpfW8oImxpbmUud2lkdGgiKSwoc3x8e30pLm5vRGFzaHx8bygibGluZS5kYXNoIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjIwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYyNH1dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zZWdtZW50c0ludGVyc2VjdCxvPWkuY29uc3RyYWluLHM9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByPU8uYzJwKHRbZV0ueCksaT1SLmMycCh0W2VdLnkpO3JldHVybiByIT09biYmaSE9PW4mJltyLGldfWZ1bmN0aW9uIGwodCl7dmFyIGU9dFswXS9PLl9sZW5ndGgscj10WzFdL1IuX2xlbmd0aDtyZXR1cm4oMStzLnRvbGVyYW5jZUdyb3d0aCpNYXRoLm1heCgwLC1lLGUtMSwtcixyLTEpKSpOfWZ1bmN0aW9uIGModCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIG89aXRbaV0scz1hKHRbMF0sdFsxXSxlWzBdLGVbMV0sb1swXSxvWzFdLG9bMl0sb1szXSk7cyYmKCFufHxNYXRoLmFicyhzLngtclswXVswXSk+MXx8TWF0aC5hYnMocy55LXJbMF1bMV0pPjEpJiYocz1bcy54LHMueV0sbiYmYyhzLHQpPGMoclswXSx0KT9yLnVuc2hpZnQocyk6ci5wdXNoKHMpLG4rKyl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtpZih0WzBdPHR0fHx0WzBdPmV0fHx0WzFdPHJ0fHx0WzFdPm50KXJldHVybltvKHRbMF0sdHQsZXQpLG8odFsxXSxydCxudCldfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJih0WzBdPT09dHR8fHRbMF09PT1ldCl8fCh0WzFdPT09ZVsxXSYmKHRbMV09PT1ydHx8dFsxXT09PW50KXx8dm9pZCAwKX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9W10sbj1mKHQpLGk9ZihlKTtyZXR1cm4gbiYmaSYmaChuLGkpP3I6KG4mJnIucHVzaChuKSxpJiZyLnB1c2goaSkscil9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4sYSl7dmFyIG89ZihuKSxzPWYoYSksbD1bXTtpZihvJiZzJiZoKG8scykpcmV0dXJuIGw7byYmbC5wdXNoKG8pLHMmJmwucHVzaChzKTt2YXIgYz0yKmkuY29uc3RyYWluKChuW3RdK2FbdF0pLzIsZSxyKS0oKG98fG4pW3RdKyhzfHxhKVt0XSk7aWYoYyl7dmFyIHU7dT1vJiZzP2M+MD09b1t0XT5zW3RdP286czpvfHxzLHVbdF0rPWN9cmV0dXJuIGx9fWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj0oZVsxXS10WzFdKS9yO3JldHVybih0WzFdKmVbMF0tZVsxXSp0WzBdKS9yPjA/W24+MD90dDpldCxudF06W24+MD9ldDp0dCxydF19ZnVuY3Rpb24gdih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWU9PT1xW0ctMV1bMF0saT1yPT09cVtHLTFdWzFdO2lmKCFufHwhaSlpZihHPjEpe3ZhciBhPWU9PT1xW0ctMl1bMF0sbz1yPT09cVtHLTJdWzFdO24mJihlPT09dHR8fGU9PT1ldCkmJmE/bz9HLS06cVtHLTFdPXQ6aSYmKHI9PT1ydHx8cj09PW50KSYmbz9hP0ctLTpxW0ctMV09dDpxW0crK109dH1lbHNlIHFbRysrXT10fWZ1bmN0aW9uIGcodCl7cVtHLTFdWzBdIT09dFswXSYmcVtHLTFdWzFdIT09dFsxXSYmdihbVyxaXSksdih0KSxKPW51bGwsVz1aPTB9ZnVuY3Rpb24geSh0KXtpZihZPXRbMF08dHQ/dHQ6dFswXT5ldD9ldDowLFg9dFsxXTxydD9ydDp0WzFdPm50P250OjAsWXx8WCl7aWYoRylpZihKKXt2YXIgZT1RKEosdCk7ZS5sZW5ndGg+MSYmKGcoZVswXSkscVtHKytdPWVbMV0pfWVsc2UgSz1RKHFbRy0xXSx0KVswXSxxW0crK109SztlbHNlIHFbRysrXT1bWXx8dFswXSxYfHx0WzFdXTt2YXIgcj1xW0ctMV07WSYmWCYmKHJbMF0hPT1ZfHxyWzFdIT09WCk/KEomJihXIT09WSYmWiE9PVg/dihXJiZaP20oSix0KTpbV3x8WSxafHxYXSk6VyYmWiYmdihbVyxaXSkpLHYoW1ksWF0pKTpXLVkmJlotWCYmdihbWXx8VyxYfHxaXSksSj10LFc9WSxaPVh9ZWxzZSBKJiZnKFEoSix0KVswXSkscVtHKytdPXR9dmFyIGIseCxfLHcsTSxULGssQSxFLFMsTCxDLEksRCxQLHosTz1lLnhheGlzLFI9ZS55YXhpcyxGPWUuc2ltcGxpZnksaj1lLmNvbm5lY3RHYXBzLE49ZS5iYXNlVG9sZXJhbmNlLEI9ZS5zaGFwZSxVPSJsaW5lYXIiPT09QixWPVtdLEg9cy5taW5Ub2xlcmFuY2UscT1uZXcgQXJyYXkodC5sZW5ndGgpLEc9MDtGfHwoTj1IPS0xKTt2YXIgWSxYLFcsWixKLEssUSwkPXMubWF4U2NyZWVuc0F3YXksdHQ9LU8uX2xlbmd0aCokLGV0PU8uX2xlbmd0aCooMSskKSxydD0tUi5fbGVuZ3RoKiQsbnQ9Ui5fbGVuZ3RoKigxKyQpLGl0PVtbdHQscnQsZXQscnRdLFtldCxydCxldCxudF0sW2V0LG50LHR0LG50XSxbdHQsbnQsdHQscnRdXTtmb3IoImxpbmVhciI9PT1CfHwic3BsaW5lIj09PUI/UT11OiJodiI9PT1CfHwidmgiPT09Qj9RPWQ6Imh2aCI9PT1CP1E9cCgwLHR0LGV0KToidmh2Ij09PUImJihRPXAoMSxydCxudCkpLGI9MDtiPHQubGVuZ3RoO2IrKylpZih4PXIoYikpe2ZvcihHPTAsSj1udWxsLHkoeCksCmIrKztiPHQubGVuZ3RoO2IrKyl7aWYoISh3PXIoYikpKXtpZihqKWNvbnRpbnVlO2JyZWFrfWlmKFUpe2lmKCEoKFM9Yyh3LHgpKTxsKHcpKkgpKXtmb3IoQT1bKHdbMF0teFswXSkvUywod1sxXS14WzFdKS9TXSxNPXgsTD1TLEM9RD1QPTAsaz0hMSxfPXcsYisrO2I8dC5sZW5ndGg7YisrKXtpZighKFQ9cihiKSkpe2lmKGopY29udGludWU7YnJlYWt9aWYoRT1bVFswXS14WzBdLFRbMV0teFsxXV0sej1FWzBdKkFbMV0tRVsxXSpBWzBdLEQ9TWF0aC5taW4oRCx6KSwoUD1NYXRoLm1heChQLHopKS1EPmwoVCkpYnJlYWs7Xz1ULEk9RVswXSpBWzBdK0VbMV0qQVsxXSxJPkw/KEw9SSx3PVQsaz0hMSk6STxDJiYoQz1JLE09VCxrPSEwKX1pZihrPyh5KHcpLF8hPT1NJiZ5KE0pKTooTSE9PXgmJnkoTSksXyE9PXcmJnkodykpLHkoXyksYj49dC5sZW5ndGh8fCFUKWJyZWFrO3koVCkseD1UfX1lbHNlIHkodyl9SiYmdihbV3x8SlswXSxafHxKWzFdXSksVi5wdXNoKHEuc2xpY2UoMCxHKSl9cmV0dXJuIFZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vLi4vbGliIjo3MzUsIi4vY29uc3RhbnRzIjoxMDUwfV0sMTA1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPW51bGwsbz0wO288ci5sZW5ndGg7KytvKW49cltvXSxpPW5bMF0udHJhY2UsaS52aXNpYmxlPT09ITA/KGkuX25leHR0cmFjZT1udWxsLFsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGkuZmlsbCkhPT0tMSYmKGkuX3ByZXZ0cmFjZT1hLGEmJihhLl9uZXh0dHJhY2U9aSkpLGE9aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1udWxsfX0se31dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoxMzF9XSwxMDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxmPW8uaXNCdWJibGUodCksaD0odC5saW5lfHx7fSkuY29sb3I7aWYoYz1jfHx7fSxoJiYocj1oKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLGY/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9MaW5lfHwodT1oJiYhQXJyYXkuaXNBcnJheShoKSYmZS5tYXJrZXIuY29sb3IhPT1oP2g6Zj9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSxsKCJtYXJrZXIubGluZS5jb2xvciIsdSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIixmPzE6MCkpLGYmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpeyJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyMCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MjQsIi4vc3VidHlwZXMiOjEwNjZ9XSwxMDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuO2Uuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlbGVjdCh0aGlzKTtpZihuPXRbMF0udHJhY2Usbi5fbmV4dHRyYWNlKXtpZihuLl9uZXh0RmlsbD1lLnNlbGVjdCgiLmpzLWZpbGwuanMtdG9uZXh0IiksIW4uX25leHRGaWxsLnNpemUoKSl7dmFyIGk9IjpmaXJzdC1jaGlsZCI7ZS5zZWxlY3QoIi5qcy1maWxsLmpzLXRvemVybyIpLnNpemUoKSYmKGkrPSIgKyAqIiksbi5fbmV4dEZpbGw9ZS5pbnNlcnQoInBhdGgiLGkpLmF0dHIoImNsYXNzIiwianMtZmlsbCBqcy10b25leHQiKX19ZWxzZSBlLnNlbGVjdEFsbCgiLmpzLWZpbGwuanMtdG9uZXh0IikucmVtb3ZlKCksbi5fbmV4dEZpbGw9bnVsbDtuLmZpbGwmJigidG96ZXJvIj09PW4uZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1uLmZpbGx8fCJ0byI9PT1uLmZpbGwuc3Vic3RyKDAsMikmJiFuLl9wcmV2dHJhY2UpPyhuLl9vd25GaWxsPWUuc2VsZWN0KCIuanMtZmlsbC5qcy10b3plcm8iKSxuLl9vd25GaWxsLnNpemUoKXx8KG4uX293bkZpbGw9ZS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImpzLWZpbGwganMtdG96ZXJvIikpKTooZS5zZWxlY3RBbGwoIi5qcy1maWxsLmpzLXRvemVybyIpLnJlbW92ZSgpLG4uX293bkZpbGw9bnVsbCksZS5zZWxlY3RBbGwoIi5qcy1maWxsIikuY2FsbChsLnNldENsaXBVcmwsci5sYXllckNsaXBJZCl9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSxoLHApe2Z1bmN0aW9uIG0odCl7cmV0dXJuIE0/dC50cmFuc2l0aW9uKCk6dH1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHkodCl7aWYodC5pZHMpcmV0dXJuIGd9ZnVuY3Rpb24gYigpe3JldHVybiExfWZ1bmN0aW9uIHgoZSl7dmFyIG4saSxhLGM9ZVswXS50cmFjZSxmPW8uc2VsZWN0KHRoaXMpLGg9dS5oYXNNYXJrZXJzKGMpLGQ9dS5oYXNUZXh0KGMpLHA9eShjKSxnPWIseD1iO2gmJihnPWMubWFya2VyLm1heGRpc3BsYXllZHx8Yy5fbmVlZHNDdWxsP3Y6cy5pZGVudGl0eSksZCYmKHg9Yy5tYXJrZXIubWF4ZGlzcGxheWVkfHxjLl9uZWVkc0N1bGw/djpzLmlkZW50aXR5KSxpPWYuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iiksbj1pLmRhdGEoZyxwKTt2YXIgXz1uLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTtNJiZfLmNhbGwobC5wb2ludFN0eWxlLGMsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyxULGspLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB3PWgmJmwudHJ5Q29sb3JzY2FsZShjLm1hcmtlciwiIiksQT1oJiZsLnRyeUNvbG9yc2NhbGUoYy5tYXJrZXIsImxpbmUiKTtuLm9yZGVyKCksbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLGk9bShuKTthPWwudHJhbnNsYXRlUG9pbnQoZSxpLFQsayksYT8obC5zaW5nbGVQb2ludFN0eWxlKGUsaSxjLHcsQSx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGksVCxrKSxjLmN1c3RvbWRhdGEmJm4uY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmkucmVtb3ZlKCl9KSxNP24uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6bi5leGl0KCkucmVtb3ZlKCksaT1mLnNlbGVjdEFsbCgiZyIpLG49aS5kYXRhKHgscCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG4ub3JkZXIoKSxuLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWxlY3QodGhpcyksbj1tKGUuc2VsZWN0KCJ0ZXh0IikpO2E9bC50cmFuc2xhdGVQb2ludCh0LG4sVCxrKSxhP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSxULGspOmUucmVtb3ZlKCl9KSxuLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSxjLHQpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9VC5jMnAodC54KSxyPWsuYzJwKHQueSk7by5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaChmdW5jdGlvbigpe20oby5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksbi5leGl0KCkucmVtb3ZlKCl9dmFyIF8sdzthKHQsZSxyLG4saSk7dmFyIE09ISFwJiZwLmR1cmF0aW9uPjAsVD1yLnhheGlzLGs9ci55YXhpcyxBPW5bMF0udHJhY2UsRT1BLmxpbmUsUz1vLnNlbGVjdChoKTtpZihTLmNhbGwoYy5wbG90LHIscCksQS52aXNpYmxlPT09ITApe20oUykuc3R5bGUoIm9wYWNpdHkiLEEub3BhY2l0eSk7dmFyIEwsQyxJPUEuZmlsbC5jaGFyQXQoQS5maWxsLmxlbmd0aC0xKTsieCIhPT1JJiYieSIhPT1JJiYoST0iIiksblswXS5ub2RlMz1TO3ZhciBEPSIiLFA9W10sej1BLl9wcmV2dHJhY2U7eiYmKEQ9ei5fcHJldlJldnBhdGh8fCIiLEM9ei5fbmV4dEZpbGwsUD16Ll9wb2x5Z29ucyk7dmFyIE8sUixGLGosTixCLFUsVixILHE9IiIsRz0iIixZPVtdLFg9cy5ub29wO2lmKEw9QS5fb3duRmlsbCx1Lmhhc0xpbmVzKEEpfHwibm9uZSIhPT1BLmZpbGwpe2ZvcihDJiZDLmRhdHVtKG4pLFsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2YoRS5zaGFwZSkhPT0tMT8oRj1sLnN0ZXBzKEUuc2hhcGUpLGo9bC5zdGVwcyhFLnNoYXBlLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpKTpGPWo9InNwbGluZSI9PT1FLnNoYXBlP2Z1bmN0aW9uKHQpe3ZhciBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIHQubGVuZ3RoPjEmJnRbMF1bMF09PT1lWzBdJiZ0WzBdWzFdPT09ZVsxXT9sLnNtb290aGNsb3NlZCh0LnNsaWNlKDEpLEUuc21vb3RoaW5nKTpsLnNtb290aG9wZW4odCxFLnNtb290aGluZyl9OmZ1bmN0aW9uKHQpe3JldHVybiJNIit0LmpvaW4oIkwiKX0sTj1mdW5jdGlvbih0KXtyZXR1cm4gaih0LnJldmVyc2UoKSl9LFk9ZihuLHt4YXhpczpULHlheGlzOmssY29ubmVjdEdhcHM6QS5jb25uZWN0Z2FwcyxiYXNlVG9sZXJhbmNlOk1hdGgubWF4KEUud2lkdGh8fDEsMykvNCxzaGFwZTpFLnNoYXBlLHNpbXBsaWZ5OkUuc2ltcGxpZnl9KSxIPUEuX3BvbHlnb25zPW5ldyBBcnJheShZLmxlbmd0aCksdz0wO3c8WS5sZW5ndGg7dysrKUEuX3BvbHlnb25zW3ddPWQoWVt3XSk7WS5sZW5ndGgmJihCPVlbMF1bMF0sVT1ZW1kubGVuZ3RoLTFdLFY9VVtVLmxlbmd0aC0xXSksWD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoTz1GKGUpLFI9TihlKSxxP0k/KHErPSJMIitPLnN1YnN0cigxKSxHPVIrIkwiK0cuc3Vic3RyKDEpKToocSs9IloiK08sRz1SKyJaIitHKToocT1PLEc9UiksdS5oYXNMaW5lcyhBKSYmZS5sZW5ndGg+MSl7dmFyIHI9by5zZWxlY3QodGhpcyk7aWYoci5kYXR1bShuKSx0KW0oci5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiZCIsTykuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoIm9wYWNpdHkiLDEpO2Vsc2V7dmFyIGk9bShyKTtpLmF0dHIoImQiLE8pLGwuc2luZ2xlTGluZVN0eWxlKG4saSl9fX19fXZhciBXPVMuc2VsZWN0QWxsKCIuanMtbGluZSIpLmRhdGEoWSk7bShXLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLFcuZWFjaChYKCExKSksVy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChYKCEwKSksbC5zZXRDbGlwVXJsKFcsci5sYXllckNsaXBJZCksWS5sZW5ndGgmJihMP0ImJlYmJihJPygieSI9PT1JP0JbMV09VlsxXT1rLmMycCgwLCEwKToieCI9PT1JJiYoQlswXT1WWzBdPVQuYzJwKDAsITApKSxtKEwpLmF0dHIoImQiLCJNIitWKyJMIitCKyJMIitxLnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOm0oTCkuYXR0cigiZCIscSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKToidG9uZXh0Ij09PUEuZmlsbC5zdWJzdHIoMCw2KSYmcSYmRCYmKCJ0b25leHQiPT09QS5maWxsP20oQykuYXR0cigiZCIscSsiWiIrRCsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOm0oQykuYXR0cigiZCIscSsiTCIrRC5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxBLl9wb2x5Z29ucz1BLl9wb2x5Z29ucy5jb25jYXQoUCkpLEEuX3ByZXZSZXZwYXRoPUcsQS5fcHJldlBvbHlnb25zPUgpO3ZhciBaPVMuc2VsZWN0QWxsKCIucG9pbnRzIik7Xz1aLmRhdGEoW25dKSxaLmVhY2goeCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50cyIsITApLmVhY2goeCksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2UuY2xpcG9uYXhpcz09PSExO2wuc2V0Q2xpcFVybChvLnNlbGVjdCh0aGlzKSxlP251bGw6ci5sYXllckNsaXBJZCl9KX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3ZhciBhPXIueGF4aXMsbD1yLnlheGlzLGM9by5leHRlbnQocy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIyYykpLGY9by5leHRlbnQocy5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGg9blswXS50cmFjZTtpZih1Lmhhc01hcmtlcnMoaCkpe3ZhciBkPWgubWFya2VyLm1heGRpc3BsYXllZDtpZigwIT09ZCl7dmFyIHA9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49Y1swXSYmdC54PD1jWzFdJiZ0Lnk+PWZbMF0mJnQueTw9ZlsxXX0pLG09TWF0aC5jZWlsKHAubGVuZ3RoL2QpLHY9MDtpLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO3UuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIGc9TWF0aC5yb3VuZCh2Km0vMytNYXRoLmZsb29yKHYvMykqbS83LjEpO24uZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxwLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZStnKSVtKSYmKHQudmlzPSEwKX0pfX19dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHU9dCgiLi9zdWJ0eXBlcyIpLGY9dCgiLi9saW5lX3BvaW50cyIpLGg9dCgiLi9saW5rX3RyYWNlcyIpLGQ9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGwsYyx1LGYsZCxwPWUucGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbT0hYSx2PSEhYSYmYS5kdXJhdGlvbj4wO2Zvcih1PXAuc2VsZWN0QWxsKCJnLnRyYWNlIiksZj11LmRhdGEocixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSxmLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksaCh0LGUsciksbih0LHAsZSksbD0wLGM9e307bDxyLmxlbmd0aDtsKyspY1tyW2xdWzBdLnRyYWNlLnVpZF09bDtpZihwLnNlbGVjdEFsbCgiZy50cmFjZSIpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gY1t0WzBdLnRyYWNlLnVpZF0+Y1tlWzBdLnRyYWNlLnVpZF0/MTotMX0pLHYpe3MmJihkPXMoKSk7by50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2QmJmQoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtkJiZkKCl9KS5lYWNoKGZ1bmN0aW9uKCl7cC5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKG4sbyl7aSh0LG8sZSxuLHIsdGhpcyxhKX0pfSl9ZWxzZSBwLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goZnVuY3Rpb24obixvKXtpKHQsbyxlLG4scix0aGlzLGEpfSk7bSYmZi5leGl0KCkucmVtb3ZlKCkscC5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2NDEsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvcG9seWdvbiI6NzQ2LCIuL2xpbmVfcG9pbnRzIjoxMDU4LCIuL2xpbmtfdHJhY2VzIjoxMDYwLCIuL3N1YnR5cGVzIjoxMDY2LGQzOjEyMX1dLDEwNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGw9dC5jZCxjPXQueGF4aXMsdT10LnlheGlzLGY9W10saD1sWzBdLnRyYWNlLGQ9aC5tYXJrZXI7aWYoIW4uaGFzTWFya2VycyhoKSYmIW4uaGFzVGV4dChoKSlyZXR1cm5bXTt2YXIgcD1BcnJheS5pc0FycmF5KGQub3BhY2l0eSk/MTpkLm9wYWNpdHk7aWYoZT09PSExKWZvcihyPTA7cjxsLmxlbmd0aDtyKyspbFtyXS5kaW09MDtlbHNlIGZvcihyPTA7cjxsLmxlbmd0aDtyKyspYT1sW3JdLG89Yy5jMnAoYS54KSxzPXUuYzJwKGEueSksZS5jb250YWlucyhbbyxzXSk/KGYucHVzaCh7cG9pbnROdW1iZXI6cix4OmMuYzJkKGEueCkseTp1LmMyZChhLnkpfSksYS5kaW09MCk6YS5kaW09MTtyZXR1cm4gbFswXS5ub2RlMy5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuKCh0Lm1vKzF8fHArMSktMSkqKHQuZGltP2k6MSl9KSxsWzBdLm5vZGUzLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW0/aToxfSksZn19LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzEzLCIuL3N1YnR5cGVzIjoxMDY2fV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxvPWUudHJhY2V8fGVbMF0udHJhY2U7YS5jYWxsKGkucG9pbnRTdHlsZSxvLHQpLHIuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChpLnRleHRQb2ludFN0eWxlLG8sdCl9KSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksZS5jYWxsKGEuc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjY0MSxkMzoxMjF9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiZ0Lm1vZGUuaW5kZXhPZigibGluZXMiKSE9PS0xfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmdC5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKSE9PS0xfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmdC5tb2RlLmluZGV4T2YoInRleHQiKSE9PS0xfSxpc0J1YmJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQubWFya2VyKSYmQXJyYXkuaXNBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6NzM1fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aSgidGV4dHBvc2l0aW9uIiksbi5jb2VyY2VGb250KGksInRleHRmb250IixyLmZvbnQpfX0seyIuLi8uLi9saWIiOjczNX1dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz1pKCJ4Iikscz1pKCJ5Iik7aWYobi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLG8pcz8oYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYTxvLmxlbmd0aCYmKGUueD1vLnNsaWNlKDAsYSkpLGE8cy5sZW5ndGgmJihlLnk9cy5zbGljZSgwLGEpKSk6KGE9by5sZW5ndGgsaSgieTAiKSxpKCJkeSIpKTtlbHNle2lmKCFzKXJldHVybiAwO2E9ZS55Lmxlbmd0aCxpKCJ4MCIpLGkoImR4Iil9cmV0dXJuIGF9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NTN9XSwxMDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX12YXIgaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9aS5saW5lLGg9aS5tYXJrZXIsZD1oLmxpbmUscD1lLmV4cG9ydHM9dSh7eDppLngseTppLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6Yyh7fSxpLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGkuaG92ZXJ0ZXh0LHt9KSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OiJsaW5lcyttYXJrZXJzIn0pLHN1cmZhY2VheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6Wy0xLDAsMSwyXSxkZmx0Oi0xfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0scHJvamVjdGlvbjp7eDpuKCJ4IikseTpuKCJ5IiksejpuKCJ6Iil9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbGluZTpjKHt3aWR0aDpmLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhzKSxkZmx0OiJzb2xpZCJ9LHNob3dzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19LGEoImxpbmUiKSksbWFya2VyOmMoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTpjKHt9LGguc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpoLnNpemVyZWYsc2l6ZW1pbjpoLnNpemVtaW4sc2l6ZW1vZGU6aC5zaXplbW9kZSxvcGFjaXR5OmMoe30saC5vcGFjaXR5LHthcnJheU9rOiExfSksc2hvd3NjYWxlOmguc2hvd3NjYWxlLGNvbG9yYmFyOmguY29sb3JiYXIsbGluZTpjKHt3aWR0aDpjKHt9LGQud2lkdGgse2FycmF5T2s6ITF9KX0sYSgibWFya2VyLmxpbmUiKSl9LGEoIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246Yyh7fSxpLnRleHRwb3NpdGlvbix7ZGZsdDoidG9wIGNlbnRlciJ9KSx0ZXh0Zm9udDppLnRleHRmb250LGVycm9yX3g6byxlcnJvcl95Om8sZXJyb3JfejpvfSwiY2FsYyIsIm5lc3RlZCIpO3AueC5lZGl0VHlwZT1wLnkuZWRpdFR5cGU9cC56LmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjE4LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIjo2MzcsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzExLCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3MTIsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzYzLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNDV9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksaShlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTA0NCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwNDl9XSwxMDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2lmKCFlfHwhZS52aXNpYmxlKXJldHVybiBudWxsO2Zvcih2YXIgbj1vKGUpLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPW4oK3RbYV0sYSk7aVthXT1bLXNbMF0qcixzWzFdKnJdfXJldHVybiBpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPVtuKHQueCx0LmVycm9yX3gsZVswXSksbih0LnksdC5lcnJvcl95LGVbMV0pLG4odC56LHQuZXJyb3JfeixlWzJdKV0sYT1pKHIpO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihyW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1yW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb312YXIgbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9jb21wdXRlX2Vycm9yIik7ZS5leHBvcnRzPWF9LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvY29tcHV0ZV9lcnJvciI6NjM5fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9IiIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0oMS8wKSwtKDEvMCksLSgxLzApXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbixpPShyKzEpJTMsYT0ocisyKSUzLG89W10scz1bXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbD10W25dOyFpc05hTihsW2ldKSYmaXNGaW5pdGUobFtpXSkmJiFpc05hTihsW2FdKSYmaXNGaW5pdGUobFthXSkmJihvLnB1c2goW2xbaV0sbFthXV0pLHMucHVzaChuKSl9dmFyIGM9ZyhvKTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWZvcih2YXIgdT1jW25dLGY9MDtmPHUubGVuZ3RoOysrZil1W2ZdPXNbdVtmXV07cmV0dXJue3Bvc2l0aW9uczp0LGNlbGxzOmMsbWVzaENvbG9yOmV9fWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzAsMCwwXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiZhLmNvcHlfenN0eWxlIT09ITEmJihhPXRbMl0pLGEmJihlW2ldPWEud2lkdGgvMixyW2ldPWIoYS5jb2xvciksbj1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX1mdW5jdGlvbiBvKHQpe3ZhciBlPVswLDBdO3JldHVybiBBcnJheS5pc0FycmF5KHQpP1swLC0xXToodC5pbmRleE9mKCJib3R0b20iKT49MCYmKGVbMV0rPTEpLHQuaW5kZXhPZigidG9wIik+PTAmJihlWzFdLT0xKSx0LmluZGV4T2YoImxlZnQiKT49MCYmKGVbMF0tPTEpLHQuaW5kZXhPZigicmlnaHQiKT49MCYmKGVbMF0rPTEpLGUpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIE1bdF19ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl7YT1bXTtmb3IodmFyIG89MDtvPGU7bysrKXZvaWQgMD09PXRbb10/YVtvXT1uOmFbb109cih0W29dLGkpfWVsc2UgYT1yKHQseS5pZGVudGl0eSk7cmV0dXJuIGF9ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG4saSx1LGYsaCxkPVtdLHA9dC5mdWxsU2NlbmVMYXlvdXQsbT10LmRhdGFTY2FsZSx2PXAueGF4aXMsZz1wLnlheGlzLHc9cC56YXhpcyxNPWUubWFya2VyLGs9ZS5saW5lLEE9ZS54fHxbXSxFPWUueXx8W10sUz1lLnp8fFtdLEw9QS5sZW5ndGgsQz1lLnhjYWxlbmRhcixJPWUueWNhbGVuZGFyLEQ9ZS56Y2FsZW5kYXI7Zm9yKG49MDtuPEw7bisrKWk9di5kMmwoQVtuXSwwLEMpKm1bMF0sdT1nLmQybChFW25dLDAsSSkqbVsxXSxmPXcuZDJsKFNbbl0sMCxEKSptWzJdLGRbbl09W2ksdSxmXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpaD1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKGg9bmV3IEFycmF5KEwpLG49MDtuPEw7bisrKWhbbl09ZS50ZXh0O2lmKHI9e3Bvc2l0aW9uOmQsbW9kZTplLm1vZGUsdGV4dDpofSwibGluZSJpbiBlJiYoci5saW5lQ29sb3I9eChrLDEsTCksci5saW5lV2lkdGg9ay53aWR0aCxyLmxpbmVEYXNoZXM9ay5kYXNoKSwibWFya2VyImluIGUpe3ZhciBQPV8oZSk7ci5zY2F0dGVyQ29sb3I9eChNLDEsTCksci5zY2F0dGVyU2l6ZT1jKE0uc2l6ZSxMLHMsMjAsUCksci5zY2F0dGVyTWFya2VyPWMoTS5zeW1ib2wsTCxsLCJcdTI1Y2YiKSxyLnNjYXR0ZXJMaW5lV2lkdGg9TS5saW5lLndpZHRoLHIuc2NhdHRlckxpbmVDb2xvcj14KE0ubGluZSwxLEwpLHIuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoci50ZXh0T2Zmc2V0PW8oZS50ZXh0cG9zaXRpb24pLHIudGV4dENvbG9yPXgoZS50ZXh0Zm9udCwxLEwpLHIudGV4dFNpemU9YyhlLnRleHRmb250LnNpemUsTCx5LmlkZW50aXR5LDEyKSxyLnRleHRGb250PWUudGV4dGZvbnQuZmFtaWx5LHIudGV4dEFuZ2xlPTApO3ZhciB6PVsieCIsInkiLCJ6Il07Zm9yKHIucHJvamVjdD1bITEsITEsITFdLHIucHJvamVjdFNjYWxlPVsxLDEsMV0sci5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLG49MDtuPDM7KytuKXt2YXIgTz1lLnByb2plY3Rpb25beltuXV07KHIucHJvamVjdFtuXT1PLnNob3cpJiYoci5wcm9qZWN0T3BhY2l0eVtuXT1PLm9wYWNpdHksci5wcm9qZWN0U2NhbGVbbl09Ty5zY2FsZSl9ci5lcnJvckJvdW5kcz1UKGUsbSk7dmFyIFI9YShbZS5lcnJvcl94LGUuZXJyb3JfeSxlLmVycm9yX3pdKTtyZXR1cm4gci5lcnJvckNvbG9yPVIuY29sb3Isci5lcnJvckxpbmVXaWR0aD1SLmxpbmVXaWR0aCxyLmVycm9yQ2FwU2l6ZT1SLmNhcFNpemUsci5kZWxhdW5heUF4aXM9ZS5zdXJmYWNlYXhpcyxyLmRlbGF1bmF5Q29sb3I9YihlLnN1cmZhY2Vjb2xvcikscn1mdW5jdGlvbiBmKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBlPXRbMF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSp0KX0pKyIpIn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9bmV3IG4odCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9dmFyIGQ9dCgiZ2wtbGluZTNkIikscD10KCJnbC1zY2F0dGVyM2QiKSxtPXQoImdsLWVycm9yM2QiKSx2PXQoImdsLW1lc2gzZCIpLGc9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHg9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLF89dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx3PXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLE09dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLFQ9dCgiLi9jYWxjX2Vycm9ycyIpLGs9bi5wcm90b3R5cGU7ay5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3Qub2JqZWN0LmhpZ2hsaWdodCYmdC5vYmplY3QuaGlnaGxpZ2h0KG51bGwpLHRoaXMuc2NhdHRlclBsb3QmJih0Lm9iamVjdD10aGlzLnNjYXR0ZXJQbG90LHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0KHQuZGF0YSkpLHRoaXMudGV4dExhYmVscz92b2lkIDAhPT10aGlzLnRleHRMYWJlbHNbdC5kYXRhLmluZGV4XT90LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbdC5kYXRhLmluZGV4XTp0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHM6dC50ZXh0TGFiZWw9IiI7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV0sITB9fSxrLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxvPXRoaXMuc2NlbmUuZ2xwbG90LmdsLHM9dy5zb2xpZDt0aGlzLmRhdGE9dDt2YXIgbD11KHRoaXMuc2NlbmUsdCk7Im1vZGUiaW4gbCYmKHRoaXMubW9kZT1sLm1vZGUpLCJsaW5lRGFzaGVzImluIGwmJmwubGluZURhc2hlcyBpbiB3JiYocz13W2wubGluZURhc2hlc10pLHRoaXMuY29sb3I9ZihsLnNjYXR0ZXJDb2xvcil8fGYobC5saW5lQ29sb3IpLHRoaXMuZGF0YVBvaW50cz1sLnBvc2l0aW9uLGU9e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixjb2xvcjpsLmxpbmVDb2xvcixsaW5lV2lkdGg6bC5saW5lV2lkdGh8fDEsZGFzaGVzOnNbMF0sZGFzaFNjYWxlOnNbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sdGhpcy5tb2RlLmluZGV4T2YoImxpbmVzIikhPT0tMT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PWQoZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgYz10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihjKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDpvLHBvc2l0aW9uOmwucG9zaXRpb24sY29sb3I6bC5zY2F0dGVyQ29sb3Isc2l6ZTpsLnNjYXR0ZXJTaXplLGdseXBoOmwuc2NhdHRlck1hcmtlcixvcGFjaXR5OmMsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDpsLnNjYXR0ZXJMaW5lV2lkdGgsbGluZUNvbG9yOmwuc2NhdHRlckxpbmVDb2xvcixwcm9qZWN0OmwucHJvamVjdCxwcm9qZWN0U2NhbGU6bC5wcm9qZWN0U2NhbGUscHJvamVjdE9wYWNpdHk6bC5wcm9qZWN0T3BhY2l0eX0sdGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKSE9PS0xP3RoaXMuc2NhdHRlclBsb3Q/dGhpcy5zY2F0dGVyUGxvdC51cGRhdGUocik6KHRoaXMuc2NhdHRlclBsb3Q9cChyKSx0aGlzLnNjYXR0ZXJQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5zY2F0dGVyUGxvdCkpOnRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCksdGhpcy5zY2F0dGVyUGxvdD1udWxsKSxhPXtnbDpvLHBvc2l0aW9uOmwucG9zaXRpb24sZ2x5cGg6bC50ZXh0LGNvbG9yOmwudGV4dENvbG9yLHNpemU6bC50ZXh0U2l6ZSxhbmdsZTpsLnRleHRBbmdsZSxhbGlnbm1lbnQ6bC50ZXh0T2Zmc2V0LGZvbnQ6bC50ZXh0Rm9udCxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOjAscHJvamVjdDohMSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy50ZXh0TGFiZWxzPXQuaG92ZXJ0ZXh0fHx0LnRleHQsdGhpcy5tb2RlLmluZGV4T2YoInRleHQiKSE9PS0xP3RoaXMudGV4dE1hcmtlcnM/dGhpcy50ZXh0TWFya2Vycy51cGRhdGUoYSk6KHRoaXMudGV4dE1hcmtlcnM9cChhKSx0aGlzLnRleHRNYXJrZXJzLl90cmFjZT10aGlzLHRoaXMudGV4dE1hcmtlcnMuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy50ZXh0TWFya2VycykpOnRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCksdGhpcy50ZXh0TWFya2Vycz1udWxsKSxuPXtnbDpvLHBvc2l0aW9uOmwucG9zaXRpb24sY29sb3I6bC5lcnJvckNvbG9yLGVycm9yOmwuZXJyb3JCb3VuZHMsbGluZVdpZHRoOmwuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpsLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/bC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobik6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOmwuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1tKG4pLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLGwuZGVsYXVuYXlBeGlzPj0wKXt2YXIgaD1pKGwucG9zaXRpb24sbC5kZWxhdW5heUNvbG9yLGwuZGVsYXVuYXlBeGlzKTtoLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMuZGVsYXVuYXlNZXNoP3RoaXMuZGVsYXVuYXlNZXNoLnVwZGF0ZShoKTooaC5nbD1vLHRoaXMuZGVsYXVuYXlNZXNoPXYoaCksdGhpcy5kZWxhdW5heU1lc2guX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZGVsYXVuYXlNZXNoKSl9ZWxzZSB0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwpfSxrLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpKSx0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpKSx0aGlzLmVycm9yQmFycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpKSx0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpKSx0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpKX0sZS5leHBvcnRzPWh9LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo3MTEsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjcxMiwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjczMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTA2MSwiLi9jYWxjX2Vycm9ycyI6MTA3MSwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjEyMywiZ2wtZXJyb3IzZCI6MTYxLCJnbC1saW5lM2QiOjE3NiwiZ2wtbWVzaDNkIjoyMDksImdsLXNjYXR0ZXIzZCI6MjU3fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sbiksbyYmcyYmbCYmKGE9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgpLGE8by5sZW5ndGgmJihlLng9by5zbGljZSgwLGEpKSxhPHMubGVuZ3RoJiYoZS55PXMuc2xpY2UoMCxhKSksYTxsLmxlbmd0aCYmKGUuej1sLnNsaWNlKDAsYSkpKSxhfXZhciBpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxzPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxmLHIsbil9aWYoIW4odCxlLGgsaSkpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgibW9kZSIpLG8uaGFzTGluZXMoZSkmJihoKCJjb25uZWN0Z2FwcyIpLGwodCxlLHIsaSxoKSksby5oYXNNYXJrZXJzKGUpJiZzKHQsZSxyLGksaCksby5oYXNUZXh0KGUpJiZjKHQsZSxpLGgpO3ZhciBkPShlLmxpbmV8fHt9KS5jb2xvcixwPShlLm1hcmtlcnx8e30pLmNvbG9yO2goInN1cmZhY2VheGlzIik+PTAmJmgoInN1cmZhY2Vjb2xvciIsZHx8cCk7Zm9yKHZhciBtPVsieCIsInkiLCJ6Il0sdj0wO3Y8MzsrK3Ype3ZhciBnPSJwcm9qZWN0aW9uLiIrbVt2XTtoKGcrIi5zaG93IikmJihoKGcrIi5vcGFjaXR5IiksaChnKyIuc2NhbGUiKSl9dSh0LGUscix7YXhpczoieiJ9KSx1KHQsZSxyLHtheGlzOiJ5Iixpbmhlcml0OiJ6In0pLHUodCxlLHIse2F4aXM6IngiLGluaGVyaXQ6InoifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIjo2NDAsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODUzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNTcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDYyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNjcsIi4vYXR0cmlidXRlcyI6MTA2OX1dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5wbG90PXQoIi4vY29udmVydCIpLG4uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLm1hcmtlclN5bWJvbHM9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIzZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsInN5bWJvbHMiLCJtYXJrZXJDb2xvcnNjYWxlIiwic2hvd0xlZ2VuZCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3MTIsIi4uLy4uL3Bsb3RzL2dsM2QiOjgxOCwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTA0OCwiLi9hdHRyaWJ1dGVzIjoxMDY5LCIuL2NhbGMiOjEwNzAsIi4vY29udmVydCI6MTA3MiwiLi9kZWZhdWx0cyI6MTA3M31dLDEwNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLGM9bi5saW5lLHU9bC5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6cyh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpzKHt9LG4udGV4dCx7fSksbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6Yy5kYXNoLHNoYXBlOnMoe30sYy5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Yy5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6cyh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXX0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6cyh7c3ltYm9sOmwuc3ltYm9sLG9wYWNpdHk6bC5vcGFjaXR5LG1heGRpc3BsYXllZDpsLm1heGRpc3BsYXllZCxzaXplOmwuc2l6ZSxzaXplcmVmOmwuc2l6ZXJlZixzaXplbWluOmwuc2l6ZW1pbixzaXplbW9kZTpsLnNpemVtb2RlLGxpbmU6cyh7d2lkdGg6dS53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIubGluZSkpLGdyYWRpZW50OmwuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiKSx7c2hvd3NjYWxlOmwuc2hvd3NjYWxlLGNvbG9yYmFyOm99KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixob3ZlcmluZm86cyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJhIiwiYiIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIjo2MTgsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNDV9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxzPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jYXJwZXRUcmFjZT1sKHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe3ZhciBjO2UueGF4aXM9ci54YXhpcyxlLnlheGlzPXIueWF4aXM7dmFyIHUsZixoPWUuYS5sZW5ndGgsZD1uZXcgQXJyYXkoaCkscD0hMTtmb3IoYz0wO2M8aDtjKyspaWYodT1lLmFbY10sZj1lLmJbY10sbih1KSYmbihmKSl7dmFyIG09ci5hYjJ4eSgrdSwrZiwhMCksdj1yLmlzVmlzaWJsZSgrdSwrZik7dnx8KHA9ITApLGRbY109e3g6bVswXSx5Om1bMV0sYTp1LGI6Zix2aXM6dn19ZWxzZSBkW2NdPXt4OiExLHk6ITF9O2UuX25lZWRzQ3VsbD1wLGRbMF0uY2FycGV0PXIsZFswXS50cmFjZT1lO3ZhciBnLHk7aWYoYS5oYXNNYXJrZXJzKGUpJiYoZz1lLm1hcmtlcix5PWcuc2l6ZSxBcnJheS5pc0FycmF5KHkpKSl7dmFyIGI9e3R5cGU6ImxpbmVhciJ9O2kuc2V0Q29udmVydChiKSx5PWIubWFrZUNhbGNkYXRhKGUubWFya2VyLCJzaXplIikseS5sZW5ndGg+aCYmeS5zcGxpY2UoaCx5Lmxlbmd0aC1oKX1yZXR1cm4gbyhlKSxzKGQsZSksZH19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjkxMSwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwNDQsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDQ5LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBkKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9ZCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIHAsbT1kKCJhIiksdj1kKCJiIik7aWYoIShwPU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKSkpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTttJiZwPG0ubGVuZ3RoJiYoZS5hPW0uc2xpY2UoMCxwKSksdiYmcDx2Lmxlbmd0aCYmKGUuYj12LnNsaWNlKDAscCkpLGQoInRleHQiKSxkKCJtb2RlIixwPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxkKSxsKHQsZSxkKSxkKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxkLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxkKTt2YXIgZz1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYoZCgibWFya2VyLm1heGRpc3BsYXllZCIpLGcucHVzaCgicG9pbnRzIikpLGQoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLGQpLGEuaGFzTGluZXMoZSl8fGwodCxlLGQpKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fGcucHVzaCgiZmlsbHMiKSxkKCJob3Zlcm9uIixnLmpvaW4oIisiKXx8InBvaW50cyIpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vc2NhdHRlci9jb25zdGFudHMiOjEwNTAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDUzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNTcsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTA1OSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNjIsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNjYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA2NywiLi9hdHRyaWJ1dGVzIjoxMDc1fV0sMTA3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGEodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLywiIik6dC5faG92ZXJ0aXRsZSxnLnB1c2gocisiOiAiK2UudG9GaXhlZCgzKSt0LmxhYmVsc3VmZml4KX12YXIgbz1uKHQsZSxyLGkpO2lmKG8mJm9bMF0uaW5kZXghPT0hMSl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsZj1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxmKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsZiksdSksb312YXIgaD1zLmNkW3MuaW5kZXhdO3MuYT1oLmEscy5iPWguYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBkPXMudHJhY2UscD1kLl9jYXJwZXQsbT1oLmhpfHxkLmhvdmVyaW5mbyx2PW0uc3BsaXQoIisiKSxnPVtdO3YuaW5kZXhPZigiYWxsIikhPT0tMSYmKHY9WyJhIiwiYiJdKSx2LmluZGV4T2YoImEiKSE9PS0xJiZhKHAuYWF4aXMsaC5hKSx2LmluZGV4T2YoImIiKSE9PS0xJiZhKHAuYmF4aXMsaC5iKTt2YXIgeT1wLmFiMmlqKFtoLmEsaC5iXSksYj1NYXRoLmZsb29yKHlbMF0pLHg9eVswXS1iLF89TWF0aC5mbG9vcih5WzFdKSx3PXlbMV0tXyxNPXAuZXZhbHh5KFtdLGIsXyx4LHcpO3JldHVybiBnLnB1c2goInk6ICIrTVsxXS50b0ZpeGVkKDMpKSxzLmV4dHJhVGV4dD1nLmpvaW4oIjxicj4iKSxvfX19LHsiLi4vc2NhdHRlci9ob3ZlciI6MTA1NX1dLDEwNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FycGV0Iiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzg5LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDQ4LCIuL2F0dHJpYnV0ZXMiOjEwNzUsIi4vY2FsYyI6MTA3NiwiLi9kZWZhdWx0cyI6MTA3NywiLi9ob3ZlciI6MTA3OCwiLi9wbG90IjoxMDgwLCIuL3NlbGVjdCI6MTA4MSwiLi9zdHlsZSI6MTA4Mn1dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYz1yWzBdWzBdLmNhcnBldCx1PXt4YXhpczppLmdldEZyb21JZCh0LGMueGF4aXN8fCJ4IikseWF4aXM6aS5nZXRGcm9tSWQodCxjLnlheGlzfHwieSIpLHBsb3Q6ZS5wbG90fTtmb3Iobih0LHUsciksbz0wO288ci5sZW5ndGg7bysrKXM9cltvXVswXS50cmFjZSxsPXUucGxvdC5zZWxlY3RBbGwoImcudHJhY2UiK3MudWlkKyIgLmpzLWxpbmUiKSxhLnNldENsaXBVcmwobCxjLl9jbGlwUGF0aElkKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL3NjYXR0ZXIvcGxvdCI6MTA2M31dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zZWxlY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7aWYocil7dmFyIGksYSxvLHM9dC5jZDtmb3Iobz0wO288ci5sZW5ndGg7bysrKWk9cltvXSxhPXNbaS5wb2ludE51bWJlcl0saS5hPWEuYSxpLmI9YS5iLGRlbGV0ZSBpLngsZGVsZXRlIGkueTtyZXR1cm4gcn19fSx7Ii4uL3NjYXR0ZXIvc2VsZWN0IjoxMDY0fV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N0eWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZigic2NhdHRlciI9PT1lW3JdLm5hbWUpcmV0dXJuO24odCl9fSx7Ii4uL3NjYXR0ZXIvc3R5bGUiOjEwNjV9XSwxMDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9bi5tYXJrZXIsdT1uLmxpbmUsZj1jLmxpbmU7ZS5leHBvcnRzPWwoe2xvbjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxhdDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9ubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiSVNPLTMiLCJVU0Etc3RhdGVzIiwiY291bnRyeSBuYW1lcyJdLGRmbHQ6IklTTy0zIn0sbW9kZTpzKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6cyh7fSxuLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6b30sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxtYXJrZXI6cyh7c3ltYm9sOmMuc3ltYm9sLG9wYWNpdHk6Yy5vcGFjaXR5LHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsc2hvd3NjYWxlOmMuc2hvd3NjYWxlLGNvbG9yYmFyOmMuY29sb3JiYXIsbGluZTpzKHt3aWR0aDpmLndpZHRofSxhKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50fSxhKCJtYXJrZXIiKSksZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvc2VsZiJdLGRmbHQ6Im5vbmUifSxmaWxsY29sb3I6bi5maWxsY29sb3IsaG92ZXJpbmZvOnMoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwibG9jYXRpb24iLCJ0ZXh0IiwibmFtZSJdfSl9LCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYxOCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYzNCwiLi4vLi4vbGliL2V4dGVuZCI6NzI0LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NjMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc3NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1fV0sMTA4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxzPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUubG9uLmxlbmd0aCxsPW5ldyBBcnJheShzKSxjPTA7YzxzO2MrKyl7dmFyIHU9bFtjXT17fTtpZihyKXt2YXIgZj1lLmxvY2F0aW9uc1tjXTt1LmxvYz0ic3RyaW5nIj09dHlwZW9mIGY/ZjpudWxsfWVsc2V7dmFyIGg9ZS5sb25bY10sZD1lLmxhdFtjXTtuKGgpJiZuKGQpP3UubG9ubGF0PVsraCwrZF06dS5sb25sYXQ9W2ksaV19fXJldHVybiBvKGwsZSksYShlKSxsfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDQ0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA0OSwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxhPTAsbz1yKCJsb2NhdGlvbnMiKTtyZXR1cm4gbz8ocigibG9jYXRpb25tb2RlIiksYT1vLmxlbmd0aCk6KG49cigibG9uIil8fFtdLGk9cigibGF0Iil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpLGE8bi5sZW5ndGgmJihlLmxvbj1uLnNsaWNlKDAsYSkpLGE8aS5sZW5ndGgmJihlLmxhdD1pLnNsaWNlKDAsYSkpLGEpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLHUscixuKX1pZighbih0LGUsaCkpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgibW9kZSIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYsaCksaCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYsaCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJmwodCxlLGYsaCksaCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixoKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDUzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNTcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDYyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNjcsIi4vYXR0cmlidXRlcyI6MTA4M31dLDEwODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4gYS50aWNrVGV4dChyLHIuYzJsKHQpLCJob3ZlciIpLnRleHQrIlx4YjAifXZhciBpPWUuaGl8fHQuaG92ZXJpbmZvLG89ImFsbCI9PT1pP2MuaG92ZXJpbmZvLmZsYWdzOmkuc3BsaXQoIisiKSxzPW8uaW5kZXhPZigibG9jYXRpb24iKSE9PS0xJiZBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKSx1PW8uaW5kZXhPZigibG9uIikhPT0tMSxmPW8uaW5kZXhPZigibGF0IikhPT0tMSxoPW8uaW5kZXhPZigidGV4dCIpIT09LTEsZD1bXTtyZXR1cm4gcz9kLnB1c2goZS5sb2MpOnUmJmY/ZC5wdXNoKCIoIituKGUubG9ubGF0WzBdKSsiLCAiK24oZS5sb25sYXRbMV0pKyIpIik6dT9kLnB1c2goImxvbjogIituKGUubG9ubGF0WzBdKSk6ZiYmZC5wdXNoKCJsYXQ6ICIrbihlLmxvbmxhdFsxXSkpLGgmJmwoZSx0LGQpLGQuam9pbigiPGJyPiIpfXZhciBpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHM9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEodCl7dmFyIG49dC5sb25sYXQ7aWYoblswXT09PW8pcmV0dXJuIDEvMDtpZihkKG4pKXJldHVybiAxLzAKO3ZhciBpPXAobiksYT1wKFtlLHJdKSxzPU1hdGguYWJzKGlbMF0tYVswXSksbD1NYXRoLmFicyhpWzFdLWFbMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX12YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsZj10LnlhLGg9dC5zdWJwbG90LGQ9aC5wcm9qZWN0aW9uLmlzTG9uTGF0T3ZlckVkZ2VzLHA9aC5wcm9qZWN0O2lmKGkuZ2V0Q2xvc2VzdChsLGEsdCksdC5pbmRleCE9PSExKXt2YXIgbT1sW3QuaW5kZXhdLHY9bS5sb25sYXQsZz1bdS5jMnAodiksZi5jMnAodildLHk9bS5tcmN8fDE7cmV0dXJuIHQueDA9Z1swXS15LHQueDE9Z1swXSt5LHQueTA9Z1sxXS15LHQueTE9Z1sxXSt5LHQubG9jPW0ubG9jLHQubG9uPXZbMF0sdC5sYXQ9dlsxXSx0LmNvbG9yPXMoYyxtKSx0LmV4dHJhVGV4dD1uKGMsbSxoLm1vY2tBeGlzKSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTIsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDU0LCIuL2F0dHJpYnV0ZXMiOjEwODN9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uZXZlbnREYXRhPXQoIi4vZXZlbnRfZGF0YSIpLG4uc2VsZWN0UG9pbnRzPXQoIi4vc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVyZ2VvIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dlbyIpLG4uY2F0ZWdvcmllcz1bImdlbyIsInN5bWJvbHMiLCJtYXJrZXJDb2xvcnNjYWxlIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nZW8iOjgwNywiLi4vc2NhdHRlci9jb2xvcmJhciI6MTA0OCwiLi9hdHRyaWJ1dGVzIjoxMDgzLCIuL2NhbGMiOjEwODQsIi4vZGVmYXVsdHMiOjEwODUsIi4vZXZlbnRfZGF0YSI6MTA4NiwiLi9ob3ZlciI6MTA4NywiLi9wbG90IjoxMDg5LCIuL3NlbGVjdCI6MTA5MH1dLDEwODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXRbMF0udHJhY2U7aWYoQXJyYXkuaXNBcnJheShyLmxvY2F0aW9ucykpZm9yKHZhciBuPXUocixlKSxpPXIubG9jYXRpb25tb2RlLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXSxzPWYoaSxvLmxvYyxuKTtvLmxvbmxhdD1zP3MucHJvcGVydGllcy5jdDpbYyxjXX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmxheWVycy5mcm9udHBsb3Quc2VsZWN0QWxsKCIudHJhY2Uuc2NhdHRlcmdlbyIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxuPWEuc2VsZWN0KHRoaXMpO24uc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuY2FsbChvLnBvaW50U3R5bGUscix0LmdyYXBoRGl2KSxuLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwoby50ZXh0UG9pbnRTdHlsZSxyLHQuZ3JhcGhEaXYpfSksZS5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5zZWxlY3QodGhpcykscj10LnRyYWNlLG49ci5saW5lfHx7fTtlLmNhbGwocy5zdHJva2Usbi5jb2xvcikuY2FsbChvLmRhc2hMaW5lLG4uZGFzaHx8IiIsbi53aWR0aHx8MCksIm5vbmUiIT09ci5maWxsJiZlLmNhbGwocy5maWxsLHIuZmlsbGNvbG9yKX0pfXZhciBhPXQoImQzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx1PXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsZj10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIikubG9jYXRpb25Ub0ZlYXR1cmUsaD10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLGQ9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfWZ1bmN0aW9uIG8odCxlKXt0LmxvbmxhdFswXT09PWMmJmEuc2VsZWN0KGUpLnJlbW92ZSgpfWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKW4oZVtzXSx0LnRvcG9qc29uKTt2YXIgdT10LmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKS5kYXRhKGUscik7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2Ugc2NhdHRlcmdlbyIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksdS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ubm9kZTM9YS5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2lmKGQuaGFzTGluZXMocil8fCJub25lIiE9PXIuZmlsbCl7dmFyIG49aC5jYWxjVHJhY2VUb0xpbmVDb29yZHModCksaT0ibm9uZSIhPT1yLmZpbGw/aC5tYWtlUG9seWdvbihuKTpoLm1ha2VMaW5lKG4pO2Uuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5kYXRhKFt7Z2VvanNvbjppLHRyYWNlOnJ9XSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKX1kLmhhc01hcmtlcnMocikmJmUuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaChmdW5jdGlvbih0KXtvKHQsdGhpcyl9KSxkLmhhc1RleHQocikmJmUuc2VsZWN0QWxsKCJnIikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goZnVuY3Rpb24odCl7byh0LHRoaXMpfSl9KSxpKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MjcsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3MjgsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzYwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LGQzOjEyMX1dLDEwOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGwsYz10LmNkLHU9dC54YXhpcyxmPXQueWF4aXMsaD1bXSxkPWNbMF0udHJhY2UscD1jWzBdLm5vZGUzO2lmKCFuLmhhc01hcmtlcnMoZCkmJiFuLmhhc1RleHQoZCkpcmV0dXJuW107dmFyIG09ZC5tYXJrZXIsdj1BcnJheS5pc0FycmF5KG0ub3BhY2l0eSk/MTptLm9wYWNpdHk7aWYoZT09PSExKWZvcihsPTA7bDxjLmxlbmd0aDtsKyspY1tsXS5kaW09MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspcj1jW2xdLGE9ci5sb25sYXQsbz11LmMycChhKSxzPWYuYzJwKGEpLGUuY29udGFpbnMoW28sc10pPyhoLnB1c2goe3BvaW50TnVtYmVyOmwsbG9uOmFbMF0sbGF0OmFbMV19KSxyLmRpbT0wKTpyLmRpbT0xO3JldHVybiBwLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4oKHQubW8rMXx8disxKS0xKSoodC5kaW0/aToxKX0pLHAuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbT9pOjF9KSxofX0seyIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MTMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNjZ9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL2dsMmRfbWFya2VycyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYz1uLmxpbmUsdT1uLm1hcmtlcixmPXUubGluZSxoPWUuZXhwb3J0cz1sKHt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6cyh7fSxuLnRleHQse30pLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhKSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6cyh7fSxpKCJtYXJrZXIiKSx7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobyksZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LHNob3dzY2FsZTp1LnNob3dzY2FsZSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6cyh7fSxpKCJtYXJrZXIubGluZSIpLHt3aWR0aDpmLndpZHRofSl9KSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6cyh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCJdfSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLGVycm9yX3k6bi5lcnJvcl95LGVycm9yX3g6bi5lcnJvcl94fSwiY2FsYyIsIm5lc3RlZCIpO2gueC5lZGl0VHlwZT1oLnkuZWRpdFR5cGU9aC54MC5lZGl0VHlwZT1oLnkwLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjE4LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9kYXNoZXMiOjcwOSwiLi4vLi4vY29uc3RhbnRzL2dsMmRfbWFya2VycyI6NzEwLCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1fV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO2lmKCJsYXNzbyI9PT1vfHwic2VsZWN0Ij09PW8pe3ZhciBzLGw9bi5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGM9bi5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLHU9bC5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9Yy5tYWtlQ2FsY2RhdGEoZSwieSIpLGg9TWF0aC5taW4odS5sZW5ndGgsZi5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShoKSxzPTA7czxoO3MrKylyW3NdPXt4OnVbc10seTpmW3NdfX1lbHNlIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV0saShyLGUpO3JldHVybiBhKGUpLHJ9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDQ0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA0OX1dLDEwOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0ic2NhdHRlcmdsIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9InJnYigwLCAwLCAwKSIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMuY29ubmVjdGdhcHM9ITAsdGhpcy5pbmRleD1udWxsLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmhhc0xpbmVzPSExLHRoaXMuaGFzRXJyb3JYPSExLHRoaXMuaGFzRXJyb3JZPSExLHRoaXMuaGFzTWFya2Vycz0hMSx0aGlzLmxpbmU9dGhpcy5pbml0T2JqZWN0KG0se3Bvc2l0aW9uczpuZXcgRmxvYXQ2NEFycmF5KDApLGNvbG9yOlswLDAsMCwxXSx3aWR0aDoxLGZpbGw6WyExLCExLCExLCExXSxmaWxsQ29sb3I6W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sZGFzaGVzOlsxXX0sMCksdGhpcy5lcnJvclg9dGhpcy5pbml0T2JqZWN0KHYse3Bvc2l0aW9uczpuZXcgRmxvYXQ2NEFycmF5KDApLGVycm9yczpuZXcgRmxvYXQ2NEFycmF5KDApLGxpbmVXaWR0aDoxLGNhcFNpemU6MCxjb2xvcjpbMCwwLDAsMV19LDEpLHRoaXMuZXJyb3JZPXRoaXMuaW5pdE9iamVjdCh2LHtwb3NpdGlvbnM6bmV3IEZsb2F0NjRBcnJheSgwKSxlcnJvcnM6bmV3IEZsb2F0NjRBcnJheSgwKSxsaW5lV2lkdGg6MSxjYXBTaXplOjAsY29sb3I6WzAsMCwwLDFdfSwyKTt2YXIgcj17cG9zaXRpb25zOm5ldyBGbG9hdDY0QXJyYXkoMCksc2l6ZXM6W10sY29sb3JzOltdLGdseXBoczpbXSxib3JkZXJXaWR0aHM6W10sYm9yZGVyQ29sb3JzOltdLHNpemU6MTIsY29sb3I6WzAsMCwwLDFdLGJvcmRlclNpemU6MSxib3JkZXJDb2xvcjpbMCwwLDAsMV0sc25hcFBvaW50czohMH0sbj15LmV4dGVuZEZsYXQoe30scix7c25hcFBvaW50czohMX0pO3RoaXMuc2NhdHRlcj10aGlzLmluaXRPYmplY3QoZCxyLDMpLHRoaXMuZmFuY3lTY2F0dGVyPXRoaXMuaW5pdE9iamVjdChwLHIsNCksdGhpcy5zZWxlY3RTY2F0dGVyPXRoaXMuaW5pdE9iamVjdChkLG4sNSl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksYSh0LGUscil9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShyKSxpPWVbMF0sYT0wO2E8cjsrK2EpblthXT10KGE+PWUubGVuZ3RoP2k6ZVthXSk7cmV0dXJuIG59ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGwoTyh0LHIpLHooZSxyKSxyKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPVQodCxlLG4pO3JldHVybiBpPUFycmF5LmlzQXJyYXkoaVswXSk/aTphKHkuaWRlbnRpdHksW2ldLG4pLGwoaSx6KHIsbiksbil9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSg0KnIpLGk9MDtpPHI7KytpKXtmb3IodmFyIGE9MDthPDM7KythKW5bNCppK2FdPXRbaV1bYV07bls0KmkrM109dFtpXVszXSplW2ldfXJldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIiI9PT10LnNwbGl0KCItb3BlbiIpWzFdfWZ1bmN0aW9uIHUodCxlLHIsbixpKXt2YXIgYSxvPWk/QzoxO2ZvcihhPTA7YTwzO2ErKyl0WzQqcithXT1lWzQqbithXTt0WzQqcithXT1vKmVbNCpuK2FdfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj1NYXRoLm1heCgxLChyLTEpL01hdGgubWluKE1hdGgubWF4KHIsMSksMWUzKSksaT0wO2k8cjtpKz1uKWlmKGU9dFtNYXRoLmZsb29yKGkpXSwhKGcoZSl8fGUgaW5zdGFuY2VvZiBEYXRlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1uZXcgbih0LGUudWlkKTtyZXR1cm4gaS51cGRhdGUoZSxyKSxpfXZhciBkPXQoImdsLXNjYXR0ZXIyZCIpLHA9dCgiZ2wtc2NhdHRlcjJkLXNkZiIpLG09dCgiZ2wtbGluZTJkIiksdj10KCJnbC1lcnJvcjJkIiksZz10KCJmYXN0LWlzbnVtZXJpYyIpLHk9dCgiLi4vLi4vbGliIiksYj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxfPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksdz10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksTT10KCIuLi8uLi9saWIvdHlwZWRfYXJyYXlfdHJ1bmNhdGUiKSxUPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKSxrPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxBPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksRT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLFM9dCgiLi4vLi4vY29uc3RhbnRzL2dsMmRfbWFya2VycyIpLEw9dCgiLi4vLi4vY29uc3RhbnRzL2dsMmRfZGFzaGVzIiksQz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sST1bInhheGlzIiwieWF4aXMiXSxEPVswLDAsMCwwXSxQPW4ucHJvdG90eXBlO1AuaW5pdE9iamVjdD1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe2N8fChjPXQocyxlKSxjLl90cmFjZT1vLGMuX2luZGV4PXIpLGMudXBkYXRlKGUpfWZ1bmN0aW9uIGkoKXtjJiZjLnVwZGF0ZShsKX1mdW5jdGlvbiBhKCl7YyYmYy5kaXNwb3NlKCl9dmFyIG89dGhpcyxzPW8uc2NlbmUuZ2xwbG90LGw9eS5leHRlbmRGbGF0KHt9LGUpLGM9bnVsbDtyZXR1cm57b3B0aW9uczplLHVwZGF0ZTpuLGNsZWFyOmksZGlzcG9zZTphfX0sUC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXQucG9pbnRJZDsodC5vYmplY3QhPT10aGlzLmxpbmV8fHRoaXMuY29ubmVjdGdhcHMpJiYoZT10aGlzLmlkVG9JbmRleFt0LnBvaW50SWRdKTt2YXIgcj10aGlzLnBpY2tYRGF0YVtlXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZyhyKXx8IXkuaXNEYXRlVGltZShyKT9yOnkuZGF0ZVRpbWUybXMociksdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjpBcnJheS5pc0FycmF5KHRoaXMuY29sb3IpP3RoaXMuY29sb3JbZV06dGhpcy5jb2xvcixuYW1lOnRoaXMubmFtZSxwb2ludEluZGV4OmUsaG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sUC5pc0ZhbmN5PWZ1bmN0aW9uKHQpe2lmKCJsaW5lYXIiIT09dGhpcy5zY2VuZS54YXhpcy50eXBlJiYiZGF0ZSIhPT10aGlzLnNjZW5lLnhheGlzLnR5cGUpcmV0dXJuITA7aWYoImxpbmVhciIhPT10aGlzLnNjZW5lLnlheGlzLnR5cGUpcmV0dXJuITA7aWYoIXQueHx8IXQueSlyZXR1cm4hMDtpZih0aGlzLmhhc01hcmtlcnMpe3ZhciBlPXQubWFya2VyfHx7fTtpZihBcnJheS5pc0FycmF5KGUuc3ltYm9sKXx8ImNpcmNsZSIhPT1lLnN5bWJvbHx8QXJyYXkuaXNBcnJheShlLnNpemUpfHxBcnJheS5pc0FycmF5KGUuY29sb3IpfHxBcnJheS5pc0FycmF5KGUubGluZS53aWR0aCl8fEFycmF5LmlzQXJyYXkoZS5saW5lLmNvbG9yKXx8QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpKXJldHVybiEwfXJldHVybiEoIXRoaXMuaGFzTGluZXN8fHRoaXMuY29ubmVjdGdhcHMpfHwoISF0aGlzLmhhc0Vycm9yWHx8ISF0aGlzLmhhc0Vycm9yWSl9O3ZhciB6PWkuYmluZChudWxsLGZ1bmN0aW9uKHQpe3JldHVybit0fSksTz1pLmJpbmQobnVsbCx3KSxSPWkuYmluZChudWxsLGZ1bmN0aW9uKHQpe3JldHVybiBTW3RdP3Q6ImNpcmNsZSJ9KTtQLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3QudmlzaWJsZSE9PSEwPyh0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmhhc0xpbmVzPSExLHRoaXMuaGFzRXJyb3JYPSExLHRoaXMuaGFzRXJyb3JZPSExLHRoaXMuaGFzTWFya2Vycz0hMSk6KHRoaXMuaXNWaXNpYmxlPSEwLHRoaXMuaGFzTGluZXM9ay5oYXNMaW5lcyh0KSx0aGlzLmhhc0Vycm9yWD10LmVycm9yX3gudmlzaWJsZT09PSEwLHRoaXMuaGFzRXJyb3JZPXQuZXJyb3JfeS52aXNpYmxlPT09ITAsdGhpcy5oYXNNYXJrZXJzPWsuaGFzTWFya2Vycyh0KSksdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0oMS8wKSwtKDEvMCldLHRoaXMuY29ubmVjdGdhcHM9ISF0LmNvbm5lY3RnYXBzLHRoaXMuaXNWaXNpYmxlP3RoaXMuaXNGYW5jeSh0KT90aGlzLnVwZGF0ZUZhbmN5KHQpOnRoaXMudXBkYXRlRmFzdCh0KToodGhpcy5saW5lLmNsZWFyKCksdGhpcy5lcnJvclguY2xlYXIoKSx0aGlzLmVycm9yWS5jbGVhcigpLHRoaXMuc2NhdHRlci5jbGVhcigpLHRoaXMuZmFuY3lTY2F0dGVyLmNsZWFyKCkpLHRoaXMuc2NlbmUuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9pbmRleC1lLl9pbmRleH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmNvbG9yPUUodCx7fSksZSYmZVswXSYmIWVbMF0uX2dsVHJhY2UmJihlWzBdLl9nbFRyYWNlPXRoaXMpfSxQLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHM9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSx1PW5ldyBGbG9hdDY0QXJyYXkoMipsKSxoPXRoaXMuYm91bmRzLGQ9MCxwPTAsbT10LnNlbGVjdGlvbix2PXQueGNhbGVuZGFyLGI9ZihvKSxfPSFiJiYiZGF0ZSI9PT14KG8sdik7aWYoYnx8Xylmb3IoZT0wO2U8bDsrK2UpaT1vW2VdLGE9c1tlXSxnKGEpJiYoYnx8KGk9eS5kYXRlVGltZTJtcyhpLHYpKSx1W3ArK109aSx1W3ArK109YSxjW2QrK109ZSxoWzBdPU1hdGgubWluKGhbMF0saSksaFsxXT1NYXRoLm1pbihoWzFdLGEpLGhbMl09TWF0aC5tYXgoaFsyXSxpKSxoWzNdPU1hdGgubWF4KGhbM10sYSkpO2lmKHU9TSh1LHApLHRoaXMuaWRUb0luZGV4PWMsbSYmbS5sZW5ndGgpZm9yKHI9bmV3IEZsb2F0NjRBcnJheSgyKm0ubGVuZ3RoKSxlPTAsbj1tLmxlbmd0aDtlPG47ZSsrKXJbMiplKzBdPW1bZV0ueCxyWzIqZSsxXT1tW2VdLnk7dGhpcy51cGRhdGVMaW5lcyh0LHUpLHRoaXMudXBkYXRlRXJyb3IoIlgiLHQpLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQpO3ZhciBUO2lmKHRoaXMuaGFzTWFya2Vycyl7dmFyIGssQSxFO3I/KHRoaXMuc2NhdHRlci5vcHRpb25zLnBvc2l0aW9ucz1udWxsLGs9dyh0Lm1hcmtlci5jb2xvciksQT13KHQubWFya2VyLmxpbmUuY29sb3IpLEU9dC5vcGFjaXR5KnQubWFya2VyLm9wYWNpdHkqQyxrWzNdKj1FLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPWssQVszXSo9RSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1BLFQ9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPVQsdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9dSx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9cixrPXcodC5tYXJrZXIuY29sb3IpLEE9dyh0Lm1hcmtlci5saW5lLmNvbG9yKSxFPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5LGtbM10qPUUsdGhpcy5zZWxlY3RTY2F0dGVyLm9wdGlvbnMuY29sb3I9ayxBWzNdKj1FLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLmJvcmRlckNvbG9yPUEsVD10Lm1hcmtlci5zaXplLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLnNpemU9VCx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5ib3JkZXJTaXplPXQubWFya2VyLmxpbmUud2lkdGgsdGhpcy5zZWxlY3RTY2F0dGVyLnVwZGF0ZSgpKToodGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPXUsaz13KHQubWFya2VyLmNvbG9yKSxBPXcodC5tYXJrZXIubGluZS5jb2xvciksRT10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eSxrWzNdKj1FLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPWssQVszXSo9RSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1BLFQ9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPVQsdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSl9ZWxzZSB0aGlzLnNjYXR0ZXIuY2xlYXIoKTt0aGlzLmZhbmN5U2NhdHRlci5jbGVhcigpLHRoaXMuZXhwYW5kQXhlc0Zhc3QoaCxUKX0sUC51cGRhdGVGYW5jeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS54YXhpcyxuPWUueWF4aXMsYT10aGlzLmJvdW5kcyxvPXQuc2VsZWN0aW9uLGw9dGhpcy5waWNrWERhdGE9ci5tYWtlQ2FsY2RhdGEodCwieCIpLnNsaWNlKCksZj10aGlzLnBpY2tZRGF0YT1uLm1ha2VDYWxjZGF0YSh0LCJ5Iikuc2xpY2UoKTt0aGlzLnhEYXRhPWwuc2xpY2UoKSx0aGlzLnlEYXRhPWYuc2xpY2UoKTt2YXIgaCxkLHAsbSx2LGcseSxiPV8uY2FsY0Zyb21UcmFjZSh0LGUuZnVsbExheW91dCkseD1sLmxlbmd0aCx3PW5ldyBBcnJheSh4KSxUPW5ldyBGbG9hdDY0QXJyYXkoMip4KSxrPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxFPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxMPTAsQz0wLEk9MCxQPTAsTz0ibG9nIj09PXIudHlwZT9yLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sRj0ibG9nIj09PW4udHlwZT9uLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH07Zm9yKGg9MDtoPHg7KytoKXRoaXMueERhdGFbaF09ZD1PKGxbaF0pLHRoaXMueURhdGFbaF09cD1GKGZbaF0pLGlzTmFOKGQpfHxpc05hTihwKXx8KHdbTCsrXT1oLFRbQysrXT1kLFRbQysrXT1wLG09a1tJKytdPWQtYltoXS54c3x8MCx2PWtbSSsrXT1iW2hdLnhoLWR8fDAsa1tJKytdPTAsa1tJKytdPTAsRVtQKytdPTAsRVtQKytdPTAsZz1FW1ArK109cC1iW2hdLnlzfHwwLHk9RVtQKytdPWJbaF0ueWgtcHx8MCxhWzBdPU1hdGgubWluKGFbMF0sZC1tKSxhWzFdPU1hdGgubWluKGFbMV0scC1nKSxhWzJdPU1hdGgubWF4KGFbMl0sZCt2KSxhWzNdPU1hdGgubWF4KGFbM10scCt5KSk7VD1NKFQsQyksdGhpcy5pZFRvSW5kZXg9dyx0aGlzLnVwZGF0ZUxpbmVzKHQsVCksdGhpcy51cGRhdGVFcnJvcigiWCIsdCxULGspLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQsVCxFKTt2YXIgaixOO2lmKG8mJm8ubGVuZ3RoKWZvcihOPXt9LGg9MDtoPG8ubGVuZ3RoO2grKylOW29baF0ucG9pbnROdW1iZXJdPSEwO2lmKHRoaXMuaGFzTWFya2Vycyl7dGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPVQsdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXM9bmV3IEFycmF5KEwpLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBocz1uZXcgQXJyYXkoTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzPW5ldyBBcnJheShMKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5jb2xvcnM9bmV3IEFycmF5KDQqTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyQ29sb3JzPW5ldyBBcnJheSg0KkwpO3ZhciBCLFUsVixILHEsRyxZLFgsVyxaLEo9QSh0KSxLPXQubWFya2VyLFE9Sy5vcGFjaXR5LCQ9dC5vcGFjaXR5LHR0PVIoSy5zeW1ib2wseCksZXQ9cyhLLFEsJCx4KSxydD16KEsubGluZS53aWR0aCx4KSxudD1zKEsubGluZSxRLCQseCk7Zm9yKGo9aShKLEsuc2l6ZSx4KSxoPTA7aDxMOysraClCPXdbaF0sVj10dFtCXSxIPVNbVl0scT1jKFYpLEc9TiYmIU5bQl0sWT1ILm5vQm9yZGVyJiYhcT9udDpldCxYPXE/ZXQ6bnQsVT1qW0JdLFc9cnRbQl0sWj1ILm5vQm9yZGVyfHxILm5vRmlsbD8uMSpVOjAsdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXNbaF09NCpVLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBoc1toXT1ILnVuaWNvZGUsdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzW2hdPS41KihXPlo/Vy1aOjApLCFxfHxILm5vQm9yZGVyfHxILm5vRmlsbD91KHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxZLGgsQixHKTp1KHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxELGgsMCksdSh0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcnMsWCxoLEIsRyk7Tj8odGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPW51bGwsdGhpcy5mYW5jeVNjYXR0ZXIudXBkYXRlKCksdGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPVQpOnRoaXMuZmFuY3lTY2F0dGVyLnVwZGF0ZSgpfWVsc2UgdGhpcy5mYW5jeVNjYXR0ZXIuY2xlYXIoKTt0aGlzLnNjYXR0ZXIuY2xlYXIoKSx0aGlzLmV4cGFuZEF4ZXNGYW5jeShsLGYsail9LFAudXBkYXRlTGluZXM9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZih0aGlzLmhhc0xpbmVzKXt2YXIgbj1lO2lmKCF0LmNvbm5lY3RnYXBzKXt2YXIgaT0wLGE9dGhpcy54RGF0YSxzPXRoaXMueURhdGE7Zm9yKG49bmV3IEZsb2F0NjRBcnJheSgyKmEubGVuZ3RoKSxyPTA7cjxhLmxlbmd0aDsrK3IpbltpKytdPWFbcl0sbltpKytdPXNbcl19dGhpcy5saW5lLm9wdGlvbnMucG9zaXRpb25zPW47dmFyIGw9byh0LmxpbmUuY29sb3IsdC5vcGFjaXR5LDEpLGM9TWF0aC5yb3VuZCguNSp0aGlzLmxpbmUub3B0aW9ucy53aWR0aCksdT0oTFt0LmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8dS5sZW5ndGg7KytyKXVbcl0qPWM7c3dpdGNoKHQuZmlsbCl7Y2FzZSJ0b3plcm95Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMCwhMSwhMV07YnJlYWs7Y2FzZSJ0b3plcm94Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMCwhMSwhMSwhMV07YnJlYWs7ZGVmYXVsdDp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMSwhMSwhMV19dmFyIGY9dyh0LmZpbGxjb2xvcik7dGhpcy5saW5lLm9wdGlvbnMuY29sb3I9bCx0aGlzLmxpbmUub3B0aW9ucy53aWR0aD0yKnQubGluZS53aWR0aCx0aGlzLmxpbmUub3B0aW9ucy5kYXNoZXM9dSx0aGlzLmxpbmUub3B0aW9ucy5maWxsQ29sb3I9W2YsZixmLGZdLHRoaXMubGluZS51cGRhdGUoKX1lbHNlIHRoaXMubGluZS5jbGVhcigpfSxQLnVwZGF0ZUVycm9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXNbImVycm9yIit0XSxhPWVbImVycm9yXyIrdC50b0xvd2VyQ2FzZSgpXTsieCI9PT10LnRvTG93ZXJDYXNlKCkmJmEuY29weV95c3R5bGUmJihhPWUuZXJyb3JfeSksdGhpc1siaGFzRXJyb3IiK3RdPyhpLm9wdGlvbnMucG9zaXRpb25zPXIsaS5vcHRpb25zLmVycm9ycz1uLGkub3B0aW9ucy5jYXBTaXplPWEud2lkdGgsaS5vcHRpb25zLmxpbmVXaWR0aD1hLnRoaWNrbmVzcy8yLGkub3B0aW9ucy5jb2xvcj1vKGEuY29sb3IsMSwxKSxpLnVwZGF0ZSgpKTppLmNsZWFyKCl9LFAuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8MTAsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW0lbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSxQLmV4cGFuZEF4ZXNGYW5jeT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zY2VuZSxpPXtwYWRkZWQ6ITAscHBhZDpyfTtiLmV4cGFuZChuLnhheGlzLHQsaSksYi5leHBhbmQobi55YXhpcyxlLGkpfSxQLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmUuZGlzcG9zZSgpLHRoaXMuZXJyb3JYLmRpc3Bvc2UoKSx0aGlzLmVycm9yWS5kaXNwb3NlKCksdGhpcy5zY2F0dGVyLmRpc3Bvc2UoKSx0aGlzLmZhbmN5U2NhdHRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1ofSx7Ii4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2NDEsIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyI6NzA5LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9tYXJrZXJzIjo3MTAsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcxMywiLi4vLi4vbGliIjo3MzUsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjczMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzU2LCIuLi8uLi9saWIvdHlwZWRfYXJyYXlfdHJ1bmNhdGUiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjc4MCwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwNTQsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDYxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCJmYXN0LWlzbnVtZXJpYyI6MTMxLCJnbC1lcnJvcjJkIjoxNTksImdsLWxpbmUyZCI6MTc0LCJnbC1zY2F0dGVyMmQiOjI1NCwiZ2wtc2NhdHRlcjJkLXNkZiI6MjQ5fV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBkKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIHA9byh0LGUsaCxkKTtpZighcClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2QoInRleHQiKSxkKCJtb2RlIixwPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksbCh0LGUscixoLGQpKSxhLmhhc01hcmtlcnMoZSkmJnModCxlLHIsaCxkKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLGQpLHUodCxlLHIse2F4aXM6InkifSksdSh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieSJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjY0MCwiLi4vLi4vbGliIjo3MzUsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDUwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA1MywiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDU3LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA2MiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA2NiwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTA2OCwiLi9hdHRyaWJ1dGVzIjoxMDkxfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9zY2F0dGVyL2hvdmVyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcmdsIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxuLmNhdGVnb3JpZXM9WyJnbDJkIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwibWFya2VyQ29sb3JzY2FsZSIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODE1LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDQ4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDU1LCIuL2F0dHJpYnV0ZXMiOjEwOTEsIi4vY2FsYyI6MTA5MiwiLi9jb252ZXJ0IjoxMDkzLCIuL2RlZmF1bHRzIjoxMDk0LCIuL3NlbGVjdCI6MTA5Nn1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W10sZj1zWzBdLnRyYWNlLGg9c1swXS5fZ2xUcmFjZSxkPWguc2NlbmU7aWYoIW4uaGFzTWFya2VycyhmKSYmIW4uaGFzVGV4dChmKSlyZXR1cm5bXTtpZihlPT09ITEpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLmRpbT0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpPXNbcl0sYT1sLmMycChpLngpLG89Yy5jMnAoaS55KSxlLmNvbnRhaW5zKFthLG9dKT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6bC5jMmQoaS54KSx5OmMuYzJkKGkueSl9KSxpLmRpbT0wKTppLmRpbT0xO3JldHVybiBmLnNlbGVjdGlvbj11LGgudXBkYXRlKGYscyksZC5nbHBsb3Quc2V0RGlydHkoKSx1fX0seyIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2fV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9bi5saW5lLGY9bi5tYXJrZXI7ZS5leHBvcnRzPWMoe2xvbjpuLmxvbixsYXQ6bi5sYXQsbW9kZTpsKHt9LGkubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRofSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sb3BhY2l0eTpmLm9wYWNpdHksc2l6ZTpmLnNpemUsc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxjb2xvcjpmLmNvbG9yLGNvbG9yc2NhbGU6Zi5jb2xvcnNjYWxlLGNhdXRvOmYuY2F1dG8sY21heDpmLmNtYXgsY21pbjpmLmNtaW4sYXV0b2NvbG9yc2NhbGU6Zi5hdXRvY29sb3JzY2FsZSxyZXZlcnNlc2NhbGU6Zi5yZXZlcnNlc2NhbGUsc2hvd3NjYWxlOmYuc2hvd3NjYWxlLGNvbG9yYmFyOnN9LGZpbGw6bi5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcix0ZXh0Zm9udDphLmxheWVycy5zeW1ib2wudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEubGF5ZXJzLnN5bWJvbC50ZXh0cG9zaXRpb24saG92ZXJpbmZvOmwoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc2MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzc3LCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjgzNCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDQ1LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwODN9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm57Z2VvanNvbjp2Lm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLm9wYWNpdHkqZSoodC5kaW0/XzoxKX1mdW5jdGlvbiBuKHQscixuLGkpe3ZvaWQgMD09PWVbcl1bbl0mJihlW3JdW25dPWkpLHRbcl09ZVtyXVtuXX12YXIgaSxhPXRbMF0udHJhY2Usbz1hLm1hcmtlcjtnLmhhc0NvbG9yc2NhbGUoYSwibWFya2VyIik/aT1nLm1ha2VDb2xvclNjYWxlRnVuYyhnLmV4dHJhY3RTY2FsZShvLmNvbG9yc2NhbGUsby5jbWluLG8uY21heCkpOkFycmF5LmlzQXJyYXkoby5jb2xvcikmJihpPXAuaWRlbnRpdHkpO3ZhciBzO2IuaXNCdWJibGUoYSkmJihzPXkoYSkpO3ZhciBsO0FycmF5LmlzQXJyYXkoby5vcGFjaXR5KT9sPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsZCh0Lm1vKT8rcC5jb25zdHJhaW4odC5tbywwLDEpOjApfTphLl9oYXNEaW1tZWRQdHMmJihsPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsby5vcGFjaXR5KX0pO2Zvcih2YXIgYz1bXSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPXRbdV0sbT1mLmxvbmxhdDtpZighaChtKSl7dmFyIHY9e307aWYoaSl7dmFyIHg9Zi5tY2M9aShmLm1jKTtuKHYsdyx4LHUpfXMmJm4odixNLHMoZi5tcyksdSksbCYmbih2LFQsbChmKSx1KSxjLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6bX0scHJvcGVydGllczp2fSl9fXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6Y319ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxuPXIuc3ltYm9sLGk9ZS50ZXh0LGE9ImNpcmNsZSIhPT1uP2Mobik6dSxvPWIuaGFzVGV4dChlKT9jKGkpOnUscz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBmPXRbbF07aChmLmxvbmxhdCl8fHMucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpmLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOmEoZi5teCksdGV4dDpvKGYudHgpfX0pfXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6c319ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG49dC5tYXJrZXI7aWYoQXJyYXkuaXNBcnJheShuLmNvbG9yKSl7Zm9yKHZhciBpPU9iamVjdC5rZXlzKGVbd10pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2EucHVzaChbZVt3XVtzXSxzXSl9cj17cHJvcGVydHk6dyxzdG9wczphfX1lbHNlIHI9bi5jb2xvcjtyZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj10Lm1hcmtlcjtpZihBcnJheS5pc0FycmF5KG4uc2l6ZSkpe2Zvcih2YXIgaT1PYmplY3Qua2V5cyhlW01dKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTthLnB1c2goW2VbTV1bc10sK3NdKX1yPXtwcm9wZXJ0eTpNLHN0b3BzOmEuc29ydChmKX19ZWxzZSByPW4uc2l6ZS8yO3JldHVybiByfWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPXQubWFya2VyO2lmKEFycmF5LmlzQXJyYXkobi5vcGFjaXR5KXx8dC5faGFzRGltbWVkUHRzKXtmb3IodmFyIGk9T2JqZWN0LmtleXMoZVtUXSksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb107YS5wdXNoKFtlW1RdW3NdLCtzXSl9cj17cHJvcGVydHk6VCxzdG9wczphLnNvcnQoZil9fWVsc2Ugcj10Lm9wYWNpdHkqbi5vcGFjaXR5O3JldHVybiByfWZ1bmN0aW9uIGModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZnVuY3Rpb24odCl7cmV0dXJuIHR9OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dX1mdW5jdGlvbiB1KCl7cmV0dXJuIiJ9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdFswXT09PW19dmFyIGQ9dCgiZmFzdC1pc251bWVyaWMiKSxwPXQoIi4uLy4uL2xpYiIpLG09dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx2PXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx5PXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksYj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikseD10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSx3PSJjaXJjbGUtY29sb3IiLE09ImNpcmNsZS1yYWRpdXMiLFQ9ImNpcmNsZS1vcGFjaXR5IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUudmlzaWJsZT09PSEwLGM9Im5vbmUiIT09ZS5maWxsLHU9Yi5oYXNMaW5lcyhlKSxmPWIuaGFzTWFya2VycyhlKSxoPWIuaGFzVGV4dChlKSxkPWYmJiJjaXJjbGUiPT09ZS5tYXJrZXIuc3ltYm9sLG09ZiYmImNpcmNsZSIhPT1lLm1hcmtlci5zeW1ib2wsZz1uKCkseT1uKCksXz1uKCksaz1uKCksQT17ZmlsbDpnLGxpbmU6eSxjaXJjbGU6XyxzeW1ib2w6a307aWYoIXIpcmV0dXJuIEE7dmFyIEU7aWYoKGN8fHUpJiYoRT12LmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksYyYmKGcuZ2VvanNvbj12Lm1ha2VQb2x5Z29uKEUpLGcubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdChnLnBhaW50LHsiZmlsbC1jb2xvciI6ZS5maWxsY29sb3J9KSksdSYmKHkuZ2VvanNvbj12Lm1ha2VMaW5lKEUpLHkubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdCh5LnBhaW50LHsibGluZS13aWR0aCI6ZS5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjplLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6ZS5vcGFjaXR5fSkpLGQpe3ZhciBTPXt9O1Nbd109e30sU1tNXT17fSxTW1RdPXt9LF8uZ2VvanNvbj1pKHQsUyksXy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIscC5leHRlbmRGbGF0KF8ucGFpbnQseyJjaXJjbGUtb3BhY2l0eSI6bChlLFMpLCJjaXJjbGUtY29sb3IiOm8oZSxTKSwiY2lyY2xlLXJhZGl1cyI6cyhlLFMpfSl9aWYoKG18fGgpJiYoay5nZW9qc29uPWEodCkscC5leHRlbmRGbGF0KGsubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxtJiYocC5leHRlbmRGbGF0KGsubGF5b3V0LHsiaWNvbi1zaXplIjplLm1hcmtlci5zaXplLzEwfSkscC5leHRlbmRGbGF0KGsucGFpbnQseyJpY29uLW9wYWNpdHkiOmUub3BhY2l0eSplLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjplLm1hcmtlci5jb2xvcn0pKSxoKSl7dmFyIEw9KGUubWFya2VyfHx7fSkuc2l6ZSxDPXgoZS50ZXh0cG9zaXRpb24sTCk7cC5leHRlbmRGbGF0KGsubGF5b3V0LHsidGV4dC1zaXplIjplLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpDLmFuY2hvciwidGV4dC1vZmZzZXQiOkMub2Zmc2V0fSkscC5leHRlbmRGbGF0KGsucGFpbnQseyJ0ZXh0LWNvbG9yIjplLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOmUub3BhY2l0eX0pfXJldHVybiBBfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzEzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzI4LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjgzMSwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwNjEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNjYsImZhc3QtaXNudW1lcmljIjoxMzF9XSwxMDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gYTxuLmxlbmd0aCYmKGUubG9uPW4uc2xpY2UoMCxhKSksYTxpLmxlbmd0aCYmKGUubGF0PWkuc2xpY2UoMCxhKSksYX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSx1LHIsbil9aWYoIW4odCxlLGgpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7aWYoaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLGgse25vRGFzaDohMH0pLGgoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSl7byh0LGUscixmLGgse25vTGluZTohMH0pO3ZhciBkPWUubWFya2VyO2QubGluZT17d2lkdGg6MH0sImNpcmNsZSIhPT1kLnN5bWJvbCYmKEFycmF5LmlzQXJyYXkoZC5zaXplKSYmKGQuc2l6ZT1kLnNpemVbMF0pLEFycmF5LmlzQXJyYXkoZC5jb2xvcikmJihkLmNvbG9yPWQuY29sb3JbMF0pKX1hLmhhc1RleHQoZSkmJmwodCxlLGYsaCksaCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixoKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDUzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwNTcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDYyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNjcsIi4vYXR0cmlidXRlcyI6MTA5N31dLDExMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCsiXHhiMCJ9dmFyIG49ZS5oaXx8dC5ob3ZlcmluZm8saT1uLnNwbGl0KCIrIiksYT1pLmluZGV4T2YoImFsbCIpIT09LTEscz1pLmluZGV4T2YoImxvbiIpIT09LTEsbD1pLmluZGV4T2YoImxhdCIpIT09LTEsYz1lLmxvbmxhdCx1PVtdO3JldHVybiBhfHxzJiZsP3UucHVzaCgiKCIrcihjWzBdKSsiLCAiK3IoY1sxXSkrIikiKTpzP3UucHVzaCgibG9uOiAiK3IoY1swXSkpOmwmJnUucHVzaCgibGF0OiAiK3IoY1sxXSkpLChhfHxpLmluZGV4T2YoInRleHQiKSE9PS0xKSYmbyhlLHQsdSksdS5qb2luKCI8YnI+Iil9dmFyIGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPU1hdGguYWJzKHUuYzJwKGUpLXUuYzJwKFtwLGVbMV1dKSksaT1NYXRoLmFicyhmLmMycChlKS1mLmMycChbZVswXSxyXSkpLGE9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChuKm4raSppKS1hLDEtMy9hKX12YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsZj10LnlhLGg9ZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApLGQ9MzYwKmgscD1lLWQ7aWYoaS5nZXRDbG9zZXN0KGwsbyx0KSx0LmluZGV4IT09ITEpe3ZhciBtPWxbdC5pbmRleF0sdj1tLmxvbmxhdCxnPVt2WzBdK2QsdlsxXV0seT11LmMycChnKSxiPWYuYzJwKGcpLHg9bS5tcmN8fDE7cmV0dXJuIHQueDA9eS14LHQueDE9eSt4LHQueTA9Yi14LHQueTE9Yit4LHQuY29sb3I9YShjLG0pLHQuZXh0cmFUZXh0PW4oYyxtKSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcxNCwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwNTIsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDU0fV0sMTEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXJnZW8vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcm1hcGJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9tYXBib3giKSxuLmNhdGVnb3JpZXM9WyJtYXBib3giLCJnbCIsInN5bWJvbHMiLCJtYXJrZXJDb2xvcnNjYWxlIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXJsaWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6ODMyLCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDQ4LCIuLi9zY2F0dGVyZ2VvL2NhbGMiOjEwODQsIi4vYXR0cmlidXRlcyI6MTA5NywiLi9kZWZhdWx0cyI6MTA5OSwiLi9ldmVudF9kYXRhIjoxMTAwLCIuL2hvdmVyIjoxMTAxLCIuL3Bsb3QiOjExMDMsIi4vc2VsZWN0IjoxMTA0fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5tYXBib3g9dCx0aGlzLm1hcD10Lm1hcCx0aGlzLnVpZD1lLHRoaXMuaWRTb3VyY2VGaWxsPWUrIi1zb3VyY2UtZmlsbCIsdGhpcy5pZFNvdXJjZUxpbmU9ZSsiLXNvdXJjZS1saW5lIix0aGlzLmlkU291cmNlQ2lyY2xlPWUrIi1zb3VyY2UtY2lyY2xlIix0aGlzLmlkU291cmNlU3ltYm9sPWUrIi1zb3VyY2Utc3ltYm9sIix0aGlzLmlkTGF5ZXJGaWxsPWUrIi1sYXllci1maWxsIix0aGlzLmlkTGF5ZXJMaW5lPWUrIi1sYXllci1saW5lIix0aGlzLmlkTGF5ZXJDaXJjbGU9ZSsiLWxheWVyLWNpcmNsZSIsdGhpcy5pZExheWVyU3ltYm9sPWUrIi1sYXllci1zeW1ib2wiLHRoaXMubWFwYm94LmluaXRTb3VyY2UodGhpcy5pZFNvdXJjZUZpbGwpLHRoaXMubWFwYm94LmluaXRTb3VyY2UodGhpcy5pZFNvdXJjZUxpbmUpLHRoaXMubWFwYm94LmluaXRTb3VyY2UodGhpcy5pZFNvdXJjZUNpcmNsZSksdGhpcy5tYXBib3guaW5pdFNvdXJjZSh0aGlzLmlkU291cmNlU3ltYm9sKSx0aGlzLm1hcC5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyRmlsbCxzb3VyY2U6dGhpcy5pZFNvdXJjZUZpbGwsdHlwZToiZmlsbCJ9KSx0aGlzLm1hcC5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyTGluZSxzb3VyY2U6dGhpcy5pZFNvdXJjZUxpbmUsdHlwZToibGluZSJ9KSx0aGlzLm1hcC5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyQ2lyY2xlLHNvdXJjZTp0aGlzLmlkU291cmNlQ2lyY2xlLHR5cGU6ImNpcmNsZSJ9KSx0aGlzLm1hcC5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyU3ltYm9sLHNvdXJjZTp0aGlzLmlkU291cmNlU3ltYm9sLHR5cGU6InN5bWJvbCJ9KX1mdW5jdGlvbiBpKHQpe3JldHVybiJ2aXNpYmxlIj09PXQubGF5b3V0LnZpc2liaWxpdHl9dmFyIGE9dCgiLi9jb252ZXJ0Iiksbz1uLnByb3RvdHlwZTtvLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcGJveCxyPWEodCk7ZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckZpbGwsInNldExheW91dFByb3BlcnR5IixyLmZpbGwubGF5b3V0KSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyTGluZSwic2V0TGF5b3V0UHJvcGVydHkiLHIubGluZS5sYXlvdXQpLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJDaXJjbGUsInNldExheW91dFByb3BlcnR5IixyLmNpcmNsZS5sYXlvdXQpLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJTeW1ib2wsInNldExheW91dFByb3BlcnR5IixyLnN5bWJvbC5sYXlvdXQpLGkoci5maWxsKSYmKGUuc2V0U291cmNlRGF0YSh0aGlzLmlkU291cmNlRmlsbCxyLmZpbGwuZ2VvanNvbiksZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckZpbGwsInNldFBhaW50UHJvcGVydHkiLHIuZmlsbC5wYWludCkpLGkoci5saW5lKSYmKGUuc2V0U291cmNlRGF0YSh0aGlzLmlkU291cmNlTGluZSxyLmxpbmUuZ2VvanNvbiksZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckxpbmUsInNldFBhaW50UHJvcGVydHkiLHIubGluZS5wYWludCkpLGkoci5jaXJjbGUpJiYoZS5zZXRTb3VyY2VEYXRhKHRoaXMuaWRTb3VyY2VDaXJjbGUsci5jaXJjbGUuZ2VvanNvbiksZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckNpcmNsZSwic2V0UGFpbnRQcm9wZXJ0eSIsci5jaXJjbGUucGFpbnQpKSxpKHIuc3ltYm9sKSYmKGUuc2V0U291cmNlRGF0YSh0aGlzLmlkU291cmNlU3ltYm9sLHIuc3ltYm9sLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJTeW1ib2wsInNldFBhaW50UHJvcGVydHkiLHIuc3ltYm9sLnBhaW50KSksdFswXS50cmFjZS5fZ2xUcmFjZT10aGlzfSxvLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcDt0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllckZpbGwpLHQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyTGluZSksdC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXJDaXJjbGUpLHQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyU3ltYm9sKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlRmlsbCksdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZUxpbmUpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2VDaXJjbGUpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2VTeW1ib2wpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGk9bmV3IG4odCxyLnVpZCk7cmV0dXJuIGkudXBkYXRlKGUpLGl9fSx7Ii4vY29udmVydCI6MTA5OH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbD10LmNkLGM9dC54YXhpcyx1PXQueWF4aXMsZj1bXSxoPWxbMF0udHJhY2U7aWYoaC5faGFzRGltbWVkUHRzPSExLCFuLmhhc01hcmtlcnMoaCkpcmV0dXJuW107aWYoZT09PSExKWZvcihzPTA7czxsLmxlbmd0aDtzKyspbFtzXS5kaW09MDtlbHNlIGZvcihzPTA7czxsLmxlbmd0aDtzKyspcj1sW3NdLGk9ci5sb25sYXQsYT1jLmMycChpKSxvPXUuYzJwKGkpLGUuY29udGFpbnMoW2Esb10pPyhoLl9oYXNEaW1tZWRQdHM9ITAsZi5wdXNoKHtwb2ludE51bWJlcjpzLGxvbjppWzBdLGxhdDppWzFdfSksci5kaW09MCk6ci5kaW09MTtyZXR1cm4gaC5fZ2xUcmFjZS51cGRhdGUobCksZn19LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA2Nn1dLDExMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGY9Yy5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnMsc2hhcGU6bCh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsZmlsbDpsKHt9LG4uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdfSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpmLndpZHRoLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Yy5ncmFkaWVudCxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIpLHtzaG93c2NhbGU6Yy5zaG93c2NhbGUsY29sb3JiYXI6b30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwiYyIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIjo2MTgsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MzQsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwNDV9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxzPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD1bImEiLCJiIiwiYyJdLGM9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxkLHAsbT10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0sdj1tLnN1bSxnPWUuc3VtfHx2O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoZj1sW3JdLCFlW2ZdKXtmb3IoZD1lW2NbZl1bMF1dLHA9ZVtjW2ZdWzFdXSxoPW5ldyBBcnJheShkLmxlbmd0aCksdT0wO3U8ZC5sZW5ndGg7dSsrKWhbdV09Zy1kW3VdLXBbdV07ZVtmXT1ofXZhciB5LGIseCxfLHcsTSxUPWUuYS5sZW5ndGgsaz1uZXcgQXJyYXkoVCk7Zm9yKHI9MDtyPFQ7cisrKXk9ZS5hW3JdLGI9ZS5iW3JdLHg9ZS5jW3JdLG4oeSkmJm4oYikmJm4oeCk/KHk9K3ksYj0rYix4PSt4LF89di8oeStiK3gpLDEhPT1fJiYoeSo9XyxiKj1fLHgqPV8pLE09eSx3PXgtYixrW3JdPXt4OncseTpNLGE6eSxiOmIsYzp4fSk6a1tyXT17eDohMSx5OiExfTt2YXIgQSxFO2lmKGEuaGFzTWFya2VycyhlKSYmKEE9ZS5tYXJrZXIsRT1BLnNpemUsQXJyYXkuaXNBcnJheShFKSkpe3ZhciBTPXt0eXBlOiJsaW5lYXIifTtpLnNldENvbnZlcnQoUyksRT1TLm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLEUubGVuZ3RoPlQmJkUuc3BsaWNlKFQsRS5sZW5ndGgtVCl9cmV0dXJuIG8oZSkscyhrLGUpLGt9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NzksIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDQ0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTA0OSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA2NiwiZmFzdC1pc251bWVyaWMiOjEzMX1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCIKO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgcCxtPWQoImEiKSx2PWQoImIiKSxnPWQoImMiKTtpZihtPyhwPW0ubGVuZ3RoLHY/KHA9TWF0aC5taW4ocCx2Lmxlbmd0aCksZyYmKHA9TWF0aC5taW4ocCxnLmxlbmd0aCkpKTpwPWc/TWF0aC5taW4ocCxnLmxlbmd0aCk6MCk6diYmZyYmKHA9TWF0aC5taW4odi5sZW5ndGgsZy5sZW5ndGgpKSwhcClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO20mJnA8bS5sZW5ndGgmJihlLmE9bS5zbGljZSgwLHApKSx2JiZwPHYubGVuZ3RoJiYoZS5iPXYuc2xpY2UoMCxwKSksZyYmcDxnLmxlbmd0aCYmKGUuYz1nLnNsaWNlKDAscCkpLGQoInN1bSIpLGQoInRleHQiKSxkKCJob3ZlcnRleHQiKSxkKCJtb2RlIixwPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxkKSxsKHQsZSxkKSxkKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxkLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxkKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYoZCgibWFya2VyLm1heGRpc3BsYXllZCIpLHkucHVzaCgicG9pbnRzIikpLGQoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLGQpLGEuaGFzTGluZXMoZSl8fGwodCxlLGQpKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHkucHVzaCgiZmlsbHMiKSxkKCJob3Zlcm9uIix5LmpvaW4oIisiKXx8InBvaW50cyIpLGQoImNsaXBvbmF4aXMiKX19LHsiLi4vLi4vbGliIjo3MzUsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDUwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTA1MywiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDU3LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwNTksIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDYyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDY2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNjcsIi4vYXR0cmlidXRlcyI6MTEwNX1dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyh0LGUpe3kucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIraS50aWNrVGV4dCh0LGUsImhvdmVyIikudGV4dCl9dmFyIHM9bih0LGUscixhKTtpZihzJiZzWzBdLmluZGV4IT09ITEpe3ZhciBsPXNbMF07aWYodm9pZCAwPT09bC5pbmRleCl7dmFyIGM9MS1sLnkwL3QueWEuX2xlbmd0aCx1PXQueGEuX2xlbmd0aCxmPXUqYy8yLGg9dS1mO3JldHVybiBsLngwPU1hdGgubWF4KE1hdGgubWluKGwueDAsaCksZiksbC54MT1NYXRoLm1heChNYXRoLm1pbihsLngxLGgpLGYpLHN9dmFyIGQ9bC5jZFtsLmluZGV4XTtsLmE9ZC5hLGwuYj1kLmIsbC5jPWQuYyxsLnhMYWJlbFZhbD12b2lkIDAsbC55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPWwudHJhY2UsbT1wLl90ZXJuYXJ5LHY9ZC5oaXx8cC5ob3ZlcmluZm8sZz12LnNwbGl0KCIrIikseT1bXTtyZXR1cm4gZy5pbmRleE9mKCJhbGwiKSE9PS0xJiYoZz1bImEiLCJiIiwiYyJdKSxnLmluZGV4T2YoImEiKSE9PS0xJiZvKG0uYWF4aXMsZC5hKSxnLmluZGV4T2YoImIiKSE9PS0xJiZvKG0uYmF4aXMsZC5iKSxnLmluZGV4T2YoImMiKSE9PS0xJiZvKG0uY2F4aXMsZC5jKSxsLmV4dHJhVGV4dD15LmpvaW4oIjxicj4iKSxzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc3OSwiLi4vc2NhdHRlci9ob3ZlciI6MTA1NX1dLDExMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJ0ZXJuYXJ5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL3Rlcm5hcnkiKSxuLmNhdGVnb3JpZXM9WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjg0NiwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTA0OCwiLi9hdHRyaWJ1dGVzIjoxMTA1LCIuL2NhbGMiOjExMDYsIi4vZGVmYXVsdHMiOjExMDcsIi4vaG92ZXIiOjExMDgsIi4vcGxvdCI6MTExMCwiLi9zZWxlY3QiOjExMTEsIi4vc3R5bGUiOjExMTJ9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucGxvdENvbnRhaW5lcjtyLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2Zvcih2YXIgaT17eGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHBsb3Q6cixsYXllckNsaXBJZDp0Ll9oYXNDbGlwT25BeGlzRmFsc2U/dC5jbGlwSWRSZWxhdGl2ZTpudWxsfSxhPTA7YTxlLmxlbmd0aDthKyspZVthXVswXS50cmFjZS5fdGVybmFyeT10O24odC5ncmFwaERpdixpLGUpfX0seyIuLi9zY2F0dGVyL3Bsb3QiOjEwNjN9XSwxMTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0LGUpO2lmKHIpe3ZhciBpLGEsbyxzPXQuY2Q7Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sYT1zW2kucG9pbnROdW1iZXJdLGkuYT1hLmEsaS5iPWEuYixpLmM9YS5jLGRlbGV0ZSBpLngsZGVsZXRlIGkueTtyZXR1cm4gcn19fSx7Ii4uL3NjYXR0ZXIvc2VsZWN0IjoxMDY0fV0sMTExMjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDgyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi4vc2NhdHRlci9zdHlsZSI6MTA2NSxkdXA6MTA4Mn1dLDExMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm57dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19ZnVuY3Rpb24gaSh0KXtyZXR1cm57c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scHJvamVjdDp7eDpuKCJ4IikseTpuKCJ5IiksejpuKCJ6Iil9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lfSx1c2Vjb2xvcm1hcDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsbWF4OjE2LGRmbHQ6Mn0saGlnaGxpZ2h0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxoaWdobGlnaHRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZX0saGlnaGxpZ2h0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsbWF4OjE2LGRmbHQ6Mn19fXZhciBhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9ZS5leHBvcnRzPWMoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjYXV0bzpvLnphdXRvLGNtaW46by56bWluLGNtYXg6by56bWF4LGNvbG9yc2NhbGU6by5jb2xvcnNjYWxlLGF1dG9jb2xvcnNjYWxlOmwoe30sby5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHJldmVyc2VzY2FsZTpvLnJldmVyc2VzY2FsZSxzaG93c2NhbGU6by5zaG93c2NhbGUsY29sb3JiYXI6cyxjb250b3Vyczp7eDppKCJ4IikseTppKCJ5IiksejppKCJ6Iil9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxvLnphdXRvLHt9KSx6bWluOmwoe30sby56bWluLHt9KSx6bWF4Omwoe30sby56bWF4LHt9KX19LCJjYWxjIiwibmVzdGVkIik7dS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MTYsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzYzfV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Uuc3VyZmFjZWNvbG9yP24oZSxlLnN1cmZhY2Vjb2xvciwiIiwiYyIpOm4oZSxlLnosIiIsImMiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYxN31dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPSJjYiIrci51aWQsYz1yLmNtaW4sdT1yLmNtYXgsZj1yLnN1cmZhY2Vjb2xvcnx8ci56O2lmKG4oYyl8fChjPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGYpKSxuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxmKSksdC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbCkucmVtb3ZlKCksIXIuc2hvd3NjYWxlKXJldHVybiB2b2lkIGEuYXV0b01hcmdpbih0LGwpO3ZhciBoPWVbMF0udC5jYj1zKHQsbCksZD1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShyLmNvbG9yc2NhbGUsYyx1KSx7bm9OdW1lcmljQ2hlY2s6ITB9KTtoLmZpbGxjb2xvcihkKS5maWxsbGV2ZWxzKHtzdGFydDpjLGVuZDp1LHNpemU6KHUtYykvMjU0fSkub3B0aW9ucyhyLmNvbG9yYmFyKSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciOjYxNCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjUsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9wbG90cyI6ODM4LCJmYXN0LWlzbnVtZXJpYyI6MTMxfV0sMTExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5kYXRhU2NhbGU9MX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEpLHQubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0sbj1wKHRbMV0pLGk9bi50b1JnYigpO3JldHVybntpbmRleDpyLHJnYjpbaS5yLGkuZyxpLmIsZV19fSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10WzBdLnJnYixyPXRbdC5sZW5ndGgtMV0ucmdiO3JldHVybiBlWzBdPT09clswXSYmZVsxXT09PXJbMV0mJmVbMl09PT1yWzJdJiZlWzNdPT09clszXX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuc2hhcGUscj1bZVswXSsyLGVbMV0rMl0sbj11KG5ldyBGbG9hdDMyQXJyYXkoclswXSpyWzFdKSxyKTtyZXR1cm4gZC5hc3NpZ24obi5sbygxLDEpLmhpKGVbMF0sZVsxXSksdCksZC5hc3NpZ24obi5sbygxKS5oaShlWzBdLDEpLHQuaGkoZVswXSwxKSksZC5hc3NpZ24obi5sbygxLHJbMV0tMSkuaGkoZVswXSwxKSx0LmxvKDAsZVsxXS0xKS5oaShlWzBdLDEpKSxkLmFzc2lnbihuLmxvKDAsMSkuaGkoMSxlWzFdKSx0LmhpKDEpKSxkLmFzc2lnbihuLmxvKHJbMF0tMSwxKS5oaSgxLGVbMV0pLHQubG8oZVswXS0xKSksbi5zZXQoMCwwLHQuZ2V0KDAsMCkpLG4uc2V0KDAsclsxXS0xLHQuZ2V0KDAsZVsxXS0xKSksbi5zZXQoclswXS0xLDAsdC5nZXQoZVswXS0xLDApKSxuLnNldChyWzBdLTEsclsxXS0xLHQuZ2V0KGVbMF0tMSxlWzFdLTEpKSxufWZ1bmN0aW9uIHModCl7dmFyIGU9TWF0aC5tYXgodFswXS5zaGFwZVswXSx0WzBdLnNoYXBlWzFdKTtpZihlPHYpe2Zvcih2YXIgcj12L2Usbj1bMHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qcisxKSwwfE1hdGguZmxvb3IodFswXS5zaGFwZVsxXSpyKzEpXSxpPW5bMF0qblsxXSxhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBzPW8odFthXSksbD11KG5ldyBGbG9hdDMyQXJyYXkoaSksbik7ZihsLHMsW3IsMCwwLDAsciwwLDAsMCwxXSksdFthXT1sfXJldHVybiByfXJldHVybiAxfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPWMoe2dsOnJ9KSxhPW5ldyBuKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9dmFyIGM9dCgiZ2wtc3VyZmFjZTNkIiksdT10KCJuZGFycmF5IiksZj10KCJuZGFycmF5LWhvbW9ncmFwaHkiKSxoPXQoIm5kYXJyYXktZmlsbCIpLGQ9dCgibmRhcnJheS1vcHMiKSxwPXQoInRpbnljb2xvcjIiKSxtPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSx2PTEyOCxnPW4ucHJvdG90eXBlO2cuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMuc3VyZmFjZSl7dmFyIGU9dC5pbmRleD1bTWF0aC5taW4oMHxNYXRoLnJvdW5kKHQuZGF0YS5pbmRleFswXS90aGlzLmRhdGFTY2FsZS0xKSx0aGlzLmRhdGEuelswXS5sZW5ndGgtMSksTWF0aC5taW4oMHxNYXRoLnJvdW5kKHQuZGF0YS5pbmRleFsxXS90aGlzLmRhdGFTY2FsZS0xKSx0aGlzLmRhdGEuei5sZW5ndGgtMSldLHI9WzAsMCwwXTtBcnJheS5pc0FycmF5KHRoaXMuZGF0YS54WzBdKT9yWzBdPXRoaXMuZGF0YS54W2VbMV1dW2VbMF1dOnJbMF09dGhpcy5kYXRhLnhbZVswXV0sQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEueVswXSk/clsxXT10aGlzLmRhdGEueVtlWzFdXVtlWzBdXTpyWzFdPXRoaXMuZGF0YS55W2VbMV1dLHJbMl09dGhpcy5kYXRhLnpbZVsxXV1bZVswXV0sdC50cmFjZUNvb3JkaW5hdGU9cjt2YXIgbj10aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dDt0LmRhdGFDb29yZGluYXRlPVtuLnhheGlzLmQybChyWzBdLDAsdGhpcy5kYXRhLnhjYWxlbmRhcikqdGhpcy5zY2VuZS5kYXRhU2NhbGVbMF0sbi55YXhpcy5kMmwoclsxXSwwLHRoaXMuZGF0YS55Y2FsZW5kYXIpKnRoaXMuc2NlbmUuZGF0YVNjYWxlWzFdLG4uemF4aXMuZDJsKHJbMl0sMCx0aGlzLmRhdGEuemNhbGVuZGFyKSp0aGlzLnNjZW5lLmRhdGFTY2FsZVsyXV07dmFyIGk9dGhpcy5kYXRhLnRleHQ7cmV0dXJuIGkmJmlbZVsxXV0mJnZvaWQgMCE9PWlbZVsxXV1bZVswXV0/dC50ZXh0TGFiZWw9aVtlWzFdXVtlWzBdXTp0LnRleHRMYWJlbD0iIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19LGcuc2V0Q29udG91ckxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bW10sW10sW11dLGU9ITEscj0wO3I8MzsrK3IpdGhpcy5zaG93Q29udG91cltyXSYmKGU9ITAsdFtyXT10aGlzLnNjZW5lLmNvbnRvdXJMZXZlbHNbcl0pO2UmJnRoaXMuc3VyZmFjZS51cGRhdGUoe2xldmVsczp0fSl9LGcudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5zY2VuZSxuPXIuZnVsbFNjZW5lTGF5b3V0LG89dGhpcy5zdXJmYWNlLGw9dC5vcGFjaXR5LGM9aSh0LmNvbG9yc2NhbGUsbCksZj10LnosZD10LngscD10Lnksdj1uLnhheGlzLGc9bi55YXhpcyx5PW4uemF4aXMsYj1yLmRhdGFTY2FsZSx4PWZbMF0ubGVuZ3RoLF89Zi5sZW5ndGgsdz1bdShuZXcgRmxvYXQzMkFycmF5KHgqXyksW3gsX10pLHUobmV3IEZsb2F0MzJBcnJheSh4Kl8pLFt4LF9dKSx1KG5ldyBGbG9hdDMyQXJyYXkoeCpfKSxbeCxfXSldLE09d1swXSxUPXdbMV0saz1yLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIEE9dC54Y2FsZW5kYXIsRT10LnljYWxlbmRhcixTPXQuemNhbGVuZGFyO2god1syXSxmdW5jdGlvbih0LGUpe3JldHVybiB5LmQybChmW2VdW3RdLDAsUykqYlsyXX0pLEFycmF5LmlzQXJyYXkoZFswXSk/aChNLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZDJsKGRbZV1bdF0sMCxBKSpiWzBdfSk6aChNLGZ1bmN0aW9uKHQpe3JldHVybiB2LmQybChkW3RdLDAsQSkqYlswXX0pLEFycmF5LmlzQXJyYXkocFswXSk/aChULGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcuZDJsKHBbZV1bdF0sMCxFKSpiWzFdfSk6aChULGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcuZDJsKHBbZV0sMCxFKSpiWzFdfSk7dmFyIEw9e2NvbG9ybWFwOmMsbGV2ZWxzOltbXSxbXSxbXV0sc2hvd0NvbnRvdXI6WyEwLCEwLCEwXSxzaG93U3VyZmFjZTohdC5oaWRlc3VyZmFjZSxjb250b3VyUHJvamVjdDpbWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLGNvbnRvdXJXaWR0aDpbMSwxLDFdLGNvbnRvdXJDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGNvbnRvdXJUaW50OlsxLDEsMV0sZHluYW1pY0NvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sZHluYW1pY1dpZHRoOlsxLDEsMV0sZHluYW1pY1RpbnQ6WzEsMSwxXSxvcGFjaXR5OnQub3BhY2l0eX07aWYoTC5pbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHQuc3VyZmFjZWNvbG9yKXt2YXIgQz11KG5ldyBGbG9hdDMyQXJyYXkoeCpfKSxbeCxfXSk7aChDLGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3VyZmFjZWNvbG9yW3JdW2VdfSksdy5wdXNoKEMpfWVsc2UgTC5pbnRlbnNpdHlCb3VuZHNbMF0qPWJbMl0sTC5pbnRlbnNpdHlCb3VuZHNbMV0qPWJbMl07dGhpcy5kYXRhU2NhbGU9cyh3KSx0LnN1cmZhY2Vjb2xvciYmKEwuaW50ZW5zaXR5PXcucG9wKCkpO3ZhciBJPVshMCwhMCwhMF0sRD1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFA9dC5jb250b3Vyc1tEW2VdXTtJW2VdPVAuaGlnaGxpZ2h0LEwuc2hvd0NvbnRvdXJbZV09UC5zaG93fHxQLmhpZ2hsaWdodCxMLnNob3dDb250b3VyW2VdJiYoTC5jb250b3VyUHJvamVjdFtlXT1bUC5wcm9qZWN0LngsUC5wcm9qZWN0LnksUC5wcm9qZWN0LnpdLFAuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCxMLmxldmVsc1tlXT1rW2VdLG8uaGlnaGxpZ2h0Q29sb3JbZV09TC5jb250b3VyQ29sb3JbZV09bShQLmNvbG9yKSxQLnVzZWNvbG9ybWFwP28uaGlnaGxpZ2h0VGludFtlXT1MLmNvbnRvdXJUaW50W2VdPTA6by5oaWdobGlnaHRUaW50W2VdPUwuY29udG91clRpbnRbZV09MSxMLmNvbnRvdXJXaWR0aFtlXT1QLndpZHRoKTp0aGlzLnNob3dDb250b3VyW2VdPSExLFAuaGlnaGxpZ2h0JiYoTC5keW5hbWljQ29sb3JbZV09bShQLmhpZ2hsaWdodGNvbG9yKSxMLmR5bmFtaWNXaWR0aFtlXT1QLmhpZ2hsaWdodHdpZHRoKSl9YShjKSYmKEwudmVydGV4Q29sb3I9ITApLEwuY29vcmRzPXcsby51cGRhdGUoTCksby52aXNpYmxlPXQudmlzaWJsZSxvLmVuYWJsZUR5bmFtaWM9SSxvLnNuYXBUb0RhdGE9ITAsImxpZ2h0aW5nImluIHQmJihvLmFtYmllbnRMaWdodD10LmxpZ2h0aW5nLmFtYmllbnQsby5kaWZmdXNlTGlnaHQ9dC5saWdodGluZy5kaWZmdXNlLG8uc3BlY3VsYXJMaWdodD10LmxpZ2h0aW5nLnNwZWN1bGFyLG8ucm91Z2huZXNzPXQubGlnaHRpbmcucm91Z2huZXNzLG8uZnJlc25lbD10LmxpZ2h0aW5nLmZyZXNuZWwpLCJsaWdodHBvc2l0aW9uImluIHQmJihvLmxpZ2h0UG9zaXRpb249W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSksbCYmbDwxJiYoby5zdXBwb3J0c1RyYW5zcGFyZW5jeT0hMCl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnN1cmZhY2UpLHRoaXMuc3VyZmFjZS5kaXNwb3NlKCl9LGUuZXhwb3J0cz1sfSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc1NiwiZ2wtc3VyZmFjZTNkIjoyNzIsbmRhcnJheTo0NzYsIm5kYXJyYXktZmlsbCI6NDY1LCJuZGFycmF5LWhvbW9ncmFwaHkiOjQ2OCwibmRhcnJheS1vcHMiOjQ3MCx0aW55Y29sb3IyOjU0Mn1dLDExMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZSBpbiB0JiYhKHIgaW4gdCkmJih0W3JdPXRbZV0pfXZhciBpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMscixuKX12YXIgdSxmLGg9YygieiIpO2lmKCFoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIGQ9aFswXS5sZW5ndGgscD1oLmxlbmd0aDtpZihjKCJ4IiksYygieSIpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sbCksIUFycmF5LmlzQXJyYXkoZS54KSlmb3IoZS54PVtdLHU9MDt1PGQ7Kyt1KWUueFt1XT11O2lmKGMoInRleHQiKSwhQXJyYXkuaXNBcnJheShlLnkpKWZvcihlLnk9W10sdT0wO3U8cDsrK3UpZS55W3VdPXU7WyJsaWdodGluZy5hbWJpZW50IiwibGlnaHRpbmcuZGlmZnVzZSIsImxpZ2h0aW5nLnNwZWN1bGFyIiwibGlnaHRpbmcucm91Z2huZXNzIiwibGlnaHRpbmcuZnJlc25lbCIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImhpZGVzdXJmYWNlIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7Yyh0KX0pO3ZhciBtPWMoInN1cmZhY2Vjb2xvciIpO2MoImNvbG9yc2NhbGUiKTt2YXIgdj1bIngiLCJ5IiwieiJdO2Zvcih1PTA7dTwzOysrdSl7dmFyIGc9ImNvbnRvdXJzLiIrdlt1XSx5PWMoZysiLnNob3ciKSxiPWMoZysiLmhpZ2hsaWdodCIpO2lmKHl8fGIpZm9yKGY9MDtmPDM7KytmKWMoZysiLnByb2plY3QuIit2W2ZdKTt5JiYoYyhnKyIuY29sb3IiKSxjKGcrIi53aWR0aCIpLGMoZysiLnVzZWNvbG9ybWFwIikpLGImJihjKGcrIi5oaWdobGlnaHRjb2xvciIpLGMoZysiLmhpZ2hsaWdodHdpZHRoIikpfW18fChuKHQsInptaW4iLCJjbWluIiksbih0LCJ6bWF4IiwiY21heCIpLG4odCwiemF1dG8iLCJjYXV0byIpKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyMCwiLi4vLi4vbGliIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NTMsIi4vYXR0cmlidXRlcyI6MTExM31dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzdXJmYWNlIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxuLmNhdGVnb3JpZXM9WyJnbDNkIiwiMmRNYXAiLCJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODE4LCIuL2F0dHJpYnV0ZXMiOjExMTMsIi4vY2FsYyI6MTExNCwiLi9jb2xvcmJhciI6MTExNSwiLi9jb252ZXJ0IjoxMTE2LCIuL2RlZmF1bHRzIjoxMTE3fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWEoe2RvbWFpbjp7eDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19LHk6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfX0sY29sdW1ud2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saGVhZGVyOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjI4fSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyMH0sYWxpZ246aSh7fSxuLmFsaWduLHthcnJheU9rOiEwfSksbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJncmV5In19LGZpbGw6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJ3aGl0ZSJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX19LCJjYWxjIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1OTQsIi4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzYzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgwM31dLDExMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxpPXQoIi4vcGxvdCIpO3IubmFtZT0idGFibGUiLHIuYXR0cj0idHlwZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ2V0U3VicGxvdENhbGNEYXRhKHQuY2FsY2RhdGEsInRhYmxlIiwidGFibGUiKTtlLmxlbmd0aCYmaSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJ0YWJsZSIpLGE9ZS5faGFzJiZlLl9oYXMoInRhYmxlIik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnRhYmxlIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MzgsIi4vcGxvdCI6MTEyN31dLDExMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjczMn1dLDExMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxjZWxsUGFkOjgsbGF0ZXhDaGVjazovXlwkLipcJCQvLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsd3JhcFNwYWNlcjoiICIsbGluZUJyZWFrZXI6Ijxicj4iLHVwbGlmdDo1LGdvbGRlblJhdGlvOjEuNjE4LGNvbHVtblRpdGxlT2Zmc2V0OjI4LGNvbHVtbkV4dGVudE9mZnNldDoxMCx0cmFuc2l0aW9uRWFzZToiY3ViaWMtb3V0Iix0cmFuc2l0aW9uRHVyYXRpb246MTAwLHJlbGVhc2VUcmFuc2l0aW9uRWFzZToiY3ViaWMtb3V0IixyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxzY3JvbGxiYXJXaWR0aDo4LHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJPZmZzZXQ6NSxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuY2FsY2RhdGEuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci54SW5kZXg8dC54SW5kZXg/ZStyLmNvbHVtbldpZHRoOmV9LDApfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBsKHt9LHRbcl0se2F1eGlsaWFyeUJsb2NrczplfSl9KX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByLG49e30saT0wLGE9MCxzPW8oKSxsPTAsYz0wLHU9MDt1PHQubGVuZ3RoO3UrKylyPXRbdV0scy5yb3dzLnB1c2goe3Jvd0luZGV4OnUscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHx1PT09dC5sZW5ndGgtMSkmJihuW2ldPXMscy5rZXk9YysrLHMuZmlyc3RSb3dJbmRleD1sLHMubGFzdFJvd0luZGV4PXUscz1vKCksaSs9YSxsPXUrMSxhPTApO3JldHVybiBufWZ1bmN0aW9uIG8oKXtyZXR1cm57Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119fXZhciBzPXQoIi4vY29uc3RhbnRzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmhlYWRlci52YWx1ZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfSksbz1lLmNlbGxzLnZhbHVlcyxjPWUuZG9tYWluLHU9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKGMueFsxXS1jLnhbMF0pKSxmPU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKihjLnlbMV0tYy55WzBdKSksaD1yLmxlbmd0aD9yWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KTpbXSxkPW8ubGVuZ3RoP29bMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSk6W10scD1oLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDApLG09Zi1wLHY9bStzLnVwbGlmdCxnPWEoZCx2KSx5PWEoaCxwKSxiPWkoeSxbXSkseD1pKGcsYiksXz17fSx3PWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlcixNPXIubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTppc0Zpbml0ZShlLmNvbHVtbndpZHRoKSYmbnVsbCE9PWUuY29sdW1ud2lkdGg/ZS5jb2x1bW53aWR0aDoxfSksVD1NLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDApO009TS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvVCp1fSk7dmFyIGs9e2tleTplLmluZGV4LHRyYW5zbGF0ZVg6Yy54WzBdKnQuX2Z1bGxMYXlvdXQuX3NpemUudyx0cmFuc2xhdGVZOnQuX2Z1bGxMYXlvdXQuX3NpemUuaCooMS1jLnlbMV0pLHNpemU6dC5fZnVsbExheW91dC5fc2l6ZSx3aWR0aDp1LGhlaWdodDpmLGNvbHVtbk9yZGVyOncsZ3JvdXBIZWlnaHQ6Zixyb3dCbG9ja3M6eCxoZWFkZXJSb3dCbG9ja3M6YixzY3JvbGxZOjAsY2VsbHM6ZS5jZWxscyxoZWFkZXJDZWxsczpsKHt9LGUuaGVhZGVyLHt2YWx1ZXM6cn0pLGdkQ29sdW1uczpyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6ci5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1fW3RdO3JldHVybiBfW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK19bdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6d1tlXSx4U2NhbGU6bix4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6TVtlXX19KX07cmV0dXJuIGsuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9ayx0Lng9bih0KX0pLGt9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcyNCwiLi9jb25zdGFudHMiOjExMjJ9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5yb3dCbG9ja3NbdC5wYWdlXSxyPWU/ZS5yb3dzWzBdLnJvd0luZGV4OjA7cmV0dXJuW3IsZT9yK2Uucm93cy5sZW5ndGg6MF19dmFyIGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5zcGxpdFRvUGFuZWxzPWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdLHI9aSh7fSx0LHtrZXk6ImhlYWRlciIsdHlwZToiaGVhZGVyIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTppKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltpKHt9LHQse2tleToiY2VsbHMxIix0eXBlOiJjZWxscyIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxpKHt9LHQse2tleToiY2VsbHMyIix0eXBlOiJjZWxscyIscGFnZToxLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxyXX0sci5zcGxpdFRvQ2VsbHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gdC52YWx1ZXMuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcyNH1dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10LmNvbHVtbm9yZGVyfHxbXSxuPXQuaGVhZGVyLnZhbHVlcy5sZW5ndGgsaT1yLnNsaWNlKDAsbiksYT1pLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxvPWkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBhLmluZGV4T2YodCl9KSxzPW8ubGVuZ3RoO3M8bjtzKyspby5wdXNoKHMpO2UoImNvbHVtbm9yZGVyIixvKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxhLHIsbil9cygiZG9tYWluLngiKSxzKCJkb21haW4ueSIpLHMoImNvbHVtbndpZHRoIikscygiaGVhZGVyLnZhbHVlcyIpLHMoImhlYWRlci5mb3JtYXQiKSxzKCJoZWFkZXIuYWxpZ24iKSxzKCJoZWFkZXIucHJlZml4IikscygiaGVhZGVyLnN1ZmZpeCIpLHMoImhlYWRlci5oZWlnaHQiKSxzKCJoZWFkZXIubGluZS53aWR0aCIpLHMoImhlYWRlci5saW5lLmNvbG9yIikscygiaGVhZGVyLmZpbGwuY29sb3IiKSxpLmNvZXJjZUZvbnQocywiaGVhZGVyLmZvbnQiLGkuZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxuKGUscykscygiY2VsbHMudmFsdWVzIikscygiY2VsbHMuZm9ybWF0IikscygiY2VsbHMuYWxpZ24iKSxzKCJjZWxscy5wcmVmaXgiKSxzKCJjZWxscy5zdWZmaXgiKSxzKCJjZWxscy5oZWlnaHQiKSxzKCJjZWxscy5saW5lLndpZHRoIikscygiY2VsbHMubGluZS5jb2xvciIpLHMoImNlbGxzLmZpbGwuY29sb3IiKSxpLmNvZXJjZUZvbnQocywiY2VsbHMuZm9udCIsaS5leHRlbmRGbGF0KHt9LG8uZm9udCkpfX0seyIuLi8uLi9saWIiOjczNSwiLi9hdHRyaWJ1dGVzIjoxMTE5fV0sMTEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InRhYmxlIixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6MTExOSwiLi9iYXNlX3Bsb3QiOjExMjAsIi4vY2FsYyI6MTEyMSwiLi9kZWZhdWx0cyI6MTEyNSwiLi9wbG90IjoxMTI3fV0sMTEyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX3Njcm9sbEFyZWFCb3R0b21DbGlwXyIrZS5rZXl9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoXyIrZS5jYWxjZGF0YS5rZXkrIl8iK2Uuc3BlY0luZGV4fWZ1bmN0aW9uIGEodCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pfWZ1bmN0aW9uIG8odCxlLHIpe2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5yb3dCbG9ja3M7cmV0dXJuIFAoZSxlLmxlbmd0aC0xKSsoZS5sZW5ndGg/eihlW2UubGVuZ3RoLTFdLDEvMCk6MSl9dmFyIGk9dC5zZWxlY3RBbGwoIi4iK2ouY24uc2Nyb2xsYmFyS2l0KS5kYXRhKEIucmVwZWF0LEIua2V5RnVuKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChqLmNuLnNjcm9sbGJhcktpdCwhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbGJhclN0YXRlO2UudG90YWxIZWlnaHQ9bih0KSxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0PXQuZ3JvdXBIZWlnaHQtVCh0KSxlLmN1cnJlbnRseVZpc2libGVIZWlnaHQ9TWF0aC5taW4oZS50b3RhbEhlaWdodCxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnJhdGlvPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC9lLnRvdGFsSGVpZ2h0LGUuYmFyTGVuZ3RoPU1hdGgubWF4KGUucmF0aW8qZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LGouZ29sZGVuUmF0aW8qai5zY3JvbGxiYXJXaWR0aCksZS5iYXJXaWdnbGVSb29tPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC1lLmJhckxlbmd0aCxlLndpZ2dsZVJvb209TWF0aC5tYXgoMCxlLnRvdGFsSGVpZ2h0LWUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUudG9wWT0wPT09ZS5iYXJXaWdnbGVSb29tPzA6dC5zY3JvbGxZL2Uud2lnZ2xlUm9vbSplLmJhcldpZ2dsZVJvb20sZS5ib3R0b21ZPWUudG9wWStlLmJhckxlbmd0aCxlLmRyYWdNdWx0aXBsaWVyPWUud2lnZ2xlUm9vbS9lLmJhcldpZ2dsZVJvb219KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodC53aWR0aCtqLnNjcm9sbGJhcldpZHRoLzIrai5zY3JvbGxiYXJPZmZzZXQpKyIgIitUKHQpKyIpIn0pO3ZhciBhPWkuc2VsZWN0QWxsKCIuIitqLmNuLnNjcm9sbGJhcikuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoai5jbi5zY3JvbGxiYXIsITApO3ZhciBvPWEuc2VsZWN0QWxsKCIuIitqLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7by5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoai5jbi5zY3JvbGxiYXJTbGlkZXIsITApLG8uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAgIisodC5zY3JvbGxiYXJTdGF0ZS50b3BZfHwwKSsiKSJ9KTt2YXIgcz1vLnNlbGVjdEFsbCgiLiIrai5jbi5zY3JvbGxiYXJHbHlwaCkuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7cy5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoai5jbi5zY3JvbGxiYXJHbHlwaCwhMCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLGouc2Nyb2xsYmFyV2lkdGgpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwicm91bmQiKS5hdHRyKCJ5MSIsai5zY3JvbGxiYXJXaWR0aC8yKSxzLmF0dHIoInkyIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5iYXJMZW5ndGgtai5zY3JvbGxiYXJXaWR0aC8yfSkuYXR0cigic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbkRyYWdJblByb2dyZXNzfHwhdC5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tfHxyPzA6LjR9KSxzLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxzLnRyYW5zaXRpb24oKS5kZWxheShqLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24oai5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKTt2YXIgbD1hLnNlbGVjdEFsbCgiLiIrai5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSkuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoai5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjAxKS5hdHRyKCJzdHJva2Utd2lkdGgiLGouc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKS5hdHRyKCJ5MSIsMCkub24oIm1vdXNlZG93biIsZnVuY3Rpb24ocil7dmFyIG49Ti5ldmVudC55LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXIuc2Nyb2xsYmFyU3RhdGUsbz1uLWkudG9wLHM9Ti5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsYS5zY3JvbGxhYmxlQXJlYUhlaWdodF0pLnJhbmdlKFswLGEudG90YWxIZWlnaHRdKS5jbGFtcCghMCk7YS50b3BZPD1vJiZvPD1hLmJvdHRvbVl8fEUoZSx0LG51bGwscyhvLWEuYmFyTGVuZ3RoLzIpKShyKX0pLmNhbGwoTi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiBOLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzcz0hMCx0fSkub24oImRyYWciLEUoZSx0KSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7fSkpLGwuYXR0cigieTIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGFibGVBcmVhSGVpZ2h0fSl9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1sKHIpLGE9YyhpKTtkKGEpLG0odShhKSk7dmFyIG89aChhKSxzPWYobyk7cChzKSx2KHMsZSxuLHQpLEQoYSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrai5jbi5jb2x1bW5DZWxscykuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGouY24uY29sdW1uQ2VsbHMsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9ZnVuY3Rpb24gYyh0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrai5jbi5jb2x1bW5DZWxsKS5kYXRhKFkuc3BsaXRUb0NlbGxzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGouY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIitqLmNuLmNlbGxSZWN0KS5kYXRhKEIucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKGouY24uY2VsbFJlY3QsITApLGV9ZnVuY3Rpb24gZih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrai5jbi5jZWxsVGV4dCkuZGF0YShCLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChqLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbigpe3JldHVybiJhdXRvIn0pLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Ti5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLGV9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrai5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShCLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChqLmNuLmNlbGxUZXh0SG9sZGVyLCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksZX1mdW5jdGlvbiBkKHQpe3QuZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOngoci5zaXplLG4sZSksY29sb3I6eChyLmNvbG9yLG4sZSksZmFtaWx5Ongoci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj14KHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD14KHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSl9ZnVuY3Rpb24gcCh0KXt0LmVhY2goZnVuY3Rpb24odCl7VS5mb250KE4uc2VsZWN0KHRoaXMpLHQuZm9udCl9KX1mdW5jdGlvbiBtKHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pLmF0dHIoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2VsbEJvcmRlcldpZHRofSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1OLnNlbGVjdCh0aGlzKTtYLnN0cm9rZShlLHgodC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLFguZmlsbChlLHgodC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSl9ZnVuY3Rpb24gdih0LGUscixuKXt0LnRleHQoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsbj10LnZhbHVlLGk9InN0cmluZyI9PXR5cGVvZiBuLGE9aSYmbi5tYXRjaCgvPGJyPi9pKSxvPSFpfHxhO3QubWF5SGF2ZU1hcmt1cD1pJiZuLm1hdGNoKC9bPCY+XS8pO3ZhciBzPWcobik7dC5sYXRleD1zO3ZhciBsLGM9cz8iIjp4KHQuY2FsY2RhdGEuY2VsbHMucHJlZml4LGUscil8fCIiLHU9cz8iIjp4KHQuY2FsY2RhdGEuY2VsbHMuc3VmZml4LGUscil8fCIiLGY9cz9udWxsOngodC5jYWxjZGF0YS5jZWxscy5mb3JtYXQsZSxyKXx8bnVsbCxoPWMrKGY/Ti5mb3JtYXQoZikodC52YWx1ZSk6dC52YWx1ZSkrdTt0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFvJiYhcyYmKGw9eShoKSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9YXx8c3x8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09bD95KGgpOmwpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4O3ZhciBkO2lmKHQud3JhcHBpbmdOZWVkZWQpe3ZhciBwPSIgIj09PWoud3JhcFNwbGl0Q2hhcmFjdGVyP2gucmVwbGFjZSgvPGEgaHJlZj0vZ2ksIjxhX2hyZWY9Iik6aCxtPXAuc3BsaXQoai53cmFwU3BsaXRDaGFyYWN0ZXIpLHY9IiAiPT09ai53cmFwU3BsaXRDaGFyYWN0ZXI/bS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvPGFfaHJlZj0vZ2ksIjxhIGhyZWY9Iil9KTptO3QuZnJhZ21lbnRzPXYubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpqLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGQ9di5qb2luKGoubGluZUJyZWFrZXIpK2oubGluZUJyZWFrZXIrai53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGQ9aDtyZXR1cm4gZH0pLmF0dHIoImR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOiIwLjc1ZW0ifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgaT10aGlzLGE9Ti5zZWxlY3QoaSksbz10LndyYXBwaW5nTmVlZGVkP0w6Qzt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP1YuY29udmVydFRvVHNwYW5zKGEsbixvKHIsaSxlLG4sdCkpOk4uc2VsZWN0KGkucGFyZW50Tm9kZSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrSSh0KSsiICIrai5jZWxsUGFkKyIpIn0pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbih0KXtyZXR1cm57bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn1bdC5hbGlnbl19KX0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGoubGF0ZXhDaGVjayl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5pbmRleE9mKGoud3JhcFNwbGl0Q2hhcmFjdGVyKSE9PS0xfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfWZ1bmN0aW9uIHgodCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIF8odCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uoai5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKGoucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIgIityKyIpIil9ZnVuY3Rpb24gdyh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIE0odCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gVCh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQreihlLDEvMCl9LDApfWZ1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sO3ZhciB1PWkrbCxmPWUsaD1mK3I7Zjx1JiZoPmkmJm4ucHVzaChhKSxpKz1sfXJldHVybiBufWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWEoZSlbMF07aWYodm9pZCAwIT09bil7dmFyIGk9bi5yb3dCbG9ja3Mscz1uLmNhbGNkYXRhLGw9UChpLGkubGVuZ3RoKSxjPW4uY2FsY2RhdGEuZ3JvdXBIZWlnaHQtVChuKSx1PXMuc2Nyb2xsWT1NYXRoLm1heCgwLE1hdGgubWluKGwtYyxzLnNjcm9sbFkpKSxmPWsoaSx1LGMpOzE9PT1mLmxlbmd0aCYmKGZbMF09PT1pLmxlbmd0aC0xP2YudW5zaGlmdChmWzBdLTEpOmYucHVzaChmWzBdKzEpKSxmWzBdJTImJmYucmV2ZXJzZSgpLGUuZWFjaChmdW5jdGlvbih0LGUpe3QucGFnZT1mW2VdLHQuc2Nyb2xsWT11fSksZS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCAiKyhQKHQucm93QmxvY2tzLHQucGFnZSktdC5zY3JvbGxZKSsiKSJ9KSx0JiYoUyh0LHIsZSxmLG4ucHJldlBhZ2VzLG4sMCksUyh0LHIsZSxmLG4ucHJldlBhZ2VzLG4sMSksbyhyLHQpKX19ZnVuY3Rpb24gRSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGE9aS5jYWxjZGF0YT9pLmNhbGNkYXRhOmksbz1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gYS5rZXk9PT10LmtleX0pLHM9cnx8YS5zY3JvbGxiYXJTdGF0ZS5kcmFnTXVsdGlwbGllcjthLnNjcm9sbFk9dm9pZCAwPT09bj9hLnNjcm9sbFkrcypOLmV2ZW50LmR5Om47dmFyIGw9by5zZWxlY3RBbGwoIi4iK2ouY24ueUNvbHVtbikuc2VsZWN0QWxsKCIuIitqLmNuLmNvbHVtbkJsb2NrKS5maWx0ZXIodyk7QSh0LGwsbyl9fWZ1bmN0aW9uIFModCxlLHIsbixpLGEsbyl7bltvXSE9PWlbb10mJihjbGVhclRpbWVvdXQoYS5jdXJyZW50UmVwYWludFtvXSksYS5jdXJyZW50UmVwYWludFtvXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9ci5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PW8mJm5bZV0hPT1pW2VdfSk7cyh0LGUsYSxyKSxpW29dPW5bb119KSl9ZnVuY3Rpb24gTCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Ti5zZWxlY3QoZS5wYXJlbnROb2RlKTtuLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7bi5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgsbz1lLnNsaWNlKDAsLTEpLHM9W10sbD0wLGM9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipqLmNlbGxQYWQ7Zm9yKHQudmFsdWU9IiI7by5sZW5ndGg7KXI9by5zaGlmdCgpLGk9ci53aWR0aCthLGwraT5jJiYodC52YWx1ZSs9cy5qb2luKGoud3JhcFNwYWNlcikrai5saW5lQnJlYWtlcixzPVtdLGw9MCkscy5wdXNoKHIudGV4dCksbCs9aTtsJiYodC52YWx1ZSs9cy5qb2luKGoud3JhcFNwYWNlcikpLHQud3JhcHBlZD0hMH0pLG4uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikucmVtb3ZlKCksdihuLnNlbGVjdCgiLiIrai5jbi5jZWxsVGV4dCkscix0KSxOLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuY2FsbChEKX19ZnVuY3Rpb24gQyh0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbigpe2lmKCFpLnNldHRsZWRZKXt2YXIgYT1OLnNlbGVjdChlLnBhcmVudE5vZGUpLHM9UihpKSxsPWkua2V5LXMuZmlyc3RSb3dJbmRleCxjPXMucm93c1tsXS5yb3dIZWlnaHQsdT1pLmNlbGxIZWlnaHRNYXlJbmNyZWFzZT9lLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KzIqai5jZWxsUGFkOmMsZj1NYXRoLm1heCh1LGMpO2Ytcy5yb3dzW2xdLnJvd0hlaWdodCYmKHMucm93c1tsXS5yb3dIZWlnaHQ9Zix0LnNlbGVjdEFsbCgiLiIrai5jbi5jb2x1bW5DZWxsKS5jYWxsKEQpLEEobnVsbCx0LmZpbHRlcih3KSwwKSxvKHIsbiwhMCkpLGEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LnBhcmVudE5vZGUscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49Ti5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK2ouY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxvPW4udG9wLXIudG9wKyhhP2EubWF0cml4LmY6ai5jZWxsUGFkKTtyZXR1cm4idHJhbnNsYXRlKCIrSShpLE4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0KCIuIitqLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKyIgIitvKyIpIn0pLGkuc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiBJKHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIGouY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLWouY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBqLmNlbGxQYWR9fWZ1bmN0aW9uIEQodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCt6KGUsMS8wKX0sMCk7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHooUih0KSx0LmtleSkrZSkrIikifSkuc2VsZWN0QWxsKCIuIitqLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiBGKFIodCksdC5rZXkpLnJvd0hlaWdodH0pfWZ1bmN0aW9uIFAodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1PKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIHoodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIHQucm93c1tlLXQuZmlyc3RSb3dJbmRleF19dmFyIGo9dCgiLi9jb25zdGFudHMiKSxOPXQoImQzIiksQj10KCIuLi8uLi9saWIvZ3VwIiksVT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxWPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLEg9dCgiLi4vLi4vbGliIikucmFpc2VUb1RvcCxxPXQoIi4uLy4uL2xpYiIpLmNhbmNlbFRyYW5zaXRpb24sRz10KCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIiksWT10KCIuL2RhdGFfc3BsaXRfaGVscGVycyIpLFg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuX3BhcGVyLnNlbGVjdEFsbCgiLiIrai5jbi50YWJsZSkuZGF0YShlLm1hcChmdW5jdGlvbihlKXt2YXIgcj1CLnVud3JhcChlKSxuPXIudHJhY2U7cmV0dXJuIEcodCxuKX0pLEIua2V5RnVuKTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChqLmNuLnRhYmxlLCEwKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCt0LnNpemUudCt0LnNpemUuYn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIn0pO3ZhciBsPXIuc2VsZWN0QWxsKCIuIitqLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoQi5yZXBlYXQsQi5rZXlGdW4pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGouY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe2wuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pLmNhbGwobyx0KX0pLm9uKCJtb3VzZXdoZWVsIixmdW5jdGlvbihlKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nfHwoZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMCxOLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLE4uZXZlbnQucHJldmVudERlZmF1bHQoKSxFKHQsbCxudWxsLGUuc2Nyb2xsWStOLmV2ZW50LmRlbHRhWSkoZSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMSl9KS5jYWxsKG8sdCwhMCksbC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnNpemUubCsiICIrdC5zaXplLnQrIikifSkKO3ZhciBjPWwuc2VsZWN0QWxsKCIuIitqLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoQi5yZXBlYXQsQi5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKGouY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxjLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSksbC5lYWNoKGZ1bmN0aW9uKGUpe1Uuc2V0Q2xpcFVybChOLnNlbGVjdCh0aGlzKSxuKHQsZSkpfSk7dmFyIHU9bC5zZWxlY3RBbGwoIi4iK2ouY24ueUNvbHVtbikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSxCLmtleUZ1bik7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoai5jbi55Q29sdW1uLCEwKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiIDApIn0pLmNhbGwoTi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKGUpe3JldHVybiBfKE4uc2VsZWN0KHRoaXMpLGUsLWoudXBsaWZ0KSxIKHRoaXMpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITAsbyhsLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmtleX0pLHQpLGV9KS5vbigiZHJhZyIsZnVuY3Rpb24odCl7dmFyIGU9Ti5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlKXtyZXR1cm4odD09PWU/Ti5ldmVudC54OmUueCkrZS5jb2x1bW5XaWR0aC8yfTt0Lng9TWF0aC5tYXgoLWoub3ZlcmRyYWcsTWF0aC5taW4odC5jYWxjZGF0YS53aWR0aCtqLm92ZXJkcmFnLXQuY29sdW1uV2lkdGgsTi5ldmVudC54KSksYSh1KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5jYWxjZGF0YS5rZXl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCktcihlKX0pLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZSl9KSx1LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KS50cmFuc2l0aW9uKCkuZWFzZShqLnRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihqLnRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIgMCkifSksZS5jYWxsKHEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiIC0iK2oudXBsaWZ0KyIgKSIpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKGUpe3ZhciByPU4uc2VsZWN0KHRoaXMpLG49ZS5jYWxjZGF0YTtlLng9ZS54U2NhbGUoZSksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMSxfKHIsZSwwKSxiKHQsbixuLmNvbHVtbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhJbmRleH0pKX0pKSx1LmVhY2goZnVuY3Rpb24oZSl7VS5zZXRDbGlwVXJsKE4uc2VsZWN0KHRoaXMpLGkodCxlKSl9KTt2YXIgZj11LnNlbGVjdEFsbCgiLiIrai5jbi5jb2x1bW5CbG9jaykuZGF0YShZLnNwbGl0VG9QYW5lbHMsQi5rZXlGdW4pO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGouY24uY29sdW1uQmxvY2ssITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSxmLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/ImV3LXJlc2l6ZSI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tPyJucy1yZXNpemUiOiJkZWZhdWx0In0pO3ZhciBoPWYuZmlsdGVyKE0pLGQ9Zi5maWx0ZXIodyk7ZC5jYWxsKE4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gTi5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkub24oImRyYWciLEUodCxsLC0xKSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7fSkpLHModCxsLGgsZikscyh0LGwsZCxmKTt2YXIgcD1sLnNlbGVjdEFsbCgiLiIrai5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7cC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKGouY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIixmdW5jdGlvbihlKXtyZXR1cm4gbih0LGUpfSk7dmFyIG09cC5zZWxlY3RBbGwoIi4iK2ouY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKEIucmVwZWF0LEIua2V5RnVuKTttLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChqLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cigieCIsLWoub3ZlcmRyYWcpLmF0dHIoInkiLC1qLnVwbGlmdCkuYXR0cigiZmlsbCIsIm5vbmUiKSxtLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKmoub3ZlcmRyYWd9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtqLnVwbGlmdH0pLHUuc2VsZWN0QWxsKCIuIitqLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKEIucmVwZWF0LEIua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoai5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIHY9dS5zZWxlY3RBbGwoIi4iK2ouY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7di5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKGouY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksdi5hdHRyKCJpZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGkodCxlKX0pO3ZhciBnPXYuc2VsZWN0QWxsKCIuIitqLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShCLnJlcGVhdCxCLmtleUZ1bik7Zy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoai5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QsITApLmF0dHIoImZpbGwiLCJub25lIiksZy5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGNkYXRhLmhlaWdodCtqLnVwbGlmdH0pLEEobnVsbCxkLGwpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LCIuLi8uLi9saWIiOjczNSwiLi4vLi4vbGliL2d1cCI6NzMyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc1NywiLi9jb25zdGFudHMiOjExMjIsIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiOjExMjMsIi4vZGF0YV9zcGxpdF9oZWxwZXJzIjoxMTI0LGQzOjEyMX1dLDExMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6bi5uYW1lLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSxtYXJrZXI6bi5tYXJrZXIsdGV4dDpuLnRleHQsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToicGxvdCJ9LGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MjQsIi4uL2JveC9hdHRyaWJ1dGVzIjo4NzZ9XSwxMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQubGVuZ3RoLC0uMil9ZnVuY3Rpb24gaSh0LGUscixuKXtmdW5jdGlvbiBpKG4pe3ZhciBpPWxbbl0sYT1yLmQyYyhpLDAsdFtlLnZhbExldHRlcisiY2FsZW5kYXIiXSk7cmV0dXJuIGE9PT1jP2Zbbl06YX12YXIgYSxzPXQuc3Bhbm1vZGUsbD10LnNwYW58fFtdLHU9W2UubWluLGUubWF4XSxmPVtlLm1pbi0yKm4sZS5tYXgrMipuXTthPSJzb2Z0Ij09PXM/ZjoiaGFyZCI9PT1zP3U6W2koMCksaSgxKV07dmFyIGg9e3R5cGU6ImxpbmVhciIscmFuZ2U6YX07cmV0dXJuIG8uc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL2JveC9jYWxjIiksbD10KCIuL2hlbHBlcnMiKSxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cyh0LGUpO2lmKHJbMF0udC5lbXB0eSlyZXR1cm4gcjt2YXIgYz10Ll9mdWxsTGF5b3V0LHU9by5nZXRGcm9tSWQodCxlWyJoIj09PWUub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSksZj1jLl92aW9saW5TY2FsZUdyb3VwU3RhdHMsaD1lLnNjYWxlZ3JvdXAsZD1mW2hdO2R8fChkPWZbaF09e21heFdpZHRoOjAsbWF4Q291bnQ6MH0pO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgbT1yW3BdLHY9bS5wdHMubWFwKGwuZXh0cmFjdFZhbCksZz12Lmxlbmd0aCx5PWEuc3RkZXYodixnLTEsbS5tZWFuKSxiPW4odix5LG0ucTMtbS5xMSkseD1tLmJhbmR3aWR0aD1lLmJhbmR3aWR0aHx8YixfPW0uc3Bhbj1pKGUsbSx1LHgpLHc9X1sxXS1fWzBdLE09TWF0aC5jZWlsKHcvKE1hdGgubWluKGIseCkvMykpLFQ9dy9NO2lmKCFpc0Zpbml0ZShUKXx8IWlzRmluaXRlKE0pKXJldHVybiBhLmVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbXB1dGluZyB0aGUgdmlvbGluIHNwYW4iKSxyWzBdLnQuZW1wdHk9ITAscjt2YXIgaz1sLm1ha2VLREUobSxlLHYpO20uZGVuc2l0eT1uZXcgQXJyYXkoTSk7Zm9yKHZhciBBPTAsRT1fWzBdO0U8X1sxXStULzI7QSsrLEUrPVQpe3ZhciBTPWsoRSk7ZC5tYXhXaWR0aD1NYXRoLm1heChkLm1heFdpZHRoLFMpLG0uZGVuc2l0eVtBXT17djpTLHQ6RX19by5leHBhbmQodSxfLHtwYWRkZWQ6ITB9KSxkLm1heENvdW50PU1hdGgubWF4KGQubWF4Q291bnQsdi5sZW5ndGgpfXJldHVybiByfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9ib3gvY2FsYyI6ODc3LCIuL2hlbHBlcnMiOjExMzF9XSwxMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSxlLnZpc2libGUhPT0hMSl7bCgiYmFuZHdpZHRoIiksbCgic2NhbGVncm91cCIsZS5uYW1lKSxsKCJzY2FsZW1vZGUiKSxsKCJzaWRlIik7dmFyIHUsZj1sKCJzcGFuIik7QXJyYXkuaXNBcnJheShmKSYmKHU9Im1hbnVhbCIpLGwoInNwYW5tb2RlIix1KTt2YXIgaD1sKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8ciksZD1sKCJsaW5lLndpZHRoIikscD1sKCJmaWxsY29sb3IiLGkuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTthLmhhbmRsZVBvaW50c0RlZmF1bHRzKHQsZSxsLHtwcmVmaXg6IiJ9KTt2YXIgbT1jKCJib3gud2lkdGgiKSx2PWMoImJveC5maWxsY29sb3IiLHApLGc9YygiYm94LmxpbmUuY29sb3IiLGgpLHk9YygiYm94LmxpbmUud2lkdGgiLGQpO2woImJveC52aXNpYmxlIixCb29sZWFuKG18fHZ8fGd8fHkpKXx8ZGVsZXRlIGUuYm94O3ZhciBiPWMoIm1lYW5saW5lLmNvbG9yIixoKSx4PWMoIm1lYW5saW5lLndpZHRoIixkKTtsKCJtZWFubGluZS52aXNpYmxlIixCb29sZWFuKGJ8fHgpKXx8ZGVsZXRlIGUubWVhbmxpbmV9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2xpYiI6NzM1LCIuLi9ib3gvZGVmYXVsdHMiOjg3OCwiLi9hdHRyaWJ1dGVzIjoxMTI4fV0sMTEzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXtnYXVzc2lhbjpmdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdCp0KX19O3IubWFrZUtERT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGgsYT1pLmdhdXNzaWFuLG89dC5iYW5kd2lkdGgscz0xLyhuKm8pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPTA7aTxuO2krKyllKz1hKCh0LXJbaV0pL28pO3JldHVybiBzKmV9fSxyLmdldFBvc2l0aW9uT25LZGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhOyJoIj09PWUub3JpZW50YXRpb24/KGk9InkiLGE9IngiKTooaT0ieCIsYT0ieSIpO3ZhciBvPW4uZmluZFBvaW50T25QYXRoKHQucGF0aCxyLGEse3BhdGhMZW5ndGg6dC5wYXRoTGVuZ3RofSkscz10LnBvc0NlbnRlclB4LGw9b1tpXTtyZXR1cm5bbCwiYm90aCI9PT1lLnNpZGU/MipzLWw6c119LHIuZ2V0S2RlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQucHRzLm1hcChyLmV4dHJhY3RWYWwpO3JldHVybiByLm1ha2VLREUodCxlLGkpKG4pL3QucG9zRGVuc2l0eVNjYWxlfSxyLmV4dHJhY3RWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQudn19LHsiLi4vLi4vbGliIjo3MzV9XSwxMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9ob3ZlciIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGMsdSxmPXQuY2QsaD1mWzBdLnRyYWNlLGQ9aC5ob3Zlcm9uLHA9ZC5pbmRleE9mKCJ2aW9saW5zIikhPT0tMSxtPWQuaW5kZXhPZigia2RlIikhPT0tMSx2PVtdO2lmKHB8fG0pe3ZhciBnPWEuaG92ZXJPbkJveGVzKHQsZSxyLHMpO2lmKHAmJih2PXYuY29uY2F0KGcpKSxtJiZnLmxlbmd0aD4wKXt2YXIgeSxiLHgsXyx3LE09dC54YSxUPXQueWE7ImgiPT09aC5vcmllbnRhdGlvbj8odz1lLHk9InkiLHg9VCxiPSJ4IixfPU0pOih3PXIseT0ieCIseD1NLGI9InkiLF89VCk7dmFyIGs9Zlt0LmluZGV4XTtpZih3Pj1rLnNwYW5bMF0mJnc8PWsuc3BhblsxXSl7dmFyIEE9bi5leHRlbmRGbGF0KHt9LHQpLEU9Xy5jMnAodywhMCksUz1vLmdldEtkZVZhbHVlKGssaCx3KSxMPW8uZ2V0UG9zaXRpb25PbktkZVBhdGgoayxoLEUpLEM9eC5fb2Zmc2V0LEk9eC5fbGVuZ3RoO0FbeSsiMCJdPUxbMF0sQVt5KyIxIl09TFsxXSxBW2IrIjAiXT1BW2IrIjEiXT1FLEFbYisiTGFiZWwiXT1iKyI6ICIraS5ob3ZlckxhYmVsVGV4dChfLHcpKyIsIGtkZTogIitTLnRvRml4ZWQoMyksdi5wdXNoKEEpLHU9e3N0cm9rZTp0LmNvbG9yfSx1W3krIjEiXT1uLmNvbnN0cmFpbihDK0xbMF0sQyxDK0kpLHVbeSsiMiJdPW4uY29uc3RyYWluKEMrTFsxXSxDLEMrSSksdVtiKyIxIl09dVtiKyIyIl09Xy5fb2Zmc2V0K0V9fX1kLmluZGV4T2YoInBvaW50cyIpIT09LTEmJihjPWEuaG92ZXJPblBvaW50cyh0LGUscikpO3ZhciBEPWwuc2VsZWN0QWxsKCIudmlvbGlubGluZS0iK2gudWlkKS5kYXRhKHU/WzBdOltdKTtyZXR1cm4gRC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoInZpb2xpbmxpbmUtIitoLnVpZCwhMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLEQuZXhpdCgpLnJlbW92ZSgpLEQuYXR0cih1KSwiY2xvc2VzdCI9PT1zP2M/W2NdOnY6Yz8odi5wdXNoKGMpLHYpOnZ9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9ib3gvaG92ZXIiOjg3OSwiLi9oZWxwZXJzIjoxMTMxfV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxzZXRQb3NpdGlvbnM6dCgiLi9zZXRfcG9zaXRpb25zIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9ib3gvc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InZpb2xpbiIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3ODksIi4uL2JveC9zZWxlY3QiOjg4NCwiLi9hdHRyaWJ1dGVzIjoxMTI4LCIuL2NhbGMiOjExMjksIi4vZGVmYXVsdHMiOjExMzAsIi4vaG92ZXIiOjExMzIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMzQsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTM1LCIuL3Bsb3QiOjExMzYsIi4vc2V0X3Bvc2l0aW9ucyI6MTEzNywiLi9zdHlsZSI6MTEzOH1dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTppKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmkoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmkoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7Ii4uLy4uL2xpYiI6NzM1LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MX1dLDExMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YS5fc3VwcGx5KHQsZSxyLG8sInZpb2xpbiIpfX0seyIuLi8uLi9saWIiOjczNSwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6ODgyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTM0fV0sMTEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2JveC9wbG90Iikscz10KCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGModCl7dmFyIGU9cyh0LHt4YXhpczpmLHlheGlzOmgsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6InNwbGluZSIsc2ltcGxpZnk6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9dmFyIHU9dC5fZnVsbExheW91dCxmPWUueGF4aXMsaD1lLnlheGlzO2UucGxvdC5zZWxlY3QoIi52aW9saW5sYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIikuZGF0YShyKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgdmlvbGlucyIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXSxhPXIudCxzPXIudHJhY2UsZD1yLm5vZGUzPW4uc2VsZWN0KHRoaXMpLHA9dS5fbnVtVmlvbGlucyxtPSJncm91cCI9PT11LnZpb2xpbm1vZGUmJnA+MSx2PWEuYmRQb3M9YS5kUG9zKigxLXUudmlvbGluZ2FwKSooMS11LnZpb2xpbmdyb3VwZ2FwKS8obT9wOjEpLGc9YS5iUG9zPW0/MiphLmRQb3MqKC0uNSsoYS5udW0rLjUpL3ApKigxLXUudmlvbGluZ2FwKTowO2lmKHMudmlzaWJsZSE9PSEwfHxhLmVtcHR5KXJldHVybiB2b2lkIG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpO3ZhciB5PWVbYS52YWxMZXR0ZXIrImF4aXMiXSxiPWVbYS5wb3NMZXR0ZXIrImF4aXMiXSx4PSJib3RoIj09PXMuc2lkZSxfPXh8fCJwb3NpdGl2ZSI9PT1zLnNpZGUsdz14fHwibmVnYXRpdmUiPT09cy5zaWRlLE09cy5ib3gmJnMuYm94LnZpc2libGUsVD1zLm1lYW5saW5lJiZzLm1lYW5saW5lLnZpc2libGUsaz11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbcy5zY2FsZWdyb3VwXTtpZihkLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsInZpb2xpbiIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxpPXQuZGVuc2l0eSxvPWkubGVuZ3RoLGw9dC5wb3MrZyx1PWIuYzJwKGwpO3N3aXRjaChzLnNjYWxlbW9kZSl7Y2FzZSJ3aWR0aCI6ZT1rLm1heFdpZHRoL3Y7YnJlYWs7Y2FzZSJjb3VudCI6ZT1rLm1heFdpZHRoL3YqKGsubWF4Q291bnQvdC5wdHMubGVuZ3RoKX12YXIgZixoLGQscCxtLE0sVDtpZihfKXtmb3IoTT1uZXcgQXJyYXkobykscD0wO3A8bztwKyspVD1NW3BdPXt9LFRbYS5wb3NMZXR0ZXJdPWwraVtwXS52L2UsVFthLnZhbExldHRlcl09aVtwXS50O2Y9YyhNKX1pZih3KXtmb3IoTT1uZXcgQXJyYXkobyksbT0wLHA9by0xO208bzttKysscC0tKVQ9TVttXT17fSxUW2EucG9zTGV0dGVyXT1sLWlbcF0udi9lLFRbYS52YWxMZXR0ZXJdPWlbcF0udDtoPWMoTSl9aWYoeClkPWYrIkwiK2guc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBBPVt1LHkuYzJwKGlbMF0udCldLEU9W3UseS5jMnAoaVtvLTFdLnQpXTsiaCI9PT1zLm9yaWVudGF0aW9uJiYoQS5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGQ9Xz8iTSIrQSsiTCIrZi5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2guc3Vic3RyKDEpKyJMIitBfXIuYXR0cigiZCIsZCksdC5wb3NDZW50ZXJQeD11LHQucG9zRGVuc2l0eVNjYWxlPWUqdix0LnBhdGg9ci5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh4PzI6MSl9KSxNKXt2YXIgQSxFLFM9cy5ib3gud2lkdGgsTD1zLmJveC5saW5lLndpZHRoO3g/KEE9dipTLEU9MCk6Xz8oQT1bMCx2KlMvMl0sRT0tTCk6KEE9W3YqUy8yLDBdLEU9TCkscy53aGlza2Vyd2lkdGg9MCxvLnBsb3RCb3hBbmRXaGlza2VycyhkLHtwb3M6Yix2YWw6eX0scyx7YlBvczpnLGJkUG9zOkEsYlBvc1B4T2Zmc2V0OkV9KSxUJiZvLnBsb3RCb3hNZWFuKGQse3BvczpiLHZhbDp5fSxzLHtiUG9zOmcsYmRQb3M6QSxiUG9zUHhPZmZzZXQ6RX0pfWVsc2UgVCYmZC5zZWxlY3RBbGwoInBhdGgubWVhbiIpLmRhdGEoaS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT15LmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LHMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09cy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KTtzLnBvaW50cyYmby5wbG90UG9pbnRzKGQse3g6Zix5Omh9LHMsYSl9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzUsIi4uLy4uL2xpYiI6NzM1LCIuLi9ib3gvcGxvdCI6ODgzLCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMDU4LCIuL2hlbHBlcnMiOjExMzEsZDM6MTIxfV0sMTEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvc2V0X3Bvc2l0aW9ucyIpLnNldFBvc2l0aW9uT2Zmc2V0LGk9WyJ2IiwiaCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLGE9ZS54YXhpcyxvPWUueWF4aXMscz0wO3M8aS5sZW5ndGg7cysrKXtmb3IodmFyIGw9aVtzXSxjPSJoIj09PWw/bzphLHU9W10sZj0wLGg9MCxkPTA7ZDxyLmxlbmd0aDtkKyspe3ZhciBwPXJbZF0sbT1wWzBdLnQsdj1wWzBdLnRyYWNlO3YudmlzaWJsZSE9PSEwfHwidmlvbGluIiE9PXYudHlwZXx8bS5lbXB0eXx8di5vcmllbnRhdGlvbiE9PWx8fHYueGF4aXMhPT1hLl9pZHx8di55YXhpcyE9PW8uX2lkfHwodS5wdXNoKGQpLHYucG9pbnRzIT09ITEmJihmPU1hdGgubWF4KGYsdi5qaXR0ZXItdi5wb2ludHBvcy0xKSxoPU1hdGgubWF4KGgsdi5qaXR0ZXIrdi5wb2ludHBvcy0xKSkpfW4oInZpb2xpbiIsdCx1LGMsW2YsaF0pfX19LHsiLi4vYm94L3NldF9wb3NpdGlvbnMiOjg4NX1dLDExMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGEuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChhLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChhLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGEuZmlsbCxzLmZpbGxjb2xvciksby5zZWxlY3RBbGwoImcucG9pbnRzIHBhdGgiKS5jYWxsKGkucG9pbnRTdHlsZSxyLHQpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6dSsicHgiLCJzdHJva2UtZGFzaGFycmF5IjoyKnUrInB4LCIrdSsicHgifSkuY2FsbChhLnN0cm9rZSxjLmNvbG9yKX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM1LGQzOjEyMX1dLDExMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZihuLmVuYWJsZWQpe2Zvcih2YXIgYT1uLnRhcmdldCxvPWMubmVzdGVkUHJvcGVydHkoZSxhKSxzPW8uZ2V0KCksdT1sLmdldERhdGFDb252ZXJzaW9ucyh0LGUsYSxzKSxmPWkobix1KSxoPW5ldyBBcnJheShyLmxlbmd0aCksZD0wO2Q8ci5sZW5ndGg7ZCsrKWhbZF09ZihzLHJbZF0pO28uc2V0KGgpfX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5mdW5jLG49ZS5kMmMsaT1lLmMyZDtzd2l0Y2gocil7Y2FzZSJjb3VudCI6cmV0dXJuIGE7Y2FzZSJmaXJzdCI6cmV0dXJuIG87Y2FzZSJsYXN0IjpyZXR1cm4gcztjYXNlInN1bSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1oJiYocis9byl9cmV0dXJuIGkocil9O2Nhc2UiYXZnIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1uKHRbZVtvXV0pO3MhPT1oJiYocis9cyxhKyspfXJldHVybiBhP2koci9hKTpofTtjYXNlIm1pbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PWgmJihyPU1hdGgubWluKHIsbykpfXJldHVybiByPT09MS8wP2g6aShyKX07Y2FzZSJtYXgiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tKDEvMCksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1oJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0oMS8wKT9oOmkocil9O2Nhc2UibWVkaWFuIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1oJiZyLnB1c2gobyl9aWYoIXIubGVuZ3RoKXJldHVybiBoO3Iuc29ydCgpO3ZhciBzPShyLmxlbmd0aC0xKS8yO3JldHVybiBpKChyW01hdGguZmxvb3IocyldK3JbTWF0aC5jZWlsKHMpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGE9MCxvPWgscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1uKHRbZVtzXV0pO2lmKGwhPT1oKXt2YXIgYz1yW2xdPShyW2xdfHwwKSsxO2M+YSYmKGE9YyxvPWwpfX1yZXR1cm4gYT9pKG8pOmh9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1uKHRbZVtvXV0pO3MhPT1oJiYocis9cypzLGErKyl9cmV0dXJuIGE/aShNYXRoLnNxcnQoci9hKSk6aH07Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAscz0xLGw9aDtmb3IoaT0wO2k8ci5sZW5ndGgmJmw9PT1oO2krKylsPW4oZVtyW2ldXSk7aWYobD09PWgpcmV0dXJuIGg7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIGM9bihlW3JbaV1dKTtpZihjIT09aCl7dmFyIHU9Yy1sO2ErPXUsbys9dSp1LHMrK319dmFyIGY9InNhbXBsZSI9PT10LmZ1bmNtb2RlP3MtMTpzO3JldHVybiBmP01hdGguc3FydCgoby1hKmEvcykvZik6MH19fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0W2VbMF1dfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdFtlW2UubGVuZ3RoLTFdXX12YXIgbD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vbGliIiksdT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGY9dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixoPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgZD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCJdLGRmbHQ6ImZpcnN0IixlZGl0VHlwZToiY2FsYyJ9LGZ1bmNtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzYW1wbGUiLCJwb3B1bGF0aW9uIl0sZGZsdDoic2FtcGxlIixlZGl0VHlwZToiY2FsYyJ9LGVuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0scD1kLmFnZ3JlZ2F0aW9ucztyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBjLmNvZXJjZSh0LGEsZCxlLHIpfWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gYy5jb2VyY2UoaFtpXSxmLHAsdCxlKX12YXIgaSxhPXt9O2lmKCFyKCJlbmFibGVkIikpcmV0dXJuIGE7dmFyIG89dS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHM9e307Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylzW29baV1dPTE7dmFyIGw9cigiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkobCkpe2lmKCFzW2xdKXJldHVybiB2b2lkKGEuZW5hYmxlZD0hMSk7c1tsXT0wfXZhciBmLGg9dC5hZ2dyZWdhdGlvbnN8fFtdLG09YS5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KGgubGVuZ3RoKTtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKXtmPXtfaW5kZXg6aX07dmFyIHY9bigidGFyZ2V0IiksZz1uKCJmdW5jIik7bigiZW5hYmxlZCIpJiZ2JiYoc1t2XXx8ImNvdW50Ij09PWcmJnZvaWQgMD09PXNbdl0pPygic3RkZGV2Ij09PWcmJm4oImZ1bmNtb2RlIiksc1t2XT0wLG1baV09Zik6bVtpXT17ZW5hYmxlZDohMSxfaW5kZXg6aX19Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylzW29baV1dJiZtLnB1c2goe3RhcmdldDpvW2ldLGZ1bmM6cC5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gYX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBpPXIuZ3JvdXBzLGE9Yy5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6aX0pO2lmKGEpe3ZhciBvLHMsbCx1LGg9e30sZD17fSxwPVtdLG09ZihlLnRyYW5zZm9ybXMscik7Zm9yKG89MDtvPGEubGVuZ3RoO28rKylzPWFbb10sbD1oW3NdLHZvaWQgMD09PWw/KGhbc109cC5sZW5ndGgsdT1bb10scC5wdXNoKHUpLGRbaFtzXV09bShvKSk6KHBbbF0ucHVzaChvKSxkW2hbc11dPShkW2hbc11dfHxbXSkuY29uY2F0KG0obykpKTtyLl9pbmRleFRvUG9pbnRzPWQ7dmFyIHY9ci5hZ2dyZWdhdGlvbnM7Zm9yKG89MDtvPHYubGVuZ3RoO28rKyluKHQsZSxwLHZbb10pOyJzdHJpbmciPT10eXBlb2YgaSYmbih0LGUscCx7dGFyZ2V0OmksZnVuYzoiZmlyc3QiLGVuYWJsZWQ6ITB9KX19fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MTQsIi4uL2xpYiI6NzM1LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzY4LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuL2hlbHBlcnMiOjExNDJ9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuaW5kZXhPZihhKSE9PS0xfXZhciBpLGE9dC5vcGVyYXRpb24sbz10LnZhbHVlLHM9QXJyYXkuaXNBcnJheShvKSxmPWZ1bmN0aW9uKHIpe3JldHVybiBlKHIsMCx0LnZhbHVlY2FsZW5kYXIpfSxoPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQsMCxyKX07c3dpdGNoKG4obCk/aT1mKHM/b1swXTpvKTpuKGMpP2k9cz9bZihvWzBdKSxmKG9bMV0pXTpbZihvKSxmKG8pXTpuKHUpJiYoaT1zP28ubWFwKGYpOltmKG8pXSksYSl7Y2FzZSI9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk9PT1pfTtjYXNlIiE9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCkhPT1pfTtjYXNlIjwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTxpfTtjYXNlIjw9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk8PWl9O2Nhc2UiPiI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPml9O2Nhc2UiPj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT49aX07Y2FzZSJbXSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+PWlbMF0mJmU8PWlbMV19O2Nhc2UiKCkiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPmlbMF0mJmU8aVsxXX07Y2FzZSJbKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+PWlbMF0mJmU8aVsxXX07Y2FzZSIoXSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+aVswXSYmZTw9aVsxXX07Y2FzZSJdWyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8PWlbMF18fGU+PWlbMV19O2Nhc2UiKSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1oKHQpO3JldHVybiBlPGlbMF18fGU+aVsxXX07Y2FzZSJdKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8PWlbMF18fGU+aVsxXX07Y2FzZSIpWyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8aVswXXx8ZT49aVsxXX07Y2FzZSJ7fSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4T2YoaCh0KSkhPT0tMX07Y2FzZSJ9eyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4T2YoaCh0KSk9PT0tMX19fXZhciBpPXQoIi4uL2xpYiIpLGE9dCgiLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLGw9WyI9IiwiIT0iLCI8IiwiPj0iLCI+IiwiPD0iXSxjPVsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLHU9WyJ7fSIsIn17Il07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtyZXR1cm4gaS5jb2VyY2UodCxuLHIuYXR0cmlidXRlcyxlLGEpfXZhciBuPXt9O2lmKGUoImVuYWJsZWQiKSl7ZSgicHJlc2VydmVnYXBzIiksZSgib3BlcmF0aW9uIiksZSgidmFsdWUiKSxlKCJ0YXJnZXQiKTt2YXIgbz1hLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKTtvKHQsbiwidmFsdWVjYWxlbmRhciIsbnVsbCksbyh0LG4sInRhcmdldGNhbGVuZGFyIixudWxsKX1yZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHQscil7Zm9yKHZhciBuPTA7bjxoLmxlbmd0aDtuKyspe3QoaS5uZXN0ZWRQcm9wZXJ0eShlLGhbbl0pLHIpfX1pZihyLmVuYWJsZWQpe3ZhciBsPWkuZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihsKXt2YXIgYz1yLnRhcmdldCx1PWwubGVuZ3RoLGY9ci50YXJnZXRjYWxlbmRhcixoPWUuX2FycmF5QXR0cnM7aWYoInN0cmluZyI9PXR5cGVvZiBjKXt2YXIgZD1pLm5lc3RlZFByb3BlcnR5KGUsYysiY2FsZW5kYXIiKS5nZXQoKTtkJiYoZj1kKX12YXIgcCxtLHY9by5nZXREYXRhVG9Db29yZEZ1bmModCxlLGMsbCksZz1uKHIsdixmKSx5PXt9LGI9e30seD0wO3IucHJlc2VydmVnYXBzPyhwPWZ1bmN0aW9uKHQpe3lbdC5hc3RyXT1pLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQobmV3IEFycmF5KHUpKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXlbdC5hc3RyXVtlXTt0LmdldCgpW2VdPXJ9KToocD1mdW5jdGlvbih0KXt5W3QuYXN0cl09aS5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KFtdKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXlbdC5hc3RyXVtlXTt0LmdldCgpLnB1c2gocil9KSxhKHApO2Zvcih2YXIgXz1zKGUudHJhbnNmb3JtcyxyKSx3PTA7dzx1O3crKyl7ZyhsW3ddKSYmKGEobSx3KSxiW3grK109Xyh3KSl9ci5faW5kZXhUb1BvaW50cz1ifX19fSx7Ii4uL2xpYiI6NzM1LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzc5LCIuLi9yZWdpc3RyeSI6ODUzLCIuL2hlbHBlcnMiOjExNDJ9XSwxMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLHMsbCxjLHUsZixoLGQscCxtPWUudHJhbnNmb3JtLHY9dC50cmFuc2Zvcm1zW2UudHJhbnNmb3JtSW5kZXhdLmdyb3VwcztpZighQXJyYXkuaXNBcnJheSh2KXx8MD09PXYubGVuZ3RoKXJldHVyblt0XTt2YXIgZz1pLmZpbHRlclVuaXF1ZSh2KSx5PW5ldyBBcnJheShnLmxlbmd0aCksYj12Lmxlbmd0aCx4PWEuZmluZEFycmF5QXR0cmlidXRlcyh0KSxfPW0uc3R5bGVzfHxbXSx3PXt9O2ZvcihyPTA7cjxfLmxlbmd0aDtyKyspd1tfW3JdLnRhcmdldF09X1tyXS52YWx1ZTttLnN0eWxlcyYmKHA9aS5rZXllZENvbnRhaW5lcihtLCJzdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIikpO3ZhciBNPXt9O2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspe3U9Z1tyXSxNW3VdPXIsZj15W3JdPWkuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpLGYuX2dyb3VwPXU7dmFyIFQ9bnVsbDtmb3IocCYmKFQ9cC5nZXQodSkpLGYubmFtZT1UP1Q6aS50ZW1wbGF0ZVN0cmluZyhtLm5hbWVmb3JtYXQse3RyYWNlOnQubmFtZSxncm91cDp1fSksaD1mLnRyYW5zZm9ybXMsZi50cmFuc2Zvcm1zPVtdLG49MDtuPGgubGVuZ3RoO24rKylmLnRyYW5zZm9ybXNbbl09aS5leHRlbmREZWVwTm9BcnJheXMoe30saFtuXSk7Zm9yKG49MDtuPHgubGVuZ3RoO24rKylpLm5lc3RlZFByb3BlcnR5KGYseFtuXSkuc2V0KFtdKX1mb3Iocz0wO3M8eC5sZW5ndGg7cysrKXtmb3IobD14W3NdLG49MCxkPVtdO248Zy5sZW5ndGg7bisrKWRbbl09aS5uZXN0ZWRQcm9wZXJ0eSh5W25dLGwpLmdldCgpO2ZvcihjPWkubmVzdGVkUHJvcGVydHkodCxsKS5nZXQoKSxuPTA7bjxiO24rKylkW01bdltuXV1dLnB1c2goY1tuXSl9Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyl1PWdbcl0sZj15W3JdLG8uY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhmKSxmPWkuZXh0ZW5kRGVlcE5vQXJyYXlzKGYsd1t1XXx8e30pO3JldHVybiB5fXZhciBpPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIik7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sbmFtZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e30sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gYShlLG4pe3JldHVybiBpLmNvZXJjZSh0LHMsci5hdHRyaWJ1dGVzLGUsbil9dmFyIG8scz17fTtpZighYSgiZW5hYmxlZCIpKXJldHVybiBzO2EoImdyb3VwcyIpLGEoIm5hbWVmb3JtYXQiLG4uX2RhdGFMZW5ndGg+MT8iJXtncm91cH0gKCV7dHJhY2V9KSI6IiV7Z3JvdXB9Iik7dmFyIGw9dC5zdHlsZXMsYz1zLnN0eWxlcz1bXTtpZihsKWZvcihvPTA7bzxsLmxlbmd0aDtvKyspY1tvXT17fSxpLmNvZXJjZShsW29dLGNbb10sci5hdHRyaWJ1dGVzLnN0eWxlcywidGFyZ2V0IiksaS5jb2VyY2UobFtvXSxjW29dLHIuYXR0cmlidXRlcy5zdHlsZXMsInZhbHVlIik7cmV0dXJuIHN9LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89W107Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylmb3Iocj1uKHRbaV0sZSksYT0wO2E8ci5sZW5ndGg7YSsrKW8ucHVzaChyW2FdKTtyZXR1cm4gb319LHsiLi4vbGliIjo3MzUsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3NjgsIi4uL3Bsb3RzL3Bsb3RzIjo4Mzh9XSwxMTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucG9pbnRzQWNjZXNzb3JGdW5jdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MDtpPHQubGVuZ3RoJiYocj10W2ldKSE9PWU7aSsrKXIuX2luZGV4VG9Qb2ludHMmJnIuZW5hYmxlZCE9PSExJiYobj1yLl9pbmRleFRvUG9pbnRzKTtyZXR1cm4gbj9mdW5jdGlvbih0KXtyZXR1cm4gblt0XX06ZnVuY3Rpb24odCl7cmV0dXJuW3RdfX19LHt9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPW5ldyBBcnJheShuKSxvPWUuc2xpY2UoKS5zb3J0KGkodCxyKSkscz0wO3M8bjtzKyspZm9yKHZhciBsPWVbc10sYz0wO2M8bjtjKyspe3ZhciB1PW9bY107aWYobD09PXUpe2FbY109cyxvW2NdPW51bGw7YnJlYWt9fXJldHVybiBhfWZ1bmN0aW9uIGkodCxlKXtzd2l0Y2godC5vcmRlcil7Y2FzZSJhc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQpLWUocil9O2Nhc2UiZGVzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUociktZSh0KX19fXZhciBhPXQoIi4uL2xpYiIpLG89dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsaSl7cmV0dXJuIGEuY29lcmNlKHQsbixyLmF0dHJpYnV0ZXMsZSxpKX12YXIgbj17fTtyZXR1cm4gZSgiZW5hYmxlZCIpJiYoZSgidGFyZ2V0IiksZSgib3JkZXIiKSksbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBpPWEuZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihpKWZvcih2YXIgcz1yLnRhcmdldCxsPWkubGVuZ3RoLGM9ZS5fYXJyYXlBdHRycyx1PW8uZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGY9bihyLGksdSksaD0wO2g8Yy5sZW5ndGg7aCsrKXtmb3IodmFyIGQ9YS5uZXN0ZWRQcm9wZXJ0eShlLGNbaF0pLHA9ZC5nZXQoKSxtPW5ldyBBcnJheShsKSx2PTA7djxsO3YrKyltW3ZdPXBbZlt2XV07ZC5zZXQobSl9fX19LHsiLi4vbGliIjo3MzUsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3Nzl9XX0se30sWzIwXSkoMjApfSk7”></script>

</head> <body style=“background-color:white;”> <div id=“htmlwidget_container”>

<div id="htmlwidget-d11c6fab7f2ac79a968a" style="width:700px;height:700px;" class="plotly html-widget"></div>

</div> <script type=“application/json” data-for=“htmlwidget-d11c6fab7f2ac79a968a”>{“x”:{“data”:[{“x”:[-9.40491886792805],“y”:[-130.337045887037],“text”:“HUE: 240<br />SAT: 100<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,255,1)”}},“hoveron”:“points”,“name”:“(#0000FF,1)”,“legendgroup”:“(#0000FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-11.151690307281],“y”:[-132.410808609114],“text”:“HUE: 239<br />SAT: 100<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,4,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,4,255,1)”}},“hoveron”:“points”,“name”:“(#0004FF,1)”,“legendgroup”:“(#0004FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-20.7740084442753],“y”:[-126.290578921288],“text”:“HUE: 233<br />SAT: 100<br />VAL: 98<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,29,250,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,29,250,1)”}},“hoveron”:“points”,“name”:“(#001DFA,1)”,“legendgroup”:“(#001DFA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-47.187436581428],“y”:[-72.0941496549797],“text”:“HUE: 211<br />SAT: 100<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,123,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,123,255,1)”}},“hoveron”:“points”,“name”:“(#007BFF,1)”,“legendgroup”:“(#007BFF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-48.120478974559],“y”:[-69.8146810335684],“text”:“HUE: 210<br />SAT: 100<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,128,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,128,255,1)”}},“hoveron”:“points”,“name”:“(#0080FF,1)”,“legendgroup”:“(#0080FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-60.4457416422132],“y”:[-39.5192979807593],“text”:“HUE: 195<br />SAT: 100<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,191,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,191,255,1)”}},“hoveron”:“points”,“name”:“(#00BFFF,1)”,“legendgroup”:“(#00BFFF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-77.8981414670682],“y”:[100.702904526089],“text”:“HUE: 120<br />SAT: 100<br />VAL: 85<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,217,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,217,0,1)”}},“hoveron”:“points”,“name”:“(#00D900,1)”,“legendgroup”:“(#00D900,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-83.0779081468481],“y”:[107.399053363501],“text”:“HUE: 120<br />SAT: 100<br />VAL: 100<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(0,255,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,255,0,1)”}},“hoveron”:“points”,“name”:“(#00FF00,1)”,“legendgroup”:“(#00FF00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-12.8177851906022],“y”:[-132.645975989141],“text”:“HUE: 238<br />SAT: 99<br />VAL: 99<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(3,11,252,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(3,11,252,1)”}},“hoveron”:“points”,“name”:“(#030BFC,1)”,“legendgroup”:“(#030BFC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-67.3548409494725],“y”:[72.2480620876905],“text”:“HUE: 128<br />SAT: 98<br />VAL: 68<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(3,173,26,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(3,173,26,1)”}},“hoveron”:“points”,“name”:“(#03AD1A,1)”,“legendgroup”:“(#03AD1A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-30.5671161512387],“y”:[-96.2209704898982],“text”:“HUE: 224<br />SAT: 98<br />VAL: 88<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(4,63,224,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(4,63,224,1)”}},“hoveron”:“points”,“name”:“(#043FE0,1)”,“legendgroup”:“(#043FE0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-44.3888881552502],“y”:[-64.4005507810659],“text”:“HUE: 210<br />SAT: 98<br />VAL: 88<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(4,114,224,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(4,114,224,1)”}},“hoveron”:“points”,“name”:“(#0472E0,1)”,“legendgroup”:“(#0472E0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-65.2021444823897],“y”:[88.0710963639008],“text”:“HUE: 118<br />SAT: 100<br />VAL: 61<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(5,156,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(5,156,0,1)”}},“hoveron”:“points”,“name”:“(#059C00,1)”,“legendgroup”:“(#059C00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-27.4489297116867],“y”:[-72.1399149640614],“text”:“HUE: 221<br />SAT: 96<br />VAL: 58<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(6,51,148,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(6,51,148,1)”}},“hoveron”:“points”,“name”:“(#063394,1)”,“legendgroup”:“(#063394,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-67.1510236145453],“y”:[-9.8949755849045],“text”:“HUE: 177<br />SAT: 97<br />VAL: 95<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(7,242,231,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(7,242,231,1)”}},“hoveron”:“points”,“name”:“(#07F2E7,1)”,“legendgroup”:“(#07F2E7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-20.595404148178],“y”:[-90.7632825106871],“text”:“HUE: 229<br />SAT: 95<br />VAL: 65<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(8,37,166,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(8,37,166,1)”}},“hoveron”:“points”,“name”:“(#0825A6,1)”,“legendgroup”:“(#0825A6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-40.3479201129314],“y”:[-72.1060862227772],“text”:“HUE: 214<br />SAT: 96<br />VAL: 92<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(9,107,235,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(9,107,235,1)”}},“hoveron”:“points”,“name”:“(#096BEB,1)”,“legendgroup”:“(#096BEB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-67.7796249548006],“y”:[93.6333486951841],“text”:“HUE: 117<br />SAT: 100<br />VAL: 71<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(9,181,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(9,181,0,1)”}},“hoveron”:“points”,“name”:“(#09B500,1)”,“legendgroup”:“(#09B500,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-48.7173598742433],“y”:[-54.6282977835286],“text”:“HUE: 205<br />SAT: 96<br />VAL: 95<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(10,145,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(10,145,242,1)”}},“hoveron”:“points”,“name”:“(#0A91F2,1)”,“legendgroup”:“(#0A91F2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-55.8064745400825],“y”:[30.6595284051456],“text”:“HUE: 148<br />SAT: 93<br />VAL: 58<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(10,148,75,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(10,148,75,1)”}},“hoveron”:“points”,“name”:“(#0A944B,1)”,“legendgroup”:“(#0A944B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-15.6614040151175],“y”:[-95.2087193499826],“text”:“HUE: 233<br />SAT: 93<br />VAL: 64<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(11,29,163,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(11,29,163,1)”}},“hoveron”:“points”,“name”:“(#0B1DA3,1)”,“legendgroup”:“(#0B1DA3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-69.2101702665196],“y”:[68.6393759129714],“text”:“HUE: 131<br />SAT: 95<br />VAL: 83<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(11,212,47,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(11,212,47,1)”}},“hoveron”:“points”,“name”:“(#0BD42F,1)”,“legendgroup”:“(#0BD42F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-28.0132325364287],“y”:[-100.238817492452],“text”:“HUE: 226<br />SAT: 95<br />VAL: 96<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(12,67,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(12,67,245,1)”}},“hoveron”:“points”,“name”:“(#0C43F5,1)”,“legendgroup”:“(#0C43F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-32.0406046889629],“y”:[-89.3072372270116],“text”:“HUE: 222<br />SAT: 95<br />VAL: 93<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(12,79,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(12,79,237,1)”}},“hoveron”:“points”,“name”:“(#0C4FED,1)”,“legendgroup”:“(#0C4FED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-31.660468467094],“y”:[-93.7134691341448],“text”:“HUE: 223<br />SAT: 95<br />VAL: 98<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(12,80,250,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(12,80,250,1)”}},“hoveron”:“points”,“name”:“(#0C50FA,1)”,“legendgroup”:“(#0C50FA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-72.0866814437408],“y”:[99.583374600447],“text”:“HUE: 117<br />SAT: 99<br />VAL: 86<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(13,219,2,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(13,219,2,1)”}},“hoveron”:“points”,“name”:“(#0DDB02,1)”,“legendgroup”:“(#0DDB02,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-77.6798427653656],“y”:[107.309885663824],“text”:“HUE: 117<br />SAT: 100<br />VAL: 100<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(13,255,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(13,255,0,1)”}},“hoveron”:“points”,“name”:“(#0DFF00,1)”,“legendgroup”:“(#0DFF00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-19.860047760076],“y”:[-110.728470293175],“text”:“HUE: 232<br />SAT: 94<br />VAL: 91<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(14,43,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(14,43,232,1)”}},“hoveron”:“points”,“name”:“(#0E2BE8,1)”,“legendgroup”:“(#0E2BE8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-26.9566590982157],“y”:[-96.457965955443],“text”:“HUE: 226<br />SAT: 94<br />VAL: 91<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(14,65,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(14,65,232,1)”}},“hoveron”:“points”,“name”:“(#0E41E8,1)”,“legendgroup”:“(#0E41E8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-31.6430826831211],“y”:[-74.1828332845071],“text”:“HUE: 219<br />SAT: 93<br />VAL: 78<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(14,79,199,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(14,79,199,1)”}},“hoveron”:“points”,“name”:“(#0E4FC7,1)”,“legendgroup”:“(#0E4FC7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-60.8884877942574],“y”:[75.3270253322646],“text”:“HUE: 122<br />SAT: 91<br />VAL: 66<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(15,168,20,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(15,168,20,1)”}},“hoveron”:“points”,“name”:“(#0FA814,1)”,“legendgroup”:“(#0FA814,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-38.3990586337165],“y”:[-68.622896594527],“text”:“HUE: 214<br />SAT: 93<br />VAL: 91<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(16,110,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(16,110,232,1)”}},“hoveron”:“points”,“name”:“(#106EE8,1)”,“legendgroup”:“(#106EE8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-11.9078013173327],“y”:[-123.227650718997],“text”:“HUE: 238<br />SAT: 93<br />VAL: 93<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(17,24,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(17,24,237,1)”}},“hoveron”:“points”,“name”:“(#1118ED,1)”,“legendgroup”:“(#1118ED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-28.0611280664203],“y”:[-73.7482568231711],“text”:“HUE: 221<br />SAT: 91<br />VAL: 73<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(17,70,186,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(17,70,186,1)”}},“hoveron”:“points”,“name”:“(#1146BA,1)”,“legendgroup”:“(#1146BA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-28.9523689780709],“y”:[-91.1372723978415],“text”:“HUE: 224<br />SAT: 93<br />VAL: 93<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(17,75,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(17,75,237,1)”}},“hoveron”:“points”,“name”:“(#114BED,1)”,“legendgroup”:“(#114BED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-11.3552730601738],“y”:[-117.509604341104],“text”:“HUE: 238<br />SAT: 92<br />VAL: 86<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(18,24,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(18,24,219,1)”}},“hoveron”:“points”,“name”:“(#1218DB,1)”,“legendgroup”:“(#1218DB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-20.3576781664027],“y”:[-104.559111650854],“text”:“HUE: 231<br />SAT: 92<br />VAL: 90<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(18,50,230,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(18,50,230,1)”}},“hoveron”:“points”,“name”:“(#1232E6,1)”,“legendgroup”:“(#1232E6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-34.6373127435886],“y”:[-76.8025534087594],“text”:“HUE: 218<br />SAT: 92<br />VAL: 94<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(19,100,240,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(19,100,240,1)”}},“hoveron”:“points”,“name”:“(#1364F0,1)”,“legendgroup”:“(#1364F0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-71.4341320982131],“y”:[103.336071432226],“text”:“HUE: 115<br />SAT: 100<br />VAL: 91<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(19,232,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(19,232,0,1)”}},“hoveron”:“points”,“name”:“(#13E800,1)”,“legendgroup”:“(#13E800,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-71.4253977566823],“y”:[90.3455860920198],“text”:“HUE: 121<br />SAT: 92<br />VAL: 94<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(19,240,23,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(19,240,23,1)”}},“hoveron”:“points”,“name”:“(#13F017,1)”,“legendgroup”:“(#13F017,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-14.7434635385305],“y”:[-120.29144849284],“text”:“HUE: 236<br />SAT: 92<br />VAL: 98<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(20,35,250,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(20,35,250,1)”}},“hoveron”:“points”,“name”:“(#1423FA,1)”,“legendgroup”:“(#1423FA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-35.8919550017438],“y”:[-75.33314538142],“text”:“HUE: 217<br />SAT: 92<br />VAL: 96<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(20,106,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(20,106,245,1)”}},“hoveron”:“points”,“name”:“(#146AF5,1)”,“legendgroup”:“(#146AF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-65.5356656656885],“y”:[90.5340007341421],“text”:“HUE: 117<br />SAT: 94<br />VAL: 82<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(22,209,13,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(22,209,13,1)”}},“hoveron”:“points”,“name”:“(#16D10D,1)”,“legendgroup”:“(#16D10D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-12.5823327472482],“y”:[-51.5993431674188],“text”:“HUE: 228<br />SAT: 76<br />VAL: 39<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(24,39,99,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(24,39,99,1)”}},“hoveron”:“points”,“name”:“(#182763,1)”,“legendgroup”:“(#182763,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-19.0900695579088],“y”:[-106.4348000321],“text”:“HUE: 232<br />SAT: 90<br />VAL: 96<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(24,54,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(24,54,245,1)”}},“hoveron”:“points”,“name”:“(#1836F5,1)”,“legendgroup”:“(#1836F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-50.793669051137],“y”:[-29.5208462257768],“text”:“HUE: 193<br />SAT: 89<br />VAL: 87<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(24,179,222,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(24,179,222,1)”}},“hoveron”:“points”,“name”:“(#18B3DE,1)”,“legendgroup”:“(#18B3DE,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-32.1451084184552],“y”:[-71.2761106253474],“text”:“HUE: 218<br />SAT: 89<br />VAL: 88<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(25,98,224,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(25,98,224,1)”}},“hoveron”:“points”,“name”:“(#1962E0,1)”,“legendgroup”:“(#1962E0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-39.0727959953511],“y”:[-56.686835010161],“text”:“HUE: 210<br />SAT: 89<br />VAL: 89<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(25,126,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(25,126,227,1)”}},“hoveron”:“points”,“name”:“(#197EE3,1)”,“legendgroup”:“(#197EE3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-43.4776099550583],“y”:[-46.290199838109],“text”:“HUE: 204<br />SAT: 89<br />VAL: 88<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(25,145,224,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(25,145,224,1)”}},“hoveron”:“points”,“name”:“(#1991E0,1)”,“legendgroup”:“(#1991E0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-56.2459534781966],“y”:[72.7132403405046],“text”:“HUE: 120<br />SAT: 85<br />VAL: 68<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(26,173,26,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(26,173,26,1)”}},“hoveron”:“points”,“name”:“(#1AAD1A,1)”,“legendgroup”:“(#1AAD1A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-64.0891816380263],“y”:[73.9876686681886],“text”:“HUE: 125<br />SAT: 88<br />VAL: 86<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(26,219,42,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(26,219,42,1)”}},“hoveron”:“points”,“name”:“(#1ADB2A,1)”,“legendgroup”:“(#1ADB2A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-8.84576459280473],“y”:[-122.585386941312],“text”:“HUE: 240<br />SAT: 89<br />VAL: 96<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(27,27,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(27,27,245,1)”}},“hoveron”:“points”,“name”:“(#1B1BF5,1)”,“legendgroup”:“(#1B1BF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-10.8982183707764],“y”:[-112.778905332092],“text”:“HUE: 238<br />SAT: 88<br />VAL: 89<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(27,34,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(27,34,227,1)”}},“hoveron”:“points”,“name”:“(#1B22E3,1)”,“legendgroup”:“(#1B22E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-54.0827340350211],“y”:[58.0128956999686],“text”:“HUE: 128<br />SAT: 84<br />VAL: 67<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(27,171,46,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(27,171,46,1)”}},“hoveron”:“points”,“name”:“(#1BAB2E,1)”,“legendgroup”:“(#1BAB2E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-60.1052552586126],“y”:[81.1874754429538],“text”:“HUE: 118<br />SAT: 89<br />VAL: 76<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(27,194,21,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(27,194,21,1)”}},“hoveron”:“points”,“name”:“(#1BC215,1)”,“legendgroup”:“(#1BC215,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-60.285934947831],“y”:[-14.3826106189402],“text”:“HUE: 181<br />SAT: 89<br />VAL: 96<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(27,241,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(27,241,245,1)”}},“hoveron”:“points”,“name”:“(#1BF1F5,1)”,“legendgroup”:“(#1BF1F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-7.97764784558108],“y”:[-110.554181858061],“text”:“HUE: 240<br />SAT: 86<br />VAL: 84<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(30,30,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(30,30,214,1)”}},“hoveron”:“points”,“name”:“(#1E1ED6,1)”,“legendgroup”:“(#1E1ED6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-45.5931548783538],“y”:[67.5338011222204],“text”:“HUE: 114<br />SAT: 86<br />VAL: 54<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(31,138,19,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(31,138,19,1)”}},“hoveron”:“points”,“name”:“(#1F8A13,1)”,“legendgroup”:“(#1F8A13,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-51.0568010428545],“y”:[-24.6052519316763],“text”:“HUE: 190<br />SAT: 86<br />VAL: 89<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(32,194,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(32,194,227,1)”}},“hoveron”:“points”,“name”:“(#20C2E3,1)”,“legendgroup”:“(#20C2E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-68.2083077619009],“y”:[98.6701006915795],“text”:“HUE: 115<br />SAT: 95<br />VAL: 98<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(32,250,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(32,250,12,1)”}},“hoveron”:“points”,“name”:“(#20FA0C,1)”,“legendgroup”:“(#20FA0C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-60.8182892665403],“y”:[70.2118928842883],“text”:“HUE: 125<br />SAT: 85<br />VAL: 85<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(33,217,48,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(33,217,48,1)”}},“hoveron”:“points”,“name”:“(#21D930,1)”,“legendgroup”:“(#21D930,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-21.1784176085529],“y”:[-93.3311836627008],“text”:“HUE: 229<br />SAT: 86<br />VAL: 97<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(35,74,247,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(35,74,247,1)”}},“hoveron”:“points”,“name”:“(#234AF7,1)”,“legendgroup”:“(#234AF7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-61.7655718546574],“y”:[93.7166521843249],“text”:“HUE: 113<br />SAT: 95<br />VAL: 86<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(35,219,11,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(35,219,11,1)”}},“hoveron”:“points”,“name”:“(#23DB0B,1)”,“legendgroup”:“(#23DB0B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-66.0783947681544],“y”:[97.8760913679109],“text”:“HUE: 114<br />SAT: 95<br />VAL: 96<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(35,245,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(35,245,12,1)”}},“hoveron”:“points”,“name”:“(#23F50C,1)”,“legendgroup”:“(#23F50C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-50.1555916501766],“y”:[53.800837585786],“text”:“HUE: 128<br />SAT: 79<br />VAL: 68<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(36,173,55,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(36,173,55,1)”}},“hoveron”:“points”,“name”:“(#24AD37,1)”,“legendgroup”:“(#24AD37,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[5.87573506619712],“y”:[-117.64467148127],“text”:“HUE: 250<br />SAT: 97<br />VAL: 78<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(38,6,199,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(38,6,199,1)”}},“hoveron”:“points”,“name”:“(#2606C7,1)”,“legendgroup”:“(#2606C7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.48817961788325],“y”:[-99.5125814987182],“text”:“HUE: 248<br />SAT: 89<br />VAL: 65<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(38,18,166,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(38,18,166,1)”}},“hoveron”:“points”,“name”:“(#2612A6,1)”,“legendgroup”:“(#2612A6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-62.954794501595],“y”:[86.9692582525928],“text”:“HUE: 117<br />SAT: 88<br />VAL: 94<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(39,240,29,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(39,240,29,1)”}},“hoveron”:“points”,“name”:“(#27F01D,1)”,“legendgroup”:“(#27F01D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-56.7110502934679],“y”:[65.470683278871],“text”:“HUE: 125<br />SAT: 81<br />VAL: 84<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(41,214,55,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(41,214,55,1)”}},“hoveron”:“points”,“name”:“(#29D637,1)”,“legendgroup”:“(#29D637,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-58.5040926115029],“y”:[53.340855546041],“text”:“HUE: 134<br />SAT: 82<br />VAL: 91<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(42,232,86,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(42,232,86,1)”}},“hoveron”:“points”,“name”:“(#2AE856,1)”,“legendgroup”:“(#2AE856,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-10.0471818599206],“y”:[-103.970681130803],“text”:“HUE: 238<br />SAT: 82<br />VAL: 93<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(43,49,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(43,49,237,1)”}},“hoveron”:“points”,“name”:“(#2B31ED,1)”,“legendgroup”:“(#2B31ED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-9.06130510638302],“y”:[-93.7678980875412],“text”:“HUE: 238<br />SAT: 79<br />VAL: 83<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(44,50,212,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(44,50,212,1)”}},“hoveron”:“points”,“name”:“(#2C32D4,1)”,“legendgroup”:“(#2C32D4,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-52.1281318906001],“y”:[47.5280046205317],“text”:“HUE: 134<br />SAT: 78<br />VAL: 80<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(45,204,82,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(45,204,82,1)”}},“hoveron”:“points”,“name”:“(#2DCC52,1)”,“legendgroup”:“(#2DCC52,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-47.7595915573847],“y”:[69.0901660970773],“text”:“HUE: 115<br />SAT: 81<br />VAL: 70<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(46,179,34,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(46,179,34,1)”}},“hoveron”:“points”,“name”:“(#2EB322,1)”,“legendgroup”:“(#2EB322,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.5767011073616],“y”:[-103.053371835032],“text”:“HUE: 248<br />SAT: 87<br />VAL: 75<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(47,25,191,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(47,25,191,1)”}},“hoveron”:“points”,“name”:“(#2F19BF,1)”,“legendgroup”:“(#2F19BF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-9.98606781554817],“y”:[-60.7040385684982],“text”:“HUE: 233<br />SAT: 69<br />VAL: 60<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(47,60,153,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(47,60,153,1)”}},“hoveron”:“points”,“name”:“(#2F3C99,1)”,“legendgroup”:“(#2F3C99,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-42.5437871137935],“y”:[63.0176897288688],“text”:“HUE: 114<br />SAT: 78<br />VAL: 63<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(48,161,35,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(48,161,35,1)”}},“hoveron”:“points”,“name”:“(#30A123,1)”,“legendgroup”:“(#30A123,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-31.135141448499],“y”:[-58.6712792257839],“text”:“HUE: 215<br />SAT: 80<br />VAL: 96<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(49,131,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(49,131,245,1)”}},“hoveron”:“points”,“name”:“(#3183F5,1)”,“legendgroup”:“(#3183F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.33031694615158],“y”:[-115.657331783583],“text”:“HUE: 249<br />SAT: 91<br />VAL: 86<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(50,20,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(50,20,219,1)”}},“hoveron”:“points”,“name”:“(#3214DB,1)”,“legendgroup”:“(#3214DB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-53.3583927254054],“y”:[63.0658923556647],“text”:“HUE: 124<br />SAT: 77<br />VAL: 85<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(50,217,61,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(50,217,61,1)”}},“hoveron”:“points”,“name”:“(#32D93D,1)”,“legendgroup”:“(#32D93D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-4.68788372364378],“y”:[-97.1532960042726],“text”:“HUE: 242<br />SAT: 79<br />VAL: 84<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(51,45,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(51,45,214,1)”}},“hoveron”:“points”,“name”:“(#332DD6,1)”,“legendgroup”:“(#332DD6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-36.1087897069963],“y”:[71.6885536015048],“text”:“HUE: 103<br />SAT: 89<br />VAL: 55<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(51,140,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(51,140,15,1)”}},“hoveron”:“points”,“name”:“(#338C0F,1)”,“legendgroup”:“(#338C0F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-9.72513930570368],“y”:[-100.637365213759],“text”:“HUE: 238<br />SAT: 79<br />VAL: 98<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(52,59,250,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(52,59,250,1)”}},“hoveron”:“points”,“name”:“(#343BFA,1)”,“legendgroup”:“(#343BFA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[5.95032384925842],“y”:[-119.138361609631],“text”:“HUE: 250<br />SAT: 92<br />VAL: 90<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(54,18,230,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(54,18,230,1)”}},“hoveron”:“points”,“name”:“(#3612E6,1)”,“legendgroup”:“(#3612E6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-3.79258007499381],“y”:[-104.75803801412],“text”:“HUE: 243<br />SAT: 81<br />VAL: 93<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(55,45,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(55,45,237,1)”}},“hoveron”:“points”,“name”:“(#372DED,1)”,“legendgroup”:“(#372DED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-7.47463078843969],“y”:[-77.3469727364524],“text”:“HUE: 238<br />SAT: 71<br />VAL: 76<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(56,61,194,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(56,61,194,1)”}},“hoveron”:“points”,“name”:“(#383DC2,1)”,“legendgroup”:“(#383DC2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-50.3598279012721],“y”:[94.3006413720067],“text”:“HUE: 105<br />SAT: 97<br />VAL: 81<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(56,207,6,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(56,207,6,1)”}},“hoveron”:“points”,“name”:“(#38CF06,1)”,“legendgroup”:“(#38CF06,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-40.6362229914003],“y”:[78.3249148749487],“text”:“HUE: 104<br />SAT: 90<br />VAL: 66<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(57,168,17,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(57,168,17,1)”}},“hoveron”:“points”,“name”:“(#39A811,1)”,“legendgroup”:“(#39A811,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[6.61415092544181],“y”:[-88.0080794757077],“text”:“HUE: 252<br />SAT: 82<br />VAL: 66<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(58,30,168,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(58,30,168,1)”}},“hoveron”:“points”,“name”:“(#3A1EA8,1)”,“legendgroup”:“(#3A1EA8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.3104704964689],“y”:[40.5892384846043],“text”:“HUE: 39<br />SAT: 88<br />VAL: 23<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(59,41,7,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(59,41,7,1)”}},“hoveron”:“points”,“name”:“(#3B2907,1)”,“legendgroup”:“(#3B2907,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-4.44621552159736],“y”:[13.5223110940146],“text”:“HUE: 91<br />SAT: 27<br />VAL: 27<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(59,69,50,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(59,69,50,1)”}},“hoveron”:“points”,“name”:“(#3B4532,1)”,“legendgroup”:“(#3B4532,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000308202562169398],“y”:[0.0043003686248987],“text”:“HUE: 285<br />SAT: 0<br />VAL: 24<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(61,61,61,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(61,61,61,1)”}},“hoveron”:“points”,“name”:“(#3D3D3D,1)”,“legendgroup”:“(#3D3D3D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-52.9406162219963],“y”:[91.2421055548225],“text”:“HUE: 108<br />SAT: 92<br />VAL: 90<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(61,230,18,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(61,230,18,1)”}},“hoveron”:“points”,“name”:“(#3DE612,1)”,“legendgroup”:“(#3DE612,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.05249579234565],“y”:[-120.452833142675],“text”:“HUE: 252<br />SAT: 92<br />VAL: 94<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(63,19,240,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(63,19,240,1)”}},“hoveron”:“points”,“name”:“(#3F13F0,1)”,“legendgroup”:“(#3F13F0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.257418653545],“y”:[-63.1591161114951],“text”:“HUE: 267<br />SAT: 78<br />VAL: 43<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(63,24,110,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(63,24,110,1)”}},“hoveron”:“points”,“name”:“(#3F186E,1)”,“legendgroup”:“(#3F186E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[15.1382989699246],“y”:[-133.400443766178],“text”:“HUE: 255<br />SAT: 100<br />VAL: 100<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(64,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(64,0,255,1)”}},“hoveron”:“points”,“name”:“(#4000FF,1)”,“legendgroup”:“(#4000FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.833468052229226],“y”:[6.13003821578849],“text”:“HUE: 55<br />SAT: 13<br />VAL: 25<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(64,63,55,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(64,63,55,1)”}},“hoveron”:“points”,“name”:“(#403F37,1)”,“legendgroup”:“(#403F37,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[15.1392451778358],“y”:[-119.777498633719],“text”:“HUE: 256<br />SAT: 96<br />VAL: 86<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(65,9,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(65,9,219,1)”}},“hoveron”:“points”,“name”:“(#4109DB,1)”,“legendgroup”:“(#4109DB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-16.56635202867],“y”:[-73.0041800621195],“text”:“HUE: 229<br />SAT: 73<br />VAL: 95<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(65,98,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(65,98,242,1)”}},“hoveron”:“points”,“name”:“(#4162F2,1)”,“legendgroup”:“(#4162F2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.4998856865084],“y”:[31.2811506642145],“text”:“HUE: 34<br />SAT: 73<br />VAL: 27<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(69,47,19,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(69,47,19,1)”}},“hoveron”:“points”,“name”:“(#452F13,1)”,“legendgroup”:“(#452F13,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.5604821789604],“y”:[8.21763238212438],“text”:“HUE: 15<br />SAT: 37<br />VAL: 27<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(69,50,43,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(69,50,43,1)”}},“hoveron”:“points”,“name”:“(#45322B,1)”,“legendgroup”:“(#45322B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-51.7752812358981],“y”:[99.7944658419766],“text”:“HUE: 104<br />SAT: 96<br />VAL: 97<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(73,247,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(73,247,10,1)”}},“hoveron”:“points”,“name”:“(#49F70A,1)”,“legendgroup”:“(#49F70A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[14.9539777210532],“y”:[-118.31155461271],“text”:“HUE: 256<br />SAT: 93<br />VAL: 91<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(74,16,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(74,16,232,1)”}},“hoveron”:“points”,“name”:“(#4A10E8,1)”,“legendgroup”:“(#4A10E8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[18.4263158033586],“y”:[40.8651899853147],“text”:“HUE: 38<br />SAT: 83<br />VAL: 29<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(74,51,13,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(74,51,13,1)”}},“hoveron”:“points”,“name”:“(#4A330D,1)”,“legendgroup”:“(#4A330D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-33.2566184357975],“y”:[80.1812142287785],“text”:“HUE: 97<br />SAT: 91<br />VAL: 67<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(75,171,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(75,171,15,1)”}},“hoveron”:“points”,“name”:“(#4BAB0F,1)”,“legendgroup”:“(#4BAB0F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-50.3956393302675],“y”:[76.4665955042189],“text”:“HUE: 113<br />SAT: 79<br />VAL: 98<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(76,250,52,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(76,250,52,1)”}},“hoveron”:“points”,“name”:“(#4CFA34,1)”,“legendgroup”:“(#4CFA34,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.1445179692063],“y”:[-121.672896882976],“text”:“HUE: 259<br />SAT: 97<br />VAL: 89<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(77,7,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(77,7,227,1)”}},“hoveron”:“points”,“name”:“(#4D07E3,1)”,“legendgroup”:“(#4D07E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[55.7732877784264],“y”:[32.4253534476036],“text”:“HUE: 13<br />SAT: 95<br />VAL: 30<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(77,20,4,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(77,20,4,1)”}},“hoveron”:“points”,“name”:“(#4D1404,1)”,“legendgroup”:“(#4D1404,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.7523517151561],“y”:[31.7130880004972],“text”:“HUE: 31<br />SAT: 74<br />VAL: 30<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(77,49,20,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(77,49,20,1)”}},“hoveron”:“points”,“name”:“(#4D3114,1)”,“legendgroup”:“(#4D3114,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.65121890631221],“y”:[27.4455080402562],“text”:“HUE: 58<br />SAT: 48<br />VAL: 30<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(77,75,40,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(77,75,40,1)”}},“hoveron”:“points”,“name”:“(#4D4B28,1)”,“legendgroup”:“(#4D4B28,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-42.1597426197316],“y”:[-20.3159187609253],“text”:“HUE: 190<br />SAT: 70<br />VAL: 100<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(77,225,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(77,225,255,1)”}},“hoveron”:“points”,“name”:“(#4DE1FF,1)”,“legendgroup”:“(#4DE1FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[18.5030838892512],“y”:[9.51393441191739],“text”:“HUE: 11<br />SAT: 45<br />VAL: 31<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(79,50,43,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(79,50,43,1)”}},“hoveron”:“points”,“name”:“(#4F322B,1)”,“legendgroup”:“(#4F322B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.415131981981],“y”:[-98.2244863030274],“text”:“HUE: 256<br />SAT: 84<br />VAL: 82<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(80,33,209,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(80,33,209,1)”}},“hoveron”:“points”,“name”:“(#5021D1,1)”,“legendgroup”:“(#5021D1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[21.8814819057257],“y”:[-132.164376230965],“text”:“HUE: 259<br />SAT: 100<br />VAL: 100<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(81,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(81,0,255,1)”}},“hoveron”:“points”,“name”:“(#5100FF,1)”,“legendgroup”:“(#5100FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[26.1275470181594],“y”:[-100.679964840068],“text”:“HUE: 266<br />SAT: 94<br />VAL: 68<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(81,10,173,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(81,10,173,1)”}},“hoveron”:“points”,“name”:“(#510AAD,1)”,“legendgroup”:“(#510AAD,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.720007689612126],“y”:[-60.4142176516957],“text”:“HUE: 245<br />SAT: 60<br />VAL: 71<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(81,72,181,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(81,72,181,1)”}},“hoveron”:“points”,“name”:“(#5148B5,1)”,“legendgroup”:“(#5148B5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.13994392771166],“y”:[17.2304145703326],“text”:“HUE: 35<br />SAT: 42<br />VAL: 32<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(82,67,47,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(82,67,47,1)”}},“hoveron”:“points”,“name”:“(#52432F,1)”,“legendgroup”:“(#52432F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.07483461537496],“y”:[24.6455495302031],“text”:“HUE: 59<br />SAT: 42<br />VAL: 32<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(82,81,47,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(82,81,47,1)”}},“hoveron”:“points”,“name”:“(#52512F,1)”,“legendgroup”:“(#52512F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.398209146815196],“y”:[0.0908123713593142],“text”:“HUE: 0<br />SAT: 1<br />VAL: 32<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(82,81,81,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(82,81,81,1)”}},“hoveron”:“points”,“name”:“(#525151,1)”,“legendgroup”:“(#525151,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-38.0935798355199],“y”:[83.0213898606157],“text”:“HUE: 100<br />SAT: 89<br />VAL: 79<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(82,201,22,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(82,201,22,1)”}},“hoveron”:“points”,“name”:“(#52C916,1)”,“legendgroup”:“(#52C916,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.4983611486336],“y”:[-123.810039427105],“text”:“HUE: 259<br />SAT: 96<br />VAL: 95<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(83,10,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(83,10,242,1)”}},“hoveron”:“points”,“name”:“(#530AF2,1)”,“legendgroup”:“(#530AF2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[10.9872468355523],“y”:[-96.8201683489202],“text”:“HUE: 255<br />SAT: 82<br />VAL: 85<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(83,39,217,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(83,39,217,1)”}},“hoveron”:“points”,“name”:“(#5327D9,1)”,“legendgroup”:“(#5327D9,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[65.5393848598456],“y”:[14.1404765556412],“text”:“HUE: 0<br />SAT: 84<br />VAL: 33<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(84,13,13,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(84,13,13,1)”}},“hoveron”:“points”,“name”:“(#540D0D,1)”,“legendgroup”:“(#540D0D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.3747725584944],“y”:[26.6736394280473],“text”:“HUE: 28<br />SAT: 66<br />VAL: 33<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(84,55,29,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(84,55,29,1)”}},“hoveron”:“points”,“name”:“(#54371D,1)”,“legendgroup”:“(#54371D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000352564350152437],“y”:[0.00491935128237716],“text”:“HUE: 15<br />SAT: 0<br />VAL: 33<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(84,84,84,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(84,84,84,1)”}},“hoveron”:“points”,“name”:“(#545454,1)”,“legendgroup”:“(#545454,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-34.3007966704973],“y”:[59.1185403488956],“text”:“HUE: 108<br />SAT: 70<br />VAL: 75<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(84,191,57,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(84,191,57,1)”}},“hoveron”:“points”,“name”:“(#54BF39,1)”,“legendgroup”:“(#54BF39,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-43.1205146132273],“y”:[85.6093691186125],“text”:“HUE: 103<br />SAT: 88<br />VAL: 89<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(84,227,27,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(84,227,27,1)”}},“hoveron”:“points”,“name”:“(#54E31B,1)”,“legendgroup”:“(#54E31B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[23.5581952914109],“y”:[-131.785067247704],“text”:“HUE: 260<br />SAT: 100<br />VAL: 100<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(85,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(85,0,255,1)”}},“hoveron”:“points”,“name”:“(#5500FF,1)”,“legendgroup”:“(#5500FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[16.7227383225177],“y”:[-119.979553124055],“text”:“HUE: 257<br />SAT: 92<br />VAL: 98<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(85,20,250,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(85,20,250,1)”}},“hoveron”:“points”,“name”:“(#5514FA,1)”,“legendgroup”:“(#5514FA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.510548348975],“y”:[-91.0674974406055],“text”:“HUE: 256<br />SAT: 80<br />VAL: 81<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(85,41,207,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(85,41,207,1)”}},“hoveron”:“points”,“name”:“(#5529CF,1)”,“legendgroup”:“(#5529CF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[34.227192460991],“y”:[-104.066334240817],“text”:“HUE: 271<br />SAT: 100<br />VAL: 65<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(86,0,166,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(86,0,166,1)”}},“hoveron”:“points”,“name”:“(#5600A6,1)”,“legendgroup”:“(#5600A6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[21.4209510064845],“y”:[-82.5427522753735],“text”:“HUE: 266<br />SAT: 83<br />VAL: 64<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(86,28,163,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(86,28,163,1)”}},“hoveron”:“points”,“name”:“(#561CA3,1)”,“legendgroup”:“(#561CA3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[27.0909901759349],“y”:[-123.816100563086],“text”:“HUE: 263<br />SAT: 100<br />VAL: 89<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,0,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,0,227,1)”}},“hoveron”:“points”,“name”:“(#5700E3,1)”,“legendgroup”:“(#5700E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[43.1421285674317],“y”:[9.3097677782047],“text”:“HUE: 0<br />SAT: 67<br />VAL: 34<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,29,29,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,29,29,1)”}},“hoveron”:“points”,“name”:“(#571D1D,1)”,“legendgroup”:“(#571D1D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[49.1594886210533],“y”:[38.0524159029016],“text”:“HUE: 18<br />SAT: 94<br />VAL: 34<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,30,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,30,5,1)”}},“hoveron”:“points”,“name”:“(#571E05,1)”,“legendgroup”:“(#571E05,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.2724036190952],“y”:[-68.6505252861873],“text”:“HUE: 260<br />SAT: 71<br />VAL: 65<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,48,166,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,48,166,1)”}},“hoveron”:“points”,“name”:“(#5730A6,1)”,“legendgroup”:“(#5730A6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.7204119631575],“y”:[-1.27006068405185],“text”:“HUE: 346<br />SAT: 26<br />VAL: 34<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,64,69,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,64,69,1)”}},“hoveron”:“points”,“name”:“(#574045,1)”,“legendgroup”:“(#574045,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.38193362110389],“y”:[0.715351694143398],“text”:“HUE: 11<br />SAT: 4<br />VAL: 34<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(87,84,83,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(87,84,83,1)”}},“hoveron”:“points”,“name”:“(#575453,1)”,“legendgroup”:“(#575453,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[26.7574649504288],“y”:[-103.107211137402],“text”:“HUE: 266<br />SAT: 93<br />VAL: 74<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(89,13,189,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(89,13,189,1)”}},“hoveron”:“points”,“name”:“(#590DBD,1)”,“legendgroup”:“(#590DBD,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.3882953048188],“y”:[17.5449605077955],“text”:“HUE: 10<br />SAT: 69<br />VAL: 35<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(89,38,28,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(89,38,28,1)”}},“hoveron”:“points”,“name”:“(#59261C,1)”,“legendgroup”:“(#59261C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[16.3904983862297],“y”:[43.0848006027842],“text”:“HUE: 41<br />SAT: 79<br />VAL: 35<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(89,67,19,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(89,67,19,1)”}},“hoveron”:“points”,“name”:“(#594313,1)”,“legendgroup”:“(#594313,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[13.8740185565127],“y”:[30.771028861608],“text”:“HUE: 38<br />SAT: 63<br />VAL: 35<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(89,69,33,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(89,69,33,1)”}},“hoveron”:“points”,“name”:“(#594521,1)”,“legendgroup”:“(#594521,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[26.5169942447004],“y”:[-121.192564425982],“text”:“HUE: 263<br />SAT: 98<br />VAL: 89<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(90,5,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(90,5,227,1)”}},“hoveron”:“points”,“name”:“(#5A05E3,1)”,“legendgroup”:“(#5A05E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[16.8592942749145],“y”:[-82.0867832278643],“text”:“HUE: 262<br />SAT: 79<br />VAL: 71<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(90,38,181,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(90,38,181,1)”}},“hoveron”:“points”,“name”:“(#5A26B5,1)”,“legendgroup”:“(#5A26B5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[30.5173701839135],“y”:[-111.690263919173],“text”:“HUE: 267<br />SAT: 98<br />VAL: 77<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(91,4,196,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(91,4,196,1)”}},“hoveron”:“points”,“name”:“(#5B04C4,1)”,“legendgroup”:“(#5B04C4,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-38.0714763375106],“y”:[62.2635833278288],“text”:“HUE: 110<br />SAT: 70<br />VAL: 86<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(91,219,66,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(91,219,66,1)”}},“hoveron”:“points”,“name”:“(#5BDB42,1)”,“legendgroup”:“(#5BDB42,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.2673959328527],“y”:[0.967903646706451],“text”:“HUE: 354<br />SAT: 26<br />VAL: 36<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(92,68,70,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(92,68,70,1)”}},“hoveron”:“points”,“name”:“(#5C4446,1)”,“legendgroup”:“(#5C4446,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.6138983570971],“y”:[2.68727309297392],“text”:“HUE: 13<br />SAT: 13<br />VAL: 36<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(92,82,80,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(92,82,80,1)”}},“hoveron”:“points”,“name”:“(#5C5250,1)”,“legendgroup”:“(#5C5250,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[21.3963971942025],“y”:[28.0110996173797],“text”:“HUE: 28<br />SAT: 66<br />VAL: 37<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(94,61,32,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(94,61,32,1)”}},“hoveron”:“points”,“name”:“(#5E3D20,1)”,“legendgroup”:“(#5E3D20,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.26892048550868],“y”:[2.97538823149142],“text”:“HUE: 28<br />SAT: 9<br />VAL: 37<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(94,90,86,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(94,90,86,1)”}},“hoveron”:“points”,“name”:“(#5E5A56,1)”,“legendgroup”:“(#5E5A56,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.491527190733219],“y”:[0.648992272453545],“text”:“HUE: 28<br />SAT: 2<br />VAL: 37<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(94,93,92,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(94,93,92,1)”}},“hoveron”:“points”,“name”:“(#5E5D5C,1)”,“legendgroup”:“(#5E5D5C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[38.8980927638591],“y”:[-77.2182011826289],“text”:“HUE: 283<br />SAT: 91<br />VAL: 50<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(95,11,128,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(95,11,128,1)”}},“hoveron”:“points”,“name”:“(#5F0B80,1)”,“legendgroup”:“(#5F0B80,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.337733967438],“y”:[-97.6360948501653],“text”:“HUE: 266<br />SAT: 89<br />VAL: 75<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(95,21,191,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(95,21,191,1)”}},“hoveron”:“points”,“name”:“(#5F15BF,1)”,“legendgroup”:“(#5F15BF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.8194178142166],“y”:[-94.4954962584719],“text”:“HUE: 267<br />SAT: 88<br />VAL: 73<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(96,22,186,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(96,22,186,1)”}},“hoveron”:“points”,“name”:“(#6016BA,1)”,“legendgroup”:“(#6016BA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.64714085932578],“y”:[-65.8814207462639],“text”:“HUE: 248<br />SAT: 62<br />VAL: 81<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(96,78,207,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(96,78,207,1)”}},“hoveron”:“points”,“name”:“(#604ECF,1)”,“legendgroup”:“(#604ECF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.4052329700885],“y”:[55.6300768849869],“text”:“HUE: 31<br />SAT: 100<br />VAL: 38<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(97,50,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(97,50,0,1)”}},“hoveron”:“points”,“name”:“(#613200,1)”,“legendgroup”:“(#613200,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[53.3308062224646],“y”:[27.4132074167253],“text”:“HUE: 11<br />SAT: 85<br />VAL: 39<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(99,30,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(99,30,15,1)”}},“hoveron”:“points”,“name”:“(#631E0F,1)”,“legendgroup”:“(#631E0F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[39.2633013466377],“y”:[33.8735560076931],“text”:“HUE: 20<br />SAT: 83<br />VAL: 39<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(99,44,17,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(99,44,17,1)”}},“hoveron”:“points”,“name”:“(#632C11,1)”,“legendgroup”:“(#632C11,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.9301614435445],“y”:[-94.3872719564655],“text”:“HUE: 256<br />SAT: 79<br />VAL: 92<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(99,49,235,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(99,49,235,1)”}},“hoveron”:“points”,“name”:“(#6331EB,1)”,“legendgroup”:“(#6331EB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[22.8042663403618],“y”:[11.7248917063415],“text”:“HUE: 11<br />SAT: 49<br />VAL: 39<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(99,60,51,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(99,60,51,1)”}},“hoveron”:“points”,“name”:“(#633C33,1)”,“legendgroup”:“(#633C33,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[6.4789814659848],“y”:[-86.2094557535794],“text”:“HUE: 252<br />SAT: 73<br />VAL: 93<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(99,64,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(99,64,237,1)”}},“hoveron”:“points”,“name”:“(#6340ED,1)”,“legendgroup”:“(#6340ED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[16.4668841646233],“y”:[-99.4590713221774],“text”:“HUE: 259<br />SAT: 83<br />VAL: 91<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(100,39,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(100,39,232,1)”}},“hoveron”:“points”,“name”:“(#6427E8,1)”,“legendgroup”:“(#6427E8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[38.2803829685544],“y”:[-103.047284847048],“text”:“HUE: 274<br />SAT: 98<br />VAL: 69<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(101,4,176,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(101,4,176,1)”}},“hoveron”:“points”,“name”:“(#6504B0,1)”,“legendgroup”:“(#6504B0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[30.3415466301825],“y”:[-75.79928205675],“text”:“HUE: 276<br />SAT: 83<br />VAL: 59<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(101,26,150,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(101,26,150,1)”}},“hoveron”:“points”,“name”:“(#651A96,1)”,“legendgroup”:“(#651A96,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.36068870498],“y”:[-104.857758817611],“text”:“HUE: 259<br />SAT: 85<br />VAL: 95<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(102,36,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(102,36,242,1)”}},“hoveron”:“points”,“name”:“(#6624F2,1)”,“legendgroup”:“(#6624F2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[39.7797121534226],“y”:[8.58490811245092],“text”:“HUE: 0<br />SAT: 61<br />VAL: 40<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(102,40,40,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(102,40,40,1)”}},“hoveron”:“points”,“name”:“(#662828,1)”,“legendgroup”:“(#662828,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.2810423591759],“y”:[-113.451814481679],“text”:“HUE: 260<br />SAT: 89<br />VAL: 99<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(103,28,252,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(103,28,252,1)”}},“hoveron”:“points”,“name”:“(#671CFC,1)”,“legendgroup”:“(#671CFC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-29.4910623953008],“y”:[-21.5905255169291],“text”:“HUE: 197<br />SAT: 57<br />VAL: 95<br />colorName: Blue”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(104,203,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(104,203,242,1)”}},“hoveron”:“points”,“name”:“(#68CBF2,1)”,“legendgroup”:“(#68CBF2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[47.8635042501868],“y”:[-78.2674055423557],“text”:“HUE: 290<br />SAT: 95<br />VAL: 49<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(105,6,125,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(105,6,125,1)”}},“hoveron”:“points”,“name”:“(#69067D,1)”,“legendgroup”:“(#69067D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[20.3845469350563],“y”:[-78.5486004745531],“text”:“HUE: 266<br />SAT: 77<br />VAL: 73<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(105,43,186,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(105,43,186,1)”}},“hoveron”:“points”,“name”:“(#692BBA,1)”,“legendgroup”:“(#692BBA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.2220307424124],“y”:[7.81763868637469],“text”:“HUE: 0<br />SAT: 57<br />VAL: 41<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(105,45,45,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(105,45,45,1)”}},“hoveron”:“points”,“name”:“(#692D2D,1)”,“legendgroup”:“(#692D2D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.366215048283988],“y”:[0.864871419567228],“text”:“HUE: 39<br />SAT: 2<br />VAL: 41<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(105,104,102,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(105,104,102,1)”}},“hoveron”:“points”,“name”:“(#696866,1)”,“legendgroup”:“(#696866,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[32.9329561800503],“y”:[-109.444894198062],“text”:“HUE: 269<br />SAT: 95<br />VAL: 82<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(106,10,209,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(106,10,209,1)”}},“hoveron”:“points”,“name”:“(#6A0AD1,1)”,“legendgroup”:“(#6A0AD1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[24.6771589236017],“y”:[-106.231301070274],“text”:“HUE: 264<br />SAT: 89<br />VAL: 89<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(106,25,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(106,25,227,1)”}},“hoveron”:“points”,“name”:“(#6A19E3,1)”,“legendgroup”:“(#6A19E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[39.0154934476353],“y”:[51.0729760187977],“text”:“HUE: 28<br />SAT: 95<br />VAL: 42<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(107,53,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(107,53,5,1)”}},“hoveron”:“points”,“name”:“(#6B3505,1)”,“legendgroup”:“(#6B3505,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[13.0826382835501],“y”:[-93.862335780583],“text”:“HUE: 257<br />SAT: 78<br />VAL: 96<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(108,54,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(108,54,245,1)”}},“hoveron”:“points”,“name”:“(#6C36F5,1)”,“legendgroup”:“(#6C36F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[49.5668920257465],“y”:[-85.4191486483708],“text”:“HUE: 288<br />SAT: 98<br />VAL: 53<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(109,3,135,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(109,3,135,1)”}},“hoveron”:“points”,“name”:“(#6D0387,1)”,“legendgroup”:“(#6D0387,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[35.6808749121523],“y”:[57.4295647482587],“text”:“HUE: 32<br />SAT: 98<br />VAL: 43<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(110,60,2,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(110,60,2,1)”}},“hoveron”:“points”,“name”:“(#6E3C02,1)”,“legendgroup”:“(#6E3C02,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000393194734985453,-0.000393194734985453],“y”:[0.00548626945137003,0.00548626945137003],“text”:[“HUE: 35<br />SAT: 0<br />VAL: 43<br />colorName: Gray”,“HUE: 21<br />SAT: 0<br />VAL: 43<br />colorName: Gray”],“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(110,110,110,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(110,110,110,1)”}},“hoveron”:“points”,“name”:“(#6E6E6E,1)”,“legendgroup”:“(#6E6E6E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-34.9366382385641],“y”:[97.8129169905905],“text”:“HUE: 93<br />SAT: 96<br />VAL: 92<br />colorName: Green”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(111,235,9,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(111,235,9,1)”}},“hoveron”:“points”,“name”:“(#6FEB09,1)”,“legendgroup”:“(#6FEB09,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[24.2303495410379],“y”:[-104.307680339625],“text”:“HUE: 264<br />SAT: 87<br />VAL: 92<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(112,30,235,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(112,30,235,1)”}},“hoveron”:“points”,“name”:“(#701EEB,1)”,“legendgroup”:“(#701EEB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[3.82062258901343],“y”:[5.84371431957712],“text”:“HUE: 31<br />SAT: 15<br />VAL: 44<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(112,104,95,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(112,104,95,1)”}},“hoveron”:“points”,“name”:“(#70685F,1)”,“legendgroup”:“(#70685F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[33.7458108063072],“y”:[-102.602039926363],“text”:“HUE: 271<br />SAT: 92<br />VAL: 80<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(113,16,204,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(113,16,204,1)”}},“hoveron”:“points”,“name”:“(#7110CC,1)”,“legendgroup”:“(#7110CC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[33.2719905310859],“y”:[62.7101484082494],“text”:“HUE: 35<br />SAT: 100<br />VAL: 45<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(115,67,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(115,67,0,1)”}},“hoveron”:“points”,“name”:“(#734300,1)”,“legendgroup”:“(#734300,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000400541131711603],“y”:[0.00558877416127435],“text”:“HUE: 0<br />SAT: 0<br />VAL: 45<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(115,115,115,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(115,115,115,1)”}},“hoveron”:“points”,“name”:“(#737373,1)”,“legendgroup”:“(#737373,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[45.4275751716434],“y”:[-90.1805025442773],“text”:“HUE: 283<br />SAT: 95<br />VAL: 62<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(116,8,158,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(116,8,158,1)”}},“hoveron”:“points”,“name”:“(#74089E,1)”,“legendgroup”:“(#74089E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[35.1991227918894],“y”:[-111.791328260829],“text”:“HUE: 270<br />SAT: 95<br />VAL: 87<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(116,11,222,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(116,11,222,1)”}},“hoveron”:“points”,“name”:“(#740BDE,1)”,“legendgroup”:“(#740BDE,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[26.2638028937188],“y”:[-41.8650329438399],“text”:“HUE: 291<br />SAT: 59<br />VAL: 50<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(116,52,128,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(116,52,128,1)”}},“hoveron”:“points”,“name”:“(#743480,1)”,“legendgroup”:“(#743480,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.998016590776573],“y”:[1.53113574098726],“text”:“HUE: 31<br />SAT: 4<br />VAL: 46<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(117,115,113,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(117,115,113,1)”}},“hoveron”:“points”,“name”:“(#757371,1)”,“legendgroup”:“(#757371,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.4924156005272],“y”:[-69.4124150690382],“text”:“HUE: 259<br />SAT: 66<br />VAL: 84<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(118,73,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(118,73,214,1)”}},“hoveron”:“points”,“name”:“(#7649D6,1)”,“legendgroup”:“(#7649D6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000407672957792846],“y”:[0.005688284953155],“text”:“HUE: 354<br />SAT: 0<br />VAL: 47<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(120,120,120,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(120,120,120,1)”}},“hoveron”:“points”,“name”:“(#787878,1)”,“legendgroup”:“(#787878,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[37.401254851256],“y”:[-124.294615121707],“text”:“HUE: 269<br />SAT: 99<br />VAL: 97<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(121,2,247,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(121,2,247,1)”}},“hoveron”:“points”,“name”:“(#7902F7,1)”,“legendgroup”:“(#7902F7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[37.4799680466901],“y”:[-113.955902597427],“text”:“HUE: 271<br />SAT: 96<br />VAL: 89<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(122,9,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(122,9,227,1)”}},“hoveron”:“points”,“name”:“(#7A09E3,1)”,“legendgroup”:“(#7A09E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000411163164305258],“y”:[0.00573698401157537],“text”:“HUE: 59<br />SAT: 0<br />VAL: 48<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(122,122,122,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(122,122,122,1)”}},“hoveron”:“points”,“name”:“(#7A7A7A,1)”,“legendgroup”:“(#7A7A7A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[49.0967176188691,49.0967176188691],“y”:[-103.634684170079,-103.634684170079],“text”:[“HUE: 281<br />SAT: 100<br />VAL: 71<br />colorName: Violet”,“HUE: 281<br />SAT: 100<br />VAL: 71<br />colorName: Purple”],“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(124,0,181,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(124,0,181,1)”}},“hoveron”:“points”,“name”:“(#7C00B5,1)”,“legendgroup”:“(#7C00B5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.700795424881],“y”:[-85.4662095495703],“text”:“HUE: 278<br />SAT: 86<br />VAL: 71<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(124,25,181,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(124,25,181,1)”}},“hoveron”:“points”,“name”:“(#7C19B5,1)”,“legendgroup”:“(#7C19B5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.5960962919751],“y”:[-67.9863673200661],“text”:“HUE: 300<br />SAT: 89<br />VAL: 49<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(125,14,125,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(125,14,125,1)”}},“hoveron”:“points”,“name”:“(#7D0E7D,1)”,“legendgroup”:“(#7D0E7D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[63.6632124735737],“y”:[13.7366741803505],“text”:“HUE: 0<br />SAT: 76<br />VAL: 49<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(125,30,30,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(125,30,30,1)”}},“hoveron”:“points”,“name”:“(#7D1E1E,1)”,“legendgroup”:“(#7D1E1E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[10.3148887947046],“y”:[4.97787744819112],“text”:“HUE: 10<br />SAT: 23<br />VAL: 49<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(125,101,96,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(125,101,96,1)”}},“hoveron”:“points”,“name”:“(#7D6560,1)”,“legendgroup”:“(#7D6560,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[35.5159759813135],“y”:[-107.984117097503],“text”:“HUE: 271<br />SAT: 92<br />VAL: 90<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(127,18,230,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(127,18,230,1)”}},“hoveron”:“points”,“name”:“(#7F12E6,1)”,“legendgroup”:“(#7F12E6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[39.9776727172827],“y”:[-126.968352358824],“text”:“HUE: 270<br />SAT: 100<br />VAL: 100<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(128,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(128,0,255,1)”}},“hoveron”:“points”,“name”:“(#8000FF,1)”,“legendgroup”:“(#8000FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[33.7562826406602],“y”:[54.3325651544911],“text”:“HUE: 32<br />SAT: 91<br />VAL: 50<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(128,73,11,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(128,73,11,1)”}},“hoveron”:“points”,“name”:“(#80490B,1)”,“legendgroup”:“(#80490B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000418000770170373],“y”:[0.00583238953164888],“text”:“HUE: 21<br />SAT: 0<br />VAL: 50<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(128,128,128,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(128,128,128,1)”}},“hoveron”:“points”,“name”:“(#808080,1)”,“legendgroup”:“(#808080,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.4729797216513],“y”:[-80.8999174973413],“text”:“HUE: 270<br />SAT: 77<br />VAL: 82<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(129,48,209,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(129,48,209,1)”}},“hoveron”:“points”,“name”:“(#8130D1,1)”,“legendgroup”:“(#8130D1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[15.2231412777048],“y”:[-85.1568233740041],“text”:“HUE: 260<br />SAT: 73<br />VAL: 99<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(130,68,252,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(130,68,252,1)”}},“hoveron”:“points”,“name”:“(#8244FC,1)”,“legendgroup”:“(#8244FC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.05254067510671],“y”:[-52.8237731883945],“text”:“HUE: 258<br />SAT: 54<br />VAL: 82<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(130,96,209,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(130,96,209,1)”}},“hoveron”:“points”,“name”:“(#8260D1,1)”,“legendgroup”:“(#8260D1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.9689622023031],“y”:[0.646283577072322],“text”:“HUE: 0<br />SAT: 6<br />VAL: 51<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(130,122,122,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(130,122,122,1)”}},“hoveron”:“points”,“name”:“(#827A7A,1)”,“legendgroup”:“(#827A7A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.00042135133671596],“y”:[0.0058791401857182],“text”:“HUE: 32<br />SAT: 0<br />VAL: 51<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(130,130,130,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(130,130,130,1)”}},“hoveron”:“points”,“name”:“(#828282,1)”,“legendgroup”:“(#828282,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[34.5891601589812],“y”:[-105.165999387252],“text”:“HUE: 271<br />SAT: 90<br />VAL: 91<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(131,23,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(131,23,232,1)”}},“hoveron”:“points”,“name”:“(#8317E8,1)”,“legendgroup”:“(#8317E8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.0418991356379],“y”:[-96.4954909506075],“text”:“HUE: 266<br />SAT: 82<br />VAL: 96<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(131,44,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(131,44,245,1)”}},“hoveron”:“points”,“name”:“(#832CF5,1)”,“legendgroup”:“(#832CF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[47.2312536137266],“y”:[-113.863686306913],“text”:“HUE: 277<br />SAT: 100<br />VAL: 84<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(132,0,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(132,0,214,1)”}},“hoveron”:“points”,“name”:“(#8400D6,1)”,“legendgroup”:“(#8400D6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[40.1226155595852],“y”:[-112.32267777789],“text”:“HUE: 273<br />SAT: 95<br />VAL: 91<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(133,12,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(133,12,232,1)”}},“hoveron”:“points”,“name”:“(#850CE8,1)”,“legendgroup”:“(#850CE8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[31.85146514897],“y”:[-101.158542714868],“text”:“HUE: 270<br />SAT: 87<br />VAL: 92<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(133,30,235,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(133,30,235,1)”}},“hoveron”:“points”,“name”:“(#851EEB,1)”,“legendgroup”:“(#851EEB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.98458579688228],“y”:[0.218407649048942],“text”:“HUE: 0<br />SAT: 2<br />VAL: 53<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(135,132,132,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(135,132,132,1)”}},“hoveron”:“points”,“name”:“(#878484,1)”,“legendgroup”:“(#878484,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.7538340419348],“y”:[-85.5895276566849],“text”:“HUE: 278<br />SAT: 84<br />VAL: 77<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(136,31,196,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(136,31,196,1)”}},“hoveron”:“points”,“name”:“(#881FC4,1)”,“legendgroup”:“(#881FC4,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-1.4876160298125],“y”:[-0.281031302081487],“text”:“HUE: 179<br />SAT: 3<br />VAL: 55<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(136,140,140,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(136,140,140,1)”}},“hoveron”:“points”,“name”:“(#888C8C,1)”,“legendgroup”:“(#888C8C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[37.5469535940055],“y”:[-109.46171540971],“text”:“HUE: 272<br />SAT: 92<br />VAL: 94<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(137,19,240,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(137,19,240,1)”}},“hoveron”:“points”,“name”:“(#8913F0,1)”,“legendgroup”:“(#8913F0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[42.8030258373657],“y”:[-103.187616848329],“text”:“HUE: 277<br />SAT: 93<br />VAL: 84<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(138,15,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(138,15,214,1)”}},“hoveron”:“points”,“name”:“(#8A0FD6,1)”,“legendgroup”:“(#8A0FD6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[35.6895691142198],“y”:[-77.77314226294],“text”:“HUE: 280<br />SAT: 80<br />VAL: 74<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(138,38,189,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(138,38,189,1)”}},“hoveron”:“points”,“name”:“(#8A26BD,1)”,“legendgroup”:“(#8A26BD,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.6653129689446],“y”:[-71.8477944963622],“text”:“HUE: 273<br />SAT: 72<br />VAL: 80<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(138,57,204,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(138,57,204,1)”}},“hoveron”:“points”,“name”:“(#8A39CC,1)”,“legendgroup”:“(#8A39CC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000431147409738017,-0.000431147409738017],“y”:[0.00601582537306956,0.00601582537306956],“text”:[“HUE: 212<br />SAT: 0<br />VAL: 54<br />colorName: Gray”,“HUE: 0<br />SAT: 0<br />VAL: 54<br />colorName: Gray”],“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(138,138,138,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(138,138,138,1)”}},“hoveron”:“points”,“name”:“(#8A8A8A,1)”,“legendgroup”:“(#8A8A8A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[47.708067665593],“y”:[-103.965137523873],“text”:“HUE: 280<br />SAT: 96<br />VAL: 80<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(139,8,204,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(139,8,204,1)”}},“hoveron”:“points”,“name”:“(#8B08CC,1)”,“legendgroup”:“(#8B08CC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[41.0629525456522],“y”:[-114.955137472143],“text”:“HUE: 273<br />SAT: 95<br />VAL: 96<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(140,12,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(140,12,245,1)”}},“hoveron”:“points”,“name”:“(#8C0CF5,1)”,“legendgroup”:“(#8C0CF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.347309589500923],“y”:[0.306016190960988],“text”:“HUE: 20<br />SAT: 1<br />VAL: 55<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(140,139,139,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(140,139,139,1)”}},“hoveron”:“points”,“name”:“(#8C8B8B,1)”,“legendgroup”:“(#8C8B8B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-27.2127995659547],“y”:[86.4348232967185],“text”:“HUE: 90<br />SAT: 86<br />VAL: 97<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(141,247,35,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(141,247,35,1)”}},“hoveron”:“points”,“name”:“(#8DF723,1)”,“legendgroup”:“(#8DF723,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[44.2641642283919],“y”:[-96.4597420547572],“text”:“HUE: 280<br />SAT: 91<br />VAL: 80<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(142,18,204,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(142,18,204,1)”}},“hoveron”:“points”,“name”:“(#8E12CC,1)”,“legendgroup”:“(#8E12CC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.69371506274936],“y”:[3.19885782177727],“text”:“HUE: 35<br />SAT: 7<br />VAL: 56<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(143,139,133,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(143,139,133,1)”}},“hoveron”:“points”,“name”:“(#8F8B85,1)”,“legendgroup”:“(#8F8B85,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000437478124487568],“y”:[0.00610415821135137],“text”:“HUE: 28<br />SAT: 0<br />VAL: 56<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(143,143,143,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(143,143,143,1)”}},“hoveron”:“points”,“name”:“(#8F8F8F,1)”,“legendgroup”:“(#8F8F8F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[46.3250243026529],“y”:[-124.702922520326],“text”:“HUE: 274<br />SAT: 100<br />VAL: 100<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(144,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(144,0,255,1)”}},“hoveron”:“points”,“name”:“(#9000FF,1)”,“legendgroup”:“(#9000FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[44.5304987722916],“y”:[-103.700212245301],“text”:“HUE: 278<br />SAT: 93<br />VAL: 86<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(145,15,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(145,15,219,1)”}},“hoveron”:“points”,“name”:“(#910FDB,1)”,“legendgroup”:“(#910FDB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[62.7883231805052],“y”:[57.1326215695977],“text”:“HUE: 21<br />SAT: 100<br />VAL: 57<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(145,51,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(145,51,0,1)”}},“hoveron”:“points”,“name”:“(#913300,1)”,“legendgroup”:“(#913300,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.48920733922596],“y”:[-32.7089539562792],“text”:“HUE: 266<br />SAT: 39<br />VAL: 73<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(145,114,186,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(145,114,186,1)”}},“hoveron”:“points”,“name”:“(#9172BA,1)”,“legendgroup”:“(#9172BA,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.52854971364523],“y”:[0.335903606093756],“text”:“HUE: 0<br />SAT: 3<br />VAL: 57<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(145,141,141,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(145,141,141,1)”}},“hoveron”:“points”,“name”:“(#918D8D,1)”,“legendgroup”:“(#918D8D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[53.0728017228703],“y”:[-80.5185475743477],“text”:“HUE: 293<br />SAT: 90<br />VAL: 64<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(146,16,163,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(146,16,163,1)”}},“hoveron”:“points”,“name”:“(#9210A3,1)”,“legendgroup”:“(#9210A3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[39.9850339264431],“y”:[-99.8913040006726],“text”:“HUE: 276<br />SAT: 89<br />VAL: 89<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(146,25,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(146,25,227,1)”}},“hoveron”:“points”,“name”:“(#9219E3,1)”,“legendgroup”:“(#9219E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[50.1822374939715],“y”:[-86.4788825833615],“text”:“HUE: 288<br />SAT: 90<br />VAL: 71<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(148,18,181,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(148,18,181,1)”}},“hoveron”:“points”,“name”:“(#9412B5,1)”,“legendgroup”:“(#9412B5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000446697511730528,-0.000446697511730528],“y”:[0.0062327968682183,0.0062327968682183],“text”:“HUE: 0<br />SAT: 0<br />VAL: 59<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(150,150,150,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(150,150,150,1)”}},“hoveron”:“points”,“name”:“(#969696,1)”,“legendgroup”:“(#969696,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[25.7157096630844],“y”:[-81.6704864299957],“text”:“HUE: 270<br />SAT: 74<br />VAL: 96<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(154,64,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(154,64,245,1)”}},“hoveron”:“points”,“name”:“(#9A40F5,1)”,“legendgroup”:“(#9A40F5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[18.8281875192899],“y”:[24.6508654387813],“text”:“HUE: 28<br />SAT: 51<br />VAL: 61<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(156,113,76,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(156,113,76,1)”}},“hoveron”:“points”,“name”:“(#9C714C,1)”,“legendgroup”:“(#9C714C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[50.9926762184306],“y”:[-122.931610843332],“text”:“HUE: 277<br />SAT: 100<br />VAL: 100<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(157,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(157,0,255,1)”}},“hoveron”:“points”,“name”:“(#9D00FF,1)”,“legendgroup”:“(#9D00FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[55.7506771944777],“y”:[-96.0754556974243],“text”:“HUE: 288<br />SAT: 95<br />VAL: 76<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(157,10,194,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(157,10,194,1)”}},“hoveron”:“points”,“name”:“(#9D0AC2,1)”,“legendgroup”:“(#9D0AC2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[27.2326154363484],“y”:[-73.3054708487761],“text”:“HUE: 274<br />SAT: 71<br />VAL: 89<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(157,66,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(157,66,227,1)”}},“hoveron”:“points”,“name”:“(#9D42E3,1)”,“legendgroup”:“(#9D42E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[32.6001826175266],“y”:[29.6668971407353],“text”:“HUE: 21<br />SAT: 66<br />VAL: 62<br />colorName: Brown”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(158,90,54,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(158,90,54,1)”}},“hoveron”:“points”,“name”:“(#9E5A36,1)”,“legendgroup”:“(#9E5A36,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000455609441175856],“y”:[0.00635714554862152],“text”:“HUE: 55<br />SAT: 0<br />VAL: 62<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(158,158,158,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(158,158,158,1)”}},“hoveron”:“points”,“name”:“(#9E9E9E,1)”,“legendgroup”:“(#9E9E9E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[42.426513445868],“y”:[-84.2218491817203],“text”:“HUE: 283<br />SAT: 83<br />VAL: 82<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(160,36,209,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(160,36,209,1)”}},“hoveron”:“points”,“name”:“(#A024D1,1)”,“legendgroup”:“(#A024D1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.000458516071257864],“y”:[0.00639770192966761],“text”:“HUE: 38<br />SAT: 0<br />VAL: 63<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(161,161,161,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(161,161,161,1)”}},“hoveron”:“points”,“name”:“(#A1A1A1,1)”,“legendgroup”:“(#A1A1A1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[31.779758708647],“y”:[-61.2459001304791],“text”:“HUE: 284<br />SAT: 67<br />VAL: 78<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(163,66,199,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(163,66,199,1)”}},“hoveron”:“points”,“name”:“(#A342C7,1)”,“legendgroup”:“(#A342C7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.14518194831089],“y”:[-2.66159957443659],“text”:“HUE: 278<br />SAT: 4<br />VAL: 65<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(163,159,166,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(163,159,166,1)”}},“hoveron”:“points”,“name”:“(#A39FA6,1)”,“legendgroup”:“(#A39FA6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.03609244820857],“y”:[-0.106323621474312],“text”:“HUE: 346<br />SAT: 2<br />VAL: 64<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(163,160,161,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(163,160,161,1)”}},“hoveron”:“points”,“name”:“(#A3A0A1,1)”,“legendgroup”:“(#A3A0A1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[56.3434604902864],“y”:[-105.4954636392],“text”:“HUE: 285<br />SAT: 97<br />VAL: 85<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(164,7,217,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(164,7,217,1)”}},“hoveron”:“points”,“name”:“(#A407D9,1)”,“legendgroup”:“(#A407D9,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.107328958249097],“y”:[-1.47456936149065],“text”:“HUE: 240<br />SAT: 2<br />VAL: 66<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(165,165,168,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(165,165,168,1)”}},“hoveron”:“points”,“name”:“(#A5A5A8,1)”,“legendgroup”:“(#A5A5A8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[58.4319780841375],“y”:[-93.1470841298468],“text”:“HUE: 291<br />SAT: 94<br />VAL: 76<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(166,12,194,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(166,12,194,1)”}},“hoveron”:“points”,“name”:“(#A60CC2,1)”,“legendgroup”:“(#A60CC2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[56.7734850398795],“y”:[-78.4206797629046],“text”:“HUE: 297<br />SAT: 88<br />VAL: 68<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(166,21,173,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(166,21,173,1)”}},“hoveron”:“points”,“name”:“(#A615AD,1)”,“legendgroup”:“(#A615AD,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[46.9304542966933],“y”:[-74.811215563656],“text”:“HUE: 291<br />SAT: 81<br />VAL: 74<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(166,36,189,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(166,36,189,1)”}},“hoveron”:“points”,“name”:“(#A624BD,1)”,“legendgroup”:“(#A624BD,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.7085723061642],“y”:[-38.586762472557],“text”:“HUE: 280<br />SAT: 46<br />VAL: 77<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(166,106,196,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(166,106,196,1)”}},“hoveron”:“points”,“name”:“(#A66AC4,1)”,“legendgroup”:“(#A66AC4,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[51.8576050724691],“y”:[-113.007784779894],“text”:“HUE: 280<br />SAT: 96<br />VAL: 97<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(168,10,247,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(168,10,247,1)”}},“hoveron”:“points”,“name”:“(#A80AF7,1)”,“legendgroup”:“(#A80AF7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[54.0586630627747],“y”:[-98.3969986239344],“text”:“HUE: 286<br />SAT: 93<br />VAL: 84<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(168,15,214,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(168,15,214,1)”}},“hoveron”:“points”,“name”:“(#A80FD6,1)”,“legendgroup”:“(#A80FD6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[55.5786622401926],“y”:[-121.117112355914],“text”:“HUE: 280<br />SAT: 100<br />VAL: 100<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(170,0,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(170,0,255,1)”}},“hoveron”:“points”,“name”:“(#AA00FF,1)”,“legendgroup”:“(#AA00FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.2428317195098],“y”:[-110.275097730982],“text”:“HUE: 281<br />SAT: 95<br />VAL: 96<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(171,12,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(171,12,245,1)”}},“hoveron”:“points”,“name”:“(#AB0CF5,1)”,“legendgroup”:“(#AB0CF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.7073514199345],“y”:[-84.0207393164214],“text”:“HUE: 291<br />SAT: 87<br />VAL: 77<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(171,26,196,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(171,26,196,1)”}},“hoveron”:“points”,“name”:“(#AB1AC4,1)”,“legendgroup”:“(#AB1AC4,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[45.6297813721245],“y”:[-48.9365327385791],“text”:“HUE: 308<br />SAT: 70<br />VAL: 67<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(171,51,155,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(171,51,155,1)”}},“hoveron”:“points”,“name”:“(#AB339B,1)”,“legendgroup”:“(#AB339B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.3374760948868],“y”:[-100.868234800832],“text”:“HUE: 284<br />SAT: 92<br />VAL: 90<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(173,18,230,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(173,18,230,1)”}},“hoveron”:“points”,“name”:“(#AD12E6,1)”,“legendgroup”:“(#AD12E6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[3.12227541432087],“y”:[-6.19283615189774],“text”:“HUE: 283<br />SAT: 9<br />VAL: 70<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(174,162,179,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(174,162,179,1)”}},“hoveron”:“points”,“name”:“(#AEA2B3,1)”,“legendgroup”:“(#AEA2B3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[36.7117556354289],“y”:[-80.0002062200359],“text”:“HUE: 280<br />SAT: 76<br />VAL: 94<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(179,58,240,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(179,58,240,1)”}},“hoveron”:“points”,“name”:“(#B33AF0,1)”,“legendgroup”:“(#B33AF0,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[72.8982316930767],“y”:[-76.2115516379912],“text”:“HUE: 309<br />SAT: 95<br />VAL: 71<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(181,9,155,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(181,9,155,1)”}},“hoveron”:“points”,“name”:“(#B5099B,1)”,“legendgroup”:“(#B5099B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-0.933544293077024],“y”:[2.84375747291672],“text”:“HUE: 91<br />SAT: 4<br />VAL: 73<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(182,186,179,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(182,186,179,1)”}},“hoveron”:“points”,“name”:“(#B6BAB3,1)”,“legendgroup”:“(#B6BAB3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[50.0661815845126],“y”:[-99.3882224729466],“text”:“HUE: 283<br />SAT: 89<br />VAL: 96<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(183,27,245,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(183,27,245,1)”}},“hoveron”:“points”,“name”:“(#B71BF5,1)”,“legendgroup”:“(#B71BF5,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[59.4810139973602],“y”:[-97.2644026701844],“text”:“HUE: 290<br />SAT: 93<br />VAL: 86<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(185,15,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(185,15,219,1)”}},“hoveron”:“points”,“name”:“(#B90FDB,1)”,“legendgroup”:“(#B90FDB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.5637672627633],“y”:[-39.8983600450041],“text”:“HUE: 270<br />SAT: 43<br />VAL: 93<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(186,135,237,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(186,135,237,1)”}},“hoveron”:“points”,“name”:“(#BA87ED,1)”,“legendgroup”:“(#BA87ED,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[17.3236759248021],“y”:[-41.7594136152389],“text”:“HUE: 277<br />SAT: 46<br />VAL: 91<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(191,125,232,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(191,125,232,1)”}},“hoveron”:“points”,“name”:“(#BF7DE8,1)”,“legendgroup”:“(#BF7DE8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[0.291912611592514],“y”:[3.03292002906258],“text”:“HUE: 58<br />SAT: 4<br />VAL: 75<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(191,191,184,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(191,191,184,1)”}},“hoveron”:“points”,“name”:“(#BFBFB8,1)”,“legendgroup”:“(#BFBFB8,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[44.3991190284693],“y”:[-76.5115776561231],“text”:“HUE: 288<br />SAT: 77<br />VAL: 89<br />colorName: Indigo”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(192,52,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(192,52,227,1)”}},“hoveron”:“points”,“name”:“(#C034E3,1)”,“legendgroup”:“(#C034E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[65.9617438807385],“y”:[-100.073436683755],“text”:“HUE: 293<br />SAT: 96<br />VAL: 86<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(195,9,219,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(195,9,219,1)”}},“hoveron”:“points”,“name”:“(#C309DB,1)”,“legendgroup”:“(#C309DB,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[15.1338801887361],“y”:[-40.7350096632459],“text”:“HUE: 274<br />SAT: 44<br />VAL: 95<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(196,136,242,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(196,136,242,1)”}},“hoveron”:“points”,“name”:“(#C488F2,1)”,“legendgroup”:“(#C488F2,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.94203434559093],“y”:[1.00528530313446],“text”:“HUE: 11<br />SAT: 4<br />VAL: 79<br />colorName: Gray”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(201,195,193,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(201,195,193,1)”}},“hoveron”:“points”,“name”:“(#C9C3C1,1)”,“legendgroup”:“(#C9C3C1,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[65.2763270336528],“y”:[-99.0333594706149],“text”:“HUE: 293<br />SAT: 94<br />VAL: 90<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(204,14,230,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(204,14,230,1)”}},“hoveron”:“points”,“name”:“(#CC0EE6,1)”,“legendgroup”:“(#CC0EE6,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.80397537784855],“y”:[-26.8698540219999],“text”:“HUE: 260<br />SAT: 29<br />VAL: 100<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(206,181,255,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(206,181,255,1)”}},“hoveron”:“points”,“name”:“(#CEB5FF,1)”,“legendgroup”:“(#CEB5FF,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[120.946141761698],“y”:[37.7442738848281],“text”:“HUE: 4<br />SAT: 96<br />VAL: 82<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(209,22,8,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(209,22,8,1)”}},“hoveron”:“points”,“name”:“(#D11608,1)”,“legendgroup”:“(#D11608,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[131.900621717972],“y”:[28.4561950738063],“text”:“HUE: 0<br />SAT: 94<br />VAL: 83<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(212,13,13,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(212,13,13,1)”}},“hoveron”:“points”,“name”:“(#D40D0D,1)”,“legendgroup”:“(#D40D0D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[103.776300576795],“y”:[-3.93167299378361],“text”:“HUE: 349<br />SAT: 90<br />VAL: 84<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(214,21,57,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(214,21,57,1)”}},“hoveron”:“points”,“name”:“(#D61539,1)”,“legendgroup”:“(#D61539,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[109.586842981646],“y”:[13.6540612789022],“text”:“HUE: 356<br />SAT: 89<br />VAL: 85<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(217,24,37,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(217,24,37,1)”}},“hoveron”:“points”,“name”:“(#D91825,1)”,“legendgroup”:“(#D91825,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[64.6228097334433],“y”:[-89.2629850155027],“text”:“HUE: 297<br />SAT: 89<br />VAL: 89<br />colorName: Purple”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(217,25,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(217,25,227,1)”}},“hoveron”:“points”,“name”:“(#D919E3,1)”,“legendgroup”:“(#D919E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[117.822860192208],“y”:[17.378230601798],“text”:“HUE: 357<br />SAT: 91<br />VAL: 86<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(219,20,30,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(219,20,30,1)”}},“hoveron”:“points”,“name”:“(#DB141E,1)”,“legendgroup”:“(#DB141E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[115.208481933278],“y”:[24.855894675555],“text”:“HUE: 0<br />SAT: 89<br />VAL: 86<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(219,24,24,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(219,24,24,1)”}},“hoveron”:“points”,“name”:“(#DB1818,1)”,“legendgroup”:“(#DB1818,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[138.952729034928],“y”:[29.9774208237007],“text”:“HUE: 0<br />SAT: 95<br />VAL: 87<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(222,11,11,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(222,11,11,1)”}},“hoveron”:“points”,“name”:“(#DE0B0B,1)”,“legendgroup”:“(#DE0B0B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.45948693567418],“y”:[92.4476497657006],“text”:“HUE: 62<br />SAT: 92<br />VAL: 90<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(222,230,18,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(222,230,18,1)”}},“hoveron”:“points”,“name”:“(#DEE612,1)”,“legendgroup”:“(#DEE612,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[1.05892845781587],“y”:[88.9534333579228],“text”:“HUE: 65<br />SAT: 88<br />VAL: 94<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(222,240,29,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(222,240,29,1)”}},“hoveron”:“points”,“name”:“(#DEF01D,1)”,“legendgroup”:“(#DEF01D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[114.334167716052],“y”:[14.2453805245777],“text”:“HUE: 356<br />SAT: 90<br />VAL: 88<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(224,22,36,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(224,22,36,1)”}},“hoveron”:“points”,“name”:“(#E01624,1)”,“legendgroup”:“(#E01624,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[106.812167030111],“y”:[23.0449347195293],“text”:“HUE: 0<br />SAT: 86<br />VAL: 88<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(224,31,31,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(224,31,31,1)”}},“hoveron”:“points”,“name”:“(#E01F1F,1)”,“legendgroup”:“(#E01F1F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[55.6915297681606],“y”:[-71.9863598269937],“text”:“HUE: 300<br />SAT: 77<br />VAL: 89<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(227,52,227,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(227,52,227,1)”}},“hoveron”:“points”,“name”:“(#E334E3,1)”,“legendgroup”:“(#E334E3,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[82.0316674116661],“y”:[17.7000538289312],“text”:“HUE: 0<br />SAT: 76<br />VAL: 89<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(227,54,54,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(227,54,54,1)”}},“hoveron”:“points”,“name”:“(#E33636,1)”,“legendgroup”:“(#E33636,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[132.39119163006],“y”:[28.5622187610135],“text”:“HUE: 0<br />SAT: 93<br />VAL: 90<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(230,16,16,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(230,16,16,1)”}},“hoveron”:“points”,“name”:“(#E61010,1)”,“legendgroup”:“(#E61010,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[72.9266547270371],“y”:[56.4497869185162],“text”:“HUE: 18<br />SAT: 93<br />VAL: 90<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(230,80,16,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(230,80,16,1)”}},“hoveron”:“points”,“name”:“(#E65010,1)”,“legendgroup”:“(#E65010,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[45.3691556151027],“y”:[69.3286622915126],“text”:“HUE: 31<br />SAT: 92<br />VAL: 90<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(230,127,18,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(230,127,18,1)”}},“hoveron”:“points”,“name”:“(#E67F12,1)”,“legendgroup”:“(#E67F12,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[125.170728482697],“y”:[27.0048360410993],“text”:“HUE: 0<br />SAT: 91<br />VAL: 91<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(232,21,21,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(232,21,21,1)”}},“hoveron”:“points”,“name”:“(#E81515,1)”,“legendgroup”:“(#E81515,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[107.86398649828],“y”:[52.0007458695805],“text”:“HUE: 10<br />SAT: 98<br />VAL: 91<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(232,43,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(232,43,5,1)”}},“hoveron”:“points”,“name”:“(#E82B05,1)”,“legendgroup”:“(#E82B05,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[64.6177440773567],“y”:[65.3219766943835],“text”:“HUE: 23<br />SAT: 95<br />VAL: 92<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(235,97,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(235,97,12,1)”}},“hoveron”:“points”,“name”:“(#EB610C,1)”,“legendgroup”:“(#EB610C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.63855730060978],“y”:[70.4966329936613],“text”:“HUE: 56<br />SAT: 75<br />VAL: 92<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(235,223,59,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(235,223,59,1)”}},“hoveron”:“points”,“name”:“(#EBDF3B,1)”,“legendgroup”:“(#EBDF3B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[147.726840901751],“y”:[31.8701310985895],“text”:“HUE: 0<br />SAT: 96<br />VAL: 93<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,9,9,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,9,9,1)”}},“hoveron”:“points”,“name”:“(#ED0909,1)”,“legendgroup”:“(#ED0909,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[123.59863111131],“y”:[-10.5091154237653],“text”:“HUE: 347<br />SAT: 96<br />VAL: 93<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,9,59,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,9,59,1)”}},“hoveron”:“points”,“name”:“(#ED093B,1)”,“legendgroup”:“(#ED093B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[113.163592572886],“y”:[6.27236807113527],“text”:“HUE: 353<br />SAT: 90<br />VAL: 93<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,24,49,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,24,49,1)”}},“hoveron”:“points”,“name”:“(#ED1831,1)”,“legendgroup”:“(#ED1831,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[61.7734575499659],“y”:[-85.3266610286723],“text”:“HUE: 297<br />SAT: 84<br />VAL: 97<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,40,247,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,40,247,1)”}},“hoveron”:“points”,“name”:“(#ED28F7,1)”,“legendgroup”:“(#ED28F7,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[69.4052945035792],“y”:[53.7244745975101],“text”:“HUE: 18<br />SAT: 90<br />VAL: 93<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,88,24,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,88,24,1)”}},“hoveron”:“points”,“name”:“(#ED5818,1)”,“legendgroup”:“(#ED5818,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[71.5525169650056],“y”:[72.3315725840499],“text”:“HUE: 23<br />SAT: 100<br />VAL: 93<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,91,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,91,0,1)”}},“hoveron”:“points”,“name”:“(#ED5B00,1)”,“legendgroup”:“(#ED5B00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[42.8448183877547],“y”:[65.4717572578429],“text”:“HUE: 31<br />SAT: 88<br />VAL: 93<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,136,28,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,136,28,1)”}},“hoveron”:“points”,“name”:“(#ED881C,1)”,“legendgroup”:“(#ED881C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[15.3419637157248],“y”:[85.5522384128396],“text”:“HUE: 52<br />SAT: 90<br />VAL: 93<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(237,209,24,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(237,209,24,1)”}},“hoveron”:“points”,“name”:“(#EDD118,1)”,“legendgroup”:“(#EDD118,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[140.259703342301],“y”:[11.0174489351205],“text”:“HUE: 354<br />SAT: 97<br />VAL: 94<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,7,30,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,7,30,1)”}},“hoveron”:“points”,“name”:“(#F0071E,1)”,“legendgroup”:“(#F0071E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[126.907727012851],“y”:[27.3795830852289],“text”:“HUE: 0<br />SAT: 91<br />VAL: 94<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,22,22,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,22,22,1)”}},“hoveron”:“points”,“name”:“(#F01616,1)”,“legendgroup”:“(#F01616,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[97.197330752098],“y”:[5.38835852626881],“text”:“HUE: 353<br />SAT: 84<br />VAL: 94<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,38,62,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,38,62,1)”}},“hoveron”:“points”,“name”:“(#F0263E,1)”,“legendgroup”:“(#F0263E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[71.4276239189894],“y”:[41.5279977616485],“text”:“HUE: 13<br />SAT: 84<br />VAL: 94<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,82,38,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,82,38,1)”}},“hoveron”:“points”,“name”:“(#F05226,1)”,“legendgroup”:“(#F05226,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[61.8903063758362],“y”:[69.4137297355185],“text”:“HUE: 25<br />SAT: 96<br />VAL: 94<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,105,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,105,10,1)”}},“hoveron”:“points”,“name”:“(#F0690A,1)”,“legendgroup”:“(#F0690A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[45.9902648514638],“y”:[74.023398305027],“text”:“HUE: 32<br />SAT: 94<br />VAL: 94<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,135,14,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,135,14,1)”}},“hoveron”:“points”,“name”:“(#F0870E,1)”,“legendgroup”:“(#F0870E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[41.7728326292113],“y”:[74.6657180462557],“text”:“HUE: 34<br />SAT: 93<br />VAL: 94<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,143,17,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,143,17,1)”}},“hoveron”:“points”,“name”:“(#F08F11,1)”,“legendgroup”:“(#F08F11,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.0021458243802],“y”:[80.8425902970133],“text”:“HUE: 55<br />SAT: 84<br />VAL: 94<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,223,38,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,223,38,1)”}},“hoveron”:“points”,“name”:“(#F0DF26,1)”,“legendgroup”:“(#F0DF26,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.1510128935846],“y”:[99.119797837406],“text”:“HUE: 60<br />SAT: 96<br />VAL: 94<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,240,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,240,10,1)”}},“hoveron”:“points”,“name”:“(#F0F00A,1)”,“legendgroup”:“(#F0F00A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.71436119412017],“y”:[97.7308340202244],“text”:“HUE: 62<br />SAT: 94<br />VAL: 97<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(240,247,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(240,247,15,1)”}},“hoveron”:“points”,“name”:“(#F0F70F,1)”,“legendgroup”:“(#F0F70F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[133.705041932274],“y”:[25.8140153850113],“text”:“HUE: 359<br />SAT: 93<br />VAL: 95<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,17,21,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,17,21,1)”}},“hoveron”:“points”,“name”:“(#F21115,1)”,“legendgroup”:“(#F21115,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[109.906771250115],“y”:[16.2113411271174],“text”:“HUE: 357<br />SAT: 87<br />VAL: 95<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,31,42,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,31,42,1)”}},“hoveron”:“points”,“name”:“(#F21F2A,1)”,“legendgroup”:“(#F21F2A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[93.6449758263894],“y”:[20.2051028102139],“text”:“HUE: 0<br />SAT: 80<br />VAL: 95<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,48,48,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,48,48,1)”}},“hoveron”:“points”,“name”:“(#F23030,1)”,“legendgroup”:“(#F23030,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[82.3174086303628],“y”:[53.8335895955345],“text”:“HUE: 15<br />SAT: 93<br />VAL: 95<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,73,17,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,73,17,1)”}},“hoveron”:“points”,“name”:“(#F24911,1)”,“legendgroup”:“(#F24911,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.8975640795567],“y”:[93.7895706836624],“text”:“HUE: 59<br />SAT: 92<br />VAL: 95<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,239,19,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,239,19,1)”}},“hoveron”:“points”,“name”:“(#F2EF13,1)”,“legendgroup”:“(#F2EF13,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.18053997760949],“y”:[99.5290711309694],“text”:“HUE: 60<br />SAT: 96<br />VAL: 95<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(242,242,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(242,242,10,1)”}},“hoveron”:“points”,“name”:“(#F2F20A,1)”,“legendgroup”:“(#F2F20A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[3.83753852202234],“y”:[79.5574678743716],“text”:“HUE: 62<br />SAT: 79<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(243,250,52,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(243,250,52,1)”}},“hoveron”:“points”,“name”:“(#F3FA34,1)”,“legendgroup”:“(#F3FA34,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[47.7538433239985],“y”:[-65.9599952219817],“text”:“HUE: 297<br />SAT: 69<br />VAL: 99<br />colorName: Violet”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(244,78,252,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(244,78,252,1)”}},“hoveron”:“points”,“name”:“(#F44EFC,1)”,“legendgroup”:“(#F44EFC,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[5.0031868288346],“y”:[103.717321068648],“text”:“HUE: 62<br />SAT: 98<br />VAL: 99<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(244,252,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(244,252,5,1)”}},“hoveron”:“points”,“name”:“(#F4FC05,1)”,“legendgroup”:“(#F4FC05,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[149.757661039703],“y”:[32.3082539450478],“text”:“HUE: 0<br />SAT: 96<br />VAL: 96<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,10,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,10,10,1)”}},“hoveron”:“points”,“name”:“(#F50A0A,1)”,“legendgroup”:“(#F50A0A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[122.96626827996],“y”:[3.96102584262516],“text”:“HUE: 352<br />SAT: 93<br />VAL: 96<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,17,47,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,17,47,1)”}},“hoveron”:“points”,“name”:“(#F5112F,1)”,“legendgroup”:“(#F5112F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[111.946198571796],“y”:[57.5398043885576],“text”:“HUE: 11<br />SAT: 100<br />VAL: 96<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,45,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,45,0,1)”}},“hoveron”:“points”,“name”:“(#F52D00,1)”,“legendgroup”:“(#F52D00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[104.865143094777],“y”:[50.5553491261964],“text”:“HUE: 10<br />SAT: 96<br />VAL: 96<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,49,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,49,10,1)”}},“hoveron”:“points”,“name”:“(#F5310A,1)”,“legendgroup”:“(#F5310A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[46.6178977497861],“y”:[61.0260398440958],“text”:“HUE: 28<br />SAT: 86<br />VAL: 96<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,133,34,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,133,34,1)”}},“hoveron”:“points”,“name”:“(#F58522,1)”,“legendgroup”:“(#F58522,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[42.6468991491582],“y”:[61.8857783644279],“text”:“HUE: 30<br />SAT: 85<br />VAL: 96<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,141,37,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,141,37,1)”}},“hoveron”:“points”,“name”:“(#F58D25,1)”,“legendgroup”:“(#F58D25,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.39796679161714],“y”:[97.2721245471583],“text”:“HUE: 58<br />SAT: 95<br />VAL: 96<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,237,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,237,12,1)”}},“hoveron”:“points”,“name”:“(#F5ED0C,1)”,“legendgroup”:“(#F5ED0C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.1966123320869],“y”:[84.8393718326624],“text”:“HUE: 58<br />SAT: 85<br />VAL: 96<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,238,37,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,238,37,1)”}},“hoveron”:“points”,“name”:“(#F5EE25,1)”,“legendgroup”:“(#F5EE25,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[5.11535664558271],“y”:[70.9080333615699],“text”:“HUE: 60<br />SAT: 72<br />VAL: 96<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,245,69,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,245,69,1)”}},“hoveron”:“points”,“name”:“(#F5F545,1)”,“legendgroup”:“(#F5F545,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.75191106493689],“y”:[98.5092597795503],“text”:“HUE: 62<br />SAT: 94<br />VAL: 99<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(245,252,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(245,252,15,1)”}},“hoveron”:“points”,“name”:“(#F5FC0F,1)”,“legendgroup”:“(#F5FC0F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[160.905214670245],“y”:[34.7127673243742],“text”:“HUE: 0<br />SAT: 98<br />VAL: 97<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,5,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,5,5,1)”}},“hoveron”:“points”,“name”:“(#F70505,1)”,“legendgroup”:“(#F70505,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[158.317231741953],“y”:[30.5647341061673],“text”:“HUE: 359<br />SAT: 98<br />VAL: 97<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,5,9,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,5,9,1)”}},“hoveron”:“points”,“name”:“(#F70509,1)”,“legendgroup”:“(#F70509,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[119.710767283461],“y”:[9.40433483411166],“text”:“HUE: 354<br />SAT: 91<br />VAL: 97<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,22,45,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,22,45,1)”}},“hoveron”:“points”,“name”:“(#F7162D,1)”,“legendgroup”:“(#F7162D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[66.2233257035878],“y”:[70.5230964794038],“text”:“HUE: 24<br />SAT: 97<br />VAL: 97<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,103,7,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,103,7,1)”}},“hoveron”:“points”,“name”:“(#F76707,1)”,“legendgroup”:“(#F76707,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[57.0296272305112],“y”:[63.9628745529589],“text”:“HUE: 25<br />SAT: 91<br />VAL: 97<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,116,22,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,116,22,1)”}},“hoveron”:“points”,“name”:“(#F77416,1)”,“legendgroup”:“(#F77416,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[50.2847884921853],“y”:[72.967881440343],“text”:“HUE: 30<br />SAT: 94<br />VAL: 97<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,131,15,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,131,15,1)”}},“hoveron”:“points”,“name”:“(#F7830F,1)”,“legendgroup”:“(#F7830F,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[43.7397304225558],“y”:[78.181116953977],“text”:“HUE: 34<br />SAT: 95<br />VAL: 97<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,146,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,146,12,1)”}},“hoveron”:“points”,“name”:“(#F7920C,1)”,“legendgroup”:“(#F7920C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[42.6768708815095],“y”:[80.4367332719186],“text”:“HUE: 35<br />SAT: 96<br />VAL: 97<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,148,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,148,10,1)”}},“hoveron”:“points”,“name”:“(#F7940A,1)”,“legendgroup”:“(#F7940A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[13.3523869872575],“y”:[98.1096299176144],“text”:“HUE: 55<br />SAT: 97<br />VAL: 97<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,227,7,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,227,7,1)”}},“hoveron”:“points”,“name”:“(#F7E307,1)”,“legendgroup”:“(#F7E307,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.39096273915867],“y”:[99.648302503924],“text”:“HUE: 59<br />SAT: 96<br />VAL: 97<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(247,243,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(247,243,10,1)”}},“hoveron”:“points”,“name”:“(#F7F30A,1)”,“legendgroup”:“(#F7F30A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.16136702980297],“y”:[86.2694382263182],“text”:“HUE: 62<br />SAT: 84<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(248,255,41,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(248,255,41,1)”}},“hoveron”:“points”,“name”:“(#F8FF29,1)”,“legendgroup”:“(#F8FF29,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[161.618957695394],“y”:[34.8667461473241],“text”:“HUE: 0<br />SAT: 98<br />VAL: 98<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,5,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,5,5,1)”}},“hoveron”:“points”,“name”:“(#FA0505,1)”,“legendgroup”:“(#FA0505,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[76.6322998924599],“y”:[66.1103680119424],“text”:“HUE: 20<br />SAT: 97<br />VAL: 98<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,88,7,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,88,7,1)”}},“hoveron”:“points”,“name”:“(#FA5807,1)”,“legendgroup”:“(#FA5807,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[51.7992247407971],“y”:[83.3723115675796],“text”:“HUE: 32<br />SAT: 100<br />VAL: 98<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,133,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,133,0,1)”}},“hoveron”:“points”,“name”:“(#FA8500,1)”,“legendgroup”:“(#FA8500,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[47.8820557911361],“y”:[69.4817068507061],“text”:“HUE: 30<br />SAT: 91<br />VAL: 98<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,136,22,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,136,22,1)”}},“hoveron”:“points”,“name”:“(#FA8816,1)”,“legendgroup”:“(#FA8816,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[46.9391089889712],“y”:[71.7277099659666],“text”:“HUE: 31<br />SAT: 92<br />VAL: 98<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,139,20,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,139,20,1)”}},“hoveron”:“points”,“name”:“(#FA8B14,1)”,“legendgroup”:“(#FA8B14,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[37.8695354944481],“y”:[57.8700521815385],“text”:“HUE: 31<br />SAT: 80<br />VAL: 98<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,153,50,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,153,50,1)”}},“hoveron”:“points”,“name”:“(#FA9932,1)”,“legendgroup”:“(#FA9932,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.3582562102161],“y”:[90.8059325834095],“text”:“HUE: 55<br />SAT: 91<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,231,22,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,231,22,1)”}},“hoveron”:“points”,“name”:“(#FAE716,1)”,“legendgroup”:“(#FAE716,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[12.4809371215535],“y”:[101.848217491265],“text”:“HUE: 56<br />SAT: 99<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,233,2,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,233,2,1)”}},“hoveron”:“points”,“name”:“(#FAE902,1)”,“legendgroup”:“(#FAE902,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.97639619244447],“y”:[103.258365389112],“text”:“HUE: 58<br />SAT: 99<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,242,2,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,242,2,1)”}},“hoveron”:“points”,“name”:“(#FAF202,1)”,“legendgroup”:“(#FAF202,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.31597876792782],“y”:[98.7579980449105],“text”:“HUE: 59<br />SAT: 95<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,246,12,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,246,12,1)”}},“hoveron”:“points”,“name”:“(#FAF60C,1)”,“legendgroup”:“(#FAF60C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.15761922160637],“y”:[85.0036297060872],“text”:“HUE: 59<br />SAT: 84<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,246,40,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,246,40,1)”}},“hoveron”:“points”,“name”:“(#FAF628,1)”,“legendgroup”:“(#FAF628,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[6.89907186145183],“y”:[95.6284231354441],“text”:“HUE: 60<br />SAT: 92<br />VAL: 98<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(250,250,20,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(250,250,20,1)”}},“hoveron”:“points”,“name”:“(#FAFA14,1)”,“legendgroup”:“(#FAFA14,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[154.848140520067],“y”:[8.58069584987309],“text”:“HUE: 353<br />SAT: 100<br />VAL: 99<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,0,29,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,0,29,1)”}},“hoveron”:“points”,“name”:“(#FC001D,1)”,“legendgroup”:“(#FC001D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[72.8088580636536],“y”:[66.2511276268208],“text”:“HUE: 21<br />SAT: 96<br />VAL: 99<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,95,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,95,10,1)”}},“hoveron”:“points”,“name”:“(#FC5F0A,1)”,“legendgroup”:“(#FC5F0A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[65.367393526166],“y”:[56.3933052418064],“text”:“HUE: 20<br />SAT: 89<br />VAL: 99<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,103,28,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,103,28,1)”}},“hoveron”:“points”,“name”:“(#FC671C,1)”,“legendgroup”:“(#FC671C,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[58.7608912140787],“y”:[73.06293231281],“text”:“HUE: 27<br />SAT: 96<br />VAL: 99<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,119,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,119,10,1)”}},“hoveron”:“points”,“name”:“(#FC770A,1)”,“legendgroup”:“(#FC770A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[51.1343920073003],“y”:[82.302380268823],“text”:“HUE: 32<br />SAT: 99<br />VAL: 99<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,136,3,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,136,3,1)”}},“hoveron”:“points”,“name”:“(#FC8803,1)”,“legendgroup”:“(#FC8803,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[45.931523499291],“y”:[86.5704939584666],“text”:“HUE: 35<br />SAT: 100<br />VAL: 99<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,147,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,147,0,1)”}},“hoveron”:“points”,“name”:“(#FC9300,1)”,“legendgroup”:“(#FC9300,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.29661868027431],“y”:[101.138031667412],“text”:“HUE: 60<br />SAT: 96<br />VAL: 99<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,252,10,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,252,10,1)”}},“hoveron”:“points”,“name”:“(#FCFC0A,1)”,“legendgroup”:“(#FCFC0A,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[4.52089469219148],“y”:[62.6696473133785],“text”:“HUE: 60<br />SAT: 64<br />VAL: 99<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(252,252,91,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(252,252,91,1)”}},“hoveron”:“points”,“name”:“(#FCFC5B,1)”,“legendgroup”:“(#FCFC5B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[175.014473562888,175.014473562888,175.014473562888,175.014473562888,175.014473562888,175.014473562888,175.014473562888],“y”:[37.756173739351,37.756173739351,37.756173739351,37.756173739351,37.756173739351,37.756173739351,37.756173739351],“text”:“HUE: 0<br />SAT: 100<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,0,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,0,0,1)”}},“hoveron”:“points”,“name”:“(#FF0000,1)”,“legendgroup”:“(#FF0000,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[171.931433037026],“y”:[33.1926563061617],“text”:“HUE: 359<br />SAT: 100<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,0,4,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,0,4,1)”}},“hoveron”:“points”,“name”:“(#FF0004,1)”,“legendgroup”:“(#FF0004,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[153.090036827296],“y”:[4.92994838528648],“text”:“HUE: 352<br />SAT: 100<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,0,34,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,0,34,1)”}},“hoveron”:“points”,“name”:“(#FF0022,1)”,“legendgroup”:“(#FF0022,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[167.760287256981],“y”:[40.0469473166489],“text”:“HUE: 1<br />SAT: 100<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,4,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,4,0,1)”}},“hoveron”:“points”,“name”:“(#FF0400,1)”,“legendgroup”:“(#FF0400,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[163.03200785364],“y”:[35.1715894767424],“text”:“HUE: 0<br />SAT: 98<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,5,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,5,5,1)”}},“hoveron”:“points”,“name”:“(#FF0505,1)”,“legendgroup”:“(#FF0505,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[131.461741721766],“y”:[16.3787918682927],“text”:“HUE: 356<br />SAT: 93<br />VAL: 100<br />colorName: Red”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,18,34,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,18,34,1)”}},“hoveron”:“points”,“name”:“(#FF1222,1)”,“legendgroup”:“(#FF1222,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[71.1934246478014],“y”:[61.4188593045159],“text”:“HUE: 20<br />SAT: 93<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,97,18,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,97,18,1)”}},“hoveron”:“points”,“name”:“(#FF6112,1)”,“legendgroup”:“(#FF6112,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[71.0228780107304,71.0228780107304],“y”:[75.6338233072373,75.6338233072373],“text”:“HUE: 24<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,102,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,102,0,1)”}},“hoveron”:“points”,“name”:“(#FF6600,1)”,“legendgroup”:“(#FF6600,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[61.1078325839237],“y”:[79.9920648350333],“text”:“HUE: 28<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,119,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,119,0,1)”}},“hoveron”:“points”,“name”:“(#FF7700,1)”,“legendgroup”:“(#FF7700,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[56.5472583148612],“y”:[82.0544171920794],“text”:“HUE: 30<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,128,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,128,0,1)”}},“hoveron”:“points”,“name”:“(#FF8000,1)”,“legendgroup”:“(#FF8000,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.5138471202683],“y”:[80.2455863163874],“text”:“HUE: 31<br />SAT: 98<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,134,5,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,134,5,1)”}},“hoveron”:“points”,“name”:“(#FF8605,1)”,“legendgroup”:“(#FF8605,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[52.2184854999783],“y”:[84.0471235713775],“text”:“HUE: 32<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,136,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,136,0,1)”}},“hoveron”:“points”,“name”:“(#FF8800,1)”,“legendgroup”:“(#FF8800,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[49.6216877235582],“y”:[79.8679076409463],“text”:“HUE: 32<br />SAT: 97<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,140,8,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,140,8,1)”}},“hoveron”:“points”,“name”:“(#FF8C08,1)”,“legendgroup”:“(#FF8C08,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[48.10079453573,48.10079453573],“y”:[85.9754409777682,85.9754409777682],“text”:“HUE: 34<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,145,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,145,0,1)”}},“hoveron”:“points”,“name”:“(#FF9100,1)”,“legendgroup”:“(#FF9100,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[46.1153334208426],“y”:[86.9169339302091],“text”:“HUE: 35<br />SAT: 100<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,149,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,149,0,1)”}},“hoveron”:“points”,“name”:“(#FF9500,1)”,“legendgroup”:“(#FF9500,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[31.1739647784575],“y”:[58.7585723246245],“text”:“HUE: 35<br />SAT: 77<br />VAL: 100<br />colorName: Orange”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,173,59,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,173,59,1)”}},“hoveron”:“points”,“name”:“(#FFAD3B,1)”,“legendgroup”:“(#FFAD3B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[14.054583453675],“y”:[103.268709057383],“text”:“HUE: 55<br />SAT: 100<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,234,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,234,0,1)”}},“hoveron”:“points”,“name”:“(#FFEA00,1)”,“legendgroup”:“(#FFEA00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.79517148698132],“y”:[59.5603331442522],“text”:“HUE: 53<br />SAT: 65<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,236,89,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,236,89,1)”}},“hoveron”:“points”,“name”:“(#FFEC59,1)”,“legendgroup”:“(#FFEC59,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[11.9349856637014],“y”:[97.3937059412171],“text”:“HUE: 56<br />SAT: 95<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,239,13,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,239,13,1)”}},“hoveron”:“points”,“name”:“(#FFEF0D,1)”,“legendgroup”:“(#FFEF0D,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.7921801814023],“y”:[79.9098215515659],“text”:“HUE: 56<br />SAT: 81<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,241,48,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,241,48,1)”}},“hoveron”:“points”,“name”:“(#FFF130,1)”,“legendgroup”:“(#FFF130,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[10.1834884952741,10.1834884952741,10.1834884952741],“y”:[105.401656713382,105.401656713382,105.401656713382],“text”:“HUE: 58<br />SAT: 100<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,247,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,247,0,1)”}},“hoveron”:“points”,“name”:“(#FFF700,1)”,“legendgroup”:“(#FFF700,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.9301127788143],“y”:[92.4305374553879],“text”:“HUE: 58<br />SAT: 90<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,247,25,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,247,25,1)”}},“hoveron”:“points”,“name”:“(#FFF719,1)”,“legendgroup”:“(#FFF719,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.97376640916923],“y”:[82.5333609473909],“text”:“HUE: 58<br />SAT: 82<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,248,46,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,248,46,1)”}},“hoveron”:“points”,“name”:“(#FFF82E,1)”,“legendgroup”:“(#FFF82E,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[8.93411791806662,8.93411791806662,8.93411791806662],“y”:[106.097897481417,106.097897481417,106.097897481417],“text”:“HUE: 59<br />SAT: 100<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,251,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,251,0,1)”}},“hoveron”:“points”,“name”:“(#FFFB00,1)”,“legendgroup”:“(#FFFB00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[7.70422600361214,7.70422600361214,7.70422600361214],“y”:[106.787067339265,106.787067339265,106.787067339265],“text”:“HUE: 60<br />SAT: 100<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,255,0,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,255,0,1)”}},“hoveron”:“points”,“name”:“(#FFFF00,1)”,“legendgroup”:“(#FFFF00,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[5.62093127639233],“y”:[77.9149630012158],“text”:“HUE: 60<br />SAT: 77<br />VAL: 100<br />colorName: Yellow”,“type”:“scatter”,“mode”:“markers”,“marker”:{“autocolorscale”:false,“color”:“rgba(255,255,59,1)”,“opacity”:1,“size”:15.1181102362205,“symbol”:“circle”,“line”:{“width”:1.88976377952756,“color”:“rgba(255,255,59,1)”}},“hoveron”:“points”,“name”:“(#FFFF3B,1)”,“legendgroup”:“(#FFFF3B,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[9.08352109939286,8.80223906844312,7.96265692446,6.57750187692336,4.66777146440456,2.26241525328537,-0.602104008158737,-3.88236312785443,-7.52863672125914,-11.4856509975035,-15.6934216537179,-20.0881631759194,-24.6032557623842,-29.1702552119335,-33.7199304682549,-38.1833130921464,-42.4927427527513,-46.5828928892057,-50.3917609947104,-53.8616085113322,-56.939836087687,-59.5797809314897,-61.7414241699197,-63.3919974949404,-64.5064798974462,-65.0679769602559,-65.0679769602559,-64.5064798974462,-63.3919974949404,-61.7414241699197,-59.5797809314897,-56.939836087687,-53.8616085113322,-50.3917609947104,-46.5828928892057,-42.4927427527513,-38.1833130921464,-33.7199304682549,-29.1702552119335,-24.6032557623842,-20.0881631759194,-15.6934216537179,-11.4856509975035,-7.52863672125915,-3.88236312785444,-0.602104008158737,2.26241525328536,4.66777146440456,6.57750187692336,7.96265692446,8.80223906844312,9.08352109939286],“y”:[-147.95505095797,-142.788694192765,-136.747757259844,-129.923814605318,-122.420310243885,-114.350989653014,-105.83817550745,-97.0109133921545,-88.0030156027797,-78.9510326876672,-69.9921834807269,-61.262275003788,-52.8936437705822,-45.0131497000918,-37.7402530494923,-31.185203518424,-25.4473689759284,-20.6137291448432,-16.7575570778666,-13.9373084127685,-12.1957352445087,-11.559238047056,-12.0374654691143,-13.6231680704434,-16.2923082159834,-20.0044244618995,-24.7032449098265,-30.3175402314878,-36.7622034327045,-43.9395399886741,-51.740748793382,-60.0475714734634,-68.734085064597,-77.6686108752856,-86.7157106015932,-95.7382394337748,-104.599425031794,-113.16494085458,-121.304942413465,-128.896035582278,-135.823147126513,-141.981269096268,-147.277050639727,-151.630213106913,-154.974766992192,-157.260012267914,-158.45130694515,-158.530592210932,-157.496666181451,-155.365202121385,-152.168510853192,-147.95505095797],“text”:“colorName: Blue<br />colorName: Blue”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“dash”},“hoveron”:“points”,“name”:“(Blue,1)”,“legendgroup”:“(Blue,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[67.9792481637181,67.6565252692667,66.693248736027,65.1040208543328,62.9129326989009,60.1531989326953,56.866654306494,53.1031194867112,48.9196458248785,44.3796505173111,39.5519552650553,34.5097430070539,29.3294485413898,24.0895998516611,18.8696277027966,13.7486615516264,8.80433002497661,4.11158414881737,-0.258438832890523,-4.23949382630055,-7.77123209577661,-10.8001160892092,-13.2802310127322,-15.1739808521951,-16.4526582904137,-17.0968798808367,-17.0968798808367,-16.4526582904137,-15.1739808521951,-13.2802310127322,-10.8001160892092,-7.77123209577661,-4.23949382630056,-0.258438832890533,4.11158414881739,8.80433002497661,13.7486615516263,18.8696277027966,24.0895998516611,29.3294485413898,34.5097430070539,39.5519552650553,44.3796505173111,48.9196458248785,53.1031194867111,56.866654306494,60.1531989326953,62.9129326989009,65.1040208543328,66.693248736027,67.6565252692667,67.9792481637181],“y”:[40.2050158431367,44.935992249563,49.3873725138077,53.4916782485523,57.1866923625569,60.4164022083432,63.1318486768339,65.2918683675405,66.8637175837547,67.8235686936136,68.15687133271,67.8585729727853,66.9331955129073,65.3947667320899,63.2666076424623,60.5809789664974,57.3785920973437,53.7079919556042,49.6248210978237,45.1909762320511,40.473669926839,35.544411737217,30.4779241927307,25.3510100800615,20.241388191069,15.2265151851285,10.38241142513,5.78250858626765,1.4965365066958,-2.4105338457386,-5.87947526714085,-8.8577021416067,-11.3000675855566,-13.1695478284704,-14.4378034555088,-15.0856090041546,-15.1031444026268,-14.4901438321592,-13.2558997565418,-11.4191220578418,-9.00765441366329,-6.05805221537738,-2.61502842565107,1.26922422448851,5.53582442425442,10.120094863751,14.9525426760634,19.9599128782831,25.0662988423765,30.1942929622912,35.2661600743587,40.2050158431367],“text”:“colorName: Brown<br />colorName: Brown”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“dashdot”},“hoveron”:“points”,“name”:“(Brown,1)”,“legendgroup”:“(Brown,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[2.8488363051451,2.83058013599436,2.77608837345716,2.6861870571077,2.56223899926151,2.40612312612982,2.22020599521356,2.00730592070393,1.77065025071211,1.51382644396168,1.24072768757118,0.955493880305964,0.662448875932833,0.366034938004456,0.0707453996720959,-0.21894345066471,-0.498640225327411,-0.764105006319312,-1.01131361816047,-1.23651863028597,-1.43630616427332,-1.60764764475949,-1.74794570955618,-1.85507358301305,-1.92740731576864,-1.96385040216732,-1.96385040216732,-1.92740731576864,-1.85507358301305,-1.74794570955618,-1.60764764475949,-1.43630616427332,-1.23651863028597,-1.01131361816047,-0.764105006319311,-0.498640225327411,-0.218943450664711,0.0707453996720962,0.366034938004456,0.662448875932832,0.955493880305964,1.24072768757118,1.51382644396168,1.77065025071211,2.00730592070393,2.22020599521356,2.40612312612982,2.56223899926151,2.6861870571077,2.77608837345715,2.83058013599436,2.8488363051451],“y”:[1.57941075298837,1.84216725404715,2.08191139692617,2.2950089048011,2.4782294366722,2.62879555604103,2.74442483401662,2.82336444861084,2.86441775573306,2.86696242909474,2.83095989404163,2.75695591230615,2.64607230881592,2.49998996597133,2.32092334318175,2.11158690791822,1.87515398715351,1.61520866295998,1.33569144147872,1.04083951886321,0.735122549704823,0.423174891625266,0.109725353139096,-0.200474490263104,-0.502722325155665,-0.792436382456094,-1.06522489237397,-1.31695265916422,-1.54380374647948,-1.7423393230753,-1.90954979198651,-2.0429004129494,-2.14036972648029,-2.20048019714082,-2.222320611469,-2.20555989104651,-2.15045211131003,-2.05783265002657,-1.92910552381811,-1.76622210470078,-1.57165153927416,-1.34834331897582,-1.09968256879761,-0.829438732241425,-0.541708430398055,-0.240853361347324,0.0685658187387259,0.381858630494539,0.694275874247,1.00108162304143,1.29762501446666,1.57941075298837],“text”:“colorName: Gray<br />colorName: Gray”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“longdashdot”},“hoveron”:“points”,“name”:“(Gray,1)”,“legendgroup”:“(Gray,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[-27.0641349409492,-27.2917228800581,-27.9710366962181,-29.0917786844308,-30.6369595385762,-32.5831558919761,-34.9008653917564,-37.5549539244433,-40.5051882133102,-43.7068457138411,-47.111392561918,-50.6672192977278,-54.320423212566,-58.0156254589546,-61.6968105375201,-65.308175434865,-68.7949755403681,-72.1043545186783,-75.1861455578797,-77.9936318472228,-80.484254756355,-82.6202589807751,-84.3692648737638,-85.7047592888217,-86.6064974919446,-87.0608100511545,-87.0608100511545,-86.6064974919446,-85.7047592888217,-84.3692648737638,-82.6202589807751,-80.484254756355,-77.9936318472228,-75.1861455578797,-72.1043545186783,-68.7949755403681,-65.308175434865,-61.6968105375201,-58.0156254589546,-54.320423212566,-50.6672192977278,-47.111392561918,-43.7068457138411,-40.5051882133102,-37.5549539244434,-34.9008653917564,-32.5831558919761,-30.6369595385762,-29.0917786844308,-27.9710366962181,-27.2917228800581,-27.0641349409492],“y”:[59.5902394204654,64.0120370028384,68.6705911038282,73.4952827919325,78.4129746591795,83.3491195096807,88.2288904191316,92.9783150347095,97.525396920539,101.801206950271,105.740928202376,109.284838518602,112.379215831019,114.977152533804,117.039266554736,118.534298347259,119.43958475335,119.741402553891,119.435176498683,118.525548662572,117.026308076331,114.960181699004,112.35848990038,109.260671676106,105.71368679272,101.771303925458,97.4932855799438,92.9444821535227,88.1938488693447,83.313400485469,78.3771196245402,73.4598352726421,68.6360884481459,63.9790022358542,59.5591733155731,55.4436017884084,51.6946755235295,48.3692244216668,45.5176589317464,43.1832058798697,41.4012531946926,40.1988134625001,39.5941144439324,39.5963227597149,40.2054049340313,41.4121279019833,43.1981989734421,45.5365431315853,48.3917134625521,51.7204284945254,55.4722283007258,59.5902394204654],“text”:“colorName: Green<br />colorName: Green”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“solid”},“hoveron”:“points”,“name”:“(Green,1)”,“legendgroup”:“(Green,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[56.0725270136361,55.7317008953616,54.7143891170721,53.036013088336,50.7220152789067,47.8074735368155,44.3365693439522,40.3619180698359,35.9437713762457,31.1491038634456,26.0505978035148,20.7255413511908,15.2546569342274,9.72087758367304,4.20808975365818,-1.20013831174066,-6.4218233878962,-11.3778100517466,-15.9929705973225,-20.1973438951885,-23.9271959318513,-27.1259859524368,-29.7452235608999,-31.7452037850002,-33.0956089632078,-33.7759683295484,-33.7759683295484,-33.0956089632078,-31.7452037850002,-29.7452235608999,-27.1259859524368,-23.9271959318513,-20.1973438951886,-15.9929705973225,-11.3778100517466,-6.4218233878962,-1.20013831174068,4.20808975365819,9.72087758367304,15.2546569342273,20.7255413511908,26.0505978035148,31.1491038634456,35.9437713762457,40.3619180698359,44.3365693439522,47.8074735368154,50.7220152789067,53.036013088336,54.7143891170721,55.7317008953616,56.0725270136361],“y”:[-125.660530617984,-119.983113956402,-114.026302296555,-107.880394831166,-101.638557252618,-95.3954094560219,-89.2455911980607,-83.2823274547451,-77.5960152258075,-72.2728532083311,-67.3935351123682,-63.0320264265506,-59.2544431766781,-56.1180496741625,-53.6703904474385,-51.9485695153766,-50.9786879281795,-50.775448102066,-51.3419309456289,-52.6695491564006,-54.7381773956051,-57.5164573677798,-60.9622731805691,-65.0233897787223,-69.6382447742858,-74.7368816696509,-80.2420103267482,-86.0701786067554,-92.133037419455,-98.3386800053845,-104.593035148625,-110.801293200544,-116.869343297423,-122.705199985224,-128.220397625304,-133.331331443324,-137.960524892399,-142.037804118584,-145.501361724957,-148.298693708764,-150.387395368572,-151.735804116324,-152.323479449896,-152.141512810275,-151.192662626231,-149.491312499349,-147.063253163292,-143.945291522567,-140.184692697373,-135.838463532555,-130.972488431951,-125.660530617984],“text”:“colorName: Indigo<br />colorName: Indigo”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“dot”},“hoveron”:“points”,“name”:“(Indigo,1)”,“legendgroup”:“(Indigo,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[88.3661461238123,88.1174453529411,87.3751130905021,86.1504023369023,84.4618784587646,82.3351377568952,79.8024194524544,76.9021169732266,73.6781959483913,70.179527734401,66.4591485750336,62.5734556259995,58.5813520315487,54.5433540128469,50.520673503749,46.5742902402781,42.764027369987,39.1476445940211,35.7799625889264,32.7120319810742,29.9903594712033,27.656202840243,25.7449455234106,24.2855602334006,23.3001697635943,22.8037116290622,22.8037116290622,23.3001697635943,24.2855602334006,25.7449455234106,27.656202840243,29.9903594712033,32.7120319810742,35.7799625889264,39.1476445940211,42.764027369987,46.5742902402781,50.520673503749,54.5433540128469,58.5813520315487,62.5734556259995,66.4591485750336,70.179527734401,73.6781959483913,76.9021169732266,79.8024194524544,82.3351377568952,84.4618784587646,86.1504023369023,87.3751130905021,88.1174453529411,88.3661461238123],“y”:[60.5601200599546,63.3860570924271,66.3447120880199,69.3912348528866,72.479443207366,75.5625230607506,78.5937380651815,81.5271380910421,84.3182557840837,86.9247806451883,89.307200414407,91.4294000365432,93.2592091285766,94.7688896498766,95.9355563826239,96.7415238483847,97.1745744019359,97.2281434383133,96.9014189055306,96.1993536144601,95.1325901592684,93.7172995865376,91.9749362586825,89.9319126276858,87.6191988492501,85.0718533068056,82.3284911621548,79.4306989889812,76.4224043627835,73.3492099636081,70.2577022859046,67.1947454347576,64.2067707138242,61.3390727741,58.6351229931809,56.1359104934911,53.8793207889688,51.8995614792938,50.2266436975452,48.8859271720158,47.8977357985814,47.2770495511566,47.0332774005595,47.1701146841056,47.6854870880605,48.5715820921221,49.8149673992641,51.3967945556676,53.2930846740673,55.4750919292399,57.9097393154129,60.5601200599545],“text”:“colorName: Orange<br />colorName: Orange”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“longdash”},“hoveron”:“points”,“name”:“(Orange,1)”,“legendgroup”:“(Orange,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[69.1914876904994,68.9733434256274,68.3222174757028,67.2479802464053,65.7669160791139,63.901476396891,61.6799393637945,59.1359812167362,56.3081657680573,53.2393598174433,49.976083334937,46.5678042656124,43.0661886459521,39.5243173993996,35.9958816836679,32.5343689875183,29.1922523149526,26.0201947479607,23.0662814458409,20.3752907231997,17.9880152563476,15.9406437079074,14.2642121435778,12.9841335570139,12.1198126347476,11.6843516009203,11.6843516009203,12.1198126347476,12.9841335570139,14.2642121435778,15.9406437079074,17.9880152563476,20.3752907231997,23.0662814458409,26.0201947479607,29.1922523149526,32.5343689875183,35.995881683668,39.5243173993996,43.0661886459521,46.5678042656124,49.976083334937,53.2393598174433,56.3081657680573,59.1359812167362,61.6799393637945,63.901476396891,65.7669160791139,67.2479802464053,68.3222174757028,68.9733434256274,69.1914876904994],“y”:[-106.97500272247,-102.184150823848,-97.2837535088153,-92.348095805477,-87.4519972534838,-82.6696777160756,-78.0736322826116,-73.7335323169123,-69.7151693104033,-66.0794575501697,-62.8815107204562,-60.1698064353935,-57.9854513677842,-56.3615581138443,-55.3227432399979,-54.8847541208228,-55.0542302249043,-55.8286024672589,-57.1961321540441,-59.1360889291913,-61.6190650254723,-64.6074210562739,-68.0558565903315,-71.9120968600906,-76.1176851938964,-80.6088691595491,-85.3175669861904,-90.1723996145504,-95.0997727307274,-100.024992380967,-104.873397255866,-109.57149047971,-114.0480537482,-118.235226925342,-122.069536733941,-125.492858945777,-128.453299485663,-130.90598109272,-132.813723613912,-134.147607617262,-134.887412780967,-135.021924412861,-134.549103453717,-133.476117387309,-131.819231588663,-129.603562757549,-126.862698174918,-123.63818655396,-119.978908203962,-115.940334054647,-111.583684773423,-106.97500272247],“text”:“colorName: Purple<br />colorName: Purple”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“7”},“hoveron”:“points”,“name”:“(Purple,1)”,“legendgroup”:“(Purple,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[203.89911210447,203.406151318828,201.934741744916,199.507188452002,196.160290673496,191.944783968078,186.924571120354,181.175753439771,174.785477142344,167.850612302854,160.476284403255,152.774280737529,144.861355830259,136.857461557047,128.883928796355,121.061628177062,113.509137802943,106.340945729486,99.6657144416702,93.5846336414636,88.1898863150848,83.5632513328991,79.7748637651044,76.8821517055587,74.9289657204166,73.9449141182445,73.9449141182445,74.9289657204166,76.8821517055587,79.7748637651044,83.5632513328991,88.1898863150848,93.5846336414636,99.6657144416702,106.340945729486,113.509137802943,121.061628177062,128.883928796355,136.857461557047,144.861355830259,152.774280737529,160.476284403255,167.850612302854,174.785477142344,181.17575343977,186.924571120354,191.944783968078,196.160290673496,199.507188452002,201.934741744916,203.406151318828,203.89911210447],“y”:[44.909360688486,47.721554198571,50.1976926805734,52.3002403991426,53.9973248740841,55.2632200346705,56.0787362006499,56.4315109782373,56.3161966614033,55.7345412976463,54.6953621893739,53.2144122325868,51.3141411190324,49.0233550217626,46.3767799229133,43.4145352032128,40.1815254730659,36.7267598644329,33.1026091023465,29.3640116181042,25.5676407386505,21.7710455767106,18.0317786449035,14.4065234183166,10.9502350708032,7.71530741056532,4.75077864342843,2.10158800362813,-0.192105479172483,-2.09553174983653,-3.57983680634664,-4.62252009706341,-5.20777560615237,-5.32673145667236,-4.97758439918641,-4.16562714718508,-2.9031681449451,-1.20934498406053,0.890165702937836,3.36353747415846,6.17327653476604,9.27679010469199,12.6270320817638,16.1732162126577,19.8615859607304,23.6362294003182,27.4399267845366,31.2150179383165,34.9042763278826,38.451776556672,41.803742137339,44.909360688486],“text”:“colorName: Red<br />colorName: Red”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“dot”},“hoveron”:“points”,“name”:“(Red,1)”,“legendgroup”:“(Red,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[81.4442062205058,81.0976539275884,80.0632504283406,78.3566762253983,76.0038012440921,73.0402926707499,69.5110742745093,65.4696454087701,60.9772700155313,56.1020479264789,50.9178825389552,45.503360515788,39.9405604915885,34.3138088443175,28.7084013933529,23.2093104018135,17.8998964836663,12.860644941792,8.16794569283519,3.8929352739358,0.100418485338686,-3.15211398431975,-5.81535705824852,-7.8489386862074,-9.22203184363548,-9.91382183792027,-9.91382183792027,-9.22203184363548,-7.8489386862074,-5.81535705824852,-3.15211398431975,0.100418485338686,3.89293527393579,8.16794569283518,12.860644941792,17.8998964836663,23.2093104018134,28.7084013933529,34.3138088443175,39.9405604915884,45.503360515788,50.9178825389552,56.1020479264789,60.9772700155313,65.4696454087701,69.5110742745093,73.0402926707499,76.0038012440921,78.3566762253983,80.0632504283406,81.0976539275884,81.4442062205058],“y”:[-103.9514135839,-96.7272569645286,-89.333364951488,-81.8818214107778,-74.4855841467896,-67.2567725771366,-60.3049681165698,-53.7355530344323,-47.6481129668761,-42.1349273001306,-37.2795703090719,-33.1556442564058,-29.8256636573921,-27.3401076235166,-25.7366546506163,-25.0396114512906,-25.2595444899146,-26.39311980581,-28.4231535526909,-31.3188724882572,-35.0363804651789,-39.5193238519449,-44.6997457964727,-50.4991163827146,-56.8295230641361,-63.5950033283081,-70.6929993907764,-78.015912866533,-85.4527358518524,-92.8907336909569,-100.217153918483,-107.320935471924,-114.094392264125,-120.434845594598,-126.246180653955,-131.440303526446,-135.93847660392,-139.672512167709,-142.585806044931,-144.634195670056,-145.786629544381,-146.025637945097,-145.347597748481,-143.762787352758,-141.29523086806,-137.982333935407,-133.874316695316,-129.033452501665,-123.533123921125,-117.45671032825,-110.896323959153,-103.9514135839],“text”:“colorName: Violet<br />colorName: Violet”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“longdashdot”},“hoveron”:“points”,“name”:“(Violet,1)”,“legendgroup”:“(Violet,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null},{“x”:[14.9538825030747,14.9020421521225,14.7473069461432,14.492022513131,14.1400587048678,13.6967509339148,13.1688192941964,12.564266691227,11.8922575262205,11.1629787731101,10.3874855544071,9.57753355681268,8.74540082699088,7.90370164889634,7.06519532408811,6.24259275372397,5.44836375425576,4.69454802772296,3.99257265214236,3.35307885865347,2.7857607213015,2.29921820475644,1.90082679761499,1.59662570751155,1.39122631288659,1.28774225919001,1.28774225919001,1.39122631288659,1.59662570751155,1.90082679761499,2.29921820475644,2.7857607213015,3.35307885865347,3.99257265214236,4.69454802772296,5.44836375425576,6.24259275372396,7.06519532408811,7.90370164889634,8.74540082699087,9.57753355681268,10.3874855544071,11.1629787731101,11.8922575262205,12.564266691227,13.1688192941964,13.6967509339148,14.1400587048678,14.492022513131,14.7473069461432,14.9020421521225,14.9538825030747],“y”:[102.55126018409,105.687013734806,108.667313382759,111.446980823236,113.983879131276,116.239551514502,118.179804278889,119.775225170314,121.001629234346,121.840425435502,122.278898478393,122.310401558644,121.934457121671,121.156764101922,119.98911153284,118.449199837132,116.560372506406,114.351262237631,111.855356890639,109.110491846304,106.158276460737,103.043463309861,99.8132697859768,96.516662330229,93.2036141512701,89.9243476823576,86.7285732604601,83.6647355682205,80.779279261949,78.1159449179764,75.7151059701039,73.6131566895007,71.8419604846517,70.4283668845642,69.3938045272778,68.7539563235541,68.5185217199361,68.691069665026,69.2689845078617,70.24350564852,71.5998603398805,73.3174876274142,75.3703500322947,77.7273282530369,80.3526929023856,83.2066461284061,86.2459249093515,89.424456876973,92.6940587266585,96.0051666272154,99.3075875580288,102.55126018409],“text”:“colorName: Yellow<br />colorName: Yellow”,“type”:“scatter”,“mode”:“lines”,“line”:{“width”:1.88976377952756,“color”:“rgba(0,0,0,1)”,“dash”:“dash”},“hoveron”:“points”,“name”:“(Yellow,1)”,“legendgroup”:“(Yellow,1)”,“showlegend”:true,“xaxis”:“x”,“yaxis”:“y”,“hoverinfo”:“text”,“frame”:null}],“layout”:{“margin”:{“t”:48.948742684417,“r”:7.30593607305936,“b”:45.3688340086179,“l”:48.9497716894977},“plot_bgcolor”:“rgba(235,235,235,1)”,“paper_bgcolor”:“rgba(255,255,255,1)”,“font”:{“color”:“rgba(0,0,0,1)”,“family”:“”,“size”:14.6118721461187},“title”:“Colors as chosen by all students<br />95% confidence ellipses”,“titlefont”:{“color”:“rgba(0,0,0,1)”,“family”:“”,“size”:17.5342465753425},“xaxis”:{“domain”:[0,1],“type”:“linear”,“autorange”:false,“range”:[-115.5,225.5],“tickmode”:“array”,“ticktext”:[“-100”,“0”,“100”,“200”],“tickvals”:[-100,-1.4210854715202e-14,100,200],“categoryorder”:“array”,“categoryarray”:[“-100”,“0”,“100”,“200”],“nticks”:null,“ticks”:“outside”,“tickcolor”:“rgba(51,51,51,1)”,“ticklen”:3.65296803652968,“tickwidth”:0.66417600664176,“showticklabels”:true,“tickfont”:{“color”:“rgba(77,77,77,1)”,“family”:“”,“size”:11.689497716895},“tickangle”:-0,“showline”:false,“linecolor”:null,“linewidth”:0,“showgrid”:true,“gridcolor”:“rgba(255,255,255,1)”,“gridwidth”:0.66417600664176,“zeroline”:false,“anchor”:“y”,“title”:“u*”,“titlefont”:{“color”:“rgba(0,0,0,1)”,“family”:“”,“size”:14.6118721461187},“scaleanchor”:“y”,“scaleratio”:1,“hoverformat”:“.2f”},“yaxis”:{“domain”:[0,1],“type”:“linear”,“autorange”:false,“range”:[-195.5,145.5],“tickmode”:“array”,“ticktext”:[“-100”,“0”,“100”],“tickvals”:[-100,2.8421709430404e-14,100],“categoryorder”:“array”,“categoryarray”:[“-100”,“0”,“100”],“nticks”:null,“ticks”:“outside”,“tickcolor”:“rgba(51,51,51,1)”,“ticklen”:3.65296803652968,“tickwidth”:0.66417600664176,“showticklabels”:true,“tickfont”:{“color”:“rgba(77,77,77,1)”,“family”:“”,“size”:11.689497716895},“tickangle”:-0,“showline”:false,“linecolor”:null,“linewidth”:0,“showgrid”:true,“gridcolor”:“rgba(255,255,255,1)”,“gridwidth”:0.66417600664176,“zeroline”:false,“anchor”:“x”,“title”:“v*”,“titlefont”:{“color”:“rgba(0,0,0,1)”,“family”:“”,“size”:14.6118721461187},“scaleanchor”:“x”,“scaleratio”:1,“hoverformat”:“.2f”},“shapes”:[{“type”:“rect”,“fillcolor”:null,“line”:{“color”:null,“width”:0,“linetype”:[]},“yref”:“paper”,“xref”:“paper”,“x0”:0,“x1”:1,“y0”:0,“y1”:1}],“showlegend”:false,“legend”:{“bgcolor”:“rgba(255,255,255,1)”,“bordercolor”:“transparent”,“borderwidth”:1.88976377952756,“font”:{“color”:“rgba(0,0,0,1)”,“family”:“”,“size”:11.689497716895}},“hovermode”:“closest”,“width”:700,“height”:700,“barmode”:“relative”},“config”:{“doubleClick”:“reset”,“modeBarButtonsToAdd”:[{“name”:“Collaborate”,“icon”:{“width”:1000,“ascent”:500,“descent”:-50,“path”:“M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z”},“click”:“function(gd) { \n is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }”}],“cloud”:false},“source”:“A”,“attrs”:{“1c932a00bbe1”:{“label1”:{},“label2”:{},“label3”:{},“x”:{},“y”:{},“colour”:{},“type”:“scatter”},“1c93162ec652”:{“linetype”:{},“x”:{},“y”:{},“colour”:{}}},“cur_data”:“1c932a00bbe1”,“visdat”:{“1c932a00bbe1”:[“function (y) ”,“x”],“1c93162ec652”:[“function (y) ”,“x”]},“highlight”:{“on”:“plotly_click”,“persistent”:false,“dynamic”:false,“selectize”:false,“opacityDim”:0.2,“selected”:{“opacity”:1}},“base_url”:“https://plot.ly”},“evals”:[“config.modeBarButtonsToAdd.0.click”],“jsHooks”:{“render”:[{“code”:“function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\”on\“:\”plotly_click\“,\”persistent\“:false,\”dynamic\“:false,\”selectize\“:false,\”opacityDim\“:0.2,\”selected\“:{\”opacity\“:1}}); }”,“data”:null}]}}</script> <script type=“application/htmlwidget-sizing” data-for=“htmlwidget-d11c6fab7f2ac79a968a”>{“viewer”:{“width”:700,“height”:700,“padding”:15,“fill”:false},“browser”:{“width”:700,“height”:700,“padding”:40,“fill”:false}}</script> </body> </html>